diff --git a/Source/Core/Core/Core.vcproj b/Source/Core/Core/Core.vcproj index 9c19514f97..8045d073db 100644 --- a/Source/Core/Core/Core.vcproj +++ b/Source/Core/Core/Core.vcproj @@ -1118,6 +1118,10 @@ RelativePath=".\Src\IPC_HLE\WII_IPC_HLE_WiiMote.h" > + + data); break; + case WM_REQUEST_STATUS: + WmRequestStatus((wm_request_status*)sr->data); + break; + case WM_IR_PIXEL_CLOCK: + case WM_IR_LOGIC: + LOG(WIIMOTE, " IR Enable 0x%02x 0x%02x", sr->channel, sr->data[0]); + break; + case WM_WRITE_DATA: + WmWriteData((wm_write_data*)sr->data); + break; + case WM_DATA_REPORTING: + WmDataReporting((wm_data_reporting*)sr->data); + break; default: PanicAlert("HidOutputReport: Unknown channel 0x%02x", sr->channel); @@ -381,6 +394,15 @@ void CWII_IPC_HLE_WiiMote::WmLeds(wm_leds* leds) { LOG(WIIMOTE, " Set LEDs"); LOG(WIIMOTE, " Leds: %x", leds->leds); LOG(WIIMOTE, " Rumble: %x", leds->rumble); + + m_Leds = leds->leds; +} + +void CWII_IPC_HLE_WiiMote::WmDataReporting(wm_data_reporting* dr) { + LOG(WIIMOTE, " Set Data reporting mode"); + LOG(WIIMOTE, " Continuous: %x", dr->continuous); + LOG(WIIMOTE, " Rumble: %x", dr->rumble); + LOG(WIIMOTE, " Mode: 0x%02x", dr->mode); } void CWII_IPC_HLE_WiiMote::WmReadData(wm_read_data* rd) { @@ -395,24 +417,107 @@ void CWII_IPC_HLE_WiiMote::WmReadData(wm_read_data* rd) { if(size <= 16 && rd->space == 0) { SendReadDataReply(m_Eeprom, address, (u8)size); } else { - //TODO: return input reports, fragmented and padded on 16 bytes of data. PanicAlert("WmReadData: unimplemented parameters!"); } } +void CWII_IPC_HLE_WiiMote::WmWriteData(wm_write_data* wd) { + u32 address = convert24bit(wd->address); + LOG(WIIMOTE, " Write data"); + LOG(WIIMOTE, " Address space: %x", wd->space); + LOG(WIIMOTE, " Address: 0x%06x", address); + LOG(WIIMOTE, " Size: 0x%02x", wd->size); + LOG(WIIMOTE, " Rumble: %x", wd->rumble); + + if(wd->size <= 16 && wd->space == WM_SPACE_EEPROM) + { + if(address + wd->size > WIIMOTE_EEPROM_SIZE) { + PanicAlert("WmWriteData: address + size out of bounds!"); + return; + } + memcpy(m_Eeprom + address, wd->data, wd->size); + SendWriteDataReply(); + } + else if(wd->size <= 16 && (wd->space == WM_SPACE_REGS1 || wd->space == WM_SPACE_REGS2)) + { + u8* block; + u32 blockSize; + switch((address >> 16) & 0xFE) { + case 0xA2: + block = m_RegSpeaker; + blockSize = WIIMOTE_REG_SPEAKER_SIZE; + break; + case 0xA4: + block = m_RegExt; + blockSize = WIIMOTE_REG_EXT_SIZE; + break; + case 0xB0: + block = m_RegIr; + blockSize = WIIMOTE_REG_IR_SIZE; + break; + default: + PanicAlert("WmWriteData: bad register block!"); + return; + } + address &= 0xFFFF; + if(address + wd->size > blockSize) { + PanicAlert("WmWriteData: address + size out of bounds!"); + return; + } + memcpy(block + address, wd->data, wd->size); + SendWriteDataReply(); + } else { + PanicAlert("WmWriteData: unimplemented parameters!"); + } +} + +void CWII_IPC_HLE_WiiMote::SendWriteDataReply() { + u8 DataFrame[1024]; + u32 Offset = WriteWmReport(DataFrame, WM_WRITE_DATA_REPLY); + + LOG(WIIMOTE, " SendWriteDataReply()"); + + SendL2capData(HID_INPUT_SCID, DataFrame, Offset); +} + +int CWII_IPC_HLE_WiiMote::WriteWmReport(u8* dst, u8 channel) { + u32 Offset = 0; + hid_packet* pHidHeader = (hid_packet*)(dst + Offset); + Offset += sizeof(hid_packet); + pHidHeader->type = HID_TYPE_DATA; + pHidHeader->param = HID_PARAM_INPUT; + + wm_report* pReport = (wm_report*)(dst + Offset); + Offset += sizeof(wm_report); + pReport->channel = channel; + return Offset; +} + +void CWII_IPC_HLE_WiiMote::WmRequestStatus(wm_request_status* rs) { + LOG(WIIMOTE, " Request Status"); + LOG(WIIMOTE, " Rumble: %x", rs->rumble); + + //SendStatusReport(); + u8 DataFrame[1024]; + u32 Offset = WriteWmReport(DataFrame, WM_STATUS_REPORT); + + wm_status_report* pStatus = (wm_status_report*)(DataFrame + Offset); + Offset += sizeof(wm_status_report); + memset(pStatus, 0, sizeof(wm_status_report)); + pStatus->leds = m_Leds; + pStatus->battery = 100; //arbitrary number + + LOG(WIIMOTE, " SendStatusReport()"); + LOG(WIIMOTE, " Flags: 0x%02x", pStatus->padding1[2]); + LOG(WIIMOTE, " Battery: %d", pStatus->battery); + + SendL2capData(HID_INPUT_SCID, DataFrame, Offset); +} + void CWII_IPC_HLE_WiiMote::SendReadDataReply(void* _Base, u16 _Address, u8 _Size) { u8 DataFrame[1024]; - u32 Offset = 0; - - hid_packet* pHidHeader = (hid_packet*)(DataFrame + Offset); - Offset += sizeof(hid_packet); - pHidHeader->type = HID_TYPE_DATA; - pHidHeader->param = HID_PARAM_INPUT; - - wm_report* pReport = (wm_report*)(DataFrame + Offset); - Offset += sizeof(wm_report); - pReport->channel = WM_READ_DATA_REPLY; + u32 Offset = WriteWmReport(DataFrame, WM_READ_DATA_REPLY); _dbg_assert_(WIIMOTE, _Size <= 16); @@ -420,12 +525,19 @@ void CWII_IPC_HLE_WiiMote::SendReadDataReply(void* _Base, u16 _Address, u8 _Size Offset += sizeof(wm_read_data_reply); pReply->buttons = 0; pReply->error = 0; - pReply->size = _Size; + pReply->size = _Size - 1; pReply->address = Common::swap16(_Address); memcpy(pReply->data, _Base, _Size); if(_Size < 16) { memset(pReply->data + _Size, 0, 16 - _Size); } + + LOG(WIIMOTE, " SendReadDataReply()"); + LOG(WIIMOTE, " Buttons: 0x%04x", pReply->buttons); + LOG(WIIMOTE, " Error: 0x%x", pReply->error); + LOG(WIIMOTE, " Size: 0x%x", pReply->size); + LOG(WIIMOTE, " Address: 0x%04x", pReply->address); + SendL2capData(HID_INPUT_SCID, DataFrame, Offset); } diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_WiiMote.h b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_WiiMote.h index 5f8f05f853..f3b0687149 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_WiiMote.h +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_WiiMote.h @@ -21,11 +21,17 @@ #include "WII_IPC_HLE_Device_usb.h" #define WIIMOTE_EEPROM_SIZE (16*1024) +#define WIIMOTE_REG_SPEAKER_SIZE 10 +#define WIIMOTE_REG_EXT_SIZE 0x100 +#define WIIMOTE_REG_IR_SIZE 0x34 class CWII_IPC_HLE_Device_usb_oh1_57e_305; struct wm_report; struct wm_leds; struct wm_read_data; +struct wm_request_status; +struct wm_write_data; +struct wm_data_reporting; class CWII_IPC_HLE_WiiMote { @@ -63,10 +69,16 @@ private: u8 m_Eeprom[WIIMOTE_EEPROM_SIZE]; + u8 m_RegSpeaker[WIIMOTE_REG_SPEAKER_SIZE]; + u8 m_RegExt[WIIMOTE_REG_EXT_SIZE]; + u8 m_RegIr[WIIMOTE_REG_IR_SIZE]; + std::string m_Name; CWII_IPC_HLE_Device_usb_oh1_57e_305* m_pHost; + u8 m_Leds; + struct SChannel { @@ -95,11 +107,17 @@ private: void HidOutputReport(wm_report* sr); void WmLeds(wm_leds* leds); - void WmReadData(wm_read_data* leds); + void WmReadData(wm_read_data* rd); + void WmWriteData(wm_write_data* wd); + void WmRequestStatus(wm_request_status* rs); + void WmDataReporting(wm_data_reporting* dr); void SendConnectionRequest(u16 scid, u16 psm); void SendConfigurationRequest(u16 scid); void SendReadDataReply(void* _Base, u16 _Address, u8 _Size); + void SendWriteDataReply(); + + int WriteWmReport(u8* dst, u8 channel); void CommandConnectionReq(u8 _Ident, u8* _pData, u32 _Size); void CommandCofigurationReq(u8 _Ident, u8* _pData, u32 _Size); diff --git a/Source/Core/Core/Src/IPC_HLE/wiimote_hid.h b/Source/Core/Core/Src/IPC_HLE/wiimote_hid.h index 9f8d910a55..e5557d1afc 100644 --- a/Source/Core/Core/Src/IPC_HLE/wiimote_hid.h +++ b/Source/Core/Core/Src/IPC_HLE/wiimote_hid.h @@ -40,6 +40,47 @@ struct wm_leds { u8 leds : 4; }; +#define WM_DATA_REPORTING 0x12 +struct wm_data_reporting { + u8 rumble : 1; + u8 continuous : 1; + u8 : 6; + u8 mode; +}; + +#define WM_IR_PIXEL_CLOCK 0x13 +#define WM_IR_LOGIC 0x1A + +#define WM_REQUEST_STATUS 0x15 +struct wm_request_status { + u8 rumble : 1; + u8 : 7; +}; + +#define WM_STATUS_REPORT 0x20 +struct wm_status_report { + u8 padding1[2]; + u8 unknown : 1; + u8 extension : 1; + u8 speaker : 1; + u8 ir : 1; + u8 leds : 4; + u8 padding2[2]; + u8 battery; +}; + +#define WM_WRITE_DATA 0x16 +struct wm_write_data { + u8 rumble : 1; + u8 space : 2; //see WM_SPACE_* + u8 : 5; + u8 address[3]; + u8 size; + u8 data[16]; +}; + +#define WM_WRITE_DATA_REPLY 0x22 //empty, afaik + #define WM_READ_DATA 0x17 struct wm_read_data { u8 rumble : 1; diff --git a/Source/Core/Core/Src/State.cpp b/Source/Core/Core/Src/State.cpp index 163de419f5..25dbec2cc4 100644 --- a/Source/Core/Core/Src/State.cpp +++ b/Source/Core/Core/Src/State.cpp @@ -91,7 +91,7 @@ void SaveStateCallback(u64 userdata, int cyclesLate) u8 *ptr = 0; PointerWrap p(&ptr, PointerWrap::MODE_MEASURE); DoState(p); - u64 sz = (u64)ptr; + size_t sz = (size_t)ptr; u8 *buffer = new u8[sz]; ptr = buffer; p.SetMode(PointerWrap::MODE_WRITE); diff --git a/Source/Dolphin.sln b/Source/Dolphin.sln index ae6de896bd..54239d4022 100644 --- a/Source/Dolphin.sln +++ b/Source/Dolphin.sln @@ -3,16 +3,16 @@ Microsoft Visual Studio Solution File, Format Version 9.00 # Visual Studio 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Core", "Core\Core\Core.vcproj", "{F0B874CB-4476-4199-9315-8343D05AE684}" ProjectSection(ProjectDependencies) = postProject - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C} = {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C} + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_VideoDX9", "Plugins\Plugin_VideoDX9\Plugin_VideoDX9.vcproj", "{636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}" ProjectSection(ProjectDependencies) = postProject - {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} + {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_PadSimple", "Plugins\Plugin_PadSimple\Plugin_PadSimple.vcproj", "{9A183B48-ECC2-4121-876A-9B3793686073}" @@ -33,10 +33,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DiscIO", "Core\DiscIO\DiscI EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_VideoOGL", "Plugins\Plugin_VideoOGL\Plugin_VideoOGL.vcproj", "{CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}" ProjectSection(ProjectDependencies) = postProject - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} - {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {0318BA30-EF48-441A-9E10-DC85EFAE39F0} - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} + {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {0318BA30-EF48-441A-9E10-DC85EFAE39F0} + {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Common", "Core\Common\Common.vcproj", "{C573CAF7-EE6A-458E-8049-16C0BF34C2E9}" @@ -44,13 +44,14 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DolphinWX", "Core\DolphinWX\DolphinWX.vcproj", "{A72606EF-C5C1-4954-90AD-F0F93A8D97D9}" ProjectSection(ProjectDependencies) = postProject {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} - {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {0318BA30-EF48-441A-9E10-DC85EFAE39F0} - {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77} = {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77} - {F0B874CB-4476-4199-9315-8343D05AE684} = {F0B874CB-4476-4199-9315-8343D05AE684} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + {33546D62-7F34-4EA6-A88E-D538B36E16BF} = {33546D62-7F34-4EA6-A88E-D538B36E16BF} {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C} = {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C} + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + {F0B874CB-4476-4199-9315-8343D05AE684} = {F0B874CB-4476-4199-9315-8343D05AE684} + {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77} = {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77} + {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} + {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} + {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {0318BA30-EF48-441A-9E10-DC85EFAE39F0} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxBase28", "..\Externals\wxWidgets\build\msw\wx_base.vcproj", "{48AD7E0A-25B1-4974-A1E3-03F8C438D34F}" @@ -59,11 +60,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxCore28", "..\Externals\wx EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DebuggerWX", "Core\DebuggerWX\DebuggerWX.vcproj", "{4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}" ProjectSection(ProjectDependencies) = postProject - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} - {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {0318BA30-EF48-441A-9E10-DC85EFAE39F0} - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} - {F0B874CB-4476-4199-9315-8343D05AE684} = {F0B874CB-4476-4199-9315-8343D05AE684} {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + {F0B874CB-4476-4199-9315-8343D05AE684} = {F0B874CB-4476-4199-9315-8343D05AE684} + {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} + {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {0318BA30-EF48-441A-9E10-DC85EFAE39F0} + {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VideoCommon", "Core\VideoCommon\VideoCommon.vcproj", "{E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}" @@ -75,9 +76,9 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_PadDX9", "Plugins\Pl EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_nJoy_SDL", "Plugins\Plugin_nJoy_SDL\Plugin_nJoy_SDL.vcproj", "{521498BE-6089-4780-8223-E67C22F4E068}" ProjectSection(ProjectDependencies) = postProject - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} - {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {0318BA30-EF48-441A-9E10-DC85EFAE39F0} {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {0318BA30-EF48-441A-9E10-DC85EFAE39F0} + {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_DSP_HLE", "Plugins\Plugin_DSP_HLE\Plugin_DSP_HLE.vcproj", "{D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}" @@ -99,16 +100,13 @@ Global GlobalSection(ProjectConfigurationPlatforms) = postSolution {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|Win32.ActiveCfg = Debug|Win32 {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|Win32.Build.0 = Debug|Win32 - {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|x64.ActiveCfg = Debug|x64 - {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|x64.Build.0 = Debug|x64 + {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|x64.ActiveCfg = Debug|Win32 {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|x64.Build.0 = DebugFast|x64 + {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|x64.ActiveCfg = DebugFast|Win32 {F0B874CB-4476-4199-9315-8343D05AE684}.Release|Win32.ActiveCfg = Release|Win32 {F0B874CB-4476-4199-9315-8343D05AE684}.Release|Win32.Build.0 = Release|Win32 - {F0B874CB-4476-4199-9315-8343D05AE684}.Release|x64.ActiveCfg = Release|x64 - {F0B874CB-4476-4199-9315-8343D05AE684}.Release|x64.Build.0 = Release|x64 + {F0B874CB-4476-4199-9315-8343D05AE684}.Release|x64.ActiveCfg = Release|Win32 {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Debug|Win32.ActiveCfg = Debug|Win32 {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Debug|Win32.Build.0 = Debug|Win32 {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Debug|x64.ActiveCfg = Debug|x64 @@ -207,16 +205,13 @@ Global {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release|x64.Build.0 = Release|x64 {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|Win32.ActiveCfg = Debug|Win32 {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|Win32.Build.0 = Debug|Win32 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|x64.ActiveCfg = Debug|x64 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|x64.Build.0 = Debug|x64 + {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|x64.ActiveCfg = Debug|Win32 {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|x64.Build.0 = DebugFast|x64 + {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|x64.ActiveCfg = DebugFast|Win32 {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|Win32.ActiveCfg = Release|Win32 {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|Win32.Build.0 = Release|Win32 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|x64.ActiveCfg = Release|x64 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|x64.Build.0 = Release|x64 + {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|x64.ActiveCfg = Release|Win32 {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug|Win32.ActiveCfg = Debug|Win32 {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug|Win32.Build.0 = Debug|Win32 {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug|x64.ActiveCfg = Debug|x64