From 5c3bcc8f5ff4fbf7d1b10fd669e83296a98dab28 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Sun, 20 Jan 2013 07:08:15 +0100 Subject: [PATCH 001/205] Revert "Readd the old AXWii (rename the new version to NewAXWii) and set it as default" Put back the new AX Wii as the default in this development branch. --- Source/Core/Core/CMakeLists.txt | 3 +- Source/Core/Core/Core.vcxproj | 6 +- Source/Core/Core/Core.vcxproj.filters | 14 +- .../Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp | 4 - .../Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.h | 2 +- .../{UCode_AX_Structs.h => UCode_AXStructs.h} | 0 .../Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp | 478 +++++++++++------- .../Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.h | 75 ++- .../Src/HW/DSPHLE/UCodes/UCode_AXWii_ADPCM.h | 92 ---- .../HW/DSPHLE/UCodes/UCode_AXWii_Structs.h | 365 ------------- .../Src/HW/DSPHLE/UCodes/UCode_AXWii_Voice.h | 271 ---------- .../Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h | 2 +- .../Src/HW/DSPHLE/UCodes/UCode_NewAXWii.cpp | 383 -------------- .../Src/HW/DSPHLE/UCodes/UCode_NewAXWii.h | 80 --- .../Core/Core/Src/HW/DSPHLE/UCodes/UCodes.cpp | 11 +- 15 files changed, 354 insertions(+), 1432 deletions(-) rename Source/Core/Core/Src/HW/DSPHLE/UCodes/{UCode_AX_Structs.h => UCode_AXStructs.h} (100%) delete mode 100644 Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii_ADPCM.h delete mode 100644 Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii_Structs.h delete mode 100644 Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii_Voice.h delete mode 100644 Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_NewAXWii.cpp delete mode 100644 Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_NewAXWii.h diff --git a/Source/Core/Core/CMakeLists.txt b/Source/Core/Core/CMakeLists.txt index 6ffeeaec3a..79ad6b60cb 100644 --- a/Source/Core/Core/CMakeLists.txt +++ b/Source/Core/Core/CMakeLists.txt @@ -70,8 +70,7 @@ set(SRCS Src/ActionReplay.cpp Src/HW/CPU.cpp Src/HW/DSP.cpp Src/HW/DSPHLE/UCodes/UCode_AX.cpp - Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp - Src/HW/DSPHLE/UCodes/UCode_NewAXWii.cpp + Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp Src/HW/DSPHLE/UCodes/UCode_CARD.cpp Src/HW/DSPHLE/UCodes/UCode_InitAudioSystem.cpp Src/HW/DSPHLE/UCodes/UCode_ROM.cpp diff --git a/Source/Core/Core/Core.vcxproj b/Source/Core/Core/Core.vcxproj index bd3d97f11b..ddd8b0dfd8 100644 --- a/Source/Core/Core/Core.vcxproj +++ b/Source/Core/Core/Core.vcxproj @@ -261,7 +261,6 @@ - @@ -464,11 +463,8 @@ - + - - - diff --git a/Source/Core/Core/Core.vcxproj.filters b/Source/Core/Core/Core.vcxproj.filters index 246dafd972..a9de67dbb5 100644 --- a/Source/Core/Core/Core.vcxproj.filters +++ b/Source/Core/Core/Core.vcxproj.filters @@ -197,9 +197,6 @@ HW %28Flipper/Hollywood%29\DSP Interface + HLE\HLE\uCodes - - HW %28Flipper/Hollywood%29\DSP Interface + HLE\HLE\uCodes - HW %28Flipper/Hollywood%29\DSP Interface + HLE\HLE\uCodes @@ -736,21 +733,12 @@ HW %28Flipper/Hollywood%29\DSP Interface + HLE\HLE\uCodes - + HW %28Flipper/Hollywood%29\DSP Interface + HLE\HLE\uCodes HW %28Flipper/Hollywood%29\DSP Interface + HLE\HLE\uCodes - - HW %28Flipper/Hollywood%29\DSP Interface + HLE\HLE\uCodes - - - HW %28Flipper/Hollywood%29\DSP Interface + HLE\HLE\uCodes - - - HW %28Flipper/Hollywood%29\DSP Interface + HLE\HLE\uCodes - HW %28Flipper/Hollywood%29\DSP Interface + HLE\HLE\uCodes diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp index 81ef7c6482..57032a774e 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp @@ -200,11 +200,7 @@ void CUCode_AX::HandleCommandList() u16 idx = m_cmdlist[curr_idx++]; addr_hi = m_cmdlist[curr_idx++]; addr_lo = m_cmdlist[curr_idx++]; - // TODO - (void)samp_val; - (void)idx; - break; } diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.h index 8fd2a2af5f..7158c197e8 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.h @@ -27,7 +27,7 @@ #define _UCODE_AX_H #include "UCodes.h" -#include "UCode_AX_Structs.h" +#include "UCode_AXStructs.h" // We can't directly use the mixer_control field from the PB because it does // not mean the same in all AX versions. The AX UCode converts the diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Structs.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXStructs.h similarity index 100% rename from Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Structs.h rename to Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXStructs.h diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp index f4effbba6d..8c74c7a1e7 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp @@ -21,247 +21,363 @@ #include "Mixer.h" #include "UCodes.h" -#include "UCode_AXWii_Structs.h" -#include "UCode_AX.h" // for some functions in CUCode_AX +#include "UCode_AXStructs.h" #include "UCode_AXWii.h" -#include "UCode_AXWii_Voice.h" + +#define AX_WII +#include "UCode_AX_Voice.h" CUCode_AXWii::CUCode_AXWii(DSPHLE *dsp_hle, u32 l_CRC) - : IUCode(dsp_hle, l_CRC) - , m_addressPBs(0xFFFFFFFF) + : CUCode_AX(dsp_hle, l_CRC) { - // we got loaded - m_rMailHandler.PushMail(DSP_INIT); - - templbuffer = new int[1024 * 1024]; - temprbuffer = new int[1024 * 1024]; - - wiisportsHack = m_CRC == 0xfa450138; + WARN_LOG(DSPHLE, "Instantiating CUCode_AXWii"); } CUCode_AXWii::~CUCode_AXWii() { - m_rMailHandler.Clear(); - delete [] templbuffer; - delete [] temprbuffer; } -void CUCode_AXWii::HandleMail(u32 _uMail) +void CUCode_AXWii::HandleCommandList() { - if (m_UploadSetupInProgress) + // Temp variables for addresses computation + u16 addr_hi, addr_lo; + u16 addr2_hi, addr2_lo; + u16 volume; + +// WARN_LOG(DSPHLE, "Command list:"); +// for (u32 i = 0; m_cmdlist[i] != CMD_END; ++i) +// WARN_LOG(DSPHLE, "%04x", m_cmdlist[i]); +// WARN_LOG(DSPHLE, "-------------"); + + u32 curr_idx = 0; + bool end = false; + while (!end) { - PrepareBootUCode(_uMail); - return; - } - else if ((_uMail & 0xFFFF0000) == MAIL_AX_ALIST) - { - // We are expected to get a new CmdBlock - DEBUG_LOG(DSPHLE, "GetNextCmdBlock (%ibytes)", (u16)_uMail); - } - else switch(_uMail) - { - case 0xCDD10000: // Action 0 - AX_ResumeTask() - m_rMailHandler.PushMail(DSP_RESUME); - break; + u16 cmd = m_cmdlist[curr_idx++]; - case 0xCDD10001: // Action 1 - new ucode upload - DEBUG_LOG(DSPHLE,"DSP IROM - New Ucode!"); - // TODO find a better way to protect from HLEMixer? - soundStream->GetMixer()->SetHLEReady(false); - m_UploadSetupInProgress = true; - break; + switch (cmd) + { + // Some of these commands are unknown, or unused in this AX HLE. + // We still need to skip their arguments using "curr_idx += N". - case 0xCDD10002: // Action 2 - IROM_Reset(); ( WII: De Blob, Cursed Mountain,...) - DEBUG_LOG(DSPHLE,"DSP IROM - Reset!"); - m_DSPHLE->SetUCode(UCODE_ROM); - return; + case CMD_SETUP: + addr_hi = m_cmdlist[curr_idx++]; + addr_lo = m_cmdlist[curr_idx++]; + SetupProcessing(HILO_TO_32(addr)); + break; - case 0xCDD10003: // Action 3 - AX_GetNextCmdBlock() - break; + case CMD_UNK_01: curr_idx += 2; break; + case CMD_UNK_02: curr_idx += 2; break; + case CMD_UNK_03: curr_idx += 2; break; - default: - DEBUG_LOG(DSPHLE, " >>>> u32 MAIL : AXTask Mail (%08x)", _uMail); - AXTask(_uMail); - break; + case CMD_PROCESS: + addr_hi = m_cmdlist[curr_idx++]; + addr_lo = m_cmdlist[curr_idx++]; + ProcessPBList(HILO_TO_32(addr)); + break; + + case CMD_MIX_AUXA: + case CMD_MIX_AUXB: + case CMD_MIX_AUXC: + volume = m_cmdlist[curr_idx++]; + addr_hi = m_cmdlist[curr_idx++]; + addr_lo = m_cmdlist[curr_idx++]; + addr2_hi = m_cmdlist[curr_idx++]; + addr2_lo = m_cmdlist[curr_idx++]; + MixAUXSamples(cmd - CMD_MIX_AUXA, HILO_TO_32(addr), HILO_TO_32(addr2), volume); + break; + + // These two go together and manipulate some AUX buffers. + case CMD_UNK_08: curr_idx += 13; break; + case CMD_UNK_09: curr_idx += 13; break; + + case CMD_UNK_0A: curr_idx += 4; break; + + case CMD_OUTPUT: + volume = m_cmdlist[curr_idx++]; + addr_hi = m_cmdlist[curr_idx++]; + addr_lo = m_cmdlist[curr_idx++]; + addr2_hi = m_cmdlist[curr_idx++]; + addr2_lo = m_cmdlist[curr_idx++]; + OutputSamples(HILO_TO_32(addr2), HILO_TO_32(addr), volume); + break; + + case CMD_UNK_0C: curr_idx += 5; break; + + case CMD_WM_OUTPUT: + { + u32 addresses[4] = { + (u32)(m_cmdlist[curr_idx + 0] << 16) | m_cmdlist[curr_idx + 1], + (u32)(m_cmdlist[curr_idx + 2] << 16) | m_cmdlist[curr_idx + 3], + (u32)(m_cmdlist[curr_idx + 4] << 16) | m_cmdlist[curr_idx + 5], + (u32)(m_cmdlist[curr_idx + 6] << 16) | m_cmdlist[curr_idx + 7], + }; + curr_idx += 8; + OutputWMSamples(addresses); + break; + } + + case CMD_END: + end = true; + break; + } } } -void CUCode_AXWii::MixAdd(short* _pBuffer, int _iSize) +void CUCode_AXWii::SetupProcessing(u32 init_addr) { - AXPBWii PB; + // TODO: should be easily factorizable with AX + s16 init_data[60]; - if (_iSize > 1024 * 1024) - _iSize = 1024 * 1024; + for (u32 i = 0; i < 60; ++i) + init_data[i] = HLEMemory_Read_U16(init_addr + 2 * i); - memset(templbuffer, 0, _iSize * sizeof(int)); - memset(temprbuffer, 0, _iSize * sizeof(int)); + // List of all buffers we have to initialize + struct { + int* ptr; + u32 samples; + } buffers[] = { + { m_samples_left, 32 }, + { m_samples_right, 32 }, + { m_samples_surround, 32 }, + { m_samples_auxA_left, 32 }, + { m_samples_auxA_right, 32 }, + { m_samples_auxA_surround, 32 }, + { m_samples_auxB_left, 32 }, + { m_samples_auxB_right, 32 }, + { m_samples_auxB_surround, 32 }, + { m_samples_auxC_left, 32 }, + { m_samples_auxC_right, 32 }, + { m_samples_auxC_surround, 32 }, - u32 blockAddr = m_addressPBs; - if (!blockAddr) - return; + { m_samples_wm0, 6 }, + { m_samples_aux0, 6 }, + { m_samples_wm1, 6 }, + { m_samples_aux1, 6 }, + { m_samples_wm2, 6 }, + { m_samples_aux2, 6 }, + { m_samples_wm3, 6 }, + { m_samples_aux3, 6 } + }; - for (int i = 0; i < NUMBER_OF_PBS; i++) + u32 init_idx = 0; + for (u32 i = 0; i < sizeof (buffers) / sizeof (buffers[0]); ++i) { - if (!ReadPB(blockAddr, PB)) - break; + s32 init_val = (s32)((init_data[init_idx] << 16) | init_data[init_idx + 1]); + s16 delta = (s16)init_data[init_idx + 2]; - if (wiisportsHack) - MixAddVoice(*(AXPBWiiSports*)&PB, templbuffer, temprbuffer, _iSize); + init_idx += 3; + + if (!init_val) + memset(buffers[i].ptr, 0, 3 * buffers[i].samples * sizeof (int)); else - MixAddVoice(PB, templbuffer, temprbuffer, _iSize); - - if (!WritePB(blockAddr, PB)) - break; - - // next PB, or done - blockAddr = (PB.next_pb_hi << 16) | PB.next_pb_lo; - if (!blockAddr) - break; - } - - // We write the sound to _pBuffer - if (_pBuffer) - { - for (int i = 0; i < _iSize; i++) { - // Clamp into 16-bit. Maybe we should add a volume compressor here. - int left = templbuffer[i] + _pBuffer[0]; - int right = temprbuffer[i] + _pBuffer[1]; - if (left < -32767) left = -32767; - else if (left > 32767) left = 32767; - if (right < -32767) right = -32767; - else if (right > 32767) right = 32767; - *_pBuffer++ = left; - *_pBuffer++ = right; + for (u32 j = 0; j < 3 * buffers[i].samples; ++j) + { + buffers[i].ptr[j] = init_val; + init_val += delta; + } } } } - -void CUCode_AXWii::Update(int cycles) +AXMixControl CUCode_AXWii::ConvertMixerControl(u32 mixer_control) { - if (NeedsResumeMail()) + u32 ret = 0; + + if (mixer_control & 0x00000001) ret |= MIX_L; + if (mixer_control & 0x00000002) ret |= MIX_R; + if (mixer_control & 0x00000004) ret |= MIX_L_RAMP | MIX_R_RAMP; + if (mixer_control & 0x00000008) ret |= MIX_S; + if (mixer_control & 0x00000010) ret |= MIX_S_RAMP; + if (mixer_control & 0x00010000) ret |= MIX_AUXA_L; + if (mixer_control & 0x00020000) ret |= MIX_AUXA_R; + if (mixer_control & 0x00040000) ret |= MIX_AUXA_L_RAMP | MIX_AUXA_R_RAMP; + if (mixer_control & 0x00080000) ret |= MIX_AUXA_S; + if (mixer_control & 0x00100000) ret |= MIX_AUXA_S_RAMP; + if (mixer_control & 0x00200000) ret |= MIX_AUXB_L; + if (mixer_control & 0x00400000) ret |= MIX_AUXB_R; + if (mixer_control & 0x00800000) ret |= MIX_AUXB_L_RAMP | MIX_AUXB_R_RAMP; + if (mixer_control & 0x01000000) ret |= MIX_AUXB_S; + if (mixer_control & 0x02000000) ret |= MIX_AUXB_S_RAMP; + if (mixer_control & 0x04000000) ret |= MIX_AUXC_L; + if (mixer_control & 0x08000000) ret |= MIX_AUXC_R; + if (mixer_control & 0x10000000) ret |= MIX_AUXC_L_RAMP | MIX_AUXC_R_RAMP; + if (mixer_control & 0x20000000) ret |= MIX_AUXC_S; + if (mixer_control & 0x40000000) ret |= MIX_AUXC_S_RAMP; + + return (AXMixControl)ret; +} + +void CUCode_AXWii::ProcessPBList(u32 pb_addr) +{ + const u32 spms = 32; + + AXPBWii pb; + + while (pb_addr) { - m_rMailHandler.PushMail(DSP_RESUME); - DSP::GenerateDSPInterruptFromDSPEmu(DSP::INT_DSP); - } - // check if we have to send something - else if (!m_rMailHandler.IsEmpty()) - { - DSP::GenerateDSPInterruptFromDSPEmu(DSP::INT_DSP); + AXBuffers buffers = {{ + m_samples_left, + m_samples_right, + m_samples_surround, + m_samples_auxA_left, + m_samples_auxA_right, + m_samples_auxA_surround, + m_samples_auxB_left, + m_samples_auxB_right, + m_samples_auxB_surround, + m_samples_auxC_left, + m_samples_auxC_right, + m_samples_auxC_surround + }}; + + if (!ReadPB(pb_addr, pb)) + break; + + for (int curr_ms = 0; curr_ms < 3; ++curr_ms) + { + Process1ms(pb, buffers, ConvertMixerControl(HILO_TO_32(pb.mixer_control))); + + // Forward the buffers + for (u32 i = 0; i < sizeof (buffers.ptrs) / sizeof (buffers.ptrs[0]); ++i) + buffers.ptrs[i] += spms; + } + + WritePB(pb_addr, pb); + pb_addr = HILO_TO_32(pb.next_pb); } } -// AX seems to bootup one task only and waits for resume-callbacks -// everytime the DSP has "spare time" it sends a resume-mail to the CPU -// and the __DSPHandler calls a AX-Callback which generates a new AXFrame -bool CUCode_AXWii::AXTask(u32& _uMail) +void CUCode_AXWii::MixAUXSamples(int aux_id, u32 write_addr, u32 read_addr, u16 volume) { - u32 uAddress = _uMail; - //u32 Addr__AXStudio; - //u32 Addr__AXOutSBuffer; - bool bExecuteList = true; + int* buffers[3] = { 0 }; + int* main_buffers[3] = { + m_samples_left, + m_samples_right, + m_samples_surround + }; -/* - for (int i=0;i<64;i++) { - NOTICE_LOG(DSPHLE,"%x - %08x",uAddress+(i*4),HLEMemory_Read_U32(uAddress+(i*4))); - } -*/ - - while (bExecuteList) + switch (aux_id) { - u16 iCommand = HLEMemory_Read_U16(uAddress); - uAddress += 2; - //NOTICE_LOG(DSPHLE,"AXWII - AXLIST CMD %X",iCommand); + case 0: + buffers[0] = m_samples_auxA_left; + buffers[1] = m_samples_auxA_right; + buffers[2] = m_samples_auxA_surround; + break; - switch (iCommand) + case 1: + buffers[0] = m_samples_auxB_left; + buffers[1] = m_samples_auxB_right; + buffers[2] = m_samples_auxB_surround; + break; + + case 2: + buffers[0] = m_samples_auxC_left; + buffers[1] = m_samples_auxC_right; + buffers[2] = m_samples_auxC_surround; + break; + } + + // Send the content of AUX buffers to the CPU + if (write_addr) + { + int* ptr = (int*)HLEMemory_Get_Pointer(write_addr); + for (u32 i = 0; i < 3; ++i) + for (u32 j = 0; j < 3 * 32; ++j) + *ptr++ = Common::swap32(buffers[i][j]); + } + + // Then read the buffers from the CPU and add to our main buffers. + int* ptr = (int*)HLEMemory_Get_Pointer(read_addr); + for (u32 i = 0; i < 3; ++i) + for (u32 j = 0; j < 3 * 32; ++j) { - case 0x0000: - //Addr__AXStudio = HLEMemory_Read_U32(uAddress); - uAddress += 4; - break; + s64 new_val = main_buffers[i][j] + Common::swap32(*ptr++); + main_buffers[i][j] = (new_val * volume) >> 15; + } +} - case 0x0001: - uAddress += 4; - break; +void CUCode_AXWii::OutputSamples(u32 lr_addr, u32 surround_addr, u16 volume) +{ + int surround_buffer[3 * 32] = { 0 }; - case 0x0003: - uAddress += 4; - break; + for (u32 i = 0; i < 3 * 32; ++i) + surround_buffer[i] = Common::swap32(m_samples_surround[i]); + memcpy(HLEMemory_Get_Pointer(surround_addr), surround_buffer, sizeof (surround_buffer)); - case 0x0004: - // PBs are here now - m_addressPBs = HLEMemory_Read_U32(uAddress); - if (soundStream) - soundStream->GetMixer()->SetHLEReady(true); -// soundStream->Update(); - uAddress += 4; - break; + short buffer[3 * 32 * 2]; - case 0x0005: - if (!wiisportsHack) - uAddress += 10; - break; + // Clamp internal buffers to 16 bits. + for (u32 i = 0; i < 3 * 32; ++i) + { + int left = m_samples_left[i]; + int right = m_samples_right[i]; - case 0x0006: - uAddress += 10; - break; + // Apply global volume. Cast to s64 to avoid overflow. + left = ((s64)left * volume) >> 15; + right = ((s64)right * volume) >> 15; - case 0x0007: // AXLIST_SBUFFER - //Addr__AXOutSBuffer = HLEMemory_Read_U32(uAddress); - uAddress += 10; - break; + if (left < -32767) left = -32767; + if (left > 32767) left = 32767; + if (right < -32767) right = -32767; + if (right > 32767) right = 32767; - case 0x0008: - uAddress += 26; - break; + m_samples_left[i] = left; + m_samples_right[i] = right; + } - case 0x000a: - uAddress += wiisportsHack ? 4 : 8; // AXLIST_COMPRESSORTABLE - break; + for (u32 i = 0; i < 3 * 32; ++i) + { + buffer[2 * i] = Common::swap16(m_samples_left[i]); + buffer[2 * i + 1] = Common::swap16(m_samples_right[i]); + } - case 0x000b: - uAddress += wiisportsHack ? 2 : 10; - break; + memcpy(HLEMemory_Get_Pointer(lr_addr), buffer, sizeof (buffer)); +} - case 0x000c: - uAddress += wiisportsHack ? 8 : 10; - break; +void CUCode_AXWii::OutputWMSamples(u32* addresses) +{ + int* buffers[] = { + m_samples_wm0, + m_samples_wm1, + m_samples_wm2, + m_samples_wm3 + }; - case 0x000d: - uAddress += 16; - break; - - case 0x000e: - if (wiisportsHack) - uAddress += 16; - else - bExecuteList = false; - break; - - case 0x000f: // only for Wii Sports uCode - bExecuteList = false; - break; - - default: - INFO_LOG(DSPHLE,"DSPHLE - AXwii - AXLIST - Unknown CMD: %x",iCommand); - // unknown command so stop the execution of this TaskList - bExecuteList = false; - break; + for (u32 i = 0; i < 4; ++i) + { + int* in = buffers[i]; + u16* out = (u16*)HLEMemory_Get_Pointer(addresses[i]); + for (u32 j = 0; j < 3 * 6; ++j) + { + int sample = in[j]; + if (sample < -32767) sample = -32767; + if (sample > 32767) sample = 32767; + out[j] = Common::swap16((u16)sample); } } - - m_rMailHandler.PushMail(DSP_YIELD); //its here in case there is a CMD fuckup - return true; } void CUCode_AXWii::DoState(PointerWrap &p) { - std::lock_guard lk(m_csMix); - - p.Do(m_addressPBs); - p.Do(wiisportsHack); + std::lock_guard lk(m_processing); DoStateShared(p); + DoAXState(p); + + p.Do(m_samples_auxC_left); + p.Do(m_samples_auxC_right); + p.Do(m_samples_auxC_surround); + + p.Do(m_samples_wm0); + p.Do(m_samples_wm1); + p.Do(m_samples_wm2); + p.Do(m_samples_wm3); + + p.Do(m_samples_aux0); + p.Do(m_samples_aux1); + p.Do(m_samples_aux2); + p.Do(m_samples_aux3); } diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.h index dc07e71a63..3a66c30868 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.h @@ -12,44 +12,69 @@ // A copy of the GPL 2.0 should have been included with the program. // If not, see http://www.gnu.org/licenses/ -// Official SVN repository and contact information can be found at +// Official Git repository and contact information can be found at // http://code.google.com/p/dolphin-emu/ -#ifndef _UCODE_AXWII -#define _UCODE_AXWII +#ifndef _UCODE_AXWII_H +#define _UCODE_AXWII_H -#include "UCode_AXWii_Structs.h" +#include "UCode_AX.h" -#define NUMBER_OF_PBS 128 - -class CUCode_AXWii : public IUCode +class CUCode_AXWii : public CUCode_AX { public: CUCode_AXWii(DSPHLE *dsp_hle, u32 _CRC); virtual ~CUCode_AXWii(); - void HandleMail(u32 _uMail); - void MixAdd(short* _pBuffer, int _iSize); - void Update(int cycles); - void DoState(PointerWrap &p); + virtual void DoState(PointerWrap &p); + +protected: + int m_samples_auxC_left[32 * 3]; + int m_samples_auxC_right[32 * 3]; + int m_samples_auxC_surround[32 * 3]; + + // Wiimote buffers + int m_samples_wm0[6 * 3]; + int m_samples_aux0[6 * 3]; + int m_samples_wm1[6 * 3]; + int m_samples_aux1[6 * 3]; + int m_samples_wm2[6 * 3]; + int m_samples_aux2[6 * 3]; + int m_samples_wm3[6 * 3]; + int m_samples_aux3[6 * 3]; + + // Convert a mixer_control bitfield to our internal representation for that + // value. Required because that bitfield has a different meaning in some + // versions of AX. + AXMixControl ConvertMixerControl(u32 mixer_control); + + virtual void HandleCommandList(); + + void SetupProcessing(u32 init_addr); + void ProcessPBList(u32 pb_addr); + void MixAUXSamples(int aux_id, u32 write_addr, u32 read_addr, u16 volume); + void OutputSamples(u32 lr_addr, u32 surround_addr, u16 volume); + void OutputWMSamples(u32* addresses); // 4 addresses private: - enum + enum CmdType { - MAIL_AX_ALIST = 0xBABE0000, + CMD_SETUP = 0x00, + CMD_UNK_01 = 0x01, + CMD_UNK_02 = 0x02, + CMD_UNK_03 = 0x03, + CMD_PROCESS = 0x04, + CMD_MIX_AUXA = 0x05, + CMD_MIX_AUXB = 0x06, + CMD_MIX_AUXC = 0x07, + CMD_UNK_08 = 0x08, + CMD_UNK_09 = 0x09, + CMD_UNK_0A = 0x0A, + CMD_OUTPUT = 0x0B, + CMD_UNK_0C = 0x0C, + CMD_WM_OUTPUT = 0x0D, + CMD_END = 0x0E }; - - // PBs - u32 m_addressPBs; - - bool wiisportsHack; - - int *templbuffer; - int *temprbuffer; - - // ax task message handler - bool AXTask(u32& _uMail); - void SendMail(u32 _uMail); }; #endif // _UCODE_AXWII diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii_ADPCM.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii_ADPCM.h deleted file mode 100644 index 9130bb9da4..0000000000 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii_ADPCM.h +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _UCODE_AX_ADPCM_H -#define _UCODE_AX_ADPCM_H - -#include "../../DSP.h" - -static inline s16 ADPCM_Step(PBADPCMInfo &adpcm, u32& samplePos, u32 newSamplePos, u16 frac) -{ - while (samplePos < newSamplePos) - { - if ((samplePos & 15) == 0) - { - adpcm.pred_scale = DSP::ReadARAM((samplePos & ~15) >> 1); - samplePos += 2; - newSamplePos += 2; - } - - int scale = 1 << (adpcm.pred_scale & 0xF); - int coef_idx = (adpcm.pred_scale >> 4) & 7; - - s32 coef1 = adpcm.coefs[coef_idx * 2 + 0]; - s32 coef2 = adpcm.coefs[coef_idx * 2 + 1]; - - int temp = (samplePos & 1) ? - (DSP::ReadARAM(samplePos >> 1) & 0xF) : - (DSP::ReadARAM(samplePos >> 1) >> 4); - - if (temp >= 8) - temp -= 16; - - // 0x400 = 0.5 in 11-bit fixed point - int val = (scale * temp) + ((0x400 + coef1 * adpcm.yn1 + coef2 * adpcm.yn2) >> 11); - - if (val > 0x7FFF) - val = 0x7FFF; - else if (val < -0x7FFF) - val = -0x7FFF; - - adpcm.yn2 = adpcm.yn1; - adpcm.yn1 = val; - - samplePos++; - } - - return adpcm.yn1; -} - -// TODO: WTF is going on here?!? -// Volume control (ramping) -static inline u16 ADPCM_Vol(u16 vol, u16 delta) -{ - int x = vol; - if (delta && delta < 0x5000) - x += delta * 20 * 8; // unsure what the right step is - //x += 1 * 20 * 8; - else if (delta && delta > 0x5000) - //x -= (0x10000 - delta); // this is to small, it's often 1 - x -= (0x10000 - delta) * 20 * 16; // if this was 20 * 8 the sounds in Fire Emblem and Paper Mario - // did not have time to go to zero before the were closed - //x -= 1 * 20 * 16; - - // make lower limits - if (x < 0) x = 0; - //if (pb.mixer_control < 1000 && x < pb.mixer_control) x = pb.mixer_control; // does this make - // any sense? - - // make upper limits - //if (mixer_control > 1000 && x > mixer_control) x = mixer_control; // maybe mixer_control also - // has a volume target? - //if (x >= 0x7fff) x = 0x7fff; // this seems a little high - //if (x >= 0x4e20) x = 0x4e20; // add a definitive limit at 20 000 - if (x >= 0x8000) x = 0x8000; // clamp to 32768; - return x; // update volume -} - -#endif // _UCODE_AX_ADPCM_H diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii_Structs.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii_Structs.h deleted file mode 100644 index 7f082740de..0000000000 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii_Structs.h +++ /dev/null @@ -1,365 +0,0 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _UCODE_AX_STRUCTS_H -#define _UCODE_AX_STRUCTS_H - -struct PBMixer -{ - u16 left; - u16 left_delta; - u16 right; - u16 right_delta; - - u16 unknown3[8]; - u16 unknown4[6]; -}; - -struct PBMixerWii -{ - // volume mixing values in .15, 0x8000 = ca. 1.0 - u16 left; - u16 left_delta; - u16 right; - u16 right_delta; - - u16 auxA_left; - u16 auxA_left_delta; - u16 auxA_right; - u16 auxA_right_delta; - - u16 auxB_left; - u16 auxB_left_delta; - u16 auxB_right; - u16 auxB_right_delta; - - // Note: the following elements usage changes a little in DPL2 mode - // TODO: implement and comment it in the mixer - u16 auxC_left; - u16 auxC_left_delta; - u16 auxC_right; - u16 auxC_right_delta; - - u16 surround; - u16 surround_delta; - u16 auxA_surround; - u16 auxA_surround_delta; - u16 auxB_surround; - u16 auxB_surround_delta; - u16 auxC_surround; - u16 auxC_surround_delta; -}; - -struct PBMixerWM -{ - u16 main0; - u16 main0_delta; - u16 aux0; - u16 aux0_delta; - - u16 main1; - u16 main1_delta; - u16 aux1; - u16 aux1_delta; - - u16 main2; - u16 main2_delta; - u16 aux2; - u16 aux2_delta; - - u16 main3; - u16 main3_delta; - u16 aux3; - u16 aux3_delta; -}; - -struct PBInitialTimeDelay -{ - u16 on; - u16 addrMemHigh; - u16 addrMemLow; - u16 offsetLeft; - u16 offsetRight; - u16 targetLeft; - u16 targetRight; -}; - -// Update data - read these each 1ms subframe and use them! -// It seems that to provide higher time precisions for MIDI events, some games -// use this thing to update the parameter blocks per 1ms sub-block (a block is 5ms). -// Using this data should fix games that are missing MIDI notes. -struct PBUpdates -{ - u16 num_updates[5]; - u16 data_hi; // These point to main RAM. Not sure about the structure of the data. - u16 data_lo; -}; - -// The DSP stores the final sample values for each voice after every frame of processing. -// The values are then accumulated for all dropped voices, added to the next frame of audio, -// and ramped down on a per-sample basis to provide a gentle "roll off." -struct PBDpop -{ - s16 unknown[9]; -}; - -struct PBDpopWii -{ - s16 left; - s16 auxA_left; - s16 auxB_left; - s16 auxC_left; - - s16 right; - s16 auxA_right; - s16 auxB_right; - s16 auxC_right; - - s16 surround; - s16 auxA_surround; - s16 auxB_surround; - s16 auxC_surround; -}; - -struct PBDpopWM -{ - s16 aMain0; - s16 aMain1; - s16 aMain2; - s16 aMain3; - - s16 aAux0; - s16 aAux1; - s16 aAux2; - s16 aAux3; -}; - -struct PBVolumeEnvelope -{ - u16 cur_volume; // volume at start of frame - s16 cur_volume_delta; // signed per sample delta (96 samples per frame) -}; - -struct PBUnknown2 -{ - u16 unknown_reserved[3]; -}; - -struct PBAudioAddr -{ - u16 looping; - u16 sample_format; - u16 loop_addr_hi; // Start of loop (this will point to a shared "zero" buffer if one-shot mode is active) - u16 loop_addr_lo; - u16 end_addr_hi; // End of sample (and loop), inclusive - u16 end_addr_lo; - u16 cur_addr_hi; - u16 cur_addr_lo; -}; - -struct PBADPCMInfo -{ - s16 coefs[16]; - u16 gain; - u16 pred_scale; - s16 yn1; - s16 yn2; -}; - -struct PBSampleRateConverter -{ - // ratio = (f32)ratio * 0x10000; - // valid range is 1/512 to 4.0000 - u16 ratio_hi; // integer part of sampling ratio - u16 ratio_lo; // fraction part of sampling ratio - u16 cur_addr_frac; - u16 last_samples[4]; -}; - -struct PBSampleRateConverterWM -{ - u16 currentAddressFrac; - u16 last_samples[4]; -}; - -struct PBADPCMLoopInfo -{ - u16 pred_scale; - u16 yn1; - u16 yn2; -}; - -struct AXPB -{ - u16 next_pb_hi; - u16 next_pb_lo; - u16 this_pb_hi; - u16 this_pb_lo; - - u16 src_type; // Type of sample rate converter (none, ?, linear) - u16 coef_select; - u16 mixer_control; - - u16 running; // 1=RUN 0=STOP - u16 is_stream; // 1 = stream, 0 = one shot - - PBMixer mixer; - PBInitialTimeDelay initial_time_delay; - PBUpdates updates; - PBDpop dpop; - PBVolumeEnvelope vol_env; - PBUnknown2 unknown3; - PBAudioAddr audio_addr; - PBADPCMInfo adpcm; - PBSampleRateConverter src; - PBADPCMLoopInfo adpcm_loop_info; - u16 unknown_maybe_padding[3]; -}; - -struct PBLowPassFilter -{ - u16 enabled; - u16 yn1; - u16 a0; - u16 b0; -}; - -struct PBBiquadFilter -{ - - u16 on; // on = 2, off = 0 - u16 xn1; // History data - u16 xn2; - u16 yn1; - u16 yn2; - u16 b0; // Filter coefficients - u16 b1; - u16 b2; - u16 a1; - u16 a2; - -}; - -union PBInfImpulseResponseWM -{ - PBLowPassFilter lpf; - PBBiquadFilter biquad; -}; - -struct AXPBWii -{ - u16 next_pb_hi; - u16 next_pb_lo; - u16 this_pb_hi; - u16 this_pb_lo; - - u16 src_type; // Type of sample rate converter (none, 4-tap, linear) - u16 coef_select; // coef for the 4-tap src - u32 mixer_control; - - u16 running; // 1=RUN 0=STOP - u16 is_stream; // 1 = stream, 0 = one shot - - PBMixerWii mixer; - PBInitialTimeDelay initial_time_delay; - PBDpopWii dpop; - PBVolumeEnvelope vol_env; - PBAudioAddr audio_addr; - PBADPCMInfo adpcm; - PBSampleRateConverter src; - PBADPCMLoopInfo adpcm_loop_info; - PBLowPassFilter lpf; - PBBiquadFilter biquad; - - // WIIMOTE :D - u16 remote; - u16 remote_mixer_control; - - PBMixerWM remote_mixer; - PBDpopWM remote_dpop; - PBSampleRateConverterWM remote_src; - PBInfImpulseResponseWM remote_iir; - - u16 pad[12]; // align us, captain! (32B) -}; - -// Seems like nintendo used an early version of AXWii and forgot to remove the update functionality ;p -struct PBUpdatesWiiSports -{ - u16 num_updates[3]; - u16 data_hi; - u16 data_lo; -}; - -struct AXPBWiiSports -{ - u16 next_pb_hi; - u16 next_pb_lo; - u16 this_pb_hi; - u16 this_pb_lo; - - u16 src_type; // Type of sample rate converter (none, 4-tap, linear) - u16 coef_select; // coef for the 4-tap src - u32 mixer_control; - - u16 running; // 1=RUN 0=STOP - u16 is_stream; // 1 = stream, 0 = one shot - - PBMixerWii mixer; - PBInitialTimeDelay initial_time_delay; - PBUpdatesWiiSports updates; - PBDpopWii dpop; - PBVolumeEnvelope vol_env; - PBAudioAddr audio_addr; - PBADPCMInfo adpcm; - PBSampleRateConverter src; - PBADPCMLoopInfo adpcm_loop_info; - PBLowPassFilter lpf; - PBBiquadFilter biquad; - - // WIIMOTE :D - u16 remote; - u16 remote_mixer_control; - - PBMixerWM remote_mixer; - PBDpopWM remote_dpop; - PBSampleRateConverterWM remote_src; - PBInfImpulseResponseWM remote_iir; - - u16 pad[7]; // align us, captain! (32B) -}; - -// TODO: All these enums have changed a lot for wii -enum { - AUDIOFORMAT_ADPCM = 0, - AUDIOFORMAT_PCM8 = 0x19, - AUDIOFORMAT_PCM16 = 0xA, -}; - -enum { - SRCTYPE_LINEAR = 1, - SRCTYPE_NEAREST = 2, - MIXCONTROL_RAMPING = 8, -}; - -// Both may be used at once -enum { - FILTER_LOWPASS = 1, - FILTER_BIQUAD = 2, -}; - -#endif // _UCODE_AX_STRUCTS_H diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii_Voice.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii_Voice.h deleted file mode 100644 index 55f7face27..0000000000 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii_Voice.h +++ /dev/null @@ -1,271 +0,0 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _UCODE_AXWII_VOICE_H -#define _UCODE_AXWII_VOICE_H - -#include "UCodes.h" -#include "UCode_AXWii_ADPCM.h" -#include "UCode_AX.h" -#include "Mixer.h" -#include "../../AudioInterface.h" - -// MRAM -> ARAM for GC -inline bool ReadPB(u32 addr, AXPB &PB) -{ - const u16* PB_in_mram = (const u16*)Memory::GetPointer(addr); - if (PB_in_mram == NULL) - return false; - u16* PB_in_aram = (u16*)&PB; - - for (size_t p = 0; p < (sizeof(AXPB) >> 1); p++) - { - PB_in_aram[p] = Common::swap16(PB_in_mram[p]); - } - - return true; -} - -// MRAM -> ARAM for Wii -inline bool ReadPB(u32 addr, AXPBWii &PB) -{ - const u16* PB_in_mram = (const u16*)Memory::GetPointer(addr); - if (PB_in_mram == NULL) - return false; - u16* PB_in_aram = (u16*)&PB; - - // preswap the mixer_control - PB.mixer_control = ((u32)PB_in_mram[7] << 16) | ((u32)PB_in_mram[6] >> 16); - - for (size_t p = 0; p < (sizeof(AXPBWii) >> 1); p++) - { - PB_in_aram[p] = Common::swap16(PB_in_mram[p]); - } - - return true; -} - -// ARAM -> MRAM for GC -inline bool WritePB(u32 addr, AXPB &PB) -{ - const u16* PB_in_aram = (const u16*)&PB; - u16* PB_in_mram = (u16*)Memory::GetPointer(addr); - if (PB_in_mram == NULL) - return false; - - for (size_t p = 0; p < (sizeof(AXPB) >> 1); p++) - { - PB_in_mram[p] = Common::swap16(PB_in_aram[p]); - } - - return true; -} - -// ARAM -> MRAM for Wii -inline bool WritePB(u32 addr, AXPBWii &PB) -{ - const u16* PB_in_aram = (const u16*)&PB; - u16* PB_in_mram = (u16*)Memory::GetPointer(addr); - if (PB_in_mram == NULL) - return false; - - // preswap the mixer_control - *(u32*)&PB_in_mram[6] = (PB.mixer_control << 16) | (PB.mixer_control >> 16); - - for (size_t p = 0; p < (sizeof(AXPBWii) >> 1); p++) - { - PB_in_mram[p] = Common::swap16(PB_in_aram[p]); - } - - return true; -} - -////////////////////////////////////////////////////////////////////////// -// TODO: fix handling of gc/wii PB differences -// TODO: generally fix up the mess - looks crazy and kinda wrong -template -inline void MixAddVoice(ParamBlockType &pb, - int *templbuffer, int *temprbuffer, - int _iSize) -{ - if (pb.running) - { - const u32 ratio = (u32)(((pb.src.ratio_hi << 16) + pb.src.ratio_lo) - * /*ratioFactor:*/((float)AudioInterface::GetAIDSampleRate() / (float)soundStream->GetMixer()->GetSampleRate())); - u32 sampleEnd = (pb.audio_addr.end_addr_hi << 16) | pb.audio_addr.end_addr_lo; - u32 loopPos = (pb.audio_addr.loop_addr_hi << 16) | pb.audio_addr.loop_addr_lo; - - u32 samplePos = (pb.audio_addr.cur_addr_hi << 16) | pb.audio_addr.cur_addr_lo; - u32 frac = pb.src.cur_addr_frac; - - // ======================================================================================= - // Handle No-SRC streams - No src streams have pb.src_type == 2 and have pb.src.ratio_hi = 0 - // and pb.src.ratio_lo = 0. We handle that by setting the sampling ratio integer to 1. This - // makes samplePos update in the correct way. I'm unsure how we are actually supposed to - // detect that this setting. Updates did not fix this automatically. - // --------------------------------------------------------------------------------------- - // Stream settings - // src_type = 2 (most other games have src_type = 0) - // Affected games: - // Baten Kaitos - Eternal Wings (2003) - // Baten Kaitos - Origins (2006)? - // Soul Calibur 2: The movie music use src_type 2 but it needs no adjustment, perhaps - // the sound format plays in to, Baten use ADPCM, SC2 use PCM16 - //if (pb.src_type == 2 && (pb.src.ratio_hi == 0 && pb.src.ratio_lo == 0)) - if (pb.running && (pb.src.ratio_hi == 0 && pb.src.ratio_lo == 0)) - { - pb.src.ratio_hi = 1; - } - - // ======================================================================================= - // Games that use looping to play non-looping music streams - SSBM has info in all - // pb.adpcm_loop_info parameters but has pb.audio_addr.looping = 0. If we treat these streams - // like any other looping streams the music works. I'm unsure how we are actually supposed to - // detect that these kinds of blocks should be looping. It seems like pb.mixer_control == 0 may - // identify these types of blocks. Updates did not write any looping values. - if ( - (pb.adpcm_loop_info.pred_scale || pb.adpcm_loop_info.yn1 || pb.adpcm_loop_info.yn2) - && pb.mixer_control == 0 && pb.adpcm_loop_info.pred_scale <= 0x7F - ) - { - pb.audio_addr.looping = 1; - } - - - - // Top Spin 3 Wii - if (pb.audio_addr.sample_format > 25) - pb.audio_addr.sample_format = 0; - - // ======================================================================================= - // Walk through _iSize. _iSize = numSamples. If the game goes slow _iSize will be higher to - // compensate for that. _iSize can be as low as 100 or as high as 2000 some cases. - for (int s = 0; s < _iSize; s++) - { - int sample = 0; - u32 oldFrac = frac; - frac += ratio; - u32 newSamplePos = samplePos + (frac >> 16); //whole number of frac - - // ======================================================================================= - // Process sample format - switch (pb.audio_addr.sample_format) - { - case AUDIOFORMAT_PCM8: - pb.adpcm.yn2 = ((s8)DSP::ReadARAM(samplePos)) << 8; //current sample - pb.adpcm.yn1 = ((s8)DSP::ReadARAM(samplePos + 1)) << 8; //next sample - - if (pb.src_type == SRCTYPE_NEAREST) - sample = pb.adpcm.yn2; - else // linear interpolation - sample = (pb.adpcm.yn1 * (u16)oldFrac + pb.adpcm.yn2 * (u16)(0xFFFF - oldFrac) + pb.adpcm.yn2) >> 16; - - samplePos = newSamplePos; - break; - - case AUDIOFORMAT_PCM16: - pb.adpcm.yn2 = (s16)(u16)((DSP::ReadARAM(samplePos * 2) << 8) | (DSP::ReadARAM((samplePos * 2 + 1)))); //current sample - pb.adpcm.yn1 = (s16)(u16)((DSP::ReadARAM((samplePos + 1) * 2) << 8) | (DSP::ReadARAM(((samplePos + 1) * 2 + 1)))); //next sample - - if (pb.src_type == SRCTYPE_NEAREST) - sample = pb.adpcm.yn2; - else // linear interpolation - sample = (pb.adpcm.yn1 * (u16)oldFrac + pb.adpcm.yn2 * (u16)(0xFFFF - oldFrac) + pb.adpcm.yn2) >> 16; - - samplePos = newSamplePos; - break; - - case AUDIOFORMAT_ADPCM: - ADPCM_Step(pb.adpcm, samplePos, newSamplePos, frac); - - if (pb.src_type == SRCTYPE_NEAREST) - sample = pb.adpcm.yn2; - else // linear interpolation - sample = (pb.adpcm.yn1 * (u16)frac + pb.adpcm.yn2 * (u16)(0xFFFF - frac) + pb.adpcm.yn2) >> 16; //adpcm moves on frac - - break; - - default: - break; - } - - // =================================================================== - // Overall volume control. In addition to this there is also separate volume settings to - // different channels (left, right etc). - frac &= 0xffff; - - int vol = pb.vol_env.cur_volume >> 9; - sample = sample * vol >> 8; - - if (pb.mixer_control & MIXCONTROL_RAMPING) - { - int x = pb.vol_env.cur_volume; - x += pb.vol_env.cur_volume_delta; // I'm not sure about this, can anybody find a game - // that use this? Or how does it work? - if (x < 0) - x = 0; - if (x >= 0x7fff) - x = 0x7fff; - pb.vol_env.cur_volume = x; // maybe not per sample?? :P - } - - int leftmix = pb.mixer.left >> 5; - int rightmix = pb.mixer.right >> 5; - int left = sample * leftmix >> 8; - int right = sample * rightmix >> 8; - // adpcm has to walk from oldSamplePos to samplePos here - templbuffer[s] += left; - temprbuffer[s] += right; - - // Control the behavior when we reach the end of the sample - if (samplePos >= sampleEnd) - { - if (pb.audio_addr.looping == 1) - { - if ((samplePos & ~0x1f) == (sampleEnd & ~0x1f) || (pb.audio_addr.sample_format != AUDIOFORMAT_ADPCM)) - samplePos = loopPos; - if ((!pb.is_stream) && (pb.audio_addr.sample_format == AUDIOFORMAT_ADPCM)) - { - pb.adpcm.yn1 = pb.adpcm_loop_info.yn1; - pb.adpcm.yn2 = pb.adpcm_loop_info.yn2; - pb.adpcm.pred_scale = pb.adpcm_loop_info.pred_scale; - } - } - else - { - pb.running = 0; - samplePos = loopPos; - //samplePos = samplePos - sampleEnd + loopPos; - memset(&pb.dpop, 0, sizeof(pb.dpop)); - memset(pb.src.last_samples, 0, 8); - break; - } - } - } // end of the _iSize loop - - // Update volume - pb.mixer.left = ADPCM_Vol(pb.mixer.left, pb.mixer.left_delta); - pb.mixer.right = ADPCM_Vol(pb.mixer.right, pb.mixer.right_delta); - - pb.src.cur_addr_frac = (u16)frac; - pb.audio_addr.cur_addr_hi = samplePos >> 16; - pb.audio_addr.cur_addr_lo = (u16)samplePos; - - } // if (pb.running) -} - -#endif diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h index e39b38b100..15261b6184 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h @@ -27,7 +27,7 @@ #endif #include "Common.h" -#include "UCode_AX_Structs.h" +#include "UCode_AXStructs.h" #include "../../DSP.h" #ifdef AX_GC diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_NewAXWii.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_NewAXWii.cpp deleted file mode 100644 index 40ad6e1947..0000000000 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_NewAXWii.cpp +++ /dev/null @@ -1,383 +0,0 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "StringUtil.h" - -#include "../MailHandler.h" -#include "Mixer.h" - -#include "UCodes.h" -#include "UCode_AX_Structs.h" -#include "UCode_NewAXWii.h" - -#define AX_WII -#include "UCode_AX_Voice.h" - - -CUCode_NewAXWii::CUCode_NewAXWii(DSPHLE *dsp_hle, u32 l_CRC) - : CUCode_AX(dsp_hle, l_CRC) -{ - WARN_LOG(DSPHLE, "Instantiating CUCode_NewAXWii"); -} - -CUCode_NewAXWii::~CUCode_NewAXWii() -{ -} - -void CUCode_NewAXWii::HandleCommandList() -{ - // Temp variables for addresses computation - u16 addr_hi, addr_lo; - u16 addr2_hi, addr2_lo; - u16 volume; - -// WARN_LOG(DSPHLE, "Command list:"); -// for (u32 i = 0; m_cmdlist[i] != CMD_END; ++i) -// WARN_LOG(DSPHLE, "%04x", m_cmdlist[i]); -// WARN_LOG(DSPHLE, "-------------"); - - u32 curr_idx = 0; - bool end = false; - while (!end) - { - u16 cmd = m_cmdlist[curr_idx++]; - - switch (cmd) - { - // Some of these commands are unknown, or unused in this AX HLE. - // We still need to skip their arguments using "curr_idx += N". - - case CMD_SETUP: - addr_hi = m_cmdlist[curr_idx++]; - addr_lo = m_cmdlist[curr_idx++]; - SetupProcessing(HILO_TO_32(addr)); - break; - - case CMD_UNK_01: curr_idx += 2; break; - case CMD_UNK_02: curr_idx += 2; break; - case CMD_UNK_03: curr_idx += 2; break; - - case CMD_PROCESS: - addr_hi = m_cmdlist[curr_idx++]; - addr_lo = m_cmdlist[curr_idx++]; - ProcessPBList(HILO_TO_32(addr)); - break; - - case CMD_MIX_AUXA: - case CMD_MIX_AUXB: - case CMD_MIX_AUXC: - volume = m_cmdlist[curr_idx++]; - addr_hi = m_cmdlist[curr_idx++]; - addr_lo = m_cmdlist[curr_idx++]; - addr2_hi = m_cmdlist[curr_idx++]; - addr2_lo = m_cmdlist[curr_idx++]; - MixAUXSamples(cmd - CMD_MIX_AUXA, HILO_TO_32(addr), HILO_TO_32(addr2), volume); - break; - - // These two go together and manipulate some AUX buffers. - case CMD_UNK_08: curr_idx += 13; break; - case CMD_UNK_09: curr_idx += 13; break; - - case CMD_UNK_0A: curr_idx += 4; break; - - case CMD_OUTPUT: - volume = m_cmdlist[curr_idx++]; - addr_hi = m_cmdlist[curr_idx++]; - addr_lo = m_cmdlist[curr_idx++]; - addr2_hi = m_cmdlist[curr_idx++]; - addr2_lo = m_cmdlist[curr_idx++]; - OutputSamples(HILO_TO_32(addr2), HILO_TO_32(addr), volume); - break; - - case CMD_UNK_0C: curr_idx += 5; break; - - case CMD_WM_OUTPUT: - { - u32 addresses[4] = { - (u32)(m_cmdlist[curr_idx + 0] << 16) | m_cmdlist[curr_idx + 1], - (u32)(m_cmdlist[curr_idx + 2] << 16) | m_cmdlist[curr_idx + 3], - (u32)(m_cmdlist[curr_idx + 4] << 16) | m_cmdlist[curr_idx + 5], - (u32)(m_cmdlist[curr_idx + 6] << 16) | m_cmdlist[curr_idx + 7], - }; - curr_idx += 8; - OutputWMSamples(addresses); - break; - } - - case CMD_END: - end = true; - break; - } - } -} - -void CUCode_NewAXWii::SetupProcessing(u32 init_addr) -{ - // TODO: should be easily factorizable with AX - s16 init_data[60]; - - for (u32 i = 0; i < 60; ++i) - init_data[i] = HLEMemory_Read_U16(init_addr + 2 * i); - - // List of all buffers we have to initialize - struct { - int* ptr; - u32 samples; - } buffers[] = { - { m_samples_left, 32 }, - { m_samples_right, 32 }, - { m_samples_surround, 32 }, - { m_samples_auxA_left, 32 }, - { m_samples_auxA_right, 32 }, - { m_samples_auxA_surround, 32 }, - { m_samples_auxB_left, 32 }, - { m_samples_auxB_right, 32 }, - { m_samples_auxB_surround, 32 }, - { m_samples_auxC_left, 32 }, - { m_samples_auxC_right, 32 }, - { m_samples_auxC_surround, 32 }, - - { m_samples_wm0, 6 }, - { m_samples_aux0, 6 }, - { m_samples_wm1, 6 }, - { m_samples_aux1, 6 }, - { m_samples_wm2, 6 }, - { m_samples_aux2, 6 }, - { m_samples_wm3, 6 }, - { m_samples_aux3, 6 } - }; - - u32 init_idx = 0; - for (u32 i = 0; i < sizeof (buffers) / sizeof (buffers[0]); ++i) - { - s32 init_val = (s32)((init_data[init_idx] << 16) | init_data[init_idx + 1]); - s16 delta = (s16)init_data[init_idx + 2]; - - init_idx += 3; - - if (!init_val) - memset(buffers[i].ptr, 0, 3 * buffers[i].samples * sizeof (int)); - else - { - for (u32 j = 0; j < 3 * buffers[i].samples; ++j) - { - buffers[i].ptr[j] = init_val; - init_val += delta; - } - } - } -} - -AXMixControl CUCode_NewAXWii::ConvertMixerControl(u32 mixer_control) -{ - u32 ret = 0; - - if (mixer_control & 0x00000001) ret |= MIX_L; - if (mixer_control & 0x00000002) ret |= MIX_R; - if (mixer_control & 0x00000004) ret |= MIX_L_RAMP | MIX_R_RAMP; - if (mixer_control & 0x00000008) ret |= MIX_S; - if (mixer_control & 0x00000010) ret |= MIX_S_RAMP; - if (mixer_control & 0x00010000) ret |= MIX_AUXA_L; - if (mixer_control & 0x00020000) ret |= MIX_AUXA_R; - if (mixer_control & 0x00040000) ret |= MIX_AUXA_L_RAMP | MIX_AUXA_R_RAMP; - if (mixer_control & 0x00080000) ret |= MIX_AUXA_S; - if (mixer_control & 0x00100000) ret |= MIX_AUXA_S_RAMP; - if (mixer_control & 0x00200000) ret |= MIX_AUXB_L; - if (mixer_control & 0x00400000) ret |= MIX_AUXB_R; - if (mixer_control & 0x00800000) ret |= MIX_AUXB_L_RAMP | MIX_AUXB_R_RAMP; - if (mixer_control & 0x01000000) ret |= MIX_AUXB_S; - if (mixer_control & 0x02000000) ret |= MIX_AUXB_S_RAMP; - if (mixer_control & 0x04000000) ret |= MIX_AUXC_L; - if (mixer_control & 0x08000000) ret |= MIX_AUXC_R; - if (mixer_control & 0x10000000) ret |= MIX_AUXC_L_RAMP | MIX_AUXC_R_RAMP; - if (mixer_control & 0x20000000) ret |= MIX_AUXC_S; - if (mixer_control & 0x40000000) ret |= MIX_AUXC_S_RAMP; - - return (AXMixControl)ret; -} - -void CUCode_NewAXWii::ProcessPBList(u32 pb_addr) -{ - const u32 spms = 32; - - AXPBWii pb; - - while (pb_addr) - { - AXBuffers buffers = {{ - m_samples_left, - m_samples_right, - m_samples_surround, - m_samples_auxA_left, - m_samples_auxA_right, - m_samples_auxA_surround, - m_samples_auxB_left, - m_samples_auxB_right, - m_samples_auxB_surround, - m_samples_auxC_left, - m_samples_auxC_right, - m_samples_auxC_surround - }}; - - if (!ReadPB(pb_addr, pb)) - break; - - for (int curr_ms = 0; curr_ms < 3; ++curr_ms) - { - Process1ms(pb, buffers, ConvertMixerControl(HILO_TO_32(pb.mixer_control))); - - // Forward the buffers - for (u32 i = 0; i < sizeof (buffers.ptrs) / sizeof (buffers.ptrs[0]); ++i) - buffers.ptrs[i] += spms; - } - - WritePB(pb_addr, pb); - pb_addr = HILO_TO_32(pb.next_pb); - } -} - -void CUCode_NewAXWii::MixAUXSamples(int aux_id, u32 write_addr, u32 read_addr, u16 volume) -{ - int* buffers[3] = { 0 }; - int* main_buffers[3] = { - m_samples_left, - m_samples_right, - m_samples_surround - }; - - switch (aux_id) - { - case 0: - buffers[0] = m_samples_auxA_left; - buffers[1] = m_samples_auxA_right; - buffers[2] = m_samples_auxA_surround; - break; - - case 1: - buffers[0] = m_samples_auxB_left; - buffers[1] = m_samples_auxB_right; - buffers[2] = m_samples_auxB_surround; - break; - - case 2: - buffers[0] = m_samples_auxC_left; - buffers[1] = m_samples_auxC_right; - buffers[2] = m_samples_auxC_surround; - break; - } - - // Send the content of AUX buffers to the CPU - if (write_addr) - { - int* ptr = (int*)HLEMemory_Get_Pointer(write_addr); - for (u32 i = 0; i < 3; ++i) - for (u32 j = 0; j < 3 * 32; ++j) - *ptr++ = Common::swap32(buffers[i][j]); - } - - // Then read the buffers from the CPU and add to our main buffers. - int* ptr = (int*)HLEMemory_Get_Pointer(read_addr); - for (u32 i = 0; i < 3; ++i) - for (u32 j = 0; j < 3 * 32; ++j) - { - s64 new_val = main_buffers[i][j] + Common::swap32(*ptr++); - main_buffers[i][j] = (new_val * volume) >> 15; - } -} - -void CUCode_NewAXWii::OutputSamples(u32 lr_addr, u32 surround_addr, u16 volume) -{ - int surround_buffer[3 * 32] = { 0 }; - - for (u32 i = 0; i < 3 * 32; ++i) - surround_buffer[i] = Common::swap32(m_samples_surround[i]); - memcpy(HLEMemory_Get_Pointer(surround_addr), surround_buffer, sizeof (surround_buffer)); - - short buffer[3 * 32 * 2]; - - // Clamp internal buffers to 16 bits. - for (u32 i = 0; i < 3 * 32; ++i) - { - int left = m_samples_left[i]; - int right = m_samples_right[i]; - - // Apply global volume. Cast to s64 to avoid overflow. - left = ((s64)left * volume) >> 15; - right = ((s64)right * volume) >> 15; - - if (left < -32767) left = -32767; - if (left > 32767) left = 32767; - if (right < -32767) right = -32767; - if (right > 32767) right = 32767; - - m_samples_left[i] = left; - m_samples_right[i] = right; - } - - for (u32 i = 0; i < 3 * 32; ++i) - { - buffer[2 * i] = Common::swap16(m_samples_left[i]); - buffer[2 * i + 1] = Common::swap16(m_samples_right[i]); - } - - memcpy(HLEMemory_Get_Pointer(lr_addr), buffer, sizeof (buffer)); -} - -void CUCode_NewAXWii::OutputWMSamples(u32* addresses) -{ - int* buffers[] = { - m_samples_wm0, - m_samples_wm1, - m_samples_wm2, - m_samples_wm3 - }; - - for (u32 i = 0; i < 4; ++i) - { - int* in = buffers[i]; - u16* out = (u16*)HLEMemory_Get_Pointer(addresses[i]); - for (u32 j = 0; j < 3 * 6; ++j) - { - int sample = in[j]; - if (sample < -32767) sample = -32767; - if (sample > 32767) sample = 32767; - out[j] = Common::swap16((u16)sample); - } - } -} - -void CUCode_NewAXWii::DoState(PointerWrap &p) -{ - std::lock_guard lk(m_processing); - - DoStateShared(p); - DoAXState(p); - - p.Do(m_samples_auxC_left); - p.Do(m_samples_auxC_right); - p.Do(m_samples_auxC_surround); - - p.Do(m_samples_wm0); - p.Do(m_samples_wm1); - p.Do(m_samples_wm2); - p.Do(m_samples_wm3); - - p.Do(m_samples_aux0); - p.Do(m_samples_aux1); - p.Do(m_samples_aux2); - p.Do(m_samples_aux3); -} diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_NewAXWii.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_NewAXWii.h deleted file mode 100644 index 4c9bc5757c..0000000000 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_NewAXWii.h +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official Git repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _UCODE_NEWAXWII_H -#define _UCODE_NEWAXWII_H - -#include "UCode_AX.h" - -class CUCode_NewAXWii : public CUCode_AX -{ -public: - CUCode_NewAXWii(DSPHLE *dsp_hle, u32 _CRC); - virtual ~CUCode_NewAXWii(); - - virtual void DoState(PointerWrap &p); - -protected: - int m_samples_auxC_left[32 * 3]; - int m_samples_auxC_right[32 * 3]; - int m_samples_auxC_surround[32 * 3]; - - // Wiimote buffers - int m_samples_wm0[6 * 3]; - int m_samples_aux0[6 * 3]; - int m_samples_wm1[6 * 3]; - int m_samples_aux1[6 * 3]; - int m_samples_wm2[6 * 3]; - int m_samples_aux2[6 * 3]; - int m_samples_wm3[6 * 3]; - int m_samples_aux3[6 * 3]; - - // Convert a mixer_control bitfield to our internal representation for that - // value. Required because that bitfield has a different meaning in some - // versions of AX. - AXMixControl ConvertMixerControl(u32 mixer_control); - - virtual void HandleCommandList(); - - void SetupProcessing(u32 init_addr); - void ProcessPBList(u32 pb_addr); - void MixAUXSamples(int aux_id, u32 write_addr, u32 read_addr, u16 volume); - void OutputSamples(u32 lr_addr, u32 surround_addr, u16 volume); - void OutputWMSamples(u32* addresses); // 4 addresses - -private: - enum CmdType - { - CMD_SETUP = 0x00, - CMD_UNK_01 = 0x01, - CMD_UNK_02 = 0x02, - CMD_UNK_03 = 0x03, - CMD_PROCESS = 0x04, - CMD_MIX_AUXA = 0x05, - CMD_MIX_AUXB = 0x06, - CMD_MIX_AUXC = 0x07, - CMD_UNK_08 = 0x08, - CMD_UNK_09 = 0x09, - CMD_UNK_0A = 0x0A, - CMD_OUTPUT = 0x0B, - CMD_UNK_0C = 0x0C, - CMD_WM_OUTPUT = 0x0D, - CMD_END = 0x0E - }; -}; - -#endif // _UCODE_AXWII diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCodes.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCodes.cpp index 86773ad020..c04bf41403 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCodes.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCodes.cpp @@ -19,7 +19,6 @@ #include "UCode_AX.h" #include "UCode_AXWii.h" -#include "UCode_NewAXWii.h" #include "UCode_Zelda.h" #include "UCode_ROM.h" #include "UCode_CARD.h" @@ -27,12 +26,6 @@ #include "UCode_GBA.h" #include "Hash.h" -#if 0 -# define AXWII CUCode_NewAXWii -#else -# define AXWII CUCode_AXWii -#endif - IUCode* UCodeFactory(u32 _CRC, DSPHLE *dsp_hle, bool bWii) { switch (_CRC) @@ -97,13 +90,13 @@ IUCode* UCodeFactory(u32 _CRC, DSPHLE *dsp_hle, bool bWii) case 0x4cc52064: // Bleach: Versus Crusade case 0xd9c4bf34: // WiiMenu INFO_LOG(DSPHLE, "CRC %08x: Wii - AXWii chosen", _CRC); - return new AXWII(dsp_hle, _CRC); + return new CUCode_AXWii(dsp_hle, _CRC); default: if (bWii) { PanicAlert("DSPHLE: Unknown ucode (CRC = %08x) - forcing AXWii.\n\nTry LLE emulator if this is homebrew.", _CRC); - return new AXWII(dsp_hle, _CRC); + return new CUCode_AXWii(dsp_hle, _CRC); } else { From fb64cfd18ad855abb03896a14d52bb832db082b5 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Sun, 20 Jan 2013 07:36:48 +0100 Subject: [PATCH 002/205] AXWii: fix L/R channels being swapped when outputting audio samples --- Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp index 8c74c7a1e7..8aec99d700 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp @@ -330,8 +330,8 @@ void CUCode_AXWii::OutputSamples(u32 lr_addr, u32 surround_addr, u16 volume) for (u32 i = 0; i < 3 * 32; ++i) { - buffer[2 * i] = Common::swap16(m_samples_left[i]); - buffer[2 * i + 1] = Common::swap16(m_samples_right[i]); + buffer[2 * i] = Common::swap16(m_samples_right[i]); + buffer[2 * i + 1] = Common::swap16(m_samples_left[i]); } memcpy(HLEMemory_Get_Pointer(lr_addr), buffer, sizeof (buffer)); From 35249a8576c604ad7528c254c7b27e356f1a127b Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Sun, 20 Jan 2013 14:42:37 +0100 Subject: [PATCH 003/205] Handle 3ms at a time in AXWii instead of 3x1ms --- .../Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp | 2 +- .../Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp | 11 +------- .../Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h | 26 ++++++++++++------- 3 files changed, 18 insertions(+), 21 deletions(-) diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp index 57032a774e..cb34c2532d 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp @@ -405,7 +405,7 @@ void CUCode_AX::ProcessPBList(u32 pb_addr) { ApplyUpdatesForMs(pb, curr_ms); - Process1ms(pb, buffers, ConvertMixerControl(pb.mixer_control)); + ProcessVoice(pb, buffers, ConvertMixerControl(pb.mixer_control)); // Forward the buffers for (u32 i = 0; i < sizeof (buffers.ptrs) / sizeof (buffers.ptrs[0]); ++i) diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp index 8aec99d700..1b1097c7fe 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp @@ -212,8 +212,6 @@ AXMixControl CUCode_AXWii::ConvertMixerControl(u32 mixer_control) void CUCode_AXWii::ProcessPBList(u32 pb_addr) { - const u32 spms = 32; - AXPBWii pb; while (pb_addr) @@ -236,14 +234,7 @@ void CUCode_AXWii::ProcessPBList(u32 pb_addr) if (!ReadPB(pb_addr, pb)) break; - for (int curr_ms = 0; curr_ms < 3; ++curr_ms) - { - Process1ms(pb, buffers, ConvertMixerControl(HILO_TO_32(pb.mixer_control))); - - // Forward the buffers - for (u32 i = 0; i < sizeof (buffers.ptrs) / sizeof (buffers.ptrs[0]); ++i) - buffers.ptrs[i] += spms; - } + ProcessVoice(pb, buffers, ConvertMixerControl(HILO_TO_32(pb.mixer_control))); WritePB(pb_addr, pb); pb_addr = HILO_TO_32(pb.next_pb); diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h index 15261b6184..578330ba34 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h @@ -32,8 +32,12 @@ #ifdef AX_GC # define PB_TYPE AXPB +# define MS_PER_FRAME 1 +# define SAMPLES_PER_FRAME 32 #else # define PB_TYPE AXPBWii +# define MS_PER_FRAME 3 +# define SAMPLES_PER_FRAME 96 #endif // Put all of that in an anonymous namespace to avoid stupid compilers merging @@ -232,7 +236,8 @@ u16 AcceleratorGetSample() return ret; } -// Read 32 input samples from ARAM, decoding and converting rate if required. +// Read SAMPLES_PER_FRAME input samples from ARAM, decoding and converting rate +// if required. void GetInputSamples(PB_TYPE& pb, s16* samples) { u32 cur_addr = HILO_TO_32(pb.audio_addr.cur_addr); @@ -260,7 +265,7 @@ void GetInputSamples(PB_TYPE& pb, s16* samples) s16 curr0 = pb.src.last_samples[2]; s16 curr1 = pb.src.last_samples[3]; - for (u32 i = 0; i < 32; ++i) + for (u32 i = 0; i < SAMPLES_PER_FRAME; ++i) { // Get our current fractional position, used to know how much of // curr0 and how much of curr1 the output sample should be. @@ -290,12 +295,12 @@ void GetInputSamples(PB_TYPE& pb, s16* samples) } else // SRCTYPE_NEAREST { - // No sample rate conversion here: simply read 32 samples from the + // No sample rate conversion here: simply read samples from the // accelerator to the output buffer. - for (u32 i = 0; i < 32; ++i) + for (u32 i = 0; i < SAMPLES_PER_FRAME; ++i) samples[i] = AcceleratorGetSample(); - memcpy(pb.src.last_samples, samples + 28, 4 * sizeof (u16)); + memcpy(pb.src.last_samples, samples + SAMPLES_PER_FRAME - 4, 4 * sizeof (u16)); } // Update current position in the PB. @@ -315,7 +320,7 @@ void MixAdd(int* out, const s16* input, u16* pvol, s16* dpop, bool ramp) if (!ramp) volume_delta = 0; - for (u32 i = 0; i < 32; ++i) + for (u32 i = 0; i < SAMPLES_PER_FRAME; ++i) { s64 sample = input[i]; sample *= volume; @@ -328,19 +333,20 @@ void MixAdd(int* out, const s16* input, u16* pvol, s16* dpop, bool ramp) } } -// Process 1ms of audio (32 samples) from a PB and mix it to the buffers. -void Process1ms(PB_TYPE& pb, const AXBuffers& buffers, AXMixControl mctrl) +// Process 1ms of audio (for AX GC) or 3ms of audio (for AX Wii) from a PB and +// mix it to the output buffers. +void ProcessVoice(PB_TYPE& pb, const AXBuffers& buffers, AXMixControl mctrl) { // If the voice is not running, nothing to do. if (!pb.running) return; // Read input samples, performing sample rate conversion if needed. - s16 samples[32]; + s16 samples[SAMPLES_PER_FRAME]; GetInputSamples(pb, samples); // Apply a global volume ramp using the volume envelope parameters. - for (u32 i = 0; i < 32; ++i) + for (u32 i = 0; i < SAMPLES_PER_FRAME; ++i) { s64 sample = 2 * (s16)samples[i] * (s16)pb.vol_env.cur_volume; samples[i] = (s16)(sample >> 16); From 25419ed827b48027bfb2cc66bef8c7d9b142b2ae Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Sun, 20 Jan 2013 15:32:55 +0100 Subject: [PATCH 004/205] Implement Wiimote sound mixing in AXWii --- .../Src/HW/DSPHLE/UCodes/UCode_AXStructs.h | 18 ++-- .../Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp | 10 +- .../Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h | 93 +++++++++++++++---- 3 files changed, 94 insertions(+), 27 deletions(-) diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXStructs.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXStructs.h index c92196dd49..d82088b34f 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXStructs.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXStructs.h @@ -161,15 +161,15 @@ struct PBDpopWii struct PBDpopWM { - s16 aMain0; - s16 aMain1; - s16 aMain2; - s16 aMain3; + s16 main0; + s16 main1; + s16 main2; + s16 main3; - s16 aAux0; - s16 aAux1; - s16 aAux2; - s16 aAux3; + s16 aux0; + s16 aux1; + s16 aux2; + s16 aux3; }; struct PBVolumeEnvelope @@ -216,7 +216,7 @@ struct PBSampleRateConverter struct PBSampleRateConverterWM { - u16 currentAddressFrac; + u16 cur_addr_frac; u16 last_samples[4]; }; diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp index 1b1097c7fe..84fab9108b 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp @@ -228,7 +228,15 @@ void CUCode_AXWii::ProcessPBList(u32 pb_addr) m_samples_auxB_surround, m_samples_auxC_left, m_samples_auxC_right, - m_samples_auxC_surround + m_samples_auxC_surround, + m_samples_wm0, + m_samples_aux0, + m_samples_wm1, + m_samples_aux1, + m_samples_wm2, + m_samples_aux2, + m_samples_wm3, + m_samples_aux3 }}; if (!ReadPB(pb_addr, pb)) diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h index 578330ba34..bcf69ddb4b 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h @@ -32,11 +32,9 @@ #ifdef AX_GC # define PB_TYPE AXPB -# define MS_PER_FRAME 1 # define SAMPLES_PER_FRAME 32 #else # define PB_TYPE AXPBWii -# define MS_PER_FRAME 3 # define SAMPLES_PER_FRAME 96 #endif @@ -69,13 +67,22 @@ union AXBuffers int* auxC_left; int* auxC_right; int* auxC_surround; + + int* wm_main0; + int* wm_aux0; + int* wm_main1; + int* wm_aux1; + int* wm_main2; + int* wm_aux2; + int* wm_main3; + int* wm_aux3; #endif }; #ifdef AX_GC int* ptrs[9]; #else - int* ptrs[12]; + int* ptrs[20]; #endif }; @@ -309,7 +316,7 @@ void GetInputSamples(PB_TYPE& pb, s16* samples) } // Add samples to an output buffer, with optional volume ramping. -void MixAdd(int* out, const s16* input, u16* pvol, s16* dpop, bool ramp) +void MixAdd(int* out, const s16* input, u32 count, u16* pvol, s16* dpop, bool ramp) { u16& volume = pvol[0]; u16 volume_delta = pvol[1]; @@ -320,7 +327,7 @@ void MixAdd(int* out, const s16* input, u16* pvol, s16* dpop, bool ramp) if (!ramp) volume_delta = 0; - for (u32 i = 0; i < SAMPLES_PER_FRAME; ++i) + for (u32 i = 0; i < count; ++i) { s64 sample = input[i]; sample *= volume; @@ -363,33 +370,33 @@ void ProcessVoice(PB_TYPE& pb, const AXBuffers& buffers, AXMixControl mctrl) // TODO: Handle DPL2 on AUXB. if (mctrl & MIX_L) - MixAdd(buffers.left, samples, &pb.mixer.left, &pb.dpop.left, mctrl & MIX_L_RAMP); + MixAdd(buffers.left, samples, SAMPLES_PER_FRAME, &pb.mixer.left, &pb.dpop.left, mctrl & MIX_L_RAMP); if (mctrl & MIX_R) - MixAdd(buffers.right, samples, &pb.mixer.right, &pb.dpop.right, mctrl & MIX_R_RAMP); + MixAdd(buffers.right, samples, SAMPLES_PER_FRAME, &pb.mixer.right, &pb.dpop.right, mctrl & MIX_R_RAMP); if (mctrl & MIX_S) - MixAdd(buffers.surround, samples, &pb.mixer.surround, &pb.dpop.surround, mctrl & MIX_S_RAMP); + MixAdd(buffers.surround, samples, SAMPLES_PER_FRAME, &pb.mixer.surround, &pb.dpop.surround, mctrl & MIX_S_RAMP); if (mctrl & MIX_AUXA_L) - MixAdd(buffers.auxA_left, samples, &pb.mixer.auxA_left, &pb.dpop.auxA_left, mctrl & MIX_AUXA_L_RAMP); + MixAdd(buffers.auxA_left, samples, SAMPLES_PER_FRAME, &pb.mixer.auxA_left, &pb.dpop.auxA_left, mctrl & MIX_AUXA_L_RAMP); if (mctrl & MIX_AUXA_R) - MixAdd(buffers.auxA_right, samples, &pb.mixer.auxA_right, &pb.dpop.auxA_right, mctrl & MIX_AUXA_R_RAMP); + MixAdd(buffers.auxA_right, samples, SAMPLES_PER_FRAME, &pb.mixer.auxA_right, &pb.dpop.auxA_right, mctrl & MIX_AUXA_R_RAMP); if (mctrl & MIX_AUXA_S) - MixAdd(buffers.auxA_surround, samples, &pb.mixer.auxA_surround, &pb.dpop.auxA_surround, mctrl & MIX_AUXA_S_RAMP); + MixAdd(buffers.auxA_surround, samples, SAMPLES_PER_FRAME, &pb.mixer.auxA_surround, &pb.dpop.auxA_surround, mctrl & MIX_AUXA_S_RAMP); if (mctrl & MIX_AUXB_L) - MixAdd(buffers.auxB_left, samples, &pb.mixer.auxB_left, &pb.dpop.auxB_left, mctrl & MIX_AUXB_L_RAMP); + MixAdd(buffers.auxB_left, samples, SAMPLES_PER_FRAME, &pb.mixer.auxB_left, &pb.dpop.auxB_left, mctrl & MIX_AUXB_L_RAMP); if (mctrl & MIX_AUXB_R) - MixAdd(buffers.auxB_right, samples, &pb.mixer.auxB_right, &pb.dpop.auxB_right, mctrl & MIX_AUXB_R_RAMP); + MixAdd(buffers.auxB_right, samples, SAMPLES_PER_FRAME, &pb.mixer.auxB_right, &pb.dpop.auxB_right, mctrl & MIX_AUXB_R_RAMP); if (mctrl & MIX_AUXB_S) - MixAdd(buffers.auxB_surround, samples, &pb.mixer.auxB_surround, &pb.dpop.auxB_surround, mctrl & MIX_AUXB_S_RAMP); + MixAdd(buffers.auxB_surround, samples, SAMPLES_PER_FRAME, &pb.mixer.auxB_surround, &pb.dpop.auxB_surround, mctrl & MIX_AUXB_S_RAMP); #ifdef AX_WII if (mctrl & MIX_AUXC_L) - MixAdd(buffers.auxC_left, samples, &pb.mixer.auxC_left, &pb.dpop.auxC_left, mctrl & MIX_AUXC_L_RAMP); + MixAdd(buffers.auxC_left, samples, SAMPLES_PER_FRAME, &pb.mixer.auxC_left, &pb.dpop.auxC_left, mctrl & MIX_AUXC_L_RAMP); if (mctrl & MIX_AUXC_R) - MixAdd(buffers.auxC_right, samples, &pb.mixer.auxC_right, &pb.dpop.auxC_right, mctrl & MIX_AUXC_R_RAMP); + MixAdd(buffers.auxC_right, samples, SAMPLES_PER_FRAME, &pb.mixer.auxC_right, &pb.dpop.auxC_right, mctrl & MIX_AUXC_R_RAMP); if (mctrl & MIX_AUXC_S) - MixAdd(buffers.auxC_surround, samples, &pb.mixer.auxC_surround, &pb.dpop.auxC_surround, mctrl & MIX_AUXC_S_RAMP); + MixAdd(buffers.auxC_surround, samples, SAMPLES_PER_FRAME, &pb.mixer.auxC_surround, &pb.dpop.auxC_surround, mctrl & MIX_AUXC_S_RAMP); #endif // Optionally, phase shift left or right channel to simulate 3D sound. @@ -397,6 +404,58 @@ void ProcessVoice(PB_TYPE& pb, const AXBuffers& buffers, AXMixControl mctrl) { // TODO } + +#ifdef AX_WII + // Wiimote mixing. + if (pb.remote) + { + // Interpolate 18 samples from the 96 samples we read before. The real + // DSP code does it using a polyphase interpolation, we just use a + // linear interpolation here. + s16 wm_samples[18]; + + s16 curr0 = pb.remote_src.last_samples[2]; + s16 curr1 = pb.remote_src.last_samples[3]; + + u32 ratio = 0x55555; // about 96/18 = 5.33333 + u32 curr_pos = pb.remote_src.cur_addr_frac; + for (u32 i = 0; i < 18; ++i) + { + s32 curr_frac_pos = curr_pos & 0xFFFF; + s16 sample = curr0 + (s16)(((curr1 - curr0) * (s32)curr_frac_pos) >> 16); + wm_samples[i] = sample; + + curr_pos += ratio; + curr0 = curr1; + curr1 = samples[curr_pos >> 16]; + } + pb.remote_src.last_samples[2] = curr0; + pb.remote_src.last_samples[3] = curr1; + pb.src.cur_addr_frac = curr_pos & 0xFFFF; + + // Mix to main[0-3] and aux[0-3] +#define WMCHAN_MIX_ON(n) ((pb.remote_mixer_control >> (2 * n)) & 3) +#define WMCHAN_MIX_RAMP(n) ((pb.remote_mixer_control >> (2 * n)) & 2) + + if (WMCHAN_MIX_ON(0)) + MixAdd(buffers.wm_main0, wm_samples, 18, &pb.remote_mixer.main0, &pb.remote_dpop.main0, WMCHAN_MIX_RAMP(0)); + if (WMCHAN_MIX_ON(1)) + MixAdd(buffers.wm_aux0, wm_samples, 18, &pb.remote_mixer.aux0, &pb.remote_dpop.aux0, WMCHAN_MIX_RAMP(1)); + if (WMCHAN_MIX_ON(2)) + MixAdd(buffers.wm_main1, wm_samples, 18, &pb.remote_mixer.main1, &pb.remote_dpop.main1, WMCHAN_MIX_RAMP(2)); + if (WMCHAN_MIX_ON(3)) + MixAdd(buffers.wm_aux1, wm_samples, 18, &pb.remote_mixer.aux1, &pb.remote_dpop.aux1, WMCHAN_MIX_RAMP(3)); + if (WMCHAN_MIX_ON(4)) + MixAdd(buffers.wm_main2, wm_samples, 18, &pb.remote_mixer.main2, &pb.remote_dpop.main2, WMCHAN_MIX_RAMP(4)); + if (WMCHAN_MIX_ON(5)) + MixAdd(buffers.wm_aux2, wm_samples, 18, &pb.remote_mixer.aux2, &pb.remote_dpop.aux2, WMCHAN_MIX_RAMP(5)); + if (WMCHAN_MIX_ON(6)) + MixAdd(buffers.wm_main3, wm_samples, 18, &pb.remote_mixer.main3, &pb.remote_dpop.main3, WMCHAN_MIX_RAMP(6)); + if (WMCHAN_MIX_ON(7)) + MixAdd(buffers.wm_aux3, wm_samples, 18, &pb.remote_mixer.aux3, &pb.remote_dpop.aux3, WMCHAN_MIX_RAMP(7)); + } + +#endif } } // namespace From c6629015048bc9d4aa18d297c0c41d3e26293843 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Sun, 20 Jan 2013 16:15:42 +0100 Subject: [PATCH 005/205] Implement low-pass voice filtering, untested because I couldn't find any game using it --- .../Core/Src/HW/DSPHLE/UCodes/UCode_AXStructs.h | 6 +++--- .../Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h | 13 ++++++++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXStructs.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXStructs.h index d82088b34f..cc24bd78b7 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXStructs.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXStructs.h @@ -230,9 +230,9 @@ struct PBADPCMLoopInfo struct PBLowPassFilter { u16 enabled; - u16 yn1; - u16 a0; - u16 b0; + s16 yn1; + s16 a0; + s16 b0; }; struct AXPB diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h index bcf69ddb4b..fcc1bb7999 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h @@ -340,6 +340,15 @@ void MixAdd(int* out, const s16* input, u32 count, u16* pvol, s16* dpop, bool ra } } +// Execute a low pass filter on the samples using one history value. Returns +// the new history value. +s16 LowPassFilter(s16* samples, u32 count, s16 yn1, s16 a0, s16 b0) +{ + for (u32 i = 0; i < count; ++i) + yn1 = samples[i] = (s32)a0 * samples[i] - (s32)b0 * yn1; + return yn1; +} + // Process 1ms of audio (for AX GC) or 3ms of audio (for AX Wii) from a PB and // mix it to the output buffers. void ProcessVoice(PB_TYPE& pb, const AXBuffers& buffers, AXMixControl mctrl) @@ -362,9 +371,7 @@ void ProcessVoice(PB_TYPE& pb, const AXBuffers& buffers, AXMixControl mctrl) // Optionally, execute a low pass filter if (pb.lpf.enabled) - { - // TODO - } + pb.lpf.yn1 = LowPassFilter(samples, SAMPLES_PER_FRAME, pb.lpf.yn1, pb.lpf.a0, pb.lpf.b0); // Mix LRS, AUXA and AUXB depending on mixer_control // TODO: Handle DPL2 on AUXB. From 7252becf24583e6bf34f89889944611ccf343bb4 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Sun, 20 Jan 2013 17:20:30 +0100 Subject: [PATCH 006/205] Fix the voice LPF implementation --- Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXStructs.h | 4 ++-- Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXStructs.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXStructs.h index cc24bd78b7..2ac9ddd2f0 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXStructs.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXStructs.h @@ -231,8 +231,8 @@ struct PBLowPassFilter { u16 enabled; s16 yn1; - s16 a0; - s16 b0; + u16 a0; + u16 b0; }; struct AXPB diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h index fcc1bb7999..f41c4c47ff 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h @@ -342,10 +342,10 @@ void MixAdd(int* out, const s16* input, u32 count, u16* pvol, s16* dpop, bool ra // Execute a low pass filter on the samples using one history value. Returns // the new history value. -s16 LowPassFilter(s16* samples, u32 count, s16 yn1, s16 a0, s16 b0) +s16 LowPassFilter(s16* samples, u32 count, s16 yn1, u16 a0, u16 b0) { for (u32 i = 0; i < count; ++i) - yn1 = samples[i] = (s32)a0 * samples[i] - (s32)b0 * yn1; + yn1 = samples[i] = (a0 * (s32)samples[i] + b0 * (s32)yn1) >> 15; return yn1; } From 4ef021e975293f7530c1f2115408aebca0a721e2 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Sun, 20 Jan 2013 17:36:57 +0100 Subject: [PATCH 007/205] Better global volume adjustment on a voice. Fixes one of the 2 issues with the HOME button menu sound. --- Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h index f41c4c47ff..f731fc5360 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h @@ -364,8 +364,7 @@ void ProcessVoice(PB_TYPE& pb, const AXBuffers& buffers, AXMixControl mctrl) // Apply a global volume ramp using the volume envelope parameters. for (u32 i = 0; i < SAMPLES_PER_FRAME; ++i) { - s64 sample = 2 * (s16)samples[i] * (s16)pb.vol_env.cur_volume; - samples[i] = (s16)(sample >> 16); + samples[i] = ((s32)samples[i] * pb.vol_env.cur_volume) >> 15; pb.vol_env.cur_volume += pb.vol_env.cur_volume_delta; } From 1612225e79fc17b748cb5736999d883d8300e541 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Mon, 21 Jan 2013 11:51:55 +0100 Subject: [PATCH 008/205] Implement AXWii command 01: ADD_TO_LR --- .../Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp | 19 ++++++++++++++++++- .../Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.h | 3 ++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp index 84fab9108b..2377839e86 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp @@ -67,7 +67,12 @@ void CUCode_AXWii::HandleCommandList() SetupProcessing(HILO_TO_32(addr)); break; - case CMD_UNK_01: curr_idx += 2; break; + case CMD_ADD_TO_LR: + addr_hi = m_cmdlist[curr_idx++]; + addr_lo = m_cmdlist[curr_idx++]; + AddToLR(HILO_TO_32(addr)); + break; + case CMD_UNK_02: curr_idx += 2; break; case CMD_UNK_03: curr_idx += 2; break; @@ -182,6 +187,18 @@ void CUCode_AXWii::SetupProcessing(u32 init_addr) } } +void CUCode_AXWii::AddToLR(u32 val_addr) +{ + int* ptr = (int*)HLEMemory_Get_Pointer(val_addr); + for (int i = 0; i < 32 * 3; ++i) + { + int val = (int)Common::swap32(*ptr++); + + m_samples_left[i] += val; + m_samples_right[i] += val; + } +} + AXMixControl CUCode_AXWii::ConvertMixerControl(u32 mixer_control) { u32 ret = 0; diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.h index 3a66c30868..6ace48abc1 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.h @@ -51,6 +51,7 @@ protected: virtual void HandleCommandList(); void SetupProcessing(u32 init_addr); + void AddToLR(u32 val_addr); void ProcessPBList(u32 pb_addr); void MixAUXSamples(int aux_id, u32 write_addr, u32 read_addr, u16 volume); void OutputSamples(u32 lr_addr, u32 surround_addr, u16 volume); @@ -60,7 +61,7 @@ private: enum CmdType { CMD_SETUP = 0x00, - CMD_UNK_01 = 0x01, + CMD_ADD_TO_LR = 0x01, CMD_UNK_02 = 0x02, CMD_UNK_03 = 0x03, CMD_PROCESS = 0x04, From 9776f135e231d7da2cb31573c4cef65ae1674c33 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Fri, 25 Jan 2013 08:25:28 +0100 Subject: [PATCH 009/205] Add polyphase resampling support in AX --- .../Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp | 27 +++++++++- .../Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.h | 8 +++ .../Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp | 3 +- .../Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h | 51 +++++++++++++++++-- 4 files changed, 82 insertions(+), 7 deletions(-) diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp index cb34c2532d..3675970917 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp @@ -17,6 +17,7 @@ #include "UCode_AX.h" #include "../../DSP.h" +#include "FileUtil.h" #define AX_GC #include "UCode_AX_Voice.h" @@ -29,6 +30,8 @@ CUCode_AX::CUCode_AX(DSPHLE* dsp_hle, u32 crc) WARN_LOG(DSPHLE, "Instantiating CUCode_AX: crc=%08x", crc); m_rMailHandler.PushMail(DSP_INIT); DSP::GenerateDSPInterruptFromDSPEmu(DSP::INT_DSP); + + LoadResamplingCoefficients(); } CUCode_AX::~CUCode_AX() @@ -40,6 +43,27 @@ CUCode_AX::~CUCode_AX() m_rMailHandler.Clear(); } +void CUCode_AX::LoadResamplingCoefficients() +{ + m_coeffs_available = false; + + std::string filename = File::GetUserPath(D_GCUSER_IDX) + "dsp_coef.bin"; + if (!File::Exists(filename)) + return; + + if (File::GetSize(filename) != 0x1000) + return; + + FILE* fp = fopen(filename.c_str(), "rb"); + fread(m_coeffs, 1, 0x1000, fp); + fclose(fp); + + for (u32 i = 0; i < 0x800; ++i) + m_coeffs[i] = Common::swap16(m_coeffs[i]); + + m_coeffs_available = true; +} + void CUCode_AX::SpawnAXThread(CUCode_AX* self) { self->AXThread(); @@ -405,7 +429,8 @@ void CUCode_AX::ProcessPBList(u32 pb_addr) { ApplyUpdatesForMs(pb, curr_ms); - ProcessVoice(pb, buffers, ConvertMixerControl(pb.mixer_control)); + ProcessVoice(pb, buffers, ConvertMixerControl(pb.mixer_control), + m_coeffs_available ? m_coeffs : NULL); // Forward the buffers for (u32 i = 0; i < sizeof (buffers.ptrs) / sizeof (buffers.ptrs[0]); ++i) diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.h index 7158c197e8..68248fef60 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.h @@ -114,6 +114,14 @@ protected: std::condition_variable m_cmdlist_cv; std::mutex m_cmdlist_mutex; + // Table of coefficients for polyphase sample rate conversion. + // The coefficients aren't always available (they are part of the DSP DROM) + // so we also need to know if they are valid or not. + bool m_coeffs_available; + s16 m_coeffs[0x800]; + + void LoadResamplingCoefficients(); + // Copy a command list from memory to our temp buffer void CopyCmdList(u32 addr, u16 size); diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp index 2377839e86..1fde3f74b4 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp @@ -259,7 +259,8 @@ void CUCode_AXWii::ProcessPBList(u32 pb_addr) if (!ReadPB(pb_addr, pb)) break; - ProcessVoice(pb, buffers, ConvertMixerControl(HILO_TO_32(pb.mixer_control))); + ProcessVoice(pb, buffers, ConvertMixerControl(HILO_TO_32(pb.mixer_control)), + m_coeffs_available ? m_coeffs : NULL); WritePB(pb_addr, pb); pb_addr = HILO_TO_32(pb.next_pb); diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h index f731fc5360..649ad3c37f 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h @@ -245,13 +245,54 @@ u16 AcceleratorGetSample() // Read SAMPLES_PER_FRAME input samples from ARAM, decoding and converting rate // if required. -void GetInputSamples(PB_TYPE& pb, s16* samples) +void GetInputSamples(PB_TYPE& pb, s16* samples, const s16* coeffs) { u32 cur_addr = HILO_TO_32(pb.audio_addr.cur_addr); AcceleratorSetup(&pb, &cur_addr); - // TODO: support polyphase interpolation if coefficients are available. - if (pb.src_type == SRCTYPE_POLYPHASE || pb.src_type == SRCTYPE_LINEAR) + // If DSP DROM coefficients are available, support polyphase resampling. + if (coeffs && pb.src_type == SRCTYPE_POLYPHASE) + { + s16 temp[4]; + u32 idx = 0; + + u32 ratio = HILO_TO_32(pb.src.ratio); + u32 curr_pos = pb.src.cur_addr_frac; + + temp[idx++ & 3] = pb.src.last_samples[0]; + temp[idx++ & 3] = pb.src.last_samples[1]; + temp[idx++ & 3] = pb.src.last_samples[2]; + temp[idx++ & 3] = pb.src.last_samples[3]; + + for (u32 i = 0; i < SAMPLES_PER_FRAME; ++i) + { + curr_pos += ratio; + while (curr_pos >= 0x10000) + { + temp[idx++ & 3] = AcceleratorGetSample(); + curr_pos -= 0x10000; + } + + u16 curr_pos_frac = ((curr_pos & 0xFFFF) >> 9) << 2; + const s16* c = &coeffs[pb.coef_select * 0x200 + curr_pos_frac]; + + s64 t0 = temp[idx++ & 3]; + s64 t1 = temp[idx++ & 3]; + s64 t2 = temp[idx++ & 3]; + s64 t3 = temp[idx++ & 3]; + + s64 samp = (t0 * c[0] + t1 * c[1] + t2 * c[2] + t3 * c[3]) >> 15; + + samples[i] = (s16)samp; + } + + pb.src.last_samples[3] = temp[--idx & 3]; + pb.src.last_samples[2] = temp[--idx & 3]; + pb.src.last_samples[1] = temp[--idx & 3]; + pb.src.last_samples[0] = temp[--idx & 3]; + pb.src.cur_addr_frac = curr_pos & 0xFFFF; + } + else if (pb.src_type == SRCTYPE_LINEAR || (!coeffs && pb.src_type == SRCTYPE_POLYPHASE)) { // Convert the input to a higher or lower sample rate using a linear // interpolation algorithm. The input to output ratio is set in @@ -351,7 +392,7 @@ s16 LowPassFilter(s16* samples, u32 count, s16 yn1, u16 a0, u16 b0) // Process 1ms of audio (for AX GC) or 3ms of audio (for AX Wii) from a PB and // mix it to the output buffers. -void ProcessVoice(PB_TYPE& pb, const AXBuffers& buffers, AXMixControl mctrl) +void ProcessVoice(PB_TYPE& pb, const AXBuffers& buffers, AXMixControl mctrl, const s16* coeffs) { // If the voice is not running, nothing to do. if (!pb.running) @@ -359,7 +400,7 @@ void ProcessVoice(PB_TYPE& pb, const AXBuffers& buffers, AXMixControl mctrl) // Read input samples, performing sample rate conversion if needed. s16 samples[SAMPLES_PER_FRAME]; - GetInputSamples(pb, samples); + GetInputSamples(pb, samples, coeffs); // Apply a global volume ramp using the volume envelope parameters. for (u32 i = 0; i < SAMPLES_PER_FRAME; ++i) From bad4f7f790b6038450488d1c23d8b65329cea4b4 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Fri, 25 Jan 2013 19:16:07 +0100 Subject: [PATCH 010/205] Rewrite the linear interpolation SRC to give the exact same results as the one in AXWii --- .../Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h | 64 +++++++++++++------ 1 file changed, 43 insertions(+), 21 deletions(-) diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h index 649ad3c37f..92c797ad14 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h @@ -307,38 +307,60 @@ void GetInputSamples(PB_TYPE& pb, s16* samples, const s16* coeffs) // samples. u32 curr_pos = pb.src.cur_addr_frac; - // These are the two samples between which we interpolate. The initial - // values are stored in the PB, and we update them when resampling the - // input data. - s16 curr0 = pb.src.last_samples[2]; - s16 curr1 = pb.src.last_samples[3]; + // This is the circular buffer containing samples to use for the + // interpolation. It is initialized with the values from the PB, and it + // will be stored back to the PB at the end. + s16 temp[4]; + u32 idx = 0; + + temp[idx++ & 3] = pb.src.last_samples[0]; + temp[idx++ & 3] = pb.src.last_samples[1]; + temp[idx++ & 3] = pb.src.last_samples[2]; + temp[idx++ & 3] = pb.src.last_samples[3]; for (u32 i = 0; i < SAMPLES_PER_FRAME; ++i) { - // Get our current fractional position, used to know how much of - // curr0 and how much of curr1 the output sample should be. - s32 curr_frac_pos = curr_pos & 0xFFFF; - - // Linear interpolation: s1 + (s2 - s1) * pos - s16 sample = curr0 + (s16)(((curr1 - curr0) * (s32)curr_frac_pos) >> 16); - samples[i] = sample; - curr_pos += ratio; - // While our current position is >= 1.0, shift to the next 2 - // samples for interpolation. - while ((curr_pos >> 16) != 0) + // While our current position is >= 1.0, push new samples to the + // circular buffer. + while (curr_pos >= 0x10000) { - curr0 = curr1; - curr1 = AcceleratorGetSample(); + temp[idx++ & 3] = AcceleratorGetSample(); curr_pos -= 0x10000; } + + // Get our current fractional position, used to know how much of + // curr0 and how much of curr1 the output sample should be. + u16 curr_frac = curr_pos & 0xFFFF; + u16 inv_curr_frac = -curr_frac; + + // Interpolate! If curr_frac is 0, we can simply take the last + // sample without any multiplying. + s16 sample; + if (curr_frac) + { + s32 s0 = temp[idx++ & 3]; + s32 s1 = temp[idx++ & 3]; + + sample = ((s0 * inv_curr_frac) + (s1 * curr_frac)) >> 16; + idx += 2; + } + else + { + sample = temp[idx++ & 3]; + idx += 3; + } + + samples[i] = sample; } - // Update the two last_samples values in the PB as well as the current + // Update the four last_samples values in the PB as well as the current // position. - pb.src.last_samples[2] = curr0; - pb.src.last_samples[3] = curr1; + pb.src.last_samples[3] = temp[--idx & 3]; + pb.src.last_samples[2] = temp[--idx & 3]; + pb.src.last_samples[1] = temp[--idx & 3]; + pb.src.last_samples[0] = temp[--idx & 3]; pb.src.cur_addr_frac = curr_pos & 0xFFFF; } else // SRCTYPE_NEAREST From d11679a06e6a992216148fd2ce1730c9912c8564 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 19 Mar 2013 21:53:09 -0500 Subject: [PATCH 011/205] Android mega commit of trash. --- Source/Android/.classpath | 8 + Source/Android/.gitignore | 7 + Source/Android/.project | 33 + .../.settings/org.eclipse.jdt.core.prefs | 4 + Source/Android/AndroidManifest.xml | 29 + Source/Android/android.toolchain.cmake | 1125 +++++++++++++++++ Source/Android/assets/ButtonA.png | Bin 0 -> 5178 bytes Source/Android/assets/ButtonB.png | Bin 0 -> 4971 bytes Source/Android/build.xml | 92 ++ Source/Android/custom_rules.xml | 16 + Source/Android/jni/Android.mk | 189 +++ Source/Android/jni/Application.mk | 4 + Source/Android/project.properties | 14 + Source/Android/res/drawable-hdpi/launcher.png | Bin 0 -> 14225 bytes Source/Android/res/drawable-mdpi/launcher.png | Bin 0 -> 8634 bytes .../Android/res/drawable-xhdpi/launcher.png | Bin 0 -> 23020 bytes .../Android/res/drawable-xxhdpi/launcher.png | Bin 0 -> 82300 bytes Source/Android/res/layout/main.xml | 26 + Source/Android/res/values/strings.xml | 6 + .../src/org/dolphinemu/dolphinemu/Button.java | 33 + .../dolphinemu/dolphinemu/ButtonManager.java | 43 + .../dolphinemu/DolphinEmulator.java | 124 ++ .../dolphinemu/FileArrayAdapter.java | 53 + .../dolphinemu/NativeGLSurfaceView.java | 61 + .../dolphinemu/dolphinemu/NativeListView.java | 94 ++ .../dolphinemu/dolphinemu/NativeRenderer.java | 168 +++ .../src/org/dolphinemu/dolphinemu/Option.java | 38 + Source/Core/Common/Src/StringUtil.cpp | 3 +- Source/Core/Core/Src/ConfigManager.cpp | 2 + Source/Core/Core/Src/HW/GCPad.cpp | 11 + Source/Core/DolphinWX/Src/GLInterface.h | 2 + Source/Core/DolphinWX/Src/MainAndroid.cpp | 66 +- .../Plugin_VideoSoftware/Src/SWRenderer.cpp | 93 +- 33 files changed, 2311 insertions(+), 33 deletions(-) create mode 100644 Source/Android/.classpath create mode 100644 Source/Android/.gitignore create mode 100644 Source/Android/.project create mode 100644 Source/Android/.settings/org.eclipse.jdt.core.prefs create mode 100644 Source/Android/AndroidManifest.xml create mode 100644 Source/Android/android.toolchain.cmake create mode 100644 Source/Android/assets/ButtonA.png create mode 100644 Source/Android/assets/ButtonB.png create mode 100644 Source/Android/build.xml create mode 100644 Source/Android/custom_rules.xml create mode 100644 Source/Android/jni/Android.mk create mode 100644 Source/Android/jni/Application.mk create mode 100644 Source/Android/project.properties create mode 100644 Source/Android/res/drawable-hdpi/launcher.png create mode 100644 Source/Android/res/drawable-mdpi/launcher.png create mode 100644 Source/Android/res/drawable-xhdpi/launcher.png create mode 100644 Source/Android/res/drawable-xxhdpi/launcher.png create mode 100644 Source/Android/res/layout/main.xml create mode 100644 Source/Android/res/values/strings.xml create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/Button.java create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/ButtonManager.java create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/FileArrayAdapter.java create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/NativeGLSurfaceView.java create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/NativeListView.java create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/NativeRenderer.java create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/Option.java diff --git a/Source/Android/.classpath b/Source/Android/.classpath new file mode 100644 index 0000000000..3f9691c5dd --- /dev/null +++ b/Source/Android/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/Source/Android/.gitignore b/Source/Android/.gitignore new file mode 100644 index 0000000000..31bce7aa41 --- /dev/null +++ b/Source/Android/.gitignore @@ -0,0 +1,7 @@ +gen +obj +#ui_atlas.zim +ui_atlas.zim.png +#assets/ui_atlas.zim +#jni/ui_atlas.cpp +#jni/ui_atlas.h diff --git a/Source/Android/.project b/Source/Android/.project new file mode 100644 index 0000000000..a79d8a1840 --- /dev/null +++ b/Source/Android/.project @@ -0,0 +1,33 @@ + + + ppsspp + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/Source/Android/.settings/org.eclipse.jdt.core.prefs b/Source/Android/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000..f77b31c2d2 --- /dev/null +++ b/Source/Android/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/Source/Android/AndroidManifest.xml b/Source/Android/AndroidManifest.xml new file mode 100644 index 0000000000..e22370dd16 --- /dev/null +++ b/Source/Android/AndroidManifest.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Android/android.toolchain.cmake b/Source/Android/android.toolchain.cmake new file mode 100644 index 0000000000..69b402670d --- /dev/null +++ b/Source/Android/android.toolchain.cmake @@ -0,0 +1,1125 @@ +# ------------------------------------------------------------------------------ +# Android CMake toolchain file, for use with the Android NDK r5-r8 +# Requires cmake 2.6.3 or newer (2.8.5 or newer is recommended). +# See home page: http://code.google.com/p/android-cmake/ +# +# The file is mantained by the OpenCV project. And also can be found at +# http://code.opencv.org/projects/opencv/repository/revisions/master/changes/android/android.toolchain.cmake +# +# Usage Linux: +# $ export ANDROID_NDK=/absolute/path/to/the/android-ndk +# $ mkdir build && cd build +# $ cmake -DCMAKE_TOOLCHAIN_FILE=path/to/the/android.toolchain.cmake .. +# $ make -j8 +# +# Usage Linux (using standalone toolchain): +# $ export ANDROID_STANDALONE_TOOLCHAIN=/absolute/path/to/android-toolchain +# $ mkdir build && cd build +# $ cmake -DCMAKE_TOOLCHAIN_FILE=path/to/the/android.toolchain.cmake .. +# $ make -j8 +# +# Usage Windows: +# You need native port of make to build your project. +# Android NDK r7 (or newer) already has make.exe on board. +# For older NDK you have to install it separately. +# For example, this one: http://gnuwin32.sourceforge.net/packages/make.htm +# +# $ SET ANDROID_NDK=C:\absolute\path\to\the\android-ndk +# $ mkdir build && cd build +# $ cmake.exe -G"MinGW Makefiles" +# -DCMAKE_TOOLCHAIN_FILE=path\to\the\android.toolchain.cmake +# -DCMAKE_MAKE_PROGRAM="%ANDROID_NDK%\prebuilt\windows\bin\make.exe" .. +# $ "%ANDROID_NDK%\prebuilt\windows\bin\make.exe" +# +# +# Options (can be set as cmake parameters: -D=): +# ANDROID_NDK=/opt/android-ndk - path to the NDK root. +# Can be set as environment variable. Can be set only at first cmake run. +# +# ANDROID_STANDALONE_TOOLCHAIN=/opt/android-toolchain - path to the +# standalone toolchain. This option is not used if full NDK is found +# (ignored if ANDROID_NDK is set). +# Can be set as environment variable. Can be set only at first cmake run. +# +# ANDROID_ABI=armeabi-v7a - specifies the target Application Binary +# Interface (ABI). This option nearly matches to the APP_ABI variable +# used by ndk-build tool from Android NDK. +# +# Possible targets are: +# "armeabi" - matches to the NDK ABI with the same name. +# See ${ANDROID_NDK}/docs/CPU-ARCH-ABIS.html for the documentation. +# "armeabi-v7a" - matches to the NDK ABI with the same name. +# See ${ANDROID_NDK}/docs/CPU-ARCH-ABIS.html for the documentation. +# "armeabi-v7a with NEON" - same as armeabi-v7a, but +# sets NEON as floating-point unit +# "armeabi-v7a with VFPV3" - same as armeabi-v7a, but +# sets VFPV3 as floating-point unit (has 32 registers instead of 16). +# "armeabi-v6 with VFP" - tuned for ARMv6 processors having VFP. +# "x86" - matches to the NDK ABI with the same name. +# See ${ANDROID_NDK}/docs/CPU-ARCH-ABIS.html for the documentation. +# "mips" - matches to the NDK ABI with the same name +# (not testes on real devices) +# +# ANDROID_NATIVE_API_LEVEL=android-8 - level of Android API compile for. +# Option is read-only when standalone toolchain used. +# +# ANDROID_FORCE_ARM_BUILD=OFF - set true to generate 32-bit ARM instructions +# instead of Thumb-1. Is not available for "x86" (inapplicable) and +# "armeabi-v6 with VFP" (forced) ABIs. +# +# ANDROID_NO_UNDEFINED=ON - set true to show all undefined symbols as linker +# errors even if they are not used. +# +# ANDROID_SO_UNDEFINED=OFF - set true to allow undefined symbols in shared +# libraries. Automatically turned on for NDK r5x and r6x due to GLESv2 +# problems. +# +# LIBRARY_OUTPUT_PATH_ROOT=${CMAKE_SOURCE_DIR} - where to output binary +# files. See additional details below. +# +# ANDROID_SET_OBSOLETE_VARIABLES=ON - it set, then toolchain defines some +# obsolete variables which were set by previous versions of this file for +# backward compatibility. +# +# +# What?: +# android-cmake toolchain searches for NDK/toolchain in the following order: +# ANDROID_NDK - cmake parameter +# ANDROID_NDK - environment variable +# ANDROID_STANDALONE_TOOLCHAIN - cmake parameter +# ANDROID_STANDALONE_TOOLCHAIN - environment variable +# ANDROID_NDK - default locations +# ANDROID_STANDALONE_TOOLCHAIN - default locations +# +# Make sure to do the following in your scripts: +# SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${my_cxx_flags}" ) +# SET( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${my_cxx_flags}" ) +# The flags will be prepopulated with critical flags, so don't loose them. +# Also be aware that toolchain also sets configuration-specific compiler +# flags and linker flags. +# +# ANDROID and BUILD_ANDROID will be set to true, you may test any of these +# variables to make necessary Android-specific configuration changes. +# +# Also ARMEABI or ARMEABI_V7A or X86 will be set true, mutually exclusive. +# NEON option will be set true if VFP is set to NEON. +# +# LIBRARY_OUTPUT_PATH_ROOT should be set in cache to determine where Android +# libraries will be installed. +# Default is ${CMAKE_SOURCE_DIR}, and the android libs will always be +# under the ${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_ABI_NAME} +# (depending on the target ABI). This is convenient for Android packaging. +# +# Authors: +# Ethan Rublee ethan.ruble@gmail.com +# Andrey Kamaev andrey.kamaev@itseez.com +# +# Change Log: +# - initial version December 2010 +# - modified April 2011 +# [+] added possibility to build with NDK (without standalone toolchain) +# [+] support cross-compilation on Windows (native, no cygwin support) +# [+] added compiler option to force "char" type to be signed +# [+] added toolchain option to compile to 32-bit ARM instructions +# [+] added toolchain option to disable SWIG search +# [+] added platform "armeabi-v7a with VFPV3" +# [~] ARM_TARGETS renamed to ARM_TARGET +# [+] EXECUTABLE_OUTPUT_PATH is set by toolchain (required on Windows) +# [~] Fixed bug with ANDROID_API_LEVEL variable +# [~] turn off SWIG search if it is not found first time +# - modified May 2011 +# [~] ANDROID_LEVEL is renamed to ANDROID_API_LEVEL +# [+] ANDROID_API_LEVEL is detected by toolchain if not specified +# [~] added guard to prevent changing of output directories on the first +# cmake pass +# [~] toolchain exits with error if ARM_TARGET is not recognized +# - modified June 2011 +# [~] default NDK path is updated for version r5c +# [+] variable CMAKE_SYSTEM_PROCESSOR is set based on ARM_TARGET +# [~] toolchain install directory is added to linker paths +# [-] removed SWIG-related stuff from toolchain +# [+] added macro find_host_package, find_host_program to search +# packages/programs on the host system +# [~] fixed path to STL library +# - modified July 2011 +# [~] fixed options caching +# [~] search for all supported NDK versions +# [~] allowed spaces in NDK path +# - modified September 2011 +# [~] updated for NDK r6b +# - modified November 2011 +# [*] rewritten for NDK r7 +# [+] x86 toolchain support (experimental) +# [+] added "armeabi-v6 with VFP" ABI for ARMv6 processors. +# [~] improved compiler and linker flags management +# [+] support different build flags for Release and Debug configurations +# [~] by default compiler flags the same as used by ndk-build (but only +# where reasonable) +# [~] ANDROID_NDK_TOOLCHAIN_ROOT is splitted to ANDROID_STANDALONE_TOOLCHAIN +# and ANDROID_TOOLCHAIN_ROOT +# [~] ARM_TARGET is renamed to ANDROID_ABI +# [~] ARMEABI_NDK_NAME is renamed to ANDROID_NDK_ABI_NAME +# [~] ANDROID_API_LEVEL is renamed to ANDROID_NATIVE_API_LEVEL +# - modified January 2012 +# [+] added stlport_static support (experimental) +# [+] added special check for cygwin +# [+] filtered out hidden files (starting with .) while globbing inside NDK +# [+] automatically applied GLESv2 linkage fix for NDK revisions 5-6 +# [+] added ANDROID_GET_ABI_RAWNAME to get NDK ABI names by CMake flags +# - modified February 2012 +# [+] updated for NDK r7b +# [~] fixed cmake try_compile() command +# [~] Fix for missing install_name_tool on OS X +# - modified March 2012 +# [~] fixed incorrect C compiler flags +# [~] fixed CMAKE_SYSTEM_PROCESSOR change on ANDROID_ABI change +# [+] improved toolchain loading speed +# [+] added assembler language support (.S) +# [+] allowed preset search paths and extra search suffixes +# - modified April 2012 +# [+] updated for NDK r7c +# [~] fixed most of problems with compiler/linker flags and caching +# [+] added option ANDROID_FUNCTION_LEVEL_LINKING +# - modified May 2012 +# [+] updated for NDK r8 +# [+] added mips architecture support +# - modified August 2012 +# [+] updated for NDK r8b +# [~] all intermediate files generated by toolchain are moved into CMakeFiles +# [~] libstdc++ and libsupc are removed from explicit link libraries +# ------------------------------------------------------------------------------ + +cmake_minimum_required( VERSION 2.6.3 ) + +if( DEFINED CMAKE_CROSSCOMPILING ) + # subsequent toolchain loading is not really needed + return() +endif() + +get_property(_CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE) +if( _CMAKE_IN_TRY_COMPILE ) + include( "${CMAKE_CURRENT_SOURCE_DIR}/../android.toolchain.config.cmake" OPTIONAL ) +endif() + +# this one is important +set( CMAKE_SYSTEM_NAME Linux ) +# this one not so much +set( CMAKE_SYSTEM_VERSION 1 ) + +set( ANDROID_SUPPORTED_NDK_VERSIONS ${ANDROID_EXTRA_NDK_VERSIONS} -r8b -r8 -r7c -r7b -r7 -r6b -r6 -r5c -r5b -r5 "" ) +if(NOT DEFINED ANDROID_NDK_SEARCH_PATHS) + if( CMAKE_HOST_WIN32 ) + file( TO_CMAKE_PATH "$ENV{PROGRAMFILES}" ANDROID_NDK_SEARCH_PATHS ) + set( ANDROID_NDK_SEARCH_PATHS "${ANDROID_NDK_SEARCH_PATHS}/android-ndk" "$ENV{SystemDrive}/NVPACK/android-ndk" ) + else() + file( TO_CMAKE_PATH "$ENV{HOME}" ANDROID_NDK_SEARCH_PATHS ) + set( ANDROID_NDK_SEARCH_PATHS /opt/android-ndk "${ANDROID_NDK_SEARCH_PATHS}/NVPACK/android-ndk" ) + endif() +endif() +if(NOT DEFINED ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH) + set( ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH /opt/android-toolchain ) +endif() + +set( ANDROID_SUPPORTED_ABIS_arm "armeabi-v7a;armeabi;armeabi-v7a with NEON;armeabi-v7a with VFPV3;armeabi-v6 with VFP" ) +set( ANDROID_SUPPORTED_ABIS_x86 "x86" ) +set( ANDROID_SUPPORTED_ABIS_mipsel "mips" ) + +set( ANDROID_DEFAULT_NDK_API_LEVEL 9 ) +set( ANDROID_DEFAULT_NDK_API_LEVEL_x86 9 ) +set( ANDROID_DEFAULT_NDK_API_LEVEL_mips 9 ) + + +macro( __LIST_FILTER listvar regex ) + if( ${listvar} ) + foreach( __val ${${listvar}} ) + if( __val MATCHES "${regex}" ) + list( REMOVE_ITEM ${listvar} "${__val}" ) + endif() + endforeach() + endif() +endmacro() + +macro( __INIT_VARIABLE var_name ) + set( __test_path 0 ) + foreach( __var ${ARGN} ) + if( __var STREQUAL "PATH" ) + set( __test_path 1 ) + break() + endif() + endforeach() + if( __test_path AND NOT EXISTS "${${var_name}}" ) + unset( ${var_name} CACHE ) + endif() + if( "${${var_name}}" STREQUAL "" ) + set( __values 0 ) + foreach( __var ${ARGN} ) + if( __var STREQUAL "VALUES" ) + set( __values 1 ) + elseif( NOT __var STREQUAL "PATH" ) + set( __obsolete 0 ) + if( __var MATCHES "^OBSOLETE_.*$" ) + string( REPLACE "OBSOLETE_" "" __var "${__var}" ) + set( __obsolete 1 ) + endif() + if( __var MATCHES "^ENV_.*$" ) + string( REPLACE "ENV_" "" __var "${__var}" ) + set( __value "$ENV{${__var}}" ) + elseif( DEFINED ${__var} ) + set( __value "${${__var}}" ) + else() + if( __values ) + set( __value "${__var}" ) + else() + set( __value "" ) + endif() + endif() + if( NOT "${__value}" STREQUAL "" ) + if( __test_path ) + if( EXISTS "${__value}" ) + set( ${var_name} "${__value}" ) + if( __obsolete ) + message( WARNING "Using value of obsolete variable ${__var} as initial value for ${var_name}. Please note, that ${__var} can be completely removed in future versions of the toolchain." ) + endif() + break() + endif() + else() + set( ${var_name} "${__value}" ) + if( __obsolete ) + message( WARNING "Using value of obsolete variable ${__var} as initial value for ${var_name}. Please note, that ${__var} can be completely removed in future versions of the toolchain." ) + endif() + break() + endif() + endif() + endif() + endforeach() + unset( __value ) + unset( __values ) + unset( __obsolete ) + endif() + unset( __test_path ) +endmacro() + +macro( __DETECT_NATIVE_API_LEVEL _var _path ) + SET( __ndkApiLevelRegex "^[\t ]*#define[\t ]+__ANDROID_API__[\t ]+([0-9]+)[\t ]*$" ) + FILE( STRINGS ${_path} __apiFileContent REGEX "${__ndkApiLevelRegex}" ) + if( NOT __apiFileContent ) + message( SEND_ERROR "Could not get Android native API level. Probably you have specified invalid level value, or your copy of NDK/toolchain is broken." ) + endif() + string( REGEX REPLACE "${__ndkApiLevelRegex}" "\\1" ${_var} "${__apiFileContent}" ) + unset( __apiFileContent ) + unset( __ndkApiLevelRegex ) +endmacro() + +macro( __DETECT_TOOLCHAIN_MACHINE_NAME _var _root ) + file( GLOB __gccExePath "${_root}/bin/*-gcc${TOOL_OS_SUFFIX}" ) + __LIST_FILTER( __gccExePath "bin/[.].*-gcc${TOOL_OS_SUFFIX}$" ) + list( LENGTH __gccExePath __gccExePathsCount ) + if( NOT __gccExePathsCount EQUAL 1 ) + message( WARNING "Could not uniquely determine machine name for compiler from ${_root}." ) + set( ${_var} "" ) + else() + get_filename_component( __gccExeName "${__gccExePath}" NAME_WE ) + string( REPLACE "-gcc" "" ${_var} "${__gccExeName}" ) + endif() + unset( __gccExePath ) + unset( __gccExePathsCount ) + unset( __gccExeName ) +endmacro() + +macro( __COPY_IF_DIFFERENT _source _destination ) + execute_process( COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${_source}" "${_destination}" RESULT_VARIABLE __fileCopyProcess ) + if( NOT __fileCopyProcess EQUAL 0 OR NOT EXISTS "${_destination}") + message( SEND_ERROR "Failed copying of ${_source} to the ${_destination}" ) + endif() + unset( __fileCopyProcess ) +endmacro() + + +# stl version: by default gnustl_static will be used +set( ANDROID_USE_STLPORT FALSE CACHE BOOL "Experimental: use stlport_static instead of gnustl_static") +mark_as_advanced( ANDROID_USE_STLPORT ) + +# fight against cygwin +set( ANDROID_FORBID_SYGWIN TRUE CACHE BOOL "Prevent cmake from working under cygwin and using cygwin tools") +mark_as_advanced( ANDROID_FORBID_SYGWIN ) +if( ANDROID_FORBID_SYGWIN ) + if( CYGWIN ) + message( FATAL_ERROR "Android NDK and android-cmake toolchain are not welcome Cygwin. It is unlikely that this cmake toolchain will work under cygwin. But if you want to try then you can set cmake variable ANDROID_FORBID_SYGWIN to FALSE and rerun cmake." ) + endif() + + if( CMAKE_HOST_WIN32 ) + # remove cygwin from PATH + set( __new_path "$ENV{PATH}") + __LIST_FILTER( __new_path "cygwin" ) + set(ENV{PATH} "${__new_path}") + unset(__new_path) + endif() +endif() + +# detect current host platform +set( TOOL_OS_SUFFIX "" ) +if( CMAKE_HOST_APPLE ) + set( ANDROID_NDK_HOST_SYSTEM_NAME "darwin-x86" ) +elseif( CMAKE_HOST_WIN32 ) + set( ANDROID_NDK_HOST_SYSTEM_NAME "windows" ) + set( TOOL_OS_SUFFIX ".exe" ) +elseif( CMAKE_HOST_UNIX ) + set( ANDROID_NDK_HOST_SYSTEM_NAME "linux-x86" ) +else() + message( FATAL_ERROR "Cross-compilation on your platform is not supported by this cmake toolchain" ) +endif() + +# see if we have path to Android NDK +__INIT_VARIABLE( ANDROID_NDK PATH ENV_ANDROID_NDK ) +if( NOT ANDROID_NDK ) + # see if we have path to Android standalone toolchain + __INIT_VARIABLE( ANDROID_STANDALONE_TOOLCHAIN PATH ENV_ANDROID_STANDALONE_TOOLCHAIN OBSOLETE_ANDROID_NDK_TOOLCHAIN_ROOT OBSOLETE_ENV_ANDROID_NDK_TOOLCHAIN_ROOT ) + + if( NOT ANDROID_STANDALONE_TOOLCHAIN ) + #try to find Android NDK in one of the the default locations + set( __ndkSearchPaths ) + foreach( __ndkSearchPath ${ANDROID_NDK_SEARCH_PATHS} ) + foreach( suffix ${ANDROID_SUPPORTED_NDK_VERSIONS} ) + list( APPEND __ndkSearchPaths "${__ndkSearchPath}${suffix}" ) + endforeach() + endforeach() + __INIT_VARIABLE( ANDROID_NDK PATH VALUES ${__ndkSearchPaths} ) + unset( __ndkSearchPaths ) + + if( ANDROID_NDK ) + message( STATUS "Using default path for Android NDK: ${ANDROID_NDK}" ) + message( STATUS " If you prefer to use a different location, please define a cmake or environment variable: ANDROID_NDK" ) + else() + #try to find Android standalone toolchain in one of the the default locations + __INIT_VARIABLE( ANDROID_STANDALONE_TOOLCHAIN PATH ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH ) + + if( ANDROID_STANDALONE_TOOLCHAIN ) + message( STATUS "Using default path for standalone toolchain ${ANDROID_STANDALONE_TOOLCHAIN}" ) + message( STATUS " If you prefer to use a different location, please define the variable: ANDROID_STANDALONE_TOOLCHAIN" ) + endif( ANDROID_STANDALONE_TOOLCHAIN ) + endif( ANDROID_NDK ) + endif( NOT ANDROID_STANDALONE_TOOLCHAIN ) +endif( NOT ANDROID_NDK ) + +# remember found paths +if( ANDROID_NDK ) + get_filename_component( ANDROID_NDK "${ANDROID_NDK}" ABSOLUTE ) + # try to detect change + if( CMAKE_AR ) + string( LENGTH "${ANDROID_NDK}" __length ) + string( SUBSTRING "${CMAKE_AR}" 0 ${__length} __androidNdkPreviousPath ) + if( NOT __androidNdkPreviousPath STREQUAL ANDROID_NDK ) + message( FATAL_ERROR "It is not possible to change path to the NDK on subsequent run." ) + endif() + unset( __androidNdkPreviousPath ) + unset( __length ) + endif() + set( ANDROID_NDK "${ANDROID_NDK}" CACHE INTERNAL "Path of the Android NDK" ) + set( BUILD_WITH_ANDROID_NDK True ) +elseif( ANDROID_STANDALONE_TOOLCHAIN ) + get_filename_component( ANDROID_STANDALONE_TOOLCHAIN "${ANDROID_STANDALONE_TOOLCHAIN}" ABSOLUTE ) + # try to detect change + if( CMAKE_AR ) + string( LENGTH "${ANDROID_STANDALONE_TOOLCHAIN}" __length ) + string( SUBSTRING "${CMAKE_AR}" 0 ${__length} __androidStandaloneToolchainPreviousPath ) + if( NOT __androidStandaloneToolchainPreviousPath STREQUAL ANDROID_STANDALONE_TOOLCHAIN ) + message( FATAL_ERROR "It is not possible to change path to the Android standalone toolchain on subsequent run." ) + endif() + unset( __androidStandaloneToolchainPreviousPath ) + unset( __length ) + endif() + set( ANDROID_STANDALONE_TOOLCHAIN "${ANDROID_STANDALONE_TOOLCHAIN}" CACHE INTERNAL "Path of the Android standalone toolchain" ) + set( BUILD_WITH_STANDALONE_TOOLCHAIN True ) +else() + list(GET ANDROID_NDK_SEARCH_PATHS 0 ANDROID_NDK_SEARCH_PATH) + message( FATAL_ERROR "Could not find neither Android NDK nor Android standalone toolcahin. + You should either set an environment variable: + export ANDROID_NDK=~/my-android-ndk + or + export ANDROID_STANDALONE_TOOLCHAIN=~/my-android-toolchain + or put the toolchain or NDK in the default path: + sudo ln -s ~/my-android-ndk ${ANDROID_NDK_SEARCH_PATH} + sudo ln -s ~/my-android-toolchain ${ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH}" ) +endif() + +# get all the details about standalone toolchain +if( BUILD_WITH_STANDALONE_TOOLCHAIN ) + __DETECT_NATIVE_API_LEVEL( ANDROID_SUPPORTED_NATIVE_API_LEVELS "${ANDROID_STANDALONE_TOOLCHAIN}/sysroot/usr/include/android/api-level.h" ) + set( ANDROID_STANDALONE_TOOLCHAIN_API_LEVEL ${ANDROID_SUPPORTED_NATIVE_API_LEVELS} ) + set( __availableToolchains "standalone" ) + __DETECT_TOOLCHAIN_MACHINE_NAME( __availableToolchainMachines "${ANDROID_STANDALONE_TOOLCHAIN}" ) + if( NOT __availableToolchainMachines ) + message( FATAL_ERROR "Could not determine machine name of your toolchain. Probably your Android standalone toolchain is broken." ) + endif() + if( __availableToolchainMachines MATCHES i686 ) + set( __availableToolchainArchs "x86" ) + elseif( __availableToolchainMachines MATCHES arm ) + set( __availableToolchainArchs "arm" ) + elseif( __availableToolchainMachines MATCHES mipsel ) + set( __availableToolchainArchs "mipsel" ) + endif() + if( ANDROID_COMPILER_VERSION ) + # do not run gcc every time because it is relatevely expencive + set( __availableToolchainCompilerVersions "${ANDROID_COMPILER_VERSION}" ) + else() + execute_process( COMMAND "${ANDROID_STANDALONE_TOOLCHAIN}/bin/${__availableToolchainMachines}-gcc${TOOL_OS_SUFFIX}" --version + OUTPUT_VARIABLE __availableToolchainCompilerVersions OUTPUT_STRIP_TRAILING_WHITESPACE ) + string( REGEX MATCH "[0-9]+.[0-9]+.[0-9]+" __availableToolchainCompilerVersions "${__availableToolchainCompilerVersions}" ) + endif() +endif() + +# get all the details about NDK +if( BUILD_WITH_ANDROID_NDK ) + file( GLOB ANDROID_SUPPORTED_NATIVE_API_LEVELS RELATIVE "${ANDROID_NDK}/platforms" "${ANDROID_NDK}/platforms/android-*" ) + string( REPLACE "android-" "" ANDROID_SUPPORTED_NATIVE_API_LEVELS "${ANDROID_SUPPORTED_NATIVE_API_LEVELS}" ) + file( GLOB __availableToolchains RELATIVE "${ANDROID_NDK}/toolchains" "${ANDROID_NDK}/toolchains/*" ) + __LIST_FILTER( __availableToolchains "^[.]" ) + set( __availableToolchainMachines "" ) + set( __availableToolchainArchs "" ) + set( __availableToolchainCompilerVersions "" ) + foreach( __toolchain ${__availableToolchains} ) + __DETECT_TOOLCHAIN_MACHINE_NAME( __machine "${ANDROID_NDK}/toolchains/${__toolchain}/prebuilt/${ANDROID_NDK_HOST_SYSTEM_NAME}" ) + if( __machine ) + string( REGEX MATCH "[0-9]+[.][0-9]+[.]*[0-9]*$" __version "${__toolchain}" ) + string( REGEX MATCH "^[^-]+" __arch "${__toolchain}" ) + list( APPEND __availableToolchainMachines "${__machine}" ) + list( APPEND __availableToolchainArchs "${__arch}" ) + list( APPEND __availableToolchainCompilerVersions "${__version}" ) + else() + list( REMOVE_ITEM __availableToolchains "${__toolchain}" ) + endif() + endforeach() + if( NOT __availableToolchains ) + message( FATAL_ERROR "Could not any working toolchain in the NDK. Probably your Android NDK is broken." ) + endif() +endif() + +# build list of available ABIs +if( NOT ANDROID_SUPPORTED_ABIS ) + set( ANDROID_SUPPORTED_ABIS "" ) + set( __uniqToolchainArchNames ${__availableToolchainArchs} ) + list( REMOVE_DUPLICATES __uniqToolchainArchNames ) + list( SORT __uniqToolchainArchNames ) + foreach( __arch ${__uniqToolchainArchNames} ) + list( APPEND ANDROID_SUPPORTED_ABIS ${ANDROID_SUPPORTED_ABIS_${__arch}} ) + endforeach() + unset( __uniqToolchainArchNames ) + if( NOT ANDROID_SUPPORTED_ABIS ) + message( FATAL_ERROR "No one of known Android ABIs is supported by this cmake toolchain." ) + endif() +endif() + +# choose target ABI +__INIT_VARIABLE( ANDROID_ABI OBSOLETE_ARM_TARGET OBSOLETE_ARM_TARGETS VALUES ${ANDROID_SUPPORTED_ABIS} ) +# verify that target ABI is supported +list( FIND ANDROID_SUPPORTED_ABIS "${ANDROID_ABI}" __androidAbiIdx ) +if( __androidAbiIdx EQUAL -1 ) + string( REPLACE ";" "\", \"", PRINTABLE_ANDROID_SUPPORTED_ABIS "${ANDROID_SUPPORTED_ABIS}" ) + message( FATAL_ERROR "Specified ANDROID_ABI = \"${ANDROID_ABI}\" is not supported by this cmake toolchain or your NDK/toolchain. + Supported values are: \"${PRINTABLE_ANDROID_SUPPORTED_ABIS}\" + " ) +endif() +unset( __androidAbiIdx ) + +# remember target ABI +set( ANDROID_ABI "${ANDROID_ABI}" CACHE STRING "The target ABI for Android. If arm, then armeabi-v7a is recommended for hardware floating point." FORCE ) + +# set target ABI options +if( ANDROID_ABI STREQUAL "x86" ) + set( X86 true ) + set( ANDROID_NDK_ABI_NAME "x86" ) + set( ANDROID_ARCH_NAME "x86" ) + set( ANDROID_ARCH_FULLNAME "x86" ) + set( CMAKE_SYSTEM_PROCESSOR "i686" ) +elseif( ANDROID_ABI STREQUAL "mips" ) + set( MIPS true ) + set( ANDROID_NDK_ABI_NAME "mips" ) + set( ANDROID_ARCH_NAME "mips" ) + set( ANDROID_ARCH_FULLNAME "mipsel" ) + set( CMAKE_SYSTEM_PROCESSOR "mips" ) +elseif( ANDROID_ABI STREQUAL "armeabi" ) + set( ARMEABI true ) + set( ANDROID_NDK_ABI_NAME "armeabi" ) + set( ANDROID_ARCH_NAME "arm" ) + set( ANDROID_ARCH_FULLNAME "arm" ) + set( CMAKE_SYSTEM_PROCESSOR "armv5te" ) +elseif( ANDROID_ABI STREQUAL "armeabi-v6 with VFP" ) + set( ARMEABI_V6 true ) + set( ANDROID_NDK_ABI_NAME "armeabi" ) + set( ANDROID_ARCH_NAME "arm" ) + set( ANDROID_ARCH_FULLNAME "arm" ) + set( CMAKE_SYSTEM_PROCESSOR "armv6" ) + # need always fallback to older platform + set( ARMEABI true ) +elseif( ANDROID_ABI STREQUAL "armeabi-v7a") + set( ARMEABI_V7A true ) + set( ANDROID_NDK_ABI_NAME "armeabi-v7a" ) + set( ANDROID_ARCH_NAME "arm" ) + set( ANDROID_ARCH_FULLNAME "arm" ) + set( CMAKE_SYSTEM_PROCESSOR "armv7-a" ) +elseif( ANDROID_ABI STREQUAL "armeabi-v7a with VFPV3" ) + set( ARMEABI_V7A true ) + set( ANDROID_NDK_ABI_NAME "armeabi-v7a" ) + set( ANDROID_ARCH_NAME "arm" ) + set( ANDROID_ARCH_FULLNAME "arm" ) + set( CMAKE_SYSTEM_PROCESSOR "armv7-a" ) + set( VFPV3 true ) +elseif( ANDROID_ABI STREQUAL "armeabi-v7a with NEON" ) + set( ARMEABI_V7A true ) + set( ANDROID_NDK_ABI_NAME "armeabi-v7a" ) + set( ANDROID_ARCH_NAME "arm" ) + set( ANDROID_ARCH_FULLNAME "arm" ) + set( CMAKE_SYSTEM_PROCESSOR "armv7-a" ) + set( VFPV3 true ) + set( NEON true ) +else() + message( SEND_ERROR "Unknown ANDROID_ABI=\"${ANDROID_ABI}\" is specified." ) +endif() + +if( CMAKE_BINARY_DIR AND EXISTS "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeSystem.cmake" ) + # really dirty hack + # it is not possible to change CMAKE_SYSTEM_PROCESSOR after the first run... + file( APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeSystem.cmake" "SET(CMAKE_SYSTEM_PROCESSOR \"${CMAKE_SYSTEM_PROCESSOR}\")\n" ) +endif() + +set( ANDROID_SUPPORTED_ABIS ${ANDROID_SUPPORTED_ABIS_${ANDROID_ARCH_FULLNAME}} CACHE INTERNAL "ANDROID_ABI can be changed only to one of these ABIs. Changing to any other ABI requires to reset cmake cache." ) +if( CMAKE_VERSION VERSION_GREATER "2.8" ) + list( SORT ANDROID_SUPPORTED_ABIS_${ANDROID_ARCH_FULLNAME} ) + set_property( CACHE ANDROID_ABI PROPERTY STRINGS ${ANDROID_SUPPORTED_ABIS_${ANDROID_ARCH_FULLNAME}} ) +endif() + +if( ANDROID_ARCH_NAME STREQUAL "arm" AND NOT ARMEABI_V6 ) + __INIT_VARIABLE( ANDROID_FORCE_ARM_BUILD OBSOLETE_FORCE_ARM VALUES OFF ) + set( ANDROID_FORCE_ARM_BUILD ${ANDROID_FORCE_ARM_BUILD} CACHE BOOL "Use 32-bit ARM instructions instead of Thumb-1" FORCE ) + mark_as_advanced( ANDROID_FORCE_ARM_BUILD ) +else() + unset( ANDROID_FORCE_ARM_BUILD CACHE ) +endif() + +# choose toolchain +if( ANDROID_TOOLCHAIN_NAME ) + list( FIND __availableToolchains "${ANDROID_TOOLCHAIN_NAME}" __toolchainIdx ) + if( __toolchainIdx EQUAL -1 ) + message( FATAL_ERROR "Previously selected toolchain \"${ANDROID_TOOLCHAIN_NAME}\" is missing. You need to remove CMakeCache.txt and rerun cmake manually to change the toolchain" ) + endif() + list( GET __availableToolchainArchs ${__toolchainIdx} __toolchainArch ) + if( NOT __toolchainArch STREQUAL ANDROID_ARCH_FULLNAME ) + message( SEND_ERROR "Previously selected toolchain \"${ANDROID_TOOLCHAIN_NAME}\" is not able to compile binaries for the \"${ANDROID_ARCH_NAME}\" platform." ) + endif() +else() + set( __toolchainIdx -1 ) + set( __applicableToolchains "" ) + set( __toolchainMaxVersion "0.0.0" ) + list( LENGTH __availableToolchains __availableToolchainsCount ) + math( EXPR __availableToolchainsCount "${__availableToolchainsCount}-1" ) + foreach( __idx RANGE ${__availableToolchainsCount} ) + list( GET __availableToolchainArchs ${__idx} __toolchainArch ) + if( __toolchainArch STREQUAL ANDROID_ARCH_FULLNAME ) + list( GET __availableToolchainCompilerVersions ${__idx} __toolchainVersion ) + if( __toolchainVersion VERSION_GREATER __toolchainMaxVersion ) + set( __toolchainMaxVersion "${__toolchainVersion}" ) + set( __toolchainIdx ${__idx} ) + endif() + endif() + endforeach() + unset( __availableToolchainsCount ) + unset( __toolchainMaxVersion ) + unset( __toolchainVersion ) +endif() +unset( __toolchainArch ) +if( __toolchainIdx EQUAL -1 ) + message( FATAL_ERROR "No one of available compiler toolchains is able to compile for ${ANDROID_ARCH_NAME} platform." ) +endif() +list( GET __availableToolchains ${__toolchainIdx} ANDROID_TOOLCHAIN_NAME ) +list( GET __availableToolchainMachines ${__toolchainIdx} ANDROID_TOOLCHAIN_MACHINE_NAME ) +list( GET __availableToolchainCompilerVersions ${__toolchainIdx} ANDROID_COMPILER_VERSION ) +set( ANDROID_TOOLCHAIN_NAME "${ANDROID_TOOLCHAIN_NAME}" CACHE INTERNAL "Name of toolchain used" ) +set( ANDROID_COMPILER_VERSION "${ANDROID_COMPILER_VERSION}" CACHE INTERNAL "compiler version from selected toolchain" ) +unset( __toolchainIdx ) +unset( __availableToolchains ) +unset( __availableToolchainMachines ) +unset( __availableToolchainArchs ) +unset( __availableToolchainCompilerVersions ) + +# choose native API level +__INIT_VARIABLE( ANDROID_NATIVE_API_LEVEL ENV_ANDROID_NATIVE_API_LEVEL ANDROID_API_LEVEL ENV_ANDROID_API_LEVEL ANDROID_STANDALONE_TOOLCHAIN_API_LEVEL ANDROID_DEFAULT_NDK_API_LEVEL_${ANDROID_ARCH_NAME} ANDROID_DEFAULT_NDK_API_LEVEL ) +string( REGEX MATCH "[0-9]+" ANDROID_NATIVE_API_LEVEL "${ANDROID_NATIVE_API_LEVEL}" ) +# validate +list( FIND ANDROID_SUPPORTED_NATIVE_API_LEVELS "${ANDROID_NATIVE_API_LEVEL}" __levelIdx ) +if( __levelIdx EQUAL -1 ) + message( SEND_ERROR "Specified Android native API level (${ANDROID_NATIVE_API_LEVEL}) is not supported by your NDK/toolchain." ) +endif() +unset( __levelIdx ) +if( BUILD_WITH_ANDROID_NDK ) + __DETECT_NATIVE_API_LEVEL( __realApiLevel "${ANDROID_NDK}/platforms/android-${ANDROID_NATIVE_API_LEVEL}/arch-${ANDROID_ARCH_NAME}/usr/include/android/api-level.h" ) + if( NOT __realApiLevel EQUAL ANDROID_NATIVE_API_LEVEL ) + message( SEND_ERROR "Specified Android API level (${ANDROID_NATIVE_API_LEVEL}) does not match to the level found (${__realApiLevel}). Probably your copy of NDK is broken." ) + endif() + unset( __realApiLevel ) +endif() +set( ANDROID_NATIVE_API_LEVEL "${ANDROID_NATIVE_API_LEVEL}" CACHE STRING "Android API level for native code" FORCE ) +if( CMAKE_VERSION VERSION_GREATER "2.8" ) + list( SORT ANDROID_SUPPORTED_NATIVE_API_LEVELS ) + set_property( CACHE ANDROID_NATIVE_API_LEVEL PROPERTY STRINGS ${ANDROID_SUPPORTED_NATIVE_API_LEVELS} ) +endif() + +# setup paths +if( BUILD_WITH_STANDALONE_TOOLCHAIN ) + set( ANDROID_TOOLCHAIN_ROOT "${ANDROID_STANDALONE_TOOLCHAIN}" ) + set( ANDROID_SYSROOT "${ANDROID_STANDALONE_TOOLCHAIN}/sysroot" ) + set( __stlLibPath "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib" ) +endif() +if( BUILD_WITH_ANDROID_NDK ) + set( ANDROID_TOOLCHAIN_ROOT "${ANDROID_NDK}/toolchains/${ANDROID_TOOLCHAIN_NAME}/prebuilt/${ANDROID_NDK_HOST_SYSTEM_NAME}" ) + set( ANDROID_SYSROOT "${ANDROID_NDK}/platforms/android-${ANDROID_NATIVE_API_LEVEL}/arch-${ANDROID_ARCH_NAME}" ) + if( ANDROID_USE_STLPORT ) + set( __stlIncludePath "${ANDROID_NDK}/sources/cxx-stl/stlport/stlport" ) + set( __stlLibPath "${ANDROID_NDK}/sources/cxx-stl/stlport/libs/${ANDROID_NDK_ABI_NAME}" ) + else() + if( EXISTS "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_COMPILER_VERSION}" ) + set( __stlIncludePath "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_COMPILER_VERSION}/include" ) + set( __stlLibPath "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_COMPILER_VERSION}/libs/${ANDROID_NDK_ABI_NAME}" ) + else() + set( __stlIncludePath "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/include" ) + set( __stlLibPath "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/libs/${ANDROID_NDK_ABI_NAME}" ) + endif() + endif() +endif() + +# specify the cross compiler +set( CMAKE_C_COMPILER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc${TOOL_OS_SUFFIX}" CACHE PATH "gcc" ) +set( CMAKE_CXX_COMPILER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-g++${TOOL_OS_SUFFIX}" CACHE PATH "g++" ) +set( CMAKE_ASM_COMPILER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc${TOOL_OS_SUFFIX}" CACHE PATH "Assembler" ) +if( CMAKE_VERSION VERSION_LESS 2.8.5 ) + set( CMAKE_ASM_COMPILER_ARG1 "-c" ) +endif() +# there may be a way to make cmake deduce these TODO deduce the rest of the tools +set( CMAKE_STRIP "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-strip${TOOL_OS_SUFFIX}" CACHE PATH "strip" ) +set( CMAKE_AR "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ar${TOOL_OS_SUFFIX}" CACHE PATH "archive" ) +set( CMAKE_LINKER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ld${TOOL_OS_SUFFIX}" CACHE PATH "linker" ) +set( CMAKE_NM "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-nm${TOOL_OS_SUFFIX}" CACHE PATH "nm" ) +set( CMAKE_OBJCOPY "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-objcopy${TOOL_OS_SUFFIX}" CACHE PATH "objcopy" ) +set( CMAKE_OBJDUMP "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-objdump${TOOL_OS_SUFFIX}" CACHE PATH "objdump" ) +set( CMAKE_RANLIB "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ranlib${TOOL_OS_SUFFIX}" CACHE PATH "ranlib" ) +set( _CMAKE_TOOLCHAIN_PREFIX "${ANDROID_TOOLCHAIN_MACHINE_NAME}-" ) +if( APPLE ) + find_program( CMAKE_INSTALL_NAME_TOOL NAMES install_name_tool ) + if( NOT CMAKE_INSTALL_NAME_TOOL ) + message( FATAL_ERROR "Could not find install_name_tool, please check your installation." ) + endif() + mark_as_advanced( CMAKE_INSTALL_NAME_TOOL ) +endif() + +# export directories +set( ANDROID_SYSTEM_INCLUDE_DIRS "" ) +set( ANDROID_SYSTEM_LIB_DIRS "" ) + +# setup output directories +set( LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_SOURCE_DIR} CACHE PATH "root for library output, set this to change where android libs are installed to" ) +set( CMAKE_INSTALL_PREFIX "${ANDROID_TOOLCHAIN_ROOT}/user" CACHE STRING "path for installing" ) + +if(NOT _CMAKE_IN_TRY_COMPILE) + if( EXISTS "${CMAKE_SOURCE_DIR}/jni/CMakeLists.txt" ) + set( EXECUTABLE_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/bin/${ANDROID_NDK_ABI_NAME}" CACHE PATH "Output directory for applications" ) + else() + set( EXECUTABLE_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/bin" CACHE PATH "Output directory for applications" ) + endif() + set( LIBRARY_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_ABI_NAME}" CACHE PATH "path for android libs" ) +endif() + +# includes +list( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${ANDROID_SYSROOT}/usr/include" ) +if( __stlIncludePath AND EXISTS "${__stlIncludePath}" ) + list( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${__stlIncludePath}" ) +endif() + +# c++ bits includes +if( __stlLibPath AND EXISTS "${__stlLibPath}/include" ) + list( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${__stlLibPath}/include" ) +endif() +if( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}/thumb/bits" ) + list( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}/thumb" ) +elseif( EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}/bits" ) + list( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}" ) +elseif( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/thumb/bits" ) + list( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/thumb" ) +elseif( EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/bits" ) + list( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}" ) +endif() + +# flags and definitions +if(ANDROID_SYSROOT MATCHES "[ ;\"]") + set( ANDROID_CXX_FLAGS "--sysroot=\"${ANDROID_SYSROOT}\"" ) + # quotes will break try_compile and compiler identification + message(WARNING "Your Android system root has non-alphanumeric symbols. It can break compiler features detection and the whole build.") +else() + set( ANDROID_CXX_FLAGS "--sysroot=${ANDROID_SYSROOT}" ) +endif() + +remove_definitions( -DANDROID ) +add_definitions( -DANDROID ) + +# Force set compilers because standard identification works badly for us +include( CMakeForceCompiler ) +CMAKE_FORCE_C_COMPILER( "${CMAKE_C_COMPILER}" GNU ) +set( CMAKE_C_PLATFORM_ID Linux ) +set( CMAKE_C_SIZEOF_DATA_PTR 4 ) +set( CMAKE_C_HAS_ISYSROOT 1 ) +set( CMAKE_C_COMPILER_ABI ELF ) +CMAKE_FORCE_CXX_COMPILER( "${CMAKE_CXX_COMPILER}" GNU ) +set( CMAKE_CXX_PLATFORM_ID Linux ) +set( CMAKE_CXX_SIZEOF_DATA_PTR 4 ) +set( CMAKE_CXX_HAS_ISYSROOT 1 ) +set( CMAKE_CXX_COMPILER_ABI ELF ) +# force ASM compiler (required for CMake < 2.8.5) +set( CMAKE_ASM_COMPILER_ID_RUN TRUE ) +set( CMAKE_ASM_COMPILER_ID GNU ) +set( CMAKE_ASM_COMPILER_WORKS TRUE ) +set( CMAKE_ASM_COMPILER_FORCED TRUE ) +set( CMAKE_COMPILER_IS_GNUASM 1) + +# NDK flags +if( ARMEABI OR ARMEABI_V7A ) + # NDK also defines -ffunction-sections -funwind-tables but they result in worse OpenCV performance + set( _CMAKE_CXX_FLAGS "-fPIC -Wno-psabi" ) + set( _CMAKE_C_FLAGS "-fPIC -Wno-psabi" ) + remove_definitions( -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ ) + add_definitions( -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ ) + # extra arm-specific flags + set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -fsigned-char" ) +elseif( X86 ) + set( _CMAKE_CXX_FLAGS "-funwind-tables" ) + set( _CMAKE_C_FLAGS "-funwind-tables" ) +elseif( MIPS ) + set( _CMAKE_CXX_FLAGS "-fpic -Wno-psabi -fno-strict-aliasing -finline-functions -ffunction-sections -funwind-tables -fmessage-length=0 -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop -frename-registers" ) + set( _CMAKE_CXX_FLAGS "-fpic -Wno-psabi -fno-strict-aliasing -finline-functions -ffunction-sections -funwind-tables -fmessage-length=0 -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop -frename-registers" ) + set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -fsigned-char" ) +else() + set( _CMAKE_CXX_FLAGS "" ) + set( _CMAKE_C_FLAGS "" ) +endif() + +if( ANDROID_USE_STLPORT ) + set( _CMAKE_CXX_FLAGS "${_CMAKE_CXX_FLAGS} -fno-rtti -fno-exceptions" ) + set( _CMAKE_C_FLAGS "${_CMAKE_C_FLAGS} -fno-exceptions" ) +else() + set( _CMAKE_CXX_FLAGS "${_CMAKE_CXX_FLAGS} -frtti -fexceptions" ) + set( _CMAKE_C_FLAGS "${_CMAKE_C_FLAGS} -fexceptions" ) +endif() + +# release and debug flags +if( ARMEABI OR ARMEABI_V7A ) + if( NOT ANDROID_FORCE_ARM_BUILD AND NOT ARMEABI_V6 ) + # It is recommended to use the -mthumb compiler flag to force the generation + # of 16-bit Thumb-1 instructions (the default being 32-bit ARM ones). + # O3 instead of O2/Os in release mode - like cmake sets for desktop gcc + set( _CMAKE_CXX_FLAGS_RELEASE "-mthumb -O3" ) + set( _CMAKE_C_FLAGS_RELEASE "-mthumb -O3" ) + set( _CMAKE_CXX_FLAGS_DEBUG "-marm -Os -finline-limit=64" ) + set( _CMAKE_C_FLAGS_DEBUG "-marm -Os -finline-limit=64" ) + else() + # always compile ARMEABI_V6 in arm mode; otherwise there is no difference from ARMEABI + # O3 instead of O2/Os in release mode - like cmake sets for desktop gcc + set( _CMAKE_CXX_FLAGS_RELEASE "-marm -O3 -fstrict-aliasing" ) + set( _CMAKE_C_FLAGS_RELEASE "-marm -O3 -fstrict-aliasing" ) + set( _CMAKE_CXX_FLAGS_DEBUG "-marm -O0 -finline-limit=300" ) + set( _CMAKE_C_FLAGS_DEBUG "-marm -O0 -finline-limit=300" ) + endif() +elseif( X86 ) + set( _CMAKE_CXX_FLAGS_RELEASE "-O3 -fstrict-aliasing" ) + set( _CMAKE_C_FLAGS_RELEASE "-O3 -fstrict-aliasing" ) + set( _CMAKE_CXX_FLAGS_DEBUG "-O0 -finline-limit=300" ) + set( _CMAKE_C_FLAGS_DEBUG "-O0 -finline-limit=300" ) +elseif( MIPS ) + set( _CMAKE_CXX_FLAGS_RELEASE "-O3 -funswitch-loops -finline-limit=300" ) + set( _CMAKE_C_FLAGS_RELEASE "-O3 -funswitch-loops -finline-limit=300" ) + set( _CMAKE_CXX_FLAGS_DEBUG "-O0 -g" ) + set( _CMAKE_C_FLAGS_DEBUG "-O0 -g" ) +endif() +set( _CMAKE_CXX_FLAGS_RELEASE "${_CMAKE_CXX_FLAGS_RELEASE} -fomit-frame-pointer -DNDEBUG" ) +set( _CMAKE_C_FLAGS_RELEASE "${_CMAKE_C_FLAGS_RELEASE} -fomit-frame-pointer -DNDEBUG" ) +set( _CMAKE_CXX_FLAGS_DEBUG "${_CMAKE_CXX_FLAGS_DEBUG} -fno-strict-aliasing -fno-omit-frame-pointer -DDEBUG -D_DEBUG" ) +set( _CMAKE_C_FLAGS_DEBUG "${_CMAKE_C_FLAGS_DEBUG} -fno-strict-aliasing -fno-omit-frame-pointer -DDEBUG -D_DEBUG" ) + +# ABI-specific flags +if( ARMEABI_V7A ) + set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv7-a -mfloat-abi=softfp" ) + if( NEON ) + set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=neon" ) + elseif( VFPV3 ) + set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=vfpv3" ) + else() + set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=vfp" ) + endif() +elseif( ARMEABI_V6 ) + set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv6 -mfloat-abi=softfp -mfpu=vfp" ) +elseif( ARMEABI ) + set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv5te -mtune=xscale -msoft-float" ) +elseif( X86 ) + set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS}" )#sse? +endif() + +# linker flags +if( NOT DEFINED __ndklibspath ) + set( __ndklibspath "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/ndklibs/${ANDROID_NDK_ABI_NAME}" ) +endif() +list( APPEND ANDROID_SYSTEM_LIB_DIRS "${CMAKE_INSTALL_PREFIX}/libs/${ANDROID_NDK_ABI_NAME}" ) +set( ANDROID_LINKER_FLAGS "" ) + +# STL +if( ANDROID_USE_STLPORT ) + if( EXISTS "${__stlLibPath}/libstlport_static.a" ) + set( CMAKE_CXX_CREATE_SHARED_LIBRARY " -o \"${__stlLibPath}/libstlport_static.a\"") + set( CMAKE_CXX_CREATE_SHARED_MODULE " -o \"${__stlLibPath}/libstlport_static.a\"") + endif() +else( ANDROID_USE_STLPORT ) + if( EXISTS "${__stlLibPath}/libgnustl_static.a" ) + __COPY_IF_DIFFERENT( "${__stlLibPath}/libgnustl_static.a" "${__ndklibspath}/libstdc++.a" ) + elseif( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${__stlLibPath}/${CMAKE_SYSTEM_PROCESSOR}/thumb/libstdc++.a" ) + __COPY_IF_DIFFERENT( "${__stlLibPath}/${CMAKE_SYSTEM_PROCESSOR}/thumb/libstdc++.a" "${__ndklibspath}/libstdc++.a" ) + elseif( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${__stlLibPath}/${CMAKE_SYSTEM_PROCESSOR}/libstdc++.a" ) + __COPY_IF_DIFFERENT( "${__stlLibPath}/${CMAKE_SYSTEM_PROCESSOR}/libstdc++.a" "${__ndklibspath}/libstdc++.a" ) + elseif( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${__stlLibPath}/thumb/libstdc++.a" ) + __COPY_IF_DIFFERENT( "${__stlLibPath}/thumb/libstdc++.a" "${__ndklibspath}/libstdc++.a" ) + elseif( EXISTS "${__stlLibPath}/libstdc++.a" ) + __COPY_IF_DIFFERENT( "${__stlLibPath}/libstdc++.a" "${__ndklibspath}/libstdc++.a" ) + endif() + if( EXISTS "${__stlLibPath}/libsupc++.a" ) + __COPY_IF_DIFFERENT( "${__stlLibPath}/libsupc++.a" "${__ndklibspath}/libsupc++.a" ) + elseif( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb/libsupc++.a" ) + __COPY_IF_DIFFERENT( "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb/libsupc++.a" "${__ndklibspath}/libsupc++.a" ) + elseif( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libsupc++.a" ) + __COPY_IF_DIFFERENT( "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libsupc++.a" "${__ndklibspath}/libsupc++.a" ) + elseif( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libsupc++.a" ) + __COPY_IF_DIFFERENT( "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libsupc++.a" "${__ndklibspath}/libsupc++.a" ) + elseif( EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libsupc++.a" ) + __COPY_IF_DIFFERENT( "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libsupc++.a" "${__ndklibspath}/libsupc++.a" ) + endif() + list( APPEND ANDROID_SYSTEM_LIB_DIRS "${__ndklibspath}" ) +endif( ANDROID_USE_STLPORT ) + +# cleanup for STL search +unset( __stlIncludePath ) +unset( __stlLibPath ) + +# other linker flags +__INIT_VARIABLE( ANDROID_NO_UNDEFINED OBSOLETE_NO_UNDEFINED VALUES ON ) +set( ANDROID_NO_UNDEFINED ${ANDROID_NO_UNDEFINED} CACHE BOOL "Show all undefined symbols as linker errors" FORCE ) +mark_as_advanced( ANDROID_NO_UNDEFINED ) +if( ANDROID_NO_UNDEFINED ) + set( ANDROID_LINKER_FLAGS "-Wl,--no-undefined ${ANDROID_LINKER_FLAGS}" ) +endif() + +if (ANDROID_NDK MATCHES "-r[56].?$") + # libGLESv2.so in NDK's prior to r7 refers to exteranal symbols. So this flag option is required for all projects using OpenGL from native. + __INIT_VARIABLE( ANDROID_SO_UNDEFINED VALUES ON ) +else() + __INIT_VARIABLE( ANDROID_SO_UNDEFINED VALUES OFF ) +endif() + +set( ANDROID_SO_UNDEFINED ${ANDROID_SO_UNDEFINED} CACHE BOOL "Allows or disallows undefined symbols in shared libraries" FORCE ) +mark_as_advanced( ANDROID_SO_UNDEFINED ) +if( ANDROID_SO_UNDEFINED ) + set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,-allow-shlib-undefined" ) +endif() + +__INIT_VARIABLE( ANDROID_FUNCTION_LEVEL_LINKING VALUES ON ) +set( ANDROID_FUNCTION_LEVEL_LINKING ON CACHE BOOL "Allows or disallows undefined symbols in shared libraries" FORCE ) +mark_as_advanced( ANDROID_FUNCTION_LEVEL_LINKING ) +if( ANDROID_FUNCTION_LEVEL_LINKING ) + set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -fdata-sections -ffunction-sections" ) + set( ANDROID_LINKER_FLAGS "-Wl,--gc-sections ${ANDROID_LINKER_FLAGS}" ) +endif() + +if( ARMEABI_V7A ) + # this is *required* to use the following linker flags that routes around + # a CPU bug in some Cortex-A8 implementations: + set( ANDROID_LINKER_FLAGS "-Wl,--fix-cortex-a8 ${ANDROID_LINKER_FLAGS}" ) +endif() + +# cache flags +set( CMAKE_CXX_FLAGS "${_CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags" ) +set( CMAKE_C_FLAGS "${_CMAKE_C_FLAGS}" CACHE STRING "c flags" ) +set( CMAKE_CXX_FLAGS_RELEASE "${_CMAKE_CXX_FLAGS_RELEASE}" CACHE STRING "c++ Release flags" ) +set( CMAKE_C_FLAGS_RELEASE "${_CMAKE_C_FLAGS_RELEASE}" CACHE STRING "c Release flags" ) +set( CMAKE_CXX_FLAGS_DEBUG "${_CMAKE_CXX_FLAGS_DEBUG}" CACHE STRING "c++ Debug flags" ) +set( CMAKE_C_FLAGS_DEBUG "${_CMAKE_C_FLAGS_DEBUG}" CACHE STRING "c Debug flags" ) +set( CMAKE_SHARED_LINKER_FLAGS "" CACHE STRING "linker flags" ) +set( CMAKE_MODULE_LINKER_FLAGS "" CACHE STRING "linker flags" ) +set( CMAKE_EXE_LINKER_FLAGS "-Wl,-z,nocopyreloc" CACHE STRING "linker flags" ) + +include_directories( SYSTEM ${ANDROID_SYSTEM_INCLUDE_DIRS} ) +link_directories( ${ANDROID_SYSTEM_LIB_DIRS} ) + +# finish flags +set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS}" CACHE INTERNAL "Extra Android compiler flags") +set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS}" CACHE INTERNAL "Extra Android linker flags") +set( CMAKE_CXX_FLAGS "${ANDROID_CXX_FLAGS} ${CMAKE_CXX_FLAGS}" ) +set( CMAKE_C_FLAGS "${ANDROID_CXX_FLAGS} ${CMAKE_C_FLAGS}" ) +if( MIPS AND BUILD_WITH_ANDROID_NDK ) + set( CMAKE_SHARED_LINKER_FLAGS "-Wl,-T,${ANDROID_NDK}/toolchains/${ANDROID_TOOLCHAIN_NAME}/mipself.xsc ${ANDROID_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS}" ) + set( CMAKE_MODULE_LINKER_FLAGS "-Wl,-T,${ANDROID_NDK}/toolchains/${ANDROID_TOOLCHAIN_NAME}/mipself.xsc ${ANDROID_LINKER_FLAGS} ${CMAKE_MODULE_LINKER_FLAGS}" ) + set( CMAKE_EXE_LINKER_FLAGS "-Wl,-T,${ANDROID_NDK}/toolchains/${ANDROID_TOOLCHAIN_NAME}/mipself.x ${ANDROID_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}" ) +else() + set( CMAKE_SHARED_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS}" ) + set( CMAKE_MODULE_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} ${CMAKE_MODULE_LINKER_FLAGS}" ) + set( CMAKE_EXE_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}" ) +endif() + +# set these global flags for cmake client scripts to change behavior +set( ANDROID True ) +set( BUILD_ANDROID True ) + +# where is the target environment +set( CMAKE_FIND_ROOT_PATH "${ANDROID_TOOLCHAIN_ROOT}/bin" "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}" "${ANDROID_SYSROOT}" "${CMAKE_INSTALL_PREFIX}" "${CMAKE_INSTALL_PREFIX}/share" ) + +# only search for libraries and includes in the ndk toolchain +set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) +set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) +set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) + + +# macro to find packages on the host OS +macro( find_host_package ) + set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER ) + set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER ) + set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER ) + if( CMAKE_HOST_WIN32 ) + SET( WIN32 1 ) + SET( UNIX ) + elseif( CMAKE_HOST_APPLE ) + SET( APPLE 1 ) + SET( UNIX ) + endif() + find_package( ${ARGN} ) + SET( WIN32 ) + SET( APPLE ) + SET( UNIX 1 ) + set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) + set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) + set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) +endmacro() + + +# macro to find programs on the host OS +macro( find_host_program ) + set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER ) + set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER ) + set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER ) + if( CMAKE_HOST_WIN32 ) + SET( WIN32 1 ) + SET( UNIX ) + elseif( CMAKE_HOST_APPLE ) + SET( APPLE 1 ) + SET( UNIX ) + endif() + find_program( ${ARGN} ) + SET( WIN32 ) + SET( APPLE ) + SET( UNIX 1 ) + set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) + set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) + set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) +endmacro() + + +macro( ANDROID_GET_ABI_RAWNAME TOOLCHAIN_FLAG VAR ) + if( "${TOOLCHAIN_FLAG}" STREQUAL "ARMEABI" ) + set( ${VAR} "armeabi" ) + elseif( "${TOOLCHAIN_FLAG}" STREQUAL "ARMEABI_V7A" ) + set( ${VAR} "armeabi-v7a" ) + elseif( "${TOOLCHAIN_FLAG}" STREQUAL "X86" ) + set( ${VAR} "x86" ) + else() + set( ${VAR} "unknown" ) + endif() +endmacro() + + +# export toolchain settings for the try_compile() command +if( NOT PROJECT_NAME STREQUAL "CMAKE_TRY_COMPILE" ) + set( __toolchain_config "") + foreach( __var ANDROID_ABI ANDROID_FORCE_ARM_BUILD ANDROID_NATIVE_API_LEVEL ANDROID_NO_UNDEFINED ANDROID_SO_UNDEFINED ANDROID_SET_OBSOLETE_VARIABLES LIBRARY_OUTPUT_PATH_ROOT ANDROID_USE_STLPORT ANDROID_FORBID_SYGWIN ANDROID_NDK ANDROID_STANDALONE_TOOLCHAIN ANDROID_FUNCTION_LEVEL_LINKING __ndklibspath ) + if( DEFINED ${__var} ) + if( "${__var}" MATCHES " ") + set( __toolchain_config "${__toolchain_config}set( ${__var} \"${${__var}}\" CACHE INTERNAL \"\" )\n" ) + else() + set( __toolchain_config "${__toolchain_config}set( ${__var} ${${__var}} CACHE INTERNAL \"\" )\n" ) + endif() + endif() + endforeach() + file( WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/android.toolchain.config.cmake" "${__toolchain_config}" ) + unset( __toolchain_config ) + unset( __ndklibspath ) +endif() + + +# set some obsolete variables for backward compatibility +set( ANDROID_SET_OBSOLETE_VARIABLES ON CACHE BOOL "Define obsolete Andrid-specific cmake variables" ) +mark_as_advanced( ANDROID_SET_OBSOLETE_VARIABLES ) +if( ANDROID_SET_OBSOLETE_VARIABLES ) + set( ANDROID_API_LEVEL ${ANDROID_NATIVE_API_LEVEL} ) + set( ARM_TARGET "${ANDROID_ABI}" ) + set( ARMEABI_NDK_NAME "${ANDROID_NDK_ABI_NAME}" ) +endif() + + +# Variables controlling behavior or set by cmake toolchain: +# ANDROID_ABI : "armeabi-v7a" (default), "armeabi", "armeabi-v7a with NEON", "armeabi-v7a with VFPV3", "armeabi-v6 with VFP", "x86", "mips" +# ANDROID_NATIVE_API_LEVEL : 3,4,5,8,9,14 (depends on NDK version) +# ANDROID_SET_OBSOLETE_VARIABLES : ON/OFF +# ANDROID_USE_STLPORT : OFF/ON - EXPERIMENTAL!!! +# ANDROID_FORBID_SYGWIN : ON/OFF +# ANDROID_NO_UNDEFINED : ON/OFF +# ANDROID_SO_UNDEFINED : OFF/ON (default depends on NDK version) +# ANDROID_FUNCTION_LEVEL_LINKING : ON/OFF +# Variables that takes effect only at first run: +# ANDROID_FORCE_ARM_BUILD : ON/OFF +# LIBRARY_OUTPUT_PATH_ROOT : +# Can be set only at the first run: +# ANDROID_NDK +# ANDROID_STANDALONE_TOOLCHAIN +# ANDROID_TOOLCHAIN_NAME : "arm-linux-androideabi-4.4.3" or "arm-linux-androideabi-4.6" or "mipsel-linux-android-4.4.3" or "mipsel-linux-android-4.6" or "x86-4.4.3" or "x86-4.6" +# Obsolete: +# ANDROID_API_LEVEL : superseded by ANDROID_NATIVE_API_LEVEL +# ARM_TARGET : superseded by ANDROID_ABI +# ARM_TARGETS : superseded by ANDROID_ABI (can be set only) +# ANDROID_NDK_TOOLCHAIN_ROOT : superseded by ANDROID_STANDALONE_TOOLCHAIN (can be set only) +# ANDROID_LEVEL : superseded by ANDROID_NATIVE_API_LEVEL (completely removed) +# +# Primary read-only variables: +# ANDROID : always TRUE +# ARMEABI : TRUE for arm v6 and older devices +# ARMEABI_V6 : TRUE for arm v6 +# ARMEABI_V7A : TRUE for arm v7a +# NEON : TRUE if NEON unit is enabled +# VFPV3 : TRUE if VFP version 3 is enabled +# X86 : TRUE if configured for x86 +# BUILD_ANDROID : always TRUE +# BUILD_WITH_ANDROID_NDK : TRUE if NDK is used +# BUILD_WITH_STANDALONE_TOOLCHAIN : TRUE if standalone toolchain is used +# ANDROID_NDK_HOST_SYSTEM_NAME : "windows", "linux-x86" or "darwin-x86" depending on host platform +# ANDROID_NDK_ABI_NAME : "armeabi", "armeabi-v7a" or "x86" depending on ANDROID_ABI +# ANDROID_ARCH_NAME : "arm" or "x86" or "mips" depending on ANDROID_ABI +# TOOL_OS_SUFFIX : "" or ".exe" depending on host platform +# ANDROID_SYSROOT : path to the compiler sysroot +# ANDROID_SYSTEM_INCLUDE_DIRS +# ANDROID_SYSTEM_LIB_DIRS +# Obsolete: +# ARMEABI_NDK_NAME : superseded by ANDROID_NDK_ABI_NAME +# +# Secondary (less stable) read-only variables: +# ANDROID_COMPILER_VERSION : GCC version used +# ANDROID_CXX_FLAGS : C/C++ compiler flags required by Android platform +# ANDROID_SUPPORTED_ABIS : list of currently allowed values for ANDROID_ABI +# ANDROID_TOOLCHAIN_MACHINE_NAME : "arm-linux-androideabi", "arm-eabi" or "i686-android-linux" +# ANDROID_TOOLCHAIN_ROOT : path to the top level of toolchain (standalone or placed inside NDK) +# ANDROID_SUPPORTED_NATIVE_API_LEVELS : list of native API levels found inside NDK +# +# Defaults: +# ANDROID_DEFAULT_NDK_API_LEVEL +# ANDROID_DEFAULT_NDK_API_LEVEL_${ARCH} +# ANDROID_NDK_SEARCH_PATHS +# ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH +# ANDROID_SUPPORTED_ABIS_${ARCH} +# ANDROID_SUPPORTED_NDK_VERSIONS diff --git a/Source/Android/assets/ButtonA.png b/Source/Android/assets/ButtonA.png new file mode 100644 index 0000000000000000000000000000000000000000..7e685324ae8a4ad016eb1033d64b659966cfcd0c GIT binary patch literal 5178 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 literal 0 HcmV?d00001 diff --git a/Source/Android/build.xml b/Source/Android/build.xml new file mode 100644 index 0000000000..dc36e5c45a --- /dev/null +++ b/Source/Android/build.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Android/custom_rules.xml b/Source/Android/custom_rules.xml new file mode 100644 index 0000000000..3c6d5b53ba --- /dev/null +++ b/Source/Android/custom_rules.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/Source/Android/jni/Android.mk b/Source/Android/jni/Android.mk new file mode 100644 index 0000000000..68366e380c --- /dev/null +++ b/Source/Android/jni/Android.mk @@ -0,0 +1,189 @@ +LOCAL_PATH := $(call my-dir) + +# BEGIN Native Audio Separate Library - copy paste this section to your Android.mk + +include $(CLEAR_VARS) + +LOCAL_MODULE := native_audio +LOCAL_CFLAGS := -O2 -fsigned-char -ffast-math -Wall -Wno-multichar -Wno-psabi -std=gnu++0x +NATIVE := ../../native +LOCAL_SRC_FILES := \ + $(NATIVE)/android/native-audio-so.cpp +LOCAL_LDLIBS := -lOpenSLES -llog + +include $(BUILD_SHARED_LIBRARY) + +# END Native Audio Separate Library - copy paste this section to your Android.mk + +include $(CLEAR_VARS) + +#TARGET_PLATFORM := android-8 + +LOCAL_MODULE := ppsspp_jni + +NATIVE := ../../native +SRC := ../.. + +LOCAL_CFLAGS := -DUSE_PROFILER -DARM -DGL_GLEXT_PROTOTYPES -DUSING_GLES2 -O2 -fsigned-char -Wall -Wno-multichar -Wno-psabi -Wno-unused-variable -fno-strict-aliasing -ffast-math +LOCAL_CXXFLAGS := -std=gnu++0x +LOCAL_C_INCLUDES := \ + $(LOCAL_PATH)/../../Common \ + $(LOCAL_PATH)/../.. \ + $(LOCAL_PATH)/$(NATIVE)/base \ + $(LOCAL_PATH)/$(NATIVE)/ext/libzip \ + $(LOCAL_PATH)/$(NATIVE) \ + $(LOCAL_PATH) \ + +LOCAL_STATIC_LIBRARIES := native libzip +LOCAL_LDLIBS := -lz -lGLESv2 -ldl -llog + + +# $(SRC)/Core/EmuThread.cpp \ + +LOCAL_SRC_FILES := \ + NativeApp.cpp \ + EmuScreen.cpp \ + MenuScreens.cpp \ + UIShader.cpp \ + GamepadEmu.cpp \ + ArmEmitterTest.cpp \ + ui_atlas.cpp \ + $(SRC)/native/android/app-android.cpp \ + $(SRC)/ext/disarm.cpp \ + $(SRC)/ext/libkirk/AES.c \ + $(SRC)/ext/libkirk/SHA1.c \ + $(SRC)/ext/libkirk/bn.c \ + $(SRC)/ext/libkirk/ec.c \ + $(SRC)/ext/libkirk/kirk_engine.c \ + $(SRC)/ext/snappy/snappy-c.cpp \ + $(SRC)/ext/snappy/snappy.cpp \ + $(SRC)/Common/ArmEmitter.cpp \ + $(SRC)/Common/ArmCPUDetect.cpp \ + $(SRC)/Common/ArmThunk.cpp \ + $(SRC)/Common/LogManager.cpp \ + $(SRC)/Common/MemArena.cpp \ + $(SRC)/Common/MemoryUtil.cpp \ + $(SRC)/Common/MsgHandler.cpp \ + $(SRC)/Common/IniFile.cpp \ + $(SRC)/Common/FileUtil.cpp \ + $(SRC)/Common/StringUtil.cpp \ + $(SRC)/Common/Thread.cpp \ + $(SRC)/Common/Timer.cpp \ + $(SRC)/Common/Misc.cpp \ + $(SRC)/Common/MathUtil.cpp \ + $(SRC)/GPU/Math3D.cpp \ + $(SRC)/GPU/GPUCommon.cpp \ + $(SRC)/GPU/GPUState.cpp \ + $(SRC)/GPU/GeDisasm.cpp \ + $(SRC)/GPU/GLES/Framebuffer.cpp \ + $(SRC)/GPU/GLES/DisplayListInterpreter.cpp \ + $(SRC)/GPU/GLES/TextureCache.cpp \ + $(SRC)/GPU/GLES/IndexGenerator.cpp \ + $(SRC)/GPU/GLES/TransformPipeline.cpp \ + $(SRC)/GPU/GLES/StateMapping.cpp \ + $(SRC)/GPU/GLES/VertexDecoder.cpp \ + $(SRC)/GPU/GLES/ShaderManager.cpp \ + $(SRC)/GPU/GLES/VertexShaderGenerator.cpp \ + $(SRC)/GPU/GLES/FragmentShaderGenerator.cpp \ + $(SRC)/GPU/Null/NullGpu.cpp \ + $(SRC)/Core/ELF/ElfReader.cpp \ + $(SRC)/Core/ELF/PrxDecrypter.cpp \ + $(SRC)/Core/ELF/ParamSFO.cpp \ + $(SRC)/Core/HW/MemoryStick.cpp \ + $(SRC)/Core/HW/MediaEngine.cpp \ + $(SRC)/Core/HW/SasAudio.cpp \ + $(SRC)/Core/Core.cpp \ + $(SRC)/Core/Config.cpp \ + $(SRC)/Core/CoreTiming.cpp \ + $(SRC)/Core/CPU.cpp \ + $(SRC)/Core/Host.cpp \ + $(SRC)/Core/Loaders.cpp \ + $(SRC)/Core/PSPLoaders.cpp \ + $(SRC)/Core/MemMap.cpp \ + $(SRC)/Core/MemMapFunctions.cpp \ + $(SRC)/Core/SaveState.cpp \ + $(SRC)/Core/System.cpp \ + $(SRC)/Core/PSPMixer.cpp \ + $(SRC)/Core/Debugger/Breakpoints.cpp \ + $(SRC)/Core/Debugger/SymbolMap.cpp \ + $(SRC)/Core/Dialog/PSPDialog.cpp \ + $(SRC)/Core/Dialog/PSPMsgDialog.cpp \ + $(SRC)/Core/Dialog/PSPOskDialog.cpp \ + $(SRC)/Core/Dialog/PSPPlaceholderDialog.cpp \ + $(SRC)/Core/Dialog/PSPSaveDialog.cpp \ + $(SRC)/Core/Dialog/SavedataParam.cpp \ + $(SRC)/Core/HLE/HLETables.cpp \ + $(SRC)/Core/HLE/HLE.cpp \ + $(SRC)/Core/HLE/sceAtrac.cpp \ + $(SRC)/Core/HLE/__sceAudio.cpp \ + $(SRC)/Core/HLE/sceAudio.cpp \ + $(SRC)/Core/HLE/sceCtrl.cpp \ + $(SRC)/Core/HLE/sceDisplay.cpp \ + $(SRC)/Core/HLE/sceDmac.cpp \ + $(SRC)/Core/HLE/sceGe.cpp \ + $(SRC)/Core/HLE/sceFont.cpp \ + $(SRC)/Core/HLE/sceHprm.cpp \ + $(SRC)/Core/HLE/sceHttp.cpp \ + $(SRC)/Core/HLE/sceImpose.cpp \ + $(SRC)/Core/HLE/sceIo.cpp \ + $(SRC)/Core/HLE/sceKernel.cpp \ + $(SRC)/Core/HLE/sceKernelAlarm.cpp \ + $(SRC)/Core/HLE/sceKernelEventFlag.cpp \ + $(SRC)/Core/HLE/sceKernelInterrupt.cpp \ + $(SRC)/Core/HLE/sceKernelMemory.cpp \ + $(SRC)/Core/HLE/sceKernelModule.cpp \ + $(SRC)/Core/HLE/sceKernelMutex.cpp \ + $(SRC)/Core/HLE/sceKernelMbx.cpp \ + $(SRC)/Core/HLE/sceKernelMsgPipe.cpp \ + $(SRC)/Core/HLE/sceKernelSemaphore.cpp \ + $(SRC)/Core/HLE/sceKernelThread.cpp \ + $(SRC)/Core/HLE/sceKernelTime.cpp \ + $(SRC)/Core/HLE/sceKernelVTimer.cpp \ + $(SRC)/Core/HLE/sceMpeg.cpp \ + $(SRC)/Core/HLE/sceNet.cpp \ + $(SRC)/Core/HLE/sceOpenPSID.cpp \ + $(SRC)/Core/HLE/sceParseHttp.cpp \ + $(SRC)/Core/HLE/sceParseUri.cpp \ + $(SRC)/Core/HLE/scePower.cpp \ + $(SRC)/Core/HLE/sceRtc.cpp \ + $(SRC)/Core/HLE/scePsmf.cpp \ + $(SRC)/Core/HLE/sceSas.cpp \ + $(SRC)/Core/HLE/sceSsl.cpp \ + $(SRC)/Core/HLE/sceUmd.cpp \ + $(SRC)/Core/HLE/sceUsb.cpp \ + $(SRC)/Core/HLE/sceUtility.cpp \ + $(SRC)/Core/HLE/sceVaudio.cpp \ + $(SRC)/Core/FileSystems/BlockDevices.cpp \ + $(SRC)/Core/FileSystems/ISOFileSystem.cpp \ + $(SRC)/Core/FileSystems/MetaFileSystem.cpp \ + $(SRC)/Core/FileSystems/DirectoryFileSystem.cpp \ + $(SRC)/Core/MIPS/MIPS.cpp.arm \ + $(SRC)/Core/MIPS/MIPSAnalyst.cpp \ + $(SRC)/Core/MIPS/MIPSDis.cpp \ + $(SRC)/Core/MIPS/MIPSDisVFPU.cpp \ + $(SRC)/Core/MIPS/MIPSInt.cpp.arm \ + $(SRC)/Core/MIPS/MIPSIntVFPU.cpp.arm \ + $(SRC)/Core/MIPS/MIPSTables.cpp.arm \ + $(SRC)/Core/MIPS/MIPSVFPUUtils.cpp \ + $(SRC)/Core/MIPS/MIPSCodeUtils.cpp \ + $(SRC)/Core/MIPS/MIPSDebugInterface.cpp \ + $(SRC)/Core/MIPS/JitCommon/JitCommon.cpp \ + $(SRC)/Core/MIPS/ARM/ArmJitCache.cpp \ + $(SRC)/Core/MIPS/ARM/ArmCompALU.cpp \ + $(SRC)/Core/MIPS/ARM/ArmCompBranch.cpp \ + $(SRC)/Core/MIPS/ARM/ArmCompFPU.cpp \ + $(SRC)/Core/MIPS/ARM/ArmCompLoadStore.cpp \ + $(SRC)/Core/MIPS/ARM/ArmCompVFPU.cpp \ + $(SRC)/Core/MIPS/ARM/ArmAsm.cpp \ + $(SRC)/Core/MIPS/ARM/ArmJit.cpp \ + $(SRC)/Core/MIPS/ARM/ArmRegCache.cpp \ + $(SRC)/Core/MIPS/ARM/ArmRegCacheFPU.cpp \ + $(SRC)/Core/Util/BlockAllocator.cpp \ + $(SRC)/Core/Util/ppge_atlas.cpp \ + $(SRC)/Core/Util/PPGeDraw.cpp + + +include $(BUILD_SHARED_LIBRARY) + +$(call import-module,libzip) +$(call import-module,native) diff --git a/Source/Android/jni/Application.mk b/Source/Android/jni/Application.mk new file mode 100644 index 0000000000..d18d3a46ff --- /dev/null +++ b/Source/Android/jni/Application.mk @@ -0,0 +1,4 @@ +APP_STL := stlport_static +APP_ABI := armeabi-v7a armeabi + +#APP_ABI := armeabi-v7a diff --git a/Source/Android/project.properties b/Source/Android/project.properties new file mode 100644 index 0000000000..a3ee5ab64f --- /dev/null +++ b/Source/Android/project.properties @@ -0,0 +1,14 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system edit +# "ant.properties", and override values to adapt the script to your +# project structure. +# +# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): +#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt + +# Project target. +target=android-17 diff --git a/Source/Android/res/drawable-hdpi/launcher.png b/Source/Android/res/drawable-hdpi/launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..da35bbad811a8217ca7d998c325b3a91f00a94e1 GIT binary patch literal 14225 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 literal 0 HcmV?d00001 diff --git a/Source/Android/res/drawable-xxhdpi/launcher.png b/Source/Android/res/drawable-xxhdpi/launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..7cb72b57bb1bf87b94d5f327bc055bfc102c65b1 GIT binary patch literal 82300 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 + + + + + + + + + diff --git a/Source/Android/res/values/strings.xml b/Source/Android/res/values/strings.xml new file mode 100644 index 0000000000..2cfdcb6e7e --- /dev/null +++ b/Source/Android/res/values/strings.xml @@ -0,0 +1,6 @@ + + + + Dolphin Emulator + + diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/Button.java b/Source/Android/src/org/dolphinemu/dolphinemu/Button.java new file mode 100644 index 0000000000..629e572d83 --- /dev/null +++ b/Source/Android/src/org/dolphinemu/dolphinemu/Button.java @@ -0,0 +1,33 @@ +package org.dolphinemu.dolphinemu; + +public class Button { + private String ButtonID; + private float _x; + private float _y; + private float _ex; + private float _ey; + public Button(String Button, float[] Coords) + { + ButtonID = Button; + _x = Coords[0]; + _y = Coords[1]; + _ex = Coords[4]; + _ey = Coords[5]; + } + public float X() + { + return _x; + } + public float Y() + { + return _y; + } + public float EX() + { + return _ex; + } + public float EY() + { + return _ey; + } +} diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/ButtonManager.java b/Source/Android/src/org/dolphinemu/dolphinemu/ButtonManager.java new file mode 100644 index 0000000000..ee7a8f79d0 --- /dev/null +++ b/Source/Android/src/org/dolphinemu/dolphinemu/ButtonManager.java @@ -0,0 +1,43 @@ +package org.dolphinemu.dolphinemu; + +public class ButtonManager { + + private final int NUMBUTTONS = 15; + + Button[] Buttons; + float[][] ButtonCoords = + { // X, Y, X, EY, EX, EY, EX, Y + {0.75f, -1.0f, 0.75f, -0.75f, 1.0f, -0.75f, 1.0f, -1.0f}, + {0.50f, -1.0f, 0.50f, -0.75f, 0.75f, -0.75f, 0.75f, -1.0f}, + }; + public ButtonManager() + { + Buttons = new Button[NUMBUTTONS]; + + Buttons[0] = new Button("A", ButtonCoords[0]); + Buttons[1] = new Button("B", ButtonCoords[1]); + + } + Button GetButton(int ID) + { + return Buttons[ID]; + } + float[][] GetButtonCoords() + { + return ButtonCoords; + } + public int ButtonPressed(int action, float x, float y) + { + for (int a = 0; a < 2; ++a) + { + if (x >= Buttons[a].X() && + x <= Buttons[a].EX() && + -y >= Buttons[a].Y() && + -y <= Buttons[a].EY()) + { + return a; + } + } + return -1; + } +} diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java new file mode 100644 index 0000000000..f95195b53e --- /dev/null +++ b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java @@ -0,0 +1,124 @@ +package org.dolphinemu.dolphinemu; + +import javax.microedition.khronos.egl.EGL10; +import javax.microedition.khronos.egl.EGLConfig; +import javax.microedition.khronos.egl.EGLContext; +import javax.microedition.khronos.egl.EGLDisplay; + +import android.app.Activity; +import android.content.Intent; +import android.content.res.Configuration; +import android.opengl.GLSurfaceView; +import android.os.Bundle; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.MotionEvent; +import android.view.WindowManager; + +public class DolphinEmulator extends Activity { + + static private NativeGLSurfaceView GLview = null; + static private NativeRenderer Renderer = null; + static private boolean Running = false; + + private float screenWidth; + private float screenHeight; + + public static native void SetKey(int Value, int Key); + + static + { + try + { + System.loadLibrary("dolphin-emu-nogui"); + } + catch (Exception ex) + { + Log.w("me", ex.toString()); + } + } + @Override + public void onStop() + { + super.onStop(); + if (Running) + Renderer.StopEmulation(); + } + @Override + public void onPause() + { + super.onPause(); + if (Running) + Renderer.PauseEmulation(); + } + @Override + public void onResume() + { + super.onResume(); + if (Running) + Renderer.UnPauseEmulation(); + } + + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + if (savedInstanceState == null) + { + Intent ListIntent = new Intent(this, NativeListView.class); + startActivityForResult(ListIntent, 1); + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) + { + super.onActivityResult(requestCode, resultCode, data); + + if (resultCode == Activity.RESULT_OK) + { + DisplayMetrics displayMetrics = new DisplayMetrics(); + WindowManager wm = (WindowManager) getApplicationContext().getSystemService(getApplicationContext().WINDOW_SERVICE); // the results will be higher than using the activity context object or the getWindowManager() shortcut + wm.getDefaultDisplay().getMetrics(displayMetrics); + screenWidth = displayMetrics.widthPixels; + screenHeight = displayMetrics.heightPixels; + + + String FileName = data.getStringExtra("Select"); + Renderer = new NativeRenderer(); + Renderer.setContext(getApplicationContext()); + + GLview = new NativeGLSurfaceView(this); + GLview.setEGLContextClientVersion(2); + GLview.setRenderer(Renderer); + + GLview.SetFileName(FileName); + setContentView(GLview); + Running = true; + } + } + + @Override + public boolean onTouchEvent(MotionEvent event) + { + float X, Y; + int Action; + X = event.getX(); + Y = event.getY(); + Action = event.getActionMasked(); + + int Button = Renderer.ButtonPressed(Action, ((X / screenWidth) * 2.0f) - 1.0f, ((Y / screenHeight) * 2.0f) - 1.0f); + + if (Button != -1) + SetKey(Action, Button); + + return false; + } + + public boolean overrideKeys() + { + return false; + } + +} \ No newline at end of file diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/FileArrayAdapter.java b/Source/Android/src/org/dolphinemu/dolphinemu/FileArrayAdapter.java new file mode 100644 index 0000000000..b49149a36c --- /dev/null +++ b/Source/Android/src/org/dolphinemu/dolphinemu/FileArrayAdapter.java @@ -0,0 +1,53 @@ +package org.dolphinemu.dolphinemu; + +import java.util.List; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +public class FileArrayAdapter extends ArrayAdapterUt}Ll{BUZT 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π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≫gJt^RpL%VUkx5v?A9{RbW%mb=|mjE@ z9AA__msVRIN(*n9(<`viYuhw|mZGPM?L}+X?%|%* zy=i?+W&i3Txm`1#MFC4q?`Eft@=O4S@9?Dt%d_jY)n_pRkjMT-Jy*JVW_FtUZ z8*tD~BWdTsw4<#z?|A3DQ#Si9JiGbGGsdLi7mIH0xx0@ee=%2j&Y`I}J*xXUrn<)D z1w=hvV#2-ow1%v**YVCv8flZm8kToG^S?cXiO(x>cF=6slg;H4jNC^2PXr=CvoJa9{O#B>bRSFux_fC6SQ#`9GHJ8K;)lZ zvdD&0DLH3+@7|arcHye(uSY#@zCI=_z0$@X-v(*z7QVIY&ZHmnYc3o)bA-LV!TwZ5 zp5}(Y2}jiSe*bdkbM5mv@9+Hk_xZDUL+y;nj2ovGwd8Jnv*KwO+wL7}ANH{|D}Ifz zaI#B`FgSIb=cIVv>9iA9TavFg=Ux8RU$NPFUd`F970+kEE@YbSDc|<=c1+OKz5YDEjW?b33j23pf%m)M zpNE^Sr-?7K-lKnO%9@9=JO5AYNt?j8Cvnl#8EK{WR3FMq88WTU?koNKVp7HOJ?GEz zmEU@{@Js9EWv?bR^+|XYU*x&zZ2m#__tJpobG_<2muHkNnRqea+C*p9<3_8jx>jWE zSp8V;o5tZg(g!z~=zZ}0d}Z5;`-e<6N?hx$k7@1QA@*EtyXErWT{rKEG=47px}jC% zukWkKCDU0LR=P~{v<|*^iho0Xib_G}wU8G&PRm2(SsoazyD(4j>a?T>#wz>#8rH`$ z#Jk$D=r0y%ln*R%at&XV9`VDdai8F#aCSk#s7UQ6$wz{ZL>>8T^5~+7|EIq@+H+p$ z31|NwzcSB-9$L`u1-`$iOsk0?w6;s!uZ_YPOq>`E(m%6FseOSn=w$JxAV_Ql2 z>oV^r>_69aCOm5HxBIcUr+iy>ritM+-?DdePR=b(J2!Wxy#4+<=78q8jh)e%K8c~` z+l@UQ_vO8tr7?Sj!IC>`8()>BBrH0WaIE3rt&cX6S9UMDKfSh%z3+on<9e&I`U|gr zI%de*Z*g6p{{Gj(Tj9BaTK8A~&hu|sZFrpR@S5FA`Cjc4_tMW)b>Ov9jW@l(i-lM^(iewXOkbzkw? zn#DFdtqY=!GP>YWT!2!Sr{Dk@4e?S zu2`kXdD9&2ce4FG`yfbUbD@g&O5cXe_LXzhzi`Z{a#;3>bB`;{loF>B6m{yg2| zv+S9V;mJ%tBN`@aUN2Nuis}5|>*K!Ja<7}}3-ipbq>CPq6XTB-c-7i6F)-{!NuR&0 z{y8up0d3r6AyT*3(>WMY9`=UZ3=(z}vGr}^X-T|a?lQqM!c8QQF|Z>+DRE+ehX0ib zJquT+sF}`W`6*g|AU)nmF?3qk&nNDY_vY#7Fm4QbdAs)ayyENg?$__DWjE;U;P?G- zU9q81QrND-Kr{JNd)ANa1)M(vB7A;-;OIYE=ytOYjup3^3$WO=dFS5k z`=$EUJt>i*LTtZOYYrIqiPm~C3geE8l){z+{Lo0F=F!ng0V5T81!_=GV}vf$mG+hYCM zGjptRZ}v@_eep|4RJYu#ZGu~ZGVgM-FMhJuGHs@OrBb%^>$aJ^)^1&jOQt=v%#+Dp zI{W9Qr~uugGV>mvJJ~vIh0NiSEgQ6--F>n1^o>ex#iy>8Dk}w4&D#2A?+r-Yar*Ry z(%J58u0L*XS}W5pZRY$xbbr$sBk$`eag+6C_f7Hbue3?DXblQgs0q~0KHd|mx9V=y z);Yn8c5~gjpqK1-&_+z6?R}bPhj_^1*PA!adFpAt<=4s{hodp}zq!Od1|8JaIT;Zq za3q^mJ1O$0G^=8Z=$@lehhNn9GB{suy??e@S=o&>Z~w+<6P+msuilVk3;i$a`Yu@e zm#E06;6#@_B2yBNNvd5v_59)b0MXS-v)nJTOs;Bswl{Qd&I_%hIkCZpCs=M?2)?q* zZ0n?`0;{k@|Gy_B`l440oVS=(s}vP?VB38Wjnqp4PA%Qdx1wkMT)O?@oRw>yt@(96 z=~sTGyM&W+?QDiNIg`b$DcW;aDO{FMQu4g)Xx*!#94TwT`uo+al1r~jr`~EdLkz$C{pedq8rPgxQTbCO?JeozJjpPtX4&a%s*N)~%E6AIzM*YiV)F z`?-g1D?JZ1p68w`XLsvq;Pm!Oy1q{WQ0wPACkD|SgJf%)5ZB3bHi?FmF#El-U+%b+28iN<%>W#$KsahFY3;GUG|R^RQ7*= z-X_D$%)s!A6}g>(ej9@u?!1Mi?8g*B%rZ<3IGx30C}MlP&u#g>f{XtexbI4|yt^aP z+N4nWQ2fZu5G6y-nLYB?UF{dhtEMd}2^4%28*{F9PVtWKzrXxsP3W>atnAz#aDSTD zbDmhH+2H|IPSu$`U$}L$5!EtfDIgj6)t>B;9xnND?jb`D* zAIe73|BL?Vo#S|UY?|HVd@t`qpSPY$(eG}(KIw)@P6JkS;7 zx@V8E=`ZliNm5$D+_^~c0D+35D^?$a8( z`tNst-u~V{pCRYLyuQkq;77ZJ%(*TEUM&o z4ZBCqc|T*mtnKTuy}1AUg4KVo+r3xkIg@tcw6p%ob;c&QW4=7P@H+COLf4^)sKdJ5 z?i06)f3ADLwevjd``sI5UF@EowExhezFo2`YqQKB=}EEn2`ApR**fjH@U7){i9pHS zAFS_xW%4dO{Fhm-`c?g-Gn!|35)5(_?^IlW?)hlaa#Q9huhc>(_Odsn_$F$U9CCcK zqk7)1MSqTWPCMkwAkTT6U-;18_oohTSiUgxfmsxrSb#|ZTU+C1i}VF8U5wnXrObHl z99-6@dq;Ir`oZG?b2fclQ~kth635J4^Y~kScy?6&+HxdP#LfCn<>iSg64SE&zvz^+ zDOqCvJ_wGuq-6v1G;Pl-$epeI++@dJdj>CLvjz+Oy^- z?4baHo#cYt%HNC8*Pdh8Pbdl+yI~>Y+t-MDPd)GHL~0eWhI>4JadZ8nq^hnCmtTLuw+PNj=KZF^#K2&JQd6Sm zW;}PR1g932WhO(1h#_gOx8KqGu!Bg;bJNVlhFiB*3Hmp6R267e1+#E+99@v$bYODM zB-iarZcfPgwBLqP?hoTXjY8qQ6`wcVuik9T{QmRnzsv_@to3wqEN58WP^(BR`72=C zdhyWyT9pe;2H!#hv*TXOc;36gr-Ng$cce$H>xRC*E zzLEa_XP#c=Y1=i4a|=Gqw>q??d&3;@^Ka}TyF!xXnZJ}Likr2yDR1U|FeCFqsq`*4 zOJkM84^K+J*t$Ju#&uH{`Mb^OYVVJ?7@GaQq*l9Q2vp$H|DqX)1m z?&1=b$su98)~d25WyDyU3uIiaMW=)n`<%)WEy#97}vcg~#M&UB?_ z_Wpgs4a^nY^7*_E%0E^!{;~Vlke_uReC{3H60toi=u&-i(Mu$kuovQyDbI;ltT*ry{F&OPQwSe$)Kj;J{Mn7LdK2<9=IDz43Acvj%JMA9zBG>Ju% zp0DB&O!8dC8+f>Otzw$gqH_YrKV?i)Op{LHt3PLYq_AzqaqF4qgY+M)fBZ8$(eC8> zj~nLAcD1>FAin$WBbIOLr2iy!#+&>)8r1UXS%sEt-}1!|OH2gg_bs=*bXcAvt=LA+ z)2y^Tc%{cF{b`CUw+`)AlFfZtVAV8X{v_}0L$(}Cb<^9*TVGdQzW8oe=)(|k-)q7y z(OZn={JyJk?y565qLjVLTIT(lY;X0&AJ0`C?@`&Ov1LbHp>6l2TYDDn+_XX}c(3c{-`;Ud>J>+&;ns(O8;@0(xJ7l9o4wD*Bf6`xkuzol4x(IJI^Zn$5YA z5bbXcIwX`DXIS~eV9_c#Cp%%hz)+9lg@tZJ0ZuSyKSd-V}Q{OnUs$a z$(uG$XZ4$ylq7xVKHeK7-OG!CdvhZ5V)wgchc09289{UbB3*t;Mw)^ZMR(EjxKD z)Olf=!)x7{YfnDoyTaY{9sRAb$kuR0sm5*P z9Hwlym#uu~XL; zD$y?yCs&mn;866oL&bCDNt5j27|Pd7EA9awa%Ty z6YInVp|gt+G>5=W4*ENg4d* z`CRIYZNer;?b7!87cH<=S=M)3*sVj`Cik5PD_x@<6#MtVWP>FiGwuJCamyy=_?=qv zQubp(&yDu~;@{)~lPrW@zPt+&tjY+3$Vk|EYHKv!_No>#=Q!-ATpY~8F9 zCEK2?UGu4Hw$j$QcMt5{w8i|EZ`|2s4^MdL&3E6+!>*QlTrm5z_TC)7*(TQP2d0LG zRW6$l7-Su26ujLy^Li-XQ?tvP9!#1)Z<9fL&m2FOqMah|yP50KWFO8@oO#{bTFN?S zO4AbKSdnr*wWvVLIg<@e9g~?*&lNGVtYy92tSQRJW>1RHy67D_mB;XC;~dKiPqvhr zakz6#b8_qW_++D>|9dX=+Yts`Kij^&!xiT4Klc~j&Iyr^(&w7?UBY+e9J!8Vn<{(RZoZLwz?_v{7#Fy6-oCdjX)eJt zSt6%&M9*Kcyh5EhYijh(;7_|mSa#30E_|l?wB@PUJ6E>_A-lqksZI_28$0vPsnum= zy=C6-H99OW=W;sooN9O7_Cs1|PsYn)fg2vPN|tUvbw^8%!IMkRr*PMqs<%H5b}or5 z`}E_P>(lMVKX)(CxW==+izZEbUXr3T&+$}(&zhV(yIB^EOIWt}&A%q- z*RK0H;@kz9`xkv5Hh(d^ZTyFK&widGiO+otSx()s`0V3(M3m#uDV@-3Yieh(-VLvCI5H@WB;9mb5_L0oL1Q{}D{OZeSZEk8E##;wK1jaI4J z=d8A$Ju$yy^=X5bXSkw7JTfQ!Irp@Tt#iHIY0s6NKl(D#^Mh_3=1aQFF0X%1g1KSo zg`b7D*3Ma4W6mR^`Epl5e%E4!({mP>S2-%(n{;DuTT?;N`YR8OyqZrQiSy?D`EABx zgIJk2wMW(}=$U6_COKS~^EAlr{5Af0n|w8U1tzapDmUZYVq?-3^snzwSEsW^-cweJ}$bv?DTuRx|mx{Ep7g@rp)gt zaSKk7_mb_qdN6FF(`Jq2s>eGEPCdzd_|f5XhU{L$Pmg-1?p)<|(dBMeMtRGcyYqU! zT}W26-rslN((K8BWebCCFjhFPEq`Xx(g@eQ7gdEnT{mlnbqoJpbW|kUWwqwD zuF_=|o@?A^*c`FFAd;KZ9G_!yRBhwUmi7m7Ee`_teOfA=_v#j1)o_1akvMUQ^y5E^ zc$Nt}9^Y&~qcV!cw{X*qCWG=s1F?IOoXe^vPfW1x7Ju@+(qL2j9^+8qo@Gt8dvEVv z{MOWQlA(vW%d3~$@(U8-(=8`I+RZQJC0mdmjZOT_LSso|NRdgL0T)QPPV9|Yv5 z3%_ffKjVXy%%|>PpTboZy?@+R<|d|vb618hpZ$TsCgYI)iB~V2&$`%4y%C=O>!?}q z9K{#sRGUQAYwC6iV^+Q{=J7>@OKTH&sOAW6Pnzu-2^P$Wx*^?_;Gyros%B1ILEB{(-YUL1f||m0 zyzYOR_UxU`H|xgH|ly>st zm@XT~-DkWi8WWaX@M=D^VDXh(3XaC-P1KIvXw!;{T0Qf*Y_A*3+@~Jho3ujB3f>kx z_}#tiOv1Kxo`)wb*uCe*0oT~;zk{-#{kYrEaB5GT zlER0>XI7o4`oMa1n)s(g-dR6V_gp%nSGK))#lg)#UdQB}dz{#{|6KcakM!oc^o3`4 z$N%C8W*3)Fw(Yd2EtIUZ-YK{@CW}4weP%ZM{nRLn{?pw*e=J_t))w#Zshj(Sugx88 zjwb(qT84L5Z+IU1RATPpPhNRGEh&>W^&H6Gq*d;EDN4yGbso3K&0Q~@&z+bx-QBRV z!1CJl!&@h?%2`W1o5%H{cYn`3+UYA zG0{`G@RZC}=Qnp^1$m$Dxp{JCj$ou+JA0+tOy{c|;jYRj3pVY|USD;{=gd7P_P-U! zwy0HvUfWdU`?Vn2Gd(h;I{&%bFQwdRIq5&P=|xTFny7krru+714sJ!^=c=8ol(d~$ zUmjU?VxEs^fm7<`iz&LFFa1=Tu3I#XV{=Iw&t@L4Q?^-WFIxr7Ui`7|$UEN7xiKrX znq!Ff3CBu@bP?Kkr`J~t7I$Hazp;DnL1@- zoBrd=ZR@-@3%%Bwy**DhZl>SgL#Aa3iM>VH+w$%jm|R{gc3*AxYq4f8wW)`vPI<>6 z%el1sPhU$c`wSQM|0@J*w;lieE<@63)y6B2Z?-J>u9BL2MgRA^ioW@o9Q!vYZ?rq~ zJ5cEP#y5YGj4B*MYm5!%Y!$sTBjzQ`G6%sJcBXxd*AM$h9QRjt_+j>cJwpxqu>-mV z+P(X=kKbSX@w@C}`3pbHj{j&k`8P4S#=7@?LC^aoANyq=?_ROAUF!dDru$+k^%1=< zujy3p`f>Zy9rw3?v*zag+*I#z@FHvUxBeAh-9!DiC*QPR_G|vie}z}=7yg>R`ky#g z|GI0NmcQQhW`5Y`^DF*E9{q3G`hCx<_<+CNtLiaYHHeO0~d#f878yonF~T_5{( ze`vw}VB6S}ssG!g_G|tYyTrSvUh8*@@ow@#E5{^+iuJSzxHyQ|9KhS4MjuLseK4|~XFLib9g{#@+FEV~; zU-i-8NB;Jc&kVWVO?mNDjN=dQKfR;h4%>SaYH;q&7Cdy?gJG_3y}HEJ+6n&^SfaA~ z9U@oob7kag`&5%FFOs(`?MQRLmVnhS+c(YH7$x8HrumVbhUDt2GA)-j-g>+CyVK2S z)eCD*D@w!~E#p5X)VNXg@eWCUUwNMuwk*Q(KmM~a|I44b^a9J`lzO$5-M_UHjn-~( z6T7U)Y$ML~!A9c{x5q*8Ln3=PoGJ{@965i`X%EY^2TL!w?22fcet2dD>zgC`2d7qu z#tbW=1O4vBYaPJm7)aqf2GM88+eu--v7|vWP5Pk-|73-O^Sc-y_4_uF8ehl z=i}usY!v*k&}f6}cjYE|PWjvKuB^I~>GML5Z_MEYs<#~@EEOwz={6o(P^Yo_kpM9~TX^WRmO|3!ilxl&#lb<9G?mj5( zczkw((Y-ex)-71%AAh9p@M#Yhk*>=%uOhpg7FqwT`jEZ7;o0xT(~P$Q3>OvwguT)sR{Vr!^b17jD_ra<{m6YtVzVSJ~g3D@#3d({?>GIP)a`*P7Sq zEy>2(rJs_YSk@Y38wbvuV0-qnhhjtdQ+3 zVGorzh{?B3{>YJY__&PL%YbUl2Hl8;Wg(sm+r2#OwtLO{6yRytw;}YA%erFs1>&|} zBU_Y3Kcy`_e{tGBuJ^4sqrINVH0|VXS*1B^$KBuGpWLfgc$e>F`S0S!y%)C~bw8ba z^tSdfA%0HpyF&XOYbI*;1)T^~O`O`^@;4x+R$S&fKjXU-D_?q?D?a^)@#G)Hlb;Pk z9xdmaxjJX&>J2=nBi&?rlSOV%=4f+vXMCMl*KzJ4({)Rc)&<>y0s^j+GA=M}?-UDQ zs*HHIisAUhP7#$u6>}aeob*#~YKM`3xBr)t>8yI?g2FZv)gPwtKY4t2j<(IjW(!xv zcE`!tr9Cw)S~nzS?$|ovahUv-={lP(HJJ!Desw(jR_|=<0sU2pZ7WJQtloUn_bAuV zb&jobY8LIDvFR*lUgdM^H#75B+sQ9KDG+fc^^nYxX*)bk<)&Vl8j};UBM^8F9j9XeA{q3$o!!0yt0)Wng1lU+H{HD<5ymhee1pK z^P`e{QHyh;wwmcKS2%s=M4-Q8T9uN1xw5+L#Md?x!*@(P|Ix+nnsDV(>7PmdPa@4e ziM7VKtHo}epX4iVBELYSUVP2F_K$bI9_$p!U9)}~vt>wi>vH?^-=-AyO8;y~SD4dW zEc&TXXx_7T1&VdIAMVVkmVQ)NV*6}?*?F~%H~b!!JkB_KiSxsn7mF*(G~A`;>t~8S zW;(xj%dYQ5{m(nqqlzTa2W_{X^QQ7rranP&fI?uhtkfADftWnT8)_nB)|Z>*TGepzIkb?1cJ zzYacl_w8XCLsedGLa+S!pR@m&UFuG~?3gjxCCBlJanGTp_uCVG)dak{oY1GwFZScl zg-6CRO!HE>cZkf+d7Bl)zWIOq7LiqI?f2j8()r;wiRGxl;c%|aHH&3#&CSg&H`6=( zG-$VW!O}_b zQpAa<5|++FEmg&J(~kUj?UM9h@jlk;8k@RTJU2aTC856i)8za{=g>Cay9dH5#a&{$ zUyCgL%Ch*RfJ@)TqoPeU)(+oGtyD_e7ECVKJH>?mc0se~0+rfnCCYhHB9HdGINn*O zv4p$)anoUfC?dbock$(i0jvQcT-5a=Gq!xd)tBADq#bYIAj8iG1uaZ;xZ= zpHDDceE#x>FN&#q6x(}lf8bF~mWT^AO8c@y_O|Fd_ z%1x74$}3#vU(K`pZL`?_xxv=bmMvdz2;6$LY5wQwD?PTkTzZsI!tm_lceh{n3K-OQ z_`>()?07Z3bKzS4ZD~tq_)T~HVCxxV9?Xzm0EwOo$|PBL$Ky@>Ey#fUzRVJtX`>Y z)yL_%I=w>r63?Qk?{_ZT+~&D(hQ^eNAP>IDPLhEd-E7JhNF zYvW$*dq?ManyUHoqRmaSFYlOnuE2Yz<-B&&J9Ew*w)z)!_^eUhwvRE=^|?>doWoxD z2DmwyPq@&nxL_`W>n$OPrKX1>ay5M}&063T%{KK`(Tb~K2Xb;%&s+~XsI*p6YU|Yv zPS%2cSE3T;Zfn!yS-T-Ln)~*a(hCdcKDm)|B<#n!#941rCZ%;RKUwy8o}$uxv9p3d zzdf=O{kiR7ddd@P>GP70BC>uL$#{25JlgrKZy%=psc4j@T$X;r)yJ%jN=GL%hsp03swLher0l1Ybl#p{J=I(1*6PjL(^pNsdhOJd zH>XmW!}Z>`Yi<3+y0yr1?TVH9t5$03T$|FCb>-Cb6P*=qwi!>(+sALaXJoqd&+p4q zZz_M%I-`F5pSnoKd&iyM^k*#iE1j0{zwz;w|A(~R*4|iB>tOiD*&|E-;L%&h3$}ja zytAT~%U@S8Do9)E*ukSx@{gv~_3Om917t|jbR|&*l zTmIm773;p`{=#*&yCfE#7YP2M6}Yn9WpAAFv{ze`7TX2SS$MruuXdWpi_J&vYWsG$ z+55@e+<7hWj7;Q4`SqLXf)=e`{ZV_I~bukt%_>(s05rRg(|XqO)h=Ra|OMuvL)Zq?1p*QdL3PBd6x-WVUxwrrn_ z*H=*kw|Gv|D&sR3!=0P!l-69i?y&lu&*$vi!1Z549-14*IA!|(`T%cs4u{><)8|VuFo?J?Fa&rrvxqQoFmN!S&v=>O zp79DUEl4f$%P(^!g=ZtHVS@Mh^5^C6b@tcq*~hrU!QP2| zuYk2;nPijp(y7wMZ{{B9PtvSVEIB8fKJ}dYa$~moB%_lTx~ERNylakkwf-|!&A&I6 zESkZ&TI!$buXm2R5^WnV%rw<{+`Vg6Pial%N!QSiOV%x!D`hU|sSP!ninN!R`C;+! zb@2wbGe;W=LM399BzDLhRNNg_w)$JlRoP3wwoIP+O{-DXG^^(OfwNnWhc_>ck-V*2 zDEFO7|5k2-#{O0Mhd1}UO?e^Ukl%T5Ue=G|yj-`qX*zAGyREXX+uY1f)UtYaacA|l zw)S7gvnK8I{rU9Y%Ins97U)L)njrdcz=v3^O>>0d_$#bd$-m-lY_JNKaIG$?n718 zo|vngi&f{PFF(w-^?S9@yHZ^q>m`eIZ20uvKT21t%X=tpk)0?mXYg@etNtTzv3))4 zx;83zX6QVwIB@8&(rw+-$`x0R{1&sDP`&@iWwE-}_~;o27K?pLxOAjltgiX~tRHh* z??2`jOZ(`~E&tG8?4Qo}|4qeW=N`}L+#mHrS}x_{mIt

}5w&g>&-W|FPv=|LVla zWsica<{nJ`^=Lus{>RCYdJ#WZ(tT^P9x5eq`^Ic4h?M)!ZkK#??a~Kr@5~vvt3OJd zuGbZxaZ&XE`*Xh?smszHcdgBMux<7>jo`>a<*WbJy!i8>)Hr}M(spmIk{^GZXIk2S zUURYK&kktCNkr`D5zX$HFy{!{{RzH-AyX|R+rAjt?|Ia7XWOwngA12GZ5O$vbu@Z< z^<0_WyBwQY7cRe-_Tbu||2y@26ZN--SiaoX^y<*%i#I-N?;gu5S|>i>e)DsVkJG=OQzv__&}d({i2vo^8Ot6=y-%#&7aiQ^ ze&T$~GMUbp?Was0O1plN{lT^CgnggTb#)C(|4829-wkC{PBmY-HzncG`|zpi?FBQ;d0K0tl>cvcd$)Z;e#nN|Hy)F%wO8=-y;#G;3>8 zN%l7NV^(LMC4I@-rhlv|aps4E66G~b*5{KJykDm+QT0mb-Mih(J9CTfxa{kEcv_+| zsB)vke$AW*zeIdwQvb|*_)dCP*?Y;_ z&-PQwCRJ&@@$KnT`*=ssmnYR{yEzYf~&HepP?VaeZ)-8M6=ebMiZ#W-+ zMB(s+Uu5aDnSV^WS^S}HDFIpr|WfEplF*_IP$EF+bFxmIa2|WAI@xhiS z3b*(x*XxIbEN_TinX=`0fR3N&#;a)tQv0+eHtDWBGCOg<@}cc}9#2%i{%QA}?9TzO zzRtXSVUomw37J}|huV&_Gds>Zn<*qVZ^8-7cvIzz`4yXf_bn`2`6XnRt)QiTtelHd zj(1_y{vT$GrV8(##U53v^*~Y3NXMTmJwdsxH9JBgjk#Vy`K30Ksie>))yEBr|I2U6 zH+{YouAXvB_pM;+FOP2`{cVa1=libmK74#yn(WWR8??VI^|PwqT02$P?$MUe^&!`l zKd$;7<#K#q_M%A#buLLp6iA5uKe<}cq?XNk#U&lzt^PdQ{GL_Be4TUnT;~fnwG+{j z@gWaC6vdm)T<~$hv-sDs^PO0nH?8zn-Us&(8jmty+@r3>AI&xg1xOtwHP(|PDFK3QyYt<>b(4NA$onxuw zJz+i9{M}zT*Zg5V`F84_kF0IaJdfFg&3VXr^jh*dsg+89B&To7QvShzc%;Ql9$<;+Dlue30bNvxzNy%u{uGM zm1(JK)PY5O@@E(GKG8Utz0sdmFIv3wC>)@P0fBXMatalpEoexFML#IUUWfy z_7vg2c{|RWZO)V1_xgx)o`yuhqv|}7Bn9dBir!)EsTC1z%0@D!k0$0Q#k_RW-1q(n z|D72<@+Z$Oc)-sUw`~odb>W#_ugO9uUv1#&`M*Ni_{WS*52jsBl&sUy= z6)YCh?-JQByl488XWwt?NdN!KSTFL#{-oHZs>n8Fy*)~wS1YY`Ht4tbIE%Z!ELk_M z-txmTyjk0`EtqkeC<{ywgKWnyGwL8YOZ-Z zZ)T&z+K$|V0$Og#+%rl~Pp}NUDQq+IKnwHX9gBG{>g^3L(ihIQedD?8g?l7m*?XyLa(iUgNVuHc)q&aj~l0YX6K?>t;s9KaDNtCTC6uHd&^_i%%rO?M6^Ax|_$Ot?;Wzxc; z-P=yzTjyr=Eos&)59VFF)&!h%DAMSfwt7)P-VvplOTT{*c(_nOPB_+=zm=o7Msm%p zlRt#aY}?#t9^vx);Bu$yHRs0}Ee=*6Ik;;cFY{;1J80@ON9oUfgMbbH$Vr~5t%-Po{IGOTOq&Z(#Q?u+d_ z<2mcL(eK>gJ$hn&tCrod+@~AuV=R#_!_+FfI45FeFRmq>eAkjDcH~dXuIh-u za_>FX7uT)j@vha_Cf<;B(bG}9tWc@%GPfmg)1vN^-YsyK50lV5ANA3`Kj}e{*v9IrxxX~&OfwV^iFpym!*cgBgd>JiAP*z zi<}SgNp3rRp>spiYe~M_7uE&n?OQWpa*W@p;1j+-x!xTz7kMLkHUF3{*S@Z3%dc(C zW)htlvROw~OyCXQk{z4&=I5)cH*)Uo_WfL@zI8%*dBpoKtK#Z-Uwm9~eN|taXZ^Jq zBCT8n%bPeBafx1HQ5V$=@loZP>nJR$HPvF(itUP($%S`suYP&2Y;%jIN$05>y2|q; zt1PmnXXHw^XU{5~qWZC{s5gCO+nMKg?@Ib--77e;`c;+Ep0&}>eJ@!*IrWP7s*Q_8 zh1tSXk2!v(nO!L>ESSuh7lpqMDOJ?sx?!>X^kKJ!C!Yj3-8r?3CN$0f1<@>_k?yLRHQ@Z(3fsIU1hv?@n6Ri?A8VduV(AIIL#Oq+PQL~~2f zpV`8R`?h68Gs@?1sUN<5NU(YJ?C-0ER%ssE`B>ODzU1{oj|F)r!gXiGWtTL{#2aL6 z?VBKR+;eKnt>ACRC+4>c-pqYrFwr&o;MB`Gavxoa*O=ZrDjWRjTZh+!(+ARIW(f;L zncQ1^b@jv(W?O63m8btSvfacQ<}+FE$2q>UT1rdzoylMM$gn-_{tcPF)rTY!iFr z$0mQV?*Crgd8GBN;5%tEmsIQ7t|C$Qv>k0u znny95ell5Qm$B-@Lx%oyzW+XFIFI*F)urRT9lFW4r}wUyyzJ(ybDD=HEIr55YW#Ee z7S;#(pHF5Sb$gdGyJ9-4{(JM=-(2_Xzp-t-L#GW-MXb`^doyX|!xdn((v-p@RH$FpaqwOqgJnPz!q8#SINzBop^dixXh4Qsa5rF=hl@bnxryVGx* zCtuf#eE#)d?THC`Cm*Xk`LLtwBlC;~R*mCAXO3mPnBd;!D17(D!cz(3)IpXT8|Yu`L0vnzC@!n$$y=4tB`-*MD14N3N63HM+{z) zU0!Nm7q24lk{s8CDIa%o6YQ zXPQ>d+ar|Em0tC!B;6om2Iq6n~%LMoPNgZp-#WGb?Z%@m)o3;qOYIWoBRCp z6B(b`Z<#e7e-tu1oT`!59=3ryZG-dk4c5;$J5S$mS?b2b**9}#-z;PK|7}y?`qbpO z^UwY$Nq^Rh>2%(~#s8?eLZbQui(S*>9c=0!I1m4cUDm1l`Shykh9@Fok6J_?%i_0d z$(i;zv}VRfS)H?mH6rrK+ru7Y*2si^j%9wAxa<0%lR<9|me#y}6g%T*%f#bGI!Dzb z)66eFQ=cXpByM;$XWr+(p~b%q+nJBs%b2zvyZU^_m)@RlmCiBiIp>L)%g;}|dNQJO zLgb!(cCs5|br#$S{Vo5%pqAmB$f`eA+IQCV-L9V%*Wt5gI$7xp3$VH zOREG{uaf+JgsWU)ntE9E;)O;Jx!?GEI@CRj;K|#xCj9s+U74248|C}naQ_LdjX0rR z%>HotO08B`oAbBZKXuh=e73gm5no<#PQb~2TF`Xtlq~mf5CmAiBQz#lC~AKXl73 z-!`+>_q$zbxbN80_%A!S%cGTaH@g)5IxVZLbo4^krU~9R&63WU7^?3(w^8B9w{)dx za~o&O?tD6bQpB{H(8#xn8LsvFQ`a2GNIt8*U$)QrUyz4i8 z(JA)H{F%}n-{%h)bRE0SZGM_ve{06yX@;p^eYNA?AKb1Z&$`Cp+{8sjGDqB=E=t|T zaBd?<+R5vio=$$e%zwp&HTF5R>r8t?o##cW&RbcN0{tU9=)T#3)}a5S-pO> zc*PX1oR(U_`K&*CUVo}P=W8dtcN{>wrtmaA%jaA)S_I1}zpK0EAVw$ht+BWG} z-5TqpHM3Hl&d=VI9Q2u;_ql|(-@Lycyxe#XDd(hQK8vv0DRW8t%wFr(w9PlBo!a78 zbT4Ui!xlA!Eu0ayc+Ry1tF=dM zqS~dhoMcTmuhu`5meuIB_J*hQ#09=DmY%)gEdJPPmx%eLr#HN{@|NfB=)ZN*T~S7r zw?9~Y-Xeo}%VjG%%O0h6Jz#PDXm<1i-`hjGrzkAS(^?>Rcy`@7Va_@SIfJTmr{{DB zol}+P*5wx$DBS+u;M03M=jr*6i<(h?@Nrs>-=t*0p7zPrmh*W_bk{G~-&tQng}Wn+3VkQP-jVoV zS!eW)T&4b|PHPQ`1&#Oq%lD>9Tw;wdD}QyZD%C&arNj4sqB9ds&TJ@n5@yU}Qn$tE zh_vhVz(=f8tuDT<4P7mhTIyRV8}{bKwk4PD%InwLXBAGbp8crO+ak2~=9zif4OTyL zqq#H=U-4JIC*bF6^|f!}qT`33`JX=}zUs`>4_BMZ8n!<+x^j78X!}%&Rs8F{?Z3Mu zAD+BU{i^q_m#S4E)@JK3YoGn|QN)1x@7I9t7xJ$byP8ie)10L9sHei@H{+Y!1UV%s z?kW8SK3CpYB(SJ=Ufz1Z#r%h8=I_q)=VceXPwdOEU(2ypW9^MyRYz z`}g|^C-%Nfm0VhpF!_a8qTMp1`3mjnj@M@L6`8M|re^3`x%k8bk!73<`Ij>q;5f<}UUPn1Vehs~kK3;H zr`3;w&)rS?_;!}x_VAd)t#9-%DE7V3M6*R_FFb6uW42Cx zvCn9aD3|LS?)`>yMKnX=6$PF-oSfiwbgqwGNVNN}AKI5D&z$dgy2BugJImtHy$@#P zmt5G+H5&f8H?{EGtqHnECtu-cn>)Yg+rOGyb{9+Dda6#YmC8^3Iw{Szt43+f&Y;fC zCOKTi2WK-@vfVxL_@Jt}(Pr*+%bnAQ(nkc_#gD+u`0fnPzSVS&5B_U+>RO ze{p^}*N!a9ug`ivWZXafU;DV4*B9{yuDeD$Da&^s;96z*?ZCN>+c*5?S|fTR{s9Bq zK?9d4&cjO-rP~U6Oxg`Tm#njGvVEfYSY>z7b73`)Tk@PU&fK1EF!gliDMr%;{9Tb< zefz;X`_%6!)U+`&FdSpTSCARtj$-%-WN>0xYDzF-`fX|m0=L%XH zzhQv{s}`52P?9Kf%aP-m*4I=|=WV|GX#S_x6%#TZDf9o+cs%#zC83oa{BO_Pt3JQ; z`MjBT=kMS5mtjK#udLOxM;(W+81}Qu@_+PrCuVAMO)&TAyo`uT8`dPYDpu`yT^w)F zGi68c*O=8=yLgNDz6{BA%v`%;^Tuu4_by(jAa8T9_Ik3xHW~K{*V*P$iw;iM(@}eR zZ`X#(n_?>$%&T~`JM8Sky333Ge(Bi@U0v|@_3DMKWxFn}xgLAoykE>WZvE`pa_eQe zj{BFM2n%~^!+Lt-pU^g!U8fyp*0ysr{l8|7NGI(V`b>+1@jqMeJVI=YN(uDA}0Y z+9g}zmGk@4pF3)bX1Xu^@9$(R4w~A?QpCpdC9@(eLG--o9)k^SrOd896Z@}kH{5!_ z!RN2UwGWdNt7}y(FK*1(U8A67aw+3_^|6BIr+yzdDADxi3)pmPSCGq`b0xKz+ zZ_PBt7KNUl*OXcuFK883`uNNJeuD#P0*RSNBH4twR<0`K-p;snw{z@_Q+IeRWLGJw zs723F=Mc{Q$8-3mKF8dJ;d(!XU99E`1&N*xTyDc-=6yYd&(mzZmEX1nEMq9MNJ1``9rOO%2UeRY5_;amgV^bXE8Du$54aq8sU zd?81Hg~q%YWLb7A-|US zn*3t?6L9S2V<#yEx1yW3ckcZEN6py!_wV!H;~8GvIC1DuE%#C#p^6Euo$bH2rY+1_ zn6&U%Lf-C6yyX&;o}OZCzWAZK>0#07sgIs!To8Q4`@Z7I$?bpizVq!U`da?Rm&^`!y4{p^hj{g)qYT3)mLIm_aQ7s3}7f4cGT@WRU>d+Y^_?mVCLy)~=dMr7$P zG3RxwS#J71<&P`ADk^vQ^QV?a?B{Om4vlQ_xznO8Iqg}4#HFB`JE2|mX)C6G*Lp9e zBHj4Awd%k(39i5&g7y#lj;G$QylN?QHz580mXjOI_V-zS^11!iTdq%}aBW*&$9jo- z=e^P!e>r#+p7`c8^-aK|oZIq(OJBYUj-59t_r(_zVf~crpP9qIeRr*R@jWMHLh1_L z3Eu5Cn*tAnN>}O_uF*G9Gf}-fcf*Er8-AV7d+~T?IfKbt?PBJQp5;dtE%dvr>UD9E z)yvmRk$i7`s#m8c+&|%QVA=MSbKgjapWJqwDdv#qi`kB)#}1yKpkn*5PT}LWvbHDJ zH4i8-i5y!bv0!cL8kfqI`G&7J-$qT<`sb1)_4%QUn(4tM1-#b}7VZA>+^wh5OKPpr z>Z8FDm*+e#mMK1D7}#T3d1ubUD}EDy)%WS0K9IF!f3Nk$I`Qur=1Qe~Ve@p1yF4xj zAJsMfEDlPAnca)3RGAnU9^f6Y55t`bFT7d#`gkBZeVM0Jdex&8rkZJCkxQR8%Rg|B zyyuq`uwscrt;O=)?{C%S`=9?VAHSb*hMQTVT+fk0*6k*}S-aL|`dr?zjMI1Wtall^ zR%d!mUixz0vX?CHl8+r=X6EO$N$Sw`P+jcWc5UOw+_r5c54hUa^@Jp?ee>L9$I)Ur z&vWTa?bWw!rc}iWZ*yghOp=J@R@$j8D|gaiDf9jl%D45awkcm)_@Hi@_IC#>R<_Gw zUM-pZ)4iJhm>DnOWPTa7v}mJ5%fzkoH&txRnA>Asv`geO&)c1wzQiyW^BmhWuWLeL z?HitzS#h5qm(G9OHl^*UMA|@6OFwL70 zaU@vSd)Bxg3y=5zS*;7VPfYrC=4slC50@Lejwt5lF1V-X-W`&1HRQ^aCI71h+771e z^$$y4mErBStMl*7#a2tWZO(LkPhBYExGe4NmQAg{E`{x8bY8w+b#A%RooSC69v0a? zZ!Gz&w8^Yh-o;7VTjbP-)$%HLZD&8c6R2{Q$GQGZg|kNZs+v&GbGHAyZhqe6r_u83 z>BJAlHfOkRUu3t_^0Rw#w5i1F+NPeGxHU3K$~>PIYD^9Lsp!0C-;%hi&$ku1syM}K z$p!k};5&S0YUiv+XI(yT3 zlTcpSC*dfLwJl~&){1Th9I`DIijFT-X0)h0ydz#xYcXwoz{%^;y^*Jvryt(o_e<=~ ziW~QjDD*aGEOlOL(7^YreQAMcp;a8$=8b*erAW_9=Rdr}#K54yj@%;piFWLg1u418 zD>WylGAT6?y83HvcxHm|b-{o0bSrf$Ynx(Owy+j+&UR^W3Nm2KNeC+VZ#yia;=@6$fYiJ5P%(C_}fvBJJPn(0Pgv}CQr!Cc2Lk4(C6M?Q(16Zqkv z!nMs+w(k-O)w?%y*@+xc3(G&$9(hOfhC@{Vi5^rKcAI zS_E6^_AR>BqAO6+`{e4b!eSpZFNhD=E3F zrN=R2*5qr8QPs`~PJQKHf%YWw8qDis?o z7n9c;1Jfr*2S5FyG23JIrH8C$Nh){eEEb>kex7^I)NgZ}xz)VnG%i`bt6H^5cfNPa z?9PHKUN_Xax)*=G+de0I#>Beg7ndcwZQJns-u0ODH6jraX4+n<%XgZ|@2s2WBzn8j zQCTF*a(n1h=Gimdx_70`_q`l^^s{D>qJFgY(XG8ctdHDg*~!j)`Q*R4Y3QHAOMf`` z^}jg7xqfZgDb~kj=R9BS=IP6hoZ9>~=-aX+j`^Vl{Jym-swXV3^E>+dBdciqk?A2m z2_Z+PN7k^$hki7b3HexB<9yV7qyN$EA96+SA1n{Ob2@lm`}@^D80%I%a<^Fi$nM(T z8Atsi{)pHIe=K&}e?UL7s_aA*9@<*;d;G?@(ebUEtvHFAYp?`Rjwf>!Z zA^&4}SN+5LTK^7f|2xh0F8vEb?T#16{X{htSHxuf%Fv7pT;5gnFgS6dK;1)Oj_bcT zKb~R}T^CT1+I*l(Dr<_k>8C$#t}G#fBEDS#p%-zrDN~UG0#8v^r5A8 z*6D>sXFM!6Ij^ubdZYR=AaJu)&5~_rLwszn?*G4vk^k-1vg4gHi#s{n=Iog$8&mE3H{3iTE0?{8hZpcE!aBtJWDV z_0O=J>}h&&_1vWwR~6*4M5lADyO5c)HbT-=GDp)`V|AZ%zxeM>o3_U-z7@9a!>PJz zi?F4-t6Q6AUGmN1>t>5iO*>`E?XfxA@Aa<5vmW2t*5luJ!-u)%Y0pv1xdFcHJTq?x zzc^>jA-|-)dGoCJdtW97{eRutm1`27nY)Jn{CekgN58E4;C%j3@r=dN7W-emogc1w zE-y1W<>%C`r>&o7e%W)bIHNAw`uMqTKQGL@s;{@hVY-`ob6`gBORHsZZ<^j_ACJ+U zTQ@nXtpAM2-L+rZPp6+ecxchYO|Pf>`(_>ZdEazeqIDU=0^=F8C7gI$+BbAR30<;} zw{FYiZ!za3JLYX(A^qC6`B&-kho=ww_p|-dtTef#Ji&c}obSRmn-He6U$Rdwo+_7H zx#jZW<~r^d+YS2ts!D#Yx8*!q&b9BCjoh)WZO4qxDy_`azTD!m*`i-{`jd?&E-Z3# zN{9P7etxb(noo)Ny zmKvd>oIh2q8k(oXxV0N_xh^^^;k?-8aSM}>?7_zZQ(k;DS?{?>T_8xcN@-q8TBnJV zu8``B+|@3gpRT#>3A(VCSB2m1q{~~&-mTu(0$)|Rr6=)vJ-dD4beUv&zxj5NbT;3wXsZe`fjPJZw7qz1?>VeB9yv~a-x*mJv^fA*Z*^KNrcka0+ zUJ>iI$IM{8`_zxOEZVQFDhmiuD~`KTll@=D&0N%4^lHM<+ef z5PdCSwQ|Wcq1Lk@Zq_SvEL#3PDKY-LtaC||sK~9!A4PVitq{2upt)vYP=xc+4Q(Gn zYwLhC4&E#L$Abw^Gl}B3;q)0e_qDc{Nm>*7C9DB2c-7&g_%b=7#L2A zAvcxKyTLZNn@UJ0RH`7cL0t~SxcA)9*kI{Ui8{YcKNTXQIF{&o=x&qv>^M6pI?8wH zGz~K;hgPTTwQq&|4kvArE;rwD&Z6ouf59I59sD6=M`r+x! zD<2(w_j}%VoAIh)^|neWcW#O`%qnh6UiGmo;PW(}@CE5$THtV>Sygq=XMb-j*{@4*ApXit%`!8 z&Q4N)E$G8tGEK)n>R!d=HM(Bz3+CL*-I#Rh_)pn_hx<$Zxvy>VZ#@~)I61eA>qzX> z`(7eDO1|hZ8NLkbY1{MkYBtm1m!CFmOnQ>t7J62Erm3=hw%2MU?wPg1#`BV+t~M#f z+a=x)emkjRN!jFveat7T|32>bm0M`~xOQD%vB_PrTkAYmE?FTYYUgUFHh+@CiLX5E zYnv}cJyA=4vn+U`@UmAIxAymOuUgS3Y_aljZH>UecB?c4?{l|xl$&l_Ju_JU*hcTg zj^^D~c86?>Ca$Vvm6d(@RS1-WqVY5G$3mOW<0q3?gW-o9gVntXU?LLPTwqp!;iym%>yZMI99kor<%*TlmH#>uZHZJX6;?b6H%R>W#C{}$ZGMu*?!C=N z4E@xdUt7$3vFNz&mIvk{d7{dmzSSqLr5Bz0ID2(LxY@}I<@F(F82 zwU%ns!`~JcK zt(ZS2UPyg5|8V4aVb7i~52{~1QBoB+a{kZt_)n%=UVi4dpIx|mPq?M@hrOr2G<{kB zBU}1t=B+xnsvXA|=N(pf>m8FmsZ2}euQaIO*;3zH$IrsR;KhNj;PJ;@@L&#e;28P9 z=(^pk7jYH%XLU1WQ=*eXi!@{5RbPu~4o|q0RJwF>oP3<7RGfRqH@net+Rd9X4O}Za z7FEc9bo$t_eSsl|#-nb2yPvO``~L{;TM%kI`z+gy6K?gNSFf+$wQJSx)vI=|uHRkr zj;X;aM&~%!7Vj4yl9|g4N{sHDE|5R$*QVF@TT(8eV!}hkwsuLm!~ls!Jcex*mR$>q za>Ff!Ud&_R-7Wde!{E;h*2xExJc_RGy>oTigipzKGHoW#{LcF2FD74j@7_?!_>6Ui z_yN0TZ>JX==#P4K)oA^+%B>YsD*Fv>^d2r~aTem^p0e(`&)J&_0Wxb|ihMAQEDT*> zv}k6Q_pOdqW$i*&S1#2`Ix4a^c%$jR^CrLMl-O+8Be(?2X}xN;)&s@M%VorIpA5NF@8XQ%p1d{zoQmI^gX)zapYI5b(&)HTXsfz_ty zmw`^1?w6et-M5M!-&CopxqSXxE%U5SzOCmozt>$C*)&DQ^HPMI+2XKxxAUu*zVw`$ zIL+(QtyM?oY+0KYVk%;`G$!$q`XVN6^#}5d|KDX?JNotddPVb?Q@7V{kqtJ_-qSZT z{Cn)NbrS>oZ=X2a+OP0fQ)c2vlfF|GZ0Ao|9Qz=1__KxHW7a(yk5%{RJQi&W|2V7X z`p&n!ZRUmwk9FI&|NJg1w)*&PqkD%rIp3fD!Jw{Mqw!d|M(43GkJpcogvy158jp>` z{#&m8-?aRr>b^-IP5pu=_~=|qsX2XW-{Y11g>S3d66Yw|`>MQ3`O_e5bneld1GhMj z&+7S{b6@`BKP5_8--|aIEk0=^ z`)T5VH*fMf3n#y9G19puBZ<*w_NTVaR7f>)+3?e|;oM*pW)H2>_vspkrvjYZpYly<$iU{bc^%CfxMM!L9{b7JVDirp^XHnmTD@mc%h4-cu0Rx_?^JdT+8HZ*I;@;NQ@ zGZ&mW8xwwDuT_z}zu}8JGP_r6YufQTZ~T2%IIgrj-;evZR`H+U_^2~CdQ^qZY+tm_ ziTO&j`s-yYRxFrUWIXGG%kiB`>-Ic2eMd$_>t55bWj1GpCA9DRJ^1*H^|-IOGwUuv z?w5ZzF-?iM=)J6?LrCIRwCh%ZsZFOQ-7*$f9{VlpP|)^^hoqctzHZnW;lFgj>7vEz zI)00~ZZ)2M9=N6Wqd-?@jf<+wQWv2>$%*q<%*ha%=o8{-GIPbG46chIi&h!WxaO1k z)nM6n9oue6CT5O+)MW=;&qO_sHo9%za+9Z6;u&A^y$AQ}CmiA3pJXq-Kj9yPSm9fx zXWMlmty)-JxI6PyqD*>bvt4{v%9CQvcBju=_^wllc3^>oY4eJYR@e9v8n17>_IAgN zj?+tBPPYk08TC9}z9}ra{bWn^MpoO7#p1s&^gFj4-!R{37qi3>N3RCHz;lHX`yX@s zTN3g?sPB=!Ou6peHlsE2DJmsiU!1-RU|efQ_q1&37S-T?NwX;E(LJ!H!p?oYMa`uTI<@w*R}FX}V+ z5xF8+daCxynnhc9?gvz!dj6jsRI9L8{g%4P%D^DVkFQq2b4Ma_4^Lvv1zz$rYZp?Y7z$2i@6AZu@4hoG~pcI)igbu8C@6*g?;- zNqleKtufx5*{#&^RKSJL(PgQF<*K5oi@m)WwcRa5SVUYz*09GtsGa{~@Al2J@1`U- z+1LMkJG=bP{r^Ay9k15+|NpzOol)n={zDN>pPekE<_B!F<%zE=*q5OvaJF^PP7j@$ zAQSP`J5+l7A6_z8Zol@?CWEYkoe?{ozN{13d%mSmbRFO0%{$yC)cJi`Cwlhz(GT2B z@4B_taVM*t6aHe|v?GouFQ714Vsl}f!0aRC%QNzX&Yn$rtlRV~?BW}t-TPFk;@2Gv zFNo&NJ1)CuXYkS3#3LJ`P0HH~`QM3JzvoW!7uad=?s%N&?+}{>2ev03m0~TGO@Gl` zWwUZQ`=i)(xy#t6X<4L9omv)S`?l=$$u$cV3hsQ=_E+1u>7x6Y1qohRTi5b0>DjV7 z%>OlW+ggQN3zrLTOI3U1XEu3bj=9|qi*@Nn9|fnR*jsMZ%Ff^Lb<5)KJC{ujGpOHl zR`p6sz~on#*n3^3uikxSon5}uHPgu-MYpZZe{CQ;J!GL?vBKKjk+V%6UgC|aw#vP+ zdeW}P5`9gfQ@`m;`!C*kSZ2E3@+}2|LYr)!)hB8Gl+ik{(el-nvs3c&v&(y@G#x&E zclCm*nKRAqKIMv1d(*uvkM&<@SknTZcLtY_?aEnoeS`Uny`Ii3ZC978?=HP9lAM3( zeV$q7gGC=zJQA#0Cx~*|KK9xl{`Im@>4AdJW@mf1nfo4CBjvW}?Yudj9{0~mZOgr2 zvhB$3n`<_%&2hUW^lI~^b$-qg6O4~3Em@mpx5szWnb$(nlXXjF&Q18bH(jFENptCZ z&MWUNggNeBatIVS6VW%5ziR2+!*%^#WokUfx9XmM$bBp+TGG;Tb=%aa_a8gME+k~K-jtRUX=+#)oyc7K=t78ROWTb0^$soNZjPJVjwWT$-8sp?d-xf5zkXYYtAb8KzBXlSBg=sT^A z&)dI3Q^?>lXR(QZU1YzGo22(X>&xI?Rs%q=vr#3X6aVVZ?a}-YWf1RP3N@ymAcpbUFbX4 zQNP1nYp!f?GkI$fcz9#Px`&Q7OCBcHgdTiTShMy~L)-d?g1oUe7A&ZIv~c0WK$~R` z3wbgtnEbOUxcpcD*wvQ*KvDF3$JBJw8sYPq6>|C+Kc-!HdAlO;u=kI?rdxrAOCF}y zO!u1*_$;G>_5NaYH>Dj$*=jGjc<&!yy{OXnFn>Y7Vg8TGy!OZZP4@K7&-yXb;qCJu ztzGe170mgoeoSqP=YF~WVE)W@<(pYQWb4*H2JfD&__4dK{=s~%sQYIa6QDU*x#W=?TnX7V@uc&%elc zYGsw5#4g(S(vt~w8PSdO}S$yXOhe2Og*s6z9AIuE<$&=tJv^*o}&mIltHIs{u zTj$?bTOt^Ehuiz@r;xYWA-BFheq^<8%cn{4xzd{1AO0WNb!WoM+AyuuUD}g8v$-$( zdA-?igwg);jjS)JGX>nN4o;nv+t>54_oub*b{nSG-btIj2!zCXPjf3=leg-@AFg7X zlg5$dKV&|9JHBXf_xA|(zCGd>(z4Bp+ea%&5$`tOeNTool4Ym^NhIHKUePZ zU7JN}qGxVt=q28aJ6;@Kt9pD=U~cEH%U;F;q3a)O8yu+6sRY<-% z^48^B<@|~9adA8Ld3_82ynR_p4O9J|OB>{$-SK>puzT8K$9*SP|H#eTC-1d+6MN{{ z-w&<7*8TXdU~p%xn0Hq3X*rhn)BarBXxkIjwC9h7oTArkFU`%Gsd_ujC;qNl=Xbi; zUHzVV+`~6}=SOMRxyDR>6g3Zd7DR+HD#9l|{|;v-BB9VYkT-CX~vsf0~`v znOAptiCO&-`<4KmN9PlZ8sGc=TsP_PlzFlFdnG?V4bWyiTD0P|AX8M4#gyiiwj1xd z7KbgK_BM0H!Iv}o_!GrSOb#g|{p~oc!jyh#y63D(N`9HMz9)V;*v2}&KC-6g-!7JD zRhiSA=Su#WU0iMVZpA_N501Z@j)^Poy3*|N#c%N$Eia4KqN9ARo2qS}%zt9X7+v0@ zu=S_*gU5=K&8-6rq8F*GU@`kT@99-uFGglV+qLO8=6;q?KXCKPFBzGpVngQJg(~Nk zzZEyC(ofQfJyWs6<<@qK^??_sy<4Pvcb@K|>+LMLE7hiMICZ{samH1?OB`}*D_1KW z()%hVqiN^7LQwvp*~_~f_w{Wg64$Ig{7bG;;r8hh|BHN%iSiuOmi!tX_ zv%O1lbzj|zy0UfaitOyb>(3Ug`+M}pbx-9LQmi@7GZgJCecqp3zU0f{9wCM0o{iTH z8OsAUzMffSzJSr%`_qz*D}0g-{n<9$6y841n;EFO8yDD3=%*IO^G()xBj<<7Io1*^n;pKHm+-Fb6h&)*p*gN#-id=^k!D|+{* zrOB5qS4=-u&v<`>O@D9MqaT8i()pE4rmS+m4QJoCENy>Yz>?W_CUG6ltpx8Q=ciO3 z|E86CJ$mP~hkK&^CN$i(*d;6VP9dgzQ_$U3jk3$_-#5&)Jy_zo*YQ%2X%a*M8yj z629WE38w|(vMn2CzD{CEh+DJHuzm3o%_ADK*p;;&6|c+pTwo{g(SDDx;6|yB*V)B3 znswUTkz25J{pEMdwmGP5;6KZCYnAfV-xn4c*qj&K`;&`L;o35{kj9%$*%##lCEtJC zn-MD{a^R>^79aO*r->H?qHNW#u%GU}BRw%-;i;?a%8C;o@4gVReZ_;`@=MZ9X9Y`+ z$LT!l+w6Ma*AjNW@we`nG$}5)G9~6fm6gZ*wiB7$woew@`Cr@}y)s$7xK8@qq`;aD5?|Rh zA1WKY;(xSwP12$52{xK?e=V1+U-Z27y8St0!}@D}i^7g8evt>Yatq&U@icKUFzi9O zVhw%J7SGiu=y$2BpbMZ5-!2U~n0MJhp!T*!*(|oGOUqO=TbXoyZv_M&=?vizT6rkQ zr8#OU^YY%kExEC`Z_MWS*Kod(TY>K{gB_P)nUjiF&xEQE=iatM#u6vQ0d3<<)VXsN3Z%hilxc9vywKM*WcT zz2cKWZ+@7S_g88>{(ED^%I!u;8uA}sd=bX6X2QW_AM)(O#FNbj_H=BR$96L%;sy6r(Rs>y_dV5osL8h6jB(rFBWc@` zf5w@{|1UM-%8I)7H-$7DqWz7>+VeZ)Nlf2FuhU)+Q*;lTqWxkEO|e1n}w=#TjW#r{rYi!>L=uXHD3_>ZS*eWWs+^V-;W96 z6ArIwT+6iWqCvs_2H6>Gat1bgbLOw`HEe!av_4<%i(iZH&3CbEQxh|HRaRDUN)+8G z{N`>NyE5|Ym!Qy~*?zT)GON?HEvLLo#oPWHLO$E#fR z&(%0SyZSB5RX_9og4$UMajtFGm>0bhI(M4o=TD8Q9+~X!2(KHfG!iX6w|2eOP~R9D z;&EAMZI|dN4fmOM4rrxXH_zt0tb1m%&ZKEa*$SU^Br=!Ueg|LsTskjO(UggS;TqoM zO?Zyr@k=ZVEy>I&R)H}<2@`%X;AHS>`s4pETbJ&P*jcqW^vb=2l}-8*!UrV`E(k2V z`k-0z)>59Fa`WAn-S$uB|Hbn0V7QR|l#f2Ubv-h*%wC?kx%v5@b7%g~`TOSm8U`+L9Ns6U^BgQ$c19p-^J=!kFP3fSNm{%w zf5+~c`zroPm)8|+J`=leUTwOE99Mthk`uF4HGT3IznhUCF1dyGw9y^Y$<^~5-;0~? z3@yzKyt=pT@r`v?W_w$e%j}(O{@pyGHE~tiiQIQm(`rH|F4BB5o!9%4@WD&5vz$ue z)~D=x*L9cc>TOAu?n3*H#80nME*&)8)8_f-<-a+F?=R%dxH{?cxfMIurmHlUp9y$T zyr^!$897aro!;SZV!Sq21YhZhC@OpVUm@su67O>7*)IgwpLl&`UD7W04a>fr-!%Qr zm9NE5`Ew?H?=at)SG0QBdynu4Qz4b8%;m;szNlWF!og&)gzZ{DaGC4WAANTVw2w(I zbj#aeti`PrTzn0J<^+r~2+3if_nEVWen1uM_w3*?>G4Csd{0`#HE+dO);-#`Zl+Rp)Ip_%beR13q!Nn z6GS*~&75@2|DVT2$6NW&`~+{DnxCjK+uE@}`~O;QF9nzEnV0Sd|K(@7ne90Ft&9As zHJm;|Wg}0# zy*QVASP-h&*gj+N8-u6*4+XDsJSgn`-cl0$p7~1bT#r@9t>!6x1CK&PiJx+q%EZ9% z2k+WaJd{j7On(*lNie|qz=kzvjzIOkW=8J{$7y7&2-IzW>!GyW^y>0RHJH_w!?A^bI$>MMs zpXVBD4eJ#KDeIO@dNyle)s0=xh2K@h^xo;a7}T3(eB$h5hZZ-sRb^L_J+3w{Owic2 zMCk2}_uO}%*7i>b(v~P#e|+nfkK!|ok|hm8W@#D4NS@R^&#&mbZ{?H=rTy*`7wkDL z7Va#2VxjcWM2U>Ye&=H4+VY$~Pt>1cIm16B+2hy66J0+pb2?WYc-(Ph%5$@$6JE1y zl`s=ox#8*OzJIp^)3=EW z__uXm^i%XrZ(F3cP^^5_arN^F{!i2%T$riMea)@yZc^u?z2{9*CeFWPp^?z)u_pY8 zR;v02v)b50pT5{C*Ei>U1Fxn3-D;T{z{tRmin5k|hBfL{SnjxIC15cJT@|e2p9kMS z;hd3}m!6seI$|L;4>q9G>whroP=LUkt23@#aT4^O*ZpE?f0O-!rhtr(3Kj8_Rn?a1 zKis=q{`o=v7w(<{tVKbV=oh^J(7C%0>?oH1_m9xM}OJl4mB)uIZm1B0h!4qrA4Vo7jiD09Gx%Z zD02M&W(V;XQCU~-t(l$`y5QE%v(- z9RyOBNkG8K+ z3ZFXfM&F%f9IyA>Tsm{+s`nrAn%jepe@qD~P3hlco@yPpX4$u|{I7eTcW$`!bnmH;+!eCxeEH8;?E6l?)%$*{Z0X^{vwlc$o)>(2h&3wB zVYDijjTvSA zv23URKDQ}aoalRjr}}(=#n(d-%bw3!rhfj#;=4+-7a8Vi-1HWidg68c%17lJ)|(g@ zxSDy-(_^0G#%Eb?&<&u}RGD&4bxil$1&4(BOmMsCafXUV1< zSFxRSxF-GxlUVYz)iW~1!ucm^$n~83G|{L@aE4{e%pHA8?cN*{_-54>DK$+;jeq6! zX2Z_;9Xs0BY_xaU+7`lXp8QJp&cFFbI+KO$g+H9;6q>Ht9w+tgOZK~@wm(WI4FZp( zS}j@qWc@_{$@Npt{9yzo=B_1cGZL5>7`A{5Z$>5&2FSsIusu^u(3?9s8Cak!80G64 z;;8HC=cfPf6lnArRjYdU+{2)91B69jI>59o0|NtGtFNP5)XEeGmRL}*2OG@$h zC@w1OLoE{ngC83MgENY?;o|tLbxlc6bxli4O)i1Nl?rH)6haVp5I#%Zu`9@XY4iF(P6h@6F$M3vb5#}>6F!1Z)vjRPdVWc_i(GR*W zTA|)($~Ptkh9WlfV4J6p&r0-2@k}np3^vfth!+Xwf|5)O3?8fu4Av-q`f7yF0(3vY zO9NbmtwCqqje86X45^F^4BjXfm7C(V2r~gd%iNIs;F6-uymaUMyt33H_*^Y|x?Y-* zW^;pqfx(rLfx!;N;&W!CS{#;{TJDsYmx3z~T|D{3FNBGKVKN&7Lja0hLKb-KLNDZT z1}`Y7U<+bUT>976tbNJAz|hXfzz~UI`x7ftY)8Z;&br2_2vlEVPf~2X^XpBR7#KL& z7#J*3oDpI}mNPJ|0W~oak`-$2GBGfG1)ao*V$FLyeAb|64HbldXL2zpd@=014F2p43_2)g-*?AnHl)~vG<2|=Jc)Jtt8zvLhBr(M3@#`p*LveK z88uK;P`RKuz!^?4cD-58K~cbtUQMO>;{x(T>HHdC8#33|yvzIyIK>Hl{viWMGJ5W?(Qv2?67Dyr%o+r=%9;!R=5n z!HiCj`NpSKY^&v9V7Ma6z@Uy|epx17^YJ;Fm(^7~oQZ)Uj|JV)9z}Q!MRzooJ`l*! zsru(HlrS?e>|{qb|9=Td=0h)jN3MNA=6{|1P3;u}1H&$i+V^q=Uh^S=qT-(iVt_JL zPHIUitiyvn0y@^z{hYwdz`!rdzyMn7g@^;qDgt&TC+0X6 zPz}G91-%U@+d;Y=DnY5qshMS|MUYcg5LUu+E+_~Q-e6#mL*_6%>B4JeK`yvo4(sxQ z%=&Cv*&)Wrz%Y>!J%|*#37O@XT#{LqSyJhlmzEETkVGs!U636UHFv*X$Hc%8#)h7x zX7%8;13k$?Pew*gQlOG-dqjct4`v1iJ5KcW#fpBs=EHL^C`qLjsemX@p@9f?yiBLjmm3j>22O0cs}!E23AK9^<2n_J(NfqEsZ3=9qke=smG++9nOC7^Url$V&}k(if~gRKt)nlZ^waV|DuVqjRw zg5HolxB;(iC`kc(3YarX%>Nf70|OHax=;K!<24(U)l-X9-13W(Q$cL7U3plVOvt(M z(%!U3fwtXvJ+t4EiUho8^7MJE=DK!V8IuirKNfz|+mhS{i0yS4b zMuKPf(F+w^j+H=h?8iM=9a~zGnS)E2uw{tQuv?2628L9O#<2Bq+=lz)=cOZAfIY3p-sR(8#>BvIgoS}Y1I71zmv9^H zlA2VS4h~uDrrxl*#@@xwz;KcWy^+dw6}PD&nYpQW47KjHa5CXyU@#D4U{FJG>dQO0 z4fQE1bxusqz)}82K4{|G$Hc(E&Wi5P!smF*%uf$5%0w9p!j+=LQ5@Rx3ag=cXmb*v z;&fi|GEvYFODQu0Lnw+NJ8>HlQk0mMmYEDHri&p73OodiDGciTss!gJXQ!5gB&Opi z(e-2==l*A8V8~`+V2D6*!r?bK{o$OSmzN4{!$Ie%kz9gP7UUr8X~``5?!q2M28N}~ z3=HuouJCwIhAZ4N^U_m`l8RCjQ%H0SsQ6USkUVb(nux}j%t`!6x?{k_s1y9$7f>;Z zob4~Mu6ozU$iT3YnSmhz#pgVqNw-V|-tO@YG9uCIpad!PI!UFAiGd-O4ZTsX@s)Jf zV8%6Q^y~P%fF?~Q28Mi$eyG?FoOWPI-Pp#VL4G)`_3GYVMh1o|Rt5$iln|Z&iv;uW zWhxv^Fz@T>JMC$HP(ol4Cr)c|dJnny!5-paE_rKrGchnE zurn}tq1g9?8>fAk9>SA5G3^EUbE@>DkTZ-74B^ZS42~%Fiu2>N7pFgwDj0-yu;u}% z>w;_pYLhES5UX{G$;qk3#hFQ&IhiGupvl$DWYm^2$W-3u*a{9-28LUT}BLhPNGkTBLMg_OgzWJbo;$6#9^Pq!VuE{xxnMH^K2-dCyxxOIp zl-E5r1_o{+^gf@B8g45ULwhc#g$hg-+r zl10lI85jbY(T9YC4GFm+w;-`Z#oY;FDTsrb{*kRQE2^@Y!OXz$j04@8L}Q|?@gisq zsMwZV+`5L3nSmjKoq+*#aV{c66U>RR2DVWGxz_@UDTBv>$7V7zFl=K+pR7G*h2LDH zbf5wXC?r14k`|Qm4hfx_02&ewW@BIg-G_+q$weFdHbRnvr*kl7k_LI@$33~Wm7u{g zW(I~JgsBV+46E(&7@V4upPX4z8B&y(oDG|iha@>v8G;G!L1Vz&YYYqwpaDBn`>#0S zu^+sO4=G_od;-$e!n25Uz2)>)h@ZbyJmS3oMr(fHVNAIQ2cCchp=RtAPN0rcEA&keVAC@ln+ z)ST4x#FA8q&oPr0D9uhd&i)fLTj_>TTC(}zwg%l7xca$YMbA8L1dW$)pm&Vq{BWC& zQHfwW9h55;Ez~kP%D}*oz=*z};7=fK!$BDu?0gmfJm{hV$a+Eiv#sI#4d%UPU|`5+ zL?0d33&w4kcWNb4U8n-%5=?7fPF!5k%gn%#&5b_d)g6M{HawA!+H`~^3}|VFt#tuP zf~S_<=z7M$z|g^nz8Z601a4ROrskD;mZauFQk@Eji`T!PsN~+UzU>YJ149soP46Oc z+k_mIpeQ92k06`+wq4o|npJy)(X26vCdMX^Jw^UFmzIKp?X&!oclVhX7{b}m*B_vA0hyiPS_F$C?K^Rt9QgR zGBAK{V%0=(OG_$lw;-YnOS2Q?Me}twN;QlO3<4OnwpBWAW5Kb4zm&z zT*Au00NSL9@QX$!ZW|FELEI;TE2wq{UeectZV*LXtouG2zYQqWB(9VJiVczW0H+xY z3=HQP&?mba^6*;$4muSV(7iX<6P@$4%-)Ag3=C|X3=A=dz+qruD9*=iG-ZhnyGycl zE(+O!rra^+i0&2Pb_u8e!WDF&6j#)1cz}hKf#D7hdi%4e6t}71V1w2ln63r2Yu$3z zWYjYz@o)tb14A1t`YPiMHMp$+I~|c(Jd=x6 zf;02db5eaW^HLpia-0(jK*Mu+#cBCPxtJD%{FW!Kv;Gt_14AVbdfWP9J#LHfqzQPD zgDVg5-)764&&a^g#f-iZiMIu}ji6kL)OrUuJ(2jhM<+meYPL$8Z5ay#!&*-Cl|Axp z_^kwounMAJzzjrC!ix!9bLAQ%1H)@(^i3UKyKtM2nm`bfDKK%obuGx+ImL^%B!Wh& zSkXr}oqBOwi_sZ7<50BgWv$C7l&4*O?d?1i2U( zl94T7h$q@ilvIg2Q;1CpcbWltGFUD7a4e{o#>>EvgyNv%lZo{tHd`SD7-}mH>Q-nY z4l|8`N{DZt*N9(dWMG)X!oUF9l!tKAmg!`<#}zTOgSAEl1;Xa6)c_F)%PJJ4BXSP*WYMb6|4dN;D}o5p7HxHl_!vxPQ$wj%{INV3@*!K3B?goNRXm z6y=v?rocv+z^=f(nBe_vX7f9Y3=HSk7#NCBLWbicm0W-sIxrW)-3IE}VCExG2xT%0 z)a+zrVA#iu-ll3fO_uv0xdoDpJd=xki*QV1XUx5zG@p%up+|;+Ar&QHww)!*Vpy_( zSdAGdp!qcXWv3Zi72kgb1_pm7^xEvj6|$TJ&N$fI1D3$rgn*@9P;GW(!bIiIpoJ(H z?cMTgWVr{WQ~@=FvBV81QLHcE(&dVGT{i$QS%OO%lCfG17t5ru0D8mO?H zd%khsHbw@9P8J3R)ET~gx5#oGO0b~12ehOs6?LEm;(pBB1aex49kJGG(-_g`T$jEg%SM#M0?I=u z?N==61z%F$6wlEPs>4Ae->40GsW)V~4!QJ2O(_r=NQn$eAeg}gO2A(6H@!jYyOY@& z7*bFY@cegVIS3`VP+bI-f;KF$C0LM)TxZpF-(g~4_`uG<5R2lXZnMpxNI^T<9HZi*IB( z3mP#H7vb#o)Mo9{&17a^VB|z^Ic)h!mbJ*fh1iWfjp{~T@!P`4!0?Befgueg8m9dv z%VJ2pL#)J>BH)D@_Ba3)t6p{7IiRhwp!NNz2XWl{PqCZe_G1r^xzo-xgH`}=V$_Eh z8JVyx#{)0iKpkm7Da0@%0yR{SpBp~Sr9#^=^v)!vt`*E=|FkF;GFJT3F$#w&x0>+Ff zkQ}s(#Y{h-@?+ah*A!cJ1_l>N^bxYPB2;h@&H}`&m;dG}Mh1r8plM%}#E~RJmc1zD z7HU91rSLYnLAA}gUngsem>C#KK}Xo2xM_hLS#AQQ5Ks(2QU|J|U~<@t6;RZ8v!t_| zvN1616J=oVKyl7OC9<4@oPV%J3}_^H`abt{piNlXoai&nKAN~~1r0t!MuL4SQHm4T z^eblS11-F|nVEPE)YoukVqmaB@#1b>{FY&vEpjW$ugu4^2Nbgxef^q2qjc+8&=+bZ z=;O8rX~Y*AgOC+oNa6(3)Q)KuQ(rMLFz{eZkZw1`V>8OUGNzwE5#?InQ;mH++;0=y zCW9j>1hyUyM;FlH%Q4Y3&|YFD^s{Lq&2bwIN&}E^!nzz6*0}|_Jy>y3Mg$WB1E}eX zdVG|EC4LK#W;Cz|%i^0mWq3g6>ae2kyS!|T-)M;2!Sf~%CibieN>6VK9{ZIrGBE65 zLSHT5Vu#xj#OxeoLLoJ;6mR+g6#^kHoNY?X3=AS%=x5w0IpDSlYZiohD!CX}?KE|N zz3*v828R8t3=F|2xp9LtS$3h8c(9@Xcd$-cEO2HsGXujO4)o&Sk1K8mK$0|K{V0f! zdw~n6DG)zb;T-6+qHP$_C+>yY9<)VNkl@5KYY9r|cRT(XgO*UXVyxzR=8eZD9IMH| zB^)H1AuTn-n}$H%-OQqp2|D)V2gZ3iKYejK0#6!(w{tMFASieE?ll)W&A`AQ2U;?L zl8&wi;Iw(~GBJd|WWTY<t28PMJ=&g2!EZnB!NxL}8BwXi1f%1>vhU_qPMh1q>jOeQ- zlJao70pvqSfOCqvVr^`MAx+<2QJ|#O_JRU=&;trlUXs zUa-OEC20LEXh|OGkpg^0xE%#bDWHgico>{iK|**F52$);bhArrV`gAb)bW*1P#>qgT zt+*WlO8-b%0^U#niR1M*C_-6tW3@fZ1Em2(+JGkwOe;WTWX|&Y{b7s@44@Jj^+*7@$+)e+lLs&+E?_NlNCkoE z3Q#6km+4ohE5^X!qJzHb^4ApHt^fsN5n}xvrqQ4zvO(GC#hS&4Z4}@r1joWBY z@&+4^X(-6O(?8{IZD52fu0=i4b?-mihJp=5xK{;@4@!5S^L?>f$y&+x6?6voY)15j zAR8E%agN0zjV3@#NF))g1qH5^W@0F92mvOncIFqOtSkei;pMfH=6;8sLYmO^bIlsRTJ1PG%Q-H&<{Pb6!mn;c^nj2 zh-n!p6z9%98ma}ljf4e#(furLVl6|M3`9T5m>>< zz`)LoerQE7ZbLw)wFQ?XCTBa9X6B@%7J*x-p!GcnhawLkDaNQim0)6E_>FPmW4r)P zhoW8O0m{s{PJ9gi6aA``n}I=52Hg+Wg>af5oRL@r-GHP5I#4UG1nL<~KY*g~>;2M6 zpskH;%;+814RSc`01a%w{DG~f2{M>Tc;zZ#83u-LR_I0b1_hi3!wiL;1&H0vf7E2B z$}=%AJYhkf_mi{5X*7D=V!fOUPlSW~#40d5bO-1j7iRR5W1Brri;*J)i4BT)Y&$7I z_UxJXR}++YL5(lelP0e@;)PVERIUuEx^FgrjCBH-1RV=M*4uyn}ts9fZ`Op*>XpYtGwo8V7R1!zPa#SI`L+M zkCaR;!aY#2Q>Z4Vf{B4)4#sio4&^wlK}wV=NNkX2aBh&5uYDK32y}KG6MC_sScTIf zP;vyF@Cm6qu?N(YJIIpBxeiIzr|k6Z%eu7cB&>K}t-x3fCFG*{!&k85o$^(Z>-k zwc#}1FCVl)0=z!Rttc@!71C|O^Z+QFW?0FsNM&YV$l^fXM{3)J$AXf~w9I6r{r1=m zmzdU{;>g6npvsCKI{$ld8V(C{q+K4kLg)JL2z@6e1_m8g^zobp6L6Z3rTBEpOb1Dn8$lMJvz6GG#?G-or>7ZAp;4~N0 z2Ly`e8>g5#IT#rjo?r}-%gw@R3zF;6OAE}{1{JG33aalo#TgiiOwb#OJ+pDz0>9o2 zGF^;mGANW(jBeis?dQ3~j6QDgeiKfUVVM|G2oVS&LFUvM+d(N6<1~2ntvGFfrPPq3 z#Ju9fWYGB>nC=HqYww}%D29d`dDPK)7L5L{zmiztxMhOgWd1sE9^ zE;6D|D8-+_X*4VqKqE>8Zk20ZNl_*C7<2t)=lq3-fnlmF1KLd6jk7o{a>-20$xnw_ zhiNd#2gS^5FTderU^p&}Zm{ZYoCd>P3=SMjgF)GQRnGxQB_;+2(0UKlYcaB(;xriM zREL+Y&<+fk*GY3;v28P8v=&O6yzQt)iX6@#goC+Eq$qi1-ODWGx&cO5xD0)}e z#X99PGcYuBpjSWspK)3Siv?&{VVVqz1)0_F`KK{4Fo5=updNoF@g1khnBGvq6aobv zo-7TrJo5jpzE&;If<|IcsuJuW z7i{&_M+0>71V;0CF*{CkVVyUWOPjHqe|g81TN{`d7+$cV_tUjGahsoy-g;H>%uC9z zz|s5zWfW7_6K@wdGBCtUK%aGX=D}$XTG|4|HFjTQKk!@kn1O+zi4px2Mn^xKrV~|N zV7Jf5n)z1*3j@PaPV^ChDgHR^!x}5NN2ix$A7bv{WMKFtj=o1fAOxo!NKGE-kXBGC z_FG;+rHjdA4GD2328Qh{=mYuIaX77jc>`O69F*OT7I@X#GBGghWkGlM@&w$5Vx}k@ zi3v2r^8I<63^OwW!!K6!ddNK)rxi#+gSD>?a=S~)qgc>kQd==*1Qw^^G#Il`!ck6P zrX^6$n3K%=O@)bp!35(x-?!;F?ZlEZRB+t;a%G|8OHM`xh9ZoPS78=T^P$IDLR$Wq z?goXG!|v+o^Q9OVL|o8^l`duDG#BP>>_)yn`s@@hs5WIp@1-1R!)au2X+dg{Uw#Rw z4W62Uc11UGFBIhH;(aeOW`mYh@u3&f#vM3qfH@jRI{;*Eo`U@k&}lOZSkP0XT0c&6 zQO1U`Gyp&b-`>`7?J5rg!)qz@#ZB8M5@j&=W*+5WU^p#?KAN&`4GC@_FgdWLzO{}Ybo(v``l!>(tvGE#D!F=0I4y^zM{rUhJW5+SFH+GI zdVUk?nd$RRb~br=?g@rBh~lKxT4DX;CUlV~LdwG?t~!sLg0x%fRsa I8t9sI02N31 + + + 4.0.0 + + + net.simonvt + android-menudrawer-parent + 2.0.3-SNAPSHOT + ../pom.xml + + + android-menudrawer-sample + Android MenuDrawer Sample + apk + + + + com.google.android + android + provided + + + net.simonvt + android-menudrawer + ${project.version} + apklib + + + com.google.android + support-v4 + ${android-support.version} + + + + + src + + + + com.jayway.maven.plugins.android.generation2 + android-maven-plugin + true + + + + diff --git a/Externals/android-menudrawer/samples/project.properties b/Externals/android-menudrawer/samples/project.properties new file mode 100644 index 0000000000..1561d7a9a1 --- /dev/null +++ b/Externals/android-menudrawer/samples/project.properties @@ -0,0 +1,15 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system edit +# "ant.properties", and override values to adapt the script to your +# project structure. +# +# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): +#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt + +# Project target. +target=android-17 +android.library.reference.1=../library diff --git a/Externals/android-menudrawer/samples/res/drawable-hdpi-v14/menu_arrow.png b/Externals/android-menudrawer/samples/res/drawable-hdpi-v14/menu_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..add3b361868afdf4ea5d15f8d3abe0d28d05e7d6 GIT binary patch literal 1568 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 Cl(3Qj literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-hdpi-v14/menu_arrow_right.png b/Externals/android-menudrawer/samples/res/drawable-hdpi-v14/menu_arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..4ae9df9b784aefdf8e37e415b6e68a33ffb0c3e6 GIT binary patch literal 1520 zcmeAS@N?(olHy`uVBq!ia0y~yV31&7U@+ofV_;x#bC6!az`(##?Bp53!NI{%!;#X# zz`(#*9OUlAur&ndolT}7zVg=_M`CttsQof(lS zSz|B3<8^84gwMBbMeV$scmCAbvr~7+tZN8b`6WIk=EukF=?p9zyXsQd+1Y#j{rzup zwK{$M^CxD;%$bp2e*9Q*DQoM^GcH~3Tgu(mU(ERT;>C*#$`_pW-(TOp|I?Z^I=Tl! zmM&cy`Nzjf;Yr;6t5?5TXK0=~apH%@PT9p<&*9aWS!9 z6I~_a!VcOc<}*YHhNXsvPPK{Q(cCP`^dLAm`19-M=jYcSyvDGa@3#Ae#g1y0D+~gw zTo^enUA}xdEId5CQFraEl7p2q&p!{2))8x!xR}fk;5hU0<;(V~uD&vIiSt~=5X6~V zvc|}8(QyU??kUTe6xCp5An?CipDN6?yyxhmA;E|lXc+vXx>t&*&T=g}w(^M2pDrgHl$ckiyv$;?a)b#+bef3Wr0zkhb_E9BlYZD>4x>{!UusZ*D9 zEvi3My==n^dl7MQ?pI%0GLy_a)6>(tKYjX?Wlk6fs2zrWf(}L2n!3#KQK_L zGG$qxusr#!uUb_QL)W!Ccjnx@ecRi1(W1?lTRZeP8Wb1;%uG!Uxs|^*%+#=2qcHJB z6XSv1DMdv=v2k(hx;xIHZ4>r~r{e8vjq-Ogqi@2cbOG-Wd0xqFwDot^#dgF9@?#TsTLhF>^x^tK`c z(;~)#8n3ptwmD|A&vGqazG8uM$fcDrdi&ij?>rpt|55VH*|U{pWo3E~?=*SrS7=sV zBOWoAp)%pip6gww5^8Jz7Ut%@74kdx@Ug&aMWYQ0&FgoRRek^deg22K2Gz&0rWf(rn$jjRY-tlN%%F?j9wjd$l0AG5Tg@vMN$1j#L)(P*! zR(~~g@;${+pd=|NSvYV0eB)oiR_(IQ`PwdjpA}e~_&xi+aFcOFOw5_Wb!v9WAZKmX28>4}Sf+)vlP< zwz*@)n-D%@>pstNqd;M%gg3t){*hmPSyEX`Z8`7V*In0Fz7O@kqZJhw7kB^m?ZpdB z`r^y9TuUDby{TS5Q>fA9H-q}+`QF~%^?OA`e;Wssa!>eu_ik+9|F8*hv9YWZ|J`4^ zcJ1L6)%S{j9KOwX?|em2;-6gw6?-I;POhl*ym<80t5^9u(ku>qmCS5hkXELp^nYGo zag&GRS^u|h-~MJeas0JR%-;%u$_b6qqN3$aT)p$=PktD;`K)qZXp_+&uBbeZ)AbK+ hgiieb#lNzialcyHeVfH1^$ZLQ44$rjF6*2UngEnBzf1rC literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-hdpi-v14/menu_arrow_top.png b/Externals/android-menudrawer/samples/res/drawable-hdpi-v14/menu_arrow_top.png new file mode 100644 index 0000000000000000000000000000000000000000..ab4ed80eea6459084c10ef25f77d174148b97ea8 GIT binary patch literal 1529 zcmeAS@N?(olHy`uVBq!ia0y~yU@&4}V36QoV_;y|!LjZk0|Ns~v6E*A2L}g74M$1` z0|NtNage(c!@6@aFF}&&j=qiz3>*8o|0J?9FfecyctjR6Fo+xmVMfscUnd3z2FViF zh?3y^w370~qEv?R@^Zb*yzJuS#DY}4{G#;P?`)(P7+51cT^vIq-1kO!dniYWT&?l- zF}i4$wQ7>5(-o6l0fA}iI|>3W9L-64=ype=X-9CuLw0*^M^`q%BU5+G_04A$Z(7Gz zx-==2r5xH|ZWz&m;2OXWxyy#$RVOLza zV#S1`NrtBLzA^-}JwN?0M{xgJ^B4OWIP8Dri*mW%cv&JO(dBn8q_3e)4?NKGw1)E}!T8$(VyrSX!<(Ur8{~c-SGf z#qfY5_b=_l)d{*U^wku0@ISc6`@BEVKjH3z`=YY;IcQFr~@V+{|o~v9a;5MT?Y9srFw# zd)BwAqT)wcdiryjxpIpn6IlU zEC|qg%JlJ#m)hjY?(Xh|Teq4rIiEe+Y`M_Gb#dVT>XOgS3hQ4S}O32gmrhKVMczyFB53_HA#d`G2k_E9EvM7=Af0Nv=YG zt_FpzRR)Xg z2df1d6ZFpb`ud)^a%D=~^2@c$+jB0mG#~u(;>C-%*RF}V9&3K4vT9--%iV@$-|bJC zpKss@$;!x>uR~70Nt29~~LVxp;1J zp4CB?y8$g4-(#AZ9J`Nx+OT`~Y?u3+4}G>)V4Aw(3PY=g{fmv#Zl^dULpEiaNR<^8 zZQ8SQ=S*#mqr1$^%^xQxCyRgo{@q3U60f`IDcc0rm(RpPy7z?KvSAW*SdbNZpzsv` z%qj(~Kogy^-E$k|yf#?xY<(#DC4uqfvs+J#1h3w)kx;xp=kRuh8t%ni%Pu|J==ZoG zlj}?5h9VEN>as zhQ`P1uV20Ta!!7}`oi#Y;dSLgD;_`kVA=Odv2n7#tG$Akk?Mt)jEj2oEhD~2XJu!5 zPoF;B-b$vgY0ftD_UVz+rf%K3HS^o|@60#;3M^B~bzxLul6Fj4q!BYY$SUoirRtXj zZC4Lw88}?Ld^woW)qxggKl<-2YQ@3v4&YWypU0oe=>Q2(-{SP0%;S2rD%(uWo zFs|)Ar(XPn1^=^O*nTGbl>U!-4=bjpZ@zhH zL6}g|wKM0>|8Erf6F%{}c&=5>ujA*=ozwd9`{j!lFQQgoJ;tD-IVb9;!!Pf`!jJPK tE~?yG_5ZC)dZWXGa)amkI+Opgm+Vk{@1v!+l7WGN!PC{xWt~$(69Dot!y^Cy literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-hdpi/ic_action_refresh_dark.png b/Externals/android-menudrawer/samples/res/drawable-hdpi/ic_action_refresh_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..bb9d855f77692343e173f814ca1e546393b707d8 GIT binary patch literal 3138 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 aF$e^SKRo#LmKp;C1B0ilpUXO@geCxpf9~}F literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-hdpi/ic_action_select_all_dark.png b/Externals/android-menudrawer/samples/res/drawable-hdpi/ic_action_select_all_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..c87c3f8370f1de51f35c46e1798638e415865406 GIT binary patch literal 2861 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 literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-hdpi/ic_launcher.png b/Externals/android-menudrawer/samples/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..96a442e5b8e9394ccf50bab9988cb2316026245d GIT binary patch literal 9397 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 YA7U*w(t^tv7#J8lUHx3vIVCg!0HI7c0ssI2 literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-hdpi/md__list_focused_holo.9.png b/Externals/android-menudrawer/samples/res/drawable-hdpi/md__list_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..555270842a739eb45d404ab473ad38a4c730240c GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0y~yVBiK}4mJh`hLvl|)fgBUSc;uILpV4%IBGajIv5xj zI14-?iy0WWJ3*My{N(Ai3=9m3o-U3d5>uy6xX9UHz~l1%h_1|G!(HvxJKJRs8_s$B zN7Ho9wM*;|6=M2SCa^d!oVSdH>A)yU%?AmsAUkO`*$Xm73U#|OHJ{2?T sqx4JV1vBrYobd5f_-S=);t^@3U@5MBrIvFT7#J8lUHx3vIVCg!04LBvx&QzG literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-hdpi/md__list_longpressed_holo.9.png b/Externals/android-menudrawer/samples/res/drawable-hdpi/md__list_longpressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea7afa00e2bfe057472ed5a196080fc80ad7383 GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0y~yVBiK}4mJh`hLvl|)fgBUSc;uILpV4%IBGajIv5xj zI14-?iy0WWJ3*My{N(Ai3=9l5o-U3d5>t~CW>mH@^8Rr@#9{E6hgo?_<3eWUC9@@r z1w&d`Ji`9WU!YawtLAC=_<(gYqg3;M&POxTB^dtP6`dKzRnf)3z`)??>gTe~DWM4f Dc={?% literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-hdpi/md__list_pressed_holo_dark.9.png b/Externals/android-menudrawer/samples/res/drawable-hdpi/md__list_pressed_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..5654cd69429fd0a3502a05b5f827bffab89cc7e0 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0y~yVBiK}4mJh`hLvl|)fgBUSc;uILpV4%IBGajIv5xj zI14-?iy0WWJ3*My{N(Ai3=9m8o-U3d5>t~6?){p=$ot3rP(i|;ubRxtQw)V;*{v*I z>&`vq;vs0H5c#pbY1IkSnJPznnBViTW$^q{Z|U7`m&(9k@KwUn(K0=Rfq{X+)78&q Iol`;+0KG>nw*UYD literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-hdpi/md__list_selector_disabled_holo_dark.9.png b/Externals/android-menudrawer/samples/res/drawable-hdpi/md__list_selector_disabled_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..f6fd30dcdc9c39c836e509486854f9da03486892 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0y~yU=U|uU~uGMV_;yg`fKmSz`(##?Bp53!NI{%!;#X# zz`(#+;1OBOz`)%J!i?r8Pp@TQV2Jm0aSVxQeS6)Iufc)C<>JA~vnz5Z=O-sW_KK1I zynIoEJ2&H{Gm9A&O0Q*?A6BTIlsmI0PDu|2>e{#Gzu=2IyiWW_x}Z1={Fje&Se5mQ dnc)iKxBG%6i8r}=85kHCJYD@<);T3K0RVh^IoSXJ literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-hdpi/menu_arrow.png b/Externals/android-menudrawer/samples/res/drawable-hdpi/menu_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..c28d98f3bb435334b7852718214161d780896fce GIT binary patch literal 1578 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 literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-hdpi/menu_arrow_top.png b/Externals/android-menudrawer/samples/res/drawable-hdpi/menu_arrow_top.png new file mode 100644 index 0000000000000000000000000000000000000000..41f6c6a8597f61331d20b2545f251d5e9e5f6a3a GIT binary patch literal 1483 zcmeAS@N?(olHy`uVBq!ia0y~yU@&4}V36QoV_;y|!LjZk0|Ns~v6E*A2L}g74M$1` z0|NtNage(c!@6@aFF}&&j=qiz3>*8o|0J?9FfecyctjR6Fo+xmVMfscUnd3z2FViF zh?3y^w370~qEv?R@^Zb*yzJuS#DY}4{G#;P?`)(P7+AGET^vIq+^>dvduw}2T-_rq z?7rU3chTe)3pT-$g(n)$ooeNFWVOQ+zISm+JN7cV?Iz_Hhind-ZDU^DpIowV^*(hG_Y}o7CTwze(%J zwBUk8D$!y$pHKNc`+>uUu2ZMHN;O1+UVp7Jb!Mu=6y1ES?;pQP)9dP(YKDItZ{4@Zop{go_u%Z=v)w29T-$fD%VU>(LXs`RUxozH zB$h0OQ@z>hPm*WOnX_fWi4!MIsHT*6mP<}_zM^dC6#j!TeuG9!@yD~fJ3Z! z@_(OyvF+Tsb4xWpZL7)K&@t$XhE1U*A$UktENp8yZz@+O`xYIXYtA4ox68? zfBpXb_x5eu_PnrJe&omtna8ufZ@>9VEm`UO-vw8*c52;ZYeEj^}oSZcd zD@B+-E>aQd-1G6{$MxLY+$x8wlqUT=;bCiM7nlBc_Ishq!~9|%hd3FUeQ((K79C~YV+*yV)gq9O3QzIdsQ-=r^RU%q^)8fWEfn~d zARd~Vn|p2N&YenA^8ZZGl-_@TzLbQ-hy1)eBctalj!%*LtNfGAsP;$PzDh@zNkPfU zi!VL?sBmbP)1QS#HFN3&mb4hgEL`L4>}+=8a05qb*YB%^KkDRCBxlW>`SH>1n1d?! z4V=!{&fjo^{Y_bQN_x6_<34fe^Z6YfL65?ig_7zt4&C2ipuWWOWTw%~oXwjzi@tsP z_E1~Ex=q`*iAl@I?BQZ-o+4VS?9scEebs{eKNF&UY+ZX+Sg@0&Y^@YSdY#92=A}n6 zZrsf?|LnZ-^wU$iJoy{!EiD)3=kfFNYnt|ZxScYOOW4i6O`z=Jom)0lCMok3yiDnx&`LxkrzZUSGO2Y4Pse(f{)&K9GM9bN1}ntdPgY zj=3?_iEiksSMS^G%QGYSfH*%3ljlQ|28Iv#c5%9W4}`}V!d$j!a_ z^hhI*tdOt`!+W(^-sV#@i*(5Zv?t*_;5s{LiC)l)4l_Th32e2d;0Y0{a3GF z|F6Z(HPe36_U+%@{r%6s?_fD^RDMR^;=GGRFVpiJ-f5x2N&(%B^;|cf*~fHDjOd(s yV_;yoa8)~#fq{Xg*vT`5gM)*kh9jke zfq{Xuz$3Dlfr0lr2s1iq%&uTyV2~_vjVKAuPb(=;EJ|f4FE7{2%*!rLPAo{(%P&fw z{mw>;fr06Vr;B5VN9WXOzW&02B5n7J-%nYzRO*uCE!VkWE~?uEFGs1c)Hfv_pSF~H zS`EvgSq?vbFm6ir_TZ5I*Vy8aaY2DwRWU(WA@{OJV#=E{GU7qXB^k$e+r6J$JpZI+ zdB@C$Uj-(5EWf-dLg!R~M#}p)Zz7(EI=G1RAOG8yXfq|qj9XDJEG&%aQ1*_+ix;nq z(Q98a<$SAvr|;!O8zXWeKMJuem~#4QyWRZvl7guW8r|L9?^^}(rI;8vVy{R0T&~e+ zd7-xGy0f!$V(j(%Ob)ROf}EkD?`JQQ3>8s5dd7C9kD8^0#f`YNJB1xwM0(x+G922L zTh92R*F{Nx`Lbn6L8tb=i%|_*YFK=ta1M*$*IzaJ!Z&Z;yfHvSCI8NO-Ja}BhIx!H z6c=4Na^%S66eG?2>$^)8N@DXFKg^i9o3VtShiA`=_wT>&F0E!Rh?Z)Y7os&)Mox}z zS8HRv$}Ugt_QSEp#>TT2-TAxG#q^C@ZeHHIiK|wXq)RpYh|kQE4XCdEU8~e(Sj@(| zynlgIMQFI{XiO&d<1_I7mn&amRln%_D2??7Pts5gOG@G4juU{P@9iKv6K4@kUf!+`ahdXk%N(f8ncMd+qjq zb>qg3z>N`Gq?uMtxElS>*IYBHkzV~ vz{BlOY&UM_)$E)e-c?47#KJUJR*x37@2+K5zTZ^Bx|Ec zbJ7$B!G(PCe9q^Mmu?JmJz6$t_VMce^7lKR->KG|=;6}pw9v8npum#MU#j2!KNV(q zn5;Iru&1~8ZBW_n*rI}h3#%_?l+^A2zcy}t{onP0Z{EDwGkeaQn#t#%Z~puDZ>pQx zWY5ZZ^#N=qo!E5FU$S7sHk7}vbJv8VB+xf0L$?=@85ST zu=1;Ao!G}`aOK{;c_pQ#p?O=Qs(=6bwTn%t|M+ab<;IhJ)a;d4`X?yV6ctSh(wf>n zd-iM_W*6P*r?1LLNUV6Qom_pyfTz5sMkgvVQjl38+i2#I?Wrl1l{@W>jVJ3&Kb`nw zd)pi54_l9JdXs21H*dlZkvCWD6B)WCT3512$VO~@lp&K=Y$0>rVX2qSK0C21GfzDK z9NKj7f%uV*L)Q)-V9PS-KJ=$C!iKRxYB%pA9)YN}VcJiMc8c|%v8ZR2-g+}j58oP_}yXV0B`w)kSkoD2NF8{^o9?6rrd7yNrG?=xqw$|s3l zx6GwMiG}|pf^KZ+TiiPT{Moa%GiS`0Ft^<8%l!HC|FX227L$pd) z{daw!&ssRyYG>y^bGC~s{S0!?=53FD`?ZRDqK8VM?B9IWM_pExjn>u@*Bo}*)VXhH zvwnGBw8KpMt(Bt#^O=@n(=`kR@rg72ewFh+%9+c<%d2Vd|2^{wTbA`nM+kwj%lwhbnQ}8nEP2xbP0l+XkKCwh|> literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-mdpi-v14/menu_arrow_right.png b/Externals/android-menudrawer/samples/res/drawable-mdpi-v14/menu_arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..21deedfcac7d3b13b0f4c25c7af3a59c83bff87a GIT binary patch literal 862 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU{K^>V_;yoa8)~#fq{Xg*vT`5gM)*kh9jke zfq{XsILO_JVcj{ImmtY>M_)$E)e-c?47#KJUJR*x37p(V?ey7c1@%nr}LbpC=$ug1oVm)-_H ziaJ)bByEj~-Tq%wC8T#VcWgvi`kepy^MBf(KcgYm>5?@4wCdaMzlD0;4o~w^o%VQ# zemrFEo-Rfn8lNHCapMb`DIDTwvFB@la@ChblALg ztEvQ(>}R9dXZJCmY2<%@DrJ*;gN;M9mWohYOP0~hdo0ZduM6y8yyJLX?bo}B96y&8 z86SB6eSgvJySD}2cr6W5w=vAx8l}1*G0vh#~Cb6mJ|g0?k%m8>vwr?5N((Q){>nFN%5BFsaJed~-7 zZ9hZ=MHn-#y#6Y9OGbY|)Y?rSEB;u!q;mKb)CaG=YX4!*!hXINU#ns)Wb%BMUpDTs zJtVYVvFYE>pFi`J)NV#fGa9~q@L<91mnB*f0{6NEvXF>@lO&iRIk5Y&D5UmA--~p)TQ#$Se?_0>TmO~ z$TK${h%O0JusQfgT&q{@Uo?BK+u`eP%WgA-K0F*g<)zcokBlb_|Hc33|HrW5>XJ*B Us`APh7#J8lUHx3vIVCg!0C4$#lmGw# literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-mdpi-v14/menu_arrow_top.png b/Externals/android-menudrawer/samples/res/drawable-mdpi-v14/menu_arrow_top.png new file mode 100644 index 0000000000000000000000000000000000000000..1f5d61a278e0b804d6b9ab93fa7d90f9e1bbfbcd GIT binary patch literal 878 zcmeAS@N?(olHy`uVBq!ia0y~yU{GXWU=ZM7V_;yIaY!tkfq{Xg*vT`5gM)*kh9jke zfq{XsILO_JVcj{ImmtY>M_)$E)e-c?47#KJUJR*x37emPT2L3f|R9tDmAckayD5wz0g zcu;$$LjY?UXXF0lv?oPB*KgjuSxsKxoB)T%%BxwNbNrQFFg@W~A{xYbSM}O_#m5tt zPk0)mcfDcV*`-&mXefXBDzU|B;e>tK0S zxBIT$G!K=XIcC+ytNhuV?yR?;v&YGR`^hQ~m8efYYd*hz{d!Wpy}nqtX<1oW-JN^) z>KgOp3ph{AU;OKdV+Z@I{N~NuwWgku;bAjXo7^ck<$j9M&+6pl$BQC#x`mY3w@__R)u@+|O~eKg7N=ifTjk|*+pB~!eXp1XGKTB_1Sk3$n2WEM?X zS+zH=rBCMZx4)M^vo~e`b!YtYwdU6n?vFEm6}LXTq^`1cO5A#N`vsmRcbP6-Tl@dZ zmoG^Q0vC8!+lLEWQlCA0_DrXRAEr)WOSNF3X%`%0zH(VTu-m|+I{0qK;~ zqiLIU+YTpgc*$<25YCWfZffdkIrm(;y1M$K8aw}qtJ{}lZo8RtPlBh7t#`8y+f54w zlYo66Dr~%O-@cs|x_xA1LtFLCMrmVcTcM?AzpNZ96J+D(AC7$=+ mY<^RJD#a*o_uaZe_T@>ljGi{F*v-Jez~JfX=d#Wzp$Py6^@s)l literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-mdpi/ic_action_refresh_dark.png b/Externals/android-menudrawer/samples/res/drawable-mdpi/ic_action_refresh_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..bd611e8e24d2e211a94d1658a49c823c4201716f GIT binary patch literal 3033 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 literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-mdpi/ic_launcher.png b/Externals/android-menudrawer/samples/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..359047dfa4ed206e41e2354f9c6b307e713efe32 GIT binary patch literal 5237 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 C29#?6 literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-mdpi/ic_menu_moreoverflow_normal_holo_light.png b/Externals/android-menudrawer/samples/res/drawable-mdpi/ic_menu_moreoverflow_normal_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..01d681697f799729aa60bcc03878b8718ef5f705 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}UY;(FArXh)Uf;;epuofI zn7;hXk$^K(<{o0YprFFF|8z)r#5AG1Yv*$^Fyt}Jv@H9+Y8C^-4Tchi6KoFb3=9eE jFBlk#8R{7urbosd+I%o|6aRY#1_lOCS3j3^P62j=4^Zu$?-I8%GOURH6P2Ixipt-2v+6H2+a6>FTr8kVSe^IjBZavQ(u<8 SbYx&)VDNPHb6Mw<&;$Up(KLtv literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-mdpi/md__list_focused_holo.9.png b/Externals/android-menudrawer/samples/res/drawable-mdpi/md__list_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..00f05d8c97e7963f23dc48a79ec0b09b88d52e20 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0y~yVBi2@4mJh`h9ms@x)~T4Sc;uILpV4%IBGajIv5xj zI14-?iy0WWJ3*My{N(Ai3=9muo-U3d5>tD79C;fY1elknGfSSZkgss!Fq+WV_wb)ql1{DGd2)`S!@o4yre V42YU?i-CcG!PC{xWt~$(697vjH7@`F literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-mdpi/md__list_longpressed_holo.9.png b/Externals/android-menudrawer/samples/res/drawable-mdpi/md__list_longpressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf8e03623c94b68d31963ffe7e59c72c3dcc059 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0y~yVBi2@4mJh`h9ms@x)~T4Sc;uILpV4%IBGajIv5xj zI14-?iy0WWJ3*My{N(Ai3=9mGo-U3d5>t~CW>mH@a{g&g;+Rp{)+l(&A&`~*rP?u{ y2-OJ;!d(+BLt~6?){p=$oZ!|i46oEul1LdSlBa@C*nY4 z{!0_J9HA2poHspUxHx7V@R-QS6OjM!cw6swyHo~-e~lvMp^1B@GcYhPc)I$ztaD0e F0sv%bET{kg literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-mdpi/md__list_selector_disabled_holo_dark.9.png b/Externals/android-menudrawer/samples/res/drawable-mdpi/md__list_selector_disabled_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..92da2f0dd3711a2ceb843768cafd6b91a2807b43 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0y~yVBlw9V9@4ZV_;xd{`yiD0|Ns~v6E*A2L}g74M$1` z0|NtRfk$L90|R#_2s4_WJiV5Ifx*wy#WBRA^X(Nwz6Jvx=fK_S?cLuuE2wB)SrHrY zMzcBIjXPlCc_xMX-vetUE~(DV72GQ%BO~+YLD7-48>!h%+l4_qV>5-@r@6U)Fa_Ti W^tiFeV_;yoa8)~#fq{Xg*vT`5gM)*kh9jke zfq{Xuz$3Dlfr0lr2s1iq%&uTyV2~_vjVKAuPb(=;EJ|f4FE7{2%*!rLPAo{(%P&fw z{mw>;fr06fr;B5VN9WdQzW&02B5n7J-*0jCR$byOeJo0|FC$0Tg~h!|T5MC%`AMQ} zADBHN91;%3XQUi$Tk?ZFVxy9S^C9=%T>(NuIUY+?eS=p_Id`T|ae~rP*`z(ME9cMo z{A6Bn`wU4xe!u*V?ccg{XXd0}2EoAS=-JC7bj&<8rCS7!pFVv$?xD$= z*SmHHX#7|@#lJz+1h5olh!c5SVN)i=+x;??}}V2y?gdd-R*6QU9LPY+dcpM*|V{n;jAHE z%oi9BC@d1+ym@o~?p?c{+`k{b+M(s}LpKJ&w0Eo*tZi)mD+uTgF?!)!ZKiY?v^pvBH!MhvoXhab#P@a2@yEL6t@_a`6yG{32rQ7k%y1-kY3S;P zTeok&7rN-2_Rdi@^E$)Dj1Wz+?z1jmL>#s!N?csIQgi-f1BQ;tlZ72!${ALixnpE( zy!hIrGTsMYt8&x+u_}1G%shGWWX{f*GM))DecG5C8)EgQ&+L%8^zzHz8oTv;JUkXf z3XBTVPe;bB->$OMgwbS4&`LMo%TY-iBkmT8|9P%8%Wl3t{{!g;72|wgAD^20_wH?b z#l+Asv$DMWdrwDSi$MI0%C~Rc;;>+-g@A`M%c zo13q^c#*Me+7<1~C(e|a&DO25nYSf#Ry4z;lPRA*fB8~!Q1HQ@8^3@5KF;v1BZK+C zu|I$QTz63lEMnQQ_R9aw!unb(mA+oSapT6k%voiz2P~h=x^ngE)wvZm`=YkDo(f~o zIGC_uX2&9@4mqWuu&}Tm50y{nExUp#GoL6PLM_)$E)e-c?47#KJUJR*x37*4Jcm8{h&<)y4D zHPua{qOxLVS#Ffn>VOqd`J0M&JfFAu`mOBs#R(E^iI-n)ah|l~$5C6m7WW-3=YQ1L zJ^k?EL&N>|@~6`_U;O>R(E=>K`f8SFgzc&jt#wx{Srj3-0jL6T!hnN&wZh?NMV6r^Qdb=|u{%3EZ&%y2 zckkUfvu54$SDP#!a3xw}f`z^Pc?q7j%OP5-AD=Yt+__WjSMc%Avg=jnJ$K#Ge)GnS zfQYqW2Oodb$Xn&1BDC`SnKLz7Q@uE^Z0~$^U*Y;Z1&-w(+?qc`x@g;LHaI>ku;5Wh zZr4hlQPo&sXKVX6Co%CL$Nn#8S*IFxcXvPi`t@u7fr|bLUe>Y)2W_UTQ<&(&5_Kb2 zXnIG1+GNk=7cdGluVj}8_Ox_vS5sFHzVh5pC1c*c z%T`hTzccKgF07f$Q4;!Sl2Yx@C-J}Tcm9!|_hQF`<%zq09@)EPOUkVI^Ys_}KUw#y zURkLAW2gN6nh7^}=BfYq%a^<;{C~ddqS~q$z3E)x>lh9k?^r&=T#-v*vfCT!-eW;( zlQZZ3&wIAl>i%Zg>t=s;`MbHhmoCz$Z@c8rRmdKI;Vst0E?)YkN^Mx literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-mdpi/menu_arrow_right.png b/Externals/android-menudrawer/samples/res/drawable-mdpi/menu_arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..3222d034e9d310f481d1dcded81587abfaa5ec5b GIT binary patch literal 855 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU{K^>V_;yoa8)~#fq{Xg*vT`5gM)*kh9jke zfq{XsILO_JVcj{ImmtY>M_)$E)e-c?47#KJUJR*x37FL*6;J@eV;kAT!f2-Y2nSBxYuR7m6is1F29^P zD{+SAt;*OCyZQGs%w}(IKm71-*4C=<<(EBMc2u}77EU#hx}Rw>i(SOkR=Crpzk2UH zq1-)+PA5{mmR{;Rn&kQLd5YECx}(O|v$pyf9%!ja4|bl|U$ysN@BR1nyicP8Hu=ul z67|+9@Wj+p_N+@Trx?xL6|*kMXr>L*3)_2>O?;Q>+R zTQKbz-@NS8%gR@J`YjKBRknM+LWVR~gzwys4|Y9%{4s(dzv$Xgd}%|&k)(|ZGJLBAD)`rHt=Mt({ddiK3`T1YCTwUvAiU`n<1gjur^NGmzL4Al-I7`>@x6)=YO7GqX#LAzEt}KA3YpeEHG_%gf&wHAA(g-mlP`BhJmB zcllZOoByjjmuUU2*(c=l`&inoJx!}c7F~Ry9@8GPOxO3Jo4PPxzdm34W8D*xK7m}H z?KfX~<{lH!a5*x2Yt-)ujn@sl8$8dQdiv>1QeyLjQ~v;muFSWz`(%Z M>FVdQ&MBb@0G}y+vH$=8 literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-mdpi/menu_arrow_top.png b/Externals/android-menudrawer/samples/res/drawable-mdpi/menu_arrow_top.png new file mode 100644 index 0000000000000000000000000000000000000000..cde43fd2b15284a1fb3657bc0a63a4eeeb683c5d GIT binary patch literal 835 zcmeAS@N?(olHy`uVBq!ia0y~yU{GXWU=ZM7V_;yIaY!tkfq{Xg*vT`5gM)*kh9jke zfq{XsILO_JVcj{ImmtY>M_)$E)e-c?47#KJUJR*x377&x;Tb-cyA58ofYLM()(OS z|LY{R44$~8HM0~VlGe=d+SqEhrS_V7e68Rgri1(!{006neB8O-E?Q;jR$Z=1U8WjN zy=o$>zvf-%i<%_#HDXp{;{2I6H($4^emhgpXZhvc(%B5W)huSSdtaAW_4ugG7U60Y zd?t|hx1p)@`x%Y`waK2h-j;1QtZR_iza;2o=+2mTO(!y9m9i%)Fo|`$Udh`o|EO60 zE?0nPmGA-AFU74+9~Xyc@m^CrG@FG%a&MfzTY;(re`4$gzZ zRQ#8h?XcSEO~*b~ym8xNKBHcegC%BVNS64~larPjp1o}KbE5s*!!x2?Qx?jYe|2Br zE_2+ru~to}vv2Xm7mfGdi~s*yt#G;DMJb-W`Jnomz0$pI@`?M`u9|G^d1v8&&ZeDP zqt@C^^mt<_!&eqqSG@C%g#=I7>#x7kf20V$E(x7`N6FAzn%Q=#P-jZH(aakhGJjci z+4miPY@M}r*1L|SYcFQ_I4`{5YBu}q;fWq8l5Lt_s`kD=n>M-cw!C%R5Q{wSk5*>myDoVbXF8qNvx z-4-X-*xgUFn=c-^I<#$`oXkT#zl;8>uii>OnzWJQ%r=Jv{_a}^7Bw>6N8c3f{Ig$R z#^j^74^`~Fr~4o_&1k04hIJS89hdBG^x-JAntSPK(anzxd-v9{z27Ow_fSypp>Uw% q#t4%KNhj|ae_Q*Z#eGN1f9U`rGrnLgjzR_o1_n=8KbLh*2~7a(qHb3J literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-xhdpi-v14/menu_arrow.png b/Externals/android-menudrawer/samples/res/drawable-xhdpi-v14/menu_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..6bdcc62e1a554be900ba3fbc2784e88db70a160d GIT binary patch literal 1735 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 Oz~JfX=d#Wzp$Py{jrd&v literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-xhdpi-v14/menu_arrow_right.png b/Externals/android-menudrawer/samples/res/drawable-xhdpi-v14/menu_arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..85591b81d5911d09543213e38f17ecfc58b0b726 GIT binary patch literal 1669 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU~uAKV_;w~bGx#Xfq{Xg*vT`5gM)*kh9jke zfq{XsILO_JVcj{ImmtY>M_)$E)e-c?47#KJUJR*x37^K&OFk_t5L>UGK2FViF zh?3y^w370~qEv?R@^Zb*yzJuS#DY}4{G#;P?`)(P7+9Zrx;TbpIG>I3_DBwwIOi-p z`AkpeNfkA_00C`{SPs2gt+SoNyR1tu=Pul$Ew7-}u|Vm^0&erX+r7I4j>Kk~=k2=W z8n{78!_G+Un8b0li+1*7VNd3 zTy^$$`|`Jp_FrXR${xJovv%#;XR~KZ7i&#b5^O%3c6!I%cW1tR`(~T>-rKe5L0VJ$ z;l%E%Sz8+%Bsr%{pT2zZ$t6LNku$AqY<#A7wY+@tiq?%)Ww3M`T{oB{CSGTjyVffCpgzb9c@88w(o((hR>Mh!xGT9(5CWfQ+_~VcJ zckSAxmY1KuSK*_SZtHQu2^@#G#1%xIW-kozaGd{8XQHCd!is+~e8;DsK7HDraRZn9 zx?_v2wp2B+zYyE;gm+C~V05(h7X@#Y|Gxr?i$9w?J3G()v4j2W|CSbc6&n#vj!+X5 z6A$61>dG(QzyH5&^XAQr5ArW&Wv~h@3|+umZZ)@#)jJ}k^OG=>#KOv=qED+|y~+~$ zFp1>=D`&^W_WJUqE~}JIqt*Hwe?*9ji|=o^znbCA;S<@JoI4gwGjYd8Ph z%#Vv^L`6ltdHnb>OW9$jS#qx&)EvH_5PDj_YUl3Vw;R7U=3Q{{48PLcViNdlj$dse`;qG{76RlYo%^aX+s5IG0 z?5R^&sypwm4Az${CV@(^$v@Kg9V?Oh%TrADapS%4iyYxk3 z=ZRGgZBwT=N0us06bKFTOeV4nitQg(JWOW%UM%pWv=2}d=qW9a1H5FoU8 z`Ol-rrkij(l+2ttQ?jY}3yX?{yZjQ<1?}H=?6bDEu9n$r!W~fJ5vI(rlg)!e-tO^< z#Jt3+H_k^B{<#=PTsa_L9$pgdAS`>Tv`df0fzfY&^4;b4lV=nas%(thUREMpp=EXT z&Y>>~PP{RRH<#X@x_9s1HNU-faoC8$+oK#?7j` z^?Aub0nCNc7?RNUvt zmt9H?r&KKs3_h42THR65lXLS>ww-qDK^6fUBVl3T`bR3QCt1(d^KoDJvixVu^_T|B z^n<5Poyw1njy_%y_@pGO#X2=;rhkR*lmm}v3jY7_;K2ianTS7q-g$1Hj(_Poc~sL$ z`|)qn4wWlgw3Hv8dGWt6gLQxVv}x1odX6Rq{+PM5X2RlQ#k&;FFg07w<++%8xuK|} z&YHrdWjA5AI~~os_3&ddxF=VDVIfGeSZF4y0GN8v%C9oeTFS7L)VDz6541b3=9kmp00i_>zopr0P`{SegFUf literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-xhdpi-v14/menu_arrow_top.png b/Externals/android-menudrawer/samples/res/drawable-xhdpi-v14/menu_arrow_top.png new file mode 100644 index 0000000000000000000000000000000000000000..b81c74749dd04192b11d99990800287fa089c693 GIT binary patch literal 1654 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 Kb6Mw<&;$TAn;@+K literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-xhdpi/ic_action_select_all_dark.png b/Externals/android-menudrawer/samples/res/drawable-xhdpi/ic_action_select_all_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..f193a8bb3189d555e19da136c81a892e879c67fd GIT binary patch literal 2856 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 literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-xhdpi/md__list_focused_holo.9.png b/Externals/android-menudrawer/samples/res/drawable-xhdpi/md__list_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..b545f8e57871c0a11cfeddb22bbd9d7f5014959b GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq15EX7WqAsieW95oy%9SjT% zoCO|{#S9GGogmC;e)9BM1_p*)PZ!4!jfs0F-sWsD;BkFFHSeKB-$mOyp5I?c^gWch z-rv=K-D=*+w0EX1GeE8VNeS)9kfz`)??>gTe~DWM4f D`hiDf literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-xhdpi/md__list_longpressed_holo.9.png b/Externals/android-menudrawer/samples/res/drawable-xhdpi/md__list_longpressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..eda10e6123e1e1383c4617228ec0c96680d60dc7 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq15EX7WqAsieW95oy%9SjT% zoCO|{#S9GGogmC;e)9BM1_lNPPZ!4!jfu$#Gb-B{xqtMx1s*(O%+nLV7IxRdaaX6I zu&3070|zpWe6d-ZyJWwc+pgOl@x443T>9p%`1p8cx&%YrImy|zOvgZGF?hQAxvXAU4v`k0wQc51@BcG% b)7iI)2+hklcKQwj0|SGntDnm{r-UW|a&$z} literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-xhdpi/menu_arrow.png b/Externals/android-menudrawer/samples/res/drawable-xhdpi/menu_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..b15993723728c411ebcd61a16d4fbd718ee432d5 GIT binary patch literal 1723 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU~uAKV_;w~bGx#Xfq{Xg*vT`5gM)*kh9jke zfq{Xuz$3DlfkApb2s6e>O_X6^V2~_vjVKAuPb(=;EJ|f4FE7{2%*!rLPAo{(%P&fw z{mw>;fq~7!)5S3)qw(&njrqc!BFFZdZ?>L&gR`(8=Xl>_ZUGCH7fU*nu7=9|XAn|f z72G5e7~|^h$;Gm0R~wV7lE?KUPKzE&={YU3UJhCzZWnWe1R-^V9H-mYeY?D4>P&m(;qd#m=oQ=9B*KL7md1FS!q!?i?@ zZ(0+l)a9WmD!9>bnV(B^)a$qA`S<>aWN?)g*L`~v8L1&6qv&#F(;7y_BMsMXF)mm- zMZVYY&!3;4J&zaGar!jyTkPDoZ{3n9f|^ek7^)pS6x68 z)uOF_Ce8hf9md8pZk~HuWdDwh-{pW_$>Yb5rx`9gUV67q^XUWurL$*}8Qd6o7(P6E z_Uzm|%i?EE|NsB@Y>?kowRc_C)+l+wqcbaKbhvH&{6&&sueg3(h_SKp{r4XWBiQ~_ z`l|@}sR+Hi9>vcnVR~#1g8^fLj6+gN%97_VFE3ALV`rZmX5TK=Si7Km$2w`{MIy%O zof$nHo6gJ$@;WMKQ(>?x{)01j#x1!Q9U6zvEM{<G+QNa zrRdUsZP)yn?HwAubLaFkdN51OnmN-mZeNY%t!we-JU0+EO3EK(PZe4Ar<5rur@Kzqh}> z{zLJ>Mn1_GELIGWN?w{v*`7at-Y(S1Qu=7OG{FL zU~X$WcSq6FQ~NHzb@=~Q;f>I)hcSBB1MmGUd%z*Xv@2r!!A52Y4&hyWEGD`lFTSy4 z{#DF*@$JZG=O3yIvbXvxe^|O8+jO<+juRloAI#e2V1ZkPs+spHF?F!q>aNx6zql=iJCc|E*4!g8IrjC0% zi`5M+EhTT6?R!1TK!kByuJr9~(r4Z<-7q_rBXm)$VXd@z-jr$6r%NYtJ@8OjB;DKQ z?Gk+^hV{ceiOqZq-t5XNEi2m=qczpZ^7KT8fR!O93S~CsMjLEqP-qqCnklPPWM*#u z_UY5q*O!)h?@jb^W@_+JV`j)OkkJ6`~ zd-6=A)}=Y6tWeiFzsh;}XoOMH9Ph{#d(X_bBQPWR7EqZ!wZM3~~ za+iaH@`mhx&g+~OUQll7&{}F|s@Lhkt!O8eyz2Zs+uz^5yu7@>_UpB`|JPUE)mr5H mJ5G7cx7zNGZSn?xxZg*%#t2WSl44+BVDNPHb6Mw<&;$T11Nl?{ literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-xhdpi/menu_arrow_bottom.png b/Externals/android-menudrawer/samples/res/drawable-xhdpi/menu_arrow_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..77a088fdce593e8698eb371931b06957bf719e71 GIT binary patch literal 1592 zcmeAS@N?(olHy`uVBq!ia0y~yU~pn!U{K&-V_;xdma%Rp0|Ns~v6E*A2L}g74M$1` z0|NtNage(c!@6@aFF}&&j=qiz3>*8o|0J?9FfecyctjR6Fi5WlVa7PAi82ff43Z_T z5hcO-X(i=}MX3zs<>h*rdD+Fui3O>8`9ba4#HaK0Pq>#ZCq(!0_t zDXHpAyQiApuBiv7>K&P?UHI_O*&WgsmU1X5e`Xe8x%-lTMsJ7GI+6bk%{-6O#MZSq z9%U52G`HU`X`jsGbLG$Gq=!!STfTg&@6n8dk3;uXh3t;FL`wRaZ7t$LW0AqmoIPb+_B@w${4-&sUO9!3rZUbX&VafR&Y>N z6zY^v^)%}5?ftuX%a$+2R&)RTUb@l2=ZIU+5w9~^l04iupMRFTFxz|SC2gM z<|^Efd}iwT=Xb5GtrwmAOLN$`+kv0qSoD|7FOgqZ1p=RFg)?kOF_7p|(C1(OAY8foSbK#8A3y)+$B!RB zS5WyJ)3IRfmYLgxncu3ZB`Lclsiq}8*L7t1vVdj#$>bomb(5UrkN+@@;?Z>#V{UXP zOG~a|^^TrtA*-eJdXO8&sNl5Jq&{*>N-MecCUA1O}xc!;( z(Lqu%=vXe77U$#xi)soA0-8>rR9042Gq@czM}&*@?x#w z-31?Qx++CZ_uS1pKY#9APNiEbWEpf0eEa(KqG8^JkFS;*y&{?(lerR31Bg4rbeBXCp*rzU;kw0Z#%8os8>ywj{7iVW=yzq>D{N%|J z6Km^g-t%c5?k}IL65qhS?R&=c4=vIHlL~j=U8T+;#8Nl4L(6E#p-IOd8=l&9=iFY_ zxJND1D+=BPa~_N^KWFQ<_~O1@yI#$jHOt7hHTuoFchAJc#TWm$V=Qv$fb)0pIELAO zH_S{nd?)!~=b5&{iCxP%*r&Ff?^vPAEUha!?_!^L#KqeOmboiBRIsh9-SO?g9ZOr= zw^5OiFB`;7Tlrrx*6HuvyVsY$gE2(H>{qD2g5nOo!^c#_zKGR|NvpRVN>{m}x~Pq( zHa}ngp0f1E!?Fo?k4<2xSSana;)3_8(!I&3$vR2FhEc`9WYLFfDq?D9 zdoN$TI`u+xlz%|@+sPMJ#Cf?ITc`+ain_~iIIe5C6PssdSKgobase_ASw)WSs&X*6 z`tSqiy{z69&o6T+>MoS-z0|zRV!xY<_6xVgUmwiwtnj*f!HHka)kRd&_cHI=FApxd z)P&sFJ$J>jT??1Wne=ezmM)g8x)7kWg;z%ie@%t6q_Gb!-aF++-Jw}Bu?%@njU|#Dr?O7{en#r0?AKT9bAB(aS@^VL#d2v4R;dV8 z_Jn0${+vG0m@Qqk*=YXN)GU_lF3vMMkA7`WFgT%9boa_n!vop#|0aFAxk7%W*R3yq zlsPr`avl}pc5dSR-g`>xxujf<#-fx7R?mMN=br0Y*t9!nmRtKXmyp)3DDkO5E2kVx zG1|y<%&PrI&898qb}?$7{u9jk)uqZY*h9eVp8D^cBT6CH%|FM_)$E)e-c?47#KJUJR*x37^K&OFk_t5L>UGK2FViF zh?3y^w370~qEv?R@^Zb*yzJuS#DY}4{G#;P?`)(P7+C*#x;TbpI3JBV?VX%1bJkgS z@|i0~W-LjQkyjAA(rf*4(d?wyoq{grN7*AZV|NyZ$96ng6)jk^Mf%|X1=}91+aa)U zMZjyGBp;*BO3P%UXG?9L7p+e*+IaHp-=@a?_xF0L&VBzq_jmQ(i?2(pY{l%^e$M*N z-};(S{%3kiKFedHFW%$~+{~HgQXPm6W#X4 z<#!)VdbVzz-Xx<3afQ} zUgQUtmw(R}78cIk&>;IDuVK%jt>6FsyXP#VkhZiNq~c50j!7q<+-GKHwpSP8G~ZX< zIh8enMTKd@A!~uIhjx-&twuLK*Lb;be4fZKx2me@*YgJt9?0(~Ipx=vw4Y@He;7wn z|6!|@t5<7JI^C_HU|V!*`SRt@Zy!B+G{4|}&()@{Qmc8zG8iL_UAtbl_4V;3F8b5L z(COprTg$Fp^59bI*De+h7M6WSUe4Va^NzJ7QAqWaf6RgiCAt3P?QLy-f9w9s?%REA z*8!{JFYhNTw^mvi^6K!{ucc9|ycv{HteLi;VSh(8cm7Lq<=Iog|t${o0XG)5Z zr1gmiTe<#c>WftvC%t(6dh@z<>x6D_e%7w4;5CZd#a{S`d&i=MTepT@a$Y#?O3eTF z`h9(Uw-#`gH)^bGH=7`!c50H8h7F_Bro5aSow9-gfkWTx8uquk{yVxzPOngYThvgs1CS3Po$ynOJ=uB}^5-MziLm#}9zTw*R|G^|>{YVC1rRqvEk&I?j{)4lia z+joyA(2C*B!SF*ak%EkqUc7&AuBWeWY-ZraC7gPc#UrVv=8lb}rKgbBk}Eo=HYw@U zElCMHrg*Ac$z|m!CKcuGOL|^YR&jQSrG~P&bZyFFTI8}as%4Su%9Bh=E-Pm?NCj5y zy;o&fY!`Oji6cbIYeCe6eWF5>%v%LDRJ|CyOjR$NJ6i}zp0+fz(s{qs&3!Y+=}w`Y zKXr|sNd{Xy&?}U6GyfK+_q@nSH^6C%-aI+=@0(T}-EW?_eIt9TXh*Jq-vWmzeoOML zefxvGLq$()_`GT3Dz`xG(nwQ9h3-vxsj00qFS`XysA$aQ_VAG1VZ^pVvN0*wrZnD| z$=%(3=g*&&-$Xp;SaHhUdGt$p&BTXq7`vPKH})?q^3wQ|n3ks2^-rk~4vp-O)P}pkA;(a90bGgMg#T^CWZ{ECFvVGe&4w-{V*6$CW`)216-f%?s%=}|7 zGwU)xsOktgmHeDIaiYSXb8OFqUiZrUy>a44;V%updT9<8iw6&0E@gA;;7+;d${=_A zzDlF^B!&ekRV+(bIF>N1oAGaB^(CJL9wmwlUJt%l@5=mT+vu+MvTV0^Uzv%phKQ^K zGsE)xwF*wWE`nt*zw`V$HmO+Em!->9{db&@tlV~vm=BC%J9h8bQBiauaw~_npzPv= zohze4#a4urJUy_wi#f`5c}sR`crN4GMVDP1T3&Q{iYD~L#?>>3bivx*YzkK;(&yXG|nv|wJHBP&;WEH1E>$B(2p8Y$tWX@FHv*%xG zaP!2gzT7I45Gi=*`TqBB-^M;*UpmY0+wOkXRMnTEx{c}esh{8IuT>FTl)<5^tNT}^ z*Dd*jarRFJ?Wh`m@fN|JCA0imUU+3H6ql8K`}^&iS+|E>QDWG}9nW6x5;(Qe!ei;Y zRWGmn`m;HuCGlYY+qZA`GhI+B-{LAFPQvd+p2DznlNDxBX|>B)R*ycK+@C3=9kmp00i_>zopr E0Nls_Y5)KL literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable-xhdpi/menu_arrow_top.png b/Externals/android-menudrawer/samples/res/drawable-xhdpi/menu_arrow_top.png new file mode 100644 index 0000000000000000000000000000000000000000..2c2f7490089673f30609b955d561e52e18676584 GIT binary patch literal 1581 zcmeAS@N?(olHy`uVBq!ia0y~yU~pn!U{K&-V_;xdma%Rp0|Ns~v6E*A2L}g74M$1` z0|NtNage(c!@6@aFF}&&j=qiz3>*8o|0J?9FfecyctjR6Fi5WlVa7PAi82ff43Z_T z5hcO-X(i=}MX3zs<>h*rdD+Fui3O>8`9P)#3;B?Tydh?e6Mp2WJ+Xg06KBx!i1UR{}<~SZy>61;) zdD9TTDfPXjROazQkFZYFiH^qNv7X_N=H1_Wf8)F5->UZBOM7;$&-Z7&*qf`nZn2gv zJI4Iw^p(D?v%mhI#Sp>9&aT_)bTDdV2*;AMdE2kY=uIyvE_N2kGUV;hR1o2isb$*m ztjKcr;fDe_X0sUt%vfDSXGiEwcU^xyno+=$@zBY{A8!m~T$EcfOtRW5+EqODGKx1p z*tMXgsiSJ%(X6dv3`=FYk7}hIG!SuNX316&+W7cJ3%z5H3lBYbV^ESN!L;Ziznh!en)32;rk0%#nD;vdFgP6!_{#P*Z_alC zmUFg=<^9$64`YPBnjCs&d`{eH;e?9H%9U+hiu)E?cN`0lkdSatIbrue%yr^o`6FND zrf9IZDOeo&puo|_a_;WK7@6lu8k}?dIGZN09yjRj>3PAF`6YRS#P@Ya68Ke?|K>Fl@C8NYD;7OH7BDB%~q>tN!< z(SG=k>x%}>vPU%x&&1tqxfoe4wAbpVv%B5izIU&zO6%3DS4GlzZIxO-2?}sLW`5WE z@SaNFGMpfQK@;JkTq|L@(4OUTLb`S)|r zjvXuXbaj^sce=PW9=s5c?#5%R-1z*C^iyfw#tV+|Q&WzP#`SXCAj z1jI#0FV44lAY`kw?i`PD&Es~5Eic&beqdfL#*rocqmAYM4)eq2Ce0Ua^KW4?JZ)~$ zXmE;u%OQiq=KsW7BS*{5#?Tir8b+ZMMh#c=(-ptiIrkNKyp35n%9&f_&G$W=B$<0}(VoM+%r{P- zetz`m(GL$FF8m+f=&<4q_wOV7J_fwh{{5#cy_!+Htk;}l^xwRB^JU$dH6@GI-fO<~>GO@{D_3f|*VpfV{NqQ&krSVT8-M+6 zsj~bfRHQnG^J>sa6<%K6s~@=Hr#mWa)k~l3utvC-DMRLvFAt;T`i@6$-@g6Y^yBu) zlb)uFuM{2ctzxM0n=x-*+1xpEp2*3|Usd7T9K{mAxPfa+m&6S%J9&?rIos4OYl(IL zxsc?{%qSw;aG`P0y2;wc#>R&(UcC6>#fufESDbtOH|E>a+O+$c^Ug0<%UbM~wKOg3 zx$3`-RW@?(B&B3;SQ{$K%uqCwdim_xvlG95{Sw*dWINyCLUd!_`C_ZN+iu>xX*d7; zbQ@dSzwEP$W^m4De9YN;@{y3@)6YMpj9tv?Dij%>NiZJn-m5Rb@k5ZSo{yjZ|GMP+ zac=^{!^7*(pFR6`s^4G8@9YQCvixeXWo>9;=GCFgd4)rEn9fx*+&&t;ucLK6T#@X3|{ literal 0 HcmV?d00001 diff --git a/Externals/android-menudrawer/samples/res/drawable/md__list_selector_background_transition_holo_dark.xml b/Externals/android-menudrawer/samples/res/drawable/md__list_selector_background_transition_holo_dark.xml new file mode 100644 index 0000000000..1d43396d8a --- /dev/null +++ b/Externals/android-menudrawer/samples/res/drawable/md__list_selector_background_transition_holo_dark.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/Externals/android-menudrawer/samples/res/drawable/md__list_selector_holo_dark.xml b/Externals/android-menudrawer/samples/res/drawable/md__list_selector_holo_dark.xml new file mode 100644 index 0000000000..bd71aa8b6e --- /dev/null +++ b/Externals/android-menudrawer/samples/res/drawable/md__list_selector_holo_dark.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + diff --git a/Externals/android-menudrawer/samples/res/layout/activity_bottommenu.xml b/Externals/android-menudrawer/samples/res/layout/activity_bottommenu.xml new file mode 100644 index 0000000000..ee576195e2 --- /dev/null +++ b/Externals/android-menudrawer/samples/res/layout/activity_bottommenu.xml @@ -0,0 +1,21 @@ + + + + + + + + diff --git a/Externals/android-menudrawer/samples/res/layout/activity_contentsample.xml b/Externals/android-menudrawer/samples/res/layout/activity_contentsample.xml new file mode 100644 index 0000000000..54140e71e7 --- /dev/null +++ b/Externals/android-menudrawer/samples/res/layout/activity_contentsample.xml @@ -0,0 +1,24 @@ + + + + + + + + + + diff --git a/Externals/android-menudrawer/samples/res/layout/activity_layoutsample.xml b/Externals/android-menudrawer/samples/res/layout/activity_layoutsample.xml new file mode 100644 index 0000000000..83684116b4 --- /dev/null +++ b/Externals/android-menudrawer/samples/res/layout/activity_layoutsample.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Externals/android-menudrawer/samples/res/layout/activity_rightmenu.xml b/Externals/android-menudrawer/samples/res/layout/activity_rightmenu.xml new file mode 100644 index 0000000000..ad1a6b7601 --- /dev/null +++ b/Externals/android-menudrawer/samples/res/layout/activity_rightmenu.xml @@ -0,0 +1,19 @@ + + + + + + + + diff --git a/Externals/android-menudrawer/samples/res/layout/activity_staticsample.xml b/Externals/android-menudrawer/samples/res/layout/activity_staticsample.xml new file mode 100644 index 0000000000..e6cb5622c7 --- /dev/null +++ b/Externals/android-menudrawer/samples/res/layout/activity_staticsample.xml @@ -0,0 +1,19 @@ + + + + + + + + diff --git a/Externals/android-menudrawer/samples/res/layout/activity_topmenu.xml b/Externals/android-menudrawer/samples/res/layout/activity_topmenu.xml new file mode 100644 index 0000000000..d288cfa5aa --- /dev/null +++ b/Externals/android-menudrawer/samples/res/layout/activity_topmenu.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/Externals/android-menudrawer/samples/res/layout/activity_viewpagersample.xml b/Externals/android-menudrawer/samples/res/layout/activity_viewpagersample.xml new file mode 100644 index 0000000000..6efa747ebe --- /dev/null +++ b/Externals/android-menudrawer/samples/res/layout/activity_viewpagersample.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/Externals/android-menudrawer/samples/res/layout/activity_windowsample.xml b/Externals/android-menudrawer/samples/res/layout/activity_windowsample.xml new file mode 100644 index 0000000000..a23003f22b --- /dev/null +++ b/Externals/android-menudrawer/samples/res/layout/activity_windowsample.xml @@ -0,0 +1,19 @@ + + + + + + + + diff --git a/Externals/android-menudrawer/samples/res/layout/list_row_sample.xml b/Externals/android-menudrawer/samples/res/layout/list_row_sample.xml new file mode 100644 index 0000000000..edd6d1f67a --- /dev/null +++ b/Externals/android-menudrawer/samples/res/layout/list_row_sample.xml @@ -0,0 +1,26 @@ + + + + + + + diff --git a/Externals/android-menudrawer/samples/res/layout/main.xml b/Externals/android-menudrawer/samples/res/layout/main.xml new file mode 100644 index 0000000000..6dd71bd26a --- /dev/null +++ b/Externals/android-menudrawer/samples/res/layout/main.xml @@ -0,0 +1,33 @@ + + + +