From 4ba98f62cd6ae6c76928006610a3f9af68e854f6 Mon Sep 17 00:00:00 2001 From: ZXCLI Date: Thu, 10 Sep 2026 02:51:37 +0800 Subject: [PATCH] analysis: full official-app reverse artifacts (jadx sources, ghidra libcxsdk decomp, authoritative protocol conclusions) + docs --- .../export/ghidra_dump/libcxsdk_decomp.txt | 57353 ++++++++++++++++ .../magnity/magnitycx/AboutAboutActivity.java | 252 + .../magnitycx/AboutProductActivity.java | 42 + .../cn/com/magnity/magnitycx/BuildConfig.java | 11 + .../magnitycx/DialogFragmentMediaInfo.java | 101 + .../magnity/magnitycx/DialogFragmentMode.java | 76 + .../magnitycx/DialogFragmentPalette.java | 130 + .../magnitycx/DialogFragmentSetting.java | 79 + .../com/magnity/magnitycx/DialogOption.java | 149 + .../magnity/magnitycx/FragmentMainBottom.java | 409 + .../magnity/magnitycx/FragmentMainCenter.java | 345 + .../magnity/magnitycx/FragmentMainTop.java | 383 + .../com/magnity/magnitycx/FragmentMedia.java | 411 + .../magnity/magnitycx/FragmentSetting.java | 559 + .../magnity/magnitycx/FragmentSupport.java | 63 + .../magnitycx/FragmentSupportAbout.java | 124 + .../magnitycx/FragmentSupportHelp.java | 28 + .../cn/com/magnity/magnitycx/ImageViewer.java | 959 + .../magnity/magnitycx/ImageViewerVisible.java | 132 + .../com/magnity/magnitycx/MagApplication.java | 113 + .../com/magnity/magnitycx/MainActivity.java | 307 + .../com/magnity/magnitycx/MediaActivity.java | 102 + .../magnitycx/MediaGridViewAdapter.java | 181 + .../com/magnity/magnitycx/MediaImageView.java | 18 + .../magnitycx/MediaSingleActivity.java | 445 + .../magnitycx/QueryDialogFragment.java | 77 + .../cn/com/magnity/magnitycx/R.java | 2608 + .../cn/com/magnity/magnitycx/ROIInfo.java | 127 + .../magnity/magnitycx/SettingActivity.java | 52 + .../com/magnity/magnitycx/StoreActivity.java | 144 + .../magnity/magnitycx/SupportActivity.java | 56 + .../cn/com/magnity/magnitycx/log/Logging.java | 70 + .../magnity/magnitycx/sdk/AsyncLoadImage.java | 138 + .../com/magnity/magnitycx/sdk/BasePara1.java | 46 + .../com/magnity/magnitycx/sdk/BasePara2.java | 46 + .../magnitycx/sdk/BitmapUtilities.java | 72 + .../com/magnity/magnitycx/sdk/CaliInfo.java | 22 + .../cn/com/magnity/magnitycx/sdk/D2PCmd.java | 13 + .../sdk/DelegateDeviceConnected.java | 8 + .../magnity/magnitycx/sdk/DelegateMedia.java | 10 + .../sdk/DelegateMediaStatusChanged.java | 8 + .../magnitycx/sdk/DelegateOptionSelected.java | 6 + .../magnitycx/sdk/DeviceController.java | 93 + .../cn/com/magnity/magnitycx/sdk/ExtPara.java | 12 + .../com/magnity/magnitycx/sdk/GlobalFunc.java | 127 + .../com/magnity/magnitycx/sdk/ImgHeader.java | 9 + .../cn/com/magnity/magnitycx/sdk/ImgTail.java | 13 + .../magnitycx/sdk/LruCacheManager.java | 52 + .../magnity/magnitycx/sdk/MagParameter.java | 228 + .../cn/com/magnity/magnitycx/sdk/MsgBus.java | 77 + .../com/magnity/magnitycx/sdk/Observable.java | 35 + .../cn/com/magnity/magnitycx/sdk/P2DCmd.java | 20 + .../sdk/SharedPreferencesManager.java | 58 + .../cn/com/magnity/magnitycx/sdk/State.java | 25 + .../magnity/magnitycx/sdk/TimerHelper.java | 29 + .../magnitycx/sdk/UsbCommunication.java | 966 + .../magnity/magnitycx/sdk/UsbConnection.java | 246 + .../magnity/magnitycx/sdk/VisibleCamera.java | 103 + .../magnitycx/sdk/VisibleCameraHelper.java | 291 + .../magnity/magnitycx/sdk/WaitCondition.java | 7 + .../magnitycx/upgrade/CheckVersionTask.java | 315 + .../magnity/magnitycx/upgrade/HttpHelper.java | 224 + .../magnitycx/upgrade/UpgradeInfo.java | 50 + .../magnitycx/upgrade/UpgradeManager.java | 67 + .../magnity/magnitycx/util/ActivityUtils.java | 27 + analysis/magcx_official_flow.md | 103 + docs/android_app/HANDOFF_DEVELOPMENT.md | 20 +- docs/android_app/session_state.md | 26 + 68 files changed, 69493 insertions(+), 5 deletions(-) create mode 100644 analysis/ida/export/ghidra_dump/libcxsdk_decomp.txt create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/AboutAboutActivity.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/AboutProductActivity.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/BuildConfig.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/DialogFragmentMediaInfo.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/DialogFragmentMode.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/DialogFragmentPalette.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/DialogFragmentSetting.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/DialogOption.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentMainBottom.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentMainCenter.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentMainTop.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentMedia.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentSetting.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentSupport.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentSupportAbout.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentSupportHelp.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/ImageViewer.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/ImageViewerVisible.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/MagApplication.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/MainActivity.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/MediaActivity.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/MediaGridViewAdapter.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/MediaImageView.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/MediaSingleActivity.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/QueryDialogFragment.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/R.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/ROIInfo.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/SettingActivity.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/StoreActivity.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/SupportActivity.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/log/Logging.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/AsyncLoadImage.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/BasePara1.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/BasePara2.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/BitmapUtilities.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/CaliInfo.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/D2PCmd.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/DelegateDeviceConnected.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/DelegateMedia.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/DelegateMediaStatusChanged.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/DelegateOptionSelected.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/DeviceController.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/ExtPara.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/GlobalFunc.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/ImgHeader.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/ImgTail.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/LruCacheManager.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/MagParameter.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/MsgBus.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/Observable.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/P2DCmd.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/SharedPreferencesManager.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/State.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/TimerHelper.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/UsbCommunication.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/UsbConnection.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/VisibleCamera.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/VisibleCameraHelper.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/WaitCondition.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/upgrade/CheckVersionTask.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/upgrade/HttpHelper.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/upgrade/UpgradeInfo.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/upgrade/UpgradeManager.java create mode 100644 analysis/jadx_magcx/cn/com/magnity/magnitycx/util/ActivityUtils.java create mode 100644 analysis/magcx_official_flow.md diff --git a/analysis/ida/export/ghidra_dump/libcxsdk_decomp.txt b/analysis/ida/export/ghidra_dump/libcxsdk_decomp.txt new file mode 100644 index 0000000..37487aa --- /dev/null +++ b/analysis/ida/export/ghidra_dump/libcxsdk_decomp.txt @@ -0,0 +1,57353 @@ +### FUNC _FINI_0 @ 00026594 + +void _FINI_0(void) + +{ + __cxa_finalize(&DAT_0006b000); + return; +} + + + +### FUNC _INIT_0 @ 000265a4 + +void _INIT_0(void) + +{ + CFunctions::CFunctions((CFunctions *)theFunc); + __cxa_atexit(CFunctions::~CFunctions,theFunc,&DAT_0006b000); + return; +} + + + +### FUNC _INIT_1 @ 000265d4 + +void _INIT_1(void) + +{ + int iVar1; + + iVar1 = pthread_key_create(&DAT_00070a18,(__destr_function *)0x30b41); + if (iVar1 == 0) { + DAT_00070a1c = 0xc; + DAT_00070a20 = 0x155; + DAT_00070a24 = 0xffc; + pthread_mutex_init((pthread_mutex_t *)&DAT_00070a28,(pthread_mutexattr_t *)0x0); + DAT_00070a2c = 0; + DAT_00070a30 = 0; + __cxa_atexit(0x30611,&DAT_00070a14,&DAT_0006b000); + return; + } + /* WARNING: Subroutine does not return */ + FUN_00030e78("Can\'t allocate C++ runtime pthread_key_t"); +} + + + +### FUNC _INIT_2 @ 0002666c + +void _INIT_2(void) + +{ + std::ios_base::Init::Init((Init *)&DAT_00070d78); + __cxa_atexit(std::ios_base::Init::~Init,&DAT_00070d78,&DAT_0006b000); + return; +} + + + +### FUNC _INIT_3 @ 00026698 + +void _INIT_3(void) + +{ + pthread_mutex_init((pthread_mutex_t *)&DAT_00070de0,(pthread_mutexattr_t *)0x0); + __cxa_atexit(0x4cde5,&DAT_00070de0,&DAT_0006b000); + return; +} + + + +### FUNC CAccumulator @ 000266f0 + +/* CAccumulator::CAccumulator() */ + +CAccumulator * __thiscall CAccumulator::CAccumulator(CAccumulator *this) + +{ + *(undefined ***)this = &PTR__CAccumulator_00068c28; + __aeabi_memclr4(this + 4,0x1c); + return this; +} + + + +### FUNC ~CAccumulator @ 00026710 + +/* CAccumulator::~CAccumulator() */ + +CAccumulator * __thiscall CAccumulator::~CAccumulator(CAccumulator *this) + +{ + *(undefined ***)this = &PTR__CAccumulator_00068c28; + if (*(void **)(this + 4) != (void *)0x0) { + operator_delete__(*(void **)(this + 4)); + *(undefined4 *)(this + 4) = 0; + } + *(undefined4 *)(this + 8) = 0; + if (*(void **)(this + 0xc) != (void *)0x0) { + operator_delete__(*(void **)(this + 0xc)); + *(undefined4 *)(this + 0xc) = 0; + } + return this; +} + + + +### FUNC ~CAccumulator @ 00026748 + +/* CAccumulator::~CAccumulator() */ + +void __thiscall CAccumulator::~CAccumulator(CAccumulator *this) + +{ + void *pvVar1; + + pvVar1 = (void *)~CAccumulator(this); + operator_delete(pvVar1); + return; +} + + + +### FUNC Reset @ 00026756 + +/* CAccumulator::Reset(unsigned int, unsigned int, unsigned int) */ + +undefined4 __thiscall CAccumulator::Reset(CAccumulator *this,uint param_1,uint param_2,uint param_3) + +{ + void *pvVar1; + uint uVar2; + undefined4 uVar3; + undefined8 uVar4; + + uVar3 = 0; + *(undefined4 *)(this + 0x1c) = 0; + if (*(void **)(this + 4) != (void *)0x0) { + operator_delete__(*(void **)(this + 4)); + *(undefined4 *)(this + 4) = 0; + } + *(undefined4 *)(this + 8) = 0; + if (*(void **)(this + 0xc) != (void *)0x0) { + operator_delete__(*(void **)(this + 0xc)); + *(undefined4 *)(this + 0xc) = 0; + } + if (((param_1 != 0) && (param_2 < 0x41)) && ((param_2 - 1 & param_2) == 0)) { + *(undefined4 *)(this + 0x10) = 0; + *(uint *)(this + 0x14) = param_1; + *(uint *)(this + 0x18) = param_2; + uVar4 = __muldi3((param_3 + 3 >> 2) + (param_1 >> 1 & 0x3fffffff),0,4,0); + uVar2 = 0xffffffff; + if ((int)((ulonglong)uVar4 >> 0x20) == 0) { + uVar2 = (uint)uVar4; + } + pvVar1 = operator_new__(uVar2); + *(void **)(this + 4) = pvVar1; + *(uint *)(this + 8) = (int)pvVar1 + (param_3 & 0xfffffffe); + if (2 < param_2) { + uVar4 = __muldi3(param_1,0,4,(int)param_1 >> 0x1f); + uVar2 = 0xffffffff; + if ((int)((ulonglong)uVar4 >> 0x20) == 0) { + uVar2 = (uint)uVar4; + } + pvVar1 = operator_new__(uVar2); + *(void **)(this + 0xc) = pvVar1; + } + uVar3 = 1; + *(undefined4 *)(this + 0x1c) = 1; + } + return uVar3; +} + + + +### FUNC PushFrame @ 0002680e + +/* CAccumulator::PushFrame(unsigned short const*) */ + +bool __thiscall CAccumulator::PushFrame(CAccumulator *this,ushort *param_1) + +{ + ushort uVar1; + uint *puVar2; + undefined2 *puVar3; + ushort *puVar4; + int iVar5; + uint uVar6; + int iVar7; + + if (*(int *)(this + 0x1c) == 0) { + return false; + } + iVar7 = *(int *)(this + 0x10); + *(int *)(this + 0x10) = iVar7 + 1; + iVar5 = *(int *)(this + 0x18); + if (iVar5 == 2) { + if (iVar7 != 0) { + if (*(uint *)(this + 0x14) >> 2 != 0) { + iVar5 = -(*(uint *)(this + 0x14) >> 2); + puVar4 = *(ushort **)(this + 8); + do { + *puVar4 = (ushort)((uint)*param_1 + (uint)*puVar4 >> 1); + puVar4[1] = (ushort)((uint)param_1[1] + (uint)puVar4[1] >> 1); + puVar4[2] = (ushort)((uint)param_1[2] + (uint)puVar4[2] >> 1); + puVar4[3] = (ushort)((uint)param_1[3] + (uint)puVar4[3] >> 1); + param_1 = param_1 + 4; + puVar4 = puVar4 + 4; + iVar5 = iVar5 + 1; + } while (iVar5 != 0); + } + goto LAB_000268a0; + } + } + else if (iVar5 != 1) { + puVar2 = *(uint **)(this + 0xc); + if (iVar7 == 0) { + if (*(uint *)(this + 0x14) >> 2 != 0) { + iVar5 = -(*(uint *)(this + 0x14) >> 2); + do { + *puVar2 = (uint)*param_1; + puVar2[1] = (uint)param_1[1]; + puVar2[2] = (uint)param_1[2]; + puVar2[3] = (uint)param_1[3]; + puVar2 = puVar2 + 4; + param_1 = param_1 + 4; + iVar5 = iVar5 + 1; + } while (iVar5 != 0); + } + goto LAB_000268a0; + } + if (iVar7 + 1 != iVar5) { + if (*(uint *)(this + 0x14) >> 2 != 0) { + iVar5 = -(*(uint *)(this + 0x14) >> 2); + do { + *puVar2 = *puVar2 + (uint)*param_1; + puVar2[1] = puVar2[1] + (uint)param_1[1]; + puVar2[2] = puVar2[2] + (uint)param_1[2]; + puVar2[3] = puVar2[3] + (uint)param_1[3]; + puVar2 = puVar2 + 4; + param_1 = param_1 + 4; + iVar5 = iVar5 + 1; + } while (iVar5 != 0); + } + goto LAB_000268a0; + } + puVar3 = *(undefined2 **)(this + 8); + iVar5 = 2; + if (iVar7 < 0xf) { + if (iVar7 != 3) { + if (iVar7 == 7) { + iVar5 = 3; + } + else { +LAB_0002691e: + iVar5 = 0; + } + } + } + else if (iVar7 == 0xf) { + iVar5 = 4; + } + else if (iVar7 == 0x1f) { + iVar5 = 5; + } + else { + if (iVar7 != 0x3f) goto LAB_0002691e; + iVar5 = 6; + } + for (iVar7 = *(int *)(this + 0x14); iVar7 != 0; iVar7 = iVar7 + -1) { + uVar1 = *param_1; + uVar6 = *puVar2; + *puVar3 = (short)(uVar6 + uVar1 >> iVar5); + *puVar2 = uVar6 + uVar1; + puVar2 = puVar2 + 1; + puVar3 = puVar3 + 1; + param_1 = param_1 + 1; + } + goto LAB_000268a0; + } + __aeabi_memcpy(*(undefined4 *)(this + 8),param_1,*(int *)(this + 0x14) << 1); +LAB_000268a0: + iVar5 = *(int *)(this + 0x10); + if (iVar5 == *(int *)(this + 0x18)) { + *(undefined4 *)(this + 0x10) = 0; + } + return iVar5 == *(int *)(this + 0x18); +} + + + +### FUNC Restart @ 0002693e + +/* CAccumulator::Restart() */ + +void __thiscall CAccumulator::Restart(CAccumulator *this) + +{ + if (*(int *)(this + 0x1c) != 0) { + *(undefined4 *)(this + 0x10) = 0; + } + return; +} + + + +### FUNC GetTickCount @ 0002694c + +/* WARNING: Unknown calling convention -- yet parameter storage is locked */ +/* GetTickCount() */ + +void GetTickCount(void) + +{ + int iVar1; + timespec local_1c; + int local_14; + + local_14 = __stack_chk_guard; + clock_gettime(1,&local_1c); + iVar1 = __divsi3(local_1c.tv_nsec,1000000); + if (__stack_chk_guard == local_14) { + return; + } + /* WARNING: Subroutine does not return */ + __stack_chk_fail(iVar1 + local_1c.tv_sec * 1000); +} + + + +### FUNC Sleep @ 00026998 + +/* Sleep(int) */ + +void Sleep(int param_1) + +{ + usleep(param_1 * 1000); + return; +} + + + +### FUNC GetLocalTime @ 000269a8 + +/* GetLocalTime(_SYSTEMTIME*) */ + +void GetLocalTime(_SYSTEMTIME *param_1) + +{ + tm *ptVar1; + int iVar2; + time_t tStack_18; + int local_14; + + local_14 = __stack_chk_guard; + time(&tStack_18); + ptVar1 = localtime(&tStack_18); + *(short *)param_1 = (short)ptVar1->tm_year + 0x76c; + *(short *)(param_1 + 2) = (short)ptVar1->tm_mon + 1; + *(short *)(param_1 + 4) = (short)ptVar1->tm_wday; + *(short *)(param_1 + 6) = (short)ptVar1->tm_mday; + *(short *)(param_1 + 8) = (short)ptVar1->tm_hour; + *(short *)(param_1 + 10) = (short)ptVar1->tm_min; + iVar2 = ptVar1->tm_sec; + *(undefined2 *)(param_1 + 0xe) = 400; + *(short *)(param_1 + 0xc) = (short)iVar2; + if (__stack_chk_guard == local_14) { + return; + } + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); +} + + + +### FUNC CFunctions @ 00026a14 + +/* CFunctions::CFunctions() */ + +CFunctions * __thiscall CFunctions::CFunctions(CFunctions *this) + +{ + *(undefined ***)this = &PTR__CFunctions_00068c40; + MutexLock::MutexLock((MutexLock *)(this + 0xb0)); + CAccumulator::CAccumulator((CAccumulator *)(this + 0x3784)); + CAccumulator::CAccumulator((CAccumulator *)(this + 0x37a4)); + CSmoother::CSmoother((CSmoother *)(this + 0x37c4)); + __aeabi_memclr4(this + 4,0xac); + __aeabi_memclr4(this + 0xb4,0x18); + __aeabi_memclr4(this + 0x2d1c,0xa68); + __aeabi_memclr4(this + 0x37ec,0x1910); + *(undefined4 *)(this + 0x5100) = 0xffff3cb0; + *(undefined4 *)(this + 0x50fc) = 8; + *(undefined4 *)(this + 0x5104) = 3; + SetColorPalette(this,0); + gLogFile = fopen("/sdcard/magnity/Cx/log/sdklog.txt","a+"); + if (gLogFile != (FILE *)0x0) { + mag::Logging::Setfp((__sFILE *)gLogFile); + } + return this; +} + + + +### FUNC MutexLock @ 00026b38 + +/* MutexLock::MutexLock() */ + +MutexLock * __thiscall MutexLock::MutexLock(MutexLock *this) + +{ + int iVar1; + undefined4 *puVar2; + pthread_mutexattr_t pStack_18; + int local_14; + + local_14 = __stack_chk_guard; + iVar1 = pthread_mutexattr_init(&pStack_18); + if (iVar1 == 0) { + iVar1 = pthread_mutexattr_settype(&pStack_18,1); + if (iVar1 == 0) { + iVar1 = pthread_mutex_init((pthread_mutex_t *)this,&pStack_18); + if (iVar1 == 0) { + iVar1 = pthread_mutexattr_destroy(&pStack_18); + if (iVar1 == 0) { + if (__stack_chk_guard == local_14) { + return this; + } + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); + } + puVar2 = (undefined4 *)FUN_00030824(4); + *puVar2 = "pthread_mutexattr_destroy failed\n"; + } + else { + puVar2 = (undefined4 *)FUN_00030824(4); + *puVar2 = "pthread_mutex_init failed\n"; + } + } + else { + puVar2 = (undefined4 *)FUN_00030824(4); + *puVar2 = "pthread_mutexattr_settype failed\n"; + } + } + else { + puVar2 = (undefined4 *)FUN_00030824(4); + *puVar2 = "pthread_mutexattr_init failed\n"; + } + /* WARNING: Subroutine does not return */ + FUN_000309e0(puVar2,&Error::typeinfo,0); +} + + + +### FUNC SetColorPalette @ 00026c70 + +/* CFunctions::SetColorPalette(ColorPalette) */ + +void __thiscall CFunctions::SetColorPalette(CFunctions *this,undefined4 param_2) + +{ + CFunctions CVar1; + char cVar2; + undefined4 *puVar3; + uint uVar4; + int iVar5; + CFunctions CVar6; + CFunctions *pCVar7; + CFunctions *pCVar8; + pthread_mutex_t *__mutex; + int iVar9; + uint uVar10; + int iVar11; + int iVar12; + uint uVar13; + bool bVar14; + int local_40; + int local_3c; + + *(undefined4 *)(this + 0x5108) = param_2; + __mutex = (pthread_mutex_t *)(this + 0xb0); + pthread_mutex_lock(__mutex); + pCVar7 = this + 0x20cc; + iVar11 = 0xff; + local_3c = -0xe0; + pCVar8 = (CFunctions *)0xffffff20; + switch(param_2) { + case 0: + pCVar8 = this + 0x20cc; + iVar11 = 0; + pCVar7 = (CFunctions *)0x100; + do { + CVar1 = SUB41(iVar11,0); + pCVar8[1] = CVar1; + pCVar8[2] = CVar1; + *pCVar8 = CVar1; + pCVar8[3] = (CFunctions)0x0; + pCVar8 = pCVar8 + 4; + iVar11 = iVar11 + 1; + } while (iVar11 != 0x100); + switchD_00026cd2::caseD_b(); + default: + pthread_mutex_unlock(__mutex); + puVar3 = (undefined4 *)__errno(); + *puVar3 = 0xe4ae0001; + FUN_00027744(); + pCVar8 = pCVar7; + case 1: + pCVar7 = this + 0x20cc; + iVar11 = 0x100; + do { + pCVar7[3] = (CFunctions)0x0; + iVar11 = iVar11 + -1; + CVar1 = SUB41(iVar11,0); + pCVar7[1] = CVar1; + pCVar7[2] = CVar1; + *pCVar7 = CVar1; + pCVar7 = pCVar7 + 4; + } while (iVar11 != 0); + switchD_00026cd2::caseD_b(); + case 2: + pCVar8 = pCVar8 + 0x88; + iVar11 = 0; + do { + pCVar7 = this + 0x20cc + (int)pCVar8; + pCVar7[0x59] = (CFunctions)0x0; + pCVar7[0x5a] = (CFunctions)0x0; + CVar1 = (CFunctions)__udivsi3(iVar11,0x16); + pCVar7[0x58] = CVar1; + pCVar7[0x5b] = (CFunctions)0x0; + iVar11 = iVar11 + 0x75; + pCVar8 = pCVar8 + 4; + } while (pCVar8 != (CFunctions *)0x0); + pCVar8 = this + 0x2124; + iVar11 = 0x47; + iVar9 = 0; + iVar5 = 0; + do { + pCVar8[1] = (CFunctions)0x0; + pCVar8[3] = (CFunctions)0x0; + CVar1 = (CFunctions)__udivsi3(iVar5,0x47); + pCVar8[2] = CVar1; + local_40 = 0x47; + cVar2 = __udivsi3(iVar9,0x47); + *pCVar8 = (CFunctions)(cVar2 + 'u'); + pCVar8 = pCVar8 + 4; + iVar5 = iVar5 + 0xbc; + iVar9 = iVar9 + 0x25; + iVar11 = iVar11 + -1; + } while (iVar11 != 0); + iVar11 = -0x74; + iVar12 = 0; + iVar5 = 0; + iVar9 = 0; + do { + CVar1 = (CFunctions)__udivsi3(iVar5,0x94); + this[iVar11 + 0x22b5] = CVar1; + this[iVar11 + 0x22b7] = (CFunctions)0x0; + cVar2 = __udivsi3(iVar9); + this[iVar11 + 0x22b6] = (CFunctions)(cVar2 + -0x44); + cVar2 = __divsi3(iVar12,0x1d); + this[iVar11 + 0x22b4] = (CFunctions)(cVar2 + -0x66); + iVar5 = iVar5 + 0xff; + iVar9 = iVar9 + 0x27; + iVar12 = iVar12 + -0x3b; + iVar11 = iVar11 + 4; + } while (iVar11 != 0); + iVar11 = -0x48; + iVar12 = 0; + iVar5 = 0x1ce3; + iVar9 = 0; + do { + CVar1 = (CFunctions)__udivsi3(iVar5,0x94); + this[iVar11 + 0x22fd] = CVar1; + this[iVar11 + 0x22ff] = (CFunctions)0x0; + cVar2 = __udivsi3(iVar9,0x1e); + this[iVar11 + 0x22fe] = (CFunctions)(cVar2 + -0x1d); + cVar2 = __divsi3(iVar12,0x12); + this[iVar11 + 0x22fc] = (CFunctions)(cVar2 + '_'); + iVar5 = iVar5 + 0xff; + iVar9 = iVar9 + 0x1c; + iVar12 = iVar12 + -0x50; + iVar11 = iVar11 + 4; + } while (iVar11 != 0); + iVar11 = -0x30; + iVar5 = 0x1f8; + iVar9 = 0x2ed1; + do { + CVar1 = (CFunctions)__udivsi3(iVar9,0x94); + this[iVar11 + 0x232d] = CVar1; + this[iVar11 + 0x232c] = (CFunctions)0xf; + this[iVar11 + 0x232f] = (CFunctions)0x0; + cVar2 = __udivsi3(iVar5,0x1e); + this[iVar11 + 0x232e] = (CFunctions)(cVar2 + -0x1d); + iVar9 = iVar9 + 0xff; + iVar5 = iVar5 + 0x1c; + iVar11 = iVar11 + 4; + } while (iVar11 != 0); + pCVar8 = this + 0x232c; + iVar11 = 0x3ac5; + do { + pCVar8[2] = (CFunctions)0xff; + *pCVar8 = (CFunctions)0xf; + pCVar8[3] = (CFunctions)0x0; + CVar1 = (CFunctions)__udivsi3(iVar11,0x94); + pCVar8[1] = CVar1; + iVar11 = iVar11 + 0xff; + pCVar8 = pCVar8 + 4; + local_40 = local_40 + -1; + } while (local_40 != 0); + uVar4 = 0; + iVar5 = -0x48; + iVar11 = 0x817e; + do { + CVar1 = (CFunctions)__udivsi3(iVar11,0x94); + this[iVar5 + 0x2491] = CVar1; + this[iVar5 + 0x2492] = (CFunctions)0xff; + this[iVar5 + 0x2493] = (CFunctions)0x0; + this[iVar5 + 0x2490] = (CFunctions)((char)(uVar4 >> 5) + '\x0f'); + uVar4 = uVar4 + 0xf0; + iVar11 = iVar11 + 0xff; + iVar5 = iVar5 + 4; + } while (iVar5 != 0); + iVar11 = -0x3c; + uVar4 = 0xf0e0; + do { + this[iVar11 + 0x24cd] = (CFunctions)0xff; + this[iVar11 + 0x24ce] = (CFunctions)0xff; + this[iVar11 + 0x24cf] = (CFunctions)0x0; + this[iVar11 + 0x24cc] = (CFunctions)((char)(uVar4 >> 5) + '\x0f'); + uVar4 = uVar4 + 0xf0; + iVar11 = iVar11 + 4; + } while (iVar11 != 0); + switchD_00026cd2::caseD_b(); + return; + case 3: + pCVar8 = this + 0x20cc; + iVar11 = 0x40; + uVar4 = 0; + uVar10 = 0; + do { + pCVar8[2] = (CFunctions)0x0; + pCVar8[3] = (CFunctions)0x0; + pCVar8[1] = SUB41(uVar10 >> 7,0); + *pCVar8 = (CFunctions)((char)(uVar4 >> 6) + '2'); + uVar4 = uVar4 + 0xcd; + uVar10 = uVar10 + 0xff; + pCVar8 = pCVar8 + 4; + iVar11 = iVar11 + -1; + } while (iVar11 != 0); + pCVar8 = this + 0x21cc; + iVar11 = 0x40; + uVar4 = 0; + iVar5 = 0; + do { + pCVar8[3] = (CFunctions)0x0; + pCVar8[2] = SUB41(uVar4 >> 6,0); + pCVar8[1] = SUB41(uVar4 + 0x3fc0 >> 7,0); + *pCVar8 = (CFunctions)((char)(iVar5 + ((uint)(iVar5 >> 0x1f) >> 0x1a) >> 6) + -1); + pCVar8 = pCVar8 + 4; + uVar4 = uVar4 + 0xff; + iVar5 = iVar5 + -0xff; + iVar11 = iVar11 + -1; + } while (iVar11 != 0); + pCVar8 = this + 0x22cc; + iVar11 = 0x40; + iVar5 = 0; + uVar4 = 0; + do { + pCVar8[2] = (CFunctions)0xff; + pCVar8[3] = (CFunctions)0x0; + *pCVar8 = SUB41(uVar4 >> 7,0); + pCVar8[1] = (CFunctions)((char)(iVar5 + ((uint)(iVar5 >> 0x1f) >> 0x1a) >> 6) + -1); + iVar5 = iVar5 + -0xff; + uVar4 = uVar4 + 0xff; + pCVar8 = pCVar8 + 4; + iVar11 = iVar11 + -1; + } while (iVar11 != 0); + this = this + 0x23cc; + iVar11 = 0x40; + uVar4 = 0xbfc0; + do { + this[2] = (CFunctions)0xff; + this[3] = (CFunctions)0x0; + *this = SUB41(uVar4 >> 7,0); + this[1] = SUB41(uVar4 + 0x40 >> 6,0); + uVar4 = uVar4 + 0xff; + this = this + 4; + iVar11 = iVar11 + -1; + } while (iVar11 != 0); + switchD_00026cd2::caseD_b(); + return; + case 4: + pCVar8 = this + 0x20cc; + iVar11 = -0x32; + do { + pCVar8[2] = (CFunctions)0x32; + *pCVar8 = (CFunctions)0x0; + pCVar8[3] = (CFunctions)0x0; + pCVar8[1] = (CFunctions)((char)iVar11 + '2'); + pCVar8 = pCVar8 + 4; + iVar11 = iVar11 + 1; + } while (iVar11 != 0); + pCVar8 = this + 0x2194; + iVar5 = -0x96; + iVar11 = 0; + do { + *pCVar8 = (CFunctions)0x0; + pCVar8[3] = (CFunctions)0x0; + pCVar8[1] = (CFunctions)((char)iVar5 + -0x38); + cVar2 = __udivsi3(iVar11,0x96); + pCVar8[2] = (CFunctions)(cVar2 + '2'); + pCVar8 = pCVar8 + 4; + iVar11 = iVar11 + 0xcd; + iVar5 = iVar5 + 1; + } while (iVar5 != 0); + CVar1 = (CFunctions)0xc8; + do { + this[local_3c + 0x24cd] = CVar1; + this[local_3c + 0x24ce] = (CFunctions)0xff; + this[local_3c + 0x24cc] = (CFunctions)0x0; + this[local_3c + 0x24cf] = (CFunctions)0x0; + local_3c = local_3c + 4; + CVar1 = (CFunctions)((char)CVar1 + '\x01'); + } while (local_3c != 0); + switchD_00026cd2::caseD_b(); + return; + case 5: + pCVar8 = this + 0x20cc; + iVar11 = 0x40; + uVar4 = 0; + uVar10 = 0; + uVar13 = 0; + do { + pCVar8[3] = (CFunctions)0x0; + pCVar8[1] = SUB41(uVar10 >> 6,0); + pCVar8[2] = SUB41(uVar13 >> 6,0); + *pCVar8 = SUB41(uVar4 >> 6,0); + uVar4 = uVar4 + 0x24; + uVar10 = uVar10 + 0x16; + pCVar8 = pCVar8 + 4; + uVar13 = uVar13 + 0xcb; + iVar11 = iVar11 + -1; + } while (iVar11 != 0); + pCVar8 = this + 0x21cc; + iVar11 = 0x40; + uVar4 = 0; + uVar10 = 0; + iVar5 = 0; + do { + pCVar8[3] = (CFunctions)0x0; + pCVar8[1] = (CFunctions)((char)(uVar10 >> 6) + '\x16'); + pCVar8[2] = (CFunctions)((char)(uVar4 >> 6) + -0x35); + *pCVar8 = (CFunctions)((char)(iVar5 + ((uint)(iVar5 >> 0x1f) >> 0x1a) >> 6) + '$'); + pCVar8 = pCVar8 + 4; + uVar4 = uVar4 + 0x34; + uVar10 = uVar10 + 0x44; + iVar5 = iVar5 + -0x24; + iVar11 = iVar11 + -1; + } while (iVar11 != 0); + pCVar8 = this + 0x22cc; + uVar4 = 0; + iVar11 = 0x40; + do { + pCVar8[2] = (CFunctions)0xff; + *pCVar8 = (CFunctions)0x0; + pCVar8[3] = (CFunctions)0x0; + pCVar8[1] = (CFunctions)((char)(uVar4 >> 6) + 'Z'); + uVar4 = uVar4 + 0x7c; + pCVar8 = pCVar8 + 4; + iVar11 = iVar11 + -1; + } while (iVar11 != 0); + this = this + 0x23cc; + iVar11 = 0x40; + uVar4 = 0; + uVar10 = 0; + do { + this[2] = (CFunctions)0xff; + this[3] = (CFunctions)0x0; + *this = SUB41(uVar10 >> 6,0); + this[1] = (CFunctions)((char)(uVar4 >> 6) + -0x2a); + uVar4 = uVar4 + 0x29; + uVar10 = uVar10 + 0xff; + this = this + 4; + iVar11 = iVar11 + -1; + } while (iVar11 != 0); + switchD_00026cd2::caseD_b(); + return; + case 6: + pCVar8 = this + 0x20cc; + iVar5 = 0; + do { + pCVar8[1] = SUB41(iVar11,0); + *pCVar8 = SUB41(iVar11,0); + pCVar8[3] = (CFunctions)0x0; + cVar2 = __divsi3(iVar5,100); + pCVar8[2] = (CFunctions)(cVar2 + -1); + pCVar8 = pCVar8 + 4; + iVar5 = iVar5 + -0xff; + iVar11 = iVar11 + -1; + } while (iVar11 != 0x9b); + pCVar8 = this + 0x225c; + iVar5 = 0x9b; + iVar11 = 0; + do { + pCVar8[1] = SUB41(iVar5,0); + *pCVar8 = SUB41(iVar5,0); + pCVar8[3] = (CFunctions)0x0; + CVar1 = (CFunctions)__udivsi3(iVar11,0x69); + pCVar8[2] = CVar1; + pCVar8 = pCVar8 + 4; + iVar11 = iVar11 + 0xff; + iVar5 = iVar5 + -1; + } while (iVar5 != 0x32); + this = this + 0x2400; + iVar11 = 0x33; + do { + this[2] = (CFunctions)0xff; + this[3] = (CFunctions)0x0; + iVar11 = iVar11 + -1; + this[1] = SUB41(iVar11,0); + *this = SUB41(iVar11,0); + this = this + 4; + } while (iVar11 != 0); + switchD_00026cd2::caseD_b(); + return; + case 7: + pCVar8 = this + 0x20cc; + iVar11 = 0x80; + CVar1 = (CFunctions)0x0; + do { + pCVar8[1] = (CFunctions)0x0; + pCVar8[2] = CVar1; + *pCVar8 = (CFunctions)0x0; + pCVar8[3] = (CFunctions)0x0; + pCVar8 = pCVar8 + 4; + CVar1 = (CFunctions)((char)CVar1 + '\x02'); + iVar11 = iVar11 + -1; + } while (iVar11 != 0); + this = this + 0x22cc; + iVar5 = 0x80; + iVar11 = 0; + do { + this[2] = (CFunctions)0xff; + this[3] = (CFunctions)0x0; + CVar1 = (CFunctions)__udivsi3(iVar11,0x7f); + this[1] = CVar1; + *this = CVar1; + iVar11 = iVar11 + 0xff; + this = this + 4; + iVar5 = iVar5 + -1; + } while (iVar5 != 0); + switchD_00026cd2::caseD_b(); + return; + case 8: + iVar11 = -0x80; + do { + this[iVar11 + 0x214d] = (CFunctions)0x0; + this[iVar11 + 0x214e] = (CFunctions)0x0; + this[iVar11 + 0x214c] = (CFunctions)((char)iVar11 + -1); + this[iVar11 + 0x214f] = (CFunctions)0x0; + iVar11 = iVar11 + 4; + } while (iVar11 != 0); + pCVar8 = this + 0x214c; + uVar4 = 0; + iVar11 = 0x40; + do { + pCVar8[2] = (CFunctions)0x0; + *pCVar8 = (CFunctions)0xff; + pCVar8[3] = (CFunctions)0x0; + pCVar8[1] = SUB41(uVar4 >> 6,0); + uVar4 = uVar4 + 0xff; + pCVar8 = pCVar8 + 4; + iVar11 = iVar11 + -1; + } while (iVar11 != 0); + pCVar8 = this + 0x224c; + iVar5 = 0x40; + uVar4 = 0; + iVar11 = 0; + do { + pCVar8[1] = (CFunctions)0xff; + pCVar8[3] = (CFunctions)0x0; + pCVar8[2] = SUB41(uVar4 >> 6,0); + *pCVar8 = (CFunctions)((char)(iVar11 + ((uint)(iVar11 >> 0x1f) >> 0x1a) >> 6) + -1); + pCVar8 = pCVar8 + 4; + uVar4 = uVar4 + 0xff; + iVar11 = iVar11 + -0xff; + iVar5 = iVar5 + -1; + } while (iVar5 != 0); + pCVar8 = this + 0x234c; + iVar11 = 0x40; + iVar5 = 0; + do { + pCVar8[2] = (CFunctions)0xff; + *pCVar8 = (CFunctions)0x0; + pCVar8[3] = (CFunctions)0x0; + pCVar8[1] = (CFunctions)((char)(iVar5 + ((uint)(iVar5 >> 0x1f) >> 0x1a) >> 6) + -1); + iVar5 = iVar5 + -0xff; + pCVar8 = pCVar8 + 4; + iVar11 = iVar11 + -1; + } while (iVar11 != 0); + iVar5 = -0x80; + iVar11 = 0; + do { + this[iVar5 + 0x24cd] = (CFunctions)0x0; + this[iVar5 + 0x24cc] = (CFunctions)0x0; + this[iVar5 + 0x24cf] = (CFunctions)0x0; + this[iVar5 + 0x24ce] = + (CFunctions)((char)(iVar11 + ((uint)(iVar11 >> 0x1f) >> 0x1b) >> 5) + -1); + iVar11 = iVar11 + -0x80; + iVar5 = iVar5 + 4; + } while (iVar5 != 0); + switchD_00026cd2::caseD_b(); + return; + case 9: + pCVar8 = this + 0x20cc; + iVar5 = 0x99; + iVar11 = 0; + do { + pCVar8[3] = (CFunctions)0x0; + CVar1 = (CFunctions)__udivsi3(iVar11,200); + pCVar8[1] = CVar1; + pCVar8[2] = CVar1; + *pCVar8 = CVar1; + pCVar8 = pCVar8 + 4; + iVar11 = iVar11 + 0xff; + iVar5 = iVar5 + -1; + } while (iVar5 != 0); + iVar5 = -0xbc; + iVar11 = 0x9867; + do { + this[iVar5 + 0x23ed] = (CFunctions)0xc3; + CVar1 = (CFunctions)__udivsi3(iVar11,200); + this[iVar5 + 0x23ee] = CVar1; + this[iVar5 + 0x23ec] = (CFunctions)0xc3; + this[iVar5 + 0x23ef] = (CFunctions)0x0; + iVar11 = iVar11 + 0xff; + iVar5 = iVar5 + 4; + } while (iVar5 != 0); + iVar11 = 0; + do { + this[local_3c + 0x24ce] = (CFunctions)0xff; + this[local_3c + 0x24cf] = (CFunctions)0x0; + cVar2 = __divsi3(iVar11,0x37); + this[local_3c + 0x24cd] = (CFunctions)(cVar2 + -0x3d); + this[local_3c + 0x24cc] = (CFunctions)(cVar2 + -0x3d); + iVar11 = iVar11 + -0xc3; + local_3c = local_3c + 4; + } while (local_3c != 0); + switchD_00026cd2::caseD_b(); + return; + case 10: + pCVar8 = this + 0x20cc; + iVar11 = 0; + do { + pCVar8[1] = (CFunctions)0x0; + pCVar8[2] = SUB41(iVar11,0); + *pCVar8 = SUB41(iVar11,0); + pCVar8[3] = (CFunctions)0x0; + pCVar8 = pCVar8 + 4; + iVar11 = iVar11 + 7; + } while (iVar11 != 0xfc); + CVar1 = (CFunctions)0xfc; + iVar11 = -0x94; + uVar4 = 0; + do { + this[iVar11 + 0x21f1] = (CFunctions)0x0; + this[iVar11 + 0x21f2] = CVar1; + this[iVar11 + 0x21f3] = (CFunctions)0x0; + this[iVar11 + 0x21f0] = (CFunctions)(-4 - (char)(uVar4 >> 2)); + uVar4 = uVar4 + 7; + CVar1 = (CFunctions)((char)CVar1 + -7); + iVar11 = iVar11 + 4; + } while (iVar11 != 0); + pCVar8 = this + 0x21f0; + CVar1 = (CFunctions)0x0; + CVar6 = (CFunctions)0x0; + uVar4 = 0xf5; + do { + CVar1 = (CFunctions)((char)CVar1 + '\a'); + pCVar8[1] = CVar1; + pCVar8[2] = (CFunctions)0x0; + pCVar8[3] = (CFunctions)0x0; + *pCVar8 = (CFunctions)(-4 - (char)(uVar4 >> 2)); + pCVar8 = pCVar8 + 4; + bVar14 = uVar4 != 0; + uVar4 = uVar4 - 7; + } while (bVar14); + pCVar8 = this + 0x2280; + uVar4 = 0; + iVar11 = 0xfc; + do { + pCVar8[2] = (CFunctions)0x0; + *pCVar8 = SUB41(iVar11,0); + pCVar8[3] = (CFunctions)0x0; + pCVar8[1] = (CFunctions)(-4 - (char)(uVar4 >> 1)); + uVar4 = uVar4 + 7; + pCVar8 = pCVar8 + 4; + bVar14 = iVar11 != 0; + iVar11 = iVar11 + -7; + } while (bVar14); + pCVar8 = this + 0x2314; + CVar1 = (CFunctions)0x7; + uVar4 = 0xf5; + do { + pCVar8[2] = CVar1; + *pCVar8 = (CFunctions)0x0; + pCVar8[3] = (CFunctions)0x0; + pCVar8[1] = (CFunctions)(-4 - (char)(uVar4 >> 1)); + pCVar8 = pCVar8 + 4; + CVar1 = (CFunctions)((char)CVar1 + '\a'); + bVar14 = uVar4 != 0; + uVar4 = uVar4 - 7; + } while (bVar14); + uVar4 = 0; + iVar11 = -0x94; + CVar1 = (CFunctions)0xfc; + do { + this[iVar11 + 0x2439] = CVar1; + this[iVar11 + 0x2438] = (CFunctions)0x0; + this[iVar11 + 0x243b] = (CFunctions)0x0; + this[iVar11 + 0x243a] = (CFunctions)(-4 - (char)(uVar4 >> 2)); + uVar4 = uVar4 + 7; + CVar1 = (CFunctions)((char)CVar1 + -7); + iVar11 = iVar11 + 4; + } while (iVar11 != 0); + this = this + 0x2438; + uVar4 = 0xfc; + do { + this[1] = CVar6; + *this = CVar6; + this[3] = (CFunctions)0x0; + this[2] = (CFunctions)(-4 - (char)(uVar4 >> 2)); + this = this + 4; + CVar6 = (CFunctions)((char)CVar6 + '\a'); + bVar14 = uVar4 != 0; + uVar4 = uVar4 - 7; + } while (bVar14); + switchD_00026cd2::caseD_b(); + return; + case 0xc: + pCVar8 = this + 0x20cc; + iVar11 = 0; + do { + pCVar8[1] = (CFunctions)0x0; + pCVar8[2] = (CFunctions)0x0; + *pCVar8 = SUB41(iVar11,0); + pCVar8[3] = (CFunctions)0x0; + pCVar8 = pCVar8 + 4; + iVar11 = iVar11 + 7; + } while (iVar11 != 0xfc); + iVar11 = -0x94; + CVar1 = (CFunctions)0x0; + do { + this[iVar11 + 0x21f1] = CVar1; + this[iVar11 + 0x21f2] = (CFunctions)0x0; + this[iVar11 + 0x21f0] = (CFunctions)0xff; + this[iVar11 + 0x21f3] = (CFunctions)0x0; + CVar1 = (CFunctions)((char)CVar1 + '\a'); + iVar11 = iVar11 + 4; + } while (iVar11 != 0); + pCVar8 = this + 0x21f0; + iVar11 = 0; + do { + pCVar8[1] = (CFunctions)0xff; + pCVar8[2] = (CFunctions)0x0; + pCVar8[3] = (CFunctions)0x0; + *pCVar8 = (CFunctions)((char)iVar11 + -0xb); + pCVar8 = pCVar8 + 4; + iVar11 = iVar11 + -7; + } while (iVar11 != -0xfc); + iVar11 = -0x94; + CVar1 = (CFunctions)0x0; + do { + this[iVar11 + 0x2315] = (CFunctions)0xff; + this[iVar11 + 0x2316] = CVar1; + this[iVar11 + 0x2314] = (CFunctions)0x0; + this[iVar11 + 0x2317] = (CFunctions)0x0; + CVar1 = (CFunctions)((char)CVar1 + '\a'); + iVar11 = iVar11 + 4; + } while (iVar11 != 0); + pCVar8 = this + 0x2314; + iVar11 = 0; + do { + pCVar8[2] = (CFunctions)0xff; + *pCVar8 = (CFunctions)0x0; + pCVar8[3] = (CFunctions)0x0; + pCVar8[1] = (CFunctions)((char)iVar11 + -0xb); + pCVar8 = pCVar8 + 4; + iVar11 = iVar11 + -7; + } while (iVar11 != -0xfc); + CVar1 = (CFunctions)0x0; + iVar11 = -0x94; + do { + this[iVar11 + 0x2439] = (CFunctions)0x0; + this[iVar11 + 0x243a] = (CFunctions)0xff; + this[iVar11 + 0x2438] = CVar1; + this[iVar11 + 0x243b] = (CFunctions)0x0; + CVar1 = (CFunctions)((char)CVar1 + '\a'); + iVar11 = iVar11 + 4; + } while (iVar11 != 0); + CVar1 = (CFunctions)0x0; + iVar11 = -0x94; + do { + this[iVar11 + 0x24cd] = CVar1; + this[iVar11 + 0x24ce] = (CFunctions)0xff; + this[iVar11 + 0x24cc] = (CFunctions)0xff; + this[iVar11 + 0x24cf] = (CFunctions)0x0; + CVar1 = (CFunctions)((char)CVar1 + '\a'); + iVar11 = iVar11 + 4; + } while (iVar11 != 0); + switchD_00026cd2::caseD_b(); + return; + case 0xd: + iVar11 = 0x40; + iVar5 = 0; + do { + this[iVar5 + 0x20cc] = (CFunctions)0xff; + this[iVar5 + 0x20cd] = SUB41(iVar5,0); + this[iVar5 + 0x20ce] = (CFunctions)0x0; + this[iVar5 + 0x20cf] = (CFunctions)0x0; + iVar5 = iVar5 + 4; + iVar11 = iVar11 + -1; + } while (iVar11 != 0); + pCVar8 = this + 0x21cc; + CVar1 = (CFunctions)0xfc; + iVar11 = 0x40; + do { + pCVar8[1] = (CFunctions)0xff; + pCVar8[2] = (CFunctions)0x0; + *pCVar8 = CVar1; + pCVar8[3] = (CFunctions)0x0; + CVar1 = (CFunctions)((char)CVar1 + -4); + pCVar8 = pCVar8 + 4; + iVar11 = iVar11 + -1; + } while (iVar11 != 0); + CVar1 = (CFunctions)0x0; + pCVar8 = this + 0x22cc; + iVar11 = 0x40; + CVar6 = (CFunctions)0xfc; + do { + pCVar8[1] = (CFunctions)0xff; + pCVar8[2] = CVar1; + *pCVar8 = (CFunctions)0x0; + pCVar8[3] = (CFunctions)0x0; + pCVar8 = pCVar8 + 4; + CVar1 = (CFunctions)((char)CVar1 + '\x04'); + iVar11 = iVar11 + -1; + } while (iVar11 != 0); + pCVar8 = this + 0x23cc; + iVar11 = 0x40; + do { + pCVar8[1] = CVar6; + pCVar8[2] = (CFunctions)0xff; + *pCVar8 = (CFunctions)0x0; + pCVar8[3] = (CFunctions)0x0; + CVar6 = (CFunctions)((char)CVar6 + -4); + pCVar8 = pCVar8 + 4; + iVar11 = iVar11 + -1; + } while (iVar11 != 0); + case 0xb: + pCVar8 = this + 0x20cc; + iVar11 = 0x100; + do { + CVar1 = *pCVar8; + *pCVar8 = pCVar8[2]; + pCVar8[2] = CVar1; + pCVar8 = pCVar8 + 4; + iVar11 = iVar11 + -1; + } while (iVar11 != 0); + __aeabi_memcpy(this + 0x24f4,pCVar7,0x400); + __aeabi_memcpy(this + 0x291c,pCVar7,0x400); + pthread_mutex_unlock(__mutex); + return; + } +} + + + +### FUNC caseD_b @ 0002770e + +void switchD_00026cd2::caseD_b(void) + +{ + undefined1 uVar1; + undefined1 *puVar2; + undefined4 in_stack_0000000c; + pthread_mutex_t *in_stack_00000010; + undefined4 in_stack_00000014; + undefined4 in_stack_00000018; + int in_stack_0000001c; + int in_stack_00000040; + int in_stack_00000044; + + puVar2 = (undefined1 *)(in_stack_00000044 + 0x20cc); + do { + uVar1 = *puVar2; + *puVar2 = puVar2[2]; + puVar2[2] = uVar1; + puVar2 = puVar2 + 4; + in_stack_00000040 = in_stack_00000040 + -1; + } while (in_stack_00000040 != 0); + __aeabi_memcpy(in_stack_00000014,in_stack_0000000c,in_stack_0000001c << 10); + __aeabi_memcpy(in_stack_00000018,in_stack_0000000c,in_stack_0000001c << 10); + pthread_mutex_unlock(in_stack_00000010); + return; +} + + + +### FUNC FUN_00027744 @ 00027744 + +void FUN_00027744(void) + +{ + return; +} + + + +### FUNC FUN_0002776c @ 0002776c + +void FUN_0002776c(void) + +{ + FUN_000308d8(); + /* WARNING: Subroutine does not return */ + FUN_0003178c(); +} + + + +### FUNC ~CFunctions @ 00027778 + +/* CFunctions::~CFunctions() */ + +CFunctions * __thiscall CFunctions::~CFunctions(CFunctions *this) + +{ + *(undefined ***)this = &PTR__CFunctions_00068c40; + ReleaseMemory(this); + if (gLogFile != (FILE *)0x0) { + fclose(gLogFile); + } + CSmoother::~CSmoother((CSmoother *)(this + 0x37c4)); + CAccumulator::~CAccumulator((CAccumulator *)(this + 0x37a4)); + CAccumulator::~CAccumulator((CAccumulator *)(this + 0x3784)); + pthread_mutex_destroy((pthread_mutex_t *)(this + 0xb0)); + return this; +} + + + +### FUNC ReleaseMemory @ 00027810 + +/* CFunctions::ReleaseMemory() */ + +void __thiscall CFunctions::ReleaseMemory(CFunctions *this) + +{ + pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); + *(undefined4 *)(this + 0x3814) = 0; + *(undefined4 *)(this + 0xa4) = 0; + *(undefined4 *)(this + 0xa8) = 0; + *(undefined4 *)(this + 0xac) = 0; + *(undefined4 *)(this + 0x2d1c) = 0; + *(undefined4 *)(this + 0x3128) = 0; + if (*(void **)(this + 0xb4) != (void *)0x0) { + operator_delete__(*(void **)(this + 0xb4)); + *(undefined4 *)(this + 0xb4) = 0; + } + if (*(void **)(this + 0xc0) != (void *)0x0) { + operator_delete__(*(void **)(this + 0xc0)); + *(undefined4 *)(this + 0xc0) = 0; + } + if (*(void **)(this + 0xc4) != (void *)0x0) { + operator_delete__(*(void **)(this + 0xc4)); + *(undefined4 *)(this + 0xc4) = 0; + } + if (*(void **)(this + 200) != (void *)0x0) { + operator_delete__(*(void **)(this + 200)); + *(undefined4 *)(this + 200) = 0; + } + if (*(void **)(this + 0xb8) != (void *)0x0) { + operator_delete__(*(void **)(this + 0xb8)); + *(undefined4 *)(this + 0xb8) = 0; + } + if (*(void **)(this + 0xbc) != (void *)0x0) { + operator_delete__(*(void **)(this + 0xbc)); + *(undefined4 *)(this + 0xbc) = 0; + } + if (*(void **)(this + 0x2f74) != (void *)0x0) { + operator_delete__(*(void **)(this + 0x2f74)); + *(undefined4 *)(this + 0x2f74) = 0; + } + if (*(void **)(this + 0x2f78) != (void *)0x0) { + operator_delete__(*(void **)(this + 0x2f78)); + *(undefined4 *)(this + 0x2f78) = 0; + } + if (*(void **)(this + 0x2f7c) != (void *)0x0) { + operator_delete__(*(void **)(this + 0x2f7c)); + *(undefined4 *)(this + 0x2f7c) = 0; + } + __aeabi_memclr4(this + 0x2d1c,0x40c); + CAccumulator::Reset((CAccumulator *)(this + 0x3784),0,0,0); + CAccumulator::Reset((CAccumulator *)(this + 0x37a4),0,0,0); + CSmoother::Reset((CSmoother *)(this + 0x37c4),0,0,0,0); + __aeabi_memclr4(this + 0x3820,0x18d0); + pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); + return; +} + + + +### FUNC ~CFunctions @ 00027954 + +/* CFunctions::~CFunctions() */ + +void __thiscall CFunctions::~CFunctions(CFunctions *this) + +{ + ~CFunctions(this); + operator_delete(this); + return; +} + + + +### FUNC Reset @ 00027974 + +/* CFunctions::Reset(struct_IntrinsicPara const*) */ + +undefined4 __thiscall CFunctions::Reset(CFunctions *this,struct_IntrinsicPara *param_1) + +{ + pthread_mutex_t *__mutex; + uint uVar1; + uint uVar2; + void *pvVar3; + int iVar4; + MStream *pMVar5; + undefined4 *puVar6; + Logging *this_00; + CFunctions *pCVar7; + uint uVar8; + undefined4 uVar9; + undefined4 uVar10; + undefined4 uVar11; + uint uVar12; + undefined8 uVar13; + Logging aLStack_3c [12]; + Logging aLStack_30 [12]; + Logging aLStack_24 [12]; + int local_18; + + local_18 = __stack_chk_guard; + ReleaseMemory(this); + __mutex = (pthread_mutex_t *)(this + 0xb0); + pthread_mutex_lock(__mutex); + *(undefined4 *)(this + 0x50fc) = 8; + *(undefined4 *)(this + 0x5100) = 0xffff3cb0; + *(undefined4 *)(this + 0x5104) = 3; + pCVar7 = this + 0x37ec; + uVar9 = *(undefined4 *)(param_1 + 4); + uVar10 = *(undefined4 *)(param_1 + 8); + *(undefined4 *)pCVar7 = *(undefined4 *)param_1; + *(undefined4 *)(this + 0x37f0) = uVar9; + *(undefined4 *)(this + 0x37f4) = uVar10; + uVar9 = *(undefined4 *)(param_1 + 0x10); + uVar10 = *(undefined4 *)(param_1 + 0x14); + *(undefined4 *)(this + 0x37f8) = *(undefined4 *)(param_1 + 0xc); + *(undefined4 *)(this + 0x37fc) = uVar9; + *(undefined4 *)(this + 0x3800) = uVar10; + uVar9 = *(undefined4 *)(param_1 + 0x1c); + uVar10 = *(undefined4 *)(param_1 + 0x20); + uVar11 = *(undefined4 *)(param_1 + 0x24); + *(undefined4 *)(this + 0x3804) = *(undefined4 *)(param_1 + 0x18); + *(undefined4 *)(this + 0x3808) = uVar9; + *(undefined4 *)(this + 0x380c) = uVar10; + *(undefined4 *)(this + 0x3810) = uVar11; + uVar12 = *(uint *)(this + 0x3804); + if ((((uVar12 - 4 < 0x3d) && ((uVar12 - 1 & uVar12) == 0)) && + ((*(uint *)(this + 0x3808) - 1 & (*(uint *)(this + 0x3808) | 0xffffffc0)) == 0)) && + ((*(int *)(this + 0x380c) - 1U < 2 && (*(int *)(this + 0x3810) != 0)))) { + uVar1 = *(uint *)pCVar7; + if ((3 < uVar1) && ((uVar1 & 3) == 0)) { + if (*(int *)(this + 0x37f0) != 0) { + if (3 < *(uint *)(this + 0x37fc)) { + if (*(int *)(this + 0x3800) != 0) { + uVar1 = *(int *)(this + 0x37f0) * uVar1; + *(uint *)(this + 0x50f0) = uVar1; + uVar8 = *(int *)(this + 0x3800) * *(uint *)(this + 0x37fc); + *(uint *)(this + 0x50f8) = uVar8; + *(int *)(this + 0x50f4) = *(int *)(this + 0x37f4) * *(int *)(this + 0x37f8); + uVar2 = uVar1 * 2; + if (uVar1 * 2 < uVar1) { + uVar2 = 0xffffffff; + } + pvVar3 = operator_new__(uVar2); + *(void **)(this + 0xb4) = pvVar3; + pvVar3 = operator_new__(uVar2); + *(void **)(this + 0xbc) = pvVar3; + pvVar3 = operator_new__(uVar1); + *(void **)(this + 0xc0) = pvVar3; + uVar13 = __muldi3(uVar1,0,4,(int)uVar1 >> 0x1f); + uVar2 = 0xffffffff; + if ((int)((ulonglong)uVar13 >> 0x20) == 0) { + uVar2 = (uint)uVar13; + } + pvVar3 = operator_new__(uVar2); + *(void **)(this + 0xc4) = pvVar3; + pvVar3 = operator_new__(uVar1); + *(void **)(this + 0xb8) = pvVar3; + pvVar3 = operator_new__(uVar8); + *(void **)(this + 200) = pvVar3; + uVar9 = 0; + iVar4 = CAccumulator::Reset((CAccumulator *)(this + 0x3784),uVar1,uVar12,0); + if (iVar4 == 0) { + pMVar5 = (MStream *)mag::Logging::Logging(aLStack_30,4); + MStream::operator<<(pMVar5,"Failed to create baseline accmulator"); + this_00 = aLStack_30; + } + else { + if ((*(uint *)(this + 0x380c) < 2) || + (iVar4 = CSmoother::Reset((CSmoother *)(this + 0x37c4),*(uint *)(this + 0x50f0), + *(uint *)(this + 0x380c) - 1,0,0), iVar4 != 0)) { + __aeabi_memclr4(this + 0x24e0); + *(undefined4 *)(this + 0x24cc) = 0x28; + *(undefined4 *)(this + 0x24d0) = *(undefined4 *)pCVar7; + *(undefined4 *)(this + 0x24d4) = *(undefined4 *)(this + 0x37f0); + *(undefined4 *)(this + 0x24d8) = 0x80001; + *(undefined4 *)(this + 0x24dc) = 0; + __aeabi_memclr4(this + 0x2908,0x14); + *(undefined4 *)(this + 0x28f4) = 0x28; + *(undefined4 *)(this + 0x28f8) = *(undefined4 *)(this + 0x37fc); + *(undefined4 *)(this + 0x28fc) = *(undefined4 *)(this + 0x3800); + *(undefined4 *)(this + 0x2900) = 0x80001; + *(undefined4 *)(this + 0x2904) = 0; + CalTaoAtm((CFunctions *)0x2904,(struct_FixPara *)(this + 0x78)); + *(undefined4 *)(this + 0xa4) = 1; + pthread_mutex_unlock(__mutex); + uVar9 = *(undefined4 *)(this + 0xa4); + goto LAB_00027ba6; + } + pMVar5 = (MStream *)mag::Logging::Logging(aLStack_3c,4); + MStream::operator<<(pMVar5,"Failed to create temperature smoother"); + this_00 = aLStack_3c; + } + mag::Logging::~Logging(this_00); + pthread_mutex_unlock(__mutex); + puVar6 = (undefined4 *)__errno(); + *puVar6 = 0xe4ae0003; + goto LAB_00027ba6; + } + } + } + } + } + pMVar5 = (MStream *)mag::Logging::Logging(aLStack_24,4); + MStream::operator<<(pMVar5,"Failed to configurate CFunctions due to parameter error"); + mag::Logging::~Logging(aLStack_24); + pthread_mutex_unlock(__mutex); + puVar6 = (undefined4 *)__errno(); + *puVar6 = 0xe4ae0001; + uVar9 = 0; +LAB_00027ba6: + if (__stack_chk_guard == local_18) { + return uVar9; + } + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); +} + + + +### FUNC CalTaoAtm @ 00027d20 + +/* CFunctions::CalTaoAtm(struct_FixPara*) */ + +undefined4 __thiscall CFunctions::CalTaoAtm(CFunctions *this,struct_FixPara *param_1) + +{ + int iVar1; + undefined4 uVar2; + undefined4 uVar3; + undefined4 *puVar4; + undefined4 uVar5; + undefined4 uVar6; + float __x; + float __x_00; + float __x_01; + float __x_02; + float __y; + float __y_00; + + if (param_1 == (struct_FixPara *)0x0) { + puVar4 = (undefined4 *)__errno(); + *puVar4 = 0xe4ae0001; + uVar6 = 0; + } + else { + iVar1 = __aeabi_fcmple(*(undefined4 *)param_1,0); + if (iVar1 == 0) { + iVar1 = __aeabi_fcmple(*(undefined4 *)(param_1 + 0x10),0); + if (iVar1 == 0) { + uVar6 = *(undefined4 *)(param_1 + 0xc); + iVar1 = __aeabi_fcmplt(uVar6); + if ((iVar1 == 0) && (iVar1 = __aeabi_fcmpgt(uVar6,0x3f800000), iVar1 == 0)) { + iVar1 = __fixsfsi(*(undefined4 *)(param_1 + 8)); + if (0x22 < iVar1) { + iVar1 = 0x23; + } + if (iVar1 < -0x18) { + iVar1 = -0x19; + } + __x = (float)__mulsf3(uVar6,*(undefined4 *)(&UNK_00064928 + iVar1 * 4)); + sqrtf(__x); + uVar6 = __mulsf3(); + uVar6 = __addsf3(uVar6,0x3d3851ec); + uVar2 = __divsf3(0x3db851ec,*(undefined4 *)(param_1 + 0x10)); + uVar5 = 0; + iVar1 = __aeabi_fcmpgt(*(undefined4 *)(param_1 + 0x14),0); + uVar3 = 0; + if (iVar1 != 0) { + powf(__x_00,__y); + uVar3 = __mulsf3(); + } + iVar1 = __aeabi_fcmpgt(*(undefined4 *)(param_1 + 0x18),0); + if (iVar1 != 0) { + powf(__x_01,__y_00); + uVar5 = __mulsf3(); + } + uVar3 = __addsf3(uVar3,uVar5); + uVar6 = __addsf3(uVar6,uVar2); + uVar6 = __addsf3(uVar6,uVar3); + uVar6 = __mulsf3(*(undefined4 *)param_1,uVar6); + uVar6 = __mulsf3(uVar6,0xba83126f); + expf(__x_02); + *(undefined4 *)(param_1 + 0x24) = uVar6; + return uVar6; + } + } + } + uVar6 = 0x3f800000; + *(undefined4 *)(param_1 + 0x24) = 0x3f800000; + puVar4 = (undefined4 *)__errno(); + *puVar4 = 0xe4ae0001; + } + return uVar6; +} + + + +### FUNC PushBaselineRaw @ 00027e68 + +/* CFunctions::PushBaselineRaw(unsigned short const*, int) */ + +int __thiscall CFunctions::PushBaselineRaw(CFunctions *this,ushort *param_1,int param_2) + +{ + int iVar1; + pthread_mutex_t *__mutex; + + __mutex = (pthread_mutex_t *)(this + 0xb0); + pthread_mutex_lock(__mutex); + if (*(int *)(this + 0xa4) == 0) { + pthread_mutex_unlock(__mutex); + iVar1 = 0; + } + else { + if (param_2 != 0) { + *(undefined4 *)(this + 0xa8) = 0; + CAccumulator::Restart((CAccumulator *)(this + 0x3784)); + CAccumulator::Restart((CAccumulator *)(this + 0x37a4)); + } + iVar1 = CAccumulator::PushFrame((CAccumulator *)(this + 0x3784),param_1); + if (iVar1 != 0) { + *(undefined4 *)(this + 0xa8) = 1; + } + pthread_mutex_unlock(__mutex); + } + return iVar1; +} + + + +### FUNC SelectCaliCurve @ 00027edc + +/* CFunctions::SelectCaliCurve() */ + +void __thiscall CFunctions::SelectCaliCurve(CFunctions *this) + +{ + CFunctions *pCVar1; + FILE *__stream; + size_t sVar2; + size_t sVar3; + int iVar4; + int iVar5; + uint uVar6; + size_t __n; + int iVar7; + CFunctions *pCVar8; + uint uVar9; + CFunctions *local_58; + int local_24; + uint local_20; + uint local_1c; + + *(undefined4 *)(this + 0x2d24) = 0; + pCVar1 = this; + uVar6 = 0; + do { + uVar9 = uVar6; + pCVar8 = pCVar1; + uVar6 = uVar9 + 1; + if (*(int *)(this + 0x2e2c) - 2U <= uVar9) break; + pCVar1 = pCVar8 + 4; + } while (*(int *)(this + uVar6 * 4 + 0x2e38) < *(int *)(this + 0x38)); + *(uint *)(this + 0x3108) = uVar9; + local_1c = *(uint *)(this + 0x2e30); + local_24 = *(int *)(this + 0x50f0); + iVar5 = *(int *)(this + 0x2e28); + __n = *(int *)(this + 0x2e34) + local_1c + local_24 * (iVar5 * 3 + -1) * 2; + if (uVar9 <= uVar6) { + iVar5 = 0; + local_20 = uVar9; + do { + if (*(int *)(pCVar8 + 0x2f80) == 0) { + iVar4 = access((char *)(this + 0x2d28),0); + if (iVar4 != 0) { + *(undefined4 *)(this + 0x2d1c) = 0; + return; + } + __stream = fopen((char *)(this + 0x2d28),"rb"); + fseek(__stream,*(long *)(pCVar8 + 0x2fd0),0); + sVar2 = fread((void *)(*(int *)(this + 0x2f74) + *(int *)(pCVar8 + 0x3020)),1,__n,__stream); + if ((*(int *)(pCVar8 + 0x2f28) != 0) && (uVar9 + iVar5 <= *(int *)(this + 0x2e2c) - 2U)) { + fseek(__stream,*(long *)(pCVar8 + 0x3070),0); + sVar3 = fread((void *)(*(int *)(this + 0x2f7c) + *(int *)(pCVar8 + 0x30bc)),4, + *(int *)(pCVar8 + 0x2f28) * 10,__stream); + if (sVar3 * 4 + *(int *)(pCVar8 + 0x2f28) * -0x28 != 0) { + fclose(__stream); + goto LAB_000280ec; + } + } + fclose(__stream); + if (sVar2 != __n) { +LAB_000280ec: + *(undefined4 *)(this + 0x2d1c) = 0; + return; + } + *(undefined4 *)(pCVar8 + 0x2f80) = 1; + local_20 = *(uint *)(this + 0x3108); + } + iVar5 = iVar5 + 1; + pCVar8 = pCVar8 + 4; + } while (uVar9 + iVar5 <= local_20 + 1); + local_1c = *(uint *)(this + 0x2e30); + iVar5 = *(int *)(this + 0x2e28); + local_24 = *(int *)(this + 0x50f0); + uVar9 = local_20; + } + local_58 = this + 0x2f7c; + iVar4 = *(int *)(this + 0x2f74) + *(int *)(this + uVar9 * 4 + 0x3020); + *(int *)(this + 0x310c) = iVar4; + iVar7 = local_24 * (iVar5 + -1) * 2; + *(uint *)(this + 0x3118) = iVar4 + iVar7 + (local_1c & 0xfffffffe); + iVar5 = *(int *)(this + 0x2f74) + *(int *)(this + uVar9 * 4 + 0x3024); + *(int *)(this + 0x3110) = iVar5; + *(uint *)(this + 0x311c) = iVar5 + iVar7 + (local_1c & 0xfffffffe); + *(int *)(this + 0x3124) = *(int *)local_58 + *(int *)(this + uVar9 * 4 + 0x30bc); + return; +} + + + +### FUNC DoSomething @ 0002814c + +/* CFunctions::DoSomething(int, unsigned int) */ + +void __thiscall CFunctions::DoSomething(CFunctions *this,int param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + int iVar3; + uint uVar4; + + pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); + if ((*(int *)(this + 0xa4) != 0) && (*(int *)(this + 0x2d1c) != 0)) { + if (param_1 == 0) { + SelectCaliCurve(this); + if ((*(int *)(this + 0x2d1c) != 0) && (*(int *)(this + 0x2d20) != 0)) { + GenerateVolatileLens(this); + } + } + else { + if ((param_1 == 1) && (1 < param_2)) { + DAT_0006b8f4 = 0; + DAT_0006b8f8 = 0; + DAT_0006b900 = *(int *)(this + 0x2e28) * *(int *)(this + 0x50f0) * 2; + iVar3 = *(int *)(this + 0x50f0) * (*(int *)(this + 0x2e28) + -1); + DAT_0006b8fc = iVar3; + iVar1 = __udivsi3(param_2 + DAT_0006b900 + iVar3 + -2,param_2 - 1); + DAT_0006b904 = iVar1 + 7U & 0xfffffff8; + iVar1 = 0; + } + else { + iVar1 = DAT_0006b8f4; + iVar3 = DAT_0006b8fc; + if (param_1 < 1) goto LAB_000282a8; + } + uVar2 = 0; + if (iVar1 < iVar3) { + uVar2 = iVar3 - iVar1; + if ((int)DAT_0006b904 <= iVar3 - iVar1) { + uVar2 = DAT_0006b904; + } + iVar1 = iVar1 * 2; + InterpolateShort(this,(short *)(*(int *)(this + 0x310c) + iVar1), + (short *)(*(int *)(this + 0x3110) + iVar1), + (short *)(*(int *)(this + 0x3114) + iVar1),uVar2); + DAT_0006b8f4 = DAT_0006b8f4 + uVar2; + } + if (((int)uVar2 < (int)DAT_0006b904) && (DAT_0006b8f8 < DAT_0006b900)) { + uVar4 = DAT_0006b900 - DAT_0006b8f8; + if ((int)(DAT_0006b904 - uVar2) <= DAT_0006b900 - DAT_0006b8f8) { + uVar4 = DAT_0006b904 - uVar2; + } + iVar1 = DAT_0006b8f8 * 2; + InterpolateUShort(this,(ushort *)(*(int *)(this + 0x3118) + iVar1), + (ushort *)(*(int *)(this + 0x311c) + iVar1), + (ushort *)(*(int *)(this + 0x3120) + iVar1),uVar4); + DAT_0006b8f8 = DAT_0006b8f8 + uVar4; + if (DAT_0006b8f8 == DAT_0006b900) { + *(undefined4 *)(this + 0x2d24) = 1; + } + } + } + } +LAB_000282a8: + pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); + return; +} + + + +### FUNC GenerateVolatileLens @ 00028314 + +/* CFunctions::GenerateVolatileLens() */ + +void __thiscall CFunctions::GenerateVolatileLens(CFunctions *this) + +{ + int iVar1; + int iVar2; + undefined4 uVar3; + uint uVar4; + int iVar5; + int iVar6; + int iVar7; + CFunctions *pCVar8; + undefined4 uVar9; + int iVar10; + int local_88; + undefined4 local_78; + int local_74; + int local_70 [11]; + int local_44 [11]; + int local_18; + + local_18 = __stack_chk_guard; + if ((*(int *)(this + 0x2d1c) != 0) && (*(int *)(this + 0x2d20) != 0)) { + iVar1 = (*(int *)(this + 0x2e38) + *(int *)(this + 0x2e3c)) / 2; + uVar9 = *(undefined4 *)(this + 0x6c); + iVar2 = __aeabi_fcmpeq(uVar9,0); + if (iVar2 == 0) { + local_88 = 0; + iVar7 = *(int *)(this + 0x38); + *(undefined4 *)(this + 0x316c) = 10; + uVar3 = __floatsisf(iVar7 - iVar1); + uVar9 = __mulsf3(uVar9,uVar3); + uVar9 = __divsf3(uVar9,0x447a0000); + uVar9 = __addsf3(uVar9,0x3f800000); + local_78 = 0x3e4ccccd; + iVar2 = __aeabi_fcmplt(); + if (iVar2 == 0) { + local_78 = uVar9; + } + uVar4 = *(uint *)(this + 0x5104); + iVar5 = *(int *)(this + 0x5100); + local_74 = 0xffff; + iVar10 = 0; + iVar2 = iVar10; + do { + local_44[iVar2] = iVar10; + uVar9 = __floatsisf(iVar10 - iVar7); + __mulsf3(local_78,uVar9); + iVar6 = __fixsfsi(); + iVar6 = (iVar1 - iVar5) + iVar6 >> (uVar4 & 0xff); + if (iVar6 < 1) { + iVar6 = local_88; + } + if (0xfffe < iVar6) { + iVar6 = local_74; + } + local_70[iVar2] = iVar6; + iVar10 = iVar10 + 10000; + iVar2 = iVar2 + 1; + } while (iVar2 != 0xb); + pCVar8 = this + 0x3204; + iVar7 = -0x28; + iVar1 = local_44[0]; + iVar2 = local_70[0]; + do { + iVar6 = *(int *)((int)local_44 + iVar7); + *(int *)(this + iVar7 + 0x3198) = iVar6; + iVar5 = *(int *)((int)&local_18 + iVar7); + iVar10 = __udivsi3((iVar5 - iVar1) + ((uint)(iVar6 - iVar2) >> 1)); + *(int *)pCVar8 = iVar10; + *(int *)(pCVar8 + 4) = iVar1 - iVar10 * iVar2; + pCVar8 = pCVar8 + 8; + iVar7 = iVar7 + 4; + iVar1 = iVar5; + iVar2 = iVar6; + } while (iVar7 != 0); + } + else { + *(undefined4 *)(this + 0x316c) = 1; + *(undefined4 *)(this + 0x3204) = *(undefined4 *)(this + 0x50fc); + *(int *)(this + 0x3208) = (*(int *)(this + 0x5100) - iVar1) + *(int *)(this + 0x38); + } + } + if (__stack_chk_guard != local_18) { + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); + } + return; +} + + + +### FUNC InterpolateShort @ 000284c0 + +/* CFunctions::InterpolateShort(short const*, short const*, short*, unsigned int) */ + +void __thiscall +CFunctions::InterpolateShort + (CFunctions *this,short *param_1,short *param_2,short *param_3,uint param_4) + +{ + bool bVar1; + int iVar2; + int iVar3; + + iVar2 = *(int *)(this + 0x38); + if ((iVar2 < *(int *)(this + 0x2e38)) || + (bVar1 = true, *(int *)(this + *(int *)(this + 0x2e2c) * 4 + 0x2e34) < iVar2)) { + bVar1 = false; + } + iVar2 = __divsi3((iVar2 - *(int *)(this + *(int *)(this + 0x3108) * 4 + 0x2e38)) * 0x1000, + *(int *)(this + *(int *)(this + 0x3108) * 4 + 0x2e3c) - + *(int *)(this + *(int *)(this + 0x3108) * 4 + 0x2e38)); + if (iVar2 < -0x3ffe) { + iVar2 = -0x3fff; + } + if (0x3ffe < iVar2) { + iVar2 = 0x3fff; + } + if (bVar1) { + if (param_4 != 0) { + do { + *param_3 = (short)((uint)(iVar2 * ((int)*param_2 - (int)*param_1)) >> 0xc) + *param_1; + param_4 = param_4 - 1; + param_3 = param_3 + 1; + param_2 = param_2 + 1; + param_1 = param_1 + 1; + } while (param_4 != 0); + } + } + else if (param_4 != 0) { + do { + iVar3 = (iVar2 * ((int)*param_2 - (int)*param_1) >> 0xc) + (int)*param_1; + if (iVar3 < -0x7fff) { + iVar3 = -0x8000; + } + if (0x7ffe < iVar3) { + iVar3 = 0x7fff; + } + *param_3 = (short)iVar3; + param_4 = param_4 - 1; + param_3 = param_3 + 1; + param_2 = param_2 + 1; + param_1 = param_1 + 1; + } while (param_4 != 0); + } + return; +} + + + +### FUNC InterpolateUShort @ 000285c4 + +/* CFunctions::InterpolateUShort(unsigned short const*, unsigned short const*, unsigned short*, + unsigned int) */ + +void __thiscall +CFunctions::InterpolateUShort + (CFunctions *this,ushort *param_1,ushort *param_2,ushort *param_3,uint param_4) + +{ + bool bVar1; + int iVar2; + int iVar3; + + iVar2 = *(int *)(this + 0x38); + if ((iVar2 < *(int *)(this + 0x2e38)) || + (bVar1 = true, *(int *)(this + *(int *)(this + 0x2e2c) * 4 + 0x2e34) < iVar2)) { + bVar1 = false; + } + iVar2 = __divsi3((iVar2 - *(int *)(this + *(int *)(this + 0x3108) * 4 + 0x2e38)) * 0x1000, + *(int *)(this + *(int *)(this + 0x3108) * 4 + 0x2e3c) - + *(int *)(this + *(int *)(this + 0x3108) * 4 + 0x2e38)); + if (iVar2 < -0x3ffe) { + iVar2 = -0x3fff; + } + if (0x3ffe < iVar2) { + iVar2 = 0x3fff; + } + if (bVar1) { + for (; param_4 != 0; param_4 = param_4 - 1) { + *param_3 = (short)(iVar2 * ((uint)*param_2 - (uint)*param_1) >> 0xc) + *param_1; + param_3 = param_3 + 1; + param_2 = param_2 + 1; + param_1 = param_1 + 1; + } + } + else if (param_4 != 0) { + do { + iVar3 = ((int)(iVar2 * ((uint)*param_2 - (uint)*param_1)) >> 0xc) + (uint)*param_1; + if (iVar3 < 1) { + iVar3 = 0; + } + if (0xfffe < iVar3) { + iVar3 = 0xffff; + } + *param_3 = (ushort)iVar3; + param_4 = param_4 - 1; + param_3 = param_3 + 1; + param_2 = param_2 + 1; + param_1 = param_1 + 1; + } while (param_4 != 0); + } + return; +} + + + +### FUNC Raw2Temperature @ 000286a4 + +/* CFunctions::Raw2Temperature(unsigned short const*) */ + +undefined4 __thiscall CFunctions::Raw2Temperature(CFunctions *this,ushort *param_1) + +{ + int iVar1; + + if (*(int *)(this + 0x3808) != 1) { + iVar1 = CAccumulator::PushFrame((CAccumulator *)(this + 0x37a4),param_1); + if (iVar1 == 0) { + return 0; + } + param_1 = (ushort *)0x0; + if (*(int *)(this + 0x37c0) != 0) { + param_1 = *(ushort **)(this + 0x37ac); + } + } + Calibration(this,param_1); + return 1; +} + + + +### FUNC Calibration @ 000286e8 + +/* CFunctions::Calibration(unsigned short const*) */ + +void __thiscall CFunctions::Calibration(CFunctions *this,ushort *param_1) + +{ + if ((*(int *)(this + 0x2d1c) != 0) && (*(int *)(this + 0x2d24) != 0)) { + CalibrationMain_RTV(this,param_1); + BlindCompensation(this,*(ushort **)(this + 0xb4)); + return; + } + ConvertResponse2Temperature(this,param_1); + return; +} + + + +### FUNC PushFrame @ 00028720 + +/* CFunctions::PushFrame(unsigned short const*, SrcDataType, int, int, int) */ + +undefined4 __thiscall +CFunctions::PushFrame + (CFunctions *this,ushort *param_1,int param_3,undefined4 param_4,int param_5,int param_6) + +{ + int iVar1; + undefined4 uVar2; + int iVar3; + uint uVar4; + pthread_mutex_t *__mutex; + CFunctions *local_20; + + __mutex = (pthread_mutex_t *)(this + 0xb0); + pthread_mutex_lock(__mutex); + iVar1 = GetTickCount(); + if ((param_1 == (ushort *)0x0) || (*(int *)(this + 0xa4) == 0)) { +LAB_0002880c: + pthread_mutex_unlock(__mutex); + return 0; + } + if (param_3 == 0) { + if (*(int *)(this + 0xa8) == 0) goto LAB_0002880c; + *(undefined4 *)(this + 0x3868) = 0; + *(undefined4 *)(this + 0x3864) = 0; + *(undefined4 *)(this + 0x386c) = 0; + iVar3 = Raw2Temperature(this,param_1); + if (iVar3 == 0) goto LAB_00028816; + } + else { + *(undefined4 *)(this + 0x3868) = 0; + *(undefined4 *)(this + 0x3864) = 0; + *(undefined4 *)(this + 0x386c) = 0; + if (param_3 != 1) { +LAB_00028816: + pthread_mutex_unlock(__mutex); + return 0; + } + __aeabi_memcpy(*(undefined4 *)(this + 0xb4),param_1,*(int *)(this + 0x50f0) << 1); + } + local_20 = this + 0x3864; + if (*(uint *)(this + 0x70) != 0) { + Mirror(this,*(uint *)(this + 0x70)); + } + uVar2 = 0; + if ((param_5 == 0) && (1 < *(uint *)(this + 0x380c))) { + uVar4 = *(uint *)(this + 0x34) >> (*(uint *)(this + 0x5104) & 0xff); + if (0xfffe < uVar4) { + uVar4 = 0xffff; + } + CSmoother::PushFrameAve((CSmoother *)(this + 0x37c4),*(ushort **)(this + 0xb4),uVar4); + uVar2 = 1; + } + *(undefined4 *)(this + 0x3860) = uVar2; + if (param_6 == 0) goto switchD_000287fe_default; + switch(*(undefined4 *)(this + 0x3814)) { + case 1: + FilterE2X(this); + goto switchD_000287fe_default; + case 2: + break; + case 3: + FilterE2X(this); + break; + case 4: + FilterE4X(this); + break; + default: + goto switchD_000287fe_default; + } + FilterE4X(this); +switchD_000287fe_default: + TempRangeStat(this,*(ushort **)(this + 0xb4)); + GrayEnlarge(this); + if (((*(int *)local_20 != 0) && (*(int *)(this + 0x28) != 0)) && + ((*(int *)(this + 0x24) == 0 || (*(int *)(this + 0xc) != 0)))) { + uVar4 = *(int *)(this + 0x28) << 3; + if (*(int *)(this + 0x58) == 0) { + FilterDetailEnhancement(this,uVar4); + } + else { + FilterDetailEnhancement_Simple(this,uVar4); + } + } + iVar3 = GetTickCount(); + *(int *)(this + 0x3870) = iVar3 - iVar1; + CopyState(this); + *(undefined4 *)(this + 0xac) = 1; + pthread_mutex_unlock(__mutex); + return 3; +} + + + +### FUNC Mirror @ 000288c4 + +/* WARNING: Restarted to delay deadcode elimination for space: stack */ +/* CFunctions::Mirror(unsigned int) */ + +void __thiscall CFunctions::Mirror(CFunctions *this,uint param_1) + +{ + bool bVar1; + int iVar2; + int iVar3; + int iVar4; + int iVar5; + uint uVar6; + int iVar7; + uint uVar8; + int iVar9; + int iVar10; + int iVar11; + int iVar12; + uint uVar13; + undefined1 auStack_818 [2052]; + + iVar2 = __stack_chk_guard; + iVar9 = *(int *)(this + 0x37f0); + iVar11 = *(int *)(this + 0x37ec); + if ((*(int *)(this + 0x74) == 0xb4) || (*(int *)(this + 0x74) == 0)) { + uVar8 = param_1 & 1; + uVar6 = 2; + } + else { + uVar6 = 1; + uVar8 = param_1 >> 1 & 1; + } + if (((param_1 & uVar6) != 0) && (iVar7 = iVar9 / 2, 1 < iVar9)) { + iVar10 = iVar11 * (iVar9 + -1) * 2; + iVar3 = iVar11 * 2; + iVar12 = 0; + do { + iVar4 = *(int *)(this + 0xb4); + iVar5 = iVar4 + iVar12; + __aeabi_memcpy(auStack_818,iVar5,iVar3); + iVar4 = iVar4 + iVar10; + __aeabi_memcpy(iVar5,iVar4,iVar3); + __aeabi_memcpy(iVar4,auStack_818,iVar3); + iVar12 = iVar12 + iVar3; + iVar10 = iVar10 + iVar11 * -2; + iVar7 = iVar7 + -1; + } while (iVar7 != 0); + } + if ((uVar8 != 0) && (0 < iVar9)) { + iVar3 = iVar11 * (iVar9 + -1); + iVar7 = *(int *)(this + 0xb4) + iVar3 * 2; + uVar6 = iVar11 + ((uint)(iVar11 >> 0x1f) >> 0x1e); + iVar3 = *(int *)(this + 0xb4) + (iVar3 + (uVar6 & 0x7ffffffc)) * 2 + -4; + do { + if (6 < iVar11 + 3U) { + iVar10 = 0; + do { + uVar13 = *(uint *)(iVar3 + iVar10 * -4); + uVar8 = *(uint *)(iVar7 + iVar10 * 4); + *(uint *)(iVar3 + iVar10 * -4) = uVar8 >> 0x10 | uVar8 << 0x10; + *(uint *)(iVar7 + iVar10 * 4) = uVar13 >> 0x10 | uVar13 << 0x10; + iVar10 = iVar10 + 1; + } while ((int)uVar6 >> 2 != iVar10); + } + iVar7 = iVar7 + iVar11 * -2; + iVar3 = iVar3 + iVar11 * -2; + bVar1 = 1 < iVar9; + iVar9 = iVar9 + -1; + } while (bVar1); + } + if (__stack_chk_guard != iVar2) { + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); + } + return; +} + + + +### FUNC ConvertDeltamC2InnerTemp @ 00028a20 + +/* CFunctions::ConvertDeltamC2InnerTemp(unsigned int) const */ + +uint __thiscall CFunctions::ConvertDeltamC2InnerTemp(CFunctions *this,uint param_1) + +{ + uint uVar1; + + uVar1 = param_1 >> (*(uint *)(this + 0x5104) & 0xff); + if (0xfffe < uVar1) { + uVar1 = 0xffff; + } + return uVar1 & 0xffff; +} + + + +### FUNC FilterE2X @ 00028a3c + +/* CFunctions::FilterE2X() */ + +void __thiscall CFunctions::FilterE2X(CFunctions *this) + +{ + ushort uVar1; + ushort *puVar2; + uint uVar3; + uint uVar4; + uint uVar5; + CFunctions *pCVar6; + int iVar7; + ushort *puVar8; + uint uVar9; + int iVar10; + int iVar11; + uint uVar12; + uint *puVar13; + uint *local_18; + + uVar5 = *(uint *)(this + 0x37ec); + iVar10 = *(int *)(this + 0xb4) + uVar5 * *(int *)(this + 0x381c) * 2 + *(int *)(this + 0x3818) * 2 + ; + iVar11 = *(int *)(this + 0xbc); + pCVar6 = this + 0x37ec; + iVar7 = -1 - (*(uint *)(this + 0x37f0) >> 1); + do { + __aeabi_memcpy(iVar11,iVar10,uVar5 + 4 & 0xfffffffe); + uVar5 = *(uint *)pCVar6; + iVar10 = iVar10 + uVar5 * 2; + iVar11 = iVar11 + (uVar5 & 0xfffffffe) + 4; + iVar7 = iVar7 + 1; + } while (iVar7 != 0); + uVar3 = *(uint *)(this + 0x37f0) >> 1; + if (uVar3 != 0) { + puVar8 = *(ushort **)(this + 0xbc); + local_18 = *(uint **)(this + 0xb4); + while( true ) { + uVar12 = uVar5 >> 1; + if (uVar12 != 0) { + iVar11 = -uVar12; + puVar2 = puVar8 + uVar12; + uVar5 = (uint)*puVar8; + puVar13 = local_18; + do { + puVar8 = puVar8 + 1; + uVar1 = *puVar8; + *puVar13 = (uVar1 + uVar5) * 0x8000 & 0xffff0000 | uVar5; + puVar13 = puVar13 + 1; + iVar11 = iVar11 + 1; + uVar5 = (uint)uVar1; + } while (iVar11 != 0); + local_18 = local_18 + uVar12; + uVar5 = *(uint *)pCVar6; + puVar8 = puVar2; + } + uVar5 = uVar5 >> 1; + puVar2 = puVar8 + -uVar5; + iVar11 = -uVar5; + if (uVar5 != 0) { + uVar12 = (uint)puVar8[2]; + uVar9 = (uint)*puVar2; + iVar7 = 0; + do { + uVar4 = uVar12 + uVar9; + uVar9 = (uint)*(ushort *)((int)puVar8 + -iVar7 + uVar5 * -2 + 2); + uVar12 = (uint)*(ushort *)((int)puVar8 + -iVar7 + 6); + *(uint *)((int)local_18 + iVar7 * -2) = + uVar4 >> 1 | (uVar4 + uVar9 + uVar12) * 0x4000 & 0xffff0000; + iVar11 = iVar11 + 1; + iVar7 = iVar7 + -2; + } while (iVar11 != 0); + local_18 = local_18 + uVar5; + puVar2 = puVar8; + } + uVar3 = uVar3 - 1; + if (uVar3 == 0) break; + uVar5 = *(uint *)pCVar6; + puVar8 = puVar2 + 2; + } + } + return; +} + + + +### FUNC FilterE4X @ 00028ba0 + +/* CFunctions::FilterE4X() */ + +void __thiscall CFunctions::FilterE4X(CFunctions *this) + +{ + uint uVar1; + uint uVar2; + CFunctions *pCVar3; + uint uVar4; + int iVar5; + uint uVar6; + uint uVar7; + uint uVar8; + int iVar9; + uint *puVar10; + ushort *puVar11; + uint uVar12; + ushort *puVar13; + ushort *puVar14; + int local_58; + int local_20; + uint *local_18; + + uVar6 = *(uint *)(this + 0x37ec); + iVar9 = *(int *)(this + 0xb4) + uVar6 * *(int *)(this + 0x381c) * 2 + *(int *)(this + 0x3818) * 2; + iVar5 = *(int *)(this + 0xbc); + pCVar3 = this + 0x37ec; + uVar7 = ~(*(uint *)(this + 0x37f0) >> 2); + local_58 = 0; + do { + __aeabi_memcpy(iVar5,iVar9,(uVar6 >> 1 & 0x7ffffffe) + 4); + uVar6 = *(uint *)pCVar3; + iVar9 = iVar9 + uVar6 * 2; + iVar5 = iVar5 + (uVar6 >> 1 & 0x7ffffffe) + 4; + uVar7 = uVar7 + 1; + } while (uVar7 != 0); + uVar7 = *(uint *)(this + 0x37f0) >> 2; + if (uVar7 != 0) { + puVar11 = *(ushort **)(this + 0xbc); + local_18 = *(uint **)(this + 0xb4); + while( true ) { + uVar4 = uVar6 >> 2; + if (uVar4 != 0) { + iVar5 = -uVar4; + uVar6 = (uint)*puVar11; + puVar10 = local_18; + puVar13 = puVar11; + do { + puVar13 = puVar13 + 1; + uVar8 = (uint)*puVar13; + *puVar10 = (uVar6 * 3 + uVar8) * 0x4000 & 0xffff0000 | uVar6; + puVar10[1] = uVar8 + uVar6 >> 1 | (uVar8 * 3 + uVar6) * 0x4000 & 0xffff0000; + puVar10 = puVar10 + 2; + iVar5 = iVar5 + 1; + uVar6 = uVar8; + } while (iVar5 != 0); + local_18 = local_18 + uVar4 * 2; + puVar11 = puVar11 + uVar4; + uVar6 = *(uint *)pCVar3; + } + uVar4 = uVar6 >> 2; + puVar13 = puVar11 + -uVar4; + local_20 = -uVar4; + if (uVar4 != 0) { + iVar5 = local_58; + uVar6 = (uint)*puVar13; + uVar8 = (uint)puVar11[2]; + do { + uVar12 = (uint)*(ushort *)((int)puVar11 + -iVar5 + 6); + uVar1 = (uint)*(ushort *)((int)puVar11 + -iVar5 + uVar4 * -2 + 2); + local_18[-iVar5] = + uVar6 * 3 + uVar8 >> 2 | + (uVar6 * 9 + uVar12 + (uVar1 + uVar8) * 3) * 0x1000 & 0xffff0000; + local_18[1 - iVar5] = + (uVar1 + uVar6) * 3 + uVar8 + uVar12 >> 3 | + (uVar1 * 9 + uVar8 + (uVar12 + uVar6) * 3) * 0x1000 & 0xffff0000; + local_20 = local_20 + 1; + iVar5 = iVar5 + -2; + uVar6 = uVar1; + uVar8 = uVar12; + } while (local_20 != 0); + local_18 = local_18 + uVar4 * 2; + uVar6 = *(uint *)pCVar3; + puVar13 = puVar11; + } + uVar4 = uVar6 >> 2; + puVar14 = puVar13 + -uVar4; + iVar5 = -uVar4; + if (uVar4 != 0) { + iVar9 = 0; + uVar6 = (uint)puVar13[2]; + uVar8 = (uint)*puVar14; + do { + uVar1 = uVar6 + uVar8; + uVar12 = (uint)*(ushort *)((int)puVar13 + -iVar9 + uVar4 * -2 + 2); + uVar2 = (uint)*(ushort *)((int)puVar13 + -iVar9 + 6); + local_18[-iVar9] = uVar1 >> 1 | (uVar1 * 3 + uVar12 + uVar2) * 0x2000 & 0xffff0000; + local_18[1 - iVar9] = + uVar12 + uVar8 + uVar6 + uVar2 >> 2 | + (uVar1 + (uVar2 + uVar12) * 3) * 0x2000 & 0xffff0000; + iVar5 = iVar5 + 1; + iVar9 = iVar9 + -2; + uVar6 = uVar2; + uVar8 = uVar12; + } while (iVar5 != 0); + local_18 = local_18 + uVar4 * 2; + uVar6 = *(uint *)pCVar3; + puVar14 = puVar13; + } + uVar6 = uVar6 >> 2; + puVar11 = puVar14 + -uVar6; + local_20 = -uVar6; + if (uVar6 != 0) { + iVar5 = 0; + uVar4 = (uint)*puVar11; + uVar8 = (uint)puVar14[2]; + do { + uVar1 = (uint)*(ushort *)((int)puVar14 + -iVar5 + uVar6 * -2 + 2); + uVar12 = (uint)*(ushort *)((int)puVar14 + -iVar5 + 6); + local_18[-iVar5] = + uVar8 * 3 + uVar4 >> 2 | + (uVar8 * 9 + uVar1 + (uVar12 + uVar4) * 3) * 0x1000 & 0xffff0000; + local_18[1 - iVar5] = + ((uVar8 + uVar1) * 3 + uVar4 + uVar12 * 9) * 0x1000 & 0xffff0000 | + uVar1 + uVar4 + (uVar12 + uVar8) * 3 >> 3; + local_20 = local_20 + 1; + iVar5 = iVar5 + -2; + uVar4 = uVar1; + uVar8 = uVar12; + } while (local_20 != 0); + local_18 = local_18 + uVar6 * 2; + puVar11 = puVar14; + } + uVar7 = uVar7 - 1; + if (uVar7 == 0) break; + uVar6 = *(uint *)pCVar3; + puVar11 = puVar11 + 2; + } + } + return; +} + + + +### FUNC TempRangeStat @ 00028eec + +/* CFunctions::TempRangeStat(unsigned short const*) */ + +void __thiscall CFunctions::TempRangeStat(CFunctions *this,ushort *param_1) + +{ + int iVar1; + uint uVar2; + uint uVar3; + uint uVar4; + undefined4 uVar5; + int iVar6; + uint uVar7; + uint uVar8; + ushort *puVar9; + bool bVar10; + int local_34; + uint local_28; + uint local_24; + int local_20; + uint local_1c; + int local_18; + + uVar4 = *(uint *)(this + 0x50f0); + local_24 = (uint)*param_1; + local_34 = 0; + local_28 = local_24; + if (uVar4 == 0) { + iVar6 = 0; + local_1c = 0; + local_18 = 0; + } + else { + uVar7 = 1; + local_1c = 0; + local_18 = 0; + local_20 = 0; + local_34 = 0; + uVar8 = local_24; + puVar9 = param_1 + 1; + while( true ) { + bVar10 = CARRY4(local_1c,uVar8); + local_1c = local_1c + uVar8; + local_18 = local_18 + (uint)bVar10; + iVar6 = local_20; + iVar1 = uVar7 - 1; + uVar2 = local_28; + uVar3 = uVar8; + if ((uVar8 <= local_24) && + (iVar6 = uVar7 - 1, iVar1 = local_34, uVar2 = uVar8, uVar3 = local_24, local_28 <= uVar8)) + { + iVar6 = local_20; + uVar2 = local_28; + } + local_24 = uVar3; + local_28 = uVar2; + local_34 = iVar1; + if (uVar4 <= uVar7) break; + uVar7 = uVar7 + 1; + uVar8 = (uint)*puVar9; + puVar9 = puVar9 + 1; + local_20 = iVar6; + } + } + *(int *)(this + 0x3848) = local_34; + *(int *)(this + 0x384c) = iVar6; + *(uint *)(this + 0x383c) = local_28; + *(uint *)(this + 0x3838) = local_24; + uVar5 = __aeabi_ldivmod(local_1c,local_18,uVar4,0); + *(undefined4 *)(this + 0x3840) = uVar5; + return; +} + + + +### FUNC GrayEnlarge @ 00028fbc + +/* CFunctions::GrayEnlarge() */ + +void __thiscall CFunctions::GrayEnlarge(CFunctions *this) + +{ + int iVar1; + uint uVar2; + uint uVar3; + uint uVar4; + uint uVar5; + + uVar4 = *(uint *)(this + 0x3838); + uVar5 = *(uint *)(this + 0x383c); + if (uVar5 == uVar4) { + *(uint *)(this + 0x3854) = uVar5; + *(uint *)(this + 0x3858) = uVar5; + __aeabi_memset4(this + 0x4074,0x400,0x80); + __aeabi_memset(*(undefined4 *)(this + 0xc0),*(undefined4 *)(this + 0x50f0),0x80); + __aeabi_memclr4(this + 0x3874,0x400); + *(undefined4 *)(this + 0x3a74) = *(undefined4 *)(this + 0x50f0); + __aeabi_memset(*(undefined4 *)(this + 200),*(undefined4 *)(this + 0x50f8),0x80); + *(undefined4 *)(this + 0x3864) = 1; + return; + } + if (*(int *)(this + 0xc) == 0) { + iVar1 = 0x3840; + if (*(int *)(this + 0x5c) != 0) { + SearchSeparateLine(this); + iVar1 = 0x447c; + uVar4 = *(uint *)(this + 0x3838); + uVar5 = *(uint *)(this + 0x383c); + } + iVar1 = *(int *)(this + iVar1); + uVar2 = CalContrastOffsetedAutoEnlargeRange(this); + uVar3 = iVar1 - (uVar2 >> 1); + if (uVar5 <= uVar3) { + uVar3 = uVar5; + } + *(uint *)(this + 0x3858) = uVar3; + uVar5 = (uVar2 >> 1) + iVar1; + if (uVar5 <= uVar4) { + uVar5 = uVar4; + } + *(uint *)(this + 0x3854) = uVar5; + if ((int)uVar3 < 0) { + *(undefined4 *)(this + 0x3858) = 0; + } + if (0xffff < (int)uVar5) { + *(undefined4 *)(this + 0x3854) = 0xffff; + } + HistDeRedundance(this); + if (*(int *)(this + 0x24) != 0) { + IsothermalPalette(this); + *(undefined4 *)(this + 0x4474) = 1; + goto LAB_000290e4; + } + if (*(int *)(this + 0x5108) == 0xb) { + DynamicRedPalette(this); + goto LAB_000290e4; + } + } + else { + SubSectionEnlarge(this); + } + if (*(int *)(this + 0x4474) != 0) { + __aeabi_memcpy(this + 0x24f4,this + 0x20cc,0x400); + __aeabi_memcpy(this + 0x291c,this + 0x20cc,0x400); + *(undefined4 *)(this + 0x4474) = 0; + } +LAB_000290e4: + MapTemperature((int)this); + return; +} + + + +### FUNC FilterDetailEnhancement_Simple @ 00029134 + +/* CFunctions::FilterDetailEnhancement_Simple(unsigned int) */ + +void __thiscall CFunctions::FilterDetailEnhancement_Simple(CFunctions *this,uint param_1) + +{ + uint uVar1; + CFunctions *pCVar2; + CFunctions *pCVar3; + int iVar4; + uint uVar5; + byte *pbVar6; + CFunctions *pCVar7; + ushort *puVar8; + int *piVar9; + int iVar10; + uint local_20; + + if (param_1 != 0) { + uVar1 = (uint)(*(int *)(this + 0x20) * 1000) >> (*(uint *)(this + 0x5104) & 0xff); + if (0xfffe < uVar1) { + uVar1 = 0xffff; + } + uVar1 = param_1 * uVar1 * 2 >> 8; + pCVar2 = this + 0x37ec; + pCVar3 = this + 0x37f0; + pCVar7 = this + 0xc4; + local_20 = 0; + do { + iVar4 = *(int *)pCVar2; + if (iVar4 != 6) { + iVar10 = 6 - iVar4; + puVar8 = (ushort *)(*(int *)(this + 0xb4) + iVar4 * local_20 * 2); + piVar9 = (int *)(*(int *)pCVar7 + iVar4 * (local_20 + 3) * 4 + 0xc); + do { + LocalMap7x7_Simple(this,piVar9,puVar8,uVar1); + iVar10 = iVar10 + 1; + puVar8 = puVar8 + 1; + piVar9 = piVar9 + 1; + } while (iVar10 != 0); + } + local_20 = local_20 + 2; + iVar4 = *(int *)pCVar3; + } while (local_20 <= iVar4 - 7U); + iVar10 = 7; + if (iVar4 != 7) { + uVar5 = 1; + do { + iVar10 = *(int *)pCVar2; + if (iVar10 != 6) { + iVar4 = 6 - iVar10; + puVar8 = (ushort *)(*(int *)(this + 0xb4) + iVar10 * uVar5 * 2); + piVar9 = (int *)(*(int *)pCVar7 + iVar10 * (uVar5 + 3) * 4 + 0xc); + do { + LocalMap7x7_Simple(this,piVar9,puVar8,uVar1); + iVar4 = iVar4 + 1; + puVar8 = puVar8 + 1; + piVar9 = piVar9 + 1; + } while (iVar4 != 0); + iVar4 = *(int *)pCVar3; + } + uVar5 = uVar5 + 2; + } while (uVar5 <= iVar4 - 7U); + iVar10 = iVar4; + if (iVar4 - 3U < 4) { + return; + } + } + uVar1 = 3; + do { + iVar4 = *(int *)pCVar2; + if (iVar4 != 6) { + iVar10 = 6 - iVar4; + piVar9 = (int *)(*(int *)pCVar7 + iVar4 * uVar1 * 4 + 0xc); + pbVar6 = (byte *)(*(int *)(this + 0xc0) + iVar4 * uVar1 + 3); + do { + iVar4 = *piVar9; + piVar9 = piVar9 + 1; + iVar4 = ((int)(param_1 * iVar4 + ((uint)((int)(param_1 * iVar4) >> 0x1f) >> 0x11)) >> 0xf) + + (uint)*pbVar6; + if (iVar4 < 1) { + iVar4 = 0; + } + if (0xfe < iVar4) { + iVar4 = 0xff; + } + *pbVar6 = (byte)iVar4; + iVar10 = iVar10 + 1; + pbVar6 = pbVar6 + 1; + } while (iVar10 != 0); + iVar10 = *(int *)pCVar3; + } + uVar1 = uVar1 + 1; + } while (uVar1 < iVar10 - 3U); + } + return; +} + + + +### FUNC FilterDetailEnhancement @ 000292a0 + +/* CFunctions::FilterDetailEnhancement(unsigned int) */ + +void __thiscall CFunctions::FilterDetailEnhancement(CFunctions *this,uint param_1) + +{ + uint uVar1; + uint uVar2; + CFunctions *pCVar3; + uint uVar4; + int iVar5; + int *piVar6; + int iVar7; + uint uVar8; + int iVar9; + int iVar10; + uint local_34; + int local_30; + uint local_24; + int local_20; + + if (param_1 != 0) { + __aeabi_memclr4(*(undefined4 *)(this + 0xc4),*(int *)(this + 0x50f0) << 2); + uVar1 = (uint)(*(int *)(this + 0x20) * 1000) >> (*(uint *)(this + 0x5104) & 0xff); + if (0xfffe < uVar1) { + uVar1 = 0xffff; + } + pCVar3 = this + 0x37ec; + uVar4 = *(uint *)(this + 0x37f0); + uVar8 = 6; + if (uVar4 != 6) { + iVar9 = 0; + local_30 = 0; + local_34 = 0; + do { + iVar5 = *(int *)pCVar3; + if (iVar5 != 6) { + iVar7 = iVar5 * iVar9; + iVar10 = iVar5 * local_30; + iVar5 = 6 - iVar5; + do { + LocalMap7x7(this,(int *)(*(int *)(this + 0xc4) + iVar10), + (ushort *)(*(int *)(this + 0xb4) + iVar7),param_1 * uVar1 * 2 >> 8); + iVar7 = iVar7 + 2; + iVar10 = iVar10 + 4; + iVar5 = iVar5 + 1; + } while (iVar5 != 0); + uVar4 = *(uint *)(this + 0x37f0); + } + iVar9 = iVar9 + 2; + local_30 = local_30 + 4; + local_34 = local_34 + 1; + } while (local_34 < uVar4 - 6); + uVar8 = uVar4; + if (uVar4 == 0) { + return; + } + } + local_20 = *(int *)(this + 0xc0); + piVar6 = *(int **)(this + 0xc4); + uVar1 = 0; + do { + if (uVar1 < 6) { + local_24 = (uVar1 >> 1) + 1; + } + else { + local_24 = 4; + if (uVar8 < uVar1 + 7) { + local_24 = (1 - uVar1) + uVar8 >> 1; + } + } + uVar4 = *(uint *)pCVar3; + if (uVar4 != 0) { + uVar8 = 0; + iVar9 = 1; + do { + if (uVar8 < 6) { + uVar2 = (uVar8 >> 1) + 1; + } + else { + uVar2 = 4; + if (uVar4 < uVar8 + 7) { + uVar2 = uVar4 + iVar9 >> 1; + } + } + iVar5 = 0x80000; + if (local_24 * uVar2 != 0x10) { + iVar5 = local_24 * uVar2 * 0x8000; + } + iVar7 = *piVar6; + piVar6 = piVar6 + 1; + iVar5 = __divsi3(param_1 * iVar7,iVar5); + iVar5 = iVar5 + (uint)*(byte *)(local_20 + uVar8); + if (iVar5 < 1) { + iVar5 = 0; + } + if (0xfe < iVar5) { + iVar5 = 0xff; + } + *(byte *)(local_20 + uVar8) = (byte)iVar5; + iVar9 = iVar9 + -1; + uVar8 = uVar8 + 1; + uVar4 = *(uint *)pCVar3; + } while (uVar8 < uVar4); + local_20 = local_20 + uVar8; + uVar8 = *(uint *)(this + 0x37f0); + } + uVar1 = uVar1 + 1; + } while (uVar1 < uVar8); + } + return; +} + + + +### FUNC CopyState @ 00029418 + +/* CFunctions::CopyState() */ + +void __thiscall CFunctions::CopyState(CFunctions *this) + +{ + undefined4 uVar1; + float extraout_s0; + float extraout_s0_00; + float extraout_s0_01; + + __aeabi_memcpy4(this + 0x4488,this + 0x3820,0xc68); + *(uint *)(this + 0x44c4) = (uint)*(ushort *)(this + 0x385c) << (*(uint *)(this + 0x5104) & 0xff); + *(uint *)(this + 0x44ac) = (uint)*(ushort *)(this + 0x3844) << (*(uint *)(this + 0x5104) & 0xff); + uVar1 = ReviseTemperature(this,*(ushort *)(this + 0x3840), + (*(uint *)(this + 0x37ec) >> 1) + (*(uint *)(this + 0x50f0) >> 1)); + *(undefined4 *)(this + 0x44a8) = uVar1; + uVar1 = ReviseTemperature(this,*(ushort *)(this + 0x3854), + (*(uint *)(this + 0x37ec) >> 1) + (*(uint *)(this + 0x50f0) >> 1)); + *(undefined4 *)(this + 0x44bc) = uVar1; + uVar1 = ReviseTemperature(this,*(ushort *)(this + 0x3838),*(uint *)(this + 0x44b0)); + *(undefined4 *)(this + 0x44a0) = uVar1; + uVar1 = ReviseTemperature(this,*(ushort *)(this + 0x3858), + (*(uint *)(this + 0x37ec) >> 1) + (*(uint *)(this + 0x50f0) >> 1)); + *(undefined4 *)(this + 0x44c0) = uVar1; + uVar1 = ReviseTemperature(this,*(ushort *)(this + 0x383c),*(uint *)(this + 0x44b4)); + *(undefined4 *)(this + 0x44a4) = uVar1; + if (*(int *)(this + 0x50) != 0) { + uVar1 = CorrectTemperature((int)this,extraout_s0,*(uint *)(this + 0x44a8)); + *(undefined4 *)(this + 0x44a8) = uVar1; + uVar1 = CorrectTemperature((int)this,extraout_s0_00,*(uint *)(this + 0x44a4)); + *(undefined4 *)(this + 0x44a4) = uVar1; + uVar1 = CorrectTemperature((int)this,extraout_s0_01,*(uint *)(this + 0x44a0)); + *(undefined4 *)(this + 0x44a0) = uVar1; + } + return; +} + + + +### FUNC ConvertDeltaInnerTemp2mC @ 0002954c + +/* CFunctions::ConvertDeltaInnerTemp2mC(unsigned short) const */ + +int __thiscall CFunctions::ConvertDeltaInnerTemp2mC(CFunctions *this,ushort param_1) + +{ + return (uint)param_1 << (*(uint *)(this + 0x5104) & 0xff); +} + + + +### FUNC ReviseTemperature @ 0002955c + +/* CFunctions::ReviseTemperature(unsigned short, unsigned int) */ + +int __thiscall CFunctions::ReviseTemperature(CFunctions *this,ushort param_1,uint param_2) + +{ + uint uVar1; + int iVar2; + int iVar3; + uint uVar4; + undefined4 uVar5; + undefined4 uVar6; + CFunctions *this_00; + int iVar7; + int iVar8; + int iVar9; + CFunctions *pCVar10; + int iVar11; + uint uVar12; + int iVar13; + int iVar14; + uint uVar15; + undefined4 uVar16; + float __x; + undefined8 uVar17; + int local_28; + + uVar15 = (uint)param_1; + if (*(int *)(this + 0x3128) == 0) { + iVar7 = (uVar15 << (*(uint *)(this + 0x5104) & 0xff)) + *(int *)(this + 0x5100); + } + else { + uVar1 = 0; + if (*(uint *)(this + 0x68) < *(uint *)(this + 0x312c)) { + uVar1 = *(uint *)(this + 0x68); + } + uVar16 = *(undefined4 *)(this + uVar1 * 0x21c + 0x3334); + iVar2 = __aeabi_fcmpgt(uVar16,0x3c23d70a); + iVar3 = __aeabi_fcmplt(uVar16,0x3f7d70a4); + local_28 = 0x111; + if (iVar2 != 0 && iVar3 != 0) { + iVar8 = *(int *)(this + 0x5100); + uVar4 = *(uint *)(this + 0x5104); + iVar13 = (uVar15 << (uVar4 & 0xff)) + iVar8; + iVar9 = iVar13 + 50000; + iVar7 = 0; + if (-0xe350 < iVar13) { + iVar7 = 0x111; + if (iVar13 < 0x217cb0) { + iVar7 = (int)(iVar9 + ((uint)(iVar9 >> 0x1f) >> 0x13)) >> 0xd; + } + } + iVar14 = *(int *)(T2E + iVar7 * 4); + iVar9 = (*(int *)(T2E + iVar7 * 4 + 4) - iVar14) * (iVar9 + iVar7 * -0x2000); + iVar11 = *(int *)(this + 0x40); + iVar13 = iVar11 + 50000; + iVar7 = 0; + if (-0xe350 < iVar11) { + iVar7 = 0x111; + if (iVar11 < 0x217cb0) { + iVar7 = (int)(iVar13 + ((uint)(iVar13 >> 0x1f) >> 0x13)) >> 0xd; + } + } + iVar13 = (*(int *)(T2E + iVar7 * 4 + 4) - *(int *)(T2E + iVar7 * 4)) * + (iVar13 + iVar7 * -0x2000); + uVar5 = __floatsisf(((int)(iVar13 + ((uint)(iVar13 >> 0x1f) >> 0x13)) >> 0xd) + + *(int *)(T2E + iVar7 * 4)); + uVar6 = __subsf3(0x3f800000,uVar16); + uVar5 = __mulsf3(uVar6,uVar5); + uVar6 = __floatsisf(((int)(iVar9 + ((uint)(iVar9 >> 0x1f) >> 0x13)) >> 0xd) + iVar14); + uVar5 = __subsf3(uVar6,uVar5); + __divsf3(uVar5,uVar16); + this_00 = (CFunctions *)__fixsfsi(); + pCVar10 = (CFunctions *)T2E._0_4_; + if ((int)T2E._0_4_ <= (int)this_00) { + pCVar10 = this_00; + } + iVar7 = Energe2Temp(this_00,(int)pCVar10); + uVar15 = iVar7 - iVar8 >> (uVar4 & 0xff); + } + uVar4 = 0; + if (*(int *)(this + uVar1 * 0x21c + 0x316c) != 1) { + uVar4 = 0; + do { + if ((int)uVar15 <= *(int *)(this + uVar4 * 4 + uVar1 * 0x21c + 0x3170)) break; + uVar4 = uVar4 + 1; + } while (uVar4 < *(int *)(this + uVar1 * 0x21c + 0x316c) - 1U); + } + iVar7 = uVar1 * 0x21c + 0x3204; + uVar17 = __muldi3(*(int *)(this + uVar4 * 8 + iVar7),*(int *)(this + uVar4 * 8 + iVar7) >> 0x1f, + uVar15,(int)uVar15 >> 0x1f); + iVar8 = (int)((ulonglong)uVar17 >> 0x20); + uVar12 = *(uint *)(this + uVar1 * 0x21c + 0x3160); + uVar15 = iVar8 >> (uVar12 - 0x20 & 0xff); + if ((int)(uVar12 - 0x20) < 0) { + uVar15 = (uint)uVar17 >> (uVar12 & 0xff) | iVar8 << (0x20 - uVar12 & 0xff); + } + iVar7 = *(int *)(this + (uVar4 * 8 | 4) + iVar7) + uVar15; + iVar8 = 0; + if (iVar2 == 0 || iVar3 == 0) { + iVar3 = *(int *)(this + 0x3c); + iVar2 = 0; + if (-0xe350 < iVar3) { + iVar2 = 0x111; + if (iVar3 < 0x217cb0) { + iVar2 = (int)(iVar3 + 50000 + ((uint)(iVar3 + 50000 >> 0x1f) >> 0x13)) >> 0xd; + } + } + iVar2 = (*(int *)(T2E + iVar2 * 4 + 4) - *(int *)(T2E + iVar2 * 4)) * + (((*(int *)(this + uVar1 * 0x21c + 0x3168) - *(int *)(this + uVar1 * 0x21c + 0x3164)) + + *(int *)(this + 0x38)) - iVar3); + iVar8 = (int)(iVar2 + ((uint)(iVar2 >> 0x1f) >> 0x13)) >> 0xd; + } + iVar2 = __aeabi_fcmpeq(*(undefined4 *)(this + uVar1 * 0x21c + 0x3344)); + if (iVar2 == 0) { + uVar15 = *(uint *)(this + 0x37ec); + iVar2 = __udivsi3(param_2,uVar15); + iVar3 = iVar2 - (*(uint *)(this + 0x37f0) >> 1); + iVar2 = (param_2 - uVar15 * iVar2) - (uVar15 >> 1); + __x = (float)__floatsisf(iVar2 * iVar2 + iVar3 * iVar3); + sqrtf(__x); + uVar16 = __mulsf3(); + iVar3 = iVar7 + 50000; + iVar2 = 0; + if (-0xe350 < iVar7) { + iVar2 = 0x111; + if (iVar7 < 0x217cb0) { + iVar2 = (int)(iVar3 + ((uint)(iVar3 >> 0x1f) >> 0x13)) >> 0xd; + } + } + iVar9 = (*(int *)(T2E + iVar2 * 4 + 4) - *(int *)(T2E + iVar2 * 4)) * + (iVar3 + iVar2 * -0x2000); + iVar11 = *(int *)(this + 0x40); + iVar13 = iVar11 + 50000; + iVar3 = 0; + if (-0xe350 < iVar11) { + iVar3 = 0x111; + if (iVar11 < 0x217cb0) { + iVar3 = (int)(iVar13 + ((uint)(iVar13 >> 0x1f) >> 0x13)) >> 0xd; + } + } + iVar13 = (*(int *)(T2E + iVar3 * 4 + 4) - *(int *)(T2E + iVar3 * 4)) * + (iVar13 + iVar3 * -0x2000); + uVar5 = __floatsisf(((((int)(iVar9 + ((uint)(iVar9 >> 0x1f) >> 0x13)) >> 0xd) + + *(int *)(T2E + iVar2 * 4)) - *(int *)(T2E + iVar3 * 4)) - + ((int)(iVar13 + ((uint)(iVar13 >> 0x1f) >> 0x13)) >> 0xd)); + __mulsf3(uVar16,uVar5); + iVar2 = __fixsfsi(); + iVar8 = iVar8 + iVar2; + } + iVar2 = 0; + if ((-0xe350 < iVar7) && (iVar2 = local_28, iVar7 < 0x217cb0)) { + iVar2 = (int)(iVar7 + 50000 + ((uint)(iVar7 + 50000 >> 0x1f) >> 0x13)) >> 0xd; + } + iVar7 = (*(int *)(E2TAccQ10 + iVar2 * 4) * -iVar8 >> 10) + iVar7; + } + return iVar7; +} + + + +### FUNC CorrectTemperature @ 000298f0 + +/* CFunctions::CorrectTemperature(int, float, unsigned int) const */ + +uint CFunctions::CorrectTemperature(int param_1,float param_2,uint param_3) + +{ + int iVar1; + int iVar2; + undefined4 uVar3; + undefined4 uVar4; + CFunctions *this; + uint uVar5; + undefined4 *puVar6; + int iVar7; + undefined4 in_r2; + int iVar8; + undefined4 uVar9; + int local_20; + + uVar9 = *(undefined4 *)(param_1 + 0x9c); + iVar1 = __aeabi_fcmple(uVar9,0); + if ((iVar1 == 0) && (iVar1 = __aeabi_fcmpgt(), iVar1 == 0)) { + local_20 = 0; + iVar1 = __aeabi_fcmple(); + if ((iVar1 == 0) && (iVar1 = __aeabi_fcmpgt(uVar9,0x3f800000), iVar1 == 0)) { + iVar2 = param_3 + 50000; + iVar1 = 0; + if (-0xe350 < (int)param_3) { + iVar1 = 0x111; + if ((int)param_3 < 0x217cb0) { + iVar1 = (int)(iVar2 + ((uint)(iVar2 >> 0x1f) >> 0x13)) >> 0xd; + } + } + iVar8 = *(int *)(T2E + iVar1 * 4); + iVar1 = (*(int *)(T2E + iVar1 * 4 + 4) - iVar8) * (iVar2 + iVar1 * -0x2000); + __mulsf3(*(undefined4 *)(param_1 + 0x80),0x447a0000); + iVar2 = __fixsfsi(); + iVar7 = iVar2 + 50000; + if (-0xe350 < iVar2) { + local_20 = 0x111; + if (iVar2 < 0x217cb0) { + local_20 = (int)(iVar7 + ((uint)(iVar7 >> 0x1f) >> 0x13)) >> 0xd; + } + } + iVar2 = (*(int *)(T2E + local_20 * 4 + 4) - *(int *)(T2E + local_20 * 4)) * + (iVar7 + local_20 * -0x2000); + uVar3 = __floatsisf(((int)(iVar2 + ((uint)(iVar2 >> 0x1f) >> 0x13)) >> 0xd) + + *(int *)(T2E + local_20 * 4)); + uVar9 = __mulsf3(uVar9,*(undefined4 *)(param_1 + 0xa0)); + uVar9 = __mulsf3(uVar9,in_r2); + uVar4 = __subsf3(0x3f800000,uVar9); + uVar3 = __mulsf3(uVar4,uVar3); + uVar4 = __floatsisf(((int)(iVar1 + ((uint)(iVar1 >> 0x1f) >> 0x13)) >> 0xd) + iVar8); + uVar3 = __subsf3(uVar4,uVar3); + __divsf3(uVar3,uVar9); + this = (CFunctions *)__fixsfsi(); + uVar5 = Energe2Temp(this,(int)this); + if (-0x42afe < (int)uVar5) { + return uVar5; + } + return 0xfffbd502; + } + } + puVar6 = (undefined4 *)__errno(); + *puVar6 = 0xe4ae0001; + return param_3; +} + + + +### FUNC length @ 00029a64 + +/* length(__sFILE*) */ + +long length(__sFILE *param_1) + +{ + long __off; + long lVar1; + + __off = ftell((FILE *)param_1); + fseek((FILE *)param_1,0,2); + lVar1 = ftell((FILE *)param_1); + fseek((FILE *)param_1,__off,0); + return lVar1; +} + + + +### FUNC LoadCalibrationTable @ 00029a98 + +/* CFunctions::LoadCalibrationTable(char const*) */ + +void __thiscall CFunctions::LoadCalibrationTable(CFunctions *this,char *param_1) + +{ + pthread_mutex_t *__mutex; + int iVar1; + MStream *pMVar2; + Logging *pLVar3; + FILE *__stream; + CFunctions *pCVar4; + CFunctions *pCVar5; + CFunctions *__ptr; + CFunctions *__ptr_00; + int iVar6; + int iVar7; + void *pvVar8; + void *pvVar9; + int iVar10; + long lVar11; + CFunctions *pCVar12; + CFunctions *pCVar13; + int iVar14; + uint uVar15; + size_t __n; + uint uVar16; + uint uVar17; + undefined4 uVar18; + CFunctions *pCVar19; + int iVar20; + CFunctions *pCVar21; + undefined4 local_98; + int local_94; + CFunctions *local_88; + int local_84; + Logging aLStack_80 [12]; + Logging aLStack_74 [12]; + Logging aLStack_68 [12]; + Logging aLStack_5c [12]; + int local_50; + Logging aLStack_4c [12]; + Logging aLStack_40 [12]; + Logging aLStack_34 [12]; + undefined4 local_28; + uint local_24; + int local_20; + int local_1c; + int local_18; + + local_18 = __stack_chk_guard; + __mutex = (pthread_mutex_t *)(this + 0xb0); + pthread_mutex_lock(__mutex); + pCVar12 = this + 0x2d1c; + if (*(void **)(this + 0x2f74) != (void *)0x0) { + operator_delete__(*(void **)(this + 0x2f74)); + *(undefined4 *)(this + 0x2f74) = 0; + } + if (*(void **)(this + 0x2f78) != (void *)0x0) { + operator_delete__(*(void **)(this + 0x2f78)); + *(undefined4 *)(this + 0x2f78) = 0; + } + if (*(void **)(this + 0x2f7c) != (void *)0x0) { + operator_delete__(*(void **)(this + 0x2f7c)); + *(undefined4 *)(this + 0x2f7c) = 0; + } + __aeabi_memclr4(pCVar12,0xa68); + pCVar13 = this + 0x3128; + if ((*(int *)(this + 0xa4) != 0) && (*param_1 != '\0')) { + iVar1 = access(param_1,0); + if (iVar1 == 0) { + __stream = fopen(param_1,"rb"); + if (__stream == (FILE *)0x0) { + pthread_mutex_unlock(__mutex); + pMVar2 = (MStream *)mag::Logging::Logging(aLStack_4c,4); + MStream::operator<<(pMVar2,"x3"); + pLVar3 = aLStack_4c; + } + else { + strncpy((char *)(this + 0x2d28),param_1,0x100); + this[0x2e27] = (CFunctions)0x0; + local_50 = 0; + fread(&local_50,4,1,__stream); + fread(&local_1c,4,1,__stream); + fread(&local_20,4,1,__stream); + pCVar4 = this + 0x2e2c; + fread(pCVar4,4,1,__stream); + pCVar5 = this + 0x2e28; + fread(pCVar5,4,1,__stream); + fread(&local_24,4,1,__stream); + fread(&local_28,4,1,__stream); + __ptr = this + 0x2e30; + fread(__ptr,4,1,__stream); + fread(this + 0x2e34,4,1,__stream); + if ((((local_50 == 0x5aa50003) && (*(size_t *)pCVar4 - 2 < 0x12)) && (*(int *)pCVar5 != 0)) + && ((local_24 != 0 && ((local_24 - 1 & local_24) == 0)))) { + if ((local_1c == *(int *)(this + 0x37ec)) && (local_20 == *(int *)(this + 0x37f0))) { + __ptr_00 = this + 0x2e38; + fread(__ptr_00,4,*(size_t *)pCVar4,__stream); + fread(this + 0x2e88,4,*(size_t *)pCVar4,__stream); + fread(this + 0x2ed8,4,*(size_t *)pCVar4,__stream); + fread(this + 0x2f28,4,*(int *)pCVar4 - 1,__stream); + std::ostream::_M_put_nowiden((ostream *)std::cout,"LoadCalibrationTable"); + std::ostream::_M_put_nowiden((ostream *)std::cout,":"); + std::ostream::_M_put_nowiden((ostream *)std::cout,"read stage 2\n"); + pCVar19 = this + 0x50f0; + iVar1 = *(int *)pCVar4; + uVar15 = 0; + pCVar21 = __ptr_00; +LAB_00029d24: + if (uVar15 < iVar1 - 1U) { + if (*(uint *)(pCVar21 + 0xf0) < *(uint *)pCVar19) goto code_r0x00029d32; + goto LAB_00029d3c; + } + iVar7 = *(int *)(this + 0x2e34) + *(int *)__ptr + + (*(int *)pCVar5 * 3 + -1) * *(int *)pCVar19 * 2; + uVar15 = 0; + iVar6 = 1; + if (iVar1 != 1) { + uVar16 = 0; + uVar15 = 0; + do { + uVar15 = *(int *)(this + uVar16 * 4 + 0x2f28) * 0x28 + uVar15; + uVar16 = uVar16 + 1; + iVar6 = iVar1; + } while (uVar16 < iVar1 - 1U); + } + iVar6 = uVar15 + iVar6 * (iVar7 + 0x10) + 0x20; + iVar1 = length((__sFILE *)__stream); + if (iVar1 < iVar6) { + std::ostream::_M_put_nowiden + ((ostream *)std::cout,"The calibration table length is not correct.\n"); + fclose(__stream); + pthread_mutex_unlock(__mutex); + pMVar2 = (MStream *)mag::Logging::Logging(aLStack_80,4); + MStream::operator<<(pMVar2,"x7"); + pLVar3 = aLStack_80; + goto LAB_00029b50; + } + iVar1 = length((__sFILE *)__stream); + pvVar8 = operator_new__(iVar7 * *(int *)pCVar4 + 3U & 0xfffffffc); + *(void **)(this + 0x2f74) = pvVar8; + pvVar8 = operator_new__(iVar7 + 3U & 0xfffffffc); + *(void **)(this + 0x2f78) = pvVar8; + if (uVar15 != 0) { + pvVar9 = operator_new__((uVar15 | 4) - 1 & 0xfffffff8); + *(void **)(this + 0x2f7c) = pvVar9; + } + *(void **)(this + 0x3114) = pvVar8; + *(uint *)(this + 0x3120) = + (int)pvVar8 + + (*(uint *)__ptr & 0xfffffffe) + *(int *)pCVar19 * (*(int *)pCVar5 + -1) * 2; + iVar10 = ftell(__stream); + *(int *)(this + 0x2fd0) = iVar10; + *(undefined4 *)(this + 0x3020) = 0; + uVar16 = *(uint *)pCVar4; + if (1 < uVar16) { + pCVar5 = this + 0x2fd4; + uVar17 = 1; + iVar20 = iVar7; + do { + *(int *)(pCVar5 + 0x50) = iVar20; + *(int *)pCVar5 = iVar10 + iVar20; + iVar20 = iVar20 + iVar7; + pCVar5 = pCVar5 + 4; + uVar17 = uVar17 + 1; + uVar16 = *(uint *)pCVar4; + } while (uVar17 < uVar16); + iVar10 = *(int *)(this + 0x2fd0); + } + *(undefined4 *)(this + 0x30bc) = 0; + iVar10 = iVar10 + uVar16 * iVar7; + *(int *)(this + 0x3070) = iVar10; + if (1 < uVar16 - 1) { + local_88 = this + 0x2f28; + pCVar5 = this + 0x30c0; + iVar20 = 0; + uVar17 = 1; + do { + iVar14 = *(int *)local_88; + local_88 = local_88 + 4; + iVar10 = iVar14 * 0x28 + iVar10; + *(int *)(pCVar5 + -0x4c) = iVar10; + iVar20 = iVar14 * 0x28 + iVar20; + *(int *)pCVar5 = iVar20; + pCVar5 = pCVar5 + 4; + uVar17 = uVar17 + 1; + uVar16 = *(uint *)pCVar4; + } while (uVar17 < uVar16 - 1); + } + if (iVar6 < iVar1) { + fseek(__stream,uVar16 * iVar7 + uVar15,1); + iVar1 = length((__sFILE *)__stream); + lVar11 = ftell(__stream); + *(undefined4 *)(this + 0x312c) = 0; + pCVar4 = this + 0x312c; + local_88 = (CFunctions *)(iVar1 - lVar11); + if (0x43 < (int)local_88) { + while( true ) { + local_84 = 0; + fread(&local_84,4,1,__stream); + if (local_84 != 0x6bb60001) break; + iVar1 = *(int *)pCVar4; + fread(this + iVar1 * 0x21c + 0x3130,1,0x20,__stream); + this[iVar1 * 0x21c + 0x314e] = (CFunctions)0x0; + this[iVar1 * 0x21c + 0x314f] = (CFunctions)0x0; + fread(this + iVar1 * 0x21c + 0x3150,4,1,__stream); + fread(this + iVar1 * 0x21c + 0x3154,4,1,__stream); + fread(this + iVar1 * 0x21c + 0x3158,4,1,__stream); + fread(this + iVar1 * 0x21c + 0x315c,4,1,__stream); + fread(this + iVar1 * 0x21c + 0x3160,4,1,__stream); + fread(this + iVar1 * 0x21c + 0x3168,4,1,__stream); + fread(this + iVar1 * 0x21c + 0x3164,4,1,__stream); + pCVar5 = this + iVar1 * 0x21c + 0x316c; + fread(pCVar5,4,1,__stream); + if (0xf < *(uint *)(this + iVar1 * 0x21c + 0x3160)) break; + __n = *(uint *)pCVar5 - 1; + if (0x18 < __n) break; + if ((int)local_88 < 0x21c) { + iVar6 = 1; + if (1 < *(uint *)pCVar5) { + fread(this + iVar1 * 0x21c + 0x3170,4,__n,__stream); + iVar6 = *(int *)pCVar5; + } + fread(this + iVar1 * 0x21c + 0x3204,4,iVar6 << 1,__stream); + uVar18 = 0x3f800000; + *(undefined4 *)(this + iVar1 * 0x21c + 0x3334) = 0x3f800000; + local_88 = (CFunctions *)((int)local_88 + *(int *)pCVar5 * -0xc + -0x40); + } + else { + fread(this + iVar1 * 0x21c + 0x3170,4,0x19,__stream); + fread(this + iVar1 * 0x21c + 0x31d4,4,2,__stream); + fread(this + iVar1 * 0x21c + 0x31dc,4,10,__stream); + fread(this + iVar1 * 0x21c + 0x3204,4,0x32,__stream); + fread(this + iVar1 * 0x21c + 0x32cc,4,0x1a,__stream); + fread(this + iVar1 * 0x21c + 0x3334,4,1,__stream); + fread(this + iVar1 * 0x21c + 0x3338,4,2,__stream); + fread(this + iVar1 * 0x21c + 0x3340,4,1,__stream); + fread(this + iVar1 * 0x21c + 0x3344,4,1,__stream); + fread(this + iVar1 * 0x21c + 0x3348,4,1,__stream); + local_88 = (CFunctions *)((int)local_88 + -0x220); + uVar18 = *(undefined4 *)(this + iVar1 * 0x21c + 0x3334); + } + iVar6 = __aeabi_fcmple(uVar18); + if ((iVar6 != 0) || (iVar6 = __aeabi_fcmpgt(uVar18,0x3f800000), iVar6 != 0)) { + *(undefined4 *)(this + iVar1 * 0x21c + 0x3334) = 0x3f800000; + } + uVar18 = *(undefined4 *)(this + iVar1 * 0x21c + 0x3344); + iVar6 = __aeabi_fcmplt(uVar18,0xbba3d70a); + if ((iVar6 != 0) || (iVar6 = __aeabi_fcmpgt(uVar18,0x3ba3d70a), iVar6 != 0)) { + *(undefined4 *)(this + iVar1 * 0x21c + 0x3344) = 0; + } + *(int *)pCVar4 = *(int *)pCVar4 + 1; + *(undefined4 *)pCVar13 = 1; + std::ostream::_M_put_nowiden((ostream *)std::cout,"Found Lens: "); + std::ostream::_M_put_nowiden + ((ostream *)std::cout,(char *)(this + iVar1 * 0x21c + 0x3130)); + std::ostream::put((ostream *)std::cout,'\n'); + std::ostream::flush((ostream *)std::cout); + if (((int)local_88 < 0x44) || (2 < *(uint *)pCVar4)) break; + } + } + } + else if (uVar16 == 2) { + local_88 = *(CFunctions **)(this + 0x2e3c); + local_94 = *(int *)__ptr_00; + if ((int)local_88 - local_94 == 50000) goto LAB_0002a320; + } + else if (uVar16 == 1) { + local_88 = *(CFunctions **)(this + 0x2e3c); + local_94 = *(int *)__ptr_00; +LAB_0002a320: + *(undefined4 *)(this + 0x2d20) = 1; + __aeabi_memclr4(pCVar13,0x65c); + *(undefined4 *)pCVar13 = 1; + *(undefined4 *)(this + 0x312c) = 1; + __aeabi_memcpy(this + 0x3130,"Default Lens",0xd); + *(undefined4 *)(this + 0x3150) = 0x3e99999a; + *(undefined4 *)(this + 0x3154) = 0x3f800000; + *(undefined4 *)(this + 0x3158) = 0x40000000; + *(undefined4 *)(this + 0x315c) = 0x3fc00000; + iVar1 = (local_94 + (int)local_88) / 2; + *(int *)(this + 0x3164) = iVar1; + *(int *)(this + 0x3168) = iVar1 + -500; + *(undefined4 *)(this + 0x316c) = 1; + *(undefined4 *)(this + 0x3334) = 0x3f800000; + *(undefined4 *)(this + 0x3204) = *(undefined4 *)(this + 0x50fc); + *(undefined4 *)(this + 0x3208) = *(undefined4 *)(this + 0x5100); + *(char **)(this + 0x333c) = "NKSt6localeeqERKS_"; + *(undefined4 *)(this + 0x3338) = 0; + } + *(uint *)(this + 0x50fc) = local_24; + *(undefined4 *)(this + 0x5100) = local_28; + uVar15 = 0; + do { + if (1 << (uVar15 & 0xff) == local_24) { + *(uint *)(this + 0x5104) = uVar15; + break; + } + uVar15 = uVar15 + 1; + } while (uVar15 < 0x20); + *(undefined4 *)pCVar12 = 1; + fclose(__stream); + pthread_mutex_unlock(__mutex); + local_98 = *(undefined4 *)pCVar12; + goto LAB_00029c82; + } + std::ostream::_M_put_nowiden + ((ostream *)std::cout,"The calibration table size mismatch FPA.\n"); + fclose(__stream); + pthread_mutex_unlock(__mutex); + pMVar2 = (MStream *)mag::Logging::Logging(aLStack_68,4); + MStream::operator<<(pMVar2,"x5"); + pLVar3 = aLStack_68; + } + else { + std::ostream::_M_put_nowiden + ((ostream *)std::cout,"The calibration table data is not correct.\n"); + fclose(__stream); + pthread_mutex_unlock(__mutex); + pMVar2 = (MStream *)mag::Logging::Logging(aLStack_5c,4); + MStream::operator<<(pMVar2,"x4"); + pLVar3 = aLStack_5c; + } + } + } + else { + pthread_mutex_unlock(__mutex); + pMVar2 = (MStream *)mag::Logging::Logging(aLStack_40,4); + MStream::operator<<(pMVar2,"x2"); + pLVar3 = aLStack_40; + } + local_98 = 0; + mag::Logging::~Logging(pLVar3); + goto LAB_00029c82; + } + pthread_mutex_unlock(__mutex); + pMVar2 = (MStream *)mag::Logging::Logging(aLStack_34,4); + MStream::operator<<(pMVar2,"x1"); + pLVar3 = aLStack_34; +LAB_00029b50: + mag::Logging::~Logging(pLVar3); + local_98 = 0; +LAB_00029c82: + if (__stack_chk_guard == local_18) { + return; + } + /* WARNING: Subroutine does not return */ + __stack_chk_fail(local_98); +code_r0x00029d32: + uVar15 = uVar15 + 1; + iVar6 = *(int *)pCVar21; + pCVar21 = pCVar21 + 4; + if (*(int *)pCVar21 <= iVar6) goto LAB_00029d3c; + goto LAB_00029d24; +LAB_00029d3c: + std::ostream::_M_put_nowiden((ostream *)std::cout,"The calibration table data is not correct.\n"); + fclose(__stream); + pthread_mutex_unlock(__mutex); + pMVar2 = (MStream *)mag::Logging::Logging(aLStack_74,4); + MStream::operator<<(pMVar2,"x6"); + pLVar3 = aLStack_74; + goto LAB_00029b50; +} + + + +### FUNC ConvertmC2InnerTemp @ 0002a4e8 + +/* CFunctions::ConvertmC2InnerTemp(int) const */ + +uint __thiscall CFunctions::ConvertmC2InnerTemp(CFunctions *this,int param_1) + +{ + uint uVar1; + + uVar1 = param_1 - *(int *)(this + 0x5100) >> (*(uint *)(this + 0x5104) & 0xff); + if ((int)uVar1 < 1) { + uVar1 = 0; + } + if (0xfffe < (int)uVar1) { + uVar1 = 0xffff; + } + return uVar1 & 0xffff; +} + + + +### FUNC FindMaxTemperature @ 0002a514 + +/* CFunctions::FindMaxTemperature() */ + +void __thiscall CFunctions::FindMaxTemperature(CFunctions *this) + +{ + ushort uVar1; + ushort uVar2; + int iVar3; + ushort *puVar4; + + iVar3 = *(int *)(this + 0x50f0); + puVar4 = *(ushort **)(this + 0xb4); + uVar2 = *puVar4; + if ((iVar3 != 0) && (iVar3 != 1)) { + iVar3 = 1 - iVar3; + do { + puVar4 = puVar4 + 1; + uVar1 = *puVar4; + if (*puVar4 <= uVar2) { + uVar1 = uVar2; + } + uVar2 = uVar1; + iVar3 = iVar3 + 1; + } while (iVar3 != 0); + } + *(uint *)(this + 0x3838) = (uint)uVar2; + return; +} + + + +### FUNC CalContrastOffsetedAutoEnlargeRange @ 0002a560 + +/* CFunctions::CalContrastOffsetedAutoEnlargeRange() */ + +int __thiscall CFunctions::CalContrastOffsetedAutoEnlargeRange(CFunctions *this) + +{ + int iVar1; + undefined4 uVar2; + int iVar3; + int iVar4; + uint uVar5; + undefined4 uVar6; + + iVar3 = *(int *)(this + 0x30); + iVar1 = iVar3; + if (99 < iVar3) { + iVar1 = 100; + } + iVar4 = iVar3; + if (iVar3 < -99) { + iVar4 = -100; + } + if (iVar3 < 0) { + iVar1 = iVar4; + } + uVar5 = (uint)(*(int *)(this + 0x20) * 1000) >> (*(uint *)(this + 0x5104) & 0xff); + if (0xfffe < uVar5) { + uVar5 = 0xffff; + } + iVar1 = __divsi3(uVar5 * iVar1,(iVar3 >> 0x1f & 0xffffff9cU) + 0x96); + iVar1 = uVar5 - iVar1; + if (*(int *)(this + 0x2d1c) != 0) { + uVar6 = *(undefined4 *)(this + 0x6c); + iVar3 = __aeabi_fcmpgt(uVar6,0); + if (iVar3 != 0) { + if (*(int *)(this + 0x2e2c) == 2) { + iVar3 = *(int *)(this + 0x2e38); + iVar4 = *(int *)(this + 0x2e3c); + if (iVar4 - iVar3 != 50000) goto LAB_0002a610; + } + else { + if (*(int *)(this + 0x2e2c) != 1) goto LAB_0002a610; + iVar3 = *(int *)(this + 0x2e38); + iVar4 = *(int *)(this + 0x2e3c); + } + uVar2 = __floatsisf(iVar1 * (*(int *)(this + 0x38) - (iVar3 + iVar4) / 2)); + uVar6 = __mulsf3(uVar6,uVar2); + __divsf3(uVar6,0x447a0000); + iVar3 = __fixsfsi(); + iVar1 = iVar1 + iVar3; + } + } +LAB_0002a610: + if (iVar1 < 0x81) { + iVar1 = 0x80; + } + return iVar1; +} + + + +### FUNC SubSectionEnlarge @ 0002a640 + +/* CFunctions::SubSectionEnlarge() */ + +void __thiscall CFunctions::SubSectionEnlarge(CFunctions *this) + +{ + int iVar1; + int iVar2; + int iVar3; + uint uVar4; + uint uVar5; + uint uVar6; + int iVar7; + CFunctions CVar8; + int iVar9; + uint uVar10; + bool bVar11; + int local_30; + int local_28; + int local_1c; + + if ((*(uint *)(this + 0x18) < *(uint *)(this + 0x1c)) && + (*(int *)(this + 0x10) < *(int *)(this + 0x14))) { + iVar2 = SearchInnerTemp(this,*(int *)(this + 0x10)); + iVar3 = SearchInnerTemp(this,*(int *)(this + 0x14)); + iVar7 = iVar3; + if (iVar3 <= *(int *)(this + 0x3838)) { + iVar7 = *(int *)(this + 0x3838); + } + *(int *)(this + 0x3854) = iVar7; + iVar9 = iVar2; + if (*(int *)(this + 0x383c) <= iVar2) { + iVar9 = *(int *)(this + 0x383c); + } + *(int *)(this + 0x3858) = iVar9; + uVar10 = iVar7 - iVar9; + uVar4 = (iVar2 - iVar9) * 0x3ff; + uVar5 = __udivsi3(uVar4,uVar10); + uVar6 = __udivsi3((iVar3 - iVar9) * 0x3ff,uVar10); + iVar7 = *(int *)(this + 0x18); + iVar2 = *(int *)(this + 0x1c); + iVar3 = iVar2 * 4; + iVar9 = 0; + local_1c = 0; + if (uVar10 <= uVar4) { + local_1c = __udivsi3(iVar7 << 0x18,uVar5); + } + local_28 = 0; + if (uVar5 < uVar6) { + local_28 = __udivsi3((iVar3 + iVar7 * -4) * 0x400000,uVar6 - uVar5); + } + local_30 = 0; + if (uVar6 < 0x3ff) { + local_30 = __udivsi3((iVar2 * -4 + 0x3ff) * 0x400000,0x3ff - uVar6); + } + uVar4 = 0; + do { + if (uVar5 < uVar4) { + uVar10 = uVar5; + iVar2 = local_28; + iVar1 = iVar7 * 4; + if (uVar6 <= uVar4) { + uVar10 = uVar6; + iVar2 = local_30; + iVar1 = iVar3; + } + CVar8 = SUB41(((uVar4 - uVar10) * iVar2 >> 0x16) + iVar1 >> 2,0); + } + else { + CVar8 = SUB41((uint)iVar9 >> 0x18,0); + } + this[uVar4 + 0x4074] = CVar8; + iVar9 = iVar9 + local_1c; + bVar11 = uVar4 != 0x3ff; + uVar4 = uVar4 + 1; + } while (bVar11); + } + return; +} + + + +### FUNC SearchSeparateLine @ 0002a768 + +/* WARNING: Restarted to delay deadcode elimination for space: stack */ +/* CFunctions::SearchSeparateLine() */ + +void __thiscall CFunctions::SearchSeparateLine(CFunctions *this) + +{ + int iVar1; + int iVar2; + undefined4 uVar3; + undefined4 uVar4; + undefined4 uVar5; + undefined4 uVar6; + int iVar7; + undefined4 uVar8; + int iVar9; + ushort *puVar10; + uint uVar11; + int *piVar12; + uint uVar13; + uint uVar14; + uint uVar15; + ushort *puVar16; + uint uVar17; + bool bVar18; + int local_2030; + uint local_202c; + int *local_2028; + int aiStack_2018 [1024]; + int local_1018 [1025]; + + iVar1 = __stack_chk_guard; + uVar15 = *(uint *)(this + 0x37f0); + uVar17 = 0; + uVar13 = 0; + uVar14 = uVar13; + if (uVar15 != 0) { + puVar16 = *(ushort **)(this + 0xb4); + uVar13 = *(uint *)(this + 0x37ec); + uVar14 = 0; + local_2030 = 0; + do { + iVar2 = local_2030; + if (uVar13 >> 2 != 0) { + iVar2 = 0; + iVar9 = -(uVar13 >> 2); + puVar10 = puVar16; + do { + iVar2 = iVar2 + (uint)*puVar10 + (uint)puVar10[1] + (uint)puVar10[2] + (uint)puVar10[3]; + puVar10 = puVar10 + 4; + iVar9 = iVar9 + 1; + } while (iVar9 != 0); + puVar16 = puVar16 + (uVar13 & 0xfffffffc); + } + iVar2 = __udivsi3(iVar2,uVar13); + local_1018[uVar14] = iVar2; + uVar14 = uVar14 + 1; + } while (uVar14 < uVar15); + uVar17 = uVar15 * 7 >> 3; + uVar13 = 0; + for (uVar11 = uVar15 >> 2; uVar14 = uVar13, uVar11 != 0; uVar11 = uVar11 - 1) { + uVar13 = uVar15 >> 2; + } + } + for (; uVar13 < uVar15; uVar13 = uVar13 + 1) { + } + if (uVar17 < uVar14) { +LAB_0002aa1c: + *(uint *)(this + 0x4478) = uVar15 - 1; + } + else { + local_2028 = aiStack_2018 + uVar14; + uVar13 = uVar15 - 1; + local_202c = uVar13 - uVar14; + uVar8 = __floatunsisf(uVar15); + iVar2 = 0; + do { + uVar3 = __floatunsisf(uVar14 + iVar2 + 1); + uVar4 = __divsf3(uVar3,uVar8); + uVar5 = __floatunsisf(); + uVar3 = __divsf3(uVar5,uVar3); + uVar5 = __floatunsisf(); + uVar6 = __floatunsisf(local_202c); + uVar5 = __divsf3(uVar5,uVar6); + uVar6 = __subsf3(0x3f800000,uVar4); + uVar4 = __mulsf3(uVar4,uVar6); + uVar3 = __subsf3(uVar3,uVar5); + uVar4 = __mulsf3(uVar4,uVar3); + iVar9 = __mulsf3(uVar3,uVar4); + *local_2028 = iVar9; + local_2028 = local_2028 + 1; + iVar2 = iVar2 + 1; + local_202c = local_202c + -1; + } while (uVar14 + ~uVar17 + iVar2 != 0); + if (uVar17 < uVar14) goto LAB_0002aa1c; + local_202c = uVar14; + if (uVar14 != uVar17) { + iVar2 = aiStack_2018[uVar14]; + iVar9 = __unordsf2(iVar2,iVar2); + bVar18 = iVar9 != 0; + piVar12 = local_1018 + (uVar14 - 0x3ff); + uVar11 = uVar14; + local_2028 = (int *)iVar2; + do { + if (!bVar18) { + local_2028 = (int *)iVar2; + } + iVar2 = *piVar12; + piVar12 = piVar12 + 1; + iVar9 = __aeabi_fcmple(local_2028,iVar2); + iVar7 = __aeabi_fcmple(local_2028,iVar2); + uVar11 = uVar11 + 1; + if (iVar7 != 0) { + local_202c = uVar11; + } + bVar18 = iVar9 == 0; + } while (uVar17 != uVar11); + } + if ((local_202c == uVar14) || (local_202c == uVar17)) goto LAB_0002aa1c; + uVar17 = 0; + iVar2 = 0; + do { + iVar2 = local_1018[uVar17] + iVar2; + uVar17 = uVar17 + 1; + } while (uVar17 <= local_202c); + uVar17 = local_202c + 1; + iVar9 = 0; + if (uVar17 < uVar15) { + iVar9 = 0; + do { + iVar9 = local_1018[uVar17] + iVar9; + uVar17 = uVar17 + 1; + } while (uVar17 < uVar15); + } + iVar2 = __udivsi3(iVar2); + iVar9 = __udivsi3(iVar9,uVar15 + (local_202c ^ 0xffffffff)); + uVar17 = iVar2 - iVar9 >> 0x1f; + if ((iVar9 <= iVar2) && (iVar9 + iVar2 <= (int)(((iVar2 - iVar9) + uVar17 ^ uVar17) * 0x80))) { + *(int *)(this + 0x4480) = local_1018[local_202c]; + uVar17 = *(uint *)(this + 0x4478); + if ((uVar14 < uVar17) && (uVar17 <= uVar13)) { + uVar15 = uVar15 >> 7; + if (uVar15 < 2) { + uVar15 = 1; + } + uVar13 = uVar15 + uVar17; + if (local_202c <= uVar15 + uVar17) { + uVar13 = local_202c; + } + local_202c = uVar17 - uVar15; + if (uVar17 - uVar15 <= uVar13) { + local_202c = uVar13; + } + } + uVar13 = 0; + iVar2 = 0; + do { + iVar2 = local_1018[uVar13] + iVar2; + uVar13 = uVar13 + 1; + } while (uVar13 <= local_202c); + *(uint *)(this + 0x4478) = local_202c; + uVar8 = __udivsi3(iVar2,local_202c + 1); + goto LAB_0002aa34; + } + *(uint *)(this + 0x4478) = uVar13; + } + *(undefined4 *)(this + 0x4480) = 0; + uVar8 = *(undefined4 *)(this + 0x3840); +LAB_0002aa34: + *(undefined4 *)(this + 0x447c) = uVar8; + if (__stack_chk_guard == iVar1) { + return; + } + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); +} + + + +### FUNC HistDeRedundance @ 0002aaa0 + +/* WARNING: Restarted to delay deadcode elimination for space: stack */ +/* CFunctions::HistDeRedundance() */ + +void __thiscall CFunctions::HistDeRedundance(CFunctions *this) + +{ + int iVar1; + CFunctions *pCVar2; + int iVar3; + int iVar4; + CFunctions *pCVar5; + int iVar6; + ushort *puVar7; + uint *puVar8; + uint uVar9; + int iVar10; + uint uVar11; + int iVar12; + int iVar13; + uint uVar14; + uint uVar15; + uint uVar16; + uint uVar17; + bool bVar18; + uint local_1034; + uint local_1024; + uint local_1018 [1025]; + + iVar1 = __stack_chk_guard; + uVar15 = *(uint *)(this + 0x50f0); + pCVar2 = this + 0xcc; + iVar6 = *(int *)(this + 0x5c); + if ((iVar6 != 0) && (*(int *)(this + 0xc) == 0)) { + uVar15 = *(int *)(this + 0x37ec) * (*(int *)(this + 0x4478) + 1); + } + iVar3 = *(int *)(this + 0x3854); + iVar13 = *(int *)(this + 0x3858); + __aeabi_memclr4(pCVar2,0x1000); + iVar4 = __udivsi3(0xffc00000); + local_1024 = uVar15 >> 0xc; + if (local_1024 < 2) { + local_1024 = 1; + } + if (uVar15 != 0) { + puVar7 = *(ushort **)(this + 0xb4); + do { + uVar11 = iVar4 * ((uint)*puVar7 - iVar13) >> 0x14 & 0xffc; + *(int *)(this + uVar11 + 0xcc) = *(int *)(this + uVar11 + 0xcc) + 1; + uVar15 = uVar15 - 1; + puVar7 = puVar7 + 1; + } while (uVar15 != 0); + } + if (((iVar6 != 0) && (*(int *)(this + 0xc) == 0)) && + (*(uint *)(this + 0x4478) < *(int *)(this + 0x37f0) - 1U)) { + iVar12 = *(int *)(this + 0x447c) * 0x1f; + iVar10 = *(int *)(this + 0x4480); + iVar4 = iVar12 + iVar10 * -0x20; + if (iVar4 == 0 || iVar4 < 0 != SBORROW4(iVar12,iVar10 * 0x20)) { + iVar3 = *(int *)(this + 0x447c) * 0x21; + if (iVar3 + iVar10 * -0x20 < 0 == SBORROW4(iVar3,iVar10 * 0x20)) goto LAB_0002abbe; + iVar3 = 0x1000; + } + else { + uVar15 = (iVar10 - iVar13) * 0x3ff; + uVar11 = __udivsi3(uVar15,iVar3 - iVar13); + if (uVar15 < (uint)(iVar3 - iVar13)) goto LAB_0002abbe; + if (uVar11 < 2) { + uVar11 = 1; + } + iVar3 = uVar11 << 2; + } + __aeabi_memclr4(pCVar2,iVar3); + } +LAB_0002abbe: + pCVar5 = this + 0x447c; + if (iVar6 == 0) { + pCVar5 = this + 0x3840; + } + iVar6 = *(int *)(this + 0x3858); + uVar14 = (*(int *)pCVar5 - iVar6) * 0x3ff; + uVar16 = *(int *)(this + 0x3854) - iVar6; + uVar11 = __udivsi3(uVar14,uVar16); + uVar15 = uVar11; + if (*(int *)(this + 0x60) != 0) { + iVar6 = 0; + iVar3 = 0; + if (uVar16 <= uVar14) { + uVar14 = 0; + iVar3 = 0; + iVar6 = 0; + do { + iVar3 = *(int *)(pCVar2 + uVar14 * 4) + iVar3; + iVar6 = uVar14 * *(int *)(pCVar2 + uVar14 * 4) + iVar6; + uVar14 = uVar14 + 1; + } while (uVar14 < uVar11); + } + if ((int)(uVar11 + 1) < 0x400) { + iVar10 = 0; + iVar13 = 0; + iVar4 = uVar11 + 1; + do { + iVar10 = *(int *)(this + iVar4 * 4 + 0xcc) + iVar10; + iVar13 = iVar4 * *(int *)(this + iVar4 * 4 + 0xcc) + iVar13; + bVar18 = iVar4 != 0x3ff; + iVar4 = iVar4 + 1; + } while (bVar18); + if ((iVar3 != 0) && (iVar10 != 0)) { + iVar6 = __udivsi3(iVar6); + iVar3 = __udivsi3(iVar13,iVar10); + uVar15 = (uint)(iVar3 + iVar6) >> 1; + if (uVar15 <= uVar11) { + uVar15 = uVar11; + } + } + } + } + iVar6 = *(int *)(this + 0x2c); + if (99 < iVar6) { + iVar6 = 100; + } + if (iVar6 < -99) { + iVar6 = -100; + } + iVar4 = 0; + iVar3 = *(int *)pCVar2; + do { + iVar13 = iVar4 * -4; + *(uint *)(this + iVar4 * -4 + 0xcc) = (uint)(*(int *)(this + iVar13 + 0xd0) + iVar3) >> 1; + iVar4 = iVar4 + -1; + iVar3 = *(int *)(this + iVar13 + 0xd0); + } while (iVar4 != -0x3ff); + *(undefined4 *)(this + 0x10c8) = *(undefined4 *)(this + 0x10c4); + iVar6 = __divsi3(iVar6 * 0x1bf); + local_1034 = 1; + iVar3 = __udivsi3(0x10000,local_1024); + if (-1 < (int)uVar15) { + iVar4 = 0; + uVar14 = 0; + uVar11 = uVar15; + do { + uVar16 = *(int *)(this + uVar11 * 4 + 0xcc) + uVar14; + uVar14 = uVar16; + if (local_1024 <= uVar16) { + uVar14 = 0; + } + iVar4 = iVar4 + (uVar16 < local_1024 ^ 1); + *(uint *)(this + uVar11 * 4 + 0x10cc) = iVar4 * 0x100 + (uVar14 * iVar3 >> 8); + bVar18 = 0 < (int)uVar11; + uVar11 = uVar11 - 1; + } while (bVar18); + } + iVar4 = 0x400; + if ((int)(uVar15 + 1) < 0x400) { + uVar14 = 0; + iVar13 = 0; + uVar11 = uVar15; + do { + uVar14 = *(int *)(this + uVar11 * 4 + 0xd0) + uVar14; + if (uVar14 < local_1024 << 3) { + iVar13 = iVar13 + (uVar14 < local_1024 ^ 1); + if (local_1024 <= uVar14) { + uVar14 = 0; + } + } + else { + iVar13 = iVar13 + 2; + uVar14 = 0; + } + *(uint *)(this + uVar11 * 4 + 0x10d0) = (uVar14 * iVar3 >> 8) + iVar13 * 0x100; + uVar11 = uVar11 + 1; + } while ((int)uVar11 < 0x3ff); + } + uVar14 = CalContrastOffsetedAutoEnlargeRange(this); + uVar16 = (*(int *)(this + 0x3854) - *(int *)(this + 0x3858)) * 0x10; + uVar11 = __udivsi3(uVar16,uVar14); + if (0x1ff < uVar11) { + uVar11 = 0x200; + } + if (uVar14 <= uVar16) { + local_1034 = uVar11; + } + puVar8 = local_1018; + uVar11 = local_1034 * 0x1800; + do { + uVar14 = uVar11 >> 0xd; + if (uVar14 == 0) { + uVar14 = 1; + } + *puVar8 = uVar14; + puVar8 = puVar8 + 1; + iVar4 = iVar4 + -1; + uVar11 = uVar11 + local_1034 * 4; + } while (iVar4 != 0); + if (*(int *)(this + 0x10cc) != 0) { + iVar3 = __udivsi3((iVar6 + 0x1c0) * 0x40000); + uVar16 = (iVar6 + 0x1c0) * 0x10; + uVar11 = uVar15; + uVar14 = uVar16; + if (-1 < (int)uVar15) { + do { + uVar9 = uVar16 - ((uint)(iVar3 * *(int *)(this + uVar11 * 4 + 0x10cc)) >> 0xe); + uVar17 = uVar14 - local_1018[uVar11]; + if (uVar14 - uVar9 <= local_1018[uVar11]) { + uVar17 = uVar9; + } + this[uVar11 + 0x4074] = SUB41(uVar17 >> 6,0); + bVar18 = 0 < (int)uVar11; + uVar11 = uVar11 - 1; + uVar14 = uVar17; + } while (bVar18); + } + } + if (*(int *)(this + 0x20c8) != 0) { + iVar3 = __udivsi3((0x240 - iVar6) * 0x40000); + uVar14 = iVar6 * 0x10 + 0x1bf0; + uVar11 = uVar14; + if ((int)(uVar15 + 1) < 0x400) { + do { + uVar17 = ((uint)(iVar3 * *(int *)(this + uVar15 * 4 + 0x10d0)) >> 0xe) + uVar14; + uVar16 = local_1018[uVar15 + 1] + uVar11; + if (uVar17 - uVar11 <= local_1018[uVar15 + 1]) { + uVar16 = uVar17; + } + this[uVar15 + 0x4075] = SUB41(uVar16 >> 6,0); + uVar15 = uVar15 + 1; + uVar11 = uVar16; + } while ((int)uVar15 < 0x3ff); + } + } + if (__stack_chk_guard != iVar1) { + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); + } + return; +} + + + +### FUNC IsothermalPalette @ 0002af54 + +/* CFunctions::IsothermalPalette() */ + +void __thiscall CFunctions::IsothermalPalette(CFunctions *this) + +{ + uint uVar1; + uint uVar2; + uint uVar3; + int iVar4; + CFunctions *pCVar5; + uint uVar6; + uint uVar7; + + uVar1 = *(uint *)(this + 0x3858); + uVar6 = *(uint *)(this + 0x3854); + uVar2 = SearchInnerTemp(this,*(int *)(this + 0x14)); + uVar3 = SearchInnerTemp(this,*(int *)(this + 0x10)); + uVar7 = 0x100; + if ((uVar2 <= uVar6) && (uVar7 = 0xffffffff, uVar1 <= uVar2)) { + iVar4 = __udivsi3((uVar2 - uVar1) * 0x3ff,uVar6 - uVar1); + uVar7 = (uint)(byte)this[iVar4 + 0x4074]; + } + uVar2 = 0x100; + if ((uVar3 <= uVar6) && (uVar2 = 0xffffffff, uVar1 <= uVar3)) { + iVar4 = __udivsi3((uVar3 - uVar1) * 0x3ff,uVar6 - uVar1); + uVar2 = (uint)(byte)this[iVar4 + 0x4074]; + } + __aeabi_memcpy(this + 0x24f4,this + 0x20cc); + if (0xfe < (int)uVar7) { + uVar7 = 0xff; + } + if ((int)uVar2 < 1) { + uVar2 = 0; + } + if ((int)uVar2 <= (int)uVar7) { + pCVar5 = this + uVar2 * 4 + 0x24f7; + iVar4 = uVar2 - 1; + do { + pCVar5[-3] = (CFunctions)0x0; + pCVar5[-2] = (CFunctions)0xff; + pCVar5[-1] = (CFunctions)0x0; + *pCVar5 = (CFunctions)0x0; + pCVar5 = pCVar5 + 4; + iVar4 = iVar4 + 1; + } while (iVar4 < (int)uVar7); + } + __aeabi_memcpy(this + 0x291c,this + 0x24f4,0x400); + return; +} + + + +### FUNC DynamicRedPalette @ 0002b060 + +/* CFunctions::DynamicRedPalette() */ + +void __thiscall CFunctions::DynamicRedPalette(CFunctions *this) + +{ + bool bVar1; + CFunctions CVar2; + char cVar3; + undefined4 uVar4; + uint uVar5; + int iVar6; + uint uVar7; + uint uVar8; + int iVar9; + uint uVar10; + CFunctions *pCVar11; + int iVar12; + uint local_38; + + uVar10 = *(uint *)(this + 0x50f0); + uVar4 = __floatunsisf(uVar10); + __mulsf3(uVar4,0x3cf5c28f); + uVar5 = __fixsfsi(); + uVar8 = 0; + iVar6 = 0x432; + do { + uVar8 = *(int *)(this + iVar6 * 4) + uVar8; + iVar9 = iVar6; + if (uVar10 >> 4 <= uVar8) break; + iVar9 = iVar6 + -1; + iVar12 = iVar6 + -0x33; + iVar6 = iVar9; + } while (1 < iVar12); + iVar6 = __udivsi3((1000U >> (*(uint *)(this + 0x5104) & 0xff) & 0xffff) * 0x3ff, + *(int *)(this + 0x3854) - *(int *)(this + 0x3858)); + iVar6 = iVar6 + iVar9 + -0x33; + uVar8 = 0; + iVar9 = 0x432; + do { + uVar8 = *(int *)(this + iVar9 * 4) + uVar8; + uVar10 = 0x100; + if (uVar5 <= uVar8) { + if (iVar6 <= iVar9 + -0x33) { + iVar6 = iVar9 + -0x33; + } + break; + } + iVar12 = iVar9 + -0x33; + iVar9 = iVar9 + -1; + } while (1 < iVar12); + if (iVar6 < 0x400) { + uVar10 = (uint)(byte)this[iVar6 + 0x4074]; + uVar7 = 0x100 - uVar10; + local_38 = uVar7 >> 1; + uVar8 = local_38 + uVar10; + uVar5 = 0; + if (uVar10 == 0) goto LAB_0002b148; + } + else { + uVar7 = 0; + local_38 = 0; + uVar8 = uVar10; + } + iVar6 = 0; + do { + iVar9 = iVar6 * 4; + CVar2 = SUB41(iVar6,0); + this[iVar9 + 0x24f4] = CVar2; + this[iVar9 + 0x24f5] = CVar2; + this[iVar9 + 0x24f6] = CVar2; + this[iVar9 + 0x24f7] = (CFunctions)0x0; + iVar6 = iVar6 + 1; + uVar5 = uVar10; + } while (iVar6 < (int)uVar10); +LAB_0002b148: + pCVar11 = this + 0x24f4; + CVar2 = SUB41(uVar5,0); + if (1 < (int)uVar7) { + iVar6 = 0; + uVar10 = uVar5; + do { + cVar3 = __divsi3(iVar6,local_38); + iVar9 = uVar10 * 4; + pCVar11[iVar9] = (CFunctions)(cVar3 + (char)CVar2); + pCVar11[iVar9 + 1] = CVar2; + pCVar11[iVar9 + 2] = CVar2; + pCVar11[iVar9 + 3] = (CFunctions)0x0; + iVar6 = iVar6 + (0xff - uVar5); + uVar10 = uVar10 + 1; + } while ((int)uVar10 < (int)uVar8); + } + if ((int)uVar8 < 0x100) { + iVar6 = 0; + uVar10 = uVar8; + do { + iVar9 = uVar10 * 4; + pCVar11[iVar9] = (CFunctions)0xff; + cVar3 = __divsi3(iVar6,0x100 - uVar8); + pCVar11[iVar9 + 1] = (CFunctions)(cVar3 + (char)CVar2); + pCVar11[iVar9 + 2] = (CFunctions)(cVar3 + (char)CVar2); + pCVar11[iVar9 + 3] = (CFunctions)0x0; + iVar6 = iVar6 - uVar5; + bVar1 = (int)uVar10 < 0xff; + uVar10 = uVar10 + 1; + } while (bVar1); + } + __aeabi_memcpy(this + 0x291c,pCVar11,0x400); + return; +} + + + +### FUNC MapTemperature @ 0002b204 + +/* CFunctions::MapTemperature(int) */ + +void CFunctions::MapTemperature(int param_1) + +{ + int iVar1; + int iVar2; + int iVar3; + int iVar4; + uint uVar5; + uint uVar6; + int iVar7; + undefined1 *puVar8; + ushort *puVar9; + int local_24; + + puVar9 = *(ushort **)(param_1 + 0xb4); + puVar8 = *(undefined1 **)(param_1 + 0xc0); + iVar1 = *(int *)(param_1 + 0x3858); + iVar2 = *(int *)(param_1 + 0x3854); + __aeabi_memclr4(param_1 + 0x3874,0x400); + iVar3 = __udivsi3(0xffc00000,iVar2 - iVar1); + for (iVar2 = *(int *)(param_1 + 0x50f0); iVar2 != 0; iVar2 = iVar2 + -1) { + uVar6 = iVar3 * ((uint)*puVar9 - iVar1) >> 0x16; + *puVar8 = *(undefined1 *)(param_1 + 0x3820 + uVar6 + 0x854); + iVar4 = param_1 + 0x3820 + (uVar6 & 0x3fc); + *(int *)(iVar4 + 0x54) = *(int *)(iVar4 + 0x54) + 1; + puVar8 = puVar8 + 1; + puVar9 = puVar9 + 1; + } + *(undefined4 *)(param_1 + 0x3864) = 1; + iVar1 = *(int *)(param_1 + 200); + iVar2 = *(int *)(param_1 + 0x37fc); + if (*(int *)(param_1 + 100) == 0) { + iVar4 = *(uint *)(param_1 + 0x3800) - 1; + iVar3 = 0; + if (1 < *(uint *)(param_1 + 0x3800)) { + iVar3 = __udivsi3(0xff0000,iVar4); + } + if (-1 < iVar4) { + uVar6 = iVar3 * iVar4; + iVar1 = iVar1 + iVar2 * iVar4; + do { + __aeabi_memset(iVar1,iVar2,uVar6 >> 0x10 & 0xff); + iVar1 = iVar1 - iVar2; + uVar6 = uVar6 - iVar3; + iVar4 = iVar4 + -1; + } while (-1 < iVar4); + } + } + else { + iVar3 = *(int *)(param_1 + 0x3858); + local_24 = 0; + if ((*(int *)(param_1 + 0x383c) != iVar3) && + (iVar4 = *(int *)(param_1 + 0x3854), iVar4 != iVar3)) { + local_24 = __divsi3((*(int *)(param_1 + 0x383c) - iVar3) * 0x3ff,iVar4 - iVar3); + } + iVar4 = 0x3ff; + if (*(int *)(param_1 + 0x3838) != iVar3) { + iVar7 = *(int *)(param_1 + 0x3854); + iVar4 = 0x3ff; + if (iVar7 != iVar3) { + iVar4 = __divsi3((*(int *)(param_1 + 0x3838) - iVar3) * 0x3ff,iVar7 - iVar3); + } + } + uVar6 = *(uint *)(param_1 + 0x3800); + if (uVar6 < 2) { + iVar3 = 0; + } + else { + iVar3 = __udivsi3((iVar4 - local_24) * 0x10000,uVar6 - 1); + } + iVar4 = uVar6 - 1; + if (-1 < iVar4) { + uVar6 = iVar4 * iVar3; + iVar1 = iVar1 + iVar4 * iVar2; + do { + uVar5 = (uVar6 >> 0x10) + local_24; + if (0x3fe < uVar5) { + uVar5 = 0x3ff; + } + __aeabi_memset(iVar1,iVar2,*(undefined1 *)(param_1 + uVar5 + 0x4074)); + iVar1 = iVar1 - iVar2; + uVar6 = uVar6 - iVar3; + iVar4 = iVar4 + -1; + } while (-1 < iVar4); + } + } + return; +} + + + +### FUNC SearchInnerTemp @ 0002b3e0 + +/* CFunctions::SearchInnerTemp(int) */ + +uint __thiscall CFunctions::SearchInnerTemp(CFunctions *this,int param_1) + +{ + uint uVar1; + uint uVar2; + uint uVar3; + uint uVar4; + uint uVar5; + uint uVar6; + float extraout_s0; + uint local_18; + + uVar3 = *(uint *)(this + 0x50f0); + uVar4 = *(uint *)(this + 0x37ec); + uVar5 = 0xffff; + local_18 = 0; + uVar6 = 0x7fff; + do { + uVar2 = ReviseTemperature(this,(ushort)uVar6,(uVar4 >> 1) + (uVar3 >> 1)); + if ((*(int *)(this + 0x4c) != 0) || (*(int *)(this + 0x50) != 0)) { + uVar2 = CorrectTemperature((int)this,extraout_s0,uVar2); + } + uVar1 = uVar6; + if ((int)uVar2 <= param_1) { + uVar1 = uVar5; + local_18 = uVar6; + } + uVar5 = uVar1; + uVar6 = local_18 + uVar5 >> 1; + } while (local_18 + 1 < uVar5); + return uVar6; +} + + + +### FUNC GetOriginalBMPDataPointer @ 0002b46c + +/* CFunctions::GetOriginalBMPDataPointer() */ + +undefined4 __thiscall CFunctions::GetOriginalBMPDataPointer(CFunctions *this) + +{ + undefined4 uVar1; + + uVar1 = 0; + if ((*(int *)(this + 0xa4) != 0) && (*(int *)(this + 0xac) != 0)) { + if (*(int *)(this + 0x3864) == 0) { + MapTemperature((int)this); + } + uVar1 = *(undefined4 *)(this + 0xc0); + } + return uVar1; +} + + + +### FUNC SaveBMP @ 0002b49c + +/* CFunctions::SaveBMP(CacheData, char const*) */ + +undefined4 __thiscall CFunctions::SaveBMP(CFunctions *this,int param_2,char *param_3) + +{ + undefined4 *puVar1; + uint uVar2; + int iVar3; + void *pvVar4; + char *pcVar5; + pthread_mutex_t *__mutex; + undefined4 uVar6; + ushort local_44; + ushort local_42; + ushort local_3e; + ushort local_3c; + ushort local_3a; + ushort local_38; + undefined2 local_34; + undefined2 local_32; + undefined2 local_2e; + undefined2 local_2c; + undefined2 local_2a; + undefined2 local_28; + MStream aMStack_24 [12]; + int local_18; + + local_18 = __stack_chk_guard; + MStream::MStream(aMStack_24,0x100); + __mutex = (pthread_mutex_t *)(this + 0xb0); + pthread_mutex_lock(__mutex); + if ((*(int *)(this + 0xa4) == 0) || (*(int *)(this + 0xac) == 0)) { + pthread_mutex_unlock(__mutex); + uVar6 = 0xe4ae0006; +LAB_0002b4f8: + puVar1 = (undefined4 *)__errno(); + *puVar1 = uVar6; + } + else { + if (param_2 == 0) { + uVar2 = *(uint *)(this + 0x50f0); + iVar3 = GetOriginalBMPDataPointer(this); + if (iVar3 != 0) { + pvVar4 = operator_new__(uVar2); + __aeabi_memcpy(pvVar4,iVar3,uVar2); + pthread_mutex_unlock(__mutex); + if (param_3 == (char *)0x0) { + GetLocalTime((_SYSTEMTIME *)&local_44); + MStream::Fmt((char *)aMStack_24,"%d-%d-%d %d-%d-%d.bmp",(uint)local_44,(uint)local_42, + (uint)local_3e,(uint)local_3c,(uint)local_3a,(uint)local_38); + } + else { + MStream::operator<<(aMStack_24,param_3); + } + local_28 = 0; + local_34 = 0x4d42; + local_2e = 0; + local_2c = 0; + local_2a = 0x436; + local_32 = (undefined2)(uVar2 + 0x436); + *(short *)(((uint)&local_34 | 2) + 2) = (short)(uVar2 + 0x436 >> 0x10); + pcVar5 = (char *)MStream::Get(aMStack_24); + OFStream::OFStream((OFStream *)&local_44,pcVar5,false); + OFStream::Write((OFStream *)&local_44,&local_34,0xe,1); + OFStream::Write((OFStream *)&local_44,this + 0x24cc,0x428,1); + uVar6 = 1; + OFStream::Write((OFStream *)&local_44,pvVar4,uVar2,1); + IFStream::~IFStream((IFStream *)&local_44); + operator_delete__(pvVar4); + goto LAB_0002b500; + } + pthread_mutex_unlock(__mutex); + uVar6 = 0xe4ae0003; + goto LAB_0002b4f8; + } + pthread_mutex_unlock(__mutex); + puVar1 = (undefined4 *)__errno(); + *puVar1 = 0xe4ae0001; + } + uVar6 = 0; +LAB_0002b500: + MStream::~MStream(aMStack_24); + if (__stack_chk_guard == local_18) { + return uVar6; + } + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); +} + + + +### FUNC SaveRaw @ 0002b668 + +/* CFunctions::SaveRaw(CacheData, char const*) */ + +undefined4 __thiscall CFunctions::SaveRaw(CFunctions *this,int param_2,char *param_3) + +{ + uint uVar1; + void *pvVar2; + undefined4 *puVar3; + char *pcVar4; + int iVar5; + undefined4 uVar6; + pthread_mutex_t *__mutex; + undefined4 local_4c; + ushort local_48; + ushort local_46; + ushort local_42; + ushort local_40; + ushort local_3e; + ushort local_3c; + undefined4 local_38; + undefined4 local_34; + undefined4 local_2c; + undefined4 local_28; + MStream aMStack_24 [12]; + int local_18; + + local_18 = __stack_chk_guard; + MStream::MStream(aMStack_24,0x100); + local_34 = 0; + local_4c = 0; + local_38 = 0; + __mutex = (pthread_mutex_t *)(this + 0xb0); + pthread_mutex_lock(__mutex); + if ((*(int *)(this + 0xa4) == 0) || (*(int *)(this + 0xac) == 0)) { + pthread_mutex_unlock(__mutex); + uVar6 = 0xe4ae0006; + } + else { + if (param_2 != 4) { + pthread_mutex_unlock(__mutex); + puVar3 = (undefined4 *)__errno(); + *puVar3 = 0xe4ae0001; + goto LAB_0002b7b2; + } + local_28 = *(undefined4 *)(this + 0x37ec); + local_2c = *(undefined4 *)(this + 0x37f0); + local_34 = *(undefined4 *)(this + 0x40); + local_38 = *(undefined4 *)(this + 0x44); + iVar5 = *(int *)(this + 0xb4); + uVar1 = *(int *)(this + 0x50f0) << 1; + if (iVar5 != 0) { + pvVar2 = operator_new__(uVar1); + __aeabi_memcpy(pvVar2,iVar5,uVar1); + pthread_mutex_unlock(__mutex); + if (param_3 == (char *)0x0) { + GetLocalTime((_SYSTEMTIME *)&local_48); + MStream::Fmt((char *)aMStack_24,"%d-%02d-%02d %02d-%02d-%02d.raw",(uint)local_48, + (uint)local_46,(uint)local_42,(uint)local_40,(uint)local_3e,(uint)local_3c); + } + else { + MStream::operator<<(aMStack_24,param_3); + } + pcVar4 = (char *)MStream::Get(aMStack_24); + OFStream::OFStream((OFStream *)&local_48,pcVar4,false); + OFStream::Write((OFStream *)&local_48,&local_28,4,1); + OFStream::Write((OFStream *)&local_48,&local_2c,4,1); + OFStream::Write((OFStream *)&local_48,&local_38,4,1); + OFStream::Write((OFStream *)&local_48,(void *)((uint)&local_38 | 4),4,1); + OFStream::Write((OFStream *)&local_48,pvVar2,uVar1,1); + IFStream::~IFStream((IFStream *)&local_48); + operator_delete__(pvVar2); + local_4c = 1; + goto LAB_0002b7b2; + } + pthread_mutex_unlock(__mutex); + uVar6 = 0xe4ae0003; + } + puVar3 = (undefined4 *)__errno(); + *puVar3 = uVar6; +LAB_0002b7b2: + MStream::~MStream(aMStack_24); + if (__stack_chk_guard == local_18) { + return local_4c; + } + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); +} + + + +### FUNC GetRectTemperatureInfo @ 0002b848 + +/* CFunctions::GetRectTemperatureInfo(unsigned int, unsigned int, unsigned int, unsigned int, int*, + int) */ + +undefined4 __thiscall +CFunctions::GetRectTemperatureInfo + (CFunctions *this,uint param_1,uint param_2,uint param_3,uint param_4,int *param_5, + int param_6) + +{ + uint uVar1; + ushort uVar2; + undefined4 *puVar3; + ushort *puVar4; + int iVar5; + uint uVar6; + uint uVar7; + uint uVar8; + uint uVar9; + undefined4 uVar10; + uint uVar11; + uint uVar12; + bool bVar13; + float extraout_s0; + float extraout_s0_00; + float extraout_s0_01; + undefined8 uVar14; + int local_30; + uint local_2c; + uint local_28; + int local_24; + uint local_20; + uint local_1c; + uint local_18; + + if (param_6 != 0) { + pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); + } + if (((((param_3 < param_1) || (*(int *)(this + 0xac) == 0)) || (param_4 < param_2)) || + ((uVar7 = *(uint *)(this + 0x37ec), uVar7 <= param_3 || (param_5 == (int *)0x0)))) || + (*(uint *)(this + 0x37f0) <= param_4)) { + uVar10 = 0xe4ae0005; + if (*(int *)(this + 0xac) != 0) { + uVar10 = 0xe4ae0001; + } + puVar3 = (undefined4 *)__errno(); + *puVar3 = uVar10; + local_2c = 0; + if (param_6 != 0) { + pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); + } + } + else { + if (((param_2 == 0 && param_1 == 0) && (uVar7 - 1 == param_3)) && + (*(uint *)(this + 0x37f0) - 1 == param_4)) { + uVar14 = __muldi3(*(undefined4 *)(this + 0x50f0),0,*(int *)(this + 0x3840), + *(int *)(this + 0x3840) >> 0x1f); + local_18 = *(uint *)(this + 0x3848); + local_1c = *(uint *)(this + 0x384c); + uVar2 = (ushort)*(undefined4 *)(this + 0x3838); + uVar8 = *(uint *)(this + 0x383c); + } + else { + local_30 = uVar7 * param_2; + uVar9 = 0; + uVar8 = 0xffffffff; + local_24 = 0; + local_28 = 0; + local_2c = 0; + local_20 = 0; + uVar6 = param_2; + do { + puVar4 = (ushort *)(*(int *)(this + 0xb4) + uVar7 * uVar6 * 2 + param_1 * 2); + uVar11 = param_1; + do { + local_18 = local_30 + uVar11; + uVar12 = (uint)*puVar4; + local_1c = local_18; + if (uVar8 <= uVar12) { + local_1c = local_2c; + } + if (uVar12 <= uVar9) { + local_18 = local_28; + } + bVar13 = CARRY4(local_20,uVar12); + local_20 = local_20 + uVar12; + local_24 = local_24 + (uint)bVar13; + uVar14 = CONCAT44(local_24,local_20); + uVar1 = uVar12; + if (uVar8 <= uVar12) { + uVar1 = uVar8; + } + uVar8 = uVar1; + if (uVar12 <= uVar9) { + uVar12 = uVar9; + } + uVar9 = uVar12; + uVar2 = (ushort)uVar9; + uVar11 = uVar11 + 1; + puVar4 = puVar4 + 1; + local_28 = local_18; + local_2c = local_1c; + } while (uVar11 <= param_3); + local_30 = local_30 + uVar7; + uVar6 = uVar6 + 1; + } while (uVar6 <= param_4); + } + local_24 = (int)((ulonglong)uVar14 >> 0x20); + local_20 = (uint)uVar14; + iVar5 = ReviseTemperature(this,(ushort)uVar8,local_1c); + *param_5 = iVar5; + iVar5 = ReviseTemperature(this,uVar2,local_18); + param_5[1] = iVar5; + local_2c = 1; + uVar2 = __aeabi_ldivmod(local_20,local_24,((1 - param_1) + param_3) * ((1 - param_2) + param_4), + 0); + iVar5 = ReviseTemperature(this,uVar2, + (uVar7 * (param_4 + param_2) >> 1) + (param_3 + param_1 >> 1)); + param_5[2] = iVar5; + param_5[3] = local_1c; + param_5[4] = local_18; + if (*(int *)(this + 0x50) != 0) { + iVar5 = CorrectTemperature((int)this,extraout_s0,*param_5); + *param_5 = iVar5; + iVar5 = CorrectTemperature((int)this,extraout_s0_00,param_5[1]); + param_5[1] = iVar5; + iVar5 = CorrectTemperature((int)this,extraout_s0_01,param_5[2]); + param_5[2] = iVar5; + } + if (param_6 != 0) { + pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); + } + } + return local_2c; +} + + + +### FUNC GetEllipseTemperatureInfo @ 0002ba84 + +/* CFunctions::GetEllipseTemperatureInfo(unsigned int, unsigned int, unsigned int, unsigned int, + int*, int) */ + +undefined4 __thiscall +CFunctions::GetEllipseTemperatureInfo + (CFunctions *this,uint param_1,uint param_2,uint param_3,uint param_4,int *param_5, + int param_6) + +{ + ushort uVar1; + undefined4 uVar2; + undefined4 uVar3; + int iVar4; + int iVar5; + undefined4 *puVar6; + int iVar7; + int iVar8; + int iVar9; + uint uVar10; + uint uVar11; + int iVar12; + CFunctions *pCVar13; + int iVar14; + uint uVar15; + uint uVar16; + uint uVar17; + uint uVar18; + uint uVar19; + uint uVar20; + bool bVar21; + float __x; + float __x_00; + float __x_01; + float __x_02; + float __x_03; + float __x_04; + float __x_05; + float __x_06; + float extraout_s0; + float extraout_s0_00; + float extraout_s0_01; + int local_78; + uint local_60; + uint local_5c; + uint local_58; + uint local_4c; + uint local_44; + int local_40; + ushort *local_3c; + uint local_34; + ushort *local_2c; + uint local_28; + int local_24; + uint local_20; + uint local_1c; + uint local_18; + + if (param_6 != 0) { + pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); + } + if ((((param_3 <= param_1) || (*(int *)(this + 0xac) == 0)) || + (pCVar13 = this + 0x37ec, param_4 <= param_2)) || + (((*(uint *)(this + 0x37ec) <= param_3 || (param_5 == (int *)0x0)) || + (*(uint *)(this + 0x37f0) <= param_4)))) { + uVar2 = 0xe4ae0005; + if (*(int *)(this + 0xac) != 0) { + uVar2 = 0xe4ae0001; + } + puVar6 = (undefined4 *)__errno(); + *puVar6 = uVar2; + uVar2 = 0; + goto joined_r0x0002bf22; + } + uVar18 = param_4 - param_2; + uVar16 = param_3 - param_1; + local_1c = 0xffffffff; + if (uVar16 < uVar18) { + uVar2 = __floatunsisf(); + uVar3 = __floatsisf(uVar18 * uVar18 - uVar16 * uVar16); + sqrtf(__x); + __subsf3(uVar2,uVar3); + iVar4 = __fixsfsi(); + sqrtf(__x_00); + __addsf3(); + iVar5 = __fixsfsi(); + if (param_2 <= param_4) { + local_18 = 0; + local_5c = 0; + local_58 = 0; + local_20 = 0; + local_34 = 0; + local_24 = 0; + local_1c = 0xffffffff; + local_4c = param_2; + do { + if (param_1 <= param_3) { + local_2c = (ushort *) + (*(int *)(this + 0xb4) + local_4c * *(int *)pCVar13 * 2 + param_1 * 2); + iVar7 = local_4c - iVar5 / 2; + iVar8 = local_4c - iVar4 / 2; + local_3c = (ushort *)0x0; + iVar12 = param_3 - param_1; + iVar14 = param_1 - param_3; + uVar16 = param_1; + local_28 = param_1 << 1; + do { + local_40 = iVar12; + if (-1 < iVar14) { + local_40 = iVar14; + } + if ((int)local_3c < local_40) { + uVar2 = __floatunsisf(iVar14 * iVar14 + iVar8 * iVar8 * 4); + sqrtf(__x_03); + uVar3 = __floatunsisf(iVar14 * iVar14 + iVar7 * iVar7 * 4); + sqrtf(__x_04); + __addsf3(uVar2,uVar3); + iVar9 = __fixsfsi(); + if (iVar9 <= (int)(uVar18 * 2)) goto LAB_0002bcb6; + if (param_3 + param_1 <= local_28) break; + } + else { + local_40 = (int)local_3c; +LAB_0002bcb6: + uVar10 = (uint)*local_2c; + bVar21 = CARRY4(local_20,uVar10); + local_20 = local_20 + uVar10; + local_24 = local_24 + (uint)bVar21; + local_18 = local_18 + 1; + if (local_34 < uVar10) { + local_58 = uVar16 + local_4c * *(int *)pCVar13; + local_34 = uVar10; + } + if (uVar10 < local_1c) { + local_5c = uVar16 + local_4c * *(int *)pCVar13; + local_1c = uVar10; + } + local_3c = (ushort *)local_40; + } + local_2c = local_2c + 1; + local_28 = local_28 + 2; + iVar12 = iVar12 + -2; + iVar14 = iVar14 + 2; + uVar16 = uVar16 + 1; + } while (uVar16 <= param_3); + } + local_4c = local_4c + 1; + } while (local_4c <= param_4); + goto LAB_0002be94; + } +LAB_0002bbd0: + local_24 = 0; + local_58 = 0; + local_5c = 0; + local_18 = 0; + local_20 = 0; + local_34._0_2_ = 0; + uVar1 = 0xffff; + } + else { + local_34 = 0; + uVar2 = __floatunsisf(); + uVar3 = __floatsisf(uVar16 * uVar16 - uVar18 * uVar18); + sqrtf(__x_01); + __subsf3(uVar2,uVar3); + iVar4 = __fixsfsi(); + sqrtf(__x_02); + __addsf3(); + iVar5 = __fixsfsi(); + if (param_4 < param_2) goto LAB_0002bbd0; + local_18 = 0; + local_5c = 0; + local_20 = 0; + local_24 = 0; + uVar18 = param_2; + local_58 = local_18; + do { + iVar12 = uVar18 * 2 - (param_4 + param_2); + iVar12 = iVar12 * iVar12; + if (param_1 <= param_3) { + local_3c = (ushort *)(*(int *)(this + 0xb4) + uVar18 * *(int *)pCVar13 * 2 + param_1 * 2); + local_44 = 0; + uVar10 = uVar16; + uVar15 = param_1; + uVar17 = param_1 << 1; + uVar20 = param_1 - param_3; + local_2c = (ushort *)(param_1 * 4 + (iVar4 / 2) * -4); + local_28 = param_1 * 4 + (iVar5 / 2) * -4; + do { + uVar11 = uVar10; + if (-1 < (int)uVar20) { + uVar11 = uVar20; + } + uVar19 = local_44; + if ((int)local_44 < (int)uVar11) { + uVar2 = __floatunsisf((int)local_2c * (uVar15 - iVar4 / 2) + iVar12); + sqrtf(__x_05); + uVar3 = __floatunsisf(local_28 * (uVar15 - iVar5 / 2) + iVar12); + sqrtf(__x_06); + __addsf3(uVar2,uVar3); + iVar14 = __fixsfsi(); + uVar19 = uVar11; + if (iVar14 <= (int)(uVar16 * 2)) goto LAB_0002be10; + if (param_3 + param_1 <= uVar17) break; + } + else { +LAB_0002be10: + uVar11 = (uint)*local_3c; + bVar21 = CARRY4(local_20,uVar11); + local_20 = local_20 + uVar11; + local_24 = local_24 + (uint)bVar21; + local_18 = local_18 + 1; + if (local_34 < uVar11) { + local_58 = uVar15 + uVar18 * *(int *)pCVar13; + local_34 = uVar11; + } + local_44 = uVar19; + if (uVar11 < local_1c) { + local_5c = uVar15 + uVar18 * *(int *)pCVar13; + local_1c = uVar11; + } + } + local_3c = local_3c + 1; + uVar17 = uVar17 + 2; + uVar10 = uVar10 - 2; + uVar20 = uVar20 + 2; + local_28 = local_28 + 4; + local_2c = (ushort *)((int)local_2c + 4); + uVar15 = uVar15 + 1; + } while (uVar15 <= param_3); + } + uVar18 = uVar18 + 1; + } while (uVar18 <= param_4); +LAB_0002be94: + uVar1 = (ushort)local_1c; + } + local_60 = param_3 + param_1; + local_78 = param_4 + param_2; + iVar4 = *(int *)pCVar13; + iVar5 = ReviseTemperature(this,uVar1,local_5c); + *param_5 = iVar5; + iVar5 = ReviseTemperature(this,(ushort)local_34,local_58); + param_5[1] = iVar5; + uVar1 = __aeabi_ldivmod(local_20,local_24,local_18,0); + iVar4 = ReviseTemperature(this,uVar1,((uint)(local_78 * iVar4) >> 1) + (local_60 >> 1)); + param_5[2] = iVar4; + param_5[3] = local_5c; + param_5[4] = local_58; + if (*(int *)(this + 0x50) != 0) { + iVar4 = CorrectTemperature((int)this,extraout_s0,*param_5); + *param_5 = iVar4; + iVar4 = CorrectTemperature((int)this,extraout_s0_00,param_5[1]); + param_5[1] = iVar4; + iVar4 = CorrectTemperature((int)this,extraout_s0_01,param_5[2]); + param_5[2] = iVar4; + } + uVar2 = 1; +joined_r0x0002bf22: + if (param_6 != 0) { + pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); + } + return uVar2; +} + + + +### FUNC GetLineTemperatureInfo @ 0002bf34 + +/* CFunctions::GetLineTemperatureInfo(unsigned short*, unsigned int, int*, unsigned int, unsigned + int, int, int) */ + +uint __thiscall +CFunctions::GetLineTemperatureInfo + (CFunctions *this,ushort *param_1,uint param_2,int *param_3,uint param_4,uint param_5, + int param_6,int param_7) + +{ + ushort uVar1; + uint uVar2; + undefined4 *puVar3; + int iVar4; + uint uVar5; + uint uVar6; + uint uVar7; + ushort *puVar8; + uint uVar9; + ushort *puVar10; + uint uVar11; + undefined4 uVar12; + uint uVar13; + float extraout_s0; + float extraout_s0_00; + float extraout_s0_01; + CFunctions *local_38; + int local_20; + uint local_1c; + int local_18; + + if (param_7 != 0) { + pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); + } + if (*(int *)(this + 0xac) != 0) { + local_1c = 0xffffffff; + if (param_6 == 0) { + uVar6 = *(uint *)(this + 0x37ec); + if (((param_4 < uVar6) && (param_5 < *(uint *)(this + 0x37f0))) && + ((1 < param_2 && ((param_1 != (ushort *)0x0 && (param_3 != (int *)0x0)))))) { + uVar13 = *(int *)(this + 0x37f0) - param_5; + if (param_2 >> 1 <= *(int *)(this + 0x37f0) - param_5) { + uVar13 = param_2 >> 1; + } + uVar5 = uVar13 + param_5; + if (param_5 < uVar5) { + puVar8 = (ushort *)(*(int *)(this + 0xb4) + (param_4 + uVar6 * param_5) * 2); + puVar10 = param_1; + do { + *puVar10 = *puVar8; + puVar8 = puVar8 + uVar6; + puVar10 = puVar10 + 1; + param_5 = param_5 + 1; + } while (param_5 < uVar5); + } +LAB_0002c048: + local_38 = this + 0x37ec; + uVar6 = 0; + if (uVar13 == 0) { + uVar5 = 0xffffffff; + local_20 = 0; + uVar7 = uVar6; + } + else { + local_20 = 0; + uVar6 = 0; + uVar2 = uVar13; + uVar9 = 0; + do { + uVar11 = (uint)*param_1; + uVar7 = uVar2; + if (uVar11 <= uVar6) { + uVar7 = uVar9; + } + uVar5 = uVar11; + if (local_1c <= uVar11) { + uVar5 = local_1c; + } + uVar9 = uVar11; + if (uVar11 <= uVar6) { + uVar9 = uVar6; + } + uVar6 = uVar9; + local_20 = local_20 + uVar11; + uVar2 = uVar2 - 1; + param_1 = param_1 + 1; + uVar9 = uVar7; + local_1c = uVar5; + } while (uVar2 != 0); + } + if (param_6 == 0) { + local_18 = *(uint *)local_38 * (uVar13 - uVar7) + (*(uint *)local_38 >> 1); + uVar7 = *(uint *)(this + 0x50f0) >> 1; + } + else { + local_18 = (uVar13 - uVar7) + (*(uint *)(this + 0x50f0) >> 1); + uVar7 = *(uint *)local_38 * param_4; + param_4 = *(uint *)local_38 >> 1; + } + uVar7 = uVar7 + param_4; + iVar4 = ReviseTemperature(this,(ushort)uVar5,uVar7); + *param_3 = iVar4; + iVar4 = ReviseTemperature(this,(ushort)uVar6,uVar7); + param_3[1] = iVar4; + uVar1 = __udivsi3(local_20,uVar13); + iVar4 = ReviseTemperature(this,uVar1,uVar7); + param_3[2] = iVar4; + param_3[3] = uVar5; + param_3[4] = uVar6; + param_3[5] = local_18; + if (*(int *)(this + 0x50) != 0) { + iVar4 = CorrectTemperature((int)this,extraout_s0,*param_3); + *param_3 = iVar4; + iVar4 = CorrectTemperature((int)this,extraout_s0_00,param_3[1]); + param_3[1] = iVar4; + iVar4 = CorrectTemperature((int)this,extraout_s0_01,param_3[2]); + param_3[2] = iVar4; + } + goto joined_r0x0002c184; + } + } + else if ((((param_4 < *(uint *)(this + 0x37f0)) && (1 < param_2)) && (param_1 != (ushort *)0x0)) + && ((param_3 != (int *)0x0 && (param_5 < *(uint *)(this + 0x37ec))))) { + uVar13 = *(int *)(this + 0x37ec) - param_5; + if (param_2 >> 1 <= *(int *)(this + 0x37ec) - param_5) { + uVar13 = param_2 >> 1; + } + __aeabi_memcpy(param_1,*(int *)(this + 0xb4) + param_4 * *(uint *)(this + 0x37ec) * 2 + + param_5 * 2,uVar13 << 1); + goto LAB_0002c048; + } + } + uVar12 = 0xe4ae0005; + if (*(int *)(this + 0xac) != 0) { + uVar12 = 0xe4ae0001; + } + puVar3 = (undefined4 *)__errno(); + *puVar3 = uVar12; + uVar13 = 0; +joined_r0x0002c184: + if (param_7 != 0) { + pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); + } + return uVar13; +} + + + +### FUNC GetLineTemperatureInfo2 @ 0002c1a0 + +/* CFunctions::GetLineTemperatureInfo2(unsigned short*, unsigned int, int*, unsigned int, unsigned + int, unsigned int, unsigned int, int) */ + +uint __thiscall +CFunctions::GetLineTemperatureInfo2 + (CFunctions *this,ushort *param_1,uint param_2,int *param_3,uint param_4,uint param_5, + uint param_6,uint param_7,int param_8) + +{ + uint uVar1; + uint uVar2; + uint uVar3; + ushort uVar4; + int iVar5; + int iVar6; + undefined4 *puVar7; + int iVar8; + int iVar9; + uint uVar10; + uint uVar11; + uint uVar12; + uint uVar13; + uint uVar14; + uint uVar15; + undefined4 uVar16; + ushort *puVar17; + int iVar18; + uint uVar19; + float extraout_s0; + float extraout_s0_00; + float extraout_s0_01; + uint local_18; + + if (param_8 != 0) { + pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); + } + if ((((*(int *)(this + 0xac) == 0) || (uVar13 = *(uint *)(this + 0x37ec), uVar13 <= param_4)) || + (uVar13 <= param_6)) || + ((*(uint *)(this + 0x37f0) <= param_5 || (*(uint *)(this + 0x37f0) <= param_7)))) { +LAB_0002c316: + uVar16 = 0xe4ae0005; + if (*(int *)(this + 0xac) != 0) { + uVar16 = 0xe4ae0001; + } + puVar7 = (undefined4 *)__errno(); + *puVar7 = uVar16; + uVar19 = 0; + } + else { + if (param_4 == param_6) { + if (((param_2 < 2) || (param_1 == (ushort *)0x0)) || + ((param_3 == (int *)0x0 || (param_5 == param_7)))) goto LAB_0002c316; + } + else if (((param_2 < 2) || (param_1 == (ushort *)0x0)) || (param_3 == (int *)0x0)) + goto LAB_0002c316; + iVar5 = param_5 - param_7; + uVar14 = iVar5 + (iVar5 >> 0x1f) ^ iVar5 >> 0x1f; + iVar9 = param_4 - param_6; + uVar15 = iVar9 + (iVar9 >> 0x1f) ^ iVar9 >> 0x1f; + if ((int)uVar15 < (int)uVar14) { + iVar9 = iVar5; + } + uVar10 = iVar9 + (iVar9 >> 0x1f) ^ iVar9 >> 0x1f; + uVar19 = uVar10 + 1; + uVar11 = param_2 >> 1; + if ((int)uVar11 <= (int)uVar19) { + uVar19 = uVar11; + } + uVar12 = param_4; + uVar1 = param_5; + uVar2 = param_6; + uVar3 = param_7; + if (param_4 <= param_6) { + uVar12 = param_6; + uVar1 = param_7; + uVar2 = param_4; + uVar3 = param_5; + } + if ((int)uVar15 < (int)uVar14) { + if ((int)uVar3 < (int)uVar1) { + uVar14 = (uVar3 + uVar19) - 1; + if ((int)uVar1 <= (int)uVar14) { + uVar14 = uVar1; + } + if ((int)uVar3 <= (int)uVar14) { + local_18 = -param_6 - 1; + if (-param_6 - 1 <= -param_4 - 1) { + local_18 = -param_4 - 1; + } + local_18 = (uVar3 * uVar13 + -1) - local_18; + iVar9 = *(int *)(this + 0xb4); + iVar5 = uVar3 - 1; + iVar18 = 0; + puVar17 = param_1; + do { + iVar6 = __divsi3(iVar18,uVar1 - uVar3); + *puVar17 = *(ushort *)(iVar9 + (local_18 + iVar6) * 2); + local_18 = local_18 + uVar13; + iVar18 = iVar18 + (uVar12 - uVar2); + puVar17 = puVar17 + 1; + iVar5 = iVar5 + 1; + } while (iVar5 < (int)uVar14); + } + } + else { + uVar14 = (uVar3 - uVar19) + 1; + if ((int)uVar14 <= (int)uVar1) { + uVar14 = uVar1; + } + if ((int)uVar14 <= (int)uVar3) { + uVar15 = -param_6 - 1; + if (-param_6 - 1 <= -param_4 - 1) { + uVar15 = -param_4 - 1; + } + iVar18 = (uVar3 * uVar13 + -1) - uVar15; + iVar9 = *(int *)(this + 0xb4); + iVar6 = uVar3 + 1; + iVar5 = 0; + puVar17 = param_1; + do { + iVar8 = __divsi3(iVar5,uVar1 - uVar3); + *puVar17 = *(ushort *)(iVar9 + (iVar18 + iVar8) * 2); + iVar18 = iVar18 - uVar13; + iVar5 = iVar5 + ((-1 - uVar12) - uVar15); + puVar17 = puVar17 + 1; + iVar6 = iVar6 + -1; + } while ((int)uVar14 < iVar6); + } + } + } + else { + uVar14 = (uVar2 + uVar19) - 1; + if ((int)uVar12 <= (int)uVar14) { + uVar14 = uVar12; + } + if ((int)uVar2 <= (int)uVar14) { + uVar15 = -param_6 - 1; + if (-param_6 - 1 <= -param_4 - 1) { + uVar15 = -param_4 - 1; + } + iVar5 = -2 - uVar15; + iVar9 = *(int *)(this + 0xb4); + iVar18 = 0; + puVar17 = param_1; + do { + iVar6 = __divsi3(iVar18,uVar12 - uVar2); + *puVar17 = *(ushort *)(iVar9 + (iVar5 + uVar13 * (iVar6 + uVar3)) * 2 + 2); + iVar18 = iVar18 + (uVar1 - uVar3); + puVar17 = puVar17 + 1; + iVar5 = iVar5 + 1; + } while (iVar5 < (int)uVar14); + } + } + uVar4 = 0; + if (uVar19 == 0) { + local_18 = 0xffff; + iVar9 = 0; + } + else { + iVar9 = -2 - uVar10; + iVar5 = -1 - uVar11; + if ((int)(-1 - uVar11) <= iVar9) { + iVar5 = iVar9; + } + iVar5 = iVar5 + 1; + iVar9 = 0; + uVar14 = 0; + local_18 = 0xffffffff; + do { + uVar10 = (uint)*param_1; + uVar15 = uVar10; + if (local_18 <= uVar10) { + uVar15 = local_18; + } + local_18 = uVar15; + uVar15 = uVar10; + if (uVar10 <= uVar14) { + uVar15 = uVar14; + } + uVar14 = uVar15; + uVar4 = (ushort)uVar14; + iVar9 = iVar9 + uVar10; + iVar5 = iVar5 + 1; + param_1 = param_1 + 1; + } while (iVar5 != 0); + } + uVar13 = (uVar13 * (param_7 + param_5) >> 1) + (param_6 + param_4 >> 1); + iVar5 = ReviseTemperature(this,(ushort)local_18,uVar13); + *param_3 = iVar5; + iVar5 = ReviseTemperature(this,uVar4,uVar13); + param_3[1] = iVar5; + uVar4 = __udivsi3(iVar9,uVar19); + iVar9 = ReviseTemperature(this,uVar4,uVar13); + param_3[2] = iVar9; + if (*(int *)(this + 0x50) != 0) { + iVar9 = CorrectTemperature((int)this,extraout_s0,*param_3); + *param_3 = iVar9; + iVar9 = CorrectTemperature((int)this,extraout_s0_00,param_3[1]); + param_3[1] = iVar9; + iVar9 = CorrectTemperature((int)this,extraout_s0_01,param_3[2]); + param_3[2] = iVar9; + } + } + if (param_8 != 0) { + pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); + } + return uVar19; +} + + + +### FUNC GetLineTemperatureInfo3 @ 0002c510 + +/* CFunctions::GetLineTemperatureInfo3(int*, unsigned int, int*, unsigned int, unsigned int, + unsigned int, unsigned int, int) */ + +uint __thiscall +CFunctions::GetLineTemperatureInfo3 + (CFunctions *this,int *param_1,uint param_2,int *param_3,uint param_4,uint param_5, + uint param_6,uint param_7,int param_8) + +{ + uint uVar1; + ushort uVar2; + uint uVar3; + int iVar4; + undefined4 *puVar5; + int iVar6; + uint uVar7; + int iVar8; + CFunctions *pCVar9; + int iVar10; + uint uVar11; + uint *puVar12; + uint uVar13; + uint uVar14; + int iVar15; + uint uVar16; + uint uVar17; + undefined4 uVar18; + uint uVar19; + uint uVar20; + float extraout_s0; + float extraout_s0_00; + float extraout_s0_01; + float extraout_s0_02; + + if (param_8 != 0) { + pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); + } + if (*(int *)(this + 0xac) != 0) { + uVar3 = *(uint *)(this + 0x37ec); + pCVar9 = this + 0x37ec; + if ((((param_4 < uVar3) && (param_6 < uVar3)) && (param_5 < *(uint *)(this + 0x37f0))) && + (param_7 < *(uint *)(this + 0x37f0))) { + if (param_4 == param_6) { + if (((3 < param_2) && (param_1 != (int *)0x0)) && + ((param_3 != (int *)0x0 && (param_5 != param_7)))) { +LAB_0002c59e: + iVar10 = param_5 - param_7; + uVar14 = iVar10 + (iVar10 >> 0x1f) ^ iVar10 >> 0x1f; + iVar15 = param_4 - param_6; + uVar7 = iVar15 + (iVar15 >> 0x1f) ^ iVar15 >> 0x1f; + if ((int)uVar7 < (int)uVar14) { + iVar15 = iVar10; + } + uVar16 = iVar15 + (iVar15 >> 0x1f) ^ iVar15 >> 0x1f; + uVar11 = param_2 >> 2; + uVar17 = uVar16 + 1; + if ((int)uVar11 <= (int)(uVar16 + 1)) { + uVar17 = uVar11; + } + uVar20 = param_4; + uVar13 = param_6; + uVar19 = param_7; + uVar1 = param_5; + if (param_4 <= param_6) { + uVar20 = param_6; + uVar13 = param_4; + uVar19 = param_5; + uVar1 = param_7; + } + if ((int)uVar7 < (int)uVar14) { + if ((int)uVar19 < (int)uVar1) { + uVar7 = (uVar19 + uVar17) - 1; + if ((int)uVar1 <= (int)uVar7) { + uVar7 = uVar1; + } + if ((int)uVar19 <= (int)uVar7) { + iVar10 = *(int *)(this + 0xb4); + *param_1 = (uint)*(ushort *)(iVar10 + (uVar13 + uVar19 * uVar3) * 2); + iVar8 = uVar1 - uVar19; + iVar15 = uVar20 - uVar13; + puVar12 = (uint *)param_1; + while ((int)uVar19 < (int)uVar7) { + puVar12 = puVar12 + 1; + iVar4 = __divsi3(iVar15,iVar8); + uVar19 = uVar19 + 1; + *puVar12 = (uint)*(ushort *) + (iVar10 + (iVar4 + uVar13 + uVar19 * *(int *)pCVar9) * 2); + iVar15 = iVar15 + (uVar20 - uVar13); + } + } + } + else { + uVar7 = (uVar19 - uVar17) + 1; + if ((int)uVar7 <= (int)uVar1) { + uVar7 = uVar1; + } + if ((int)uVar7 <= (int)uVar19) { + iVar10 = *(int *)(this + 0xb4); + *param_1 = (uint)*(ushort *)(iVar10 + (uVar13 + uVar19 * uVar3) * 2); + iVar15 = uVar1 - uVar19; + if ((int)uVar7 < (int)uVar19) { + uVar3 = -param_6 - 1; + if (-param_6 - 1 <= -param_4 - 1) { + uVar3 = -param_4 - 1; + } + iVar4 = (-1 - uVar20) - uVar3; + iVar8 = iVar4; + puVar12 = (uint *)param_1; + do { + puVar12 = puVar12 + 1; + iVar6 = __divsi3(iVar8,iVar15); + uVar19 = uVar19 - 1; + *puVar12 = (uint)*(ushort *) + (iVar10 + (iVar6 + uVar13 + uVar19 * *(int *)pCVar9) * 2); + iVar8 = iVar8 + iVar4; + } while ((int)uVar7 < (int)uVar19); + } + } + } + } + else { + uVar7 = (uVar13 + uVar17) - 1; + if ((int)uVar20 <= (int)uVar7) { + uVar7 = uVar20; + } + if ((int)uVar13 <= (int)uVar7) { + iVar10 = *(int *)(this + 0xb4); + *param_1 = (uint)*(ushort *)(iVar10 + (uVar19 * uVar3 + uVar13) * 2); + iVar8 = uVar20 - uVar13; + iVar15 = uVar1 - uVar19; + puVar12 = (uint *)param_1; + while ((int)uVar13 < (int)uVar7) { + uVar13 = uVar13 + 1; + puVar12 = puVar12 + 1; + iVar4 = __divsi3(iVar15,iVar8); + iVar15 = iVar15 + (uVar1 - uVar19); + *puVar12 = (uint)*(ushort *) + (iVar10 + (uVar13 + (iVar4 + uVar19) * *(int *)pCVar9) * 2); + } + } + } + uVar3 = 0xffff; + if (uVar17 == 0) { + uVar14 = 0; + uVar7 = uVar14; + } + else { + iVar15 = -1 - uVar11; + if ((int)(-1 - uVar11) <= (int)(-2 - uVar16)) { + iVar15 = -2 - uVar16; + } + iVar15 = iVar15 + 1; + uVar7 = 0; + uVar14 = 0; + puVar12 = (uint *)param_1; + uVar13 = 0xffffffff; + do { + uVar19 = *puVar12; + puVar12 = puVar12 + 1; + uVar3 = uVar19; + if (uVar13 <= uVar19) { + uVar3 = uVar13; + } + uVar13 = uVar19; + if (uVar19 <= uVar14) { + uVar13 = uVar14; + } + uVar14 = uVar13; + uVar7 = uVar19 + uVar7; + iVar15 = iVar15 + 1; + uVar13 = uVar3; + } while (iVar15 != 0); + } + uVar13 = ((param_7 + param_5) * *(int *)pCVar9 >> 1) + (param_6 + param_4 >> 1); + iVar15 = ReviseTemperature(this,(ushort)uVar3,uVar13); + *param_3 = iVar15; + iVar15 = ReviseTemperature(this,(ushort)uVar14,uVar13); + param_3[1] = iVar15; + uVar2 = __udivsi3(uVar7,uVar17); + iVar15 = ReviseTemperature(this,uVar2,uVar13); + param_3[2] = iVar15; + if (*(int *)(this + 0x50) != 0) { + iVar15 = CorrectTemperature((int)this,extraout_s0,*param_3); + *param_3 = iVar15; + iVar15 = CorrectTemperature((int)this,extraout_s0_00,param_3[1]); + param_3[1] = iVar15; + iVar15 = CorrectTemperature((int)this,extraout_s0_01,param_3[2]); + param_3[2] = iVar15; + } + if (uVar17 != 0) { + iVar15 = -1 - uVar11; + if ((int)(-1 - uVar11) <= (int)(-2 - uVar16)) { + iVar15 = -2 - uVar16; + } + iVar15 = iVar15 + 1; + do { + uVar3 = ReviseTemperature(this,(ushort)*param_1,uVar13); + *param_1 = uVar3; + if (*(int *)(this + 0x50) != 0) { + uVar3 = CorrectTemperature((int)this,extraout_s0_02,uVar3); + *param_1 = uVar3; + } + iVar15 = iVar15 + 1; + param_1 = (int *)((uint *)param_1 + 1); + } while (iVar15 != 0); + } + if (param_8 == 0) { + return uVar17; + } + pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); + return uVar17; + } + } + else if (((3 < param_2) && (param_1 != (int *)0x0)) && (param_3 != (int *)0x0)) + goto LAB_0002c59e; + } + } + uVar18 = 0xe4ae0005; + if (*(int *)(this + 0xac) != 0) { + uVar18 = 0xe4ae0001; + } + puVar5 = (undefined4 *)__errno(); + *puVar5 = uVar18; + if (param_8 != 0) { + pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); + } + return 0; +} + + + +### FUNC GetRgnTemperatureInfo @ 0002c8e4 + +/* CFunctions::GetRgnTemperatureInfo(unsigned int const*, unsigned int, int*, int) */ + +undefined4 __thiscall +CFunctions::GetRgnTemperatureInfo + (CFunctions *this,uint *param_1,uint param_2,int *param_3,int param_4) + +{ + ushort uVar1; + uint uVar2; + int iVar3; + undefined4 *puVar4; + uint uVar5; + uint uVar6; + uint uVar7; + undefined4 uVar8; + uint uVar9; + bool bVar10; + float extraout_s0; + float extraout_s0_00; + float extraout_s0_01; + uint local_2c; + uint local_28; + uint *local_24; + int local_20; + uint local_1c; + uint local_18; + + if (param_4 != 0) { + pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); + } + if ((((param_2 == 0) || (param_1 == (uint *)0x0)) || (param_3 == (int *)0x0)) || + (*(int *)(this + 0xac) == 0)) { + uVar8 = 0xe4ae0005; + if (*(int *)(this + 0xac) != 0) { + uVar8 = 0xe4ae0001; + } + puVar4 = (undefined4 *)__errno(); + *puVar4 = uVar8; + uVar8 = 0; + } + else { + local_20 = 0; + local_2c = 0; + local_18 = 0; + local_1c = 0; + uVar5 = 0; + uVar6 = 0xffffffff; + local_28 = param_2; + local_24 = param_1; + do { + uVar9 = *local_24; + local_24 = local_24 + 1; + uVar7 = (uint)*(ushort *)(*(int *)(this + 0xb4) + uVar9 * 2); + uVar2 = uVar9; + if (uVar6 <= uVar7) { + uVar2 = local_18; + } + local_18 = uVar2; + if (uVar7 <= uVar5) { + uVar9 = local_2c; + } + bVar10 = CARRY4(local_1c,uVar7); + local_1c = local_1c + uVar7; + local_20 = local_20 + (uint)bVar10; + uVar2 = uVar7; + if (uVar6 <= uVar7) { + uVar2 = uVar6; + } + if (uVar7 <= uVar5) { + uVar7 = uVar5; + } + uVar5 = uVar7; + local_28 = local_28 - 1; + uVar6 = uVar2; + local_2c = uVar9; + } while (local_28 != 0); + iVar3 = ReviseTemperature(this,(ushort)uVar2,local_18); + *param_3 = iVar3; + iVar3 = ReviseTemperature(this,(ushort)uVar5,uVar9); + param_3[1] = iVar3; + uVar1 = __aeabi_ldivmod(local_1c,local_20,param_2,0); + iVar3 = ReviseTemperature(this,uVar1, + (*(uint *)(this + 0x37ec) >> 1) + (*(uint *)(this + 0x50f0) >> 1)); + param_3[2] = iVar3; + param_3[3] = local_18; + param_3[4] = uVar9; + if (*(int *)(this + 0x50) != 0) { + iVar3 = CorrectTemperature((int)this,extraout_s0,*param_3); + *param_3 = iVar3; + iVar3 = CorrectTemperature((int)this,extraout_s0_00,param_3[1]); + param_3[1] = iVar3; + iVar3 = CorrectTemperature((int)this,extraout_s0_01,param_3[2]); + param_3[2] = iVar3; + } + uVar8 = 1; + } + if (param_4 != 0) { + pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); + } + return uVar8; +} + + + +### FUNC GetTemperature @ 0002ca50 + +/* CFunctions::GetTemperature(unsigned int, unsigned int, int) */ + +uint __thiscall CFunctions::GetTemperature(CFunctions *this,uint param_1,uint param_2,int param_3) + +{ + bool bVar1; + ushort uVar2; + int iVar3; + int iVar4; + int iVar5; + int iVar6; + undefined4 *puVar7; + int iVar8; + int iVar9; + int iVar10; + int iVar11; + undefined4 uVar12; + int iVar13; + uint uVar14; + float extraout_s0; + + if (param_3 != 0) { + pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); + } + if ((*(int *)(this + 0xac) == 0) || (*(uint *)(this + 0x50f0) <= param_1)) { + uVar12 = 0xe4ae0005; + if (*(int *)(this + 0xac) != 0) { + uVar12 = 0xe4ae0001; + } + puVar7 = (undefined4 *)__errno(); + *puVar7 = uVar12; + uVar14 = 0x80000001; + } + else { + iVar10 = 3; + if (param_2 - 1 < 5) { + iVar10 = *(int *)(&DAT_0002cb84 + (param_2 - 1) * 4); + } + uVar14 = *(uint *)(this + 0x37ec); + iVar3 = __udivsi3(param_1,uVar14); + iVar4 = param_1 - iVar3 * uVar14; + iVar9 = iVar4 + iVar10; + iVar4 = iVar4 - iVar10; + iVar8 = 0; + iVar5 = 0; + if (iVar4 <= iVar9) { + iVar6 = iVar10 * ~uVar14 * 2 + param_1 * 2; + iVar5 = 0; + iVar8 = 0; + do { + if (((-1 < iVar4) && (iVar4 < (int)uVar14)) && + (iVar11 = iVar3 - iVar10, iVar13 = iVar6, iVar3 - iVar10 <= iVar3 + iVar10)) { + do { + if ((-1 < iVar11) && (iVar11 < *(int *)(this + 0x37f0))) { + iVar5 = iVar5 + (uint)*(ushort *)(*(int *)(this + 0xb4) + iVar13); + iVar8 = iVar8 + 1; + } + bVar1 = iVar11 < iVar3 + iVar10; + iVar11 = iVar11 + 1; + iVar13 = iVar13 + uVar14 * 2; + } while (bVar1); + } + iVar6 = iVar6 + 2; + bVar1 = iVar4 < iVar9; + iVar4 = iVar4 + 1; + } while (bVar1); + } + uVar2 = __udivsi3(iVar5,iVar8); + uVar14 = ReviseTemperature(this,uVar2,param_1); + if (*(int *)(this + 0x50) != 0) { + uVar14 = CorrectTemperature((int)this,extraout_s0,uVar14); + } + } + if (param_3 != 0) { + pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); + } + return uVar14; +} + + + +### FUNC Temp2Energe @ 0002cbac + +/* CFunctions::Temp2Energe(int) const */ + +int __thiscall CFunctions::Temp2Energe(CFunctions *this,int param_1) + +{ + int iVar1; + int iVar2; + + iVar1 = param_1 + 50000; + iVar2 = 0; + if (-0xe350 < param_1) { + iVar2 = 0x111; + if (param_1 < 0x217cb0) { + iVar2 = (int)(iVar1 + ((uint)(iVar1 >> 0x1f) >> 0x13)) >> 0xd; + } + } + iVar1 = (*(int *)(T2E + iVar2 * 4 + 4) - *(int *)(T2E + iVar2 * 4)) * (iVar1 + iVar2 * -0x2000); + return ((int)(iVar1 + ((uint)(iVar1 >> 0x1f) >> 0x13)) >> 0xd) + *(int *)(T2E + iVar2 * 4); +} + + + +### FUNC dTemp2dEnerge @ 0002cc04 + +/* CFunctions::dTemp2dEnerge(int, int) const */ + +int __thiscall CFunctions::dTemp2dEnerge(CFunctions *this,int param_1,int param_2) + +{ + int iVar1; + + iVar1 = 0; + if (-0xe350 < param_1) { + iVar1 = 0x111; + if (param_1 < 0x217cb0) { + iVar1 = (int)(param_1 + 50000 + ((uint)(param_1 + 50000 >> 0x1f) >> 0x13)) >> 0xd; + } + } + iVar1 = (*(int *)(T2E + iVar1 * 4 + 4) - *(int *)(T2E + iVar1 * 4)) * param_2; + return (int)(iVar1 + ((uint)(iVar1 >> 0x1f) >> 0x13)) >> 0xd; +} + + + +### FUNC dEnerge2dTemp @ 0002cc54 + +/* CFunctions::dEnerge2dTemp(int, int) const */ + +int __thiscall CFunctions::dEnerge2dTemp(CFunctions *this,int param_1,int param_2) + +{ + int iVar1; + + iVar1 = 0; + if (-0xe350 < param_1) { + iVar1 = 0x111; + if (param_1 < 0x217cb0) { + iVar1 = (int)(param_1 + 50000 + ((uint)(param_1 + 50000 >> 0x1f) >> 0x13)) >> 0xd; + } + } + return *(int *)(E2TAccQ10 + iVar1 * 4) * param_2 >> 10; +} + + + +### FUNC Energe2Temp @ 0002cc98 + +/* CFunctions::Energe2Temp(int) const */ + +int __thiscall CFunctions::Energe2Temp(CFunctions *this,int param_1) + +{ + uint uVar1; + uint uVar2; + uint uVar3; + + uVar2 = 0x112; + uVar1 = 0; + do { + uVar3 = uVar1 + uVar2 >> 1; + if (*(int *)(T2E + uVar3 * 4) <= param_1) { + uVar1 = uVar3; + uVar3 = uVar2; + } + uVar2 = uVar3; + } while (uVar1 + 1 < uVar2); + return uVar1 * 0x2000 + + (*(int *)(E2TAccQ10 + uVar1 * 4) * (param_1 - *(int *)(T2E + uVar1 * 4)) >> 10) + -50000; +} + + + +### FUNC ConvertInnerTemp2mC @ 0002ccfc + +/* CFunctions::ConvertInnerTemp2mC(unsigned short) const */ + +int __thiscall CFunctions::ConvertInnerTemp2mC(CFunctions *this,ushort param_1) + +{ + return ((uint)param_1 << (*(uint *)(this + 0x5104) & 0xff)) + *(int *)(this + 0x5100); +} + + + +### FUNC CalibrationMain_RTV @ 0002cd10 + +/* CFunctions::CalibrationMain_RTV(unsigned short const*) */ + +void __thiscall CFunctions::CalibrationMain_RTV(CFunctions *this,ushort *param_1) + +{ + int iVar1; + int iVar2; + undefined2 *puVar3; + uint uVar4; + int iVar5; + short *psVar6; + int iVar7; + int iVar8; + ushort *puVar9; + int iVar10; + short *local_18; + + local_18 = *(short **)(this + 0x3114); + puVar9 = (ushort *)0x0; + if (*(int *)(this + 0x37a0) != 0) { + puVar9 = *(ushort **)(this + 0x378c); + } + iVar7 = *(int *)(this + 0x50f0); + iVar1 = iVar7 * 2; + iVar2 = *(int *)(this + 0x2e28); + if (iVar7 != 0) { + iVar10 = *(int *)(this + 0x3120); + puVar3 = *(undefined2 **)(this + 0xb4); + do { + iVar8 = (int)((uint)*param_1 - (uint)*puVar9) >> 1; + puVar9 = puVar9 + 1; + param_1 = param_1 + 1; + uVar4 = 0; + if (iVar2 != 1) { + uVar4 = 0; + psVar6 = local_18; + do { + if (iVar8 <= *psVar6) break; + psVar6 = psVar6 + 1; + uVar4 = uVar4 + 1; + } while (uVar4 < iVar2 - 1U); + } + iVar5 = iVar1 * uVar4 * 2; + iVar8 = ((int)(iVar8 * (uint)*(ushort *)(iVar10 + iVar5)) >> 0xc) + + (uint)*(ushort *)(iVar10 + iVar5 + 2); + if (iVar8 < 1) { + iVar8 = 0; + } + if (0xfffe < iVar8) { + iVar8 = 0xffff; + } + *puVar3 = (short)iVar8; + local_18 = local_18 + iVar2 + -1; + iVar7 = iVar7 + -1; + puVar3 = puVar3 + 1; + iVar10 = iVar10 + 4; + } while (iVar7 != 0); + } + return; +} + + + +### FUNC BlindCompensation @ 0002cde8 + +/* CFunctions::BlindCompensation(unsigned short*) */ + +void __thiscall CFunctions::BlindCompensation(CFunctions *this,ushort *param_1) + +{ + ushort uVar1; + int iVar2; + uint uVar3; + undefined4 uVar4; + uint uVar5; + int *piVar6; + + uVar3 = *(uint *)(this + *(int *)(this + 0x3108) * 4 + 0x2f28); + if (uVar3 != 0) { + piVar6 = (int *)(*(int *)(this + 0x3124) + 0x14); + uVar5 = 0; + do { + switch(piVar6[-4]) { + case 3: + iVar2 = (uint)param_1[piVar6[-2]] + (uint)param_1[piVar6[-3]] + (uint)param_1[piVar6[-1]]; + uVar4 = 3; + goto LAB_0002cebc; + case 4: + uVar1 = (ushort)((uint)param_1[piVar6[-2]] + (uint)param_1[piVar6[-3]] + + (uint)param_1[piVar6[-1]] + (uint)param_1[*piVar6] >> 2); + break; + case 5: + iVar2 = (uint)param_1[piVar6[-2]] + (uint)param_1[piVar6[-3]] + (uint)param_1[piVar6[-1]] + + (uint)param_1[*piVar6] + (uint)param_1[piVar6[1]]; + uVar4 = 5; + goto LAB_0002cebc; + case 6: + iVar2 = (uint)param_1[piVar6[-2]] + (uint)param_1[piVar6[-3]] + (uint)param_1[piVar6[-1]] + + (uint)param_1[*piVar6] + (uint)param_1[piVar6[1]] + (uint)param_1[piVar6[2]]; + uVar4 = 6; +LAB_0002cebc: + uVar1 = __udivsi3(iVar2,uVar4); + break; + case 7: + uVar1 = __divsi3((uint)param_1[piVar6[-2]] + (uint)param_1[piVar6[-3]] + + (uint)param_1[piVar6[-1]] + (uint)param_1[*piVar6] + + (uint)param_1[piVar6[1]] + (uint)param_1[piVar6[2]] + + (uint)param_1[piVar6[3]],7); + break; + case 8: + uVar1 = (ushort)((int)((uint)param_1[piVar6[-2]] + (uint)param_1[piVar6[-3]] + + (uint)param_1[piVar6[-1]] + (uint)param_1[*piVar6] + + (uint)param_1[piVar6[1]] + (uint)param_1[piVar6[2]] + + (uint)param_1[piVar6[3]] + (uint)param_1[piVar6[4]]) >> 3); + break; + default: + goto switchD_0002ce1a_default; + } + param_1[piVar6[-5]] = uVar1; + piVar6 = piVar6 + 10; + uVar5 = uVar5 + 1; + } while (uVar5 < uVar3); + } +switchD_0002ce1a_default: + return; +} + + + +### FUNC ConvertResponse2Temperature @ 0002cf80 + +/* CFunctions::ConvertResponse2Temperature(unsigned short const*) */ + +void __thiscall CFunctions::ConvertResponse2Temperature(CFunctions *this,ushort *param_1) + +{ + undefined2 *puVar1; + ushort *puVar2; + int iVar3; + int iVar4; + int iVar5; + + puVar2 = (ushort *)0x0; + if (*(int *)(this + 0x37a0) != 0) { + puVar2 = *(ushort **)(this + 0x378c); + } + iVar3 = 50000 - *(int *)(this + 0x5100) >> (*(uint *)(this + 0x5104) & 0xff); + if (iVar3 < 1) { + iVar3 = 0; + } + if (0xfffe < iVar3) { + iVar3 = 0xffff; + } + iVar4 = *(int *)(this + 0x50f0); + if (iVar4 != 0) { + puVar1 = *(undefined2 **)(this + 0xb4); + do { + iVar5 = ((uint)*param_1 - (uint)*puVar2) * 3 + iVar3; + if (iVar5 < 1) { + iVar5 = 0; + } + if (0xfffe < iVar5) { + iVar5 = 0xffff; + } + *puVar1 = (short)iVar5; + iVar4 = iVar4 + -1; + puVar1 = puVar1 + 1; + puVar2 = puVar2 + 1; + param_1 = param_1 + 1; + } while (iVar4 != 0); + } + return; +} + + + +### FUNC GetTemperaturemC @ 0002d00c + +/* CFunctions::GetTemperaturemC(int*, unsigned int, int, int) */ + +undefined4 __thiscall +CFunctions::GetTemperaturemC(CFunctions *this,int *param_1,uint param_2,int param_3,int param_4) + +{ + uint uVar1; + undefined4 *puVar2; + uint uVar3; + uint uVar4; + undefined4 uVar5; + ushort *puVar6; + float extraout_s0; + + if (param_4 != 0) { + pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); + } + if ((param_1 == (int *)0x0) || (*(int *)(this + 0xac) == 0)) { + uVar5 = 0xe4ae0005; + if (*(int *)(this + 0xac) != 0) { + uVar5 = 0xe4ae0001; + } + puVar2 = (undefined4 *)__errno(); + *puVar2 = uVar5; + uVar5 = 0; + } + else { + uVar3 = *(uint *)(this + 0x50f0); + if (param_2 >> 2 <= *(uint *)(this + 0x50f0)) { + uVar3 = param_2 >> 2; + } + if (uVar3 != 0) { + puVar6 = *(ushort **)(this + 0xb4); + uVar4 = 0; + do { + uVar1 = ReviseTemperature(this,*puVar6,uVar4); + puVar6 = puVar6 + 1; + if (param_3 != 0) { + uVar1 = CorrectTemperature((int)this,extraout_s0,uVar1); + } + param_1[uVar4] = uVar1; + uVar4 = uVar4 + 1; + } while (uVar4 < uVar3); + } + uVar5 = 1; + } + if (param_4 != 0) { + pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); + } + return uVar5; +} + + + +### FUNC GetCenterTemperatureSharpness @ 0002d0c0 + +/* CFunctions::GetCenterTemperatureSharpness(unsigned int, unsigned int) */ + +uint __thiscall +CFunctions::GetCenterTemperatureSharpness(CFunctions *this,uint param_1,uint param_2) + +{ + uint uVar1; + uint uVar2; + uint uVar3; + int iVar4; + uint uVar5; + uint uVar6; + int iVar7; + int iVar8; + uint uVar9; + int iVar10; + uint uVar11; + int iVar12; + uint uVar13; + int iVar14; + pthread_mutex_t *__mutex; + uint uVar15; + int iVar16; + uint uVar17; + int iVar18; + int local_1c; + + uVar6 = 0x10; + if ((0xf < param_1) && + (uVar6 = *(uint *)(this + 0x37ec) >> 1, param_1 <= *(uint *)(this + 0x37ec) >> 1)) { + uVar6 = param_1; + } + uVar1 = *(uint *)(this + 0x37f0); + uVar15 = 9; + if ((8 < param_2) && (uVar15 = uVar1 >> 1, param_2 <= uVar1 >> 1)) { + uVar15 = param_2; + } + iVar8 = *(int *)(this + 0x37ec); + __mutex = (pthread_mutex_t *)(this + 0xb0); + pthread_mutex_lock(__mutex); + uVar9 = uVar1 + uVar15 >> 1; + uVar5 = iVar8 + uVar6 >> 1; + uVar6 = iVar8 - uVar6 >> 1; + if ((*(int *)(this + 0xac) == 0) || (uVar15 = uVar1 - uVar15 >> 1, uVar9 <= uVar15)) { + pthread_mutex_unlock(__mutex); + uVar1 = 0; + } + else { + iVar10 = *(int *)(this + 0xb4); + iVar12 = *(int *)(this + 0x37ec); + iVar8 = uVar6 * 2 + iVar12 * (uVar15 * 2 + 2); + iVar7 = uVar6 * 2 + iVar12 * (uVar15 - 1) * 2; + uVar1 = 0; + local_1c = 0; + do { + iVar4 = uVar6 - uVar5; + iVar14 = iVar10; + if (uVar5 != uVar6) { + do { + uVar13 = (uint)*(ushort *)(iVar14 + -2 + iVar7); + uVar2 = (uint)*(ushort *)(iVar14 + iVar7 + 2); + iVar16 = uVar13 - uVar2; + uVar17 = iVar16 >> 0x1f; + uVar11 = (uint)*(ushort *)(iVar14 + -2 + iVar8); + iVar18 = uVar13 - uVar11; + uVar3 = iVar18 >> 0x1f; + local_1c = ((iVar18 + uVar3 ^ uVar3) + (iVar16 + uVar17 ^ uVar17) >> 1) + local_1c; + uVar1 = (uVar2 + uVar13 + uVar11 + (uint)*(ushort *)(iVar14 + iVar8 + 2) >> 2) + uVar1; + iVar4 = iVar4 + 1; + iVar14 = iVar14 + 2; + } while (iVar4 != 0); + } + iVar10 = iVar10 + iVar12 * 2; + uVar15 = uVar15 + 1; + } while (uVar15 != uVar9); + pthread_mutex_unlock(__mutex); + if (uVar1 >> 0x10 != 0) { + uVar1 = __udivsi3(local_1c); + } + } + return uVar1; +} + + + +### FUNC CalcSD @ 0002d210 + +/* CFunctions::CalcSD(int, int) */ + +undefined4 __thiscall CFunctions::CalcSD(CFunctions *this,int param_1,int param_2) + +{ + longlong lVar1; + pthread_mutex_t *__mutex; + int iVar2; + ushort *puVar3; + undefined4 uVar4; + int iVar5; + int iVar6; + uint uVar7; + uint uVar8; + uint uVar9; + int iVar10; + uint uVar11; + uint uVar12; + uint uVar13; + bool bVar14; + longlong lVar15; + undefined8 uVar16; + undefined8 uVar17; + undefined4 in_stack_ffffffb0; + uint local_2c; + + uVar11 = 0x10; + if ((0xf < param_1) && + (uVar11 = *(uint *)(this + 0x37ec), (uint)param_1 <= *(uint *)(this + 0x37ec))) { + uVar11 = param_1; + } + iVar5 = *(int *)(this + 0x37ec); + uVar9 = *(uint *)(this + 0x37f0); + __mutex = (pthread_mutex_t *)(this + 0xb0); + pthread_mutex_lock(__mutex); + uVar7 = uVar9; + if ((uint)param_2 <= uVar9) { + uVar7 = param_2; + } + uVar12 = 9; + if (8 < param_2) { + uVar12 = uVar7; + } + uVar8 = uVar9 + uVar12 >> 1; + uVar9 = uVar9 - uVar12 >> 1; + uVar7 = iVar5 + uVar11 >> 1; + uVar11 = iVar5 - uVar11 >> 1; + if (*(int *)(this + 0xac) == 0) { + pthread_mutex_unlock(__mutex); + uVar4 = 0; + } + else { + uVar12 = 0; + iVar5 = 0; + lVar1 = 0; + if (uVar9 < uVar8) { + iVar6 = *(int *)(this + 0xb4); + iVar2 = *(int *)(this + 0x37ec); + lVar1 = 0; + uVar12 = 0; + iVar5 = 0; + local_2c = uVar9; + do { + if (uVar11 < uVar7) { + puVar3 = (ushort *)(iVar6 + iVar2 * local_2c * 2 + uVar11 * 2); + iVar10 = uVar7 - uVar11; + do { + uVar13 = (uint)*puVar3; + lVar15 = __muldi3(uVar13,0,uVar13,0); + lVar1 = lVar15 + lVar1; + bVar14 = CARRY4(uVar12,uVar13); + uVar12 = uVar12 + uVar13; + iVar5 = iVar5 + (uint)bVar14; + iVar10 = iVar10 + -1; + puVar3 = puVar3 + 1; + } while (iVar10 != 0); + } + local_2c = local_2c + 1; + } while (local_2c != uVar8); + } + pthread_mutex_unlock(__mutex); + iVar2 = (uVar8 - uVar9) * (uVar7 - uVar11); + uVar16 = __floatdidf(uVar12,iVar5); + uVar4 = (undefined4)((ulonglong)uVar16 >> 0x20); + uVar16 = __muldf3((int)uVar16,uVar4,(int)uVar16,uVar4); + uVar17 = __floatunsidf(iVar2); + uVar16 = __divdf3((int)uVar16,(int)((ulonglong)uVar16 >> 0x20),(int)uVar17, + (int)((ulonglong)uVar17 >> 0x20)); + uVar17 = __floatdidf((int)lVar1,(int)((ulonglong)lVar1 >> 0x20)); + uVar16 = __subdf3((int)uVar17,(int)((ulonglong)uVar17 >> 0x20),(int)uVar16, + (int)((ulonglong)uVar16 >> 0x20)); + uVar17 = __floatunsidf(iVar2 + -1); + __divdf3((int)uVar16,(int)((ulonglong)uVar16 >> 0x20),(int)uVar17, + (int)((ulonglong)uVar17 >> 0x20)); + sqrt((double)CONCAT44(__mutex,in_stack_ffffffb0)); + uVar4 = __fixdfsi(); + } + return uVar4; +} + + + +### FUNC LocalMap7x7 @ 0002d390 + +/* CFunctions::LocalMap7x7(int*, unsigned short const*, unsigned int) */ + +void __thiscall CFunctions::LocalMap7x7(CFunctions *this,int *param_1,ushort *param_2,uint param_3) + +{ + int iVar1; + uint uVar2; + uint uVar3; + uint uVar4; + uint uVar5; + uint uVar6; + uint uVar7; + uint uVar8; + uint uVar9; + uint uVar10; + int iVar11; + int local_20; + uint local_1c; + ushort *local_18; + + uVar5 = (uint)param_2[1]; + uVar8 = (uint)*param_2; + local_1c = 0; + local_20 = -3; + uVar2 = uVar8; + uVar4 = uVar8; + local_18 = param_2; + while( true ) { + uVar7 = uVar2; + if (uVar4 <= uVar2) { + uVar7 = uVar4; + } + if (uVar2 <= uVar5) { + uVar4 = uVar7; + } + uVar10 = (uint)local_18[2]; + uVar7 = uVar10; + if (uVar4 <= uVar10) { + uVar7 = uVar4; + } + uVar3 = uVar2; + if (uVar2 <= uVar5) { + uVar3 = uVar5; + } + if (uVar10 <= uVar3) { + uVar4 = uVar7; + } + uVar7 = (uint)local_18[4]; + uVar5 = uVar7; + if (uVar4 <= uVar7) { + uVar5 = uVar4; + } + uVar6 = uVar10; + if (uVar10 <= uVar3) { + uVar6 = uVar3; + } + if (uVar7 <= uVar6) { + uVar4 = uVar5; + } + uVar3 = (uint)local_18[6]; + uVar5 = uVar3; + if (uVar4 <= uVar3) { + uVar5 = uVar4; + } + uVar9 = uVar7; + if (uVar7 <= uVar6) { + uVar9 = uVar6; + } + if (uVar3 <= uVar9) { + uVar4 = uVar5; + } + local_18 = local_18 + *(int *)(this + 0x37ec) * 2; + uVar5 = uVar3; + if (uVar3 <= uVar9) { + uVar5 = uVar9; + } + local_1c = local_1c + uVar2 + uVar10 + uVar7 + uVar3; + if (local_20 == 0) break; + local_20 = local_20 + 1; + uVar2 = (uint)*local_18; + } + iVar11 = -3; + if (param_3 <= (uVar5 - uVar4) * 0x20) { + local_1c = local_1c >> 4; + uVar2 = uVar5 - local_1c; + if (uVar5 - local_1c <= param_3) { + uVar2 = param_3; + } + uVar5 = local_1c - uVar4; + if (local_1c - uVar4 <= uVar2) { + uVar5 = uVar2; + } + iVar1 = __udivsi3(0x8000,uVar5); + while( true ) { + *param_1 = iVar1 * (uVar8 - local_1c) + *param_1; + param_1[2] = iVar1 * (param_2[2] - local_1c) + param_1[2]; + param_1[4] = iVar1 * (param_2[4] - local_1c) + param_1[4]; + param_1[6] = iVar1 * (param_2[6] - local_1c) + param_1[6]; + param_2 = param_2 + *(int *)(this + 0x37ec) * 2; + if (iVar11 == 0) break; + param_1 = param_1 + *(int *)(this + 0x37ec) * 2; + iVar11 = iVar11 + 1; + uVar8 = (uint)*param_2; + } + } + return; +} + + + +### FUNC LocalMap7x7_Simple @ 0002d4e8 + +/* CFunctions::LocalMap7x7_Simple(int*, unsigned short const*, unsigned int) */ + +void __thiscall +CFunctions::LocalMap7x7_Simple(CFunctions *this,int *param_1,ushort *param_2,uint param_3) + +{ + int iVar1; + uint uVar2; + uint uVar3; + ushort *puVar4; + uint uVar5; + int iVar6; + uint uVar7; + uint uVar8; + uint uVar9; + uint uVar10; + uint uVar11; + uint uVar12; + int local_20; + + iVar1 = *(int *)(this + 0x37ec); + local_20 = -3; + uVar11 = (uint)param_2[1]; + uVar2 = (uint)*param_2; + uVar8 = 0; + puVar4 = param_2; + uVar10 = uVar2; + while( true ) { + uVar12 = uVar2; + if (uVar10 <= uVar2) { + uVar12 = uVar10; + } + if (uVar2 <= uVar11) { + uVar10 = uVar12; + } + uVar9 = (uint)puVar4[2]; + uVar12 = uVar9; + if (uVar10 <= uVar9) { + uVar12 = uVar10; + } + uVar3 = uVar2; + if (uVar2 <= uVar11) { + uVar3 = uVar11; + } + if (uVar9 <= uVar3) { + uVar10 = uVar12; + } + uVar12 = (uint)puVar4[4]; + uVar11 = uVar12; + if (uVar10 <= uVar12) { + uVar11 = uVar10; + } + uVar7 = uVar9; + if (uVar9 <= uVar3) { + uVar7 = uVar3; + } + if (uVar12 <= uVar7) { + uVar10 = uVar11; + } + uVar3 = (uint)puVar4[6]; + uVar11 = uVar3; + if (uVar10 <= uVar3) { + uVar11 = uVar10; + } + uVar5 = uVar12; + if (uVar12 <= uVar7) { + uVar5 = uVar7; + } + if (uVar3 <= uVar5) { + uVar10 = uVar11; + } + puVar4 = puVar4 + iVar1 * 2; + uVar11 = uVar3; + if (uVar3 <= uVar5) { + uVar11 = uVar5; + } + uVar8 = uVar8 + uVar2 + uVar9 + uVar12 + uVar3; + if (local_20 == 0) break; + local_20 = local_20 + 1; + uVar2 = (uint)*puVar4; + } + iVar6 = 0; + if (param_3 <= (uVar11 - uVar10) * 0x20) { + uVar8 = uVar8 >> 4; + uVar2 = uVar11 - uVar8; + if (uVar11 - uVar8 <= param_3) { + uVar2 = param_3; + } + uVar11 = uVar8 - uVar10; + if (uVar8 - uVar10 <= uVar2) { + uVar11 = uVar2; + } + iVar6 = __udivsi3(0x8000,uVar11); + iVar6 = iVar6 * (param_2[iVar1 * 3 + 3] - uVar8); + } + *param_1 = iVar6; + return; +} + + + +### FUNC SetEX @ 0002d5fc + +/* CFunctions::SetEX(EX, int, int) */ + +void __thiscall CFunctions::SetEX(CFunctions *this,uint param_2,int param_3,int param_4) + +{ + uint uVar1; + uint uVar2; + uint uVar3; + + pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); + if (param_2 - 1 < 4) { + *(uint *)(this + 0x3814) = param_2; + uVar2 = *(uint *)(this + 0x37f0); + uVar1 = (uVar2 - (uVar2 >> (param_2 & 0xff))) - 1; + uVar2 = param_4 - (uVar2 >> (param_2 + 1 & 0xff)); + if ((int)uVar2 < 1) { + uVar2 = 0; + } + if (uVar2 <= uVar1) { + uVar1 = uVar2; + } + uVar3 = *(uint *)(this + 0x37ec); + uVar2 = (uVar3 - (uVar3 >> (param_2 & 0xff))) - 2; + uVar3 = param_3 - (uVar3 >> (param_2 + 1 & 0xff)); + if ((int)uVar3 < 1) { + uVar3 = 0; + } + if (uVar3 <= uVar2) { + uVar2 = uVar3; + } + uVar2 = uVar2 & 0xfffffffe; + } + else { + uVar2 = 0; + *(undefined4 *)(this + 0x3814) = 0; + uVar1 = 0; + } + *(uint *)(this + 0x381c) = uVar1; + *(uint *)(this + 0x3818) = uVar2; + pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); + return; +} + + + +### FUNC GetEX @ 0002d698 + +/* CFunctions::GetEX() */ + +undefined4 __thiscall CFunctions::GetEX(CFunctions *this) + +{ + return *(undefined4 *)(this + 0x3814); +} + + + +### FUNC _M_put_nowiden @ 0002d6a4 + +/* std::ostream::_M_put_nowiden(char const*) */ + +void __thiscall std::ostream::_M_put_nowiden(ostream *this,char *param_1) + +{ + size_t sVar1; + int iVar2; + int iVar3; + int *piVar4; + size_t sVar5; + uint uVar6; + ostream *local_20; + undefined1 local_1c; + int local_18; + + local_18 = __stack_chk_guard; + local_20 = this; + local_1c = priv::__init_bostr>(this); + if (!(bool)local_1c) goto LAB_0002d7b4; + sVar1 = strlen(param_1); + iVar2 = *(int *)(*(int *)this + -0xc); + if (((int)sVar1 < *(int *)(this + iVar2 + 0x1c)) && + (iVar3 = *(int *)(this + iVar2 + 0x1c) - sVar1, iVar3 != 0)) { + piVar4 = *(int **)(this + iVar2 + 0x48); + if ((*(uint *)(this + iVar2 + 4) & 7) == 1) { + sVar5 = (**(code **)(*piVar4 + 0x2c))(piVar4,param_1,sVar1); + if (sVar5 == sVar1) { + iVar2 = (**(code **)(**(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48) + 0x30)) + (*(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48), + this[*(int *)(*(int *)this + -0xc) + 0x44],iVar3); + *(undefined4 *)(this + *(int *)(*(int *)this + -0xc) + 0x1c) = 0; + if (iVar2 == iVar3) goto LAB_0002d7b4; + goto LAB_0002d792; + } + } + else { + iVar2 = (**(code **)(*piVar4 + 0x30)) + (piVar4,this[iVar2 + 0x44],iVar3,*(code **)(*piVar4 + 0x30),iVar3,1,1); + if (iVar2 == iVar3) { + sVar5 = (**(code **)(**(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48) + 0x2c)) + (*(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48),param_1,sVar1); + goto LAB_0002d746; + } + } + *(undefined4 *)(this + *(int *)(*(int *)this + -0xc) + 0x1c) = 0; + } + else { + sVar5 = (**(code **)(**(int **)(this + iVar2 + 0x48) + 0x2c)) + (*(int **)(this + iVar2 + 0x48),param_1,sVar1); +LAB_0002d746: + *(undefined4 *)(this + *(int *)(*(int *)this + -0xc) + 0x1c) = 0; + if (sVar5 == sVar1) goto LAB_0002d7b4; + } +LAB_0002d792: + iVar2 = *(int *)(*(int *)this + -0xc); + uVar6 = *(uint *)(this + iVar2 + 8) | (uint)(*(int *)(this + iVar2 + 0x48) == 0) | 4; + *(uint *)(this + iVar2 + 8) = uVar6; + if ((uVar6 & *(uint *)(this + iVar2 + 0x14)) != 0) { + /* WARNING: Subroutine does not return */ + ios_base::_M_throw_failure(); + } +LAB_0002d7b4: + sentry::~sentry((sentry *)&local_20); + if (__stack_chk_guard == local_18) { + return; + } + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); +} + + + +### FUNC ~sentry @ 0002d824 + +/* std::ostream::sentry::~sentry() */ + +sentry * __thiscall std::ostream::sentry::~sentry(sentry *this) + +{ + int iVar1; + + if (((int)((uint)*(byte *)((int)*(int **)this + *(int *)(**(int **)this + -0xc) + 5) << 0x1a) < 0) + && (iVar1 = FUN_00030e64(), iVar1 == 0)) { + flush(*(ostream **)this); + } + return this; +} + + + +### FUNC __init_bostr> @ 0002d84e + +/* bool std::priv::__init_bostr >(std::ostream&) */ + +bool std::priv::__init_bostr>(ostream *param_1) + +{ + bool bVar1; + int iVar2; + + iVar2 = *(int *)(*(int *)param_1 + -0xc); + bVar1 = false; + if (*(int *)(param_1 + iVar2 + 8) == 0) { + if (*(int *)(param_1 + iVar2 + 0x48) == 0) { + *(undefined4 *)(param_1 + iVar2 + 8) = 1; + if (((byte)param_1[iVar2 + 0x14] & 1) != 0) { + /* WARNING: Subroutine does not return */ + ios_base::_M_throw_failure(); + } + iVar2 = *(int *)(*(int *)param_1 + -0xc); + } + if (*(ostream **)(param_1 + iVar2 + 0x4c) != (ostream *)0x0) { + ostream::flush(*(ostream **)(param_1 + iVar2 + 0x4c)); + iVar2 = *(int *)(*(int *)param_1 + -0xc); + } + bVar1 = true; + if (*(int *)(param_1 + iVar2 + 8) != 0) { + bVar1 = false; + } + } + return bVar1; +} + + + +### FUNC flush @ 0002d8a0 + +/* std::ostream::flush() */ + +ostream * __thiscall std::ostream::flush(ostream *this) + +{ + int iVar1; + uint uVar2; + + if ((*(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48) != (int *)0x0) && + (iVar1 = (**(code **)(**(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48) + 0x14))(), + iVar1 == -1)) { + iVar1 = *(int *)(*(int *)this + -0xc); + uVar2 = *(uint *)(this + iVar1 + 8); + *(uint *)(this + iVar1 + 8) = uVar2 | 1; + if ((*(uint *)(this + iVar1 + 0x14) & (uVar2 | 1)) != 0) { + /* WARNING: Subroutine does not return */ + ios_base::_M_throw_failure(); + } + } + return this; +} + + + +### FUNC put @ 0002d8dc + +/* std::ostream::put(char) */ + +ostream * __thiscall std::ostream::put(ostream *this,char param_1) + +{ + int *piVar1; + int iVar2; + char *pcVar3; + uint uVar4; + ostream *local_20; + undefined1 local_1c; + int local_18; + + local_18 = __stack_chk_guard; + local_20 = this; + local_1c = priv::__init_bostr>(this); + if ((bool)local_1c) { + piVar1 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48); + pcVar3 = (char *)piVar1[5]; + if (pcVar3 < (char *)piVar1[6]) { + piVar1[5] = (int)(pcVar3 + 1); + *pcVar3 = param_1; + goto LAB_0002d93e; + } + iVar2 = (**(code **)(*piVar1 + 0x34))(piVar1,(int)param_1); + if (iVar2 != -1) goto LAB_0002d93e; + } + iVar2 = *(int *)(*(int *)this + -0xc); + uVar4 = *(uint *)(this + iVar2 + 8); + *(uint *)(this + iVar2 + 8) = uVar4 | 1; + if ((*(uint *)(this + iVar2 + 0x14) & (uVar4 | 1)) != 0) { + /* WARNING: Subroutine does not return */ + ios_base::_M_throw_failure(); + } +LAB_0002d93e: + sentry::~sentry((sentry *)&local_20); + if (__stack_chk_guard == local_18) { + return this; + } + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); +} + + + +### FUNC wait @ 0002d9a4 + +/* Condition::wait() */ + +void __thiscall Condition::wait(Condition *this) + +{ + pthread_mutex_lock((pthread_mutex_t *)this); + while (this[8] == (Condition)0x0) { + pthread_cond_wait((pthread_cond_t *)(this + 4),(pthread_mutex_t *)this); + } + this[8] = (Condition)0x0; + pthread_mutex_unlock((pthread_mutex_t *)this); + return; +} + + + +### FUNC waitForMsecs @ 0002d9e0 + +/* Condition::waitForMsecs(int) */ + +undefined4 __thiscall Condition::waitForMsecs(Condition *this,int param_1) + +{ + int extraout_r1; + int iVar1; + undefined4 uVar2; + undefined8 uVar3; + undefined4 local_2c; + timespec local_28; + timeval local_20; + int local_18; + + local_18 = __stack_chk_guard; + local_2c = 0; + gettimeofday(&local_20,(__timezone_ptr_t)0x0); + uVar3 = __aeabi_idivmod(param_1,1000); + iVar1 = local_20.tv_sec + (int)uVar3; + local_28.tv_nsec = local_20.tv_usec * 1000 + (int)((ulonglong)uVar3 >> 0x20) * 1000000; + local_28.tv_sec = iVar1; + if (1000000000 < local_28.tv_nsec) { + __aeabi_uidivmod(local_28.tv_nsec,1000000000); + local_28.tv_sec = iVar1 + 1; + local_28.tv_nsec = extraout_r1; + } + pthread_mutex_lock((pthread_mutex_t *)this); + do { + if (this[8] != (Condition)0x0) { + this[8] = (Condition)0x0; + uVar2 = local_2c; + break; + } + iVar1 = pthread_cond_timedwait((pthread_cond_t *)(this + 4),(pthread_mutex_t *)this,&local_28); + uVar2 = 1; + } while (iVar1 != 0x6e); + pthread_mutex_unlock((pthread_mutex_t *)this); + if (__stack_chk_guard != local_18) { + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); + } + return uVar2; +} + + + +### FUNC MStream @ 0002da98 + +/* MStream::MStream(unsigned int) */ + +MStream * __thiscall MStream::MStream(MStream *this,uint param_1) + +{ + void *pvVar1; + undefined4 *puVar2; + + *(uint *)this = param_1; + *(undefined4 *)(this + 4) = 0; + *(undefined4 *)(this + 8) = 0; + if (param_1 != 0) { + pvVar1 = operator_new__(param_1); + *(void **)(this + 4) = pvVar1; + *(void **)(this + 8) = pvVar1; + return this; + } + puVar2 = (undefined4 *)FUN_00030824(4); + *puVar2 = "ParamError: Invalid array size.[MStream::MStream]"; + /* WARNING: Subroutine does not return */ + FUN_000309e0(puVar2,&Error::typeinfo,0); +} + + + +### FUNC MStream @ 0002db08 + +/* MStream::MStream(char const*, unsigned int) */ + +MStream * __thiscall MStream::MStream(MStream *this,char *param_1,uint param_2) + +{ + size_t sVar1; + uint uVar2; + void *pvVar3; + + if (param_2 == 0) { + sVar1 = strlen(param_1); + param_2 = sVar1 + 1; + } + uVar2 = param_2 + 1; + *(uint *)this = uVar2; + pvVar3 = operator_new__(uVar2); + *(void **)(this + 4) = pvVar3; + __aeabi_memcpy(pvVar3,param_1,param_2); + *(undefined1 *)((int)pvVar3 + param_2) = 0; + *(uint *)(this + 8) = (int)pvVar3 + uVar2; + return this; +} + + + +### FUNC MStream @ 0002db48 + +/* MStream::MStream(std::string const&) */ + +MStream * __thiscall MStream::MStream(MStream *this,string *param_1) + +{ + uint uVar1; + void *pvVar2; + int iVar3; + int iVar4; + + iVar3 = *(int *)(param_1 + 0x14); + iVar4 = *(int *)(param_1 + 0x10) - iVar3; + uVar1 = iVar4 + 1; + *(uint *)this = uVar1; + pvVar2 = operator_new__(uVar1); + *(void **)(this + 4) = pvVar2; + __aeabi_memcpy(pvVar2,iVar3,iVar4); + *(undefined1 *)((int)pvVar2 + iVar4) = 0; + *(uint *)(this + 8) = (int)pvVar2 + uVar1; + return this; +} + + + +### FUNC MStream @ 0002db7e + +/* MStream::MStream(MStream const&) */ + +void __thiscall MStream::MStream(MStream *this,MStream *param_1) + +{ + *(undefined4 *)this = *(undefined4 *)param_1; + *(undefined4 *)(this + 4) = *(undefined4 *)(param_1 + 4); + *(undefined4 *)(this + 8) = *(undefined4 *)(param_1 + 8); + return; +} + + + +### FUNC operator= @ 0002db8c + +/* MStream::TEMPNAMEPLACEHOLDERVALUE(MStream const&) */ + +void __thiscall MStream::operator=(MStream *this,MStream *param_1) + +{ + void *pvVar1; + + *(undefined4 *)this = *(undefined4 *)param_1; + pvVar1 = (void *)0x0; + if (*(void **)(this + 4) != (void *)0x0) { + operator_delete__(*(void **)(this + 4)); + pvVar1 = operator_new__(*(uint *)this); + *(void **)(this + 4) = pvVar1; + } + *(void **)(this + 8) = pvVar1; + return; +} + + + +### FUNC ~MStream @ 0002dbb0 + +/* MStream::~MStream() */ + +MStream * __thiscall MStream::~MStream(MStream *this) + +{ + if (*(void **)(this + 4) != (void *)0x0) { + operator_delete__(*(void **)(this + 4)); + } + return this; +} + + + +### FUNC Split @ 0002dbc4 + +/* MStream::Split(char) */ + +void MStream::Split(char param_1) + +{ + vector> *this; + byte *pbVar1; + int in_r1; + uint in_r2; + byte *pbVar2; + byte *pbVar3; + MStream aMStack_30 [4]; + void *local_2c; + MStream aMStack_24 [4]; + void *local_20; + int local_18; + + this = (vector> *)(int)param_1; + local_18 = __stack_chk_guard; + *(undefined4 *)this = 0; + *(undefined4 *)(this + 4) = 0; + *(undefined4 *)(this + 8) = 0; + pbVar2 = *(byte **)(in_r1 + 4); + pbVar1 = *(byte **)(in_r1 + 8); + pbVar3 = pbVar2; + while (pbVar2 < pbVar1) { + if (*pbVar2 == in_r2) { + MStream(aMStack_24,(char *)pbVar3,(int)pbVar2 - (int)pbVar3); + std::vector>::push_back(this,aMStack_24); + if (local_20 != (void *)0x0) { + operator_delete__(local_20); + } + pbVar1 = *(byte **)(in_r1 + 8); + pbVar2 = pbVar2 + 1; + pbVar3 = pbVar2; + } + else { + pbVar2 = pbVar2 + 1; + } + } + if (1 < (int)pbVar2 - (int)pbVar3) { + MStream(aMStack_30,(char *)pbVar3,(int)pbVar2 - (int)pbVar3); + std::vector>::push_back(this,aMStack_30); + if (local_2c != (void *)0x0) { + operator_delete__(local_2c); + } + } + if (__stack_chk_guard != local_18) { + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); + } + return; +} + + + +### FUNC push_back @ 0002dc7c + +/* std::vector >::push_back(MStream const&) */ + +void __thiscall +std::vector>::push_back + (vector> *this,MStream *param_1) + +{ + MStream *pMVar1; + __false_type a_Stack_18 [4]; + int local_14; + + local_14 = __stack_chk_guard; + pMVar1 = *(MStream **)(this + 4); + if (pMVar1 == *(MStream **)(this + 8)) { + _M_insert_overflow_aux(this,pMVar1,param_1,a_Stack_18,1,true); + } + else { + *(undefined4 *)pMVar1 = *(undefined4 *)param_1; + *(undefined4 *)(pMVar1 + 4) = *(undefined4 *)(param_1 + 4); + *(undefined4 *)(pMVar1 + 8) = *(undefined4 *)(param_1 + 8); + *(MStream **)(this + 4) = pMVar1 + 0xc; + } + if (__stack_chk_guard == local_14) { + return; + } + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); +} + + + +### FUNC ~vector @ 0002dcd8 + +/* std::vector >::~vector() */ + +void __thiscall +std::vector>::~vector(vector> *this) + +{ + int iVar1; + int iVar2; + + iVar1 = *(int *)this; + for (iVar2 = *(int *)(this + 4); iVar1 != iVar2; iVar2 = iVar2 + -0xc) { + if (*(void **)(iVar2 + -8) != (void *)0x0) { + operator_delete__(*(void **)(iVar2 + -8)); + } + } + priv::_Vector_base>::~_Vector_base + ((_Vector_base> *)this); + return; +} + + + +### FUNC Split @ 0002dd10 + +/* MStream::Split(char const*) */ + +void MStream::Split(char *param_1) + +{ + size_t sVar1; + int in_r1; + char *pcVar2; + char *in_r2; + uint uVar3; + char *pcVar4; + char *pcVar5; + MStream aMStack_30 [4]; + void *local_2c; + MStream aMStack_24 [4]; + void *local_20; + int local_18; + + local_18 = __stack_chk_guard; + sVar1 = strlen(in_r2); + if (sVar1 == 2) { + param_1[0] = '\0'; + param_1[1] = '\0'; + param_1[2] = '\0'; + param_1[3] = '\0'; + param_1[4] = '\0'; + param_1[5] = '\0'; + param_1[6] = '\0'; + param_1[7] = '\0'; + param_1[8] = '\0'; + param_1[9] = '\0'; + param_1[10] = '\0'; + param_1[0xb] = '\0'; + pcVar4 = *(char **)(in_r1 + 4); + pcVar5 = (char *)(*(int *)(in_r1 + 8) + -1); + while (pcVar4 < pcVar5) { + pcVar2 = pcVar4; + while ((*in_r2 != *pcVar2 || (in_r2[1] != pcVar2[1]))) { + pcVar2 = pcVar2 + 1; + if (pcVar5 <= pcVar2) goto LAB_0002ddb4; + } + MStream(aMStack_24,pcVar4,(int)pcVar2 - (int)pcVar4); + std::vector>::push_back + ((vector> *)param_1,aMStack_24); + pcVar4 = pcVar2 + 2; + if (local_20 != (void *)0x0) { + operator_delete__(local_20); + } + } +LAB_0002ddb4: + uVar3 = *(int *)(in_r1 + 8) - (int)pcVar4; + if (1 < (int)uVar3) { + MStream(aMStack_30,pcVar4,uVar3); + std::vector>::push_back + ((vector> *)param_1,aMStack_30); + if (local_2c != (void *)0x0) { + operator_delete__(local_2c); + } + } + } + else if (sVar1 == 1) { + Split((char)param_1); + } + else { + param_1[0] = '\0'; + param_1[1] = '\0'; + param_1[2] = '\0'; + param_1[3] = '\0'; + param_1[4] = '\0'; + param_1[5] = '\0'; + param_1[6] = '\0'; + param_1[7] = '\0'; + param_1[8] = '\0'; + param_1[9] = '\0'; + param_1[10] = '\0'; + param_1[0xb] = '\0'; + } + if (__stack_chk_guard != local_18) { + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); + } + return; +} + + + +### FUNC hex2str @ 0002de2c + +/* hex2str(unsigned long, char*) */ + +int hex2str(ulong param_1,char *param_2) + +{ + char cVar1; + char *pcVar2; + uint uVar3; + uint uVar4; + int iVar5; + char *pcVar6; + char *pcVar7; + bool bVar8; + + uVar3 = 0; + do { + param_2[uVar3] = "FEDCBA9876543210123456789ABCDEF"[(param_1 & 0xf) + 0xf]; + uVar3 = uVar3 + 1; + param_1 = param_1 >> 4; + } while (param_1 != 0); + pcVar2 = param_2 + uVar3; + pcVar7 = pcVar2 + 1; + if (uVar3 < 8) { + iVar5 = 0; + do { + param_2[uVar3 - iVar5] = '0'; + uVar4 = iVar5 + 7; + iVar5 = iVar5 + -1; + } while (uVar4 != uVar3); + pcVar7 = pcVar2 + -uVar3 + 9; + pcVar2 = pcVar2 + -uVar3 + 8; + } + *pcVar2 = 'x'; + *pcVar7 = '0'; + if (param_2 < pcVar2 + 2) { + pcVar7 = pcVar2 + 1; + pcVar6 = param_2; + do { + cVar1 = *pcVar6; + *pcVar6 = *pcVar7; + *pcVar7 = cVar1; + pcVar6 = pcVar6 + 1; + bVar8 = pcVar6 < pcVar7; + pcVar7 = pcVar7 + -1; + } while (bVar8); + } + return (int)(pcVar2 + 2) - (int)param_2; +} + + + +### FUNC Available @ 0002ded0 + +/* MStream::Available() const */ + +int __thiscall MStream::Available(MStream *this) + +{ + return (*(int *)this - *(int *)(this + 8)) + *(int *)(this + 4); +} + + + +### FUNC Fmt @ 0002dedc + +/* MStream::Fmt(char const*, ...) */ + +void MStream::Fmt(char *param_1,...) + +{ + int iVar1; + int iVar2; + char *in_r1; + undefined4 in_r2; + undefined4 in_r3; + int *piVar3; + undefined4 local_8; + undefined4 local_4; + + iVar1 = __stack_chk_guard; + piVar3 = (int *)(param_1 + 8); + local_8 = in_r2; + local_4 = in_r3; + iVar2 = vsnprintf((char *)*piVar3,(*(int *)param_1 - *piVar3) + *(int *)(param_1 + 4),in_r1, + &local_8); + *piVar3 = *piVar3 + iVar2; + if (__stack_chk_guard == iVar1) { + return; + } + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); +} + + + +### FUNC Get @ 0002df38 + +/* MStream::Get() */ + +undefined4 __thiscall MStream::Get(MStream *this) + +{ + return *(undefined4 *)(this + 4); +} + + + +### FUNC Get @ 0002df3c + +/* MStream::Get() const */ + +undefined4 __thiscall MStream::Get(MStream *this) + +{ + return *(undefined4 *)(this + 4); +} + + + +### FUNC Write @ 0002df40 + +/* MStream::Write(OFStream const&) const */ + +void __thiscall MStream::Write(MStream *this,OFStream *param_1) + +{ + OFStream::Write(param_1,*(char **)(this + 4)); + return; +} + + + +### FUNC Write @ 0002df50 + +/* MStream::Write(__sFILE*) const */ + +bool __thiscall MStream::Write(MStream *this,__sFILE *param_1) + +{ + int iVar1; + + iVar1 = fputs(*(char **)(this + 4),(FILE *)param_1); + return iVar1 == 0; +} + + + +### FUNC Puts @ 0002df68 + +/* MStream::Puts(char const*, unsigned int) */ + +void __thiscall MStream::Puts(MStream *this,char *param_1,uint param_2) + +{ + int iVar1; + MStream *pMVar2; + + pMVar2 = this + 8; + if (param_2 + 1 < (uint)((*(int *)this - *(int *)pMVar2) + *(int *)(this + 4))) { + __aeabi_memcpy(*(int *)pMVar2,param_1,param_2); + iVar1 = *(int *)pMVar2; + *(uint *)pMVar2 = iVar1 + param_2; + *(undefined1 *)(iVar1 + param_2) = 0; + } + return; +} + + + +### FUNC Puts @ 0002df92 + +/* MStream::Puts(char const*) */ + +void __thiscall MStream::Puts(MStream *this,char *param_1) + +{ + size_t sVar1; + int iVar2; + MStream *pMVar3; + + sVar1 = strlen(param_1); + pMVar3 = this + 8; + if (sVar1 + 1 < (uint)((*(int *)this - *(int *)pMVar3) + *(int *)(this + 4))) { + __aeabi_memcpy(*(int *)pMVar3,param_1,sVar1); + iVar2 = *(int *)pMVar3; + *(size_t *)pMVar3 = iVar2 + sVar1; + *(undefined1 *)(iVar2 + sVar1) = 0; + } + return; +} + + + +### FUNC Reset @ 0002dfca + +/* MStream::Reset() */ + +void __thiscall MStream::Reset(MStream *this) + +{ + *(undefined4 *)(this + 8) = *(undefined4 *)(this + 4); + return; +} + + + +### FUNC Empty @ 0002dfd0 + +/* MStream::Empty() const */ + +bool __thiscall MStream::Empty(MStream *this) + +{ + return *(int *)(this + 8) == *(int *)(this + 4); +} + + + +### FUNC operator<< @ 0002dfe0 + +/* MStream::TEMPNAMEPLACEHOLDERVALUE(char const*) */ + +MStream * __thiscall MStream::operator<<(MStream *this,char *param_1) + +{ + Puts(this,param_1); + return this; +} + + + +### FUNC operator<< @ 0002dfee + +/* MStream::TEMPNAMEPLACEHOLDERVALUE(char) */ + +void __thiscall MStream::operator<<(MStream *this,char param_1) + +{ + int iVar1; + MStream *pMVar2; + + pMVar2 = this + 8; + if (2 < (uint)((*(int *)this - (int)*(char **)pMVar2) + *(int *)(this + 4))) { + **(char **)pMVar2 = param_1; + iVar1 = *(int *)pMVar2; + *(int *)pMVar2 = iVar1 + 1; + *(undefined1 *)(iVar1 + 1) = 0; + } + return; +} + + + +### FUNC ~_Vector_base @ 0002e00e + +/* std::priv::_Vector_base >::~_Vector_base() */ + +_Vector_base> * __thiscall +std::priv::_Vector_base>::~_Vector_base + (_Vector_base> *this) + +{ + void *pvVar1; + + pvVar1 = *(void **)this; + if (pvVar1 != (void *)0x0) { + if ((uint)(*(int *)(this + 8) - (int)pvVar1) < 0x81) { + __node_alloc::_M_deallocate(pvVar1,*(int *)(this + 8) - (int)pvVar1); + } + else { + operator_delete(pvVar1); + } + } + return this; +} + + + +### FUNC _M_insert_overflow_aux @ 0002e030 + +/* std::vector >::_M_insert_overflow_aux(MStream*, MStream const&, + std::__false_type const&, unsigned int, bool) */ + +void __thiscall +std::vector>::_M_insert_overflow_aux + (vector> *this,MStream *param_1,MStream *param_2, + __false_type *param_3,uint param_4,bool param_5) + +{ + undefined4 *puVar1; + int iVar2; + undefined4 *puVar3; + undefined4 *puVar4; + undefined3 in_stack_00000005; + uint local_1c; + int local_18; + + local_18 = __stack_chk_guard; + local_1c = _M_compute_next_size(this,param_4); + puVar1 = (undefined4 *) + allocator::_M_allocate((allocator *)(this + 8),local_1c,&local_1c); + puVar4 = *(undefined4 **)this; + puVar3 = puVar1; + if (0 < (int)param_1 - (int)puVar4) { + iVar2 = __udivsi3((int)param_1 - (int)puVar4,0xc); + iVar2 = iVar2 + 1; + do { + *puVar3 = *puVar4; + puVar3[1] = puVar4[1]; + puVar3[2] = puVar4[2]; + puVar3 = puVar3 + 3; + puVar4 = puVar4 + 3; + iVar2 = iVar2 + -1; + } while (1 < iVar2); + } + if (param_4 == 1) { + *puVar3 = *(undefined4 *)param_2; + puVar3[1] = *(undefined4 *)(param_2 + 4); + puVar3[2] = *(undefined4 *)(param_2 + 8); + puVar4 = puVar3 + 3; + } + else { + puVar4 = puVar3 + param_4 * 3; + if (0 < (int)(param_4 * 0xc)) { + iVar2 = param_4 + 1; + do { + *puVar3 = *(undefined4 *)param_2; + puVar3[1] = *(undefined4 *)(param_2 + 4); + puVar3[2] = *(undefined4 *)(param_2 + 8); + puVar3 = puVar3 + 3; + iVar2 = iVar2 + -1; + } while (1 < iVar2); + } + } + if ((_param_5 == 0) && (0 < *(int *)(this + 4) - (int)param_1)) { + iVar2 = __udivsi3(*(int *)(this + 4) - (int)param_1,0xc); + iVar2 = iVar2 + 1; + do { + *puVar4 = *(undefined4 *)param_1; + puVar4[1] = *(undefined4 *)(param_1 + 4); + puVar4[2] = *(undefined4 *)(param_1 + 8); + puVar4 = puVar4 + 3; + param_1 = param_1 + 0xc; + iVar2 = iVar2 + -1; + } while (1 < iVar2); + } + _M_clear_after_move(this); + *(undefined4 **)this = puVar1; + *(undefined4 **)(this + 4) = puVar4; + *(undefined4 **)(this + 8) = puVar1 + local_1c * 3; + if (__stack_chk_guard != local_18) { + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); + } + return; +} + + + +### FUNC _M_compute_next_size @ 0002e138 + +/* std::vector >::_M_compute_next_size(unsigned int) */ + +uint __thiscall +std::vector>::_M_compute_next_size + (vector> *this,uint param_1) + +{ + int iVar1; + uint uVar2; + uint uVar3; + uint uVar4; + + iVar1 = *(int *)(this + 4) - *(int *)this >> 2; + uVar4 = iVar1 * -0x55555555; + if (param_1 <= iVar1 * 0x55555555 + 0x15555555U) { + uVar2 = uVar4; + if (uVar4 < param_1 || uVar4 - param_1 == 0) { + uVar2 = param_1; + } + uVar4 = uVar2 + uVar4; + uVar3 = uVar4; + if (uVar4 < uVar2) { + uVar3 = 0x15555555; + } + uVar2 = 0x15555555; + if (uVar4 < 0x15555556) { + uVar2 = uVar3; + } + return uVar2; + } + /* WARNING: Subroutine does not return */ + __stl_throw_length_error("vector"); +} + + + +### FUNC _M_clear_after_move @ 0002e184 + +/* std::vector >::_M_clear_after_move() */ + +void __thiscall +std::vector>::_M_clear_after_move + (vector> *this) + +{ + void *pvVar1; + void *pvVar2; + + pvVar1 = *(void **)this; + pvVar2 = *(void **)(this + 4); + if (pvVar1 != pvVar2) { + do { + if (*(void **)((int)pvVar2 + -8) != (void *)0x0) { + operator_delete__(*(void **)((int)pvVar2 + -8)); + } + pvVar2 = (void *)((int)pvVar2 + -0xc); + } while (pvVar2 != pvVar1); + pvVar1 = *(void **)this; + } + if (pvVar1 != (void *)0x0) { + if ((uint)(*(int *)(this + 8) - (int)pvVar1) < 0x81) { + __node_alloc::_M_deallocate(pvVar1,*(int *)(this + 8) - (int)pvVar1); + } + else { + operator_delete(pvVar1); + } + } + return; +} + + + +### FUNC _M_allocate @ 0002e1d4 + +/* std::allocator::_M_allocate(unsigned int, unsigned int&) */ + +undefined4 __thiscall +std::allocator::_M_allocate(allocator *this,uint param_1,uint *param_2) + +{ + uint uVar1; + undefined4 uVar2; + uint local_1c; + int local_18; + + local_18 = __stack_chk_guard; + if (0x15555555 < param_1) { + FUN_00030824(4); + uVar2 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar2,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + uVar2 = 0; + if (param_1 != 0) { + local_1c = param_1 * 0xc; + uVar2 = __node_alloc::allocate(&local_1c); + uVar1 = __udivsi3(local_1c,0xc); + *param_2 = uVar1; + } + if (__stack_chk_guard == local_18) { + return uVar2; + } + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); +} + + + +### FUNC allocate @ 0002e250 + +/* std::__node_alloc::allocate(unsigned int&) */ + +void std::__node_alloc::allocate(uint *param_1) + +{ + if (0x80 < *param_1) { + operator_new(*param_1); + return; + } + _M_allocate(param_1); + return; +} + + + +### FUNC Logging @ 0002e268 + +/* mag::Logging::Logging(int) */ + +Logging * __thiscall mag::Logging::Logging(Logging *this,int param_1) + +{ + tm *ptVar1; + time_t tStack_1c; + int local_18; + + local_18 = __stack_chk_guard; + MStream::MStream((MStream *)this,0x400); + time(&tStack_1c); + ptVar1 = localtime(&tStack_1c); + MStream::Fmt((char *)this,"%d.%02d.%02d %02d:%02d:%02d %s",ptVar1->tm_year + 0x76c, + ptVar1->tm_mon + 1,ptVar1->tm_mday,ptVar1->tm_hour,ptVar1->tm_min,ptVar1->tm_sec, + (&PTR_s_TRACE___00068c58)[param_1]); + if (__stack_chk_guard == local_18) { + return this; + } + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); +} + + + +### FUNC ~Logging @ 0002e31c + +/* mag::Logging::~Logging() */ + +void __thiscall mag::Logging::~Logging(Logging *this) + +{ + MStream::operator<<((MStream *)this,"\n"); + MStream::Write((MStream *)this,(__sFILE *)PTR___sF_0006b898); + fflush((FILE *)PTR___sF_0006b898); + MStream::~MStream((MStream *)this); + return; +} + + + +### FUNC Setfp @ 0002e364 + +/* mag::Logging::Setfp(__sFILE*) */ + +void mag::Logging::Setfp(__sFILE *param_1) + +{ + PTR___sF_0006b898 = param_1; + return; +} + + + +### FUNC Setfp @ 0002e370 + +/* mag::Logging::Setfp(OFStream&) */ + +void mag::Logging::Setfp(OFStream *param_1) + +{ + PTR___sF_0006b898 = (pointer_____offset_0x54___)FStream::GetRaw((FStream *)param_1); + return; +} + + + +### FUNC CSmoother @ 0002e384 + +/* CSmoother::CSmoother() */ + +CSmoother * __thiscall CSmoother::CSmoother(CSmoother *this) + +{ + *(undefined ***)this = &PTR__CSmoother_00068c78; + __aeabi_memclr4(this + 4,0x24); + return this; +} + + + +### FUNC ~CSmoother @ 0002e3a4 + +/* CSmoother::~CSmoother() */ + +CSmoother * __thiscall CSmoother::~CSmoother(CSmoother *this) + +{ + *(undefined ***)this = &PTR__CSmoother_00068c78; + if (*(void **)(this + 4) != (void *)0x0) { + operator_delete__(*(void **)(this + 4)); + *(undefined4 *)(this + 4) = 0; + } + *(undefined4 *)(this + 8) = 0; + if (*(void **)(this + 0xc) != (void *)0x0) { + operator_delete__(*(void **)(this + 0xc)); + *(undefined4 *)(this + 0xc) = 0; + } + if (*(void **)(this + 0x10) != (void *)0x0) { + operator_delete__(*(void **)(this + 0x10)); + *(undefined4 *)(this + 0x10) = 0; + } + return this; +} + + + +### FUNC ~CSmoother @ 0002e3e8 + +/* CSmoother::~CSmoother() */ + +void __thiscall CSmoother::~CSmoother(CSmoother *this) + +{ + void *pvVar1; + + pvVar1 = (void *)~CSmoother(this); + operator_delete(pvVar1); + return; +} + + + +### FUNC Reset @ 0002e3f6 + +/* CSmoother::Reset(unsigned int, unsigned int, int, unsigned int) */ + +undefined4 __thiscall +CSmoother::Reset(CSmoother *this,uint param_1,uint param_2,int param_3,uint param_4) + +{ + void *pvVar1; + uint uVar2; + uint uVar3; + int iVar4; + undefined4 uVar5; + undefined8 uVar6; + + uVar5 = 0; + *(undefined4 *)(this + 0x24) = 0; + if (*(void **)(this + 4) != (void *)0x0) { + operator_delete__(*(void **)(this + 4)); + *(undefined4 *)(this + 4) = 0; + } + *(undefined4 *)(this + 8) = 0; + if (*(void **)(this + 0xc) != (void *)0x0) { + operator_delete__(*(void **)(this + 0xc)); + *(undefined4 *)(this + 0xc) = 0; + } + if (*(void **)(this + 0x10) != (void *)0x0) { + operator_delete__(*(void **)(this + 0x10)); + *(undefined4 *)(this + 0x10) = 0; + } + if ((param_1 != 0) && (param_2 != 0)) { + *(undefined4 *)(this + 0x18) = 0; + *(uint *)(this + 0x1c) = param_1; + *(uint *)(this + 0x20) = param_2; + uVar3 = (param_4 + 1 >> 1) + param_1 * param_2; + uVar2 = uVar3 * 2; + if (uVar2 < uVar3) { + uVar2 = 0xffffffff; + } + pvVar1 = operator_new__(uVar2); + iVar4 = (int)pvVar1 + (param_4 & 0xfffffffe); + *(void **)(this + 4) = pvVar1; + *(int *)(this + 8) = iVar4; + *(int *)(this + 0x14) = iVar4; + uVar6 = __muldi3(param_1,0,4,(int)param_1 >> 0x1f); + uVar2 = 0xffffffff; + if ((int)((ulonglong)uVar6 >> 0x20) == 0) { + uVar2 = (uint)uVar6; + } + pvVar1 = operator_new__(uVar2); + *(void **)(this + 0xc) = pvVar1; + __aeabi_memclr4(pvVar1,param_1 << 2); + if (param_3 != 0) { + uVar2 = param_1 * 2; + if (param_1 * 2 < param_1) { + uVar2 = 0xffffffff; + } + pvVar1 = operator_new__(uVar2); + *(void **)(this + 0x10) = pvVar1; + } + uVar5 = 1; + *(undefined4 *)(this + 0x24) = 1; + } + return uVar5; +} + + + +### FUNC PushFrameSum @ 0002e4b6 + +/* CSmoother::PushFrameSum(unsigned short const*) */ + +undefined4 __thiscall CSmoother::PushFrameSum(CSmoother *this,ushort *param_1) + +{ + undefined4 uVar1; + int iVar2; + uint uVar3; + int extraout_r1; + int *piVar4; + ushort *puVar5; + ushort *puVar6; + uint uVar7; + + uVar1 = 0; + if ((*(int *)(this + 0x24) != 0) && (piVar4 = *(int **)(this + 0xc), piVar4 != (int *)0x0)) { + iVar2 = *(int *)(this + 0x18); + *(uint *)(this + 0x18) = iVar2 + 1U; + uVar3 = *(uint *)(this + 0x1c) >> 2; + if (*(uint *)(this + 0x20) < iVar2 + 1U) { + if (uVar3 != 0) { + iVar2 = -uVar3; + puVar5 = *(ushort **)(this + 0x14); + puVar6 = param_1; + do { + *piVar4 = ((uint)*puVar6 - (uint)*puVar5) + *piVar4; + piVar4[1] = ((uint)puVar6[1] - (uint)puVar5[1]) + piVar4[1]; + piVar4[2] = ((uint)puVar6[2] - (uint)puVar5[2]) + piVar4[2]; + piVar4[3] = ((uint)puVar6[3] - (uint)puVar5[3]) + piVar4[3]; + piVar4 = piVar4 + 4; + puVar5 = puVar5 + 4; + puVar6 = puVar6 + 4; + iVar2 = iVar2 + 1; + } while (iVar2 != 0); + } + } + else if (uVar3 != 0) { + iVar2 = -uVar3; + puVar6 = param_1; + do { + *piVar4 = *piVar4 + (uint)*puVar6; + piVar4[1] = piVar4[1] + (uint)puVar6[1]; + piVar4[2] = piVar4[2] + (uint)puVar6[2]; + piVar4[3] = piVar4[3] + (uint)puVar6[3]; + piVar4 = piVar4 + 4; + puVar6 = puVar6 + 4; + iVar2 = iVar2 + 1; + } while (iVar2 != 0); + } + __aeabi_memcpy(*(undefined4 *)(this + 0x14),param_1,*(int *)(this + 0x1c) << 1); + uVar3 = *(uint *)(this + 0x18); + uVar7 = *(uint *)(this + 0x20); + __aeabi_uidivmod(uVar3,uVar7); + if (extraout_r1 == 0) { + iVar2 = *(int *)(this + 8); + } + else { + iVar2 = *(int *)(this + 0x14) + *(int *)(this + 0x1c) * 2; + } + *(int *)(this + 0x14) = iVar2; + uVar1 = 1; + if (uVar3 < uVar7) { + uVar1 = 0; + } + } + return uVar1; +} + + + +### FUNC PushFrameAve @ 0002e58e + +/* CSmoother::PushFrameAve(unsigned short*, unsigned int) */ + +undefined4 __thiscall CSmoother::PushFrameAve(CSmoother *this,ushort *param_1,uint param_2) + +{ + ushort uVar1; + ushort uVar2; + undefined4 uVar3; + int iVar4; + int extraout_r1; + ushort *puVar5; + uint uVar6; + uint uVar7; + + uVar3 = 0; + if (*(int *)(this + 0x24) != 0) { + uVar6 = *(int *)(this + 0x18) + 1; + *(uint *)(this + 0x18) = uVar6; + if (*(uint *)(this + 0x20) < uVar6) { + if (*(uint *)(this + 0x20) != 1) { + return 0; + } + iVar4 = *(int *)(this + 0x1c); + uVar7 = 1; + if (iVar4 != 0) { + puVar5 = *(ushort **)(this + 8); + do { + uVar1 = *puVar5; + uVar2 = *param_1; + *puVar5 = uVar2; + uVar7 = (uint)uVar2 - (uint)uVar1; + puVar5 = puVar5 + 1; + if ((((int)uVar7 <= (int)param_2) && (-param_2 == uVar7 || (int)-uVar7 < (int)param_2)) && + (uVar7 != 0)) { + *param_1 = uVar2 - (short)(uVar7 >> 1); + } + iVar4 = iVar4 + -1; + param_1 = param_1 + 1; + } while (iVar4 != 0); + uVar7 = 1; + } + } + else { + __aeabi_memcpy(*(undefined4 *)(this + 0x14),param_1,*(int *)(this + 0x1c) << 1); + uVar7 = *(uint *)(this + 0x20); + uVar6 = *(uint *)(this + 0x18); + } + __aeabi_uidivmod(uVar6,uVar7); + if (extraout_r1 == 0) { + iVar4 = *(int *)(this + 8); + } + else { + iVar4 = *(int *)(this + 0x14) + *(int *)(this + 0x1c) * 2; + } + *(int *)(this + 0x14) = iVar4; + uVar3 = 1; + if (uVar6 < uVar7) { + uVar3 = 0; + } + } + return uVar3; +} + + + +### FUNC Restart @ 0002e622 + +/* CSmoother::Restart() */ + +void __thiscall CSmoother::Restart(CSmoother *this) + +{ + if (*(int *)(this + 0x24) != 0) { + *(undefined4 *)(this + 0x14) = *(undefined4 *)(this + 8); + *(undefined4 *)(this + 0x18) = 0; + __aeabi_memclr4(*(undefined4 *)(this + 0xc),*(int *)(this + 0x1c) << 2); + } + return; +} + + + +### FUNC GetSTDFrame @ 0002e644 + +/* CSmoother::GetSTDFrame() */ + +int __thiscall CSmoother::GetSTDFrame(CSmoother *this) + +{ + undefined2 uVar1; + int iVar2; + uint uVar3; + undefined4 uVar4; + uint uVar5; + ushort *puVar6; + int iVar7; + uint uVar8; + uint uVar9; + undefined8 uVar10; + undefined8 uVar11; + undefined8 uVar12; + undefined4 in_stack_ffffffc0; + uint uVar13; + uint uVar14; + + iVar2 = 0; + if ((((*(int *)(this + 0x24) != 0) && (*(int *)(this + 0xc) != 0)) && + (iVar7 = *(int *)(this + 0x10), iVar7 != 0)) && + (uVar8 = *(uint *)(this + 0x20), uVar8 <= *(uint *)(this + 0x18))) { + if (uVar8 < 2) { + __aeabi_memclr(iVar7,*(int *)(this + 0x1c) << 1); + iVar2 = *(int *)(this + 0x10); + } + else { + uVar10 = __floatunsidf((uVar8 - 1) * uVar8 * uVar8); + uVar13 = 0; + uVar10 = __divdf3(0,0x3ff00000,(int)uVar10,(int)((ulonglong)uVar10 >> 0x20)); + uVar3 = *(uint *)(this + 0x1c); + iVar2 = iVar7; + uVar5 = uVar13; + if (uVar3 != 0) { + while( true ) { + uVar14 = uVar5; + if (uVar8 != 0) { + puVar6 = (ushort *)(*(int *)(this + 8) + uVar13 * 2); + iVar2 = *(int *)(*(int *)(this + 0xc) + uVar13 * 4); + uVar12 = 0; + uVar9 = 0; + do { + uVar11 = __floatsidf(uVar8 * *puVar6 - iVar2); + uVar4 = (undefined4)((ulonglong)uVar11 >> 0x20); + uVar11 = __muldf3((int)uVar11,uVar4,(int)uVar11,uVar4); + uVar12 = __adddf3((int)uVar12,(int)((ulonglong)uVar12 >> 0x20),(int)uVar11, + (int)((ulonglong)uVar11 >> 0x20)); + uVar5 = (uint)uVar12; + puVar6 = puVar6 + uVar3; + uVar9 = uVar9 + 1; + } while (uVar9 < uVar8); + } + __muldf3((int)uVar10,(int)((ulonglong)uVar10 >> 0x20),uVar5); + sqrt((double)CONCAT44(uVar14,in_stack_ffffffc0)); + uVar1 = __fixunsdfsi(); + iVar2 = *(int *)(this + 0x10); + *(undefined2 *)(iVar2 + uVar13 * 2) = uVar1; + uVar13 = uVar13 + 1; + uVar3 = *(uint *)(this + 0x1c); + if (uVar3 <= uVar13) break; + uVar8 = *(uint *)(this + 0x20); + uVar5 = uVar14; + } + } + } + } + return iVar2; +} + + + +### FUNC FStream @ 0002e730 + +/* FStream::FStream() */ + +void __thiscall FStream::FStream(FStream *this) + +{ + *(undefined ***)this = &PTR__IFStream_00068c90; + return; +} + + + +### FUNC ~IFStream @ 0002e740 + +/* IFStream::~IFStream() */ + +IFStream * __thiscall IFStream::~IFStream(IFStream *this) + +{ + *(undefined ***)this = &PTR__IFStream_00068c90; + if (*(FILE **)(this + 4) != (FILE *)0x0) { + fclose(*(FILE **)(this + 4)); + } + return this; +} + + + +### FUNC ~FStream @ 0002e764 + +/* FStream::~FStream() */ + +void __thiscall FStream::~FStream(FStream *this) + +{ + code *pcVar1; + + /* WARNING: Does not return */ + pcVar1 = (code *)software_udf(0xfe,0x2e764); + (*pcVar1)(); +} + + + +### FUNC GetRaw @ 0002e766 + +/* FStream::GetRaw() const */ + +undefined4 __thiscall FStream::GetRaw(FStream *this) + +{ + return *(undefined4 *)(this + 4); +} + + + +### FUNC IsEof @ 0002e76a + +/* FStream::IsEof() const */ + +bool __thiscall FStream::IsEof(FStream *this) + +{ + int iVar1; + + iVar1 = feof(*(FILE **)(this + 4)); + return iVar1 != 0; +} + + + +### FUNC ReadLine @ 0002e780 + +/* FStream::ReadLine(char*, int) const */ + +undefined4 __thiscall FStream::ReadLine(FStream *this,char *param_1,int param_2) + +{ + int iVar1; + undefined4 uVar2; + char *pcVar3; + + iVar1 = feof(*(FILE **)(this + 4)); + uVar2 = 0; + if (iVar1 == 0) { + pcVar3 = fgets(param_1,param_2,*(FILE **)(this + 4)); + uVar2 = 1; + if (pcVar3 == (char *)0x0) { + uVar2 = 0; + } + } + return uVar2; +} + + + +### FUNC Read @ 0002e7b2 + +/* FStream::Read(void*, unsigned int, unsigned int) const */ + +int __thiscall FStream::Read(FStream *this,void *param_1,uint param_2,uint param_3) + +{ + size_t sVar1; + + sVar1 = fread(param_1,param_2,param_3,*(FILE **)(this + 4)); + return param_2 * sVar1; +} + + + +### FUNC GetCurrentPos @ 0002e7ca + +/* FStream::GetCurrentPos() const */ + +void __thiscall FStream::GetCurrentPos(FStream *this) + +{ + ftell(*(FILE **)(this + 4)); + return; +} + + + +### FUNC Seek @ 0002e7d6 + +/* FStream::Seek(long, io::seek) const */ + +bool __thiscall FStream::Seek(FStream *this,long param_1,int param_3) + +{ + int iVar1; + + iVar1 = fseek(*(FILE **)(this + 4),param_1,param_3); + return iVar1 == 0; +} + + + +### FUNC OFStream @ 0002e7f0 + +/* OFStream::OFStream(char const*, bool) */ + +OFStream * __thiscall OFStream::OFStream(OFStream *this,char *param_1,bool param_2) + +{ + FILE *pFVar1; + undefined4 *puVar2; + + *(undefined ***)this = &PTR__IFStream_00068ca4; + if (param_2) { + pFVar1 = fopen(param_1,"rb+"); + *(FILE **)(this + 4) = pFVar1; + if (pFVar1 == (FILE *)0x0) { + puVar2 = (undefined4 *)FUN_00030824(4); + *puVar2 = "IOError: open file failed1.[IFStream::IFStream]"; + /* WARNING: Subroutine does not return */ + FUN_000309e0(puVar2,&Error::typeinfo,0); + } + } + else { + pFVar1 = fopen(param_1,"wb"); + *(FILE **)(this + 4) = pFVar1; + if (pFVar1 == (FILE *)0x0) { + puVar2 = (undefined4 *)FUN_00030824(4); + *puVar2 = "IOError: open file failed2.[IFStream::IFStream]"; + /* WARNING: Subroutine does not return */ + FUN_000309e0(puVar2,&Error::typeinfo,0); + } + } + return this; +} + + + +### FUNC ~OFStream @ 0002e8ec + +/* OFStream::~OFStream() */ + +void __thiscall OFStream::~OFStream(OFStream *this) + +{ + *(undefined ***)this = &PTR__IFStream_00068c90; + if (*(FILE **)(this + 4) != (FILE *)0x0) { + fclose(*(FILE **)(this + 4)); + } + operator_delete(this); + return; +} + + + +### FUNC Flush @ 0002e914 + +/* OFStream::Flush() const */ + +bool __thiscall OFStream::Flush(OFStream *this) + +{ + int iVar1; + + iVar1 = fflush(*(FILE **)(this + 4)); + return iVar1 == 0; +} + + + +### FUNC Write @ 0002e92c + +/* OFStream::Write(char const*) const */ + +bool __thiscall OFStream::Write(OFStream *this,char *param_1) + +{ + int iVar1; + + iVar1 = fputs(param_1,*(FILE **)(this + 4)); + return -1 < iVar1; +} + + + +### FUNC Write @ 0002e948 + +/* OFStream::Write(void const*, unsigned int, unsigned int) */ + +bool __thiscall OFStream::Write(OFStream *this,void *param_1,uint param_2,uint param_3) + +{ + size_t sVar1; + + sVar1 = fwrite(param_1,param_2,param_3,*(FILE **)(this + 4)); + return sVar1 != 0; +} + + + +### FUNC WriteLine @ 0002e968 + +/* OFStream::WriteLine(char const*) const */ + +undefined4 __thiscall OFStream::WriteLine(OFStream *this,char *param_1) + +{ + int iVar1; + + iVar1 = fputs(param_1,*(FILE **)(this + 4)); + if (-1 < iVar1) { + iVar1 = fputs("\n",*(FILE **)(this + 4)); + if (-1 < iVar1) { + return 1; + } + } + return 0; +} + + + +### FUNC GetLength @ 0002e998 + +/* OFStream::GetLength() const */ + +long __thiscall OFStream::GetLength(OFStream *this) + +{ + int iVar1; + long __off; + long lVar2; + + fflush(*(FILE **)(this + 4)); + iVar1 = feof(*(FILE **)(this + 4)); + __off = ftell(*(FILE **)(this + 4)); + if (iVar1 == 0) { + fseek(*(FILE **)(this + 4),0,2); + lVar2 = ftell(*(FILE **)(this + 4)); + fseek(*(FILE **)(this + 4),__off,0); + __off = lVar2; + } + return __off; +} + + + +### FUNC IFStream @ 0002e9e4 + +/* IFStream::IFStream(char const*) */ + +IFStream * __thiscall IFStream::IFStream(IFStream *this,char *param_1) + +{ + FILE *__stream; + long lVar1; + undefined4 *puVar2; + + *(undefined4 *)(this + 8) = 0; + *(undefined ***)this = &PTR__IFStream_00068cb8; + __stream = fopen(param_1,"rb"); + *(FILE **)(this + 4) = __stream; + if (__stream != (FILE *)0x0) { + fseek(__stream,0,2); + lVar1 = ftell(*(FILE **)(this + 4)); + *(long *)(this + 8) = lVar1; + fseek(*(FILE **)(this + 4),0,0); + return this; + } + puVar2 = (undefined4 *)FUN_00030824(4); + *puVar2 = "IOError: open file failed.[IFStream::IFStream]"; + /* WARNING: Subroutine does not return */ + FUN_000309e0(puVar2,&Error::typeinfo,0); +} + + + +### FUNC ~IFStream @ 0002ea9c + +/* IFStream::~IFStream() */ + +void __thiscall IFStream::~IFStream(IFStream *this) + +{ + *(undefined ***)this = &PTR__IFStream_00068c90; + if (*(FILE **)(this + 4) != (FILE *)0x0) { + fclose(*(FILE **)(this + 4)); + } + operator_delete(this); + return; +} + + + +### FUNC GetLength @ 0002eac4 + +/* IFStream::GetLength() const */ + +undefined4 __thiscall IFStream::GetLength(IFStream *this) + +{ + return *(undefined4 *)(this + 8); +} + + + +### FUNC Controller @ 0002eac8 + +/* Controller::Controller() */ + +Controller * __thiscall Controller::Controller(Controller *this) + +{ + int iVar1; + int iVar2; + + iVar1 = __stack_chk_guard; + iVar2 = 0; + do { + *(undefined4 *)(this + iVar2 + 0x84) = 0; + *(undefined4 *)(this + iVar2 + 0x80) = 0; + *(undefined4 *)(this + iVar2 + 0x78) = 0; + *(undefined4 *)(this + iVar2 + 0x7c) = 0; + iVar2 = iVar2 + 0x6c; + } while (iVar2 != 0x438); + MutexLock::MutexLock((MutexLock *)(this + 0x4a0)); + *(undefined4 *)(this + 0x494) = 0; + *(undefined4 *)(this + 0x490) = 0; + *(undefined4 *)(this + 0x4a4) = 0; + *(undefined4 *)(this + 0x48c) = 0; + *(undefined4 *)this = 4; + *(undefined4 *)(this + 4) = 3; + *(undefined4 *)(this + 8) = 0x1194; + *(undefined4 *)(this + 0xc) = 300; + *(undefined4 *)(this + 0x14) = 5000; + *(undefined4 *)(this + 0x18) = 2; + *(undefined4 *)(this + 0x10) = 0; + *(undefined4 *)(this + 0x1c) = 1; + *(undefined4 *)(this + 0x20) = 0; + *(undefined4 *)(this + 0x24) = 0; + *(undefined4 *)(this + 0x28) = 0x180; + *(undefined4 *)(this + 0x2c) = 0x120; + *(undefined4 *)(this + 0x30) = 0x180; + *(undefined4 *)(this + 0x34) = 0x120; + *(undefined4 *)(this + 0x38) = 0x10; + *(undefined4 *)(this + 0x3c) = 0x50; + *(undefined4 *)(this + 0x40) = 8; + *(undefined4 *)(this + 0x44) = 1; + *(undefined4 *)(this + 0x48) = 1; + *(undefined4 *)(this + 0x4c) = 5; + __aeabi_memclr4(0x6b92c,0x54); + theFunc._128_4_ = 0x41a00000; + theFunc._132_4_ = 0x3ecccccd; + theFunc._136_4_ = 0x41a00000; + theFunc._140_4_ = 0; + theFunc._144_4_ = 0; + theFunc._156_4_ = 0x3f7f4b1f; + theFunc._160_4_ = 0x3f800000; + theFunc._148_4_ = 0x3dcccccd; + theFunc._152_4_ = 0x399d4952; + theFunc._4_4_ = 0; + theFunc._52_4_ = 500; + theFunc._12_4_ = 0; + theFunc._16_4_ = 20000; + theFunc._20_4_ = (int)"_ZNKSt6localeeqERKS_" + 2; + theFunc._24_4_ = 0; + theFunc._28_4_ = 0xff; + theFunc._32_4_ = 5; + theFunc._88_4_ = 1; + theFunc._96_4_ = 1; + theFunc._44_4_ = 0; + theFunc._48_4_ = 0; + theFunc._8_4_ = 0; + theFunc._120_4_ = 0x41a00000; + theFunc._124_4_ = 0x3f800000; + theFunc._80_4_ = 1; + *(undefined4 *)(this + 0x488) = 0; + AddProbe(this,0,1,1,0x3f800000,0,2,3000000,3500000); + AddProbe(this,0,1,1,theFunc._124_4_,0x1000000,0,3000000,3500000); + AddProbe(this,0,1,0x19,theFunc._124_4_,0x2000000,1,3000000,3500000); + if (__stack_chk_guard == iVar1) { + return this; + } + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); +} + + + +### FUNC AddProbe @ 0002ed04 + +/* Controller::AddProbe(unsigned int, unsigned int, unsigned int, float, unsigned int, int, int, + int, int, int, ProbeType, tagPOINT const*, unsigned int, tagRECT) */ + +undefined4 +Controller::AddProbe + (Controller *param_1,undefined4 param_2,undefined4 param_3,int param_5,undefined4 param_6, + undefined4 param_7,undefined4 param_8,undefined4 param_9,undefined4 param_10, + undefined4 param_10_00,int param_11,undefined4 param_12,int param_13,uint param_14, + undefined4 param_15,undefined4 param_16,undefined4 param_17,undefined4 param_18) + +{ + pthread_mutex_t *__mutex; + uint uVar1; + int iVar2; + Controller *pCVar3; + uint extraout_r1; + uint uVar4; + undefined4 uVar5; + + __mutex = (pthread_mutex_t *)(param_1 + 0x4a0); + uVar5 = *(undefined4 *)(param_1 + 0x28); + pthread_mutex_lock(__mutex); + uVar1 = __udivsi3(param_2,uVar5); + pCVar3 = param_1 + 0x488; + uVar4 = *(uint *)(param_1 + 0x488); + if ((((uVar4 < 10) && (__aeabi_uidivmod(param_2,uVar5), extraout_r1 < *(uint *)(param_1 + 0x28))) + && (param_5 != 0)) && (uVar1 < *(uint *)(param_1 + 0x2c))) { + __aeabi_memclr4(param_1 + uVar4 * 0x6c + 0x50); + *(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0x50) = param_12; + *(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0x54) = param_2; + *(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0x58) = param_3; + if (2 < param_14) { + param_14 = 3; + } + *(uint *)(param_1 + *(int *)pCVar3 * 0x6c + 0x74) = param_14; + iVar2 = *(int *)pCVar3; + if ((param_13 != 0) && (*(int *)(param_1 + iVar2 * 0x6c + 0x74) != 0)) { + __aeabi_memcpy4(param_1 + iVar2 * 0x6c + 0x5c,param_13, + *(int *)(param_1 + iVar2 * 0x6c + 0x74) << 3); + iVar2 = *(int *)pCVar3; + } + iVar2 = iVar2 * 0x6c; + *(undefined4 *)(param_1 + iVar2 + 0x78) = param_15; + *(undefined4 *)(param_1 + iVar2 + 0x7c) = param_16; + *(undefined4 *)(param_1 + iVar2 + 0x80) = param_17; + *(undefined4 *)(param_1 + iVar2 + 0x84) = param_18; + *(int *)(param_1 + *(int *)pCVar3 * 0x6c + 0x90) = param_5; + *(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0x8c) = param_6; + *(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0x88) = param_7; + *(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0x94) = param_8; + *(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0xa8) = param_9; + *(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0xac) = param_10; + *(int *)(param_1 + *(int *)pCVar3 * 0x6c + 0xb0) = param_5 + -1; + *(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0xb4) = 0; + *(int *)pCVar3 = *(int *)pCVar3 + 1; + pthread_mutex_unlock(__mutex); + uVar5 = 1; + if (param_11 != 0) { + SampleProbe(param_1,*(int *)pCVar3 + -1); + } + } + else { + pthread_mutex_unlock(__mutex); + uVar5 = 0; + } + return uVar5; +} + + + +### FUNC ~Controller @ 0002ee94 + +/* Controller::~Controller() */ + +Controller * __thiscall Controller::~Controller(Controller *this) + +{ + *(undefined4 *)(this + 0x494) = 0; + *(undefined4 *)(this + 0x4a4) = 0; + CFunctions::ReleaseMemory((CFunctions *)theFunc); + pthread_mutex_destroy((pthread_mutex_t *)(this + 0x4a0)); + return this; +} + + + +### FUNC StopProcess @ 0002eee0 + +/* Controller::StopProcess() */ + +void __thiscall Controller::StopProcess(Controller *this) + +{ + *(undefined4 *)(this + 0x494) = 0; + *(undefined4 *)(this + 0x4a4) = 0; + CFunctions::ReleaseMemory((CFunctions *)theFunc); + return; +} + + + +### FUNC StartProcess @ 0002ef08 + +/* Controller::StartProcess(void (*)(int), unsigned int, unsigned int, unsigned int, unsigned int, + unsigned int, unsigned int, unsigned int, unsigned int, int, unsigned int, char const*) */ + +void __thiscall +Controller::StartProcess + (Controller *this,_func_void_int *param_1,uint param_2,uint param_3,uint param_4, + uint param_5,uint param_6,uint param_7,uint param_8,uint param_9,int param_10, + uint param_11,char *param_12) + +{ + undefined4 uVar1; + int iVar2; + MStream *pMVar3; + Logging *this_00; + Logging aLStack_30 [12]; + Logging aLStack_24 [12]; + int local_18; + + local_18 = __stack_chk_guard; + uVar1 = 0; + if (param_1 != (_func_void_int *)0x0) { + *(_func_void_int **)(this + 0x4a4) = param_1; + *(uint *)(this + 0x49c) = param_5; + *(uint *)(this + 0x498) = param_4; + *(uint *)(this + 0x28) = param_2; + *(uint *)(this + 0x2c) = param_3; + *(uint *)this = param_6; + *(uint *)(this + 4) = param_7; + *(uint *)(this + 8) = param_8; + *(uint *)(this + 0xc) = param_9; + *(int *)(this + 0x18) = param_10; + *(uint *)(this + 0x40) = param_11; + iVar2 = CFunctions::Reset((CFunctions *)theFunc,(struct_IntrinsicPara *)(this + 0x28)); + if (iVar2 == 0) { + pMVar3 = (MStream *)mag::Logging::Logging(aLStack_24,4); + MStream::operator<<(pMVar3,"Failed to allocate memory"); + this_00 = aLStack_24; + } + else { + iVar2 = CFunctions::LoadCalibrationTable((CFunctions *)theFunc,param_12); + if (iVar2 != 0) { + CFunctions::SetColorPalette((CFunctions *)theFunc,*(undefined4 *)(this + 0x18)); + uVar1 = 1; + *(undefined4 *)(this + 0x494) = 1; + *(undefined4 *)(this + 0x48c) = 0xffffffff; + goto LAB_0002efd0; + } + pMVar3 = (MStream *)mag::Logging::Logging(aLStack_30,4); + MStream::operator<<(pMVar3,"Failed to load calibration table"); + this_00 = aLStack_30; + } + mag::Logging::~Logging(this_00); + uVar1 = 0; + } +LAB_0002efd0: + if (__stack_chk_guard == local_18) { + return; + } + /* WARNING: Subroutine does not return */ + __stack_chk_fail(uVar1); +} + + + +### FUNC setPreviewOrientation @ 0002f068 + +/* Controller::setPreviewOrientation(int) */ + +Controller * __thiscall Controller::setPreviewOrientation(Controller *this,int param_1) + +{ + if (param_1 < 0xb4) { + if ((param_1 == 0) || (param_1 == 0x5a)) { + theFunc._116_4_ = param_1; + return (Controller *)theFunc; + } + } + else { + this = (Controller *)0x10e; + if (param_1 == 0x10e) { + theFunc._116_4_ = param_1; + return (Controller *)theFunc; + } + if (param_1 == 0xb4) { + theFunc._116_4_ = param_1; + return (Controller *)theFunc; + } + } + return this; +} + + + +### FUNC getPreviewOrientation @ 0002f090 + +/* Controller::getPreviewOrientation() */ + +undefined4 Controller::getPreviewOrientation(void) + +{ + return theFunc._116_4_; +} + + + +### FUNC FFC @ 0002f0a0 + +/* Controller::FFC() */ + +void __thiscall Controller::FFC(Controller *this) + +{ + if (*(code **)(this + 0x4a4) != (code *)0x0) { + (**(code **)(this + 0x4a4))(0); + } + theFunc._56_4_ = theFunc._64_4_; + theFunc._60_4_ = theFunc._68_4_; + *(undefined4 *)(this + 0x48c) = 0; + return; +} + + + +### FUNC PushFrame @ 0002f0d4 + +/* Controller::PushFrame(unsigned short const*, int, int) */ + +undefined4 __thiscall +Controller::PushFrame(Controller *this,ushort *param_1,int param_2,int param_3) + +{ + uint uVar1; + undefined4 uVar2; + uint uVar3; + Controller *pCVar4; + uint uVar5; + int iVar6; + + if (*(int *)(this + 0x494) == 0) { + return 0; + } + pCVar4 = this + 0x48c; + iVar6 = *(int *)(this + 0x48c); + theFunc._64_4_ = param_2; + theFunc._68_4_ = param_3; + if (iVar6 < 0) { + if (*(code **)(this + 0x4a4) != (code *)0x0) { + (**(code **)(this + 0x4a4))(0); + } + theFunc._56_4_ = theFunc._64_4_; + theFunc._60_4_ = theFunc._68_4_; + *(undefined4 *)pCVar4 = 0; + return 0; + } + uVar3 = iVar6 + 1; + *(uint *)pCVar4 = uVar3; + uVar5 = *(uint *)this; + uVar1 = *(int *)(this + 0x40) + uVar5; + if (uVar3 <= uVar5) { + uVar1 = *(int *)(this + 4) + uVar1; +LAB_0002f1ce: + CFunctions::DoSomething((CFunctions *)theFunc,iVar6,uVar1); + return 0; + } + if (uVar3 <= uVar1) { + if ((uVar3 == uVar1) && (*(code **)(this + 0x4a4) != (code *)0x0)) { + (**(code **)(this + 0x4a4))(1); + uVar5 = *(uint *)this; + uVar3 = *(uint *)pCVar4; + } + CFunctions::PushBaselineRaw((CFunctions *)theFunc,param_1,(uint)(uVar3 == uVar5 + 1)); + CFunctions::DoSomething + ((CFunctions *)theFunc,*(int *)pCVar4 + -1, + *(int *)(this + 0x40) + *(int *)this + *(int *)(this + 4)); + return 0; + } + uVar1 = *(int *)(this + 4) + uVar1; + if (uVar3 <= uVar1) goto LAB_0002f1ce; + if (uVar3 < *(int *)(this + 8) + uVar1) { + iVar6 = 100; + if (0x98be26 < *(uint *)(this + 0x498)) { + iVar6 = 0x1e; + } + if ((uVar3 < iVar6 + uVar1) || + (uVar1 = theFunc._56_4_ - param_2 >> 0x1f, + ((theFunc._56_4_ - param_2) + uVar1 ^ uVar1) <= *(uint *)(this + 0xc))) goto LAB_0002f184; + } + if (*(code **)(this + 0x4a4) != (code *)0x0) { + (**(code **)(this + 0x4a4))(0); + param_3 = theFunc._68_4_; + param_2 = theFunc._64_4_; + } + theFunc._56_4_ = param_2; + theFunc._60_4_ = param_3; + *(undefined4 *)pCVar4 = 0; +LAB_0002f184: + uVar2 = CFunctions::PushFrame((CFunctions *)theFunc,param_1,0,1,0,1); + return uVar2; +} + + + +### FUNC GetRectTemperatureInfo @ 0002f260 + +/* Controller::GetRectTemperatureInfo(unsigned int, unsigned int, unsigned int, unsigned int, int*, + int) */ + +int __thiscall +Controller::GetRectTemperatureInfo + (Controller *this,uint param_1,uint param_2,uint param_3,uint param_4,int *param_5, + int param_6) + +{ + uint uVar1; + int iVar2; + int iVar3; + uint uVar4; + uint uVar5; + uint uVar6; + uint uVar7; + + uVar1 = param_4; + uVar5 = param_3; + uVar7 = param_1; + if (theFunc._116_4_ != 0x5a) { + if (theFunc._116_4_ == 0x10e) { + uVar5 = *(int *)(this + 0x2c) + (param_3 ^ 0xffffffff); + uVar1 = *(int *)(this + 0x28) + (param_4 ^ 0xffffffff); + uVar7 = *(int *)(this + 0x2c) + (param_1 ^ 0xffffffff); + param_2 = *(int *)(this + 0x28) + (param_2 ^ 0xffffffff); + } + else if (theFunc._116_4_ == 0xb4) { + uVar1 = *(int *)(this + 0x28) + (param_3 ^ 0xffffffff); + uVar5 = param_4; + uVar7 = param_2; + param_2 = *(int *)(this + 0x28) + (param_1 ^ 0xffffffff); + } + else { + uVar5 = *(int *)(this + 0x2c) + (param_4 ^ 0xffffffff); + uVar7 = *(int *)(this + 0x2c) + (param_2 ^ 0xffffffff); + uVar1 = param_3; + param_2 = param_1; + } + } + uVar6 = uVar7; + if ((int)uVar7 <= (int)uVar5) { + uVar6 = uVar5; + } + uVar4 = uVar1; + if ((int)param_2 <= (int)uVar1) { + uVar4 = param_2; + } + if ((int)uVar7 <= (int)uVar5) { + uVar5 = uVar7; + } + if ((int)param_2 <= (int)uVar1) { + param_2 = uVar1; + } + iVar2 = CFunctions::GetRectTemperatureInfo + ((CFunctions *)theFunc,uVar4,uVar5,param_2,uVar6,param_5,param_6); + if (iVar2 != 0) { + iVar3 = Buffer2Client(this,param_5[3]); + param_5[3] = iVar3; + iVar3 = Buffer2Client(this,param_5[4]); + param_5[4] = iVar3; + } + return iVar2; +} + + + +### FUNC Client2Buffer @ 0002f340 + +/* Controller::Client2Buffer(int, int, int&, int&) */ + +void __thiscall +Controller::Client2Buffer(Controller *this,int param_1,int param_2,int *param_3,int *param_4) + +{ + if (theFunc._116_4_ == 0x5a) { + *param_3 = param_2; + param_2 = param_1; + } + else if (theFunc._116_4_ == 0xb4) { + *param_3 = *(int *)(this + 0x28) + (param_1 ^ 0xffffffffU); + } + else if (theFunc._116_4_ == 0x10e) { + *param_3 = *(int *)(this + 0x28) + (param_2 ^ 0xffffffffU); + param_2 = *(int *)(this + 0x2c) + (param_1 ^ 0xffffffffU); + } + else { + *param_3 = param_1; + param_2 = *(int *)(this + 0x2c) + (param_2 ^ 0xffffffffU); + } + *param_4 = param_2; + return; +} + + + +### FUNC Buffer2Client @ 0002f39c + +/* Controller::Buffer2Client(int) */ + +int __thiscall Controller::Buffer2Client(Controller *this,int param_1) + +{ + int iVar1; + int iVar2; + int iVar3; + int iVar4; + + iVar4 = *(int *)(this + 0x28); + iVar1 = __divsi3(param_1,iVar4); + iVar2 = param_1 - iVar1 * iVar4; + iVar3 = *(int *)(this + 0x2c); + if (theFunc._116_4_ == 0x5a) { + iVar2 = iVar2 * iVar3 + iVar1; + } + else if (theFunc._116_4_ == 0xb4) { + iVar2 = (iVar4 + iVar1 * iVar4 + -1) - iVar2; + } + else if (theFunc._116_4_ == 0x10e) { + iVar2 = ((iVar3 + -1) - iVar1) + iVar3 * ((iVar4 + -1) - iVar2); + } + else { + iVar2 = ((iVar3 + -1) - iVar1) * iVar4 + iVar2; + } + return iVar2; +} + + + +### FUNC SetEX @ 0002f3fc + +/* Controller::SetEX(int, int, int) */ + +void Controller::SetEX(int param_1,int param_2,int param_3) + +{ + CFunctions::SetEX((CFunctions *)theFunc); + return; +} + + + +### FUNC getEX @ 0002f410 + +/* Controller::getEX() */ + +void Controller::getEX(void) + +{ + CFunctions::GetEX((CFunctions *)theFunc); + return; +} + + + +### FUNC setAutoEnlargeValue @ 0002f424 + +/* Controller::setAutoEnlargeValue(int) */ + +void __thiscall Controller::setAutoEnlargeValue(Controller *this,int param_1) + +{ + theFunc._12_4_ = 0; + if (99 < param_1) { + param_1 = 100; + } + if (param_1 < 3) { + param_1 = 2; + } + theFunc._32_4_ = param_1; + return; +} + + + +### FUNC setEmissivity @ 0002f448 + +/* Controller::setEmissivity(int, int) */ + +Controller * __thiscall Controller::setEmissivity(Controller *this,int param_1,int param_2) + +{ + undefined4 uVar1; + + if ((uint)param_1 < 0x65) { + uVar1 = __floatsisf(param_2); + theFunc._128_4_ = __mulsf3(uVar1,0x3a83126f); + uVar1 = __floatsisf(param_1); + this = (Controller *)__mulsf3(uVar1,0x3c23d70a); + theFunc._124_4_ = this; + } + return this; +} + + + +### FUNC SetColorPalette @ 0002f484 + +/* Controller::SetColorPalette(ColorPalette) */ + +void Controller::SetColorPalette(void) + +{ + CFunctions::SetColorPalette((CFunctions *)theFunc); + return; +} + + + +### FUNC setColorbarSize @ 0002f498 + +/* Controller::setColorbarSize(int, int) */ + +void __thiscall Controller::setColorbarSize(Controller *this,int param_1,int param_2) + +{ + *(int *)(this + 0x38) = param_1; + *(int *)(this + 0x3c) = param_2; + return; +} + + + +### FUNC SetExtParameter @ 0002f4a0 + +/* Controller::SetExtParameter(struct_ExtrinsicPara) */ + +undefined4 +Controller::SetExtParameter + (undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) + +{ + undefined4 in_lr; + undefined4 local_c; + undefined4 uStack_8; + undefined4 uStack_4; + + local_c = param_2; + uStack_8 = param_3; + uStack_4 = param_4; + __aeabi_memcpy4(0x6b90c,&local_c,0x74); + return in_lr; +} + + + +### FUNC getExtParameter @ 0002f4cc + +/* Controller::getExtParameter(struct_ExtrinsicPara&) */ + +void __thiscall Controller::getExtParameter(Controller *this,struct_ExtrinsicPara *param_1) + +{ + __aeabi_memcpy4(param_1,0x6b90c,0x74); + return; +} + + + +### FUNC IsOutputDataReady @ 0002f4e8 + +/* Controller::IsOutputDataReady() */ + +undefined4 Controller::IsOutputDataReady(void) + +{ + return theFunc._172_4_; +} + + + +### FUNC SaveDDT @ 0002f4f8 + +/* Controller::SaveDDT(char const*) */ + +void __thiscall Controller::SaveDDT(Controller *this,char *param_1) + +{ + int iVar1; + undefined4 *puVar2; + char *__format; + undefined4 uVar3; + OFStream aOStack_394 [8]; + undefined4 local_38c; + undefined4 local_388; + int local_384; + int local_380; + undefined4 local_37c; + undefined4 local_378; + undefined4 local_374; + undefined4 local_370; + undefined1 auStack_36c [8]; + undefined4 local_364; + undefined4 local_360; + char local_35c [64]; + time_t local_31c; + int local_318; + undefined4 local_314; + undefined1 auStack_2fc [556]; + undefined4 local_d0; + undefined4 local_cc; + undefined4 local_c8; + undefined4 local_c4; + undefined4 local_c0; + undefined4 local_bc; + undefined4 local_b8; + undefined4 local_b4; + undefined4 local_b0; + undefined4 local_ac; + undefined4 local_a8; + undefined4 local_a4; + undefined4 local_a0; + undefined4 local_9c; + undefined4 local_98; + int local_18; + + local_18 = __stack_chk_guard; + if (theFunc._172_4_ == 0) { + puVar2 = (undefined4 *)__errno(); + *puVar2 = 0xe4ae0006; + uVar3 = 0; + goto LAB_0002f67a; + } + __aeabi_memclr4(auStack_36c,0x354); + local_388 = 0x10002; + local_38c = 0x374; + local_384 = *(int *)(this + 0x28); + local_380 = *(int *)(this + 0x2c); + local_31c = time((time_t *)0x0); + local_318 = local_31c >> 0x1f; + uVar3 = *(undefined4 *)(this + 0x498); + local_378 = theFunc._20736_4_; + local_37c = theFunc._20732_4_; + local_370 = theFunc._64_4_; + local_374 = theFunc._68_4_; + local_360 = 0; + local_364 = 0; + iVar1 = *(int *)(this + 0x49c); + local_314 = uVar3; + if (iVar1 == 2) { + builtin_strncpy(local_35c + 4,"C3P",4); + builtin_strncpy(local_35c,"MAG-",4); + __format = "MAG-C3P-%d"; +LAB_0002f5c4: + sprintf(local_35c,__format,uVar3); + } + else { + if (iVar1 == 1) { + __aeabi_memcpy(local_35c,"MAG-C3",7); + __format = "MAG-C3-%d"; + goto LAB_0002f5c4; + } + if (iVar1 == 0) { + __aeabi_memcpy(local_35c,"MAG-C1",7); + __format = "MAG-C1-%d"; + goto LAB_0002f5c4; + } + } + if ((uint)theFunc._104_4_ < (uint)theFunc._12588_4_) { + __aeabi_memcpy4(auStack_2fc,theFunc._104_4_ * 0x21c + 0x6ea38); + } + local_d0 = *(undefined4 *)(this + 0x18); + local_cc = 0; + local_b4 = theFunc._12_4_; + local_b0 = theFunc._16_4_; + local_ac = theFunc._20_4_; + local_a8 = theFunc._24_4_; + local_a4 = theFunc._28_4_; + local_a0 = theFunc._32_4_; + local_b8 = theFunc._120_4_; + local_c8 = theFunc._124_4_; + local_bc = theFunc._160_4_; + local_c4 = theFunc._128_4_; + local_c0 = theFunc._156_4_; + local_9c = theFunc._44_4_; + local_98 = theFunc._48_4_; + OFStream::OFStream(aOStack_394,param_1,false); + OFStream::Write(aOStack_394,&local_38c,0x374,1); + OFStream::Write(aOStack_394,(void *)theFunc._180_4_,local_380 * local_384 * 2,1); + IFStream::~IFStream((IFStream *)aOStack_394); + uVar3 = 1; +LAB_0002f67a: + if (__stack_chk_guard != local_18) { + /* WARNING: Subroutine does not return */ + __stack_chk_fail(uVar3); + } + return; +} + + + +### FUNC GetTemperature @ 0002f734 + +/* Controller::GetTemperature(unsigned int, unsigned int, int) */ + +void __thiscall Controller::GetTemperature(Controller *this,uint param_1,uint param_2,int param_3) + +{ + uint uVar1; + + uVar1 = Client2Buffer(this,param_1); + CFunctions::GetTemperature((CFunctions *)theFunc,uVar1,param_2,param_3); + return; +} + + + +### FUNC Client2Buffer @ 0002f758 + +/* Controller::Client2Buffer(int) */ + +int __thiscall Controller::Client2Buffer(Controller *this,int param_1) + +{ + int iVar1; + int extraout_r1; + int iVar2; + int iVar3; + + iVar2 = *(int *)(this + 0x28); + iVar3 = *(int *)(this + 0x2c); + if (theFunc._116_4_ == 0x5a) { + iVar1 = __divsi3(param_1,iVar3); + iVar1 = (param_1 - iVar1 * iVar3) * iVar2 + iVar1; + } + else if (theFunc._116_4_ == 0xb4) { + __aeabi_idivmod(param_1,iVar2); + iVar1 = param_1 + iVar2 + extraout_r1 * -2 + -1; + } + else if (theFunc._116_4_ == 0x10e) { + iVar1 = __divsi3(param_1,iVar3); + iVar1 = ((iVar2 + -1) - iVar1) + iVar2 * (iVar3 + (param_1 ^ 0xffffffffU) + iVar1 * iVar3); + } + else { + iVar1 = __divsi3(param_1,iVar2); + iVar1 = iVar2 * (iVar3 + -1 + iVar1 * -2) + param_1; + } + return iVar1; +} + + + +### FUNC GetOutputBMPData @ 0002f7e0 + +/* Controller::GetOutputBMPData(unsigned int*, int) */ + +undefined4 __thiscall Controller::GetOutputBMPData(Controller *this,uint *param_1,int param_2) + +{ + bool bVar1; + undefined4 uVar2; + byte *pbVar3; + uint *puVar4; + int iVar5; + byte *pbVar6; + uint *puVar7; + int iVar8; + int iVar9; + + iVar8 = *(int *)(this + 0x28); + iVar9 = *(int *)(this + 0x2c); + iVar5 = iVar8 * iVar9 * 4; + uVar2 = 0; + if (iVar5 - param_2 == 0 || iVar5 < param_2) { + pbVar3 = (byte *)CFunctions::GetOriginalBMPDataPointer((CFunctions *)theFunc); + uVar2 = 1; + if (0 < iVar9) { + puVar4 = param_1 + (iVar9 + -1) * iVar8; + iVar5 = iVar9 + -1; + do { + pbVar6 = pbVar3; + if (iVar8 != 0) { + pbVar6 = pbVar3 + iVar8; + puVar7 = puVar4; + iVar9 = iVar8; + do { + *puVar7 = *(uint *)(theFunc + (uint)*pbVar3 * 4 + 0x24f4) | 0xff000000; + puVar7 = puVar7 + 1; + iVar9 = iVar9 + -1; + pbVar3 = pbVar3 + 1; + } while (iVar9 != 0); + puVar4 = puVar4 + iVar8; + } + puVar4 = puVar4 + iVar8 * -2; + bVar1 = 0 < iVar5; + pbVar3 = pbVar6; + iVar5 = iVar5 + -1; + } while (bVar1); + uVar2 = 1; + } + } + return uVar2; +} + + + +### FUNC GetOutputColorBarData @ 0002f878 + +/* Controller::GetOutputColorBarData(unsigned int*, int) */ + +undefined4 __thiscall Controller::GetOutputColorBarData(Controller *this,uint *param_1,int param_2) + +{ + bool bVar1; + uint *puVar2; + int iVar3; + uint uVar4; + int iVar5; + uint uVar6; + undefined4 uVar7; + + uVar6 = *(uint *)(this + 0x38); + uVar4 = uVar6 * *(int *)(this + 0x3c) * 4; + uVar7 = 0; + if (uVar4 < (uint)param_2 || uVar4 - param_2 == 0) { + iVar3 = *(int *)(this + 0x3c) + -1; + uVar7 = 1; + if (-1 < iVar3) { + puVar2 = param_1 + iVar3 * uVar6; + iVar5 = theFunc._200_4_; + do { + if (uVar6 == 0) { + uVar6 = 0; + } + else { + uVar4 = 0; + do { + *puVar2 = *(uint *)(theFunc + (uint)*(byte *)(iVar5 + uVar4) * 4 + 0x291c) | 0xff000000; + puVar2 = puVar2 + 1; + uVar4 = uVar4 + 1; + uVar6 = *(uint *)(this + 0x38); + } while (uVar4 < uVar6); + iVar5 = iVar5 + uVar4; + } + puVar2 = puVar2 + uVar6 * -2; + bVar1 = 0 < iVar3; + iVar3 = iVar3 + -1; + } while (bVar1); + uVar7 = 1; + } + } + return uVar7; +} + + + +### FUNC GetStatePointer @ 0002f900 + +/* Controller::GetStatePointer(struct_State*) */ + +undefined4 __thiscall Controller::GetStatePointer(Controller *this,struct_State *param_1) + +{ + undefined4 uVar1; + + __aeabi_memcpy4(param_1,0x6fd90,0xc68); + uVar1 = Buffer2Client(this,*(int *)(param_1 + 0x28)); + *(undefined4 *)(param_1 + 0x28) = uVar1; + uVar1 = Buffer2Client(this,*(int *)(param_1 + 0x2c)); + *(undefined4 *)(param_1 + 0x2c) = uVar1; + uVar1 = Buffer2Client(this,*(int *)(param_1 + 0x30)); + *(undefined4 *)(param_1 + 0x30) = uVar1; + return 1; +} + + + +### FUNC Lock @ 0002f948 + +/* Controller::Lock() */ + +void Controller::Lock(void) + +{ + pthread_mutex_lock((pthread_mutex_t *)(theFunc + 0xb0)); + return; +} + + + +### FUNC Unlock @ 0002f960 + +/* Controller::Unlock() */ + +void Controller::Unlock(void) + +{ + pthread_mutex_unlock((pthread_mutex_t *)(theFunc + 0xb0)); + return; +} + + + +### FUNC SampleTemperatures @ 0002f978 + +/* Controller::SampleTemperatures() */ + +void __thiscall Controller::SampleTemperatures(Controller *this) + +{ + undefined4 uVar1; + Controller *pCVar2; + int iVar3; + uint uVar4; + uint uVar5; + int iVar6; + float extraout_s0; + float extraout_s0_00; + float extraout_s0_01; + float extraout_s0_02; + float fVar7; + + pthread_mutex_lock((pthread_mutex_t *)(this + 0x4a0)); + pthread_mutex_lock((pthread_mutex_t *)(theFunc + 0xb0)); + if (*(int *)(this + 0x488) != 0) { + iVar6 = 0; + uVar5 = 0; + fVar7 = extraout_s0; + do { + iVar3 = *(int *)(this + iVar6 + 0xb0); + *(uint *)(this + iVar6 + 0xb0) = iVar3 + 1U; + *(int *)(this + iVar6 + 0xb8) = *(int *)(this + iVar6 + 0xb8) + 1; + if (*(uint *)(this + iVar6 + 0x90) <= iVar3 + 1U) { + *(undefined4 *)(this + iVar6 + 0xb0) = 0; + if (uVar5 == 2) { + *(undefined4 *)(this + 300) = theFunc._17584_4_; + pCVar2 = this + 0x170; + uVar1 = theFunc._17568_4_; + if (*(int *)(this + 0x10) != 0) { + uVar1 = CFunctions::CorrectTemperature((int)theFunc,fVar7,theFunc._17568_4_); + fVar7 = extraout_s0_01; + } +LAB_0002fab4: + *(undefined4 *)pCVar2 = uVar1; +LAB_0002fad6: + iVar3 = *(int *)(this + iVar6 + 0x98); + *(int *)(this + iVar6 + 0x9c) = iVar3; + *(int *)(this + iVar6 + 0xa0) = iVar3; + *(int *)(this + iVar6 + 0xa4) = iVar3; + } + else { + if (uVar5 == 1) { + *(undefined4 *)(this + 0xc0) = theFunc._17588_4_; + pCVar2 = this + 0x104; + uVar1 = theFunc._17572_4_; + if (*(int *)(this + 0x10) != 0) { + uVar1 = CFunctions::CorrectTemperature((int)theFunc,fVar7,theFunc._17572_4_); + fVar7 = extraout_s0_02; + } + goto LAB_0002fab4; + } + if (uVar5 == 0) { + *(undefined4 *)(this + 0x54) = theFunc._17592_4_; + uVar1 = theFunc._17576_4_; + if (*(int *)(this + 0x10) != 0) { + uVar1 = CFunctions::CorrectTemperature((int)theFunc,fVar7,theFunc._17576_4_); + fVar7 = extraout_s0_00; + } + *(undefined4 *)(this + 0x98) = uVar1; + goto LAB_0002fad6; + } + fVar7 = (float)SampleProbe(this,uVar5); + if ((*(uint *)(this + iVar6 + 0x50) < 8) && + ((1 << (*(uint *)(this + iVar6 + 0x50) & 0xff) & 0xc1U) != 0)) goto LAB_0002fad6; + iVar3 = *(int *)(this + iVar6 + 0x98); + } + uVar4 = 0; + if (*(int *)(this + iVar6 + 0xa8) <= iVar3) { + uVar4 = (uint)(iVar3 <= *(int *)(this + iVar6 + 0xac)); + } + *(uint *)(this + iVar6 + 0xb4) = uVar4; + } + iVar6 = iVar6 + 0x6c; + uVar5 = uVar5 + 1; + } while (uVar5 < *(uint *)(this + 0x488)); + } + pthread_mutex_unlock((pthread_mutex_t *)(theFunc + 0xb0)); + pthread_mutex_unlock((pthread_mutex_t *)(this + 0x4a0)); + return; +} + + + +### FUNC SampleProbe @ 0002fb60 + +/* WARNING: Restarted to delay deadcode elimination for space: stack */ +/* Controller::SampleProbe(int) */ + +void __thiscall Controller::SampleProbe(Controller *this,int param_1) + +{ + int iVar1; + int iVar2; + uint uVar3; + uint *puVar4; + uint uVar5; + int iVar6; + uint uVar7; + uint uVar8; + uint uVar9; + uint uVar10; + int iVar11; + float extraout_s0; + float extraout_s0_00; + float extraout_s0_01; + float fVar12; + float extraout_s0_02; + float extraout_s0_03; + float extraout_s0_04; + float extraout_s0_05; + float extraout_s0_06; + float extraout_s0_07; + uint *local_a30; + uint local_a2c; + uint local_a28; + uint *local_a24; + uint local_a20; + uint local_a1c; + uint *local_a18; + uint local_a14; + uint local_a10; + int local_a0c [638]; + + iVar1 = __stack_chk_guard; + iVar2 = 0; + if ((9 < param_1) || (*(int *)(this + 0x488) < param_1)) goto switchD_0002fbaa_default; + iVar6 = param_1 * 0x6c; + iVar11 = *(int *)(this + iVar6 + 0x50); + switch(iVar11) { + case 0: + uVar10 = CFunctions::GetTemperature + ((CFunctions *)theFunc,*(uint *)(this + iVar6 + 0x54), + *(uint *)(this + iVar6 + 0x58),0); + if (*(int *)(this + 0x10) != 0) { + uVar10 = CFunctions::CorrectTemperature((int)theFunc,extraout_s0_04,uVar10); + } + *(uint *)(this + iVar6 + 0x98) = uVar10; + iVar2 = 0; + break; + case 1: + uVar10 = *(uint *)(this + 0x2c); + if (*(uint *)(this + 0x2c) <= *(uint *)(this + 0x28)) { + uVar10 = *(uint *)(this + 0x28); + } + iVar2 = CFunctions::GetLineTemperatureInfo2 + ((CFunctions *)theFunc,(ushort *)&local_a18,uVar10 << 1,(int *)&local_a24, + *(uint *)(this + iVar6 + 0x5c),*(uint *)(this + iVar6 + 0x60), + *(uint *)(this + iVar6 + 100),*(uint *)(this + iVar6 + 0x68),0); + if (0 < iVar2) { + if (*(int *)(this + 0x10) == 0) { + local_a30 = local_a24; + local_a2c = local_a20; + local_a28 = local_a1c; + puVar4 = local_a24; + uVar10 = local_a20; + } + else { + puVar4 = (uint *)CFunctions::CorrectTemperature((int)theFunc,extraout_s0_05,(uint)local_a24) + ; + local_a30 = puVar4; + uVar10 = CFunctions::CorrectTemperature((int)theFunc,extraout_s0_06,local_a20); + local_a2c = uVar10; + local_a28 = CFunctions::CorrectTemperature((int)theFunc,extraout_s0_07,local_a1c); + } + *(uint *)(this + iVar6 + 0xa0) = uVar10; + *(uint **)(this + iVar6 + 0x9c) = puVar4; + *(uint *)(this + iVar6 + 0xa4) = local_a28; + if (*(int *)(this + iVar6 + 0x94) < 3) { + puVar4 = (&local_a30)[*(int *)(this + iVar6 + 0x94)]; + } + else { + puVar4 = (uint *)(uVar10 - (int)puVar4); + } + *(uint **)(this + iVar6 + 0x98) = puVar4; + *(undefined4 *)(this + iVar6 + 0x54) = 0; + } + iVar2 = 1; + break; + case 2: + case 3: + case 4: + case 5: + iVar2 = 0; + if (iVar11 == 5) break; + if (iVar11 == 2) { + uVar8 = *(uint *)(this + iVar6 + 0x80); + uVar3 = *(uint *)(this + iVar6 + 0x78); + uVar9 = *(uint *)(this + iVar6 + 0x7c); + uVar10 = *(uint *)(this + iVar6 + 0x84); + uVar7 = uVar10; + if ((int)uVar10 <= (int)uVar9) { + uVar7 = uVar9; + } + uVar5 = uVar8; + if ((int)uVar3 <= (int)uVar8) { + uVar5 = uVar3; + } + if ((int)uVar9 <= (int)uVar10) { + uVar10 = uVar9; + } + if ((int)uVar8 <= (int)uVar3) { + uVar8 = uVar3; + } + iVar11 = CFunctions::GetRectTemperatureInfo + ((CFunctions *)theFunc,uVar5,uVar10,uVar8,uVar7,(int *)&local_a18,0); + fVar12 = extraout_s0; + } + else { + uVar8 = *(uint *)(this + iVar6 + 0x80); + uVar3 = *(uint *)(this + iVar6 + 0x78); + uVar9 = *(uint *)(this + iVar6 + 0x7c); + uVar10 = *(uint *)(this + iVar6 + 0x84); + uVar7 = uVar10; + if ((int)uVar10 <= (int)uVar9) { + uVar7 = uVar9; + } + uVar5 = uVar8; + if ((int)uVar3 <= (int)uVar8) { + uVar5 = uVar3; + } + if ((int)uVar9 <= (int)uVar10) { + uVar10 = uVar9; + } + if ((int)uVar8 <= (int)uVar3) { + uVar8 = uVar3; + } + iVar11 = CFunctions::GetEllipseTemperatureInfo + ((CFunctions *)theFunc,uVar5,uVar10,uVar8,uVar7,(int *)&local_a18,0); + fVar12 = extraout_s0_01; + } + iVar2 = 0; + if (iVar11 == 0) break; + if (*(int *)(this + 0x10) == 0) { + local_a24 = local_a18; + local_a20 = local_a14; + puVar4 = local_a18; + uVar10 = local_a14; + } + else { + puVar4 = (uint *)CFunctions::CorrectTemperature((int)theFunc,fVar12,(uint)local_a18); + local_a24 = puVar4; + uVar10 = CFunctions::CorrectTemperature((int)theFunc,extraout_s0_02,local_a14); + local_a20 = uVar10; + local_a10 = CFunctions::CorrectTemperature((int)theFunc,extraout_s0_03,local_a10); + } + local_a1c = local_a10; + *(uint *)(this + iVar6 + 0xa0) = uVar10; + *(uint **)(this + iVar6 + 0x9c) = puVar4; + *(uint *)(this + iVar6 + 0xa4) = local_a10; + iVar2 = *(int *)(this + iVar6 + 0x94); + if (iVar2 < 3) { + *(uint **)(this + iVar6 + 0x98) = (&local_a24)[iVar2]; + if (iVar2 == 2) goto LAB_0002fef8; + iVar2 = local_a0c[iVar2]; + } + else { + *(uint *)(this + iVar6 + 0x98) = uVar10 - (int)puVar4; +LAB_0002fef8: + iVar2 = ((*(int *)(this + iVar6 + 0x7c) + *(int *)(this + iVar6 + 0x84)) / 2) * + *(int *)(this + 0x28) + + (*(int *)(this + iVar6 + 0x78) + *(int *)(this + iVar6 + 0x80)) / 2; + } + *(int *)(this + iVar6 + 0x54) = iVar2; + iVar2 = iVar11; + break; + case 6: + case 7: + if (*(int *)(this + iVar6 + 0x74) == 0) { + local_a14 = 0; + local_a18 = &switchD_0002fbaa::switchdataD_0002fbac; + } + else { + uVar10 = 0; + do { + iVar2 = uVar10 * 8 + iVar6; + puVar4 = (uint *)CFunctions::GetTemperature + ((CFunctions *)theFunc, + *(int *)(this + iVar2 + 0x60) * *(int *)(this + 0x28) + + *(int *)(this + iVar2 + 0x5c),*(uint *)(this + iVar6 + 0x58),0); + if (*(int *)(this + 0x10) != 0) { + puVar4 = (uint *)CFunctions::CorrectTemperature((int)theFunc,extraout_s0_00,(uint)puVar4); + } + (&local_a18)[uVar10] = puVar4; + uVar10 = uVar10 + 1; + } while (uVar10 < *(uint *)(this + iVar6 + 0x74)); + iVar11 = *(int *)(this + iVar6 + 0x50); + } + uVar10 = (int)((int)local_a18 - local_a14) >> 0x1f; + uVar10 = ((int)local_a18 - local_a14) + uVar10 ^ uVar10; + if (iVar11 == 7) { + uVar7 = (int)((int)local_a18 - local_a10) >> 0x1f; + uVar7 = ((int)local_a18 - local_a10) + uVar7 ^ uVar7; + uVar8 = (int)(local_a14 - local_a10) >> 0x1f; + uVar8 = (local_a14 - local_a10) + uVar8 ^ uVar8; + if ((int)uVar8 <= (int)uVar10) { + uVar8 = uVar10; + } + uVar10 = uVar7; + if ((int)uVar7 <= (int)uVar8) { + uVar10 = uVar8; + } + } + *(uint *)(this + iVar6 + 0x98) = uVar10; + iVar2 = 0; + } +switchD_0002fbaa_default: + if (__stack_chk_guard != iVar1) { + /* WARNING: Subroutine does not return */ + __stack_chk_fail(iVar2); + } + return; +} + + + +### FUNC DeleteProbe @ 0002ff98 + +/* Controller::DeleteProbe(unsigned int) */ + +undefined4 __thiscall Controller::DeleteProbe(Controller *this,uint param_1) + +{ + pthread_mutex_t *__mutex; + uint uVar1; + Controller *pCVar2; + uint uVar3; + + __mutex = (pthread_mutex_t *)(this + 0x4a0); + pthread_mutex_lock(__mutex); + if (2 < param_1) { + uVar1 = *(uint *)(this + 0x488); + uVar3 = param_1 + 1; + if (uVar3 <= uVar1) { + if (uVar3 < uVar1) { + pCVar2 = this + param_1 * 0x6c + 0xbc; + do { + __aeabi_memcpy4(pCVar2 + -0x6c,pCVar2,0x6c); + pCVar2 = pCVar2 + 0x6c; + uVar3 = uVar3 + 1; + uVar1 = *(uint *)(this + 0x488); + } while (uVar3 < uVar1); + } + *(uint *)(this + 0x488) = uVar1 - 1; + pthread_mutex_unlock(__mutex); + return 1; + } + } + pthread_mutex_unlock(__mutex); + return 0; +} + + + +### FUNC EditProbe @ 0002fffc + +/* Controller::EditProbe(unsigned int, unsigned int, unsigned int, unsigned int, float, unsigned + int, int, int, int, int) */ + +undefined4 +Controller::EditProbe + (uint param_1,uint param_2,uint param_3,uint param_4,float param_5,uint param_6, + int param_7,int param_8,int param_9,int param_10) + +{ + pthread_mutex_t *__mutex; + uint uVar1; + uint extraout_r1; + int iVar2; + undefined4 uVar3; + undefined4 in_stack_00000014; + + __mutex = (pthread_mutex_t *)(param_1 + 0x4a0); + uVar3 = *(undefined4 *)(param_1 + 0x28); + pthread_mutex_lock(__mutex); + uVar1 = __udivsi3(param_3,uVar3); + if ((((param_2 < *(uint *)(param_1 + 0x488)) && + (__aeabi_uidivmod(param_3,uVar3), extraout_r1 < *(uint *)(param_1 + 0x28))) && (param_6 != 0) + ) && (uVar1 < *(uint *)(param_1 + 0x2c))) { + iVar2 = param_1 + param_2 * 0x6c; + *(uint *)(iVar2 + 0x90) = param_6; + *(int *)(iVar2 + 0x8c) = param_7; + *(int *)(iVar2 + 0x88) = param_8; + *(int *)(iVar2 + 0x94) = param_9; + *(int *)(iVar2 + 0xa8) = param_10; + *(undefined4 *)(iVar2 + 0xac) = in_stack_00000014; + *(uint *)(iVar2 + 0x54) = param_3; + *(uint *)(iVar2 + 0x58) = param_4; + pthread_mutex_unlock(__mutex); + SampleProbe((Controller *)param_1,param_2); + uVar3 = 1; + } + else { + pthread_mutex_unlock(__mutex); + uVar3 = 0; + } + return uVar3; +} + + + +### FUNC SaveDDT @ 000300aa + +/* Controller::SaveDDT() */ + +void Controller::SaveDDT(void) + +{ + return; +} + + + +### FUNC Buffer2Client @ 000300ac + +/* Controller::Buffer2Client(int, int&, int&) */ + +void __thiscall Controller::Buffer2Client(Controller *this,int param_1,int *param_2,int *param_3) + +{ + uint uVar1; + uint uVar2; + int iVar3; + + iVar3 = *(int *)(this + 0x28); + uVar1 = __udivsi3(param_1,iVar3); + uVar2 = param_1 - uVar1 * iVar3; + if (theFunc._116_4_ == 0x5a) { +LAB_00030102: + *param_2 = uVar1; + *param_3 = uVar2; + iVar3 = *(int *)(this + 0x28); + } + else if (theFunc._116_4_ != 0xb4) { + if (theFunc._116_4_ == 0x10e) goto LAB_0003011c; + *param_2 = uVar2; + *param_3 = *(int *)(this + 0x2c) + (uVar1 ^ 0xffffffff); + goto LAB_00030102; + } + *param_2 = iVar3 + (uVar2 ^ 0xffffffff); + *param_3 = uVar1; +LAB_0003011c: + *param_2 = *(int *)(this + 0x2c) + (uVar1 ^ 0xffffffff); + *param_3 = *(int *)(this + 0x28) + (uVar2 ^ 0xffffffff); + return; +} + + + +### FUNC Buffer2Client @ 00030138 + +/* Controller::Buffer2Client(int, int, int&, int&) */ + +void __thiscall +Controller::Buffer2Client(Controller *this,int param_1,int param_2,int *param_3,int *param_4) + +{ + if (theFunc._116_4_ == 0x5a) { + *param_3 = param_2; + param_2 = param_1; + } + else if (theFunc._116_4_ == 0xb4) { + *param_3 = *(int *)(this + 0x28) + (param_1 ^ 0xffffffffU); + } + else if (theFunc._116_4_ == 0x10e) { + *param_3 = *(int *)(this + 0x2c) + (param_2 ^ 0xffffffffU); + param_2 = *(int *)(this + 0x28) + (param_1 ^ 0xffffffffU); + } + else { + *param_3 = param_1; + param_2 = *(int *)(this + 0x2c) + (param_2 ^ 0xffffffffU); + } + *param_4 = param_2; + return; +} + + + +### FUNC clientPos2ClientXY @ 00030194 + +/* Controller::clientPos2ClientXY(int, int&, int&) */ + +void __thiscall +Controller::clientPos2ClientXY(Controller *this,int param_1,int *param_2,int *param_3) + +{ + int iVar1; + Controller *pCVar2; + + if ((int)theFunc._116_4_ < 0xb4) { + if (theFunc._116_4_ == 0) { +LAB_000301c0: + pCVar2 = this + 0x28; + goto LAB_000301ce; + } + if (theFunc._116_4_ != 0x5a) { + return; + } + } + else if (theFunc._116_4_ != 0x10e) { + if (theFunc._116_4_ != 0xb4) { + return; + } + goto LAB_000301c0; + } + pCVar2 = this + 0x2c; +LAB_000301ce: + iVar1 = __udivsi3(param_1,*(undefined4 *)pCVar2); + *param_3 = iVar1; + *param_2 = param_1 - iVar1 * *(int *)pCVar2; + return; +} + + + +### FUNC clientPos2ScreenXY @ 000301ec + +/* Controller::clientPos2ScreenXY(int, int, int, int&, int&) */ + +void __thiscall +Controller::clientPos2ScreenXY + (Controller *this,int param_1,int param_2,int param_3,int *param_4,int *param_5) + +{ + undefined4 uVar1; + undefined1 *puVar2; + int iVar3; + int iVar4; + Controller *pCVar5; + + uVar1 = theFunc._116_4_; + puVar2 = theFunc; + iVar4 = param_3; + if ((int)theFunc._116_4_ < 0xb4) { + if (theFunc._116_4_ == 0) { +LAB_00030218: + pCVar5 = this + 0x28; + goto LAB_00030226; + } + if (theFunc._116_4_ == 0x5a) goto LAB_00030220; + } + else { + puVar2 = (undefined1 *)0x10e; + if (theFunc._116_4_ != 0x10e) { + if (theFunc._116_4_ != 0xb4) goto LAB_0003023c; + goto LAB_00030218; + } +LAB_00030220: + pCVar5 = this + 0x2c; +LAB_00030226: + iVar3 = *(int *)pCVar5; + iVar4 = __udivsi3(param_1,iVar3); + puVar2 = (undefined1 *)(param_1 - iVar4 * iVar3); + } +LAB_0003023c: + if ((int)uVar1 < 0xb4) { + if (uVar1 == 0) { +LAB_00030258: + iVar3 = __udivsi3((int)puVar2 * param_2,*(undefined4 *)(this + 0x28)); + *param_4 = iVar3; + pCVar5 = this + 0x2c; + goto LAB_0003027e; + } + if (uVar1 != 0x5a) { + return; + } + } + else if (uVar1 != 0x10e) { + if (uVar1 != 0xb4) { + return; + } + goto LAB_00030258; + } + iVar3 = __udivsi3((int)puVar2 * param_2,*(undefined4 *)(this + 0x2c)); + *param_4 = iVar3; + pCVar5 = this + 0x28; +LAB_0003027e: + iVar4 = __udivsi3(iVar4 * param_3,*(undefined4 *)pCVar5); + *param_5 = iVar4; + return; +} + + + +### FUNC clientXY2ScreenXY @ 00030294 + +/* Controller::clientXY2ScreenXY(int, int, int, int, int&, int&) */ + +void __thiscall +Controller::clientXY2ScreenXY + (Controller *this,int param_1,int param_2,int param_3,int param_4,int *param_5, + int *param_6) + +{ + int iVar1; + Controller *pCVar2; + + if ((int)theFunc._116_4_ < 0xb4) { + if (theFunc._116_4_ == 0) { +LAB_000302c2: + iVar1 = __udivsi3(param_3 * param_1,*(undefined4 *)(this + 0x28)); + *param_5 = iVar1; + pCVar2 = this + 0x2c; + goto LAB_000302e4; + } + if (theFunc._116_4_ != 0x5a) { + return; + } + } + else if (theFunc._116_4_ != 0x10e) { + if (theFunc._116_4_ != 0xb4) { + return; + } + goto LAB_000302c2; + } + iVar1 = __udivsi3(param_3 * param_1,*(undefined4 *)(this + 0x2c)); + *param_5 = iVar1; + pCVar2 = this + 0x28; +LAB_000302e4: + iVar1 = __udivsi3(param_4 * param_2,*(undefined4 *)pCVar2); + *param_6 = iVar1; + return; +} + + + +### FUNC screenXY2ClientXY @ 000302fc + +/* Controller::screenXY2ClientXY(int, int, int, int, int&, int&) */ + +void __thiscall +Controller::screenXY2ClientXY + (Controller *this,int param_1,int param_2,int param_3,int param_4,int *param_5, + int *param_6) + +{ + int iVar1; + int iVar2; + int iVar3; + int iVar4; + + iVar3 = *(int *)(this + 0x28); + iVar4 = *(int *)(this + 0x2c); + if ((int)theFunc._116_4_ < 0xb4) { + if (theFunc._116_4_ == 0) { +LAB_00030338: + iVar1 = __divsi3(iVar3 * param_1,param_3); + *param_5 = iVar1; + iVar1 = __divsi3(iVar4 * param_2,param_4); + *param_6 = iVar1; + iVar2 = 0; + if (*param_5 < 0) { +LAB_0003036a: + *param_5 = iVar2; + iVar1 = *param_6; + } + else if (iVar3 <= *param_5) { + iVar2 = iVar3 + -1; + goto LAB_0003036a; + } + if (iVar1 < 0) goto LAB_000303be; + iVar3 = iVar4; + if (iVar1 < iVar4) { + return; + } + goto LAB_000303b8; + } + if (theFunc._116_4_ != 0x5a) { + return; + } + } + else if (theFunc._116_4_ != 0x10e) { + if (theFunc._116_4_ != 0xb4) { + return; + } + goto LAB_00030338; + } + iVar1 = __divsi3(iVar4 * param_1,param_3); + *param_5 = iVar1; + iVar1 = __divsi3(iVar3 * param_2,param_4); + *param_6 = iVar1; + iVar2 = 0; + if (*param_5 < 0) { +LAB_000303a6: + *param_5 = iVar2; + iVar1 = *param_6; + } + else if (iVar4 <= *param_5) { + iVar2 = iVar4 + -1; + goto LAB_000303a6; + } + if (iVar1 < 0) { +LAB_000303be: + *param_6 = 0; + return; + } + if (iVar1 < iVar3) { + return; + } +LAB_000303b8: + *param_6 = iVar3 + -1; + return; +} + + + +### FUNC sensorXY2ScreenXY @ 000303cc + +/* Controller::sensorXY2ScreenXY(int, int, int, int, int&, int&) */ + +void __thiscall +Controller::sensorXY2ScreenXY + (Controller *this,int param_1,int param_2,int param_3,int param_4,int *param_5, + int *param_6) + +{ + int iVar1; + Controller *pCVar2; + + if (theFunc._116_4_ != 0x5a) { + if (theFunc._116_4_ != 0x10e) { + if (theFunc._116_4_ == 0xb4) { + param_1 = *(int *)(this + 0x28) + (param_1 ^ 0xffffffffU); + } + else { + param_2 = *(int *)(this + 0x2c) + (param_2 ^ 0xffffffffU); + if (theFunc._116_4_ != 0) { + return; + } + } + iVar1 = __udivsi3(param_1 * param_3,*(undefined4 *)(this + 0x28)); + *param_5 = iVar1; + pCVar2 = this + 0x2c; + param_1 = param_2; + goto LAB_0003043e; + } + param_1 = *(int *)(this + 0x28) + (param_1 ^ 0xffffffffU); + param_2 = *(int *)(this + 0x2c) + (param_2 ^ 0xffffffffU); + } + iVar1 = __udivsi3(param_2 * param_3,*(undefined4 *)(this + 0x2c)); + *param_5 = iVar1; + pCVar2 = this + 0x28; +LAB_0003043e: + iVar1 = __udivsi3(param_1 * param_4,*(undefined4 *)pCVar2); + *param_6 = iVar1; + return; +} + + + +### FUNC screenXY2SensorXY @ 00030454 + +/* Controller::screenXY2SensorXY(int, int, int, int, int&, int&) */ + +void __thiscall +Controller::screenXY2SensorXY + (Controller *this,int param_1,int param_2,int param_3,int param_4,int *param_5, + int *param_6) + +{ + int local_1c; + int local_18; + int local_14; + + local_14 = __stack_chk_guard; + screenXY2ClientXY(this,param_1,param_2,param_3,param_4,&local_18,&local_1c); + Client2Buffer(this,local_18,local_1c,param_5,param_6); + if (__stack_chk_guard == local_14) { + return; + } + /* WARNING: Subroutine does not return */ + __stack_chk_fail(); +} + + + +### FUNC FUN_000304ac @ 000304ac + +void FUN_000304ac(void) + +{ + FUN_00030670(); + return; +} + + + +### FUNC FUN_000304b6 @ 000304b6 + +void FUN_000304b6(void *param_1) + +{ + FUN_00030670(); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_0003057c @ 0003057c + +bool FUN_0003057c(undefined4 param_1,undefined4 param_2,undefined4 *param_3,undefined4 *param_4) + +{ + int iVar1; + undefined4 uVar2; + + iVar1 = FUN_0003186c(); + if (iVar1 == 1) { + param_4[1] = param_2; + *param_4 = 1; + uVar2 = *param_3; + *(undefined1 *)(param_4 + 4) = 1; + param_4[2] = uVar2; + } + return iVar1 == 1; +} + + + +### FUNC FUN_000305a4 @ 000305a4 + +bool FUN_000305a4(undefined4 param_1,undefined4 param_2,undefined4 *param_3,undefined4 *param_4) + +{ + int iVar1; + undefined4 uVar2; + + iVar1 = FUN_0003186c(); + if (iVar1 == 1) { + param_4[1] = param_2; + *param_4 = 1; + uVar2 = *param_3; + *(undefined1 *)(param_4 + 4) = 1; + param_4[2] = uVar2; + } + return iVar1 == 1; +} + + + +### FUNC FUN_000305cc @ 000305cc + +undefined4 * FUN_000305cc(undefined4 *param_1,int param_2) + +{ + int iVar1; + + *param_1 = 0; + param_1[1] = 0; + param_1[2] = 0; + param_1[3] = 0; + *(undefined1 *)(param_1 + 4) = 1; + if ((param_2 != 0) && + (iVar1 = FUN_00030ba0(param_2,&PTR_PTR_FUN_00031728_1_00068ce4,&PTR_PTR_FUN_00031728_1_00068e6c + ,0), iVar1 != 0)) { + param_1[3] = *(undefined4 *)(iVar1 + 8); + } + return param_1; +} + + + +### FUNC FUN_00030610 @ 00030610 + +undefined4 FUN_00030610(undefined4 param_1) + +{ + void *__addr; + + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070a28); + __addr = DAT_00070a2c; + while (__addr != (void *)0x0) { + DAT_00070a2c = *(void **)((int)__addr + DAT_00070a24); + munmap(__addr,0x1000); + __addr = DAT_00070a2c; + } + DAT_00070a2c = __addr; + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070a28); + pthread_mutex_destroy((pthread_mutex_t *)&DAT_00070a28); + pthread_key_delete(DAT_00070a18); + return param_1; +} + + + +### FUNC FUN_00030670 @ 00030670 + +void FUN_00030670(void) + +{ + FUN_00031860(); + return; +} + + + +### FUNC FUN_0003067c @ 0003067c + +void FUN_0003067c(void) + +{ + /* WARNING: Subroutine does not return */ + FUN_00030e78("Pure virtual function called!"); +} + + + +### FUNC FUN_000306a8 @ 000306a8 + +void FUN_000306a8(void) + +{ + /* WARNING: Subroutine does not return */ + FUN_00030e78("Deleted virtual function called!"); +} + + + +### FUNC FUN_000306d8 @ 000306d8 + +int * FUN_000306d8(void) + +{ + int iVar1; + int *piVar2; + undefined4 *puVar3; + undefined4 *puVar4; + undefined4 *puVar5; + int iVar6; + undefined4 *puVar7; + + piVar2 = (int *)pthread_getspecific(DAT_00070a18); + if (piVar2 != (int *)0x0) { + return piVar2; + } + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070a28); + piVar2 = DAT_00070a30; + if (DAT_00070a30 == (int *)0x0) { + piVar2 = (int *)0x0; + puVar3 = (undefined4 *)mmap((void *)0x0,0x1000,3,0x22,-1,0); + if (puVar3 == (undefined4 *)0xffffffff) goto LAB_0003076a; + *(undefined4 **)((int)puVar3 + DAT_00070a24) = DAT_00070a2c; + iVar1 = DAT_00070a1c; + puVar5 = &DAT_00070a30; + DAT_00070a2c = puVar3; + if (DAT_00070a20 != 0) { + puVar5 = (undefined4 *)((int)puVar3 + DAT_00070a1c * (DAT_00070a20 + -1)); + iVar6 = DAT_00070a20; + puVar7 = &DAT_00070a30; + do { + puVar4 = puVar3; + *puVar7 = puVar4; + iVar6 = iVar6 + -1; + puVar3 = (undefined4 *)((int)puVar4 + iVar1); + puVar7 = puVar4; + } while (iVar6 != 0); + } + *puVar5 = 0; + piVar2 = DAT_00070a30; + } + DAT_00070a30 = (int *)*piVar2; + __aeabi_memclr4(piVar2,DAT_00070a1c); +LAB_0003076a: + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070a28); + if (piVar2 != (int *)0x0) { + pthread_setspecific(DAT_00070a18,piVar2); + return piVar2; + } + /* WARNING: Subroutine does not return */ + FUN_00030e78("Can\'t allocate thread-specific C++ runtime info block."); +} + + + +### FUNC FUN_0003080c @ 0003080c + +void FUN_0003080c(void) + +{ + pthread_getspecific(DAT_00070a18); + return; +} + + + +### FUNC FUN_00030824 @ 00030824 + +int FUN_00030824(int param_1) + +{ + int iVar1; + + iVar1 = memalign(8,param_1 + 0x90); + if (iVar1 != 0) { + __aeabi_memclr8(iVar1,0x90); + return iVar1 + 0x90; + } + /* WARNING: Subroutine does not return */ + FUN_00030e78("Not enough memory to allocate exception!"); +} + + + +### FUNC FUN_00030880 @ 00030880 + +void FUN_00030880(int param_1) + +{ + if (*(code **)(param_1 + -0x88) != (code *)0x0) { + (**(code **)(param_1 + -0x88))(); + } + free((void *)(param_1 + -0x90)); + return; +} + + + +### FUNC FUN_000308d8 @ 000308d8 + +undefined4 FUN_000308d8(undefined4 *param_1) + +{ + undefined4 *puVar1; + int iVar2; + undefined4 *puVar3; + uint uVar4; + bool bVar5; + + puVar1 = (undefined4 *)FUN_000306d8(); + iVar2 = FUN_00030ac0(*param_1,param_1[1]); + puVar3 = (undefined4 *)*puVar1; + if ((iVar2 == 0) && (bVar5 = puVar3 != (undefined4 *)0x0, puVar3 = (undefined4 *)0x0, bVar5)) { + /* WARNING: Subroutine does not return */ + FUN_00030e78("Can\'t handle non-C++ exception!"); + } + uVar4 = (int)param_1[-8] >> 0x1f; + param_1[-8] = (param_1[-8] + uVar4 ^ uVar4) + 1; + if (puVar3 != param_1 + -0xe) { + param_1[-9] = puVar3; + *puVar1 = param_1 + -0xe; + } + puVar1[1] = puVar1[1] + -1; + return param_1[-1]; +} + + + +### FUNC FUN_0003094c @ 0003094c + +void FUN_0003094c(void) + +{ + int *piVar1; + int iVar2; + int iVar3; + int iVar4; + + piVar1 = (int *)FUN_0003080c(); + iVar4 = *piVar1; + if (iVar4 != 0) { + iVar2 = FUN_00030ac0(*(undefined4 *)(iVar4 + 0x38),*(undefined4 *)(iVar4 + 0x3c)); + if (iVar2 != 0) { + iVar2 = *(int *)(iVar4 + 0x18); + if (iVar2 < 0) { + iVar3 = iVar2 + 1; + if (iVar3 == 0) { + *piVar1 = *(int *)(iVar4 + 0x14); + *(undefined4 *)(iVar4 + 0x18) = 0; + return; + } + } + else { + iVar3 = iVar2 + -1; + if (iVar3 == 0) { + *piVar1 = *(int *)(iVar4 + 0x14); + FUN_00030880(iVar4 + 0x90); + return; + } + if (iVar2 < 1) { + /* WARNING: Subroutine does not return */ + FUN_00030e78("Internal error during exception handling!"); + } + } + *(int *)(iVar4 + 0x18) = iVar3; + return; + } + *piVar1 = 0; + _Unwind_DeleteException(iVar4 + 0x38); + } + return; +} + + + +### FUNC FUN_000309e0 @ 000309e0 + +void FUN_000309e0(int param_1,undefined4 param_2,undefined4 param_3,undefined1 param_4) + +{ + int iVar1; + int unaff_r5; + code *UNRECOVERED_JUMPTABLE; + + *(undefined4 *)(param_1 + -0x8c) = param_2; + *(undefined4 *)(param_1 + -0x88) = param_3; + *(undefined4 *)(param_1 + -0x54) = 0x474e5543; + *(undefined4 *)(param_1 + -0x58) = 0x432b2b00; + *(undefined4 *)(param_1 + -0x50) = 0x30a09; + iVar1 = FUN_00030a16(); + *(undefined1 *)(iVar1 + unaff_r5) = param_4; + /* WARNING: Could not recover jumptable at 0x000309fe. Too many branches */ + /* WARNING: Treating indirect jump as call */ + (*UNRECOVERED_JUMPTABLE)(); + return; +} + + + +### FUNC FUN_00030a08 @ 00030a08 + +void FUN_00030a08(undefined4 param_1,int param_2) + +{ + FUN_00030880(param_2 + 0x58); + return; +} + + + +### FUNC FUN_00030a16 @ 00030a16 + +void FUN_00030a16(int param_1) + +{ + int iVar1; + undefined4 uVar2; + + iVar1 = FUN_000306d8(); + uVar2 = FUN_00031810(); + *(undefined4 *)(param_1 + 0xc) = uVar2; + uVar2 = FUN_000317dc(); + *(undefined4 *)(param_1 + 0x10) = uVar2; + *(int *)(iVar1 + 4) = *(int *)(iVar1 + 4) + 1; + ___Unwind_RaiseException(param_1 + 0x38); + /* WARNING: Subroutine does not return */ + FUN_00030efc(param_1 + 0x38); +} + + + +### FUNC FUN_00030a44 @ 00030a44 + +void FUN_00030a44(void) + +{ + int *piVar1; + int iVar2; + int *extraout_r1; + undefined1 uVar3; + uint uVar4; + int unaff_r5; + code *UNRECOVERED_JUMPTABLE; + + piVar1 = (int *)FUN_000306d8(); + iVar2 = *piVar1; + if (iVar2 == 0) { + /* WARNING: Subroutine does not return */ + FUN_00030e78("Attempting to rethrow an exception that doesn\'t exist!"); + } + uVar4 = *(uint *)(iVar2 + 0x38) ^ 0x432b2b00 | *(uint *)(iVar2 + 0x3c) ^ 0x474e5543; + if (uVar4 == 0) { + *(int *)(iVar2 + 0x18) = -*(int *)(iVar2 + 0x18); + FUN_00030a16(); + piVar1 = extraout_r1; + } + uVar3 = (undefined1)uVar4; + *piVar1 = 0; + iVar2 = FUN_00030a16(); + *(undefined1 *)(iVar2 + unaff_r5) = uVar3; + /* WARNING: Could not recover jumptable at 0x00030a82. Too many branches */ + /* WARNING: Treating indirect jump as call */ + (*UNRECOVERED_JUMPTABLE)(); + return; +} + + + +### FUNC FUN_00030ac0 @ 00030ac0 + +bool FUN_00030ac0(int param_1,int param_2) + +{ + return param_1 == 0x432b2b00 && param_2 == 0x474e5543; +} + + + +### FUNC FUN_00030ae8 @ 00030ae8 + +undefined4 FUN_00030ae8(void) + +{ + int iVar1; + undefined4 uVar2; + + iVar1 = FUN_000306d8(); + uVar2 = 0; + if ((iVar1 != 0) && (uVar2 = 1, *(int *)(iVar1 + 4) != 0)) { + uVar2 = 0; + } + return uVar2; +} + + + +### FUNC FUN_00030b06 @ 00030b06 + +void FUN_00030b06(int param_1) + +{ + int iVar1; + + if ((param_1 != 0) && (iVar1 = FUN_00056e98(param_1 + -0x90,1), iVar1 == 1)) { + FUN_00030880(param_1); + } + return; +} + + + +### FUNC FUN_00030b26 @ 00030b26 + +void FUN_00030b26(int param_1) + +{ + if (param_1 != 0) { + FUN_00056e60(param_1 + -0x90,1); + } + return; +} + + + +### FUNC FUN_00030b40 @ 00030b40 + +void FUN_00030b40(undefined4 *param_1) + +{ + if (param_1 != (undefined4 *)0x0) { + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070a28); + *param_1 = DAT_00070a30; + DAT_00070a30 = param_1; + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070a28); + } + return; +} + + + +### FUNC operator.delete @ 00030b70 + +/* operator delete(void*) */ + +void operator_delete(void *param_1) + +{ + if (param_1 != (void *)0x0) { + free(param_1); + } + return; +} + + + +### FUNC operator.delete[] @ 00030b7e + +/* operator delete[](void*) */ + +void operator_delete__(void *param_1) + +{ + operator_delete(param_1); + return; +} + + + +### FUNC FUN_00030b88 @ 00030b88 + +void FUN_00030b88(void *param_1) + +{ + if (param_1 != (void *)0x0) { + free(param_1); + } + return; +} + + + +### FUNC FUN_00030b96 @ 00030b96 + +void FUN_00030b96(void) + +{ + FUN_00030b88(); + return; +} + + + +### FUNC FUN_00030ba0 @ 00030ba0 + +int FUN_00030ba0(int *param_1,undefined4 param_2,undefined4 param_3,int param_4) + +{ + int iVar1; + int iVar2; + int *piVar3; + undefined4 uVar4; + undefined4 uVar5; + int iVar6; + int *local_2c; + undefined4 local_28; + undefined4 local_24; + int local_20; + undefined4 local_1c; + int local_18; + + iVar1 = (int)param_1 + *(int *)(*param_1 + -8); + uVar4 = *(undefined4 *)(*(int *)((int)param_1 + *(int *)(*param_1 + -8)) + -4); + iVar2 = FUN_00030c3c(iVar1,uVar4,0); + if (iVar2 == 0) { + return 0; + } + if (param_4 != -2) { + if ((-1 < param_4) && (iVar2 != -1)) { + return (int)param_1 - param_4; + } + local_1c = 0; + local_18 = 0; + iVar6 = iVar1; + uVar5 = uVar4; + if (iVar2 != -1) { + iVar6 = iVar2; + uVar5 = param_3; + } + local_2c = param_1; + local_28 = param_2; + local_24 = param_3; + local_20 = param_4; + FUN_00030d20(iVar6,uVar5,&local_2c); + if (1 < local_18 + 1U) { + return local_18; + } + } + iVar6 = 0; + if ((iVar2 != -1) && + (piVar3 = (int *)FUN_00030c3c(iVar1,uVar4,param_1,param_2), iVar6 = iVar2, piVar3 != param_1)) + { + iVar6 = 0; + } + return iVar6; +} + + + +### FUNC FUN_00030c3c @ 00030c3c + +int * FUN_00030c3c(int *param_1,int *param_2,int *param_3,undefined4 param_4) + +{ + int iVar1; + int iVar2; + int *piVar3; + int *piVar4; + uint uVar5; + int *piVar6; + uint uVar7; + + while( true ) { + iVar1 = FUN_0003186c(param_2,param_4); + if (iVar1 != 0) { + piVar4 = param_1; + if (param_1 != param_3) { + piVar4 = (int *)0x0; + } + if (param_3 == (int *)0x0) { + return param_1; + } + return piVar4; + } + iVar1 = (**(code **)(*param_2 + 0xc))(param_2); + if (iVar1 != 1) break; + param_2 = (int *)param_2[2]; + } + if (iVar1 != 0) { + if (iVar1 == 2) { + if (param_2[3] == 0) { + return (int *)0x0; + } + iVar1 = *param_1; + uVar7 = 0; + piVar4 = (int *)0x0; + do { + uVar5 = param_2[uVar7 * 2 + 5]; + piVar6 = piVar4; + if ((uVar5 & 2) != 0) { + iVar2 = (int)uVar5 >> 8; + if ((uVar5 & 1) != 0) { + iVar2 = *(int *)(iVar1 + iVar2); + } + piVar3 = (int *)FUN_00030c3c((int)param_1 + iVar2,param_2[uVar7 * 2 + 4],param_3,param_4); + if (piVar3 != (int *)0x0) { + if (piVar3 == (int *)0xffffffff) { + return (int *)0xffffffff; + } + piVar6 = piVar3; + if ((piVar4 != (int *)0x0) && (piVar6 = piVar4, piVar4 != piVar3)) { + return (int *)0xffffffff; + } + } + } + uVar7 = uVar7 + 1; + piVar4 = piVar6; + if ((uint)param_2[3] <= uVar7) { + return piVar6; + } + } while( true ); + } + __assert2("/usr/local/google/buildbot/src/android/ndk-release-r16/out/stlport/ndk/sources/cxx-stl/gabi++/src/dynamic_cast.cc" + ,0xad, + "const void *(anonymous namespace)::walk_object(const void *, const abi::__class_type_info *, const void *, const abi::__class_type_info *)" + ,&DAT_00030d1c); + } + return (int *)0x0; +} + + + +### FUNC FUN_00030d20 @ 00030d20 + +void FUN_00030d20(int *param_1,int *param_2,int *param_3) + +{ + int iVar1; + int iVar2; + uint uVar3; + int iVar4; + uint uVar5; + uint uVar6; + + iVar1 = param_3[4]; + iVar2 = FUN_0003186c(param_2,param_3[2]); + if (iVar2 == 1) { + param_3[4] = (int)param_1; + } + if ((((int *)*param_3 == param_1) && (param_3[4] != 0)) && + (iVar2 = FUN_0003186c(param_2,param_3[1]), iVar2 == 1)) { + if (param_3[5] == 0) { + param_3[5] = param_3[4]; + } + else if (param_3[5] != param_3[4]) { + param_3[5] = -1; + } + } + else { + iVar2 = (**(code **)(*param_2 + 0xc))(param_2); + if (iVar2 != 0) { + if (iVar2 == 2) { + uVar3 = param_2[3]; + if (uVar3 != 0) { + iVar2 = *param_1; + uVar6 = 0; + do { + uVar5 = param_2[uVar6 * 2 + 5]; + if ((uVar5 & 2) != 0) { + iVar4 = (int)uVar5 >> 8; + if ((uVar5 & 1) != 0) { + iVar4 = *(int *)(iVar2 + iVar4); + } + FUN_00030d20((int)param_1 + iVar4,param_2[uVar6 * 2 + 4],param_3); + if (param_3[5] == -1) break; + uVar3 = param_2[3]; + } + uVar6 = uVar6 + 1; + } while (uVar6 < uVar3); + } + } + else if (iVar2 == 1) { + FUN_00030d20(param_1,param_2[2],param_3); + } + else { + __assert2("/usr/local/google/buildbot/src/android/ndk-release-r16/out/stlport/ndk/sources/cxx-stl/gabi++/src/dynamic_cast.cc" + ,0x105, + "void (anonymous namespace)::base_to_derived_cast(const void *, const abi::__class_type_info *, (anonymous namespace)::cast_context *)" + ,&DAT_00030dfc); + } + } + } + param_3[4] = iVar1; + return; +} + + + +### FUNC FUN_00030e00 @ 00030e00 + +void FUN_00030e00(undefined4 *param_1) + +{ + *param_1 = &PTR_FUN_00030e10_1_00068d34; + return; +} + + + +### FUNC FUN_00030e10 @ 00030e10 + +void FUN_00030e10(void) + +{ + return; +} + + + +### FUNC FUN_00030e12 @ 00030e12 + +void FUN_00030e12(void *param_1) + +{ + operator_delete(param_1); + return; +} + + + +### FUNC FUN_00030e64 @ 00030e64 + +bool FUN_00030e64(void) + +{ + int iVar1; + + iVar1 = FUN_000306d8(); + return *(int *)(iVar1 + 4) != 0; +} + + + +### FUNC FUN_00030e78 @ 00030e78 + +void FUN_00030e78(undefined4 param_1) + +{ + int iVar1; + code *pcVar2; + + fprintf((FILE *)isupper,"PANIC:GAbi++:%s\n",param_1); + iVar1 = dlopen("liblog.so",0); + if (iVar1 != 0) { + pcVar2 = (code *)dlsym(iVar1,"__android_log_print"); + if (pcVar2 != (code *)0x0) { + (*pcVar2)(7,"GAbi++",param_1); + } + dlclose(iVar1); + } + /* WARNING: Subroutine does not return */ + FUN_0003178c(); +} + + + +### FUNC FUN_00030efc @ 00030efc + +void FUN_00030efc(void) + +{ + FUN_000308d8(); + /* WARNING: Subroutine does not return */ + FUN_0003178c(); +} + + + +### FUNC FUN_00030f08 @ 00030f08 + +void FUN_00030f08(uint *param_1,uint param_2,int param_3,int param_4,undefined4 param_5) + +{ + char cVar1; + uint uVar2; + int iVar3; + int iVar4; + uint uVar5; + int iVar6; + int iVar7; + int *piVar8; + char *pcVar9; + char *pcVar10; + uint uVar11; + int *piVar12; + char *local_3c; + char *local_24; + char *local_20; + char *local_1c; + char *local_18; + + uVar2 = 3; + *param_1 = 0; + param_1[1] = 0; + param_1[2] = 0; + param_1[3] = 0; + param_1[4] = 0; + param_1[5] = 0; + param_1[6] = 3; + uVar11 = param_2 & 1; + if (uVar11 == 0) { + if ((int)(param_2 << 0x1e) < 0) { + if ((param_2 & 0xc) != 0xc) goto LAB_00030f52; + uVar2 = 2; + } + param_1[6] = uVar2; + return; + } + if ((param_2 << 0x1c) >> 0x1d != 0) { + param_1[6] = 3; + return; + } +LAB_00030f52: + local_1c = (char *)_Unwind_GetLanguageSpecificData(param_5); + if (local_1c == (char *)0x0) { + param_1[6] = 8; + return; + } + param_1[3] = (uint)local_1c; + local_3c = (char *)0x0; + _Unwind_VRS_Get(param_5,0,0xf,0,&local_18); + pcVar10 = local_18; + iVar3 = _Unwind_GetRegionStart(param_5); + cVar1 = *local_1c; + local_1c = local_1c + 1; + iVar4 = FUN_0004e23c(&local_1c,cVar1); + pcVar9 = local_1c + 1; + uVar2 = (((uint)pcVar10 & 0xfffffffe) - 1) - iVar3; + if (iVar4 != 0) { + iVar3 = iVar4; + } + cVar1 = *local_1c; + local_1c = pcVar9; + if (cVar1 != -1) { + iVar4 = FUN_0004e1d4(&local_1c); + local_3c = local_1c + iVar4; + } + cVar1 = *local_1c; + local_1c = local_1c + 1; + iVar4 = FUN_0004e1d4(&local_1c); + local_20 = local_1c; + pcVar10 = local_1c + iVar4; + if (0 < iVar4) { + do { + uVar5 = FUN_0004e23c(&local_20,cVar1); + iVar4 = FUN_0004e23c(&local_20,cVar1); + iVar6 = FUN_0004e23c(&local_20,cVar1); + iVar7 = FUN_0004e1d4(&local_20); + if ((uVar5 <= uVar2) && (uVar2 < iVar4 + uVar5)) { + if (iVar6 == 0) { + param_1[6] = 8; + return; + } + uVar2 = iVar6 + iVar3; + if (iVar7 == 0) { + uVar11 = 6; + if ((param_2 & 6) == 2) { + *param_1 = 0; + param_1[1] = 0; + param_1[4] = uVar2; + } + else { + uVar11 = 8; + } + param_1[6] = uVar11; + return; + } + local_24 = pcVar10 + iVar7 + -1; + pcVar10 = (char *)(param_4 + 0x58); + goto LAB_000310bc; + } + } while ((uVar5 <= uVar2) && (local_20 < pcVar10)); + } +LAB_000311de: + /* WARNING: Subroutine does not return */ + FUN_00030efc(param_4); +LAB_000310bc: + pcVar9 = local_24; + uVar5 = FUN_0004e1f8(&local_24); + if ((int)uVar5 < 1) { + if ((int)uVar5 < 0) { + if (param_3 != 1) goto joined_r0x00031094; + iVar3 = *(int *)(param_4 + -0x34); + if ((iVar3 == 0) || (local_3c == (char *)0x0)) goto LAB_000311de; + piVar12 = (int *)(local_3c + (uVar5 ^ 0xffffffff) * 4); + do { + if (*piVar12 == 0) { + if (uVar11 != 0) goto LAB_0003119e; + goto joined_r0x0003112a; + } + piVar8 = *(int **)(*piVar12 + (int)piVar12); + local_18 = pcVar10; + iVar4 = (**(code **)(*piVar8 + 8))(piVar8,iVar3,&local_18); + piVar12 = piVar12 + 1; + } while (iVar4 == 0); + } + else if ((param_2 & 6) == 2) goto LAB_0003119e; + } + else { + if (local_3c == (char *)0x0) goto LAB_000311de; + iVar3 = *(int *)(local_3c + uVar5 * -4); + if ((iVar3 == 0) || + (piVar12 = *(int **)(iVar3 + (int)(local_3c + uVar5 * -4)), piVar12 == (int *)0x0)) { +joined_r0x00031094: + if ((param_2 & 4) != 0 || uVar11 != 0) { +LAB_0003119e: + param_1[4] = uVar2; + param_1[5] = (uint)pcVar10; + param_1[6] = 6; + *param_1 = uVar5; + param_1[1] = (int)uVar5 >> 0x1f; + param_1[2] = (uint)pcVar9; + return; + } +joined_r0x0003112a: + if ((param_2 & 8) == 0) goto LAB_000311de; + } + else if (param_3 == 1) { + iVar3 = *(int *)(param_4 + -0x34); + local_18 = pcVar10; + if (iVar3 == 0) goto LAB_000311de; + iVar4 = FUN_00030ba0(iVar3,&PTR_PTR_FUN_00031728_1_00068d20,&PTR_PTR_FUN_00031728_1_00068dc4,0 + ); + if (iVar4 != 0) { + local_18 = *(char **)pcVar10; + } + iVar3 = (**(code **)(*piVar12 + 8))(piVar12,iVar3,&local_18); + if (iVar3 == 1) { + if (uVar11 != 0) { + *param_1 = uVar5; + param_1[1] = (int)uVar5 >> 0x1f; + param_1[2] = (uint)pcVar9; + param_1[4] = uVar2; + param_1[5] = (uint)local_18; + param_1[6] = 6; + return; + } + goto joined_r0x0003112a; + } + } + } + local_18 = local_24; + iVar3 = FUN_0004e1f8(&local_18); + if (iVar3 == 0) { + param_1[6] = 8; + return; + } + local_24 = local_24 + iVar3; + goto LAB_000310bc; +} + + + +### FUNC FUN_000311ec @ 000311ec + +undefined4 +FUN_000311ec(int param_1,undefined4 param_2,int param_3,undefined4 param_4,undefined4 param_5) + +{ + undefined4 uVar1; + int *piVar2; + int iVar3; + + if (param_3 != 0) { + piVar2 = (int *)(param_3 + param_1 * -4); + iVar3 = *piVar2; + uVar1 = 0; + if (iVar3 != 0) { + uVar1 = *(undefined4 *)(iVar3 + (int)piVar2); + } + return uVar1; + } + /* WARNING: Subroutine does not return */ + FUN_00030efc(param_5); +} + + + +### FUNC FUN_0003120a @ 0003120a + +undefined4 +FUN_0003120a(uint param_1,undefined4 param_2,int param_3,undefined4 param_4,undefined4 param_5, + undefined4 param_6,undefined4 param_7) + +{ + int *piVar1; + int iVar2; + int *piVar3; + undefined4 local_18; + + if (param_3 == 0) { + /* WARNING: Subroutine does not return */ + FUN_00030efc(param_7); + } + piVar3 = (int *)(param_3 + ~param_1 * 4); + do { + if (*piVar3 == 0) { + return 1; + } + piVar1 = *(int **)(*piVar3 + (int)piVar3); + local_18 = param_6; + iVar2 = (**(code **)(*piVar1 + 8))(piVar1,param_5,&local_18); + piVar3 = piVar3 + 1; + } while (iVar2 != 1); + return 0; +} + + + +### FUNC FUN_00031256 @ 00031256 + +void FUN_00031256(uint param_1,undefined4 param_2,uint *param_3) + +{ + uint uVar1; + uint local_18; + + local_18 = param_1; + _Unwind_VRS_Set(param_2,0,0,0,&local_18); + local_18 = *param_3; + _Unwind_VRS_Set(param_2,0,1,0,&local_18); + uVar1 = param_3[4]; + _Unwind_VRS_Get(param_2,0,0xf,0,&local_18); + local_18 = local_18 & 1 | uVar1; + _Unwind_VRS_Set(param_2,0,0xf,0,&local_18); + return; +} + + + +### FUNC FUN_000312cc @ 000312cc + +undefined4 FUN_000312cc(void) + +{ + int iVar1; + undefined4 uVar2; + + iVar1 = __gnu_unwind_frame(); + uVar2 = 8; + if (iVar1 != 0) { + uVar2 = 9; + } + return uVar2; +} + + + +### FUNC FUN_000312e2 @ 000312e2 + +void FUN_000312e2(int param_1,undefined4 param_2,undefined4 *param_3) + +{ + undefined4 local_14; + + _Unwind_VRS_Get(param_2,0,0xd,0,&local_14); + *(undefined4 *)(param_1 + 0x20) = local_14; + *(undefined4 *)(param_1 + 0x24) = param_3[5]; + *(undefined4 *)(param_1 + 0x28) = *param_3; + *(undefined4 *)(param_1 + 0x30) = param_3[4]; + return; +} + + + +### FUNC FUN_00031312 @ 00031312 + +void FUN_00031312(int param_1,undefined4 *param_2) + +{ + param_2[5] = *(undefined4 *)(param_1 + 0x24); + *param_2 = *(undefined4 *)(param_1 + 0x28); + param_2[1] = 0; + param_2[4] = *(undefined4 *)(param_1 + 0x30); + return; +} + + + +### FUNC FUN_00031322 @ 00031322 + +void FUN_00031322(void) + +{ + __cxa_begin_cleanup(); + return; +} + + + +### FUNC FUN_0003132c @ 0003132c + +void FUN_0003132c(int param_1,undefined4 param_2,int *param_3) + +{ + undefined1 *puVar1; + char *pcVar2; + int iVar3; + int iVar4; + int iVar5; + char *local_18; + + __cxa_begin_cleanup(); + puVar1 = (undefined1 *)_Unwind_GetLanguageSpecificData(param_2); + local_18 = puVar1 + 1; + FUN_0004e23c(&local_18,*puVar1); + _Unwind_GetRegionStart(param_2); + pcVar2 = (char *)0x0; + iVar5 = -1; + if (*local_18 != -1) { + local_18 = local_18 + 1; + iVar3 = FUN_0004e1d4(&local_18); + pcVar2 = local_18 + iVar3; + } + iVar3 = *param_3; + do { + iVar4 = iVar5 * 4; + iVar5 = iVar5 + 1; + } while (*(int *)(pcVar2 + iVar4 + iVar3 * -4) != 0); + *(int *)(param_1 + 0x28) = iVar5; + *(undefined4 *)(param_1 + 0x30) = 4; + *(char **)(param_1 + 0x34) = pcVar2 + iVar3 * -4 + -4; + return; +} + + + +### FUNC FUN_00031390 @ 00031390 + +void FUN_00031390(void) + +{ + undefined4 *puVar1; + + puVar1 = (undefined4 *)FUN_00030e00(); + *puVar1 = &PTR_FUN_000313a8_1_00068d70; + return; +} + + + +### FUNC FUN_000313a8 @ 000313a8 + +void FUN_000313a8(void) + +{ + FUN_00030e10(); + return; +} + + + +### FUNC FUN_000313b2 @ 000313b2 + +void FUN_000313b2(void) + +{ + void *pvVar1; + + pvVar1 = (void *)FUN_00030e10(); + operator_delete(pvVar1); + return; +} + + + +### FUNC operator.new @ 00031440 + +/* operator new(unsigned int) */ + +void * operator_new(uint param_1) + +{ + void *pvVar1; + code *pcVar2; + undefined4 *puVar3; + + while( true ) { + pvVar1 = malloc(param_1); + if (pvVar1 != (void *)0x0) { + return pvVar1; + } + pcVar2 = (code *)FUN_00056e60(&DAT_00070a34,0); + if (pcVar2 == (code *)0x0) break; + (*pcVar2)(); + } + FUN_00030824(4); + puVar3 = (undefined4 *)FUN_00030e00(); + *puVar3 = &PTR_FUN_000313a8_1_00068d70; + /* WARNING: Subroutine does not return */ + FUN_000309e0(puVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); +} + + + +### FUNC FUN_000314a8 @ 000314a8 + +void * FUN_000314a8(uint param_1) + +{ + void *pvVar1; + + pvVar1 = operator_new(param_1); + return pvVar1; +} + + + +### FUNC operator.new[] @ 000314ca + +/* operator new[](unsigned int) */ + +void * operator_new__(uint param_1) + +{ + void *pvVar1; + + pvVar1 = operator_new(param_1); + return pvVar1; +} + + + +### FUNC __gxx_personality_v0 @ 000314e4 + +undefined4 __gxx_personality_v0(int param_1,int *param_2,int param_3) + +{ + undefined4 uVar1; + int iVar2; + int iVar3; + uint uVar4; + int *piVar5; + int *local_38; + int local_34; + int local_30; + int local_2c; + int local_28; + int local_24; + int local_20; + + iVar2 = *param_2; + iVar3 = param_2[1]; + uVar4 = 1; + if (param_1 != 0) { + if (param_1 == 2) goto LAB_00031616; + if (param_1 != 1) { + return 9; + } + piVar5 = (int *)param_2[8]; + _Unwind_VRS_Get(param_3,0,0xd,0,&local_38); + uVar4 = 6; + if (piVar5 != local_38) { + uVar4 = 2; + } + } + local_38 = param_2; + _Unwind_VRS_Set(param_3,0,0xc,0,&local_38); + if (param_3 == 0) { + return 3; + } + if ((uVar4 & 1) == 0) { + if (-1 < (int)(uVar4 << 0x1e)) { + return 3; + } + if ((int)(uVar4 << 0x1d) < 0) { + if (iVar3 == 0x474e5543 && iVar2 == 0x432b2b00) { + local_38 = (int *)param_2[-5]; + local_30 = param_2[-4]; + local_2c = param_2[-3]; + local_28 = param_2[-2]; + local_24 = param_2[-1]; + local_34 = (int)local_38 >> 0x1f; + FUN_00031312(param_2,&local_38); + } + else { + FUN_00030f08(&local_38,uVar4,0,param_2,param_3); + if (local_20 != 6) { + /* WARNING: Subroutine does not return */ + FUN_00030efc(param_2); + } + } + FUN_00031256(param_2,param_3,&local_38); + FUN_0003132c(param_2,param_3,&local_38); + return 7; + } + FUN_00030f08(&local_38,uVar4,iVar3 == 0x474e5543 && iVar2 == 0x432b2b00,param_2,param_3); + if (local_20 == 6) { + FUN_00031256(param_2,param_3,&local_38); + FUN_00031322(param_2); + return 7; + } + } + else { + FUN_00030f08(&local_38,uVar4,iVar3 == 0x474e5543 && iVar2 == 0x432b2b00,param_2,param_3); + if (local_20 == 6) { + if (iVar3 != 0x474e5543 || iVar2 != 0x432b2b00) { + return 6; + } + param_2[-5] = (int)local_38; + param_2[-4] = local_30; + param_2[-3] = local_2c; + param_2[-2] = local_28; + param_2[-1] = local_24; + FUN_000312e2(param_2,param_3,&local_38); + return 6; + } + } +LAB_00031616: + uVar1 = FUN_000312cc(param_2,param_3); + return uVar1; +} + + + +### FUNC FUN_000316a0 @ 000316a0 + +void FUN_000316a0(void) + +{ + FUN_0004e480(); + return; +} + + + +### FUNC FUN_000316aa @ 000316aa + +void FUN_000316aa(void *param_1) + +{ + FUN_0004e480(); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_00031728 @ 00031728 + +void FUN_00031728(void) + +{ + FUN_000304ac(); + return; +} + + + +### FUNC FUN_00031732 @ 00031732 + +void FUN_00031732(void *param_1) + +{ + FUN_000304ac(); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_00031784 @ 00031784 + +void FUN_00031784(void) + +{ + /* WARNING: Subroutine does not return */ + FUN_0003178c(); +} + + + +### FUNC FUN_0003178c @ 0003178c + +void FUN_0003178c(void) + +{ + FUN_00056e60(&DAT_0006b89c,0); + FUN_000317b8(); + DAT_deadcab1 = 0; + /* WARNING: Subroutine does not return */ + abort(); +} + + + +### FUNC FUN_000317a4 @ 000317a4 + +void FUN_000317a4(void) + +{ + DAT_deadcab1 = 0; + /* WARNING: Subroutine does not return */ + abort(); +} + + + +### FUNC FUN_000317b8 @ 000317b8 + +/* WARNING: Control flow encountered bad instruction data */ + +void FUN_000317b8(code *param_1) + +{ + if (param_1 == (code *)0x0) { + param_1 = FUN_000317a4; + } + (*param_1)(); + FUN_000317a4(); + FUN_000308d8(); + FUN_0003094c(); + FUN_000317a4(); + /* WARNING: Bad instruction - Truncating control flow here */ + halt_baddata(); +} + + + +### FUNC FUN_000317dc @ 000317dc + +void FUN_000317dc(void) + +{ + FUN_00056e60(&DAT_0006b89c,0); + return; +} + + + +### FUNC FUN_000317f0 @ 000317f0 + +void FUN_000317f0(int param_1) + +{ + if (param_1 == 0) { + param_1 = 0x317a5; + } + FUN_00057c50(&DAT_0006b89c,param_1); + return; +} + + + +### FUNC FUN_00031810 @ 00031810 + +void FUN_00031810(void) + +{ + FUN_00056e60(&DAT_0006b8a0,0); + return; +} + + + +### FUNC FUN_00031824 @ 00031824 + +void FUN_00031824(int param_1) + +{ + if (param_1 == 0) { + param_1 = 0x317a5; + } + FUN_00057c50(&DAT_0006b8a0,param_1); + return; +} + + + +### FUNC FUN_00031844 @ 00031844 + +void FUN_00031844(void) + +{ + code *pcVar1; + + pcVar1 = (code *)FUN_00056e60(&DAT_0006b8a0,0); + if (pcVar1 != (code *)0x0) { + (*pcVar1)(); + } + /* WARNING: Subroutine does not return */ + FUN_0003178c(); +} + + + +### FUNC FUN_00031860 @ 00031860 + +void FUN_00031860(void) + +{ + return; +} + + + +### FUNC FUN_00031862 @ 00031862 + +void FUN_00031862(void *param_1) + +{ + operator_delete(param_1); + return; +} + + + +### FUNC FUN_0003186c @ 0003186c + +bool FUN_0003186c(int param_1,int param_2) + +{ + int iVar1; + + iVar1 = strcmp(*(char **)(param_1 + 4),*(char **)(param_2 + 4)); + return iVar1 == 0; +} + + + +### FUNC FUN_00031886 @ 00031886 + +bool FUN_00031886(int param_1,int param_2) + +{ + int iVar1; + + iVar1 = strcmp(*(char **)(param_1 + 4),*(char **)(param_2 + 4)); + return iVar1 != 0; +} + + + +### FUNC FUN_0003189e @ 0003189e + +uint FUN_0003189e(int param_1,int param_2) + +{ + uint uVar1; + + uVar1 = strcmp(*(char **)(param_1 + 4),*(char **)(param_2 + 4)); + return uVar1 >> 0x1f; +} + + + +### FUNC FUN_000318b0 @ 000318b0 + +void FUN_000318b0(void) + +{ + undefined4 *puVar1; + + puVar1 = (undefined4 *)FUN_00030e00(); + *puVar1 = &PTR_FUN_000318c8_1_00068e00; + return; +} + + + +### FUNC FUN_000318c8 @ 000318c8 + +void FUN_000318c8(void) + +{ + FUN_00030e10(); + return; +} + + + +### FUNC FUN_000318d2 @ 000318d2 + +void FUN_000318d2(void) + +{ + void *pvVar1; + + pvVar1 = (void *)FUN_00030e10(); + operator_delete(pvVar1); + return; +} + + + +### FUNC FUN_000318f4 @ 000318f4 + +void FUN_000318f4(void) + +{ + undefined4 *puVar1; + + puVar1 = (undefined4 *)FUN_00030e00(); + *puVar1 = &PTR_FUN_0003190c_1_00068e14; + return; +} + + + +### FUNC FUN_0003190c @ 0003190c + +void FUN_0003190c(void) + +{ + FUN_00030e10(); + return; +} + + + +### FUNC FUN_00031916 @ 00031916 + +void FUN_00031916(void) + +{ + void *pvVar1; + + pvVar1 = (void *)FUN_00030e10(); + operator_delete(pvVar1); + return; +} + + + +### FUNC FUN_00031938 @ 00031938 + +void FUN_00031938(void) + +{ + FUN_000304ac(); + return; +} + + + +### FUNC FUN_00031942 @ 00031942 + +void FUN_00031942(void *param_1) + +{ + FUN_000304ac(); + operator_delete(param_1); + return; +} + + + +### FUNC __stl_throw_runtime_error @ 00031b54 + +/* WARNING: Unknown calling convention -- yet parameter storage is locked */ +/* std::__stl_throw_runtime_error(char const*) */ + +void std::__stl_throw_runtime_error(char *param_1) + +{ + undefined4 *puVar1; + size_t sVar2; + size_t *__dest; + size_t *psVar3; + int *local_38; + undefined1 auStack_30 [4]; + undefined1 auStack_2c [20]; + char *local_18; + + puVar1 = (undefined4 *)FUN_00030824(0x108); + FUN_00031c38(auStack_2c,param_1,auStack_30); + FUN_00030e00(puVar1); + *puVar1 = &PTR____Named_exception_00068e80; + sVar2 = strlen(local_18); + sVar2 = sVar2 + 1; + if (sVar2 < 0x101) { + __dest = puVar1 + 1; + puVar1[0x41] = __dest; + } + else { + __dest = (size_t *)malloc(sVar2); + puVar1[0x41] = __dest; + psVar3 = puVar1 + 1; + if (__dest == (size_t *)0x0) { + puVar1[0x41] = psVar3; + __dest = psVar3; + sVar2 = 0x100; + } + else { + *psVar3 = sVar2; + } + } + local_38 = puVar1 + 0x41; + strncpy((char *)__dest,local_18,sVar2 - 1); + *(undefined1 *)(*local_38 + (sVar2 - 1)) = 0; + *puVar1 = &PTR____Named_exception_00068ec0; + /* WARNING: Subroutine does not return */ + FUN_000309e0(puVar1,&runtime_error::typeinfo,__Named_exception::~__Named_exception); +} + + + +### FUNC FUN_00031c38 @ 00031c38 + +undefined4 * FUN_00031c38(undefined4 *param_1,char *param_2) + +{ + size_t sVar1; + undefined4 *puVar2; + uint uVar3; + uint local_18; + + param_1[4] = param_1; + param_1[5] = param_1; + sVar1 = strlen(param_2); + uVar3 = sVar1 + 1; + if (uVar3 == 0) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + if (uVar3 < 0x11) { + puVar2 = param_1; + if (sVar1 == 0) goto LAB_00031c9c; + } + else { + local_18 = uVar3; + if (uVar3 < 0x81) { + puVar2 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18); + uVar3 = local_18; + } + else { + puVar2 = (undefined4 *)operator_new(uVar3); + } + param_1[4] = puVar2; + param_1[5] = puVar2; + *param_1 = (undefined1 *)((int)puVar2 + uVar3); + } + __aeabi_memcpy(puVar2,param_2); + puVar2 = (undefined4 *)((int)puVar2 + sVar1); +LAB_00031c9c: + param_1[4] = puVar2; + *(undefined1 *)puVar2 = 0; + return param_1; +} + + + +### FUNC __stl_throw_range_error @ 00031cec + +/* WARNING: Unknown calling convention -- yet parameter storage is locked */ +/* std::__stl_throw_range_error(char const*) */ + +void std::__stl_throw_range_error(char *param_1) + +{ + undefined4 *puVar1; + size_t sVar2; + size_t *__dest; + size_t *psVar3; + int *local_38; + undefined1 auStack_30 [4]; + undefined1 auStack_2c [20]; + char *local_18; + + puVar1 = (undefined4 *)FUN_00030824(0x108); + FUN_00031c38(auStack_2c,param_1,auStack_30); + FUN_00030e00(puVar1); + *puVar1 = &PTR____Named_exception_00068e80; + sVar2 = strlen(local_18); + sVar2 = sVar2 + 1; + if (sVar2 < 0x101) { + __dest = puVar1 + 1; + puVar1[0x41] = __dest; + } + else { + __dest = (size_t *)malloc(sVar2); + puVar1[0x41] = __dest; + psVar3 = puVar1 + 1; + if (__dest == (size_t *)0x0) { + puVar1[0x41] = psVar3; + __dest = psVar3; + sVar2 = 0x100; + } + else { + *psVar3 = sVar2; + } + } + local_38 = puVar1 + 0x41; + strncpy((char *)__dest,local_18,sVar2 - 1); + *(undefined1 *)(*local_38 + (sVar2 - 1)) = 0; + *puVar1 = &PTR____Named_exception_00068f60; + /* WARNING: Subroutine does not return */ + FUN_000309e0(puVar1,&range_error::typeinfo,__Named_exception::~__Named_exception); +} + + + +### FUNC __stl_throw_out_of_range @ 00031dd0 + +/* WARNING: Unknown calling convention -- yet parameter storage is locked */ +/* std::__stl_throw_out_of_range(char const*) */ + +void std::__stl_throw_out_of_range(char *param_1) + +{ + undefined4 *puVar1; + size_t sVar2; + size_t *__dest; + size_t *psVar3; + int *local_38; + undefined1 auStack_30 [4]; + undefined1 auStack_2c [20]; + char *local_18; + + puVar1 = (undefined4 *)FUN_00030824(0x108); + FUN_00031c38(auStack_2c,param_1,auStack_30); + FUN_00030e00(puVar1); + *puVar1 = &PTR____Named_exception_00068e80; + sVar2 = strlen(local_18); + sVar2 = sVar2 + 1; + if (sVar2 < 0x101) { + __dest = puVar1 + 1; + puVar1[0x41] = __dest; + } + else { + __dest = (size_t *)malloc(sVar2); + puVar1[0x41] = __dest; + psVar3 = puVar1 + 1; + if (__dest == (size_t *)0x0) { + puVar1[0x41] = psVar3; + __dest = psVar3; + sVar2 = 0x100; + } + else { + *psVar3 = sVar2; + } + } + local_38 = puVar1 + 0x41; + strncpy((char *)__dest,local_18,sVar2 - 1); + *(undefined1 *)(*local_38 + (sVar2 - 1)) = 0; + *puVar1 = &PTR____Named_exception_00068f40; + /* WARNING: Subroutine does not return */ + FUN_000309e0(puVar1,&out_of_range::typeinfo,__Named_exception::~__Named_exception); +} + + + +### FUNC __stl_throw_length_error @ 00031eb4 + +/* WARNING: Unknown calling convention -- yet parameter storage is locked */ +/* std::__stl_throw_length_error(char const*) */ + +void std::__stl_throw_length_error(char *param_1) + +{ + undefined4 *puVar1; + size_t sVar2; + size_t *__dest; + size_t *psVar3; + int *local_38; + undefined1 auStack_30 [4]; + undefined1 auStack_2c [20]; + char *local_18; + + puVar1 = (undefined4 *)FUN_00030824(0x108); + FUN_00031c38(auStack_2c,param_1,auStack_30); + FUN_00030e00(puVar1); + *puVar1 = &PTR____Named_exception_00068e80; + sVar2 = strlen(local_18); + sVar2 = sVar2 + 1; + if (sVar2 < 0x101) { + __dest = puVar1 + 1; + puVar1[0x41] = __dest; + } + else { + __dest = (size_t *)malloc(sVar2); + puVar1[0x41] = __dest; + psVar3 = puVar1 + 1; + if (__dest == (size_t *)0x0) { + puVar1[0x41] = psVar3; + __dest = psVar3; + sVar2 = 0x100; + } + else { + *psVar3 = sVar2; + } + } + local_38 = puVar1 + 0x41; + strncpy((char *)__dest,local_18,sVar2 - 1); + *(undefined1 *)(*local_38 + (sVar2 - 1)) = 0; + *puVar1 = &PTR____Named_exception_00068f20; + /* WARNING: Subroutine does not return */ + FUN_000309e0(puVar1,&length_error::typeinfo,__Named_exception::~__Named_exception); +} + + + +### FUNC __stl_throw_invalid_argument @ 00031f98 + +/* WARNING: Unknown calling convention -- yet parameter storage is locked */ +/* std::__stl_throw_invalid_argument(char const*) */ + +void std::__stl_throw_invalid_argument(char *param_1) + +{ + undefined4 *puVar1; + size_t sVar2; + size_t *__dest; + size_t *psVar3; + int *local_38; + undefined1 auStack_30 [4]; + undefined1 auStack_2c [20]; + char *local_18; + + puVar1 = (undefined4 *)FUN_00030824(0x108); + FUN_00031c38(auStack_2c,param_1,auStack_30); + FUN_00030e00(puVar1); + *puVar1 = &PTR____Named_exception_00068e80; + sVar2 = strlen(local_18); + sVar2 = sVar2 + 1; + if (sVar2 < 0x101) { + __dest = puVar1 + 1; + puVar1[0x41] = __dest; + } + else { + __dest = (size_t *)malloc(sVar2); + puVar1[0x41] = __dest; + psVar3 = puVar1 + 1; + if (__dest == (size_t *)0x0) { + puVar1[0x41] = psVar3; + __dest = psVar3; + sVar2 = 0x100; + } + else { + *psVar3 = sVar2; + } + } + local_38 = puVar1 + 0x41; + strncpy((char *)__dest,local_18,sVar2 - 1); + *(undefined1 *)(*local_38 + (sVar2 - 1)) = 0; + *puVar1 = &PTR____Named_exception_00068f00; + /* WARNING: Subroutine does not return */ + FUN_000309e0(puVar1,&invalid_argument::typeinfo,__Named_exception::~__Named_exception); +} + + + +### FUNC __stl_throw_overflow_error @ 0003207c + +/* WARNING: Unknown calling convention -- yet parameter storage is locked */ +/* std::__stl_throw_overflow_error(char const*) */ + +void std::__stl_throw_overflow_error(char *param_1) + +{ + undefined4 *puVar1; + size_t sVar2; + size_t *__dest; + size_t *psVar3; + int *local_38; + undefined1 auStack_30 [4]; + undefined1 auStack_2c [20]; + char *local_18; + + puVar1 = (undefined4 *)FUN_00030824(0x108); + FUN_00031c38(auStack_2c,param_1,auStack_30); + FUN_00030e00(puVar1); + *puVar1 = &PTR____Named_exception_00068e80; + sVar2 = strlen(local_18); + sVar2 = sVar2 + 1; + if (sVar2 < 0x101) { + __dest = puVar1 + 1; + puVar1[0x41] = __dest; + } + else { + __dest = (size_t *)malloc(sVar2); + puVar1[0x41] = __dest; + psVar3 = puVar1 + 1; + if (__dest == (size_t *)0x0) { + puVar1[0x41] = psVar3; + __dest = psVar3; + sVar2 = 0x100; + } + else { + *psVar3 = sVar2; + } + } + local_38 = puVar1 + 0x41; + strncpy((char *)__dest,local_18,sVar2 - 1); + *(undefined1 *)(*local_38 + (sVar2 - 1)) = 0; + *puVar1 = &PTR____Named_exception_00068f80; + /* WARNING: Subroutine does not return */ + FUN_000309e0(puVar1,&overflow_error::typeinfo,__Named_exception::~__Named_exception); +} + + + +### FUNC __Named_exception @ 00032160 + +/* std::__Named_exception::__Named_exception(std::string const&) */ + +__Named_exception * __thiscall +std::__Named_exception::__Named_exception(__Named_exception *this,string *param_1) + +{ + char *__s; + size_t sVar1; + __Named_exception *p_Var2; + __Named_exception *__dest; + size_t sVar3; + + FUN_00030e00(); + *(undefined ***)this = &PTR____Named_exception_00068e80; + __s = *(char **)(param_1 + 0x14); + sVar1 = strlen(__s); + sVar3 = 0x100; + sVar1 = sVar1 + 1; + if (sVar1 < 0x101) { + *(__Named_exception **)(this + 0x104) = this + 4; + __dest = this + 4; + sVar3 = sVar1; + } + else { + p_Var2 = (__Named_exception *)malloc(sVar1); + *(__Named_exception **)(this + 0x104) = p_Var2; + __dest = this + 4; + if (p_Var2 == (__Named_exception *)0x0) { + *(__Named_exception **)(this + 0x104) = __dest; + } + else { + *(size_t *)__dest = sVar1; + __dest = p_Var2; + sVar3 = sVar1; + } + } + strncpy((char *)__dest,__s,sVar3 - 1); + *(undefined1 *)(*(int *)(this + 0x104) + (sVar3 - 1)) = 0; + return this; +} + + + +### FUNC __Named_exception @ 000321d8 + +/* std::__Named_exception::__Named_exception(std::__Named_exception const&) */ + +__Named_exception * __thiscall +std::__Named_exception::__Named_exception(__Named_exception *this,__Named_exception *param_1) + +{ + size_t sVar1; + __Named_exception *p_Var2; + __Named_exception *__dest; + + FUN_00030e00(); + *(undefined ***)this = &PTR____Named_exception_00068e80; + sVar1 = strlen(*(char **)(param_1 + 0x104)); + sVar1 = sVar1 + 1; + if (sVar1 < 0x101) { + __dest = this + 4; + *(__Named_exception **)(this + 0x104) = __dest; + } + else { + p_Var2 = (__Named_exception *)malloc(sVar1); + *(__Named_exception **)(this + 0x104) = p_Var2; + __dest = this + 4; + if (p_Var2 == (__Named_exception *)0x0) { + *(__Named_exception **)(this + 0x104) = __dest; + sVar1 = 0x100; + } + else { + *(size_t *)__dest = sVar1; + __dest = p_Var2; + } + } + strncpy((char *)__dest,*(char **)(param_1 + 0x104),sVar1 - 1); + *(undefined1 *)(*(int *)(this + 0x104) + (sVar1 - 1)) = 0; + return this; +} + + + +### FUNC operator= @ 0003224c + +/* std::__Named_exception::TEMPNAMEPLACEHOLDERVALUE(std::__Named_exception const&) */ + +__Named_exception * __thiscall +std::__Named_exception::operator=(__Named_exception *this,__Named_exception *param_1) + +{ + __Named_exception *p_Var1; + size_t sVar2; + __Named_exception *__dest; + uint uVar3; + __Named_exception *p_Var4; + + p_Var1 = this + 0x104; + sVar2 = strlen(*(char **)(param_1 + 0x104)); + __dest = *(__Named_exception **)(this + 0x104); + sVar2 = sVar2 + 1; + p_Var4 = this + 4; + uVar3 = 0x100; + if (__dest != p_Var4) { + uVar3 = *(uint *)p_Var4; + } + if (uVar3 < sVar2) { + if (__dest != p_Var4) { + free(__dest); + } + __dest = (__Named_exception *)malloc(sVar2); + *(__Named_exception **)p_Var1 = __dest; + if (__dest == (__Named_exception *)0x0) { + *(__Named_exception **)p_Var1 = p_Var4; + sVar2 = 0x100; + __dest = p_Var4; + } + else { + *(size_t *)p_Var4 = sVar2; + } + } + strncpy((char *)__dest,*(char **)(param_1 + 0x104),sVar2 - 1); + *(undefined1 *)(*(int *)p_Var1 + (sVar2 - 1)) = 0; + return this; +} + + + +### FUNC ~__Named_exception @ 000322c0 + +/* std::__Named_exception::~__Named_exception() */ + +void __thiscall std::__Named_exception::~__Named_exception(__Named_exception *this) + +{ + *(undefined ***)this = &PTR____Named_exception_00068e80; + if (*(__Named_exception **)(this + 0x104) != this + 4) { + free(*(__Named_exception **)(this + 0x104)); + } + FUN_00030e10(this); + return; +} + + + +### FUNC ~__Named_exception @ 000322ec + +/* std::__Named_exception::~__Named_exception() */ + +void __thiscall std::__Named_exception::~__Named_exception(__Named_exception *this) + +{ + void *pvVar1; + + *(undefined ***)this = &PTR____Named_exception_00068e80; + if (*(__Named_exception **)(this + 0x104) != this + 4) { + free(*(__Named_exception **)(this + 0x104)); + } + pvVar1 = (void *)FUN_00030e10(this); + operator_delete(pvVar1); + return; +} + + + +### FUNC what @ 0003231c + +/* std::__Named_exception::what() const */ + +undefined4 __thiscall std::__Named_exception::what(__Named_exception *this) + +{ + return *(undefined4 *)(this + 0x104); +} + + + +### FUNC ~logic_error @ 00032324 + +/* std::logic_error::~logic_error() */ + +void __thiscall std::logic_error::~logic_error(logic_error *this) + +{ + void *pvVar1; + + *(undefined ***)this = &PTR____Named_exception_00068e80; + if (*(logic_error **)(this + 0x104) != this + 4) { + free(*(logic_error **)(this + 0x104)); + } + pvVar1 = (void *)FUN_00030e10(this); + operator_delete(pvVar1); + return; +} + + + +### FUNC ~runtime_error @ 00032354 + +/* std::runtime_error::~runtime_error() */ + +void __thiscall std::runtime_error::~runtime_error(runtime_error *this) + +{ + void *pvVar1; + + *(undefined ***)this = &PTR____Named_exception_00068e80; + if (*(runtime_error **)(this + 0x104) != this + 4) { + free(*(runtime_error **)(this + 0x104)); + } + pvVar1 = (void *)FUN_00030e10(this); + operator_delete(pvVar1); + return; +} + + + +### FUNC ~domain_error @ 00032384 + +/* std::domain_error::~domain_error() */ + +void __thiscall std::domain_error::~domain_error(domain_error *this) + +{ + void *pvVar1; + + *(undefined ***)this = &PTR____Named_exception_00068e80; + if (*(domain_error **)(this + 0x104) != this + 4) { + free(*(domain_error **)(this + 0x104)); + } + pvVar1 = (void *)FUN_00030e10(this); + operator_delete(pvVar1); + return; +} + + + +### FUNC ~invalid_argument @ 000323b4 + +/* std::invalid_argument::~invalid_argument() */ + +void __thiscall std::invalid_argument::~invalid_argument(invalid_argument *this) + +{ + void *pvVar1; + + *(undefined ***)this = &PTR____Named_exception_00068e80; + if (*(invalid_argument **)(this + 0x104) != this + 4) { + free(*(invalid_argument **)(this + 0x104)); + } + pvVar1 = (void *)FUN_00030e10(this); + operator_delete(pvVar1); + return; +} + + + +### FUNC ~length_error @ 000323e4 + +/* std::length_error::~length_error() */ + +void __thiscall std::length_error::~length_error(length_error *this) + +{ + void *pvVar1; + + *(undefined ***)this = &PTR____Named_exception_00068e80; + if (*(length_error **)(this + 0x104) != this + 4) { + free(*(length_error **)(this + 0x104)); + } + pvVar1 = (void *)FUN_00030e10(this); + operator_delete(pvVar1); + return; +} + + + +### FUNC ~out_of_range @ 00032414 + +/* std::out_of_range::~out_of_range() */ + +void __thiscall std::out_of_range::~out_of_range(out_of_range *this) + +{ + void *pvVar1; + + *(undefined ***)this = &PTR____Named_exception_00068e80; + if (*(out_of_range **)(this + 0x104) != this + 4) { + free(*(out_of_range **)(this + 0x104)); + } + pvVar1 = (void *)FUN_00030e10(this); + operator_delete(pvVar1); + return; +} + + + +### FUNC ~range_error @ 00032444 + +/* std::range_error::~range_error() */ + +void __thiscall std::range_error::~range_error(range_error *this) + +{ + void *pvVar1; + + *(undefined ***)this = &PTR____Named_exception_00068e80; + if (*(range_error **)(this + 0x104) != this + 4) { + free(*(range_error **)(this + 0x104)); + } + pvVar1 = (void *)FUN_00030e10(this); + operator_delete(pvVar1); + return; +} + + + +### FUNC ~overflow_error @ 00032474 + +/* std::overflow_error::~overflow_error() */ + +void __thiscall std::overflow_error::~overflow_error(overflow_error *this) + +{ + void *pvVar1; + + *(undefined ***)this = &PTR____Named_exception_00068e80; + if (*(overflow_error **)(this + 0x104) != this + 4) { + free(*(overflow_error **)(this + 0x104)); + } + pvVar1 = (void *)FUN_00030e10(this); + operator_delete(pvVar1); + return; +} + + + +### FUNC ~underflow_error @ 000324a4 + +/* std::underflow_error::~underflow_error() */ + +void __thiscall std::underflow_error::~underflow_error(underflow_error *this) + +{ + void *pvVar1; + + *(undefined ***)this = &PTR____Named_exception_00068e80; + if (*(underflow_error **)(this + 0x104) != this + 4) { + free(*(underflow_error **)(this + 0x104)); + } + pvVar1 = (void *)FUN_00030e10(this); + operator_delete(pvVar1); + return; +} + + + +### FUNC failure @ 000324d4 + +/* std::ios_base::failure::failure(std::string const&) */ + +void __thiscall std::ios_base::failure::failure(failure *this,string *param_1) + +{ + undefined4 *puVar1; + + puVar1 = (undefined4 *)__Named_exception::__Named_exception((__Named_exception *)this,param_1); + *puVar1 = &PTR__failure_00068fc0; + return; +} + + + +### FUNC ~failure @ 000324ec + +/* std::ios_base::failure::~failure() */ + +void __thiscall std::ios_base::failure::~failure(failure *this) + +{ + __Named_exception::~__Named_exception((__Named_exception *)this); + return; +} + + + +### FUNC ~failure @ 000324f6 + +/* std::ios_base::failure::~failure() */ + +void __thiscall std::ios_base::failure::~failure(failure *this) + +{ + void *pvVar1; + + pvVar1 = (void *)__Named_exception::~__Named_exception((__Named_exception *)this); + operator_delete(pvVar1); + return; +} + + + +### FUNC imbue @ 00032504 + +/* std::ios_base::imbue(std::locale const&) */ + +void std::ios_base::imbue(locale *param_1) + +{ + int iVar1; + int in_r1; + locale *in_r2; + locale *this; + int iVar2; + + this = (locale *)(in_r1 + 0x20); + iVar1 = locale::operator!=(in_r2,this); + if (iVar1 == 1) { + locale::locale(param_1,this); + locale::operator=(this,in_r2); + iVar1 = *(int *)(in_r1 + 0x2c); + if (iVar1 != 0) { + iVar2 = 1 - iVar1; + iVar1 = iVar1 * -8 + 4; + do { + (**(code **)(*(int *)(in_r1 + 0x24) + iVar2 * -8)) + (1,in_r1,*(undefined4 *)(*(int *)(in_r1 + 0x24) - iVar1)); + iVar1 = iVar1 + 8; + iVar2 = iVar2 + 1; + } while (iVar2 != 1); + } + return; + } + iVar1 = *(int *)(in_r1 + 0x2c); + if (iVar1 != 0) { + iVar2 = 1 - iVar1; + iVar1 = iVar1 * -8 + 4; + do { + (**(code **)(*(int *)(in_r1 + 0x24) + iVar2 * -8)) + (1,in_r1,*(undefined4 *)(*(int *)(in_r1 + 0x24) - iVar1)); + iVar1 = iVar1 + 8; + iVar2 = iVar2 + 1; + } while (iVar2 != 1); + } + locale::locale(param_1,this); + return; +} + + + +### FUNC _M_invoke_callbacks @ 000325c6 + +/* std::ios_base::_M_invoke_callbacks(std::ios_base::event) */ + +void __thiscall std::ios_base::_M_invoke_callbacks(ios_base *this,undefined4 param_2) + +{ + int iVar1; + int iVar2; + + iVar1 = *(int *)(this + 0x2c); + if (iVar1 != 0) { + iVar2 = 1 - iVar1; + iVar1 = iVar1 * -8 + 4; + do { + (**(code **)(*(int *)(this + 0x24) + iVar2 * -8)) + (param_2,this,*(undefined4 *)(*(int *)(this + 0x24) - iVar1)); + iVar1 = iVar1 + 8; + iVar2 = iVar2 + 1; + } while (iVar2 != 1); + } + return; +} + + + +### FUNC xalloc @ 00032608 + +/* std::ios_base::xalloc() */ + +int std::ios_base::xalloc(void) + +{ + int iVar1; + + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070a3c); + iVar1 = DAT_00070a38; + DAT_00070a38 = DAT_00070a38 + 1; + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070a3c); + return iVar1; +} + + + +### FUNC iword @ 00032634 + +/* std::ios_base::iword(int) */ + +undefined * __thiscall std::ios_base::iword(ios_base *this,int param_1) + +{ + int iVar1; + uint uVar2; + uint uVar3; + uint uVar4; + void *__ptr; + + __ptr = *(void **)(this + 0x30); + uVar4 = *(uint *)(this + 0x34); + uVar2 = uVar4; + if ((int)uVar4 <= param_1) { + uVar2 = param_1 + 1U; + if (param_1 + 1U <= uVar4 << 1) { + uVar2 = uVar4 << 1; + } + __ptr = realloc(__ptr,uVar2 << 2); + if (__ptr == (void *)0x0) goto LAB_000326ac; + uVar3 = uVar2 - uVar4; + if (0 < (int)(uVar3 * 4)) { + iVar1 = 0x3fffffff; + if ((uVar3 | 0xc0000000) != 0xc0000000) { + iVar1 = 0x3ffffffe; + } + __aeabi_memclr4((void *)((int)__ptr + uVar4 * 4),(iVar1 + uVar3) * 4 + 8); + } + } + if (__ptr != (void *)0x0) { + *(void **)(this + 0x30) = __ptr; + *(uint *)(this + 0x34) = uVar2; + return (undefined *)((int)__ptr + param_1 * 4); + } +LAB_000326ac: + uVar2 = *(uint *)(this + 8); + *(uint *)(this + 8) = uVar2 | 1; + if ((*(uint *)(this + 0x14) & (uVar2 | 1)) != 0) { + /* WARNING: Subroutine does not return */ + _M_throw_failure(); + } + return &DAT_00070a40; +} + + + +### FUNC pword @ 000326d0 + +/* std::ios_base::pword(int) */ + +undefined * __thiscall std::ios_base::pword(ios_base *this,int param_1) + +{ + int iVar1; + uint uVar2; + uint uVar3; + uint uVar4; + void *__ptr; + + __ptr = *(void **)(this + 0x38); + uVar4 = *(uint *)(this + 0x3c); + uVar2 = uVar4; + if ((int)uVar4 <= param_1) { + uVar2 = param_1 + 1U; + if (param_1 + 1U <= uVar4 << 1) { + uVar2 = uVar4 << 1; + } + __ptr = realloc(__ptr,uVar2 << 2); + if (__ptr == (void *)0x0) goto LAB_00032748; + uVar3 = uVar2 - uVar4; + if (0 < (int)(uVar3 * 4)) { + iVar1 = 0x3fffffff; + if ((uVar3 | 0xc0000000) != 0xc0000000) { + iVar1 = 0x3ffffffe; + } + __aeabi_memclr4((void *)((int)__ptr + uVar4 * 4),(iVar1 + uVar3) * 4 + 8); + } + } + if (__ptr != (void *)0x0) { + *(void **)(this + 0x38) = __ptr; + *(uint *)(this + 0x3c) = uVar2; + return (undefined *)((int)__ptr + param_1 * 4); + } +LAB_00032748: + uVar2 = *(uint *)(this + 8); + *(uint *)(this + 8) = uVar2 | 1; + if ((*(uint *)(this + 0x14) & (uVar2 | 1)) != 0) { + /* WARNING: Subroutine does not return */ + _M_throw_failure(); + } + return &DAT_00070a44; +} + + + +### FUNC register_callback @ 0003276c + +/* std::ios_base::register_callback(void (*)(std::ios_base::event, std::ios_base&, int), int) */ + +void __thiscall +std::ios_base::register_callback + (ios_base *this,_func_void_event_ios_base_ptr_int *param_1,int param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + void *__ptr; + uint uVar4; + + __ptr = *(void **)(this + 0x24); + uVar4 = *(uint *)(this + 0x28); + uVar2 = uVar4; + if ((int)uVar4 <= *(int *)(this + 0x2c)) { + uVar2 = *(int *)(this + 0x2c) + 1; + if (uVar2 <= uVar4 << 1) { + uVar2 = uVar4 << 1; + } + __ptr = realloc(__ptr,uVar2 << 3); + if (__ptr == (void *)0x0) goto LAB_000327f6; + uVar3 = uVar2 - uVar4; + if (0 < (int)(uVar3 * 8)) { + iVar1 = 0x1fffffff; + if ((uVar3 | 0xe0000000) != 0xe0000000) { + iVar1 = 0x1ffffffe; + } + __aeabi_memclr4((void *)((int)__ptr + uVar4 * 8),(iVar1 + uVar3) * 8 + 0x10); + } + } + if (__ptr != (void *)0x0) { + *(uint *)(this + 0x28) = uVar2; + *(void **)(this + 0x24) = __ptr; + iVar1 = *(int *)(this + 0x2c); + *(int *)(this + 0x2c) = iVar1 + 1; + iVar1 = iVar1 * 8; + *(_func_void_event_ios_base_ptr_int **)((int)__ptr + iVar1) = param_1; + *(int *)((int)__ptr + iVar1 + 4) = param_2; + return; + } +LAB_000327f6: + uVar2 = *(uint *)(this + 8); + *(uint *)(this + 8) = uVar2 | 1; + if ((*(uint *)(this + 0x14) & (uVar2 | 1)) != 0) { + /* WARNING: Subroutine does not return */ + _M_throw_failure(); + } + return; +} + + + +### FUNC _M_throw_failure @ 00032810 + +/* std::ios_base::_M_throw_failure() */ + +void std::ios_base::_M_throw_failure(void) + +{ + __Named_exception *this; + undefined1 auStack_30 [4]; + string asStack_2c [24]; + + this = (__Named_exception *)FUN_00030824(0x108); + FUN_00031c38(asStack_2c,&LAB_00032890,auStack_30); + __Named_exception::__Named_exception(this,asStack_2c); + *(undefined ***)this = &PTR__failure_00068fc0; + /* WARNING: Subroutine does not return */ + FUN_000309e0(this,&failure::typeinfo,failure::~failure); +} + + + +### FUNC _M_copy_state @ 000328a8 + +/* std::ios_base::_M_copy_state(std::ios_base const&) */ + +void __thiscall std::ios_base::_M_copy_state(ios_base *this,ios_base *param_1) + +{ + int iVar1; + size_t sVar2; + void *pvVar3; + undefined4 uVar4; + uint uVar5; + int iVar6; + + *(undefined4 *)(this + 4) = *(undefined4 *)(param_1 + 4); + *(undefined4 *)(this + 0xc) = *(undefined4 *)(param_1 + 0xc); + *(undefined4 *)(this + 0x10) = *(undefined4 *)(param_1 + 0x10); + *(undefined4 *)(this + 0x18) = *(undefined4 *)(param_1 + 0x18); + *(undefined4 *)(this + 0x1c) = *(undefined4 *)(param_1 + 0x1c); + locale::operator=((locale *)(this + 0x20),(locale *)(param_1 + 0x20)); + iVar1 = *(int *)(param_1 + 0x24); + if (iVar1 != 0) { + iVar6 = *(int *)(param_1 + 0x2c); + sVar2 = iVar6 << 3; + pvVar3 = malloc(sVar2); + if ((iVar6 != 0) && (pvVar3 != (void *)0x0)) { + __aeabi_memcpy(pvVar3,iVar1,sVar2); + } + if (pvVar3 == (void *)0x0) { + uVar5 = *(uint *)(this + 8); + *(uint *)(this + 8) = uVar5 | 1; + if ((*(uint *)(this + 0x14) & (uVar5 | 1)) != 0) goto LAB_000329b4; + } + else { + free(*(void **)(this + 0x24)); + *(void **)(this + 0x24) = pvVar3; + uVar4 = *(undefined4 *)(param_1 + 0x2c); + *(undefined4 *)(this + 0x28) = uVar4; + *(undefined4 *)(this + 0x2c) = uVar4; + } + } + iVar1 = *(int *)(param_1 + 0x30); + if (iVar1 != 0) { + iVar6 = *(int *)(param_1 + 0x34); + sVar2 = iVar6 << 2; + pvVar3 = malloc(sVar2); + if ((iVar6 != 0) && (pvVar3 != (void *)0x0)) { + __aeabi_memcpy(pvVar3,iVar1,sVar2); + } + if (pvVar3 == (void *)0x0) { + uVar5 = *(uint *)(this + 8); + *(uint *)(this + 8) = uVar5 | 1; + if ((*(uint *)(this + 0x14) & (uVar5 | 1)) != 0) goto LAB_000329b4; + } + else { + free(*(void **)(this + 0x30)); + *(void **)(this + 0x30) = pvVar3; + *(undefined4 *)(this + 0x34) = *(undefined4 *)(param_1 + 0x34); + } + } + iVar1 = *(int *)(param_1 + 0x38); + if (iVar1 != 0) { + iVar6 = *(int *)(param_1 + 0x3c); + sVar2 = iVar6 << 2; + pvVar3 = malloc(sVar2); + if ((iVar6 != 0) && (pvVar3 != (void *)0x0)) { + __aeabi_memcpy(pvVar3,iVar1,sVar2); + } + if (pvVar3 != (void *)0x0) { + free(*(void **)(this + 0x38)); + *(void **)(this + 0x38) = pvVar3; + *(undefined4 *)(this + 0x3c) = *(undefined4 *)(param_1 + 0x3c); + return; + } + uVar5 = *(uint *)(this + 8); + *(uint *)(this + 8) = uVar5 | 1; + if ((*(uint *)(this + 0x14) & (uVar5 | 1)) != 0) { +LAB_000329b4: + /* WARNING: Subroutine does not return */ + _M_throw_failure(); + } + } + return; +} + + + +### FUNC ios_base @ 000329b8 + +/* std::ios_base::ios_base() */ + +ios_base * __thiscall std::ios_base::ios_base(ios_base *this) + +{ + *(undefined4 *)(this + 0x1c) = 0; + *(undefined4 *)(this + 0x18) = 0; + *(undefined4 *)(this + 0x14) = 0; + *(undefined4 *)(this + 0x10) = 0; + *(undefined4 *)(this + 0xc) = 0; + *(undefined4 *)(this + 8) = 0; + *(undefined4 *)(this + 4) = 0; + *(undefined ***)this = &PTR__ios_base_00068fe0; + locale::locale((locale *)(this + 0x20)); + *(undefined4 *)(this + 0x24) = 0; + *(undefined4 *)(this + 0x28) = 0; + *(undefined4 *)(this + 0x2c) = 0; + *(undefined4 *)(this + 0x30) = 0; + *(undefined4 *)(this + 0x34) = 0; + *(undefined4 *)(this + 0x38) = 0; + *(undefined4 *)(this + 0x3c) = 0; + return this; +} + + + +### FUNC ~ios_base @ 000329f8 + +/* std::ios_base::~ios_base() */ + +ios_base * __thiscall std::ios_base::~ios_base(ios_base *this) + +{ + int iVar1; + int iVar2; + + *(undefined ***)this = &PTR__ios_base_00068fe0; + iVar1 = *(int *)(this + 0x2c); + if (iVar1 != 0) { + iVar2 = 1 - iVar1; + iVar1 = iVar1 * -8 + 4; + do { + (**(code **)(*(int *)(this + 0x24) + iVar2 * -8)) + (0,this,*(undefined4 *)(*(int *)(this + 0x24) - iVar1)); + iVar1 = iVar1 + 8; + iVar2 = iVar2 + 1; + } while (iVar2 != 1); + } + free(*(void **)(this + 0x24)); + free(*(void **)(this + 0x30)); + free(*(void **)(this + 0x38)); + locale::~locale((locale *)(this + 0x20)); + return this; +} + + + +### FUNC ~ios_base @ 00032a78 + +/* std::ios_base::~ios_base() */ + +void __thiscall std::ios_base::~ios_base(ios_base *this) + +{ + ~ios_base(this); + operator_delete(this); + return; +} + + + +### FUNC Init @ 00032a98 + +/* std::ios_base::Init::Init() */ + +Init * __thiscall std::ios_base::Init::Init(Init *this) + +{ + int iVar1; + + iVar1 = _S_count; + _S_count = _S_count + 1; + if (iVar1 != 0) { + return this; + } + FUN_0004d7dc(); + _S_initialize(); + _Filebuf_base::_S_initialize(); + return this; +} + + + +### FUNC _S_initialize @ 00032ac8 + +/* std::ios_base::_S_initialize() */ + +void std::ios_base::_S_initialize(void) + +{ + undefined4 *puVar1; + undefined4 uVar2; + undefined4 uVar3; + undefined4 uVar4; + undefined4 uVar5; + undefined4 *local_20; + undefined4 *local_1c; + undefined4 *local_18; + + if (_S_is_synced == '\0') { + puVar1 = (undefined4 *)FUN_000333c0(&__sF,8); + } + else { + puVar1 = (undefined4 *)operator_new(0x24); + FUN_0004ec64(puVar1,&__sF); + *puVar1 = &DAT_00069e3c; + } + if (_S_is_synced == '\0') { + local_20 = (undefined4 *)FUN_000333c0(pthread_key_create,0x10); + local_1c = (undefined4 *)FUN_000333c0(isupper,0x10); + local_18 = (undefined4 *)FUN_000333c0(isupper,0x10); + } + else { + local_20 = (undefined4 *)operator_new(0x24); + FUN_0004ec64(local_20,pthread_key_create); + *local_20 = &DAT_00069e98; + local_1c = (undefined4 *)operator_new(0x24); + FUN_0004ec64(local_1c,isupper); + *local_1c = &DAT_00069e98; + local_18 = (undefined4 *)operator_new(0x24); + FUN_0004ec64(local_18,isupper); + *local_18 = &DAT_00069e98; + } + ios_base((ios_base *)(cin + 8)); + cin[0x4c] = 0; + cin._80_4_ = 0; + cin._84_4_ = 0; + cin._0_4_ = &DAT_00069134; + cin._4_4_ = 0; + cin._8_4_ = &PTR_LAB_0003549a_1_00069148; + FUN_000353f8(0x70a50,puVar1); + ios_base((ios_base *)(cout + 4)); + cout[0x48] = 0; + cout._76_4_ = 0; + cout._80_4_ = 0; + cout._0_4_ = &DAT_00069184; + cout._4_4_ = &PTR_LAB_000355ba_1_00069198; + FUN_000353f8(0x70aa4,local_20); + ios_base((ios_base *)(cerr + 4)); + cerr[0x48] = 0; + cerr._76_4_ = 0; + cerr._80_4_ = 0; + cerr._0_4_ = &DAT_00069184; + cerr._4_4_ = &PTR_LAB_000355ba_1_00069198; + FUN_000353f8(0x70afc,local_1c); + ios_base((ios_base *)(clog + 4)); + clog[0x48] = 0; + clog._76_4_ = 0; + clog._80_4_ = 0; + clog._0_4_ = &DAT_00069184; + clog._4_4_ = &PTR_LAB_000355ba_1_00069198; + FUN_000353f8(0x70b54,local_18); + *(undefined1 **)(cin + *(int *)(cin._0_4_ + -0xc) + 0x4c) = cout; + *(uint *)(cerr + *(int *)(cerr._0_4_ + -0xc) + 4) = + *(uint *)(cerr + *(int *)(cerr._0_4_ + -0xc) + 4) | 0x2000; + uVar2 = FUN_00033432(&__sF,8); + uVar3 = FUN_00033432(pthread_key_create,0x10); + uVar4 = FUN_00033432(isupper,0x10); + uVar5 = FUN_00033432(isupper,0x10); + ios_base((ios_base *)(wcin + 8)); + wcin._76_4_ = 0; + wcin._80_4_ = 0; + wcin._84_4_ = 0; + wcin._0_4_ = &DAT_000691c4; + wcin._4_4_ = 0; + wcin._8_4_ = &PTR_LAB_000356a2_1_000691d8; + FUN_000355fc(0x70bb0,uVar2); + ios_base((ios_base *)(wcout + 4)); + wcout._72_4_ = 0; + wcout._76_4_ = 0; + wcout._80_4_ = 0; + wcout._0_4_ = &DAT_00069214; + wcout._4_4_ = &PTR_LAB_000357c2_1_00069228; + FUN_000355fc(0x70c04,uVar3); + ios_base((ios_base *)(wcerr + 4)); + wcerr._72_4_ = 0; + wcerr._76_4_ = 0; + wcerr._80_4_ = 0; + wcerr._0_4_ = &DAT_00069214; + wcerr._4_4_ = &PTR_LAB_000357c2_1_00069228; + FUN_000355fc(0x70c5c,uVar4); + ios_base((ios_base *)(wclog + 4)); + wclog._72_4_ = 0; + wclog._76_4_ = 0; + wclog._80_4_ = 0; + wclog._0_4_ = &DAT_00069214; + wclog._4_4_ = &PTR_LAB_000357c2_1_00069228; + FUN_000355fc(0x70cb4,uVar5); + *(undefined1 **)(wcin + *(int *)(wcin._0_4_ + -0xc) + 0x4c) = wcout; + *(uint *)(wcerr + *(int *)(wcerr._0_4_ + -0xc) + 4) = + *(uint *)(wcerr + *(int *)(wcerr._0_4_ + -0xc) + 4) | 0x2000; + return; +} + + + +### FUNC ~Init @ 000330b4 + +/* std::ios_base::Init::~Init() */ + +Init * __thiscall std::ios_base::Init::~Init(Init *this) + +{ + _S_count = _S_count + -1; + if (_S_count != 0) { + return this; + } + _S_uninitialize(); + FUN_0004d8ac(); + return this; +} + + + +### FUNC _S_uninitialize @ 000330dc + +/* std::ios_base::_S_uninitialize() */ + +void std::ios_base::_S_uninitialize(void) + +{ + int *piVar1; + int iVar2; + + iVar2 = *(int *)(cin._0_4_ + -0xc); + *(undefined4 *)(cin + iVar2 + 0x14) = 0; + *(uint *)(cin + iVar2 + 8) = + *(uint *)(cin + iVar2 + 8) | (uint)(*(int *)(cin + iVar2 + 0x48) == 0); + iVar2 = *(int *)(cout._0_4_ + -0xc); + *(undefined4 *)(cout + iVar2 + 0x14) = 0; + *(uint *)(cout + iVar2 + 8) = + *(uint *)(cout + iVar2 + 8) | (uint)(*(int *)(cout + iVar2 + 0x48) == 0); + iVar2 = *(int *)(cerr._0_4_ + -0xc); + *(undefined4 *)(cerr + iVar2 + 0x14) = 0; + *(uint *)(cerr + iVar2 + 8) = + *(uint *)(cerr + iVar2 + 8) | (uint)(*(int *)(cerr + iVar2 + 0x48) == 0); + iVar2 = *(int *)(clog._0_4_ + -0xc); + *(undefined4 *)(clog + iVar2 + 0x14) = 0; + *(uint *)(clog + iVar2 + 8) = + *(uint *)(clog + iVar2 + 8) | (uint)(*(int *)(clog + iVar2 + 0x48) == 0); + iVar2 = *(int *)(cin._0_4_ + -0xc); + *(undefined4 *)(cin + iVar2 + 8) = 1; + piVar1 = *(int **)(cin + iVar2 + 0x48); + *(undefined4 *)(cin + iVar2 + 0x48) = 0; + if ((cin[iVar2 + 0x14] & 1) == 0) { + if (piVar1 != (int *)0x0) { + (**(code **)(*piVar1 + 4))(); + } + iVar2 = *(int *)(cout._0_4_ + -0xc); + *(undefined4 *)(cout + iVar2 + 8) = 1; + piVar1 = *(int **)(cout + iVar2 + 0x48); + *(undefined4 *)(cout + iVar2 + 0x48) = 0; + if ((cout[iVar2 + 0x14] & 1) == 0) { + if (piVar1 != (int *)0x0) { + (**(code **)(*piVar1 + 4))(); + } + iVar2 = *(int *)(cerr._0_4_ + -0xc); + *(undefined4 *)(cerr + iVar2 + 8) = 1; + piVar1 = *(int **)(cerr + iVar2 + 0x48); + *(undefined4 *)(cerr + iVar2 + 0x48) = 0; + if ((cerr[iVar2 + 0x14] & 1) == 0) { + if (piVar1 != (int *)0x0) { + (**(code **)(*piVar1 + 4))(); + } + iVar2 = *(int *)(clog._0_4_ + -0xc); + *(undefined4 *)(clog + iVar2 + 8) = 1; + piVar1 = *(int **)(clog + iVar2 + 0x48); + *(undefined4 *)(clog + iVar2 + 0x48) = 0; + if ((clog[iVar2 + 0x14] & 1) == 0) { + if (piVar1 != (int *)0x0) { + (**(code **)(*piVar1 + 4))(); + } + (**(code **)cin._0_4_)(); + (**(code **)cout._0_4_)(); + (**(code **)cerr._0_4_)(); + (**(code **)clog._0_4_)(); + iVar2 = *(int *)(wcin._0_4_ + -0xc); + *(undefined4 *)(wcin + iVar2 + 0x14) = 0; + *(uint *)(wcin + iVar2 + 8) = + *(uint *)(wcin + iVar2 + 8) | (uint)(*(int *)(wcin + iVar2 + 0x48) == 0); + iVar2 = *(int *)(wcout._0_4_ + -0xc); + *(undefined4 *)(wcout + iVar2 + 0x14) = 0; + *(uint *)(wcout + iVar2 + 8) = + *(uint *)(wcout + iVar2 + 8) | (uint)(*(int *)(wcout + iVar2 + 0x48) == 0); + iVar2 = *(int *)(wcerr._0_4_ + -0xc); + *(undefined4 *)(wcerr + iVar2 + 0x14) = 0; + *(uint *)(wcerr + iVar2 + 8) = + *(uint *)(wcerr + iVar2 + 8) | (uint)(*(int *)(wcerr + iVar2 + 0x48) == 0); + iVar2 = *(int *)(wclog._0_4_ + -0xc); + *(undefined4 *)(wclog + iVar2 + 0x14) = 0; + *(uint *)(wclog + iVar2 + 8) = + *(uint *)(wclog + iVar2 + 8) | (uint)(*(int *)(wclog + iVar2 + 0x48) == 0); + iVar2 = *(int *)(wcin._0_4_ + -0xc); + *(undefined4 *)(wcin + iVar2 + 8) = 1; + piVar1 = *(int **)(wcin + iVar2 + 0x48); + *(undefined4 *)(wcin + iVar2 + 0x48) = 0; + if ((wcin[iVar2 + 0x14] & 1) == 0) { + if (piVar1 != (int *)0x0) { + (**(code **)(*piVar1 + 4))(); + } + iVar2 = *(int *)(wcout._0_4_ + -0xc); + *(undefined4 *)(wcout + iVar2 + 8) = 1; + piVar1 = *(int **)(wcout + iVar2 + 0x48); + *(undefined4 *)(wcout + iVar2 + 0x48) = 0; + if ((wcout[iVar2 + 0x14] & 1) == 0) { + if (piVar1 != (int *)0x0) { + (**(code **)(*piVar1 + 4))(); + } + iVar2 = *(int *)(wcerr._0_4_ + -0xc); + *(undefined4 *)(wcerr + iVar2 + 8) = 1; + piVar1 = *(int **)(wcerr + iVar2 + 0x48); + *(undefined4 *)(wcerr + iVar2 + 0x48) = 0; + if ((wcerr[iVar2 + 0x14] & 1) == 0) { + if (piVar1 != (int *)0x0) { + (**(code **)(*piVar1 + 4))(); + } + iVar2 = *(int *)(wclog._0_4_ + -0xc); + *(undefined4 *)(wclog + iVar2 + 8) = 1; + piVar1 = *(int **)(wclog + iVar2 + 0x48); + *(undefined4 *)(wclog + iVar2 + 0x48) = 0; + if ((wclog[iVar2 + 0x14] & 1) == 0) { + if (piVar1 != (int *)0x0) { + (**(code **)(*piVar1 + 4))(); + } + (**(code **)wcin._0_4_)(); + (**(code **)wcout._0_4_)(); + (**(code **)wcerr._0_4_)(); + (**(code **)wclog._0_4_)(); + return; + } + } + } + } + } + } + } + } + /* WARNING: Subroutine does not return */ + _M_throw_failure(); +} + + + +### FUNC FUN_000333c0 @ 000333c0 + +int * FUN_000333c0(int param_1) + +{ + int *piVar1; + int *piVar2; + int *piVar3; + int iVar4; + int *piVar5; + + piVar3 = (int *)operator_new(0x7c); + iVar4 = FUN_0003469c(); + std::_Filebuf_base::_M_open(iVar4 + 0x20,(int)*(short *)(param_1 + 0xe)); + piVar5 = (int *)(uint)*(byte *)(piVar3 + 10); + piVar1 = piVar5; + piVar2 = piVar3; + if ((piVar5 != (int *)0x0) && (piVar2 = (int *)0x0, piVar5 != (int *)0x0)) { + piVar1 = piVar3; + piVar2 = (int *)0x0; + } + if (piVar5 == (int *)0x0) { + (**(code **)(*piVar2 + 4))(piVar2); + } + return piVar1; +} + + + +### FUNC FUN_00033432 @ 00033432 + +int * FUN_00033432(int param_1) + +{ + int *piVar1; + int *piVar2; + int *piVar3; + int iVar4; + int *piVar5; + + piVar3 = (int *)operator_new(0x94); + iVar4 = FUN_000337bc(); + std::_Filebuf_base::_M_open(iVar4 + 0x20,(int)*(short *)(param_1 + 0xe)); + piVar5 = (int *)(uint)*(byte *)(piVar3 + 10); + piVar1 = piVar5; + piVar2 = piVar3; + if ((piVar5 != (int *)0x0) && (piVar2 = (int *)0x0, piVar5 != (int *)0x0)) { + piVar1 = piVar3; + piVar2 = (int *)0x0; + } + if (piVar5 == (int *)0x0) { + (**(code **)(*piVar2 + 4))(piVar2); + } + return piVar1; +} + + + +### FUNC sync_with_stdio @ 000334a4 + +/* std::ios_base::sync_with_stdio(bool) */ + +undefined1 std::ios_base::sync_with_stdio(bool param_1) + +{ + char cVar1; + int *piVar2; + int *piVar3; + int *piVar4; + int *piVar5; + int *piVar6; + int iVar7; + + cVar1 = _S_is_synced; + if ((param_1 != (bool)_S_is_synced) && (cVar1 = param_1, Init::_S_count != 0)) { + if (param_1) { + piVar2 = (int *)operator_new(0x24); + FUN_0004ec64(piVar2,&__sF); + *piVar2 = (int)&DAT_00069e3c; + piVar3 = (int *)operator_new(0x24); + FUN_0004ec64(piVar3,pthread_key_create); + *piVar3 = (int)&DAT_00069e98; + piVar4 = (int *)operator_new(0x24); + FUN_0004ec64(piVar4,isupper); + *piVar4 = (int)&DAT_00069e98; + piVar5 = (int *)operator_new(0x24); + FUN_0004ec64(piVar5,isupper); + *piVar5 = (int)&DAT_00069e98; + } + else { + piVar2 = (int *)FUN_000333c0(&__sF,8); + piVar3 = (int *)FUN_000333c0(pthread_key_create,0x10); + piVar4 = (int *)FUN_000333c0(isupper,0x10); + piVar5 = (int *)FUN_000333c0(isupper,0x10); + } + if ((((piVar2 == (int *)0x0) || (piVar3 == (int *)0x0)) || (piVar4 == (int *)0x0)) || + (piVar5 == (int *)0x0)) { + param_1 = _S_is_synced != '\0'; + if (piVar5 != (int *)0x0) { + (**(code **)(*piVar5 + 4))(); + } + if (piVar4 != (int *)0x0) { + (**(code **)(*piVar4 + 4))(piVar4); + } + if (piVar3 != (int *)0x0) { + (**(code **)(*piVar3 + 4))(piVar3); + } + cVar1 = _S_is_synced; + if (piVar2 != (int *)0x0) { + (**(code **)(*piVar2 + 4))(); + cVar1 = _S_is_synced; + } + } + else { + iVar7 = *(int *)(cin._0_4_ + -0xc); + *(undefined4 *)(cin + iVar7 + 8) = 0; + piVar6 = *(int **)(cin + iVar7 + 0x48); + *(int **)(cin + iVar7 + 0x48) = piVar2; + if (piVar6 != (int *)0x0) { + (**(code **)(*piVar6 + 4))(); + } + iVar7 = *(int *)(cout._0_4_ + -0xc); + *(undefined4 *)(cout + iVar7 + 8) = 0; + piVar2 = *(int **)(cout + iVar7 + 0x48); + *(int **)(cout + iVar7 + 0x48) = piVar3; + if (piVar2 != (int *)0x0) { + (**(code **)(*piVar2 + 4))(); + } + iVar7 = *(int *)(cerr._0_4_ + -0xc); + *(undefined4 *)(cerr + iVar7 + 8) = 0; + piVar2 = *(int **)(cerr + iVar7 + 0x48); + *(int **)(cerr + iVar7 + 0x48) = piVar4; + if (piVar2 != (int *)0x0) { + (**(code **)(*piVar2 + 4))(); + } + iVar7 = *(int *)(clog._0_4_ + -0xc); + *(undefined4 *)(clog + iVar7 + 8) = 0; + piVar2 = *(int **)(clog + iVar7 + 0x48); + *(int **)(clog + iVar7 + 0x48) = piVar5; + cVar1 = param_1; + if (piVar2 != (int *)0x0) { + (**(code **)(*piVar2 + 4))(); + cVar1 = param_1; + } + } + } + _S_is_synced = cVar1; + return param_1; +} + + + +### FUNC FUN_000337bc @ 000337bc + +undefined4 * FUN_000337bc(undefined4 *param_1) + +{ + locale alStack_18 [4]; + + param_1[6] = 0; + param_1[5] = 0; + param_1[4] = 0; + param_1[3] = 0; + param_1[2] = 0; + param_1[1] = 0; + *param_1 = &PTR_FUN_00034204_1_00069050; + std::locale::locale((locale *)(param_1 + 7)); + *param_1 = &PTR_FUN_000338f0_1_00068ff8; + std::_Filebuf_base::_Filebuf_base((_Filebuf_base *)(param_1 + 8)); + *(undefined1 *)((int)param_1 + 0x32) = 0; + *(undefined2 *)(param_1 + 0xc) = 0; + param_1[0xb] = 0; + __aeabi_memclr4(param_1 + 0xd,0x38); + param_1[0x1b] = 1; + param_1[0x1c] = 1; + std::locale::locale(alStack_18); + FUN_00033858(param_1,alStack_18,0); + std::locale::~locale(alStack_18); + return param_1; +} + + + +### FUNC FUN_00033858 @ 00033858 + +void FUN_00033858(int param_1,locale *param_2,int param_3) + +{ + undefined1 uVar1; + int iVar2; + int *piVar3; + int iVar4; + undefined4 uVar5; + + iVar2 = std::locale::_M_get_facet(param_2,(id *)&std::codecvt::id); + if (iVar2 != 0) { + piVar3 = (int *)std::locale::_M_use_facet + (param_2,(id *)&std::codecvt::id); + *(int **)(param_1 + 0x68) = piVar3; + iVar4 = (**(code **)(*piVar3 + 0x14))(); + iVar2 = iVar4; + if (iVar4 < 2) { + iVar2 = 1; + } + *(int *)(param_1 + 0x6c) = iVar2; + uVar5 = (**(code **)(**(int **)(param_1 + 0x68) + 0x20))(); + *(bool *)(param_1 + 0x2c) = 0 < iVar4; + *(undefined4 *)(param_1 + 0x70) = uVar5; + uVar1 = (**(code **)(**(int **)(param_1 + 0x68) + 0x18))(); + *(undefined1 *)(param_1 + 0x2d) = uVar1; + return; + } + *(undefined4 *)(param_1 + 0x68) = 0; + *(undefined4 *)(param_1 + 0x6c) = 1; + *(undefined4 *)(param_1 + 0x70) = 1; + *(undefined2 *)(param_1 + 0x2c) = 0; + if (param_3 != 0) { + std::locale::_M_use_facet(param_2,(id *)&std::codecvt::id); + } + return; +} + + + +### FUNC FUN_000338f0 @ 000338f0 + +undefined4 * FUN_000338f0(undefined4 *param_1) + +{ + *param_1 = &PTR_FUN_000338f0_1_00068ff8; + FUN_0003427a(param_1); + if (*(char *)((int)param_1 + 0x2e) != '\0') { + free((void *)param_1[0xd]); + } + free((void *)param_1[0xf]); + param_1[0xd] = 0; + param_1[0xe] = 0; + param_1[0xf] = 0; + param_1[0x10] = 0; + *param_1 = &PTR_FUN_00034204_1_00069050; + std::locale::~locale((locale *)(param_1 + 7)); + return param_1; +} + + + +### FUNC FUN_00033960 @ 00033960 + +void FUN_00033960(undefined4 *param_1) + +{ + *param_1 = &PTR_FUN_000338f0_1_00068ff8; + FUN_0003427a(param_1); + if (*(char *)((int)param_1 + 0x2e) != '\0') { + free((void *)param_1[0xd]); + } + free((void *)param_1[0xf]); + param_1[0xd] = 0; + param_1[0xe] = 0; + param_1[0xf] = 0; + param_1[0x10] = 0; + *param_1 = &PTR_FUN_00034204_1_00069050; + std::locale::~locale((locale *)(param_1 + 7)); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_000339d8 @ 000339d8 + +int FUN_000339d8(int param_1,int param_2,int param_3) + +{ + if ((((*(char *)(param_1 + 0x2f) == '\0') && (*(char *)(param_1 + 0x30) == '\0')) && + (*(char *)(param_1 + 0x31) == '\0')) && (*(int *)(param_1 + 0x34) == 0)) { + if ((param_2 == 0) && (param_3 == 0)) { + param_2 = 0; + param_3 = 1; + } + else { + if (param_2 == 0) { + return param_1; + } + if (param_3 < 1) { + return param_1; + } + } + FUN_0003437c(param_1,param_2,param_3); + } + return param_1; +} + + + +### FUNC FUN_00033a1c @ 00033a1c + +int * FUN_00033a1c(int *param_1,int param_2,int param_3,int param_4) + +{ + int iVar1; + int *piVar2; + int iVar3; + char *pcVar4; + _Filebuf_base *p_Var5; + int *local_18; + + if (*(char *)(param_2 + 0x28) == '\0') { + *param_1 = -1; + param_1[1] = 0; + return param_1; + } + if ((param_3 != 0) && (*(char *)(param_2 + 0x2c) == '\0')) { + *param_1 = -1; + param_1[1] = 0; + return param_1 + 2; + } + iVar1 = FUN_00034400(param_2,param_4 != 2 || param_3 != 0); + if (iVar1 != 0) { + if ((param_4 == 4) || (param_4 == 1)) { + iVar1 = std::_Filebuf_base::_M_seek + ((_Filebuf_base *)(param_2 + 0x20),*(int *)(param_2 + 0x6c) * param_3, + param_4); + piVar2 = (int *)(iVar1 + 1); + if (piVar2 != (int *)0x0) { + if (*(char *)(param_2 + 0x2f) != '\0') { + if (*(void **)(param_2 + 0x54) != (void *)0x0) { + std::_Filebuf_base::_M_unmap + ((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54), + *(long *)(param_2 + 0x58)); + *(undefined4 *)(param_2 + 0x54) = 0; + *(undefined4 *)(param_2 + 0x58) = 0; + } + *(undefined1 *)(param_2 + 0x2f) = 0; + } + piVar2 = (int *)0x0; + *(undefined4 *)(param_2 + 4) = 0; + *(undefined4 *)(param_2 + 8) = 0; + *(undefined4 *)(param_2 + 0xc) = 0; + *(undefined4 *)(param_2 + 0x10) = 0; + *(undefined4 *)(param_2 + 0x14) = 0; + *(undefined4 *)(param_2 + 0x18) = 0; + *(undefined1 *)(param_2 + 0x32) = 0; + *(undefined1 *)(param_2 + 0x31) = 0; + *(undefined1 *)(param_2 + 0x30) = 0; + *(undefined1 *)(param_2 + 0x2f) = 0; + } +LAB_00033ad4: + *param_1 = iVar1; + param_1[1] = 0; + return piVar2; + } + pcVar4 = (char *)(param_2 + 0x2f); + if (*(char *)(param_2 + 0x2f) == '\0') { + iVar1 = std::_Filebuf_base::_M_seek + ((_Filebuf_base *)(param_2 + 0x20),*(int *)(param_2 + 0x6c) * param_3, + param_4); + piVar2 = (int *)(iVar1 + 1); + if (piVar2 != (int *)0x0) { + if (*pcVar4 != '\0') { + if (*(void **)(param_2 + 0x54) != (void *)0x0) { + std::_Filebuf_base::_M_unmap + ((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54), + *(long *)(param_2 + 0x58)); + *(undefined4 *)(param_2 + 0x54) = 0; + *(undefined4 *)(param_2 + 0x58) = 0; + } + *pcVar4 = '\0'; + } + piVar2 = (int *)0x0; + *(undefined4 *)(param_2 + 4) = 0; + *(undefined4 *)(param_2 + 8) = 0; + *(undefined4 *)(param_2 + 0xc) = 0; + *(undefined4 *)(param_2 + 0x10) = 0; + *(undefined4 *)(param_2 + 0x14) = 0; + *(undefined4 *)(param_2 + 0x18) = 0; + *(undefined1 *)(param_2 + 0x32) = 0; + *(undefined1 *)(param_2 + 0x31) = 0; + *(undefined1 *)(param_2 + 0x30) = 0; + *pcVar4 = '\0'; + } + goto LAB_00033ad4; + } + if (*(int *)(param_2 + 0x54) != 0) { + iVar1 = *(int *)(param_2 + 0x58) - (*(int *)(param_2 + 8) - *(int *)(param_2 + 0x54) >> 2); + p_Var5 = (_Filebuf_base *)(param_2 + 0x20); + if (param_3 != 0) { + iVar1 = std::_Filebuf_base::_M_seek(p_Var5,param_3 - iVar1,2); + piVar2 = (int *)(iVar1 + 1); + if (piVar2 != (int *)0x0) { + if (*pcVar4 != '\0') { + if (*(void **)(param_2 + 0x54) != (void *)0x0) { + std::_Filebuf_base::_M_unmap + (p_Var5,*(void **)(param_2 + 0x54),*(long *)(param_2 + 0x58)); + *(undefined4 *)(param_2 + 0x54) = 0; + *(undefined4 *)(param_2 + 0x58) = 0; + } + *pcVar4 = '\0'; + } + piVar2 = (int *)0x0; + *(undefined4 *)(param_2 + 4) = 0; + *(undefined4 *)(param_2 + 8) = 0; + *(undefined4 *)(param_2 + 0xc) = 0; + *(undefined4 *)(param_2 + 0x10) = 0; + *(undefined4 *)(param_2 + 0x14) = 0; + *(undefined4 *)(param_2 + 0x18) = 0; + *(undefined1 *)(param_2 + 0x32) = 0; + *(undefined1 *)(param_2 + 0x31) = 0; + *(undefined1 *)(param_2 + 0x30) = 0; + *pcVar4 = '\0'; + } + *param_1 = iVar1; + param_1[1] = 0; + return piVar2; + } + iVar3 = std::_Filebuf_base::_M_seek(p_Var5,0,2); + piVar2 = (int *)(iVar3 - iVar1); +LAB_00033c42: + *param_1 = (int)piVar2; + param_1[1] = 0; + return piVar2; + } + if (*(char *)(param_2 + 0x2c) == '\0') { + local_18 = *(int **)(param_2 + 0x4c); + iVar1 = (**(code **)(**(int **)(param_2 + 0x68) + 0x1c)) + (*(int **)(param_2 + 0x68),&local_18,*(undefined4 *)(param_2 + 0x3c), + *(undefined4 *)(param_2 + 0x44), + *(int *)(param_2 + 8) - *(int *)(param_2 + 4) >> 2); + iVar3 = std::_Filebuf_base::_M_seek((_Filebuf_base *)(param_2 + 0x20),0,2); + piVar2 = local_18; + if ((iVar3 != -1) && + (iVar1 = ((iVar3 + iVar1) - *(int *)(param_2 + 0x48)) + *(int *)(param_2 + 0x3c), + -1 < iVar1)) { + if (param_3 != 0) { + if (*pcVar4 != '\0') { + if (*(void **)(param_2 + 0x54) != (void *)0x0) { + std::_Filebuf_base::_M_unmap + ((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54), + *(long *)(param_2 + 0x58)); + *(undefined4 *)(param_2 + 0x54) = 0; + *(undefined4 *)(param_2 + 0x58) = 0; + } + *pcVar4 = '\0'; + } + *(undefined4 *)(param_2 + 4) = 0; + *(undefined4 *)(param_2 + 8) = 0; + *(undefined4 *)(param_2 + 0xc) = 0; + *(undefined4 *)(param_2 + 0x10) = 0; + *(undefined4 *)(param_2 + 0x14) = 0; + *(undefined4 *)(param_2 + 0x18) = 0; + *(undefined1 *)(param_2 + 0x32) = 0; + *(undefined1 *)(param_2 + 0x31) = 0; + *(undefined1 *)(param_2 + 0x30) = 0; + *pcVar4 = '\0'; + *param_1 = iVar1; + param_1[1] = (int)piVar2; + return piVar2; + } + *param_1 = iVar1; + goto LAB_00033cf0; + } + } + else { + iVar1 = (*(int *)(param_2 + 8) - *(int *)(param_2 + 4) >> 2) * *(int *)(param_2 + 0x6c); + iVar3 = *(int *)(param_2 + 0x48) - *(int *)(param_2 + 0x3c); + if (iVar1 - iVar3 == 0 || iVar1 < iVar3) { + iVar1 = *(int *)(param_2 + 0x48) - (*(int *)(param_2 + 0x3c) + iVar1); + p_Var5 = (_Filebuf_base *)(param_2 + 0x20); + if (param_3 != 0) { + piVar2 = (int *)std::_Filebuf_base::_M_seek(p_Var5,param_3 - iVar1,2); + if (piVar2 != (int *)0xffffffff) { + if (*pcVar4 != '\0') { + if (*(void **)(param_2 + 0x54) != (void *)0x0) { + std::_Filebuf_base::_M_unmap + (p_Var5,*(void **)(param_2 + 0x54),*(long *)(param_2 + 0x58)); + *(undefined4 *)(param_2 + 0x54) = 0; + *(undefined4 *)(param_2 + 0x58) = 0; + } + *pcVar4 = '\0'; + } + *(undefined4 *)(param_2 + 4) = 0; + *(undefined4 *)(param_2 + 8) = 0; + *(undefined4 *)(param_2 + 0xc) = 0; + *(undefined4 *)(param_2 + 0x10) = 0; + *(undefined4 *)(param_2 + 0x14) = 0; + *(undefined4 *)(param_2 + 0x18) = 0; + *(undefined1 *)(param_2 + 0x32) = 0; + *(undefined1 *)(param_2 + 0x31) = 0; + *(undefined1 *)(param_2 + 0x30) = 0; + *pcVar4 = '\0'; + } + *param_1 = (int)piVar2; + param_1[1] = 0; + return piVar2; + } + iVar3 = std::_Filebuf_base::_M_seek(p_Var5,0,2); + piVar2 = (int *)(iVar3 - iVar1); + goto LAB_00033c42; + } + } + } + *param_1 = -1; +LAB_00033cf0: + param_1[1] = 0; + return param_1; +} + + + +### FUNC FUN_00033d10 @ 00033d10 + +int * FUN_00033d10(int *param_1,int param_2,int param_3,int param_4) + +{ + int iVar1; + int iVar2; + int iVar3; + + if (((*(char *)(param_2 + 0x28) == '\0') || (iVar1 = FUN_00034400(param_2,1), param_3 == -1)) || + (iVar1 != 1)) { + iVar3 = 0; + iVar1 = -1; + } + else { + iVar2 = std::_Filebuf_base::_M_seek((_Filebuf_base *)(param_2 + 0x20),param_3,1); + iVar1 = -1; + iVar3 = 0; + if (iVar2 != -1) { + *(int *)(param_2 + 0x4c) = param_4; + if (*(char *)(param_2 + 0x2f) != '\0') { + if (*(void **)(param_2 + 0x54) != (void *)0x0) { + std::_Filebuf_base::_M_unmap + ((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54), + *(long *)(param_2 + 0x58)); + *(undefined4 *)(param_2 + 0x54) = 0; + *(undefined4 *)(param_2 + 0x58) = 0; + } + *(undefined1 *)(param_2 + 0x2f) = 0; + } + *(undefined4 *)(param_2 + 4) = 0; + *(undefined4 *)(param_2 + 8) = 0; + *(undefined4 *)(param_2 + 0xc) = 0; + *(undefined4 *)(param_2 + 0x10) = 0; + *(undefined4 *)(param_2 + 0x14) = 0; + *(undefined4 *)(param_2 + 0x18) = 0; + *(undefined1 *)(param_2 + 0x32) = 0; + *(undefined1 *)(param_2 + 0x31) = 0; + *(undefined1 *)(param_2 + 0x30) = 0; + *(undefined1 *)(param_2 + 0x2f) = 0; + iVar1 = param_3; + iVar3 = param_4; + } + } + *param_1 = iVar1; + param_1[1] = iVar3; + return param_1 + 2; +} + + + +### FUNC FUN_00033db4 @ 00033db4 + +undefined4 FUN_00033db4(int *param_1) + +{ + int iVar1; + undefined4 uVar2; + + uVar2 = 0; + if ((char)param_1[0xc] != '\0') { + uVar2 = 0; + iVar1 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff); + if (iVar1 == -1) { + uVar2 = 0xffffffff; + } + } + return uVar2; +} + + + +### FUNC FUN_00033dd6 @ 00033dd6 + +int FUN_00033dd6(int param_1) + +{ + int iVar1; + int iVar2; + undefined4 uStack_1c; + + uStack_1c = -1; + if (((*(char *)(param_1 + 0x28) != '\0') && (*(char *)(param_1 + 0x30) == '\0')) && + (*(char *)(param_1 + 0x31) == '\0')) { + if (*(char *)(param_1 + 0x32) != '\0') { + return *(int *)(param_1 + 0xc) - *(int *)(param_1 + 8) >> 2; + } + uStack_1c = 0; + if (*(char *)(param_1 + 0x2c) != '\0') { + iVar1 = std::_Filebuf_base::_M_seek((_Filebuf_base *)(param_1 + 0x20),0,2); + iVar2 = std::_Filebuf_base::_M_file_size((_Filebuf_base *)(param_1 + 0x20)); + uStack_1c = iVar2 - iVar1; + if (iVar2 <= iVar1) { + uStack_1c = 0; + } + if (iVar1 < 0) { + return 0; + } + } + } + return uStack_1c; +} + + + +### FUNC FUN_00033e48 @ 00033e48 + +int FUN_00033e48(int *param_1,wchar_t *param_2,int param_3) + +{ + uint uVar1; + wchar_t wVar2; + wchar_t *__s2; + int iVar3; + uint __n; + + iVar3 = 0; + if (0 < param_3) { + iVar3 = 0; + do { + __s2 = (wchar_t *)param_1[2]; + if (__s2 < (wchar_t *)param_1[3]) { + uVar1 = param_1[3] - (int)__s2 >> 2; + __n = param_3 - iVar3; + if (uVar1 <= (uint)(param_3 - iVar3)) { + __n = uVar1; + } + wmemcpy(param_2,__s2,__n); + param_1[2] = param_1[2] + __n * 4; + iVar3 = __n + iVar3; + param_2 = param_2 + __n; + } + else { + wVar2 = (**(code **)(*param_1 + 0x24))(param_1); + if (wVar2 == L'\xffffffff') { + return iVar3; + } + *param_2 = wVar2; + param_2 = param_2 + 1; + iVar3 = iVar3 + 1; + } + } while (iVar3 < param_3); + } + return iVar3; +} + + + +### FUNC FUN_00033eae @ 00033eae + +void FUN_00033eae(void) + +{ + FUN_000344d4(); + return; +} + + + +### FUNC FUN_00033eb8 @ 00033eb8 + +undefined4 FUN_00033eb8(int *param_1) + +{ + int iVar1; + undefined4 uVar2; + undefined4 *puVar3; + + iVar1 = (**(code **)(*param_1 + 0x20))(param_1); + uVar2 = 0xffffffff; + if (iVar1 != -1) { + puVar3 = (undefined4 *)param_1[2]; + param_1[2] = (int)(puVar3 + 1); + uVar2 = *puVar3; + } + return uVar2; +} + + + +### FUNC FUN_00033eda @ 00033eda + +int FUN_00033eda(int param_1,int param_2) + +{ + int iVar1; + int *piVar2; + int iVar3; + + if (*(char *)(param_1 + 0x2f) == '\0') { + return -1; + } + iVar1 = *(int *)(param_1 + 4); + iVar3 = *(int *)(param_1 + 8); + if (iVar3 == iVar1) { + if (param_2 == -1) { + return -1; + } + } + else { + piVar2 = (int *)(iVar3 + -4); + if (param_2 == -1) { + *(int **)(param_1 + 8) = piVar2; + return *piVar2; + } + if (*piVar2 == param_2) { + *(int **)(param_1 + 8) = piVar2; + return param_2; + } + if (*(int *)(param_1 + 0x54) == 0) { + *(int **)(param_1 + 8) = piVar2; + goto LAB_00033f60; + } + } + if (*(char *)(param_1 + 0x32) == '\0') { + *(int *)(param_1 + 0x5c) = iVar1; + *(int *)(param_1 + 0x60) = iVar3; + *(undefined4 *)(param_1 + 100) = *(undefined4 *)(param_1 + 0xc); + piVar2 = (int *)(param_1 + 0x90); + *(int **)(param_1 + 4) = piVar2; + *(int **)(param_1 + 8) = piVar2; + *(int *)(param_1 + 0xc) = param_1 + 0x94; + *(undefined1 *)(param_1 + 0x32) = 1; + } + else { + if (iVar1 == param_1 + 0x74) { + return -1; + } + piVar2 = (int *)(*(int *)(param_1 + 0xc) + -4); + *(int **)(param_1 + 4) = piVar2; + *(int **)(param_1 + 8) = piVar2; + *(int *)(param_1 + 0xc) = param_1 + 0x94; + } +LAB_00033f60: + *piVar2 = param_2; + return param_2; +} + + + +### FUNC FUN_00033f68 @ 00033f68 + +int FUN_00033f68(int *param_1,wchar_t *param_2,int param_3) + +{ + wchar_t *__s1; + int iVar1; + uint uVar2; + int iVar3; + uint __n; + + iVar3 = 0; + if (0 < param_3) { + iVar3 = 0; + do { + while( true ) { + __s1 = (wchar_t *)param_1[5]; + if ((wchar_t *)param_1[6] <= __s1) break; + uVar2 = param_1[6] - (int)__s1 >> 2; + __n = param_3 - iVar3; + if (uVar2 <= (uint)(param_3 - iVar3)) { + __n = uVar2; + } + wmemcpy(__s1,param_2,__n); + param_1[5] = param_1[5] + __n * 4; + iVar3 = __n + iVar3; + param_2 = param_2 + __n; + if (param_3 <= iVar3) { + return iVar3; + } + } + iVar1 = (**(code **)(*param_1 + 0x34))(param_1,*param_2); + if (iVar1 == -1) { + return iVar3; + } + param_2 = param_2 + 1; + iVar3 = iVar3 + 1; + } while (iVar3 < param_3); + } + return iVar3; +} + + + +### FUNC FUN_00033fd8 @ 00033fd8 + +int FUN_00033fd8(int *param_1,wchar_t param_2,int param_3) + +{ + wchar_t *__s; + int iVar1; + uint uVar2; + int iVar3; + uint __n; + + iVar3 = 0; + if (0 < param_3) { + iVar3 = 0; + do { + while( true ) { + __s = (wchar_t *)param_1[5]; + if (__s < (wchar_t *)param_1[6]) break; + iVar1 = (**(code **)(*param_1 + 0x34))(param_1,param_2); + if (iVar1 == -1) { + return iVar3; + } + iVar3 = iVar3 + 1; + if (param_3 <= iVar3) { + return iVar3; + } + } + uVar2 = param_1[6] - (int)__s >> 2; + __n = param_3 - iVar3; + if (uVar2 <= (uint)(param_3 - iVar3)) { + __n = uVar2; + } + wmemset(__s,param_2,__n); + param_1[5] = param_1[5] + __n * 4; + iVar3 = __n + iVar3; + } while (iVar3 < param_3); + } + return iVar3; +} + + + +### FUNC FUN_00034038 @ 00034038 + +int FUN_00034038(int param_1,int param_2) + +{ + int iVar1; + uint uVar2; + int extraout_r1; + char *pcVar3; + int *piVar4; + int *piVar5; + int local_1c; + int *local_18; + + if (*(char *)(param_1 + 0x30) == '\0') { + if (*(char *)(param_1 + 0x28) == '\0') { + return -1; + } + uVar2 = *(uint *)(param_1 + 0x24); + if ((uVar2 & 0x10) == 0) { + return -1; + } + if (*(char *)(param_1 + 0x2f) != '\0') { + return -1; + } + if (*(char *)(param_1 + 0x31) != '\0') { + return -1; + } + if (*(int *)(param_1 + 0x34) == 0) { + iVar1 = std::_Filebuf_base::_M_page_size + 0xfff; + __aeabi_uidivmod(iVar1); + iVar1 = FUN_0003437c(param_1,0,iVar1 - extraout_r1); + if (iVar1 != 1) { + return -1; + } + uVar2 = *(uint *)(param_1 + 0x24); + } + if ((uVar2 & 1) != 0) { + *(undefined4 *)(param_1 + 0x4c) = 0; + } + piVar4 = *(int **)(param_1 + 0x34); + iVar1 = *(int *)(param_1 + 0x38); + *(int **)(param_1 + 0x10) = piVar4; + *(int **)(param_1 + 0x14) = piVar4; + *(int *)(param_1 + 0x18) = iVar1 + -4; + *(undefined1 *)(param_1 + 0x30) = 1; + piVar5 = piVar4; + } + else { + piVar4 = *(int **)(param_1 + 0x34); + iVar1 = *(int *)(param_1 + 0x38); + piVar5 = *(int **)(param_1 + 0x14); + } + *(int **)(param_1 + 0x10) = piVar4; + *(int **)(param_1 + 0x14) = piVar4; + *(int *)(param_1 + 0x18) = iVar1 + -4; + if (param_2 != -1) { + *piVar5 = param_2; + piVar5 = piVar5 + 1; + } + if (piVar4 != piVar5) { + do { + local_1c = *(int *)(param_1 + 0x3c); + local_18 = piVar4; + uVar2 = (**(code **)(**(int **)(param_1 + 0x68) + 8)) + (*(int **)(param_1 + 0x68),param_1 + 0x4c,piVar4,piVar5,&local_18,local_1c, + *(undefined4 *)(param_1 + 0x40),&local_1c); + if ((uVar2 & 0xfffffffe) == 2) { +LAB_000341b4: + *(undefined1 *)(param_1 + 0x30) = 0; + *(undefined1 *)(param_1 + 0x31) = 1; + *(undefined1 *)(param_1 + 0x2f) = 0; + *(undefined4 *)(param_1 + 0x10) = 0; + *(undefined4 *)(param_1 + 0x14) = 0; + *(undefined4 *)(param_1 + 0x18) = 0; + return -1; + } + if ((local_18 != piVar5) || + (pcVar3 = *(char **)(param_1 + 0x3c), + local_1c - (int)pcVar3 != ((int)piVar5 - (int)piVar4 >> 2) * *(int *)(param_1 + 0x6c))) { + if ((*(char *)(param_1 + 0x2c) != '\0') || (local_18 == piVar4)) goto LAB_000341b4; + pcVar3 = *(char **)(param_1 + 0x3c); + } + iVar1 = std::_Filebuf_base::_M_write + ((_Filebuf_base *)(param_1 + 0x20),pcVar3,local_1c - (int)pcVar3); + if (iVar1 != 1) goto LAB_000341b4; + piVar4 = local_18; + } while (local_18 != piVar5); + } + iVar1 = 0; + if (param_2 != -1) { + iVar1 = param_2; + } + return iVar1; +} + + + +### FUNC FUN_000341dc @ 000341dc + +void FUN_000341dc(int param_1,undefined4 param_2) + +{ + if (((*(char *)(param_1 + 0x2f) == '\0') && (*(char *)(param_1 + 0x30) == '\0')) && + (*(char *)(param_1 + 0x31) == '\0')) { + FUN_00033858(param_1,param_2,1); + return; + } + return; +} + + + +### FUNC FUN_00034204 @ 00034204 + +undefined4 * FUN_00034204(undefined4 *param_1) + +{ + *param_1 = &PTR_FUN_00034204_1_00069050; + std::locale::~locale((locale *)(param_1 + 7)); + return param_1; +} + + + +### FUNC FUN_00034224 @ 00034224 + +void FUN_00034224(undefined4 *param_1) + +{ + *param_1 = &PTR_FUN_00034204_1_00069050; + std::locale::~locale((locale *)(param_1 + 7)); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_0003427a @ 0003427a + +int * FUN_0003427a(int *param_1) + +{ + char cVar1; + bool bVar2; + bool bVar3; + int iVar4; + int iVar5; + char *pcVar6; + char *local_18; + + cVar1 = (char)param_1[10]; + if ((char)param_1[0xc] == '\0') { + bVar2 = cVar1 != '\0'; + if (*(char *)((int)param_1 + 0x2f) != '\0') { + if ((void *)param_1[0x15] != (void *)0x0) { + std::_Filebuf_base::_M_unmap + ((_Filebuf_base *)(param_1 + 8),(void *)param_1[0x15],param_1[0x16]); + param_1[0x15] = 0; + param_1[0x16] = 0; + } + *(undefined1 *)((int)param_1 + 0x2f) = 0; + } + } + else { + bVar2 = false; + if (cVar1 != '\0') { + iVar4 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff); + bVar2 = false; + if (((iVar4 != -1) && (bVar2 = true, (char)param_1[0xc] != '\0')) && + ((char)param_1[0xb] == '\0')) { + bVar3 = true; + while( true ) { + local_18 = (char *)param_1[0xf]; + iVar4 = (**(code **)(*(int *)param_1[0x1a] + 0x10)) + ((int *)param_1[0x1a],param_1 + 0x13,local_18,param_1[0x10],&local_18); + bVar2 = bVar3; + if (((iVar4 == 3) || ((pcVar6 = (char *)param_1[0xf], iVar4 == 0 && (local_18 == pcVar6))) + ) || (bVar2 = false, iVar4 == 2)) break; + iVar5 = std::_Filebuf_base::_M_write + ((_Filebuf_base *)(param_1 + 8),pcVar6,(int)local_18 - (int)pcVar6); + if ((iVar5 != 1) || (bVar2 = bVar3, iVar4 != 1)) break; + } + } + } + } + iVar4 = std::_Filebuf_base::_M_close((_Filebuf_base *)(param_1 + 8)); + *(undefined1 *)((int)param_1 + 0x32) = 0; + *(undefined1 *)((int)param_1 + 0x31) = 0; + *(undefined1 *)(param_1 + 0xc) = 0; + *(undefined1 *)((int)param_1 + 0x2f) = 0; + param_1[1] = 0; + param_1[2] = 0; + param_1[3] = 0; + param_1[4] = 0; + param_1[5] = 0; + param_1[6] = 0; + __aeabi_memclr4(param_1 + 0x11,0x24); + if (iVar4 == 0) { + param_1 = (int *)0x0; + } + if (!bVar2) { + param_1 = (int *)0x0; + } + return param_1; +} + + + +### FUNC FUN_0003437c @ 0003437c + +undefined4 FUN_0003437c(int param_1,int param_2,int param_3) + +{ + size_t __size; + void *pvVar1; + undefined4 uVar2; + int iVar3; + undefined1 uVar4; + size_t sVar5; + + if (param_2 == 0) { + pvVar1 = malloc(param_3 << 2); + *(void **)(param_1 + 0x34) = pvVar1; + uVar4 = 1; + if (pvVar1 == (void *)0x0) { + return 0; + } + } + else { + *(int *)(param_1 + 0x34) = param_2; + uVar4 = 0; + } + *(undefined1 *)(param_1 + 0x2e) = uVar4; + sVar5 = param_3 * *(int *)(param_1 + 0x6c); + __size = (**(code **)(**(int **)(param_1 + 0x68) + 0x20))(); + if ((int)__size <= (int)sVar5) { + __size = sVar5; + } + pvVar1 = malloc(__size); + *(void **)(param_1 + 0x3c) = pvVar1; + if (pvVar1 == (void *)0x0) { + pvVar1 = (void *)0x0; + if (*(char *)(param_1 + 0x2e) != '\0') { + free(*(void **)(param_1 + 0x34)); + pvVar1 = *(void **)(param_1 + 0x3c); + } + free(pvVar1); + iVar3 = 0; + *(undefined4 *)(param_1 + 0x34) = 0; + *(undefined4 *)(param_1 + 0x38) = 0; + *(undefined4 *)(param_1 + 0x3c) = 0; + uVar2 = 0; + } + else { + *(int *)(param_1 + 0x38) = *(int *)(param_1 + 0x34) + param_3 * 4; + iVar3 = (int)pvVar1 + __size; + uVar2 = 1; + } + *(int *)(param_1 + 0x40) = iVar3; + return uVar2; +} + + + +### FUNC FUN_00034400 @ 00034400 + +undefined4 FUN_00034400(int *param_1,int param_2) + +{ + int iVar1; + int iVar2; + char *pcVar3; + char *local_18; + + *(undefined1 *)((int)param_1 + 0x31) = 0; + if ((char)param_1[0xc] != '\0') { + iVar1 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff); + if (param_2 == 1) { + if (iVar1 == -1) { +LAB_000344be: + *(char *)(param_1 + 0xc) = '\0'; + *(undefined1 *)((int)param_1 + 0x31) = 1; + param_1[4] = 0; + param_1[5] = 0; + param_1[6] = 0; + return 0; + } + if (((char)param_1[0xc] != '\0') && ((char)param_1[0xb] == '\0')) { + do { + local_18 = (char *)param_1[0xf]; + iVar1 = (**(code **)(*(int *)param_1[0x1a] + 0x10)) + ((int *)param_1[0x1a],param_1 + 0x13,local_18,param_1[0x10],&local_18); + if ((iVar1 == 3) || ((pcVar3 = (char *)param_1[0xf], iVar1 == 0 && (local_18 == pcVar3)))) + break; + if ((iVar1 == 2) || + (iVar2 = std::_Filebuf_base::_M_write + ((_Filebuf_base *)(param_1 + 8),pcVar3,(int)local_18 - (int)pcVar3), + iVar2 != 1)) goto LAB_000344be; + } while (iVar1 == 1); + } + } + else if (iVar1 == -1) goto LAB_000344be; + } + if ((*(char *)((int)param_1 + 0x2f) != '\0') && (*(char *)((int)param_1 + 0x32) != '\0')) { + param_1[1] = param_1[0x17]; + param_1[2] = param_1[0x18]; + param_1[3] = param_1[0x19]; + *(undefined1 *)((int)param_1 + 0x32) = 0; + } + return 1; +} + + + +### FUNC FUN_000344d4 @ 000344d4 + +undefined4 FUN_000344d4(int param_1) + +{ + int iVar1; + undefined4 uVar2; + undefined4 *puVar3; + int extraout_r1; + + if (*(char *)(param_1 + 0x2f) == '\0') { + if (*(char *)(param_1 + 0x28) == '\0') { + return 0xffffffff; + } + if (-1 < (int)((uint)*(byte *)(param_1 + 0x24) << 0x1c)) { + return 0xffffffff; + } + if (*(char *)(param_1 + 0x30) != '\0') { + return 0xffffffff; + } + if (*(char *)(param_1 + 0x31) != '\0') { + return 0xffffffff; + } + if (*(int *)(param_1 + 0x34) == 0) { + iVar1 = std::_Filebuf_base::_M_page_size + 0xfff; + __aeabi_uidivmod(); + iVar1 = FUN_0003437c(param_1,0,iVar1 - extraout_r1); + if (iVar1 != 1) { + return 0xffffffff; + } + } + *(undefined4 *)(param_1 + 0x44) = *(undefined4 *)(param_1 + 0x3c); + *(undefined4 *)(param_1 + 0x48) = *(undefined4 *)(param_1 + 0x3c); + *(undefined4 *)(param_1 + 0x50) = *(undefined4 *)(param_1 + 0x4c); + *(undefined1 *)(param_1 + 0x2f) = 1; + } + else if (*(char *)(param_1 + 0x32) != '\0') { + puVar3 = *(undefined4 **)(param_1 + 0x60); + *(undefined4 *)(param_1 + 4) = *(undefined4 *)(param_1 + 0x5c); + *(undefined4 **)(param_1 + 8) = puVar3; + *(undefined4 **)(param_1 + 0xc) = *(undefined4 **)(param_1 + 100); + *(undefined1 *)(param_1 + 0x32) = 0; + if (puVar3 != *(undefined4 **)(param_1 + 100)) { + return *puVar3; + } + } + uVar2 = FUN_0003457c(param_1); + return uVar2; +} + + + +### FUNC FUN_0003457c @ 0003457c + +undefined4 FUN_0003457c(int param_1) + +{ + _Filebuf_base *this; + undefined4 *puVar1; + uint uVar2; + int iVar3; + int iVar4; + char *pcVar5; + undefined4 *local_1c; + int local_18; + + *(undefined4 *)(param_1 + 0x4c) = *(undefined4 *)(param_1 + 0x50); + pcVar5 = *(char **)(param_1 + 0x3c); + uVar2 = *(uint *)(param_1 + 0x44); + if ((uVar2 < *(uint *)(param_1 + 0x48)) && (iVar4 = *(uint *)(param_1 + 0x48) - uVar2, iVar4 != 0) + ) { + __aeabi_memmove(pcVar5,uVar2,iVar4); + pcVar5 = pcVar5 + iVar4; + } + *(char **)(param_1 + 0x48) = pcVar5; + this = (_Filebuf_base *)(param_1 + 0x20); + iVar4 = std::_Filebuf_base::_M_read(this,pcVar5,*(int *)(param_1 + 0x40) - (int)pcVar5); + if (-1 < iVar4) { + while( true ) { + iVar3 = *(int *)(param_1 + 0x48) + iVar4; + *(int *)(param_1 + 0x48) = iVar3; + if (*(int *)(param_1 + 0x3c) == iVar3) break; + iVar3 = (**(code **)(**(int **)(param_1 + 0x68) + 0xc)) + (*(int **)(param_1 + 0x68),param_1 + 0x50,*(int *)(param_1 + 0x3c),iVar3, + &local_18,*(undefined4 *)(param_1 + 0x34),*(undefined4 *)(param_1 + 0x38), + &local_1c); + if (iVar3 == 2) { +LAB_0003465e: + if (*(void **)(param_1 + 0x54) != (void *)0x0) { + std::_Filebuf_base::_M_unmap(this,*(void **)(param_1 + 0x54),*(long *)(param_1 + 0x58)); + *(undefined4 *)(param_1 + 0x54) = 0; + *(undefined4 *)(param_1 + 0x58) = 0; + } + *(undefined1 *)(param_1 + 0x30) = 0; + *(undefined1 *)(param_1 + 0x2f) = 0; + *(undefined1 *)(param_1 + 0x31) = 1; + *(undefined4 *)(param_1 + 4) = 0; + *(undefined4 *)(param_1 + 8) = 0; + *(undefined4 *)(param_1 + 0xc) = 0; + return 0xffffffff; + } + if (iVar3 == 3) { + return 0xffffffff; + } + puVar1 = *(undefined4 **)(param_1 + 0x34); + if (((local_1c != puVar1) && (local_18 == *(int *)(param_1 + 0x3c))) || + ((*(char *)(param_1 + 0x2c) != '\0' && + (((int)local_1c - (int)puVar1 >> 2) * *(int *)(param_1 + 0x6c) - + (local_18 - *(int *)(param_1 + 0x3c)) != 0)))) goto LAB_0003465e; + if (local_1c != puVar1) { + *(int *)(param_1 + 0x44) = local_18; + *(undefined4 **)(param_1 + 4) = puVar1; + *(undefined4 **)(param_1 + 8) = puVar1; + *(undefined4 **)(param_1 + 0xc) = local_1c; + return *puVar1; + } + if (*(int *)(param_1 + 0x70) <= local_18 - *(int *)(param_1 + 0x3c)) goto LAB_0003465e; + if ((iVar4 < 1) || + (iVar4 = std::_Filebuf_base::_M_read + (this,*(char **)(param_1 + 0x48), + *(int *)(param_1 + 0x40) - (int)*(char **)(param_1 + 0x48)), iVar4 < 0) + ) break; + } + } + *(undefined4 *)(param_1 + 4) = 0; + *(undefined4 *)(param_1 + 8) = 0; + *(undefined4 *)(param_1 + 0xc) = 0; + return 0xffffffff; +} + + + +### FUNC FUN_0003469c @ 0003469c + +undefined4 * FUN_0003469c(undefined4 *param_1) + +{ + locale alStack_18 [4]; + + param_1[6] = 0; + param_1[5] = 0; + param_1[4] = 0; + param_1[3] = 0; + param_1[2] = 0; + param_1[1] = 0; + *param_1 = &PTR_FUN_00035128_1_000690ec; + std::locale::locale((locale *)(param_1 + 7)); + *param_1 = &PTR_FUN_000347d0_1_00069094; + std::_Filebuf_base::_Filebuf_base((_Filebuf_base *)(param_1 + 8)); + *(undefined1 *)((int)param_1 + 0x32) = 0; + *(undefined2 *)(param_1 + 0xc) = 0; + param_1[0xb] = 0; + __aeabi_memclr4(param_1 + 0xd,0x38); + param_1[0x1b] = 1; + param_1[0x1c] = 1; + std::locale::locale(alStack_18); + FUN_00034738(param_1,alStack_18,0); + std::locale::~locale(alStack_18); + return param_1; +} + + + +### FUNC FUN_00034738 @ 00034738 + +void FUN_00034738(int param_1,locale *param_2,int param_3) + +{ + undefined1 uVar1; + int iVar2; + int *piVar3; + int iVar4; + undefined4 uVar5; + + iVar2 = std::locale::_M_get_facet(param_2,(id *)&std::codecvt::id); + if (iVar2 != 0) { + piVar3 = (int *)std::locale::_M_use_facet(param_2,(id *)&std::codecvt::id); + *(int **)(param_1 + 0x68) = piVar3; + iVar4 = (**(code **)(*piVar3 + 0x14))(); + iVar2 = iVar4; + if (iVar4 < 2) { + iVar2 = 1; + } + *(int *)(param_1 + 0x6c) = iVar2; + uVar5 = (**(code **)(**(int **)(param_1 + 0x68) + 0x20))(); + *(bool *)(param_1 + 0x2c) = 0 < iVar4; + *(undefined4 *)(param_1 + 0x70) = uVar5; + uVar1 = (**(code **)(**(int **)(param_1 + 0x68) + 0x18))(); + *(undefined1 *)(param_1 + 0x2d) = uVar1; + return; + } + *(undefined4 *)(param_1 + 0x68) = 0; + *(undefined4 *)(param_1 + 0x6c) = 1; + *(undefined4 *)(param_1 + 0x70) = 1; + *(undefined2 *)(param_1 + 0x2c) = 0; + if (param_3 != 0) { + std::locale::_M_use_facet(param_2,(id *)&std::codecvt::id); + } + return; +} + + + +### FUNC FUN_000347d0 @ 000347d0 + +undefined4 * FUN_000347d0(undefined4 *param_1) + +{ + *param_1 = &PTR_FUN_000347d0_1_00069094; + FUN_0003519e(param_1); + if (*(char *)((int)param_1 + 0x2e) != '\0') { + free((void *)param_1[0xd]); + } + free((void *)param_1[0xf]); + param_1[0xd] = 0; + param_1[0xe] = 0; + param_1[0xf] = 0; + param_1[0x10] = 0; + *param_1 = &PTR_FUN_00035128_1_000690ec; + std::locale::~locale((locale *)(param_1 + 7)); + return param_1; +} + + + +### FUNC FUN_00034840 @ 00034840 + +void FUN_00034840(undefined4 *param_1) + +{ + *param_1 = &PTR_FUN_000347d0_1_00069094; + FUN_0003519e(param_1); + if (*(char *)((int)param_1 + 0x2e) != '\0') { + free((void *)param_1[0xd]); + } + free((void *)param_1[0xf]); + param_1[0xd] = 0; + param_1[0xe] = 0; + param_1[0xf] = 0; + param_1[0x10] = 0; + *param_1 = &PTR_FUN_00035128_1_000690ec; + std::locale::~locale((locale *)(param_1 + 7)); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_000348b8 @ 000348b8 + +int FUN_000348b8(int param_1,int param_2,int param_3) + +{ + if ((((*(char *)(param_1 + 0x2f) == '\0') && (*(char *)(param_1 + 0x30) == '\0')) && + (*(char *)(param_1 + 0x31) == '\0')) && (*(int *)(param_1 + 0x34) == 0)) { + if ((param_2 == 0) && (param_3 == 0)) { + param_2 = 0; + param_3 = 1; + } + else { + if (param_2 == 0) { + return param_1; + } + if (param_3 < 1) { + return param_1; + } + } + FUN_000352a0(param_1,param_2,param_3); + } + return param_1; +} + + + +### FUNC FUN_000348fc @ 000348fc + +int * FUN_000348fc(int *param_1,int param_2,int param_3,int param_4) + +{ + int iVar1; + int *piVar2; + int iVar3; + char *pcVar4; + _Filebuf_base *p_Var5; + int *local_18; + + if (*(char *)(param_2 + 0x28) == '\0') { + *param_1 = -1; + param_1[1] = 0; + return param_1; + } + if ((param_3 != 0) && (*(char *)(param_2 + 0x2c) == '\0')) { + *param_1 = -1; + param_1[1] = 0; + return param_1 + 2; + } + iVar1 = FUN_00035322(param_2,param_4 != 2 || param_3 != 0); + if (iVar1 != 0) { + if ((param_4 == 4) || (param_4 == 1)) { + iVar1 = std::_Filebuf_base::_M_seek + ((_Filebuf_base *)(param_2 + 0x20),*(int *)(param_2 + 0x6c) * param_3, + param_4); + piVar2 = (int *)(iVar1 + 1); + if (piVar2 != (int *)0x0) { + if (*(char *)(param_2 + 0x2f) != '\0') { + if (*(void **)(param_2 + 0x54) != (void *)0x0) { + std::_Filebuf_base::_M_unmap + ((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54), + *(long *)(param_2 + 0x58)); + *(undefined4 *)(param_2 + 0x54) = 0; + *(undefined4 *)(param_2 + 0x58) = 0; + } + *(undefined1 *)(param_2 + 0x2f) = 0; + } + piVar2 = (int *)0x0; + *(undefined4 *)(param_2 + 4) = 0; + *(undefined4 *)(param_2 + 8) = 0; + *(undefined4 *)(param_2 + 0xc) = 0; + *(undefined4 *)(param_2 + 0x10) = 0; + *(undefined4 *)(param_2 + 0x14) = 0; + *(undefined4 *)(param_2 + 0x18) = 0; + *(undefined1 *)(param_2 + 0x32) = 0; + *(undefined1 *)(param_2 + 0x31) = 0; + *(undefined1 *)(param_2 + 0x30) = 0; + *(undefined1 *)(param_2 + 0x2f) = 0; + } +LAB_000349b4: + *param_1 = iVar1; + param_1[1] = 0; + return piVar2; + } + pcVar4 = (char *)(param_2 + 0x2f); + if (*(char *)(param_2 + 0x2f) == '\0') { + iVar1 = std::_Filebuf_base::_M_seek + ((_Filebuf_base *)(param_2 + 0x20),*(int *)(param_2 + 0x6c) * param_3, + param_4); + piVar2 = (int *)(iVar1 + 1); + if (piVar2 != (int *)0x0) { + if (*pcVar4 != '\0') { + if (*(void **)(param_2 + 0x54) != (void *)0x0) { + std::_Filebuf_base::_M_unmap + ((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54), + *(long *)(param_2 + 0x58)); + *(undefined4 *)(param_2 + 0x54) = 0; + *(undefined4 *)(param_2 + 0x58) = 0; + } + *pcVar4 = '\0'; + } + piVar2 = (int *)0x0; + *(undefined4 *)(param_2 + 4) = 0; + *(undefined4 *)(param_2 + 8) = 0; + *(undefined4 *)(param_2 + 0xc) = 0; + *(undefined4 *)(param_2 + 0x10) = 0; + *(undefined4 *)(param_2 + 0x14) = 0; + *(undefined4 *)(param_2 + 0x18) = 0; + *(undefined1 *)(param_2 + 0x32) = 0; + *(undefined1 *)(param_2 + 0x31) = 0; + *(undefined1 *)(param_2 + 0x30) = 0; + *pcVar4 = '\0'; + } + goto LAB_000349b4; + } + if (*(int *)(param_2 + 0x54) != 0) { + iVar1 = (*(int *)(param_2 + 0x54) - *(int *)(param_2 + 8)) + *(int *)(param_2 + 0x58); + p_Var5 = (_Filebuf_base *)(param_2 + 0x20); + if (param_3 != 0) { + iVar1 = std::_Filebuf_base::_M_seek(p_Var5,param_3 - iVar1,2); + piVar2 = (int *)(iVar1 + 1); + if (piVar2 != (int *)0x0) { + if (*pcVar4 != '\0') { + if (*(void **)(param_2 + 0x54) != (void *)0x0) { + std::_Filebuf_base::_M_unmap + (p_Var5,*(void **)(param_2 + 0x54),*(long *)(param_2 + 0x58)); + *(undefined4 *)(param_2 + 0x54) = 0; + *(undefined4 *)(param_2 + 0x58) = 0; + } + *pcVar4 = '\0'; + } + piVar2 = (int *)0x0; + *(undefined4 *)(param_2 + 4) = 0; + *(undefined4 *)(param_2 + 8) = 0; + *(undefined4 *)(param_2 + 0xc) = 0; + *(undefined4 *)(param_2 + 0x10) = 0; + *(undefined4 *)(param_2 + 0x14) = 0; + *(undefined4 *)(param_2 + 0x18) = 0; + *(undefined1 *)(param_2 + 0x32) = 0; + *(undefined1 *)(param_2 + 0x31) = 0; + *(undefined1 *)(param_2 + 0x30) = 0; + *pcVar4 = '\0'; + } + *param_1 = iVar1; + param_1[1] = 0; + return piVar2; + } + iVar3 = std::_Filebuf_base::_M_seek(p_Var5,0,2); + piVar2 = (int *)(iVar3 - iVar1); +LAB_00034b1e: + *param_1 = (int)piVar2; + param_1[1] = 0; + return piVar2; + } + if (*(char *)(param_2 + 0x2c) == '\0') { + local_18 = *(int **)(param_2 + 0x4c); + iVar1 = (**(code **)(**(int **)(param_2 + 0x68) + 0x1c)) + (*(int **)(param_2 + 0x68),&local_18,*(undefined4 *)(param_2 + 0x3c), + *(undefined4 *)(param_2 + 0x44), + *(int *)(param_2 + 8) - *(int *)(param_2 + 4)); + iVar3 = std::_Filebuf_base::_M_seek((_Filebuf_base *)(param_2 + 0x20),0,2); + piVar2 = local_18; + if ((iVar3 != -1) && + (iVar1 = ((iVar3 + iVar1) - *(int *)(param_2 + 0x48)) + *(int *)(param_2 + 0x3c), + -1 < iVar1)) { + if (param_3 != 0) { + if (*pcVar4 != '\0') { + if (*(void **)(param_2 + 0x54) != (void *)0x0) { + std::_Filebuf_base::_M_unmap + ((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54), + *(long *)(param_2 + 0x58)); + *(undefined4 *)(param_2 + 0x54) = 0; + *(undefined4 *)(param_2 + 0x58) = 0; + } + *pcVar4 = '\0'; + } + *(undefined4 *)(param_2 + 4) = 0; + *(undefined4 *)(param_2 + 8) = 0; + *(undefined4 *)(param_2 + 0xc) = 0; + *(undefined4 *)(param_2 + 0x10) = 0; + *(undefined4 *)(param_2 + 0x14) = 0; + *(undefined4 *)(param_2 + 0x18) = 0; + *(undefined1 *)(param_2 + 0x32) = 0; + *(undefined1 *)(param_2 + 0x31) = 0; + *(undefined1 *)(param_2 + 0x30) = 0; + *pcVar4 = '\0'; + *param_1 = iVar1; + param_1[1] = (int)piVar2; + return piVar2; + } + *param_1 = iVar1; + goto LAB_00034bca; + } + } + else { + iVar1 = (*(int *)(param_2 + 8) - *(int *)(param_2 + 4)) * *(int *)(param_2 + 0x6c); + iVar3 = *(int *)(param_2 + 0x48) - *(int *)(param_2 + 0x3c); + if (iVar1 - iVar3 == 0 || iVar1 < iVar3) { + iVar1 = *(int *)(param_2 + 0x48) - (*(int *)(param_2 + 0x3c) + iVar1); + p_Var5 = (_Filebuf_base *)(param_2 + 0x20); + if (param_3 != 0) { + piVar2 = (int *)std::_Filebuf_base::_M_seek(p_Var5,param_3 - iVar1,2); + if (piVar2 != (int *)0xffffffff) { + if (*pcVar4 != '\0') { + if (*(void **)(param_2 + 0x54) != (void *)0x0) { + std::_Filebuf_base::_M_unmap + (p_Var5,*(void **)(param_2 + 0x54),*(long *)(param_2 + 0x58)); + *(undefined4 *)(param_2 + 0x54) = 0; + *(undefined4 *)(param_2 + 0x58) = 0; + } + *pcVar4 = '\0'; + } + *(undefined4 *)(param_2 + 4) = 0; + *(undefined4 *)(param_2 + 8) = 0; + *(undefined4 *)(param_2 + 0xc) = 0; + *(undefined4 *)(param_2 + 0x10) = 0; + *(undefined4 *)(param_2 + 0x14) = 0; + *(undefined4 *)(param_2 + 0x18) = 0; + *(undefined1 *)(param_2 + 0x32) = 0; + *(undefined1 *)(param_2 + 0x31) = 0; + *(undefined1 *)(param_2 + 0x30) = 0; + *pcVar4 = '\0'; + } + *param_1 = (int)piVar2; + param_1[1] = 0; + return piVar2; + } + iVar3 = std::_Filebuf_base::_M_seek(p_Var5,0,2); + piVar2 = (int *)(iVar3 - iVar1); + goto LAB_00034b1e; + } + } + } + *param_1 = -1; +LAB_00034bca: + param_1[1] = 0; + return param_1; +} + + + +### FUNC FUN_00034bea @ 00034bea + +int * FUN_00034bea(int *param_1,int param_2,int param_3,int param_4) + +{ + int iVar1; + int iVar2; + int iVar3; + + if (((*(char *)(param_2 + 0x28) == '\0') || (iVar1 = FUN_00035322(param_2,1), param_3 == -1)) || + (iVar1 != 1)) { + iVar3 = 0; + iVar1 = -1; + } + else { + iVar2 = std::_Filebuf_base::_M_seek((_Filebuf_base *)(param_2 + 0x20),param_3,1); + iVar1 = -1; + iVar3 = 0; + if (iVar2 != -1) { + *(int *)(param_2 + 0x4c) = param_4; + if (*(char *)(param_2 + 0x2f) != '\0') { + if (*(void **)(param_2 + 0x54) != (void *)0x0) { + std::_Filebuf_base::_M_unmap + ((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54), + *(long *)(param_2 + 0x58)); + *(undefined4 *)(param_2 + 0x54) = 0; + *(undefined4 *)(param_2 + 0x58) = 0; + } + *(undefined1 *)(param_2 + 0x2f) = 0; + } + *(undefined4 *)(param_2 + 4) = 0; + *(undefined4 *)(param_2 + 8) = 0; + *(undefined4 *)(param_2 + 0xc) = 0; + *(undefined4 *)(param_2 + 0x10) = 0; + *(undefined4 *)(param_2 + 0x14) = 0; + *(undefined4 *)(param_2 + 0x18) = 0; + *(undefined1 *)(param_2 + 0x32) = 0; + *(undefined1 *)(param_2 + 0x31) = 0; + *(undefined1 *)(param_2 + 0x30) = 0; + *(undefined1 *)(param_2 + 0x2f) = 0; + iVar1 = param_3; + iVar3 = param_4; + } + } + *param_1 = iVar1; + param_1[1] = iVar3; + return param_1 + 2; +} + + + +### FUNC FUN_00034c8e @ 00034c8e + +undefined4 FUN_00034c8e(int *param_1) + +{ + int iVar1; + undefined4 uVar2; + + uVar2 = 0; + if ((char)param_1[0xc] != '\0') { + uVar2 = 0; + iVar1 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff); + if (iVar1 == -1) { + uVar2 = 0xffffffff; + } + } + return uVar2; +} + + + +### FUNC FUN_00034cb0 @ 00034cb0 + +int FUN_00034cb0(int param_1) + +{ + int iVar1; + int iVar2; + undefined4 uStack_1c; + + uStack_1c = -1; + if (((*(char *)(param_1 + 0x28) != '\0') && (*(char *)(param_1 + 0x30) == '\0')) && + (*(char *)(param_1 + 0x31) == '\0')) { + if (*(char *)(param_1 + 0x32) != '\0') { + return *(int *)(param_1 + 0xc) - *(int *)(param_1 + 8); + } + uStack_1c = 0; + if (*(char *)(param_1 + 0x2c) != '\0') { + iVar1 = std::_Filebuf_base::_M_seek((_Filebuf_base *)(param_1 + 0x20),0,2); + iVar2 = std::_Filebuf_base::_M_file_size((_Filebuf_base *)(param_1 + 0x20)); + uStack_1c = iVar2 - iVar1; + if (iVar2 <= iVar1) { + uStack_1c = 0; + } + if (iVar1 < 0) { + return 0; + } + } + } + return uStack_1c; +} + + + +### FUNC FUN_00034d20 @ 00034d20 + +int FUN_00034d20(int *param_1,undefined1 *param_2,int param_3) + +{ + uint uVar1; + int iVar2; + uint uVar3; + int iVar4; + uint uVar5; + + iVar4 = 0; + if (0 < param_3) { + iVar4 = 0; + do { + uVar3 = param_1[2]; + if (uVar3 < (uint)param_1[3]) { + uVar1 = param_1[3] - uVar3; + uVar5 = param_3 - iVar4; + if (uVar1 <= (uint)(param_3 - iVar4)) { + uVar5 = uVar1; + } + if (uVar5 != 0) { + __aeabi_memcpy(param_2,uVar3,uVar5); + uVar3 = param_1[2]; + } + param_1[2] = uVar3 + uVar5; + param_2 = param_2 + uVar5; + iVar4 = uVar5 + iVar4; + } + else { + iVar2 = (**(code **)(*param_1 + 0x24))(param_1); + if (iVar2 == -1) { + return iVar4; + } + *param_2 = (char)iVar2; + param_2 = param_2 + 1; + iVar4 = iVar4 + 1; + } + } while (iVar4 < param_3); + } + return iVar4; +} + + + +### FUNC FUN_00034d90 @ 00034d90 + +void FUN_00034d90(filebuf *param_1) + +{ + std::_Underflow>::_M_doit(param_1); + return; +} + + + +### FUNC FUN_00034d9a @ 00034d9a + +uint FUN_00034d9a(int *param_1) + +{ + int iVar1; + uint uVar2; + byte *pbVar3; + + iVar1 = (**(code **)(*param_1 + 0x20))(param_1); + uVar2 = 0xffffffff; + if (iVar1 != -1) { + pbVar3 = (byte *)param_1[2]; + param_1[2] = (int)(pbVar3 + 1); + uVar2 = (uint)*pbVar3; + } + return uVar2; +} + + + +### FUNC FUN_00034dbc @ 00034dbc + +uint FUN_00034dbc(int param_1,uint param_2) + +{ + int iVar1; + int iVar2; + byte *pbVar3; + + if (*(char *)(param_1 + 0x2f) == '\0') { + return 0xffffffff; + } + iVar2 = *(int *)(param_1 + 4); + iVar1 = *(int *)(param_1 + 8); + if (iVar1 == iVar2) { + if (param_2 == 0xffffffff) { + return 0xffffffff; + } + } + else { + if (param_2 == 0xffffffff) { + *(int *)(param_1 + 8) = iVar1 + -1; + param_2 = (uint)*(byte *)(iVar1 + -1); +LAB_00034e30: + return param_2 & 0xff; + } + pbVar3 = (byte *)(iVar1 + -1); + if (((uint)*(byte *)(iVar1 + -1) == (param_2 & 0xff)) || (*(int *)(param_1 + 0x54) == 0)) { + *(byte **)(param_1 + 8) = pbVar3; + if ((uint)*pbVar3 == (param_2 & 0xff)) goto LAB_00034e30; + goto LAB_00034e50; + } + } + if (*(char *)(param_1 + 0x32) == '\0') { + *(int *)(param_1 + 0x5c) = iVar2; + *(int *)(param_1 + 0x60) = iVar1; + *(undefined4 *)(param_1 + 100) = *(undefined4 *)(param_1 + 0xc); + pbVar3 = (byte *)(param_1 + 0x7b); + *(byte **)(param_1 + 4) = pbVar3; + *(byte **)(param_1 + 8) = pbVar3; + *(int *)(param_1 + 0xc) = param_1 + 0x7c; + *(undefined1 *)(param_1 + 0x32) = 1; + } + else { + if (iVar2 == param_1 + 0x74) { + return 0xffffffff; + } + pbVar3 = (byte *)(*(int *)(param_1 + 0xc) + -1); + *(byte **)(param_1 + 4) = pbVar3; + *(byte **)(param_1 + 8) = pbVar3; + *(int *)(param_1 + 0xc) = param_1 + 0x7c; + } +LAB_00034e50: + *pbVar3 = (byte)param_2; + return param_2; +} + + + +### FUNC FUN_00034e58 @ 00034e58 + +int FUN_00034e58(int *param_1,undefined1 *param_2,int param_3) + +{ + uint uVar1; + int iVar2; + uint uVar3; + int iVar4; + uint uVar5; + + iVar4 = 0; + if (0 < param_3) { + iVar4 = 0; + do { + while( true ) { + uVar1 = param_1[5]; + if ((uint)param_1[6] <= uVar1) break; + uVar3 = param_1[6] - uVar1; + uVar5 = param_3 - iVar4; + if (uVar3 <= (uint)(param_3 - iVar4)) { + uVar5 = uVar3; + } + if (uVar5 != 0) { + __aeabi_memcpy(uVar1,param_2,uVar5); + uVar1 = param_1[5]; + } + param_1[5] = uVar1 + uVar5; + param_2 = param_2 + uVar5; + iVar4 = uVar5 + iVar4; + if (param_3 <= iVar4) { + return iVar4; + } + } + iVar2 = (**(code **)(*param_1 + 0x34))(param_1,*param_2); + if (iVar2 == -1) { + return iVar4; + } + param_2 = param_2 + 1; + iVar4 = iVar4 + 1; + } while (iVar4 < param_3); + } + return iVar4; +} + + + +### FUNC FUN_00034ed0 @ 00034ed0 + +int FUN_00034ed0(int *param_1,undefined4 param_2,int param_3) + +{ + uint uVar1; + int iVar2; + uint uVar3; + int iVar4; + uint uVar5; + + iVar4 = 0; + if (0 < param_3) { + iVar4 = 0; + do { + while( true ) { + uVar1 = param_1[5]; + if (uVar1 < (uint)param_1[6]) break; + iVar2 = (**(code **)(*param_1 + 0x34))(param_1,param_2); + if (iVar2 == -1) { + return iVar4; + } + iVar4 = iVar4 + 1; + if (param_3 <= iVar4) { + return iVar4; + } + } + uVar3 = param_1[6] - uVar1; + uVar5 = param_3 - iVar4; + if (uVar3 <= (uint)(param_3 - iVar4)) { + uVar5 = uVar3; + } + __aeabi_memset(uVar1,uVar5,param_2); + param_1[5] = param_1[5] + uVar5; + iVar4 = uVar5 + iVar4; + } while (iVar4 < param_3); + } + return iVar4; +} + + + +### FUNC FUN_00034f2c @ 00034f2c + +int FUN_00034f2c(int param_1,int param_2) + +{ + int iVar1; + uint uVar2; + char *pcVar3; + int extraout_r1; + undefined1 *puVar4; + char *pcVar5; + char *local_20; + int local_1c; + char *local_18; + + puVar4 = (undefined1 *)(param_1 + 0x30); + if (*(char *)(param_1 + 0x30) == '\0') { + if (*(char *)(param_1 + 0x28) == '\0') { + return -1; + } + uVar2 = *(uint *)(param_1 + 0x24); + if ((uVar2 & 0x10) == 0) { + return -1; + } + if (*(char *)(param_1 + 0x2f) != '\0') { + return -1; + } + if (*(char *)(param_1 + 0x31) != '\0') { + return -1; + } + if (*(int *)(param_1 + 0x34) == 0) { + iVar1 = std::_Filebuf_base::_M_page_size + 0xfff; + __aeabi_uidivmod(iVar1); + iVar1 = FUN_000352a0(param_1,0,iVar1 - extraout_r1); + if (iVar1 != 1) { + return -1; + } + uVar2 = *(uint *)(param_1 + 0x24); + } + if ((uVar2 & 1) != 0) { + *(undefined4 *)(param_1 + 0x4c) = 0; + } + pcVar5 = *(char **)(param_1 + 0x34); + iVar1 = *(int *)(param_1 + 0x38); + *(char **)(param_1 + 0x10) = pcVar5; + *(char **)(param_1 + 0x14) = pcVar5; + *(int *)(param_1 + 0x18) = iVar1 + -1; + *puVar4 = 1; + local_20 = pcVar5; + } + else { + pcVar5 = *(char **)(param_1 + 0x34); + iVar1 = *(int *)(param_1 + 0x38); + local_20 = *(char **)(param_1 + 0x14); + } + *(char **)(param_1 + 0x10) = pcVar5; + *(char **)(param_1 + 0x14) = pcVar5; + *(int *)(param_1 + 0x18) = iVar1 + -1; + if (param_2 != -1) { + *local_20 = (char)param_2; + local_20 = local_20 + 1; + } + if (pcVar5 != local_20) { + do { + local_1c = *(int *)(param_1 + 0x3c); + local_18 = pcVar5; + iVar1 = (**(code **)(**(int **)(param_1 + 0x68) + 8)) + (*(int **)(param_1 + 0x68),param_1 + 0x4c,pcVar5,local_20,&local_18,local_1c + ,*(undefined4 *)(param_1 + 0x40),&local_1c); + if (iVar1 == 2) { +LAB_000350a2: + *puVar4 = 0; + *(undefined1 *)(param_1 + 0x31) = 1; + *(undefined1 *)(param_1 + 0x2f) = 0; + *(undefined4 *)(param_1 + 0x10) = 0; + *(undefined4 *)(param_1 + 0x14) = 0; + *(undefined4 *)(param_1 + 0x18) = 0; + return -1; + } + if (iVar1 == 3) { + iVar1 = std::_Filebuf_base::_M_write + ((_Filebuf_base *)(param_1 + 0x20),pcVar5,(int)local_20 - (int)pcVar5); + if (iVar1 != 1) { +LAB_000350d6: + *puVar4 = 0; + *(undefined1 *)(param_1 + 0x31) = 1; + *(undefined1 *)(param_1 + 0x2f) = 0; + *(undefined4 *)(param_1 + 0x10) = 0; + *(undefined4 *)(param_1 + 0x14) = 0; + *(undefined4 *)(param_1 + 0x18) = 0; + return -1; + } + break; + } + if ((local_18 != local_20) || + (pcVar3 = *(char **)(param_1 + 0x3c), + local_1c - (int)pcVar3 != ((int)local_20 - (int)pcVar5) * *(int *)(param_1 + 0x6c))) { + if ((*(char *)(param_1 + 0x2c) != '\0') || (local_18 == pcVar5)) goto LAB_000350a2; + pcVar3 = *(char **)(param_1 + 0x3c); + } + iVar1 = std::_Filebuf_base::_M_write + ((_Filebuf_base *)(param_1 + 0x20),pcVar3,local_1c - (int)pcVar3); + if (iVar1 != 1) goto LAB_000350d6; + pcVar5 = local_18; + } while (local_18 != local_20); + } + iVar1 = 0; + if (param_2 != -1) { + iVar1 = param_2; + } + return iVar1; +} + + + +### FUNC FUN_00035100 @ 00035100 + +void FUN_00035100(int param_1,undefined4 param_2) + +{ + if (((*(char *)(param_1 + 0x2f) == '\0') && (*(char *)(param_1 + 0x30) == '\0')) && + (*(char *)(param_1 + 0x31) == '\0')) { + FUN_00034738(param_1,param_2,1); + return; + } + return; +} + + + +### FUNC FUN_00035128 @ 00035128 + +undefined4 * FUN_00035128(undefined4 *param_1) + +{ + *param_1 = &PTR_FUN_00035128_1_000690ec; + std::locale::~locale((locale *)(param_1 + 7)); + return param_1; +} + + + +### FUNC FUN_00035148 @ 00035148 + +void FUN_00035148(undefined4 *param_1) + +{ + *param_1 = &PTR_FUN_00035128_1_000690ec; + std::locale::~locale((locale *)(param_1 + 7)); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_0003519e @ 0003519e + +int * FUN_0003519e(int *param_1) + +{ + char cVar1; + bool bVar2; + bool bVar3; + int iVar4; + int iVar5; + char *pcVar6; + char *local_18; + + cVar1 = (char)param_1[10]; + if ((char)param_1[0xc] == '\0') { + bVar2 = cVar1 != '\0'; + if (*(char *)((int)param_1 + 0x2f) != '\0') { + if ((void *)param_1[0x15] != (void *)0x0) { + std::_Filebuf_base::_M_unmap + ((_Filebuf_base *)(param_1 + 8),(void *)param_1[0x15],param_1[0x16]); + param_1[0x15] = 0; + param_1[0x16] = 0; + } + *(undefined1 *)((int)param_1 + 0x2f) = 0; + } + } + else { + bVar2 = false; + if (cVar1 != '\0') { + iVar4 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff); + bVar2 = false; + if (((iVar4 != -1) && (bVar2 = true, (char)param_1[0xc] != '\0')) && + ((char)param_1[0xb] == '\0')) { + bVar3 = true; + while( true ) { + local_18 = (char *)param_1[0xf]; + iVar4 = (**(code **)(*(int *)param_1[0x1a] + 0x10)) + ((int *)param_1[0x1a],param_1 + 0x13,local_18,param_1[0x10],&local_18); + bVar2 = bVar3; + if (((iVar4 == 3) || ((pcVar6 = (char *)param_1[0xf], iVar4 == 0 && (local_18 == pcVar6))) + ) || (bVar2 = false, iVar4 == 2)) break; + iVar5 = std::_Filebuf_base::_M_write + ((_Filebuf_base *)(param_1 + 8),pcVar6,(int)local_18 - (int)pcVar6); + if ((iVar5 != 1) || (bVar2 = bVar3, iVar4 != 1)) break; + } + } + } + } + iVar4 = std::_Filebuf_base::_M_close((_Filebuf_base *)(param_1 + 8)); + *(undefined1 *)((int)param_1 + 0x32) = 0; + *(undefined1 *)((int)param_1 + 0x31) = 0; + *(undefined1 *)(param_1 + 0xc) = 0; + *(undefined1 *)((int)param_1 + 0x2f) = 0; + param_1[1] = 0; + param_1[2] = 0; + param_1[3] = 0; + param_1[4] = 0; + param_1[5] = 0; + param_1[6] = 0; + __aeabi_memclr4(param_1 + 0x11,0x24); + if (iVar4 == 0) { + param_1 = (int *)0x0; + } + if (!bVar2) { + param_1 = (int *)0x0; + } + return param_1; +} + + + +### FUNC FUN_000352a0 @ 000352a0 + +undefined4 FUN_000352a0(int param_1,int param_2,size_t param_3) + +{ + size_t __size; + void *pvVar1; + undefined4 uVar2; + int iVar3; + undefined1 uVar4; + size_t sVar5; + + if (param_2 == 0) { + pvVar1 = malloc(param_3); + *(void **)(param_1 + 0x34) = pvVar1; + uVar4 = 1; + if (pvVar1 == (void *)0x0) { + return 0; + } + } + else { + *(int *)(param_1 + 0x34) = param_2; + uVar4 = 0; + } + *(undefined1 *)(param_1 + 0x2e) = uVar4; + sVar5 = param_3 * *(int *)(param_1 + 0x6c); + __size = (**(code **)(**(int **)(param_1 + 0x68) + 0x20))(); + if ((int)__size <= (int)sVar5) { + __size = sVar5; + } + pvVar1 = malloc(__size); + *(void **)(param_1 + 0x3c) = pvVar1; + if (pvVar1 == (void *)0x0) { + pvVar1 = (void *)0x0; + if (*(char *)(param_1 + 0x2e) != '\0') { + free(*(void **)(param_1 + 0x34)); + pvVar1 = *(void **)(param_1 + 0x3c); + } + free(pvVar1); + iVar3 = 0; + *(undefined4 *)(param_1 + 0x34) = 0; + *(undefined4 *)(param_1 + 0x38) = 0; + *(undefined4 *)(param_1 + 0x3c) = 0; + uVar2 = 0; + } + else { + *(size_t *)(param_1 + 0x38) = *(int *)(param_1 + 0x34) + param_3; + iVar3 = (int)pvVar1 + __size; + uVar2 = 1; + } + *(int *)(param_1 + 0x40) = iVar3; + return uVar2; +} + + + +### FUNC FUN_00035322 @ 00035322 + +undefined4 FUN_00035322(int *param_1,int param_2) + +{ + int iVar1; + int iVar2; + char *pcVar3; + char *local_18; + + *(undefined1 *)((int)param_1 + 0x31) = 0; + if ((char)param_1[0xc] != '\0') { + iVar1 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff); + if (param_2 == 1) { + if (iVar1 == -1) { +LAB_000353e0: + *(char *)(param_1 + 0xc) = '\0'; + *(undefined1 *)((int)param_1 + 0x31) = 1; + param_1[4] = 0; + param_1[5] = 0; + param_1[6] = 0; + return 0; + } + if (((char)param_1[0xc] != '\0') && ((char)param_1[0xb] == '\0')) { + do { + local_18 = (char *)param_1[0xf]; + iVar1 = (**(code **)(*(int *)param_1[0x1a] + 0x10)) + ((int *)param_1[0x1a],param_1 + 0x13,local_18,param_1[0x10],&local_18); + if ((iVar1 == 3) || ((pcVar3 = (char *)param_1[0xf], iVar1 == 0 && (local_18 == pcVar3)))) + break; + if ((iVar1 == 2) || + (iVar2 = std::_Filebuf_base::_M_write + ((_Filebuf_base *)(param_1 + 8),pcVar3,(int)local_18 - (int)pcVar3), + iVar2 != 1)) goto LAB_000353e0; + } while (iVar1 == 1); + } + } + else if (iVar1 == -1) goto LAB_000353e0; + } + if ((*(char *)((int)param_1 + 0x2f) != '\0') && (*(char *)((int)param_1 + 0x32) != '\0')) { + param_1[1] = param_1[0x17]; + param_1[2] = param_1[0x18]; + param_1[3] = param_1[0x19]; + *(undefined1 *)((int)param_1 + 0x32) = 0; + } + return 1; +} + + + +### FUNC FUN_000353f8 @ 000353f8 + +void FUN_000353f8(int param_1,int param_2) + +{ + uint uVar1; + locale alStack_1c [4]; + locale alStack_18 [4]; + + *(int *)(param_1 + 0x48) = param_2; + uVar1 = (uint)(param_2 == 0); + *(uint *)(param_1 + 8) = uVar1; + if ((*(uint *)(param_1 + 0x14) & uVar1) == 0) { + std::locale::locale(alStack_1c); + FUN_000354dc(alStack_18,param_1,alStack_1c); + std::locale::~locale(alStack_18); + std::locale::~locale(alStack_1c); + *(undefined1 *)(param_1 + 0x44) = 0x20; + *(undefined4 *)(param_1 + 0x14) = 0; + *(undefined4 *)(param_1 + 0x4c) = 0; + *(uint *)(param_1 + 8) = uVar1; + *(undefined4 *)(param_1 + 4) = 0x1008; + *(undefined4 *)(param_1 + 0x1c) = 0; + *(undefined4 *)(param_1 + 0x18) = 6; + return; + } + /* WARNING: Subroutine does not return */ + std::ios_base::_M_throw_failure(); +} + + + +### FUNC FUN_00035468 @ 00035468 + +int FUN_00035468(int param_1) + +{ + std::ios_base::~ios_base((ios_base *)(param_1 + 8)); + return param_1; +} + + + +### FUNC FUN_00035478 @ 00035478 + +void FUN_00035478(void *param_1) + +{ + std::ios_base::~ios_base((ios_base *)((int)param_1 + 8)); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_000354b0 @ 000354b0 + +void FUN_000354b0(int *param_1) + +{ + void *pvVar1; + + pvVar1 = (void *)((int)param_1 + *(int *)(*param_1 + -0xc)); + std::ios_base::~ios_base((ios_base *)((int)pvVar1 + 8)); + operator_delete(pvVar1); + return; +} + + + +### FUNC FUN_000354dc @ 000354dc + +void FUN_000354dc(locale *param_1,int param_2,locale *param_3) + +{ + undefined4 uVar1; + int *piVar2; + locale alStack_18 [4]; + + std::ios_base::imbue(param_1); + piVar2 = *(int **)(param_2 + 0x48); + if (piVar2 != (int *)0x0) { + (**(code **)(*piVar2 + 0x38))(piVar2,param_3); + std::locale::locale(alStack_18,(locale *)(piVar2 + 7)); + std::locale::operator=((locale *)(piVar2 + 7),param_3); + std::locale::~locale(alStack_18); + } + uVar1 = std::locale::_M_use_facet(param_3,(id *)&std::ctype::id); + *(undefined4 *)(param_2 + 0x40) = uVar1; + return; +} + + + +### FUNC FUN_00035588 @ 00035588 + +int FUN_00035588(int param_1) + +{ + std::ios_base::~ios_base((ios_base *)(param_1 + 4)); + return param_1; +} + + + +### FUNC FUN_00035598 @ 00035598 + +void FUN_00035598(void *param_1) + +{ + std::ios_base::~ios_base((ios_base *)((int)param_1 + 4)); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_000355d0 @ 000355d0 + +void FUN_000355d0(int *param_1) + +{ + void *pvVar1; + + pvVar1 = (void *)((int)param_1 + *(int *)(*param_1 + -0xc)); + std::ios_base::~ios_base((ios_base *)((int)pvVar1 + 4)); + operator_delete(pvVar1); + return; +} + + + +### FUNC FUN_000355fc @ 000355fc + +void FUN_000355fc(int param_1,int param_2) + +{ + undefined4 uVar1; + uint uVar2; + locale alStack_1c [4]; + locale alStack_18 [4]; + + *(int *)(param_1 + 0x48) = param_2; + uVar2 = (uint)(param_2 == 0); + *(uint *)(param_1 + 8) = uVar2; + if ((*(uint *)(param_1 + 0x14) & uVar2) == 0) { + std::locale::locale(alStack_1c); + FUN_000356e4(alStack_18,param_1,alStack_1c); + std::locale::~locale(alStack_18); + std::locale::~locale(alStack_1c); + *(undefined4 *)(param_1 + 0x14) = 0; + *(undefined4 *)(param_1 + 0x4c) = 0; + *(uint *)(param_1 + 8) = uVar2; + *(undefined4 *)(param_1 + 4) = 0x1008; + *(undefined4 *)(param_1 + 0x1c) = 0; + *(undefined4 *)(param_1 + 0x18) = 6; + uVar1 = (**(code **)(**(int **)(param_1 + 0x40) + 0x28))(*(int **)(param_1 + 0x40),0x20); + *(undefined4 *)(param_1 + 0x44) = uVar1; + return; + } + /* WARNING: Subroutine does not return */ + std::ios_base::_M_throw_failure(); +} + + + +### FUNC FUN_00035670 @ 00035670 + +int FUN_00035670(int param_1) + +{ + std::ios_base::~ios_base((ios_base *)(param_1 + 8)); + return param_1; +} + + + +### FUNC FUN_00035680 @ 00035680 + +void FUN_00035680(void *param_1) + +{ + std::ios_base::~ios_base((ios_base *)((int)param_1 + 8)); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_000356b8 @ 000356b8 + +void FUN_000356b8(int *param_1) + +{ + void *pvVar1; + + pvVar1 = (void *)((int)param_1 + *(int *)(*param_1 + -0xc)); + std::ios_base::~ios_base((ios_base *)((int)pvVar1 + 8)); + operator_delete(pvVar1); + return; +} + + + +### FUNC FUN_000356e4 @ 000356e4 + +void FUN_000356e4(locale *param_1,int param_2,locale *param_3) + +{ + undefined4 uVar1; + int *piVar2; + locale alStack_18 [4]; + + std::ios_base::imbue(param_1); + piVar2 = *(int **)(param_2 + 0x48); + if (piVar2 != (int *)0x0) { + (**(code **)(*piVar2 + 0x38))(piVar2,param_3); + std::locale::locale(alStack_18,(locale *)(piVar2 + 7)); + std::locale::operator=((locale *)(piVar2 + 7),param_3); + std::locale::~locale(alStack_18); + } + uVar1 = std::locale::_M_use_facet(param_3,(id *)&std::ctype::id); + *(undefined4 *)(param_2 + 0x40) = uVar1; + return; +} + + + +### FUNC FUN_00035790 @ 00035790 + +int FUN_00035790(int param_1) + +{ + std::ios_base::~ios_base((ios_base *)(param_1 + 4)); + return param_1; +} + + + +### FUNC FUN_000357a0 @ 000357a0 + +void FUN_000357a0(void *param_1) + +{ + std::ios_base::~ios_base((ios_base *)((int)param_1 + 4)); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_000357d8 @ 000357d8 + +void FUN_000357d8(int *param_1) + +{ + void *pvVar1; + + pvVar1 = (void *)((int)param_1 + *(int *)(*param_1 + -0xc)); + std::ios_base::~ios_base((ios_base *)((int)pvVar1 + 4)); + operator_delete(pvVar1); + return; +} + + + +### FUNC ~facet @ 00035804 + +/* std::locale::facet::~facet() */ + +facet * __thiscall std::locale::facet::~facet(facet *this) + +{ + pthread_mutex_destroy((pthread_mutex_t *)(this + 8)); + return this; +} + + + +### FUNC ~facet @ 00035814 + +/* std::locale::facet::~facet() */ + +void __thiscall std::locale::facet::~facet(facet *this) + +{ + pthread_mutex_destroy((pthread_mutex_t *)(this + 8)); + operator_delete(this); + return; +} + + + +### FUNC _M_throw_on_null_name @ 00035838 + +/* std::locale::_M_throw_on_null_name() */ + +void std::locale::_M_throw_on_null_name(void) + +{ + __Named_exception *this; + undefined1 auStack_30 [4]; + string asStack_2c [24]; + + this = (__Named_exception *)FUN_00030824(0x108); + FUN_00031c38(asStack_2c,&LAB_000358b8,auStack_30); + __Named_exception::__Named_exception(this,asStack_2c); + *(undefined ***)this = &PTR____Named_exception_00068ec0; + /* WARNING: Subroutine does not return */ + FUN_000309e0(this,&runtime_error::typeinfo,__Named_exception::~__Named_exception); +} + + + +### FUNC _M_throw_on_combine_error @ 000358e0 + +/* std::locale::_M_throw_on_combine_error(std::string const&) */ + +void std::locale::_M_throw_on_combine_error(string *param_1) + +{ + size_t sVar1; + __Named_exception *this; + char *__s; + undefined1 auStack_48 [4]; + string asStack_44 [24]; + undefined1 auStack_2c [20]; + undefined4 local_18; + + FUN_00031c38(auStack_2c,&LAB_000359d4,asStack_44); + FUN_00037294(auStack_2c,&LAB_000359ec,&LAB_000359f0); + __s = *(char **)(param_1 + 0x14); + if (__s == *(char **)(param_1 + 0x10)) { + __s = "system"; + } + sVar1 = strlen(__s); + FUN_00037294(auStack_2c,__s,__s + sVar1); + FUN_00037294(auStack_2c," locale",""); + this = (__Named_exception *)FUN_00030824(0x108); + FUN_00031c38(asStack_44,local_18,auStack_48); + __Named_exception::__Named_exception(this,asStack_44); + *(undefined ***)this = &PTR____Named_exception_00068ec0; + /* WARNING: Subroutine does not return */ + FUN_000309e0(this,&runtime_error::typeinfo,__Named_exception::~__Named_exception); +} + + + +### FUNC _M_throw_on_creation_failure @ 00035a08 + +/* std::locale::_M_throw_on_creation_failure(int, char const*, char const*) */ + +void std::locale::_M_throw_on_creation_failure(int param_1,char *param_2,char *param_3) + +{ + size_t sVar1; + undefined4 uVar2; + __Named_exception *this; + undefined1 auStack_48 [4]; + string asStack_44 [24]; + undefined1 local_2c [16]; + undefined1 *local_1c; + undefined1 *local_18; + + local_1c = local_2c; + local_2c[0] = 0; + local_18 = local_1c; + if (param_1 != 4) { + if (param_1 == 3) { + FUN_00037294(local_2c,&LAB_00035bb8,&LAB_00035bea_1); + if (*param_2 == '\0') { + param_2 = "system"; + } + sVar1 = strlen(param_2); + FUN_00037294(local_2c,param_2,param_2 + sVar1); + FUN_00037294(local_2c," locale",""); + } + else if (param_1 == 1) { + FUN_00037294(local_2c,&LAB_00035bf4,&LAB_00035c18_1); + sVar1 = strlen(param_3); + FUN_00037294(local_2c,param_3,param_3 + sVar1); + FUN_00037294(local_2c," facet category, unable to create facet for ",""); + if (*param_2 == '\0') { + param_2 = "system"; + } + sVar1 = strlen(param_2); + FUN_00037294(local_2c,param_2,param_2 + sVar1); + FUN_00037294(local_2c," locale",""); + } + else { + FUN_00037294(local_2c,&LAB_00035c28,&LAB_00035c3e_1); + sVar1 = strlen(param_3); + FUN_00037294(local_2c,param_3,param_3 + sVar1); + FUN_00037294(local_2c,&LAB_00035c40,&LAB_00035c4c); + sVar1 = strlen(param_2); + FUN_00037294(local_2c,param_2,param_2 + sVar1); + FUN_00037294(local_2c,&LAB_00035c50,&LAB_00035c50_1); + } + this = (__Named_exception *)FUN_00030824(0x108); + FUN_00031c38(asStack_44,local_18,auStack_48); + __Named_exception::__Named_exception(this,asStack_44); + *(undefined ***)this = &PTR____Named_exception_00068ec0; + /* WARNING: Subroutine does not return */ + FUN_000309e0(this,&runtime_error::typeinfo,__Named_exception::~__Named_exception); + } + FUN_00030824(4); + uVar2 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar2,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); +} + + + +### FUNC locale @ 00035c60 + +/* std::locale::locale() */ + +locale * __thiscall std::locale::locale(locale *this) + +{ + undefined4 *puVar1; + undefined4 uVar2; + + puVar1 = (undefined4 *)FUN_000395ec(); + uVar2 = _get_Locale_impl((_Locale_impl *)*puVar1); + *(undefined4 *)this = uVar2; + return this; +} + + + +### FUNC locale @ 00035c7a + +/* std::locale::locale(std::locale const&) */ + +locale * __thiscall std::locale::locale(locale *this,locale *param_1) + +{ + undefined4 uVar1; + + uVar1 = _get_Locale_impl(*(_Locale_impl **)param_1); + *(undefined4 *)this = uVar1; + return this; +} + + + +### FUNC _M_insert @ 00035c90 + +/* std::locale::_M_insert(std::locale::facet*, std::locale::id&) */ + +void __thiscall std::locale::_M_insert(locale *this,facet *param_1,id *param_2) + +{ + int iVar1; + _Locale_impl *this_00; + + if (param_1 != (facet *)0x0) { + this_00 = *(_Locale_impl **)this; + if (*(int *)param_2 == 0) { + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070d3c); + iVar1 = id::_S_max + 1; + *(int *)param_2 = id::_S_max; + id::_S_max = iVar1; + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070d3c); + } + _Locale_impl::insert(this_00,param_1,param_2); + } + return; +} + + + +### FUNC locale @ 00035ce0 + +/* std::locale::locale(std::_Locale_impl*) */ + +locale * __thiscall std::locale::locale(locale *this,_Locale_impl *param_1) + +{ + undefined4 uVar1; + + uVar1 = _get_Locale_impl(param_1); + *(undefined4 *)this = uVar1; + return this; +} + + + +### FUNC locale @ 00035cf4 + +/* WARNING: Removing unreachable block (ram,0x00035e6a) */ +/* WARNING: Restarted to delay deadcode elimination for space: stack */ +/* std::locale::locale(char const*) */ + +locale * __thiscall std::locale::locale(locale *this,char *param_1) + +{ + char *__s1; + _Locale_impl *this_00; + _Locale_name_hint *p_Var1; + int iVar2; + size_t sVar3; + undefined4 *puVar4; + undefined4 uVar5; + int iVar6; + char acStack_62c [256]; + char *local_52c; + char acStack_528 [256]; + char *local_428; + char acStack_424 [256]; + char *local_324; + char acStack_320 [256]; + char *local_220; + char acStack_21c [256]; + char *local_11c; + char acStack_118 [256]; + char *local_18; + + *(undefined4 *)this = 0; + if (param_1 == (char *)0x0) { + uVar5 = _M_throw_on_null_name(); + operator_delete(this); + FUN_000308d8(uVar5); + uVar5 = FUN_00030a44(); + operator_delete((void *)0x0); + FUN_0003094c(); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar5); + } + if ((*param_1 == 'C') && (param_1[1] == '\0')) { + puVar4 = (undefined4 *)FUN_0003956c(); + uVar5 = _get_Locale_impl((_Locale_impl *)*puVar4); + } + else { + this_00 = (_Locale_impl *)operator_new(0x2c); + _Locale_impl::_Locale_impl(this_00,id::_S_max,param_1); + local_52c = param_1; + local_428 = param_1; + local_324 = param_1; + local_11c = param_1; + local_220 = param_1; + local_18 = param_1; + p_Var1 = (_Locale_name_hint *) + _Locale_impl::insert_ctype_facets + (this_00,&local_18,acStack_118,(_Locale_name_hint *)0x0); + p_Var1 = (_Locale_name_hint *) + _Locale_impl::insert_numeric_facets(this_00,&local_11c,acStack_21c,p_Var1); + p_Var1 = (_Locale_name_hint *) + _Locale_impl::insert_time_facets(this_00,&local_220,acStack_320,p_Var1); + p_Var1 = (_Locale_name_hint *) + _Locale_impl::insert_collate_facets(this_00,&local_324,acStack_424,p_Var1); + p_Var1 = (_Locale_name_hint *) + _Locale_impl::insert_monetary_facets(this_00,&local_428,acStack_528,p_Var1); + _Locale_impl::insert_messages_facets(this_00,&local_52c,acStack_62c,p_Var1); + __s1 = local_18; + iVar2 = strcmp(local_18,local_11c); + if (((iVar2 == 0) && + (((iVar2 = strcmp(__s1,local_220), iVar2 == 0 && + (iVar2 = strcmp(__s1,local_324), iVar2 == 0)) && + (iVar2 = strcmp(__s1,local_428), iVar2 == 0)))) && + (iVar2 = strcmp(__s1,local_52c), iVar2 == 0)) { + sVar3 = strlen(__s1); + iVar6 = *(int *)(this_00 + 0x18); + iVar2 = *(int *)(this_00 + 0x1c); + if ((uint)(iVar6 - iVar2) < sVar3) { + if (iVar6 != iVar2) { + __aeabi_memmove(iVar2,__s1); + iVar6 = *(int *)(this_00 + 0x18); + iVar2 = *(int *)(this_00 + 0x1c); + } + FUN_00037294(this_00 + 8,__s1 + (iVar6 - iVar2),__s1 + sVar3); + } + else { + if (sVar3 != 0) { + __aeabi_memmove(iVar2,__s1,sVar3); + iVar6 = *(int *)(this_00 + 0x18); + iVar2 = *(int *)(this_00 + 0x1c); + } + iVar2 = iVar2 + sVar3; + if (iVar2 != iVar6) { + __aeabi_memmove(iVar2,iVar6); + *(int *)(this_00 + 0x18) = *(int *)(this_00 + 0x18) + (iVar2 - iVar6); + } + } + } + uVar5 = _get_Locale_impl(this_00); + } + *(undefined4 *)this = uVar5; + return this; +} + + + +### FUNC classic @ 00035ee4 + +/* std::locale::classic() */ + +void std::locale::classic(void) + +{ + FUN_0003956c(); + return; +} + + + +### FUNC locale @ 00035ef0 + +/* WARNING: Removing unreachable block (ram,0x00036698) */ +/* WARNING: Removing unreachable block (ram,0x000361de) */ +/* WARNING: Removing unreachable block (ram,0x000361ee) */ +/* std::locale::locale(std::locale const&, char const*, int) */ + +locale * __thiscall std::locale::locale(locale *this,locale *param_1,char *param_2,int param_3) + +{ + char *__s2; + int *piVar1; + int iVar2; + _Locale_impl *this_00; + size_t sVar3; + int iVar4; + char *__s2_00; + char *__s2_01; + char *__s2_02; + char *__s2_03; + undefined4 uVar5; + __Named_exception *this_01; + _Locale_impl *p_Var6; + char *__s1; + _Locale_name_hint *p_Var7; + int iVar8; + char *__s1_00; + uint uVar9; + char *local_8f8; + int local_8f0; + char acStack_8e0 [256]; + char *local_7e0; + char acStack_7dc [256]; + char *local_6dc; + char acStack_6d8 [256]; + char *local_5d8; + char acStack_5d4 [256]; + char *local_4d4; + char acStack_4d0 [256]; + char *local_3d0; + char acStack_3cc [256]; + char *local_2cc; + undefined1 auStack_2c8 [4]; + int local_2c4 [5]; + int *local_2b0; + int local_2ac [4]; + undefined4 local_29c; + int *local_298; + undefined1 auStack_294 [4]; + int local_290 [5]; + int *local_27c; + int local_278 [5]; + int *local_264; + int local_260 [4]; + undefined4 local_250; + int *local_24c; + undefined1 auStack_248 [4]; + int local_244 [5]; + int *local_230; + int local_22c [5]; + int *local_218; + int local_214 [4]; + undefined4 local_204; + int *local_200; + undefined1 auStack_1fc [4]; + int local_1f8 [5]; + int *local_1e4; + int local_1e0 [5]; + int *local_1cc; + int local_1c8 [4]; + undefined4 local_1b8; + int *local_1b4; + undefined1 auStack_1b0 [4]; + int local_1ac [5]; + int *local_198; + int local_194 [5]; + int *local_180; + int local_17c [4]; + undefined4 local_16c; + int *local_168; + undefined1 auStack_164 [4]; + int local_160 [5]; + int *local_14c; + int local_148 [5]; + int *local_134; + int local_130 [4]; + int local_120; + int *local_11c; + string asStack_118 [256]; + undefined1 auStack_18 [4]; + + p_Var7 = (_Locale_name_hint *)0x0; + *(undefined4 *)this = 0; + if (param_2 == (char *)0x0) { + _M_throw_on_null_name(); +LAB_000366a4: + this_01 = (__Named_exception *)FUN_00030824(local_8f0 + 8); + FUN_00031c38(asStack_118,&LAB_00036a9c,acStack_3cc); + __Named_exception::__Named_exception(this_01,asStack_118); + *(undefined ***)this_01 = &PTR____Named_exception_00068ec0; + /* WARNING: Subroutine does not return */ + FUN_000309e0(this_01,&runtime_error::typeinfo,__Named_exception::~__Named_exception); + } + iVar2 = strcmp("*",param_2); + local_8f0 = 0x100; + if (iVar2 == 0) goto LAB_000366a4; + this_00 = (_Locale_impl *)operator_new(0x2c); + _Locale_impl::_Locale_impl(this_00,*(_Locale_impl **)param_1); + local_7e0 = param_2; + local_6dc = param_2; + local_5d8 = param_2; + local_4d4 = param_2; + local_3d0 = param_2; + local_2cc = param_2; + if ((param_3 & 0x20U) != 0) { + p_Var7 = (_Locale_name_hint *) + _Locale_impl::insert_ctype_facets + (this_00,&local_2cc,acStack_3cc,(_Locale_name_hint *)0x0); + } + if ((param_3 & 0x100U) != 0) { + p_Var7 = (_Locale_name_hint *) + _Locale_impl::insert_numeric_facets(this_00,&local_3d0,acStack_4d0,p_Var7); + } + if ((param_3 & 0x200U) != 0) { + p_Var7 = (_Locale_name_hint *) + _Locale_impl::insert_time_facets(this_00,&local_4d4,acStack_5d4,p_Var7); + } + if ((param_3 & 0x10U) != 0) { + p_Var7 = (_Locale_name_hint *) + _Locale_impl::insert_collate_facets(this_00,&local_5d8,acStack_6d8,p_Var7); + } + if ((param_3 & 0x40U) != 0) { + p_Var7 = (_Locale_name_hint *) + _Locale_impl::insert_monetary_facets(this_00,&local_6dc,acStack_7dc,p_Var7); + } + if ((param_3 & 0x400U) != 0) { + _Locale_impl::insert_messages_facets(this_00,&local_7e0,acStack_8e0,p_Var7); + } + __s1_00 = local_2cc; + __s2_00 = local_3d0; + __s2 = local_4d4; + __s2_01 = local_5d8; + __s2_02 = local_6dc; + __s2_03 = local_7e0; + __s1 = *(char **)(*(int *)param_1 + 0x1c); + if ((param_3 & 0x770U) == 0) { +LAB_00036154: + sVar3 = strlen(__s1); + iVar8 = *(int *)(this_00 + 0x18); + iVar2 = *(int *)(this_00 + 0x1c); + if ((uint)(iVar8 - iVar2) < sVar3) { + if (iVar8 != iVar2) { + __aeabi_memmove(iVar2,__s1); + iVar8 = *(int *)(this_00 + 0x18); + iVar2 = *(int *)(this_00 + 0x1c); + } + FUN_00037294(this_00 + 8,__s1 + (iVar8 - iVar2),__s1 + sVar3); + goto LAB_00036612; + } + if (sVar3 != 0) { + __aeabi_memmove(iVar2,__s1,sVar3); + iVar8 = *(int *)(this_00 + 0x18); + iVar2 = *(int *)(this_00 + 0x1c); + } + iVar2 = iVar2 + sVar3; + if (iVar2 == iVar8) goto LAB_00036612; + __aeabi_memmove(iVar2,iVar8); + iVar4 = *(int *)(this_00 + 0x18); + iVar2 = iVar2 - iVar8; + } + else { + local_8f8 = local_4d4; + iVar2 = strcmp(__s1,local_2cc); + if (((((iVar2 == 0) && (iVar2 = strcmp(__s1,__s2), iVar2 == 0)) && + (iVar2 = strcmp(__s1,__s2_00), iVar2 == 0)) && + ((iVar2 = strcmp(__s1,__s2_01), iVar2 == 0 && (iVar2 = strcmp(__s1,__s2_02), iVar2 == 0)))) + && (iVar2 = strcmp(__s1,__s2_03), iVar2 == 0)) goto LAB_00036154; + if ((((param_3 & 0x770U) != 0x770) || (iVar2 = strcmp(__s1_00,__s2), iVar2 != 0)) || + ((iVar2 = strcmp(__s1_00,__s2_00), iVar2 != 0 || + (((iVar2 = strcmp(__s1_00,__s2_01), iVar2 != 0 || + (iVar2 = strcmp(__s1_00,__s2_02), iVar2 != 0)) || + (iVar2 = strcmp(__s1_00,__s2_03), iVar2 != 0)))))) { + FUN_00031c38(local_160,"LC_CTYPE=",auStack_164); + if ((param_3 & 0x20U) == 0) { + __s1_00 = __s1; + } + uVar5 = FUN_0004d9d8(__s1_00,asStack_118,0,auStack_18); + FUN_000371e8(local_148,local_160,uVar5); + FUN_000371e8(local_130,local_148,&DAT_00036334); + piVar1 = local_11c; + uVar9 = local_120 - (int)local_11c; + iVar8 = *(int *)(this_00 + 0x18); + iVar2 = *(int *)(this_00 + 0x1c); + p_Var6 = this_00 + 8; + if ((uint)(iVar8 - iVar2) < uVar9) { + if (iVar8 != iVar2) { + __aeabi_memmove(iVar2,local_11c); + iVar8 = *(int *)(this_00 + 0x18); + iVar2 = *(int *)(this_00 + 0x1c); + } + FUN_00037294(p_Var6,(int)piVar1 + (iVar8 - iVar2),local_120); + } + else { + if (uVar9 != 0) { + __aeabi_memmove(iVar2,local_11c,uVar9); + iVar8 = *(int *)(this_00 + 0x18); + iVar2 = *(int *)(this_00 + 0x1c); + } + iVar2 = iVar2 + uVar9; + if (iVar2 != iVar8) { + __aeabi_memmove(iVar2,iVar8); + *(int *)(this_00 + 0x18) = *(int *)(this_00 + 0x18) + (iVar2 - iVar8); + } + } + if ((local_11c != local_130) && (local_11c != (int *)0x0)) { + if ((uint)(local_130[0] - (int)local_11c) < 0x81) { + __node_alloc::_M_deallocate(local_11c,local_130[0] - (int)local_11c); + } + else { + operator_delete(local_11c); + } + } + if ((local_134 != local_148) && (local_134 != (int *)0x0)) { + if ((uint)(local_148[0] - (int)local_134) < 0x81) { + __node_alloc::_M_deallocate(local_134,local_148[0] - (int)local_134); + } + else { + operator_delete(local_134); + } + } + if ((local_14c != local_160) && (local_14c != (int *)0x0)) { + if ((uint)(local_160[0] - (int)local_14c) < 0x81) { + __node_alloc::_M_deallocate(local_14c,local_160[0] - (int)local_14c); + } + else { + operator_delete(local_14c); + } + } + FUN_00031c38(local_1ac,"LC_TIME=",auStack_1b0); + if ((param_3 & 0x200U) == 0) { + local_8f8 = __s1; + } + uVar5 = FUN_0004da18(local_8f8,asStack_118,0,auStack_18); + FUN_000371e8(local_194,local_1ac,uVar5); + FUN_000371e8(local_17c,local_194,&DAT_00036334); + FUN_00037294(p_Var6,local_168,local_16c); + if ((local_168 != local_17c) && (local_168 != (int *)0x0)) { + if ((uint)(local_17c[0] - (int)local_168) < 0x81) { + __node_alloc::_M_deallocate(local_168,local_17c[0] - (int)local_168); + } + else { + operator_delete(local_168); + } + } + if ((local_180 != local_194) && (local_180 != (int *)0x0)) { + if ((uint)(local_194[0] - (int)local_180) < 0x81) { + __node_alloc::_M_deallocate(local_180,local_194[0] - (int)local_180); + } + else { + operator_delete(local_180); + } + } + if ((local_198 != local_1ac) && (local_198 != (int *)0x0)) { + if ((uint)(local_1ac[0] - (int)local_198) < 0x81) { + __node_alloc::_M_deallocate(local_198,local_1ac[0] - (int)local_198); + } + else { + operator_delete(local_198); + } + } + FUN_00031c38(local_1f8,"LC_NUMERIC=",auStack_1fc); + if ((param_3 & 0x100U) == 0) { + __s2_00 = __s1; + } + uVar5 = FUN_0004d9f8(__s2_00,asStack_118,0,auStack_18); + FUN_000371e8(local_1e0,local_1f8,uVar5); + FUN_000371e8(local_1c8,local_1e0,&DAT_00036780); + FUN_00037294(p_Var6,local_1b4,local_1b8); + if ((local_1b4 != local_1c8) && (local_1b4 != (int *)0x0)) { + if ((uint)(local_1c8[0] - (int)local_1b4) < 0x81) { + __node_alloc::_M_deallocate(local_1b4,local_1c8[0] - (int)local_1b4); + } + else { + operator_delete(local_1b4); + } + } + if ((local_1cc != local_1e0) && (local_1cc != (int *)0x0)) { + if ((uint)(local_1e0[0] - (int)local_1cc) < 0x81) { + __node_alloc::_M_deallocate(local_1cc,local_1e0[0] - (int)local_1cc); + } + else { + operator_delete(local_1cc); + } + } + if ((local_1e4 != local_1f8) && (local_1e4 != (int *)0x0)) { + if ((uint)(local_1f8[0] - (int)local_1e4) < 0x81) { + __node_alloc::_M_deallocate(local_1e4,local_1f8[0] - (int)local_1e4); + } + else { + operator_delete(local_1e4); + } + } + FUN_00031c38(local_244,"LC_COLLATE=",auStack_248); + if ((param_3 & 0x10U) == 0) { + __s2_01 = __s1; + } + uVar5 = FUN_0004da38(__s2_01,asStack_118,0,auStack_18); + FUN_000371e8(local_22c,local_244,uVar5); + FUN_000371e8(local_214,local_22c,&DAT_00036780); + FUN_00037294(p_Var6,local_200,local_204); + if ((local_200 != local_214) && (local_200 != (int *)0x0)) { + if ((uint)(local_214[0] - (int)local_200) < 0x81) { + __node_alloc::_M_deallocate(local_200,local_214[0] - (int)local_200); + } + else { + operator_delete(local_200); + } + } + if ((local_218 != local_22c) && (local_218 != (int *)0x0)) { + if ((uint)(local_22c[0] - (int)local_218) < 0x81) { + __node_alloc::_M_deallocate(local_218,local_22c[0] - (int)local_218); + } + else { + operator_delete(local_218); + } + } + if ((local_230 != local_244) && (local_230 != (int *)0x0)) { + if ((uint)(local_244[0] - (int)local_230) < 0x81) { + __node_alloc::_M_deallocate(local_230,local_244[0] - (int)local_230); + } + else { + operator_delete(local_230); + } + } + FUN_00031c38(local_290,"LC_MONETARY=",auStack_294); + if ((param_3 & 0x40U) == 0) { + __s2_02 = __s1; + } + uVar5 = FUN_0004da58(__s2_02,asStack_118,0,auStack_18); + FUN_000371e8(local_278,local_290,uVar5); + FUN_000371e8(local_260,local_278,&DAT_00036780); + FUN_00037294(p_Var6,local_24c,local_250); + if ((local_24c != local_260) && (local_24c != (int *)0x0)) { + if ((uint)(local_260[0] - (int)local_24c) < 0x81) { + __node_alloc::_M_deallocate(local_24c,local_260[0] - (int)local_24c); + } + else { + operator_delete(local_24c); + } + } + if ((local_264 != local_278) && (local_264 != (int *)0x0)) { + if ((uint)(local_278[0] - (int)local_264) < 0x81) { + __node_alloc::_M_deallocate(local_264,local_278[0] - (int)local_264); + } + else { + operator_delete(local_264); + } + } + if ((local_27c != local_290) && (local_27c != (int *)0x0)) { + if ((uint)(local_290[0] - (int)local_27c) < 0x81) { + __node_alloc::_M_deallocate(local_27c,local_290[0] - (int)local_27c); + } + else { + operator_delete(local_27c); + } + } + FUN_00031c38(local_2c4,"LC_MESSAGES=",auStack_2c8); + if ((param_3 & 0x400U) == 0) { + __s2_03 = __s1; + } + uVar5 = FUN_0004da78(__s2_03,asStack_118,0,auStack_18); + FUN_000371e8(local_2ac,local_2c4,uVar5); + FUN_00037294(p_Var6,local_298,local_29c); + if ((local_298 != local_2ac) && (local_298 != (int *)0x0)) { + if ((uint)(local_2ac[0] - (int)local_298) < 0x81) { + __node_alloc::_M_deallocate(local_298,local_2ac[0] - (int)local_298); + } + else { + operator_delete(local_298); + } + } + if ((local_2b0 != local_2c4) && (local_2b0 != (int *)0x0)) { + if ((uint)(local_2c4[0] - (int)local_2b0) < 0x81) { + __node_alloc::_M_deallocate(local_2b0,local_2c4[0] - (int)local_2b0); + } + else { + operator_delete(local_2b0); + } + } + goto LAB_00036612; + } + sVar3 = strlen(__s1_00); + iVar8 = *(int *)(this_00 + 0x18); + iVar2 = *(int *)(this_00 + 0x1c); + if ((uint)(iVar8 - iVar2) < sVar3) { + if (iVar8 != iVar2) { + __aeabi_memmove(iVar2,__s1_00); + iVar8 = *(int *)(this_00 + 0x18); + iVar2 = *(int *)(this_00 + 0x1c); + } + FUN_00037294(this_00 + 8,__s1_00 + (iVar8 - iVar2),__s1_00 + sVar3); + goto LAB_00036612; + } + if (sVar3 != 0) { + __aeabi_memmove(iVar2,__s1_00,sVar3); + iVar8 = *(int *)(this_00 + 0x18); + iVar2 = *(int *)(this_00 + 0x1c); + } + iVar2 = iVar2 + sVar3; + if (iVar2 == iVar8) goto LAB_00036612; + __aeabi_memmove(iVar2,iVar8); + iVar4 = *(int *)(this_00 + 0x18); + iVar2 = iVar2 - iVar8; + } + *(int *)(this_00 + 0x18) = iVar4 + iVar2; +LAB_00036612: + uVar5 = _get_Locale_impl(this_00); + *(undefined4 *)this = uVar5; + return this; +} + + + +### FUNC locale @ 00036b08 + +/* WARNING: Removing unreachable block (ram,0x00036c52) */ +/* WARNING: Type propagation algorithm not settling */ +/* std::locale::locale(std::locale const&, std::locale const&, int) */ + +locale * __thiscall std::locale::locale(locale *this,locale *param_1,locale *param_2,int param_3) + +{ + bool bVar1; + _Locale_impl *this_00; + _Locale_impl *p_Var2; + size_t sVar3; + int iVar4; + undefined1 *puVar5; + undefined1 *puVar6; + undefined4 uVar7; + int iVar8; + char *__s; + int local_44 [4]; + int local_34; + int *local_30; + int local_2c [4]; + int local_1c; + int *local_18; + + *(undefined4 *)this = 0; + this_00 = (_Locale_impl *)operator_new(0x2c); + _Locale_impl::_Locale_impl(this_00,*(_Locale_impl **)param_1); + p_Var2 = *(_Locale_impl **)param_2; + FUN_00036f1c(local_2c,*(int *)param_1 + 8); + if ((local_1c - (int)local_18 != 1) || (bVar1 = false, (char)*local_18 != '*')) { + FUN_00036f1c(local_44,*(int *)param_2 + 8); + bVar1 = true; + if ((local_34 - (int)local_30 == 1) && (bVar1 = true, (char)*local_30 == '*')) { + bVar1 = false; + } + if ((local_30 != local_44) && (local_30 != (int *)0x0)) { + if ((uint)(local_44[0] - (int)local_30) < 0x81) { + __node_alloc::_M_deallocate(local_30,local_44[0] - (int)local_30); + } + else { + operator_delete(local_30); + } + } + } + if ((local_18 == local_2c) || (local_18 == (int *)0x0)) { +LAB_00036ba4: + if (bVar1) goto LAB_00036ba8; +LAB_00036c20: + if (*(undefined1 **)(this_00 + 0x18) == *(undefined1 **)(this_00 + 0x1c)) { + FUN_00037294(this_00 + 8,&DAT_00064e87,&DAT_00064e88); + goto LAB_00036c5a; + } + **(undefined1 **)(this_00 + 0x1c) = 0x2a; + puVar5 = *(undefined1 **)(this_00 + 0x18); + puVar6 = (undefined1 *)(*(int *)(this_00 + 0x1c) + 1); + if (puVar6 == puVar5) goto LAB_00036c5a; + *puVar6 = *puVar5; + puVar6 = puVar6 + (*(int *)(this_00 + 0x18) - (int)puVar5); + } + else { + if (0x80 < (uint)(local_2c[0] - (int)local_18)) { + operator_delete(local_18); + goto LAB_00036ba4; + } + __node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); + if (!bVar1) goto LAB_00036c20; +LAB_00036ba8: + __s = *(char **)(*(int *)param_1 + 0x1c); + sVar3 = strlen(__s); + iVar8 = *(int *)(this_00 + 0x18); + iVar4 = *(int *)(this_00 + 0x1c); + if ((uint)(iVar8 - iVar4) < sVar3) { + if (iVar8 != iVar4) { + __aeabi_memmove(iVar4,__s); + iVar8 = *(int *)(this_00 + 0x18); + iVar4 = *(int *)(this_00 + 0x1c); + } + FUN_00037294(this_00 + 8,__s + (iVar8 - iVar4),__s + sVar3); + goto LAB_00036c5a; + } + if (sVar3 != 0) { + __aeabi_memmove(iVar4,__s,sVar3); + iVar8 = *(int *)(this_00 + 0x18); + iVar4 = *(int *)(this_00 + 0x1c); + } + iVar4 = iVar4 + sVar3; + if (iVar4 == iVar8) goto LAB_00036c5a; + __aeabi_memmove(iVar4,iVar8); + puVar6 = (undefined1 *)(*(int *)(this_00 + 0x18) + (iVar4 - iVar8)); + } + *(undefined1 **)(this_00 + 0x18) = puVar6; +LAB_00036c5a: + if (param_3 << 0x1b < 0) { + _Locale_impl::insert(this_00,p_Var2,(id *)&collate::id); + _Locale_impl::insert(this_00,p_Var2,(id *)&collate::id); + } + if (param_3 << 0x1a < 0) { + _Locale_impl::insert(this_00,p_Var2,(id *)&ctype::id); + _Locale_impl::insert(this_00,p_Var2,(id *)&codecvt::id); + _Locale_impl::insert(this_00,p_Var2,(id *)&ctype::id); + _Locale_impl::insert(this_00,p_Var2,(id *)&codecvt::id); + } + if (param_3 << 0x19 < 0) { + _Locale_impl::insert(this_00,p_Var2,(id *)&moneypunct::id); + _Locale_impl::insert(this_00,p_Var2,(id *)&moneypunct::id); + _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d0c); + _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d10); + _Locale_impl::insert(this_00,p_Var2,(id *)&moneypunct::id); + _Locale_impl::insert(this_00,p_Var2,(id *)&moneypunct::id); + _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d14); + _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d18); + } + if (param_3 << 0x17 < 0) { + _Locale_impl::insert(this_00,p_Var2,(id *)&numpunct::id); + _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d1c); + _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d20); + _Locale_impl::insert(this_00,p_Var2,(id *)&numpunct::id); + _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d24); + _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d28); + } + if (param_3 << 0x16 < 0) { + _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d2c); + _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d30); + _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d34); + _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d38); + } + if (param_3 << 0x15 < 0) { + _Locale_impl::insert(this_00,p_Var2,(id *)&messages::id); + _Locale_impl::insert(this_00,p_Var2,(id *)&messages::id); + } + uVar7 = _get_Locale_impl(this_00); + *(undefined4 *)this = uVar7; + return this; +} + + + +### FUNC name @ 00036e90 + +/* std::locale::name() const */ + +void std::locale::name(void) + +{ + undefined4 in_r0; + int *in_r1; + + FUN_00036f1c(in_r0,*in_r1 + 8); + return; +} + + + +### FUNC ~locale @ 00036e9e + +/* std::locale::~locale() */ + +locale * __thiscall std::locale::~locale(locale *this) + +{ + if (*(int *)this != 0) { + FUN_0003968c(this); + } + return this; +} + + + +### FUNC operator= @ 00036eb8 + +/* std::locale::TEMPNAMEPLACEHOLDERVALUE(std::locale const&) */ + +locale * __thiscall std::locale::operator=(locale *this,locale *param_1) + +{ + _Locale_impl *p_Var1; + undefined4 uVar2; + + p_Var1 = *(_Locale_impl **)param_1; + if (*(_Locale_impl **)this != p_Var1) { + if (*(_Locale_impl **)this != (_Locale_impl *)0x0) { + FUN_0003968c(this); + p_Var1 = *(_Locale_impl **)param_1; + } + uVar2 = _get_Locale_impl(p_Var1); + *(undefined4 *)this = uVar2; + } + return this; +} + + + +### FUNC _M_get_facet @ 00036ee2 + +/* std::locale::_M_get_facet(std::locale::id const&) const */ + +undefined4 __thiscall std::locale::_M_get_facet(locale *this,id *param_1) + +{ + undefined4 uVar1; + int iVar2; + + iVar2 = *(int *)(*(int *)this + 0x20); + uVar1 = 0; + if (*(uint *)param_1 < (uint)(*(int *)(*(int *)this + 0x24) - iVar2 >> 2)) { + uVar1 = *(undefined4 *)(iVar2 + *(uint *)param_1 * 4); + } + return uVar1; +} + + + +### FUNC _M_use_facet @ 00036efa + +/* std::locale::_M_use_facet(std::locale::id const&) const */ + +undefined4 * __thiscall std::locale::_M_use_facet(locale *this,id *param_1) + +{ + int iVar1; + undefined4 *puVar2; + undefined4 *puVar3; + int iVar4; + int iVar5; + uint uVar6; + undefined8 uVar7; + uint uStack_20; + + iVar1 = *(int *)(*(int *)this + 0x20); + if ((*(uint *)param_1 < (uint)(*(int *)(*(int *)this + 0x24) - iVar1 >> 2)) && + (puVar2 = *(undefined4 **)(iVar1 + *(uint *)param_1 * 4), puVar2 != (undefined4 *)0x0)) { + return puVar2; + } + uVar7 = _Locale_impl::_M_throw_bad_cast(); + iVar1 = (int)((ulonglong)uVar7 >> 0x20); + puVar2 = (undefined4 *)uVar7; + puVar2[4] = puVar2; + puVar2[5] = puVar2; + iVar5 = *(int *)(iVar1 + 0x10); + iVar1 = *(int *)(iVar1 + 0x14); + iVar4 = iVar5 - iVar1; + uVar6 = iVar4 + 1; + if (uVar6 != 0) { + puVar3 = puVar2; + if (0x10 < uVar6) { + uStack_20 = uVar6; + if (uVar6 < 0x81) { + puVar3 = (undefined4 *)__node_alloc::_M_allocate(&uStack_20); + uVar6 = uStack_20; + } + else { + puVar3 = (undefined4 *)operator_new(uVar6); + } + puVar2[4] = puVar3; + puVar2[5] = puVar3; + *puVar2 = (undefined1 *)((int)puVar3 + uVar6); + } + if (iVar5 != iVar1) { + __aeabi_memcpy(puVar3); + puVar3 = (undefined4 *)((int)puVar3 + iVar4); + } + puVar2[4] = puVar3; + *(undefined1 *)puVar3 = 0; + return puVar2; + } + /* WARNING: Subroutine does not return */ + __stl_throw_length_error("basic_string"); +} + + + +### FUNC FUN_00036f1c @ 00036f1c + +undefined4 * FUN_00036f1c(undefined4 *param_1,int param_2) + +{ + undefined4 *puVar1; + int iVar2; + int iVar3; + int iVar4; + uint uVar5; + uint local_18; + + param_1[4] = param_1; + param_1[5] = param_1; + iVar4 = *(int *)(param_2 + 0x10); + iVar2 = *(int *)(param_2 + 0x14); + iVar3 = iVar4 - iVar2; + uVar5 = iVar3 + 1; + if (uVar5 != 0) { + puVar1 = param_1; + if (0x10 < uVar5) { + local_18 = uVar5; + if (uVar5 < 0x81) { + puVar1 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18); + uVar5 = local_18; + } + else { + puVar1 = (undefined4 *)operator_new(uVar5); + } + param_1[4] = puVar1; + param_1[5] = puVar1; + *param_1 = (undefined1 *)((int)puVar1 + uVar5); + } + if (iVar4 != iVar2) { + __aeabi_memcpy(puVar1); + puVar1 = (undefined4 *)((int)puVar1 + iVar3); + } + param_1[4] = puVar1; + *(undefined1 *)puVar1 = 0; + return param_1; + } + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); +} + + + +### FUNC operator== @ 00036fbc + +/* std::locale::TEMPNAMEPLACEHOLDERVALUE(std::locale const&) const */ + +undefined4 __thiscall std::locale::operator==(locale *this,locale *param_1) + +{ + int iVar1; + undefined4 uVar2; + int *piVar3; + int local_5c [4]; + int local_4c; + int *local_48; + int local_44 [4]; + int local_34; + int *local_30; + int local_2c [4]; + int local_1c; + int *local_18; + + if (*(int *)this == *(int *)param_1) { + uVar2 = 1; + } + else { + FUN_00036f1c(local_2c,*(int *)this + 8); + FUN_00036f1c(local_44,*(int *)param_1 + 8); + piVar3 = local_30; + uVar2 = 0; + if ((local_1c - (int)local_18 == local_34 - (int)local_30) && + (iVar1 = memcmp(local_18,local_30,local_1c - (int)local_18), iVar1 == 0)) { + FUN_00036f1c(local_5c,*(int *)this + 8); + uVar2 = 1; + if ((local_4c - (int)local_48 == 1) && (uVar2 = 1, (char)*local_48 == '*')) { + uVar2 = 0; + } + piVar3 = local_30; + if ((local_48 != local_5c) && (local_48 != (int *)0x0)) { + if ((uint)(local_5c[0] - (int)local_48) < 0x81) { + __node_alloc::_M_deallocate(local_48,local_5c[0] - (int)local_48); + piVar3 = local_30; + } + else { + operator_delete(local_48); + piVar3 = local_30; + } + } + } + if ((piVar3 != local_44) && (piVar3 != (int *)0x0)) { + if ((uint)(local_44[0] - (int)piVar3) < 0x81) { + __node_alloc::_M_deallocate(piVar3,local_44[0] - (int)piVar3); + } + else { + operator_delete(piVar3); + } + } + if ((local_18 != local_2c) && (local_18 != (int *)0x0)) { + if ((uint)(local_2c[0] - (int)local_18) < 0x81) { + __node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); + } + else { + operator_delete(local_18); + } + } + } + return uVar2; +} + + + +### FUNC operator!= @ 000370e6 + +/* std::locale::TEMPNAMEPLACEHOLDERVALUE(std::locale const&) const */ + +uint __thiscall std::locale::operator!=(locale *this,locale *param_1) + +{ + uint uVar1; + + uVar1 = operator==(this,param_1); + return uVar1 ^ 1; +} + + + +### FUNC global @ 000370f4 + +/* std::locale::global(std::locale const&) */ + +void __thiscall std::locale::global(locale *this,locale *param_1) + +{ + bool bVar1; + undefined4 *puVar2; + undefined4 uVar3; + int *piVar4; + int local_44 [5]; + int *local_30; + int local_2c [4]; + int local_1c; + int *local_18; + + puVar2 = (undefined4 *)FUN_000395ec(); + uVar3 = _get_Locale_impl((_Locale_impl *)*puVar2); + *(undefined4 *)this = uVar3; + piVar4 = (int *)FUN_000395ec(); + if (*piVar4 != *(int *)param_1) { + FUN_000395ec(); + FUN_0003968c(); + uVar3 = _get_Locale_impl(*(_Locale_impl **)param_1); + puVar2 = (undefined4 *)FUN_000395ec(); + *puVar2 = uVar3; + FUN_00036f1c(local_2c,*(int *)param_1 + 8); + bVar1 = true; + if ((local_1c - (int)local_18 == 1) && (bVar1 = true, (char)*local_18 == '*')) { + bVar1 = false; + } + if ((local_18 != local_2c) && (local_18 != (int *)0x0)) { + if ((uint)(local_2c[0] - (int)local_18) < 0x81) { + __node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); + } + else { + operator_delete(local_18); + } + } + if (bVar1) { + FUN_00036f1c(local_44,*(int *)param_1 + 8); + setlocale(6,(char *)local_30); + if ((local_30 != local_44) && (local_30 != (int *)0x0)) { + if (0x80 < (uint)(local_44[0] - (int)local_30)) { + operator_delete(local_30); + return; + } + __node_alloc::_M_deallocate(local_30,local_44[0] - (int)local_30); + } + } + } + return; +} + + + +### FUNC FUN_000371e8 @ 000371e8 + +void FUN_000371e8(undefined4 *param_1,int param_2,char *param_3) + +{ + size_t sVar1; + undefined4 *puVar2; + int iVar3; + int iVar4; + uint uVar5; + uint local_1c; + undefined1 auStack_18 [4]; + + sVar1 = strlen(param_3); + iVar4 = *(int *)(param_2 + 0x10); + iVar3 = *(int *)(param_2 + 0x14); + param_1[4] = param_1; + param_1[5] = param_1; + uVar5 = (sVar1 + iVar4 + 1) - iVar3; + if (uVar5 != 0) { + puVar2 = param_1; + if (0x10 < uVar5) { + local_1c = uVar5; + if (uVar5 < 0x81) { + puVar2 = (undefined4 *)std::__node_alloc::_M_allocate(&local_1c); + uVar5 = local_1c; + } + else { + puVar2 = (undefined4 *)operator_new(uVar5); + } + param_1[4] = puVar2; + param_1[5] = puVar2; + *param_1 = (undefined1 *)((int)puVar2 + uVar5); + } + *(undefined1 *)puVar2 = 0; + FUN_00037294(param_1,*(undefined4 *)(param_2 + 0x14),*(undefined4 *)(param_2 + 0x10)); + FUN_000373cc(param_1,param_3,param_3 + sVar1,auStack_18); + return; + } + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); +} + + + +### FUNC FUN_00037294 @ 00037294 + +int * FUN_00037294(int *param_1,undefined1 *param_2,undefined1 *param_3) + +{ + undefined1 *puVar1; + undefined1 *puVar2; + uint uVar3; + uint uVar4; + int *piVar5; + uint uVar6; + uint uVar7; + int *piVar8; + uint uVar9; + undefined1 *puVar10; + uint local_28; + uint local_18; + + if (param_2 != param_3) { + uVar9 = (int)param_3 - (int)param_2; + piVar8 = (int *)param_1[5]; + if (piVar8 == param_1) { + puVar2 = (undefined1 *)param_1[4]; + piVar5 = param_1 + 4; + } + else { + puVar2 = (undefined1 *)param_1[4]; + piVar5 = (int *)*param_1; + } + if (uVar9 < (uint)((int)piVar5 - (int)puVar2)) { + puVar1 = param_2 + 1; + if (0 < (int)param_3 - (int)puVar1) { + param_3 = param_3 + (1 - (int)puVar1); + do { + puVar2 = puVar2 + 1; + *puVar2 = *puVar1; + param_3 = param_3 + -1; + puVar1 = puVar1 + 1; + } while (1 < (int)param_3); + puVar2 = (undefined1 *)param_1[4]; + } + puVar2[uVar9] = 0; + *(undefined1 *)param_1[4] = *param_2; + param_1[4] = param_1[4] + uVar9; + } + else { + uVar3 = (int)puVar2 - (int)piVar8; + if (-uVar3 - 2 < uVar9) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + uVar6 = uVar3; + if (uVar3 <= uVar9) { + uVar6 = uVar9; + } + uVar7 = uVar3 + uVar6 + 1; + uVar4 = 0xfffffffe; + if (uVar3 <= uVar7) { + uVar4 = uVar7; + } + local_28 = 0xfffffffe; + if (uVar3 + uVar6 != -2) { + local_28 = uVar4; + } + if (local_28 == 0) { + local_28 = 0; + puVar1 = (undefined1 *)0x0; + } + else { + local_18 = local_28; + if (local_28 < 0x81) { + puVar1 = (undefined1 *)std::__node_alloc::_M_allocate(&local_18); + local_28 = local_18; + } + else { + puVar1 = (undefined1 *)operator_new(local_28); + } + puVar2 = (undefined1 *)param_1[4]; + piVar8 = (int *)param_1[5]; + } + puVar10 = puVar1; + if (0 < (int)puVar2 - (int)piVar8) { + puVar2 = puVar2 + (1 - (int)piVar8); + do { + *puVar10 = (char)*piVar8; + puVar2 = puVar2 + -1; + puVar10 = puVar10 + 1; + piVar8 = (int *)((int)piVar8 + 1); + } while (1 < (int)puVar2); + } + if (0 < (int)uVar9) { + param_3 = param_3 + (1 - (int)param_2); + do { + *puVar10 = *param_2; + param_3 = param_3 + -1; + puVar10 = puVar10 + 1; + param_2 = param_2 + 1; + } while (1 < (int)param_3); + } + *puVar10 = 0; + piVar8 = (int *)param_1[5]; + if ((piVar8 != param_1) && (piVar8 != (int *)0x0)) { + if ((uint)(*param_1 - (int)piVar8) < 0x81) { + std::__node_alloc::_M_deallocate(piVar8,*param_1 - (int)piVar8); + } + else { + operator_delete(piVar8); + } + } + param_1[4] = (int)puVar10; + param_1[5] = (int)puVar1; + *param_1 = (int)(puVar1 + local_28); + } + } + return param_1; +} + + + +### FUNC FUN_000373cc @ 000373cc + +int * FUN_000373cc(int *param_1,undefined1 *param_2,undefined1 *param_3) + +{ + undefined1 *puVar1; + int *piVar2; + void *pvVar3; + int *piVar4; + undefined1 *puVar5; + undefined1 *puVar6; + undefined1 *puVar7; + int *piVar8; + void *pvVar9; + undefined1 *local_18; + + if (param_2 != param_3) { + puVar1 = param_3 + -(int)param_2; + piVar4 = (int *)param_1[5]; + if (piVar4 == param_1) { + piVar2 = (int *)param_1[4]; + puVar6 = (undefined1 *)((int)param_1 + (0x10 - (int)piVar2)); + } + else { + piVar2 = (int *)param_1[4]; + puVar6 = (undefined1 *)(*param_1 - (int)piVar2); + } + piVar8 = param_1 + 4; + if (puVar1 < puVar6) { + *(undefined1 *)piVar2 = *param_2; + param_2 = param_2 + 1; + if (param_2 != param_3) { + __aeabi_memcpy(*piVar8 + 1,param_2,(int)param_3 - (int)param_2); + } + puVar1[*piVar8] = 0; + *piVar8 = (int)(puVar1 + *piVar8); + } + else { + puVar6 = (undefined1 *)((int)piVar2 - (int)piVar4); + if ((undefined1 *)(-2 - (int)puVar6) < puVar1) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + puVar7 = puVar6; + if (puVar6 <= puVar1) { + puVar7 = puVar1; + } + puVar7 = puVar6 + (int)puVar7; + puVar5 = (undefined1 *)0xfffffffe; + if (puVar6 <= puVar7 + 1) { + puVar5 = puVar7 + 1; + } + puVar6 = (undefined1 *)0xfffffffe; + if (puVar7 != (undefined1 *)0xfffffffe) { + puVar6 = puVar5; + } + puVar7 = (undefined1 *)0x0; + if (puVar6 == (undefined1 *)0x0) { + pvVar3 = (void *)0x0; + } + else { + local_18 = puVar6; + if (puVar6 < (undefined1 *)0x81) { + pvVar3 = (void *)std::__node_alloc::_M_allocate((uint *)&local_18); + puVar7 = local_18; + } + else { + pvVar3 = operator_new((uint)puVar6); + puVar7 = puVar6; + } + piVar2 = (int *)param_1[4]; + piVar4 = (int *)param_1[5]; + } + pvVar9 = pvVar3; + if (piVar2 != piVar4) { + __aeabi_memcpy(pvVar3,piVar4,(int)piVar2 - (int)piVar4); + pvVar9 = (void *)((int)pvVar3 + ((int)piVar2 - (int)piVar4)); + } + __aeabi_memcpy(pvVar9,param_2); + *(undefined1 *)((int)pvVar9 + (int)puVar1) = 0; + piVar4 = (int *)param_1[5]; + if ((piVar4 != param_1) && (piVar4 != (int *)0x0)) { + if ((uint)(*param_1 - (int)piVar4) < 0x81) { + std::__node_alloc::_M_deallocate(piVar4,*param_1 - (int)piVar4); + } + else { + operator_delete(piVar4); + } + } + param_1[4] = (int)((int)pvVar9 + (int)puVar1); + param_1[5] = (int)pvVar3; + *param_1 = (int)((int)pvVar3 + (int)puVar7); + } + } + return param_1; +} + + + +### FUNC FUN_000374ec @ 000374ec + +int FUN_000374ec(int param_1) + +{ + if (param_1 != 0) { + pthread_mutex_lock((pthread_mutex_t *)(param_1 + 8)); + *(int *)(param_1 + 4) = *(int *)(param_1 + 4) + 1; + pthread_mutex_unlock((pthread_mutex_t *)(param_1 + 8)); + } + return param_1; +} + + + +### FUNC FUN_00037510 @ 00037510 + +void FUN_00037510(int *param_1) + +{ + int iVar1; + int iVar2; + + iVar2 = *param_1; + if (iVar2 != 0) { + pthread_mutex_lock((pthread_mutex_t *)(iVar2 + 8)); + iVar1 = *(int *)(iVar2 + 4) + -1; + *(int *)(iVar2 + 4) = iVar1; + pthread_mutex_unlock((pthread_mutex_t *)(iVar2 + 8)); + if (iVar1 == 0) { + if ((int *)*param_1 != (int *)0x0) { + (**(code **)(*(int *)*param_1 + 4))(); + } + *param_1 = 0; + return; + } + } + return; +} + + + +### FUNC Init @ 00037554 + +/* std::_Locale_impl::Init::Init() */ + +Init * __thiscall std::_Locale_impl::Init::Init(Init *this) + +{ + uint uVar1; + int iVar2; + + uVar1 = FUN_00057b68(&DAT_00070d48,0,0); + if (((uVar1 & 1) == 0) && (iVar2 = FUN_0004e3a4(&DAT_00070d48), iVar2 != 0)) { + DAT_00070d40 = 0; + pthread_mutex_init((pthread_mutex_t *)&DAT_00070d44,(pthread_mutexattr_t *)0x0); + __cxa_atexit(0x37847,&DAT_00070d40,&DAT_0006b000); + FUN_0004e40c(&DAT_00070d48); + } + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070d44); + iVar2 = DAT_00070d40; + DAT_00070d40 = DAT_00070d40 + 1; + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070d44); + if (iVar2 == 0) { + DAT_00070d10 = 9; + DAT_00070d0c = 8; + DAT_00070d1c = 10; + DAT_00070d20 = 0xb; + DAT_00070d2c = 0xc; + DAT_00070d30 = 0xd; + DAT_00070d14 = 0x15; + DAT_00070d18 = 0x16; + DAT_00070d24 = 0x17; + DAT_00070d28 = 0x18; + DAT_00070d34 = 0x19; + DAT_00070d38 = 0x1a; + make_classic_locale(); + } + return this; +} + + + +### FUNC _M_count @ 0003768c + +/* std::_Locale_impl::Init::_M_count() const */ + +undefined4 * std::_Locale_impl::Init::_M_count(void) + +{ + uint uVar1; + int iVar2; + + uVar1 = FUN_00057b68(&DAT_00070d48,0,0); + if (((uVar1 & 1) == 0) && (iVar2 = FUN_0004e3a4(&DAT_00070d48), iVar2 != 0)) { + DAT_00070d40 = 0; + pthread_mutex_init((pthread_mutex_t *)&DAT_00070d44,(pthread_mutexattr_t *)0x0); + __cxa_atexit(0x37847,&DAT_00070d40,&DAT_0006b000); + FUN_0004e40c(&DAT_00070d48); + } + return &DAT_00070d40; +} + + + +### FUNC _S_initialize @ 0003770c + +/* std::_Locale_impl::_S_initialize() */ + +void std::_Locale_impl::_S_initialize(void) + +{ + DAT_00070d10 = 9; + DAT_00070d0c = 8; + DAT_00070d1c = 10; + DAT_00070d20 = 0xb; + DAT_00070d2c = 0xc; + DAT_00070d30 = 0xd; + DAT_00070d14 = 0x15; + DAT_00070d18 = 0x16; + DAT_00070d24 = 0x17; + DAT_00070d28 = 0x18; + DAT_00070d34 = 0x19; + DAT_00070d38 = 0x1a; + make_classic_locale(); + return; +} + + + +### FUNC ~Init @ 000377a8 + +/* std::_Locale_impl::Init::~Init() */ + +Init * __thiscall std::_Locale_impl::Init::~Init(Init *this) + +{ + uint uVar1; + int iVar2; + + uVar1 = FUN_00057b68(&DAT_00070d48,0,0); + if (((uVar1 & 1) == 0) && (iVar2 = FUN_0004e3a4(&DAT_00070d48), iVar2 != 0)) { + DAT_00070d40 = 0; + pthread_mutex_init((pthread_mutex_t *)&DAT_00070d44,(pthread_mutexattr_t *)0x0); + __cxa_atexit(0x37847,&DAT_00070d40,&DAT_0006b000); + FUN_0004e40c(&DAT_00070d48); + } + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070d44); + DAT_00070d40 = DAT_00070d40 + -1; + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070d44); + return this; +} + + + +### FUNC _S_uninitialize @ 00037844 + +/* std::_Locale_impl::_S_uninitialize() */ + +void std::_Locale_impl::_S_uninitialize(void) + +{ + return; +} + + + +### FUNC FUN_00037846 @ 00037846 + +int FUN_00037846(int param_1) + +{ + pthread_mutex_destroy((pthread_mutex_t *)(param_1 + 4)); + return param_1; +} + + + +### FUNC _Locale_impl @ 00037858 + +/* std::_Locale_impl::_Locale_impl(char const*) */ + +_Locale_impl * __thiscall std::_Locale_impl::_Locale_impl(_Locale_impl *this,char *param_1) + +{ + undefined4 in_r3; + pthread_mutex_t *__mutex; + undefined1 auStack_18 [4]; + + *(undefined4 *)this = 0; + __mutex = (pthread_mutex_t *)(this + 4); + pthread_mutex_init(__mutex,(pthread_mutexattr_t *)0x0); + FUN_00031c38(this + 8,param_1,auStack_18,in_r3,this + 8,__mutex); + *(undefined4 *)(this + 0x20) = 0; + *(undefined4 *)(this + 0x24) = 0; + *(undefined4 *)(this + 0x28) = 0; + FUN_000378f8(this + 0x20,locale::id::_S_max); + Init::Init((Init *)&DAT_00070d50); + return this; +} + + + +### FUNC FUN_000378f8 @ 000378f8 + +void FUN_000378f8(int *param_1,uint param_2) + +{ + void *pvVar1; + void *pvVar2; + int iVar3; + int iVar4; + int iVar5; + uint local_1c; + uint local_18; + + iVar5 = *param_1; + if ((uint)(param_1[2] - iVar5 >> 2) < param_2) { + if (param_2 >> 0x1e != 0) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("vector"); + } + iVar4 = param_1[1]; + iVar3 = iVar4 - iVar5; + if (iVar5 == 0) { + param_2 = param_2 << 2; + local_1c = param_2; + if (param_2 < 0x81) { + pvVar1 = (void *)std::__node_alloc::_M_allocate(&local_1c); + } + else { + pvVar1 = operator_new(param_2); + local_1c = param_2; + } + param_2 = local_1c >> 2; + } + else { + param_2 = param_2 << 2; + local_18 = param_2; + if (param_2 < 0x81) { + pvVar1 = (void *)std::__node_alloc::_M_allocate(&local_18); + param_2 = local_18; + } + else { + pvVar1 = operator_new(param_2); + } + param_2 = param_2 >> 2; + if (iVar4 != iVar5) { + __aeabi_memcpy(pvVar1,iVar5,iVar3); + } + pvVar2 = (void *)*param_1; + if (pvVar2 != (void *)0x0) { + if ((uint)(param_1[2] - (int)pvVar2) < 0x81) { + std::__node_alloc::_M_deallocate(pvVar2,param_1[2] - (int)pvVar2); + } + else { + operator_delete(pvVar2); + } + } + } + *param_1 = (int)pvVar1; + param_1[1] = (int)((int)pvVar1 + (iVar3 >> 2) * 4); + param_1[2] = (int)((int)pvVar1 + param_2 * 4); + } + return; +} + + + +### FUNC _Locale_impl @ 000379b8 + +/* std::_Locale_impl::_Locale_impl(std::_Locale_impl const&) */ + +_Locale_impl * __thiscall std::_Locale_impl::_Locale_impl(_Locale_impl *this,_Locale_impl *param_1) + +{ + int *piVar1; + int iVar2; + int *piVar3; + + *(undefined4 *)this = 0; + pthread_mutex_init((pthread_mutex_t *)(this + 4),(pthread_mutexattr_t *)0x0); + FUN_00036f1c(this + 8,param_1 + 8); + *(undefined4 *)(this + 0x20) = 0; + *(undefined4 *)(this + 0x24) = 0; + *(undefined4 *)(this + 0x28) = 0; + piVar1 = *(int **)(param_1 + 0x24); + for (piVar3 = *(int **)(param_1 + 0x20); piVar3 != piVar1; piVar3 = piVar3 + 1) { + iVar2 = *piVar3; + if (iVar2 != 0) { + pthread_mutex_lock((pthread_mutex_t *)(iVar2 + 8)); + *(int *)(iVar2 + 4) = *(int *)(iVar2 + 4) + 1; + pthread_mutex_unlock((pthread_mutex_t *)(iVar2 + 8)); + } + } + FUN_00037a88(this + 0x20,param_1 + 0x20); + Init::Init((Init *)&DAT_00070d50); + return this; +} + + + +### FUNC FUN_00037a88 @ 00037a88 + +int * FUN_00037a88(int *param_1,int *param_2) + +{ + int iVar1; + int iVar2; + void *pvVar3; + uint uVar4; + void *pvVar5; + undefined4 uVar6; + int iVar7; + uint uVar8; + int iVar9; + int iVar10; + uint uVar11; + uint local_18; + + if (param_2 != param_1) { + iVar9 = *param_2; + iVar1 = param_2[1]; + uVar11 = iVar1 - iVar9; + uVar8 = (int)uVar11 >> 2; + iVar2 = *param_1; + if ((uint)(param_1[2] - iVar2 >> 2) < uVar8) { + if (uVar8 >> 0x1e != 0) { + FUN_00030824(4); + uVar6 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar6,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + local_18 = uVar11; + if (uVar11 < 0x81) { + pvVar3 = (void *)std::__node_alloc::_M_allocate(&local_18); + uVar4 = local_18; + } + else { + pvVar3 = operator_new(uVar11); + uVar4 = uVar11; + } + if (iVar1 != iVar9) { + __aeabi_memcpy(pvVar3,iVar9,uVar11); + } + pvVar5 = (void *)*param_1; + if (pvVar5 != (void *)0x0) { + if ((uint)(param_1[2] - (int)pvVar5) < 0x81) { + std::__node_alloc::_M_deallocate(pvVar5,param_1[2] - (int)pvVar5); + } + else { + operator_delete(pvVar5); + } + } + *param_1 = (int)pvVar3; + param_1[2] = (int)pvVar3 + (uVar4 & 0xfffffffc); + } + else { + iVar7 = param_1[1]; + iVar10 = iVar7 - iVar2; + if ((uint)(iVar10 >> 2) < uVar8) { + if (iVar10 != 0) { + __aeabi_memmove(iVar2,iVar9,iVar10); + iVar9 = *param_2; + iVar1 = param_2[1]; + iVar2 = *param_1; + iVar7 = param_1[1]; + } + iVar9 = iVar9 + (iVar7 - iVar2); + if (iVar1 != iVar9) { + __aeabi_memcpy(iVar7,iVar9,iVar1 - iVar9); + } + } + else if (uVar11 != 0) { + __aeabi_memmove(iVar2,iVar9,uVar11); + } + } + param_1[1] = *param_1 + uVar8 * 4; + } + return param_1; +} + + + +### FUNC _Locale_impl @ 00037b90 + +/* std::_Locale_impl::_Locale_impl(unsigned int, char const*) */ + +_Locale_impl * __thiscall +std::_Locale_impl::_Locale_impl(_Locale_impl *this,uint param_1,char *param_2) + +{ + _Locale_impl *p_Var1; + void *pvVar2; + undefined4 uVar3; + uint uVar4; + void *pvVar5; + uint uVar6; + pthread_mutex_t *__mutex; + undefined1 auStack_1c [4]; + uint local_18; + + *(undefined4 *)this = 0; + __mutex = (pthread_mutex_t *)(this + 4); + pthread_mutex_init(__mutex,(pthread_mutexattr_t *)0x0); + p_Var1 = this + 8; + FUN_00031c38(p_Var1,param_2,auStack_1c); + *(undefined4 *)(this + 0x20) = 0; + *(undefined4 *)(this + 0x24) = 0; + *(undefined4 *)(this + 0x28) = 0; + if (param_1 >> 0x1e == 0) { + if (param_1 == 0) { + *(undefined4 *)(this + 0x20) = 0; + *(undefined4 *)(this + 0x24) = 0; + *(undefined4 *)(this + 0x28) = 0; + pvVar5 = (void *)0x0; + } + else { + uVar6 = param_1 * 4; + local_18 = uVar6; + if (uVar6 < 0x81) { + pvVar2 = (void *)__node_alloc::_M_allocate(&local_18); + uVar4 = local_18; + } + else { + pvVar2 = operator_new(uVar6); + uVar4 = uVar6; + } + *(void **)(this + 0x20) = pvVar2; + *(void **)(this + 0x24) = pvVar2; + *(uint *)(this + 0x28) = (int)pvVar2 + (uVar4 & 0xfffffffc); + pvVar5 = (void *)((int)pvVar2 + uVar6); + if (0 < (int)uVar6) { + uVar6 = param_1 ^ 0xffffffff; + if ((int)(param_1 ^ 0xffffffff) < -1) { + uVar6 = 0xfffffffe; + } + __aeabi_memclr4(pvVar2,(uVar6 + param_1) * 4 + 8,0xfffffffe,param_1,p_Var1,__mutex); + } + } + *(void **)(this + 0x24) = pvVar5; + Init::Init((Init *)&DAT_00070d50); + return this; + } + FUN_00030824(4); + uVar3 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); +} + + + +### FUNC ~_Locale_impl @ 00037ca0 + +/* std::_Locale_impl::~_Locale_impl() */ + +_Locale_impl * __thiscall std::_Locale_impl::~_Locale_impl(_Locale_impl *this) + +{ + int *piVar1; + _Locale_impl *p_Var2; + uint uVar3; + int *piVar4; + int iVar5; + int iVar6; + + Init::~Init((Init *)&DAT_00070d50); + piVar1 = *(int **)(this + 0x20); + piVar4 = *(int **)(this + 0x24); + if (piVar1 != piVar4) { + do { + iVar5 = *piVar1; + if (iVar5 != 0) { + pthread_mutex_lock((pthread_mutex_t *)(iVar5 + 8)); + iVar6 = *(int *)(iVar5 + 4) + -1; + *(int *)(iVar5 + 4) = iVar6; + pthread_mutex_unlock((pthread_mutex_t *)(iVar5 + 8)); + if (iVar6 == 0) { + if ((int *)*piVar1 != (int *)0x0) { + (**(code **)(*(int *)*piVar1 + 4))(); + } + *piVar1 = 0; + } + } + piVar1 = piVar1 + 1; + } while (piVar4 != piVar1); + piVar1 = *(int **)(this + 0x20); + } + if (piVar1 != (int *)0x0) { + if ((uint)(*(int *)(this + 0x28) - (int)piVar1) < 0x81) { + __node_alloc::_M_deallocate(piVar1,*(int *)(this + 0x28) - (int)piVar1); + } + else { + operator_delete(piVar1); + } + } + p_Var2 = *(_Locale_impl **)(this + 0x1c); + if ((p_Var2 != this + 8) && (p_Var2 != (_Locale_impl *)0x0)) { + uVar3 = *(int *)(this + 8) - (int)p_Var2; + if (uVar3 < 0x81) { + __node_alloc::_M_deallocate(p_Var2,uVar3); + } + else { + operator_delete(p_Var2); + } + } + pthread_mutex_destroy((pthread_mutex_t *)(this + 4)); + return this; +} + + + +### FUNC make_classic_locale @ 00037dac + +/* std::_Locale_impl::make_classic_locale() */ + +void std::_Locale_impl::make_classic_locale(void) + +{ + undefined4 *puVar1; + ctype *this; + moneypunct *this_00; + moneypunct *this_01; + messages *this_02; + moneypunct *this_03; + moneypunct *this_04; + messages *this_05; + uint uVar2; + int iVar3; + undefined4 local_88; + undefined4 *local_84; + ctype *local_80; + undefined4 *local_7c; + moneypunct *local_78; + moneypunct *local_74; + undefined4 *local_70; + messages *local_6c; + undefined4 *local_68; + undefined4 *local_64; + undefined4 *local_60; + undefined4 *local_5c; + undefined4 *local_58; + undefined4 *local_54; + undefined4 *local_50; + undefined4 *local_4c; + undefined4 *local_48; + moneypunct *local_44; + moneypunct *local_40; + undefined4 *local_3c; + messages *local_38; + undefined4 *local_34; + undefined4 *local_30; + undefined4 *local_2c; + undefined4 *local_28; + undefined4 *local_24; + undefined4 *local_20; + undefined4 local_1c; + undefined1 auStack_18 [4]; + + _Locale_impl((_Locale_impl *)&DAT_00070d80,"C"); + local_88 = 0; + puVar1 = (undefined4 *)operator_new(0xc); + puVar1[1] = 1; + pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); + *puVar1 = &PTR__collate_00069f98; + local_84 = puVar1; + this = (ctype *)operator_new(0x14); + ctype::ctype(this,(mask *)0x0,false,1); + local_80 = this; + puVar1 = (undefined4 *)operator_new(0xc); + puVar1[1] = 1; + pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); + *puVar1 = &PTR__codecvt_00069ee8; + local_7c = puVar1; + this_00 = (moneypunct *)operator_new(0x14); + moneypunct::moneypunct(this_00,1); + local_78 = this_00; + this_01 = (moneypunct *)operator_new(0x14); + moneypunct::moneypunct(this_01,1); + local_74 = this_01; + puVar1 = (undefined4 *)operator_new(0xc); + puVar1[1] = 1; + pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); + *puVar1 = &PTR__numpunct_0006a208; + local_70 = puVar1; + this_02 = (messages *)operator_new(0xc); + messages::messages(this_02,1); + local_6c = this_02; + puVar1 = (undefined4 *)operator_new(0xc); + puVar1[1] = 1; + pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); + *puVar1 = &PTR__facet_00069460; + local_68 = puVar1; + puVar1 = (undefined4 *)operator_new(0xc); + puVar1[1] = 1; + pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); + *puVar1 = &PTR__facet_00069484; + local_64 = puVar1; + puVar1 = (undefined4 *)operator_new(0xc); + puVar1[1] = 1; + pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); + *puVar1 = &PTR__facet_000694a8; + local_60 = puVar1; + puVar1 = (undefined4 *)operator_new(0xc); + puVar1[1] = 1; + pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); + *puVar1 = &PTR__facet_000694f0; + local_5c = puVar1; + puVar1 = (undefined4 *)operator_new(0x448); + puVar1[1] = 1; + pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); + *puVar1 = &PTR__facet_00069250; + priv::time_init::time_init(); + *puVar1 = &PTR_FUN_00039a00_1_000692ec; + local_58 = puVar1; + puVar1 = (undefined4 *)operator_new(0x448); + puVar1[1] = 1; + pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); + *puVar1 = &PTR__facet_00069250; + priv::time_init::time_init(); + *puVar1 = &PTR_FUN_0003aac0_1_0006935c; + local_54 = puVar1; + puVar1 = (undefined4 *)operator_new(0xc); + puVar1[1] = 1; + pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); + *puVar1 = &PTR__collate_00069fc0; + local_50 = puVar1; + puVar1 = (undefined4 *)operator_new(0xc); + puVar1[1] = 1; + pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); + *puVar1 = &PTR__ctype_0006a018; + local_4c = puVar1; + puVar1 = (undefined4 *)operator_new(0xc); + puVar1[1] = 1; + pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); + *puVar1 = &PTR__codecvt_00069f48; + local_48 = puVar1; + this_03 = (moneypunct *)operator_new(0x14); + moneypunct::moneypunct(this_03,1); + local_44 = this_03; + this_04 = (moneypunct *)operator_new(0x14); + moneypunct::moneypunct(this_04,1); + local_40 = this_04; + puVar1 = (undefined4 *)operator_new(0xc); + puVar1[1] = 1; + pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); + *puVar1 = &PTR__numpunct_0006a238; + local_3c = puVar1; + this_05 = (messages *)operator_new(0xc); + messages::messages(this_05,1); + local_38 = this_05; + puVar1 = (undefined4 *)operator_new(0xc); + puVar1[1] = 1; + pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); + *puVar1 = &PTR__facet_0006952c; + local_34 = puVar1; + puVar1 = (undefined4 *)operator_new(0xc); + puVar1[1] = 1; + pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); + *puVar1 = &PTR__facet_00069550; + local_30 = puVar1; + puVar1 = (undefined4 *)operator_new(0xc); + puVar1[1] = 1; + pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); + *puVar1 = &PTR__facet_00069574; + local_2c = puVar1; + puVar1 = (undefined4 *)operator_new(0xc); + puVar1[1] = 1; + pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); + *puVar1 = &PTR__facet_000695bc; + local_28 = puVar1; + puVar1 = (undefined4 *)operator_new(0xbc8); + puVar1[1] = 1; + pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); + *puVar1 = &PTR__facet_00069250; + priv::time_init::time_init(); + *puVar1 = &PTR_LAB_0003ac9a_1_000693dc; + local_24 = puVar1; + puVar1 = (undefined4 *)operator_new(0xbc8); + puVar1[1] = 1; + pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); + *puVar1 = &PTR__facet_00069250; + priv::time_init::time_init(); + *puVar1 = &PTR_FUN_0003bc38_1_0006944c; + local_1c = 0; + local_20 = puVar1; + FUN_000378f8(&DAT_00070da0,0x1c); + FUN_0004a040(&DAT_00070da0,&local_88,auStack_18,auStack_18); + uVar2 = FUN_00057b68(&DAT_00070db4,0,0); + if (((uVar2 & 1) == 0) && (iVar3 = FUN_0004e3a4(&DAT_00070db4), iVar3 != 0)) { + locale::locale((locale *)&DAT_00070db0,(_Locale_impl *)&DAT_00070d80); + __cxa_atexit(locale::~locale,&DAT_00070db0,&DAT_0006b000); + FUN_0004e40c(&DAT_00070db4); + } + DAT_00070d68 = &DAT_00070db0; + uVar2 = FUN_00057b68(&DAT_00070dbc,0,0); + if (((uVar2 & 1) == 0) && (iVar3 = FUN_0004e3a4(&DAT_00070dbc), iVar3 != 0)) { + locale::locale((locale *)&DAT_00070db8,(_Locale_impl *)&DAT_00070d80); + __cxa_atexit(locale::~locale,&DAT_00070db8,&DAT_0006b000); + FUN_0004e40c(&DAT_00070dbc); + } + DAT_00070d74 = &DAT_00070db8; + return; +} + + + +### FUNC _M_throw_bad_cast @ 000382c4 + +/* std::_Locale_impl::_M_throw_bad_cast() */ + +void std::_Locale_impl::_M_throw_bad_cast(void) + +{ + undefined4 uVar1; + + FUN_00030824(4); + uVar1 = FUN_000318b0(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar1,&PTR_PTR_FUN_00031728_1_00068e38,0x318c9); +} + + + +### FUNC insert @ 000382ec + +/* std::_Locale_impl::insert(std::_Locale_impl*, std::locale::id const&) */ + +void __thiscall std::_Locale_impl::insert(_Locale_impl *this,_Locale_impl *param_1,id *param_2) + +{ + uint uVar1; + + uVar1 = *(uint *)param_2; + if ((uVar1 != 0) && (uVar1 < (uint)(*(int *)(param_1 + 0x24) - *(int *)(param_1 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(param_1 + 0x20) + uVar1 * 4),param_2); + } + return; +} + + + +### FUNC insert @ 0003830c + +/* std::_Locale_impl::insert(std::locale::facet*, std::locale::id const&) */ + +facet * __thiscall std::_Locale_impl::insert(_Locale_impl *this,facet *param_1,id *param_2) + +{ + int iVar1; + facet *pfVar2; + uint uVar3; + int iVar4; + _Locale_impl *p_Var5; + int iVar6; + uint uVar7; + facet *pfVar8; + undefined4 local_20; + undefined1 auStack_1c [4]; + undefined1 auStack_18 [4]; + + pfVar2 = (facet *)0x0; + if ((param_1 != (facet *)0x0) && (uVar3 = *(uint *)param_2, uVar3 != 0)) { + iVar4 = *(int *)(this + 0x20); + iVar6 = *(int *)(this + 0x24); + uVar7 = iVar6 - iVar4 >> 2; + p_Var5 = this + 0x20; + if (uVar7 <= uVar3) { + local_20 = 0; + uVar3 = uVar3 + 1; + if (uVar3 < uVar7) { + iVar4 = iVar4 + uVar3 * 4; + if (iVar4 != iVar6) { + *(int *)(this + 0x24) = iVar4; + } + } + else { + uVar3 = uVar3 - uVar7; + if (uVar3 != 0) { + if ((uint)(*(int *)(this + 0x28) - iVar6 >> 2) < uVar3) { + FUN_000398e0(p_Var5,iVar6,&local_20,auStack_1c,uVar3,0); + } + else { + FUN_000397e8(p_Var5,iVar6,uVar3,&local_20,auStack_18); + } + } + } + iVar4 = *(int *)p_Var5; + uVar3 = *(uint *)param_2; + } + iVar6 = uVar3 * 4; + pfVar8 = *(facet **)(iVar4 + iVar6); + pfVar2 = param_1; + if (pfVar8 != param_1) { + if (pfVar8 != (facet *)0x0) { + pthread_mutex_lock((pthread_mutex_t *)(pfVar8 + 8)); + iVar1 = *(int *)(pfVar8 + 4); + *(int *)(pfVar8 + 4) = iVar1 + -1; + pthread_mutex_unlock((pthread_mutex_t *)(pfVar8 + 8)); + if (iVar1 + -1 == 0) { + if (*(int **)(iVar4 + iVar6) != (int *)0x0) { + (**(code **)(**(int **)(iVar4 + iVar6) + 4))(); + } + *(undefined4 *)(iVar4 + iVar6) = 0; + } + } + pthread_mutex_lock((pthread_mutex_t *)(param_1 + 8)); + *(int *)(param_1 + 4) = *(int *)(param_1 + 4) + 1; + pthread_mutex_unlock((pthread_mutex_t *)(param_1 + 8)); + *(facet **)(*(int *)p_Var5 + *(int *)param_2 * 4) = param_1; + } + } + return pfVar2; +} + + + +### FUNC insert_ctype_facets @ 000383f8 + +/* std::_Locale_impl::insert_ctype_facets(char const*&, char*, _Locale_name_hint*) */ + +_Locale_name_hint * __thiscall +std::_Locale_impl::insert_ctype_facets + (_Locale_impl *this,char **param_1,char *param_2,_Locale_name_hint *param_3) + +{ + char *pcVar1; + ctype *this_00; + codecvt_byname *this_01; + facet *pfVar2; + int *piVar3; + undefined4 uVar4; + facet *pfVar5; + int iVar6; + _Locale_name_hint *local_20; + int local_18; + + pcVar1 = *param_1; + if (*pcVar1 == '\0') { + pcVar1 = (char *)FUN_0004d960(param_2); + *param_1 = pcVar1; + } + if (((pcVar1 == (char *)0x0) || (*pcVar1 == '\0')) || ((*pcVar1 == 'C' && (pcVar1[1] == '\0')))) { + piVar3 = (int *)locale::classic(); + iVar6 = *piVar3; + if ((ctype::id != 0) && + (ctype::id < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + ctype::id * 4),(id *)&ctype::id); + } + if ((codecvt::id != 0) && + (codecvt::id < + (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + codecvt::id * 4), + (id *)&codecvt::id); + } + if ((ctype::id != 0) && + (ctype::id < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + ctype::id * 4), + (id *)&ctype::id); + } + if ((codecvt::id != 0) && + (codecvt::id < + (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + codecvt::id * 4), + (id *)&codecvt::id); + } + return param_3; + } + iVar6 = FUN_0004a144(param_1,param_2,param_3,&local_18); + if (iVar6 == 0) { + locale::_M_throw_on_creation_failure(local_18,*param_1,"ctype"); + pfVar5 = (facet *)param_2; + } + else { + local_20 = param_3; + if (param_3 == (_Locale_name_hint *)0x0) { + local_20 = (_Locale_name_hint *)FUN_0004da98(iVar6); + } + this_00 = (ctype *)operator_new(0x418); + ctype::ctype(this_00,(mask *)0x0,false,0); + *(undefined ***)this_00 = &PTR__ctype_byname_000695f8; + *(int *)(this_00 + 0x414) = iVar6; + ctype_byname::_M_init((ctype_byname *)this_00); + this_01 = (codecvt_byname *)operator_new(0xc); + pfVar5 = (facet *)0x0; + codecvt_byname::codecvt_byname(this_01,*param_1,0); + iVar6 = FUN_0004a144(param_1,param_2,local_20,&local_18); + param_3 = local_20; + if (iVar6 != 0) { + pfVar2 = (facet *)operator_new(0x10); + *(undefined4 *)(pfVar2 + 4) = 0; + pthread_mutex_init((pthread_mutex_t *)(pfVar2 + 8),(pthread_mutexattr_t *)0x0); + *(int *)(pfVar2 + 0xc) = iVar6; + *(undefined ***)pfVar2 = &PTR__ctype_byname_00069628; + iVar6 = FUN_0004a334(param_1,param_2,local_20,&local_18); + if (iVar6 != 0) { + pfVar5 = (facet *)operator_new(0x10); + *(undefined4 *)(pfVar5 + 4) = 0; + pthread_mutex_init((pthread_mutex_t *)(pfVar5 + 8),(pthread_mutexattr_t *)0x0); + *(int *)(pfVar5 + 0xc) = iVar6; + *(undefined ***)pfVar5 = &PTR__codecvt_byname_000696cc; + } + insert(this,(facet *)this_00,(id *)&ctype::id); + insert(this,(facet *)this_01,(id *)&codecvt::id); + insert(this,pfVar2,(id *)&ctype::id); + if (pfVar5 == (facet *)0x0) { + return local_20; + } + insert(this,pfVar5,(id *)&codecvt::id); + return local_20; + } + } + uVar4 = locale::_M_throw_on_creation_failure(local_18,*param_1,"ctype"); + operator_delete(pfVar5); + FUN_000308d8(uVar4); + FUN_0004a590(param_1); + (**(code **)(*(int *)param_3 + 4))(param_3); + uVar4 = FUN_00030a44(); + FUN_0003094c(); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar4); +} + + + +### FUNC insert_numeric_facets @ 00038730 + +/* std::_Locale_impl::insert_numeric_facets(char const*&, char*, _Locale_name_hint*) */ + +_Locale_name_hint * __thiscall +std::_Locale_impl::insert_numeric_facets + (_Locale_impl *this,char **param_1,char *param_2,_Locale_name_hint *param_3) + +{ + char *pcVar1; + int *piVar2; + facet *pfVar3; + facet *pfVar4; + undefined4 uVar5; + int iVar6; + char *local_20; + int local_18; + + if (**param_1 == '\0') { + pcVar1 = (char *)FUN_0004d968(param_2); + *param_1 = pcVar1; + } + piVar2 = (int *)locale::classic(); + iVar6 = *piVar2; + if ((DAT_00070d20 != 0) && + (DAT_00070d20 < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + DAT_00070d20 * 4),(id *)&DAT_00070d20); + } + if ((DAT_00070d1c != 0) && + (DAT_00070d1c < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + DAT_00070d1c * 4),(id *)&DAT_00070d1c); + } + if ((DAT_00070d24 != 0) && + (DAT_00070d24 < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + DAT_00070d24 * 4),(id *)&DAT_00070d24); + } + if ((DAT_00070d28 != 0) && + (DAT_00070d28 < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + DAT_00070d28 * 4),(id *)&DAT_00070d28); + } + pcVar1 = *param_1; + if (((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) && ((*pcVar1 != 'C' || (pcVar1[1] != '\0')))) { + pfVar3 = (facet *)FUN_0004a37c(param_1,param_2,param_3,&local_18); + pfVar4 = pfVar3; + local_20 = param_2; + if (pfVar3 != (facet *)0x0) { + if (param_3 == (_Locale_name_hint *)0x0) { + param_3 = (_Locale_name_hint *)FUN_0004da9c(pfVar3); + } + pfVar4 = (facet *)operator_new(0x10); + *(undefined4 *)(pfVar4 + 4) = 0; + pthread_mutex_init((pthread_mutex_t *)(pfVar4 + 8),(pthread_mutexattr_t *)0x0); + *(facet **)(pfVar4 + 0xc) = pfVar3; + *(undefined ***)pfVar4 = &PTR__numpunct_byname_000696f8; + iVar6 = FUN_0004a37c(param_1,param_2,param_3,&local_18); + if (iVar6 != 0) { + pfVar3 = (facet *)operator_new(0x10); + *(undefined4 *)(pfVar3 + 4) = 0; + pthread_mutex_init((pthread_mutex_t *)(pfVar3 + 8),(pthread_mutexattr_t *)0x0); + *(int *)(pfVar3 + 0xc) = iVar6; + *(undefined ***)pfVar3 = &PTR__numpunct_byname_0006971c; + insert(this,pfVar4,(id *)&numpunct::id); + insert(this,pfVar3,(id *)&numpunct::id); + return param_3; + } + (**(code **)(*(int *)pfVar4 + 4))(pfVar4); + local_20 = (char *)0x0; + } + uVar5 = locale::_M_throw_on_creation_failure(local_18,*param_1,"numpunct"); + operator_delete(param_1); + FUN_000308d8(uVar5); + FUN_0004a614(local_20); + (**(code **)(*(int *)pfVar4 + 4))(pfVar4); + uVar5 = FUN_00030a44(); + FUN_0003094c(); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar5); + } + if ((numpunct::id != 0) && + (numpunct::id < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + numpunct::id * 4), + (id *)&numpunct::id); + } + if ((numpunct::id != 0) && + (numpunct::id < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + numpunct::id * 4), + (id *)&numpunct::id); + } + return param_3; +} + + + +### FUNC insert_time_facets @ 000389a8 + +/* std::_Locale_impl::insert_time_facets(char const*&, char*, _Locale_name_hint*) */ + +_Locale_name_hint * __thiscall +std::_Locale_impl::insert_time_facets + (_Locale_impl *this,char **param_1,char *param_2,_Locale_name_hint *param_3) + +{ + char *pcVar1; + _Locale_time *p_Var2; + facet *pfVar3; + facet *pfVar4; + facet *pfVar5; + facet *pfVar6; + int *piVar7; + undefined4 uVar8; + int iVar9; + int local_18; + + pcVar1 = *param_1; + if (*pcVar1 == '\0') { + pcVar1 = (char *)FUN_0004d970(param_2); + *param_1 = pcVar1; + } + if (((pcVar1 == (char *)0x0) || (*pcVar1 == '\0')) || ((*pcVar1 == 'C' && (pcVar1[1] == '\0')))) { + piVar7 = (int *)locale::classic(); + iVar9 = *piVar7; + if ((DAT_00070d2c != 0) && + (DAT_00070d2c < (uint)(*(int *)(iVar9 + 0x24) - *(int *)(iVar9 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar9 + 0x20) + DAT_00070d2c * 4),(id *)&DAT_00070d2c); + } + if ((DAT_00070d30 != 0) && + (DAT_00070d30 < (uint)(*(int *)(iVar9 + 0x24) - *(int *)(iVar9 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar9 + 0x20) + DAT_00070d30 * 4),(id *)&DAT_00070d30); + } + if ((DAT_00070d34 != 0) && + (DAT_00070d34 < (uint)(*(int *)(iVar9 + 0x24) - *(int *)(iVar9 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar9 + 0x20) + DAT_00070d34 * 4),(id *)&DAT_00070d34); + } + if ((DAT_00070d38 != 0) && + (DAT_00070d38 < (uint)(*(int *)(iVar9 + 0x24) - *(int *)(iVar9 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar9 + 0x20) + DAT_00070d38 * 4),(id *)&DAT_00070d38); + } + } + else { + p_Var2 = (_Locale_time *)FUN_0004a3cc(param_1,param_2,param_3,&local_18); + if (p_Var2 == (_Locale_time *)0x0) { + if (local_18 == 4) { + FUN_00030824(4); + uVar8 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar8,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + } + else { + if (param_3 == (_Locale_name_hint *)0x0) { + param_3 = (_Locale_name_hint *)FUN_0004daa0(p_Var2); + } + pfVar3 = (facet *)operator_new(0x448); + *(undefined4 *)(pfVar3 + 4) = 0; + pthread_mutex_init((pthread_mutex_t *)(pfVar3 + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)pfVar3 = &PTR__facet_00069250; + priv::time_init::time_init((time_init *)(pfVar3 + 0xc),p_Var2); + *(undefined ***)pfVar3 = &PTR_FUN_00039a00_1_00069280; + pfVar4 = (facet *)operator_new(0x448); + *(undefined4 *)(pfVar4 + 4) = 0; + pthread_mutex_init((pthread_mutex_t *)(pfVar4 + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)pfVar4 = &PTR__facet_00069250; + priv::time_init::time_init((time_init *)(pfVar4 + 0xc),p_Var2); + *(undefined ***)pfVar4 = &PTR_FUN_0003aac0_1_00069314; + pfVar5 = (facet *)operator_new(0xbc8); + *(undefined4 *)(pfVar5 + 4) = 0; + pthread_mutex_init((pthread_mutex_t *)(pfVar5 + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)pfVar5 = &PTR__facet_00069250; + priv::time_init::time_init((time_init *)(pfVar5 + 0xc),p_Var2); + *(undefined ***)pfVar5 = &PTR_LAB_0003ac9a_1_00069370; + pfVar6 = (facet *)operator_new(0xbc8); + *(undefined4 *)(pfVar6 + 4) = 0; + pthread_mutex_init((pthread_mutex_t *)(pfVar6 + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)pfVar6 = &PTR__facet_00069250; + priv::time_init::time_init((time_init *)(pfVar6 + 0xc),p_Var2); + *(undefined ***)pfVar6 = &PTR_FUN_0003bc38_1_00069404; + FUN_0004a698(p_Var2); + insert(this,pfVar3,(id *)&DAT_00070d2c); + insert(this,pfVar4,(id *)&DAT_00070d30); + insert(this,pfVar5,(id *)&DAT_00070d34); + insert(this,pfVar6,(id *)&DAT_00070d38); + } + } + return param_3; +} + + + +### FUNC insert_collate_facets @ 00038d24 + +/* std::_Locale_impl::insert_collate_facets(char const*&, char*, _Locale_name_hint*) */ + +_Locale_name_hint * __thiscall +std::_Locale_impl::insert_collate_facets + (_Locale_impl *this,char **param_1,char *param_2,_Locale_name_hint *param_3) + +{ + char *pcVar1; + facet *pfVar2; + facet *pfVar3; + int *piVar4; + undefined4 uVar5; + id *piVar6; + int iVar7; + int local_18; + + pcVar1 = *param_1; + if (*pcVar1 == '\0') { + pcVar1 = (char *)FUN_0004d978(param_2); + *param_1 = pcVar1; + } + if (((pcVar1 == (char *)0x0) || (*pcVar1 == '\0')) || ((*pcVar1 == 'C' && (pcVar1[1] == '\0')))) { + piVar4 = (int *)locale::classic(); + iVar7 = *piVar4; + if ((collate::id != 0) && + (collate::id < (uint)(*(int *)(iVar7 + 0x24) - *(int *)(iVar7 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar7 + 0x20) + collate::id * 4), + (id *)&collate::id); + } + if ((collate::id != 0) && + (collate::id < (uint)(*(int *)(iVar7 + 0x24) - *(int *)(iVar7 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar7 + 0x20) + collate::id * 4), + (id *)&collate::id); + } + } + else { + iVar7 = FUN_0004a41c(param_1,param_2,param_3,&local_18); + if (iVar7 == 0) { + if (local_18 == 4) { + FUN_00030824(4); + uVar5 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar5,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + } + else { + if (param_3 == (_Locale_name_hint *)0x0) { + param_3 = (_Locale_name_hint *)FUN_0004daa4(iVar7); + } + pfVar2 = (facet *)operator_new(0x10); + *(undefined4 *)(pfVar2 + 4) = 0; + pthread_mutex_init((pthread_mutex_t *)(pfVar2 + 8),(pthread_mutexattr_t *)0x0); + *(int *)(pfVar2 + 0xc) = iVar7; + *(undefined ***)pfVar2 = &PTR__collate_byname_00069668; + iVar7 = FUN_0004a41c(param_1,param_2,param_3,&local_18); + if ((iVar7 == 0) && (local_18 == 4)) { + (**(code **)(*(int *)pfVar2 + 4))(); + FUN_00030824(4); + uVar5 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar5,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + if (iVar7 == 0) { + piVar6 = (id *)&collate::id; + } + else { + pfVar3 = (facet *)operator_new(0x10); + *(undefined4 *)(pfVar3 + 4) = 0; + pthread_mutex_init((pthread_mutex_t *)(pfVar3 + 8),(pthread_mutexattr_t *)0x0); + *(int *)(pfVar3 + 0xc) = iVar7; + *(undefined ***)pfVar3 = &PTR__collate_byname_00069684; + insert(this,pfVar2,(id *)&collate::id); + piVar6 = (id *)&collate::id; + pfVar2 = pfVar3; + } + insert(this,pfVar2,piVar6); + } + } + return param_3; +} + + + +### FUNC insert_monetary_facets @ 00038f3c + +/* std::_Locale_impl::insert_monetary_facets(char const*&, char*, _Locale_name_hint*) */ + +_Locale_name_hint * __thiscall +std::_Locale_impl::insert_monetary_facets + (_Locale_impl *this,char **param_1,char *param_2,_Locale_name_hint *param_3) + +{ + char *pcVar1; + int *piVar2; + _Locale_monetary *p_Var3; + moneypunct_byname *this_00; + moneypunct_byname *this_01; + undefined4 uVar4; + moneypunct_byname *this_02; + int iVar5; + facet *local_20; + _Locale_name_hint *local_1c; + int local_18; + + if (**param_1 == '\0') { + pcVar1 = (char *)FUN_0004d980(param_2); + *param_1 = pcVar1; + } + piVar2 = (int *)locale::classic(); + iVar5 = *piVar2; + if ((DAT_00070d0c != 0) && + (DAT_00070d0c < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + DAT_00070d0c * 4),(id *)&DAT_00070d0c); + } + if ((DAT_00070d10 != 0) && + (DAT_00070d10 < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + DAT_00070d10 * 4),(id *)&DAT_00070d10); + } + if ((DAT_00070d14 != 0) && + (DAT_00070d14 < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + DAT_00070d14 * 4),(id *)&DAT_00070d14); + } + if ((DAT_00070d18 != 0) && + (DAT_00070d18 < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + DAT_00070d18 * 4),(id *)&DAT_00070d18); + } + pcVar1 = *param_1; + if (((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) && ((*pcVar1 != 'C' || (pcVar1[1] != '\0')))) { + p_Var3 = (_Locale_monetary *)FUN_0004a46c(param_1,param_2,param_3,&local_18); + if (p_Var3 == (_Locale_monetary *)0x0) { + if (local_18 == 4) { + FUN_00030824(4); + uVar4 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar4,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + } + else { + local_1c = param_3; + if (param_3 == (_Locale_name_hint *)0x0) { + local_1c = (_Locale_name_hint *)FUN_0004daa8(p_Var3); + } + this_00 = (moneypunct_byname *)operator_new(0x18); + moneypunct_byname::moneypunct_byname(this_00,p_Var3); + p_Var3 = (_Locale_monetary *)FUN_0004a46c(param_1,param_2,local_1c,&local_18); + param_3 = local_1c; + if (p_Var3 == (_Locale_monetary *)0x0) { + (**(code **)(*(int *)this_00 + 4))(this_00); + if (local_18 == 4) { + FUN_00030824(4); + uVar4 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar4,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + } + else { + this_01 = (moneypunct_byname *)operator_new(0x18); + moneypunct_byname::moneypunct_byname(this_01,p_Var3); + p_Var3 = (_Locale_monetary *)FUN_0004a46c(param_1,param_2,local_1c,&local_18); + if ((p_Var3 == (_Locale_monetary *)0x0) && (local_18 == 4)) { + FUN_00030824(4); + uVar4 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar4,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + if (p_Var3 == (_Locale_monetary *)0x0) { + local_20 = (facet *)0x0; + this_02 = (moneypunct_byname *)0x0; + } + else { + this_02 = (moneypunct_byname *)operator_new(0x18); + moneypunct_byname::moneypunct_byname(this_02,p_Var3); + p_Var3 = (_Locale_monetary *)FUN_0004a46c(param_1,param_2,local_1c,&local_18); + if (p_Var3 == (_Locale_monetary *)0x0) { + (**(code **)(*(int *)this_02 + 4))(); + this_02 = (moneypunct_byname *)0x0; + local_20 = (facet *)0x0; + if (local_18 == 4) { + FUN_00030824(4); + uVar4 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar4,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + } + else { + local_20 = (facet *)operator_new(0x18); + moneypunct_byname::moneypunct_byname + ((moneypunct_byname *)local_20,p_Var3); + } + } + insert(this,(facet *)this_00,(id *)&moneypunct::id); + insert(this,(facet *)this_01,(id *)&moneypunct::id); + if (this_02 != (moneypunct_byname *)0x0) { + insert(this,(facet *)this_02,(id *)&moneypunct::id); + } + if (local_20 != (facet *)0x0) { + insert(this,local_20,(id *)&moneypunct::id); + } + } + } + return param_3; + } + if ((moneypunct::id != 0) && + (moneypunct::id < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + moneypunct::id * 4), + (id *)&moneypunct::id); + } + if ((moneypunct::id != 0) && + (moneypunct::id < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + moneypunct::id * 4), + (id *)&moneypunct::id); + } + if ((moneypunct::id != 0) && + (moneypunct::id < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) + { + insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + moneypunct::id * 4), + (id *)&moneypunct::id); + } + if ((moneypunct::id != 0) && + (moneypunct::id < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) + { + insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + moneypunct::id * 4), + (id *)&moneypunct::id); + } + return param_3; +} + + + +### FUNC insert_messages_facets @ 0003938c + +/* std::_Locale_impl::insert_messages_facets(char const*&, char*, _Locale_name_hint*) */ + +_Locale_name_hint * __thiscall +std::_Locale_impl::insert_messages_facets + (_Locale_impl *this,char **param_1,char *param_2,_Locale_name_hint *param_3) + +{ + char *pcVar1; + _Locale_messages *p_Var2; + messages_byname *this_00; + messages_byname *this_01; + int *piVar3; + undefined4 uVar4; + id *piVar5; + int iVar6; + int local_18; + + pcVar1 = *param_1; + if (*pcVar1 == '\0') { + pcVar1 = (char *)FUN_0004d988(param_2); + *param_1 = pcVar1; + } + if (((pcVar1 == (char *)0x0) || (*pcVar1 == '\0')) || ((*pcVar1 == 'C' && (pcVar1[1] == '\0')))) { + piVar3 = (int *)locale::classic(); + iVar6 = *piVar3; + if ((messages::id != 0) && + (messages::id < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { + insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + messages::id * 4), + (id *)&messages::id); + } + if (messages::id == 0) { + return param_3; + } + if ((uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2) <= messages::id) { + return param_3; + } + this_00 = *(messages_byname **)(*(int *)(iVar6 + 0x20) + messages::id * 4); + piVar5 = (id *)&messages::id; + } + else { + p_Var2 = (_Locale_messages *)FUN_0004a4bc(param_1,param_2,param_3,&local_18); + if (p_Var2 == (_Locale_messages *)0x0) { + if (local_18 != 4) { + return param_3; + } + FUN_00030824(4); + uVar4 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar4,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + this_00 = (messages_byname *)operator_new(0x10); + messages_byname::messages_byname((messages_byname *)this_00,p_Var2); + p_Var2 = (_Locale_messages *)FUN_0004a4bc(param_1,param_2,param_3,&local_18); + if ((p_Var2 == (_Locale_messages *)0x0) && (local_18 == 4)) { + FUN_00030824(4); + uVar4 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar4,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + if (p_Var2 == (_Locale_messages *)0x0) { + piVar5 = (id *)&messages::id; + } + else { + this_01 = (messages_byname *)operator_new(0x10); + messages_byname::messages_byname(this_01,p_Var2); + insert(this,(facet *)this_00,(id *)&messages::id); + piVar5 = (id *)&messages::id; + this_00 = this_01; + } + } + insert(this,(facet *)this_00,piVar5); + return param_3; +} + + + +### FUNC FUN_0003956c @ 0003956c + +undefined4 FUN_0003956c(void) + +{ + uint uVar1; + int iVar2; + + uVar1 = FUN_00057b68(&DAT_00070d64,0,0); + if (((uVar1 & 1) == 0) && (iVar2 = FUN_0004e3a4(&DAT_00070d64), iVar2 != 0)) { + std::_Locale_impl::Init::Init((Init *)&DAT_00070d60); + __cxa_atexit(std::_Locale_impl::Init::~Init,&DAT_00070d60,&DAT_0006b000); + FUN_0004e40c(&DAT_00070d64); + } + return DAT_00070d68; +} + + + +### FUNC FUN_000395ec @ 000395ec + +undefined4 FUN_000395ec(void) + +{ + uint uVar1; + int iVar2; + + uVar1 = FUN_00057b68(&DAT_00070d70,0,0); + if (((uVar1 & 1) == 0) && (iVar2 = FUN_0004e3a4(&DAT_00070d70), iVar2 != 0)) { + std::_Locale_impl::Init::Init((Init *)&DAT_00070d6c); + __cxa_atexit(std::_Locale_impl::Init::~Init,&DAT_00070d6c,&DAT_0006b000); + FUN_0004e40c(&DAT_00070d70); + } + return DAT_00070d74; +} + + + +### FUNC _get_Locale_impl @ 0003966c + +/* WARNING: Unknown calling convention -- yet parameter storage is locked */ +/* std::_get_Locale_impl(std::_Locale_impl*) */ + +_Locale_impl * std::_get_Locale_impl(_Locale_impl *param_1) + +{ + pthread_mutex_lock((pthread_mutex_t *)(param_1 + 4)); + *(int *)param_1 = *(int *)param_1 + 1; + pthread_mutex_unlock((pthread_mutex_t *)(param_1 + 4)); + return param_1; +} + + + +### FUNC FUN_0003968c @ 0003968c + +void FUN_0003968c(undefined4 *param_1) + +{ + int iVar1; + _Locale_impl *this; + int *piVar2; + + piVar2 = (int *)*param_1; + pthread_mutex_lock((pthread_mutex_t *)(piVar2 + 1)); + iVar1 = *piVar2; + *piVar2 = iVar1 + -1; + pthread_mutex_unlock((pthread_mutex_t *)(piVar2 + 1)); + if (iVar1 + -1 != 0) { + return; + } + this = (_Locale_impl *)*param_1; + if ((_Locale_impl *)*DAT_00070d68 == this) { + std::_Locale_impl::~_Locale_impl(this); + } + else if (this != (_Locale_impl *)0x0) { + std::_Locale_impl::~_Locale_impl(this); + operator_delete(this); + } + *param_1 = 0; + return; +} + + + +### FUNC _copy_Nameless_Locale_impl @ 000396f8 + +/* WARNING: Unknown calling convention -- yet parameter storage is locked */ +/* std::_copy_Nameless_Locale_impl(std::_Locale_impl*) */ + +_Locale_impl * std::_copy_Nameless_Locale_impl(_Locale_impl *param_1) + +{ + _Locale_impl *this; + undefined1 *puVar1; + undefined1 *puVar2; + + this = (_Locale_impl *)operator_new(0x2c); + _Locale_impl::_Locale_impl(this,param_1); + if (*(undefined1 **)(this + 0x18) == *(undefined1 **)(this + 0x1c)) { + FUN_00037294(this + 8,&DAT_00064ee3,&DAT_00064ee4); + } + else { + **(undefined1 **)(this + 0x1c) = 0x2a; + puVar1 = *(undefined1 **)(this + 0x18); + puVar2 = (undefined1 *)(*(int *)(this + 0x1c) + 1); + if (puVar2 != puVar1) { + *puVar2 = *puVar1; + *(undefined1 **)(this + 0x18) = puVar2 + (*(int *)(this + 0x18) - (int)puVar1); + return this; + } + } + return this; +} + + + +### FUNC _GetFacetId @ 00039758 + +/* std::priv::_GetFacetId(std::money_get + > > const*) */ + +undefined4 * std::priv::_GetFacetId(money_get *param_1) + +{ + return &DAT_00070d0c; +} + + + +### FUNC _GetFacetId @ 00039764 + +/* std::priv::_GetFacetId(std::money_put + > > const*) */ + +undefined4 * std::priv::_GetFacetId(money_put *param_1) + +{ + return &DAT_00070d10; +} + + + +### FUNC _GetFacetId @ 00039770 + +/* std::priv::_GetFacetId(std::money_get > > const*) */ + +undefined4 * std::priv::_GetFacetId(money_get *param_1) + +{ + return &DAT_00070d14; +} + + + +### FUNC _GetFacetId @ 0003977c + +/* std::priv::_GetFacetId(std::money_put > > const*) */ + +undefined4 * std::priv::_GetFacetId(money_put *param_1) + +{ + return &DAT_00070d18; +} + + + +### FUNC _GetFacetId @ 00039788 + +/* std::priv::_GetFacetId(std::num_get > + > const*) */ + +undefined4 * std::priv::_GetFacetId(num_get *param_1) + +{ + return &DAT_00070d1c; +} + + + +### FUNC _GetFacetId @ 00039794 + +/* std::priv::_GetFacetId(std::num_get > > const*) */ + +undefined4 * std::priv::_GetFacetId(num_get *param_1) + +{ + return &DAT_00070d24; +} + + + +### FUNC _GetFacetId @ 000397a0 + +/* std::priv::_GetFacetId(std::num_put > + > const*) */ + +undefined4 * std::priv::_GetFacetId(num_put *param_1) + +{ + return &DAT_00070d20; +} + + + +### FUNC _GetFacetId @ 000397ac + +/* std::priv::_GetFacetId(std::num_put > > const*) */ + +undefined4 * std::priv::_GetFacetId(num_put *param_1) + +{ + return &DAT_00070d28; +} + + + +### FUNC _GetFacetId @ 000397b8 + +/* std::priv::_GetFacetId(std::time_get + > > const*) */ + +undefined4 * std::priv::_GetFacetId(time_get *param_1) + +{ + return &DAT_00070d2c; +} + + + +### FUNC _GetFacetId @ 000397c4 + +/* std::priv::_GetFacetId(std::time_put + > > const*) */ + +undefined4 * std::priv::_GetFacetId(time_put *param_1) + +{ + return &DAT_00070d30; +} + + + +### FUNC _GetFacetId @ 000397d0 + +/* std::priv::_GetFacetId(std::time_get > > const*) */ + +undefined4 * std::priv::_GetFacetId(time_get *param_1) + +{ + return &DAT_00070d34; +} + + + +### FUNC _GetFacetId @ 000397dc + +/* std::priv::_GetFacetId(std::time_put > > const*) */ + +undefined4 * std::priv::_GetFacetId(time_put *param_1) + +{ + return &DAT_00070d38; +} + + + +### FUNC FUN_000397e8 @ 000397e8 + +void FUN_000397e8(uint *param_1,undefined4 *param_2,uint param_3,undefined4 *param_4) + +{ + uint uVar1; + uint uVar2; + undefined4 *puVar3; + undefined4 *puVar4; + int iVar5; + undefined4 *puVar6; + undefined1 auStack_1c [4]; + undefined4 local_18; + + puVar4 = (undefined4 *)param_1[1]; + if (((undefined4 *)*param_1 <= param_4) && (param_4 < puVar4)) { + local_18 = *param_4; + FUN_000397e8(param_1,param_2,param_3,&local_18,auStack_1c); + return; + } + uVar1 = (int)puVar4 - (int)param_2; + uVar2 = (int)uVar1 >> 2; + if (param_3 < uVar2) { + puVar3 = puVar4; + if (param_3 != 0) { + __aeabi_memcpy(puVar4,puVar4 + -param_3,param_3 * 4); + puVar3 = (undefined4 *)param_1[1]; + } + param_1[1] = (uint)(puVar3 + param_3); + iVar5 = (int)(puVar4 + -param_3) - (int)param_2; + if (0 < iVar5) { + __aeabi_memmove((int)puVar4 - iVar5,param_2); + } + if (0 < (int)(param_3 * 4)) { + iVar5 = param_3 + 1; + do { + *param_2 = *param_4; + param_2 = param_2 + 1; + iVar5 = iVar5 + -1; + } while (1 < iVar5); + } + } + else { + puVar3 = puVar4 + (param_3 - uVar2); + if (0 < (int)((param_3 - uVar2) * 4)) { + iVar5 = (param_3 + 1) - uVar2; + puVar6 = puVar4; + do { + *puVar6 = *param_4; + puVar6 = puVar6 + 1; + iVar5 = iVar5 + -1; + } while (1 < iVar5); + } + param_1[1] = (uint)puVar3; + if (puVar4 != param_2) { + __aeabi_memcpy(puVar3,param_2,uVar1); + puVar3 = (undefined4 *)param_1[1]; + } + param_1[1] = (uint)(puVar3 + uVar2); + if (0 < (int)uVar1) { + iVar5 = (uVar1 >> 2) + 1; + do { + *param_2 = *param_4; + param_2 = param_2 + 1; + iVar5 = iVar5 + -1; + } while (1 < iVar5); + } + } + return; +} + + + +### FUNC FUN_000398e0 @ 000398e0 + +void FUN_000398e0(int *param_1,int param_2,undefined4 *param_3,undefined4 param_4,uint param_5, + int param_6) + +{ + undefined4 *puVar1; + void *pvVar2; + undefined4 uVar3; + int iVar4; + undefined4 *puVar5; + uint uVar6; + uint uVar7; + uint uVar8; + int iVar9; + undefined4 *puVar10; + uint local_2c; + uint local_18; + + iVar4 = *param_1; + uVar6 = param_1[1] - iVar4 >> 2; + if (0x3fffffff - uVar6 < param_5) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("vector"); + } + uVar7 = uVar6; + if (uVar6 <= param_5) { + uVar7 = param_5; + } + uVar6 = uVar7 + uVar6; + uVar8 = uVar6; + if (uVar6 < uVar7) { + uVar8 = 0x3fffffff; + } + local_2c = 0x3fffffff; + if (uVar6 < 0x40000000) { + local_2c = uVar8; + } + if (0x3fffffff < local_2c) { + FUN_00030824(4); + uVar3 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + if (local_2c == 0) { + puVar1 = (undefined4 *)0x0; + local_2c = 0; + } + else { + local_2c = local_2c << 2; + local_18 = local_2c; + if (local_2c < 0x81) { + puVar1 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18); + local_2c = local_18; + } + else { + puVar1 = (undefined4 *)operator_new(local_2c); + } + iVar4 = *param_1; + local_2c = local_2c >> 2; + } + iVar9 = param_2 - iVar4; + puVar10 = puVar1; + if (iVar9 != 0) { + __aeabi_memmove(puVar1,iVar4,iVar9); + puVar10 = (undefined4 *)((int)puVar1 + iVar9); + } + puVar5 = puVar10; + uVar6 = param_5; + if (param_5 != 0) { + do { + *puVar5 = *param_3; + uVar6 = uVar6 - 1; + puVar5 = puVar5 + 1; + } while (uVar6 != 0); + puVar10 = puVar10 + param_5; + } + if ((param_6 == 0) && (iVar4 = param_1[1] - param_2, iVar4 != 0)) { + __aeabi_memmove(puVar10,param_2,iVar4); + puVar10 = (undefined4 *)((int)puVar10 + iVar4); + } + pvVar2 = (void *)*param_1; + if (pvVar2 != (void *)0x0) { + if ((uint)(param_1[2] - (int)pvVar2) < 0x81) { + std::__node_alloc::_M_deallocate(pvVar2,param_1[2] - (int)pvVar2); + } + else { + operator_delete(pvVar2); + } + } + *param_1 = (int)puVar1; + param_1[1] = (int)puVar10; + param_1[2] = (int)(puVar1 + local_2c); + return; +} + + + +### FUNC FUN_00039a00 @ 00039a00 + +void FUN_00039a00(facet *param_1) + +{ + FUN_00039fc0(param_1 + 0xc); + std::locale::facet::~facet(param_1); + return; +} + + + +### FUNC FUN_00039a68 @ 00039a68 + +void FUN_00039a68(undefined4 *param_1,int param_2,int *param_3,uint param_4,int *param_5, + uint param_6,undefined4 param_7,uint *param_8,undefined4 param_9) + +{ + int iVar1; + int iVar2; + uint uVar3; + + iVar1 = *(int *)(param_2 + 0x1c); + uVar3 = 0; + iVar2 = FUN_0003a344(param_3,param_4,param_5,param_6,*(undefined4 *)(param_2 + 0x20),iVar1,0, + param_2 + 0xc,param_7,param_8,param_9); + if (iVar2 != iVar1) { + uVar3 = 4; + } + *param_8 = uVar3; + if ((param_3 != (int *)0x0) && ((param_4 & 0xff0000) == 0)) { + if ((byte *)param_3[2] < (byte *)param_3[3]) { + uVar3 = (uint)*(byte *)param_3[2]; + } + else { + uVar3 = (**(code **)(*param_3 + 0x20))(param_3); + } + param_4 = param_4 & 0xff000000 | uVar3 & 0xff | (uint)(uVar3 == 0xffffffff) << 8 | 0x10000; + } + if ((param_5 != (int *)0x0) && ((param_6 & 0xff0000) == 0)) { + if ((byte *)param_5[2] < (byte *)param_5[3]) { + uVar3 = (uint)*(byte *)param_5[2]; + } + else { + uVar3 = (**(code **)(*param_5 + 0x20))(); + } + param_6 = (uint)(uVar3 == 0xffffffff) << 8; + } + if ((param_4 >> 8 & 0xff) == (param_6 >> 8 & 0xff)) { + *param_8 = *param_8 | 2; + } + *param_1 = param_3; + param_1[1] = param_4; + return; +} + + + +### FUNC FUN_00039b82 @ 00039b82 + +undefined4 * +FUN_00039b82(undefined4 *param_1,int param_2,int *param_3,uint param_4,int *param_5,uint param_6, + undefined4 param_7,uint *param_8,undefined4 param_9) + +{ + int iVar1; + int iVar2; + uint uVar3; + + iVar1 = *(int *)(param_2 + 0x34); + uVar3 = 0; + iVar2 = FUN_0003a344(param_3,param_4,param_5,param_6,*(undefined4 *)(param_2 + 0x38),iVar1,0, + param_2 + 0xc,param_7,param_8,param_9); + if (iVar2 != iVar1) { + *param_8 = 4; + if ((param_3 != (int *)0x0) && ((param_4 & 0xff0000) == 0)) { + if ((byte *)param_3[2] < (byte *)param_3[3]) { + uVar3 = (uint)*(byte *)param_3[2]; + } + else { + uVar3 = (**(code **)(*param_3 + 0x20))(param_3); + } + param_4 = param_4 & 0xff000000 | uVar3 & 0xff | (uint)(uVar3 == 0xffffffff) << 8 | 0x10000; + } + if ((param_5 != (int *)0x0) && ((param_6 & 0xff0000) == 0)) { + if ((byte *)param_5[2] < (byte *)param_5[3]) { + uVar3 = (uint)*(byte *)param_5[2]; + } + else { + uVar3 = (**(code **)(*param_5 + 0x20))(); + } + param_6 = (uint)(uVar3 == 0xffffffff) << 8; + } + if ((param_4 >> 8 & 0xff) != (param_6 >> 8 & 0xff)) goto LAB_00039ca2; + uVar3 = *param_8 | 2; + } + *param_8 = uVar3; +LAB_00039ca2: + *param_1 = param_3; + param_1[1] = param_4; + return param_1 + 2; +} + + + +### FUNC FUN_00039caa @ 00039caa + +void FUN_00039caa(undefined4 *param_1,int param_2,int *param_3,undefined4 param_4,int *param_5, + int param_6,undefined4 param_7,uint *param_8,int param_9) + +{ + int iVar1; + uint uVar2; + undefined4 extraout_r1; + int *local_28; + undefined4 local_24; + int *local_20; + undefined4 local_1c; + + local_24 = param_6; + local_28 = param_5; + local_20 = param_3; + local_1c = param_4; + iVar1 = FUN_0003a678(&local_20,&local_28,param_2 + 0x84,param_2 + 0x1d4); + if (iVar1 == 0xe) { + *param_8 = 4; + if ((local_20 != (int *)0x0) && (local_1c._2_1_ == '\0')) { + if ((byte *)local_20[2] < (byte *)local_20[3]) { + uVar2 = (uint)*(byte *)local_20[2]; + } + else { + uVar2 = (**(code **)(*local_20 + 0x20))(); + } + local_1c = CONCAT13(local_1c._3_1_,0x10000); + local_1c._0_2_ = CONCAT11(uVar2 == 0xffffffff,(char)uVar2); + } + if ((local_28 != (int *)0x0) && (local_24._2_1_ == '\0')) { + if ((byte *)local_28[2] < (byte *)local_28[3]) { + uVar2 = (uint)*(byte *)local_28[2]; + } + else { + uVar2 = (**(code **)(*local_28 + 0x20))(); + } + local_24 = (uint)(uVar2 == 0xffffffff) << 8; + } + if (local_1c._1_1_ != local_24._1_1_) goto LAB_00039d62; + uVar2 = *param_8 | 2; + } + else { + __aeabi_uidivmod(iVar1,7); + *(undefined4 *)(param_9 + 0x18) = extraout_r1; + uVar2 = 0; + } + *param_8 = uVar2; +LAB_00039d62: + *param_1 = local_20; + param_1[1] = local_1c; + return; +} + + + +### FUNC FUN_00039d6c @ 00039d6c + +void FUN_00039d6c(undefined4 *param_1,int param_2,int *param_3,undefined4 param_4,int *param_5, + int param_6,undefined4 param_7,uint *param_8,int param_9) + +{ + int iVar1; + uint uVar2; + undefined4 extraout_r1; + int *local_28; + undefined4 local_24; + int *local_20; + undefined4 local_1c; + + local_24 = param_6; + local_28 = param_5; + local_20 = param_3; + local_1c = param_4; + iVar1 = FUN_0003a678(&local_20,&local_28,param_2 + 0x1d4,param_2 + 0x414); + if (iVar1 == 0x18) { + *param_8 = 4; + if ((local_20 != (int *)0x0) && (local_1c._2_1_ == '\0')) { + if ((byte *)local_20[2] < (byte *)local_20[3]) { + uVar2 = (uint)*(byte *)local_20[2]; + } + else { + uVar2 = (**(code **)(*local_20 + 0x20))(); + } + local_1c = CONCAT13(local_1c._3_1_,0x10000); + local_1c._0_2_ = CONCAT11(uVar2 == 0xffffffff,(char)uVar2); + } + if ((local_28 != (int *)0x0) && (local_24._2_1_ == '\0')) { + if ((byte *)local_28[2] < (byte *)local_28[3]) { + uVar2 = (uint)*(byte *)local_28[2]; + } + else { + uVar2 = (**(code **)(*local_28 + 0x20))(); + } + local_24 = (uint)(uVar2 == 0xffffffff) << 8; + } + if (local_1c._1_1_ != local_24._1_1_) goto LAB_00039e22; + uVar2 = *param_8 | 2; + } + else { + __aeabi_uidivmod(iVar1,0xc); + *(undefined4 *)(param_9 + 0x10) = extraout_r1; + uVar2 = 0; + } + *param_8 = uVar2; +LAB_00039e22: + *param_1 = local_20; + param_1[1] = local_1c; + return; +} + + + +### FUNC FUN_00039e30 @ 00039e30 + +void FUN_00039e30(undefined4 *param_1,undefined4 param_2,int *param_3,uint param_4,int *param_5, + uint param_6,undefined4 param_7,uint *param_8,int param_9) + +{ + uint uVar1; + int iVar2; + uint uVar3; + uint uVar4; + int *local_28; + undefined4 local_24; + int *local_20; + undefined4 local_1c; + + local_24 = param_6; + local_28 = param_5; + uVar4 = param_6 >> 8; + uVar3 = param_4 >> 8; + local_20 = param_3; + local_1c = param_4; + if ((param_3 != (int *)0x0) && ((param_4 & 0xff0000) == 0)) { + if ((byte *)param_3[2] < (byte *)param_3[3]) { + uVar1 = (uint)*(byte *)param_3[2]; + } + else { + uVar1 = (**(code **)(*param_3 + 0x20))(param_3); + } + local_1c = CONCAT13(local_1c._3_1_,0x10000); + uVar3 = (uint)(uVar1 == 0xffffffff); + local_1c._0_2_ = CONCAT11(uVar1 == 0xffffffff,(char)uVar1); + } + if ((param_5 != (int *)0x0) && ((param_6 & 0xff0000) == 0)) { + if ((byte *)param_5[2] < (byte *)param_5[3]) { + uVar1 = (uint)*(byte *)param_5[2]; + } + else { + uVar1 = (**(code **)(*param_5 + 0x20))(); + } + local_24 = CONCAT13(local_24._3_1_,0x10000); + uVar4 = (uint)(uVar1 == 0xffffffff); + local_24._0_2_ = CONCAT11(uVar1 == 0xffffffff,(char)uVar1); + } + if ((uVar3 & 0xff) == (uVar4 & 0xff)) { + *param_8 = 6; + } + else { + uVar3 = 0; + iVar2 = FUN_0003a840(&local_20,&local_28,param_9 + 0x14,0); + *(int *)(param_9 + 0x14) = *(int *)(param_9 + 0x14) + -0x76c; + if (iVar2 == 0) { + uVar3 = 4; + } + *param_8 = uVar3; + if ((local_20 != (int *)0x0) && (local_1c._2_1_ == '\0')) { + if ((byte *)local_20[2] < (byte *)local_20[3]) { + uVar3 = (uint)*(byte *)local_20[2]; + } + else { + uVar3 = (**(code **)(*local_20 + 0x20))(); + } + local_1c = CONCAT13(local_1c._3_1_,0x10000); + local_1c._0_2_ = CONCAT11(uVar3 == 0xffffffff,(char)uVar3); + } + if ((local_28 != (int *)0x0) && (local_24._2_1_ == '\0')) { + if ((byte *)local_28[2] < (byte *)local_28[3]) { + uVar3 = (uint)*(byte *)local_28[2]; + } + else { + uVar3 = (**(code **)(*local_28 + 0x20))(); + } + local_24 = (uint)(uVar3 == 0xffffffff) << 8; + } + if (local_1c._1_1_ == local_24._1_1_) { + *param_8 = *param_8 | 2; + } + } + *param_1 = local_20; + param_1[1] = local_1c; + return; +} + + + +### FUNC FUN_00039f7c @ 00039f7c + +void FUN_00039f7c(facet *param_1) + +{ + FUN_00039fc0(param_1 + 0xc); + std::locale::facet::~facet(param_1); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_00039fc0 @ 00039fc0 + +void FUN_00039fc0(int param_1) + +{ + int *piVar1; + void *pvVar2; + uint uVar3; + int iVar4; + int iVar5; + + piVar1 = *(int **)(param_1 + 0x434); + if ((piVar1 != (int *)0x0) && (piVar1 != (int *)(param_1 + 0x420))) { + uVar3 = *(int *)(param_1 + 0x420) - (int)piVar1; + if (uVar3 < 0x81) { + std::__node_alloc::_M_deallocate(piVar1,uVar3); + } + else { + operator_delete(piVar1); + } + } + piVar1 = *(int **)(param_1 + 0x41c); + if ((piVar1 != (int *)0x0) && (piVar1 != (int *)(param_1 + 0x408))) { + uVar3 = *(int *)(param_1 + 0x408) - (int)piVar1; + if (uVar3 < 0x81) { + std::__node_alloc::_M_deallocate(piVar1,uVar3); + } + else { + operator_delete(piVar1); + } + } + iVar5 = 0; + do { + pvVar2 = *(void **)(param_1 + 0x404 + iVar5); + if ((pvVar2 != (void *)0x0) && ((void *)(param_1 + 0x3f0 + iVar5) != pvVar2)) { + uVar3 = *(int *)(param_1 + 0x3f0 + iVar5) - (int)pvVar2; + if (uVar3 < 0x81) { + std::__node_alloc::_M_deallocate(pvVar2,uVar3); + } + else { + operator_delete(pvVar2); + } + } + iVar5 = iVar5 + -0x18; + } while (iVar5 != -0x240); + iVar5 = 0; + do { + iVar4 = param_1 + 0x138 + iVar5; + pvVar2 = *(void **)(iVar4 + 0x8c); + if ((pvVar2 != (void *)0x0) && ((void *)(iVar4 + 0x78) != pvVar2)) { + uVar3 = *(int *)(iVar4 + 0x78) - (int)pvVar2; + if (uVar3 < 0x81) { + std::__node_alloc::_M_deallocate(pvVar2,uVar3); + } + else { + operator_delete(pvVar2); + } + } + iVar5 = iVar5 + -0x18; + } while (iVar5 != -0x150); + FUN_0003a204(param_1); + return; +} + + + +### FUNC FUN_0003a204 @ 0003a204 + +int * FUN_0003a204(int *param_1) + +{ + int *piVar1; + uint uVar2; + + piVar1 = (int *)param_1[0x1d]; + if ((piVar1 != param_1 + 0x18) && (piVar1 != (int *)0x0)) { + uVar2 = param_1[0x18] - (int)piVar1; + if (uVar2 < 0x81) { + std::__node_alloc::_M_deallocate(piVar1,uVar2); + } + else { + operator_delete(piVar1); + } + } + piVar1 = (int *)param_1[0x17]; + if ((piVar1 != param_1 + 0x12) && (piVar1 != (int *)0x0)) { + uVar2 = param_1[0x12] - (int)piVar1; + if (uVar2 < 0x81) { + std::__node_alloc::_M_deallocate(piVar1,uVar2); + } + else { + operator_delete(piVar1); + } + } + piVar1 = (int *)param_1[0x11]; + if ((piVar1 != param_1 + 0xc) && (piVar1 != (int *)0x0)) { + uVar2 = param_1[0xc] - (int)piVar1; + if (uVar2 < 0x81) { + std::__node_alloc::_M_deallocate(piVar1,uVar2); + } + else { + operator_delete(piVar1); + } + } + piVar1 = (int *)param_1[0xb]; + if ((piVar1 != param_1 + 6) && (piVar1 != (int *)0x0)) { + uVar2 = param_1[6] - (int)piVar1; + if (uVar2 < 0x81) { + std::__node_alloc::_M_deallocate(piVar1,uVar2); + } + else { + operator_delete(piVar1); + } + } + piVar1 = (int *)param_1[5]; + if ((piVar1 != param_1) && (piVar1 != (int *)0x0)) { + if (0x80 < (uint)(*param_1 - (int)piVar1)) { + operator_delete(piVar1); + return param_1; + } + std::__node_alloc::_M_deallocate(piVar1,*param_1 - (int)piVar1); + } + return param_1; +} + + + +### FUNC FUN_0003a344 @ 0003a344 + +char * FUN_0003a344(int *param_1,uint param_2,int *param_3,undefined4 param_4,char *param_5, + char *param_6,undefined4 param_7,int param_8,int param_9,uint *param_10, + int *param_11) + +{ + char *pcVar1; + locale *this; + int *piVar2; + int *piVar3; + int *piVar4; + uint uVar5; + int iVar6; + uint uVar7; + char cVar8; + int *piVar9; + uint *puVar10; + bool bVar11; + locale alStack_2c [4]; + int *local_28; + undefined4 local_24; + int *local_20; + undefined4 local_1c; + + local_28 = param_3; + local_24 = param_4; + local_20 = param_1; + local_1c = param_2; + this = (locale *)std::locale::locale(alStack_2c,(locale *)(param_9 + 0x20)); + piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype::id); + std::locale::~locale(alStack_2c); + piVar3 = param_11 + 5; + piVar4 = param_11 + 2; + puVar10 = (uint *)(param_11 + 4); +LAB_0003a3b2: + if ((local_20 != (int *)0x0) && (local_1c._2_1_ == '\0')) { + if ((byte *)local_20[2] < (byte *)local_20[3]) { + uVar5 = (uint)*(byte *)local_20[2]; + } + else { + uVar5 = (**(code **)(*local_20 + 0x20))(); + } + local_1c = CONCAT13(local_1c._3_1_,0x10000); + local_1c._0_2_ = CONCAT11(uVar5 == 0xffffffff,(char)uVar5); + } + if ((local_28 == (int *)0x0) || (local_24._2_1_ != '\0')) { + cVar8 = local_24._1_1_; + } + else { + if ((byte *)local_28[2] < (byte *)local_28[3]) { + uVar5 = (uint)*(byte *)local_28[2]; + } + else { + uVar5 = (**(code **)(*local_28 + 0x20))(); + } + local_24 = CONCAT13(local_24._3_1_,0x10000); + local_24._0_2_ = CONCAT11(uVar5 == 0xffffffff,(char)uVar5); + cVar8 = uVar5 == 0xffffffff; + } + if (param_5 == param_6) { + return param_5; + } + if (local_1c._1_1_ == cVar8) { + return param_5; + } + if (*param_5 != '%') { + if (local_1c._2_1_ == '\0') { + if ((byte *)local_20[2] < (byte *)local_20[3]) { + uVar5 = (uint)*(byte *)local_20[2]; + } + else { + uVar5 = (**(code **)(*local_20 + 0x20))(); + } + local_1c = CONCAT13(local_1c._3_1_,0x10000); + local_1c._0_2_ = CONCAT11(uVar5 == 0xffffffff,(char)uVar5); + } + else { + uVar5 = local_1c & 0xff; + } + if ((uint)local_20[2] < (uint)local_20[3]) { + local_20[2] = local_20[2] + 1; + } + else { + (**(code **)(*local_20 + 0x24))(); + } + local_1c._0_3_ = (uint3)(ushort)local_1c; + uVar7 = (**(code **)(*piVar2 + 0x18))(piVar2,*param_5); + if ((uVar5 & 0xff) != uVar7) { + return param_5; + } + goto switchD_0003a452_caseD_43; + } + cVar8 = param_5[1]; + pcVar1 = param_5 + 1; + if (cVar8 == '#') { + cVar8 = param_5[2]; + pcVar1 = param_5 + 2; + } + param_5 = pcVar1; + iVar6 = 0; + switch(cVar8) { + case 'A': + iVar6 = 7; + case 'a': + iVar6 = param_8 + iVar6 * 0x18; + iVar6 = FUN_0003a678(&local_20,&local_28,iVar6 + 0x78,iVar6 + 0x120); + if (iVar6 == 7) { + return param_5; + } + param_11[6] = iVar6; + param_5 = param_5 + 1; + goto LAB_0003a3b2; + case 'B': + iVar6 = 0xc; + case 'b': + iVar6 = param_8 + iVar6 * 0x18; + uVar5 = FUN_0003a678(&local_20,&local_28,iVar6 + 0x1c8,iVar6 + 0x2e8); + if (uVar5 == 0xc) { + return param_5; + } + *puVar10 = uVar5; + param_5 = param_5 + 1; + goto LAB_0003a3b2; + default: + goto switchD_0003a452_caseD_43; + case 'H': + case 'I': + piVar9 = piVar4; + break; + case 'M': + piVar9 = param_11 + 1; + break; + case 'S': + piVar9 = param_11; + break; + case 'Y': + iVar6 = FUN_0003a840(&local_20,&local_28,piVar3,0); + *piVar3 = *piVar3 + -0x76c; + goto LAB_0003a622; + case 'd': + iVar6 = FUN_0003a840(&local_20,&local_28,param_11 + 3,0); + if ((iVar6 != 1) || (0x1e < param_11[3] - 1U)) { +LAB_0003a650: + *param_10 = *param_10 | 4; + return param_5; + } + goto switchD_0003a452_caseD_43; + case 'j': + piVar9 = param_11 + 7; + break; + case 'm': + iVar6 = FUN_0003a840(&local_20,&local_28,puVar10,0); + uVar5 = *puVar10; + *puVar10 = uVar5 - 1; + if ((0xb < uVar5 - 1) || (iVar6 == 0)) goto LAB_0003a650; + goto switchD_0003a452_caseD_43; + case 'p': + iVar6 = FUN_0003a678(&local_20,&local_28,param_8 + 0x408,param_8 + 0x438); + if (iVar6 == 0) { + if (*piVar4 != 0xc) goto switchD_0003a452_caseD_43; + *piVar4 = 0; + param_5 = param_5 + 1; + } + else { + if (iVar6 != 1) { + bVar11 = iVar6 == 2; + goto LAB_0003a624; + } + if (*piVar4 == 0xc) goto switchD_0003a452_caseD_43; + *piVar4 = *piVar4 + 0xc; + param_5 = param_5 + 1; + } + goto LAB_0003a3b2; + case 'y': + piVar9 = piVar3; + } + iVar6 = FUN_0003a840(&local_20,&local_28,piVar9,0); +LAB_0003a622: + bVar11 = iVar6 == 0; +LAB_0003a624: + if (bVar11) { + return param_5; + } +switchD_0003a452_caseD_43: + param_5 = param_5 + 1; + goto LAB_0003a3b2; +} + + + +### FUNC FUN_0003a678 @ 0003a678 + +int FUN_0003a678(int *param_1,int *param_2,int param_3,int param_4) + +{ + int *piVar1; + uint uVar2; + int *piVar3; + int iVar4; + int iVar5; + int iVar6; + int iVar7; + int iVar8; + int local_48; + int local_44; + int local_3c; + char local_2c [24]; + + local_2c[0x14] = '\0'; + local_2c[0x15] = '\0'; + local_2c[0x16] = '\0'; + local_2c[0x17] = '\0'; + local_2c[0x10] = '\0'; + local_2c[0x11] = '\0'; + local_2c[0x12] = '\0'; + local_2c[0x13] = '\0'; + local_2c[0xc] = '\0'; + local_2c[0xd] = '\0'; + local_2c[0xe] = '\0'; + local_2c[0xf] = '\0'; + local_2c[8] = '\0'; + local_2c[9] = '\0'; + local_2c[10] = '\0'; + local_2c[0xb] = '\0'; + local_2c[4] = '\0'; + local_2c[5] = '\0'; + local_2c[6] = '\0'; + local_2c[7] = '\0'; + local_2c[0] = '\0'; + local_2c[1] = '\0'; + local_2c[2] = '\0'; + local_2c[3] = '\0'; + local_48 = (param_4 - param_3 >> 3) * -0x55555555; + iVar8 = 0; + iVar5 = 0; + iVar7 = local_48; + local_3c = local_48; + while( true ) { + piVar1 = (int *)*param_1; + if ((piVar1 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { + if ((byte *)piVar1[2] < (byte *)piVar1[3]) { + uVar2 = (uint)*(byte *)piVar1[2]; + } + else { + uVar2 = (**(code **)(*piVar1 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar2; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar2 == 0xffffffff; + } + piVar1 = (int *)*param_2; + if ((piVar1 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar1[2] < (byte *)piVar1[3]) { + uVar2 = (uint)*(byte *)piVar1[2]; + } + else { + uVar2 = (**(code **)(*piVar1 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar2; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff; + } + if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break; + local_44 = iVar7; + if (iVar8 < iVar7) { + piVar1 = (int *)(param_3 + 0x14 + iVar8 * 0x18); + iVar4 = iVar8; + iVar6 = iVar8; + do { + if (local_2c[iVar6] == '\0') { + if (*(char *)((int)param_1 + 6) == '\0') { + piVar3 = (int *)*param_1; + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar2 = (uint)*(byte *)piVar3[2]; + } + else { + uVar2 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar2; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar2 == 0xffffffff; + } + else { + uVar2 = (uint)*(byte *)(param_1 + 1); + } + if ((uVar2 & 0xff) == (uint)*(byte *)(*piVar1 + iVar5)) { + if (iVar5 == (piVar1[-1] + -1) - *piVar1) { + local_2c[iVar6] = '\x01'; + iVar8 = iVar4 + 1; + if (iVar6 != iVar4) { + iVar8 = iVar4; + } + local_3c = local_3c + -1; + iVar4 = iVar8; + local_48 = iVar6; + if (local_3c == 0) { + piVar1 = (int *)*param_1; + if ((uint)piVar1[2] < (uint)piVar1[3]) { + piVar1[2] = piVar1[2] + 1; + } + else { + (**(code **)(*piVar1 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 6) = 0; + return iVar6; + } + } + local_44 = iVar6 + 1; + iVar8 = iVar4; + } + else { + local_2c[iVar6] = '\x01'; + iVar8 = iVar4 + 1; + if (iVar6 != iVar4) { + iVar8 = iVar4; + } + local_3c = local_3c + -1; + if (local_3c == 0) { + return local_48; + } + } + } + else { + iVar8 = iVar4 + 1; + if (iVar6 != iVar4) { + iVar8 = iVar4; + } + } + piVar1 = piVar1 + 6; + iVar6 = iVar6 + 1; + iVar4 = iVar8; + } while (iVar6 < iVar7); + } + piVar1 = (int *)*param_1; + if ((uint)piVar1[2] < (uint)piVar1[3]) { + piVar1[2] = piVar1[2] + 1; + } + else { + (**(code **)(*piVar1 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 6) = 0; + iVar5 = iVar5 + 1; + iVar7 = local_44; + } + return local_48; +} + + + +### FUNC FUN_0003a840 @ 0003a840 + +undefined4 FUN_0003a840(undefined4 param_1,undefined4 param_2,undefined4 param_3) + +{ + undefined4 uVar1; + undefined1 auStack_30 [4]; + uint local_2c [4]; + uint *local_1c; + uint *local_18; + + local_1c = local_2c; + local_2c[0] = local_2c[0] & 0xffffff00; + local_18 = local_1c; + uVar1 = FUN_0003a8bc(param_1,param_2,10,param_3,0,0,0,local_1c,auStack_30); + if ((local_18 != local_2c) && (local_18 != (uint *)0x0)) { + if (local_2c[0] - (int)local_18 < 0x81) { + std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); + } + else { + operator_delete(local_18); + } + } + return uVar1; +} + + + +### FUNC FUN_0003a8bc @ 0003a8bc + +undefined4 +FUN_0003a8bc(int *param_1,int *param_2,int param_3,int *param_4,int param_5,int param_6,uint param_7 + ,int param_8) + +{ + char cVar1; + int iVar2; + int *piVar3; + uint uVar4; + undefined4 uVar5; + bool bVar6; + int iVar7; + int iVar8; + int iVar9; + int iVar10; + int iVar11; + undefined4 local_84; + int local_6c; + char *local_64; + int local_58; + char acStack_54 [64]; + + iVar7 = *(int *)(param_8 + 0x10); + iVar9 = *(int *)(param_8 + 0x14); + local_84 = 1; + iVar2 = __divsi3(0x7fffffff,param_3); + local_6c = param_5; + cVar1 = '\0'; + bVar6 = false; + local_58 = 0; + iVar11 = 0; + while( true ) { + local_64 = acStack_54 + local_58; + piVar3 = (int *)*param_1; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar4; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; + } + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar4; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; + } + if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break; + if (*(char *)((int)param_1 + 6) == '\0') { + piVar3 = (int *)*param_1; + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar4; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; + } + else { + uVar4 = (uint)*(byte *)(param_1 + 1); + } + iVar8 = 0xff; + iVar10 = iVar11; + if ((uVar4 & 0xff) == param_7 && iVar9 != iVar7) { + *local_64 = cVar1; + local_58 = local_58 + 1; + cVar1 = '\0'; + } + else { + if (-1 < (char)uVar4) { + iVar8 = std::priv::__digit_val_table(uVar4 & 0xff); + } + if (param_3 <= iVar8) break; + cVar1 = cVar1 + '\x01'; + local_6c = local_6c + 1; + if (iVar2 < iVar11) { + bVar6 = true; + } + else { + iVar10 = iVar8 + iVar11 * param_3; + bVar6 = (bool)(bVar6 | (iVar11 != 0 && iVar10 <= iVar11)); + } + } + piVar3 = (int *)*param_1; + if ((uint)piVar3[2] < (uint)piVar3[3]) { + piVar3[2] = piVar3[2] + 1; + } + else { + (**(code **)(*piVar3 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 6) = 0; + iVar11 = iVar10; + } + if ((iVar9 != iVar7) && (local_58 != 0)) { + *local_64 = cVar1; + local_64 = acStack_54 + local_58 + 1; + } + uVar5 = 0; + if (0 < local_6c) { + if (bVar6) { + *param_4 = 0x7fffffff; + return 0; + } + iVar2 = -iVar11; + if (param_6 == 0) { + iVar2 = iVar11; + } + *param_4 = iVar2; + uVar5 = local_84; + if (iVar9 != iVar7) { + uVar5 = std::priv::__valid_grouping + (acStack_54,local_64,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); + } + } + return uVar5; +} + + + +### FUNC FUN_0003aac0 @ 0003aac0 + +void FUN_0003aac0(facet *param_1) + +{ + FUN_00039fc0(param_1 + 0xc); + std::locale::facet::~facet(param_1); + return; +} + + + +### FUNC FUN_0003ac64 @ 0003ac64 + +void FUN_0003ac64(facet *param_1) + +{ + FUN_00039fc0(param_1 + 0xc); + std::locale::facet::~facet(param_1); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_0003ad04 @ 0003ad04 + +void FUN_0003ad04(undefined4 *param_1,int param_2,int *param_3,int param_4,uint param_5,int *param_6 + ,undefined4 param_7,uint param_8,undefined4 param_9,uint *param_10, + undefined4 param_11) + +{ + int iVar1; + int iVar2; + uint uVar3; + uint local_38; + + iVar1 = *(int *)(param_2 + 0x1c); + uVar3 = 0; + iVar2 = FUN_0003b4cc(param_3,param_4,param_5,param_6,param_7,param_8, + *(undefined4 *)(param_2 + 0x20),iVar1,0,param_2 + 0xc,param_9,param_10, + param_11); + if (iVar2 != iVar1) { + uVar3 = 4; + } + *param_10 = uVar3; + if ((param_3 != (int *)0x0) && ((param_5 & 0xff00) == 0)) { + if ((int *)param_3[2] < (int *)param_3[3]) { + param_4 = *(int *)param_3[2]; + } + else { + param_4 = (**(code **)(*param_3 + 0x20))(); + } + param_5 = param_5 & 0xffff0000 | (uint)(param_4 == -1) | 0x100; + } + local_38 = param_8; + if ((param_6 != (int *)0x0) && ((param_8 & 0xff00) == 0)) { + if ((int *)param_6[2] < (int *)param_6[3]) { + iVar1 = *(int *)param_6[2]; + } + else { + iVar1 = (**(code **)(*param_6 + 0x20))(param_6); + } + local_38 = (uint)(iVar1 == -1); + } + if ((param_5 & 0xff) == (local_38 & 0xff)) { + *param_10 = *param_10 | 2; + } + *param_1 = param_3; + param_1[1] = param_4; + param_1[2] = param_5; + return; +} + + + +### FUNC FUN_0003ae38 @ 0003ae38 + +undefined4 * +FUN_0003ae38(undefined4 *param_1,int param_2,int *param_3,int param_4,uint param_5,int *param_6, + undefined4 param_7,uint param_8,undefined4 param_9,uint *param_10,undefined4 param_11) + +{ + int iVar1; + uint uVar2; + int iVar3; + + iVar3 = *(int *)(param_2 + 0x34); + uVar2 = 0; + iVar1 = FUN_0003b4cc(param_3,param_4,param_5,param_6,param_7,param_8, + *(undefined4 *)(param_2 + 0x38),iVar3,0,param_2 + 0xc,param_9,param_10, + param_11); + if (iVar1 != iVar3) { + *param_10 = 4; + if ((param_3 != (int *)0x0) && ((param_5 & 0xff00) == 0)) { + if ((int *)param_3[2] < (int *)param_3[3]) { + param_4 = *(int *)param_3[2]; + } + else { + param_4 = (**(code **)(*param_3 + 0x20))(); + } + param_5 = param_5 & 0xffff0000 | (uint)(param_4 == -1) | 0x100; + } + if ((param_6 != (int *)0x0) && ((param_8 & 0xff00) == 0)) { + if ((int *)param_6[2] < (int *)param_6[3]) { + iVar1 = *(int *)param_6[2]; + } + else { + iVar1 = (**(code **)(*param_6 + 0x20))(); + } + param_8 = (uint)(iVar1 == -1); + } + if ((param_5 & 0xff) != (param_8 & 0xff)) goto LAB_0003af3c; + uVar2 = *param_10 | 2; + } + *param_10 = uVar2; +LAB_0003af3c: + *param_1 = param_3; + param_1[1] = param_4; + param_1[2] = param_5; + return param_1 + 3; +} + + + +### FUNC FUN_0003af48 @ 0003af48 + +void FUN_0003af48(undefined4 *param_1,int param_2,int *param_3,int param_4,uint param_5,int *param_6 + ,undefined4 param_7,uint param_8,undefined4 param_9,uint *param_10,int param_11) + +{ + int iVar1; + uint uVar2; + undefined4 extraout_r1; + int *local_2c; + undefined4 local_28; + undefined4 local_24; + int *local_20; + int local_1c; + undefined4 local_18; + + local_18 = param_5; + local_28 = param_7; + local_24 = param_8; + local_2c = param_6; + local_20 = param_3; + local_1c = param_4; + iVar1 = FUN_0003b804(&local_20,&local_2c,param_2 + 0x84,param_2 + 0x474); + if (iVar1 == 0xe) { + *param_10 = 4; + if ((local_20 != (int *)0x0) && (local_18._1_1_ == '\0')) { + if ((int *)local_20[2] < (int *)local_20[3]) { + local_1c = *(int *)local_20[2]; + } + else { + local_1c = (**(code **)(*local_20 + 0x20))(); + } + local_18 = CONCAT22(local_18._2_2_,0x100); + local_18 = CONCAT31(local_18._1_3_,local_1c == -1); + } + if ((local_2c != (int *)0x0) && (local_24._1_1_ == '\0')) { + if ((int *)local_2c[2] < (int *)local_2c[3]) { + iVar1 = *(int *)local_2c[2]; + } + else { + iVar1 = (**(code **)(*local_2c + 0x20))(); + } + local_24 = (uint)(iVar1 == -1); + } + if ((local_18 & 0xff) != (local_24 & 0xff)) goto LAB_0003b00a; + uVar2 = *param_10 | 2; + } + else { + __aeabi_uidivmod(iVar1,7); + *(undefined4 *)(param_11 + 0x18) = extraout_r1; + uVar2 = 0; + } + *param_10 = uVar2; +LAB_0003b00a: + *param_1 = local_20; + param_1[1] = local_1c; + param_1[2] = local_18; + return; +} + + + +### FUNC FUN_0003b020 @ 0003b020 + +void FUN_0003b020(undefined4 *param_1,int param_2,int *param_3,int param_4,uint param_5,int *param_6 + ,undefined4 param_7,uint param_8,undefined4 param_9,uint *param_10,int param_11) + +{ + int iVar1; + uint uVar2; + undefined4 extraout_r1; + int *local_2c; + undefined4 local_28; + undefined4 local_24; + int *local_20; + int local_1c; + undefined4 local_18; + + local_18 = param_5; + local_28 = param_7; + local_24 = param_8; + local_2c = param_6; + local_20 = param_3; + local_1c = param_4; + iVar1 = FUN_0003b804(&local_20,&local_2c,param_2 + 0x474,param_2 + 0xb34); + if (iVar1 == 0x18) { + *param_10 = 4; + if ((local_20 != (int *)0x0) && (local_18._1_1_ == '\0')) { + if ((int *)local_20[2] < (int *)local_20[3]) { + local_1c = *(int *)local_20[2]; + } + else { + local_1c = (**(code **)(*local_20 + 0x20))(); + } + local_18 = CONCAT22(local_18._2_2_,0x100); + local_18 = CONCAT31(local_18._1_3_,local_1c == -1); + } + if ((local_2c != (int *)0x0) && (local_24._1_1_ == '\0')) { + if ((int *)local_2c[2] < (int *)local_2c[3]) { + iVar1 = *(int *)local_2c[2]; + } + else { + iVar1 = (**(code **)(*local_2c + 0x20))(); + } + local_24 = (uint)(iVar1 == -1); + } + if ((local_18 & 0xff) != (local_24 & 0xff)) goto LAB_0003b0de; + uVar2 = *param_10 | 2; + } + else { + __aeabi_uidivmod(iVar1,0xc); + *(undefined4 *)(param_11 + 0x10) = extraout_r1; + uVar2 = 0; + } + *param_10 = uVar2; +LAB_0003b0de: + *param_1 = local_20; + param_1[1] = local_1c; + param_1[2] = local_18; + return; +} + + + +### FUNC FUN_0003b0f8 @ 0003b0f8 + +void FUN_0003b0f8(undefined4 *param_1,undefined4 param_2,int *param_3,int param_4,uint param_5, + int *param_6,int param_7,uint param_8,undefined4 param_9,uint *param_10, + int param_11) + +{ + int iVar1; + uint uVar2; + int *local_2c; + int local_28; + undefined4 local_24; + int *local_20; + int local_1c; + undefined4 local_18; + + local_18 = param_5; + local_28 = param_7; + local_24 = param_8; + local_2c = param_6; + local_20 = param_3; + local_1c = param_4; + if ((param_3 != (int *)0x0) && ((param_5 & 0xff00) == 0)) { + if ((int *)param_3[2] < (int *)param_3[3]) { + local_1c = *(int *)param_3[2]; + } + else { + local_1c = (**(code **)(*param_3 + 0x20))(param_3); + } + local_18 = CONCAT22(local_18._2_2_,0x100); + param_5 = (uint)(local_1c == -1); + local_18 = CONCAT31(local_18._1_3_,local_1c == -1); + } + if ((param_6 != (int *)0x0) && ((param_8 & 0xff00) == 0)) { + if ((int *)param_6[2] < (int *)param_6[3]) { + local_28 = *(int *)param_6[2]; + } + else { + local_28 = (**(code **)(*param_6 + 0x20))(param_6); + } + local_24 = CONCAT22(local_24._2_2_,0x100); + param_8 = (uint)(local_28 == -1); + local_24 = CONCAT31(local_24._1_3_,local_28 == -1); + } + if ((param_5 & 0xff) == (param_8 & 0xff)) { + *param_10 = 6; + } + else { + uVar2 = 0; + iVar1 = FUN_0003b9cc(&local_20,&local_2c,param_11 + 0x14,0); + *(int *)(param_11 + 0x14) = *(int *)(param_11 + 0x14) + -0x76c; + if (iVar1 == 0) { + uVar2 = 4; + } + *param_10 = uVar2; + if ((local_20 != (int *)0x0) && (local_18._1_1_ == '\0')) { + if ((int *)local_20[2] < (int *)local_20[3]) { + local_1c = *(int *)local_20[2]; + } + else { + local_1c = (**(code **)(*local_20 + 0x20))(); + } + local_18 = CONCAT22(local_18._2_2_,0x100); + local_18 = CONCAT31(local_18._1_3_,local_1c == -1); + } + if ((local_2c != (int *)0x0) && (local_24._1_1_ == '\0')) { + if ((int *)local_2c[2] < (int *)local_2c[3]) { + iVar1 = *(int *)local_2c[2]; + } + else { + iVar1 = (**(code **)(*local_2c + 0x20))(); + } + local_24 = (uint)(iVar1 == -1); + } + if ((local_18 & 0xff) == (local_24 & 0xff)) { + *param_10 = *param_10 | 2; + } + } + *param_1 = local_20; + param_1[1] = local_1c; + param_1[2] = local_18; + return; +} + + + +### FUNC FUN_0003b248 @ 0003b248 + +void FUN_0003b248(facet *param_1) + +{ + FUN_0003b28c(param_1 + 0xc); + std::locale::facet::~facet(param_1); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_0003b28c @ 0003b28c + +void FUN_0003b28c(int param_1) + +{ + int *piVar1; + uint uVar2; + int *piVar3; + int iVar4; + int iVar5; + + piVar1 = *(int **)(param_1 + 0xbb4); + if ((piVar1 != (int *)0x0) && (piVar1 != (int *)(param_1 + 0xb70))) { + uVar2 = *(int *)(param_1 + 0xb70) - (int)piVar1; + if (uVar2 < 0x81) { + std::__node_alloc::_M_deallocate(piVar1,uVar2); + } + else { + operator_delete(piVar1); + } + } + piVar1 = *(int **)(param_1 + 0xb6c); + if ((piVar1 != (int *)0x0) && (piVar1 != (int *)(param_1 + 0xb28))) { + uVar2 = *(int *)(param_1 + 0xb28) - (int)piVar1; + if (uVar2 < 0x81) { + std::__node_alloc::_M_deallocate(piVar1,uVar2); + } + else { + operator_delete(piVar1); + } + } + iVar5 = 0; + do { + piVar3 = (int *)(param_1 + 0xae0 + iVar5); + piVar1 = *(int **)(param_1 + 0xb24 + iVar5); + if ((piVar1 != (int *)0x0) && (piVar3 != piVar1)) { + uVar2 = *piVar3 - (int)piVar1; + if (uVar2 < 0x81) { + std::__node_alloc::_M_deallocate(piVar1,uVar2); + } + else { + operator_delete(piVar1); + } + } + iVar5 = iVar5 + -0x48; + } while (iVar5 != -0x6c0); + iVar5 = 0; + do { + iVar4 = param_1 + 0x3a8 + iVar5; + piVar1 = *(int **)(iVar4 + 0xbc); + piVar3 = (int *)(iVar4 + 0x78); + if ((piVar1 != (int *)0x0) && (piVar3 != piVar1)) { + uVar2 = *piVar3 - (int)piVar1; + if (uVar2 < 0x81) { + std::__node_alloc::_M_deallocate(piVar1,uVar2); + } + else { + operator_delete(piVar1); + } + } + iVar5 = iVar5 + -0x48; + } while (iVar5 != -0x3f0); + FUN_0003a204(param_1); + return; +} + + + +### FUNC FUN_0003b4cc @ 0003b4cc + +char * FUN_0003b4cc(int *param_1,int param_2,undefined4 param_3,int *param_4,int param_5, + undefined4 param_6,char *param_7,char *param_8,undefined4 param_9,int param_10, + int param_11,uint *param_12,int *param_13) + +{ + char *pcVar1; + locale *this; + int *piVar2; + int *piVar3; + int *piVar4; + int iVar5; + int iVar6; + uint uVar7; + char cVar8; + int *piVar9; + uint *puVar10; + bool bVar11; + locale alStack_30 [4]; + int *local_2c; + int local_28; + undefined4 local_24; + int *local_20; + int local_1c; + undefined4 local_18; + + local_28 = param_5; + local_24 = param_6; + local_2c = param_4; + local_20 = param_1; + local_1c = param_2; + local_18 = param_3; + this = (locale *)std::locale::locale(alStack_30,(locale *)(param_11 + 0x20)); + piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype::id); + std::locale::~locale(alStack_30); + piVar3 = param_13 + 5; + piVar4 = param_13 + 2; + puVar10 = (uint *)(param_13 + 4); +LAB_0003b53c: + if ((local_20 != (int *)0x0) && (local_18._1_1_ == '\0')) { + if ((int *)local_20[2] < (int *)local_20[3]) { + local_1c = *(int *)local_20[2]; + } + else { + local_1c = (**(code **)(*local_20 + 0x20))(); + } + local_18 = CONCAT22(local_18._2_2_,0x100); + local_18 = CONCAT31(local_18._1_3_,local_1c == -1); + } + if ((local_2c == (int *)0x0) || (local_24._1_1_ != '\0')) { + cVar8 = (char)local_24; + } + else { + if ((int *)local_2c[2] < (int *)local_2c[3]) { + local_28 = *(int *)local_2c[2]; + } + else { + local_28 = (**(code **)(*local_2c + 0x20))(); + } + local_24 = CONCAT22(local_24._2_2_,0x100); + local_24 = CONCAT31(local_24._1_3_,local_28 == -1); + cVar8 = local_28 == -1; + } + if (param_7 == param_8) { + return param_7; + } + if ((byte)local_18 == cVar8) { + return param_7; + } + if (*param_7 != '%') { + if (local_18._1_1_ == '\0') { + if ((int *)local_20[2] < (int *)local_20[3]) { + local_1c = *(int *)local_20[2]; + } + else { + local_1c = (**(code **)(*local_20 + 0x20))(); + } + local_18 = CONCAT22(local_18._2_2_,0x100); + local_18 = CONCAT31(local_18._1_3_,local_1c == -1); + } + iVar5 = local_1c; + if ((uint)local_20[2] < (uint)local_20[3]) { + local_20[2] = local_20[2] + 4; + } + else { + (**(code **)(*local_20 + 0x24))(); + } + local_18._0_2_ = (ushort)(byte)local_18; + iVar6 = (**(code **)(*piVar2 + 0x28))(piVar2,*param_7); + if (iVar5 != iVar6) { + return param_7; + } + goto switchD_0003b5da_caseD_43; + } + cVar8 = param_7[1]; + pcVar1 = param_7 + 1; + if (cVar8 == '#') { + cVar8 = param_7[2]; + pcVar1 = param_7 + 2; + } + param_7 = pcVar1; + iVar5 = 0; + switch(cVar8) { + case 'A': + iVar5 = 7; + case 'a': + iVar5 = param_10 + iVar5 * 0x48; + iVar5 = FUN_0003b804(&local_20,&local_2c,iVar5 + 0x78,iVar5 + 0x270); + if (iVar5 == 7) { + return param_7; + } + param_13[6] = iVar5; + param_7 = param_7 + 1; + goto LAB_0003b53c; + case 'B': + iVar5 = 0xc; + case 'b': + iVar5 = param_10 + iVar5 * 0x48; + uVar7 = FUN_0003b804(&local_20,&local_2c,iVar5 + 0x468,iVar5 + 0x7c8); + if (uVar7 == 0xc) { + return param_7; + } + *puVar10 = uVar7; + param_7 = param_7 + 1; + goto LAB_0003b53c; + default: + goto switchD_0003b5da_caseD_43; + case 'H': + case 'I': + piVar9 = piVar4; + break; + case 'M': + piVar9 = param_13 + 1; + break; + case 'S': + piVar9 = param_13; + break; + case 'Y': + iVar5 = FUN_0003b9cc(&local_20,&local_2c,piVar3,0); + *piVar3 = *piVar3 + -0x76c; + goto LAB_0003b7a4; + case 'd': + iVar5 = FUN_0003b9cc(&local_20,&local_2c,param_13 + 3,0); + if ((iVar5 != 1) || (0x1e < param_13[3] - 1U)) { +LAB_0003b7d2: + *param_12 = *param_12 | 4; + return param_7; + } + goto switchD_0003b5da_caseD_43; + case 'j': + piVar9 = param_13 + 7; + break; + case 'm': + iVar5 = FUN_0003b9cc(&local_20,&local_2c,puVar10,0); + uVar7 = *puVar10; + *puVar10 = uVar7 - 1; + if ((0xb < uVar7 - 1) || (iVar5 == 0)) goto LAB_0003b7d2; + goto switchD_0003b5da_caseD_43; + case 'p': + iVar5 = FUN_0003b804(&local_20,&local_2c,param_10 + 0xb28,param_10 + 3000); + if (iVar5 == 0) { + if (*piVar4 != 0xc) goto switchD_0003b5da_caseD_43; + *piVar4 = 0; + param_7 = param_7 + 1; + } + else { + if (iVar5 != 1) { + bVar11 = iVar5 == 2; + goto LAB_0003b7a6; + } + if (*piVar4 == 0xc) goto switchD_0003b5da_caseD_43; + *piVar4 = *piVar4 + 0xc; + param_7 = param_7 + 1; + } + goto LAB_0003b53c; + case 'y': + piVar9 = piVar3; + } + iVar5 = FUN_0003b9cc(&local_20,&local_2c,piVar9,0); +LAB_0003b7a4: + bVar11 = iVar5 == 0; +LAB_0003b7a6: + if (bVar11) { + return param_7; + } +switchD_0003b5da_caseD_43: + param_7 = param_7 + 1; + goto LAB_0003b53c; +} + + + +### FUNC FUN_0003b804 @ 0003b804 + +int FUN_0003b804(int *param_1,int *param_2,int param_3,int param_4) + +{ + int *piVar1; + int iVar2; + int *piVar3; + int iVar4; + int iVar5; + int iVar6; + int iVar7; + bool bVar8; + char cVar9; + int local_48; + int local_44; + int local_38; + char local_2c [24]; + + iVar6 = 0; + local_2c[0x14] = '\0'; + local_2c[0x15] = '\0'; + local_2c[0x16] = '\0'; + local_2c[0x17] = '\0'; + local_2c[0x10] = '\0'; + local_2c[0x11] = '\0'; + local_2c[0x12] = '\0'; + local_2c[0x13] = '\0'; + local_2c[0xc] = '\0'; + local_2c[0xd] = '\0'; + local_2c[0xe] = '\0'; + local_2c[0xf] = '\0'; + local_2c[8] = '\0'; + local_2c[9] = '\0'; + local_2c[10] = '\0'; + local_2c[0xb] = '\0'; + local_2c[4] = '\0'; + local_2c[5] = '\0'; + local_2c[6] = '\0'; + local_2c[7] = '\0'; + local_2c[0] = '\0'; + local_2c[1] = '\0'; + local_2c[2] = '\0'; + local_2c[3] = '\0'; + bVar8 = *(char *)((int)param_1 + 9) == '\0'; + local_48 = (param_4 - param_3 >> 3) * 0x38e38e39; + iVar7 = 0; + iVar4 = local_48; + local_38 = local_48; + while( true ) { + piVar1 = (int *)*param_1; + if ((piVar1 != (int *)0x0) && (bVar8)) { + if ((int *)piVar1[2] < (int *)piVar1[3]) { + iVar2 = *(int *)piVar1[2]; + } + else { + iVar2 = (**(code **)(*piVar1 + 0x20))(); + } + param_1[1] = iVar2; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar2 == -1; + } + piVar1 = (int *)*param_2; + if ((piVar1 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) { + cVar9 = (char)param_2[2]; + } + else { + if ((int *)piVar1[2] < (int *)piVar1[3]) { + iVar2 = *(int *)piVar1[2]; + } + else { + iVar2 = (**(code **)(*piVar1 + 0x20))(); + } + param_2[1] = iVar2; + *(undefined1 *)((int)param_2 + 9) = 1; + cVar9 = iVar2 == -1; + *(char *)(param_2 + 2) = cVar9; + } + if ((char)param_1[2] == cVar9) break; + local_44 = iVar4; + if (iVar7 < iVar4) { + piVar1 = (int *)(param_3 + 0x44 + iVar7 * 0x48); + iVar2 = iVar7; + iVar5 = iVar7; + do { + if (local_2c[iVar5] == '\0') { + if (*(char *)((int)param_1 + 9) == '\0') { + piVar3 = (int *)*param_1; + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar7 = *(int *)piVar3[2]; + } + else { + iVar7 = (**(code **)(*piVar3 + 0x20))(); + } + param_1[1] = iVar7; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar7 == -1; + } + else { + iVar7 = param_1[1]; + } + if (iVar7 == *(int *)(*piVar1 + iVar6 * 4)) { + if (iVar6 == (piVar1[-1] - *piVar1 >> 2) + -1) { + local_2c[iVar5] = '\x01'; + iVar7 = iVar2 + 1; + if (iVar5 != iVar2) { + iVar7 = iVar2; + } + local_38 = local_38 + -1; + iVar2 = iVar7; + local_48 = iVar5; + if (local_38 == 0) { + piVar1 = (int *)*param_1; + if ((uint)piVar1[2] < (uint)piVar1[3]) { + piVar1[2] = piVar1[2] + 4; + } + else { + (**(code **)(*piVar1 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 9) = 0; + return iVar5; + } + } + local_44 = iVar5 + 1; + iVar7 = iVar2; + } + else { + local_2c[iVar5] = '\x01'; + iVar7 = iVar2 + 1; + if (iVar5 != iVar2) { + iVar7 = iVar2; + } + local_38 = local_38 + -1; + if (local_38 == 0) { + return local_48; + } + } + } + else { + iVar7 = iVar2 + 1; + if (iVar5 != iVar2) { + iVar7 = iVar2; + } + } + piVar1 = piVar1 + 0x12; + iVar5 = iVar5 + 1; + iVar2 = iVar7; + } while (iVar5 < iVar4); + } + piVar1 = (int *)*param_1; + if ((uint)piVar1[2] < (uint)piVar1[3]) { + piVar1[2] = piVar1[2] + 4; + } + else { + (**(code **)(*piVar1 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 9) = 0; + iVar6 = iVar6 + 1; + bVar8 = true; + iVar4 = local_44; + } + return local_48; +} + + + +### FUNC FUN_0003b9cc @ 0003b9cc + +undefined4 FUN_0003b9cc(undefined4 param_1,undefined4 param_2,undefined4 param_3) + +{ + undefined4 uVar1; + undefined1 auStack_30 [4]; + uint local_2c [4]; + uint *local_1c; + uint *local_18; + + local_1c = local_2c; + local_2c[0] = local_2c[0] & 0xffffff00; + local_18 = local_1c; + uVar1 = FUN_0003ba48(param_1,param_2,10,param_3,0,0,0,local_1c,auStack_30); + if ((local_18 != local_2c) && (local_18 != (uint *)0x0)) { + if (local_2c[0] - (int)local_18 < 0x81) { + std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); + } + else { + operator_delete(local_18); + } + } + return uVar1; +} + + + +### FUNC FUN_0003ba48 @ 0003ba48 + +uint FUN_0003ba48(int *param_1,int *param_2,int param_3,int *param_4,int param_5,int param_6, + uint param_7,int param_8) + +{ + char cVar1; + int iVar2; + int iVar3; + int *piVar4; + int iVar5; + uint uVar6; + bool bVar7; + int iVar8; + int iVar9; + char *pcVar10; + char cVar11; + int local_70; + uint local_68; + int local_5c; + int local_58; + char acStack_54 [64]; + + iVar9 = *(int *)(param_8 + 0x10); + iVar2 = *(int *)(param_8 + 0x14); + local_5c = 0; + cVar11 = *(char *)((int)param_1 + 9); + local_68 = 1; + iVar3 = __divsi3(0x7fffffff,param_3); + local_70 = param_5; + cVar1 = '\0'; + local_58 = 0; + bVar7 = false; + uVar6 = (uint)(cVar11 == '\0'); + while( true ) { + pcVar10 = acStack_54 + local_5c; + piVar4 = (int *)*param_1; + if ((piVar4 != (int *)0x0) && (uVar6 != 0)) { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar5 = *(int *)piVar4[2]; + } + else { + iVar5 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = iVar5; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar5 == -1; + } + piVar4 = (int *)*param_2; + if ((piVar4 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) { + cVar11 = (char)param_2[2]; + } + else { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar5 = *(int *)piVar4[2]; + } + else { + iVar5 = (**(code **)(*piVar4 + 0x20))(); + } + param_2[1] = iVar5; + *(undefined1 *)((int)param_2 + 9) = 1; + cVar11 = iVar5 == -1; + *(char *)(param_2 + 2) = cVar11; + } + if ((char)param_1[2] == cVar11) break; + if (*(char *)((int)param_1 + 9) == '\0') { + piVar4 = (int *)*param_1; + if ((uint *)piVar4[2] < (uint *)piVar4[3]) { + uVar6 = *(uint *)piVar4[2]; + } + else { + uVar6 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = uVar6; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = uVar6 == 0xffffffff; + } + else { + uVar6 = param_1[1]; + } + iVar5 = local_58; + if (uVar6 == param_7 && iVar2 != iVar9) { + *pcVar10 = cVar1; + local_5c = local_5c + 1; + cVar1 = '\0'; + } + else { + iVar8 = 0xff; + if (uVar6 < 0x80) { + iVar8 = std::priv::__digit_val_table(uVar6); + } + if (param_3 <= iVar8) break; + cVar1 = cVar1 + '\x01'; + local_70 = local_70 + 1; + if (iVar3 < local_58) { + bVar7 = true; + } + else { + iVar5 = iVar8 + local_58 * param_3; + bVar7 = (bool)(bVar7 | (local_58 != 0 && iVar5 <= local_58)); + } + } + piVar4 = (int *)*param_1; + if ((uint)piVar4[2] < (uint)piVar4[3]) { + piVar4[2] = piVar4[2] + 4; + } + else { + (**(code **)(*piVar4 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 9) = 0; + uVar6 = local_68; + local_58 = iVar5; + } + if ((iVar2 != iVar9) && (local_5c != 0)) { + *pcVar10 = cVar1; + pcVar10 = acStack_54 + local_5c + 1; + } + uVar6 = 0; + if (0 < local_70) { + if (bVar7) { + *param_4 = 0x7fffffff; + } + else { + iVar3 = -local_58; + if (param_6 == 0) { + iVar3 = local_58; + } + *param_4 = iVar3; + uVar6 = local_68; + if (iVar2 != iVar9) { + uVar6 = std::priv::__valid_grouping + (acStack_54,pcVar10,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)) + ; + } + } + } + return uVar6; +} + + + +### FUNC FUN_0003bc38 @ 0003bc38 + +void FUN_0003bc38(facet *param_1) + +{ + FUN_0003b28c(param_1 + 0xc); + std::locale::facet::~facet(param_1); + return; +} + + + +### FUNC FUN_0003bdfc @ 0003bdfc + +void FUN_0003bdfc(facet *param_1) + +{ + FUN_0003b28c(param_1 + 0xc); + std::locale::facet::~facet(param_1); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_0003bf80 @ 0003bf80 + +/* WARNING: Removing unreachable block (ram,0x0003c6ba) */ + +void FUN_0003bf80(undefined4 *param_1,int *param_2,uint param_3,int *param_4,uint param_5, + int param_6,int param_7,uint *param_8,uint *param_9,char *param_10) + +{ + uint *puVar1; + uint *puVar2; + uint uVar3; + uint uVar4; + locale *this; + int *piVar5; + int *piVar6; + int *piVar7; + undefined4 uVar8; + undefined4 uVar9; + int iVar10; + undefined4 uVar11; + char cVar12; + int iVar13; + int iVar14; + uint uVar15; + undefined4 local_104; + int local_fc; + uint local_c8; + int *local_c4 [2]; + char local_bc; + int *local_b8 [2]; + char local_b0; + int local_ac [4]; + int *local_9c; + int *local_98; + int *local_94 [2]; + char local_8c; + int local_88 [4]; + undefined4 local_78; + int *local_74; + uint local_70 [4]; + uint *local_60; + uint *local_5c; + int local_58 [4]; + byte *local_48; + byte *local_44; + int local_40 [4]; + byte *local_30; + byte *local_2c; + undefined4 local_28; + locale alStack_24 [4]; + int *local_20; + undefined4 local_1c; + + uVar3 = param_3 >> 8; + local_20 = param_2; + local_1c = param_3; + if ((param_2 != (int *)0x0) && ((param_3 & 0xff0000) == 0)) { + if ((byte *)param_2[2] < (byte *)param_2[3]) { + uVar4 = (uint)*(byte *)param_2[2]; + } + else { + uVar4 = (**(code **)(*param_2 + 0x20))(param_2); + } + local_1c = CONCAT13(local_1c._3_1_,0x10000); + uVar3 = (uint)(uVar4 == 0xffffffff); + local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4); + } + if (((param_5 & 0xff0000) == 0) && (param_4 != (int *)0x0)) { + if ((byte *)param_4[2] < (byte *)param_4[3]) { + uVar4 = (uint)*(byte *)param_4[2]; + } + else { + uVar4 = (**(code **)(*param_4 + 0x20))(param_4); + } + param_5 = param_5 & 0xff000000 | uVar4 & 0xff | (uint)(uVar4 == 0xffffffff) << 8 | 0x10000; + } + if ((uVar3 & 0xff) == (param_5 >> 8 & 0xff)) { + *param_8 = *param_8 | 2; + *param_1 = local_20; + param_1[1] = local_1c; + return; + } + this = (locale *)std::locale::locale(alStack_24,(locale *)(param_7 + 0x20)); + piVar5 = (int *)std::locale::_M_use_facet(this,(id *)&std::moneypunct::id); + piVar6 = (int *)std::locale::_M_use_facet(alStack_24,(id *)&std::moneypunct::id); + piVar7 = (int *)std::locale::_M_use_facet(alStack_24,(id *)&std::ctype::id); + if (param_6 == 1) { + local_28 = (**(code **)(*piVar6 + 0x28))(); + (**(code **)(*piVar6 + 0x1c))(local_40); + (**(code **)(*piVar6 + 0x18))(local_58); + } + else { + local_28 = (**(code **)(*piVar5 + 0x28))(); + (**(code **)(*piVar5 + 0x1c))(local_40); + (**(code **)(*piVar5 + 0x18))(local_58); + } + uVar3 = *(uint *)(param_7 + 4); + local_70[0] = local_70[0] & 0xffffff00; + local_fc = 1; + local_104 = 0; + iVar14 = -1; + local_c8 = param_5; + local_60 = local_70; + local_5c = local_70; + do { + switch(alStack_24[iVar14 + -3]) { + case (locale)0x0: + cVar12 = local_1c._2_1_; + while( true ) { + if ((local_20 != (int *)0x0) && (cVar12 == '\0')) { + if ((byte *)local_20[2] < (byte *)local_20[3]) { + uVar4 = (uint)*(byte *)local_20[2]; + } + else { + uVar4 = (**(code **)(*local_20 + 0x20))(); + } + local_1c = CONCAT13(local_1c._3_1_,0x10000); + local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4); + } + if (((local_c8 & 0xff0000) == 0) && (param_4 != (int *)0x0)) { + if ((byte *)param_4[2] < (byte *)param_4[3]) { + uVar4 = (uint)*(byte *)param_4[2]; + } + else { + uVar4 = (**(code **)(*param_4 + 0x20))(param_4); + } + local_c8 = local_c8 & 0xff000000 | uVar4 & 0xff | (uint)(uVar4 == 0xffffffff) << 8 | + 0x10000; + } + if ((local_1c >> 8 & 0xff) == (local_c8 >> 8 & 0xff)) break; + if (local_1c._2_1_ == '\0') { + if ((byte *)local_20[2] < (byte *)local_20[3]) { + uVar4 = (uint)*(byte *)local_20[2]; + } + else { + uVar4 = (**(code **)(*local_20 + 0x20))(); + } + local_1c = CONCAT13(local_1c._3_1_,0x10000); + local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4); + } + else { + uVar4 = local_1c & 0xff; + } + if ((*(byte *)(piVar7[3] + (uVar4 & 0xff) * 4) & 1) == 0) break; + uVar4 = local_20[2]; + if (uVar4 < (uint)local_20[3]) { +LAB_0003c498: + local_20[2] = uVar4 + 1; + } + else { + (**(code **)(*local_20 + 0x24))(); + } +LAB_0003c49c: + local_1c._0_3_ = (uint3)(ushort)local_1c; + cVar12 = '\0'; + } + break; + case (locale)0x1: + if (local_1c._2_1_ == '\0') { + if ((byte *)local_20[2] < (byte *)local_20[3]) { + uVar4 = (uint)*(byte *)local_20[2]; + } + else { + uVar4 = (**(code **)(*local_20 + 0x20))(); + } + local_1c = CONCAT13(local_1c._3_1_,0x10000); + local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4); + } + else { + uVar4 = local_1c & 0xff; + } + uVar15 = 4; + if ((*(byte *)(piVar7[3] + (uVar4 & 0xff) * 4) & 1) != 0) { + uVar4 = local_20[2]; + if (uVar4 < (uint)local_20[3]) goto LAB_0003c498; + (**(code **)(*local_20 + 0x24))(); + goto LAB_0003c49c; + } + goto LAB_0003c750; + case (locale)0x2: + if (param_6 == 1) { + (**(code **)(*piVar6 + 0x14))(local_88); + } + else { + (**(code **)(*piVar5 + 0x14))(local_88); + } + FUN_0003c914(local_94,local_20,local_1c,param_4,local_c8,local_74,local_78); + if (((uVar3 & 0x200) != 0) && (local_8c == '\0')) { + *param_8 = 4; + } + local_1c._0_3_ = (uint3)local_94[1]; + local_20 = local_94[0]; + if ((local_74 != local_88) && (local_74 != (int *)0x0)) { + if ((uint)(local_88[0] - (int)local_74) < 0x81) { + std::__node_alloc::_M_deallocate(local_74,local_88[0] - (int)local_74); + } + else { + operator_delete(local_74); + } + } + break; + case (locale)0x3: + if ((local_20 != (int *)0x0) && (local_1c._2_1_ == '\0')) { + if ((byte *)local_20[2] < (byte *)local_20[3]) { + uVar4 = (uint)*(byte *)local_20[2]; + } + else { + uVar4 = (**(code **)(*local_20 + 0x20))(); + } + local_1c = CONCAT13(local_1c._3_1_,0x10000); + local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4); + } + if (((local_c8 & 0xff0000) == 0) && (param_4 != (int *)0x0)) { + if ((byte *)param_4[2] < (byte *)param_4[3]) { + uVar4 = (uint)*(byte *)param_4[2]; + } + else { + uVar4 = (**(code **)(*param_4 + 0x20))(param_4); + } + local_c8 = local_c8 & 0xff000000 | uVar4 & 0xff | (uint)(uVar4 == 0xffffffff) << 8 | 0x10000 + ; + } + if ((local_1c >> 8 & 0xff) == (local_c8 >> 8 & 0xff)) { + if (local_44 != local_48) { + uVar15 = 4; + if (local_2c != local_30) goto LAB_0003c750; + *param_10 = '\0'; + } + } + else if (local_44 == local_48) { + if (local_2c != local_30) { + if (local_1c._2_1_ == '\0') { + if ((byte *)local_20[2] < (byte *)local_20[3]) { + uVar4 = (uint)*(byte *)local_20[2]; + } + else { + uVar4 = (**(code **)(*local_20 + 0x20))(); + } + local_1c = CONCAT13(local_1c._3_1_,0x10000); + local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4); + } + else { + uVar4 = local_1c & 0xff; + } + if ((uVar4 & 0xff) == (uint)*local_2c) { + uVar4 = local_20[2]; + if (uVar4 < (uint)local_20[3]) goto LAB_0003c480; + (**(code **)(*local_20 + 0x24))(); + goto LAB_0003c48c; + } + } + } + else { + if (local_1c._2_1_ == '\0') { + if ((byte *)local_20[2] < (byte *)local_20[3]) { + uVar4 = (uint)*(byte *)local_20[2]; + } + else { + uVar4 = (**(code **)(*local_20 + 0x20))(); + } + local_1c = CONCAT13(local_1c._3_1_,0x10000); + local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4); + } + else { + uVar4 = local_1c & 0xff; + } + if ((uVar4 & 0xff) == (uint)*local_44) { + if ((uint)local_20[2] < (uint)local_20[3]) { + local_20[2] = local_20[2] + 1; + } + else { + (**(code **)(*local_20 + 0x24))(); + } + local_1c._0_3_ = (uint3)(ushort)local_1c; + } + else if (local_2c != local_30) { + uVar15 = 4; + if ((uVar4 & 0xff) != (uint)*local_2c) goto LAB_0003c750; + uVar4 = local_20[2]; + if (uVar4 < (uint)local_20[3]) { +LAB_0003c480: + local_20[2] = uVar4 + 1; + } + else { + (**(code **)(*local_20 + 0x24))(); + } +LAB_0003c48c: + local_1c._0_3_ = (uint3)(ushort)local_1c; + *param_10 = '\0'; + } + } + break; + case (locale)0x4: + if (param_6 == 1) { + uVar11 = (**(code **)(*piVar6 + 8))(); + uVar8 = (**(code **)(*piVar6 + 0x20))(); + (**(code **)(*piVar6 + 0x10))(local_ac); + } + else { + uVar11 = (**(code **)(*piVar5 + 8))(); + uVar8 = (**(code **)(*piVar5 + 0x20))(); + (**(code **)(*piVar5 + 0x10))(local_ac); + } + local_88[0] = CONCAT31(local_88[0]._1_3_,1); + uVar9 = local_104; + if (local_98 != local_9c) { + if (param_6 == 1) { + uVar9 = (**(code **)(*piVar6 + 0xc))(); + } + else { + uVar9 = (**(code **)(*piVar5 + 0xc))(); + } + } + iVar10 = FUN_0003ca78(&local_20,param_4,local_c8,local_70,piVar7,uVar11,uVar8,uVar9,local_ac, + local_88); + if ((char)local_88[0] == '\0') { + *param_8 = *param_8 | 4; + } + iVar13 = 5; + if (iVar10 == 0) { + *param_8 = 4; + *param_1 = local_20; + param_1[1] = local_1c; + iVar13 = local_fc; + } + if ((local_98 != local_ac) && (local_98 != (int *)0x0)) { + if ((uint)(local_ac[0] - (int)local_98) < 0x81) { + std::__node_alloc::_M_deallocate(local_98,local_ac[0] - (int)local_98); + } + else { + operator_delete(local_98); + } + } + if (iVar13 != 5) goto LAB_0003c75c; + } + iVar14 = iVar14 + 1; + } while (iVar14 < 3); + if (*param_10 == '\0') { + if (1 < (uint)((int)local_30 - (int)local_2c)) { + FUN_0003c914(local_c4,local_20,local_1c,param_4,local_c8,local_2c + 1,local_30); + local_1c._0_3_ = (uint3)local_c4[1]; + local_20 = local_c4[0]; + if (local_bc == '\0') { + *param_8 = *param_8 | 4; + } + } + if (-1 < (int)((uint)(byte)*param_8 << 0x1d)) { + uVar11 = (**(code **)(*piVar7 + 0x18))(piVar7,0x2d); + FUN_0003d0a8(param_9,1,uVar11); + FUN_00037294(param_9,local_5c,local_60); + } + } + else { + if (1 < (uint)((int)local_48 - (int)local_44)) { + FUN_0003c914(local_b8,local_20,local_1c,param_4,local_c8,local_44 + 1,local_48); + local_1c._0_3_ = (uint3)local_b8[1]; + local_20 = local_b8[0]; + if (local_b0 == '\0') { + *param_8 = *param_8 | 4; + } + } + puVar2 = local_5c; + puVar1 = local_60; + if ((local_70 != param_9) && ((*param_8 & 4) == 0)) { + uVar15 = (int)local_60 - (int)local_5c; + uVar4 = param_9[4]; + uVar3 = param_9[5]; + if (uVar4 - uVar3 < uVar15) { + if (uVar4 != uVar3) { + __aeabi_memmove(); + uVar4 = param_9[4]; + uVar3 = param_9[5]; + } + FUN_00037294(param_9,(int)puVar2 + (uVar4 - uVar3),puVar1); + } + else { + if (uVar15 != 0) { + __aeabi_memmove(uVar3,local_5c,uVar15); + uVar4 = param_9[4]; + uVar3 = param_9[5]; + } + uVar3 = uVar3 + uVar15; + if (uVar3 != uVar4) { + __aeabi_memmove(uVar3,uVar4); + param_9[4] = param_9[4] + (uVar3 - uVar4); + } + } + } + } + if ((local_20 != (int *)0x0) && (local_1c._2_1_ == '\0')) { + if ((byte *)local_20[2] < (byte *)local_20[3]) { + uVar3 = (uint)*(byte *)local_20[2]; + } + else { + uVar3 = (**(code **)(*local_20 + 0x20))(); + } + local_1c = CONCAT13(local_1c._3_1_,0x10000); + local_1c._0_2_ = CONCAT11(uVar3 == 0xffffffff,(char)uVar3); + } + if (((local_c8 & 0xff0000) == 0) && (param_4 != (int *)0x0)) { + if ((byte *)param_4[2] < (byte *)param_4[3]) { + uVar3 = (uint)*(byte *)param_4[2]; + } + else { + uVar3 = (**(code **)(*param_4 + 0x20))(); + } + local_c8 = (uint)(uVar3 == 0xffffffff) << 8; + } + if ((local_1c >> 8 & 0xff) == (local_c8 >> 8 & 0xff)) { + uVar15 = *param_8 | 2; +LAB_0003c750: + *param_8 = uVar15; + } + *param_1 = local_20; + param_1[1] = local_1c; +LAB_0003c75c: + if ((local_5c != local_70) && (local_5c != (uint *)0x0)) { + if (local_70[0] - (int)local_5c < 0x81) { + std::__node_alloc::_M_deallocate(local_5c,local_70[0] - (int)local_5c); + } + else { + operator_delete(local_5c); + } + } + if ((local_44 != (byte *)local_58) && (local_44 != (byte *)0x0)) { + if ((uint)(local_58[0] - (int)local_44) < 0x81) { + std::__node_alloc::_M_deallocate(local_44,local_58[0] - (int)local_44); + } + else { + operator_delete(local_44); + } + } + if ((local_2c != (byte *)local_40) && (local_2c != (byte *)0x0)) { + if ((uint)(local_40[0] - (int)local_2c) < 0x81) { + std::__node_alloc::_M_deallocate(local_2c,local_40[0] - (int)local_2c); + } + else { + operator_delete(local_2c); + } + } + std::locale::~locale(alStack_24); + return; +} + + + +### FUNC FUN_0003c898 @ 0003c898 + +undefined4 FUN_0003c898(undefined4 param_1,undefined4 param_2,undefined4 param_3) + +{ + undefined4 uVar1; + undefined1 auStack_30 [4]; + uint local_2c [4]; + uint *local_1c; + uint *local_18; + + local_1c = local_2c; + local_2c[0] = local_2c[0] & 0xffffff00; + local_18 = local_1c; + uVar1 = FUN_0003d350(param_1,param_2,10,param_3,0,0,0,local_1c,auStack_30); + if ((local_18 != local_2c) && (local_18 != (uint *)0x0)) { + if (local_2c[0] - (int)local_18 < 0x81) { + std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); + } + else { + operator_delete(local_18); + } + } + return uVar1; +} + + + +### FUNC FUN_0003c914 @ 0003c914 + +void FUN_0003c914(undefined4 *param_1,int *param_2,uint param_3,int *param_4,uint param_5, + byte *param_6,byte *param_7) + +{ + uint uVar1; + uint uVar2; + bool bVar3; + byte *local_18; + + local_18 = param_6; + while( true ) { + if ((param_2 != (int *)0x0) && ((param_3 & 0xff0000) == 0)) { + if ((byte *)param_2[2] < (byte *)param_2[3]) { + uVar1 = (uint)*(byte *)param_2[2]; + } + else { + uVar1 = (**(code **)(*param_2 + 0x20))(param_2); + } + param_3 = param_3 & 0xff000000 | uVar1 & 0xff | (uint)(uVar1 == 0xffffffff) << 8 | 0x10000; + } + if ((param_4 != (int *)0x0) && ((param_5 & 0xff0000) == 0)) { + if ((byte *)param_4[2] < (byte *)param_4[3]) { + uVar1 = (uint)*(byte *)param_4[2]; + } + else { + uVar1 = (**(code **)(*param_4 + 0x20))(param_4); + } + param_5 = (uint)(uVar1 == 0xffffffff) << 8 | 0x10000; + } + bVar3 = param_7 == local_18; + if ((param_7 == local_18) || ((param_3 >> 8 & 0xff) == (param_5 >> 8 & 0xff))) break; + uVar1 = param_3; + if ((param_3 & 0xff0000) == 0) { + if ((byte *)param_2[2] < (byte *)param_2[3]) { + uVar1 = (uint)*(byte *)param_2[2]; + } + else { + uVar1 = (**(code **)(*param_2 + 0x20))(param_2); + } + uVar2 = param_3 & 0xff000000; + param_3 = uVar1; + uVar1 = uVar2 | uVar1 & 0xff | (uint)(uVar1 == 0xffffffff) << 8 | 0x10000; + } + uVar2 = param_3 & 0xff; + bVar3 = false; + param_3 = uVar1; + if (*local_18 != uVar2) break; + if ((uint)param_2[2] < (uint)param_2[3]) { + param_2[2] = param_2[2] + 1; + } + else { + (**(code **)(*param_2 + 0x24))(param_2); + } + param_3 = uVar1 & 0xff00ffff; + local_18 = local_18 + 1; + } + *param_1 = param_2; + param_1[1] = param_3; + *(bool *)(param_1 + 2) = bVar3; + return; +} + + + +### FUNC FUN_0003ca78 @ 0003ca78 + +undefined4 +FUN_0003ca78(int *param_1,int *param_2,uint param_3,undefined4 *param_4,int param_5,uint param_6, + int param_7,uint param_8,int param_9,char *param_10) + +{ + char cVar1; + int *piVar2; + uint uVar3; + undefined4 *puVar4; + int iVar5; + uint uVar6; + char *pcVar7; + uint uVar8; + uint uVar9; + char *pcVar10; + uint uVar11; + char *pcVar12; + undefined4 *puVar13; + char *pcVar14; + char *local_d0; + int local_c4; + uint local_a0; + char local_94 [128]; + + piVar2 = (int *)*param_1; + if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { + if ((byte *)piVar2[2] < (byte *)piVar2[3]) { + uVar3 = (uint)*(byte *)piVar2[2]; + } + else { + uVar3 = (**(code **)(*piVar2 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar3; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff; + } + if (((param_3 << 8) >> 0x18 == 0) && (param_2 != (int *)0x0)) { + if ((byte *)param_2[2] < (byte *)param_2[3]) { + uVar3 = (uint)*(byte *)param_2[2]; + } + else { + uVar3 = (**(code **)(*param_2 + 0x20))(param_2); + } + param_3 = (uint)(uVar3 == 0xffffffff) << 8 | 0x10000; + } + if ((uint)*(byte *)((int)param_1 + 5) == (param_3 >> 8 & 0xff)) { + return 0; + } + if (*(char *)((int)param_1 + 6) == '\0') { + piVar2 = (int *)*param_1; + if ((byte *)piVar2[2] < (byte *)piVar2[3]) { + uVar3 = (uint)*(byte *)piVar2[2]; + } + else { + uVar3 = (**(code **)(*piVar2 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar3; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff; + } + else { + uVar3 = (uint)*(byte *)(param_1 + 1); + } + if (-1 < (int)((uint)*(byte *)(*(int *)(param_5 + 0xc) + (uVar3 & 0xff) * 4) << 0x19)) { + return 0; + } + local_d0 = (char *)0x0; + if (*(int *)(param_9 + 0x14) != *(int *)(param_9 + 0x10)) { + local_d0 = local_94; + } + local_c4 = param_7; + puVar4 = param_4 + 4; + while( true ) { + cVar1 = '\0'; + while( true ) { + piVar2 = (int *)*param_1; + if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { + if ((byte *)piVar2[2] < (byte *)piVar2[3]) { + uVar3 = (uint)*(byte *)piVar2[2]; + } + else { + uVar3 = (**(code **)(*piVar2 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar3; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff; + } + local_a0 = 0xfffffffe; + if (((param_3 & 0xff0000) == 0) && (param_2 != (int *)0x0)) { + if ((byte *)param_2[2] < (byte *)param_2[3]) { + uVar3 = (uint)*(byte *)param_2[2]; + } + else { + uVar3 = (**(code **)(*param_2 + 0x20))(param_2); + } + param_3 = (uint)(uVar3 == 0xffffffff) << 8 | 0x10000; + } + pcVar7 = local_d0; + if ((uint)*(byte *)((int)param_1 + 5) == (param_3 >> 8 & 0xff)) goto LAB_0003cd28; + if (*(char *)((int)param_1 + 6) == '\0') { + piVar2 = (int *)*param_1; + if ((byte *)piVar2[2] < (byte *)piVar2[3]) { + uVar3 = (uint)*(byte *)piVar2[2]; + } + else { + uVar3 = (**(code **)(*piVar2 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar3; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff; + } + else { + uVar3 = (uint)*(byte *)(param_1 + 1); + } + if (-1 < (int)((uint)*(byte *)(*(int *)(param_5 + 0xc) + (uVar3 & 0xff) * 4) << 0x19)) break; + cVar1 = cVar1 + '\x01'; + piVar2 = (int *)*param_1; + if ((uint)piVar2[2] < (uint)piVar2[3]) { + piVar2[2] = piVar2[2] + 1; + } + else { + (**(code **)(*piVar2 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 6) = 0; + if ((undefined4 *)param_4[5] == param_4) { + iVar5 = param_4[4]; + puVar13 = puVar4; + } + else { + iVar5 = param_4[4]; + puVar13 = (undefined4 *)*param_4; + } + if ((int)puVar13 - iVar5 == 1) { + uVar6 = iVar5 - (int)param_4[5]; + if (uVar6 == 0xfffffffe) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + uVar8 = uVar6; + if (uVar6 < 2) { + uVar8 = 1; + } + uVar9 = uVar6 + uVar8 + 1; + uVar11 = 0xfffffffe; + if (uVar6 <= uVar9) { + uVar11 = uVar9; + } + if (uVar6 + uVar8 != -2) { + local_a0 = uVar11; + } + FUN_0003d024(param_4,local_a0); + iVar5 = param_4[4]; + } + *(undefined1 *)(iVar5 + 1) = 0; + *(char *)param_4[4] = (char)uVar3; + param_4[4] = param_4[4] + 1; + } + pcVar7 = (char *)0x0; + if ((local_d0 == (char *)0x0) || (pcVar7 = local_d0, (uVar3 & 0xff) != param_8)) break; + *local_d0 = cVar1; + local_d0 = local_d0 + 1; + piVar2 = (int *)*param_1; + if ((uint)piVar2[2] < (uint)piVar2[3]) { + piVar2[2] = piVar2[2] + 1; + } + else { + (**(code **)(*piVar2 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 6) = 0; + } +LAB_0003cd28: + pcVar14 = *(char **)(param_9 + 0x10); + pcVar12 = *(char **)(param_9 + 0x14); + if (pcVar12 == pcVar14) { + *param_10 = '\x01'; +LAB_0003ce0e: + piVar2 = (int *)*param_1; + if ((uint)piVar2[2] < (uint)piVar2[3]) { + piVar2[2] = piVar2[2] + 1; + } + else { + (**(code **)(*piVar2 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 6) = 0; + while( true ) { + piVar2 = (int *)*param_1; + if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { + if ((byte *)piVar2[2] < (byte *)piVar2[3]) { + uVar3 = (uint)*(byte *)piVar2[2]; + } + else { + uVar3 = (**(code **)(*piVar2 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar3; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff; + } + if (((param_3 & 0xff0000) == 0) && (param_2 != (int *)0x0)) { + if ((byte *)param_2[2] < (byte *)param_2[3]) { + uVar3 = (uint)*(byte *)param_2[2]; + } + else { + uVar3 = (**(code **)(*param_2 + 0x20))(param_2); + } + param_3 = (uint)(uVar3 == 0xffffffff) << 8 | 0x10000; + } + if ((uint)*(byte *)((int)param_1 + 5) == (param_3 >> 8 & 0xff)) break; + if (*(char *)((int)param_1 + 6) == '\0') { + piVar2 = (int *)*param_1; + if ((byte *)piVar2[2] < (byte *)piVar2[3]) { + uVar3 = (uint)*(byte *)piVar2[2]; + } + else { + uVar3 = (**(code **)(*piVar2 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar3; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff; + } + else { + uVar3 = (uint)*(byte *)(param_1 + 1); + } + if (-1 < (int)((uint)*(byte *)(*(int *)(param_5 + 0xc) + (uVar3 & 0xff) * 4) << 0x19)) break; + piVar2 = (int *)*param_1; + if ((uint)piVar2[2] < (uint)piVar2[3]) { + piVar2[2] = piVar2[2] + 1; + } + else { + (**(code **)(*piVar2 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 6) = 0; + if ((undefined4 *)param_4[5] == param_4) { + iVar5 = param_4[4]; + puVar13 = puVar4; + } + else { + iVar5 = param_4[4]; + puVar13 = (undefined4 *)*param_4; + } + if ((int)puVar13 - iVar5 == 1) { + uVar6 = iVar5 - (int)param_4[5]; + if (uVar6 == 0xfffffffe) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + uVar8 = uVar6; + if (uVar6 < 2) { + uVar8 = 1; + } + uVar9 = uVar6 + uVar8 + 1; + uVar11 = local_a0; + if (uVar6 <= uVar9) { + uVar11 = uVar9; + } + uVar9 = local_a0; + if (uVar6 + uVar8 != -2) { + uVar9 = uVar11; + } + FUN_0003d024(param_4,uVar9); + iVar5 = param_4[4]; + } + *(undefined1 *)(iVar5 + 1) = 0; + *(char *)param_4[4] = (char)uVar3; + param_4[4] = param_4[4] + 1; + local_c4 = local_c4 + -1; + } + *param_10 = local_c4 == 0 && *param_10 != '\0'; + } + else { + pcVar10 = local_94; + if (pcVar7 != pcVar10) { + *pcVar7 = cVar1; + pcVar10 = pcVar7 + 1; + pcVar14 = *(char **)(param_9 + 0x10); + pcVar12 = *(char **)(param_9 + 0x14); + } + cVar1 = std::priv::__valid_grouping(local_94,pcVar10,pcVar12,pcVar14); + *param_10 = cVar1; + piVar2 = (int *)*param_1; + if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { + if ((byte *)piVar2[2] < (byte *)piVar2[3]) { + uVar3 = (uint)*(byte *)piVar2[2]; + } + else { + uVar3 = (**(code **)(*piVar2 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar3; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff; + } + if (((param_3 & 0xff0000) == 0) && (param_2 != (int *)0x0)) { + if ((byte *)param_2[2] < (byte *)param_2[3]) { + uVar3 = (uint)*(byte *)param_2[2]; + } + else { + uVar3 = (**(code **)(*param_2 + 0x20))(param_2); + } + param_3 = (uint)(uVar3 == 0xffffffff) << 8 | 0x10000; + } + if ((uint)*(byte *)((int)param_1 + 5) != (param_3 >> 8 & 0xff)) { + if (*(char *)((int)param_1 + 6) == '\0') { + piVar2 = (int *)*param_1; + if ((byte *)piVar2[2] < (byte *)piVar2[3]) { + uVar3 = (uint)*(byte *)piVar2[2]; + } + else { + uVar3 = (**(code **)(*piVar2 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar3; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff; + } + else { + uVar3 = (uint)*(byte *)(param_1 + 1); + } + if ((uVar3 & 0xff) == param_6) goto LAB_0003ce0e; + } + if (param_7 != 0) { + do { + if ((undefined4 *)param_4[5] == param_4) { + iVar5 = param_4[4]; + puVar13 = puVar4; + } + else { + iVar5 = param_4[4]; + puVar13 = (undefined4 *)*param_4; + } + if ((int)puVar13 - iVar5 == 1) { + uVar3 = iVar5 - (int)param_4[5]; + if (uVar3 == 0xfffffffe) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + uVar6 = uVar3; + if (uVar3 < 2) { + uVar6 = 1; + } + uVar11 = uVar3 + uVar6 + 1; + uVar8 = local_a0; + if (uVar3 <= uVar11) { + uVar8 = uVar11; + } + uVar11 = local_a0; + if (uVar3 + uVar6 != -2) { + uVar11 = uVar8; + } + FUN_0003d024(param_4,uVar11); + iVar5 = param_4[4]; + } + *(undefined1 *)(iVar5 + 1) = 0; + *(undefined1 *)param_4[4] = 0x30; + param_4[4] = param_4[4] + 1; + param_7 = param_7 + -1; + } while (param_7 != 0); + } + } + return 1; +} + + + +### FUNC FUN_0003d024 @ 0003d024 + +void FUN_0003d024(int *param_1,uint param_2) + +{ + undefined1 *puVar1; + undefined1 *puVar2; + int *piVar3; + int iVar4; + uint uVar5; + undefined1 *puVar6; + uint local_18; + + uVar5 = 0; + if (param_2 == 0) { + puVar1 = (undefined1 *)0x0; + } + else { + local_18 = param_2; + if (param_2 < 0x81) { + puVar1 = (undefined1 *)std::__node_alloc::_M_allocate(&local_18); + uVar5 = local_18; + } + else { + puVar1 = (undefined1 *)operator_new(param_2); + uVar5 = param_2; + } + } + puVar2 = (undefined1 *)param_1[5]; + puVar6 = puVar1; + if (0 < param_1[4] - (int)puVar2) { + iVar4 = (param_1[4] + 1) - (int)puVar2; + do { + *puVar6 = *puVar2; + iVar4 = iVar4 + -1; + puVar6 = puVar6 + 1; + puVar2 = puVar2 + 1; + } while (1 < iVar4); + } + *puVar6 = 0; + piVar3 = (int *)param_1[5]; + if ((piVar3 != param_1) && (piVar3 != (int *)0x0)) { + if ((uint)(*param_1 - (int)piVar3) < 0x81) { + std::__node_alloc::_M_deallocate(piVar3,*param_1 - (int)piVar3); + } + else { + operator_delete(piVar3); + } + } + param_1[4] = (int)puVar6; + param_1[5] = (int)puVar1; + *param_1 = (int)(puVar1 + uVar5); + return; +} + + + +### FUNC FUN_0003d0a8 @ 0003d0a8 + +int * FUN_0003d0a8(int *param_1,uint param_2,undefined4 param_3) + +{ + int *piVar1; + undefined1 *puVar2; + uint uVar3; + undefined1 *puVar4; + int local_30 [4]; + int *local_20; + int *local_1c; + uint local_18; + + piVar1 = (int *)param_1[5]; + if (param_2 <= (uint)(param_1[4] - (int)piVar1)) { + __aeabi_memset(piVar1,param_2,param_3); + puVar4 = (undefined1 *)param_1[4]; + puVar2 = (undefined1 *)(param_1[5] + param_2); + if (puVar2 == puVar4) { + return param_1; + } + *puVar2 = *puVar4; + param_1[4] = (int)(puVar2 + (param_1[4] - (int)puVar4)); + return param_1; + } + uVar3 = 0xf; + if (piVar1 != param_1) { + uVar3 = *param_1 + ((uint)piVar1 ^ 0xffffffff); + } + if (param_2 < uVar3) { + __aeabi_memset(piVar1,param_1[4] - (int)piVar1,param_3); + FUN_0003d1e0(param_1,(param_2 - param_1[4]) + param_1[5],param_3); + return param_1; + } + local_20 = local_30; + uVar3 = param_2 + 1; + local_1c = local_20; + if (uVar3 == 0) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + if (uVar3 < 0x11) { + puVar4 = (undefined1 *)((int)local_30 + param_2); + } + else { + local_18 = uVar3; + if (uVar3 < 0x81) { + local_1c = (int *)std::__node_alloc::_M_allocate(&local_18); + uVar3 = local_18; + } + else { + local_1c = (int *)operator_new(uVar3); + } + local_30[0] = (int)local_1c + uVar3; + puVar4 = (undefined1 *)((int)local_1c + param_2); + if ((int)param_2 < 1) goto LAB_0003d170; + } + uVar3 = param_2 ^ 0xffffffff; + if ((int)(param_2 ^ 0xffffffff) < -1) { + uVar3 = 0xfffffffe; + } + local_20 = local_1c; + __aeabi_memset(local_1c,param_2 + uVar3 + 2,param_3); +LAB_0003d170: + local_20 = (int *)puVar4; + *puVar4 = 0; + FUN_0003d298(param_1,local_30); + if ((local_1c != local_30) && (local_1c != (int *)0x0)) { + if ((uint)(local_30[0] - (int)local_1c) < 0x81) { + std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); + } + else { + operator_delete(local_1c); + } + } + return param_1; +} + + + +### FUNC FUN_0003d1e0 @ 0003d1e0 + +undefined4 * FUN_0003d1e0(undefined4 *param_1,uint param_2,undefined4 param_3) + +{ + int iVar1; + uint uVar2; + uint uVar3; + undefined4 *puVar4; + uint uVar5; + uint uVar6; + int iVar7; + undefined4 *puVar8; + + if (param_2 != 0) { + iVar1 = param_1[4]; + puVar4 = (undefined4 *)param_1[5]; + if ((uint)((-2 - iVar1) + (int)puVar4) < param_2) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + if (puVar4 == param_1) { + puVar8 = param_1 + 4; + } + else { + puVar8 = (undefined4 *)*param_1; + } + if ((uint)((int)puVar8 - iVar1) <= param_2) { + uVar2 = iVar1 - (int)puVar4; + if (-uVar2 - 2 < param_2) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + uVar5 = uVar2; + if (uVar2 <= param_2) { + uVar5 = param_2; + } + uVar6 = uVar2 + uVar5 + 1; + uVar3 = 0xfffffffe; + if (uVar2 <= uVar6) { + uVar3 = uVar6; + } + uVar6 = 0xfffffffe; + if (uVar2 + uVar5 != -2) { + uVar6 = uVar3; + } + FUN_0003d024(param_1,uVar6); + iVar1 = param_1[4]; + } + if (0 < (int)(param_2 - 1)) { + iVar7 = -param_2; + if (param_2 == 2 || iVar7 < -2) { + iVar7 = -2; + } + __aeabi_memset(iVar1 + 1,iVar7 + param_2 + 1,param_3); + iVar1 = param_1[4]; + } + *(undefined1 *)(iVar1 + param_2) = 0; + *(char *)param_1[4] = (char)param_3; + param_1[4] = param_1[4] + param_2; + } + return param_1; +} + + + +### FUNC FUN_0003d298 @ 0003d298 + +void FUN_0003d298(undefined4 *param_1,undefined4 *param_2) + +{ + undefined4 *puVar1; + undefined4 uVar2; + undefined4 *puVar3; + int iVar4; + undefined4 uVar5; + undefined4 uVar6; + undefined4 uVar7; + + puVar1 = (undefined4 *)param_2[5]; + puVar3 = (undefined4 *)param_1[5]; + if (puVar3 == param_1) { + if (puVar1 != param_2) { + FUN_0003d298(param_2,param_1); + return; + } + uVar2 = *puVar3; + uVar6 = puVar3[1]; + uVar7 = puVar3[2]; + uVar5 = puVar3[3]; + puVar3[3] = puVar1[3]; + puVar3[2] = puVar1[2]; + puVar3[1] = puVar1[1]; + *puVar3 = *puVar1; + *puVar1 = uVar2; + puVar1[1] = uVar6; + puVar1[2] = uVar7; + puVar1[3] = uVar5; + iVar4 = param_1[4]; + param_1[4] = param_1[5] + (param_2[4] - param_2[5]); + param_2[4] = (int)puVar1 + (iVar4 - param_1[5]); + param_1[5] = param_1; + param_2[5] = param_2; + return; + } + if (puVar1 != param_2) { + uVar2 = *param_1; + *param_1 = *param_2; + *param_2 = uVar2; + uVar2 = param_1[5]; + param_1[5] = param_2[5]; + param_2[5] = uVar2; + uVar2 = param_1[4]; + param_1[4] = param_2[4]; + param_2[4] = uVar2; + return; + } + param_1[3] = puVar1[3]; + param_1[2] = puVar1[2]; + param_1[1] = puVar1[1]; + uVar2 = *param_1; + *param_1 = *puVar1; + param_1[5] = param_1; + uVar5 = param_1[4]; + param_1[4] = (int)param_1 + (param_2[4] - (int)param_2); + *param_2 = uVar2; + param_2[4] = uVar5; + param_2[5] = puVar3; + return; +} + + + +### FUNC FUN_0003d350 @ 0003d350 + +undefined4 +FUN_0003d350(int *param_1,undefined4 *param_2,int param_3,undefined4 *param_4,int param_5, + int param_6,uint param_7,int param_8) + +{ + byte bVar1; + byte *pbVar2; + int iVar3; + undefined4 uVar4; + char cVar5; + char *pcVar6; + int iVar7; + uint uVar8; + int iVar9; + uint uVar10; + int iVar11; + uint uVar12; + undefined4 uVar13; + undefined8 uVar14; + undefined8 uVar15; + undefined8 uVar16; + undefined8 uVar17; + uint local_9c; + undefined4 local_7c; + undefined4 local_70; + int local_60; + char local_54 [64]; + + uVar14 = __floatsidf(param_3); + uVar15 = __divdf3(0xffffffff,0x7fefffff); + iVar7 = *(int *)(param_8 + 0x10); + iVar9 = *(int *)(param_8 + 0x14); + pbVar2 = (byte *)*param_1; + local_9c = 1; + local_60 = param_5; + if (pbVar2 == (byte *)*param_2) { + uVar12 = 0; + pcVar6 = local_54; + uVar16 = 0; + } + else { + pcVar6 = local_54; + uVar8 = 0; + uVar16 = 0; + cVar5 = '\0'; + uVar10 = uVar8; + do { + local_70 = (undefined4)((ulonglong)uVar16 >> 0x20); + uVar4 = (undefined4)uVar16; + bVar1 = *pbVar2; + uVar12 = uVar10; + if (bVar1 == param_7 && iVar9 != iVar7) { + *pcVar6 = cVar5; + uVar8 = uVar8 + 1; + cVar5 = '\0'; + } + else { + iVar11 = 0xff; + if (-1 < (char)bVar1) { + iVar11 = std::priv::__digit_val_table((uint)bVar1); + } + if (param_3 <= iVar11) break; + iVar3 = __aeabi_dcmpgt(uVar4,local_70,(int)uVar15,(int)((ulonglong)uVar15 >> 0x20)); + cVar5 = cVar5 + '\x01'; + local_60 = local_60 + 1; + uVar12 = local_9c; + if (iVar3 == 0) { + uVar16 = __muldf3(uVar4,local_70,(int)uVar14,(int)((ulonglong)uVar14 >> 0x20)); + uVar17 = __floatsidf(iVar11); + uVar16 = __adddf3((int)uVar16,(int)((ulonglong)uVar16 >> 0x20),(int)uVar17, + (int)((ulonglong)uVar17 >> 0x20)); + iVar11 = __aeabi_dcmple((int)uVar16,(int)((ulonglong)uVar16 >> 0x20),uVar4,local_70); + iVar3 = __aeabi_dcmpeq(uVar4,local_70,0,0); + uVar12 = uVar10 | (iVar3 == 0 && iVar11 != 0); + } + } + pbVar2 = (byte *)(*param_1 + 1); + *param_1 = (int)pbVar2; + pcVar6 = local_54 + uVar8; + uVar10 = uVar12; + } while (pbVar2 != (byte *)*param_2); + pcVar6 = local_54 + uVar8; + if ((iVar9 != iVar7) && (uVar8 != 0)) { + *pcVar6 = cVar5; + pcVar6 = local_54 + uVar8 + 1; + } + } + uVar13 = (undefined4)((ulonglong)uVar16 >> 0x20); + local_7c = (undefined4)uVar16; + uVar4 = 0; + if (0 < local_60) { + if (uVar12 != 0) { + *param_4 = 0xffffffff; + param_4[1] = 0x7fefffff; + return 0; + } + uVar14 = __subdf3(0,0x80000000,local_7c,uVar13); + uVar4 = (int)((ulonglong)uVar14 >> 0x20); + if (param_6 == 0) { + uVar4 = uVar13; + } + param_4[1] = uVar4; + uVar4 = (int)uVar14; + if (param_6 == 0) { + uVar4 = local_7c; + } + *param_4 = uVar4; + uVar4 = 1; + if (iVar9 != iVar7) { + uVar4 = std::priv::__valid_grouping + (local_54,pcVar6,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); + } + } + return uVar4; +} + + + +### FUNC FUN_0003d520 @ 0003d520 + +void FUN_0003d520(facet *param_1) + +{ + std::locale::facet::~facet(param_1); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_0003d624 @ 0003d624 + +/* WARNING: Restarted to delay deadcode elimination for space: stack */ + +void FUN_0003d624(undefined4 *param_1,int *param_2,uint param_3,int param_4,int param_5,int param_6, + int param_7,int param_8) + +{ + undefined1 uVar1; + locale *this; + int *piVar2; + int *piVar3; + int *piVar4; + uint uVar5; + undefined4 uVar6; + int iVar7; + int iVar8; + undefined1 **ppuVar9; + undefined1 *puVar10; + int iVar11; + int iVar12; + byte *pbVar13; + int iVar14; + uint uVar15; + uint uVar16; + undefined1 **ppuVar17; + int iVar18; + uint uVar19; + byte *pbVar20; + byte *pbVar21; + byte *pbVar22; + undefined1 **ppuVar23; + byte bVar24; + byte *pbVar25; + bool bVar26; + int local_1d4; + undefined4 local_1d0; + int local_19c; + undefined1 **local_198; + uint local_184; + undefined1 *local_180 [4]; + undefined1 **local_170; + undefined1 local_16c; + undefined1 auStack_16b [256]; + undefined1 auStack_6b [3]; + undefined1 **local_68; + int local_64 [4]; + byte *local_54; + byte *local_50; + int local_4c [4]; + int local_3c; + byte *local_38; + int local_34 [4]; + int *local_24; + int *local_20; + locale alStack_1c [4]; + undefined1 auStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_1c,(locale *)(param_5 + 0x20)); + piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype::id); + piVar3 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct::id); + piVar4 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct::id); + uVar5 = (**(code **)(*piVar2 + 0x18))(piVar2,0x2d); + uVar6 = (**(code **)(*piVar2 + 0x18))(piVar2,0x2b); + iVar7 = (**(code **)(*piVar2 + 0x18))(piVar2,0x20); + iVar8 = (**(code **)(*piVar2 + 0x18))(piVar2,0x30); + if (param_4 == 1) { + local_1d4 = (**(code **)(*piVar4 + 8))(); + local_1d0 = (**(code **)(*piVar4 + 0xc))(); + (**(code **)(*piVar4 + 0x10))(local_34); + local_19c = (**(code **)(*piVar4 + 0x20))(piVar4,*(code **)(*piVar4 + 0x20),local_34); + (**(code **)(*piVar4 + 0x14))(local_4c,piVar4,*(code **)(*piVar4 + 0x14),local_34); + } + else { + local_1d4 = (**(code **)(*piVar3 + 8))(); + local_1d0 = (**(code **)(*piVar3 + 0xc))(); + (**(code **)(*piVar3 + 0x10))(local_34); + local_19c = (**(code **)(*piVar3 + 0x20))(piVar3,*(code **)(*piVar3 + 0x20),local_34); + (**(code **)(*piVar3 + 0x14))(local_4c,piVar3,*(code **)(*piVar3 + 0x14),local_34); + } + ppuVar9 = *(undefined1 ***)(param_7 + 0x118); + ppuVar23 = *(undefined1 ***)(param_7 + 0x10); + if (ppuVar9 == ppuVar23) { + *param_1 = param_2; + param_1[1] = param_3; + goto LAB_0003d75e; + } + uVar19 = (uint)*(byte *)ppuVar9; + ppuVar17 = (undefined1 **)((int)ppuVar9 + 1); + if (uVar19 != uVar5) { + ppuVar17 = ppuVar9; + } + if (param_4 == 1) { + if (uVar19 == uVar5) { + (**(code **)(*piVar4 + 0x1c))(local_64); + } + else { + (**(code **)(*piVar4 + 0x18))(local_64); + } + } + else if (uVar19 == uVar5) { + (**(code **)(*piVar3 + 0x1c))(local_64); + } + else { + (**(code **)(*piVar3 + 0x18))(local_64); + } + local_198 = ppuVar23; + if (param_8 == 1) { + if (ppuVar17 != ppuVar23) { + ppuVar9 = ppuVar17; + do { + local_198 = ppuVar9; + if (-1 < (int)((uint)*(byte *)(piVar2[3] + (uint)*(byte *)ppuVar9 * 4) << 0x19)) break; + ppuVar9 = (undefined1 **)((int)ppuVar9 + 1); + local_198 = ppuVar23; + } while (ppuVar23 != ppuVar9); + } + if (local_198 != ppuVar17) goto LAB_0003d7f8; + *param_1 = param_2; + param_1[1] = param_3; + } + else { +LAB_0003d7f8: + __aeabi_memclr(auStack_16b,0x100); + local_16c = 0; + local_180[0] = auStack_6b; + local_170 = (undefined1 **)&local_16c; + local_68 = (undefined1 **)&local_16c; + if (local_20 != local_24) { + if (ppuVar17 != local_198) { + FUN_0003dfb8(local_180,ppuVar17,local_198,auStack_18); + } + FUN_000500f4(local_180,(byte *)((int)local_170 + (-(int)local_68 - local_19c)),local_34, + local_1d0,uVar6,uVar5,0); + local_198 = local_170; + ppuVar17 = local_68; + } + pbVar25 = local_54 + 1; + if (local_19c == 0) { + pbVar25 = local_54; + } + iVar14 = (int)local_198 - (int)ppuVar17; + pbVar25 = pbVar25 + (iVar14 - (int)local_50); + uVar15 = *(uint *)(param_5 + 4) & 0x200; + pbVar20 = *(byte **)(param_5 + 0x1c); + if (uVar15 != 0) { + pbVar25 = pbVar25 + (local_3c - (int)local_38); + } + if (param_4 == 1) { + if (uVar19 == uVar5) { + local_184 = (**(code **)(*piVar4 + 0x28))(); + } + else { + local_184 = (**(code **)(*piVar4 + 0x24))(); + } + } + else if (uVar19 == uVar5) { + local_184 = (**(code **)(*piVar3 + 0x28))(piVar3); + } + else { + local_184 = (**(code **)(*piVar3 + 0x24))(piVar3); + } + pbVar25 = pbVar25 + ((local_184 & 0xff00) == 0x100 || (local_184 & 0xff0000) == 0x10000); + iVar18 = (int)pbVar20 - (int)pbVar25; + if (pbVar20 <= pbVar25) { + iVar18 = 0; + } + uVar5 = *(uint *)(param_5 + 4); + uVar1 = (undefined1)param_6; + if ((iVar18 != 0) && ((uVar5 & 5) == 0)) { + uVar19 = param_3; + if (0 < iVar18) { + pbVar21 = pbVar20 + (1 - (int)pbVar25); + uVar16 = param_3; + do { + uVar19 = 0; + if ((uVar16 & 0xff) != 0) { + puVar10 = (undefined1 *)param_2[5]; + if (puVar10 < (undefined1 *)param_2[6]) { + param_2[5] = (int)(puVar10 + 1); + *puVar10 = uVar1; + iVar11 = param_6; + } + else { + iVar11 = (**(code **)(*param_2 + 0x34))(param_2,param_6); + } + uVar19 = 1; + if (iVar11 == -1) { + uVar19 = 0; + } + } + pbVar21 = pbVar21 + -1; + uVar16 = uVar19; + } while (1 < (int)pbVar21); + } + param_3 = uVar19 & 0xff | param_3 & 0xffffff00; + } + pbVar21 = (byte *)((int)local_198 + (1 - (int)ppuVar17)); + iVar11 = 0; + do { + uVar19 = param_3; + switch(*(undefined1 *)((int)local_180 + iVar11 + -4)) { + case 1: + uVar19 = 0; + if ((param_3 & 0xff) != 0) { + puVar10 = (undefined1 *)param_2[5]; + if (puVar10 < (undefined1 *)param_2[6]) { + param_2[5] = (int)(puVar10 + 1); + *puVar10 = (char)iVar7; + iVar12 = iVar7; + } + else { + iVar12 = (**(code **)(*param_2 + 0x34))(param_2,iVar7); + } + uVar19 = 1; + if (iVar12 == -1) { + uVar19 = 0; + } + } + param_3 = param_3 & 0xffffff00 | uVar19; + case 0: + if (iVar18 != 0 && (uVar5 & 7) == 4) { + pbVar22 = pbVar20 + (1 - (int)pbVar25); + uVar19 = param_3; + uVar16 = param_3; + if (0 < iVar18) { + do { + uVar19 = 0; + if ((uVar16 & 0xff) != 0) { + puVar10 = (undefined1 *)param_2[5]; + if (puVar10 < (undefined1 *)param_2[6]) { + param_2[5] = (int)(puVar10 + 1); + *puVar10 = uVar1; + iVar12 = param_6; + } + else { + iVar12 = (**(code **)(*param_2 + 0x34))(param_2,param_6); + } + uVar19 = 1; + if (iVar12 == -1) { + uVar19 = 0; + } + } + pbVar22 = pbVar22 + -1; + uVar16 = uVar19; + } while (1 < (int)pbVar22); + } + param_3 = param_3 & 0xffffff00 | uVar19 & 0xff; + } + break; + case 2: + if (uVar15 != 0) { + if (0 < local_3c - (int)local_38) { + iVar12 = (local_3c + 1) - (int)local_38; + uVar16 = param_3; + pbVar22 = local_38; + do { + uVar19 = 0; + if ((uVar16 & 0xff) != 0) { + bVar24 = *pbVar22; + uVar16 = (uint)bVar24; + pbVar13 = (byte *)param_2[5]; + if (pbVar13 < (byte *)param_2[6]) { + param_2[5] = (int)(pbVar13 + 1); + *pbVar13 = bVar24; + } + else { + uVar16 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar19 = 1; + if (uVar16 == 0xffffffff) { + uVar19 = 0; + } + } + iVar12 = iVar12 + -1; + pbVar22 = pbVar22 + 1; + uVar16 = uVar19; + } while (1 < iVar12); + } +LAB_0003dbac: + param_3 = param_3 & 0xffffff00 | uVar19 & 0xff; + } + break; + case 3: + if (local_50 != local_54) { + uVar19 = 0; + if ((param_3 & 0xff) != 0) { + bVar24 = *local_50; + uVar16 = (uint)bVar24; + pbVar22 = (byte *)param_2[5]; + if (pbVar22 < (byte *)param_2[6]) { + param_2[5] = (int)(pbVar22 + 1); + *pbVar22 = bVar24; + } + else { + uVar16 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar19 = 1; + if (uVar16 == 0xffffffff) { + uVar19 = 0; + } + } + param_3 = param_3 & 0xffffff00 | uVar19; + } + break; + case 4: + if (local_19c == 0) { + pbVar22 = pbVar21; + uVar16 = param_3; + ppuVar9 = ppuVar17; + if (0 < iVar14) { + do { + uVar19 = 0; + if ((uVar16 & 0xff) != 0) { + bVar24 = *(byte *)ppuVar9; + uVar16 = (uint)bVar24; + pbVar13 = (byte *)param_2[5]; + if (pbVar13 < (byte *)param_2[6]) { + param_2[5] = (int)(pbVar13 + 1); + *pbVar13 = bVar24; + } + else { + uVar16 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar19 = 1; + if (uVar16 == 0xffffffff) { + uVar19 = 0; + } + } + pbVar22 = pbVar22 + -1; + uVar16 = uVar19; + ppuVar9 = (undefined1 **)((int)ppuVar9 + 1); + } while (1 < (int)pbVar22); + } + goto LAB_0003dbac; + } + if (local_19c < iVar14) { + pbVar22 = (byte *)((int)local_198 + ((1 - local_19c) - (int)ppuVar17)); + uVar16 = param_3; + ppuVar9 = ppuVar17; + if (0 < (int)((int)local_198 + (-(int)ppuVar17 - local_19c))) { + do { + uVar19 = 0; + if ((uVar16 & 0xff) != 0) { + bVar24 = *(byte *)ppuVar9; + uVar16 = (uint)bVar24; + pbVar13 = (byte *)param_2[5]; + if (pbVar13 < (byte *)param_2[6]) { + param_2[5] = (int)(pbVar13 + 1); + *pbVar13 = bVar24; + } + else { + uVar16 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar19 = 1; + if (uVar16 == 0xffffffff) { + uVar19 = 0; + } + } + pbVar22 = pbVar22 + -1; + uVar16 = uVar19; + ppuVar9 = (undefined1 **)((int)ppuVar9 + 1); + } while (1 < (int)pbVar22); + } + bVar24 = 0; + if ((uVar19 & 0xff) != 0) { + puVar10 = (undefined1 *)param_2[5]; + if (puVar10 < (undefined1 *)param_2[6]) { + param_2[5] = (int)(puVar10 + 1); + *puVar10 = (char)local_1d4; + iVar12 = local_1d4; + } + else { + iVar12 = (**(code **)(*param_2 + 0x34))(param_2,local_1d4); + } + bVar24 = 1; + if (iVar12 == -1) { + bVar24 = 0; + } + } + iVar12 = local_19c; + if (0 < local_19c) { + do { + bVar26 = bVar24 != 0; + bVar24 = 0; + if (bVar26) { + bVar24 = *(byte *)((int)local_198 - iVar12); + uVar19 = (uint)bVar24; + pbVar22 = (byte *)param_2[5]; + if (pbVar22 < (byte *)param_2[6]) { + param_2[5] = (int)(pbVar22 + 1); + *pbVar22 = bVar24; + } + else { + uVar19 = (**(code **)(*param_2 + 0x34))(param_2); + } + bVar24 = 1; + if (uVar19 == 0xffffffff) { + bVar24 = 0; + } + } + bVar26 = 1 < iVar12; + iVar12 = iVar12 + -1; + } while (bVar26); + } + param_3 = param_3 & 0xffffff00 | (uint)bVar24; + } + else { + bVar24 = 0; + if ((param_3 & 0xff) != 0) { + puVar10 = (undefined1 *)param_2[5]; + if (puVar10 < (undefined1 *)param_2[6]) { + param_2[5] = (int)(puVar10 + 1); + *puVar10 = (char)iVar8; + } + else { + iVar12 = (**(code **)(*param_2 + 0x34))(param_2,iVar8); + if (iVar12 == -1) goto LAB_0003dd1a; + } + puVar10 = (undefined1 *)param_2[5]; + if (puVar10 < (undefined1 *)param_2[6]) { + param_2[5] = (int)(puVar10 + 1); + *puVar10 = (char)local_1d4; + iVar12 = local_1d4; + } + else { + iVar12 = (**(code **)(*param_2 + 0x34))(param_2,local_1d4); + } + bVar24 = 1; + if (iVar12 == -1) { + bVar24 = 0; + } + } +LAB_0003dd1a: + pbVar22 = (byte *)((int)local_198 + (-(int)ppuVar17 - local_19c)); + if (local_19c != iVar14) { + do { + bVar26 = bVar24 != 0; + bVar24 = 0; + if (bVar26) { + puVar10 = (undefined1 *)param_2[5]; + if (puVar10 < (undefined1 *)param_2[6]) { + param_2[5] = (int)(puVar10 + 1); + *puVar10 = (char)iVar8; + iVar12 = iVar8; + } + else { + iVar12 = (**(code **)(*param_2 + 0x34))(param_2,iVar8); + } + bVar24 = 1; + if (iVar12 == -1) { + bVar24 = 0; + } + } + pbVar22 = pbVar22 + 1; + } while (pbVar22 != (byte *)0x0); + } + pbVar22 = pbVar21; + ppuVar9 = ppuVar17; + if (0 < iVar14) { + do { + bVar26 = bVar24 != 0; + bVar24 = 0; + if (bVar26) { + bVar24 = *(byte *)ppuVar9; + uVar19 = (uint)bVar24; + pbVar13 = (byte *)param_2[5]; + if (pbVar13 < (byte *)param_2[6]) { + param_2[5] = (int)(pbVar13 + 1); + *pbVar13 = bVar24; + } + else { + uVar19 = (**(code **)(*param_2 + 0x34))(param_2); + } + bVar24 = 1; + if (uVar19 == 0xffffffff) { + bVar24 = 0; + } + } + pbVar22 = pbVar22 + -1; + ppuVar9 = (undefined1 **)((int)ppuVar9 + 1); + } while (1 < (int)pbVar22); + } + param_3 = param_3 & 0xffffff00 | (uint)bVar24; + } + } + bVar26 = iVar11 < 3; + iVar11 = iVar11 + 1; + } while (bVar26); + if (1 < (uint)((int)local_54 - (int)local_50)) { + pbVar21 = local_50 + 1; + uVar19 = param_3; + if (0 < (int)local_54 - (int)pbVar21) { + pbVar22 = local_54 + (1 - (int)pbVar21); + uVar15 = param_3; + do { + uVar19 = 0; + if ((uVar15 & 0xff) != 0) { + bVar24 = *pbVar21; + uVar15 = (uint)bVar24; + pbVar13 = (byte *)param_2[5]; + if (pbVar13 < (byte *)param_2[6]) { + param_2[5] = (int)(pbVar13 + 1); + *pbVar13 = bVar24; + } + else { + uVar15 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar19 = 1; + if (uVar15 == 0xffffffff) { + uVar19 = 0; + } + } + pbVar22 = pbVar22 + -1; + pbVar21 = pbVar21 + 1; + uVar15 = uVar19; + } while (1 < (int)pbVar22); + } + param_3 = uVar19 & 0xff | param_3 & 0xffffff00; + } + if ((iVar18 != 0) && ((uVar5 & 6) == 0)) { + uVar5 = param_3; + if (0 < iVar18) { + pbVar20 = pbVar20 + (1 - (int)pbVar25); + uVar19 = param_3; + do { + uVar5 = 0; + if ((uVar19 & 0xff) != 0) { + puVar10 = (undefined1 *)param_2[5]; + if (puVar10 < (undefined1 *)param_2[6]) { + param_2[5] = (int)(puVar10 + 1); + *puVar10 = uVar1; + iVar7 = param_6; + } + else { + iVar7 = (**(code **)(*param_2 + 0x34))(param_2,param_6); + } + uVar5 = 1; + if (iVar7 == -1) { + uVar5 = 0; + } + } + pbVar20 = pbVar20 + -1; + uVar19 = uVar5; + } while (1 < (int)pbVar20); + } + param_3 = uVar5 & 0xff | param_3 & 0xffffff00; + } + *param_1 = param_2; + param_1[1] = param_3; + if (((local_68 != local_180) && (local_68 != (undefined1 **)0x0)) && + ((undefined1 **)&local_16c != local_68)) { + if ((uint)((int)local_180[0] - (int)local_68) < 0x81) { + std::__node_alloc::_M_deallocate(local_68,(int)local_180[0] - (int)local_68); + } + else { + operator_delete(local_68); + } + } + } + if ((local_50 != (byte *)local_64) && (local_50 != (byte *)0x0)) { + if ((uint)(local_64[0] - (int)local_50) < 0x81) { + std::__node_alloc::_M_deallocate(local_50,local_64[0] - (int)local_50); + } + else { + operator_delete(local_50); + } + } +LAB_0003d75e: + if ((local_38 != (byte *)local_4c) && (local_38 != (byte *)0x0)) { + if ((uint)(local_4c[0] - (int)local_38) < 0x81) { + std::__node_alloc::_M_deallocate(local_38,local_4c[0] - (int)local_38); + } + else { + operator_delete(local_38); + } + } + if ((local_20 != local_34) && (local_20 != (int *)0x0)) { + if ((uint)(local_34[0] - (int)local_20) < 0x81) { + std::__node_alloc::_M_deallocate(local_20,local_34[0] - (int)local_20); + } + else { + operator_delete(local_20); + } + } + std::locale::~locale(alStack_1c); + return; +} + + + +### FUNC FUN_0003dfb8 @ 0003dfb8 + +int * FUN_0003dfb8(int *param_1,undefined1 *param_2,undefined1 *param_3) + +{ + undefined1 *puVar1; + int *piVar2; + int *piVar3; + int *piVar4; + undefined1 *puVar5; + undefined1 *puVar6; + undefined1 *puVar7; + int *piVar8; + int *local_1c; + + if (param_2 != param_3) { + puVar1 = param_3 + -(int)param_2; + piVar4 = (int *)param_1[0x46]; + piVar2 = param_1 + 0x46; + if (piVar4 == param_1) { + local_1c = (int *)param_1[4]; + puVar6 = (undefined1 *)((int)param_1 + (0x10 - (int)local_1c)); + } + else { + local_1c = (int *)param_1[4]; + puVar6 = (undefined1 *)(*param_1 - (int)local_1c); + } + piVar8 = param_1 + 4; + if (puVar1 < puVar6) { + *(undefined1 *)local_1c = *param_2; + param_2 = param_2 + 1; + if (param_2 != param_3) { + __aeabi_memcpy(*piVar8 + 1,param_2,(int)param_3 - (int)param_2); + } + puVar1[*piVar8] = 0; + *piVar8 = (int)(puVar1 + *piVar8); + } + else { + puVar6 = (undefined1 *)((int)local_1c - (int)piVar4); + if ((undefined1 *)(-2 - (int)puVar6) < puVar1) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + puVar7 = puVar6; + if (puVar6 <= puVar1) { + puVar7 = puVar1; + } + puVar7 = puVar6 + (int)puVar7; + puVar5 = (undefined1 *)0xfffffffe; + if (puVar6 <= puVar7 + 1) { + puVar5 = puVar7 + 1; + } + puVar6 = (undefined1 *)0xfffffffe; + if (puVar7 != (undefined1 *)0xfffffffe) { + puVar6 = puVar5; + } + if ((uint)puVar6 >> 1 < 0x81) { + piVar3 = param_1 + 5; + } + else { + piVar3 = (int *)operator_new((uint)puVar6); + local_1c = (int *)*piVar8; + piVar4 = (int *)*piVar2; + } + piVar8 = piVar3; + if (local_1c != piVar4) { + __aeabi_memcpy(piVar3,piVar4,(int)local_1c - (int)piVar4); + piVar8 = (int *)((int)piVar3 + ((int)local_1c - (int)piVar4)); + } + __aeabi_memcpy(piVar8,param_2); + *(undefined1 *)((int)piVar8 + (int)puVar1) = 0; + piVar4 = (int *)*piVar2; + if (((piVar4 != param_1) && (piVar4 != (int *)0x0)) && (param_1 + 5 != piVar4)) { + if ((uint)(*param_1 - (int)piVar4) < 0x81) { + std::__node_alloc::_M_deallocate(piVar4,*param_1 - (int)piVar4); + } + else { + operator_delete(piVar4); + } + } + param_1[4] = (int)((int)piVar8 + (int)puVar1); + *param_1 = (int)((int)piVar3 + (int)puVar6); + *piVar2 = (int)piVar3; + } + } + return param_1; +} + + + +### FUNC FUN_0003e0e0 @ 0003e0e0 + +/* WARNING: Restarted to delay deadcode elimination for space: stack */ + +void FUN_0003e0e0(undefined4 *param_1,int *param_2,uint param_3,int param_4,int param_5,int param_6, + int param_7,int param_8) + +{ + undefined1 uVar1; + locale *this; + int *piVar2; + int *piVar3; + int *piVar4; + uint uVar5; + undefined4 uVar6; + int iVar7; + int iVar8; + undefined1 **ppuVar9; + byte *pbVar10; + int iVar11; + undefined1 *puVar12; + int iVar13; + int iVar14; + byte *pbVar15; + int iVar16; + uint uVar17; + uint uVar18; + undefined1 **ppuVar19; + uint uVar20; + undefined1 **ppuVar21; + byte *pbVar22; + byte *pbVar23; + byte *pbVar24; + byte bVar25; + bool bVar26; + int local_1c8; + undefined4 local_1b4; + int local_1a0; + uint local_198; + undefined1 **local_194; + uint local_184; + undefined1 *local_180 [4]; + undefined1 **local_170; + undefined1 local_16c; + undefined1 auStack_16b [256]; + undefined1 auStack_6b [3]; + undefined1 **local_68; + int local_64 [4]; + byte *local_54; + byte *local_50; + int local_4c [4]; + int local_3c; + byte *local_38; + int local_34 [4]; + int *local_24; + int *local_20; + locale alStack_1c [4]; + undefined1 auStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_1c,(locale *)(param_5 + 0x20)); + piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype::id); + piVar3 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct::id); + piVar4 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct::id); + uVar5 = (**(code **)(*piVar2 + 0x18))(piVar2,0x2d); + uVar6 = (**(code **)(*piVar2 + 0x18))(piVar2,0x2b); + iVar7 = (**(code **)(*piVar2 + 0x18))(piVar2,0x20); + iVar8 = (**(code **)(*piVar2 + 0x18))(piVar2,0x30); + if (param_4 == 1) { + local_1c8 = (**(code **)(*piVar4 + 8))(piVar4); + local_1b4 = (**(code **)(*piVar4 + 0xc))(piVar4); + (**(code **)(*piVar4 + 0x10))(local_34,piVar4); + local_1a0 = (**(code **)(*piVar4 + 0x20))(piVar4); + (**(code **)(*piVar4 + 0x14))(local_4c,piVar4); + } + else { + local_1c8 = (**(code **)(*piVar3 + 8))(); + local_1b4 = (**(code **)(*piVar3 + 0xc))(); + (**(code **)(*piVar3 + 0x10))(local_34); + local_1a0 = (**(code **)(*piVar3 + 0x20))(piVar3,*(code **)(*piVar3 + 0x20),local_34); + (**(code **)(*piVar3 + 0x14))(local_4c,piVar3,*(code **)(*piVar3 + 0x14),local_34); + } + ppuVar19 = *(undefined1 ***)(param_7 + 0x10); + ppuVar9 = *(undefined1 ***)(param_7 + 0x14); + if (ppuVar9 == ppuVar19) { + *param_1 = param_2; + param_1[1] = param_3; + goto LAB_0003e20c; + } + uVar20 = (uint)*(byte *)ppuVar9; + ppuVar21 = (undefined1 **)((int)ppuVar9 + 1); + if (uVar20 != uVar5) { + ppuVar21 = ppuVar9; + } + if (param_4 == 1) { + if (uVar20 == uVar5) { + (**(code **)(*piVar4 + 0x1c))(local_64,piVar4); + } + else { + (**(code **)(*piVar4 + 0x18))(local_64,piVar4); + } + } + else if (uVar20 == uVar5) { + (**(code **)(*piVar3 + 0x1c))(local_64); + } + else { + (**(code **)(*piVar3 + 0x18))(local_64); + } + local_194 = ppuVar19; + if (param_8 == 1) { + if (ppuVar21 != ppuVar19) { + ppuVar9 = ppuVar21; + do { + local_194 = ppuVar9; + if (-1 < (int)((uint)*(byte *)(piVar2[3] + (uint)*(byte *)ppuVar9 * 4) << 0x19)) break; + ppuVar9 = (undefined1 **)((int)ppuVar9 + 1); + local_194 = ppuVar19; + } while (ppuVar19 != ppuVar9); + } + if (local_194 != ppuVar21) goto LAB_0003e2b2; + *param_1 = param_2; + param_1[1] = param_3; + } + else { +LAB_0003e2b2: + __aeabi_memclr(auStack_16b,0x100); + local_16c = 0; + local_180[0] = auStack_6b; + local_170 = (undefined1 **)&local_16c; + local_68 = (undefined1 **)&local_16c; + if (local_20 != local_24) { + if (ppuVar21 != local_194) { + FUN_0003dfb8(local_180,ppuVar21,local_194,auStack_18); + } + FUN_000500f4(local_180,(byte *)((int)local_170 + (-(int)local_68 - local_1a0)),local_34, + local_1b4,uVar6,uVar5,0); + local_194 = local_170; + ppuVar21 = local_68; + } + pbVar22 = local_54 + 1; + if (local_1a0 == 0) { + pbVar22 = local_54; + } + iVar16 = (int)local_194 - (int)ppuVar21; + pbVar22 = pbVar22 + (iVar16 - (int)local_50); + uVar17 = *(uint *)(param_5 + 4) & 0x200; + pbVar10 = *(byte **)(param_5 + 0x1c); + if (uVar17 != 0) { + pbVar22 = pbVar22 + (local_3c - (int)local_38); + } + if (param_4 == 1) { + if (uVar20 == uVar5) { + local_184 = (**(code **)(*piVar4 + 0x28))(piVar4); + } + else { + local_184 = (**(code **)(*piVar4 + 0x24))(piVar4); + } + } + else if (uVar20 == uVar5) { + local_184 = (**(code **)(*piVar3 + 0x28))(); + } + else { + local_184 = (**(code **)(*piVar3 + 0x24))(); + } + pbVar22 = pbVar22 + ((local_184 & 0xff00) == 0x100 || (local_184 & 0xff0000) == 0x10000); + iVar11 = (int)pbVar10 - (int)pbVar22; + if (pbVar10 <= pbVar22) { + iVar11 = 0; + } + uVar5 = *(uint *)(param_5 + 4); + uVar1 = (undefined1)param_6; + local_198 = param_3; + if ((iVar11 != 0) && ((uVar5 & 5) == 0)) { + uVar20 = param_3; + if (0 < iVar11) { + pbVar23 = pbVar10 + (1 - (int)pbVar22); + uVar18 = param_3; + do { + uVar20 = 0; + if ((uVar18 & 0xff) != 0) { + puVar12 = (undefined1 *)param_2[5]; + if (puVar12 < (undefined1 *)param_2[6]) { + param_2[5] = (int)(puVar12 + 1); + *puVar12 = uVar1; + iVar13 = param_6; + } + else { + iVar13 = (**(code **)(*param_2 + 0x34))(param_2,param_6); + } + uVar20 = 1; + if (iVar13 == -1) { + uVar20 = 0; + } + } + pbVar23 = pbVar23 + -1; + uVar18 = uVar20; + } while (1 < (int)pbVar23); + } + local_198 = uVar20 & 0xff | param_3 & 0xffffff00; + } + pbVar23 = (byte *)((int)local_194 + (1 - (int)ppuVar21)); + iVar13 = 0; + do { + uVar20 = local_198; + switch(*(undefined1 *)((int)local_180 + iVar13 + -4)) { + case 1: + uVar20 = 0; + if ((local_198 & 0xff) != 0) { + puVar12 = (undefined1 *)param_2[5]; + if (puVar12 < (undefined1 *)param_2[6]) { + param_2[5] = (int)(puVar12 + 1); + *puVar12 = (char)iVar7; + iVar14 = iVar7; + } + else { + iVar14 = (**(code **)(*param_2 + 0x34))(param_2,iVar7); + } + uVar20 = 1; + if (iVar14 == -1) { + uVar20 = 0; + } + } + local_198 = local_198 & 0xffffff00 | uVar20; + case 0: + if (iVar11 != 0 && (uVar5 & 7) == 4) { + pbVar24 = pbVar10 + (1 - (int)pbVar22); + uVar20 = local_198; + uVar18 = local_198; + if (0 < iVar11) { + do { + uVar20 = 0; + if ((uVar18 & 0xff) != 0) { + puVar12 = (undefined1 *)param_2[5]; + if (puVar12 < (undefined1 *)param_2[6]) { + param_2[5] = (int)(puVar12 + 1); + *puVar12 = uVar1; + iVar14 = param_6; + } + else { + iVar14 = (**(code **)(*param_2 + 0x34))(param_2,param_6); + } + uVar20 = 1; + if (iVar14 == -1) { + uVar20 = 0; + } + } + pbVar24 = pbVar24 + -1; + uVar18 = uVar20; + } while (1 < (int)pbVar24); + } + local_198 = local_198 & 0xffffff00 | uVar20 & 0xff; + } + break; + case 2: + if (uVar17 != 0) { + if (0 < local_3c - (int)local_38) { + iVar14 = (local_3c + 1) - (int)local_38; + uVar18 = local_198; + pbVar24 = local_38; + do { + uVar20 = 0; + if ((uVar18 & 0xff) != 0) { + bVar25 = *pbVar24; + uVar18 = (uint)bVar25; + pbVar15 = (byte *)param_2[5]; + if (pbVar15 < (byte *)param_2[6]) { + param_2[5] = (int)(pbVar15 + 1); + *pbVar15 = bVar25; + } + else { + uVar18 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar20 = 1; + if (uVar18 == 0xffffffff) { + uVar20 = 0; + } + } + iVar14 = iVar14 + -1; + pbVar24 = pbVar24 + 1; + uVar18 = uVar20; + } while (1 < iVar14); + } +LAB_0003e66e: + local_198 = local_198 & 0xffffff00 | uVar20 & 0xff; + } + break; + case 3: + if (local_50 != local_54) { + uVar20 = 0; + if ((local_198 & 0xff) != 0) { + bVar25 = *local_50; + uVar18 = (uint)bVar25; + pbVar24 = (byte *)param_2[5]; + if (pbVar24 < (byte *)param_2[6]) { + param_2[5] = (int)(pbVar24 + 1); + *pbVar24 = bVar25; + } + else { + uVar18 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar20 = 1; + if (uVar18 == 0xffffffff) { + uVar20 = 0; + } + } + local_198 = local_198 & 0xffffff00 | uVar20; + } + break; + case 4: + if (local_1a0 == 0) { + pbVar24 = pbVar23; + uVar18 = local_198; + ppuVar9 = ppuVar21; + if (0 < iVar16) { + do { + uVar20 = 0; + if ((uVar18 & 0xff) != 0) { + bVar25 = *(byte *)ppuVar9; + uVar18 = (uint)bVar25; + pbVar15 = (byte *)param_2[5]; + if (pbVar15 < (byte *)param_2[6]) { + param_2[5] = (int)(pbVar15 + 1); + *pbVar15 = bVar25; + } + else { + uVar18 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar20 = 1; + if (uVar18 == 0xffffffff) { + uVar20 = 0; + } + } + pbVar24 = pbVar24 + -1; + uVar18 = uVar20; + ppuVar9 = (undefined1 **)((int)ppuVar9 + 1); + } while (1 < (int)pbVar24); + } + goto LAB_0003e66e; + } + if (local_1a0 < iVar16) { + pbVar24 = (byte *)((int)local_194 + ((1 - local_1a0) - (int)ppuVar21)); + uVar18 = local_198; + ppuVar9 = ppuVar21; + if (0 < (int)((int)local_194 + (-(int)ppuVar21 - local_1a0))) { + do { + uVar20 = 0; + if ((uVar18 & 0xff) != 0) { + bVar25 = *(byte *)ppuVar9; + uVar18 = (uint)bVar25; + pbVar15 = (byte *)param_2[5]; + if (pbVar15 < (byte *)param_2[6]) { + param_2[5] = (int)(pbVar15 + 1); + *pbVar15 = bVar25; + } + else { + uVar18 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar20 = 1; + if (uVar18 == 0xffffffff) { + uVar20 = 0; + } + } + pbVar24 = pbVar24 + -1; + uVar18 = uVar20; + ppuVar9 = (undefined1 **)((int)ppuVar9 + 1); + } while (1 < (int)pbVar24); + } + bVar25 = 0; + if ((uVar20 & 0xff) != 0) { + puVar12 = (undefined1 *)param_2[5]; + if (puVar12 < (undefined1 *)param_2[6]) { + param_2[5] = (int)(puVar12 + 1); + *puVar12 = (char)local_1c8; + iVar14 = local_1c8; + } + else { + iVar14 = (**(code **)(*param_2 + 0x34))(param_2,local_1c8); + } + bVar25 = 1; + if (iVar14 == -1) { + bVar25 = 0; + } + } + iVar14 = local_1a0; + if (0 < local_1a0) { + do { + bVar26 = bVar25 != 0; + bVar25 = 0; + if (bVar26) { + bVar25 = *(byte *)((int)local_194 - iVar14); + uVar20 = (uint)bVar25; + pbVar24 = (byte *)param_2[5]; + if (pbVar24 < (byte *)param_2[6]) { + param_2[5] = (int)(pbVar24 + 1); + *pbVar24 = bVar25; + } + else { + uVar20 = (**(code **)(*param_2 + 0x34))(param_2); + } + bVar25 = 1; + if (uVar20 == 0xffffffff) { + bVar25 = 0; + } + } + bVar26 = 1 < iVar14; + iVar14 = iVar14 + -1; + } while (bVar26); + } + local_198 = local_198 & 0xffffff00 | (uint)bVar25; + } + else { + bVar25 = 0; + if ((local_198 & 0xff) != 0) { + puVar12 = (undefined1 *)param_2[5]; + if (puVar12 < (undefined1 *)param_2[6]) { + param_2[5] = (int)(puVar12 + 1); + *puVar12 = (char)iVar8; + } + else { + iVar14 = (**(code **)(*param_2 + 0x34))(param_2,iVar8); + if (iVar14 == -1) goto LAB_0003e7dc; + } + puVar12 = (undefined1 *)param_2[5]; + if (puVar12 < (undefined1 *)param_2[6]) { + param_2[5] = (int)(puVar12 + 1); + *puVar12 = (char)local_1c8; + iVar14 = local_1c8; + } + else { + iVar14 = (**(code **)(*param_2 + 0x34))(param_2,local_1c8); + } + bVar25 = 1; + if (iVar14 == -1) { + bVar25 = 0; + } + } +LAB_0003e7dc: + pbVar24 = (byte *)((int)local_194 + (-(int)ppuVar21 - local_1a0)); + if (local_1a0 != iVar16) { + do { + bVar26 = bVar25 != 0; + bVar25 = 0; + if (bVar26) { + puVar12 = (undefined1 *)param_2[5]; + if (puVar12 < (undefined1 *)param_2[6]) { + param_2[5] = (int)(puVar12 + 1); + *puVar12 = (char)iVar8; + iVar14 = iVar8; + } + else { + iVar14 = (**(code **)(*param_2 + 0x34))(param_2,iVar8); + } + bVar25 = 1; + if (iVar14 == -1) { + bVar25 = 0; + } + } + pbVar24 = pbVar24 + 1; + } while (pbVar24 != (byte *)0x0); + } + pbVar24 = pbVar23; + ppuVar9 = ppuVar21; + if (0 < iVar16) { + do { + bVar26 = bVar25 != 0; + bVar25 = 0; + if (bVar26) { + bVar25 = *(byte *)ppuVar9; + uVar20 = (uint)bVar25; + pbVar15 = (byte *)param_2[5]; + if (pbVar15 < (byte *)param_2[6]) { + param_2[5] = (int)(pbVar15 + 1); + *pbVar15 = bVar25; + } + else { + uVar20 = (**(code **)(*param_2 + 0x34))(param_2); + } + bVar25 = 1; + if (uVar20 == 0xffffffff) { + bVar25 = 0; + } + } + pbVar24 = pbVar24 + -1; + ppuVar9 = (undefined1 **)((int)ppuVar9 + 1); + } while (1 < (int)pbVar24); + } + local_198 = local_198 & 0xffffff00 | (uint)bVar25; + } + } + bVar26 = iVar13 < 3; + iVar13 = iVar13 + 1; + } while (bVar26); + if (1 < (uint)((int)local_54 - (int)local_50)) { + pbVar23 = local_50 + 1; + uVar20 = local_198; + if (0 < (int)local_54 - (int)pbVar23) { + pbVar24 = local_54 + (1 - (int)pbVar23); + uVar17 = local_198; + do { + uVar20 = 0; + if ((uVar17 & 0xff) != 0) { + bVar25 = *pbVar23; + uVar17 = (uint)bVar25; + pbVar15 = (byte *)param_2[5]; + if (pbVar15 < (byte *)param_2[6]) { + param_2[5] = (int)(pbVar15 + 1); + *pbVar15 = bVar25; + } + else { + uVar17 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar20 = 1; + if (uVar17 == 0xffffffff) { + uVar20 = 0; + } + } + pbVar24 = pbVar24 + -1; + pbVar23 = pbVar23 + 1; + uVar17 = uVar20; + } while (1 < (int)pbVar24); + } + local_198 = uVar20 & 0xff | local_198 & 0xffffff00; + } + if ((iVar11 != 0) && ((uVar5 & 6) == 0)) { + uVar5 = local_198; + if (0 < iVar11) { + pbVar10 = pbVar10 + (1 - (int)pbVar22); + uVar20 = local_198; + do { + uVar5 = 0; + if ((uVar20 & 0xff) != 0) { + puVar12 = (undefined1 *)param_2[5]; + if (puVar12 < (undefined1 *)param_2[6]) { + param_2[5] = (int)(puVar12 + 1); + *puVar12 = uVar1; + iVar7 = param_6; + } + else { + iVar7 = (**(code **)(*param_2 + 0x34))(param_2,param_6); + } + uVar5 = 1; + if (iVar7 == -1) { + uVar5 = 0; + } + } + pbVar10 = pbVar10 + -1; + uVar20 = uVar5; + } while (1 < (int)pbVar10); + } + local_198 = uVar5 & 0xff | local_198 & 0xffffff00; + } + *param_1 = param_2; + param_1[1] = local_198; + if (((local_68 != local_180) && (local_68 != (undefined1 **)0x0)) && + ((undefined1 **)&local_16c != local_68)) { + if ((uint)((int)local_180[0] - (int)local_68) < 0x81) { + std::__node_alloc::_M_deallocate(local_68,(int)local_180[0] - (int)local_68); + } + else { + operator_delete(local_68); + } + } + } + if ((local_50 != (byte *)local_64) && (local_50 != (byte *)0x0)) { + if ((uint)(local_64[0] - (int)local_50) < 0x81) { + std::__node_alloc::_M_deallocate(local_50,local_64[0] - (int)local_50); + } + else { + operator_delete(local_50); + } + } +LAB_0003e20c: + if ((local_38 != (byte *)local_4c) && (local_38 != (byte *)0x0)) { + if ((uint)(local_4c[0] - (int)local_38) < 0x81) { + std::__node_alloc::_M_deallocate(local_38,local_4c[0] - (int)local_38); + } + else { + operator_delete(local_38); + } + } + if ((local_20 != local_34) && (local_20 != (int *)0x0)) { + if ((uint)(local_34[0] - (int)local_20) < 0x81) { + std::__node_alloc::_M_deallocate(local_20,local_34[0] - (int)local_20); + } + else { + operator_delete(local_20); + } + } + std::locale::~locale(alStack_1c); + return; +} + + + +### FUNC FUN_0003eb0c @ 0003eb0c + +void FUN_0003eb0c(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9) + +{ + undefined4 local_18; + undefined4 local_14; + undefined4 local_10; + undefined4 local_c; + + local_14 = param_6; + local_18 = param_5; + local_10 = param_3; + local_c = param_4; + FUN_0003f01c(param_1,&local_10,&local_18,param_7,param_8,param_9,0); + return; +} + + + +### FUNC FUN_0003eb3a @ 0003eb3a + +void FUN_0003eb3a(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9) + +{ + undefined4 local_18; + undefined4 local_14; + undefined4 local_10; + undefined4 local_c; + + local_14 = param_6; + local_18 = param_5; + local_10 = param_3; + local_c = param_4; + FUN_0003f894(param_1,&local_10,&local_18,param_7,param_8,param_9,0); + return; +} + + + +### FUNC FUN_0003eb68 @ 0003eb68 + +void FUN_0003eb68(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9) + +{ + undefined4 local_18; + undefined4 local_14; + undefined4 local_10; + undefined4 local_c; + + local_14 = param_6; + local_18 = param_5; + local_10 = param_3; + local_c = param_4; + FUN_0003fc94(param_1,&local_10,&local_18,param_7,param_8,param_9,0); + return; +} + + + +### FUNC FUN_0003eb96 @ 0003eb96 + +void FUN_0003eb96(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9) + +{ + undefined4 local_18; + undefined4 local_14; + undefined4 local_10; + undefined4 local_c; + + local_14 = param_6; + local_18 = param_5; + local_10 = param_3; + local_c = param_4; + FUN_00040090(param_1,&local_10,&local_18,param_7,param_8,param_9,0); + return; +} + + + +### FUNC FUN_0003ebc4 @ 0003ebc4 + +void FUN_0003ebc4(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9) + +{ + undefined4 local_18; + undefined4 local_14; + undefined4 local_10; + undefined4 local_c; + + local_14 = param_6; + local_18 = param_5; + local_10 = param_3; + local_c = param_4; + FUN_0004048c(param_1,&local_10,&local_18,param_7,param_8,param_9,0); + return; +} + + + +### FUNC FUN_0003ebf2 @ 0003ebf2 + +void FUN_0003ebf2(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9) + +{ + undefined4 local_18; + undefined4 local_14; + undefined4 local_10; + undefined4 local_c; + + local_14 = param_6; + local_18 = param_5; + local_10 = param_3; + local_c = param_4; + FUN_00040dac(param_1,&local_10,&local_18,param_7,param_8,param_9,0); + return; +} + + + +### FUNC FUN_0003ec20 @ 0003ec20 + +void FUN_0003ec20(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,byte *param_8, + undefined4 *param_9) + +{ + undefined4 local_28 [2]; + undefined4 local_20; + undefined4 local_1c; + undefined4 local_18; + undefined4 local_14; + + local_1c = param_6; + local_20 = param_5; + local_18 = param_3; + local_14 = param_4; + FUN_00040f24(param_1,&local_18,&local_20,param_7,param_8,local_28,0); + if (-1 < (int)((uint)*param_8 << 0x1d)) { + *param_9 = local_28[0]; + } + return; +} + + + +### FUNC FUN_0003ec5a @ 0003ec5a + +void FUN_0003ec5a(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9) + +{ + undefined4 local_18; + undefined4 local_14; + undefined4 local_10; + undefined4 local_c; + + local_14 = param_6; + local_18 = param_5; + local_10 = param_3; + local_c = param_4; + FUN_0004139c(param_1,&local_10,&local_18,param_7,param_8,param_9,0); + return; +} + + + +### FUNC FUN_0003ec88 @ 0003ec88 + +void FUN_0003ec88(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9) + +{ + undefined4 local_18; + undefined4 local_14; + undefined4 local_10; + undefined4 local_c; + + local_14 = param_6; + local_18 = param_5; + local_10 = param_3; + local_c = param_4; + FUN_00041514(param_1,&local_10,&local_18,param_7,param_8,param_9,0); + return; +} + + + +### FUNC FUN_0003ecb6 @ 0003ecb6 + +void FUN_0003ecb6(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9) + +{ + undefined4 local_18; + undefined4 local_14; + undefined4 local_10; + undefined4 local_c; + + local_14 = param_6; + local_18 = param_5; + local_10 = param_3; + local_c = param_4; + FUN_00040f24(param_1,&local_10,&local_18,param_7,param_8,param_9,0); + return; +} + + + +### FUNC FUN_0003ece4 @ 0003ece4 + +void FUN_0003ece4(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, + undefined4 param_6) + +{ + bool bVar1; + bool bVar2; + locale *this; + int *piVar3; + uint uVar4; + int iVar5; + bool bVar6; + uint uVar7; + bool bVar8; + int local_44 [4]; + int local_34; + int *local_30; + int local_2c [4]; + int local_1c; + int *local_18; + + this = (locale *)std::locale::locale((locale *)local_2c,(locale *)(param_4 + 0x20)); + piVar3 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct::id); + std::locale::~locale((locale *)local_2c); + (**(code **)(*piVar3 + 0x14))(local_2c,piVar3); + (**(code **)(*piVar3 + 0x18))(local_44,piVar3); + bVar1 = true; + uVar7 = 0; + bVar8 = true; + while( true ) { + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar4; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_3 + 1) = (char)uVar4; + *(undefined1 *)((int)param_3 + 6) = 1; + *(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff; + } + if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) goto code_r0x0003ee7a; + if (*(char *)((int)param_2 + 6) == '\0') { + piVar3 = (int *)*param_2; + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar4; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; + } + else { + uVar4 = (uint)*(byte *)(param_2 + 1); + } + bVar6 = false; + if (bVar1) { + bVar6 = (uVar4 & 0xff) == (uint)*(byte *)((int)local_18 + uVar7); + } + bVar1 = bVar6; + bVar6 = false; + if ((bVar8) && (bVar6 = true, (uVar4 & 0xff) != (uint)*(byte *)((int)local_30 + uVar7))) { + bVar6 = false; + } + uVar4 = uVar7 + 1; + bVar2 = false; + bVar8 = false; + if (!(bool)(bVar1 | bVar6)) goto LAB_0003ee90; + if ((bVar1) && ((uint)(local_1c - (int)local_18) <= uVar4)) break; + if ((bVar6) && (bVar2 = bVar1, bVar8 = true, (uint)(local_34 - (int)local_30) <= uVar4)) + goto LAB_0003ee90; + piVar3 = (int *)*param_2; + if ((uint)piVar3[2] < (uint)piVar3[3]) { + piVar3[2] = piVar3[2] + 1; + } + else { + (**(code **)(*piVar3 + 0x24))(); + } + *(undefined1 *)((int)param_2 + 6) = 0; + uVar7 = uVar4; + bVar8 = bVar6; + } + bVar2 = true; + bVar8 = bVar6; +LAB_0003ee90: + uVar7 = uVar7 + 1; + piVar3 = (int *)*param_2; + if ((uint)piVar3[2] < (uint)piVar3[3]) { + piVar3[2] = piVar3[2] + 1; + } + else { + (**(code **)(*piVar3 + 0x24))(); + } + *(undefined1 *)((int)param_2 + 6) = 0; + bVar1 = bVar2; +code_r0x0003ee7a: + bVar1 = bVar1 && (uint)(local_1c - (int)local_18) <= uVar7; + bVar6 = false; + if ((bVar8) && (bVar6 = true, uVar7 < (uint)(local_34 - (int)local_30))) { + bVar6 = false; + } + if ((bVar1) || (bVar6)) { + *param_5 = 0; + *(bool *)param_6 = bVar1; + } + else { + *param_5 = 4; + } + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar7 = (uint)*(byte *)piVar3[2]; + } + else { + uVar7 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar7; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar7 == 0xffffffff; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar7 = (uint)*(byte *)piVar3[2]; + } + else { + uVar7 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_3 + 1) = (char)uVar7; + *(undefined1 *)((int)param_3 + 6) = 1; + *(bool *)((int)param_3 + 5) = uVar7 == 0xffffffff; + } + if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { + *param_5 = *param_5 | 2; + } + iVar5 = param_2[1]; + *param_1 = *param_2; + param_1[1] = iVar5; + if ((local_30 != local_44) && (local_30 != (int *)0x0)) { + if ((uint)(local_44[0] - (int)local_30) < 0x81) { + std::__node_alloc::_M_deallocate(local_30,local_44[0] - (int)local_30); + } + else { + operator_delete(local_30); + } + } + if ((local_18 != local_2c) && (local_18 != (int *)0x0)) { + if (0x80 < (uint)(local_2c[0] - (int)local_18)) { + operator_delete(local_18); + return; + } + std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); + } + return; +} + + + +### FUNC FUN_0003f01c @ 0003f01c + +void FUN_0003f01c(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, + undefined4 *param_6) + +{ + locale *this; + undefined4 uVar1; + uint uVar2; + int *piVar3; + uint uVar4; + int iVar5; + undefined1 auStack_34 [4]; + int local_30 [5]; + int *local_1c; + locale alStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); + uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); + uVar2 = FUN_0003f220(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar4; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_3 + 1) = (char)uVar4; + *(undefined1 *)((int)param_3 + 6) = 1; + *(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff; + } + if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { + uVar4 = 4; + if ((uVar2 & 1) != 0) { + uVar4 = 0; + *param_6 = 0; + } + } + else { + piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); + uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); + (**(code **)(*piVar3 + 0x10))(local_30,piVar3); + iVar5 = FUN_0003f68a(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, + local_30,auStack_34); + if ((local_1c != local_30) && (local_1c != (int *)0x0)) { + if ((uint)(local_30[0] - (int)local_1c) < 0x81) { + std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); + } + else { + operator_delete(local_1c); + } + } + uVar4 = 0; + if (iVar5 == 0) { + uVar4 = 4; + } + } + *param_5 = uVar4; + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar2 = (uint)*(byte *)piVar3[2]; + } + else { + uVar2 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar2; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar2 = (uint)*(byte *)piVar3[2]; + } + else { + uVar2 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_3 + 1) = (char)uVar2; + *(undefined1 *)((int)param_3 + 6) = 1; + *(bool *)((int)param_3 + 5) = uVar2 == 0xffffffff; + } + if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { + *param_5 = *param_5 | 2; + } + iVar5 = param_2[1]; + *param_1 = *param_2; + param_1[1] = iVar5; + std::locale::~locale(alStack_18); + return; +} + + + +### FUNC FUN_0003f220 @ 0003f220 + +uint FUN_0003f220(int *param_1,int *param_2,uint param_3,int *param_4) + +{ + bool bVar1; + undefined4 uVar2; + int iVar3; + uint uVar4; + int *piVar5; + uint uVar6; + uint uVar7; + uint local_24; + byte local_1c; + byte local_1b; + byte local_1a; + byte local_19; + byte local_18; + + uVar2 = std::priv::__narrow_atoms(); + iVar3 = std::priv::__narrow_atoms(); + (**(code **)(*param_4 + 0x1c))(param_4,uVar2,iVar3 + 5,&local_1c); + if (*(char *)((int)param_1 + 6) == '\0') { + piVar5 = (int *)*param_1; + if ((byte *)piVar5[2] < (byte *)piVar5[3]) { + uVar4 = (uint)*(byte *)piVar5[2]; + } + else { + uVar4 = (**(code **)(*piVar5 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar4; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; + } + else { + uVar4 = (uint)*(byte *)(param_1 + 1); + } + if ((uVar4 & 0xff) == (uint)local_1b) { + piVar5 = (int *)*param_1; + if ((uint)piVar5[2] < (uint)piVar5[3]) { + piVar5[2] = piVar5[2] + 1; + uVar7 = 2; + } + else { + (**(code **)(*piVar5 + 0x24))(); + uVar7 = 2; + } +LAB_0003f2c8: + bVar1 = false; + *(undefined1 *)((int)param_1 + 6) = 0; + } + else { + uVar7 = 0; + bVar1 = true; + if ((uVar4 & 0xff) == (uint)local_1c) { + piVar5 = (int *)*param_1; + if ((uint)piVar5[2] < (uint)piVar5[3]) { + piVar5[2] = piVar5[2] + 1; + } + else { + (**(code **)(*piVar5 + 0x24))(); + } + uVar7 = 0; + goto LAB_0003f2c8; + } + } + param_3 = param_3 & 0x38; + local_24 = 0; + if (param_3 == 0x20) { + uVar4 = 0x20; + goto LAB_0003f67e; + } + if (param_3 != 0x10) { + if (param_3 == 8) { + uVar4 = 0x28; + goto LAB_0003f67e; + } + piVar5 = (int *)*param_1; + if ((piVar5 != (int *)0x0) && (!bVar1)) { + if ((byte *)piVar5[2] < (byte *)piVar5[3]) { + uVar4 = (uint)*(byte *)piVar5[2]; + } + else { + uVar4 = (**(code **)(*piVar5 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar4; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; + } + piVar5 = (int *)*param_2; + if ((piVar5 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar5[2] < (byte *)piVar5[3]) { + uVar4 = (uint)*(byte *)piVar5[2]; + } + else { + uVar4 = (**(code **)(*piVar5 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar4; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; + } + uVar4 = 0x28; + if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) goto LAB_0003f67e; + if (*(char *)((int)param_1 + 6) == '\0') { + piVar5 = (int *)*param_1; + if ((byte *)piVar5[2] < (byte *)piVar5[3]) { + uVar6 = (uint)*(byte *)piVar5[2]; + } + else { + uVar6 = (**(code **)(*piVar5 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar6; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff; + } + else { + uVar6 = (uint)*(byte *)(param_1 + 1); + } + if ((uVar6 & 0xff) != (uint)local_1a) goto LAB_0003f67e; + piVar5 = (int *)*param_1; + if ((uint)piVar5[2] < (uint)piVar5[3]) { + piVar5[2] = piVar5[2] + 1; + *(undefined1 *)((int)param_1 + 6) = 0; +LAB_0003f50a: + if ((byte *)piVar5[2] < (byte *)piVar5[3]) { + uVar4 = (uint)*(byte *)piVar5[2]; + } + else { + uVar4 = (**(code **)(*piVar5 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar4; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; + } + else { + (**(code **)(*piVar5 + 0x24))(); + *(undefined1 *)((int)param_1 + 6) = 0; + piVar5 = (int *)*param_1; + if (piVar5 != (int *)0x0) goto LAB_0003f50a; + } + piVar5 = (int *)*param_2; + if ((piVar5 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar5[2] < (byte *)piVar5[3]) { + uVar4 = (uint)*(byte *)piVar5[2]; + } + else { + uVar4 = (**(code **)(*piVar5 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar4; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; + } + local_24 = 1; + if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) { + uVar4 = 0x20; + } + else { + if (*(char *)((int)param_1 + 6) == '\0') { + piVar5 = (int *)*param_1; + if ((byte *)piVar5[2] < (byte *)piVar5[3]) { + uVar6 = (uint)*(byte *)piVar5[2]; + } + else { + uVar6 = (**(code **)(*piVar5 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar6; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff; + } + else { + uVar6 = (uint)*(byte *)(param_1 + 1); + } + if (((uVar6 & 0xff) == (uint)local_19) || (uVar4 = 0x20, (uVar6 & 0xff) == (uint)local_18)) { + piVar5 = (int *)*param_1; + if ((uint)piVar5[2] < (uint)piVar5[3]) { + piVar5[2] = piVar5[2] + 1; + } + else { + (**(code **)(*piVar5 + 0x24))(); + } + local_24 = 0; + *(undefined1 *)((int)param_1 + 6) = 0; + uVar4 = 0x40; + } + } + goto LAB_0003f67e; + } + piVar5 = (int *)*param_1; + if ((piVar5 != (int *)0x0) && (!bVar1)) { + if ((byte *)piVar5[2] < (byte *)piVar5[3]) { + uVar4 = (uint)*(byte *)piVar5[2]; + } + else { + uVar4 = (**(code **)(*piVar5 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar4; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; + } + piVar5 = (int *)*param_2; + if ((piVar5 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar5[2] < (byte *)piVar5[3]) { + uVar4 = (uint)*(byte *)piVar5[2]; + } + else { + uVar4 = (**(code **)(*piVar5 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar4; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; + } + uVar4 = 0x40; + if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) goto LAB_0003f67e; + if (*(char *)((int)param_1 + 6) == '\0') { + piVar5 = (int *)*param_1; + if ((byte *)piVar5[2] < (byte *)piVar5[3]) { + uVar6 = (uint)*(byte *)piVar5[2]; + } + else { + uVar6 = (**(code **)(*piVar5 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar6; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff; + } + else { + uVar6 = (uint)*(byte *)(param_1 + 1); + } + if ((uVar6 & 0xff) != (uint)local_1a) goto LAB_0003f67e; + piVar5 = (int *)*param_1; + if ((uint)piVar5[2] < (uint)piVar5[3]) { + piVar5[2] = piVar5[2] + 1; + *(undefined1 *)((int)param_1 + 6) = 0; +LAB_0003f472: + if ((byte *)piVar5[2] < (byte *)piVar5[3]) { + uVar6 = (uint)*(byte *)piVar5[2]; + } + else { + uVar6 = (**(code **)(*piVar5 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar6; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff; + } + else { + (**(code **)(*piVar5 + 0x24))(); + *(undefined1 *)((int)param_1 + 6) = 0; + piVar5 = (int *)*param_1; + if (piVar5 != (int *)0x0) goto LAB_0003f472; + } + piVar5 = (int *)*param_2; + if ((piVar5 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar5[2] < (byte *)piVar5[3]) { + uVar6 = (uint)*(byte *)piVar5[2]; + } + else { + uVar6 = (**(code **)(*piVar5 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar6; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar6 == 0xffffffff; + } + local_24 = 1; + if (*(char *)((int)param_1 + 5) != *(char *)((int)param_2 + 5)) { + if (*(char *)((int)param_1 + 6) == '\0') { + piVar5 = (int *)*param_1; + if ((byte *)piVar5[2] < (byte *)piVar5[3]) { + uVar6 = (uint)*(byte *)piVar5[2]; + } + else { + uVar6 = (**(code **)(*piVar5 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar6; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff; + } + else { + uVar6 = (uint)*(byte *)(param_1 + 1); + } + if (((uVar6 & 0xff) == (uint)local_19) || ((uVar6 & 0xff) == (uint)local_18)) { + piVar5 = (int *)*param_1; + if ((uint)piVar5[2] < (uint)piVar5[3]) { + piVar5[2] = piVar5[2] + 1; + } + else { + (**(code **)(*piVar5 + 0x24))(); + } + local_24 = 0; + *(undefined1 *)((int)param_1 + 6) = 0; + } + } +LAB_0003f67e: + return uVar4 | uVar7 | local_24; +} + + + +### FUNC FUN_0003f68a @ 0003f68a + +undefined4 +FUN_0003f68a(int *param_1,int *param_2,int param_3,int *param_4,int param_5,int param_6,uint param_7 + ,int param_8) + +{ + char cVar1; + int iVar2; + int *piVar3; + uint uVar4; + undefined4 uVar5; + bool bVar6; + int iVar7; + int iVar8; + int iVar9; + int iVar10; + int iVar11; + int local_98; + undefined4 local_84; + int local_6c; + char *local_64; + int local_58; + char acStack_54 [64]; + + iVar7 = *(int *)(param_8 + 0x10); + iVar9 = *(int *)(param_8 + 0x14); + local_84 = 1; + local_98 = -0x80000000; + iVar2 = __divsi3(0x80000000,param_3); + local_6c = param_5; + cVar1 = '\0'; + bVar6 = false; + local_58 = 0; + iVar11 = 0; + while( true ) { + local_64 = acStack_54 + local_58; + piVar3 = (int *)*param_1; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar4; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; + } + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar4; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; + } + if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break; + if (*(char *)((int)param_1 + 6) == '\0') { + piVar3 = (int *)*param_1; + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar4; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; + } + else { + uVar4 = (uint)*(byte *)(param_1 + 1); + } + iVar8 = 0xff; + iVar10 = iVar11; + if ((uVar4 & 0xff) == param_7 && iVar9 != iVar7) { + *local_64 = cVar1; + local_58 = local_58 + 1; + cVar1 = '\0'; + } + else { + if (-1 < (char)uVar4) { + iVar8 = std::priv::__digit_val_table(uVar4 & 0xff); + } + if (param_3 <= iVar8) break; + cVar1 = cVar1 + '\x01'; + local_6c = local_6c + 1; + if (iVar11 < iVar2) { + bVar6 = true; + } + else { + iVar10 = iVar11 * param_3 - iVar8; + bVar6 = (bool)(bVar6 | (iVar11 != 0 && iVar11 <= iVar10)); + } + } + piVar3 = (int *)*param_1; + if ((uint)piVar3[2] < (uint)piVar3[3]) { + piVar3[2] = piVar3[2] + 1; + } + else { + (**(code **)(*piVar3 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 6) = 0; + iVar11 = iVar10; + } + if ((iVar9 != iVar7) && (local_58 != 0)) { + *local_64 = cVar1; + local_64 = acStack_54 + local_58 + 1; + } + uVar5 = 0; + if (0 < local_6c) { + if (bVar6) { + if (param_6 == 0) { + local_98 = 0x7fffffff; + } + *param_4 = local_98; + return 0; + } + if (param_6 == 0) { + iVar11 = -iVar11; + } + *param_4 = iVar11; + uVar5 = local_84; + if (iVar9 != iVar7) { + uVar5 = std::priv::__valid_grouping + (acStack_54,local_64,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); + } + } + return uVar5; +} + + + +### FUNC FUN_0003f894 @ 0003f894 + +void FUN_0003f894(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, + undefined2 *param_6) + +{ + locale *this; + undefined4 uVar1; + uint uVar2; + int *piVar3; + uint uVar4; + int iVar5; + undefined1 auStack_34 [4]; + int local_30 [5]; + int *local_1c; + locale alStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); + uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); + uVar2 = FUN_0003f220(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar4; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_3 + 1) = (char)uVar4; + *(undefined1 *)((int)param_3 + 6) = 1; + *(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff; + } + if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { + uVar4 = 4; + if ((uVar2 & 1) != 0) { + uVar4 = 0; + *param_6 = 0; + } + } + else { + piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); + uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); + (**(code **)(*piVar3 + 0x10))(local_30,piVar3); + iVar5 = FUN_0003fa98(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, + local_30,auStack_34); + if ((local_1c != local_30) && (local_1c != (int *)0x0)) { + if ((uint)(local_30[0] - (int)local_1c) < 0x81) { + std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); + } + else { + operator_delete(local_1c); + } + } + uVar4 = 0; + if (iVar5 == 0) { + uVar4 = 4; + } + } + *param_5 = uVar4; + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar2 = (uint)*(byte *)piVar3[2]; + } + else { + uVar2 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar2; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar2 = (uint)*(byte *)piVar3[2]; + } + else { + uVar2 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_3 + 1) = (char)uVar2; + *(undefined1 *)((int)param_3 + 6) = 1; + *(bool *)((int)param_3 + 5) = uVar2 == 0xffffffff; + } + if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { + *param_5 = *param_5 | 2; + } + iVar5 = param_2[1]; + *param_1 = *param_2; + param_1[1] = iVar5; + std::locale::~locale(alStack_18); + return; +} + + + +### FUNC FUN_0003fa98 @ 0003fa98 + +uint FUN_0003fa98(int *param_1,int *param_2,uint param_3,short *param_4,int param_5,int param_6, + uint param_7,int param_8) + +{ + uint uVar1; + short sVar2; + uint uVar3; + uint uVar4; + int *piVar5; + uint uVar6; + uint uVar7; + int iVar8; + int iVar9; + char cVar10; + int iVar11; + char *pcVar12; + uint uVar13; + uint local_84; + uint local_78; + int local_6c; + int local_58; + char local_54 [64]; + + iVar8 = *(int *)(param_8 + 0x10); + iVar11 = *(int *)(param_8 + 0x14); + local_58 = 0; + local_84 = 1; + uVar3 = __udivsi3(0xffff,param_3 & 0xffff); + local_6c = param_5; + cVar10 = '\0'; + uVar4 = 0; + local_78 = 0; + while( true ) { + sVar2 = (short)uVar4; + pcVar12 = local_54 + local_58; + piVar5 = (int *)*param_1; + if ((piVar5 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { + if ((byte *)piVar5[2] < (byte *)piVar5[3]) { + uVar6 = (uint)*(byte *)piVar5[2]; + } + else { + uVar6 = (**(code **)(*piVar5 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar6; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff; + } + piVar5 = (int *)*param_2; + if ((piVar5 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar5[2] < (byte *)piVar5[3]) { + uVar6 = (uint)*(byte *)piVar5[2]; + } + else { + uVar6 = (**(code **)(*piVar5 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar6; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar6 == 0xffffffff; + } + if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break; + if (*(char *)((int)param_1 + 6) == '\0') { + piVar5 = (int *)*param_1; + if ((byte *)piVar5[2] < (byte *)piVar5[3]) { + uVar6 = (uint)*(byte *)piVar5[2]; + } + else { + uVar6 = (**(code **)(*piVar5 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar6; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff; + } + else { + uVar6 = (uint)*(byte *)(param_1 + 1); + } + iVar9 = 0xff; + if ((uVar6 & 0xff) == param_7 && iVar11 != iVar8) { + *pcVar12 = cVar10; + local_58 = local_58 + 1; + cVar10 = '\0'; + uVar6 = local_78; + } + else { + if (-1 < (char)uVar6) { + iVar9 = std::priv::__digit_val_table(uVar6 & 0xff); + } + if ((int)param_3 <= iVar9) break; + uVar7 = uVar4 & 0xffff; + cVar10 = cVar10 + '\x01'; + local_6c = local_6c + 1; + uVar6 = local_84; + if ((uVar7 <= uVar3) && + (uVar13 = iVar9 + uVar7 * param_3, uVar1 = uVar4 & 0xffff, uVar4 = uVar13, uVar6 = local_78 + , uVar1 != 0)) { + uVar6 = local_78 | (uVar13 & 0xffff) <= uVar7; + } + } + local_78 = uVar6; + piVar5 = (int *)*param_1; + if ((uint)piVar5[2] < (uint)piVar5[3]) { + piVar5[2] = piVar5[2] + 1; + } + else { + (**(code **)(*piVar5 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 6) = 0; + } + if ((iVar11 != iVar8) && (local_58 != 0)) { + *pcVar12 = cVar10; + pcVar12 = local_54 + local_58 + 1; + } + uVar4 = 0; + if (0 < local_6c) { + if (local_78 != 0) { + *param_4 = -1; + return 0; + } + if (param_6 == 1) { + sVar2 = -sVar2; + } + *param_4 = sVar2; + uVar4 = local_84; + if (iVar11 != iVar8) { + uVar4 = std::priv::__valid_grouping + (local_54,pcVar12,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); + } + } + return uVar4; +} + + + +### FUNC FUN_0003fc94 @ 0003fc94 + +void FUN_0003fc94(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, + undefined4 *param_6) + +{ + locale *this; + undefined4 uVar1; + uint uVar2; + int *piVar3; + uint uVar4; + int iVar5; + undefined1 auStack_34 [4]; + int local_30 [5]; + int *local_1c; + locale alStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); + uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); + uVar2 = FUN_0003f220(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar4; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_3 + 1) = (char)uVar4; + *(undefined1 *)((int)param_3 + 6) = 1; + *(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff; + } + if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { + uVar4 = 4; + if ((uVar2 & 1) != 0) { + uVar4 = 0; + *param_6 = 0; + } + } + else { + piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); + uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); + (**(code **)(*piVar3 + 0x10))(local_30,piVar3); + iVar5 = FUN_0003fe98(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, + local_30,auStack_34); + if ((local_1c != local_30) && (local_1c != (int *)0x0)) { + if ((uint)(local_30[0] - (int)local_1c) < 0x81) { + std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); + } + else { + operator_delete(local_1c); + } + } + uVar4 = 0; + if (iVar5 == 0) { + uVar4 = 4; + } + } + *param_5 = uVar4; + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar2 = (uint)*(byte *)piVar3[2]; + } + else { + uVar2 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar2; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar2 = (uint)*(byte *)piVar3[2]; + } + else { + uVar2 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_3 + 1) = (char)uVar2; + *(undefined1 *)((int)param_3 + 6) = 1; + *(bool *)((int)param_3 + 5) = uVar2 == 0xffffffff; + } + if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { + *param_5 = *param_5 | 2; + } + iVar5 = param_2[1]; + *param_1 = *param_2; + param_1[1] = iVar5; + std::locale::~locale(alStack_18); + return; +} + + + +### FUNC FUN_0003fe98 @ 0003fe98 + +undefined4 +FUN_0003fe98(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6, + uint param_7,int param_8) + +{ + char cVar1; + uint uVar2; + int *piVar3; + uint uVar4; + undefined4 uVar5; + bool bVar6; + int iVar7; + int iVar8; + int iVar9; + uint uVar10; + undefined4 local_84; + int local_6c; + char *local_64; + int local_5c; + char acStack_54 [64]; + + iVar7 = *(int *)(param_8 + 0x10); + iVar9 = *(int *)(param_8 + 0x14); + local_84 = 1; + uVar2 = __udivsi3(0xffffffff,param_3); + local_6c = param_5; + cVar1 = '\0'; + uVar10 = 0; + local_5c = 0; + bVar6 = false; + while( true ) { + local_64 = acStack_54 + local_5c; + piVar3 = (int *)*param_1; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar4; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; + } + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar4; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; + } + if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break; + if (*(char *)((int)param_1 + 6) == '\0') { + piVar3 = (int *)*param_1; + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar4; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; + } + else { + uVar4 = (uint)*(byte *)(param_1 + 1); + } + iVar8 = 0xff; + if ((uVar4 & 0xff) == param_7 && iVar9 != iVar7) { + *local_64 = cVar1; + local_5c = local_5c + 1; + cVar1 = '\0'; + } + else { + if (-1 < (char)uVar4) { + iVar8 = std::priv::__digit_val_table(uVar4 & 0xff); + } + if (param_3 <= iVar8) break; + cVar1 = cVar1 + '\x01'; + local_6c = local_6c + 1; + if (uVar2 < uVar10) { + bVar6 = true; + } + else { + uVar4 = iVar8 + uVar10 * param_3; + bVar6 = (bool)(bVar6 | (uVar10 != 0 && uVar4 <= uVar10)); + uVar10 = uVar4; + } + } + piVar3 = (int *)*param_1; + if ((uint)piVar3[2] < (uint)piVar3[3]) { + piVar3[2] = piVar3[2] + 1; + } + else { + (**(code **)(*piVar3 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 6) = 0; + } + if ((iVar9 != iVar7) && (local_5c != 0)) { + *local_64 = cVar1; + local_64 = acStack_54 + local_5c + 1; + } + uVar5 = 0; + if (0 < local_6c) { + if (bVar6) { + *param_4 = 0xffffffff; + return 0; + } + uVar2 = -uVar10; + if (param_6 == 0) { + uVar2 = uVar10; + } + *param_4 = uVar2; + uVar5 = local_84; + if (iVar9 != iVar7) { + uVar5 = std::priv::__valid_grouping + (acStack_54,local_64,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); + } + } + return uVar5; +} + + + +### FUNC FUN_00040090 @ 00040090 + +void FUN_00040090(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, + undefined4 *param_6) + +{ + locale *this; + undefined4 uVar1; + uint uVar2; + int *piVar3; + uint uVar4; + int iVar5; + undefined1 auStack_34 [4]; + int local_30 [5]; + int *local_1c; + locale alStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); + uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); + uVar2 = FUN_0003f220(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar4; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_3 + 1) = (char)uVar4; + *(undefined1 *)((int)param_3 + 6) = 1; + *(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff; + } + if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { + uVar4 = 4; + if ((uVar2 & 1) != 0) { + uVar4 = 0; + *param_6 = 0; + } + } + else { + piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); + uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); + (**(code **)(*piVar3 + 0x10))(local_30,piVar3); + iVar5 = FUN_00040294(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, + local_30,auStack_34); + if ((local_1c != local_30) && (local_1c != (int *)0x0)) { + if ((uint)(local_30[0] - (int)local_1c) < 0x81) { + std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); + } + else { + operator_delete(local_1c); + } + } + uVar4 = 0; + if (iVar5 == 0) { + uVar4 = 4; + } + } + *param_5 = uVar4; + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar2 = (uint)*(byte *)piVar3[2]; + } + else { + uVar2 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar2; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar2 = (uint)*(byte *)piVar3[2]; + } + else { + uVar2 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_3 + 1) = (char)uVar2; + *(undefined1 *)((int)param_3 + 6) = 1; + *(bool *)((int)param_3 + 5) = uVar2 == 0xffffffff; + } + if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { + *param_5 = *param_5 | 2; + } + iVar5 = param_2[1]; + *param_1 = *param_2; + param_1[1] = iVar5; + std::locale::~locale(alStack_18); + return; +} + + + +### FUNC FUN_00040294 @ 00040294 + +undefined4 +FUN_00040294(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6, + uint param_7,int param_8) + +{ + char cVar1; + uint uVar2; + int *piVar3; + uint uVar4; + undefined4 uVar5; + bool bVar6; + int iVar7; + int iVar8; + int iVar9; + uint uVar10; + undefined4 local_84; + int local_6c; + char *local_64; + int local_5c; + char acStack_54 [64]; + + iVar7 = *(int *)(param_8 + 0x10); + iVar9 = *(int *)(param_8 + 0x14); + local_84 = 1; + uVar2 = __udivsi3(0xffffffff,param_3); + local_6c = param_5; + cVar1 = '\0'; + uVar10 = 0; + local_5c = 0; + bVar6 = false; + while( true ) { + local_64 = acStack_54 + local_5c; + piVar3 = (int *)*param_1; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar4; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; + } + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar4; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; + } + if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break; + if (*(char *)((int)param_1 + 6) == '\0') { + piVar3 = (int *)*param_1; + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar4; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; + } + else { + uVar4 = (uint)*(byte *)(param_1 + 1); + } + iVar8 = 0xff; + if ((uVar4 & 0xff) == param_7 && iVar9 != iVar7) { + *local_64 = cVar1; + local_5c = local_5c + 1; + cVar1 = '\0'; + } + else { + if (-1 < (char)uVar4) { + iVar8 = std::priv::__digit_val_table(uVar4 & 0xff); + } + if (param_3 <= iVar8) break; + cVar1 = cVar1 + '\x01'; + local_6c = local_6c + 1; + if (uVar2 < uVar10) { + bVar6 = true; + } + else { + uVar4 = iVar8 + uVar10 * param_3; + bVar6 = (bool)(bVar6 | (uVar10 != 0 && uVar4 <= uVar10)); + uVar10 = uVar4; + } + } + piVar3 = (int *)*param_1; + if ((uint)piVar3[2] < (uint)piVar3[3]) { + piVar3[2] = piVar3[2] + 1; + } + else { + (**(code **)(*piVar3 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 6) = 0; + } + if ((iVar9 != iVar7) && (local_5c != 0)) { + *local_64 = cVar1; + local_64 = acStack_54 + local_5c + 1; + } + uVar5 = 0; + if (0 < local_6c) { + if (bVar6) { + *param_4 = 0xffffffff; + return 0; + } + uVar2 = -uVar10; + if (param_6 == 0) { + uVar2 = uVar10; + } + *param_4 = uVar2; + uVar5 = local_84; + if (iVar9 != iVar7) { + uVar5 = std::priv::__valid_grouping + (acStack_54,local_64,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); + } + } + return uVar5; +} + + + +### FUNC FUN_0004048c @ 0004048c + +/* WARNING: Restarted to delay deadcode elimination for space: stack */ + +void FUN_0004048c(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,float *param_6) + +{ + locale *this; + undefined4 uVar1; + undefined4 uVar2; + int iVar3; + int *piVar4; + uint uVar5; + undefined1 *local_134 [4]; + undefined1 **local_124; + undefined1 local_120; + undefined1 auStack_11f [256]; + undefined1 auStack_1f [3]; + undefined1 **local_1c; + locale alStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); + uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); + uVar2 = std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); + __aeabi_memclr(auStack_11f,0x100); + local_120 = 0; + local_134[0] = auStack_1f; + local_124 = (undefined1 **)&local_120; + local_1c = (undefined1 **)&local_120; + iVar3 = FUN_00040604(local_134,param_2,param_3,uVar1,uVar2); + uVar5 = 4; + if (iVar3 == 1) { + uVar5 = 0; + std::priv::__string_to_float((__basic_iostring *)local_134,param_6); + } + *param_5 = uVar5; + piVar4 = (int *)*param_2; + if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar4[2] < (byte *)piVar4[3]) { + uVar5 = (uint)*(byte *)piVar4[2]; + } + else { + uVar5 = (**(code **)(*piVar4 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar5; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar5 == 0xffffffff; + } + piVar4 = (int *)*param_3; + if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { + if ((byte *)piVar4[2] < (byte *)piVar4[3]) { + uVar5 = (uint)*(byte *)piVar4[2]; + } + else { + uVar5 = (**(code **)(*piVar4 + 0x20))(); + } + *(char *)(param_3 + 1) = (char)uVar5; + *(undefined1 *)((int)param_3 + 6) = 1; + *(bool *)((int)param_3 + 5) = uVar5 == 0xffffffff; + } + if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { + *param_5 = *param_5 | 2; + } + iVar3 = param_2[1]; + *param_1 = *param_2; + param_1[1] = iVar3; + if (((local_1c != local_134) && (local_1c != (undefined1 **)0x0)) && + ((undefined1 **)&local_120 != local_1c)) { + if ((uint)((int)local_134[0] - (int)local_1c) < 0x81) { + std::__node_alloc::_M_deallocate(local_1c,(int)local_134[0] - (int)local_1c); + } + else { + operator_delete(local_1c); + } + } + std::locale::~locale(alStack_18); + return; +} + + + +### FUNC FUN_00040604 @ 00040604 + +undefined4 +FUN_00040604(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,int *param_5) + +{ + uint uVar1; + undefined4 uVar2; + uint uVar3; + int *piVar4; + uint uVar5; + uint uVar6; + int local_44; + undefined1 uStack_3e; + undefined4 local_40; + undefined1 auStack_3c [12]; + undefined1 local_30 [4]; + int local_2c [4]; + int *local_1c; + int *local_18; + + (**(code **)(*param_5 + 0x10))(local_2c,param_5); + local_30[0] = 1; + uVar1 = (**(code **)(*param_5 + 8))(param_5); + uVar2 = (**(code **)(*param_5 + 0xc))(param_5); + FUN_000408f4(&local_44,*param_2,param_2[1],*param_3,param_3[1],param_1,0x2b,0x2d); + *(short *)(param_2 + 1) = (short)local_40; + *param_2 = local_44; + *(undefined1 *)((int)param_2 + 6) = uStack_3e; + if (local_18 == local_1c) { + uVar3 = FUN_00040bac(param_2,*param_3,param_3[1],param_1,auStack_3c); + } + else { + uVar3 = FUN_00040a50(param_2,*param_3,param_3[1],param_1,auStack_3c,uVar2,local_2c,local_30); + } + piVar4 = (int *)*param_2; + if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar4[2] < (byte *)piVar4[3]) { + uVar5 = (uint)*(byte *)piVar4[2]; + } + else { + uVar5 = (**(code **)(*piVar4 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar5; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar5 == 0xffffffff; + } + piVar4 = (int *)*param_3; + if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { + if ((byte *)piVar4[2] < (byte *)piVar4[3]) { + uVar5 = (uint)*(byte *)piVar4[2]; + } + else { + uVar5 = (**(code **)(*piVar4 + 0x20))(); + } + *(char *)(param_3 + 1) = (char)uVar5; + *(undefined1 *)((int)param_3 + 6) = 1; + *(bool *)((int)param_3 + 5) = uVar5 == 0xffffffff; + } + uVar2 = 0; + uVar5 = 0; + if (*(char *)((int)param_2 + 5) != *(char *)((int)param_3 + 5)) { + if (*(char *)((int)param_2 + 6) == '\0') { + piVar4 = (int *)*param_2; + if ((byte *)piVar4[2] < (byte *)piVar4[3]) { + uVar6 = (uint)*(byte *)piVar4[2]; + } + else { + uVar6 = (**(code **)(*piVar4 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar6; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar6 == 0xffffffff; + } + else { + uVar6 = (uint)*(byte *)(param_2 + 1); + } + uVar5 = 0; + if ((uVar6 & 0xff) == uVar1) { + FUN_00040cb0(param_1,0x2e); + piVar4 = (int *)*param_2; + if ((uint)piVar4[2] < (uint)piVar4[3]) { + piVar4[2] = piVar4[2] + 1; + } + else { + (**(code **)(*piVar4 + 0x24))(); + } + *(undefined1 *)((int)param_2 + 6) = 0; + uVar5 = FUN_00040bac(param_2,*param_3,param_3[1],param_1,auStack_3c); + } + } + if ((uVar3 | uVar5) == 1) { + piVar4 = (int *)*param_2; + if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar4[2] < (byte *)piVar4[3]) { + uVar1 = (uint)*(byte *)piVar4[2]; + } + else { + uVar1 = (**(code **)(*piVar4 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar1; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar1 == 0xffffffff; + } + piVar4 = (int *)*param_3; + if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { + if ((byte *)piVar4[2] < (byte *)piVar4[3]) { + uVar1 = (uint)*(byte *)piVar4[2]; + } + else { + uVar1 = (**(code **)(*piVar4 + 0x20))(); + } + *(char *)(param_3 + 1) = (char)uVar1; + *(undefined1 *)((int)param_3 + 6) = 1; + *(bool *)((int)param_3 + 5) = uVar1 == 0xffffffff; + } + uVar2 = 1; + if (*(char *)((int)param_2 + 5) != *(char *)((int)param_3 + 5)) { + if (*(char *)((int)param_2 + 6) == '\0') { + piVar4 = (int *)*param_2; + if ((byte *)piVar4[2] < (byte *)piVar4[3]) { + uVar1 = (uint)*(byte *)piVar4[2]; + } + else { + uVar1 = (**(code **)(*piVar4 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar1; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar1 == 0xffffffff; + } + else { + uVar1 = (uint)*(byte *)(param_2 + 1); + } + if ((uVar1 & 0xff | 0x20) == 0x65) { + FUN_00040cb0(param_1,0x65); + piVar4 = (int *)*param_2; + if ((uint)piVar4[2] < (uint)piVar4[3]) { + piVar4[2] = piVar4[2] + 1; + } + else { + (**(code **)(*piVar4 + 0x24))(); + } + *(undefined1 *)((int)param_2 + 6) = 0; + FUN_000408f4(&local_44,*param_2,param_2[1],*param_3,param_3[1],param_1,0x2b,0x2d); + *(short *)(param_2 + 1) = (short)local_40; + *param_2 = local_44; + *(undefined1 *)((int)param_2 + 6) = uStack_3e; + uVar2 = FUN_00040bac(param_2,*param_3,param_3[1],param_1,auStack_3c); + } + } + } + if ((local_18 != local_2c) && (local_18 != (int *)0x0)) { + if ((uint)(local_2c[0] - (int)local_18) < 0x81) { + std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); + } + else { + operator_delete(local_18); + } + } + return uVar2; +} + + + +### FUNC FUN_000408f4 @ 000408f4 + +undefined4 * +FUN_000408f4(undefined4 *param_1,int *param_2,uint param_3,int *param_4,uint param_5, + undefined4 param_6,uint param_7,uint param_8) + +{ + uint uVar1; + uint uVar2; + + if ((param_2 != (int *)0x0) && ((param_3 & 0xff0000) == 0)) { + if ((byte *)param_2[2] < (byte *)param_2[3]) { + uVar1 = (uint)*(byte *)param_2[2]; + } + else { + uVar1 = (**(code **)(*param_2 + 0x20))(param_2); + } + param_3 = param_3 & 0xff000000 | uVar1 & 0xff | (uint)(uVar1 == 0xffffffff) << 8 | 0x10000; + } + if ((param_4 != (int *)0x0) && ((param_5 & 0xff0000) == 0)) { + if ((byte *)param_4[2] < (byte *)param_4[3]) { + uVar1 = (uint)*(byte *)param_4[2]; + } + else { + uVar1 = (**(code **)(*param_4 + 0x20))(param_4); + } + param_5 = (uint)(uVar1 == 0xffffffff) << 8; + } + uVar1 = param_3; + if ((param_3 >> 8 & 0xff) == (param_5 >> 8 & 0xff)) goto LAB_00040a44; + if ((param_3 & 0xff0000) == 0) { + if ((byte *)param_2[2] < (byte *)param_2[3]) { + uVar1 = (uint)*(byte *)param_2[2]; + } + else { + uVar1 = (**(code **)(*param_2 + 0x20))(param_2); + } + uVar2 = param_3 & 0xff000000; + param_3 = uVar1; + uVar1 = uVar2 | uVar1 & 0xff | (uint)(uVar1 == 0xffffffff) << 8 | 0x10000; + } + if ((param_3 & 0xff) == param_7) { + uVar2 = param_2[2]; + if ((uint)param_2[3] <= uVar2) { + (**(code **)(*param_2 + 0x24))(param_2); + uVar1 = uVar1 & 0xff00ffff; + goto LAB_00040a44; + } +LAB_00040a32: + param_2[2] = uVar2 + 1; + } + else { + if ((param_3 & 0xff) != param_8) goto LAB_00040a44; + FUN_00040cb0(param_6,0x2d); + uVar2 = param_2[2]; + if (uVar2 < (uint)param_2[3]) goto LAB_00040a32; + (**(code **)(*param_2 + 0x24))(param_2); + } + uVar1 = uVar1 & 0xff00ffff; +LAB_00040a44: + *param_1 = param_2; + param_1[1] = uVar1; + return param_1 + 2; +} + + + +### FUNC FUN_00040a50 @ 00040a50 + +undefined4 +FUN_00040a50(int *param_1,int *param_2,uint param_3,undefined4 param_4,undefined4 param_5, + uint param_6,int param_7,undefined1 *param_8) + +{ + char cVar1; + undefined1 uVar2; + int *piVar3; + uint uVar4; + char *pcVar5; + int iVar6; + undefined4 local_6c; + char local_54 [64]; + + iVar6 = 0; + cVar1 = '\0'; + local_6c = 0; + while( true ) { + pcVar5 = local_54 + iVar6; + piVar3 = (int *)*param_1; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar4; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; + } + if ((param_2 != (int *)0x0) && ((param_3 & 0xff0000) == 0)) { + if ((byte *)param_2[2] < (byte *)param_2[3]) { + uVar4 = (uint)*(byte *)param_2[2]; + } + else { + uVar4 = (**(code **)(*param_2 + 0x20))(param_2); + } + param_3 = (uint)(uVar4 == 0xffffffff) << 8 | 0x10000; + } + if ((uint)*(byte *)((int)param_1 + 5) == (param_3 >> 8 & 0xff)) break; + if (*(char *)((int)param_1 + 6) == '\0') { + piVar3 = (int *)*param_1; + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar4; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; + } + else { + uVar4 = (uint)*(byte *)(param_1 + 1); + } + if ((uVar4 & 0xff) == param_6) { + *pcVar5 = cVar1; + iVar6 = iVar6 + 1; + cVar1 = '\0'; + } + else { + if (9 < (uVar4 - 0x30 & 0xff)) break; + FUN_00040cb0(param_4); + cVar1 = cVar1 + '\x01'; + local_6c = 1; + } + piVar3 = (int *)*param_1; + if ((uint)piVar3[2] < (uint)piVar3[3]) { + piVar3[2] = piVar3[2] + 1; + } + else { + (**(code **)(*piVar3 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 6) = 0; + } + if (iVar6 != 0) { + *pcVar5 = cVar1; + pcVar5 = local_54 + iVar6 + 1; + } + uVar2 = std::priv::__valid_grouping + (local_54,pcVar5,*(char **)(param_7 + 0x14),*(char **)(param_7 + 0x10)); + *param_8 = uVar2; + return local_6c; +} + + + +### FUNC FUN_00040bac @ 00040bac + +undefined4 FUN_00040bac(int *param_1,int *param_2,uint param_3,undefined4 param_4) + +{ + int *piVar1; + uint uVar2; + undefined4 local_1c; + + local_1c = 0; + while( true ) { + piVar1 = (int *)*param_1; + if ((piVar1 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { + if ((byte *)piVar1[2] < (byte *)piVar1[3]) { + uVar2 = (uint)*(byte *)piVar1[2]; + } + else { + uVar2 = (**(code **)(*piVar1 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar2; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar2 == 0xffffffff; + } + if ((param_2 != (int *)0x0) && ((param_3 & 0xff0000) == 0)) { + if ((byte *)param_2[2] < (byte *)param_2[3]) { + uVar2 = (uint)*(byte *)param_2[2]; + } + else { + uVar2 = (**(code **)(*param_2 + 0x20))(param_2); + } + param_3 = (uint)(uVar2 == 0xffffffff) << 8 | 0x10000; + } + if ((uint)*(byte *)((int)param_1 + 5) == (param_3 >> 8 & 0xff)) { + return local_1c; + } + if (*(char *)((int)param_1 + 6) == '\0') { + piVar1 = (int *)*param_1; + if ((byte *)piVar1[2] < (byte *)piVar1[3]) { + uVar2 = (uint)*(byte *)piVar1[2]; + } + else { + uVar2 = (**(code **)(*piVar1 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar2; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar2 == 0xffffffff; + } + else { + uVar2 = (uint)*(byte *)(param_1 + 1); + } + if (9 < (uVar2 - 0x30 & 0xff)) break; + FUN_00040cb0(param_4,uVar2 & 0xff); + piVar1 = (int *)*param_1; + if ((uint)piVar1[2] < (uint)piVar1[3]) { + piVar1[2] = piVar1[2] + 1; + } + else { + (**(code **)(*piVar1 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 6) = 0; + local_1c = 1; + } + return local_1c; +} + + + +### FUNC FUN_00040cb0 @ 00040cb0 + +void FUN_00040cb0(int *param_1,undefined1 param_2) + +{ + uint uVar1; + uint uVar2; + undefined1 *puVar3; + int *piVar4; + int *piVar5; + uint uVar6; + uint uVar7; + int *piVar8; + int *piVar9; + int *piVar10; + + piVar10 = (int *)param_1[0x46]; + piVar5 = param_1 + 0x46; + if (piVar10 == param_1) { + piVar8 = (int *)param_1[4]; + piVar4 = param_1 + 4; + } + else { + piVar8 = (int *)param_1[4]; + piVar4 = (int *)*param_1; + } + if ((int)piVar4 - (int)piVar8 == 1) { + uVar2 = (int)piVar8 - (int)piVar10; + if (uVar2 == 0xfffffffe) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + uVar6 = uVar2; + if (uVar2 < 2) { + uVar6 = 1; + } + uVar7 = uVar2 + uVar6 + 1; + uVar1 = 0xfffffffe; + if (uVar2 <= uVar7) { + uVar1 = uVar7; + } + uVar7 = 0xfffffffe; + if (uVar2 + uVar6 != -2) { + uVar7 = uVar1; + } + if (uVar7 >> 1 < 0x81) { + piVar4 = param_1 + 5; + } + else { + piVar4 = (int *)operator_new(uVar7); + piVar8 = (int *)param_1[4]; + piVar10 = (int *)*piVar5; + } + piVar9 = piVar4; + if (0 < (int)piVar8 - (int)piVar10) { + puVar3 = (undefined1 *)((int)piVar8 + (1 - (int)piVar10)); + do { + *(char *)piVar9 = (char)*piVar10; + puVar3 = puVar3 + -1; + piVar9 = (int *)((int)piVar9 + 1); + piVar10 = (int *)((int)piVar10 + 1); + } while (1 < (int)puVar3); + } + *(undefined1 *)piVar9 = 0; + piVar10 = (int *)*piVar5; + if (((piVar10 != param_1) && (piVar10 != (int *)0x0)) && (param_1 + 5 != piVar10)) { + if ((uint)(*param_1 - (int)piVar10) < 0x81) { + std::__node_alloc::_M_deallocate(piVar10,*param_1 - (int)piVar10); + } + else { + operator_delete(piVar10); + } + } + param_1[4] = (int)piVar9; + *param_1 = (int)((int)piVar4 + uVar7); + *piVar5 = (int)piVar4; + piVar8 = piVar9; + } + param_1 = param_1 + 4; + *(undefined1 *)((int)piVar8 + 1) = 0; + *(undefined1 *)*param_1 = param_2; + *param_1 = *param_1 + 1; + return; +} + + + +### FUNC FUN_00040dac @ 00040dac + +/* WARNING: Restarted to delay deadcode elimination for space: stack */ + +void FUN_00040dac(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,double *param_6) + +{ + locale *this; + undefined4 uVar1; + undefined4 uVar2; + int iVar3; + int *piVar4; + uint uVar5; + undefined1 *local_134 [4]; + undefined1 **local_124; + undefined1 local_120; + undefined1 auStack_11f [256]; + undefined1 auStack_1f [3]; + undefined1 **local_1c; + locale alStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); + uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); + uVar2 = std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); + __aeabi_memclr(auStack_11f,0x100); + local_120 = 0; + local_134[0] = auStack_1f; + local_124 = (undefined1 **)&local_120; + local_1c = (undefined1 **)&local_120; + iVar3 = FUN_00040604(local_134,param_2,param_3,uVar1,uVar2); + uVar5 = 4; + if (iVar3 == 1) { + uVar5 = 0; + std::priv::__string_to_float((__basic_iostring *)local_134,param_6); + } + *param_5 = uVar5; + piVar4 = (int *)*param_2; + if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar4[2] < (byte *)piVar4[3]) { + uVar5 = (uint)*(byte *)piVar4[2]; + } + else { + uVar5 = (**(code **)(*piVar4 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar5; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar5 == 0xffffffff; + } + piVar4 = (int *)*param_3; + if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { + if ((byte *)piVar4[2] < (byte *)piVar4[3]) { + uVar5 = (uint)*(byte *)piVar4[2]; + } + else { + uVar5 = (**(code **)(*piVar4 + 0x20))(); + } + *(char *)(param_3 + 1) = (char)uVar5; + *(undefined1 *)((int)param_3 + 6) = 1; + *(bool *)((int)param_3 + 5) = uVar5 == 0xffffffff; + } + if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { + *param_5 = *param_5 | 2; + } + iVar3 = param_2[1]; + *param_1 = *param_2; + param_1[1] = iVar3; + if (((local_1c != local_134) && (local_1c != (undefined1 **)0x0)) && + ((undefined1 **)&local_120 != local_1c)) { + if ((uint)((int)local_134[0] - (int)local_1c) < 0x81) { + std::__node_alloc::_M_deallocate(local_1c,(int)local_134[0] - (int)local_1c); + } + else { + operator_delete(local_1c); + } + } + std::locale::~locale(alStack_18); + return; +} + + + +### FUNC FUN_00040f24 @ 00040f24 + +void FUN_00040f24(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, + undefined4 *param_6) + +{ + locale *this; + undefined4 uVar1; + uint uVar2; + int *piVar3; + uint uVar4; + int iVar5; + undefined1 auStack_34 [4]; + int local_30 [5]; + int *local_1c; + locale alStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); + uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); + uVar2 = FUN_0003f220(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar4; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_3 + 1) = (char)uVar4; + *(undefined1 *)((int)param_3 + 6) = 1; + *(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff; + } + if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { + uVar4 = 4; + if ((uVar2 & 1) != 0) { + uVar4 = 0; + *param_6 = 0; + param_6[1] = 0; + } + } + else { + piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); + uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); + (**(code **)(*piVar3 + 0x10))(local_30,piVar3); + iVar5 = FUN_00041128(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, + local_30,auStack_34); + if ((local_1c != local_30) && (local_1c != (int *)0x0)) { + if ((uint)(local_30[0] - (int)local_1c) < 0x81) { + std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); + } + else { + operator_delete(local_1c); + } + } + uVar4 = 0; + if (iVar5 == 0) { + uVar4 = 4; + } + } + *param_5 = uVar4; + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar2 = (uint)*(byte *)piVar3[2]; + } + else { + uVar2 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar2; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar2 = (uint)*(byte *)piVar3[2]; + } + else { + uVar2 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_3 + 1) = (char)uVar2; + *(undefined1 *)((int)param_3 + 6) = 1; + *(bool *)((int)param_3 + 5) = uVar2 == 0xffffffff; + } + if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { + *param_5 = *param_5 | 2; + } + iVar5 = param_2[1]; + *param_1 = *param_2; + param_1[1] = iVar5; + std::locale::~locale(alStack_18); + return; +} + + + +### FUNC FUN_00041128 @ 00041128 + +undefined4 +FUN_00041128(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6, + uint param_7,int param_8) + +{ + bool bVar1; + longlong lVar2; + int *piVar3; + uint uVar4; + uint uVar5; + undefined4 uVar6; + char cVar7; + bool bVar8; + int iVar9; + int iVar10; + undefined8 uVar11; + longlong lVar12; + undefined4 local_94; + int local_78; + char *local_70; + uint local_64; + uint local_60; + uint local_5c; + int local_58; + char acStack_54 [64]; + + iVar9 = *(int *)(param_8 + 0x10); + iVar10 = *(int *)(param_8 + 0x14); + local_94 = 1; + uVar11 = __aeabi_uldivmod(0xffffffff,0xffffffff,param_3); + uVar5 = (uint)((ulonglong)uVar11 >> 0x20); + local_58 = 0; + local_78 = param_5; + cVar7 = '\0'; + bVar8 = false; + lVar2 = 0; + while( true ) { + local_5c = (uint)((ulonglong)lVar2 >> 0x20); + local_60 = (uint)lVar2; + local_70 = acStack_54 + local_58; + piVar3 = (int *)*param_1; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar4; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; + } + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar4; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; + } + if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break; + if (*(char *)((int)param_1 + 6) == '\0') { + piVar3 = (int *)*param_1; + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar4; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; + } + else { + uVar4 = (uint)*(byte *)(param_1 + 1); + } + local_64 = 0xff; + lVar12 = lVar2; + if ((uVar4 & 0xff) == param_7 && iVar10 != iVar9) { + *local_70 = cVar7; + local_58 = local_58 + 1; + cVar7 = '\0'; + } + else { + if (-1 < (char)uVar4) { + local_64 = std::priv::__digit_val_table(uVar4 & 0xff); + } + if (param_3 <= (int)local_64) break; + bVar1 = (uint)uVar11 < local_60; + if (local_5c != uVar5) { + bVar1 = uVar5 < local_5c; + } + cVar7 = cVar7 + '\x01'; + local_78 = local_78 + 1; + if (bVar1) { + bVar8 = true; + } + else { + lVar12 = __muldi3(local_60,local_5c,param_3,param_3 >> 0x1f); + lVar12 = lVar12 + (ulonglong)local_64; + uVar4 = (uint)((ulonglong)lVar12 >> 0x20); + bVar1 = local_60 < (uint)lVar12; + if (uVar4 != local_5c) { + bVar1 = local_5c < uVar4; + } + bVar8 = (bool)(bVar8 | (lVar2 != 0 && !bVar1)); + } + } + piVar3 = (int *)*param_1; + if ((uint)piVar3[2] < (uint)piVar3[3]) { + piVar3[2] = piVar3[2] + 1; + } + else { + (**(code **)(*piVar3 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 6) = 0; + lVar2 = lVar12; + } + if ((iVar10 != iVar9) && (local_58 != 0)) { + *local_70 = cVar7; + local_70 = acStack_54 + local_58 + 1; + } + uVar6 = 0; + if (0 < local_78) { + if (bVar8) { + *param_4 = 0xffffffff; + param_4[1] = 0xffffffff; + return 0; + } + uVar5 = -local_60; + if (param_6 == 0) { + uVar5 = local_60; + } + *param_4 = uVar5; + uVar5 = -(uint)(local_60 != 0) - local_5c; + if (param_6 == 0) { + uVar5 = local_5c; + } + param_4[1] = uVar5; + uVar6 = local_94; + if (iVar10 != iVar9) { + uVar6 = std::priv::__valid_grouping + (acStack_54,local_70,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); + } + } + return uVar6; +} + + + +### FUNC FUN_0004139c @ 0004139c + +/* WARNING: Restarted to delay deadcode elimination for space: stack */ + +void FUN_0004139c(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, + longdouble *param_6) + +{ + locale *this; + undefined4 uVar1; + undefined4 uVar2; + int iVar3; + int *piVar4; + uint uVar5; + undefined1 *local_134 [4]; + undefined1 **local_124; + undefined1 local_120; + undefined1 auStack_11f [256]; + undefined1 auStack_1f [3]; + undefined1 **local_1c; + locale alStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); + uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); + uVar2 = std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); + __aeabi_memclr(auStack_11f,0x100); + local_120 = 0; + local_134[0] = auStack_1f; + local_124 = (undefined1 **)&local_120; + local_1c = (undefined1 **)&local_120; + iVar3 = FUN_00040604(local_134,param_2,param_3,uVar1,uVar2); + uVar5 = 4; + if (iVar3 == 1) { + uVar5 = 0; + std::priv::__string_to_float((__basic_iostring *)local_134,param_6); + } + *param_5 = uVar5; + piVar4 = (int *)*param_2; + if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar4[2] < (byte *)piVar4[3]) { + uVar5 = (uint)*(byte *)piVar4[2]; + } + else { + uVar5 = (**(code **)(*piVar4 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar5; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar5 == 0xffffffff; + } + piVar4 = (int *)*param_3; + if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { + if ((byte *)piVar4[2] < (byte *)piVar4[3]) { + uVar5 = (uint)*(byte *)piVar4[2]; + } + else { + uVar5 = (**(code **)(*piVar4 + 0x20))(); + } + *(char *)(param_3 + 1) = (char)uVar5; + *(undefined1 *)((int)param_3 + 6) = 1; + *(bool *)((int)param_3 + 5) = uVar5 == 0xffffffff; + } + if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { + *param_5 = *param_5 | 2; + } + iVar3 = param_2[1]; + *param_1 = *param_2; + param_1[1] = iVar3; + if (((local_1c != local_134) && (local_1c != (undefined1 **)0x0)) && + ((undefined1 **)&local_120 != local_1c)) { + if ((uint)((int)local_134[0] - (int)local_1c) < 0x81) { + std::__node_alloc::_M_deallocate(local_1c,(int)local_134[0] - (int)local_1c); + } + else { + operator_delete(local_1c); + } + } + std::locale::~locale(alStack_18); + return; +} + + + +### FUNC FUN_00041514 @ 00041514 + +void FUN_00041514(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, + undefined4 *param_6) + +{ + locale *this; + undefined4 uVar1; + uint uVar2; + int *piVar3; + uint uVar4; + int iVar5; + undefined1 auStack_34 [4]; + int local_30 [5]; + int *local_1c; + locale alStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); + uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); + uVar2 = FUN_0003f220(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar4; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar4 = (uint)*(byte *)piVar3[2]; + } + else { + uVar4 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_3 + 1) = (char)uVar4; + *(undefined1 *)((int)param_3 + 6) = 1; + *(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff; + } + if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { + uVar4 = 4; + if ((uVar2 & 1) != 0) { + uVar4 = 0; + *param_6 = 0; + param_6[1] = 0; + } + } + else { + piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); + uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); + (**(code **)(*piVar3 + 0x10))(local_30,piVar3); + iVar5 = FUN_00041718(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, + local_30,auStack_34); + if ((local_1c != local_30) && (local_1c != (int *)0x0)) { + if ((uint)(local_30[0] - (int)local_1c) < 0x81) { + std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); + } + else { + operator_delete(local_1c); + } + } + uVar4 = 0; + if (iVar5 == 0) { + uVar4 = 4; + } + } + *param_5 = uVar4; + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar2 = (uint)*(byte *)piVar3[2]; + } + else { + uVar2 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar2; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { + if ((byte *)piVar3[2] < (byte *)piVar3[3]) { + uVar2 = (uint)*(byte *)piVar3[2]; + } + else { + uVar2 = (**(code **)(*piVar3 + 0x20))(); + } + *(char *)(param_3 + 1) = (char)uVar2; + *(undefined1 *)((int)param_3 + 6) = 1; + *(bool *)((int)param_3 + 5) = uVar2 == 0xffffffff; + } + if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { + *param_5 = *param_5 | 2; + } + iVar5 = param_2[1]; + *param_1 = *param_2; + param_1[1] = iVar5; + std::locale::~locale(alStack_18); + return; +} + + + +### FUNC FUN_00041718 @ 00041718 + +undefined4 +FUN_00041718(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6, + uint param_7,int param_8) + +{ + bool bVar1; + int *piVar2; + uint uVar3; + undefined4 uVar4; + char cVar5; + bool bVar6; + int iVar7; + int iVar8; + uint uVar9; + uint uVar10; + uint uVar11; + uint uVar12; + undefined8 uVar13; + undefined8 uVar14; + uint local_a4; + undefined4 local_90; + int local_70; + char *local_68; + uint local_60; + uint local_5c; + int local_58; + char acStack_54 [64]; + + iVar7 = *(int *)(param_8 + 0x10); + iVar8 = *(int *)(param_8 + 0x14); + local_90 = 1; + local_a4 = 0x80000000; + uVar13 = __aeabi_ldivmod(0); + uVar9 = (uint)((ulonglong)uVar13 >> 0x20); + local_70 = param_5; + cVar5 = '\0'; + local_5c = 0; + bVar6 = false; + local_58 = 0; + local_60 = 0; + while( true ) { + local_68 = acStack_54 + local_58; + piVar2 = (int *)*param_1; + if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { + if ((byte *)piVar2[2] < (byte *)piVar2[3]) { + uVar3 = (uint)*(byte *)piVar2[2]; + } + else { + uVar3 = (**(code **)(*piVar2 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar3; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff; + } + piVar2 = (int *)*param_2; + if ((piVar2 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { + if ((byte *)piVar2[2] < (byte *)piVar2[3]) { + uVar3 = (uint)*(byte *)piVar2[2]; + } + else { + uVar3 = (**(code **)(*piVar2 + 0x20))(); + } + *(char *)(param_2 + 1) = (char)uVar3; + *(undefined1 *)((int)param_2 + 6) = 1; + *(bool *)((int)param_2 + 5) = uVar3 == 0xffffffff; + } + if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break; + if (*(char *)((int)param_1 + 6) == '\0') { + piVar2 = (int *)*param_1; + if ((byte *)piVar2[2] < (byte *)piVar2[3]) { + uVar3 = (uint)*(byte *)piVar2[2]; + } + else { + uVar3 = (**(code **)(*piVar2 + 0x20))(); + } + *(char *)(param_1 + 1) = (char)uVar3; + *(undefined1 *)((int)param_1 + 6) = 1; + *(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff; + } + else { + uVar3 = (uint)*(byte *)(param_1 + 1); + } + uVar11 = 0xff; + uVar10 = local_60; + uVar12 = local_5c; + if ((uVar3 & 0xff) == param_7 && iVar8 != iVar7) { + *local_68 = cVar5; + local_58 = local_58 + 1; + cVar5 = '\0'; + } + else { + if (-1 < (char)uVar3) { + uVar11 = std::priv::__digit_val_table(uVar3 & 0xff); + } + if (param_3 <= (int)uVar11) break; + bVar1 = local_5c < (uint)uVar13; + if (local_60 != uVar9) { + bVar1 = (int)local_60 < (int)uVar9; + } + cVar5 = cVar5 + '\x01'; + local_70 = local_70 + 1; + if (bVar1) { + bVar6 = true; + } + else { + uVar14 = __muldi3(local_5c,local_60,param_3,param_3 >> 0x1f); + uVar12 = (uint)uVar14 - uVar11; + uVar10 = (int)((ulonglong)uVar14 >> 0x20) - (uint)((uint)uVar14 < uVar11); + bVar1 = uVar12 < local_5c; + if (uVar10 != local_60) { + bVar1 = (int)uVar10 < (int)local_60; + } + bVar6 = (bool)(bVar6 | ((local_5c != 0 || local_60 != 0) && !bVar1)); + } + } + piVar2 = (int *)*param_1; + if ((uint)piVar2[2] < (uint)piVar2[3]) { + piVar2[2] = piVar2[2] + 1; + } + else { + (**(code **)(*piVar2 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 6) = 0; + local_60 = uVar10; + local_5c = uVar12; + } + if ((iVar8 != iVar7) && (local_58 != 0)) { + *local_68 = cVar5; + local_68 = acStack_54 + local_58 + 1; + } + uVar4 = 0; + if (0 < local_70) { + if (bVar6) { + uVar9 = 0; + if (param_6 == 0) { + uVar9 = 0xffffffff; + } + *param_4 = uVar9; + if (param_6 == 0) { + local_a4 = 0x7fffffff; + } + param_4[1] = local_a4; + return 0; + } + uVar9 = local_5c; + if (param_6 == 0) { + uVar9 = -local_5c; + } + *param_4 = uVar9; + if (param_6 == 0) { + local_60 = -(uint)(local_5c != 0) - local_60; + } + param_4[1] = local_60; + uVar4 = local_90; + if (iVar8 != iVar7) { + uVar4 = std::priv::__valid_grouping + (acStack_54,local_68,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); + } + } + return uVar4; +} + + + +### FUNC FUN_00041986 @ 00041986 + +void FUN_00041986(facet *param_1) + +{ + std::locale::facet::~facet(param_1); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_000419e8 @ 000419e8 + +void FUN_000419e8(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + int param_5,undefined4 param_6,undefined4 param_7) + +{ + undefined4 uVar1; + undefined4 uVar2; + undefined1 auStack_16 [2]; + + uVar2 = *(undefined4 *)(param_5 + 4); + uVar1 = FUN_00041ecc(auStack_16,uVar2,param_7); + FUN_00042010(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6); + return; +} + + + +### FUNC FUN_00041a22 @ 00041a22 + +void FUN_00041a22(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + int param_5,undefined4 param_6,undefined4 param_7) + +{ + undefined4 uVar1; + undefined4 uVar2; + undefined1 auStack_16 [2]; + + uVar2 = *(undefined4 *)(param_5 + 4); + uVar1 = FUN_000424fc(auStack_16,uVar2,param_7); + FUN_00042010(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6); + return; +} + + + +### FUNC FUN_00041a5c @ 00041a5c + +void FUN_00041a5c(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6) + +{ + FUN_000425e8(param_1,param_3,param_4,param_5,param_6); + return; +} + + + +### FUNC FUN_00041a80 @ 00041a80 + +void FUN_00041a80(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6) + +{ + FUN_00042a64(param_1,param_3,param_4,param_5,param_6); + return; +} + + + +### FUNC FUN_00041aa4 @ 00041aa4 + +void FUN_00041aa4(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + int param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8) + +{ + undefined4 uVar1; + undefined4 uVar2; + undefined1 auStack_16 [2]; + + uVar2 = *(undefined4 *)(param_5 + 4); + uVar1 = FUN_00042c10(auStack_16,uVar2,param_7,param_8); + FUN_00042010(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6); + return; +} + + + +### FUNC FUN_00041ae0 @ 00041ae0 + +void FUN_00041ae0(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + int param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8) + +{ + undefined4 uVar1; + undefined4 uVar2; + undefined1 auStack_16 [2]; + + uVar2 = *(undefined4 *)(param_5 + 4); + uVar1 = FUN_00042d68(auStack_16,uVar2,param_7,param_8); + FUN_00042010(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6); + return; +} + + + +### FUNC FUN_00041b1c @ 00041b1c + +void FUN_00041b1c(undefined4 param_1,undefined4 param_2,int *param_3,uint param_4,int param_5, + undefined4 param_6,int param_7) + +{ + bool bVar1; + locale *this; + int *piVar2; + undefined4 uVar3; + int iVar4; + int iVar5; + undefined1 *puVar6; + undefined4 uVar7; + uint uVar8; + undefined4 uVar9; + uint local_28; + locale alStack_24 [14]; + undefined1 auStack_16 [2]; + + this = (locale *)std::locale::locale(alStack_24,(locale *)(param_5 + 0x20)); + piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype::id); + std::locale::~locale(alStack_24); + uVar3 = 10; + *(undefined4 *)(param_5 + 0x1c) = 10; + uVar8 = *(uint *)(param_5 + 4); + *(uint *)(param_5 + 4) = uVar8 & 0xfffffdc0 | 0x214; + local_28 = param_4; + if (param_7 == 0) { + if ((int)(uVar8 << 0x11) < 0) { + iVar4 = std::priv::__hex_char_table_hi(); + } + else { + iVar4 = std::priv::__hex_char_table_lo(); + } + iVar5 = (**(code **)(*piVar2 + 0x18))(piVar2,0x30); + bVar1 = true; + if ((param_4 & 0xff) != 0) { + puVar6 = (undefined1 *)param_3[5]; + if (puVar6 < (undefined1 *)param_3[6]) { + param_3[5] = (int)(puVar6 + 1); + *puVar6 = (char)iVar5; + } + else { + iVar5 = (**(code **)(*param_3 + 0x34))(param_3); + } + bVar1 = true; + if (iVar5 != -1) { + bVar1 = false; + } + } + iVar4 = (**(code **)(*piVar2 + 0x18))(piVar2,*(undefined1 *)(iVar4 + 0x10)); + local_28 = 0; + if (!bVar1) { + puVar6 = (undefined1 *)param_3[5]; + if (puVar6 < (undefined1 *)param_3[6]) { + param_3[5] = (int)(puVar6 + 1); + *puVar6 = (char)iVar4; + } + else { + iVar4 = (**(code **)(*param_3 + 0x34))(param_3); + } + local_28 = 1; + if (iVar4 == -1) { + local_28 = 0; + } + } + local_28 = param_4 & 0xffffff00 | local_28; + uVar3 = 8; + } + *(undefined4 *)(param_5 + 0x1c) = uVar3; + uVar3 = (**(code **)(*piVar2 + 0x18))(piVar2,0x30); + uVar9 = *(undefined4 *)(param_5 + 4); + uVar7 = FUN_000424fc(auStack_16,uVar9,param_7); + FUN_00042010(param_1,uVar7,auStack_16,param_3,local_28,param_5,uVar9,uVar3); + *(uint *)(param_5 + 4) = uVar8; + return; +} + + + +### FUNC FUN_00041c48 @ 00041c48 + +void FUN_00041c48(undefined4 *param_1,int *param_2,uint param_3,int param_4,int param_5,int param_6) + +{ + byte bVar1; + locale *this; + int *piVar2; + uint uVar3; + uint uVar4; + byte *pbVar5; + undefined1 *puVar6; + code *pcVar7; + int iVar8; + byte *pbVar9; + uint uVar10; + uint uVar11; + byte *local_30; + int local_2c [4]; + int local_1c; + byte *local_18; + + this = (locale *)std::locale::locale((locale *)local_2c,(locale *)(param_4 + 0x20)); + piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct::id); + std::locale::~locale((locale *)local_2c); + if (param_6 == 1) { + pcVar7 = *(code **)(*piVar2 + 0x14); + } + else { + pcVar7 = *(code **)(*piVar2 + 0x18); + } + (*pcVar7)(local_2c,piVar2); + pbVar9 = local_18; + uVar10 = *(uint *)(param_4 + 0x1c); + local_30 = (byte *)0x0; + *(undefined4 *)(param_4 + 0x1c) = 0; + uVar3 = local_1c - (int)local_18; + if (uVar3 < uVar10) { + if ((*(uint *)(param_4 + 4) & 7) == 1) { + uVar4 = param_3; + if (0 < (int)uVar3) { + iVar8 = (local_1c + 1) - (int)local_18; + local_30 = local_18; + uVar11 = param_3; + do { + uVar4 = 0; + if ((uVar11 & 0xff) != 0) { + bVar1 = *local_30; + uVar4 = (uint)bVar1; + pbVar5 = (byte *)param_2[5]; + if (pbVar5 < (byte *)param_2[6]) { + param_2[5] = (int)(pbVar5 + 1); + *pbVar5 = bVar1; + } + else { + uVar4 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar4 = (uint)(uVar4 != 0xffffffff); + } + iVar8 = iVar8 + -1; + local_30 = local_30 + 1; + uVar11 = uVar4; + } while (1 < iVar8); + } + param_3 = uVar4 & 0xff | param_3 & 0xffffff00; + if (0 < (int)(uVar10 - uVar3)) { + pbVar9 = pbVar9 + ((uVar10 + 1) - local_1c); + do { + uVar3 = 0; + if ((param_3 & 0xff) != 0) { + puVar6 = (undefined1 *)param_2[5]; + if (puVar6 < (undefined1 *)param_2[6]) { + param_2[5] = (int)(puVar6 + 1); + *puVar6 = (char)param_5; + iVar8 = param_5; + } + else { + iVar8 = (**(code **)(*param_2 + 0x34))(param_2,param_5); + } + uVar3 = 1; + if (iVar8 == -1) { + uVar3 = 0; + } + } + param_3 = param_3 & 0xffffff00 | uVar3; + pbVar9 = pbVar9 + -1; + } while (1 < (int)pbVar9); + } + } + else { + uVar4 = param_3; + if (0 < (int)(uVar10 - uVar3)) { + pbVar9 = local_18 + ((uVar10 + 1) - local_1c); + uVar3 = param_3; + do { + uVar4 = 0; + if ((uVar3 & 0xff) != 0) { + puVar6 = (undefined1 *)param_2[5]; + if (puVar6 < (undefined1 *)param_2[6]) { + param_2[5] = (int)(puVar6 + 1); + *puVar6 = (char)param_5; + iVar8 = param_5; + } + else { + iVar8 = (**(code **)(*param_2 + 0x34))(param_2,param_5); + } + uVar4 = 1; + if (iVar8 == -1) { + uVar4 = 0; + } + } + pbVar9 = pbVar9 + -1; + uVar3 = uVar4; + } while (1 < (int)pbVar9); + } + param_3 = uVar4 & 0xff | param_3 & 0xffffff00; + if (0 < local_1c - (int)local_18) { + iVar8 = (local_1c + 1) - (int)local_18; + pbVar9 = local_18; + do { + uVar3 = 0; + if ((param_3 & 0xff) != 0) { + bVar1 = *pbVar9; + uVar3 = (uint)bVar1; + pbVar5 = (byte *)param_2[5]; + if (pbVar5 < (byte *)param_2[6]) { + param_2[5] = (int)(pbVar5 + 1); + *pbVar5 = bVar1; + } + else { + uVar3 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar3 = (uint)(uVar3 != 0xffffffff); + } + param_3 = param_3 & 0xffffff00 | uVar3; + iVar8 = iVar8 + -1; + pbVar9 = pbVar9 + 1; + } while (1 < iVar8); + } + } + } + else if (0 < (int)uVar3) { + iVar8 = (local_1c + 1) - (int)local_18; + do { + pbVar5 = local_30; + if ((param_3 & 0xff) != 0) { + bVar1 = *pbVar9; + uVar3 = (uint)bVar1; + pbVar5 = (byte *)param_2[5]; + if (pbVar5 < (byte *)param_2[6]) { + param_2[5] = (int)(pbVar5 + 1); + *pbVar5 = bVar1; + } + else { + uVar3 = (**(code **)(*param_2 + 0x34))(param_2); + } + pbVar5 = (byte *)(uint)(uVar3 != 0xffffffff); + } + param_3 = param_3 & 0xffffff00 | (uint)pbVar5; + iVar8 = iVar8 + -1; + pbVar9 = pbVar9 + 1; + } while (1 < iVar8); + } + *param_1 = param_2; + param_1[1] = param_3; + if ((local_18 != (byte *)local_2c) && (local_18 != (byte *)0x0)) { + if (0x80 < (uint)(local_2c[0] - (int)local_18)) { + operator_delete(local_18); + return; + } + std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); + } + return; +} + + + +### FUNC FUN_00041ecc @ 00041ecc + +byte * FUN_00041ecc(byte *param_1,uint param_2,uint param_3) + +{ + ulonglong uVar1; + byte bVar2; + byte *pbVar3; + byte *pbVar4; + int iVar5; + uint uVar6; + undefined8 uVar7; + + if (param_3 == 0) { + param_1[-1] = 0x30; + if ((param_2 & 0x830) != 0x800) { + return param_1 + -1; + } + param_1[-2] = 0x2b; + return param_1 + -2; + } + if ((param_2 & 0x38) == 0x10) { + if ((int)(param_2 << 0x11) < 0) { + iVar5 = std::priv::__hex_char_table_hi(); + } + else { + iVar5 = std::priv::__hex_char_table_lo(); + } + pbVar4 = param_1 + -2; + do { + pbVar3 = pbVar4; + pbVar3[1] = *(byte *)(iVar5 + (param_3 & 0xf)); + pbVar4 = pbVar3 + -1; + param_3 = param_3 >> 4; + } while (param_3 != 0); + if ((param_2 & 0x200) == 0) { + return pbVar3 + 1; + } + bVar2 = *(byte *)(iVar5 + 0x10); + *pbVar4 = 0x30; + *pbVar3 = bVar2; + return pbVar4; + } + if ((param_2 & 0x38) != 0x20) { + uVar6 = -param_3; + iVar5 = -(uint)(param_3 != 0) - ((int)param_3 >> 0x1f); + if (-1 < (int)param_3) { + uVar6 = param_3; + iVar5 = (int)param_3 >> 0x1f; + } + uVar7 = CONCAT44(iVar5,uVar6); + if (uVar6 != 0 || iVar5 != 0) { + do { + uVar1 = (ulonglong)uVar7 >> 0x20; + uVar6 = (uint)uVar7; + bVar2 = 10; + uVar7 = __aeabi_uldivmod(); + param_1[-1] = bVar2 | 0x30; + param_1 = param_1 + -1; + } while ((int)uVar1 != 0 || 9 < uVar6); + } + if ((int)param_3 < 0) { + bVar2 = 0x2d; + } + else { + if ((param_2 & 0x800) == 0) { + return param_1; + } + bVar2 = 0x2b; + } + param_1[-1] = bVar2; + return param_1 + -1; + } + pbVar4 = param_1 + -1; + do { + pbVar3 = pbVar4; + *pbVar3 = (byte)param_3 & 7 | 0x30; + pbVar4 = pbVar3 + -1; + param_3 = param_3 >> 3; + } while (param_3 != 0); + if ((param_2 & 0x200) == 0) { + return pbVar3; + } + *pbVar4 = 0x30; + return pbVar4; +} + + + +### FUNC FUN_00042010 @ 00042010 + +void FUN_00042010(undefined4 param_1,undefined1 *param_2,int param_3,undefined4 param_4, + undefined4 param_5,int param_6,uint param_7,undefined4 param_8) + +{ + locale *this; + int *piVar1; + undefined4 uVar2; + undefined1 uVar3; + undefined1 *local_70; + int local_6c [4]; + int *local_5c; + int *local_58; + undefined1 auStack_54 [64]; + + this = (locale *)std::locale::locale((locale *)local_6c,(locale *)(param_6 + 0x20)); + param_3 = param_3 - (int)param_2; + piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct::id); + std::locale::~locale((locale *)local_6c); + (**(code **)(*piVar1 + 0x10))(local_6c,piVar1); + local_70 = param_2; + if (local_58 != local_5c) { + uVar3 = 0; + if ((int)(param_7 << 0x16) < 0) { + uVar3 = 2; + if ((param_7 & 0x38) != 0x10) { + uVar3 = (param_7 & 0x38) == 0x20; + } + } + if (param_3 != 0) { + __aeabi_memcpy(auStack_54,param_2,param_3); + } + uVar2 = (**(code **)(*piVar1 + 0xc))(piVar1); + local_70 = auStack_54; + param_3 = FUN_00050058(local_70,local_70 + param_3,local_6c,uVar2,0x2b,0x2d,uVar3); + } + uVar2 = *(undefined4 *)(param_6 + 0x1c); + *(undefined4 *)(param_6 + 0x1c) = 0; + FUN_00042144(param_1,local_70,param_3,param_4,param_5,param_7,uVar2,param_8,0x2b,0x2d); + if ((local_58 != local_6c) && (local_58 != (int *)0x0)) { + if (0x80 < (uint)(local_6c[0] - (int)local_58)) { + operator_delete(local_58); + return; + } + std::__node_alloc::_M_deallocate(local_58,local_6c[0] - (int)local_58); + } + return; +} + + + +### FUNC FUN_00042144 @ 00042144 + +undefined4 * +FUN_00042144(undefined4 *param_1,byte *param_2,int param_3,int *param_4,uint param_5,uint param_6, + int param_7,int param_8,uint param_9,uint param_10) + +{ + byte bVar1; + undefined1 uVar2; + uint uVar3; + byte *pbVar4; + undefined1 *puVar5; + uint uVar6; + int iVar7; + int iVar8; + int local_28; + byte *local_18; + + if (param_7 <= param_3) { + if (0 < param_3) { + param_3 = param_3 + 1; + do { + uVar3 = 0; + if ((param_5 & 0xff) != 0) { + bVar1 = *param_2; + uVar6 = (uint)bVar1; + pbVar4 = (byte *)param_4[5]; + if (pbVar4 < (byte *)param_4[6]) { + param_4[5] = (int)(pbVar4 + 1); + *pbVar4 = bVar1; + } + else { + uVar6 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar3 = 1; + if (uVar6 == 0xffffffff) { + uVar3 = 0; + } + } + param_5 = param_5 & 0xffffff00 | uVar3; + param_3 = param_3 + -1; + param_2 = param_2 + 1; + } while (1 < param_3); + } + goto LAB_00042256; + } + iVar7 = param_7 - param_3; + uVar2 = (undefined1)param_8; + if ((param_6 & 7) == 1) { + uVar3 = param_5; + if (0 < param_3) { + iVar8 = param_3 + 1; + uVar6 = param_5; + local_18 = param_2; + do { + uVar3 = 0; + if ((uVar6 & 0xff) != 0) { + bVar1 = *local_18; + uVar6 = (uint)bVar1; + pbVar4 = (byte *)param_4[5]; + if (pbVar4 < (byte *)param_4[6]) { + param_4[5] = (int)(pbVar4 + 1); + *pbVar4 = bVar1; + } + else { + uVar6 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar3 = 1; + if (uVar6 == 0xffffffff) { + uVar3 = 0; + } + } + iVar8 = iVar8 + -1; + local_18 = local_18 + 1; + uVar6 = uVar3; + } while (1 < iVar8); + } + param_5 = param_5 & 0xffffff00 | uVar3 & 0xff; + if (0 < iVar7) { + param_3 = (param_7 + 1) - param_3; + do { + uVar3 = 0; + if ((param_5 & 0xff) != 0) { + puVar5 = (undefined1 *)param_4[5]; + if (puVar5 < (undefined1 *)param_4[6]) { + param_4[5] = (int)(puVar5 + 1); + *puVar5 = uVar2; + iVar7 = param_8; + } + else { + iVar7 = (**(code **)(*param_4 + 0x34))(param_4,param_8); + } + uVar3 = 1; + if (iVar7 == -1) { + uVar3 = 0; + } + } + param_5 = param_5 & 0xffffff00 | uVar3; + param_3 = param_3 + -1; + } while (1 < param_3); + } + goto LAB_00042256; + } + if ((param_3 != 0) && ((param_6 & 7) == 4)) { + bVar1 = *param_2; + uVar3 = (uint)bVar1; + if ((uVar3 == param_9) || (uVar3 == param_10)) { + uVar6 = 0; + if ((param_5 & 0xff) != 0) { + pbVar4 = (byte *)param_4[5]; + if (pbVar4 < (byte *)param_4[6]) { + param_4[5] = (int)(pbVar4 + 1); + *pbVar4 = bVar1; + } + else { + uVar3 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar6 = 1; + if (uVar3 == 0xffffffff) { + uVar6 = 0; + } + } + if (0 < iVar7) { + iVar7 = (param_7 + 1) - param_3; + uVar3 = uVar6; + do { + uVar6 = 0; + if (uVar3 != 0) { + puVar5 = (undefined1 *)param_4[5]; + if (puVar5 < (undefined1 *)param_4[6]) { + param_4[5] = (int)(puVar5 + 1); + *puVar5 = uVar2; + iVar8 = param_8; + } + else { + iVar8 = (**(code **)(*param_4 + 0x34))(param_4,param_8); + } + uVar6 = 1; + if (iVar8 == -1) { + uVar6 = 0; + } + } + iVar7 = iVar7 + -1; + uVar3 = uVar6; + } while (1 < iVar7); + } + param_5 = param_5 & 0xffffff00 | uVar6; + local_28 = param_3; + if (0 < param_3 + -1) { + do { + param_2 = param_2 + 1; + uVar3 = 0; + if ((param_5 & 0xff) != 0) { + bVar1 = *param_2; + uVar6 = (uint)bVar1; + pbVar4 = (byte *)param_4[5]; + if (pbVar4 < (byte *)param_4[6]) { + param_4[5] = (int)(pbVar4 + 1); + *pbVar4 = bVar1; + } + else { + uVar6 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar3 = 1; + if (uVar6 == 0xffffffff) { + uVar3 = 0; + } + } + param_5 = param_5 & 0xffffff00 | uVar3; + local_28 = local_28 + -1; + } while (1 < local_28); + } + goto LAB_00042256; + } + } + if ((param_3 < 2) || ((param_6 & 0x23f) != 0x214)) { + uVar3 = param_5; + if (0 < iVar7) { + iVar7 = (param_7 + 1) - param_3; + uVar6 = param_5; + do { + uVar3 = 0; + if ((uVar6 & 0xff) != 0) { + puVar5 = (undefined1 *)param_4[5]; + if (puVar5 < (undefined1 *)param_4[6]) { + param_4[5] = (int)(puVar5 + 1); + *puVar5 = uVar2; + iVar8 = param_8; + } + else { + iVar8 = (**(code **)(*param_4 + 0x34))(param_4,param_8); + } + uVar3 = 1; + if (iVar8 == -1) { + uVar3 = 0; + } + } + iVar7 = iVar7 + -1; + uVar6 = uVar3; + } while (1 < iVar7); + } + param_5 = param_5 & 0xffffff00 | uVar3 & 0xff; + if (0 < param_3) { + param_3 = param_3 + 1; + do { + uVar3 = 0; + if ((param_5 & 0xff) != 0) { + bVar1 = *param_2; + uVar6 = (uint)bVar1; + pbVar4 = (byte *)param_4[5]; + if (pbVar4 < (byte *)param_4[6]) { + param_4[5] = (int)(pbVar4 + 1); + *pbVar4 = bVar1; + } + else { + uVar6 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar3 = 1; + if (uVar6 == 0xffffffff) { + uVar3 = 0; + } + } + param_5 = param_5 & 0xffffff00 | uVar3; + param_3 = param_3 + -1; + param_2 = param_2 + 1; + } while (1 < param_3); + } + goto LAB_00042256; + } + uVar3 = 0; + if ((param_5 & 0xff) != 0) { + bVar1 = *param_2; + pbVar4 = (byte *)param_4[5]; + if (pbVar4 < (byte *)param_4[6]) { + param_4[5] = (int)(pbVar4 + 1); + *pbVar4 = bVar1; + } + else { + iVar8 = (**(code **)(*param_4 + 0x34))(param_4); + if (iVar8 == -1) goto LAB_00042398; + } + pbVar4 = (byte *)param_4[5]; + bVar1 = param_2[1]; + uVar6 = (uint)bVar1; + if (pbVar4 < (byte *)param_4[6]) { + param_4[5] = (int)(pbVar4 + 1); + *pbVar4 = bVar1; + } + else { + uVar6 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar3 = 1; + if (uVar6 == 0xffffffff) { + uVar3 = 0; + } + } +LAB_00042398: + if (0 < iVar7) { + iVar7 = (param_7 + 1) - param_3; + uVar6 = uVar3; + do { + uVar3 = 0; + if (uVar6 != 0) { + puVar5 = (undefined1 *)param_4[5]; + if (puVar5 < (undefined1 *)param_4[6]) { + param_4[5] = (int)(puVar5 + 1); + *puVar5 = uVar2; + iVar8 = param_8; + } + else { + iVar8 = (**(code **)(*param_4 + 0x34))(param_4,param_8); + } + uVar3 = 1; + if (iVar8 == -1) { + uVar3 = 0; + } + } + iVar7 = iVar7 + -1; + uVar6 = uVar3; + } while (1 < iVar7); + } + param_5 = param_5 & 0xffffff00 | uVar3; + if (0 < param_3 + -2) { + param_3 = param_3 + -1; + param_2 = param_2 + 2; + do { + uVar3 = 0; + if ((param_5 & 0xff) != 0) { + bVar1 = *param_2; + uVar6 = (uint)bVar1; + pbVar4 = (byte *)param_4[5]; + if (pbVar4 < (byte *)param_4[6]) { + param_4[5] = (int)(pbVar4 + 1); + *pbVar4 = bVar1; + } + else { + uVar6 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar3 = 1; + if (uVar6 == 0xffffffff) { + uVar3 = 0; + } + } + param_5 = param_5 & 0xffffff00 | uVar3; + param_3 = param_3 + -1; + param_2 = param_2 + 1; + } while (1 < param_3); + } +LAB_00042256: + *param_1 = param_4; + param_1[1] = param_5; + return param_1 + 2; +} + + + +### FUNC FUN_000424fc @ 000424fc + +byte * FUN_000424fc(int param_1,uint param_2,uint param_3) + +{ + bool bVar1; + byte bVar2; + int iVar3; + uint uVar4; + byte extraout_r1; + byte *pbVar5; + byte *pbVar6; + byte *pbVar7; + + if (param_3 == 0) { + *(undefined1 *)(param_1 + -1) = 0x30; + pbVar7 = (byte *)(param_1 + -1); + if ((param_2 & 0x830) == 0x800) { + *(undefined1 *)(param_1 + -2) = 0x2b; + pbVar7 = (byte *)(param_1 + -2); + } + } + else if ((param_2 & 0x38) == 0x10) { + if ((int)(param_2 << 0x11) < 0) { + iVar3 = std::priv::__hex_char_table_hi(); + } + else { + iVar3 = std::priv::__hex_char_table_lo(); + } + pbVar5 = (byte *)(param_1 + -2); + do { + pbVar6 = pbVar5; + pbVar6[1] = *(byte *)(iVar3 + (param_3 & 0xf)); + pbVar5 = pbVar6 + -1; + param_3 = param_3 >> 4; + } while (param_3 != 0); + pbVar7 = pbVar6 + 1; + if ((param_2 & 0x200) != 0) { + bVar2 = *(byte *)(iVar3 + 0x10); + *pbVar5 = 0x30; + *pbVar6 = bVar2; + pbVar7 = pbVar5; + } + } + else if ((param_2 & 0x38) == 0x20) { + pbVar5 = (byte *)(param_1 + -1); + do { + pbVar7 = pbVar5; + *pbVar7 = (byte)param_3 & 7 | 0x30; + pbVar5 = pbVar7 + -1; + param_3 = param_3 >> 3; + } while (param_3 != 0); + if ((param_2 & 0x200) != 0) { + *pbVar5 = 0x30; + pbVar7 = pbVar5; + } + } + else { + pbVar5 = (byte *)(param_1 + -1); + do { + pbVar7 = pbVar5; + uVar4 = __aeabi_uidivmod(param_3,10); + *pbVar7 = extraout_r1 | 0x30; + pbVar5 = pbVar7 + -1; + bVar1 = 9 < param_3; + param_3 = uVar4; + } while (bVar1); + if ((param_2 & 0x800) != 0) { + *pbVar5 = 0x2b; + pbVar7 = pbVar5; + } + } + return pbVar7; +} + + + +### FUNC FUN_000425e8 @ 000425e8 + +/* WARNING: Restarted to delay deadcode elimination for space: stack */ + +void FUN_000425e8(undefined4 param_1,undefined4 param_2,undefined4 param_3,int param_4) + +{ + undefined1 uVar1; + uint uVar2; + locale *this; + int *piVar3; + undefined4 uVar4; + int local_148 [4]; + int *local_138; + int *local_134; + undefined1 *local_130 [4]; + undefined1 **local_120; + undefined1 local_11c; + undefined1 auStack_11b [256]; + undefined1 auStack_1b [3]; + undefined1 **local_18; + + __aeabi_memclr(auStack_11b,0x100); + local_11c = 0; + local_130[0] = auStack_1b; + local_120 = (undefined1 **)&local_11c; + local_18 = (undefined1 **)&local_11c; + uVar2 = FUN_00051490(local_130,*(undefined4 *)(param_4 + 4),*(undefined4 *)(param_4 + 0x18)); + this = (locale *)std::locale::locale((locale *)local_148,(locale *)(param_4 + 0x20)); + piVar3 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct::id); + std::locale::~locale((locale *)local_148); + uVar1 = (**(code **)(*piVar3 + 8))(piVar3); + uVar4 = (**(code **)(*piVar3 + 0xc))(piVar3); + (**(code **)(*piVar3 + 0x10))(local_148,piVar3); + if ((uVar2 < (uint)((int)local_120 - (int)local_18)) && (*(char *)((int)local_18 + uVar2) == '.')) + { + *(undefined1 *)((int)local_18 + uVar2) = uVar1; + } + if (local_134 != local_138) { + FUN_000500f4(local_130,uVar2,local_148,uVar4); + } + *(undefined4 *)(param_4 + 0x1c) = 0; + FUN_00042794(param_1,local_18,local_120,param_2); + if ((local_134 != local_148) && (local_134 != (int *)0x0)) { + if ((uint)(local_148[0] - (int)local_134) < 0x81) { + std::__node_alloc::_M_deallocate(local_134,local_148[0] - (int)local_134); + } + else { + operator_delete(local_134); + } + } + if (((local_18 != local_130) && (local_18 != (undefined1 **)0x0)) && + ((undefined1 **)&local_11c != local_18)) { + if (0x80 < (uint)((int)local_130[0] - (int)local_18)) { + operator_delete(local_18); + return; + } + std::__node_alloc::_M_deallocate(local_18,(int)local_130[0] - (int)local_18); + } + return; +} + + + +### FUNC FUN_00042794 @ 00042794 + +undefined4 * +FUN_00042794(undefined4 *param_1,byte *param_2,byte *param_3,int *param_4,uint param_5,uint param_6, + int param_7,int param_8,uint param_9,uint param_10) + +{ + byte bVar1; + undefined1 uVar2; + undefined1 *puVar3; + byte *pbVar4; + int iVar5; + uint uVar6; + byte *pbVar7; + uint uVar8; + int iVar9; + byte *local_1c; + + iVar9 = (int)param_3 - (int)param_2; + if (iVar9 < param_7) { + iVar5 = param_7 - iVar9; + uVar2 = (undefined1)param_8; + if ((param_6 & 7) == 4) { + if (param_2 != param_3) { + bVar1 = *param_2; + uVar6 = (uint)bVar1; + if ((uVar6 == param_9) || (uVar6 == param_10)) { + pbVar7 = param_2 + 1; + uVar8 = 0; + if ((param_5 & 0xff) != 0) { + pbVar4 = (byte *)param_4[5]; + if (pbVar4 < (byte *)param_4[6]) { + param_4[5] = (int)(pbVar4 + 1); + *pbVar4 = bVar1; + } + else { + uVar6 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar8 = 1; + if (uVar6 == 0xffffffff) { + uVar8 = 0; + } + } + if (0 < iVar5) { + param_2 = param_2 + ((param_7 + 1) - (int)param_3); + uVar6 = uVar8; + do { + uVar8 = 0; + if (uVar6 != 0) { + puVar3 = (undefined1 *)param_4[5]; + if (puVar3 < (undefined1 *)param_4[6]) { + param_4[5] = (int)(puVar3 + 1); + *puVar3 = uVar2; + iVar9 = param_8; + } + else { + iVar9 = (**(code **)(*param_4 + 0x34))(param_4,param_8); + } + uVar8 = 1; + if (iVar9 == -1) { + uVar8 = 0; + } + } + param_2 = param_2 + -1; + uVar6 = uVar8; + } while (1 < (int)param_2); + } + param_5 = param_5 & 0xffffff00 | uVar8; + if (0 < (int)param_3 - (int)pbVar7) { + param_3 = param_3 + (1 - (int)pbVar7); + do { + uVar6 = 0; + if ((param_5 & 0xff) != 0) { + bVar1 = *pbVar7; + uVar8 = (uint)bVar1; + pbVar4 = (byte *)param_4[5]; + if (pbVar4 < (byte *)param_4[6]) { + param_4[5] = (int)(pbVar4 + 1); + *pbVar4 = bVar1; + } + else { + uVar8 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar6 = 1; + if (uVar8 == 0xffffffff) { + uVar6 = 0; + } + } + param_5 = param_5 & 0xffffff00 | uVar6; + param_3 = param_3 + -1; + pbVar7 = pbVar7 + 1; + } while (1 < (int)param_3); + } + goto LAB_00042984; + } + } + } + else if ((param_6 & 7) == 1) { + uVar6 = param_5; + if (0 < iVar9) { + pbVar7 = param_3 + (1 - (int)param_2); + uVar8 = param_5; + local_1c = param_2; + do { + uVar6 = 0; + if ((uVar8 & 0xff) != 0) { + bVar1 = *local_1c; + uVar6 = (uint)bVar1; + pbVar4 = (byte *)param_4[5]; + if (pbVar4 < (byte *)param_4[6]) { + param_4[5] = (int)(pbVar4 + 1); + *pbVar4 = bVar1; + } + else { + uVar6 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar6 = (uint)(uVar6 != 0xffffffff); + } + pbVar7 = pbVar7 + -1; + local_1c = local_1c + 1; + uVar8 = uVar6; + } while (1 < (int)pbVar7); + } + param_5 = param_5 & 0xffffff00 | uVar6 & 0xff; + if (0 < iVar5) { + param_2 = param_2 + ((param_7 + 1) - (int)param_3); + do { + uVar6 = 0; + if ((param_5 & 0xff) != 0) { + puVar3 = (undefined1 *)param_4[5]; + if (puVar3 < (undefined1 *)param_4[6]) { + param_4[5] = (int)(puVar3 + 1); + *puVar3 = uVar2; + iVar9 = param_8; + } + else { + iVar9 = (**(code **)(*param_4 + 0x34))(param_4,param_8); + } + uVar6 = 1; + if (iVar9 == -1) { + uVar6 = 0; + } + } + param_5 = param_5 & 0xffffff00 | uVar6; + param_2 = param_2 + -1; + } while (1 < (int)param_2); + } + goto LAB_00042984; + } + uVar6 = param_5; + if (0 < iVar5) { + pbVar7 = param_2 + ((param_7 + 1) - (int)param_3); + uVar8 = param_5; + do { + uVar6 = 0; + if ((uVar8 & 0xff) != 0) { + puVar3 = (undefined1 *)param_4[5]; + if (puVar3 < (undefined1 *)param_4[6]) { + param_4[5] = (int)(puVar3 + 1); + *puVar3 = uVar2; + iVar5 = param_8; + } + else { + iVar5 = (**(code **)(*param_4 + 0x34))(param_4,param_8); + } + uVar6 = (uint)(iVar5 != -1); + } + pbVar7 = pbVar7 + -1; + uVar8 = uVar6; + } while (1 < (int)pbVar7); + } + param_5 = param_5 & 0xffffff00 | uVar6 & 0xff; + if (0 < iVar9) { + param_3 = param_3 + (1 - (int)param_2); + do { + uVar6 = 0; + if ((param_5 & 0xff) != 0) { + bVar1 = *param_2; + uVar6 = (uint)bVar1; + pbVar7 = (byte *)param_4[5]; + if (pbVar7 < (byte *)param_4[6]) { + param_4[5] = (int)(pbVar7 + 1); + *pbVar7 = bVar1; + } + else { + uVar6 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar6 = (uint)(uVar6 != 0xffffffff); + } + param_5 = param_5 & 0xffffff00 | uVar6; + param_3 = param_3 + -1; + param_2 = param_2 + 1; + } while (1 < (int)param_3); + } + } + else if (0 < iVar9) { + param_3 = param_3 + (1 - (int)param_2); + do { + uVar6 = 0; + if ((param_5 & 0xff) != 0) { + bVar1 = *param_2; + uVar6 = (uint)bVar1; + pbVar7 = (byte *)param_4[5]; + if (pbVar7 < (byte *)param_4[6]) { + param_4[5] = (int)(pbVar7 + 1); + *pbVar7 = bVar1; + } + else { + uVar6 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar6 = (uint)(uVar6 != 0xffffffff); + } + param_5 = param_5 & 0xffffff00 | uVar6; + param_3 = param_3 + -1; + param_2 = param_2 + 1; + } while (1 < (int)param_3); + } +LAB_00042984: + *param_1 = param_4; + param_1[1] = param_5; + return param_1 + 2; +} + + + +### FUNC FUN_00042a64 @ 00042a64 + +/* WARNING: Restarted to delay deadcode elimination for space: stack */ + +void FUN_00042a64(undefined4 param_1,undefined4 param_2,undefined4 param_3,int param_4) + +{ + undefined1 uVar1; + uint uVar2; + locale *this; + int *piVar3; + undefined4 uVar4; + int local_148 [4]; + int *local_138; + int *local_134; + undefined1 *local_130 [4]; + undefined1 **local_120; + undefined1 local_11c; + undefined1 auStack_11b [256]; + undefined1 auStack_1b [3]; + undefined1 **local_18; + + __aeabi_memclr(auStack_11b,0x100); + local_11c = 0; + local_130[0] = auStack_1b; + local_120 = (undefined1 **)&local_11c; + local_18 = (undefined1 **)&local_11c; + uVar2 = FUN_00051642(local_130,*(undefined4 *)(param_4 + 4),*(undefined4 *)(param_4 + 0x18)); + this = (locale *)std::locale::locale((locale *)local_148,(locale *)(param_4 + 0x20)); + piVar3 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct::id); + std::locale::~locale((locale *)local_148); + uVar1 = (**(code **)(*piVar3 + 8))(piVar3); + uVar4 = (**(code **)(*piVar3 + 0xc))(piVar3); + (**(code **)(*piVar3 + 0x10))(local_148,piVar3); + if ((uVar2 < (uint)((int)local_120 - (int)local_18)) && (*(char *)((int)local_18 + uVar2) == '.')) + { + *(undefined1 *)((int)local_18 + uVar2) = uVar1; + } + if (local_134 != local_138) { + FUN_000500f4(local_130,uVar2,local_148,uVar4); + } + *(undefined4 *)(param_4 + 0x1c) = 0; + FUN_00042794(param_1,local_18,local_120,param_2); + if ((local_134 != local_148) && (local_134 != (int *)0x0)) { + if ((uint)(local_148[0] - (int)local_134) < 0x81) { + std::__node_alloc::_M_deallocate(local_134,local_148[0] - (int)local_134); + } + else { + operator_delete(local_134); + } + } + if (((local_18 != local_130) && (local_18 != (undefined1 **)0x0)) && + ((undefined1 **)&local_11c != local_18)) { + if (0x80 < (uint)((int)local_130[0] - (int)local_18)) { + operator_delete(local_18); + return; + } + std::__node_alloc::_M_deallocate(local_18,(int)local_130[0] - (int)local_18); + } + return; +} + + + +### FUNC FUN_00042c10 @ 00042c10 + +byte * FUN_00042c10(byte *param_1,uint param_2,uint param_3,uint param_4) + +{ + byte bVar1; + byte *pbVar2; + int iVar3; + uint uVar4; + uint uVar5; + byte *pbVar6; + byte *pbVar7; + uint uVar8; + undefined8 uVar9; + uint local_28; + + if (param_3 == 0 && param_4 == 0) { + param_1[-1] = 0x30; + pbVar7 = param_1 + -1; + if ((param_2 & 0x830) == 0x800) { + param_1[-2] = 0x2b; + pbVar7 = param_1 + -2; + } + } + else { + local_28 = 1; + if ((param_2 & 0x38) == 0x10) { + if ((int)(param_2 << 0x11) < 0) { + iVar3 = std::priv::__hex_char_table_hi(); + } + else { + iVar3 = std::priv::__hex_char_table_lo(); + } + pbVar2 = param_1 + -2; + do { + pbVar6 = pbVar2; + pbVar6[1] = *(byte *)(iVar3 + (param_3 & 0xf)); + pbVar2 = pbVar6 + -1; + param_3 = param_4 << 0x1c | param_3 >> 4; + param_4 = param_4 >> 4; + } while (param_3 != 0 || param_4 != 0); + pbVar7 = pbVar6 + 1; + if ((param_2 & 0x200) != 0) { + bVar1 = *(byte *)(iVar3 + 0x10); + *pbVar2 = 0x30; + *pbVar6 = bVar1; + pbVar7 = pbVar2; + } + } + else if ((param_2 & 0x38) == 0x20) { + pbVar2 = param_1 + -1; + do { + pbVar7 = pbVar2; + *pbVar7 = (byte)param_3 & 7 | 0x30; + pbVar2 = pbVar7 + -1; + param_3 = param_4 << 0x1d | param_3 >> 3; + param_4 = param_4 >> 3; + } while (param_3 != 0 || param_4 != 0); + if ((param_2 & 0x200) != 0) { + *pbVar2 = 0x30; + pbVar7 = pbVar2; + } + } + else { + uVar4 = (int)param_4 >> 0x1f; + uVar5 = param_3 + uVar4 ^ uVar4; + uVar4 = param_4 + uVar4 + (uint)CARRY4(param_3,uVar4) ^ uVar4; + uVar9 = CONCAT44(uVar4,uVar5); + if (uVar5 != 0 || uVar4 != 0) { + do { + uVar8 = (uint)((ulonglong)uVar9 >> 0x20); + uVar5 = (uint)uVar9; + bVar1 = 10; + uVar9 = __aeabi_uldivmod(uVar5,uVar8,10,0); + param_1[-1] = bVar1 | 0x30; + uVar4 = uVar8; + if (uVar8 != 0) { + uVar4 = local_28; + } + uVar5 = (uint)(9 < uVar5); + if (uVar8 != 0) { + uVar5 = uVar4; + } + param_1 = param_1 + -1; + } while (uVar5 != 0); + } + if ((int)param_4 < 0) { + bVar1 = 0x2d; + } + else { + if ((param_2 & 0x800) == 0) { + return param_1; + } + bVar1 = 0x2b; + } + param_1[-1] = bVar1; + pbVar7 = param_1 + -1; + } + } + return pbVar7; +} + + + +### FUNC FUN_00042d68 @ 00042d68 + +byte * FUN_00042d68(int param_1,uint param_2,uint param_3,uint param_4) + +{ + uint uVar1; + byte *pbVar2; + int iVar3; + byte *pbVar4; + byte bVar5; + uint uVar6; + byte *pbVar7; + uint uVar8; + undefined8 uVar9; + uint local_1c; + + uVar9 = CONCAT44(param_4,param_3); + if (param_3 == 0 && param_4 == 0) { + *(undefined1 *)(param_1 + -1) = 0x30; + pbVar4 = (byte *)(param_1 + -1); + if ((param_2 & 0x830) == 0x800) { + *(undefined1 *)(param_1 + -2) = 0x2b; + pbVar4 = (byte *)(param_1 + -2); + } + } + else { + local_1c = 1; + if ((param_2 & 0x38) == 0x10) { + if ((int)(param_2 << 0x11) < 0) { + iVar3 = std::priv::__hex_char_table_hi(); + } + else { + iVar3 = std::priv::__hex_char_table_lo(); + } + pbVar2 = (byte *)(param_1 + -2); + do { + pbVar7 = pbVar2; + pbVar7[1] = *(byte *)(iVar3 + (param_3 & 0xf)); + pbVar2 = pbVar7 + -1; + param_3 = param_4 << 0x1c | param_3 >> 4; + param_4 = param_4 >> 4; + } while (param_3 != 0 || param_4 != 0); + pbVar4 = pbVar7 + 1; + if ((param_2 & 0x200) != 0) { + bVar5 = *(byte *)(iVar3 + 0x10); + *pbVar2 = 0x30; + *pbVar7 = bVar5; + pbVar4 = pbVar2; + } + } + else if ((param_2 & 0x38) == 0x20) { + pbVar2 = (byte *)(param_1 + -1); + do { + pbVar4 = pbVar2; + *pbVar4 = (byte)param_3 & 7 | 0x30; + pbVar2 = pbVar4 + -1; + param_3 = param_4 << 0x1d | param_3 >> 3; + param_4 = param_4 >> 3; + } while (param_3 != 0 || param_4 != 0); + if ((param_2 & 0x200) != 0) { + *pbVar2 = 0x30; + pbVar4 = pbVar2; + } + } + else { + pbVar2 = (byte *)(param_1 + -1); + do { + pbVar4 = pbVar2; + uVar8 = (uint)((ulonglong)uVar9 >> 0x20); + uVar6 = (uint)uVar9; + bVar5 = 10; + uVar9 = __aeabi_uldivmod(uVar6,uVar8,10,0); + *pbVar4 = bVar5 | 0x30; + uVar1 = uVar8; + if (uVar8 != 0) { + uVar1 = local_1c; + } + uVar6 = (uint)(9 < uVar6); + if (uVar8 != 0) { + uVar6 = uVar1; + } + pbVar2 = pbVar4 + -1; + } while (uVar6 != 0); + if ((param_2 & 0x800) != 0) { + *pbVar2 = 0x2b; + pbVar4 = pbVar2; + } + } + } + return pbVar4; +} + + + +### FUNC FUN_00042e96 @ 00042e96 + +void FUN_00042e96(facet *param_1) + +{ + std::locale::facet::~facet(param_1); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_00042fc0 @ 00042fc0 + +void FUN_00042fc0(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9,undefined4 param_10,undefined4 param_11,undefined4 param_12) + +{ + undefined1 local_14 [4]; + + local_14[0] = 1; + FUN_00043000(param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11, + param_12,local_14,0); + return; +} + + + +### FUNC FUN_00043000 @ 00043000 + +void FUN_00043000(undefined4 *param_1,int *param_2,int param_3,uint param_4,int *param_5,int param_6 + ,uint param_7,int param_8,int param_9,uint *param_10,int *param_11,char *param_12) + +{ + locale *this; + int *piVar1; + int *piVar2; + int *piVar3; + uint uVar4; + undefined4 uVar5; + undefined4 uVar6; + int iVar7; + undefined4 uVar8; + char cVar9; + int iVar10; + uint uVar11; + int iVar12; + undefined4 local_1d4; + int local_1c4; + int local_19c; + int *local_190; + int local_18c; + undefined2 local_188; + char local_184; + int *local_180; + int local_17c; + undefined2 local_178; + char local_174; + int local_170 [4]; + int *local_160; + int *local_15c; + int *local_158; + int local_154; + undefined4 local_150; + char local_14c; + int local_148 [16]; + undefined4 local_108; + int *local_104; + int local_100 [16]; + int *local_c0; + int *local_bc; + int local_b8 [16]; + int *local_78; + int *local_74; + int local_70 [16]; + int *local_30; + int *local_2c; + undefined4 local_28; + locale alStack_24 [4]; + int *local_20; + int local_1c; + undefined4 local_18; + + local_20 = param_2; + local_1c = param_3; + local_18 = param_4; + if ((param_2 != (int *)0x0) && ((param_4 & 0xff00) == 0)) { + if ((int *)param_2[2] < (int *)param_2[3]) { + local_1c = *(int *)param_2[2]; + } + else { + local_1c = (**(code **)(*param_2 + 0x20))(param_2); + } + local_18 = CONCAT22(local_18._2_2_,0x100); + param_4 = (uint)(local_1c == -1); + local_18 = CONCAT31(local_18._1_3_,local_1c == -1); + } + local_19c = param_6; + if (((param_7 & 0xff00) == 0) && (param_5 != (int *)0x0)) { + if ((int *)param_5[2] < (int *)param_5[3]) { + local_19c = *(int *)param_5[2]; + } + else { + local_19c = (**(code **)(*param_5 + 0x20))(); + } + param_7 = param_7 & 0xffff0000 | (uint)(local_19c == -1) | 0x100; + } + if ((param_4 & 0xff) == (param_7 & 0xff)) { + *param_10 = *param_10 | 2; + *param_1 = local_20; + param_1[1] = local_1c; + param_1[2] = local_18; + return; + } + this = (locale *)std::locale::locale(alStack_24,(locale *)(param_9 + 0x20)); + piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::moneypunct::id); + piVar2 = (int *)std::locale::_M_use_facet(alStack_24,(id *)&std::moneypunct::id); + piVar3 = (int *)std::locale::_M_use_facet(alStack_24,(id *)&std::ctype::id); + if (param_8 == 1) { + local_28 = (**(code **)(*piVar2 + 0x28))(); + (**(code **)(*piVar2 + 0x1c))(local_70); + (**(code **)(*piVar2 + 0x18))(local_b8); + } + else { + local_28 = (**(code **)(*piVar1 + 0x28))(); + (**(code **)(*piVar1 + 0x1c))(local_70); + (**(code **)(*piVar1 + 0x18))(local_b8); + } + uVar4 = *(uint *)(param_9 + 4); + local_1c4 = 1; + local_100[0] = 0; + local_1d4 = 0; + iVar10 = -1; + local_c0 = local_100; + local_bc = local_100; + do { + switch(alStack_24[iVar10 + -3]) { + case (locale)0x0: + cVar9 = local_18._1_1_; + while( true ) { + if ((local_20 != (int *)0x0) && (cVar9 == '\0')) { + if ((int *)local_20[2] < (int *)local_20[3]) { + local_1c = *(int *)local_20[2]; + } + else { + local_1c = (**(code **)(*local_20 + 0x20))(); + } + local_18 = CONCAT22(local_18._2_2_,0x100); + local_18 = CONCAT31(local_18._1_3_,local_1c == -1); + } + if (((param_7 & 0xff00) == 0) && (param_5 != (int *)0x0)) { + if ((int *)param_5[2] < (int *)param_5[3]) { + local_19c = *(int *)param_5[2]; + } + else { + local_19c = (**(code **)(*param_5 + 0x20))(param_5); + } + param_7 = param_7 & 0xffff0000 | (uint)(local_19c == -1) | 0x100; + } + if ((local_18 & 0xff) == (param_7 & 0xff)) break; + if (local_18._1_1_ == '\0') { + if ((int *)local_20[2] < (int *)local_20[3]) { + local_1c = *(int *)local_20[2]; + } + else { + local_1c = (**(code **)(*local_20 + 0x20))(); + } + local_18 = CONCAT22(local_18._2_2_,0x100); + local_18 = CONCAT31(local_18._1_3_,local_1c == -1); + } + iVar7 = (**(code **)(*piVar3 + 8))(piVar3,1,local_1c); + if (iVar7 != 1) break; + uVar11 = local_20[2]; + if (uVar11 < (uint)local_20[3]) { +LAB_0004350e: + local_20[2] = uVar11 + 4; + } + else { + (**(code **)(*local_20 + 0x24))(); + } +LAB_00043512: + local_18._0_2_ = (ushort)(byte)local_18; + cVar9 = '\0'; + } + break; + case (locale)0x1: + if (local_18._1_1_ == '\0') { + if ((int *)local_20[2] < (int *)local_20[3]) { + local_1c = *(int *)local_20[2]; + } + else { + local_1c = (**(code **)(*local_20 + 0x20))(); + } + local_18 = CONCAT22(local_18._2_2_,0x100); + local_18 = CONCAT31(local_18._1_3_,local_1c == -1); + } + iVar7 = (**(code **)(*piVar3 + 8))(piVar3,1,local_1c); + if (iVar7 != 0) { + uVar11 = local_20[2]; + if (uVar11 < (uint)local_20[3]) goto LAB_0004350e; + (**(code **)(*local_20 + 0x24))(); + goto LAB_00043512; + } +LAB_000437c4: + *param_10 = 4; + *param_1 = local_20; + param_1[1] = local_1c; + param_1[2] = local_18; + goto LAB_00043760; + case (locale)0x2: + if (param_8 == 1) { + (**(code **)(*piVar2 + 0x14))(local_148); + } + else { + (**(code **)(*piVar1 + 0x14))(local_148); + } + FUN_00043930(&local_158,local_20,local_1c,local_18,param_5,local_19c,param_7,local_104, + local_108); + if (((uVar4 & 0x200) != 0) && (local_14c == '\0')) { + *param_10 = 4; + } + local_18 = CONCAT22(local_18._2_2_,(short)local_150); + local_1c = local_154; + local_20 = local_158; + if ((local_104 != local_148) && (local_104 != (int *)0x0)) { + if ((uint)(local_148[0] - (int)local_104) < 0x81) { + std::__node_alloc::_M_deallocate(local_104,local_148[0] - (int)local_104); + } + else { + operator_delete(local_104); + } + } + break; + case (locale)0x3: + if ((local_20 != (int *)0x0) && (local_18._1_1_ == '\0')) { + if ((int *)local_20[2] < (int *)local_20[3]) { + local_1c = *(int *)local_20[2]; + } + else { + local_1c = (**(code **)(*local_20 + 0x20))(); + } + local_18 = CONCAT22(local_18._2_2_,0x100); + local_18 = CONCAT31(local_18._1_3_,local_1c == -1); + } + if (((param_7 & 0xff00) == 0) && (param_5 != (int *)0x0)) { + if ((int *)param_5[2] < (int *)param_5[3]) { + local_19c = *(int *)param_5[2]; + } + else { + local_19c = (**(code **)(*param_5 + 0x20))(param_5); + } + param_7 = param_7 & 0xffff0000 | (uint)(local_19c == -1) | 0x100; + } + if ((local_18 & 0xff) == (param_7 & 0xff)) { + if (local_74 != local_78) { + if (local_2c != local_30) goto LAB_000437c4; + *param_12 = '\0'; + } + } + else if (local_74 == local_78) { + if (local_2c != local_30) { + if (local_18._1_1_ == '\0') { + if ((int *)local_20[2] < (int *)local_20[3]) { + local_1c = *(int *)local_20[2]; + } + else { + local_1c = (**(code **)(*local_20 + 0x20))(); + } + local_18 = CONCAT22(local_18._2_2_,0x100); + local_18 = CONCAT31(local_18._1_3_,local_1c == -1); + } + if (local_1c == *local_2c) { + uVar11 = local_20[2]; + if (uVar11 < (uint)local_20[3]) { +LAB_000434ea: + local_20[2] = uVar11 + 4; + } + else { + (**(code **)(*local_20 + 0x24))(); + } +LAB_000434f6: + local_18._0_2_ = (ushort)(byte)local_18; + *param_12 = '\0'; + } + } + } + else { + if (local_18._1_1_ == '\0') { + if ((int *)local_20[2] < (int *)local_20[3]) { + local_1c = *(int *)local_20[2]; + } + else { + local_1c = (**(code **)(*local_20 + 0x20))(); + } + local_18 = CONCAT22(local_18._2_2_,0x100); + local_18 = CONCAT31(local_18._1_3_,local_1c == -1); + } + if (local_1c == *local_74) { + if ((uint)local_20[2] < (uint)local_20[3]) { + local_20[2] = local_20[2] + 4; + } + else { + (**(code **)(*local_20 + 0x24))(); + } + local_18._0_2_ = (ushort)(byte)local_18; + } + else if (local_2c != local_30) { + if (local_1c == *local_2c) { + uVar11 = local_20[2]; + if (uVar11 < (uint)local_20[3]) goto LAB_000434ea; + (**(code **)(*local_20 + 0x24))(); + goto LAB_000434f6; + } + goto LAB_000437c4; + } + } + break; + case (locale)0x4: + if (param_8 == 1) { + uVar8 = (**(code **)(*piVar2 + 8))(); + uVar5 = (**(code **)(*piVar2 + 0x20))(); + (**(code **)(*piVar2 + 0x10))(local_170); + } + else { + uVar8 = (**(code **)(*piVar1 + 8))(); + uVar5 = (**(code **)(*piVar1 + 0x20))(); + (**(code **)(*piVar1 + 0x10))(local_170); + } + local_148[0] = CONCAT31(local_148[0]._1_3_,1); + uVar6 = local_1d4; + if (local_15c != local_160) { + if (param_8 == 1) { + uVar6 = (**(code **)(*piVar2 + 0xc))(); + } + else { + uVar6 = (**(code **)(*piVar1 + 0xc))(); + } + } + iVar7 = FUN_00043a78(&local_20,param_5,local_19c,param_7,local_100,piVar3,uVar8,uVar5,uVar6, + local_170,local_148); + if ((char)local_148[0] == '\0') { + *param_10 = *param_10 | 4; + } + iVar12 = 5; + if (iVar7 == 0) { + *param_10 = 4; + *param_1 = local_20; + param_1[1] = local_1c; + param_1[2] = local_18; + iVar12 = local_1c4; + } + if ((local_15c != local_170) && (local_15c != (int *)0x0)) { + if ((uint)(local_170[0] - (int)local_15c) < 0x81) { + std::__node_alloc::_M_deallocate(local_15c,local_170[0] - (int)local_15c); + } + else { + operator_delete(local_15c); + } + } + if (iVar12 != 5) goto LAB_00043760; + } + iVar10 = iVar10 + 1; + } while (iVar10 < 3); + if (*param_12 == '\0') { + if (1 < (uint)((int)local_30 - (int)local_2c >> 2)) { + FUN_00043930(&local_190,local_20,local_1c,local_18,param_5,local_19c,param_7,local_2c + 1, + local_30); + local_18 = CONCAT22(local_18._2_2_,local_188); + local_1c = local_18c; + local_20 = local_190; + if (local_184 == '\0') { + *param_10 = *param_10 | 4; + } + } + if (-1 < (int)((uint)(byte)*param_10 << 0x1d)) { + uVar8 = (**(code **)(*piVar3 + 0x28))(piVar3,0x2d); + FUN_00044304(param_11,1,uVar8); + FUN_000441a0(param_11,local_bc,local_c0); + } + } + else { + if (1 < (uint)((int)local_78 - (int)local_74 >> 2)) { + FUN_00043930(&local_180,local_20,local_1c,local_18,param_5,local_19c,param_7,local_74 + 1, + local_78); + local_18 = CONCAT22(local_18._2_2_,local_178); + local_1c = local_17c; + local_20 = local_180; + if (local_174 == '\0') { + *param_10 = *param_10 | 4; + } + } + if ((local_100 != param_11) && ((*param_10 & 4) == 0)) { + FUN_0004413c(param_11,local_bc,local_c0); + } + } + if ((local_20 != (int *)0x0) && (local_18._1_1_ == '\0')) { + if ((int *)local_20[2] < (int *)local_20[3]) { + local_1c = *(int *)local_20[2]; + } + else { + local_1c = (**(code **)(*local_20 + 0x20))(); + } + local_18 = CONCAT22(local_18._2_2_,0x100); + local_18 = CONCAT31(local_18._1_3_,local_1c == -1); + } + if (((param_7 & 0xff00) == 0) && (param_5 != (int *)0x0)) { + if ((int *)param_5[2] < (int *)param_5[3]) { + iVar10 = *(int *)param_5[2]; + } + else { + iVar10 = (**(code **)(*param_5 + 0x20))(); + } + param_7 = (uint)(iVar10 == -1); + } + if ((local_18 & 0xff) == (param_7 & 0xff)) { + *param_10 = *param_10 | 2; + } + *param_1 = local_20; + param_1[1] = local_1c; + param_1[2] = local_18; +LAB_00043760: + if ((local_bc != local_100) && (local_bc != (int *)0x0)) { + if ((uint)(local_100[0] - (int)local_bc) < 0x81) { + std::__node_alloc::_M_deallocate(local_bc,local_100[0] - (int)local_bc); + } + else { + operator_delete(local_bc); + } + } + if ((local_74 != local_b8) && (local_74 != (int *)0x0)) { + if ((uint)(local_b8[0] - (int)local_74) < 0x81) { + std::__node_alloc::_M_deallocate(local_74,local_b8[0] - (int)local_74); + } + else { + operator_delete(local_74); + } + } + if ((local_2c != local_70) && (local_2c != (int *)0x0)) { + if ((uint)(local_70[0] - (int)local_2c) < 0x81) { + std::__node_alloc::_M_deallocate(local_2c,local_70[0] - (int)local_2c); + } + else { + operator_delete(local_2c); + } + } + std::locale::~locale(alStack_24); + return; +} + + + +### FUNC FUN_000438b2 @ 000438b2 + +undefined4 FUN_000438b2(undefined4 param_1,undefined4 param_2,undefined4 param_3) + +{ + undefined4 uVar1; + undefined1 auStack_30 [4]; + uint local_2c [4]; + uint *local_1c; + uint *local_18; + + local_1c = local_2c; + local_2c[0] = local_2c[0] & 0xffffff00; + local_18 = local_1c; + uVar1 = FUN_0004461c(param_1,param_2,10,param_3,0,0,0,local_1c,auStack_30); + if ((local_18 != local_2c) && (local_18 != (uint *)0x0)) { + if (local_2c[0] - (int)local_18 < 0x81) { + std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); + } + else { + operator_delete(local_18); + } + } + return uVar1; +} + + + +### FUNC FUN_00043930 @ 00043930 + +void FUN_00043930(undefined4 *param_1,int *param_2,int param_3,uint param_4,int *param_5, + undefined4 param_6,uint param_7,int *param_8,int *param_9) + +{ + int iVar1; + bool bVar2; + + while( true ) { + if ((param_2 != (int *)0x0) && ((param_4 & 0xff00) == 0)) { + if ((int *)param_2[2] < (int *)param_2[3]) { + param_3 = *(int *)param_2[2]; + } + else { + param_3 = (**(code **)(*param_2 + 0x20))(); + } + param_4 = param_4 & 0xffff0000 | (uint)(param_3 == -1) | 0x100; + } + if ((param_5 != (int *)0x0) && ((param_7 & 0xff00) == 0)) { + if ((int *)param_5[2] < (int *)param_5[3]) { + iVar1 = *(int *)param_5[2]; + } + else { + iVar1 = (**(code **)(*param_5 + 0x20))(param_5); + } + param_7 = iVar1 == -1 | 0x100; + } + bVar2 = param_9 == param_8; + if ((param_9 == param_8) || ((param_4 & 0xff) == (param_7 & 0xff))) break; + if ((param_4 & 0xff00) == 0) { + if ((int *)param_2[2] < (int *)param_2[3]) { + param_3 = *(int *)param_2[2]; + } + else { + param_3 = (**(code **)(*param_2 + 0x20))(param_2); + } + param_4 = param_4 & 0xffff0000 | (uint)(param_3 == -1) | 0x100; + } + bVar2 = false; + if (param_3 != *param_8) break; + if ((uint)param_2[2] < (uint)param_2[3]) { + param_2[2] = param_2[2] + 4; + } + else { + (**(code **)(*param_2 + 0x24))(param_2); + } + param_4 = param_4 & 0xffff00ff; + param_8 = param_8 + 1; + } + *param_1 = param_2; + param_1[1] = param_3; + param_1[2] = param_4; + *(bool *)(param_1 + 3) = bVar2; + return; +} + + + +### FUNC FUN_00043a78 @ 00043a78 + +undefined4 +FUN_00043a78(int *param_1,int *param_2,undefined4 param_3,uint param_4,int *param_5,int *param_6, + int param_7,int param_8,int param_9,int param_10,char *param_11) + +{ + char cVar1; + int *piVar2; + int iVar3; + char *pcVar4; + undefined4 *puVar5; + uint uVar6; + char *pcVar7; + uint uVar8; + char *pcVar9; + uint uVar10; + char *pcVar11; + char *local_c8; + int local_c4; + uint local_a8; + char local_94 [128]; + + piVar2 = (int *)*param_1; + if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 9) == '\0')) { + if ((int *)piVar2[2] < (int *)piVar2[3]) { + iVar3 = *(int *)piVar2[2]; + } + else { + iVar3 = (**(code **)(*piVar2 + 0x20))(); + } + param_1[1] = iVar3; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar3 == -1; + } + if (((param_4 << 0x10) >> 0x18 == 0) && (param_2 != (int *)0x0)) { + if ((int *)param_2[2] < (int *)param_2[3]) { + iVar3 = *(int *)param_2[2]; + } + else { + iVar3 = (**(code **)(*param_2 + 0x20))(param_2); + } + param_4 = iVar3 == -1 | 0x100; + } + if ((uint)*(byte *)(param_1 + 2) == (param_4 & 0xff)) { + return 0; + } + if (*(char *)((int)param_1 + 9) == '\0') { + piVar2 = (int *)*param_1; + if ((int *)piVar2[2] < (int *)piVar2[3]) { + iVar3 = *(int *)piVar2[2]; + } + else { + iVar3 = (**(code **)(*piVar2 + 0x20))(); + } + param_1[1] = iVar3; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar3 == -1; + } + else { + iVar3 = param_1[1]; + } + iVar3 = (**(code **)(*param_6 + 8))(param_6,0x40,iVar3); + if (iVar3 != 1) { + return 0; + } + local_c8 = (char *)0x0; + if (*(int *)(param_10 + 0x14) != *(int *)(param_10 + 0x10)) { + local_c8 = local_94; + } + local_c4 = param_8; + do { + cVar1 = '\0'; + while( true ) { + piVar2 = (int *)*param_1; + if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 9) == '\0')) { + if ((int *)piVar2[2] < (int *)piVar2[3]) { + iVar3 = *(int *)piVar2[2]; + } + else { + iVar3 = (**(code **)(*piVar2 + 0x20))(); + } + param_1[1] = iVar3; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar3 == -1; + } + local_a8 = 0x3ffffffe; + if (((param_4 & 0xff00) == 0) && (param_2 != (int *)0x0)) { + if ((int *)param_2[2] < (int *)param_2[3]) { + iVar3 = *(int *)param_2[2]; + } + else { + iVar3 = (**(code **)(*param_2 + 0x20))(param_2); + } + param_4 = iVar3 == -1 | 0x100; + } + pcVar4 = local_c8; + if ((uint)*(byte *)(param_1 + 2) == (param_4 & 0xff)) goto LAB_00043d7e; + if (*(char *)((int)param_1 + 9) == '\0') { + piVar2 = (int *)*param_1; + if ((int *)piVar2[2] < (int *)piVar2[3]) { + iVar3 = *(int *)piVar2[2]; + } + else { + iVar3 = (**(code **)(*piVar2 + 0x20))(); + } + param_1[1] = iVar3; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar3 == -1; + } + else { + iVar3 = param_1[1]; + } + iVar3 = (**(code **)(*param_6 + 8))(param_6,0x40,iVar3); + if (iVar3 != 1) break; + cVar1 = cVar1 + '\x01'; + if (*(char *)((int)param_1 + 9) == '\0') { + piVar2 = (int *)*param_1; + if ((int *)piVar2[2] < (int *)piVar2[3]) { + iVar3 = *(int *)piVar2[2]; + } + else { + iVar3 = (**(code **)(*piVar2 + 0x20))(); + } + param_1[1] = iVar3; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar3 == -1; + } + else { + iVar3 = param_1[1]; + } + piVar2 = (int *)*param_1; + if ((uint)piVar2[2] < (uint)piVar2[3]) { + piVar2[2] = piVar2[2] + 4; + } + else { + (**(code **)(*piVar2 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 9) = 0; + if ((int *)param_5[0x11] == param_5) { + piVar2 = (int *)param_5[0x10]; + if ((int)piVar2 - (int)param_5 >> 2 == 0xf) goto LAB_00043cde; + } + else { + piVar2 = (int *)param_5[0x10]; + if (*param_5 - (int)piVar2 >> 2 == 1) { +LAB_00043cde: + uVar6 = (int)piVar2 - param_5[0x11] >> 2; + uVar10 = uVar6; + if (uVar6 < 2) { + uVar10 = 1; + } + uVar8 = uVar6 + uVar10 + 1; + uVar10 = 0x3ffffffe; + if (uVar6 <= uVar8) { + uVar10 = uVar8; + } + uVar6 = 0x3ffffffe; + if (uVar8 < 0x3fffffff) { + uVar6 = uVar10; + } + FUN_00044094(param_5,uVar6); + piVar2 = (int *)param_5[0x10]; + } + } + *piVar2 = iVar3; + piVar2[1] = 0; + param_5[0x10] = (int)(piVar2 + 1); + } + pcVar4 = (char *)0x0; + if (local_c8 == (char *)0x0) break; + if (*(char *)((int)param_1 + 9) == '\0') { + piVar2 = (int *)*param_1; + if ((int *)piVar2[2] < (int *)piVar2[3]) { + iVar3 = *(int *)piVar2[2]; + } + else { + iVar3 = (**(code **)(*piVar2 + 0x20))(); + } + param_1[1] = iVar3; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar3 == -1; + } + else { + iVar3 = param_1[1]; + } + pcVar4 = local_c8; + if (iVar3 != param_9) break; + *local_c8 = cVar1; + local_c8 = local_c8 + 1; + piVar2 = (int *)*param_1; + if ((uint)piVar2[2] < (uint)piVar2[3]) { + piVar2[2] = piVar2[2] + 4; + } + else { + (**(code **)(*piVar2 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 9) = 0; + } while( true ); +LAB_00043d7e: + pcVar11 = *(char **)(param_10 + 0x10); + pcVar9 = *(char **)(param_10 + 0x14); + if (pcVar9 == pcVar11) { + *param_11 = '\x01'; +LAB_00043e5c: + piVar2 = (int *)*param_1; + if ((uint)piVar2[2] < (uint)piVar2[3]) { + piVar2[2] = piVar2[2] + 4; + } + else { + (**(code **)(*piVar2 + 0x24))(); + } + cVar1 = '\0'; + *(undefined1 *)((int)param_1 + 9) = 0; + while( true ) { + piVar2 = (int *)*param_1; + if ((piVar2 != (int *)0x0) && (cVar1 == '\0')) { + if ((int *)piVar2[2] < (int *)piVar2[3]) { + iVar3 = *(int *)piVar2[2]; + } + else { + iVar3 = (**(code **)(*piVar2 + 0x20))(); + } + param_1[1] = iVar3; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar3 == -1; + } + if (((param_4 & 0xff00) == 0) && (param_2 != (int *)0x0)) { + if ((int *)param_2[2] < (int *)param_2[3]) { + iVar3 = *(int *)param_2[2]; + } + else { + iVar3 = (**(code **)(*param_2 + 0x20))(param_2); + } + param_4 = iVar3 == -1 | 0x100; + } + if ((uint)*(byte *)(param_1 + 2) == (param_4 & 0xff)) break; + if (*(char *)((int)param_1 + 9) == '\0') { + piVar2 = (int *)*param_1; + if ((int *)piVar2[2] < (int *)piVar2[3]) { + iVar3 = *(int *)piVar2[2]; + } + else { + iVar3 = (**(code **)(*piVar2 + 0x20))(); + } + param_1[1] = iVar3; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar3 == -1; + } + else { + iVar3 = param_1[1]; + } + iVar3 = (**(code **)(*param_6 + 8))(param_6,0x40,iVar3); + if (iVar3 != 1) break; + if (*(char *)((int)param_1 + 9) == '\0') { + piVar2 = (int *)*param_1; + if ((int *)piVar2[2] < (int *)piVar2[3]) { + iVar3 = *(int *)piVar2[2]; + } + else { + iVar3 = (**(code **)(*piVar2 + 0x20))(); + } + param_1[1] = iVar3; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar3 == -1; + } + else { + iVar3 = param_1[1]; + } + piVar2 = (int *)*param_1; + if ((uint)piVar2[2] < (uint)piVar2[3]) { + piVar2[2] = piVar2[2] + 4; + } + else { + (**(code **)(*piVar2 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 9) = 0; + if ((int *)param_5[0x11] == param_5) { + piVar2 = (int *)param_5[0x10]; + if ((int)piVar2 - (int)param_5 >> 2 == 0xf) goto LAB_00044030; + } + else { + piVar2 = (int *)param_5[0x10]; + if (*param_5 - (int)piVar2 >> 2 == 1) { +LAB_00044030: + uVar6 = (int)piVar2 - param_5[0x11] >> 2; + uVar10 = uVar6; + if (uVar6 < 2) { + uVar10 = 1; + } + uVar8 = uVar6 + uVar10 + 1; + uVar10 = local_a8; + if (uVar6 <= uVar8) { + uVar10 = uVar8; + } + uVar6 = local_a8; + if (uVar8 < 0x3fffffff) { + uVar6 = uVar10; + } + FUN_00044094(param_5,uVar6); + piVar2 = (int *)param_5[0x10]; + } + } + *piVar2 = iVar3; + piVar2[1] = 0; + param_5[0x10] = (int)(piVar2 + 1); + local_c4 = local_c4 + -1; + cVar1 = *(char *)((int)param_1 + 9); + } + *param_11 = local_c4 == 0 && *param_11 != '\0'; + } + else { + pcVar7 = local_94; + if (pcVar4 != pcVar7) { + *pcVar4 = cVar1; + pcVar7 = pcVar4 + 1; + pcVar11 = *(char **)(param_10 + 0x10); + pcVar9 = *(char **)(param_10 + 0x14); + } + cVar1 = std::priv::__valid_grouping(local_94,pcVar7,pcVar9,pcVar11); + *param_11 = cVar1; + piVar2 = (int *)*param_1; + if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 9) == '\0')) { + if ((int *)piVar2[2] < (int *)piVar2[3]) { + iVar3 = *(int *)piVar2[2]; + } + else { + iVar3 = (**(code **)(*piVar2 + 0x20))(); + } + param_1[1] = iVar3; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar3 == -1; + } + if (((param_4 & 0xff00) == 0) && (param_2 != (int *)0x0)) { + if ((int *)param_2[2] < (int *)param_2[3]) { + iVar3 = *(int *)param_2[2]; + } + else { + iVar3 = (**(code **)(*param_2 + 0x20))(param_2); + } + param_4 = iVar3 == -1 | 0x100; + } + if ((uint)*(byte *)(param_1 + 2) != (param_4 & 0xff)) { + if (*(char *)((int)param_1 + 9) == '\0') { + piVar2 = (int *)*param_1; + if ((int *)piVar2[2] < (int *)piVar2[3]) { + iVar3 = *(int *)piVar2[2]; + } + else { + iVar3 = (**(code **)(*piVar2 + 0x20))(); + } + param_1[1] = iVar3; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar3 == -1; + } + else { + iVar3 = param_1[1]; + } + if (iVar3 == param_7) goto LAB_00043e5c; + } + if (param_8 != 0) { + do { + if ((int *)param_5[0x11] == param_5) { + puVar5 = (undefined4 *)param_5[0x10]; + if ((int)puVar5 - (int)param_5 >> 2 == 0xf) goto LAB_00043ea2; + } + else { + puVar5 = (undefined4 *)param_5[0x10]; + if (*param_5 - (int)puVar5 >> 2 == 1) { +LAB_00043ea2: + uVar6 = (int)puVar5 - param_5[0x11] >> 2; + uVar10 = uVar6; + if (uVar6 < 2) { + uVar10 = 1; + } + uVar8 = uVar6 + uVar10 + 1; + uVar10 = local_a8; + if (uVar6 <= uVar8) { + uVar10 = uVar8; + } + uVar6 = local_a8; + if (uVar8 < 0x3fffffff) { + uVar6 = uVar10; + } + FUN_00044094(param_5,uVar6); + puVar5 = (undefined4 *)param_5[0x10]; + } + } + *puVar5 = 0x30; + puVar5[1] = 0; + param_5[0x10] = (int)(puVar5 + 1); + param_8 = param_8 + -1; + } while (param_8 != 0); + } + } + return 1; +} + + + +### FUNC FUN_00044094 @ 00044094 + +void FUN_00044094(int *param_1,uint param_2) + +{ + int *piVar1; + undefined4 uVar2; + int iVar3; + int *piVar4; + int iVar5; + int *piVar6; + int *piVar7; + uint local_1c; + uint local_18; + + if (param_2 >> 0x1e == 0) { + piVar6 = (int *)0x0; + if (param_2 == 0) { + local_1c = 0; + } + else { + param_2 = param_2 << 2; + local_18 = param_2; + if (param_2 < 0x81) { + piVar6 = (int *)std::__node_alloc::_M_allocate(&local_18); + param_2 = local_18; + } + else { + piVar6 = (int *)operator_new(param_2); + } + local_1c = param_2 >> 2; + } + piVar1 = (int *)param_1[0x11]; + piVar7 = piVar6; + if (0 < param_1[0x10] - (int)piVar1) { + iVar3 = ((uint)(param_1[0x10] - (int)piVar1) >> 2) + 1; + piVar4 = piVar1; + do { + iVar5 = *piVar4; + piVar4 = piVar4 + 1; + *piVar7 = iVar5; + piVar7 = piVar7 + 1; + iVar3 = iVar3 + -1; + } while (1 < iVar3); + } + *piVar7 = 0; + if ((piVar1 != param_1) && (piVar1 != (int *)0x0)) { + if ((uint)(*param_1 - (int)piVar1) < 0x81) { + std::__node_alloc::_M_deallocate(piVar1,*param_1 - (int)piVar1); + } + else { + operator_delete(piVar1); + } + } + param_1[0x10] = (int)piVar7; + param_1[0x11] = (int)piVar6; + *param_1 = (int)(piVar6 + local_1c); + return; + } + FUN_00030824(4); + uVar2 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar2,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); +} + + + +### FUNC FUN_0004413c @ 0004413c + +int FUN_0004413c(int param_1,wchar_t *param_2,int param_3) + +{ + wchar_t *pwVar1; + size_t __n; + uint __n_00; + wchar_t *__s1; + + __n_00 = param_3 - (int)param_2 >> 2; + pwVar1 = *(wchar_t **)(param_1 + 0x44); + __n = *(int *)(param_1 + 0x40) - (int)pwVar1 >> 2; + if (__n < __n_00) { + wmemmove(pwVar1,param_2,__n); + FUN_000441a0(param_1,(int)param_2 + (*(int *)(param_1 + 0x40) - *(int *)(param_1 + 0x44)), + param_3); + } + else { + wmemmove(pwVar1,param_2,__n_00); + pwVar1 = *(wchar_t **)(param_1 + 0x40); + __s1 = (wchar_t *)(*(int *)(param_1 + 0x44) + __n_00 * 4); + if (__s1 != pwVar1) { + wmemmove(__s1,pwVar1,1); + *(int *)(param_1 + 0x40) = *(int *)(param_1 + 0x40) - ((int)pwVar1 - (int)__s1); + } + } + return param_1; +} + + + +### FUNC FUN_000441a0 @ 000441a0 + +int * FUN_000441a0(int *param_1,int *param_2,int *param_3) + +{ + uint uVar1; + int *piVar2; + undefined4 uVar3; + int iVar4; + int *piVar5; + uint uVar6; + uint uVar7; + int *piVar8; + uint uVar9; + int iVar10; + int *piVar11; + uint local_24; + uint local_18; + + if (param_2 != param_3) { + uVar1 = (int)param_3 - (int)param_2; + uVar6 = (int)uVar1 >> 2; + piVar2 = (int *)param_1[0x11]; + if (piVar2 == param_1) { + piVar8 = (int *)param_1[0x10]; + uVar9 = 0x10 - ((int)piVar8 - (int)param_1 >> 2); + } + else { + piVar8 = (int *)param_1[0x10]; + uVar9 = *param_1 - (int)piVar8 >> 2; + } + if (uVar6 < uVar9) { + piVar2 = param_2 + 1; + if (0 < (int)param_3 - (int)piVar2) { + iVar10 = ((uint)((int)param_3 - (int)piVar2) >> 2) + 1; + piVar5 = piVar8; + do { + piVar5 = piVar5 + 1; + iVar4 = *piVar2; + piVar2 = piVar2 + 1; + *piVar5 = iVar4; + iVar10 = iVar10 + -1; + } while (1 < iVar10); + } + piVar8[uVar6] = 0; + *piVar8 = *param_2; + param_1[0x10] = (int)(piVar8 + uVar6); + } + else { + uVar9 = (int)piVar8 - (int)piVar2 >> 2; + if (0x3ffffffe - uVar9 < uVar6) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + uVar7 = uVar9; + if (uVar9 <= uVar6) { + uVar7 = uVar6; + } + uVar7 = uVar9 + uVar7 + 1; + uVar6 = 0x3ffffffe; + if (uVar9 <= uVar7) { + uVar6 = uVar7; + } + local_24 = 0x3ffffffe; + if (uVar7 < 0x3fffffff) { + local_24 = uVar6; + } + if (0x3fffffff < local_24) { + FUN_00030824(4); + uVar3 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + piVar5 = (int *)0x0; + if (local_24 == 0) { + local_24 = 0; + } + else { + local_24 = local_24 << 2; + local_18 = local_24; + if (local_24 < 0x81) { + piVar5 = (int *)std::__node_alloc::_M_allocate(&local_18); + local_24 = local_18; + } + else { + piVar5 = (int *)operator_new(local_24); + } + piVar8 = (int *)param_1[0x10]; + piVar2 = (int *)param_1[0x11]; + local_24 = local_24 >> 2; + } + piVar11 = piVar5; + if (0 < (int)piVar8 - (int)piVar2) { + iVar10 = ((uint)((int)piVar8 - (int)piVar2) >> 2) + 1; + piVar8 = piVar2; + do { + iVar4 = *piVar8; + piVar8 = piVar8 + 1; + *piVar11 = iVar4; + piVar11 = piVar11 + 1; + iVar10 = iVar10 + -1; + } while (1 < iVar10); + } + if (0 < (int)uVar1) { + iVar10 = (uVar1 >> 2) + 1; + do { + iVar4 = *param_2; + param_2 = param_2 + 1; + *piVar11 = iVar4; + piVar11 = piVar11 + 1; + iVar10 = iVar10 + -1; + } while (1 < iVar10); + } + *piVar11 = 0; + if ((piVar2 != param_1) && (piVar2 != (int *)0x0)) { + if ((uint)(*param_1 - (int)piVar2) < 0x81) { + std::__node_alloc::_M_deallocate(piVar2,*param_1 - (int)piVar2); + } + else { + operator_delete(piVar2); + } + } + param_1[0x10] = (int)piVar11; + param_1[0x11] = (int)piVar5; + *param_1 = (int)(piVar5 + local_24); + } + } + return param_1; +} + + + +### FUNC FUN_00044304 @ 00044304 + +wchar_t * FUN_00044304(wchar_t *param_1,uint param_2,wchar_t param_3) + +{ + wchar_t *pwVar1; + uint uVar2; + uint __n; + wchar_t *__s1; + undefined1 auStack_60 [4]; + int local_5c [17]; + int *local_18; + + pwVar1 = (wchar_t *)param_1[0x11]; + __n = param_1[0x10] - (int)pwVar1 >> 2; + if (__n < param_2) { + uVar2 = 0xf; + if (param_1 != pwVar1) { + uVar2 = (*param_1 - (int)pwVar1 >> 2) - 1; + } + if (param_2 < uVar2) { + wmemset(pwVar1,param_3,__n); + FUN_000443dc(param_1,param_2 - (param_1[0x10] - param_1[0x11] >> 2),param_3); + } + else { + FUN_00044474(local_5c,param_2,param_3,auStack_60); + FUN_00044510(param_1,local_5c); + if ((local_18 != local_5c) && (local_18 != (int *)0x0)) { + if ((uint)(local_5c[0] - (int)local_18) < 0x81) { + std::__node_alloc::_M_deallocate(local_18,local_5c[0] - (int)local_18); + } + else { + operator_delete(local_18); + } + } + } + } + else { + wmemset(pwVar1,param_3,param_2); + pwVar1 = (wchar_t *)param_1[0x10]; + __s1 = (wchar_t *)(param_1[0x11] + param_2 * 4); + if (__s1 != pwVar1) { + wmemmove(__s1,pwVar1,1); + param_1[0x10] = param_1[0x10] - ((int)pwVar1 - (int)__s1); + } + } + return param_1; +} + + + +### FUNC FUN_000443dc @ 000443dc + +int * FUN_000443dc(int *param_1,uint param_2,undefined4 param_3) + +{ + undefined4 *puVar1; + undefined4 *puVar2; + uint uVar3; + uint uVar4; + uint uVar5; + + if (param_2 != 0) { + puVar2 = (undefined4 *)param_1[0x10]; + uVar3 = (int)puVar2 - param_1[0x11] >> 2; + if (0x3ffffffe - uVar3 < param_2) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + if (param_1 == (int *)param_1[0x11]) { + uVar4 = 0x10 - ((int)puVar2 - (int)param_1 >> 2); + } + else { + uVar4 = *param_1 - (int)puVar2 >> 2; + } + if (uVar4 <= param_2) { + uVar4 = uVar3; + if (uVar3 <= param_2) { + uVar4 = param_2; + } + uVar5 = uVar3 + uVar4 + 1; + uVar4 = 0x3ffffffe; + if (uVar3 <= uVar5) { + uVar4 = uVar5; + } + uVar3 = 0x3ffffffe; + if (uVar5 < 0x3fffffff) { + uVar3 = uVar4; + } + FUN_00044094(param_1,uVar3); + puVar2 = (undefined4 *)param_1[0x10]; + } + uVar3 = param_2; + puVar1 = puVar2; + if (0 < (int)(param_2 * 4 + -4)) { + do { + puVar1[1] = param_3; + uVar3 = uVar3 - 1; + puVar1 = puVar1 + 1; + } while (1 < (int)uVar3); + } + puVar2[param_2] = 0; + *puVar2 = param_3; + param_1[0x10] = (int)(puVar2 + param_2); + } + return param_1; +} + + + +### FUNC FUN_00044474 @ 00044474 + +int * FUN_00044474(int *param_1,uint param_2,int param_3) + +{ + uint uVar1; + int *piVar2; + undefined4 uVar3; + int *piVar4; + uint uVar5; + uint local_18; + + param_1[0x10] = (int)param_1; + param_1[0x11] = (int)param_1; + uVar5 = param_2 + 1; + if (0x3ffffffe < param_2) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + piVar2 = param_1; + if (0x10 < uVar5) { + if (0x3fffffff < uVar5) { + FUN_00030824(4); + uVar3 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + uVar1 = uVar5 * 4; + local_18 = uVar1; + if (uVar1 < 0x81) { + piVar2 = (int *)std::__node_alloc::_M_allocate(&local_18); + } + else { + piVar2 = (int *)operator_new(uVar1); + local_18 = uVar1; + } + param_1[0x10] = (int)piVar2; + param_1[0x11] = (int)piVar2; + *param_1 = (int)piVar2 + (local_18 & 0xfffffffc); + } + piVar4 = piVar2 + param_2; + if (0 < (int)(param_2 * 4)) { + do { + *piVar2 = param_3; + piVar2 = piVar2 + 1; + uVar5 = uVar5 - 1; + } while (1 < (int)uVar5); + } + param_1[0x10] = (int)piVar4; + *piVar4 = 0; + return param_1; +} + + + +### FUNC FUN_00044510 @ 00044510 + +/* WARNING: Restarted to delay deadcode elimination for space: stack */ + +void FUN_00044510(undefined4 *param_1,undefined4 *param_2) + +{ + undefined4 uVar1; + undefined4 *puVar2; + undefined4 uVar3; + undefined4 uVar4; + undefined4 uVar5; + int iVar6; + undefined4 uVar7; + undefined4 uVar8; + undefined4 uVar9; + undefined4 uVar10; + undefined4 uVar11; + undefined4 uVar12; + undefined4 uVar13; + undefined4 *puVar14; + undefined4 uVar15; + undefined4 uVar16; + undefined4 uVar17; + undefined4 uVar18; + undefined4 uVar19; + undefined4 uVar20; + undefined4 uVar21; + undefined4 uVar22; + + puVar2 = (undefined4 *)param_2[0x11]; + puVar14 = (undefined4 *)param_1[0x11]; + if (puVar14 == param_1) { + if (puVar2 != param_2) { + FUN_00044510(); + return; + } + uVar1 = *param_1; + uVar21 = param_1[1]; + uVar9 = param_1[2]; + uVar16 = param_1[3]; + uVar7 = param_1[4]; + uVar3 = param_1[5]; + uVar10 = param_1[6]; + uVar17 = param_1[7]; + uVar8 = param_1[8]; + uVar4 = param_1[9]; + uVar11 = param_1[10]; + uVar18 = param_1[0xb]; + uVar15 = param_1[0xc]; + uVar5 = param_1[0xd]; + uVar12 = param_1[0xe]; + uVar19 = param_1[0xf]; + uVar13 = param_2[1]; + uVar20 = param_2[2]; + uVar22 = param_2[3]; + *param_1 = *param_2; + param_1[1] = uVar13; + param_1[2] = uVar20; + param_1[3] = uVar22; + uVar13 = param_2[5]; + uVar20 = param_2[6]; + uVar22 = param_2[7]; + param_1[4] = param_2[4]; + param_1[5] = uVar13; + param_1[6] = uVar20; + param_1[7] = uVar22; + uVar13 = param_2[9]; + uVar20 = param_2[10]; + uVar22 = param_2[0xb]; + param_1[8] = param_2[8]; + param_1[9] = uVar13; + param_1[10] = uVar20; + param_1[0xb] = uVar22; + uVar13 = param_2[0xd]; + uVar20 = param_2[0xe]; + uVar22 = param_2[0xf]; + param_1[0xc] = param_2[0xc]; + param_1[0xd] = uVar13; + param_1[0xe] = uVar20; + param_1[0xf] = uVar22; + *param_2 = uVar1; + param_2[1] = uVar21; + param_2[2] = uVar9; + param_2[3] = uVar16; + param_2[4] = uVar7; + param_2[5] = uVar3; + param_2[6] = uVar10; + param_2[7] = uVar17; + param_2[8] = uVar8; + param_2[9] = uVar4; + param_2[10] = uVar11; + param_2[0xb] = uVar18; + param_2[0xc] = uVar15; + param_2[0xd] = uVar5; + param_2[0xe] = uVar12; + param_2[0xf] = uVar19; + iVar6 = param_1[0x10]; + param_1[0x10] = param_1[0x11] + (param_2[0x10] - param_2[0x11]); + param_2[0x10] = (int)param_2 + (iVar6 - param_1[0x11]); + param_1[0x11] = puVar14; + param_2[0x11] = puVar2; + return; + } + if (puVar2 != param_2) { + uVar1 = *param_1; + *param_1 = *param_2; + *param_2 = uVar1; + uVar1 = param_1[0x11]; + param_1[0x11] = param_2[0x11]; + param_2[0x11] = uVar1; + uVar1 = param_1[0x10]; + param_1[0x10] = param_2[0x10]; + param_2[0x10] = uVar1; + return; + } + uVar1 = param_1[0x10]; + uVar7 = *param_1; + uVar8 = param_2[1]; + uVar15 = param_2[2]; + uVar21 = param_2[3]; + *param_1 = *param_2; + param_1[1] = uVar8; + param_1[2] = uVar15; + param_1[3] = uVar21; + uVar8 = param_2[5]; + uVar15 = param_2[6]; + uVar21 = param_2[7]; + param_1[4] = param_2[4]; + param_1[5] = uVar8; + param_1[6] = uVar15; + param_1[7] = uVar21; + uVar8 = param_2[9]; + uVar15 = param_2[10]; + uVar21 = param_2[0xb]; + param_1[8] = param_2[8]; + param_1[9] = uVar8; + param_1[10] = uVar15; + param_1[0xb] = uVar21; + uVar8 = param_2[0xd]; + uVar15 = param_2[0xe]; + uVar21 = param_2[0xf]; + param_1[0xc] = param_2[0xc]; + param_1[0xd] = uVar8; + param_1[0xe] = uVar15; + param_1[0xf] = uVar21; + param_1[0x11] = param_1; + param_1[0x10] = (int)param_1 + (param_2[0x10] - (int)param_2); + *puVar2 = uVar7; + param_2[0x10] = uVar1; + param_2[0x11] = puVar14; + return; +} + + + +### FUNC FUN_0004461c @ 0004461c + +undefined4 +FUN_0004461c(int *param_1,undefined4 *param_2,int param_3,undefined4 *param_4,int param_5, + int param_6,uint param_7,int param_8) + +{ + uint *puVar1; + uint uVar2; + int iVar3; + undefined4 uVar4; + char cVar5; + char *pcVar6; + int iVar7; + uint uVar8; + int iVar9; + uint uVar10; + uint uVar11; + int iVar12; + undefined4 uVar13; + undefined8 uVar14; + undefined8 uVar15; + undefined8 uVar16; + undefined8 uVar17; + uint local_9c; + undefined4 local_70; + int local_64; + undefined4 local_60; + char local_54 [64]; + + uVar14 = __floatsidf(param_3); + uVar15 = __divdf3(0xffffffff,0x7fefffff); + iVar7 = *(int *)(param_8 + 0x10); + iVar9 = *(int *)(param_8 + 0x14); + puVar1 = (uint *)*param_1; + local_9c = 1; + local_64 = param_5; + if (puVar1 == (uint *)*param_2) { + uVar11 = 0; + pcVar6 = local_54; + uVar16 = 0; + } + else { + pcVar6 = local_54; + uVar8 = 0; + uVar16 = 0; + cVar5 = '\0'; + uVar10 = uVar8; + do { + local_70 = (undefined4)((ulonglong)uVar16 >> 0x20); + local_60 = (undefined4)uVar16; + uVar2 = *puVar1; + uVar11 = uVar10; + if (uVar2 == param_7 && iVar9 != iVar7) { + *pcVar6 = cVar5; + uVar8 = uVar8 + 1; + cVar5 = '\0'; + } + else { + iVar12 = 0xff; + if (uVar2 < 0x80) { + iVar12 = std::priv::__digit_val_table(uVar2); + } + if (param_3 <= iVar12) break; + iVar3 = __aeabi_dcmpgt(local_60,local_70,(int)uVar15,(int)((ulonglong)uVar15 >> 0x20)); + cVar5 = cVar5 + '\x01'; + local_64 = local_64 + 1; + uVar11 = local_9c; + if (iVar3 == 0) { + uVar16 = __muldf3(local_60,local_70,(int)uVar14,(int)((ulonglong)uVar14 >> 0x20)); + uVar17 = __floatsidf(iVar12); + uVar16 = __adddf3((int)uVar16,(int)((ulonglong)uVar16 >> 0x20),(int)uVar17, + (int)((ulonglong)uVar17 >> 0x20)); + iVar12 = __aeabi_dcmple((int)uVar16,(int)((ulonglong)uVar16 >> 0x20),local_60,local_70); + iVar3 = __aeabi_dcmpeq(local_60,local_70,0,0); + uVar11 = uVar10 | (iVar3 == 0 && iVar12 != 0); + } + } + puVar1 = (uint *)(*param_1 + 4); + *param_1 = (int)puVar1; + pcVar6 = local_54 + uVar8; + uVar10 = uVar11; + } while (puVar1 != (uint *)*param_2); + pcVar6 = local_54 + uVar8; + if ((iVar9 != iVar7) && (uVar8 != 0)) { + *pcVar6 = cVar5; + pcVar6 = local_54 + uVar8 + 1; + } + } + uVar13 = (undefined4)((ulonglong)uVar16 >> 0x20); + local_60 = (undefined4)uVar16; + uVar4 = 0; + if (0 < local_64) { + if (uVar11 != 0) { + *param_4 = 0xffffffff; + param_4[1] = 0x7fefffff; + return 0; + } + uVar14 = __subdf3(0,0x80000000,local_60,uVar13); + uVar4 = (int)((ulonglong)uVar14 >> 0x20); + if (param_6 == 0) { + uVar4 = uVar13; + } + param_4[1] = uVar4; + uVar4 = (int)uVar14; + if (param_6 == 0) { + uVar4 = local_60; + } + *param_4 = uVar4; + uVar4 = 1; + if (iVar9 != iVar7) { + uVar4 = std::priv::__valid_grouping + (local_54,pcVar6,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); + } + } + return uVar4; +} + + + +### FUNC FUN_000447ec @ 000447ec + +void FUN_000447ec(facet *param_1) + +{ + std::locale::facet::~facet(param_1); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_000448f4 @ 000448f4 + +void FUN_000448f4(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8) + +{ + FUN_000455e4(param_1,param_3,param_4,param_5,param_6,param_7,param_8,1,0); + return; +} + + + +### FUNC FUN_00044920 @ 00044920 + +/* WARNING: Type propagation algorithm not settling */ +/* WARNING: Restarted to delay deadcode elimination for space: stack */ + +void FUN_00044920(undefined4 *param_1,int *param_2,uint param_3,int param_4,int param_5,int param_6, + int param_7,int param_8) + +{ + locale *this; + int *piVar1; + int *piVar2; + int *piVar3; + int ******ppppppiVar4; + undefined4 uVar5; + int iVar6; + int iVar7; + uint uVar8; + int *******pppppppiVar9; + int iVar10; + int *******pppppppiVar11; + uint uVar12; + uint uVar13; + uint uVar14; + uint uVar15; + uint uVar16; + int iVar17; + int *******pppppppiVar18; + uint uVar19; + uint uVar20; + uint uVar21; + int iVar22; + int ******ppppppiVar23; + int iVar24; + int iVar25; + uint uVar26; + byte bVar27; + bool bVar28; + undefined8 uVar29; + int local_578; + undefined4 local_564; + int *******local_524; + uint local_520; + uint local_514; + undefined4 *******local_510 [16]; + int *******local_4d0; + int ******local_4cc; + undefined1 auStack_4c8 [1024]; + int *******local_c8; + int local_c4 [16]; + int *local_84; + int *local_80; + int local_7c [16]; + int local_3c; + int *local_38; + int local_34 [4]; + int *local_24; + int *local_20; + locale alStack_1c [4]; + undefined1 auStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_1c,(locale *)(param_5 + 0x20)); + piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype::id); + piVar2 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct::id); + piVar3 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct::id); + ppppppiVar4 = (int ******)(**(code **)(*piVar1 + 0x28))(piVar1,0x2d); + uVar5 = (**(code **)(*piVar1 + 0x28))(piVar1,0x2b); + iVar6 = (**(code **)(*piVar1 + 0x28))(piVar1,0x20); + iVar7 = (**(code **)(*piVar1 + 0x28))(piVar1,0x30); + if (param_4 == 1) { + local_578 = (**(code **)(*piVar3 + 8))(); + local_564 = (**(code **)(*piVar3 + 0xc))(); + (**(code **)(*piVar3 + 0x10))(local_34); + uVar8 = (**(code **)(*piVar3 + 0x20))(piVar3,*(code **)(*piVar3 + 0x20),local_34); + (**(code **)(*piVar3 + 0x14))(local_7c,piVar3,*(code **)(*piVar3 + 0x14),local_34); + } + else { + local_578 = (**(code **)(*piVar2 + 8))(); + local_564 = (**(code **)(*piVar2 + 0xc))(); + (**(code **)(*piVar2 + 0x10))(local_34); + uVar8 = (**(code **)(*piVar2 + 0x20))(piVar2,*(code **)(*piVar2 + 0x20),local_34); + (**(code **)(*piVar2 + 0x14))(local_7c,piVar2,*(code **)(*piVar2 + 0x14),local_34); + } + pppppppiVar9 = *(int ********)(param_7 + 0x448); + pppppppiVar18 = *(int ********)(param_7 + 0x40); + if (pppppppiVar9 == pppppppiVar18) { + *param_1 = param_2; + param_1[1] = param_3; + if ((local_38 != local_7c) && (local_38 != (int *)0x0)) { + if ((uint)(local_7c[0] - (int)local_38) < 0x81) { + std::__node_alloc::_M_deallocate(local_38,local_7c[0] - (int)local_38); + } + else { + operator_delete(local_38); + } + } + if ((local_20 != local_34) && (local_20 != (int *)0x0)) { + if ((uint)(local_34[0] - (int)local_20) < 0x81) { + std::__node_alloc::_M_deallocate(local_20,local_34[0] - (int)local_20); + } + else { + operator_delete(local_20); + } + } + std::locale::~locale(alStack_1c); + return; + } + ppppppiVar23 = *pppppppiVar9; + pppppppiVar11 = pppppppiVar9 + 1; + if (ppppppiVar23 != ppppppiVar4) { + pppppppiVar11 = pppppppiVar9; + } + if (param_4 == 1) { + if (ppppppiVar23 == ppppppiVar4) { + (**(code **)(*piVar3 + 0x1c))(local_c4,piVar3); + } + else { + (**(code **)(*piVar3 + 0x18))(local_c4,piVar3); + } + } + else if (ppppppiVar23 == ppppppiVar4) { + (**(code **)(*piVar2 + 0x1c))(local_c4); + } + else { + (**(code **)(*piVar2 + 0x18))(local_c4); + } + local_524 = pppppppiVar18; + pppppppiVar9 = pppppppiVar11; + if (param_8 == 1) { + while ((local_524 = pppppppiVar18, pppppppiVar9 != pppppppiVar18 && + (iVar10 = (**(code **)(*piVar1 + 8))(piVar1,0x40,*pppppppiVar9), local_524 = pppppppiVar9 + , iVar10 == 1))) { + pppppppiVar9 = pppppppiVar9 + 1; + } + if (local_524 == pppppppiVar11) { + *param_1 = param_2; + param_1[1] = param_3; + goto LAB_00045268; + } + } + __aeabi_memclr4(auStack_4c8,0x400); + local_4d0 = &local_4cc; + local_4cc = (int ******)0x0; + local_510[0] = &local_c8; + local_c8 = &local_4cc; + if (local_20 != local_24) { + if (pppppppiVar11 != local_524) { + FUN_00045484(local_510,pppppppiVar11,local_524,auStack_18); + } + FUN_0005031c(local_510,((int)local_4d0 - (int)local_c8 >> 2) - uVar8,local_34,local_564,uVar5, + ppppppiVar4,0); + pppppppiVar11 = local_c8; + local_524 = local_4d0; + } + uVar12 = (int)local_524 - (int)pppppppiVar11; + uVar13 = (int)uVar12 >> 2; + uVar14 = uVar13 + 1; + if (uVar8 == 0) { + uVar14 = uVar13; + } + iVar10 = uVar14 + ((int)local_84 - (int)local_80 >> 2); + uVar19 = *(uint *)(param_5 + 4) & 0x200; + uVar14 = *(uint *)(param_5 + 0x1c); + if (uVar19 != 0) { + iVar10 = (local_3c - (int)local_38 >> 2) + iVar10; + } + if (param_4 == 1) { + if (ppppppiVar23 == ppppppiVar4) { + local_514 = (**(code **)(*piVar3 + 0x28))(); + } + else { + local_514 = (**(code **)(*piVar3 + 0x24))(); + } + } + else if (ppppppiVar23 == ppppppiVar4) { + local_514 = (**(code **)(*piVar2 + 0x28))(piVar2); + } + else { + local_514 = (**(code **)(*piVar2 + 0x24))(piVar2); + } + uVar15 = iVar10 + (uint)((local_514 & 0xff00) == 0x100 || (local_514 & 0xff0000) == 0x10000); + iVar10 = uVar14 - uVar15; + if (uVar14 <= uVar15) { + iVar10 = 0; + } + uVar20 = *(uint *)(param_5 + 4); + local_520 = param_3; + if ((iVar10 != 0) && ((uVar20 & 5) == 0)) { + uVar21 = param_3; + if (0 < iVar10) { + iVar24 = (uVar14 + 1) - uVar15; + do { + uVar16 = uVar21 & 0xff; + uVar21 = 0; + if (uVar16 != 0) { + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = param_6; + iVar22 = param_6; + } + else { + iVar22 = (**(code **)(*param_2 + 0x34))(param_2,param_6); + } + uVar21 = 1; + if (iVar22 == -1) { + uVar21 = 0; + } + } + iVar24 = iVar24 + -1; + } while (1 < iVar24); + } + local_520 = uVar21 & 0xff | param_3 & 0xffffff00; + } + uVar21 = (int)(local_524 + -uVar8) - (int)pppppppiVar11; + iVar22 = (uVar12 >> 2) + 1; + iVar24 = 0; + do { + uVar16 = local_520; + switch(*(undefined1 *)((int)local_510 + iVar24 + -4)) { + case 1: + uVar16 = 0; + if ((local_520 & 0xff) != 0) { + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = iVar6; + iVar25 = iVar6; + } + else { + iVar25 = (**(code **)(*param_2 + 0x34))(param_2,iVar6); + } + uVar16 = 1; + if (iVar25 == -1) { + uVar16 = 0; + } + } + local_520 = local_520 & 0xffffff00 | uVar16; + case 0: + if (iVar10 != 0 && (uVar20 & 7) == 4) { + iVar25 = (uVar14 + 1) - uVar15; + uVar16 = local_520; + uVar26 = local_520; + if (0 < iVar10) { + do { + uVar16 = 0; + if ((uVar26 & 0xff) != 0) { + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = param_6; + iVar17 = param_6; + } + else { + iVar17 = (**(code **)(*param_2 + 0x34))(param_2,param_6); + } + uVar16 = 1; + if (iVar17 == -1) { + uVar16 = 0; + } + } + iVar25 = iVar25 + -1; + uVar26 = uVar16; + } while (1 < iVar25); + } + local_520 = local_520 & 0xffffff00 | uVar16 & 0xff; + } + break; + case 2: + if (uVar19 != 0) { + if (0 < local_3c - (int)local_38) { + iVar25 = ((uint)(local_3c - (int)local_38) >> 2) + 1; + uVar26 = local_520; + piVar1 = local_38; + do { + uVar16 = 0; + if ((uVar26 & 0xff) != 0) { + iVar17 = *piVar1; + piVar2 = (int *)param_2[5]; + if (piVar2 < (int *)param_2[6]) { + param_2[5] = (int)(piVar2 + 1); + *piVar2 = iVar17; + } + else { + iVar17 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar16 = 1; + if (iVar17 == -1) { + uVar16 = 0; + } + } + iVar25 = iVar25 + -1; + piVar1 = piVar1 + 1; + uVar26 = uVar16; + } while (1 < iVar25); + } +LAB_00044f52: + local_520 = local_520 & 0xffffff00 | uVar16 & 0xff; + } + break; + case 3: + if (local_80 != local_84) { + uVar16 = 0; + if ((local_520 & 0xff) != 0) { + iVar25 = *local_80; + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = iVar25; + } + else { + iVar25 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar16 = 1; + if (iVar25 == -1) { + uVar16 = 0; + } + } + local_520 = local_520 & 0xffffff00 | uVar16; + } + break; + case 4: + if (uVar8 == 0) { + iVar25 = iVar22; + uVar26 = local_520; + pppppppiVar9 = pppppppiVar11; + if (0 < (int)uVar12) { + do { + uVar16 = 0; + if ((uVar26 & 0xff) != 0) { + ppppppiVar4 = *pppppppiVar9; + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = (int)ppppppiVar4; + } + else { + ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2); + } + uVar16 = 1; + if (ppppppiVar4 == (int ******)0xffffffff) { + uVar16 = 0; + } + } + iVar25 = iVar25 + -1; + uVar26 = uVar16; + pppppppiVar9 = pppppppiVar9 + 1; + } while (1 < iVar25); + } + goto LAB_00044f52; + } + if ((int)uVar8 < (int)uVar13) { + iVar25 = (uVar21 >> 2) + 1; + uVar26 = local_520; + pppppppiVar9 = pppppppiVar11; + if (0 < (int)uVar21) { + do { + uVar16 = 0; + if ((uVar26 & 0xff) != 0) { + ppppppiVar4 = *pppppppiVar9; + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = (int)ppppppiVar4; + } + else { + ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2); + } + uVar16 = 1; + if (ppppppiVar4 == (int ******)0xffffffff) { + uVar16 = 0; + } + } + iVar25 = iVar25 + -1; + uVar26 = uVar16; + pppppppiVar9 = pppppppiVar9 + 1; + } while (1 < iVar25); + } + bVar27 = 0; + if ((uVar16 & 0xff) != 0) { + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = local_578; + iVar25 = local_578; + } + else { + iVar25 = (**(code **)(*param_2 + 0x34))(param_2,local_578); + } + bVar27 = 1; + if (iVar25 == -1) { + bVar27 = 0; + } + } + iVar25 = (uVar8 & 0x3fffffff) + 1; + pppppppiVar9 = local_524 + -uVar8; + if (0 < (int)(uVar8 * 4)) { + do { + bVar28 = bVar27 != 0; + bVar27 = 0; + if (bVar28) { + ppppppiVar4 = *pppppppiVar9; + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = (int)ppppppiVar4; + } + else { + ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2); + } + bVar27 = 1; + if (ppppppiVar4 == (int ******)0xffffffff) { + bVar27 = 0; + } + } + iVar25 = iVar25 + -1; + pppppppiVar9 = pppppppiVar9 + 1; + } while (1 < iVar25); + } + } + else { + bVar27 = 0; + if ((local_520 & 0xff) != 0) { + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = iVar7; + iVar25 = iVar7; + } + else { + iVar25 = (**(code **)(*param_2 + 0x34))(param_2,iVar7); + } + if (iVar25 != -1) { + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = local_578; + iVar25 = local_578; + } + else { + iVar25 = (**(code **)(*param_2 + 0x34))(param_2,local_578); + } + bVar27 = 1; + if (iVar25 == -1) { + bVar27 = 0; + } + } + } + iVar25 = uVar13 - uVar8; + if (uVar8 != uVar13) { + do { + bVar28 = bVar27 != 0; + bVar27 = 0; + if (bVar28) { + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = iVar7; + iVar17 = iVar7; + } + else { + iVar17 = (**(code **)(*param_2 + 0x34))(param_2,iVar7); + } + bVar27 = 1; + if (iVar17 == -1) { + bVar27 = 0; + } + } + iVar25 = iVar25 + 1; + } while (iVar25 != 0); + } + iVar25 = iVar22; + pppppppiVar9 = pppppppiVar11; + if (0 < (int)uVar12) { + do { + bVar28 = bVar27 != 0; + bVar27 = 0; + if (bVar28) { + ppppppiVar4 = *pppppppiVar9; + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = (int)ppppppiVar4; + } + else { + ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2); + } + bVar27 = 1; + if (ppppppiVar4 == (int ******)0xffffffff) { + bVar27 = 0; + } + } + iVar25 = iVar25 + -1; + pppppppiVar9 = pppppppiVar9 + 1; + } while (1 < iVar25); + } + } + local_520 = local_520 & 0xffffff00; + local_520 = local_520 | bVar27; + } + bVar28 = iVar24 < 3; + iVar24 = iVar24 + 1; + } while (bVar28); + if (1 < (uint)((int)local_84 - (int)local_80 >> 2)) { + piVar1 = local_80 + 1; + uVar8 = local_520; + if (0 < (int)local_84 - (int)piVar1) { + iVar6 = ((uint)((int)local_84 - (int)piVar1) >> 2) + 1; + uVar12 = local_520; + do { + uVar8 = 0; + if ((uVar12 & 0xff) != 0) { + iVar7 = *piVar1; + piVar2 = (int *)param_2[5]; + if (piVar2 < (int *)param_2[6]) { + param_2[5] = (int)(piVar2 + 1); + *piVar2 = iVar7; + } + else { + iVar7 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar8 = 1; + if (iVar7 == -1) { + uVar8 = 0; + } + } + iVar6 = iVar6 + -1; + piVar1 = piVar1 + 1; + uVar12 = uVar8; + } while (1 < iVar6); + } + local_520 = uVar8 & 0xff | local_520 & 0xffffff00; + } + if ((iVar10 != 0) && ((uVar20 & 6) == 0)) { + uVar8 = local_520; + if (0 < iVar10) { + iVar6 = (uVar14 + 1) - uVar15; + uVar14 = local_520; + do { + uVar8 = 0; + if ((uVar14 & 0xff) != 0) { + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = param_6; + iVar7 = param_6; + } + else { + iVar7 = (**(code **)(*param_2 + 0x34))(param_2,param_6); + } + uVar8 = 1; + if (iVar7 == -1) { + uVar8 = 0; + } + } + iVar6 = iVar6 + -1; + uVar14 = uVar8; + } while (1 < iVar6); + } + local_520 = uVar8 & 0xff | local_520 & 0xffffff00; + } + *param_1 = param_2; + param_1[1] = local_520; + if ((((undefined4 ********)local_c8 != local_510) && (local_c8 != (int *******)0x0)) && + (&local_4cc != local_c8)) { + if ((uint)((int)local_510[0] - (int)local_c8) < 0x81) { + std::__node_alloc::_M_deallocate(local_c8,(int)local_510[0] - (int)local_c8); + } + else { + operator_delete(local_c8); + } + } +LAB_00045268: + if (local_80 == local_c4) { + FUN_00044a98(); + return; + } + if (local_80 != (int *)0x0) { + uVar29 = CONCAT44(local_c4[0] - (int)local_80,local_80); + if (0x80 < (uint)(local_c4[0] - (int)local_80)) { + operator_delete(local_80); + uVar29 = FUN_00044a98(); + } + std::__node_alloc::_M_deallocate((void *)uVar29,(uint)((ulonglong)uVar29 >> 0x20)); + uVar5 = FUN_00044a98(); + if ((local_80 != local_c4) && (local_80 != (int *)0x0)) { + if ((uint)(local_c4[0] - (int)local_80) < 0x81) { + std::__node_alloc::_M_deallocate(local_80,local_c4[0] - (int)local_80); + } + else { + operator_delete(local_80); + } + } + if ((local_38 != local_7c) && (local_38 != (int *)0x0)) { + if ((uint)(local_7c[0] - (int)local_38) < 0x81) { + std::__node_alloc::_M_deallocate(local_38,local_7c[0] - (int)local_38); + } + else { + operator_delete(local_38); + } + } + if ((local_20 != local_34) && (local_20 != (int *)0x0)) { + if ((uint)(local_34[0] - (int)local_20) < 0x81) { + std::__node_alloc::_M_deallocate(local_20,local_34[0] - (int)local_20); + } + else { + operator_delete(local_20); + } + } + std::locale::~locale(alStack_1c); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar5); + } + FUN_00044a98(); + return; +} + + + +### FUNC FUN_00044a98 @ 00044a98 + +void FUN_00044a98(void) + +{ + undefined1 *puVar1; + int in_stack_00000060; + int *in_stack_0000007c; + + puVar1 = *(undefined1 **)(in_stack_00000060 + 4); + if ((puVar1 != &stack0x0000052c) && (puVar1 != (undefined1 *)0x0)) { + if ((uint)(*in_stack_0000007c - (int)puVar1) < 0x81) { + std::__node_alloc::_M_deallocate(puVar1,*in_stack_0000007c - (int)puVar1); + } + else { + operator_delete(puVar1); + } + } + puVar1 = (undefined1 *)in_stack_0000007c[0x17]; + if ((puVar1 != &stack0x00000574) && (puVar1 != (undefined1 *)0x0)) { + if ((uint)(in_stack_0000007c[0x12] - (int)puVar1) < 0x81) { + std::__node_alloc::_M_deallocate(puVar1,in_stack_0000007c[0x12] - (int)puVar1); + } + else { + operator_delete(puVar1); + } + } + std::locale::~locale((locale *)&stack0x0000058c); + return; +} + + + +### FUNC FUN_000453a0 @ 000453a0 + +/* WARNING: Restarted to delay deadcode elimination for space: stack */ + +void FUN_000453a0(undefined4 param_1,int param_2,undefined4 param_3,undefined4 param_4) + +{ + locale *this; + undefined4 uVar1; + undefined4 extraout_r1; + locale alStack_134 [4]; + undefined1 *local_130 [4]; + undefined1 **local_120; + undefined1 local_11c; + undefined1 auStack_11b [256]; + undefined1 auStack_1b [3]; + undefined1 **local_18; + + __aeabi_memclr(auStack_11b,0x100); + local_11c = 0; + local_130[0] = auStack_1b; + local_120 = (undefined1 **)&local_11c; + local_18 = (undefined1 **)&local_11c; + FUN_000517f8(local_130,extraout_r1,param_3,param_4); + this = (locale *)std::locale::locale(alStack_134,(locale *)(param_2 + 0x20)); + uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); + std::locale::~locale(alStack_134); + FUN_00051848(local_130,param_1,uVar1,0,0); + if (((local_18 != local_130) && (local_18 != (undefined1 **)0x0)) && + ((undefined1 **)&local_11c != local_18)) { + if (0x80 < (uint)((int)local_130[0] - (int)local_18)) { + operator_delete(local_18); + return; + } + std::__node_alloc::_M_deallocate(local_18,(int)local_130[0] - (int)local_18); + } + return; +} + + + +### FUNC FUN_00045484 @ 00045484 + +int * FUN_00045484(int *param_1,int *param_2,int *param_3) + +{ + int *piVar1; + int iVar2; + int *piVar3; + int *piVar4; + undefined4 uVar5; + int *piVar6; + uint uVar7; + int *piVar8; + uint uVar9; + uint uVar10; + int *piVar11; + uint local_18; + + if (param_2 != param_3) { + piVar6 = (int *)param_1[0x112]; + piVar1 = param_1 + 0x112; + iVar2 = (int)param_3 - (int)param_2; + uVar9 = iVar2 >> 2; + if (piVar6 == param_1) { + piVar3 = (int *)param_1[0x10]; + uVar7 = 0x10 - ((int)piVar3 - (int)param_1 >> 2); + } + else { + piVar3 = (int *)param_1[0x10]; + uVar7 = *param_1 - (int)piVar3 >> 2; + } + piVar8 = param_1 + 0x10; + if (uVar9 < uVar7) { + piVar1 = param_2 + 1; + *piVar3 = *param_2; + if (piVar1 != param_3) { + __aeabi_memcpy(piVar3 + 1,piVar1,(int)param_3 - (int)piVar1); + piVar3 = (int *)*piVar8; + } + piVar3[uVar9] = 0; + *piVar8 = (int)(piVar3 + uVar9); + } + else { + uVar7 = (int)piVar3 - (int)piVar6 >> 2; + if (0x3ffffffe - uVar7 < uVar9) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + uVar10 = uVar7; + if (uVar7 <= uVar9) { + uVar10 = uVar9; + } + uVar10 = uVar7 + uVar10 + 1; + uVar9 = 0x3ffffffe; + if (uVar7 <= uVar10) { + uVar9 = uVar10; + } + uVar7 = 0x3ffffffe; + if (uVar10 < 0x3fffffff) { + uVar7 = uVar9; + } + if (uVar7 >> 1 < 0x81) { + piVar4 = param_1 + 0x11; + } + else { + if (0x3fffffff < uVar7) { + FUN_00030824(4); + uVar5 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar5,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + local_18 = uVar7 << 2; + if (local_18 < 0x81) { + piVar4 = (int *)std::__node_alloc::_M_allocate(&local_18); + } + else { + piVar4 = (int *)operator_new(local_18); + } + piVar3 = (int *)*piVar8; + piVar6 = (int *)*piVar1; + } + piVar11 = piVar4; + if (piVar3 != piVar6) { + __aeabi_memcpy(piVar4,piVar6,(int)piVar3 - (int)piVar6); + piVar11 = (int *)((int)piVar4 + ((int)piVar3 - (int)piVar6)); + } + __aeabi_memcpy(piVar11,param_2,iVar2); + *(undefined4 *)((int)piVar11 + iVar2) = 0; + piVar6 = (int *)*piVar1; + if (((piVar6 != param_1) && (piVar6 != (int *)0x0)) && (param_1 + 0x11 != piVar6)) { + if ((uint)(*param_1 - (int)piVar6) < 0x81) { + std::__node_alloc::_M_deallocate(piVar6,*param_1 - (int)piVar6); + } + else { + operator_delete(piVar6); + } + } + *param_1 = (int)(piVar4 + uVar7); + *piVar8 = (int)piVar11 + iVar2; + *piVar1 = (int)piVar4; + } + } + return param_1; +} + + + +### FUNC FUN_000455e4 @ 000455e4 + +/* WARNING: Type propagation algorithm not settling */ +/* WARNING: Restarted to delay deadcode elimination for space: stack */ + +void FUN_000455e4(undefined4 *param_1,int *param_2,uint param_3,int param_4,int param_5,int param_6, + int param_7,int param_8) + +{ + locale *this; + int *piVar1; + int *piVar2; + int *piVar3; + int ******ppppppiVar4; + undefined4 uVar5; + int iVar6; + int iVar7; + uint uVar8; + int *******pppppppiVar9; + int iVar10; + int *******pppppppiVar11; + uint uVar12; + uint uVar13; + uint uVar14; + uint uVar15; + uint uVar16; + int iVar17; + int *******pppppppiVar18; + uint uVar19; + uint uVar20; + uint uVar21; + int iVar22; + int ******ppppppiVar23; + int iVar24; + int iVar25; + uint uVar26; + byte bVar27; + bool bVar28; + int local_578; + undefined4 local_564; + int *******local_524; + uint local_520; + uint local_514; + undefined4 *******local_510 [16]; + int *******local_4d0; + int ******local_4cc; + undefined1 auStack_4c8 [1024]; + int *******local_c8; + int local_c4 [16]; + int *local_84; + int *local_80; + int local_7c [16]; + int local_3c; + int *local_38; + int local_34 [4]; + int *local_24; + int *local_20; + locale alStack_1c [4]; + undefined1 auStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_1c,(locale *)(param_5 + 0x20)); + piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype::id); + piVar2 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct::id); + piVar3 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct::id); + ppppppiVar4 = (int ******)(**(code **)(*piVar1 + 0x28))(piVar1,0x2d); + uVar5 = (**(code **)(*piVar1 + 0x28))(piVar1,0x2b); + iVar6 = (**(code **)(*piVar1 + 0x28))(piVar1,0x20); + iVar7 = (**(code **)(*piVar1 + 0x28))(piVar1,0x30); + if (param_4 == 1) { + local_578 = (**(code **)(*piVar3 + 8))(); + local_564 = (**(code **)(*piVar3 + 0xc))(); + (**(code **)(*piVar3 + 0x10))(local_34); + uVar8 = (**(code **)(*piVar3 + 0x20))(piVar3,*(code **)(*piVar3 + 0x20),local_34); + (**(code **)(*piVar3 + 0x14))(local_7c,piVar3,*(code **)(*piVar3 + 0x14),local_34); + } + else { + local_578 = (**(code **)(*piVar2 + 8))(); + local_564 = (**(code **)(*piVar2 + 0xc))(); + (**(code **)(*piVar2 + 0x10))(local_34); + uVar8 = (**(code **)(*piVar2 + 0x20))(piVar2,*(code **)(*piVar2 + 0x20),local_34); + (**(code **)(*piVar2 + 0x14))(local_7c,piVar2,*(code **)(*piVar2 + 0x14),local_34); + } + pppppppiVar18 = *(int ********)(param_7 + 0x40); + pppppppiVar9 = *(int ********)(param_7 + 0x44); + if (pppppppiVar9 == pppppppiVar18) { + *param_1 = param_2; + param_1[1] = param_3; + if ((local_38 != local_7c) && (local_38 != (int *)0x0)) { + if ((uint)(local_7c[0] - (int)local_38) < 0x81) { + std::__node_alloc::_M_deallocate(local_38,local_7c[0] - (int)local_38); + } + else { + operator_delete(local_38); + } + } + if ((local_20 != local_34) && (local_20 != (int *)0x0)) { + if ((uint)(local_34[0] - (int)local_20) < 0x81) { + std::__node_alloc::_M_deallocate(local_20,local_34[0] - (int)local_20); + } + else { + operator_delete(local_20); + } + } + std::locale::~locale(alStack_1c); + return; + } + ppppppiVar23 = *pppppppiVar9; + pppppppiVar11 = pppppppiVar9 + 1; + if (ppppppiVar23 != ppppppiVar4) { + pppppppiVar11 = pppppppiVar9; + } + if (param_4 == 1) { + if (ppppppiVar23 == ppppppiVar4) { + (**(code **)(*piVar3 + 0x1c))(local_c4,piVar3); + } + else { + (**(code **)(*piVar3 + 0x18))(local_c4,piVar3); + } + } + else if (ppppppiVar23 == ppppppiVar4) { + (**(code **)(*piVar2 + 0x1c))(local_c4); + } + else { + (**(code **)(*piVar2 + 0x18))(local_c4); + } + local_524 = pppppppiVar18; + pppppppiVar9 = pppppppiVar11; + if (param_8 == 1) { + while ((local_524 = pppppppiVar18, pppppppiVar9 != pppppppiVar18 && + (iVar10 = (**(code **)(*piVar1 + 8))(piVar1,0x40,*pppppppiVar9), local_524 = pppppppiVar9 + , iVar10 == 1))) { + pppppppiVar9 = pppppppiVar9 + 1; + } + if (local_524 == pppppppiVar11) { + *param_1 = param_2; + param_1[1] = param_3; + goto LAB_00045f22; + } + } + __aeabi_memclr4(auStack_4c8,0x400); + local_4cc = (int ******)0x0; + local_510[0] = &local_c8; + local_4d0 = &local_4cc; + local_c8 = &local_4cc; + if (local_20 != local_24) { + if (pppppppiVar11 != local_524) { + FUN_00045484(local_510,pppppppiVar11,local_524,auStack_18); + } + FUN_0005031c(local_510,((int)local_4d0 - (int)local_c8 >> 2) - uVar8,local_34,local_564,uVar5, + ppppppiVar4,0); + pppppppiVar11 = local_c8; + local_524 = local_4d0; + } + uVar12 = (int)local_524 - (int)pppppppiVar11; + uVar13 = (int)uVar12 >> 2; + uVar14 = uVar13 + 1; + if (uVar8 == 0) { + uVar14 = uVar13; + } + iVar10 = uVar14 + ((int)local_84 - (int)local_80 >> 2); + uVar19 = *(uint *)(param_5 + 4) & 0x200; + uVar14 = *(uint *)(param_5 + 0x1c); + if (uVar19 != 0) { + iVar10 = (local_3c - (int)local_38 >> 2) + iVar10; + } + if (param_4 == 1) { + if (ppppppiVar23 == ppppppiVar4) { + local_514 = (**(code **)(*piVar3 + 0x28))(); + } + else { + local_514 = (**(code **)(*piVar3 + 0x24))(); + } + } + else if (ppppppiVar23 == ppppppiVar4) { + local_514 = (**(code **)(*piVar2 + 0x28))(piVar2); + } + else { + local_514 = (**(code **)(*piVar2 + 0x24))(piVar2); + } + uVar15 = iVar10 + (uint)((local_514 & 0xff00) == 0x100 || (local_514 & 0xff0000) == 0x10000); + iVar10 = uVar14 - uVar15; + if (uVar14 <= uVar15) { + iVar10 = 0; + } + uVar20 = *(uint *)(param_5 + 4); + local_520 = param_3; + if ((iVar10 != 0) && ((uVar20 & 5) == 0)) { + uVar21 = param_3; + if (0 < iVar10) { + iVar24 = (uVar14 + 1) - uVar15; + do { + uVar16 = uVar21 & 0xff; + uVar21 = 0; + if (uVar16 != 0) { + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = param_6; + iVar22 = param_6; + } + else { + iVar22 = (**(code **)(*param_2 + 0x34))(param_2,param_6); + } + uVar21 = 1; + if (iVar22 == -1) { + uVar21 = 0; + } + } + iVar24 = iVar24 + -1; + } while (1 < iVar24); + } + local_520 = uVar21 & 0xff | param_3 & 0xffffff00; + } + uVar21 = (int)(local_524 + -uVar8) - (int)pppppppiVar11; + iVar22 = (uVar12 >> 2) + 1; + iVar24 = 0; + do { + uVar16 = local_520; + switch(*(undefined1 *)((int)local_510 + iVar24 + -4)) { + case 1: + uVar16 = 0; + if ((local_520 & 0xff) != 0) { + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = iVar6; + iVar25 = iVar6; + } + else { + iVar25 = (**(code **)(*param_2 + 0x34))(param_2,iVar6); + } + uVar16 = 1; + if (iVar25 == -1) { + uVar16 = 0; + } + } + local_520 = local_520 & 0xffffff00 | uVar16; + case 0: + if (iVar10 != 0 && (uVar20 & 7) == 4) { + iVar25 = (uVar14 + 1) - uVar15; + uVar16 = local_520; + uVar26 = local_520; + if (0 < iVar10) { + do { + uVar16 = 0; + if ((uVar26 & 0xff) != 0) { + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = param_6; + iVar17 = param_6; + } + else { + iVar17 = (**(code **)(*param_2 + 0x34))(param_2,param_6); + } + uVar16 = 1; + if (iVar17 == -1) { + uVar16 = 0; + } + } + iVar25 = iVar25 + -1; + uVar26 = uVar16; + } while (1 < iVar25); + } + local_520 = local_520 & 0xffffff00 | uVar16 & 0xff; + } + break; + case 2: + if (uVar19 != 0) { + if (0 < local_3c - (int)local_38) { + iVar25 = ((uint)(local_3c - (int)local_38) >> 2) + 1; + uVar26 = local_520; + piVar1 = local_38; + do { + uVar16 = 0; + if ((uVar26 & 0xff) != 0) { + iVar17 = *piVar1; + piVar2 = (int *)param_2[5]; + if (piVar2 < (int *)param_2[6]) { + param_2[5] = (int)(piVar2 + 1); + *piVar2 = iVar17; + } + else { + iVar17 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar16 = 1; + if (iVar17 == -1) { + uVar16 = 0; + } + } + iVar25 = iVar25 + -1; + piVar1 = piVar1 + 1; + uVar26 = uVar16; + } while (1 < iVar25); + } +LAB_00045c0a: + local_520 = local_520 & 0xffffff00 | uVar16 & 0xff; + } + break; + case 3: + if (local_80 != local_84) { + uVar16 = 0; + if ((local_520 & 0xff) != 0) { + iVar25 = *local_80; + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = iVar25; + } + else { + iVar25 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar16 = 1; + if (iVar25 == -1) { + uVar16 = 0; + } + } + local_520 = local_520 & 0xffffff00 | uVar16; + } + break; + case 4: + if (uVar8 == 0) { + iVar25 = iVar22; + uVar26 = local_520; + pppppppiVar9 = pppppppiVar11; + if (0 < (int)uVar12) { + do { + uVar16 = 0; + if ((uVar26 & 0xff) != 0) { + ppppppiVar4 = *pppppppiVar9; + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = (int)ppppppiVar4; + } + else { + ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2); + } + uVar16 = 1; + if (ppppppiVar4 == (int ******)0xffffffff) { + uVar16 = 0; + } + } + iVar25 = iVar25 + -1; + uVar26 = uVar16; + pppppppiVar9 = pppppppiVar9 + 1; + } while (1 < iVar25); + } + goto LAB_00045c0a; + } + if ((int)uVar8 < (int)uVar13) { + iVar25 = (uVar21 >> 2) + 1; + uVar26 = local_520; + pppppppiVar9 = pppppppiVar11; + if (0 < (int)uVar21) { + do { + uVar16 = 0; + if ((uVar26 & 0xff) != 0) { + ppppppiVar4 = *pppppppiVar9; + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = (int)ppppppiVar4; + } + else { + ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2); + } + uVar16 = 1; + if (ppppppiVar4 == (int ******)0xffffffff) { + uVar16 = 0; + } + } + iVar25 = iVar25 + -1; + uVar26 = uVar16; + pppppppiVar9 = pppppppiVar9 + 1; + } while (1 < iVar25); + } + bVar27 = 0; + if ((uVar16 & 0xff) != 0) { + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = local_578; + iVar25 = local_578; + } + else { + iVar25 = (**(code **)(*param_2 + 0x34))(param_2,local_578); + } + bVar27 = 1; + if (iVar25 == -1) { + bVar27 = 0; + } + } + iVar25 = (uVar8 & 0x3fffffff) + 1; + pppppppiVar9 = local_524 + -uVar8; + if (0 < (int)(uVar8 * 4)) { + do { + bVar28 = bVar27 != 0; + bVar27 = 0; + if (bVar28) { + ppppppiVar4 = *pppppppiVar9; + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = (int)ppppppiVar4; + } + else { + ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2); + } + bVar27 = 1; + if (ppppppiVar4 == (int ******)0xffffffff) { + bVar27 = 0; + } + } + iVar25 = iVar25 + -1; + pppppppiVar9 = pppppppiVar9 + 1; + } while (1 < iVar25); + } + } + else { + bVar27 = 0; + if ((local_520 & 0xff) != 0) { + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = iVar7; + iVar25 = iVar7; + } + else { + iVar25 = (**(code **)(*param_2 + 0x34))(param_2,iVar7); + } + if (iVar25 != -1) { + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = local_578; + iVar25 = local_578; + } + else { + iVar25 = (**(code **)(*param_2 + 0x34))(param_2,local_578); + } + bVar27 = 1; + if (iVar25 == -1) { + bVar27 = 0; + } + } + } + iVar25 = uVar13 - uVar8; + if (uVar8 != uVar13) { + do { + bVar28 = bVar27 != 0; + bVar27 = 0; + if (bVar28) { + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = iVar7; + iVar17 = iVar7; + } + else { + iVar17 = (**(code **)(*param_2 + 0x34))(param_2,iVar7); + } + bVar27 = 1; + if (iVar17 == -1) { + bVar27 = 0; + } + } + iVar25 = iVar25 + 1; + } while (iVar25 != 0); + } + iVar25 = iVar22; + pppppppiVar9 = pppppppiVar11; + if (0 < (int)uVar12) { + do { + bVar28 = bVar27 != 0; + bVar27 = 0; + if (bVar28) { + ppppppiVar4 = *pppppppiVar9; + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = (int)ppppppiVar4; + } + else { + ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2); + } + bVar27 = 1; + if (ppppppiVar4 == (int ******)0xffffffff) { + bVar27 = 0; + } + } + iVar25 = iVar25 + -1; + pppppppiVar9 = pppppppiVar9 + 1; + } while (1 < iVar25); + } + } + local_520 = local_520 & 0xffffff00; + local_520 = local_520 | bVar27; + } + bVar28 = iVar24 < 3; + iVar24 = iVar24 + 1; + } while (bVar28); + if (1 < (uint)((int)local_84 - (int)local_80 >> 2)) { + piVar1 = local_80 + 1; + uVar8 = local_520; + if (0 < (int)local_84 - (int)piVar1) { + iVar6 = ((uint)((int)local_84 - (int)piVar1) >> 2) + 1; + uVar12 = local_520; + do { + uVar8 = 0; + if ((uVar12 & 0xff) != 0) { + iVar7 = *piVar1; + piVar2 = (int *)param_2[5]; + if (piVar2 < (int *)param_2[6]) { + param_2[5] = (int)(piVar2 + 1); + *piVar2 = iVar7; + } + else { + iVar7 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar8 = 1; + if (iVar7 == -1) { + uVar8 = 0; + } + } + iVar6 = iVar6 + -1; + piVar1 = piVar1 + 1; + uVar12 = uVar8; + } while (1 < iVar6); + } + local_520 = uVar8 & 0xff | local_520 & 0xffffff00; + } + if ((iVar10 != 0) && ((uVar20 & 6) == 0)) { + uVar8 = local_520; + if (0 < iVar10) { + iVar6 = (uVar14 + 1) - uVar15; + uVar14 = local_520; + do { + uVar8 = 0; + if ((uVar14 & 0xff) != 0) { + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = param_6; + iVar7 = param_6; + } + else { + iVar7 = (**(code **)(*param_2 + 0x34))(param_2,param_6); + } + uVar8 = 1; + if (iVar7 == -1) { + uVar8 = 0; + } + } + iVar6 = iVar6 + -1; + uVar14 = uVar8; + } while (1 < iVar6); + } + local_520 = uVar8 & 0xff | local_520 & 0xffffff00; + } + *param_1 = param_2; + param_1[1] = local_520; + if ((((undefined4 ********)local_c8 != local_510) && (local_c8 != (int *******)0x0)) && + (&local_4cc != local_c8)) { + if ((uint)((int)local_510[0] - (int)local_c8) < 0x81) { + std::__node_alloc::_M_deallocate(local_c8,(int)local_510[0] - (int)local_c8); + } + else { + operator_delete(local_c8); + } + } +LAB_00045f22: + if (local_80 == local_c4) { + FUN_00045758(); + return; + } + if (local_80 != (int *)0x0) { + if ((uint)(local_c4[0] - (int)local_80) < 0x81) { + std::__node_alloc::_M_deallocate(local_80,local_c4[0] - (int)local_80); + uVar5 = FUN_00045758(); + if ((local_80 != local_c4) && (local_80 != (int *)0x0)) { + if ((uint)(local_c4[0] - (int)local_80) < 0x81) { + std::__node_alloc::_M_deallocate(local_80,local_c4[0] - (int)local_80); + } + else { + operator_delete(local_80); + } + } + if ((local_38 != local_7c) && (local_38 != (int *)0x0)) { + if ((uint)(local_7c[0] - (int)local_38) < 0x81) { + std::__node_alloc::_M_deallocate(local_38,local_7c[0] - (int)local_38); + } + else { + operator_delete(local_38); + } + } + if ((local_20 != local_34) && (local_20 != (int *)0x0)) { + if ((uint)(local_34[0] - (int)local_20) < 0x81) { + std::__node_alloc::_M_deallocate(local_20,local_34[0] - (int)local_20); + } + else { + operator_delete(local_20); + } + } + std::locale::~locale(alStack_1c); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar5); + } + operator_delete(local_80); + FUN_00045758(); + return; + } + FUN_00045758(); + return; +} + + + +### FUNC FUN_00045758 @ 00045758 + +void FUN_00045758(void) + +{ + undefined1 *puVar1; + int *unaff_r4; + + puVar1 = (undefined1 *)unaff_r4[0x11]; + if ((puVar1 != &stack0x0000052c) && (puVar1 != (undefined1 *)0x0)) { + if ((uint)(*unaff_r4 - (int)puVar1) < 0x81) { + std::__node_alloc::_M_deallocate(puVar1,*unaff_r4 - (int)puVar1); + } + else { + operator_delete(puVar1); + } + } + puVar1 = (undefined1 *)unaff_r4[0x17]; + if ((puVar1 != &stack0x00000574) && (puVar1 != (undefined1 *)0x0)) { + if ((uint)(unaff_r4[0x12] - (int)puVar1) < 0x81) { + std::__node_alloc::_M_deallocate(puVar1,unaff_r4[0x12] - (int)puVar1); + } + else { + operator_delete(puVar1); + } + } + std::locale::~locale((locale *)&stack0x0000058c); + return; +} + + + +### FUNC FUN_0004605c @ 0004605c + +void FUN_0004605c(facet *param_1) + +{ + std::locale::facet::~facet(param_1); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_000460f4 @ 000460f4 + +void FUN_000460f4(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9,undefined4 param_10,undefined4 param_11) + +{ + undefined4 local_20; + undefined4 local_1c; + undefined4 local_18; + undefined4 local_14; + undefined4 local_10; + undefined4 local_c; + + local_c = param_5; + local_1c = param_7; + local_18 = param_8; + local_20 = param_6; + local_14 = param_3; + local_10 = param_4; + FUN_00046654(param_1,&local_14,&local_20,param_9,param_10,param_11,0); + return; +} + + + +### FUNC FUN_0004612a @ 0004612a + +void FUN_0004612a(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9,undefined4 param_10,undefined4 param_11) + +{ + undefined4 local_20; + undefined4 local_1c; + undefined4 local_18; + undefined4 local_14; + undefined4 local_10; + undefined4 local_c; + + local_c = param_5; + local_1c = param_7; + local_18 = param_8; + local_20 = param_6; + local_14 = param_3; + local_10 = param_4; + FUN_00046e7c(param_1,&local_14,&local_20,param_9,param_10,param_11,0); + return; +} + + + +### FUNC FUN_00046160 @ 00046160 + +void FUN_00046160(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9,undefined4 param_10,undefined4 param_11) + +{ + undefined4 local_20; + undefined4 local_1c; + undefined4 local_18; + undefined4 local_14; + undefined4 local_10; + undefined4 local_c; + + local_c = param_5; + local_1c = param_7; + local_18 = param_8; + local_20 = param_6; + local_14 = param_3; + local_10 = param_4; + FUN_00047274(param_1,&local_14,&local_20,param_9,param_10,param_11,0); + return; +} + + + +### FUNC FUN_00046196 @ 00046196 + +void FUN_00046196(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9,undefined4 param_10,undefined4 param_11) + +{ + undefined4 local_20; + undefined4 local_1c; + undefined4 local_18; + undefined4 local_14; + undefined4 local_10; + undefined4 local_c; + + local_c = param_5; + local_1c = param_7; + local_18 = param_8; + local_20 = param_6; + local_14 = param_3; + local_10 = param_4; + FUN_00047664(param_1,&local_14,&local_20,param_9,param_10,param_11,0); + return; +} + + + +### FUNC FUN_000461cc @ 000461cc + +void FUN_000461cc(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9,undefined4 param_10,undefined4 param_11) + +{ + undefined4 local_20; + undefined4 local_1c; + undefined4 local_18; + undefined4 local_14; + undefined4 local_10; + undefined4 local_c; + + local_c = param_5; + local_1c = param_7; + local_18 = param_8; + local_20 = param_6; + local_14 = param_3; + local_10 = param_4; + FUN_00047a54(param_1,&local_14,&local_20,param_9,param_10,param_11,0); + return; +} + + + +### FUNC FUN_00046202 @ 00046202 + +void FUN_00046202(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9,undefined4 param_10,undefined4 param_11) + +{ + undefined4 local_20; + undefined4 local_1c; + undefined4 local_18; + undefined4 local_14; + undefined4 local_10; + undefined4 local_c; + + local_c = param_5; + local_1c = param_7; + local_18 = param_8; + local_20 = param_6; + local_14 = param_3; + local_10 = param_4; + FUN_000482e4(param_1,&local_14,&local_20,param_9,param_10,param_11,0); + return; +} + + + +### FUNC FUN_00046238 @ 00046238 + +void FUN_00046238(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9,byte *param_10,undefined4 *param_11) + +{ + undefined4 local_30 [2]; + undefined4 local_28; + undefined4 local_24; + undefined4 local_20; + undefined4 local_1c; + undefined4 local_18; + undefined4 local_14; + + local_14 = param_5; + local_24 = param_7; + local_20 = param_8; + local_28 = param_6; + local_1c = param_3; + local_18 = param_4; + FUN_0004845c(param_1,&local_1c,&local_28,param_9,param_10,local_30,0); + if (-1 < (int)((uint)*param_10 << 0x1d)) { + *param_11 = local_30[0]; + } + return; +} + + + +### FUNC FUN_0004627a @ 0004627a + +void FUN_0004627a(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9,undefined4 param_10,undefined4 param_11) + +{ + undefined4 local_20; + undefined4 local_1c; + undefined4 local_18; + undefined4 local_14; + undefined4 local_10; + undefined4 local_c; + + local_c = param_5; + local_1c = param_7; + local_18 = param_8; + local_20 = param_6; + local_14 = param_3; + local_10 = param_4; + FUN_000488bc(param_1,&local_14,&local_20,param_9,param_10,param_11,0); + return; +} + + + +### FUNC FUN_000462b0 @ 000462b0 + +void FUN_000462b0(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9,undefined4 param_10,undefined4 param_11) + +{ + undefined4 local_20; + undefined4 local_1c; + undefined4 local_18; + undefined4 local_14; + undefined4 local_10; + undefined4 local_c; + + local_c = param_5; + local_1c = param_7; + local_18 = param_8; + local_20 = param_6; + local_14 = param_3; + local_10 = param_4; + FUN_00048a34(param_1,&local_14,&local_20,param_9,param_10,param_11,0); + return; +} + + + +### FUNC FUN_000462e6 @ 000462e6 + +void FUN_000462e6(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9,undefined4 param_10,undefined4 param_11) + +{ + undefined4 local_20; + undefined4 local_1c; + undefined4 local_18; + undefined4 local_14; + undefined4 local_10; + undefined4 local_c; + + local_c = param_5; + local_1c = param_7; + local_18 = param_8; + local_20 = param_6; + local_14 = param_3; + local_10 = param_4; + FUN_0004845c(param_1,&local_14,&local_20,param_9,param_10,param_11,0); + return; +} + + + +### FUNC FUN_0004631c @ 0004631c + +void FUN_0004631c(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, + undefined4 param_6) + +{ + bool bVar1; + bool bVar2; + locale *this; + int *piVar3; + int iVar4; + int iVar5; + bool bVar6; + bool bVar7; + uint uVar8; + uint uVar9; + char cVar10; + int local_a4 [16]; + int local_64; + int *local_60; + int local_5c [16]; + int local_1c; + int *local_18; + + this = (locale *)std::locale::locale((locale *)local_5c,(locale *)(param_4 + 0x20)); + piVar3 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct::id); + std::locale::~locale((locale *)local_5c); + (**(code **)(*piVar3 + 0x14))(local_5c,piVar3); + (**(code **)(*piVar3 + 0x18))(local_a4,piVar3); + cVar10 = *(char *)((int)param_2 + 9); + bVar1 = true; + uVar9 = 0; + bVar7 = true; + while( true ) { + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (cVar10 == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_2[1] = iVar4; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar4 == -1; + } + piVar3 = (int *)*param_3; + if ((piVar3 == (int *)0x0) || (*(char *)((int)param_3 + 9) != '\0')) { + cVar10 = (char)param_3[2]; + } + else { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_3[1] = iVar4; + *(undefined1 *)((int)param_3 + 9) = 1; + cVar10 = iVar4 == -1; + *(char *)(param_3 + 2) = cVar10; + } + if ((char)param_2[2] == cVar10) goto code_r0x000464b6; + if (*(char *)((int)param_2 + 9) == '\0') { + piVar3 = (int *)*param_2; + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_2[1] = iVar4; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar4 == -1; + } + else { + iVar4 = param_2[1]; + } + bVar6 = false; + if ((bVar1) && (bVar6 = true, iVar4 != local_18[uVar9])) { + bVar6 = false; + } + bVar1 = bVar6; + bVar6 = false; + if ((bVar7) && (bVar6 = true, iVar4 != local_60[uVar9])) { + bVar6 = false; + } + uVar8 = uVar9 + 1; + bVar2 = false; + bVar7 = false; + if (!(bool)(bVar1 | bVar6)) goto LAB_000464ca; + if ((bVar1) && ((uint)(local_1c - (int)local_18 >> 2) <= uVar8)) break; + if ((bVar6) && (bVar2 = bVar1, bVar7 = true, (uint)(local_64 - (int)local_60 >> 2) <= uVar8)) + goto LAB_000464ca; + piVar3 = (int *)*param_2; + if ((uint)piVar3[2] < (uint)piVar3[3]) { + piVar3[2] = piVar3[2] + 4; + } + else { + (**(code **)(*piVar3 + 0x24))(); + } + cVar10 = '\0'; + *(undefined1 *)((int)param_2 + 9) = 0; + uVar9 = uVar8; + bVar7 = bVar6; + } + bVar2 = true; + bVar7 = bVar6; +LAB_000464ca: + uVar9 = uVar9 + 1; + piVar3 = (int *)*param_2; + if ((uint)piVar3[2] < (uint)piVar3[3]) { + piVar3[2] = piVar3[2] + 4; + } + else { + (**(code **)(*piVar3 + 0x24))(); + } + *(undefined1 *)((int)param_2 + 9) = 0; + bVar1 = bVar2; +code_r0x000464b6: + bVar1 = bVar1 && (uint)(local_1c - (int)local_18 >> 2) <= uVar9; + bVar6 = false; + if ((bVar7) && (bVar6 = true, uVar9 < (uint)(local_64 - (int)local_60 >> 2))) { + bVar6 = false; + } + if ((bVar1) || (bVar6)) { + *param_5 = 0; + *(bool *)param_6 = bVar1; + } + else { + *param_5 = 4; + } + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_2[1] = iVar4; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar4 == -1; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_3[1] = iVar4; + *(undefined1 *)((int)param_3 + 9) = 1; + *(bool *)(param_3 + 2) = iVar4 == -1; + } + if ((char)param_2[2] == (char)param_3[2]) { + *param_5 = *param_5 | 2; + } + iVar4 = param_2[1]; + iVar5 = param_2[2]; + *param_1 = *param_2; + param_1[1] = iVar4; + param_1[2] = iVar5; + if ((local_60 != local_a4) && (local_60 != (int *)0x0)) { + if ((uint)(local_a4[0] - (int)local_60) < 0x81) { + std::__node_alloc::_M_deallocate(local_60,local_a4[0] - (int)local_60); + } + else { + operator_delete(local_60); + } + } + if ((local_18 != local_5c) && (local_18 != (int *)0x0)) { + if (0x80 < (uint)(local_5c[0] - (int)local_18)) { + operator_delete(local_18); + return; + } + std::__node_alloc::_M_deallocate(local_18,local_5c[0] - (int)local_18); + } + return; +} + + + +### FUNC FUN_00046654 @ 00046654 + +void FUN_00046654(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, + undefined4 *param_6) + +{ + locale *this; + undefined4 uVar1; + uint uVar2; + int *piVar3; + int iVar4; + uint uVar5; + int iVar6; + undefined1 auStack_34 [4]; + int local_30 [5]; + int *local_1c; + locale alStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); + uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); + uVar2 = FUN_00046858(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_2[1] = iVar4; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar4 == -1; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_3[1] = iVar4; + *(undefined1 *)((int)param_3 + 9) = 1; + *(bool *)(param_3 + 2) = iVar4 == -1; + } + if ((char)param_2[2] == (char)param_3[2]) { + uVar5 = 4; + if ((uVar2 & 1) != 0) { + uVar5 = 0; + *param_6 = 0; + } + } + else { + piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); + uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); + (**(code **)(*piVar3 + 0x10))(local_30,piVar3); + iVar4 = FUN_00046c84(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, + local_30,auStack_34); + if ((local_1c != local_30) && (local_1c != (int *)0x0)) { + if ((uint)(local_30[0] - (int)local_1c) < 0x81) { + std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); + } + else { + operator_delete(local_1c); + } + } + uVar5 = 0; + if (iVar4 == 0) { + uVar5 = 4; + } + } + *param_5 = uVar5; + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_2[1] = iVar4; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar4 == -1; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_3[1] = iVar4; + *(undefined1 *)((int)param_3 + 9) = 1; + *(bool *)(param_3 + 2) = iVar4 == -1; + } + if ((char)param_2[2] == (char)param_3[2]) { + *param_5 = *param_5 | 2; + } + iVar4 = param_2[1]; + iVar6 = param_2[2]; + *param_1 = *param_2; + param_1[1] = iVar4; + param_1[2] = iVar6; + std::locale::~locale(alStack_18); + return; +} + + + +### FUNC FUN_00046858 @ 00046858 + +uint FUN_00046858(int *param_1,int *param_2,uint param_3,int *param_4) + +{ + bool bVar1; + undefined4 uVar2; + int iVar3; + int *piVar4; + uint uVar5; + uint uVar6; + uint uVar7; + int local_28; + int local_24; + int local_20; + int local_1c; + int local_18; + + uVar2 = std::priv::__narrow_atoms(); + iVar3 = std::priv::__narrow_atoms(); + (**(code **)(*param_4 + 0x2c))(param_4,uVar2,iVar3 + 5,&local_28); + if (*(char *)((int)param_1 + 9) == '\0') { + piVar4 = (int *)*param_1; + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar3 = *(int *)piVar4[2]; + } + else { + iVar3 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = iVar3; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar3 == -1; + } + else { + iVar3 = param_1[1]; + } + if (iVar3 == local_24) { + piVar4 = (int *)*param_1; + if ((uint)piVar4[2] < (uint)piVar4[3]) { + piVar4[2] = piVar4[2] + 4; + uVar5 = 2; + } + else { + (**(code **)(*piVar4 + 0x24))(); + uVar5 = 2; + } +LAB_000468f8: + bVar1 = false; + *(undefined1 *)((int)param_1 + 9) = 0; + } + else { + uVar5 = 0; + bVar1 = true; + if (iVar3 == local_28) { + piVar4 = (int *)*param_1; + if ((uint)piVar4[2] < (uint)piVar4[3]) { + piVar4[2] = piVar4[2] + 4; + } + else { + (**(code **)(*piVar4 + 0x24))(); + } + uVar5 = 0; + goto LAB_000468f8; + } + } + param_3 = param_3 & 0x38; + uVar6 = 0; + if (param_3 == 0x20) { + uVar7 = 0x20; + goto LAB_00046c7a; + } + if (param_3 != 0x10) { + if (param_3 == 8) { + uVar7 = 0x28; + goto LAB_00046c7a; + } + piVar4 = (int *)*param_1; + if ((piVar4 != (int *)0x0) && (!bVar1)) { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar3 = *(int *)piVar4[2]; + } + else { + iVar3 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = iVar3; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar3 == -1; + } + piVar4 = (int *)*param_2; + if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar3 = *(int *)piVar4[2]; + } + else { + iVar3 = (**(code **)(*piVar4 + 0x20))(); + } + param_2[1] = iVar3; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar3 == -1; + } + uVar7 = 0x28; + if ((char)param_1[2] == (char)param_2[2]) goto LAB_00046c7a; + if (*(char *)((int)param_1 + 9) == '\0') { + piVar4 = (int *)*param_1; + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar3 = *(int *)piVar4[2]; + } + else { + iVar3 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = iVar3; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar3 == -1; + } + else { + iVar3 = param_1[1]; + } + if (iVar3 != local_20) goto LAB_00046c7a; + piVar4 = (int *)*param_1; + if ((uint)piVar4[2] < (uint)piVar4[3]) { + piVar4[2] = piVar4[2] + 4; + *(undefined1 *)((int)param_1 + 9) = 0; +LAB_00046b1e: + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar3 = *(int *)piVar4[2]; + } + else { + iVar3 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = iVar3; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar3 == -1; + } + else { + (**(code **)(*piVar4 + 0x24))(); + *(undefined1 *)((int)param_1 + 9) = 0; + piVar4 = (int *)*param_1; + if (piVar4 != (int *)0x0) goto LAB_00046b1e; + } + piVar4 = (int *)*param_2; + if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar3 = *(int *)piVar4[2]; + } + else { + iVar3 = (**(code **)(*piVar4 + 0x20))(); + } + param_2[1] = iVar3; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar3 == -1; + } + uVar6 = 1; + if ((char)param_1[2] == (char)param_2[2]) { + uVar7 = 0x20; + } + else { + if (*(char *)((int)param_1 + 9) == '\0') { + piVar4 = (int *)*param_1; + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar3 = *(int *)piVar4[2]; + } + else { + iVar3 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = iVar3; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar3 == -1; + } + else { + iVar3 = param_1[1]; + } + if ((iVar3 == local_1c) || (uVar7 = 0x20, iVar3 == local_18)) { + piVar4 = (int *)*param_1; + if ((uint)piVar4[2] < (uint)piVar4[3]) { + piVar4[2] = piVar4[2] + 4; + } + else { + (**(code **)(*piVar4 + 0x24))(); + } + uVar6 = 0; + *(undefined1 *)((int)param_1 + 9) = 0; + uVar7 = 0x40; + } + } + goto LAB_00046c7a; + } + piVar4 = (int *)*param_1; + if ((piVar4 != (int *)0x0) && (!bVar1)) { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar3 = *(int *)piVar4[2]; + } + else { + iVar3 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = iVar3; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar3 == -1; + } + piVar4 = (int *)*param_2; + if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar3 = *(int *)piVar4[2]; + } + else { + iVar3 = (**(code **)(*piVar4 + 0x20))(); + } + param_2[1] = iVar3; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar3 == -1; + } + uVar7 = 0x40; + if ((char)param_1[2] == (char)param_2[2]) goto LAB_00046c7a; + if (*(char *)((int)param_1 + 9) == '\0') { + piVar4 = (int *)*param_1; + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar3 = *(int *)piVar4[2]; + } + else { + iVar3 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = iVar3; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar3 == -1; + } + else { + iVar3 = param_1[1]; + } + if (iVar3 != local_20) goto LAB_00046c7a; + piVar4 = (int *)*param_1; + if ((uint)piVar4[2] < (uint)piVar4[3]) { + piVar4[2] = piVar4[2] + 4; + *(undefined1 *)((int)param_1 + 9) = 0; +LAB_00046a8a: + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar3 = *(int *)piVar4[2]; + } + else { + iVar3 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = iVar3; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar3 == -1; + } + else { + (**(code **)(*piVar4 + 0x24))(); + *(undefined1 *)((int)param_1 + 9) = 0; + piVar4 = (int *)*param_1; + if (piVar4 != (int *)0x0) goto LAB_00046a8a; + } + piVar4 = (int *)*param_2; + if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar3 = *(int *)piVar4[2]; + } + else { + iVar3 = (**(code **)(*piVar4 + 0x20))(); + } + param_2[1] = iVar3; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar3 == -1; + } + uVar6 = 1; + if ((char)param_1[2] != (char)param_2[2]) { + if (*(char *)((int)param_1 + 9) == '\0') { + piVar4 = (int *)*param_1; + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar3 = *(int *)piVar4[2]; + } + else { + iVar3 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = iVar3; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar3 == -1; + } + else { + iVar3 = param_1[1]; + } + if ((iVar3 == local_1c) || (iVar3 == local_18)) { + piVar4 = (int *)*param_1; + if ((uint)piVar4[2] < (uint)piVar4[3]) { + piVar4[2] = piVar4[2] + 4; + } + else { + (**(code **)(*piVar4 + 0x24))(); + } + uVar6 = 0; + *(undefined1 *)((int)param_1 + 9) = 0; + } + } +LAB_00046c7a: + return uVar7 | uVar5 | uVar6; +} + + + +### FUNC FUN_00046c84 @ 00046c84 + +uint FUN_00046c84(int *param_1,int *param_2,int param_3,int *param_4,int param_5,int param_6, + uint param_7,int param_8) + +{ + char cVar1; + int iVar2; + int iVar3; + int *piVar4; + int iVar5; + uint uVar6; + bool bVar7; + int iVar8; + int iVar9; + char *pcVar10; + char cVar11; + int local_98; + int local_70; + uint local_68; + int local_5c; + int local_58; + char acStack_54 [64]; + + iVar9 = *(int *)(param_8 + 0x10); + iVar2 = *(int *)(param_8 + 0x14); + local_5c = 0; + cVar11 = *(char *)((int)param_1 + 9); + local_68 = 1; + local_98 = -0x80000000; + iVar3 = __divsi3(0x80000000,param_3); + local_70 = param_5; + cVar1 = '\0'; + local_58 = 0; + bVar7 = false; + uVar6 = (uint)(cVar11 == '\0'); + while( true ) { + pcVar10 = acStack_54 + local_5c; + piVar4 = (int *)*param_1; + if ((piVar4 != (int *)0x0) && (uVar6 != 0)) { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar5 = *(int *)piVar4[2]; + } + else { + iVar5 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = iVar5; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar5 == -1; + } + piVar4 = (int *)*param_2; + if ((piVar4 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) { + cVar11 = (char)param_2[2]; + } + else { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar5 = *(int *)piVar4[2]; + } + else { + iVar5 = (**(code **)(*piVar4 + 0x20))(); + } + param_2[1] = iVar5; + *(undefined1 *)((int)param_2 + 9) = 1; + cVar11 = iVar5 == -1; + *(char *)(param_2 + 2) = cVar11; + } + if ((char)param_1[2] == cVar11) break; + if (*(char *)((int)param_1 + 9) == '\0') { + piVar4 = (int *)*param_1; + if ((uint *)piVar4[2] < (uint *)piVar4[3]) { + uVar6 = *(uint *)piVar4[2]; + } + else { + uVar6 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = uVar6; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = uVar6 == 0xffffffff; + } + else { + uVar6 = param_1[1]; + } + iVar5 = local_58; + if (uVar6 == param_7 && iVar2 != iVar9) { + *pcVar10 = cVar1; + local_5c = local_5c + 1; + cVar1 = '\0'; + } + else { + iVar8 = 0xff; + if (uVar6 < 0x80) { + iVar8 = std::priv::__digit_val_table(uVar6); + } + if (param_3 <= iVar8) break; + cVar1 = cVar1 + '\x01'; + local_70 = local_70 + 1; + if (local_58 < iVar3) { + bVar7 = true; + } + else { + iVar5 = local_58 * param_3 - iVar8; + bVar7 = (bool)(bVar7 | (local_58 != 0 && local_58 <= iVar5)); + } + } + piVar4 = (int *)*param_1; + if ((uint)piVar4[2] < (uint)piVar4[3]) { + piVar4[2] = piVar4[2] + 4; + } + else { + (**(code **)(*piVar4 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 9) = 0; + uVar6 = local_68; + local_58 = iVar5; + } + if ((iVar2 != iVar9) && (local_5c != 0)) { + *pcVar10 = cVar1; + pcVar10 = acStack_54 + local_5c + 1; + } + uVar6 = 0; + if (0 < local_70) { + if (bVar7) { + if (param_6 == 0) { + local_98 = 0x7fffffff; + } + *param_4 = local_98; + } + else { + if (param_6 == 0) { + local_58 = -local_58; + } + *param_4 = local_58; + uVar6 = local_68; + if (iVar2 != iVar9) { + uVar6 = std::priv::__valid_grouping + (acStack_54,pcVar10,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)) + ; + } + } + } + return uVar6; +} + + + +### FUNC FUN_00046e7c @ 00046e7c + +void FUN_00046e7c(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, + undefined2 *param_6) + +{ + locale *this; + undefined4 uVar1; + uint uVar2; + int *piVar3; + int iVar4; + uint uVar5; + int iVar6; + undefined1 auStack_34 [4]; + int local_30 [5]; + int *local_1c; + locale alStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); + uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); + uVar2 = FUN_00046858(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_2[1] = iVar4; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar4 == -1; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_3[1] = iVar4; + *(undefined1 *)((int)param_3 + 9) = 1; + *(bool *)(param_3 + 2) = iVar4 == -1; + } + if ((char)param_2[2] == (char)param_3[2]) { + uVar5 = 4; + if ((uVar2 & 1) != 0) { + uVar5 = 0; + *param_6 = 0; + } + } + else { + piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); + uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); + (**(code **)(*piVar3 + 0x10))(local_30,piVar3); + iVar4 = FUN_00047080(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, + local_30,auStack_34); + if ((local_1c != local_30) && (local_1c != (int *)0x0)) { + if ((uint)(local_30[0] - (int)local_1c) < 0x81) { + std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); + } + else { + operator_delete(local_1c); + } + } + uVar5 = 0; + if (iVar4 == 0) { + uVar5 = 4; + } + } + *param_5 = uVar5; + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_2[1] = iVar4; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar4 == -1; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_3[1] = iVar4; + *(undefined1 *)((int)param_3 + 9) = 1; + *(bool *)(param_3 + 2) = iVar4 == -1; + } + if ((char)param_2[2] == (char)param_3[2]) { + *param_5 = *param_5 | 2; + } + iVar4 = param_2[1]; + iVar6 = param_2[2]; + *param_1 = *param_2; + param_1[1] = iVar4; + param_1[2] = iVar6; + std::locale::~locale(alStack_18); + return; +} + + + +### FUNC FUN_00047080 @ 00047080 + +uint FUN_00047080(int *param_1,int *param_2,uint param_3,short *param_4,int param_5,int param_6, + uint param_7,int param_8) + +{ + bool bVar1; + int iVar2; + uint uVar3; + int *piVar4; + int iVar5; + uint uVar6; + char cVar7; + int iVar8; + uint uVar9; + char *pcVar10; + char cVar11; + int local_70; + uint local_68; + uint local_5c; + int local_58; + char acStack_54 [64]; + + iVar8 = *(int *)(param_8 + 0x10); + iVar2 = *(int *)(param_8 + 0x14); + local_58 = 0; + cVar11 = *(char *)((int)param_1 + 9); + local_68 = 1; + uVar3 = __udivsi3(0xffff,param_3 & 0xffff); + local_70 = param_5; + cVar7 = '\0'; + local_5c = 0; + bVar1 = false; + uVar6 = (uint)(cVar11 == '\0'); + while( true ) { + pcVar10 = acStack_54 + local_58; + piVar4 = (int *)*param_1; + if ((piVar4 != (int *)0x0) && (uVar6 != 0)) { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar5 = *(int *)piVar4[2]; + } + else { + iVar5 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = iVar5; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar5 == -1; + } + piVar4 = (int *)*param_2; + if ((piVar4 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) { + cVar11 = (char)param_2[2]; + } + else { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar5 = *(int *)piVar4[2]; + } + else { + iVar5 = (**(code **)(*piVar4 + 0x20))(); + } + param_2[1] = iVar5; + *(undefined1 *)((int)param_2 + 9) = 1; + cVar11 = iVar5 == -1; + *(char *)(param_2 + 2) = cVar11; + } + if ((char)param_1[2] == cVar11) break; + if (*(char *)((int)param_1 + 9) == '\0') { + piVar4 = (int *)*param_1; + if ((uint *)piVar4[2] < (uint *)piVar4[3]) { + uVar6 = *(uint *)piVar4[2]; + } + else { + uVar6 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = uVar6; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = uVar6 == 0xffffffff; + } + else { + uVar6 = param_1[1]; + } + uVar9 = local_5c; + if (uVar6 == param_7 && iVar2 != iVar8) { + *pcVar10 = cVar7; + local_58 = local_58 + 1; + cVar7 = '\0'; + } + else { + iVar5 = 0xff; + if (uVar6 < 0x80) { + iVar5 = std::priv::__digit_val_table(uVar6); + } + if ((int)param_3 <= iVar5) break; + uVar6 = local_5c & 0xffff; + cVar7 = cVar7 + '\x01'; + local_70 = local_70 + 1; + if (uVar3 < uVar6) { + bVar1 = true; + } + else { + uVar9 = iVar5 + uVar6 * param_3; + if ((local_5c & 0xffff) != 0) { + bVar1 = (bool)(bVar1 | (uVar9 & 0xffff) <= uVar6); + } + } + } + piVar4 = (int *)*param_1; + if ((uint)piVar4[2] < (uint)piVar4[3]) { + piVar4[2] = piVar4[2] + 4; + } + else { + (**(code **)(*piVar4 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 9) = 0; + uVar6 = local_68; + local_5c = uVar9; + } + if ((iVar2 != iVar8) && (local_58 != 0)) { + *pcVar10 = cVar7; + pcVar10 = acStack_54 + local_58 + 1; + } + uVar6 = 0; + if (0 < local_70) { + if (bVar1) { + *param_4 = -1; + } + else { + if (param_6 == 1) { + local_5c._0_2_ = -(short)local_5c; + } + *param_4 = (short)local_5c; + uVar6 = local_68; + if (iVar2 != iVar8) { + uVar6 = std::priv::__valid_grouping + (acStack_54,pcVar10,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)) + ; + } + } + } + return uVar6; +} + + + +### FUNC FUN_00047274 @ 00047274 + +void FUN_00047274(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, + undefined4 *param_6) + +{ + locale *this; + undefined4 uVar1; + uint uVar2; + int *piVar3; + int iVar4; + uint uVar5; + int iVar6; + undefined1 auStack_34 [4]; + int local_30 [5]; + int *local_1c; + locale alStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); + uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); + uVar2 = FUN_00046858(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_2[1] = iVar4; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar4 == -1; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_3[1] = iVar4; + *(undefined1 *)((int)param_3 + 9) = 1; + *(bool *)(param_3 + 2) = iVar4 == -1; + } + if ((char)param_2[2] == (char)param_3[2]) { + uVar5 = 4; + if ((uVar2 & 1) != 0) { + uVar5 = 0; + *param_6 = 0; + } + } + else { + piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); + uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); + (**(code **)(*piVar3 + 0x10))(local_30,piVar3); + iVar4 = FUN_00047478(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, + local_30,auStack_34); + if ((local_1c != local_30) && (local_1c != (int *)0x0)) { + if ((uint)(local_30[0] - (int)local_1c) < 0x81) { + std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); + } + else { + operator_delete(local_1c); + } + } + uVar5 = 0; + if (iVar4 == 0) { + uVar5 = 4; + } + } + *param_5 = uVar5; + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_2[1] = iVar4; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar4 == -1; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_3[1] = iVar4; + *(undefined1 *)((int)param_3 + 9) = 1; + *(bool *)(param_3 + 2) = iVar4 == -1; + } + if ((char)param_2[2] == (char)param_3[2]) { + *param_5 = *param_5 | 2; + } + iVar4 = param_2[1]; + iVar6 = param_2[2]; + *param_1 = *param_2; + param_1[1] = iVar4; + param_1[2] = iVar6; + std::locale::~locale(alStack_18); + return; +} + + + +### FUNC FUN_00047478 @ 00047478 + +uint FUN_00047478(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6, + uint param_7,int param_8) + +{ + char cVar1; + int iVar2; + uint uVar3; + int *piVar4; + int iVar5; + uint uVar6; + bool bVar7; + int iVar8; + uint uVar9; + char *pcVar10; + char cVar11; + int local_70; + uint local_68; + int local_5c; + uint local_58; + char acStack_54 [64]; + + iVar8 = *(int *)(param_8 + 0x10); + iVar2 = *(int *)(param_8 + 0x14); + local_5c = 0; + cVar11 = *(char *)((int)param_1 + 9); + local_68 = 1; + uVar3 = __udivsi3(0xffffffff,param_3); + local_70 = param_5; + cVar1 = '\0'; + local_58 = 0; + bVar7 = false; + uVar6 = (uint)(cVar11 == '\0'); + while( true ) { + pcVar10 = acStack_54 + local_5c; + piVar4 = (int *)*param_1; + if ((piVar4 != (int *)0x0) && (uVar6 != 0)) { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar5 = *(int *)piVar4[2]; + } + else { + iVar5 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = iVar5; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar5 == -1; + } + piVar4 = (int *)*param_2; + if ((piVar4 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) { + cVar11 = (char)param_2[2]; + } + else { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar5 = *(int *)piVar4[2]; + } + else { + iVar5 = (**(code **)(*piVar4 + 0x20))(); + } + param_2[1] = iVar5; + *(undefined1 *)((int)param_2 + 9) = 1; + cVar11 = iVar5 == -1; + *(char *)(param_2 + 2) = cVar11; + } + if ((char)param_1[2] == cVar11) break; + if (*(char *)((int)param_1 + 9) == '\0') { + piVar4 = (int *)*param_1; + if ((uint *)piVar4[2] < (uint *)piVar4[3]) { + uVar6 = *(uint *)piVar4[2]; + } + else { + uVar6 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = uVar6; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = uVar6 == 0xffffffff; + } + else { + uVar6 = param_1[1]; + } + uVar9 = local_58; + if (uVar6 == param_7 && iVar2 != iVar8) { + *pcVar10 = cVar1; + local_5c = local_5c + 1; + cVar1 = '\0'; + } + else { + iVar5 = 0xff; + if (uVar6 < 0x80) { + iVar5 = std::priv::__digit_val_table(uVar6); + } + if (param_3 <= iVar5) break; + cVar1 = cVar1 + '\x01'; + local_70 = local_70 + 1; + if (uVar3 < local_58) { + bVar7 = true; + } + else { + uVar9 = iVar5 + local_58 * param_3; + bVar7 = (bool)(bVar7 | (local_58 != 0 && uVar9 <= local_58)); + } + } + piVar4 = (int *)*param_1; + if ((uint)piVar4[2] < (uint)piVar4[3]) { + piVar4[2] = piVar4[2] + 4; + } + else { + (**(code **)(*piVar4 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 9) = 0; + uVar6 = local_68; + local_58 = uVar9; + } + if ((iVar2 != iVar8) && (local_5c != 0)) { + *pcVar10 = cVar1; + pcVar10 = acStack_54 + local_5c + 1; + } + uVar6 = 0; + if (0 < local_70) { + if (bVar7) { + *param_4 = 0xffffffff; + } + else { + uVar6 = -local_58; + if (param_6 == 0) { + uVar6 = local_58; + } + *param_4 = uVar6; + uVar6 = local_68; + if (iVar2 != iVar8) { + uVar6 = std::priv::__valid_grouping + (acStack_54,pcVar10,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)) + ; + } + } + } + return uVar6; +} + + + +### FUNC FUN_00047664 @ 00047664 + +void FUN_00047664(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, + undefined4 *param_6) + +{ + locale *this; + undefined4 uVar1; + uint uVar2; + int *piVar3; + int iVar4; + uint uVar5; + int iVar6; + undefined1 auStack_34 [4]; + int local_30 [5]; + int *local_1c; + locale alStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); + uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); + uVar2 = FUN_00046858(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_2[1] = iVar4; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar4 == -1; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_3[1] = iVar4; + *(undefined1 *)((int)param_3 + 9) = 1; + *(bool *)(param_3 + 2) = iVar4 == -1; + } + if ((char)param_2[2] == (char)param_3[2]) { + uVar5 = 4; + if ((uVar2 & 1) != 0) { + uVar5 = 0; + *param_6 = 0; + } + } + else { + piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); + uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); + (**(code **)(*piVar3 + 0x10))(local_30,piVar3); + iVar4 = FUN_00047868(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, + local_30,auStack_34); + if ((local_1c != local_30) && (local_1c != (int *)0x0)) { + if ((uint)(local_30[0] - (int)local_1c) < 0x81) { + std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); + } + else { + operator_delete(local_1c); + } + } + uVar5 = 0; + if (iVar4 == 0) { + uVar5 = 4; + } + } + *param_5 = uVar5; + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_2[1] = iVar4; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar4 == -1; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_3[1] = iVar4; + *(undefined1 *)((int)param_3 + 9) = 1; + *(bool *)(param_3 + 2) = iVar4 == -1; + } + if ((char)param_2[2] == (char)param_3[2]) { + *param_5 = *param_5 | 2; + } + iVar4 = param_2[1]; + iVar6 = param_2[2]; + *param_1 = *param_2; + param_1[1] = iVar4; + param_1[2] = iVar6; + std::locale::~locale(alStack_18); + return; +} + + + +### FUNC FUN_00047868 @ 00047868 + +uint FUN_00047868(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6, + uint param_7,int param_8) + +{ + char cVar1; + int iVar2; + uint uVar3; + int *piVar4; + int iVar5; + uint uVar6; + bool bVar7; + int iVar8; + uint uVar9; + char *pcVar10; + char cVar11; + int local_70; + uint local_68; + int local_5c; + uint local_58; + char acStack_54 [64]; + + iVar8 = *(int *)(param_8 + 0x10); + iVar2 = *(int *)(param_8 + 0x14); + local_5c = 0; + cVar11 = *(char *)((int)param_1 + 9); + local_68 = 1; + uVar3 = __udivsi3(0xffffffff,param_3); + local_70 = param_5; + cVar1 = '\0'; + local_58 = 0; + bVar7 = false; + uVar6 = (uint)(cVar11 == '\0'); + while( true ) { + pcVar10 = acStack_54 + local_5c; + piVar4 = (int *)*param_1; + if ((piVar4 != (int *)0x0) && (uVar6 != 0)) { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar5 = *(int *)piVar4[2]; + } + else { + iVar5 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = iVar5; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar5 == -1; + } + piVar4 = (int *)*param_2; + if ((piVar4 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) { + cVar11 = (char)param_2[2]; + } + else { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar5 = *(int *)piVar4[2]; + } + else { + iVar5 = (**(code **)(*piVar4 + 0x20))(); + } + param_2[1] = iVar5; + *(undefined1 *)((int)param_2 + 9) = 1; + cVar11 = iVar5 == -1; + *(char *)(param_2 + 2) = cVar11; + } + if ((char)param_1[2] == cVar11) break; + if (*(char *)((int)param_1 + 9) == '\0') { + piVar4 = (int *)*param_1; + if ((uint *)piVar4[2] < (uint *)piVar4[3]) { + uVar6 = *(uint *)piVar4[2]; + } + else { + uVar6 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = uVar6; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = uVar6 == 0xffffffff; + } + else { + uVar6 = param_1[1]; + } + uVar9 = local_58; + if (uVar6 == param_7 && iVar2 != iVar8) { + *pcVar10 = cVar1; + local_5c = local_5c + 1; + cVar1 = '\0'; + } + else { + iVar5 = 0xff; + if (uVar6 < 0x80) { + iVar5 = std::priv::__digit_val_table(uVar6); + } + if (param_3 <= iVar5) break; + cVar1 = cVar1 + '\x01'; + local_70 = local_70 + 1; + if (uVar3 < local_58) { + bVar7 = true; + } + else { + uVar9 = iVar5 + local_58 * param_3; + bVar7 = (bool)(bVar7 | (local_58 != 0 && uVar9 <= local_58)); + } + } + piVar4 = (int *)*param_1; + if ((uint)piVar4[2] < (uint)piVar4[3]) { + piVar4[2] = piVar4[2] + 4; + } + else { + (**(code **)(*piVar4 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 9) = 0; + uVar6 = local_68; + local_58 = uVar9; + } + if ((iVar2 != iVar8) && (local_5c != 0)) { + *pcVar10 = cVar1; + pcVar10 = acStack_54 + local_5c + 1; + } + uVar6 = 0; + if (0 < local_70) { + if (bVar7) { + *param_4 = 0xffffffff; + } + else { + uVar6 = -local_58; + if (param_6 == 0) { + uVar6 = local_58; + } + *param_4 = uVar6; + uVar6 = local_68; + if (iVar2 != iVar8) { + uVar6 = std::priv::__valid_grouping + (acStack_54,pcVar10,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)) + ; + } + } + } + return uVar6; +} + + + +### FUNC FUN_00047a54 @ 00047a54 + +/* WARNING: Restarted to delay deadcode elimination for space: stack */ + +void FUN_00047a54(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,float *param_6) + +{ + locale *this; + undefined4 uVar1; + undefined4 uVar2; + int iVar3; + int *piVar4; + int iVar5; + uint uVar6; + undefined1 *local_134 [4]; + undefined1 **local_124; + undefined1 local_120; + undefined1 auStack_11f [256]; + undefined1 auStack_1f [3]; + undefined1 **local_1c; + locale alStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); + uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); + uVar2 = std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); + __aeabi_memclr(auStack_11f,0x100); + local_120 = 0; + local_134[0] = auStack_1f; + local_124 = (undefined1 **)&local_120; + local_1c = (undefined1 **)&local_120; + iVar3 = FUN_00047bcc(local_134,param_2,param_3,uVar1,uVar2); + uVar6 = 4; + if (iVar3 == 1) { + uVar6 = 0; + std::priv::__string_to_float((__basic_iostring *)local_134,param_6); + } + *param_5 = uVar6; + piVar4 = (int *)*param_2; + if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar3 = *(int *)piVar4[2]; + } + else { + iVar3 = (**(code **)(*piVar4 + 0x20))(); + } + param_2[1] = iVar3; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar3 == -1; + } + piVar4 = (int *)*param_3; + if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar3 = *(int *)piVar4[2]; + } + else { + iVar3 = (**(code **)(*piVar4 + 0x20))(); + } + param_3[1] = iVar3; + *(undefined1 *)((int)param_3 + 9) = 1; + *(bool *)(param_3 + 2) = iVar3 == -1; + } + if ((char)param_2[2] == (char)param_3[2]) { + *param_5 = *param_5 | 2; + } + iVar3 = param_2[1]; + iVar5 = param_2[2]; + *param_1 = *param_2; + param_1[1] = iVar3; + param_1[2] = iVar5; + if (((local_1c != local_134) && (local_1c != (undefined1 **)0x0)) && + ((undefined1 **)&local_120 != local_1c)) { + if ((uint)((int)local_134[0] - (int)local_1c) < 0x81) { + std::__node_alloc::_M_deallocate(local_1c,(int)local_134[0] - (int)local_1c); + } + else { + operator_delete(local_1c); + } + } + std::locale::~locale(alStack_18); + return; +} + + + +### FUNC FUN_00047bcc @ 00047bcc + +undefined4 FUN_00047bcc(undefined4 param_1,int *param_2,int *param_3,ctype *param_4,int *param_5) + +{ + int iVar1; + uint uVar2; + int *piVar3; + int iVar4; + uint uVar5; + wchar_t wVar6; + undefined4 uVar7; + int local_74; + int local_70; + undefined2 local_6c; + wchar_t local_68; + wchar_t local_64; + wchar_t local_60; + wchar_t local_5c; + wchar_t awStack_58 [10]; + undefined1 local_30; + int local_2c [4]; + int *local_1c; + int *local_18; + + (**(code **)(*param_5 + 0x10))(local_2c,param_5); + local_30 = 1; + iVar1 = (**(code **)(*param_5 + 8))(param_5); + (**(code **)(*param_5 + 0xc))(param_5); + std::priv::_Initialize_get_float(param_4,&local_5c,&local_60,&local_64,&local_68,awStack_58); + FUN_00047f10(&local_74,*param_2,param_2[1],param_2[2],*param_3,param_3[1],param_3[2],param_1, + local_5c,local_60); + *(undefined2 *)(param_2 + 2) = local_6c; + *param_2 = local_74; + param_2[1] = local_70; + if (local_18 == local_1c) { + uVar2 = FUN_000481d4(param_2,*param_3,param_3[1],param_3[2],param_1,awStack_58); + } + else { + uVar2 = FUN_00048060(param_2); + } + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_2[1] = iVar4; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar4 == -1; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_3[1] = iVar4; + *(undefined1 *)((int)param_3 + 9) = 1; + *(bool *)(param_3 + 2) = iVar4 == -1; + } + uVar5 = 0; + if ((char)param_2[2] != (char)param_3[2]) { + if (*(char *)((int)param_2 + 9) == '\0') { + piVar3 = (int *)*param_2; + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_2[1] = iVar4; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar4 == -1; + } + else { + iVar4 = param_2[1]; + } + uVar5 = 0; + if (iVar4 == iVar1) { + FUN_00040cb0(param_1,0x2e); + piVar3 = (int *)*param_2; + if ((uint)piVar3[2] < (uint)piVar3[3]) { + piVar3[2] = piVar3[2] + 4; + } + else { + (**(code **)(*piVar3 + 0x24))(); + } + *(undefined1 *)((int)param_2 + 9) = 0; + uVar5 = FUN_000481d4(param_2,*param_3,param_3[1],param_3[2],param_1,awStack_58); + } + } + uVar7 = 0; + if ((uVar2 | uVar5) == 1) { + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar1 = *(int *)piVar3[2]; + } + else { + iVar1 = (**(code **)(*piVar3 + 0x20))(); + } + param_2[1] = iVar1; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar1 == -1; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar1 = *(int *)piVar3[2]; + } + else { + iVar1 = (**(code **)(*piVar3 + 0x20))(); + } + param_3[1] = iVar1; + *(undefined1 *)((int)param_3 + 9) = 1; + *(bool *)(param_3 + 2) = iVar1 == -1; + } + uVar7 = 1; + if ((char)param_2[2] != (char)param_3[2]) { + if (*(char *)((int)param_2 + 9) == '\0') { + piVar3 = (int *)*param_2; + if ((wchar_t *)piVar3[2] < (wchar_t *)piVar3[3]) { + wVar6 = *(wchar_t *)piVar3[2]; + } + else { + wVar6 = (**(code **)(*piVar3 + 0x20))(); + } + param_2[1] = wVar6; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = wVar6 == L'\xffffffff'; + } + else { + wVar6 = param_2[1]; + } + uVar7 = 1; + if ((wVar6 == local_64) || (wVar6 == local_68)) { + FUN_00040cb0(param_1,0x65); + piVar3 = (int *)*param_2; + if ((uint)piVar3[2] < (uint)piVar3[3]) { + piVar3[2] = piVar3[2] + 4; + } + else { + (**(code **)(*piVar3 + 0x24))(); + } + *(undefined1 *)((int)param_2 + 9) = 0; + FUN_00047f10(&local_74,*param_2,param_2[1],param_2[2],*param_3,param_3[1],param_3[2],param_1 + ,local_5c,local_60); + *(undefined2 *)(param_2 + 2) = local_6c; + *param_2 = local_74; + param_2[1] = local_70; + uVar7 = FUN_000481d4(param_2,*param_3,param_3[1],param_3[2],param_1,awStack_58); + } + } + } + if ((local_18 != local_2c) && (local_18 != (int *)0x0)) { + if ((uint)(local_2c[0] - (int)local_18) < 0x81) { + std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); + } + else { + operator_delete(local_18); + } + } + return uVar7; +} + + + +### FUNC FUN_00047f10 @ 00047f10 + +void FUN_00047f10(undefined4 *param_1,int *param_2,int param_3,uint param_4,int *param_5, + undefined4 param_6,uint param_7,undefined4 param_8,int param_9,int param_10) + +{ + int iVar1; + code *pcVar2; + int local_20; + + local_20 = param_3; + if ((param_2 != (int *)0x0) && ((param_4 & 0xff00) == 0)) { + if ((int *)param_2[2] < (int *)param_2[3]) { + local_20 = *(int *)param_2[2]; + } + else { + local_20 = (**(code **)(*param_2 + 0x20))(param_2); + } + param_4 = param_4 & 0xffff0000 | (uint)(local_20 == -1) | 0x100; + } + if ((param_5 != (int *)0x0) && ((param_7 & 0xff00) == 0)) { + if ((int *)param_5[2] < (int *)param_5[3]) { + iVar1 = *(int *)param_5[2]; + } + else { + iVar1 = (**(code **)(*param_5 + 0x20))(); + } + param_7 = (uint)(iVar1 == -1); + } + if ((param_4 & 0xff) == (param_7 & 0xff)) goto LAB_00048052; + if ((param_4 & 0xff00) == 0) { + if ((int *)param_2[2] < (int *)param_2[3]) { + local_20 = *(int *)param_2[2]; + } + else { + local_20 = (**(code **)(*param_2 + 0x20))(param_2); + } + param_4 = param_4 & 0xffff0000 | (uint)(local_20 == -1) | 0x100; + if (local_20 != param_9) goto LAB_0004801c; +LAB_00047fce: + if ((uint)param_2[2] < (uint)param_2[3]) { + param_2[2] = param_2[2] + 4; + local_20 = param_9; + } + else { + pcVar2 = *(code **)(*param_2 + 0x24); +LAB_00048046: + (*pcVar2)(param_2); + local_20 = param_9; + } + } + else { + if (local_20 == param_9) goto LAB_00047fce; +LAB_0004801c: + if (local_20 != param_10) goto LAB_00048052; + FUN_00040cb0(param_8,0x2d); + if ((uint)param_2[3] <= (uint)param_2[2]) { + pcVar2 = *(code **)(*param_2 + 0x24); + param_9 = param_10; + goto LAB_00048046; + } + param_2[2] = param_2[2] + 4; + local_20 = param_10; + } + param_4 = param_4 & 0xffff00ff; +LAB_00048052: + *param_1 = param_2; + param_1[1] = local_20; + param_1[2] = param_4; + return; +} + + + +### FUNC FUN_00048060 @ 00048060 + +undefined4 +FUN_00048060(int *param_1,int *param_2,undefined4 param_3,uint param_4,undefined4 param_5, + wchar_t *param_6,wchar_t param_7,int param_8,undefined1 *param_9) + +{ + char cVar1; + undefined1 uVar2; + int *piVar3; + int iVar4; + char *pcVar5; + bool bVar6; + undefined4 local_74; + int local_5c; + wchar_t local_58; + char local_54 [64]; + + local_5c = 0; + bVar6 = *(char *)((int)param_1 + 9) == '\0'; + cVar1 = '\0'; + local_74 = 0; + while( true ) { + pcVar5 = local_54 + local_5c; + piVar3 = (int *)*param_1; + if ((piVar3 != (int *)0x0) && (bVar6)) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_1[1] = iVar4; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar4 == -1; + } + if ((param_2 != (int *)0x0) && ((param_4 & 0xff00) == 0)) { + if ((int *)param_2[2] < (int *)param_2[3]) { + iVar4 = *(int *)param_2[2]; + } + else { + iVar4 = (**(code **)(*param_2 + 0x20))(param_2); + } + param_4 = iVar4 == -1 | 0x100; + } + if ((uint)*(byte *)(param_1 + 2) == (param_4 & 0xff)) break; + if (*(char *)((int)param_1 + 9) == '\0') { + piVar3 = (int *)*param_1; + if ((wchar_t *)piVar3[2] < (wchar_t *)piVar3[3]) { + local_58 = *(wchar_t *)piVar3[2]; + } + else { + local_58 = (**(code **)(*piVar3 + 0x20))(); + } + param_1[1] = local_58; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = local_58 == L'\xffffffff'; + } + else { + local_58 = param_1[1]; + } + iVar4 = std::priv::__get_fdigit_or_sep(&local_58,param_7,param_6); + if (iVar4 != 1) break; + if (local_58 == L',') { + *pcVar5 = cVar1; + local_5c = local_5c + 1; + cVar1 = '\0'; + } + else { + FUN_00040cb0(param_5,local_58 & 0xff); + cVar1 = cVar1 + '\x01'; + local_74 = 1; + } + piVar3 = (int *)*param_1; + if ((uint)piVar3[2] < (uint)piVar3[3]) { + piVar3[2] = piVar3[2] + 4; + } + else { + (**(code **)(*piVar3 + 0x24))(); + } + bVar6 = true; + *(undefined1 *)((int)param_1 + 9) = 0; + } + if (local_5c != 0) { + *pcVar5 = cVar1; + pcVar5 = local_54 + local_5c + 1; + } + uVar2 = std::priv::__valid_grouping + (local_54,pcVar5,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); + *param_9 = uVar2; + return local_74; +} + + + +### FUNC FUN_000481d4 @ 000481d4 + +undefined4 +FUN_000481d4(int *param_1,int *param_2,undefined4 param_3,uint param_4,undefined4 param_5, + wchar_t *param_6) + +{ + int *piVar1; + int iVar2; + bool bVar3; + undefined4 local_20; + wchar_t local_18; + + local_20 = 0; + bVar3 = *(char *)((int)param_1 + 9) == '\0'; + while( true ) { + piVar1 = (int *)*param_1; + if ((piVar1 != (int *)0x0) && (bVar3)) { + if ((int *)piVar1[2] < (int *)piVar1[3]) { + iVar2 = *(int *)piVar1[2]; + } + else { + iVar2 = (**(code **)(*piVar1 + 0x20))(); + } + param_1[1] = iVar2; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar2 == -1; + } + if ((param_2 != (int *)0x0) && ((param_4 & 0xff00) == 0)) { + if ((int *)param_2[2] < (int *)param_2[3]) { + iVar2 = *(int *)param_2[2]; + } + else { + iVar2 = (**(code **)(*param_2 + 0x20))(param_2); + } + param_4 = iVar2 == -1 | 0x100; + } + if ((uint)*(byte *)(param_1 + 2) == (param_4 & 0xff)) { + return local_20; + } + if (*(char *)((int)param_1 + 9) == '\0') { + piVar1 = (int *)*param_1; + if ((wchar_t *)piVar1[2] < (wchar_t *)piVar1[3]) { + local_18 = *(wchar_t *)piVar1[2]; + } + else { + local_18 = (**(code **)(*piVar1 + 0x20))(); + } + param_1[1] = local_18; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = local_18 == L'\xffffffff'; + } + else { + local_18 = param_1[1]; + } + iVar2 = std::priv::__get_fdigit(&local_18,param_6); + if (iVar2 == 0) break; + FUN_00040cb0(param_5,local_18 & 0xff); + piVar1 = (int *)*param_1; + if ((uint)piVar1[2] < (uint)piVar1[3]) { + piVar1[2] = piVar1[2] + 4; + } + else { + (**(code **)(*piVar1 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 9) = 0; + bVar3 = true; + local_20 = 1; + } + return local_20; +} + + + +### FUNC FUN_000482e4 @ 000482e4 + +/* WARNING: Restarted to delay deadcode elimination for space: stack */ + +void FUN_000482e4(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,double *param_6) + +{ + locale *this; + undefined4 uVar1; + undefined4 uVar2; + int iVar3; + int *piVar4; + int iVar5; + uint uVar6; + undefined1 *local_134 [4]; + undefined1 **local_124; + undefined1 local_120; + undefined1 auStack_11f [256]; + undefined1 auStack_1f [3]; + undefined1 **local_1c; + locale alStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); + uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); + uVar2 = std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); + __aeabi_memclr(auStack_11f,0x100); + local_120 = 0; + local_134[0] = auStack_1f; + local_124 = (undefined1 **)&local_120; + local_1c = (undefined1 **)&local_120; + iVar3 = FUN_00047bcc(local_134,param_2,param_3,uVar1,uVar2); + uVar6 = 4; + if (iVar3 == 1) { + uVar6 = 0; + std::priv::__string_to_float((__basic_iostring *)local_134,param_6); + } + *param_5 = uVar6; + piVar4 = (int *)*param_2; + if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar3 = *(int *)piVar4[2]; + } + else { + iVar3 = (**(code **)(*piVar4 + 0x20))(); + } + param_2[1] = iVar3; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar3 == -1; + } + piVar4 = (int *)*param_3; + if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar3 = *(int *)piVar4[2]; + } + else { + iVar3 = (**(code **)(*piVar4 + 0x20))(); + } + param_3[1] = iVar3; + *(undefined1 *)((int)param_3 + 9) = 1; + *(bool *)(param_3 + 2) = iVar3 == -1; + } + if ((char)param_2[2] == (char)param_3[2]) { + *param_5 = *param_5 | 2; + } + iVar3 = param_2[1]; + iVar5 = param_2[2]; + *param_1 = *param_2; + param_1[1] = iVar3; + param_1[2] = iVar5; + if (((local_1c != local_134) && (local_1c != (undefined1 **)0x0)) && + ((undefined1 **)&local_120 != local_1c)) { + if ((uint)((int)local_134[0] - (int)local_1c) < 0x81) { + std::__node_alloc::_M_deallocate(local_1c,(int)local_134[0] - (int)local_1c); + } + else { + operator_delete(local_1c); + } + } + std::locale::~locale(alStack_18); + return; +} + + + +### FUNC FUN_0004845c @ 0004845c + +void FUN_0004845c(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, + undefined4 *param_6) + +{ + locale *this; + undefined4 uVar1; + uint uVar2; + int *piVar3; + int iVar4; + uint uVar5; + int iVar6; + undefined1 auStack_34 [4]; + int local_30 [5]; + int *local_1c; + locale alStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); + uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); + uVar2 = FUN_00046858(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_2[1] = iVar4; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar4 == -1; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_3[1] = iVar4; + *(undefined1 *)((int)param_3 + 9) = 1; + *(bool *)(param_3 + 2) = iVar4 == -1; + } + if ((char)param_2[2] == (char)param_3[2]) { + uVar5 = 4; + if ((uVar2 & 1) != 0) { + uVar5 = 0; + *param_6 = 0; + param_6[1] = 0; + } + } + else { + piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); + uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); + (**(code **)(*piVar3 + 0x10))(local_30,piVar3); + iVar4 = FUN_00048660(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, + local_30,auStack_34); + if ((local_1c != local_30) && (local_1c != (int *)0x0)) { + if ((uint)(local_30[0] - (int)local_1c) < 0x81) { + std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); + } + else { + operator_delete(local_1c); + } + } + uVar5 = 0; + if (iVar4 == 0) { + uVar5 = 4; + } + } + *param_5 = uVar5; + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_2[1] = iVar4; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar4 == -1; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_3[1] = iVar4; + *(undefined1 *)((int)param_3 + 9) = 1; + *(bool *)(param_3 + 2) = iVar4 == -1; + } + if ((char)param_2[2] == (char)param_3[2]) { + *param_5 = *param_5 | 2; + } + iVar4 = param_2[1]; + iVar6 = param_2[2]; + *param_1 = *param_2; + param_1[1] = iVar4; + param_1[2] = iVar6; + std::locale::~locale(alStack_18); + return; +} + + + +### FUNC FUN_00048660 @ 00048660 + +uint FUN_00048660(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6, + uint param_7,int param_8) + +{ + bool bVar1; + longlong lVar2; + int iVar3; + int *piVar4; + int iVar5; + uint uVar6; + char cVar7; + bool bVar8; + int iVar9; + uint uVar10; + uint uVar11; + char cVar12; + undefined8 uVar13; + longlong lVar14; + int local_7c; + uint local_70; + char *local_68; + int local_60; + uint local_5c; + uint local_58; + char acStack_54 [64]; + + iVar9 = *(int *)(param_8 + 0x10); + iVar3 = *(int *)(param_8 + 0x14); + local_70 = 1; + uVar13 = __aeabi_uldivmod(0xffffffff,0xffffffff,param_3); + uVar10 = (uint)((ulonglong)uVar13 >> 0x20); + local_7c = param_5; + cVar7 = '\0'; + local_60 = 0; + bVar8 = false; + uVar6 = (uint)(*(char *)((int)param_1 + 9) == '\0'); + lVar2 = 0; + while( true ) { + local_5c = (uint)((ulonglong)lVar2 >> 0x20); + local_58 = (uint)lVar2; + local_68 = acStack_54 + local_60; + piVar4 = (int *)*param_1; + if ((piVar4 != (int *)0x0) && (uVar6 != 0)) { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar5 = *(int *)piVar4[2]; + } + else { + iVar5 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = iVar5; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar5 == -1; + } + piVar4 = (int *)*param_2; + if ((piVar4 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) { + cVar12 = (char)param_2[2]; + } + else { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar5 = *(int *)piVar4[2]; + } + else { + iVar5 = (**(code **)(*piVar4 + 0x20))(); + } + param_2[1] = iVar5; + *(undefined1 *)((int)param_2 + 9) = 1; + cVar12 = iVar5 == -1; + *(char *)(param_2 + 2) = cVar12; + } + if ((char)param_1[2] == cVar12) break; + if (*(char *)((int)param_1 + 9) == '\0') { + piVar4 = (int *)*param_1; + if ((uint *)piVar4[2] < (uint *)piVar4[3]) { + uVar6 = *(uint *)piVar4[2]; + } + else { + uVar6 = (**(code **)(*piVar4 + 0x20))(); + } + param_1[1] = uVar6; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = uVar6 == 0xffffffff; + } + else { + uVar6 = param_1[1]; + } + lVar14 = lVar2; + if (uVar6 == param_7 && iVar3 != iVar9) { + *local_68 = cVar7; + local_60 = local_60 + 1; + cVar7 = '\0'; + } + else { + uVar11 = 0xff; + if (uVar6 < 0x80) { + uVar11 = std::priv::__digit_val_table(uVar6); + } + if (param_3 <= (int)uVar11) break; + bVar1 = (uint)uVar13 < local_58; + if (local_5c != uVar10) { + bVar1 = uVar10 < local_5c; + } + cVar7 = cVar7 + '\x01'; + local_7c = local_7c + 1; + if (bVar1) { + bVar8 = true; + } + else { + lVar14 = __muldi3(local_58,local_5c,param_3,param_3 >> 0x1f); + lVar14 = lVar14 + (ulonglong)uVar11; + uVar6 = (uint)((ulonglong)lVar14 >> 0x20); + bVar1 = local_58 < (uint)lVar14; + if (uVar6 != local_5c) { + bVar1 = local_5c < uVar6; + } + bVar8 = (bool)(bVar8 | (lVar2 != 0 && !bVar1)); + } + } + piVar4 = (int *)*param_1; + if ((uint)piVar4[2] < (uint)piVar4[3]) { + piVar4[2] = piVar4[2] + 4; + } + else { + (**(code **)(*piVar4 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 9) = 0; + uVar6 = local_70; + lVar2 = lVar14; + } + if ((iVar3 != iVar9) && (local_60 != 0)) { + *local_68 = cVar7; + local_68 = acStack_54 + local_60 + 1; + } + if (0 < local_7c) { + if (bVar8) { + *param_4 = 0xffffffff; + param_4[1] = 0xffffffff; + return 0; + } + uVar6 = -local_58; + if (param_6 == 0) { + uVar6 = local_58; + } + *param_4 = uVar6; + uVar6 = -(uint)(local_58 != 0) - local_5c; + if (param_6 == 0) { + uVar6 = local_5c; + } + param_4[1] = uVar6; + if (iVar3 != iVar9) { + local_70 = std::priv::__valid_grouping + (acStack_54,local_68,*(char **)(param_8 + 0x14), + *(char **)(param_8 + 0x10)); + } + return local_70; + } + return 0; +} + + + +### FUNC FUN_000488bc @ 000488bc + +/* WARNING: Restarted to delay deadcode elimination for space: stack */ + +void FUN_000488bc(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, + longdouble *param_6) + +{ + locale *this; + undefined4 uVar1; + undefined4 uVar2; + int iVar3; + int *piVar4; + int iVar5; + uint uVar6; + undefined1 *local_134 [4]; + undefined1 **local_124; + undefined1 local_120; + undefined1 auStack_11f [256]; + undefined1 auStack_1f [3]; + undefined1 **local_1c; + locale alStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); + uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); + uVar2 = std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); + __aeabi_memclr(auStack_11f,0x100); + local_120 = 0; + local_134[0] = auStack_1f; + local_124 = (undefined1 **)&local_120; + local_1c = (undefined1 **)&local_120; + iVar3 = FUN_00047bcc(local_134,param_2,param_3,uVar1,uVar2); + uVar6 = 4; + if (iVar3 == 1) { + uVar6 = 0; + std::priv::__string_to_float((__basic_iostring *)local_134,param_6); + } + *param_5 = uVar6; + piVar4 = (int *)*param_2; + if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar3 = *(int *)piVar4[2]; + } + else { + iVar3 = (**(code **)(*piVar4 + 0x20))(); + } + param_2[1] = iVar3; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar3 == -1; + } + piVar4 = (int *)*param_3; + if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { + if ((int *)piVar4[2] < (int *)piVar4[3]) { + iVar3 = *(int *)piVar4[2]; + } + else { + iVar3 = (**(code **)(*piVar4 + 0x20))(); + } + param_3[1] = iVar3; + *(undefined1 *)((int)param_3 + 9) = 1; + *(bool *)(param_3 + 2) = iVar3 == -1; + } + if ((char)param_2[2] == (char)param_3[2]) { + *param_5 = *param_5 | 2; + } + iVar3 = param_2[1]; + iVar5 = param_2[2]; + *param_1 = *param_2; + param_1[1] = iVar3; + param_1[2] = iVar5; + if (((local_1c != local_134) && (local_1c != (undefined1 **)0x0)) && + ((undefined1 **)&local_120 != local_1c)) { + if ((uint)((int)local_134[0] - (int)local_1c) < 0x81) { + std::__node_alloc::_M_deallocate(local_1c,(int)local_134[0] - (int)local_1c); + } + else { + operator_delete(local_1c); + } + } + std::locale::~locale(alStack_18); + return; +} + + + +### FUNC FUN_00048a34 @ 00048a34 + +void FUN_00048a34(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, + undefined4 *param_6) + +{ + locale *this; + undefined4 uVar1; + uint uVar2; + int *piVar3; + int iVar4; + uint uVar5; + int iVar6; + undefined1 auStack_34 [4]; + int local_30 [5]; + int *local_1c; + locale alStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); + uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); + uVar2 = FUN_00046858(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_2[1] = iVar4; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar4 == -1; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_3[1] = iVar4; + *(undefined1 *)((int)param_3 + 9) = 1; + *(bool *)(param_3 + 2) = iVar4 == -1; + } + if ((char)param_2[2] == (char)param_3[2]) { + uVar5 = 4; + if ((uVar2 & 1) != 0) { + uVar5 = 0; + *param_6 = 0; + param_6[1] = 0; + } + } + else { + piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); + uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); + (**(code **)(*piVar3 + 0x10))(local_30,piVar3); + iVar4 = FUN_00048c38(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, + local_30,auStack_34); + if ((local_1c != local_30) && (local_1c != (int *)0x0)) { + if ((uint)(local_30[0] - (int)local_1c) < 0x81) { + std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); + } + else { + operator_delete(local_1c); + } + } + uVar5 = 0; + if (iVar4 == 0) { + uVar5 = 4; + } + } + *param_5 = uVar5; + piVar3 = (int *)*param_2; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_2[1] = iVar4; + *(undefined1 *)((int)param_2 + 9) = 1; + *(bool *)(param_2 + 2) = iVar4 == -1; + } + piVar3 = (int *)*param_3; + if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_3[1] = iVar4; + *(undefined1 *)((int)param_3 + 9) = 1; + *(bool *)(param_3 + 2) = iVar4 == -1; + } + if ((char)param_2[2] == (char)param_3[2]) { + *param_5 = *param_5 | 2; + } + iVar4 = param_2[1]; + iVar6 = param_2[2]; + *param_1 = *param_2; + param_1[1] = iVar4; + param_1[2] = iVar6; + std::locale::~locale(alStack_18); + return; +} + + + +### FUNC FUN_00048c38 @ 00048c38 + +uint FUN_00048c38(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6, + uint param_7,int param_8) + +{ + bool bVar1; + int iVar2; + int *piVar3; + int iVar4; + uint uVar5; + char cVar6; + bool bVar7; + int iVar8; + uint uVar9; + uint uVar10; + char *pcVar11; + uint uVar12; + uint uVar13; + char cVar14; + undefined8 uVar15; + undefined8 uVar16; + uint local_a0; + int local_70; + uint local_68; + int local_60; + uint local_5c; + uint local_58; + char acStack_54 [64]; + + iVar8 = *(int *)(param_8 + 0x10); + iVar2 = *(int *)(param_8 + 0x14); + local_68 = 1; + local_a0 = 0x80000000; + uVar15 = __aeabi_ldivmod(); + uVar9 = (uint)((ulonglong)uVar15 >> 0x20); + local_70 = param_5; + cVar6 = '\0'; + local_58 = 0; + local_5c = 0; + local_60 = 0; + bVar7 = false; + uVar5 = (uint)(*(char *)((int)param_1 + 9) == '\0'); + while( true ) { + pcVar11 = acStack_54 + local_60; + piVar3 = (int *)*param_1; + if ((piVar3 != (int *)0x0) && (uVar5 != 0)) { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_1[1] = iVar4; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = iVar4 == -1; + } + piVar3 = (int *)*param_2; + if ((piVar3 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) { + cVar14 = (char)param_2[2]; + } + else { + if ((int *)piVar3[2] < (int *)piVar3[3]) { + iVar4 = *(int *)piVar3[2]; + } + else { + iVar4 = (**(code **)(*piVar3 + 0x20))(); + } + param_2[1] = iVar4; + *(undefined1 *)((int)param_2 + 9) = 1; + cVar14 = iVar4 == -1; + *(char *)(param_2 + 2) = cVar14; + } + if ((char)param_1[2] == cVar14) break; + if (*(char *)((int)param_1 + 9) == '\0') { + piVar3 = (int *)*param_1; + if ((uint *)piVar3[2] < (uint *)piVar3[3]) { + uVar5 = *(uint *)piVar3[2]; + } + else { + uVar5 = (**(code **)(*piVar3 + 0x20))(); + } + param_1[1] = uVar5; + *(undefined1 *)((int)param_1 + 9) = 1; + *(bool *)(param_1 + 2) = uVar5 == 0xffffffff; + } + else { + uVar5 = param_1[1]; + } + uVar10 = local_5c; + uVar13 = local_58; + if (uVar5 == param_7 && iVar2 != iVar8) { + *pcVar11 = cVar6; + local_60 = local_60 + 1; + cVar6 = '\0'; + } + else { + uVar12 = 0xff; + if (uVar5 < 0x80) { + uVar12 = std::priv::__digit_val_table(uVar5); + } + if (param_3 <= (int)uVar12) break; + bVar1 = local_58 < (uint)uVar15; + if (local_5c != uVar9) { + bVar1 = (int)local_5c < (int)uVar9; + } + cVar6 = cVar6 + '\x01'; + local_70 = local_70 + 1; + if (bVar1) { + bVar7 = true; + } + else { + uVar16 = __muldi3(local_58,local_5c,param_3,param_3 >> 0x1f); + uVar13 = (uint)uVar16 - uVar12; + uVar10 = (int)((ulonglong)uVar16 >> 0x20) - (uint)((uint)uVar16 < uVar12); + bVar1 = uVar13 < local_58; + if (uVar10 != local_5c) { + bVar1 = (int)uVar10 < (int)local_5c; + } + bVar7 = (bool)(bVar7 | ((local_58 != 0 || local_5c != 0) && !bVar1)); + } + } + piVar3 = (int *)*param_1; + if ((uint)piVar3[2] < (uint)piVar3[3]) { + piVar3[2] = piVar3[2] + 4; + } + else { + (**(code **)(*piVar3 + 0x24))(); + } + *(undefined1 *)((int)param_1 + 9) = 0; + uVar5 = local_68; + local_5c = uVar10; + local_58 = uVar13; + } + if ((iVar2 != iVar8) && (local_60 != 0)) { + *pcVar11 = cVar6; + pcVar11 = acStack_54 + local_60 + 1; + } + uVar5 = 0; + if (0 < local_70) { + if (bVar7) { + uVar5 = 0; + if (param_6 == 0) { + uVar5 = 0xffffffff; + } + *param_4 = uVar5; + if (param_6 == 0) { + local_a0 = 0x7fffffff; + } + param_4[1] = local_a0; + return 0; + } + uVar5 = local_58; + if (param_6 == 0) { + uVar5 = -local_58; + } + *param_4 = uVar5; + if (param_6 == 0) { + local_5c = -(uint)(local_58 != 0) - local_5c; + } + param_4[1] = local_5c; + uVar5 = local_68; + if (iVar2 != iVar8) { + uVar5 = std::priv::__valid_grouping + (acStack_54,pcVar11,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); + } + } + return uVar5; +} + + + +### FUNC FUN_00048ea6 @ 00048ea6 + +void FUN_00048ea6(facet *param_1) + +{ + std::locale::facet::~facet(param_1); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_00048f08 @ 00048f08 + +void FUN_00048f08(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + int param_5,undefined4 param_6,undefined4 param_7) + +{ + undefined4 uVar1; + undefined4 uVar2; + undefined1 auStack_16 [2]; + + uVar2 = *(undefined4 *)(param_5 + 4); + uVar1 = FUN_00041ecc(auStack_16,uVar2,param_7); + FUN_000493e4(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6); + return; +} + + + +### FUNC FUN_00048f42 @ 00048f42 + +void FUN_00048f42(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + int param_5,undefined4 param_6,undefined4 param_7) + +{ + undefined4 uVar1; + undefined4 uVar2; + undefined1 auStack_16 [2]; + + uVar2 = *(undefined4 *)(param_5 + 4); + uVar1 = FUN_000424fc(auStack_16,uVar2,param_7); + FUN_000493e4(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6); + return; +} + + + +### FUNC FUN_00048f7c @ 00048f7c + +void FUN_00048f7c(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6) + +{ + FUN_0004992c(param_1,param_3,param_4,param_5,param_6); + return; +} + + + +### FUNC FUN_00048fa0 @ 00048fa0 + +void FUN_00048fa0(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6) + +{ + FUN_00049ee0(param_1,param_3,param_4,param_5,param_6); + return; +} + + + +### FUNC FUN_00048fc4 @ 00048fc4 + +void FUN_00048fc4(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + int param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8) + +{ + undefined4 uVar1; + undefined4 uVar2; + undefined1 auStack_16 [2]; + + uVar2 = *(undefined4 *)(param_5 + 4); + uVar1 = FUN_00042c10(auStack_16,uVar2,param_7,param_8); + FUN_000493e4(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6); + return; +} + + + +### FUNC FUN_00049000 @ 00049000 + +void FUN_00049000(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + int param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8) + +{ + undefined4 uVar1; + undefined4 uVar2; + undefined1 auStack_16 [2]; + + uVar2 = *(undefined4 *)(param_5 + 4); + uVar1 = FUN_00042d68(auStack_16,uVar2,param_7,param_8); + FUN_000493e4(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6); + return; +} + + + +### FUNC FUN_0004903c @ 0004903c + +void FUN_0004903c(undefined4 param_1,undefined4 param_2,int *param_3,uint param_4,int param_5, + undefined4 param_6,int param_7) + +{ + bool bVar1; + locale *this; + int *piVar2; + undefined4 uVar3; + int iVar4; + int iVar5; + int *piVar6; + undefined4 uVar7; + uint uVar8; + undefined4 uVar9; + uint local_28; + locale alStack_24 [14]; + undefined1 auStack_16 [2]; + + this = (locale *)std::locale::locale(alStack_24,(locale *)(param_5 + 0x20)); + piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype::id); + std::locale::~locale(alStack_24); + uVar3 = 10; + *(undefined4 *)(param_5 + 0x1c) = 10; + uVar8 = *(uint *)(param_5 + 4); + *(uint *)(param_5 + 4) = uVar8 & 0xfffffdc0 | 0x214; + local_28 = param_4; + if (param_7 == 0) { + if ((int)(uVar8 << 0x11) < 0) { + iVar4 = std::priv::__hex_char_table_hi(); + } + else { + iVar4 = std::priv::__hex_char_table_lo(); + } + iVar5 = (**(code **)(*piVar2 + 0x28))(piVar2,0x30); + bVar1 = true; + if ((param_4 & 0xff) != 0) { + piVar6 = (int *)param_3[5]; + if (piVar6 < (int *)param_3[6]) { + param_3[5] = (int)(piVar6 + 1); + *piVar6 = iVar5; + } + else { + iVar5 = (**(code **)(*param_3 + 0x34))(param_3); + } + bVar1 = true; + if (iVar5 != -1) { + bVar1 = false; + } + } + iVar4 = (**(code **)(*piVar2 + 0x28))(piVar2,*(undefined1 *)(iVar4 + 0x10)); + local_28 = 0; + if (!bVar1) { + piVar6 = (int *)param_3[5]; + if (piVar6 < (int *)param_3[6]) { + param_3[5] = (int)(piVar6 + 1); + *piVar6 = iVar4; + } + else { + iVar4 = (**(code **)(*param_3 + 0x34))(param_3); + } + local_28 = 1; + if (iVar4 == -1) { + local_28 = 0; + } + } + local_28 = param_4 & 0xffffff00 | local_28; + uVar3 = 8; + } + *(undefined4 *)(param_5 + 0x1c) = uVar3; + uVar3 = (**(code **)(*piVar2 + 0x28))(piVar2,0x30); + uVar9 = *(undefined4 *)(param_5 + 4); + uVar7 = FUN_000424fc(auStack_16,uVar9,param_7); + FUN_000493e4(param_1,uVar7,auStack_16,param_3,local_28,param_5,uVar9,uVar3); + *(uint *)(param_5 + 4) = uVar8; + return; +} + + + +### FUNC FUN_00049168 @ 00049168 + +void FUN_00049168(undefined4 *param_1,int *param_2,uint param_3,int param_4,int param_5,int param_6) + +{ + locale *this; + int *piVar1; + uint uVar2; + int *piVar3; + uint uVar4; + int iVar5; + code *pcVar6; + uint uVar7; + int iVar8; + uint uVar9; + uint local_60; + int local_5c [16]; + int local_1c; + int *local_18; + + this = (locale *)std::locale::locale((locale *)local_5c,(locale *)(param_4 + 0x20)); + piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct::id); + std::locale::~locale((locale *)local_5c); + if (param_6 == 1) { + pcVar6 = *(code **)(*piVar1 + 0x14); + } + else { + pcVar6 = *(code **)(*piVar1 + 0x18); + } + (*pcVar6)(local_5c,piVar1); + uVar9 = *(uint *)(param_4 + 0x1c); + local_60 = 0; + *(undefined4 *)(param_4 + 0x1c) = 0; + uVar4 = local_1c - (int)local_18; + uVar7 = (int)uVar4 >> 2; + if (uVar7 < uVar9) { + if ((*(uint *)(param_4 + 4) & 7) == 1) { + uVar2 = param_3; + if (0 < (int)uVar4) { + iVar8 = (uVar4 >> 2) + 1; + piVar1 = local_18; + uVar4 = param_3; + do { + uVar2 = 0; + if ((uVar4 & 0xff) != 0) { + iVar5 = *piVar1; + piVar3 = (int *)param_2[5]; + if (piVar3 < (int *)param_2[6]) { + param_2[5] = (int)(piVar3 + 1); + *piVar3 = iVar5; + } + else { + iVar5 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar2 = (uint)(iVar5 != -1); + } + iVar8 = iVar8 + -1; + piVar1 = piVar1 + 1; + uVar4 = uVar2; + } while (1 < iVar8); + } + param_3 = uVar2 & 0xff | param_3 & 0xffffff00; + if (0 < (int)(uVar9 - uVar7)) { + iVar8 = (uVar9 + 1) - uVar7; + do { + uVar4 = 0; + if ((param_3 & 0xff) != 0) { + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = param_5; + iVar5 = param_5; + } + else { + iVar5 = (**(code **)(*param_2 + 0x34))(param_2,param_5); + } + uVar4 = 1; + if (iVar5 == -1) { + uVar4 = 0; + } + } + param_3 = param_3 & 0xffffff00 | uVar4; + iVar8 = iVar8 + -1; + } while (1 < iVar8); + } + } + else { + uVar4 = param_3; + if (0 < (int)(uVar9 - uVar7)) { + iVar8 = (uVar9 + 1) - uVar7; + uVar7 = param_3; + do { + uVar4 = 0; + if ((uVar7 & 0xff) != 0) { + piVar1 = (int *)param_2[5]; + if (piVar1 < (int *)param_2[6]) { + param_2[5] = (int)(piVar1 + 1); + *piVar1 = param_5; + iVar5 = param_5; + } + else { + iVar5 = (**(code **)(*param_2 + 0x34))(param_2,param_5); + } + uVar4 = 1; + if (iVar5 == -1) { + uVar4 = 0; + } + } + iVar8 = iVar8 + -1; + uVar7 = uVar4; + } while (1 < iVar8); + } + param_3 = uVar4 & 0xff | param_3 & 0xffffff00; + if (0 < local_1c - (int)local_18) { + iVar8 = ((uint)(local_1c - (int)local_18) >> 2) + 1; + piVar1 = local_18; + do { + uVar4 = 0; + if ((param_3 & 0xff) != 0) { + iVar5 = *piVar1; + piVar3 = (int *)param_2[5]; + if (piVar3 < (int *)param_2[6]) { + param_2[5] = (int)(piVar3 + 1); + *piVar3 = iVar5; + } + else { + iVar5 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar4 = 1; + if (iVar5 == -1) { + uVar4 = 0; + } + } + param_3 = param_3 & 0xffffff00 | uVar4; + iVar8 = iVar8 + -1; + piVar1 = piVar1 + 1; + } while (1 < iVar8); + } + } + } + else if (0 < (int)uVar4) { + iVar8 = (uVar4 >> 2) + 1; + piVar1 = local_18; + do { + uVar4 = local_60; + if ((param_3 & 0xff) != 0) { + iVar5 = *piVar1; + piVar3 = (int *)param_2[5]; + if (piVar3 < (int *)param_2[6]) { + param_2[5] = (int)(piVar3 + 1); + *piVar3 = iVar5; + } + else { + iVar5 = (**(code **)(*param_2 + 0x34))(param_2); + } + uVar4 = 1; + if (iVar5 == -1) { + uVar4 = 0; + } + } + param_3 = param_3 & 0xffffff00 | uVar4; + iVar8 = iVar8 + -1; + piVar1 = piVar1 + 1; + } while (1 < iVar8); + } + *param_1 = param_2; + param_1[1] = param_3; + if ((local_18 != local_5c) && (local_18 != (int *)0x0)) { + if (0x80 < (uint)(local_5c[0] - (int)local_18)) { + operator_delete(local_18); + return; + } + std::__node_alloc::_M_deallocate(local_18,local_5c[0] - (int)local_18); + } + return; +} + + + +### FUNC FUN_000493e4 @ 000493e4 + +void FUN_000493e4(undefined4 param_1,int param_2,int param_3,undefined4 param_4,undefined4 param_5, + int param_6,uint param_7,undefined4 param_8) + +{ + locale *this; + int *piVar1; + undefined4 uVar2; + undefined4 uVar3; + undefined4 uVar4; + undefined1 uVar5; + int local_130 [4]; + int *local_120; + int *local_11c; + undefined1 auStack_118 [256]; + locale alStack_18 [4]; + + this = (locale *)std::locale::locale(alStack_18,(locale *)(param_6 + 0x20)); + piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype::id); + uVar2 = (**(code **)(*piVar1 + 0x28))(piVar1,0x2b); + uVar3 = (**(code **)(*piVar1 + 0x28))(piVar1,0x2d); + (**(code **)(*piVar1 + 0x2c))(piVar1,param_2,param_3,auStack_118); + param_3 = param_3 - param_2; + piVar1 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); + (**(code **)(*piVar1 + 0x10))(local_130,piVar1); + if (local_11c != local_120) { + uVar5 = 0; + if ((int)(param_7 << 0x16) < 0) { + uVar5 = 2; + if ((param_7 & 0x38) != 0x10) { + uVar5 = (param_7 & 0x38) == 0x20; + } + } + uVar4 = (**(code **)(*piVar1 + 0xc))(piVar1); + param_3 = FUN_00050274(auStack_118,auStack_118 + param_3 * 4,local_130,uVar4,uVar2,uVar3,uVar5); + } + uVar4 = *(undefined4 *)(param_6 + 0x1c); + *(undefined4 *)(param_6 + 0x1c) = 0; + FUN_0004953c(param_1,auStack_118,param_3,param_4,param_5,param_7,uVar4,param_8,uVar2,uVar3); + if ((local_11c != local_130) && (local_11c != (int *)0x0)) { + if ((uint)(local_130[0] - (int)local_11c) < 0x81) { + std::__node_alloc::_M_deallocate(local_11c,local_130[0] - (int)local_11c); + } + else { + operator_delete(local_11c); + } + } + std::locale::~locale(alStack_18); + return; +} + + + +### FUNC FUN_0004953c @ 0004953c + +void FUN_0004953c(undefined4 *param_1,int *param_2,int param_3,int *param_4,uint param_5, + uint param_6,int param_7,int param_8,int param_9,int param_10) + +{ + uint uVar1; + int *piVar2; + int iVar3; + bool bVar4; + int iVar5; + uint uVar6; + int iVar7; + bool bVar8; + + if (param_3 < param_7) { + iVar5 = param_7 - param_3; + if ((param_6 & 7) == 1) { + uVar1 = param_5; + if (0 < param_3 * 4) { + iVar7 = param_3 + 1; + uVar6 = param_5; + do { + uVar1 = 0; + if ((uVar6 & 0xff) != 0) { + iVar3 = *param_2; + piVar2 = (int *)param_4[5]; + if (piVar2 < (int *)param_4[6]) { + param_4[5] = (int)(piVar2 + 1); + *piVar2 = iVar3; + } + else { + iVar3 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar1 = (uint)(iVar3 != -1); + } + iVar7 = iVar7 + -1; + param_2 = param_2 + 1; + uVar6 = uVar1; + } while (1 < iVar7); + } + param_5 = param_5 & 0xffffff00 | uVar1 & 0xff; + if (0 < iVar5) { + param_3 = (param_7 + 1) - param_3; + do { + uVar1 = 0; + if ((param_5 & 0xff) != 0) { + piVar2 = (int *)param_4[5]; + if (piVar2 < (int *)param_4[6]) { + param_4[5] = (int)(piVar2 + 1); + *piVar2 = param_8; + iVar5 = param_8; + } + else { + iVar5 = (**(code **)(*param_4 + 0x34))(param_4,param_8); + } + uVar1 = (uint)(iVar5 != -1); + } + param_5 = param_5 & 0xffffff00 | uVar1; + param_3 = param_3 + -1; + } while (1 < param_3); + } + } + else if (((param_3 == 0) || ((param_6 & 7) != 4)) || + ((iVar7 = *param_2, iVar7 != param_9 && (iVar7 != param_10)))) { + if ((param_3 < 2) || ((param_6 & 0x23f) != 0x214)) { + uVar1 = param_5; + if (0 < iVar5) { + iVar5 = (param_7 + 1) - param_3; + uVar6 = param_5; + do { + uVar1 = 0; + if ((uVar6 & 0xff) != 0) { + piVar2 = (int *)param_4[5]; + if (piVar2 < (int *)param_4[6]) { + param_4[5] = (int)(piVar2 + 1); + *piVar2 = param_8; + iVar7 = param_8; + } + else { + iVar7 = (**(code **)(*param_4 + 0x34))(param_4,param_8); + } + uVar1 = (uint)(iVar7 != -1); + } + iVar5 = iVar5 + -1; + uVar6 = uVar1; + } while (1 < iVar5); + } + param_5 = param_5 & 0xffffff00 | uVar1 & 0xff; + if (0 < param_3 * 4) { + param_3 = param_3 + 1; + do { + uVar1 = 0; + if ((param_5 & 0xff) != 0) { + iVar5 = *param_2; + piVar2 = (int *)param_4[5]; + if (piVar2 < (int *)param_4[6]) { + param_4[5] = (int)(piVar2 + 1); + *piVar2 = iVar5; + } + else { + iVar5 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar1 = (uint)(iVar5 != -1); + } + param_5 = param_5 & 0xffffff00 | uVar1; + param_3 = param_3 + -1; + param_2 = param_2 + 1; + } while (1 < param_3); + } + } + else { + bVar8 = false; + if ((param_5 & 0xff) != 0) { + iVar7 = *param_2; + piVar2 = (int *)param_4[5]; + if (piVar2 < (int *)param_4[6]) { + param_4[5] = (int)(piVar2 + 1); + *piVar2 = iVar7; + } + else { + iVar7 = (**(code **)(*param_4 + 0x34))(param_4); + } + if (iVar7 != -1) { + iVar7 = param_2[1]; + piVar2 = (int *)param_4[5]; + if (piVar2 < (int *)param_4[6]) { + param_4[5] = (int)(piVar2 + 1); + *piVar2 = iVar7; + } + else { + iVar7 = (**(code **)(*param_4 + 0x34))(param_4); + } + bVar8 = iVar7 != -1; + } + } + if (0 < iVar5) { + iVar5 = (param_7 + 1) - param_3; + bVar4 = bVar8; + do { + bVar8 = false; + if (bVar4 != false) { + piVar2 = (int *)param_4[5]; + if (piVar2 < (int *)param_4[6]) { + param_4[5] = (int)(piVar2 + 1); + *piVar2 = param_8; + iVar7 = param_8; + } + else { + iVar7 = (**(code **)(*param_4 + 0x34))(param_4,param_8); + } + bVar8 = iVar7 != -1; + } + iVar5 = iVar5 + -1; + bVar4 = bVar8; + } while (1 < iVar5); + } + param_5 = param_5 & 0xffffff00 | (uint)bVar8; + uVar1 = param_3 * 4 - 8; + if (0 < (int)uVar1) { + param_2 = param_2 + 2; + iVar5 = (uVar1 >> 2) + 1; + do { + uVar1 = 0; + if ((param_5 & 0xff) != 0) { + iVar7 = *param_2; + piVar2 = (int *)param_4[5]; + if (piVar2 < (int *)param_4[6]) { + param_4[5] = (int)(piVar2 + 1); + *piVar2 = iVar7; + } + else { + iVar7 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar1 = (uint)(iVar7 != -1); + } + param_5 = param_5 & 0xffffff00 | uVar1; + iVar5 = iVar5 + -1; + param_2 = param_2 + 1; + } while (1 < iVar5); + } + } + } + else { + bVar8 = false; + if ((param_5 & 0xff) != 0) { + piVar2 = (int *)param_4[5]; + if (piVar2 < (int *)param_4[6]) { + param_4[5] = (int)(piVar2 + 1); + *piVar2 = iVar7; + } + else { + iVar7 = (**(code **)(*param_4 + 0x34))(param_4); + } + bVar8 = true; + if (iVar7 == -1) { + bVar8 = false; + } + } + if (0 < iVar5) { + iVar5 = (param_7 + 1) - param_3; + bVar4 = bVar8; + do { + bVar8 = false; + if (bVar4 != false) { + piVar2 = (int *)param_4[5]; + if (piVar2 < (int *)param_4[6]) { + param_4[5] = (int)(piVar2 + 1); + *piVar2 = param_8; + iVar7 = param_8; + } + else { + iVar7 = (**(code **)(*param_4 + 0x34))(param_4,param_8); + } + bVar8 = iVar7 != -1; + } + iVar5 = iVar5 + -1; + bVar4 = bVar8; + } while (1 < iVar5); + } + param_5 = param_5 & 0xffffff00 | (uint)bVar8; + uVar1 = param_3 * 4 - 4; + if (0 < (int)uVar1) { + iVar5 = (uVar1 >> 2) + 1; + do { + param_2 = param_2 + 1; + uVar1 = 0; + if ((param_5 & 0xff) != 0) { + iVar7 = *param_2; + piVar2 = (int *)param_4[5]; + if (piVar2 < (int *)param_4[6]) { + param_4[5] = (int)(piVar2 + 1); + *piVar2 = iVar7; + } + else { + iVar7 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar1 = (uint)(iVar7 != -1); + } + param_5 = param_5 & 0xffffff00 | uVar1; + iVar5 = iVar5 + -1; + } while (1 < iVar5); + } + } + } + else if (0 < param_3 * 4) { + param_3 = param_3 + 1; + do { + uVar1 = 0; + if ((param_5 & 0xff) != 0) { + iVar5 = *param_2; + piVar2 = (int *)param_4[5]; + if (piVar2 < (int *)param_4[6]) { + param_4[5] = (int)(piVar2 + 1); + *piVar2 = iVar5; + } + else { + iVar5 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar1 = (uint)(iVar5 != -1); + } + param_5 = param_5 & 0xffffff00 | uVar1; + param_3 = param_3 + -1; + param_2 = param_2 + 1; + } while (1 < param_3); + } + *param_1 = param_4; + param_1[1] = param_5; + return; +} + + + +### FUNC FUN_0004992c @ 0004992c + +void FUN_0004992c(undefined4 param_1,undefined4 param_2,undefined4 param_3,int param_4) + +{ + locale *this; + int *piVar1; + undefined1 **ppuVar2; + undefined4 **local_14c; + int local_148 [5]; + int *local_134; + undefined1 *local_130 [4]; + undefined1 **local_120; + undefined1 local_11c; + undefined1 auStack_11b [256]; + undefined1 auStack_1b [3]; + undefined1 **local_18; + + __aeabi_memclr(auStack_11b,0x100,param_3,&local_14c); + local_11c = 0; + local_130[0] = auStack_1b; + local_14c = &local_18; + local_120 = (undefined1 **)&local_11c; + local_18 = (undefined1 **)&local_11c; + FUN_00051490(local_130,*(undefined4 *)(param_4 + 4),*(undefined4 *)(param_4 + 0x18)); + this = (locale *)std::locale::locale((locale *)local_148,(locale *)(param_4 + 0x20)); + piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct::id); + std::locale::~locale((locale *)local_148); + (**(code **)(*piVar1 + 8))(piVar1); + (**(code **)(*piVar1 + 0xc))(piVar1); + (**(code **)(*piVar1 + 0x10))(local_148,piVar1); + FUN_00049a8c(param_1,local_130,param_2,param_3); + if ((local_134 != local_148) && (local_134 != (int *)0x0)) { + if ((uint)(local_148[0] - (int)local_134) < 0x81) { + std::__node_alloc::_M_deallocate(local_134,local_148[0] - (int)local_134); + } + else { + operator_delete(local_134); + } + } + ppuVar2 = (undefined1 **)*local_14c; + if (((ppuVar2 != local_130) && (ppuVar2 != (undefined1 **)0x0)) && + ((undefined1 **)&local_11c != ppuVar2)) { + if (0x80 < (uint)((int)local_130[0] - (int)ppuVar2)) { + operator_delete(ppuVar2); + return; + } + std::__node_alloc::_M_deallocate(ppuVar2,(int)local_130[0] - (int)ppuVar2); + } + return; +} + + + +### FUNC FUN_00049a8c @ 00049a8c + +/* WARNING: Restarted to delay deadcode elimination for space: stack */ + +void FUN_00049a8c(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + int param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, + undefined4 param_9,int param_10) + +{ + undefined4 **ppuVar1; + undefined4 **ppuVar2; + locale *this; + int *piVar3; + undefined4 uVar4; + undefined4 uVar5; + undefined4 uVar6; + undefined4 uVar7; + undefined4 **local_460 [16]; + undefined4 **local_420; + undefined4 *local_41c; + undefined1 auStack_418 [1024]; + undefined4 **local_18; + + this = (locale *)std::locale::locale((locale *)local_460,(locale *)(param_5 + 0x20)); + piVar3 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype::id); + std::locale::~locale((locale *)local_460); + __aeabi_memclr4(auStack_418,0x400); + local_41c = (undefined4 **)0x0; + local_460[0] = &local_18; + local_420 = &local_41c; + local_18 = &local_41c; + FUN_00051848(param_2,local_460,piVar3,param_7,1); + if (*(int *)(param_10 + 0x14) != *(int *)(param_10 + 0x10)) { + uVar4 = (**(code **)(*piVar3 + 0x28))(piVar3,0x2b); + uVar5 = (**(code **)(*piVar3 + 0x28))(piVar3,0x2d); + FUN_0005031c(local_460,param_9,param_10,param_8,uVar4,uVar5,0); + } + ppuVar2 = local_18; + ppuVar1 = local_420; + uVar4 = *(undefined4 *)(param_5 + 0x1c); + *(undefined4 *)(param_5 + 0x1c) = 0; + uVar7 = *(undefined4 *)(param_5 + 4); + uVar5 = (**(code **)(*piVar3 + 0x28))(piVar3,0x2b); + uVar6 = (**(code **)(*piVar3 + 0x28))(piVar3,0x2d); + FUN_00049c20(param_1,ppuVar2,ppuVar1,param_3,param_4,uVar7,uVar4,param_6,uVar5,uVar6); + if ((((undefined4 ***)local_18 != local_460) && ((undefined4 ***)local_18 != (undefined4 ***)0x0)) + && (&local_41c != local_18)) { + if ((uint)((int)local_460[0] - (int)local_18) < 0x81) { + std::__node_alloc::_M_deallocate(local_18,(int)local_460[0] - (int)local_18); + } + else { + operator_delete(local_18); + } + } + return; +} + + + +### FUNC FUN_00049c20 @ 00049c20 + +undefined4 * +FUN_00049c20(undefined4 *param_1,int *param_2,int *param_3,int *param_4,uint param_5,uint param_6, + int param_7,int param_8,int param_9,int param_10) + +{ + uint uVar1; + int *piVar2; + int iVar3; + int iVar4; + uint uVar5; + int iVar6; + int iVar7; + uint uVar8; + int *local_18; + + uVar1 = (int)param_3 - (int)param_2; + iVar6 = (int)uVar1 >> 2; + if (iVar6 < param_7) { + iVar3 = param_7 - iVar6; + if ((param_6 & 7) == 4) { + if ((param_2 != param_3) && ((iVar7 = *param_2, iVar7 == param_9 || (iVar7 == param_10)))) { + param_2 = param_2 + 1; + uVar1 = 0; + if ((param_5 & 0xff) != 0) { + piVar2 = (int *)param_4[5]; + if (piVar2 < (int *)param_4[6]) { + param_4[5] = (int)(piVar2 + 1); + *piVar2 = iVar7; + } + else { + iVar7 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar1 = 1; + if (iVar7 == -1) { + uVar1 = 0; + } + } + if (0 < iVar3) { + iVar6 = (param_7 + 1) - iVar6; + uVar5 = uVar1; + do { + uVar1 = 0; + if (uVar5 != 0) { + piVar2 = (int *)param_4[5]; + if (piVar2 < (int *)param_4[6]) { + param_4[5] = (int)(piVar2 + 1); + *piVar2 = param_8; + iVar3 = param_8; + } + else { + iVar3 = (**(code **)(*param_4 + 0x34))(param_4,param_8); + } + uVar1 = 1; + if (iVar3 == -1) { + uVar1 = 0; + } + } + iVar6 = iVar6 + -1; + uVar5 = uVar1; + } while (1 < iVar6); + } + param_5 = param_5 & 0xffffff00 | uVar1; + if (0 < (int)param_3 - (int)param_2) { + iVar6 = ((uint)((int)param_3 - (int)param_2) >> 2) + 1; + do { + uVar1 = 0; + if ((param_5 & 0xff) != 0) { + iVar3 = *param_2; + piVar2 = (int *)param_4[5]; + if (piVar2 < (int *)param_4[6]) { + param_4[5] = (int)(piVar2 + 1); + *piVar2 = iVar3; + } + else { + iVar3 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar1 = 1; + if (iVar3 == -1) { + uVar1 = 0; + } + } + param_5 = param_5 & 0xffffff00 | uVar1; + iVar6 = iVar6 + -1; + param_2 = param_2 + 1; + } while (1 < iVar6); + } + goto LAB_00049e02; + } + } + else if ((param_6 & 7) == 1) { + uVar5 = param_5; + if (0 < (int)uVar1) { + iVar7 = (uVar1 >> 2) + 1; + uVar1 = param_5; + local_18 = param_2; + do { + uVar5 = 0; + if ((uVar1 & 0xff) != 0) { + iVar4 = *local_18; + piVar2 = (int *)param_4[5]; + if (piVar2 < (int *)param_4[6]) { + param_4[5] = (int)(piVar2 + 1); + *piVar2 = iVar4; + } + else { + iVar4 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar5 = 1; + if (iVar4 == -1) { + uVar5 = 0; + } + } + iVar7 = iVar7 + -1; + local_18 = local_18 + 1; + uVar1 = uVar5; + } while (1 < iVar7); + } + param_5 = param_5 & 0xffffff00 | uVar5 & 0xff; + if (0 < iVar3) { + iVar6 = (param_7 + 1) - iVar6; + do { + uVar1 = 0; + if ((param_5 & 0xff) != 0) { + piVar2 = (int *)param_4[5]; + if (piVar2 < (int *)param_4[6]) { + param_4[5] = (int)(piVar2 + 1); + *piVar2 = param_8; + iVar3 = param_8; + } + else { + iVar3 = (**(code **)(*param_4 + 0x34))(param_4,param_8); + } + uVar1 = 1; + if (iVar3 == -1) { + uVar1 = 0; + } + } + param_5 = param_5 & 0xffffff00 | uVar1; + iVar6 = iVar6 + -1; + } while (1 < iVar6); + } + goto LAB_00049e02; + } + uVar5 = param_5; + if (0 < iVar3) { + iVar6 = (param_7 + 1) - iVar6; + uVar8 = param_5; + do { + uVar5 = 0; + if ((uVar8 & 0xff) != 0) { + piVar2 = (int *)param_4[5]; + if (piVar2 < (int *)param_4[6]) { + param_4[5] = (int)(piVar2 + 1); + *piVar2 = param_8; + iVar3 = param_8; + } + else { + iVar3 = (**(code **)(*param_4 + 0x34))(param_4,param_8); + } + uVar5 = 1; + if (iVar3 == -1) { + uVar5 = 0; + } + } + iVar6 = iVar6 + -1; + uVar8 = uVar5; + } while (1 < iVar6); + } + param_5 = param_5 & 0xffffff00 | uVar5 & 0xff; + if (0 < (int)uVar1) { + iVar6 = (uVar1 >> 2) + 1; + do { + uVar1 = 0; + if ((param_5 & 0xff) != 0) { + iVar3 = *param_2; + piVar2 = (int *)param_4[5]; + if (piVar2 < (int *)param_4[6]) { + param_4[5] = (int)(piVar2 + 1); + *piVar2 = iVar3; + } + else { + iVar3 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar1 = 1; + if (iVar3 == -1) { + uVar1 = 0; + } + } + param_5 = param_5 & 0xffffff00 | uVar1; + iVar6 = iVar6 + -1; + param_2 = param_2 + 1; + } while (1 < iVar6); + } + } + else if (0 < (int)uVar1) { + iVar6 = (uVar1 >> 2) + 1; + do { + uVar1 = 0; + if ((param_5 & 0xff) != 0) { + iVar3 = *param_2; + piVar2 = (int *)param_4[5]; + if (piVar2 < (int *)param_4[6]) { + param_4[5] = (int)(piVar2 + 1); + *piVar2 = iVar3; + } + else { + iVar3 = (**(code **)(*param_4 + 0x34))(param_4); + } + uVar1 = 1; + if (iVar3 == -1) { + uVar1 = 0; + } + } + param_5 = param_5 & 0xffffff00 | uVar1; + iVar6 = iVar6 + -1; + param_2 = param_2 + 1; + } while (1 < iVar6); + } +LAB_00049e02: + *param_1 = param_4; + param_1[1] = param_5; + return param_1 + 2; +} + + + +### FUNC FUN_00049ee0 @ 00049ee0 + +void FUN_00049ee0(undefined4 param_1,undefined4 param_2,undefined4 param_3,int param_4) + +{ + locale *this; + int *piVar1; + undefined1 **ppuVar2; + undefined4 **local_14c; + int local_148 [5]; + int *local_134; + undefined1 *local_130 [4]; + undefined1 **local_120; + undefined1 local_11c; + undefined1 auStack_11b [256]; + undefined1 auStack_1b [3]; + undefined1 **local_18; + + __aeabi_memclr(auStack_11b,0x100,param_3,&local_14c); + local_11c = 0; + local_130[0] = auStack_1b; + local_14c = &local_18; + local_120 = (undefined1 **)&local_11c; + local_18 = (undefined1 **)&local_11c; + FUN_00051642(local_130,*(undefined4 *)(param_4 + 4),*(undefined4 *)(param_4 + 0x18)); + this = (locale *)std::locale::locale((locale *)local_148,(locale *)(param_4 + 0x20)); + piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct::id); + std::locale::~locale((locale *)local_148); + (**(code **)(*piVar1 + 8))(piVar1); + (**(code **)(*piVar1 + 0xc))(piVar1); + (**(code **)(*piVar1 + 0x10))(local_148,piVar1); + FUN_00049a8c(param_1,local_130,param_2,param_3); + if ((local_134 != local_148) && (local_134 != (int *)0x0)) { + if ((uint)(local_148[0] - (int)local_134) < 0x81) { + std::__node_alloc::_M_deallocate(local_134,local_148[0] - (int)local_134); + } + else { + operator_delete(local_134); + } + } + ppuVar2 = (undefined1 **)*local_14c; + if (((ppuVar2 != local_130) && (ppuVar2 != (undefined1 **)0x0)) && + ((undefined1 **)&local_11c != ppuVar2)) { + if (0x80 < (uint)((int)local_130[0] - (int)ppuVar2)) { + operator_delete(ppuVar2); + return; + } + std::__node_alloc::_M_deallocate(ppuVar2,(int)local_130[0] - (int)ppuVar2); + } + return; +} + + + +### FUNC FUN_0004a040 @ 0004a040 + +void FUN_0004a040(int *param_1,int param_2,int param_3) + +{ + void *pvVar1; + int iVar2; + uint uVar3; + void *pvVar4; + undefined4 uVar5; + uint uVar6; + uint uVar7; + int iVar8; + uint local_18; + + uVar7 = param_3 - param_2; + uVar6 = (int)uVar7 >> 2; + iVar8 = *param_1; + if ((uint)(param_1[2] - iVar8 >> 2) < uVar6) { + if (uVar6 >> 0x1e != 0) { + FUN_00030824(4); + uVar5 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar5,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + local_18 = uVar7; + if (uVar7 < 0x81) { + pvVar1 = (void *)std::__node_alloc::_M_allocate(&local_18); + uVar3 = local_18; + } + else { + pvVar1 = operator_new(uVar7); + uVar3 = uVar7; + } + if (param_3 != param_2) { + __aeabi_memcpy(pvVar1,param_2,uVar7); + } + pvVar4 = (void *)*param_1; + if (pvVar4 != (void *)0x0) { + if ((uint)(param_1[2] - (int)pvVar4) < 0x81) { + std::__node_alloc::_M_deallocate(pvVar4,param_1[2] - (int)pvVar4); + } + else { + operator_delete(pvVar4); + } + } + *param_1 = (int)pvVar1; + param_1[1] = (int)((int)pvVar1 + uVar6 * 4); + param_1[2] = (int)pvVar1 + (uVar3 & 0xfffffffc); + return; + } + iVar2 = param_1[1]; + uVar3 = iVar2 - iVar8 >> 2; + param_1 = param_1 + 1; + if (uVar6 <= uVar3) { + if (uVar7 != 0) { + __aeabi_memmove(iVar8,param_2,uVar7); + iVar8 = iVar8 + uVar7; + } + *param_1 = iVar8; + return; + } + param_2 = param_2 + uVar3 * 4; + if (iVar2 - iVar8 != 0) { + __aeabi_memmove(iVar8); + iVar2 = *param_1; + } + if (param_2 != param_3) { + __aeabi_memcpy(iVar2,param_2,param_3 - param_2); + iVar2 = iVar2 + (param_3 - param_2); + } + *param_1 = iVar2; + return; +} + + + +### FUNC FUN_0004a144 @ 0004a144 + +void FUN_0004a144(void) + +{ + FUN_0004a180(); + return; +} + + + +### FUNC FUN_0004a180 @ 0004a180 + +undefined4 +FUN_0004a180(undefined4 *param_1,undefined4 param_2,undefined4 param_3,code *param_4,code *param_5, + code *param_6,undefined4 *param_7,undefined4 *param_8) + +{ + char *pcVar1; + char *pcVar2; + int iVar3; + void *pvVar4; + undefined4 uVar5; + int local_54; + char local_50; + int *local_40; + int local_3c [5]; + int *local_28; + undefined4 local_24; + undefined4 local_20; + undefined1 auStack_1c [4]; + int local_18; + + *param_8 = 0; + if (*(char *)*param_1 == '\0') { + pcVar2 = (char *)(*param_6)(param_2); + *param_1 = pcVar2; + pcVar1 = "C"; + if ((pcVar2 == (char *)0x0) || (*pcVar2 == '\0')) goto LAB_0004a1c0; + } + else { + pcVar1 = (char *)(*param_4)((char *)*param_1,param_2,param_3); + if (pcVar1 == (char *)0x0) { + return 0; + } +LAB_0004a1c0: + *param_1 = pcVar1; + pcVar2 = pcVar1; + } + FUN_00031c38(&local_54,pcVar2,auStack_1c); + FUN_00036f1c(local_3c,&local_54); + local_20 = 0; + local_24 = 0; + if ((local_40 != &local_54) && (local_40 != (int *)0x0)) { + if ((uint)(local_54 - (int)local_40) < 0x81) { + std::__node_alloc::_M_deallocate(local_40,local_54 - (int)local_40); + } + else { + operator_delete(local_40); + } + } + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0); + pvVar4 = (void *)*param_7; + if (pvVar4 == (void *)0x0) { + pvVar4 = operator_new(0x1c); + FUN_0004a8a8(pvVar4,0,&local_54,&local_18,auStack_1c); + *param_7 = pvVar4; + } + FUN_0004aba0(&local_54,pvVar4,local_3c); + if (local_50 != '\0') { + iVar3 = (*param_5)(*param_1,param_3,param_8); + *(int *)(local_54 + 0x1c) = iVar3; + if (iVar3 == 0) { + local_18 = local_54; + FUN_0004ad36(*param_7,&local_18); + uVar5 = 0; + goto LAB_0004a26e; + } + } + *(int *)(local_54 + 0x20) = *(int *)(local_54 + 0x20) + 1; + uVar5 = *(undefined4 *)(local_54 + 0x1c); +LAB_0004a26e: + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0); + if ((local_28 != local_3c) && (local_28 != (int *)0x0)) { + if ((uint)(local_3c[0] - (int)local_28) < 0x81) { + std::__node_alloc::_M_deallocate(local_28,local_3c[0] - (int)local_28); + } + else { + operator_delete(local_28); + } + } + return uVar5; +} + + + +### FUNC FUN_0004a320 @ 0004a320 + +void FUN_0004a320(void) + +{ + FUN_0004d8c4(); + return; +} + + + +### FUNC FUN_0004a32a @ 0004a32a + +void FUN_0004a32a(void) + +{ + FUN_0004d960(); + return; +} + + + +### FUNC FUN_0004a334 @ 0004a334 + +void FUN_0004a334(void) + +{ + FUN_0004a180(); + return; +} + + + +### FUNC FUN_0004a370 @ 0004a370 + +void FUN_0004a370(void) + +{ + FUN_0004d8da(); + return; +} + + + +### FUNC FUN_0004a37c @ 0004a37c + +void FUN_0004a37c(void) + +{ + FUN_0004a180(); + return; +} + + + +### FUNC FUN_0004a3b8 @ 0004a3b8 + +void FUN_0004a3b8(void) + +{ + FUN_0004d8f0(); + return; +} + + + +### FUNC FUN_0004a3c2 @ 0004a3c2 + +void FUN_0004a3c2(void) + +{ + FUN_0004d968(); + return; +} + + + +### FUNC FUN_0004a3cc @ 0004a3cc + +void FUN_0004a3cc(void) + +{ + FUN_0004a180(); + return; +} + + + +### FUNC FUN_0004a408 @ 0004a408 + +void FUN_0004a408(void) + +{ + FUN_0004d906(); + return; +} + + + +### FUNC FUN_0004a412 @ 0004a412 + +void FUN_0004a412(void) + +{ + FUN_0004d970(); + return; +} + + + +### FUNC FUN_0004a41c @ 0004a41c + +void FUN_0004a41c(void) + +{ + FUN_0004a180(); + return; +} + + + +### FUNC FUN_0004a458 @ 0004a458 + +void FUN_0004a458(void) + +{ + FUN_0004d91c(); + return; +} + + + +### FUNC FUN_0004a462 @ 0004a462 + +void FUN_0004a462(void) + +{ + FUN_0004d978(); + return; +} + + + +### FUNC FUN_0004a46c @ 0004a46c + +void FUN_0004a46c(void) + +{ + FUN_0004a180(); + return; +} + + + +### FUNC FUN_0004a4a8 @ 0004a4a8 + +void FUN_0004a4a8(void) + +{ + FUN_0004d932(); + return; +} + + + +### FUNC FUN_0004a4b2 @ 0004a4b2 + +void FUN_0004a4b2(void) + +{ + FUN_0004d980(); + return; +} + + + +### FUNC FUN_0004a4bc @ 0004a4bc + +void FUN_0004a4bc(void) + +{ + FUN_0004a180(); + return; +} + + + +### FUNC FUN_0004a4f8 @ 0004a4f8 + +void FUN_0004a4f8(void) + +{ + FUN_0004d948(); + return; +} + + + +### FUNC FUN_0004a502 @ 0004a502 + +void FUN_0004a502(void) + +{ + FUN_0004d988(); + return; +} + + + +### FUNC FUN_0004a50c @ 0004a50c + +void FUN_0004a50c(int param_1) + +{ + int iVar1; + int iVar2; + int local_120; + undefined1 auStack_11c [260]; + int local_18; + int local_14; + + iVar1 = DAT_00070dc4; + if ((param_1 != 0) && (DAT_00070dc4 != 0)) { + local_120 = FUN_0004d990(param_1,auStack_11c); + if (local_120 != 0) { + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0); + FUN_0004b1b0(&local_18,iVar1,&local_120); + if ((local_18 != 0) && + (iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) { + FUN_0004d9c8(*(undefined4 *)(local_18 + 0x1c)); + local_14 = local_18; + FUN_0004ad36(iVar1,&local_14); + } + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0); + } + } + return; +} + + + +### FUNC FUN_0004a590 @ 0004a590 + +void FUN_0004a590(int param_1) + +{ + int iVar1; + int iVar2; + int local_120; + undefined1 auStack_11c [260]; + int local_18; + int local_14; + + iVar1 = DAT_00070dc8; + if ((param_1 != 0) && (DAT_00070dc8 != 0)) { + local_120 = FUN_0004d998(param_1,auStack_11c); + if (local_120 != 0) { + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0); + FUN_0004b1b0(&local_18,iVar1,&local_120); + if ((local_18 != 0) && + (iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) { + FUN_0004d9ca(*(undefined4 *)(local_18 + 0x1c)); + local_14 = local_18; + FUN_0004ad36(iVar1,&local_14); + } + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0); + } + } + return; +} + + + +### FUNC FUN_0004a614 @ 0004a614 + +void FUN_0004a614(int param_1) + +{ + int iVar1; + int iVar2; + int local_120; + undefined1 auStack_11c [260]; + int local_18; + int local_14; + + iVar1 = DAT_00070dcc; + if ((param_1 != 0) && (DAT_00070dcc != 0)) { + local_120 = FUN_0004d9a0(param_1,auStack_11c); + if (local_120 != 0) { + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0); + FUN_0004b1b0(&local_18,iVar1,&local_120); + if ((local_18 != 0) && + (iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) { + FUN_0004d9cc(*(undefined4 *)(local_18 + 0x1c)); + local_14 = local_18; + FUN_0004ad36(iVar1,&local_14); + } + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0); + } + } + return; +} + + + +### FUNC FUN_0004a698 @ 0004a698 + +void FUN_0004a698(int param_1) + +{ + int iVar1; + int iVar2; + int local_120; + undefined1 auStack_11c [260]; + int local_18; + int local_14; + + iVar1 = DAT_00070dd0; + if ((param_1 != 0) && (DAT_00070dd0 != 0)) { + local_120 = FUN_0004d9a8(param_1,auStack_11c); + if (local_120 != 0) { + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0); + FUN_0004b1b0(&local_18,iVar1,&local_120); + if ((local_18 != 0) && + (iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) { + FUN_0004d9ce(*(undefined4 *)(local_18 + 0x1c)); + local_14 = local_18; + FUN_0004ad36(iVar1,&local_14); + } + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0); + } + } + return; +} + + + +### FUNC FUN_0004a71c @ 0004a71c + +void FUN_0004a71c(int param_1) + +{ + int iVar1; + int iVar2; + int local_120; + undefined1 auStack_11c [260]; + int local_18; + int local_14; + + iVar1 = DAT_00070dd4; + if ((param_1 != 0) && (DAT_00070dd4 != 0)) { + local_120 = FUN_0004d9b0(param_1,auStack_11c); + if (local_120 != 0) { + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0); + FUN_0004b1b0(&local_18,iVar1,&local_120); + if ((local_18 != 0) && + (iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) { + FUN_0004d9d0(*(undefined4 *)(local_18 + 0x1c)); + local_14 = local_18; + FUN_0004ad36(iVar1,&local_14); + } + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0); + } + } + return; +} + + + +### FUNC FUN_0004a7a0 @ 0004a7a0 + +void FUN_0004a7a0(int param_1) + +{ + int iVar1; + int iVar2; + int local_120; + undefined1 auStack_11c [260]; + int local_18; + int local_14; + + iVar1 = DAT_00070dd8; + if ((param_1 != 0) && (DAT_00070dd8 != 0)) { + local_120 = FUN_0004d9b8(param_1,auStack_11c); + if (local_120 != 0) { + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0); + FUN_0004b1b0(&local_18,iVar1,&local_120); + if ((local_18 != 0) && + (iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) { + FUN_0004d9d2(*(undefined4 *)(local_18 + 0x1c)); + local_14 = local_18; + FUN_0004ad36(iVar1,&local_14); + } + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0); + } + } + return; +} + + + +### FUNC FUN_0004a824 @ 0004a824 + +void FUN_0004a824(int param_1) + +{ + int iVar1; + int iVar2; + int local_120; + undefined1 auStack_11c [260]; + int local_18; + int local_14; + + iVar1 = DAT_00070ddc; + if ((param_1 != 0) && (DAT_00070ddc != 0)) { + local_120 = FUN_0004d9c0(param_1,auStack_11c); + if (local_120 != 0) { + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0); + FUN_0004b1b0(&local_18,iVar1,&local_120); + if ((local_18 != 0) && + (iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) { + FUN_0004d9d4(*(undefined4 *)(local_18 + 0x1c)); + local_14 = local_18; + FUN_0004ad36(iVar1,&local_14); + } + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0); + } + } + return; +} + + + +### FUNC FUN_0004a8a8 @ 0004a8a8 + +int FUN_0004a8a8(int param_1,uint param_2) + +{ + int *piVar1; + int iVar2; + int *piVar3; + uint uVar4; + uint uVar5; + undefined4 local_18; + + *(undefined4 *)(param_1 + 4) = 0; + *(undefined4 *)(param_1 + 8) = 0; + *(undefined4 *)(param_1 + 0xc) = 0; + *(undefined4 *)(param_1 + 0x10) = 0; + *(undefined4 *)(param_1 + 0x14) = 0; + *(undefined4 *)(param_1 + 0x18) = 0x3f800000; + piVar1 = &DAT_0006537c; + uVar5 = 0x1e; + while (uVar4 = uVar5, 0 < (int)uVar4) { + uVar5 = uVar4 >> 1; + if ((uint)piVar1[uVar5] < param_2) { + piVar1 = piVar1 + uVar5 + 1; + uVar5 = (uVar4 - 1) - uVar5; + } + } + piVar3 = &DAT_000653f0; + if (piVar1 != (int *)&DAT_000653f4) { + piVar3 = piVar1; + } + iVar2 = *piVar3; + FUN_0004a990(param_1 + 8,iVar2 + 1); + local_18 = 0; + FUN_0004aa50(param_1 + 8,iVar2 + 1,&local_18); + return param_1; +} + + + +### FUNC FUN_0004a990 @ 0004a990 + +void FUN_0004a990(int *param_1,uint param_2) + +{ + void *pvVar1; + void *pvVar2; + int iVar3; + int iVar4; + int iVar5; + uint local_1c; + uint local_18; + + iVar5 = *param_1; + if ((uint)(param_1[2] - iVar5 >> 2) < param_2) { + if (param_2 >> 0x1e != 0) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("vector"); + } + iVar4 = param_1[1]; + iVar3 = iVar4 - iVar5; + if (iVar5 == 0) { + param_2 = param_2 << 2; + local_1c = param_2; + if (param_2 < 0x81) { + pvVar1 = (void *)std::__node_alloc::_M_allocate(&local_1c); + } + else { + pvVar1 = operator_new(param_2); + local_1c = param_2; + } + param_2 = local_1c >> 2; + } + else { + param_2 = param_2 << 2; + local_18 = param_2; + if (param_2 < 0x81) { + pvVar1 = (void *)std::__node_alloc::_M_allocate(&local_18); + param_2 = local_18; + } + else { + pvVar1 = operator_new(param_2); + } + param_2 = param_2 >> 2; + if (iVar4 != iVar5) { + __aeabi_memcpy(pvVar1,iVar5,iVar3); + } + pvVar2 = (void *)*param_1; + if (pvVar2 != (void *)0x0) { + if ((uint)(param_1[2] - (int)pvVar2) < 0x81) { + std::__node_alloc::_M_deallocate(pvVar2,param_1[2] - (int)pvVar2); + } + else { + operator_delete(pvVar2); + } + } + } + *param_1 = (int)pvVar1; + param_1[1] = (int)((int)pvVar1 + (iVar3 >> 2) * 4); + param_1[2] = (int)((int)pvVar1 + param_2 * 4); + } + return; +} + + + +### FUNC FUN_0004aa50 @ 0004aa50 + +/* WARNING: Removing unreachable block (ram,0x0004aaf6) */ + +void FUN_0004aa50(undefined4 *param_1,uint param_2,undefined4 *param_3) + +{ + void *pvVar1; + uint uVar2; + undefined4 *puVar3; + undefined4 uVar4; + int iVar5; + undefined4 *puVar6; + undefined4 *puVar7; + int iVar8; + undefined1 auStack_24 [4]; + void *local_20; + undefined4 local_1c; + int local_18; + + puVar7 = (undefined4 *)*param_1; + if ((uint)(param_1[2] - (int)puVar7 >> 2) < param_2) { + FUN_0004ab14(&local_20,param_2,param_3,auStack_24); + pvVar1 = (void *)*param_1; + *param_1 = local_20; + uVar4 = param_1[1]; + param_1[1] = local_1c; + iVar5 = param_1[2]; + param_1[2] = local_18; + if (pvVar1 != (void *)0x0) { + local_20 = pvVar1; + local_1c = uVar4; + local_18 = iVar5; + if (0x80 < (uint)(iVar5 - (int)pvVar1)) { + operator_delete(pvVar1); + return; + } + std::__node_alloc::_M_deallocate(pvVar1,iVar5 - (int)pvVar1); + return; + } + } + else { + puVar6 = (undefined4 *)param_1[1]; + uVar2 = (int)puVar6 - (int)puVar7; + if ((uint)((int)uVar2 >> 2) < param_2) { + if (0 < (int)uVar2) { + iVar5 = (uVar2 >> 2) + 1; + do { + *puVar7 = *param_3; + puVar7 = puVar7 + 1; + iVar5 = iVar5 + -1; + } while (1 < iVar5); + puVar7 = (undefined4 *)*param_1; + puVar6 = (undefined4 *)param_1[1]; + } + iVar8 = (int)puVar6 - (int)puVar7 >> 2; + iVar5 = param_2 - iVar8; + puVar7 = puVar6 + iVar5; + if (0 < iVar5 * 4) { + iVar8 = (param_2 + 1) - iVar8; + do { + *puVar6 = *param_3; + puVar6 = puVar6 + 1; + iVar8 = iVar8 + -1; + } while (1 < iVar8); + } + param_1[1] = puVar7; + return; + } + puVar3 = puVar7; + uVar2 = param_2; + if (param_2 != 0) { + do { + *puVar3 = *param_3; + uVar2 = uVar2 - 1; + puVar3 = puVar3 + 1; + } while (uVar2 != 0); + puVar7 = puVar7 + param_2; + puVar6 = (undefined4 *)param_1[1]; + } + if (puVar7 != puVar6) { + param_1[1] = puVar7; + } + } + return; +} + + + +### FUNC FUN_0004ab14 @ 0004ab14 + +undefined4 * FUN_0004ab14(undefined4 *param_1,uint param_2,undefined4 *param_3) + +{ + undefined4 *puVar1; + undefined4 uVar2; + undefined4 *puVar3; + int iVar4; + uint uVar5; + uint local_18; + + *param_1 = 0; + param_1[1] = 0; + param_1[2] = 0; + if (param_2 >> 0x1e == 0) { + if (param_2 == 0) { + *param_1 = 0; + param_1[1] = 0; + param_1[2] = 0; + puVar3 = (undefined4 *)0x0; + } + else { + uVar5 = param_2 * 4; + local_18 = uVar5; + if (uVar5 < 0x81) { + puVar1 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18); + } + else { + puVar1 = (undefined4 *)operator_new(uVar5); + local_18 = uVar5; + } + *param_1 = puVar1; + param_1[1] = puVar1; + param_1[2] = (int)puVar1 + (local_18 & 0xfffffffc); + puVar3 = puVar1 + param_2; + if (0 < (int)uVar5) { + iVar4 = param_2 + 1; + do { + *puVar1 = *param_3; + puVar1 = puVar1 + 1; + iVar4 = iVar4 + -1; + } while (1 < iVar4); + } + } + param_1[1] = puVar3; + return param_1; + } + FUN_00030824(4); + uVar2 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar2,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); +} + + + +### FUNC FUN_0004aba0 @ 0004aba0 + +void FUN_0004aba0(undefined4 *param_1,int param_2,int param_3) + +{ + int iVar1; + undefined1 uVar2; + int extraout_r1; + int iVar3; + undefined4 *puVar4; + byte *__s2; + byte *pbVar5; + uint uVar6; + size_t sVar7; + int iVar8; + int *piVar9; + int iVar10; + int *piVar11; + int *piVar12; + size_t __n; + int *piVar13; + int local_18; + + __s2 = *(byte **)(param_3 + 0x14); + __n = *(int *)(param_3 + 0x10) - (int)__s2; + iVar10 = *(int *)(param_2 + 8); + iVar1 = 0; + if (__n != 0) { + iVar1 = 0; + pbVar5 = __s2; + sVar7 = __n; + do { + iVar1 = iVar1 * 5 + (uint)*pbVar5; + pbVar5 = pbVar5 + 1; + sVar7 = sVar7 - 1; + } while (sVar7 != 0); + } + __aeabi_uidivmod(iVar1,(*(int *)(param_2 + 0xc) - iVar10 >> 2) + -1); + iVar1 = extraout_r1 * 4; + piVar11 = *(int **)(iVar10 + iVar1); + iVar8 = iVar10 + iVar1; + piVar9 = *(int **)(iVar8 + 4); + piVar12 = piVar11; + if (piVar11 == piVar9) { + iVar3 = iVar8; + if (piVar11 == *(int **)(param_2 + 4)) { + local_18 = 0; + piVar12 = (int *)(param_2 + 4); + } + else { + do { + piVar12 = *(int **)(iVar3 + -4); + iVar3 = iVar3 + -4; + } while (piVar11 == piVar12); + local_18 = (iVar3 - iVar10 >> 2) + 1; + piVar9 = (int *)*piVar12; + if ((((piVar11 != piVar9) && (piVar13 = (int *)*piVar9, piVar12 = piVar9, piVar11 != piVar13)) + && (piVar9 = (int *)*piVar13, piVar12 = piVar13, piVar11 != piVar9)) && + (piVar13 = (int *)*piVar9, piVar12 = piVar9, piVar11 != piVar13)) { + for (piVar9 = (int *)*piVar13; piVar12 = piVar13, piVar11 != piVar9; piVar9 = (int *)*piVar9 + ) { + piVar13 = (int *)*piVar13; + } + } + } + piVar9 = (int *)FUN_0004ace4((int *)(param_2 + 4),param_3); + *piVar9 = *piVar12; + *piVar12 = (int)piVar9; + puVar4 = (undefined4 *)(iVar10 + local_18 * 4); + uVar6 = (iVar8 + 4) - (int)puVar4; + if (0 < (int)uVar6) { + iVar10 = (uVar6 >> 2) + 1; + do { + *puVar4 = piVar9; + puVar4 = puVar4 + 1; + iVar10 = iVar10 + -1; + } while (1 < iVar10); + } + *(int *)(param_2 + 0x14) = *(int *)(param_2 + 0x14) + 1; + piVar12 = *(int **)(*(int *)(param_2 + 8) + iVar1); + uVar2 = 1; + } + else { + do { + if (piVar12[5] - piVar12[6] == __n) { + iVar1 = memcmp((void *)piVar12[6],__s2,__n); + uVar2 = 0; + if (iVar1 == 0) goto LAB_0004acdc; + } + piVar12 = (int *)*piVar12; + } while (piVar9 != piVar12); + piVar12 = (int *)FUN_0004ace4(param_2 + 4,param_3); + *piVar12 = *piVar11; + *piVar11 = (int)piVar12; + *(int *)(param_2 + 0x14) = *(int *)(param_2 + 0x14) + 1; + uVar2 = 1; + } +LAB_0004acdc: + *(undefined1 *)(param_1 + 1) = uVar2; + *param_1 = piVar12; + return; +} + + + +### FUNC FUN_0004ace4 @ 0004ace4 + +undefined4 * FUN_0004ace4(undefined4 param_1,int param_2) + +{ + undefined4 *puVar1; + undefined4 uVar2; + uint local_14; + + local_14 = 0x24; + puVar1 = (undefined4 *)std::__node_alloc::_M_allocate(&local_14); + FUN_00036f1c(puVar1 + 1,param_2); + puVar1[7] = *(undefined4 *)(param_2 + 0x18); + uVar2 = *(undefined4 *)(param_2 + 0x1c); + *puVar1 = 0; + puVar1[8] = uVar2; + return puVar1; +} + + + +### FUNC FUN_0004ad36 @ 0004ad36 + +void FUN_0004ad36(int param_1,undefined4 *param_2) + +{ + int iVar1; + int extraout_r1; + int *piVar2; + uint uVar3; + byte *pbVar4; + int *piVar5; + int iVar6; + int *piVar7; + int iVar8; + int *piVar9; + int iVar10; + + piVar9 = (int *)*param_2; + pbVar4 = (byte *)piVar9[6]; + iVar6 = piVar9[5] - (int)pbVar4; + iVar10 = *(int *)(param_1 + 8); + iVar1 = 0; + if (iVar6 != 0) { + iVar1 = 0; + do { + iVar1 = iVar1 * 5 + (uint)*pbVar4; + pbVar4 = pbVar4 + 1; + iVar6 = iVar6 + -1; + } while (iVar6 != 0); + } + __aeabi_uidivmod(iVar1,(*(int *)(param_1 + 0xc) - iVar10 >> 2) + -1); + iVar1 = extraout_r1 * 4; + piVar2 = *(int **)(iVar10 + iVar1); + if (piVar2 != piVar9) { + iVar6 = 0; + for (piVar7 = (int *)*piVar2; *(int **)(iVar10 + iVar1 + 4) != piVar7; piVar7 = (int *)*piVar7) + { + if (piVar9 == piVar7) { + piVar7 = (int *)*piVar2; + *piVar2 = *piVar7; + piVar9 = (int *)piVar7[6]; + if ((piVar9 == piVar7 + 1) || (piVar9 == (int *)0x0)) { + iVar6 = 1; + if (piVar7 == (int *)0x0) break; + } + else { + uVar3 = piVar7[1] - (int)piVar9; + if (uVar3 < 0x81) { + std::__node_alloc::_M_deallocate(piVar9,uVar3); + } + else { + operator_delete(piVar9); + } + } + std::__node_alloc::_M_deallocate(piVar7,0x24); + iVar6 = 1; + break; + } + piVar2 = (int *)*piVar2; + } + goto LAB_0004ae5e; + } + iVar6 = iVar10 + iVar1; + if (piVar9 == *(int **)(param_1 + 4)) { + iVar6 = 0; + piVar2 = (int *)(param_1 + 4); + } + else { + do { + piVar2 = *(int **)(iVar6 + -4); + iVar6 = iVar6 + -4; + } while (piVar9 == piVar2); + iVar6 = (iVar6 - iVar10 >> 2) + 1; + piVar7 = (int *)*piVar2; + if (((piVar9 != piVar7) && (piVar5 = (int *)*piVar7, piVar2 = piVar7, piVar9 != piVar5)) && + (piVar7 = (int *)*piVar5, piVar2 = piVar5, piVar9 != piVar7)) { + piVar2 = piVar7; + for (piVar5 = (int *)*piVar7; piVar9 != piVar5; piVar5 = (int *)*piVar5) { + piVar2 = (int *)*piVar2; + } + } + } + piVar7 = (int *)*piVar2; + iVar8 = *piVar7; + *piVar2 = iVar8; + piVar2 = (int *)(iVar10 + iVar6 * 4); + piVar9 = (int *)piVar7[6]; + if ((piVar9 == piVar7 + 1) || (piVar9 == (int *)0x0)) { + if (piVar7 != (int *)0x0) goto LAB_0004ae2e; + } + else { + uVar3 = piVar7[1] - (int)piVar9; + if (uVar3 < 0x81) { + std::__node_alloc::_M_deallocate(piVar9,uVar3); + } + else { + operator_delete(piVar9); + } +LAB_0004ae2e: + std::__node_alloc::_M_deallocate(piVar7,0x24); + } + uVar3 = (iVar10 + iVar1 + 4) - (int)piVar2; + if (0 < (int)uVar3) { + iVar1 = (uVar3 >> 2) + 1; + do { + *piVar2 = iVar8; + piVar2 = piVar2 + 1; + iVar1 = iVar1 + -1; + } while (1 < iVar1); + } + iVar6 = 1; +LAB_0004ae5e: + *(int *)(param_1 + 0x14) = *(int *)(param_1 + 0x14) - iVar6; + FUN_0004ae70(); + return; +} + + + +### FUNC FUN_0004ae70 @ 0004ae70 + +void FUN_0004ae70(int param_1) + +{ + undefined4 uVar1; + undefined4 uVar2; + undefined4 uVar3; + undefined4 uVar4; + int iVar5; + uint uVar6; + uint uVar7; + char *pcVar8; + uint uVar9; + char *pcVar10; + + uVar9 = (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 8) >> 2) - 1; + uVar1 = __floatunsisf(*(undefined4 *)(param_1 + 0x14)); + uVar2 = __floatunsisf(uVar9); + uVar2 = __divsf3(uVar1,uVar2); + uVar3 = *(undefined4 *)(param_1 + 0x18); + uVar4 = __mulsf3(uVar3,0x3e800000); + iVar5 = __aeabi_fcmpgt(uVar2,uVar4); + if (iVar5 == 0) { + iVar5 = 0; + uVar7 = 0x1e; + while (uVar6 = uVar7, 0 < (int)uVar6) { + uVar7 = uVar6 >> 1; + if ((uint)(&DAT_0006537c)[uVar7 + iVar5] < uVar9) { + iVar5 = uVar7 + iVar5 + 1; + uVar7 = (uVar6 - 1) - uVar7; + } + } + pcVar8 = (char *)(&DAT_0006537c + iVar5); + if ((iVar5 * 4 == 0x78) || ((iVar5 != 0 && ((&DAT_0006537c)[iVar5] == uVar9)))) { + pcVar8 = "St7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE" + iVar5 * 4 + 0x38; + } + if (pcVar8 == "\a") { + if (uVar9 < 8) { + return; + } + pcVar8 = "\a"; + } + else { + uVar2 = __floatunsisf(*(undefined4 *)(pcVar8 + -4)); + uVar2 = __divsf3(uVar1,uVar2); + iVar5 = __aeabi_fcmpgt(uVar2,uVar3); + if (iVar5 != 0) { + return; + } + if (pcVar8 != "\x17") { + do { + pcVar10 = pcVar8 + -4; + uVar2 = __floatunsisf(*(undefined4 *)(pcVar8 + -8)); + uVar2 = __divsf3(uVar1,uVar2); + iVar5 = __aeabi_fcmpgt(uVar2,uVar3); + if (iVar5 != 0) break; + pcVar8 = pcVar10; + } while (pcVar10 != "\x17"); + } + } + FUN_0004af88(param_1,*(undefined4 *)pcVar8); + } + return; +} + + + +### FUNC FUN_0004af88 @ 0004af88 + +/* WARNING: Type propagation algorithm not settling */ + +void FUN_0004af88(int param_1,int param_2) + +{ + uint uVar1; + uint uVar2; + int iVar3; + void *pvVar4; + undefined4 uVar5; + int ******ppppppiVar6; + int ******ppppppiVar7; + int extraout_r1; + int *******pppppppiVar8; + int *******pppppppiVar9; + undefined4 *puVar10; + size_t sVar11; + void *pvVar12; + int *******pppppppiVar13; + int *******pppppppiVar14; + int *******pppppppiVar15; + size_t __n; + int *******pppppppiVar16; + int *******pppppppiVar17; + void *local_44; + int local_40; + void *local_28; + int *******local_1c; + uint local_18; + + local_28 = (void *)0x0; + local_1c = (int *******)0x0; + pppppppiVar15 = (int *******)(param_1 + 4); + uVar1 = param_2 + 1; + if (uVar1 >> 0x1e == 0) { + if (uVar1 == 0) { + local_40 = 0; + local_44 = (void *)0x0; + } + else { + uVar1 = uVar1 * 4; + local_18 = uVar1; + if (uVar1 < 0x81) { + local_28 = (void *)std::__node_alloc::_M_allocate(&local_18); + uVar2 = local_18; + } + else { + local_28 = operator_new(uVar1); + uVar2 = uVar1; + } + local_44 = (void *)((int)local_28 + uVar1); + local_40 = (int)local_28 + (uVar2 & 0xfffffffc); + if (0 < (int)uVar1) { + iVar3 = -2 - param_2; + if (-2 - param_2 < -1) { + iVar3 = -2; + } + __aeabi_memclr4(local_28,(iVar3 + param_2) * 4 + 0xc); + } + } + pppppppiVar16 = (int *******)*pppppppiVar15; + while (pppppppiVar16 != (int *******)0x0) { + ppppppiVar6 = pppppppiVar16[6]; + __n = (int)pppppppiVar16[5] - (int)ppppppiVar6; + iVar3 = 0; + if (__n != 0) { + iVar3 = 0; + ppppppiVar7 = ppppppiVar6; + sVar11 = __n; + do { + iVar3 = iVar3 * 5 + (uint)*(byte *)ppppppiVar7; + ppppppiVar7 = (int ******)((int)ppppppiVar7 + 1); + sVar11 = sVar11 - 1; + } while (sVar11 != 0); + } + __aeabi_uidivmod(iVar3,param_2); + ppppppiVar7 = *pppppppiVar16; + pppppppiVar17 = pppppppiVar16; + while (((ppppppiVar7 != (int ******)0x0 && (__n == (int)ppppppiVar7[5] - (int)ppppppiVar7[6])) + && (iVar3 = memcmp(ppppppiVar6,ppppppiVar7[6],__n), iVar3 == 0))) { + ppppppiVar7 = (int ******)*ppppppiVar7; + pppppppiVar17 = (int *******)*pppppppiVar17; + } + pppppppiVar13 = *(int ********)((int)local_28 + extraout_r1 * 4); + pvVar4 = (void *)((int)local_28 + extraout_r1 * 4); + iVar3 = 0; + pvVar12 = pvVar4; + pppppppiVar8 = (int *******)&local_1c; + if (pppppppiVar13 != local_1c) { + do { + pppppppiVar8 = *(int ********)((int)pvVar12 + -4); + pvVar12 = (void *)((int)pvVar12 + -4); + } while (pppppppiVar13 == pppppppiVar8); + iVar3 = ((int)pvVar12 - (int)local_28 >> 2) + 1; + pppppppiVar14 = (int *******)*pppppppiVar8; + if ((pppppppiVar13 != pppppppiVar14) && + (pppppppiVar9 = (int *******)*pppppppiVar14, pppppppiVar8 = pppppppiVar14, + pppppppiVar13 != pppppppiVar9)) { + for (pppppppiVar14 = (int *******)*pppppppiVar9; pppppppiVar8 = pppppppiVar9, + pppppppiVar13 != pppppppiVar14; pppppppiVar14 = (int *******)*pppppppiVar14) { + pppppppiVar9 = (int *******)*pppppppiVar9; + } + } + } + if (((pppppppiVar15 != pppppppiVar17) && (pppppppiVar15 != pppppppiVar8)) && + (pppppppiVar8 != pppppppiVar17)) { + ppppppiVar6 = *pppppppiVar8; + *pppppppiVar15 = *pppppppiVar17; + *pppppppiVar8 = (int ******)pppppppiVar16; + *pppppppiVar17 = ppppppiVar6; + } + puVar10 = (undefined4 *)((int)local_28 + iVar3 * 4); + uVar1 = (int)pvVar4 + (4 - (int)puVar10); + if (0 < (int)uVar1) { + iVar3 = (uVar1 >> 2) + 1; + do { + *puVar10 = pppppppiVar16; + puVar10 = puVar10 + 1; + iVar3 = iVar3 + -1; + } while (1 < iVar3); + } + pppppppiVar16 = (int *******)*pppppppiVar15; + } + *(int ********)(param_1 + 4) = local_1c; + *(void **)(param_1 + 0xc) = local_44; + pvVar12 = *(void **)(param_1 + 8); + *(void **)(param_1 + 8) = local_28; + iVar3 = *(int *)(param_1 + 0x10); + *(int *)(param_1 + 0x10) = local_40; + local_1c = pppppppiVar16; + if (pvVar12 != (void *)0x0) { + uVar1 = iVar3 - (int)pvVar12; + if (uVar1 < 0x81) { + std::__node_alloc::_M_deallocate(pvVar12,uVar1); + pppppppiVar16 = local_1c; + } + else { + operator_delete(pvVar12); + pppppppiVar16 = local_1c; + } + } + while (pppppppiVar16 != (int *******)0x0) { + pppppppiVar15 = (int *******)pppppppiVar16[6]; + pppppppiVar17 = (int *******)*pppppppiVar16; + if ((pppppppiVar15 != pppppppiVar16 + 1) && (pppppppiVar15 != (int *******)0x0)) { + uVar1 = (int)pppppppiVar16[1] - (int)pppppppiVar15; + if (uVar1 < 0x81) { + std::__node_alloc::_M_deallocate(pppppppiVar15,uVar1); + } + else { + operator_delete(pppppppiVar15); + } + } + std::__node_alloc::_M_deallocate(pppppppiVar16,0x24); + pppppppiVar16 = pppppppiVar17; + } + return; + } + FUN_00030824(4); + uVar5 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar5,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); +} + + + +### FUNC FUN_0004b1b0 @ 0004b1b0 + +void FUN_0004b1b0(int *param_1,int param_2,undefined4 *param_3) + +{ + bool bVar1; + int *piVar2; + int iVar3; + int iVar4; + size_t __n; + int *piVar5; + undefined1 auStack_30 [4]; + int local_2c [4]; + int local_1c; + int *local_18; + + iVar3 = FUN_0004b24a(param_2,param_3); + piVar5 = *(int **)(*(int *)(param_2 + 8) + iVar3 * 4); + iVar3 = *(int *)(*(int *)(param_2 + 8) + iVar3 * 4 + 4); + while( true ) { + if ((int *)iVar3 == piVar5) { + *param_1 = 0; + return; + } + FUN_00031c38(local_2c,*param_3,auStack_30); + piVar2 = local_18; + __n = piVar5[5] - piVar5[6]; + bVar1 = false; + if (__n == local_1c - (int)local_18) { + iVar4 = memcmp((void *)piVar5[6],local_18,__n); + bVar1 = true; + if (iVar4 != 0) { + bVar1 = false; + } + } + if ((piVar2 != local_2c) && (piVar2 != (int *)0x0)) { + if ((uint)(local_2c[0] - (int)piVar2) < 0x81) { + std::__node_alloc::_M_deallocate(piVar2,local_2c[0] - (int)piVar2); + } + else { + operator_delete(piVar2); + } + } + if (bVar1) break; + piVar5 = (int *)*piVar5; + } + *param_1 = (int)piVar5; + return; +} + + + +### FUNC FUN_0004b24a @ 0004b24a + +undefined4 FUN_0004b24a(int param_1,undefined4 *param_2) + +{ + int iVar1; + undefined4 extraout_r1; + int iVar2; + byte *pbVar3; + int iVar4; + undefined1 auStack_2c [4]; + int local_28 [4]; + int local_18; + byte *local_14; + + iVar2 = *(int *)(param_1 + 8); + iVar1 = *(int *)(param_1 + 0xc); + FUN_00031c38(local_28,*param_2,auStack_2c); + local_18 = local_18 - (int)local_14; + iVar4 = 0; + if (local_18 != 0) { + iVar4 = 0; + pbVar3 = local_14; + do { + iVar4 = iVar4 * 5 + (uint)*pbVar3; + pbVar3 = pbVar3 + 1; + local_18 = local_18 + -1; + } while (local_18 != 0); + } + if ((local_14 != (byte *)0x0) && (local_14 != (byte *)local_28)) { + if ((uint)(local_28[0] - (int)local_14) < 0x81) { + std::__node_alloc::_M_deallocate(local_14,local_28[0] - (int)local_14); + } + else { + operator_delete(local_14); + } + } + __aeabi_uidivmod(iVar4,(iVar1 - iVar2 >> 2) + -1); + return extraout_r1; +} + + + +### FUNC ctype_byname @ 0004b2b0 + +/* std::ctype_byname::ctype_byname(char const*, unsigned int) */ + +ctype_byname * __thiscall +std::ctype_byname::ctype_byname(ctype_byname *this,char *param_1,uint param_2) + +{ + int iVar1; + undefined4 uVar2; + int iVar3; + undefined1 auStack_118 [256]; + int local_18; + char *local_14; + + local_14 = param_1; + ctype::ctype((ctype *)this,(mask *)0x0,false,param_2); + *(undefined ***)this = &PTR__ctype_byname_000695f8; + if (param_1 == (char *)0x0) { + locale::_M_throw_on_null_name(); + } + else { + iVar3 = 0; + iVar1 = FUN_0004a144(&local_14,auStack_118,0,&local_18); + *(int *)(this + 0x414) = iVar1; + if (iVar1 != 0) { + *(ctype_byname **)(this + 0xc) = this + 0x14; + iVar1 = FUN_0004dab0(); + do { + *(uint *)(this + iVar3 * -2 + 0x14) = (uint)*(ushort *)(iVar1 - iVar3); + iVar3 = iVar3 + -2; + } while (iVar3 != -0x200); + return this; + } + } + uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"ctype"); + ctype::~ctype((ctype *)this); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar2); +} + + + +### FUNC _M_init @ 0004b348 + +/* std::ctype_byname::_M_init() */ + +void __thiscall std::ctype_byname::_M_init(ctype_byname *this) + +{ + ushort *puVar1; + int iVar2; + ctype_byname *pcVar3; + + pcVar3 = this + 0x14; + *(ctype_byname **)(this + 0xc) = pcVar3; + puVar1 = (ushort *)FUN_0004dab0(*(undefined4 *)(this + 0x414)); + iVar2 = 0x100; + do { + *(uint *)pcVar3 = (uint)*puVar1; + pcVar3 = pcVar3 + 4; + iVar2 = iVar2 + -1; + puVar1 = puVar1 + 1; + } while (iVar2 != 0); + return; +} + + + +### FUNC ~ctype_byname @ 0004b370 + +/* std::ctype_byname::~ctype_byname() */ + +void __thiscall std::ctype_byname::~ctype_byname(ctype_byname *this) + +{ + *(undefined ***)this = &PTR__ctype_byname_000695f8; + FUN_0004a50c(*(undefined4 *)(this + 0x414)); + ctype::~ctype((ctype *)this); + return; +} + + + +### FUNC ~ctype_byname @ 0004b3ac + +/* std::ctype_byname::~ctype_byname() */ + +void __thiscall std::ctype_byname::~ctype_byname(ctype_byname *this) + +{ + *(undefined ***)this = &PTR__ctype_byname_000695f8; + FUN_0004a50c(*(undefined4 *)(this + 0x414)); + ctype::~ctype((ctype *)this); + operator_delete(this); + return; +} + + + +### FUNC do_toupper @ 0004b3f8 + +/* std::ctype_byname::do_toupper(char) const */ + +undefined1 std::ctype_byname::do_toupper(char param_1) + +{ + undefined1 uVar1; + + uVar1 = FUN_0004dabc(*(undefined4 *)(param_1 + 0x414)); + return uVar1; +} + + + +### FUNC do_tolower @ 0004b410 + +/* std::ctype_byname::do_tolower(char) const */ + +undefined1 std::ctype_byname::do_tolower(char param_1) + +{ + undefined1 uVar1; + + uVar1 = FUN_0004dac8(*(undefined4 *)(param_1 + 0x414)); + return uVar1; +} + + + +### FUNC do_toupper @ 0004b428 + +/* std::ctype_byname::do_toupper(char*, char const*) const */ + +char * __thiscall +std::ctype_byname::do_toupper(ctype_byname *this,char *param_1,char *param_2) + +{ + char cVar1; + + if (param_1 != param_2) { + do { + cVar1 = FUN_0004dabc(*(undefined4 *)(this + 0x414),*param_1); + *param_1 = cVar1; + param_1 = param_1 + 1; + } while (param_2 != param_1); + } + return param_2; +} + + + +### FUNC do_tolower @ 0004b454 + +/* std::ctype_byname::do_tolower(char*, char const*) const */ + +char * __thiscall +std::ctype_byname::do_tolower(ctype_byname *this,char *param_1,char *param_2) + +{ + char cVar1; + + if (param_1 != param_2) { + do { + cVar1 = FUN_0004dac8(*(undefined4 *)(this + 0x414),*param_1); + *param_1 = cVar1; + param_1 = param_1 + 1; + } while (param_2 != param_1); + } + return param_2; +} + + + +### FUNC ctype_byname @ 0004b480 + +/* std::ctype_byname::ctype_byname(char const*, unsigned int) */ + +ctype_byname * __thiscall +std::ctype_byname::ctype_byname(ctype_byname *this,char *param_1,uint param_2) + +{ + int iVar1; + undefined4 uVar2; + undefined1 auStack_118 [256]; + int local_18; + char *local_14; + + *(uint *)(this + 4) = (uint)(param_2 != 0); + local_14 = param_1; + pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)this = &PTR__ctype_byname_00069628; + if (param_1 == (char *)0x0) { + locale::_M_throw_on_null_name(); + } + else { + iVar1 = FUN_0004a144(&local_14,auStack_118,0,&local_18); + *(int *)(this + 0xc) = iVar1; + if (iVar1 != 0) { + return this; + } + } + uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"ctype"); + ctype::~ctype((ctype *)this); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar2); +} + + + +### FUNC ~ctype_byname @ 0004b4f4 + +/* std::ctype_byname::~ctype_byname() */ + +void __thiscall std::ctype_byname::~ctype_byname(ctype_byname *this) + +{ + *(undefined ***)this = &PTR__ctype_byname_00069628; + FUN_0004a50c(*(undefined4 *)(this + 0xc)); + ctype::~ctype((ctype *)this); + return; +} + + + +### FUNC ~ctype_byname @ 0004b528 + +/* std::ctype_byname::~ctype_byname() */ + +void __thiscall std::ctype_byname::~ctype_byname(ctype_byname *this) + +{ + *(undefined ***)this = &PTR__ctype_byname_00069628; + FUN_0004a50c(*(undefined4 *)(this + 0xc)); + ctype::~ctype((ctype *)this); + operator_delete(this); + return; +} + + + +### FUNC do_is @ 0004b56c + +/* std::ctype_byname::do_is(std::ctype_base::mask, wchar_t) const */ + +bool __thiscall +std::ctype_byname::do_is(ctype_byname *this,undefined2 param_2,undefined4 param_3) + +{ + int iVar1; + + iVar1 = FUN_0004dad4(*(undefined4 *)(this + 0xc),param_3,param_2); + return iVar1 != 0; +} + + + +### FUNC do_is @ 0004b590 + +/* std::ctype_byname::do_is(wchar_t const*, wchar_t const*, std::ctype_base::mask*) const + */ + +wchar_t * __thiscall +std::ctype_byname::do_is + (ctype_byname *this,wchar_t *param_1,wchar_t *param_2,mask *param_3) + +{ + undefined4 uVar1; + wchar_t wVar2; + + if (param_1 < param_2) { + do { + wVar2 = *param_1; + param_1 = param_1 + 1; + uVar1 = FUN_0004dad4(*(undefined4 *)(this + 0xc),wVar2,0x1ff); + *(undefined4 *)param_3 = uVar1; + param_3 = (mask *)((int)param_3 + 4); + } while (param_1 < param_2); + } + return param_2; +} + + + +### FUNC do_scan_is @ 0004b5c0 + +/* std::ctype_byname::do_scan_is(std::ctype_base::mask, wchar_t const*, wchar_t const*) + const */ + +void __thiscall +std::ctype_byname::do_scan_is + (ctype_byname *this,uint param_2,undefined4 param_3,undefined4 param_4) + +{ + undefined1 auStack_1c [4]; + uint local_18; + undefined4 local_14; + + local_14 = *(undefined4 *)(this + 0xc); + local_18 = param_2 & 0xffff; + FUN_0004cc5c(param_3,param_4,&local_18,auStack_1c); + return; +} + + + +### FUNC do_scan_not @ 0004b5ec + +/* std::ctype_byname::do_scan_not(std::ctype_base::mask, wchar_t const*, wchar_t const*) + const */ + +void __thiscall +std::ctype_byname::do_scan_not + (ctype_byname *this,uint param_2,undefined4 param_3,undefined4 param_4) + +{ + undefined1 auStack_20 [4]; + undefined1 auStack_1c [4]; + uint local_18; + undefined4 local_14; + + local_14 = *(undefined4 *)(this + 0xc); + local_18 = param_2 & 0xffff; + FUN_0004cd16(param_3,param_4,auStack_1c,auStack_20); + return; +} + + + +### FUNC do_toupper @ 0004b618 + +/* std::ctype_byname::do_toupper(wchar_t) const */ + +void std::ctype_byname::do_toupper(wchar_t param_1) + +{ + FUN_0004dbb8(*(undefined4 *)(param_1 + L'\f')); + return; +} + + + +### FUNC do_toupper @ 0004b624 + +/* std::ctype_byname::do_toupper(wchar_t*, wchar_t const*) const */ + +wchar_t * __thiscall +std::ctype_byname::do_toupper + (ctype_byname *this,wchar_t *param_1,wchar_t *param_2) + +{ + wchar_t wVar1; + + if (param_1 < param_2) { + do { + wVar1 = FUN_0004dbb8(*(undefined4 *)(this + 0xc),*param_1); + *param_1 = wVar1; + param_1 = param_1 + 1; + } while (param_1 < param_2); + } + return param_2; +} + + + +### FUNC do_tolower @ 0004b64e + +/* std::ctype_byname::do_tolower(wchar_t) const */ + +void std::ctype_byname::do_tolower(wchar_t param_1) + +{ + FUN_0004dbac(*(undefined4 *)(param_1 + L'\f')); + return; +} + + + +### FUNC do_tolower @ 0004b65a + +/* std::ctype_byname::do_tolower(wchar_t*, wchar_t const*) const */ + +wchar_t * __thiscall +std::ctype_byname::do_tolower + (ctype_byname *this,wchar_t *param_1,wchar_t *param_2) + +{ + wchar_t wVar1; + + if (param_1 < param_2) { + do { + wVar1 = FUN_0004dbac(*(undefined4 *)(this + 0xc),*param_1); + *param_1 = wVar1; + param_1 = param_1 + 1; + } while (param_1 < param_2); + } + return param_2; +} + + + +### FUNC collate_byname @ 0004b684 + +/* std::collate_byname::collate_byname(char const*, unsigned int) */ + +collate_byname * __thiscall +std::collate_byname::collate_byname(collate_byname *this,char *param_1,uint param_2) + +{ + int iVar1; + undefined4 uVar2; + undefined1 auStack_118 [256]; + int local_18; + char *local_14; + + *(uint *)(this + 4) = (uint)(param_2 != 0); + local_14 = param_1; + pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)this = &PTR__collate_byname_00069668; + if (param_1 == (char *)0x0) { + locale::_M_throw_on_null_name(); + } + else { + iVar1 = FUN_0004a41c(&local_14,auStack_118,0,&local_18); + *(int *)(this + 0xc) = iVar1; + if (iVar1 != 0) { + return this; + } + } + uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"collate"); + collate::~collate((collate *)this); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar2); +} + + + +### FUNC ~collate_byname @ 0004b6f8 + +/* std::collate_byname::~collate_byname() */ + +void __thiscall std::collate_byname::~collate_byname(collate_byname *this) + +{ + *(undefined ***)this = &PTR__collate_byname_00069668; + FUN_0004a71c(*(undefined4 *)(this + 0xc)); + collate::~collate((collate *)this); + return; +} + + + +### FUNC ~collate_byname @ 0004b72c + +/* std::collate_byname::~collate_byname() */ + +void __thiscall std::collate_byname::~collate_byname(collate_byname *this) + +{ + *(undefined ***)this = &PTR__collate_byname_00069668; + FUN_0004a71c(*(undefined4 *)(this + 0xc)); + collate::~collate((collate *)this); + operator_delete(this); + return; +} + + + +### FUNC do_compare @ 0004b770 + +/* std::collate_byname::do_compare(char const*, char const*, char const*, char const*) const + */ + +void __thiscall +std::collate_byname::do_compare + (collate_byname *this,char *param_1,char *param_2,char *param_3,char *param_4) + +{ + FUN_0004dbe6(*(undefined4 *)(this + 0xc),param_1,(int)param_2 - (int)param_1,param_3, + (int)param_4 - (int)param_3); + return; +} + + + +### FUNC do_transform @ 0004b78c + +/* std::collate_byname::do_transform(char const*, char const*) const */ + +void std::collate_byname::do_transform(char *param_1,char *param_2) + +{ + uint uVar1; + uint uVar2; + uint uVar3; + int in_r2; + int in_r3; + undefined1 *puVar4; + int local_30 [4]; + int *local_20; + int *local_1c; + uint local_18; + + if (in_r2 == in_r3) { + *param_1 = '\0'; + *(char **)(param_1 + 0x10) = param_1; + *(char **)(param_1 + 0x14) = param_1; + } + else { + uVar1 = FUN_0004dd0a(*(undefined4 *)(param_2 + 0xc),0,0); + local_20 = local_30; + uVar2 = uVar1 + 1; + local_1c = local_20; + if (uVar2 == 0) { + /* WARNING: Subroutine does not return */ + __stl_throw_length_error("basic_string"); + } + if (0x10 < uVar2) { + local_18 = uVar2; + if (uVar2 < 0x81) { + local_1c = (int *)__node_alloc::_M_allocate(&local_18); + uVar3 = local_18; + } + else { + local_1c = (int *)operator_new(uVar2); + uVar3 = uVar2; + } + local_30[0] = (int)local_1c + uVar3; + } + puVar4 = (undefined1 *)((int)local_1c + uVar1); + if (0 < (int)uVar1) { + uVar3 = uVar1 ^ 0xffffffff; + if ((int)(uVar1 ^ 0xffffffff) < -1) { + uVar3 = 0xfffffffe; + } + local_20 = local_1c; + __aeabi_memclr(local_1c,uVar1 + uVar3 + 2); + } + local_20 = (int *)puVar4; + *puVar4 = 0; + FUN_0004dd0a(*(undefined4 *)(param_2 + 0xc),local_1c,uVar2); + FUN_00036f1c(param_1,local_30); + if ((local_1c != local_30) && (local_1c != (int *)0x0)) { + if (0x80 < (uint)(local_30[0] - (int)local_1c)) { + operator_delete(local_1c); + return; + } + __node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); + return; + } + } + return; +} + + + +### FUNC collate_byname @ 0004b898 + +/* std::collate_byname::collate_byname(char const*, unsigned int) */ + +collate_byname * __thiscall +std::collate_byname::collate_byname + (collate_byname *this,char *param_1,uint param_2) + +{ + int iVar1; + undefined4 uVar2; + undefined1 auStack_118 [256]; + int local_18; + char *local_14; + + *(uint *)(this + 4) = (uint)(param_2 != 0); + local_14 = param_1; + pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)this = &PTR__collate_byname_00069684; + if (param_1 == (char *)0x0) { + locale::_M_throw_on_null_name(); + } + else { + iVar1 = FUN_0004a41c(&local_14,auStack_118,0,&local_18); + *(int *)(this + 0xc) = iVar1; + if (iVar1 != 0) { + return this; + } + } + uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"collate"); + collate::~collate((collate *)this); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar2); +} + + + +### FUNC ~collate_byname @ 0004b90c + +/* std::collate_byname::~collate_byname() */ + +void __thiscall std::collate_byname::~collate_byname(collate_byname *this) + +{ + *(undefined ***)this = &PTR__collate_byname_00069684; + FUN_0004a71c(*(undefined4 *)(this + 0xc)); + collate::~collate((collate *)this); + return; +} + + + +### FUNC ~collate_byname @ 0004b940 + +/* std::collate_byname::~collate_byname() */ + +void __thiscall std::collate_byname::~collate_byname(collate_byname *this) + +{ + *(undefined ***)this = &PTR__collate_byname_00069684; + FUN_0004a71c(*(undefined4 *)(this + 0xc)); + collate::~collate((collate *)this); + operator_delete(this); + return; +} + + + +### FUNC do_compare @ 0004b984 + +/* std::collate_byname::do_compare(wchar_t const*, wchar_t const*, wchar_t const*, wchar_t + const*) const */ + +void __thiscall +std::collate_byname::do_compare + (collate_byname *this,wchar_t *param_1,wchar_t *param_2,wchar_t *param_3, + wchar_t *param_4) + +{ + FUN_0004dc70(*(undefined4 *)(this + 0xc),param_1,(int)param_2 - (int)param_1 >> 2,param_3, + (int)param_4 - (int)param_3 >> 2); + return; +} + + + +### FUNC do_transform @ 0004b9a4 + +/* std::collate_byname::do_transform(wchar_t const*, wchar_t const*) const */ + +void std::collate_byname::do_transform(wchar_t *param_1,wchar_t *param_2) + +{ + int *piVar1; + uint uVar2; + uint uVar3; + int in_r2; + int in_r3; + uint uVar4; + int *piVar5; + int local_60 [16]; + int *local_20; + int *local_1c; + uint local_18; + + if (in_r2 == in_r3) { + *param_1 = L'\0'; + param_1[0x10] = (wchar_t)param_1; + param_1[0x11] = (wchar_t)param_1; + } + else { + uVar2 = FUN_0004dd2e(param_2[3],0,0); + local_20 = local_60; + uVar3 = uVar2 + 1; + local_1c = local_20; + if (0x3ffffffe < uVar2) { + /* WARNING: Subroutine does not return */ + __stl_throw_length_error("basic_string"); + } + if (0x10 < uVar3) { + uVar4 = uVar3 * 4; + local_18 = uVar4; + if (uVar4 < 0x81) { + local_1c = (int *)__node_alloc::_M_allocate(&local_18); + uVar4 = local_18; + } + else { + local_1c = (int *)operator_new(uVar4); + } + local_60[0] = (int)local_1c + (uVar4 & 0xfffffffc); + } + piVar5 = local_1c + uVar2; + if (0 < (int)(uVar2 * 4)) { + uVar4 = uVar2 ^ 0xffffffff; + if ((int)(uVar2 ^ 0xffffffff) < -1) { + uVar4 = 0xfffffffe; + } + local_20 = local_1c; + __aeabi_memclr4(local_1c,(uVar2 + uVar4) * 4 + 8); + } + piVar1 = local_1c; + local_20 = piVar5; + *piVar5 = 0; + FUN_0004dd2e(param_2[3],piVar1,uVar3); + FUN_0004bac8(param_1,local_60); + if ((local_1c != local_60) && (local_1c != (int *)0x0)) { + if (0x80 < (uint)(local_60[0] - (int)local_1c)) { + operator_delete(local_1c); + return; + } + __node_alloc::_M_deallocate(local_1c,local_60[0] - (int)local_1c); + return; + } + } + return; +} + + + +### FUNC FUN_0004bac8 @ 0004bac8 + +int * FUN_0004bac8(int *param_1,int param_2) + +{ + int iVar1; + uint uVar2; + int *piVar3; + int iVar4; + int iVar5; + uint local_18; + + param_1[0x10] = (int)param_1; + param_1[0x11] = (int)param_1; + iVar1 = *(int *)(param_2 + 0x40); + iVar4 = *(int *)(param_2 + 0x44); + iVar5 = iVar1 - iVar4; + uVar2 = (iVar5 >> 2) + 1; + if ((uint)(iVar5 >> 2) < 0x3fffffff) { + piVar3 = param_1; + if (0x10 < uVar2) { + uVar2 = uVar2 * 4; + local_18 = uVar2; + if (uVar2 < 0x81) { + piVar3 = (int *)std::__node_alloc::_M_allocate(&local_18); + uVar2 = local_18; + } + else { + piVar3 = (int *)operator_new(uVar2); + } + param_1[0x10] = (int)piVar3; + param_1[0x11] = (int)piVar3; + *param_1 = (int)piVar3 + (uVar2 & 0xfffffffc); + } + if (iVar1 != iVar4) { + __aeabi_memcpy(piVar3,iVar4,iVar5); + piVar3 = (int *)((int)piVar3 + iVar5); + } + param_1[0x10] = (int)piVar3; + *piVar3 = 0; + return param_1; + } + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); +} + + + +### FUNC codecvt_byname @ 0004bb78 + +/* std::codecvt_byname::codecvt_byname(char const*, unsigned int) */ + +codecvt_byname * __thiscall +std::codecvt_byname::codecvt_byname + (codecvt_byname *this,char *param_1,uint param_2) + +{ + undefined4 uVar1; + + *(uint *)(this + 4) = (uint)(param_2 != 0); + pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)this = &PTR__codecvt_byname_000696a0; + if (param_1 != (char *)0x0) { + return this; + } + uVar1 = locale::_M_throw_on_null_name(); + codecvt::~codecvt((codecvt *)this); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar1); +} + + + +### FUNC ~codecvt_byname @ 0004bbc0 + +/* std::codecvt_byname::~codecvt_byname() */ + +void __thiscall +std::codecvt_byname::~codecvt_byname(codecvt_byname *this) + +{ + codecvt::~codecvt((codecvt *)this); + return; +} + + + +### FUNC ~codecvt_byname @ 0004bbca + +/* std::codecvt_byname::~codecvt_byname() */ + +void __thiscall +std::codecvt_byname::~codecvt_byname(codecvt_byname *this) + +{ + codecvt::~codecvt((codecvt *)this); + operator_delete(this); + return; +} + + + +### FUNC codecvt_byname @ 0004bbec + +/* std::codecvt_byname::codecvt_byname(char const*, unsigned int) */ + +codecvt_byname * __thiscall +std::codecvt_byname::codecvt_byname + (codecvt_byname *this,char *param_1,uint param_2) + +{ + int iVar1; + undefined4 uVar2; + undefined1 auStack_118 [256]; + int local_18; + char *local_14; + + *(uint *)(this + 4) = (uint)(param_2 != 0); + local_14 = param_1; + pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)this = &PTR__codecvt_byname_000696cc; + if (param_1 == (char *)0x0) { + locale::_M_throw_on_null_name(); + } + else { + iVar1 = FUN_0004a334(&local_14,auStack_118,0,&local_18); + *(int *)(this + 0xc) = iVar1; + if (iVar1 != 0) { + return this; + } + } + uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"ctype"); + codecvt::~codecvt((codecvt *)this); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar2); +} + + + +### FUNC ~codecvt_byname @ 0004bc60 + +/* std::codecvt_byname::~codecvt_byname() */ + +void __thiscall +std::codecvt_byname::~codecvt_byname + (codecvt_byname *this) + +{ + *(undefined ***)this = &PTR__codecvt_byname_000696cc; + FUN_0004a590(*(undefined4 *)(this + 0xc)); + codecvt::~codecvt((codecvt *)this); + return; +} + + + +### FUNC ~codecvt_byname @ 0004bc94 + +/* std::codecvt_byname::~codecvt_byname() */ + +void __thiscall +std::codecvt_byname::~codecvt_byname + (codecvt_byname *this) + +{ + *(undefined ***)this = &PTR__codecvt_byname_000696cc; + FUN_0004a590(*(undefined4 *)(this + 0xc)); + codecvt::~codecvt((codecvt *)this); + operator_delete(this); + return; +} + + + +### FUNC do_out @ 0004bcd8 + +/* std::codecvt_byname::do_out(mbstate_t&, wchar_t const*, wchar_t const*, + wchar_t const*&, char*, char*, char*&) const */ + +undefined4 __thiscall +std::codecvt_byname::do_out + (codecvt_byname *this,mbstate_t *param_1,wchar_t *param_2, + wchar_t *param_3,wchar_t **param_4,char *param_5,char *param_6,char **param_7) + +{ + int iVar1; + wchar_t *pwVar2; + bool bVar3; + undefined4 local_2c; + + local_2c = 0; + if ((param_5 != param_6) && (param_2 != param_3)) { + local_2c = 0; + pwVar2 = param_2; + while( true ) { + iVar1 = FUN_0004dbd8(*(undefined4 *)(this + 0xc),param_5,(int)param_6 - (int)param_5,*pwVar2, + param_1); + param_2 = pwVar2; + if (iVar1 == -2) { + local_2c = 1; + goto LAB_0004bd3e; + } + if (iVar1 == -1) break; + param_5 = param_5 + iVar1; + param_2 = pwVar2 + 1; + if ((param_5 == param_6) || (bVar3 = param_3 + -1 == pwVar2, pwVar2 = param_2, bVar3)) + goto LAB_0004bd3e; + } + local_2c = 2; + } +LAB_0004bd3e: + *param_4 = param_2; + *param_7 = param_5; + return local_2c; +} + + + +### FUNC do_in @ 0004bd48 + +/* std::codecvt_byname::do_in(mbstate_t&, char const*, char const*, char + const*&, wchar_t*, wchar_t*, wchar_t*&) const */ + +undefined4 __thiscall +std::codecvt_byname::do_in + (codecvt_byname *this,mbstate_t *param_1,char *param_2, + char *param_3,char **param_4,wchar_t *param_5,wchar_t *param_6,wchar_t **param_7) + +{ + int iVar1; + wchar_t *pwVar2; + undefined4 local_2c; + + local_2c = 0; + if ((param_5 != param_6) && (param_2 != param_3)) { + local_2c = 0; + pwVar2 = param_5; + while( true ) { + iVar1 = FUN_0004dbd0(*(undefined4 *)(this + 0xc),pwVar2,param_2,(int)param_3 - (int)param_2, + param_1); + param_5 = pwVar2; + if (iVar1 == -2) { + local_2c = 1; + goto LAB_0004bdb0; + } + if (iVar1 == -1) break; + param_2 = param_2 + iVar1; + param_5 = pwVar2 + 1; + if ((param_6 + -1 == pwVar2) || (pwVar2 = param_5, param_2 == param_3)) goto LAB_0004bdb0; + } + local_2c = 2; + } +LAB_0004bdb0: + *param_4 = param_2; + *param_7 = param_5; + return local_2c; +} + + + +### FUNC do_unshift @ 0004bdbc + +/* std::codecvt_byname::do_unshift(mbstate_t&, char*, char*, char*&) const + */ + +undefined4 __thiscall +std::codecvt_byname::do_unshift + (codecvt_byname *this,mbstate_t *param_1,char *param_2, + char *param_3,char **param_4) + +{ + int iVar1; + undefined4 uVar2; + + *param_4 = param_2; + iVar1 = FUN_0004dbde(*(undefined4 *)(this + 0xc),param_1,param_2,(int)param_3 - (int)param_2, + param_4); + uVar2 = 2; + if (iVar1 != -1) { + if (iVar1 == -2) { + return 1; + } + uVar2 = 3; + if (*param_4 != param_2) { + uVar2 = 0; + } + } + return uVar2; +} + + + +### FUNC do_encoding @ 0004bdf8 + +/* std::codecvt_byname::do_encoding() const */ + +int __thiscall +std::codecvt_byname::do_encoding + (codecvt_byname *this) + +{ + int iVar1; + int iVar2; + + iVar1 = FUN_0004dbcc(*(undefined4 *)(this + 0xc)); + iVar2 = -1; + if (iVar1 != 0) { + iVar1 = FUN_0004dbc4(*(undefined4 *)(this + 0xc)); + iVar2 = FUN_0004dbc8(*(undefined4 *)(this + 0xc)); + if (iVar2 != iVar1) { + iVar2 = 0; + } + } + return iVar2; +} + + + +### FUNC do_always_noconv @ 0004be32 + +/* std::codecvt_byname::do_always_noconv() const */ + +undefined4 std::codecvt_byname::do_always_noconv(void) + +{ + return 0; +} + + + +### FUNC do_length @ 0004be36 + +/* std::codecvt_byname::do_length(mbstate_t&, char const*, char const*, + unsigned int) const */ + +int __thiscall +std::codecvt_byname::do_length + (codecvt_byname *this,mbstate_t *param_1,char *param_2, + char *param_3,uint param_4) + +{ + uint uVar1; + int local_1c; + undefined1 auStack_18 [4]; + + local_1c = 0; + while( true ) { + if (param_4 == 0) { + return local_1c; + } + if (param_2 == param_3) break; + uVar1 = FUN_0004dbd0(*(undefined4 *)(this + 0xc),auStack_18,param_2,(int)param_3 - (int)param_2, + param_1); + if (uVar1 < 0xfffffffe) { + local_1c = local_1c + uVar1; + } + param_2 = param_2 + uVar1; + param_4 = param_4 - 1; + if (0xfffffffd < uVar1) { + return local_1c; + } + } + return local_1c; +} + + + +### FUNC do_max_length @ 0004be86 + +/* std::codecvt_byname::do_max_length() const */ + +void __thiscall +std::codecvt_byname::do_max_length + (codecvt_byname *this) + +{ + FUN_0004dbc4(*(undefined4 *)(this + 0xc)); + return; +} + + + +### FUNC numpunct_byname @ 0004be98 + +/* std::numpunct_byname::numpunct_byname(char const*, unsigned int) */ + +numpunct_byname * __thiscall +std::numpunct_byname::numpunct_byname(numpunct_byname *this,char *param_1,uint param_2) + +{ + int iVar1; + undefined4 uVar2; + undefined1 auStack_118 [256]; + int local_18; + char *local_14; + + *(uint *)(this + 4) = (uint)(param_2 != 0); + local_14 = param_1; + pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)this = &PTR__numpunct_byname_000696f8; + if (param_1 == (char *)0x0) { + locale::_M_throw_on_null_name(); + } + else { + iVar1 = FUN_0004a37c(&local_14,auStack_118,0,&local_18); + *(int *)(this + 0xc) = iVar1; + if (iVar1 != 0) { + return this; + } + } + uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"numpunct"); + numpunct::~numpunct((numpunct *)this); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar2); +} + + + +### FUNC ~numpunct_byname @ 0004bf0c + +/* std::numpunct_byname::~numpunct_byname() */ + +void __thiscall std::numpunct_byname::~numpunct_byname(numpunct_byname *this) + +{ + *(undefined ***)this = &PTR__numpunct_byname_000696f8; + FUN_0004a614(*(undefined4 *)(this + 0xc)); + numpunct::~numpunct((numpunct *)this); + return; +} + + + +### FUNC ~numpunct_byname @ 0004bf40 + +/* std::numpunct_byname::~numpunct_byname() */ + +void __thiscall std::numpunct_byname::~numpunct_byname(numpunct_byname *this) + +{ + *(undefined ***)this = &PTR__numpunct_byname_000696f8; + FUN_0004a614(*(undefined4 *)(this + 0xc)); + numpunct::~numpunct((numpunct *)this); + operator_delete(this); + return; +} + + + +### FUNC do_decimal_point @ 0004bf84 + +/* std::numpunct_byname::do_decimal_point() const */ + +void __thiscall std::numpunct_byname::do_decimal_point(numpunct_byname *this) + +{ + FUN_0004dd54(*(undefined4 *)(this + 0xc)); + return; +} + + + +### FUNC do_thousands_sep @ 0004bf90 + +/* std::numpunct_byname::do_thousands_sep() const */ + +void __thiscall std::numpunct_byname::do_thousands_sep(numpunct_byname *this) + +{ + FUN_0004dd58(*(undefined4 *)(this + 0xc)); + return; +} + + + +### FUNC do_grouping @ 0004bf9c + +/* std::numpunct_byname::do_grouping() const */ + +void std::numpunct_byname::do_grouping(void) + +{ + int in_r1; + + FUN_0004dd5c(*(undefined4 *)(in_r1 + 0xc)); + FUN_00031c38(); + return; +} + + + +### FUNC do_truename @ 0004bfd4 + +/* std::numpunct_byname::do_truename() const */ + +void std::numpunct_byname::do_truename(void) + +{ + int in_r1; + + FUN_0004dd68(*(undefined4 *)(in_r1 + 0xc)); + FUN_00031c38(); + return; +} + + + +### FUNC do_falsename @ 0004bff4 + +/* std::numpunct_byname::do_falsename() const */ + +void std::numpunct_byname::do_falsename(void) + +{ + int in_r1; + + FUN_0004dd74(*(undefined4 *)(in_r1 + 0xc)); + FUN_00031c38(); + return; +} + + + +### FUNC numpunct_byname @ 0004c014 + +/* std::numpunct_byname::numpunct_byname(char const*, unsigned int) */ + +numpunct_byname * __thiscall +std::numpunct_byname::numpunct_byname + (numpunct_byname *this,char *param_1,uint param_2) + +{ + int iVar1; + undefined4 uVar2; + undefined1 auStack_118 [256]; + int local_18; + char *local_14; + + *(uint *)(this + 4) = (uint)(param_2 != 0); + local_14 = param_1; + pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)this = &PTR__numpunct_byname_0006971c; + if (param_1 == (char *)0x0) { + locale::_M_throw_on_null_name(); + } + else { + iVar1 = FUN_0004a37c(&local_14,auStack_118,0,&local_18); + *(int *)(this + 0xc) = iVar1; + if (iVar1 != 0) { + return this; + } + } + uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"numpunct"); + numpunct::~numpunct((numpunct *)this); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar2); +} + + + +### FUNC ~numpunct_byname @ 0004c088 + +/* std::numpunct_byname::~numpunct_byname() */ + +void __thiscall std::numpunct_byname::~numpunct_byname(numpunct_byname *this) + +{ + *(undefined ***)this = &PTR__numpunct_byname_0006971c; + FUN_0004a614(*(undefined4 *)(this + 0xc)); + numpunct::~numpunct((numpunct *)this); + return; +} + + + +### FUNC ~numpunct_byname @ 0004c0bc + +/* std::numpunct_byname::~numpunct_byname() */ + +void __thiscall std::numpunct_byname::~numpunct_byname(numpunct_byname *this) + +{ + *(undefined ***)this = &PTR__numpunct_byname_0006971c; + FUN_0004a614(*(undefined4 *)(this + 0xc)); + numpunct::~numpunct((numpunct *)this); + operator_delete(this); + return; +} + + + +### FUNC do_decimal_point @ 0004c100 + +/* std::numpunct_byname::do_decimal_point() const */ + +void __thiscall std::numpunct_byname::do_decimal_point(numpunct_byname *this) + +{ + FUN_0004dd80(*(undefined4 *)(this + 0xc)); + return; +} + + + +### FUNC do_thousands_sep @ 0004c10c + +/* std::numpunct_byname::do_thousands_sep() const */ + +void __thiscall std::numpunct_byname::do_thousands_sep(numpunct_byname *this) + +{ + FUN_0004dd84(*(undefined4 *)(this + 0xc)); + return; +} + + + +### FUNC do_grouping @ 0004c118 + +/* std::numpunct_byname::do_grouping() const */ + +void std::numpunct_byname::do_grouping(void) + +{ + int in_r1; + + FUN_0004dd5c(*(undefined4 *)(in_r1 + 0xc)); + FUN_00031c38(); + return; +} + + + +### FUNC do_truename @ 0004c150 + +/* std::numpunct_byname::do_truename() const */ + +void std::numpunct_byname::do_truename(void) + +{ + int in_r1; + undefined1 auStack_50 [64]; + + FUN_0004dd88(*(undefined4 *)(in_r1 + 0xc),auStack_50,0x10); + FUN_0004c174(); + return; +} + + + +### FUNC FUN_0004c174 @ 0004c174 + +int * FUN_0004c174(int *param_1,wchar_t *param_2) + +{ + size_t sVar1; + undefined4 *puVar2; + uint uVar3; + uint uVar4; + uint local_18; + + param_1[0x10] = (int)param_1; + param_1[0x11] = (int)param_1; + sVar1 = wcslen(param_2); + uVar3 = (int)(sVar1 * 4) >> 2; + uVar4 = uVar3 + 1; + if (uVar3 < 0x3fffffff) { + if (uVar4 < 0x11) { + puVar2 = (undefined4 *)param_1[0x11]; + } + else { + uVar4 = uVar4 * 4; + local_18 = uVar4; + if (uVar4 < 0x81) { + puVar2 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18); + uVar4 = local_18; + } + else { + puVar2 = (undefined4 *)operator_new(uVar4); + } + param_1[0x10] = (int)puVar2; + param_1[0x11] = (int)puVar2; + *param_1 = (int)puVar2 + (uVar4 & 0xfffffffc); + } + if (sVar1 != 0) { + __aeabi_memcpy(puVar2,param_2,sVar1 * 4); + puVar2 = puVar2 + sVar1; + } + param_1[0x10] = (int)puVar2; + *puVar2 = 0; + return param_1; + } + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); +} + + + +### FUNC do_falsename @ 0004c22c + +/* std::numpunct_byname::do_falsename() const */ + +void std::numpunct_byname::do_falsename(void) + +{ + int in_r1; + undefined1 auStack_50 [64]; + + FUN_0004dda0(*(undefined4 *)(in_r1 + 0xc),auStack_50,0x10); + FUN_0004c174(); + return; +} + + + +### FUNC moneypunct_byname @ 0004c250 + +/* std::moneypunct_byname::moneypunct_byname(char const*, unsigned int) */ + +moneypunct_byname * __thiscall +std::moneypunct_byname::moneypunct_byname + (moneypunct_byname *this,char *param_1,uint param_2) + +{ + int iVar1; + undefined4 uVar2; + undefined1 auStack_118 [256]; + int local_18; + char *local_14; + + local_14 = param_1; + moneypunct::moneypunct((moneypunct *)this,param_2); + *(undefined ***)this = &PTR__moneypunct_byname_00069740; + if (param_1 == (char *)0x0) { + locale::_M_throw_on_null_name(); + } + else { + iVar1 = FUN_0004a46c(&local_14,auStack_118,0,&local_18); + *(int *)(this + 0x14) = iVar1; + if (iVar1 != 0) { + FUN_0004c2c4(this + 0xc,this + 0x10); + return this; + } + } + uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"moneypunct"); + moneypunct::~moneypunct((moneypunct *)this); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar2); +} + + + +### FUNC FUN_0004c2c4 @ 0004c2c4 + +void FUN_0004c2c4(undefined1 *param_1,undefined1 *param_2,undefined4 param_3) + +{ + uint uVar1; + int iVar2; + undefined1 uVar3; + undefined1 uVar4; + + uVar1 = FUN_0004de10(param_3); + if (uVar1 < 2) { + param_1[1] = 3; + *param_1 = 2; + uVar4 = 0; + uVar3 = 4; + } + else if (uVar1 - 3 < 2) { + *param_1 = 2; + iVar2 = FUN_0004de08(param_3); + uVar3 = 3; + uVar4 = 4; + if (iVar2 != 0) { + uVar4 = 3; + } + param_1[1] = uVar4; + if (iVar2 != 0) { + uVar3 = 4; + } + uVar4 = 0; + } + else if (uVar1 == 2) { + param_1[1] = 4; + *param_1 = 2; + uVar4 = 0; + uVar3 = 3; + } + else { + param_1[1] = 3; + *param_1 = 2; + uVar4 = 4; + uVar3 = 0; + } + param_1[3] = uVar4; + param_1[2] = uVar3; + uVar1 = FUN_0004de1c(param_3); + if (uVar1 < 2) { + param_2[1] = 3; + *param_2 = 2; + uVar4 = 0; + uVar3 = 4; + } + else if (uVar1 - 3 < 2) { + *param_2 = 2; + iVar2 = FUN_0004de14(param_3); + uVar3 = 3; + uVar4 = 4; + if (iVar2 != 0) { + uVar4 = 3; + } + param_2[1] = uVar4; + if (iVar2 != 0) { + uVar3 = 4; + } + uVar4 = 0; + } + else if (uVar1 == 2) { + param_2[1] = 4; + *param_2 = 2; + uVar4 = 0; + uVar3 = 3; + } + else { + param_2[1] = 3; + *param_2 = 2; + uVar4 = 4; + uVar3 = 0; + } + param_2[3] = uVar4; + param_2[2] = uVar3; + return; +} + + + +### FUNC moneypunct_byname @ 0004c39c + +/* std::moneypunct_byname::moneypunct_byname(_Locale_monetary*) */ + +moneypunct_byname * __thiscall +std::moneypunct_byname::moneypunct_byname + (moneypunct_byname *this,_Locale_monetary *param_1) + +{ + moneypunct::moneypunct((moneypunct *)this,0); + *(_Locale_monetary **)(this + 0x14) = param_1; + *(undefined ***)this = &PTR__moneypunct_byname_00069740; + FUN_0004c2c4(this + 0xc,this + 0x10,param_1); + return this; +} + + + +### FUNC ~moneypunct_byname @ 0004c3e0 + +/* std::moneypunct_byname::~moneypunct_byname() */ + +void __thiscall +std::moneypunct_byname::~moneypunct_byname(moneypunct_byname *this) + +{ + *(undefined ***)this = &PTR__moneypunct_byname_00069740; + FUN_0004a7a0(*(undefined4 *)(this + 0x14)); + moneypunct::~moneypunct((moneypunct *)this); + return; +} + + + +### FUNC ~moneypunct_byname @ 0004c414 + +/* std::moneypunct_byname::~moneypunct_byname() */ + +void __thiscall +std::moneypunct_byname::~moneypunct_byname(moneypunct_byname *this) + +{ + *(undefined ***)this = &PTR__moneypunct_byname_00069740; + FUN_0004a7a0(*(undefined4 *)(this + 0x14)); + moneypunct::~moneypunct((moneypunct *)this); + operator_delete(this); + return; +} + + + +### FUNC do_decimal_point @ 0004c458 + +/* std::moneypunct_byname::do_decimal_point() const */ + +void __thiscall +std::moneypunct_byname::do_decimal_point(moneypunct_byname *this) + +{ + FUN_0004ddd4(*(undefined4 *)(this + 0x14)); + return; +} + + + +### FUNC do_thousands_sep @ 0004c464 + +/* std::moneypunct_byname::do_thousands_sep() const */ + +void __thiscall +std::moneypunct_byname::do_thousands_sep(moneypunct_byname *this) + +{ + FUN_0004ddd8(*(undefined4 *)(this + 0x14)); + return; +} + + + +### FUNC do_grouping @ 0004c470 + +/* std::moneypunct_byname::do_grouping() const */ + +void std::moneypunct_byname::do_grouping(void) + +{ + int in_r1; + + FUN_0004dddc(*(undefined4 *)(in_r1 + 0x14)); + FUN_00031c38(); + return; +} + + + +### FUNC do_curr_symbol @ 0004c490 + +/* std::moneypunct_byname::do_curr_symbol() const */ + +void std::moneypunct_byname::do_curr_symbol(void) + +{ + int in_r1; + + FUN_0004ddbc(*(undefined4 *)(in_r1 + 0x14)); + FUN_00031c38(); + return; +} + + + +### FUNC do_positive_sign @ 0004c4b0 + +/* std::moneypunct_byname::do_positive_sign() const */ + +void std::moneypunct_byname::do_positive_sign(void) + +{ + int in_r1; + + FUN_0004dde8(*(undefined4 *)(in_r1 + 0x14)); + FUN_00031c38(); + return; +} + + + +### FUNC do_negative_sign @ 0004c4d0 + +/* std::moneypunct_byname::do_negative_sign() const */ + +void std::moneypunct_byname::do_negative_sign(void) + +{ + int in_r1; + + FUN_0004ddf4(*(undefined4 *)(in_r1 + 0x14)); + FUN_00031c38(); + return; +} + + + +### FUNC do_frac_digits @ 0004c4f0 + +/* std::moneypunct_byname::do_frac_digits() const */ + +void __thiscall +std::moneypunct_byname::do_frac_digits(moneypunct_byname *this) + +{ + FUN_0004de00(*(undefined4 *)(this + 0x14)); + return; +} + + + +### FUNC moneypunct_byname @ 0004c4fc + +/* std::moneypunct_byname::moneypunct_byname(char const*, unsigned int) */ + +moneypunct_byname * __thiscall +std::moneypunct_byname::moneypunct_byname + (moneypunct_byname *this,char *param_1,uint param_2) + +{ + int iVar1; + undefined4 uVar2; + undefined1 auStack_118 [256]; + int local_18; + char *local_14; + + local_14 = param_1; + moneypunct::moneypunct((moneypunct *)this,param_2); + *(undefined ***)this = &PTR__moneypunct_byname_00069774; + if (param_1 == (char *)0x0) { + locale::_M_throw_on_null_name(); + } + else { + iVar1 = FUN_0004a46c(&local_14,auStack_118,0,&local_18); + *(int *)(this + 0x14) = iVar1; + if (iVar1 != 0) { + FUN_0004c570(this + 0xc,this + 0x10); + return this; + } + } + uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"moneypunct"); + moneypunct::~moneypunct((moneypunct *)this); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar2); +} + + + +### FUNC FUN_0004c570 @ 0004c570 + +void FUN_0004c570(undefined1 *param_1,undefined1 *param_2,undefined4 param_3) + +{ + undefined1 uVar1; + undefined4 uVar2; + int iVar3; + + uVar2 = FUN_0004de10(param_3); + switch(uVar2) { + case 0: + case 1: + *param_1 = 3; + iVar3 = FUN_0004de08(param_3); + if (iVar3 != 0) { + param_1[1] = 2; +LAB_0004c5e6: + iVar3 = FUN_0004de0c(param_3); + if (iVar3 != 0) { + uVar1 = 1; + goto LAB_0004c5f2; + } + goto LAB_0004c60a; + } + param_1[1] = 4; + iVar3 = FUN_0004de0c(param_3); + if (iVar3 == 0) goto LAB_0004c646; + param_1[2] = 1; + uVar1 = 2; + break; + case 2: + iVar3 = FUN_0004de08(param_3); + if (iVar3 == 0) { +LAB_0004c624: + *param_1 = 4; + iVar3 = FUN_0004de0c(param_3); + if (iVar3 != 0) { + uVar1 = 2; + goto LAB_0004c634; + } + param_1[2] = 3; + uVar1 = 2; + } + else { + *param_1 = 2; + iVar3 = FUN_0004de0c(param_3); + if (iVar3 != 0) { + uVar1 = 4; +LAB_0004c634: + param_1[2] = uVar1; + param_1[1] = 1; + uVar1 = 3; + break; + } + param_1[2] = 3; + uVar1 = 4; + } + param_1[1] = uVar1; + goto LAB_0004c64a; + case 3: + iVar3 = FUN_0004de08(param_3); + if (iVar3 != 0) { + param_1[1] = 2; + *param_1 = 3; + goto LAB_0004c5e6; + } + param_1[1] = 3; + *param_1 = 4; +LAB_0004c646: + uVar1 = 2; + goto LAB_0004c648; + case 4: + iVar3 = FUN_0004de08(param_3); + if (iVar3 == 0) goto LAB_0004c624; + param_1[1] = 3; + *param_1 = 2; +LAB_0004c60a: + uVar1 = 4; +LAB_0004c648: + param_1[2] = uVar1; +LAB_0004c64a: + uVar1 = 0; + break; + default: + param_1[1] = 3; + *param_1 = 2; + uVar1 = 0; +LAB_0004c5f2: + param_1[2] = uVar1; + uVar1 = 4; + } + param_1[3] = uVar1; + uVar2 = FUN_0004de1c(param_3); + switch(uVar2) { + case 0: + case 1: + *param_2 = 3; + iVar3 = FUN_0004de14(param_3); + if (iVar3 == 0) { + param_2[1] = 4; + iVar3 = FUN_0004de18(param_3); + if (iVar3 != 0) { + param_2[2] = 1; + uVar1 = 2; + goto LAB_0004c736; + } + goto LAB_0004c70c; + } + param_2[1] = 2; +LAB_0004c6a8: + iVar3 = FUN_0004de18(param_3); + if (iVar3 == 0) { + uVar1 = 4; + goto LAB_0004c70e; + } + uVar1 = 1; + goto LAB_0004c6ca; + case 2: + iVar3 = FUN_0004de14(param_3); + if (iVar3 == 0) { +LAB_0004c6e6: + *param_2 = 4; + iVar3 = FUN_0004de18(param_3); + if (iVar3 == 0) { + param_2[2] = 3; + uVar1 = 2; + goto LAB_0004c732; + } + uVar1 = 2; +LAB_0004c6f6: + param_2[2] = uVar1; + param_2[1] = 1; + uVar1 = 3; + goto LAB_0004c736; + } + *param_2 = 2; + iVar3 = FUN_0004de18(param_3); + if (iVar3 != 0) { + uVar1 = 4; + goto LAB_0004c6f6; + } + param_2[2] = 3; + uVar1 = 4; +LAB_0004c732: + param_2[1] = uVar1; + break; + case 3: + iVar3 = FUN_0004de14(param_3); + if (iVar3 != 0) { + param_2[1] = 2; + *param_2 = 3; + goto LAB_0004c6a8; + } + param_2[1] = 3; + *param_2 = 4; +LAB_0004c70c: + uVar1 = 2; +LAB_0004c70e: + param_2[2] = uVar1; + break; + case 4: + iVar3 = FUN_0004de14(param_3); + if (iVar3 == 0) goto LAB_0004c6e6; + default: + param_2[1] = 3; + *param_2 = 2; + uVar1 = 0; +LAB_0004c6ca: + param_2[2] = uVar1; + uVar1 = 4; + goto LAB_0004c736; + } + uVar1 = 0; +LAB_0004c736: + param_2[3] = uVar1; + return; +} + + + +### FUNC moneypunct_byname @ 0004c73c + +/* std::moneypunct_byname::moneypunct_byname(_Locale_monetary*) */ + +moneypunct_byname * __thiscall +std::moneypunct_byname::moneypunct_byname + (moneypunct_byname *this,_Locale_monetary *param_1) + +{ + moneypunct::moneypunct((moneypunct *)this,0); + *(_Locale_monetary **)(this + 0x14) = param_1; + *(undefined ***)this = &PTR__moneypunct_byname_00069774; + FUN_0004c570(this + 0xc,this + 0x10,param_1); + return this; +} + + + +### FUNC ~moneypunct_byname @ 0004c780 + +/* std::moneypunct_byname::~moneypunct_byname() */ + +void __thiscall +std::moneypunct_byname::~moneypunct_byname(moneypunct_byname *this) + +{ + *(undefined ***)this = &PTR__moneypunct_byname_00069774; + FUN_0004a7a0(*(undefined4 *)(this + 0x14)); + moneypunct::~moneypunct((moneypunct *)this); + return; +} + + + +### FUNC ~moneypunct_byname @ 0004c7b4 + +/* std::moneypunct_byname::~moneypunct_byname() */ + +void __thiscall +std::moneypunct_byname::~moneypunct_byname(moneypunct_byname *this) + +{ + *(undefined ***)this = &PTR__moneypunct_byname_00069774; + FUN_0004a7a0(*(undefined4 *)(this + 0x14)); + moneypunct::~moneypunct((moneypunct *)this); + operator_delete(this); + return; +} + + + +### FUNC do_decimal_point @ 0004c7f8 + +/* std::moneypunct_byname::do_decimal_point() const */ + +void __thiscall +std::moneypunct_byname::do_decimal_point(moneypunct_byname *this) + +{ + FUN_0004ddd4(*(undefined4 *)(this + 0x14)); + return; +} + + + +### FUNC do_thousands_sep @ 0004c804 + +/* std::moneypunct_byname::do_thousands_sep() const */ + +void __thiscall +std::moneypunct_byname::do_thousands_sep(moneypunct_byname *this) + +{ + FUN_0004ddd8(*(undefined4 *)(this + 0x14)); + return; +} + + + +### FUNC do_grouping @ 0004c810 + +/* std::moneypunct_byname::do_grouping() const */ + +void std::moneypunct_byname::do_grouping(void) + +{ + int in_r1; + + FUN_0004dddc(*(undefined4 *)(in_r1 + 0x14)); + FUN_00031c38(); + return; +} + + + +### FUNC do_curr_symbol @ 0004c830 + +/* std::moneypunct_byname::do_curr_symbol() const */ + +void std::moneypunct_byname::do_curr_symbol(void) + +{ + int in_r1; + + FUN_0004ddc8(*(undefined4 *)(in_r1 + 0x14)); + FUN_00031c38(); + return; +} + + + +### FUNC do_positive_sign @ 0004c850 + +/* std::moneypunct_byname::do_positive_sign() const */ + +void std::moneypunct_byname::do_positive_sign(void) + +{ + int in_r1; + + FUN_0004dde8(*(undefined4 *)(in_r1 + 0x14)); + FUN_00031c38(); + return; +} + + + +### FUNC do_negative_sign @ 0004c870 + +/* std::moneypunct_byname::do_negative_sign() const */ + +void std::moneypunct_byname::do_negative_sign(void) + +{ + int in_r1; + + FUN_0004ddf4(*(undefined4 *)(in_r1 + 0x14)); + FUN_00031c38(); + return; +} + + + +### FUNC do_frac_digits @ 0004c890 + +/* std::moneypunct_byname::do_frac_digits() const */ + +void __thiscall +std::moneypunct_byname::do_frac_digits(moneypunct_byname *this) + +{ + FUN_0004de04(*(undefined4 *)(this + 0x14)); + return; +} + + + +### FUNC moneypunct_byname @ 0004c89c + +/* std::moneypunct_byname::moneypunct_byname(char const*, unsigned int) */ + +moneypunct_byname * __thiscall +std::moneypunct_byname::moneypunct_byname + (moneypunct_byname *this,char *param_1,uint param_2) + +{ + int iVar1; + undefined4 uVar2; + undefined1 auStack_118 [256]; + int local_18; + char *local_14; + + local_14 = param_1; + moneypunct::moneypunct((moneypunct *)this,param_2); + *(undefined ***)this = &PTR__moneypunct_byname_000697a8; + if (param_1 == (char *)0x0) { + locale::_M_throw_on_null_name(); + } + else { + iVar1 = FUN_0004a46c(&local_14,auStack_118,0,&local_18); + *(int *)(this + 0x14) = iVar1; + if (iVar1 != 0) { + FUN_0004c2c4(this + 0xc,this + 0x10); + return this; + } + } + uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"moneypunct"); + moneypunct::~moneypunct((moneypunct *)this); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar2); +} + + + +### FUNC moneypunct_byname @ 0004c910 + +/* std::moneypunct_byname::moneypunct_byname(_Locale_monetary*) */ + +moneypunct_byname * __thiscall +std::moneypunct_byname::moneypunct_byname + (moneypunct_byname *this,_Locale_monetary *param_1) + +{ + moneypunct::moneypunct((moneypunct *)this,0); + *(_Locale_monetary **)(this + 0x14) = param_1; + *(undefined ***)this = &PTR__moneypunct_byname_000697a8; + FUN_0004c2c4(this + 0xc,this + 0x10,param_1); + return this; +} + + + +### FUNC ~moneypunct_byname @ 0004c954 + +/* std::moneypunct_byname::~moneypunct_byname() */ + +void __thiscall +std::moneypunct_byname::~moneypunct_byname(moneypunct_byname *this) + +{ + *(undefined ***)this = &PTR__moneypunct_byname_000697a8; + FUN_0004a7a0(*(undefined4 *)(this + 0x14)); + moneypunct::~moneypunct((moneypunct *)this); + return; +} + + + +### FUNC ~moneypunct_byname @ 0004c988 + +/* std::moneypunct_byname::~moneypunct_byname() */ + +void __thiscall +std::moneypunct_byname::~moneypunct_byname(moneypunct_byname *this) + +{ + *(undefined ***)this = &PTR__moneypunct_byname_000697a8; + FUN_0004a7a0(*(undefined4 *)(this + 0x14)); + moneypunct::~moneypunct((moneypunct *)this); + operator_delete(this); + return; +} + + + +### FUNC do_decimal_point @ 0004c9cc + +/* std::moneypunct_byname::do_decimal_point() const */ + +void __thiscall +std::moneypunct_byname::do_decimal_point(moneypunct_byname *this) + +{ + FUN_0004ddd4(*(undefined4 *)(this + 0x14)); + return; +} + + + +### FUNC do_thousands_sep @ 0004c9d8 + +/* std::moneypunct_byname::do_thousands_sep() const */ + +void __thiscall +std::moneypunct_byname::do_thousands_sep(moneypunct_byname *this) + +{ + FUN_0004ddd8(*(undefined4 *)(this + 0x14)); + return; +} + + + +### FUNC do_grouping @ 0004c9e4 + +/* std::moneypunct_byname::do_grouping() const */ + +void std::moneypunct_byname::do_grouping(void) + +{ + int in_r1; + + FUN_0004dddc(*(undefined4 *)(in_r1 + 0x14)); + FUN_00031c38(); + return; +} + + + +### FUNC do_curr_symbol @ 0004ca04 + +/* std::moneypunct_byname::do_curr_symbol() const */ + +void std::moneypunct_byname::do_curr_symbol(void) + +{ + int in_r1; + undefined1 auStack_50 [64]; + + FUN_0004de20(*(undefined4 *)(in_r1 + 0x14),auStack_50,0x10); + FUN_0004c174(); + return; +} + + + +### FUNC do_positive_sign @ 0004ca28 + +/* std::moneypunct_byname::do_positive_sign() const */ + +void std::moneypunct_byname::do_positive_sign(void) + +{ + int in_r1; + undefined1 auStack_50 [64]; + + FUN_0004de38(*(undefined4 *)(in_r1 + 0x14),auStack_50,0x10); + FUN_0004c174(); + return; +} + + + +### FUNC do_negative_sign @ 0004ca4c + +/* std::moneypunct_byname::do_negative_sign() const */ + +void std::moneypunct_byname::do_negative_sign(void) + +{ + int in_r1; + undefined1 auStack_50 [64]; + + FUN_0004de40(*(undefined4 *)(in_r1 + 0x14),auStack_50,0x10); + FUN_0004c174(); + return; +} + + + +### FUNC do_frac_digits @ 0004ca70 + +/* std::moneypunct_byname::do_frac_digits() const */ + +void __thiscall +std::moneypunct_byname::do_frac_digits(moneypunct_byname *this) + +{ + FUN_0004de00(*(undefined4 *)(this + 0x14)); + return; +} + + + +### FUNC moneypunct_byname @ 0004ca7c + +/* std::moneypunct_byname::moneypunct_byname(char const*, unsigned int) */ + +moneypunct_byname * __thiscall +std::moneypunct_byname::moneypunct_byname + (moneypunct_byname *this,char *param_1,uint param_2) + +{ + int iVar1; + undefined4 uVar2; + undefined1 auStack_118 [256]; + int local_18; + char *local_14; + + local_14 = param_1; + moneypunct::moneypunct((moneypunct *)this,param_2); + *(undefined ***)this = &PTR__moneypunct_byname_000697dc; + if (param_1 == (char *)0x0) { + locale::_M_throw_on_null_name(); + } + else { + iVar1 = FUN_0004a46c(&local_14,auStack_118,0,&local_18); + *(int *)(this + 0x14) = iVar1; + if (iVar1 != 0) { + FUN_0004c570(this + 0xc,this + 0x10); + return this; + } + } + uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"moneypunct"); + moneypunct::~moneypunct((moneypunct *)this); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar2); +} + + + +### FUNC moneypunct_byname @ 0004caf0 + +/* std::moneypunct_byname::moneypunct_byname(_Locale_monetary*) */ + +moneypunct_byname * __thiscall +std::moneypunct_byname::moneypunct_byname + (moneypunct_byname *this,_Locale_monetary *param_1) + +{ + moneypunct::moneypunct((moneypunct *)this,0); + *(_Locale_monetary **)(this + 0x14) = param_1; + *(undefined ***)this = &PTR__moneypunct_byname_000697dc; + FUN_0004c570(this + 0xc,this + 0x10,param_1); + return this; +} + + + +### FUNC ~moneypunct_byname @ 0004cb34 + +/* std::moneypunct_byname::~moneypunct_byname() */ + +void __thiscall +std::moneypunct_byname::~moneypunct_byname(moneypunct_byname *this) + +{ + *(undefined ***)this = &PTR__moneypunct_byname_000697dc; + FUN_0004a7a0(*(undefined4 *)(this + 0x14)); + moneypunct::~moneypunct((moneypunct *)this); + return; +} + + + +### FUNC ~moneypunct_byname @ 0004cb68 + +/* std::moneypunct_byname::~moneypunct_byname() */ + +void __thiscall +std::moneypunct_byname::~moneypunct_byname(moneypunct_byname *this) + +{ + *(undefined ***)this = &PTR__moneypunct_byname_000697dc; + FUN_0004a7a0(*(undefined4 *)(this + 0x14)); + moneypunct::~moneypunct((moneypunct *)this); + operator_delete(this); + return; +} + + + +### FUNC do_decimal_point @ 0004cbac + +/* std::moneypunct_byname::do_decimal_point() const */ + +void __thiscall +std::moneypunct_byname::do_decimal_point(moneypunct_byname *this) + +{ + FUN_0004ddd4(*(undefined4 *)(this + 0x14)); + return; +} + + + +### FUNC do_thousands_sep @ 0004cbb8 + +/* std::moneypunct_byname::do_thousands_sep() const */ + +void __thiscall +std::moneypunct_byname::do_thousands_sep(moneypunct_byname *this) + +{ + FUN_0004ddd8(*(undefined4 *)(this + 0x14)); + return; +} + + + +### FUNC do_grouping @ 0004cbc4 + +/* std::moneypunct_byname::do_grouping() const */ + +void std::moneypunct_byname::do_grouping(void) + +{ + int in_r1; + + FUN_0004dddc(*(undefined4 *)(in_r1 + 0x14)); + FUN_00031c38(); + return; +} + + + +### FUNC do_curr_symbol @ 0004cbe4 + +/* std::moneypunct_byname::do_curr_symbol() const */ + +void std::moneypunct_byname::do_curr_symbol(void) + +{ + int in_r1; + undefined1 auStack_50 [64]; + + FUN_0004de28(*(undefined4 *)(in_r1 + 0x14),auStack_50,0x10); + FUN_0004c174(); + return; +} + + + +### FUNC do_positive_sign @ 0004cc08 + +/* std::moneypunct_byname::do_positive_sign() const */ + +void std::moneypunct_byname::do_positive_sign(void) + +{ + int in_r1; + undefined1 auStack_50 [64]; + + FUN_0004de38(*(undefined4 *)(in_r1 + 0x14),auStack_50,0x10); + FUN_0004c174(); + return; +} + + + +### FUNC do_negative_sign @ 0004cc2c + +/* std::moneypunct_byname::do_negative_sign() const */ + +void std::moneypunct_byname::do_negative_sign(void) + +{ + int in_r1; + undefined1 auStack_50 [64]; + + FUN_0004de40(*(undefined4 *)(in_r1 + 0x14),auStack_50,0x10); + FUN_0004c174(); + return; +} + + + +### FUNC do_frac_digits @ 0004cc50 + +/* std::moneypunct_byname::do_frac_digits() const */ + +void __thiscall +std::moneypunct_byname::do_frac_digits(moneypunct_byname *this) + +{ + FUN_0004de04(*(undefined4 *)(this + 0x14)); + return; +} + + + +### FUNC FUN_0004cc5c @ 0004cc5c + +undefined4 * FUN_0004cc5c(undefined4 *param_1,undefined4 *param_2,undefined2 *param_3) + +{ + int iVar1; + int iVar2; + + iVar1 = (int)param_2 - (int)param_1 >> 4; + if (0 < iVar1) { + iVar1 = iVar1 + 1; + do { + iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),*param_1,*param_3); + if (iVar2 != 0) { + return param_1; + } + iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),param_1[1],*param_3); + if (iVar2 != 0) { + return param_1 + 1; + } + iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),param_1[2],*param_3); + if (iVar2 != 0) { + return param_1 + 2; + } + iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),param_1[3],*param_3); + if (iVar2 != 0) { + return param_1 + 3; + } + iVar1 = iVar1 + -1; + param_1 = param_1 + 4; + } while (1 < iVar1); + } + iVar1 = (int)param_2 - (int)param_1 >> 2; + if (iVar1 != 1) { + if (iVar1 == 3) { + iVar1 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),*param_1,*param_3); + if (iVar1 != 0) { + return param_1; + } + param_1 = param_1 + 1; + } + else if (iVar1 != 2) { + return param_2; + } + iVar1 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),*param_1,*param_3); + if (iVar1 != 0) { + return param_1; + } + param_1 = param_1 + 1; + } + iVar1 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),*param_1,*param_3); + if (iVar1 == 0) { + return param_2; + } + return param_1; +} + + + +### FUNC FUN_0004cd16 @ 0004cd16 + +undefined4 * FUN_0004cd16(undefined4 *param_1,undefined4 *param_2,int param_3) + +{ + int iVar1; + int iVar2; + + iVar1 = (int)param_2 - (int)param_1 >> 4; + if (0 < iVar1) { + iVar1 = iVar1 + 1; + do { + iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),*param_1,*(undefined2 *)(param_3 + 4)); + if (iVar2 == 0) { + return param_1; + } + iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),param_1[1],*(undefined2 *)(param_3 + 4)); + if (iVar2 == 0) { + return param_1 + 1; + } + iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),param_1[2],*(undefined2 *)(param_3 + 4)); + if (iVar2 == 0) { + return param_1 + 2; + } + iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),param_1[3],*(undefined2 *)(param_3 + 4)); + if (iVar2 == 0) { + return param_1 + 3; + } + iVar1 = iVar1 + -1; + param_1 = param_1 + 4; + } while (1 < iVar1); + } + iVar1 = (int)param_2 - (int)param_1 >> 2; + if (iVar1 != 1) { + if (iVar1 == 3) { + iVar1 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),*param_1,*(undefined2 *)(param_3 + 4)); + if (iVar1 == 0) { + return param_1; + } + param_1 = param_1 + 1; + } + else if (iVar1 != 2) { + return param_2; + } + iVar1 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),*param_1,*(undefined2 *)(param_3 + 4)); + if (iVar1 == 0) { + return param_1; + } + param_1 = param_1 + 1; + } + iVar1 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),*param_1,*(undefined2 *)(param_3 + 4)); + if (iVar1 != 0) { + return param_2; + } + return param_1; +} + + + +### FUNC FUN_0004cde4 @ 0004cde4 + +pthread_mutex_t * FUN_0004cde4(pthread_mutex_t *param_1) + +{ + pthread_mutex_destroy(param_1); + return param_1; +} + + + +### FUNC allocate @ 0004cdf4 + +/* std::__malloc_alloc::allocate(unsigned int) */ + +void std::__malloc_alloc::allocate(uint param_1) + +{ + code *pcVar1; + void *pvVar2; + undefined4 uVar3; + + pvVar2 = malloc(param_1); + while( true ) { + if (pvVar2 != (void *)0x0) { + return; + } + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070de0); + pcVar1 = DAT_00070de4; + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070de0); + if (pcVar1 == (code *)0x0) break; + (*pcVar1)(); + pvVar2 = malloc(param_1); + } + FUN_00030824(4); + uVar3 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); +} + + + +### FUNC set_malloc_handler @ 0004ce58 + +/* std::__malloc_alloc::set_malloc_handler(void (*)()) */ + +undefined4 std::__malloc_alloc::set_malloc_handler(_func_void *param_1) + +{ + undefined4 uVar1; + + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070de0); + uVar1 = DAT_00070de4; + DAT_00070de4 = param_1; + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070de0); + return uVar1; +} + + + +### FUNC FUN_0004ce88 @ 0004ce88 + +undefined4 * FUN_0004ce88(uint *param_1) + +{ + int iVar1; + undefined4 *puVar2; + int iVar3; + uint uVar4; + undefined4 *puVar5; + int local_18; + + uVar4 = *param_1 + 7 & 0xfffffff8; + *param_1 = uVar4; + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e50); + iVar1 = (uVar4 - 1 >> 3) * 4; + puVar5 = *(undefined4 **)(&DAT_00070de8 + iVar1); + if (puVar5 == (undefined4 *)0x0) { + uVar4 = *param_1; + local_18 = 0x14; + puVar5 = (undefined4 *)FUN_0004cfe0(uVar4,&local_18); + if (local_18 != 1) { + puVar2 = (undefined4 *)((int)puVar5 + uVar4); + *(undefined4 **)(&DAT_00070de8 + (uVar4 - 1 >> 1 & 0x7ffffffc)) = puVar2; + iVar1 = local_18 + -2; + if (local_18 + -2 != 0) { + iVar3 = 2 - local_18; + iVar1 = local_18 + -1; + puVar2 = puVar5; + do { + *(uint *)((int)puVar2 + uVar4) = (int)puVar2 + uVar4 * 2; + puVar2 = (undefined4 *)((int)puVar2 + uVar4); + iVar3 = iVar3 + 1; + } while (iVar3 != 0); + local_18 = 0; + puVar2 = (undefined4 *)((int)puVar5 + uVar4 * iVar1); + iVar1 = local_18; + } + local_18 = iVar1; + *puVar2 = 0; + } + } + else { + *(undefined4 *)(&DAT_00070de8 + iVar1) = *puVar5; + } + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e50); + return puVar5; +} + + + +### FUNC FUN_0004cf48 @ 0004cf48 + +void FUN_0004cf48(int param_1) + +{ + int iVar1; + undefined4 *puVar2; + int iVar3; + int local_18; + + local_18 = 0x14; + iVar1 = FUN_0004cfe0(param_1,&local_18); + if (local_18 != 1) { + puVar2 = (undefined4 *)(iVar1 + param_1); + *(undefined4 **)(&DAT_00070de8 + (param_1 - 1U >> 1 & 0x7ffffffc)) = puVar2; + if (local_18 != 2) { + iVar3 = 2 - local_18; + puVar2 = (undefined4 *)(iVar1 + param_1 * (local_18 + -1)); + do { + *(int *)(iVar1 + param_1) = iVar1 + param_1 * 2; + iVar1 = iVar1 + param_1; + iVar3 = iVar3 + 1; + } while (iVar3 != 0); + } + *puVar2 = 0; + } + return; +} + + + +### FUNC FUN_0004cfa4 @ 0004cfa4 + +void FUN_0004cfa4(undefined4 *param_1,int param_2) + +{ + uint uVar1; + + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e50); + uVar1 = param_2 - 1U >> 1 & 0x7ffffffc; + *param_1 = *(undefined4 *)(&DAT_00070de8 + uVar1); + *(undefined4 **)(&DAT_00070de8 + uVar1) = param_1; + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e50); + return; +} + + + +### FUNC FUN_0004cfe0 @ 0004cfe0 + +undefined4 * FUN_0004cfe0(uint param_1,int *param_2) + +{ + undefined4 *puVar1; + uint uVar2; + int iVar3; + uint uVar4; + + do { + puVar1 = DAT_00070e2c; + uVar2 = DAT_00070e28 - (int)DAT_00070e2c; + uVar4 = param_1 * *param_2; + if (uVar2 != 0) { + if (uVar4 <= uVar2) goto LAB_0004d0ca; + if (param_1 <= uVar2) { + iVar3 = __udivsi3(uVar2,param_1); + *param_2 = iVar3; + uVar4 = iVar3 * param_1; +LAB_0004d0ca: + DAT_00070e2c = (undefined4 *)((int)puVar1 + uVar4); + return puVar1; + } + uVar2 = uVar2 - 1 >> 1 & 0x7ffffffc; + *DAT_00070e2c = *(undefined4 *)(&DAT_00070de8 + uVar2); + *(undefined4 **)(&DAT_00070de8 + uVar2) = DAT_00070e2c; + DAT_00070e2c = (undefined4 *)0x0; + DAT_00070e28 = 0; + } + uVar4 = (DAT_00070e30 + 7U & 0xfffffff8) + uVar4 * 2; + DAT_00070e2c = (undefined4 *)operator_new(uVar4); + DAT_00070e28 = (int)DAT_00070e2c + uVar4; + DAT_00070e30 = DAT_00070e30 + (uVar4 >> 4); + } while( true ); +} + + + +### FUNC _M_allocate @ 0004d150 + +/* std::__node_alloc::_M_allocate(unsigned int&) */ + +void std::__node_alloc::_M_allocate(uint *param_1) + +{ + FUN_0004ce88(); + return; +} + + + +### FUNC _M_deallocate @ 0004d15c + +/* std::__node_alloc::_M_deallocate(void*, unsigned int) */ + +void std::__node_alloc::_M_deallocate(void *param_1,uint param_2) + +{ + uint uVar1; + + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e50); + uVar1 = param_2 - 1 >> 1 & 0x7ffffffc; + *(undefined4 *)param_1 = *(undefined4 *)(&DAT_00070de8 + uVar1); + *(void **)(&DAT_00070de8 + uVar1) = param_1; + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e50); + return; +} + + + +### FUNC FUN_0004d198 @ 0004d198 + +void FUN_0004d198(int param_1,int param_2) + +{ + int iVar1; + undefined4 *puVar2; + int local_18; + + local_18 = 0x80; + iVar1 = FUN_0004d1f0(param_2,&local_18,param_1); + if (local_18 != 1) { + puVar2 = (undefined4 *)(iVar1 + param_2); + *(undefined4 **)(param_1 + (param_2 + 7U >> 1 & 0x7ffffffc) + -4) = puVar2; + if (local_18 != 2) { + puVar2 = (undefined4 *)(iVar1 + param_2 * (local_18 + -1)); + local_18 = local_18 + -2; + do { + *(int *)(iVar1 + param_2) = iVar1 + param_2 * 2; + iVar1 = iVar1 + param_2; + local_18 = local_18 + -1; + } while (local_18 != 0); + } + *puVar2 = 0; + } + return; +} + + + +### FUNC FUN_0004d1f0 @ 0004d1f0 + +undefined4 * FUN_0004d1f0(uint param_1,int *param_2,int param_3) + +{ + undefined4 *puVar1; + uint uVar2; + int iVar3; + uint uVar4; + + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e4c); + uVar2 = DAT_00070e40 - (int)DAT_00070e44; + iVar3 = *param_2; + do { + puVar1 = DAT_00070e44; + uVar4 = param_1 * iVar3; + if (uVar4 <= uVar2) { +LAB_0004d2a8: + DAT_00070e44 = (undefined4 *)((int)puVar1 + uVar4); + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e4c); + return puVar1; + } + if (param_1 <= uVar2) { + iVar3 = __udivsi3(uVar2,param_1); + *param_2 = iVar3; + uVar4 = iVar3 * param_1; + goto LAB_0004d2a8; + } + uVar4 = (DAT_00070e48 + 7U & 0xfffffff8) + uVar4 * 2; + if (uVar2 != 0) { + iVar3 = param_3 + (uVar2 + 7 >> 1 & 0x7ffffffc); + *DAT_00070e44 = *(undefined4 *)(iVar3 + -4); + *(undefined4 **)(iVar3 + -4) = DAT_00070e44; + } + DAT_00070e44 = (undefined4 *)std::__malloc_alloc::allocate(uVar4); + DAT_00070e40 = (int)DAT_00070e44 + uVar4; + DAT_00070e48 = DAT_00070e48 + (uVar4 >> 4); + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e4c); + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e4c); + uVar2 = DAT_00070e40 - (int)DAT_00070e44; + iVar3 = *param_2; + } while( true ); +} + + + +### FUNC FUN_0004d308 @ 0004d308 + +void FUN_0004d308(int param_1) + +{ + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e4c); + *(int *)(param_1 + 0x40) = DAT_00070e34; + DAT_00070e34 = param_1; + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e4c); + return; +} + + + +### FUNC FUN_0004d334 @ 0004d334 + +void * FUN_0004d334(void) + +{ + void *pvVar1; + + pvVar1 = DAT_00070e34; + if (DAT_00070e34 != (void *)0x0) { + DAT_00070e34 = (void *)*(undefined4 *)((int)DAT_00070e34 + 0x40); + return pvVar1; + } + pvVar1 = operator_new(0x48); + *(undefined4 *)((int)pvVar1 + 0x40) = 0; + pthread_mutex_init((pthread_mutex_t *)((int)pvVar1 + 0x44),(pthread_mutexattr_t *)0x0); + __aeabi_memclr(pvVar1,0x40); + return pvVar1; +} + + + +### FUNC FUN_0004d384 @ 0004d384 + +void * FUN_0004d384(void) + +{ + void *pvVar1; + int iVar2; + undefined4 uVar3; + + if ((DAT_00070e38 != '\0') && (pvVar1 = pthread_getspecific(DAT_00070e3c), pvVar1 != (void *)0x0)) + { + return pvVar1; + } + pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e4c); + if (DAT_00070e38 == '\0') { + iVar2 = pthread_key_create(&DAT_00070e3c,(__destr_function *)0x4d309); + if (iVar2 != 0) { + FUN_00030824(4); + uVar3 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + DAT_00070e38 = '\x01'; + } + if (DAT_00070e34 == (void *)0x0) { + pvVar1 = operator_new(0x48); + *(undefined4 *)((int)pvVar1 + 0x40) = 0; + pthread_mutex_init((pthread_mutex_t *)((int)pvVar1 + 0x44),(pthread_mutexattr_t *)0x0); + __aeabi_memclr(pvVar1,0x40); + } + else { + pvVar1 = DAT_00070e34; + DAT_00070e34 = *(void **)((int)DAT_00070e34 + 0x40); + } + iVar2 = pthread_setspecific(DAT_00070e3c,pvVar1); + if (iVar2 == 0) { + pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e4c); + return pvVar1; + } + if (iVar2 == 0xc) { + FUN_00030824(4); + uVar3 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + /* WARNING: Subroutine does not return */ + abort(); +} + + + +### FUNC FUN_0004d4b8 @ 0004d4b8 + +void FUN_0004d4b8(uint *param_1) + +{ + uint uVar1; + int iVar2; + int iVar3; + undefined4 *puVar4; + int iVar5; + int local_18; + + uVar1 = *param_1; + if (0x80 < uVar1) { + std::__malloc_alloc::allocate(uVar1); + return; + } + *param_1 = uVar1 + 7 & 0xfffffff8; + iVar2 = FUN_0004d384(); + uVar1 = *param_1; + iVar5 = ((uVar1 + 7 >> 3) - 1) * 4; + if (*(undefined4 **)(iVar2 + iVar5) != (undefined4 *)0x0) { + *(undefined4 *)(iVar2 + iVar5) = **(undefined4 **)(iVar2 + iVar5); + return; + } + local_18 = 0x80; + iVar3 = FUN_0004d1f0(uVar1,&local_18,iVar2); + if (local_18 == 1) { + return; + } + puVar4 = (undefined4 *)(iVar3 + uVar1); + *(undefined4 **)(iVar2 + iVar5) = puVar4; + if (local_18 != 2) { + iVar5 = local_18 + -2; + iVar2 = iVar3; + do { + *(uint *)(iVar2 + uVar1) = iVar2 + uVar1 * 2; + iVar2 = iVar2 + uVar1; + iVar5 = iVar5 + -1; + } while (iVar5 != 0); + puVar4 = (undefined4 *)(iVar3 + uVar1 * (local_18 + -1)); + } + *puVar4 = 0; + return; +} + + + +### FUNC FUN_0004d534 @ 0004d534 + +void FUN_0004d534(undefined4 *param_1,uint param_2) + +{ + int iVar1; + + if (0x80 < param_2) { + free(param_1); + return; + } + iVar1 = FUN_0004d384(); + iVar1 = iVar1 + (param_2 + 7 >> 1 & 0x7ffffffc); + *param_1 = *(undefined4 *)(iVar1 + -4); + *(undefined4 **)(iVar1 + -4) = param_1; + return; +} + + + +### FUNC FUN_0004d564 @ 0004d564 + +undefined4 * FUN_0004d564(uint *param_1,int param_2) + +{ + uint uVar1; + undefined4 *puVar2; + undefined4 *puVar3; + int iVar4; + int local_18; + + uVar1 = *param_1; + if (uVar1 < 0x81) { + *param_1 = uVar1 + 7 & 0xfffffff8; + pthread_mutex_lock((pthread_mutex_t *)(param_2 + 0x44)); + uVar1 = *param_1; + iVar4 = ((uVar1 + 7 >> 3) - 1) * 4; + puVar2 = *(undefined4 **)(param_2 + iVar4); + if (puVar2 == (undefined4 *)0x0) { + local_18 = 0x80; + puVar2 = (undefined4 *)FUN_0004d1f0(uVar1,&local_18,param_2); + if (local_18 != 1) { + puVar3 = (undefined4 *)((int)puVar2 + uVar1); + *(undefined4 **)(param_2 + iVar4) = puVar3; + if (local_18 != 2) { + iVar4 = local_18 + -2; + puVar3 = puVar2; + do { + *(uint *)((int)puVar3 + uVar1) = (int)puVar3 + uVar1 * 2; + puVar3 = (undefined4 *)((int)puVar3 + uVar1); + iVar4 = iVar4 + -1; + } while (iVar4 != 0); + puVar3 = (undefined4 *)((int)puVar2 + uVar1 * (local_18 + -1)); + } + *puVar3 = 0; + } + } + else { + *(undefined4 *)(param_2 + iVar4) = *puVar2; + } + pthread_mutex_unlock((pthread_mutex_t *)(param_2 + 0x44)); + } + else { + puVar2 = (undefined4 *)std::__malloc_alloc::allocate(uVar1); + } + return puVar2; +} + + + +### FUNC allocate @ 0004d6c4 + +/* std::priv::_Pthread_alloc::allocate(unsigned int&) */ + +void std::priv::_Pthread_alloc::allocate(uint *param_1) + +{ + FUN_0004d4b8(); + return; +} + + + +### FUNC deallocate @ 0004d6d0 + +/* std::priv::_Pthread_alloc::deallocate(void*, unsigned int) */ + +void std::priv::_Pthread_alloc::deallocate(void *param_1,uint param_2) + +{ + int iVar1; + + if (0x80 < param_2) { + free(param_1); + return; + } + iVar1 = FUN_0004d384(); + iVar1 = iVar1 + (param_2 + 7 >> 1 & 0x7ffffffc); + *(undefined4 *)param_1 = *(undefined4 *)(iVar1 + -4); + *(void **)(iVar1 + -4) = param_1; + return; +} + + + +### FUNC allocate @ 0004d700 + +/* std::priv::_Pthread_alloc::allocate(unsigned int&, std::priv::_Pthread_alloc_per_thread_state*) + */ + +void std::priv::_Pthread_alloc::allocate(uint *param_1,_Pthread_alloc_per_thread_state *param_2) + +{ + FUN_0004d564(); + return; +} + + + +### FUNC deallocate @ 0004d70c + +/* std::priv::_Pthread_alloc::deallocate(void*, unsigned int, + std::priv::_Pthread_alloc_per_thread_state*) */ + +void std::priv::_Pthread_alloc::deallocate + (void *param_1,uint param_2,_Pthread_alloc_per_thread_state *param_3) + +{ + uint uVar1; + + if (0x80 < param_2) { + free(param_1); + return; + } + pthread_mutex_lock((pthread_mutex_t *)(param_3 + 0x44)); + uVar1 = param_2 + 7 >> 1 & 0x7ffffffc; + *(undefined4 *)param_1 = *(undefined4 *)(param_3 + (uVar1 - 4)); + *(void **)(param_3 + (uVar1 - 4)) = param_1; + pthread_mutex_unlock((pthread_mutex_t *)(param_3 + 0x44)); + return; +} + + + +### FUNC reallocate @ 0004d754 + +/* std::priv::_Pthread_alloc::reallocate(void*, unsigned int, unsigned int&) */ + +void * std::priv::_Pthread_alloc::reallocate(void *param_1,uint param_2,uint *param_3) + +{ + void *pvVar1; + int iVar2; + uint uVar3; + + uVar3 = *param_3; + if ((param_2 < 0x81) || (uVar3 < 0x81)) { + if (7 < (uVar3 + 7 ^ param_2 + 7)) { + pvVar1 = (void *)FUN_0004d4b8(param_3); + uVar3 = param_2; + if (*param_3 <= param_2) { + uVar3 = *param_3; + } + __aeabi_memcpy(pvVar1,param_1,uVar3); + if (param_2 < 0x81) { + iVar2 = FUN_0004d384(); + iVar2 = iVar2 + (param_2 + 7 >> 1 & 0x7ffffffc); + *(undefined4 *)param_1 = *(undefined4 *)(iVar2 + -4); + *(void **)(iVar2 + -4) = param_1; + param_1 = pvVar1; + } + else { + free(param_1); + param_1 = pvVar1; + } + } + } + else { + param_1 = realloc(param_1,uVar3); + } + return param_1; +} + + + +### FUNC _S_get_per_thread_state @ 0004d7d0 + +/* std::priv::_Pthread_alloc::_S_get_per_thread_state() */ + +void std::priv::_Pthread_alloc::_S_get_per_thread_state(void) + +{ + FUN_0004d384(); + return; +} + + + +### FUNC FUN_0004d7dc @ 0004d7dc + +void FUN_0004d7dc(void) + +{ + int iVar1; + int iVar2; + ushort *puVar3; + bool bVar4; + + puVar3 = &DAT_00070e54; + iVar2 = 0; + do { + iVar1 = isalpha(iVar2); + if (iVar1 != 0) { + *puVar3 = *puVar3 | 0x20; + } + iVar1 = iscntrl(iVar2); + if (iVar1 != 0) { + *puVar3 = *puVar3 | 4; + } + if (iVar2 - 0x30U < 10) { + *puVar3 = *puVar3 | 0x40; + } + iVar1 = isprint(iVar2); + if (iVar1 != 0) { + *puVar3 = *puVar3 | 2; + } + iVar1 = ispunct(iVar2); + if (iVar1 != 0) { + *puVar3 = *puVar3 | 0x80; + } + iVar1 = isspace(iVar2); + if (iVar1 != 0) { + *puVar3 = *puVar3 | 1; + } + iVar1 = isxdigit(iVar2); + if (iVar1 != 0) { + *puVar3 = *puVar3 | 0x100; + } + iVar1 = isupper(iVar2); + if (iVar1 != 0) { + *puVar3 = *puVar3 | 8; + } + iVar1 = islower(iVar2); + if (iVar1 != 0) { + *puVar3 = *puVar3 | 0x10; + } + puVar3 = puVar3 + 1; + bVar4 = iVar2 != 0x7f; + iVar2 = iVar2 + 1; + } while (bVar4); + __aeabi_memclr4(&DAT_00070f54); + return; +} + + + +### FUNC FUN_0004d8ac @ 0004d8ac + +void FUN_0004d8ac(void) + +{ + return; +} + + + +### FUNC FUN_0004d8c4 @ 0004d8c4 + +undefined4 FUN_0004d8c4(char *param_1,undefined4 param_2,undefined4 *param_3) + +{ + undefined4 uVar1; + + if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) { + *param_3 = 3; + uVar1 = 0; + } + return uVar1; +} + + + +### FUNC FUN_0004d8da @ 0004d8da + +undefined4 FUN_0004d8da(char *param_1,undefined4 param_2,undefined4 *param_3) + +{ + undefined4 uVar1; + + if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) { + *param_3 = 3; + uVar1 = 0; + } + return uVar1; +} + + + +### FUNC FUN_0004d8f0 @ 0004d8f0 + +undefined4 FUN_0004d8f0(char *param_1,undefined4 param_2,undefined4 *param_3) + +{ + undefined4 uVar1; + + if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) { + *param_3 = 3; + uVar1 = 0; + } + return uVar1; +} + + + +### FUNC FUN_0004d906 @ 0004d906 + +undefined4 FUN_0004d906(char *param_1,undefined4 param_2,undefined4 *param_3) + +{ + undefined4 uVar1; + + if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) { + *param_3 = 3; + uVar1 = 0; + } + return uVar1; +} + + + +### FUNC FUN_0004d91c @ 0004d91c + +undefined4 FUN_0004d91c(char *param_1,undefined4 param_2,undefined4 *param_3) + +{ + undefined4 uVar1; + + if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) { + *param_3 = 3; + uVar1 = 0; + } + return uVar1; +} + + + +### FUNC FUN_0004d932 @ 0004d932 + +undefined4 FUN_0004d932(char *param_1,undefined4 param_2,undefined4 *param_3) + +{ + undefined4 uVar1; + + if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) { + *param_3 = 3; + uVar1 = 0; + } + return uVar1; +} + + + +### FUNC FUN_0004d948 @ 0004d948 + +undefined4 FUN_0004d948(char *param_1,undefined4 param_2,undefined4 *param_3) + +{ + undefined4 uVar1; + + if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) { + *param_3 = 3; + uVar1 = 0; + } + return uVar1; +} + + + +### FUNC FUN_0004d960 @ 0004d960 + +undefined * FUN_0004d960(void) + +{ + return &DAT_0004d964; +} + + + +### FUNC FUN_0004d968 @ 0004d968 + +undefined * FUN_0004d968(void) + +{ + return &DAT_0004d96c; +} + + + +### FUNC FUN_0004d970 @ 0004d970 + +undefined * FUN_0004d970(void) + +{ + return &DAT_0004d974; +} + + + +### FUNC FUN_0004d978 @ 0004d978 + +undefined * FUN_0004d978(void) + +{ + return &DAT_0004d97c; +} + + + +### FUNC FUN_0004d980 @ 0004d980 + +undefined * FUN_0004d980(void) + +{ + return &DAT_0004d984; +} + + + +### FUNC FUN_0004d988 @ 0004d988 + +undefined * FUN_0004d988(void) + +{ + return &DAT_0004d98c; +} + + + +### FUNC FUN_0004d990 @ 0004d990 + +undefined * FUN_0004d990(void) + +{ + return &DAT_0004d994; +} + + + +### FUNC FUN_0004d998 @ 0004d998 + +undefined * FUN_0004d998(void) + +{ + return &DAT_0004d99c; +} + + + +### FUNC FUN_0004d9a0 @ 0004d9a0 + +undefined * FUN_0004d9a0(void) + +{ + return &DAT_0004d9a4; +} + + + +### FUNC FUN_0004d9a8 @ 0004d9a8 + +undefined * FUN_0004d9a8(void) + +{ + return &DAT_0004d9ac; +} + + + +### FUNC FUN_0004d9b0 @ 0004d9b0 + +undefined * FUN_0004d9b0(void) + +{ + return &DAT_0004d9b4; +} + + + +### FUNC FUN_0004d9b8 @ 0004d9b8 + +undefined * FUN_0004d9b8(void) + +{ + return &DAT_0004d9bc; +} + + + +### FUNC FUN_0004d9c0 @ 0004d9c0 + +undefined * FUN_0004d9c0(void) + +{ + return &DAT_0004d9c4; +} + + + +### FUNC FUN_0004d9c8 @ 0004d9c8 + +void FUN_0004d9c8(void) + +{ + return; +} + + + +### FUNC FUN_0004d9ca @ 0004d9ca + +void FUN_0004d9ca(void) + +{ + return; +} + + + +### FUNC FUN_0004d9cc @ 0004d9cc + +void FUN_0004d9cc(void) + +{ + return; +} + + + +### FUNC FUN_0004d9ce @ 0004d9ce + +void FUN_0004d9ce(void) + +{ + return; +} + + + +### FUNC FUN_0004d9d0 @ 0004d9d0 + +void FUN_0004d9d0(void) + +{ + return; +} + + + +### FUNC FUN_0004d9d2 @ 0004d9d2 + +void FUN_0004d9d2(void) + +{ + return; +} + + + +### FUNC FUN_0004d9d4 @ 0004d9d4 + +void FUN_0004d9d4(void) + +{ + return; +} + + + +### FUNC FUN_0004d9d8 @ 0004d9d8 + +undefined * FUN_0004d9d8(char *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4) + +{ + undefined *puVar1; + + puVar1 = &DAT_0004d9f4; + if ((*param_1 != '\0') && ((*param_1 != 'C' || (param_1[1] != '\0')))) { + *param_4 = 3; + puVar1 = (undefined *)0x0; + } + return puVar1; +} + + + +### FUNC FUN_0004d9f8 @ 0004d9f8 + +undefined * FUN_0004d9f8(char *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4) + +{ + undefined *puVar1; + + puVar1 = &DAT_0004da14; + if ((*param_1 != '\0') && ((*param_1 != 'C' || (param_1[1] != '\0')))) { + *param_4 = 3; + puVar1 = (undefined *)0x0; + } + return puVar1; +} + + + +### FUNC FUN_0004da18 @ 0004da18 + +undefined * FUN_0004da18(char *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4) + +{ + undefined *puVar1; + + puVar1 = &DAT_0004da34; + if ((*param_1 != '\0') && ((*param_1 != 'C' || (param_1[1] != '\0')))) { + *param_4 = 3; + puVar1 = (undefined *)0x0; + } + return puVar1; +} + + + +### FUNC FUN_0004da38 @ 0004da38 + +undefined * FUN_0004da38(char *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4) + +{ + undefined *puVar1; + + puVar1 = &DAT_0004da54; + if ((*param_1 != '\0') && ((*param_1 != 'C' || (param_1[1] != '\0')))) { + *param_4 = 3; + puVar1 = (undefined *)0x0; + } + return puVar1; +} + + + +### FUNC FUN_0004da58 @ 0004da58 + +undefined * FUN_0004da58(char *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4) + +{ + undefined *puVar1; + + puVar1 = &DAT_0004da74; + if ((*param_1 != '\0') && ((*param_1 != 'C' || (param_1[1] != '\0')))) { + *param_4 = 3; + puVar1 = (undefined *)0x0; + } + return puVar1; +} + + + +### FUNC FUN_0004da78 @ 0004da78 + +undefined * FUN_0004da78(char *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4) + +{ + undefined *puVar1; + + puVar1 = &DAT_0004da94; + if ((*param_1 != '\0') && ((*param_1 != 'C' || (param_1[1] != '\0')))) { + *param_4 = 3; + puVar1 = (undefined *)0x0; + } + return puVar1; +} + + + +### FUNC FUN_0004da98 @ 0004da98 + +undefined4 FUN_0004da98(void) + +{ + return 0; +} + + + +### FUNC FUN_0004da9c @ 0004da9c + +undefined4 FUN_0004da9c(void) + +{ + return 0; +} + + + +### FUNC FUN_0004daa0 @ 0004daa0 + +undefined4 FUN_0004daa0(void) + +{ + return 0; +} + + + +### FUNC FUN_0004daa4 @ 0004daa4 + +undefined4 FUN_0004daa4(void) + +{ + return 0; +} + + + +### FUNC FUN_0004daa8 @ 0004daa8 + +undefined4 FUN_0004daa8(void) + +{ + return 0; +} + + + +### FUNC FUN_0004dab0 @ 0004dab0 + +undefined2 * FUN_0004dab0(void) + +{ + return &DAT_00070e54; +} + + + +### FUNC FUN_0004dabc @ 0004dabc + +void FUN_0004dabc(undefined4 param_1,int param_2) + +{ + toupper(param_2); + return; +} + + + +### FUNC FUN_0004dac8 @ 0004dac8 + +void FUN_0004dac8(undefined4 param_1,int param_2) + +{ + tolower(param_2); + return; +} + + + +### FUNC FUN_0004dad4 @ 0004dad4 + +uint FUN_0004dad4(undefined4 param_1,wint_t param_2,uint param_3) + +{ + int iVar1; + uint uVar2; + + uVar2 = 0; + if (((param_3 & 0x20) != 0) && (iVar1 = iswalpha(param_2), uVar2 = 0x20, iVar1 == 0)) { + uVar2 = 0; + } + if ((int)(param_3 << 0x1d) < 0) { + iVar1 = iswcntrl(param_2); + if (iVar1 != 0) { + uVar2 = uVar2 | 4; + } + } + if ((int)(param_3 << 0x19) < 0) { + iVar1 = iswdigit(param_2); + if (iVar1 != 0) { + uVar2 = uVar2 | 0x40; + } + } + if ((int)(param_3 << 0x1e) < 0) { + iVar1 = iswprint(param_2); + if (iVar1 != 0) { + uVar2 = uVar2 | 2; + } + } + if ((int)(param_3 << 0x18) < 0) { + iVar1 = iswpunct(param_2); + if (iVar1 != 0) { + uVar2 = uVar2 | 0x80; + } + } + if ((param_3 & 1) != 0) { + iVar1 = iswspace(param_2); + uVar2 = uVar2 | iVar1 != 0; + } + if ((int)(param_3 << 0x17) < 0) { + iVar1 = iswxdigit(param_2); + if (iVar1 != 0) { + uVar2 = uVar2 | 0x100; + } + } + if ((int)(param_3 << 0x1c) < 0) { + iVar1 = iswupper(param_2); + if (iVar1 != 0) { + uVar2 = uVar2 | 8; + } + } + if (-1 < (int)(param_3 << 0x1b)) { + return uVar2; + } + iVar1 = iswlower(param_2); + if (iVar1 != 0) { + uVar2 = uVar2 | 0x10; + } + return uVar2; +} + + + +### FUNC FUN_0004dbac @ 0004dbac + +void FUN_0004dbac(undefined4 param_1,wint_t param_2) + +{ + towlower(param_2); + return; +} + + + +### FUNC FUN_0004dbb8 @ 0004dbb8 + +void FUN_0004dbb8(undefined4 param_1,wint_t param_2) + +{ + towupper(param_2); + return; +} + + + +### FUNC FUN_0004dbc4 @ 0004dbc4 + +undefined4 FUN_0004dbc4(void) + +{ + return 1; +} + + + +### FUNC FUN_0004dbc8 @ 0004dbc8 + +undefined4 FUN_0004dbc8(void) + +{ + return 1; +} + + + +### FUNC FUN_0004dbcc @ 0004dbcc + +undefined4 FUN_0004dbcc(void) + +{ + return 1; +} + + + +### FUNC FUN_0004dbd0 @ 0004dbd0 + +undefined4 FUN_0004dbd0(undefined4 param_1,uint *param_2,byte *param_3) + +{ + *param_2 = (uint)*param_3; + return 1; +} + + + +### FUNC FUN_0004dbd8 @ 0004dbd8 + +undefined4 +FUN_0004dbd8(undefined4 param_1,undefined1 *param_2,undefined4 param_3,undefined1 param_4) + +{ + *param_2 = param_4; + return 1; +} + + + +### FUNC FUN_0004dbde @ 0004dbde + +undefined4 +FUN_0004dbde(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, + undefined4 *param_5) + +{ + *param_5 = param_3; + return 0; +} + + + +### FUNC FUN_0004dbe6 @ 0004dbe6 + +uint FUN_0004dbe6(undefined4 param_1,char *param_2,uint param_3,char *param_4,uint param_5) + +{ + int iVar1; + uint __n; + uint __n_00; + uint local_98; + char acStack_94 [64]; + char acStack_54 [64]; + + local_98 = param_5; + if (param_5 != 0 || param_3 != 0) { + do { + __n = param_3; + if (0x3e < param_3) { + __n = 0x3f; + } + strncpy(acStack_54,param_2,__n); + acStack_54[__n] = '\0'; + __n_00 = local_98; + if (0x3e < local_98) { + __n_00 = 0x3f; + } + strncpy(acStack_94,param_4,__n_00); + acStack_94[__n_00] = '\0'; + iVar1 = strcmp(acStack_54,acStack_94); + if (iVar1 != 0) { + return iVar1 >> 0x1f | 1; + } + param_3 = param_3 - __n; + local_98 = local_98 - __n_00; + param_4 = param_4 + __n_00; + param_2 = param_2 + __n; + } while (local_98 != 0 || param_3 != 0); + } + return 0; +} + + + +### FUNC FUN_0004dc70 @ 0004dc70 + +uint FUN_0004dc70(undefined4 param_1,wchar_t *param_2,uint param_3,wchar_t *param_4,uint param_5) + +{ + int iVar1; + uint __n; + uint __n_00; + uint local_218; + wchar_t awStack_214 [64]; + wchar_t awStack_114 [64]; + + local_218 = param_5; + if (param_5 != 0 || param_3 != 0) { + do { + __n = param_3; + if (0x3e < param_3) { + __n = 0x3f; + } + wcsncpy(awStack_114,param_2,__n); + awStack_114[__n] = L'\0'; + __n_00 = local_218; + if (0x3e < local_218) { + __n_00 = 0x3f; + } + wcsncpy(awStack_214,param_4,__n_00); + awStack_214[__n_00] = L'\0'; + iVar1 = wcscmp(awStack_114,awStack_214); + if (iVar1 != 0) { + return iVar1 >> 0x1f | 1; + } + param_3 = param_3 - __n; + local_218 = local_218 - __n_00; + param_4 = param_4 + __n_00; + param_2 = param_2 + __n; + } while (local_218 != 0 || param_3 != 0); + } + return 0; +} + + + +### FUNC FUN_0004dd0a @ 0004dd0a + +undefined4 +FUN_0004dd0a(undefined4 param_1,char *param_2,int param_3,char *param_4,undefined4 param_5) + +{ + if (param_2 != (char *)0x0) { + strncpy(param_2,param_4,param_3 - 1U); + param_2[param_3 - 1U] = '\0'; + } + return param_5; +} + + + +### FUNC FUN_0004dd2e @ 0004dd2e + +undefined4 +FUN_0004dd2e(undefined4 param_1,wchar_t *param_2,int param_3,wchar_t *param_4,undefined4 param_5) + +{ + if (param_2 != (wchar_t *)0x0) { + wcsncpy(param_2,param_4,param_3 - 1U); + param_2[param_3 - 1U] = L'\0'; + } + return param_5; +} + + + +### FUNC FUN_0004dd54 @ 0004dd54 + +undefined4 FUN_0004dd54(void) + +{ + return 0x2e; +} + + + +### FUNC FUN_0004dd58 @ 0004dd58 + +undefined4 FUN_0004dd58(void) + +{ + return 0x2c; +} + + + +### FUNC FUN_0004dd5c @ 0004dd5c + +undefined * FUN_0004dd5c(void) + +{ + return &DAT_0006478a; +} + + + +### FUNC FUN_0004dd68 @ 0004dd68 + +undefined * FUN_0004dd68(void) + +{ + return &DAT_0004dd6c; +} + + + +### FUNC FUN_0004dd74 @ 0004dd74 + +char * FUN_0004dd74(void) + +{ + return "false"; +} + + + +### FUNC FUN_0004dd80 @ 0004dd80 + +undefined4 FUN_0004dd80(void) + +{ + return 0x2e; +} + + + +### FUNC FUN_0004dd84 @ 0004dd84 + +undefined4 FUN_0004dd84(void) + +{ + return 0x2c; +} + + + +### FUNC FUN_0004dd88 @ 0004dd88 + +undefined * FUN_0004dd88(void) + +{ + return &DAT_0004dd8c; +} + + + +### FUNC FUN_0004dda0 @ 0004dda0 + +wchar_t * FUN_0004dda0(void) + +{ + return L"false"; +} + + + +### FUNC FUN_0004ddbc @ 0004ddbc + +undefined * FUN_0004ddbc(void) + +{ + return &DAT_0006478a; +} + + + +### FUNC FUN_0004ddc8 @ 0004ddc8 + +undefined * FUN_0004ddc8(void) + +{ + return &DAT_0006478a; +} + + + +### FUNC FUN_0004ddd4 @ 0004ddd4 + +undefined4 FUN_0004ddd4(void) + +{ + return 0x2e; +} + + + +### FUNC FUN_0004ddd8 @ 0004ddd8 + +undefined4 FUN_0004ddd8(void) + +{ + return 0x2c; +} + + + +### FUNC FUN_0004dddc @ 0004dddc + +undefined * FUN_0004dddc(void) + +{ + return &DAT_0006478a; +} + + + +### FUNC FUN_0004dde8 @ 0004dde8 + +undefined * FUN_0004dde8(void) + +{ + return &DAT_0006478a; +} + + + +### FUNC FUN_0004ddf4 @ 0004ddf4 + +undefined * FUN_0004ddf4(void) + +{ + return &DAT_0006478a; +} + + + +### FUNC FUN_0004de00 @ 0004de00 + +undefined4 FUN_0004de00(void) + +{ + return 0; +} + + + +### FUNC FUN_0004de04 @ 0004de04 + +undefined4 FUN_0004de04(void) + +{ + return 0; +} + + + +### FUNC FUN_0004de08 @ 0004de08 + +undefined4 FUN_0004de08(void) + +{ + return 0xff; +} + + + +### FUNC FUN_0004de0c @ 0004de0c + +undefined4 FUN_0004de0c(void) + +{ + return 0xff; +} + + + +### FUNC FUN_0004de10 @ 0004de10 + +undefined4 FUN_0004de10(void) + +{ + return 0xff; +} + + + +### FUNC FUN_0004de14 @ 0004de14 + +undefined4 FUN_0004de14(void) + +{ + return 0xff; +} + + + +### FUNC FUN_0004de18 @ 0004de18 + +undefined4 FUN_0004de18(void) + +{ + return 0xff; +} + + + +### FUNC FUN_0004de1c @ 0004de1c + +undefined4 FUN_0004de1c(void) + +{ + return 0xff; +} + + + +### FUNC FUN_0004de20 @ 0004de20 + +undefined * FUN_0004de20(void) + +{ + return &DAT_0004de24; +} + + + +### FUNC FUN_0004de28 @ 0004de28 + +undefined * FUN_0004de28(void) + +{ + return &DAT_0004de2c; +} + + + +### FUNC FUN_0004de38 @ 0004de38 + +undefined * FUN_0004de38(void) + +{ + return &DAT_0004de3c; +} + + + +### FUNC FUN_0004de40 @ 0004de40 + +undefined * FUN_0004de40(void) + +{ + return &DAT_0004de44; +} + + + +### FUNC FUN_0004de48 @ 0004de48 + +undefined * FUN_0004de48(undefined4 param_1,int param_2) + +{ + return (&PTR_s_January_00069898)[param_2]; +} + + + +### FUNC FUN_0004de58 @ 0004de58 + +undefined * FUN_0004de58(undefined4 param_1,int param_2) + +{ + return (&PTR_DAT_000698c8)[param_2]; +} + + + +### FUNC FUN_0004de68 @ 0004de68 + +undefined * FUN_0004de68(undefined4 param_1,int param_2) + +{ + return (&PTR_s_Sunday_000698f8)[param_2]; +} + + + +### FUNC FUN_0004de78 @ 0004de78 + +undefined * FUN_0004de78(undefined4 param_1,int param_2) + +{ + return (&PTR_DAT_00069914)[param_2]; +} + + + +### FUNC FUN_0004de88 @ 0004de88 + +char * FUN_0004de88(void) + +{ + return "%m/%d/%y"; +} + + + +### FUNC FUN_0004de94 @ 0004de94 + +char * FUN_0004de94(void) + +{ + return "%m/%d/%y"; +} + + + +### FUNC FUN_0004dea0 @ 0004dea0 + +char * FUN_0004dea0(void) + +{ + return "%H:%M:%S"; +} + + + +### FUNC FUN_0004deb0 @ 0004deb0 + +undefined * FUN_0004deb0(void) + +{ + return &DAT_0006478a; +} + + + +### FUNC FUN_0004debc @ 0004debc + +undefined * FUN_0004debc(void) + +{ + return &DAT_0006478a; +} + + + +### FUNC FUN_0004dec8 @ 0004dec8 + +undefined * FUN_0004dec8(void) + +{ + return &DAT_0004decc; +} + + + +### FUNC FUN_0004ded0 @ 0004ded0 + +undefined * FUN_0004ded0(void) + +{ + return &DAT_0004ded4; +} + + + +### FUNC FUN_0004ded8 @ 0004ded8 + +undefined * FUN_0004ded8(undefined4 param_1,int param_2) + +{ + return (&PTR_u_January_00069930)[param_2]; +} + + + +### FUNC FUN_0004dee8 @ 0004dee8 + +undefined * FUN_0004dee8(undefined4 param_1,int param_2) + +{ + return (&PTR_DAT_00069960)[param_2]; +} + + + +### FUNC FUN_0004def8 @ 0004def8 + +undefined * FUN_0004def8(undefined4 param_1,int param_2) + +{ + return (&PTR_u_Sunday_00069990)[param_2]; +} + + + +### FUNC FUN_0004df08 @ 0004df08 + +undefined * FUN_0004df08(undefined4 param_1,int param_2) + +{ + return (&PTR_DAT_000699ac)[param_2]; +} + + + +### FUNC FUN_0004df18 @ 0004df18 + +undefined * FUN_0004df18(void) + +{ + return &DAT_0004df1c; +} + + + +### FUNC FUN_0004df28 @ 0004df28 + +undefined * FUN_0004df28(void) + +{ + return &DAT_0004df2c; +} + + + +### FUNC FUN_0004df38 @ 0004df38 + +undefined4 FUN_0004df38(void) + +{ + return 0xffffffff; +} + + + +### FUNC FUN_0004df3e @ 0004df3e + +void FUN_0004df3e(void) + +{ + return; +} + + + +### FUNC FUN_0004df40 @ 0004df40 + +undefined4 FUN_0004df40(void) + +{ + undefined4 in_stack_00000000; + + return in_stack_00000000; +} + + + +### FUNC __cxa_end_cleanup @ 0004df44 + +void __cxa_end_cleanup(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) + +{ + undefined4 uVar1; + + uVar1 = FUN_0004e004(); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar1,param_2,param_3,param_4); +} + + + +### FUNC __cxa_type_match @ 0004df54 + +undefined4 __cxa_type_match(int param_1,int *param_2,undefined4 param_3,undefined4 *param_4) + +{ + int iVar1; + undefined4 uVar2; + int iVar3; + undefined4 uVar4; + undefined4 *local_18; + + iVar3 = *(int *)(param_1 + -0x34); + uVar4 = 0; + if (iVar3 != 0) { + local_18 = (undefined4 *)(param_1 + 0x58); + iVar1 = FUN_00030ba0(iVar3,&DAT_00068e30,&PTR_PTR_FUN_00031728_1_00068dc4,0); + uVar2 = 1; + if (iVar1 != 0) { + local_18 = *(undefined4 **)(param_1 + 0x58); + uVar2 = 2; + } + uVar4 = 0; + if (param_2 != (int *)0x0) { + iVar3 = (**(code **)(*param_2 + 8))(param_2,iVar3,&local_18); + if (iVar3 == 1) { + *param_4 = local_18; + uVar4 = uVar2; + } + } + } + return uVar4; +} + + + +### FUNC __cxa_begin_cleanup @ 0004dfc4 + +undefined4 __cxa_begin_cleanup(int *param_1) + +{ + int iVar1; + int iVar2; + + iVar1 = FUN_000306d8(); + if (*param_1 == 0x432b2b00 && param_1[1] == 0x474e5543) { + iVar2 = param_1[-6]; + param_1[-6] = iVar2 + 1; + if (iVar2 != 0) { + return 1; + } + param_1[-7] = *(int *)(iVar1 + 8); + } + *(int **)(iVar1 + 8) = param_1 + -0xe; + return 1; +} + + + +### FUNC FUN_0004e004 @ 0004e004 + +int FUN_0004e004(void) + +{ + int iVar1; + undefined4 *puVar2; + int iVar3; + + iVar1 = FUN_000306d8(); + iVar3 = *(int *)(iVar1 + 8); + puVar2 = (undefined4 *)(iVar1 + 8); + if (iVar3 == 0) { + /* WARNING: Subroutine does not return */ + FUN_0003178c(); + } + if (*(int *)(iVar3 + 0x38) == 0x432b2b00 && *(int *)(iVar3 + 0x3c) == 0x474e5543) { + iVar1 = *(int *)(iVar3 + 0x20) + -1; + *(int *)(iVar3 + 0x20) = iVar1; + if (iVar1 != 0) { + return iVar3 + 0x38; + } + *puVar2 = *(undefined4 *)(iVar3 + 0x1c); + puVar2 = (undefined4 *)(iVar3 + 0x1c); + } + *puVar2 = 0; + return iVar3 + 0x38; +} + + + +### FUNC __cxa_call_unexpected @ 0004e054 + +void __cxa_call_unexpected(int *param_1) + +{ + if (*param_1 == 0x432b2b00 && param_1[1] == 0x474e5543) { + FUN_000308d8(param_1); + (*(code *)param_1[-0xb])((code *)param_1[-0xb],0); + /* WARNING: Subroutine does not return */ + FUN_0003178c(); + } + FUN_000308d8(param_1); + FUN_00031844(); + FUN_000308d8(); + /* WARNING: Subroutine does not return */ + FUN_0003178c(); +} + + + +### FUNC FUN_0004e1d4 @ 0004e1d4 + +uint FUN_0004e1d4(undefined4 *param_1) + +{ + byte bVar1; + uint uVar2; + byte *pbVar3; + uint uVar4; + + pbVar3 = (byte *)*param_1; + uVar4 = 0; + uVar2 = 0; + do { + bVar1 = *pbVar3; + uVar2 = uVar2 | (bVar1 & 0x7f) << (uVar4 & 0xff); + uVar4 = uVar4 + 7; + pbVar3 = pbVar3 + 1; + } while ((bVar1 & 0x80) != 0); + *param_1 = pbVar3; + return uVar2; +} + + + +### FUNC FUN_0004e1f8 @ 0004e1f8 + +uint FUN_0004e1f8(undefined4 *param_1) + +{ + byte bVar1; + uint uVar2; + uint uVar3; + uint uVar4; + byte *pbVar5; + + pbVar5 = (byte *)*param_1; + uVar3 = 0; + uVar2 = 0; + do { + bVar1 = *pbVar5; + uVar2 = uVar2 | (bVar1 & 0x7f) << (uVar3 & 0xff); + uVar3 = uVar3 + 7; + pbVar5 = pbVar5 + 1; + } while ((bVar1 & 0x80) != 0); + *param_1 = pbVar5; + uVar4 = bVar1 & 0x40; + if ((bVar1 & 0x40) != 0) { + uVar4 = -1 << (uVar3 & 0xff); + } + if (0x1f < uVar3) { + return uVar2; + } + return uVar4 | uVar2; +} + + + +### FUNC FUN_0004e23c @ 0004e23c + +/* WARNING: Type propagation algorithm not settling */ + +byte * FUN_0004e23c(undefined4 *param_1,uint param_2) + +{ + byte bVar1; + ushort uVar2; + uint uVar3; + byte *pbVar4; + uint uVar5; + byte *pbVar6; + ushort *puVar7; + ushort *puVar8; + uint uVar9; + + if (param_2 == 0xff) { + return (byte *)0x0; + } + if (0xc < (param_2 & 0xf)) goto switchD_0004e25e_caseD_5; + puVar7 = (ushort *)*param_1; + puVar8 = puVar7; + switch(param_2 & 0xf) { + case 0: + case 3: + case 0xb: + pbVar6 = *(byte **)puVar7; + puVar8 = puVar7 + 2; + break; + case 1: + uVar3 = 0; + pbVar6 = (byte *)0x0; + do { + uVar2 = *puVar8; + pbVar6 = (byte *)((uint)pbVar6 | ((byte)uVar2 & 0x7f) << (uVar3 & 0xff)); + uVar3 = uVar3 + 7; + puVar8 = (ushort *)((int)puVar8 + 1); + } while (((byte)uVar2 & 0x80) != 0); + break; + case 2: + pbVar6 = (byte *)(uint)*puVar7; + goto LAB_0004e30a; + case 4: + case 0xc: + pbVar6 = *(byte **)puVar7; + puVar8 = puVar7 + 4; + break; + default: + goto switchD_0004e25e_caseD_5; + case 9: + uVar9 = 0; + uVar3 = 0; + do { + bVar1 = (byte)*puVar8; + uVar3 = uVar3 | (bVar1 & 0x7f) << (uVar9 & 0xff); + uVar9 = uVar9 + 7; + puVar8 = (ushort *)((int)puVar8 + 1); + } while ((bVar1 & 0x80) != 0); + uVar5 = -1 << (uVar9 & 0xff); + if ((bVar1 & 0x40) == 0) { + uVar5 = bVar1 & 0x40; + } + if (0x1f < uVar9) { + uVar5 = 0; + } + pbVar6 = (byte *)(uVar5 | uVar3); + break; + case 10: + pbVar6 = (byte *)(int)(short)*puVar7; +LAB_0004e30a: + puVar8 = puVar7 + 1; + } + pbVar4 = pbVar6; + if ((param_2 & 0x70) != 0) { + if ((param_2 & 0x70) != 0x10) { +switchD_0004e25e_caseD_5: + /* WARNING: Subroutine does not return */ + abort(); + } + pbVar4 = (byte *)0x0; + if (pbVar6 == (byte *)0x0) goto LAB_0004e330; + pbVar4 = pbVar6 + (int)puVar7; + } + if (((int)(param_2 << 0x18) < 0) && (pbVar4 != (byte *)0x0)) { + pbVar4 = *(byte **)pbVar4; + } +LAB_0004e330: + *param_1 = puVar8; + return pbVar4; +} + + + +### FUNC FUN_0004e34a @ 0004e34a + +void FUN_0004e34a(void *param_1) + +{ + FUN_00030670(); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_0004e370 @ 0004e370 + +void FUN_0004e370(void) + +{ + FUN_00030670(); + return; +} + + + +### FUNC FUN_0004e37a @ 0004e37a + +void FUN_0004e37a(void *param_1) + +{ + FUN_00030670(); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_0004e3a4 @ 0004e3a4 + +undefined4 FUN_0004e3a4(uint *param_1) + +{ + uint uVar1; + + pthread_mutex_lock((pthread_mutex_t *)&DAT_0006b8e4); + uVar1 = *param_1; + while( true ) { + if ((uVar1 & 1) != 0) { + pthread_mutex_unlock((pthread_mutex_t *)&DAT_0006b8e4); + return 0; + } + if ((uVar1 & 0x100) == 0) break; + *param_1 = uVar1 | 0x200; + pthread_cond_wait((pthread_cond_t *)&DAT_00071054,(pthread_mutex_t *)&DAT_0006b8e4); + uVar1 = *param_1; + } + *param_1 = 0x100; + pthread_mutex_unlock((pthread_mutex_t *)&DAT_0006b8e4); + return 1; +} + + + +### FUNC FUN_0004e40c @ 0004e40c + +void FUN_0004e40c(uint *param_1) + +{ + uint uVar1; + + pthread_mutex_lock((pthread_mutex_t *)&DAT_0006b8e4); + uVar1 = *param_1; + *param_1 = 1; + if ((uVar1 & 0x200) != 0) { + pthread_cond_broadcast((pthread_cond_t *)&DAT_00071054); + } + pthread_mutex_unlock((pthread_mutex_t *)&DAT_0006b8e4); + return; +} + + + +### FUNC FUN_0004e444 @ 0004e444 + +void FUN_0004e444(uint *param_1) + +{ + uint uVar1; + + pthread_mutex_lock((pthread_mutex_t *)&DAT_0006b8e4); + uVar1 = *param_1; + *param_1 = 0; + if ((uVar1 & 0x200) != 0) { + pthread_cond_broadcast((pthread_cond_t *)&DAT_00071054); + } + pthread_mutex_unlock((pthread_mutex_t *)&DAT_0006b8e4); + return; +} + + + +### FUNC FUN_0004e480 @ 0004e480 + +void FUN_0004e480(void) + +{ + FUN_00030670(); + return; +} + + + +### FUNC FUN_0004e48c @ 0004e48c + +undefined4 FUN_0004e48c(int *param_1,undefined4 param_2,undefined4 param_3) + +{ + int iVar1; + undefined4 uVar2; + + uVar2 = 1; + iVar1 = (**(code **)(*param_1 + 0xc))(param_1,param_2,param_3,1); + if (iVar1 == 0) { + uVar2 = FUN_0003186c(param_2,&decltype(nullptr)::typeinfo); + } + return uVar2; +} + + + +### FUNC FUN_0004e4bc @ 0004e4bc + +uint FUN_0004e4bc(int *param_1,int *param_2,undefined4 param_3,uint param_4) + +{ + int iVar1; + int *piVar2; + uint uVar3; + uint uVar4; + int *piVar5; + byte local_18 [4]; + + iVar1 = FUN_0003186c(); + uVar3 = 1; + if (iVar1 == 0) { + if ((param_1 == (int *)0x0) || (param_2 == (int *)0x0)) { + /* WARNING: Subroutine does not return */ + FUN_00055980(); + } + uVar3 = 0; + iVar1 = FUN_00031886(*(undefined4 *)(*param_1 + -4),*(undefined4 *)(*param_2 + -4)); + if ((iVar1 == 0) && ((param_2[2] & (param_1[2] ^ 0xffffffffU)) == 0)) { + uVar4 = param_4 | 2; + if (param_4 != 1) { + uVar4 = param_4 & 0xfffffffe; + } + if ((uVar4 & 5) != 4) { + uVar4 = ~(param_1[2] << 2) & 4U | uVar4; + iVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,param_3,uVar4,local_18); + if (iVar1 == 1) { + uVar3 = (uint)local_18[0]; + if (uVar3 != 0) { + uVar3 = 1; + } + } + else { + piVar5 = (int *)param_1[3]; + if ((piVar5 == (int *)0x0) || + (piVar2 = (int *)FUN_00030ba0(piVar5,&PTR_PTR_FUN_00031728_1_00068d20, + &PTR_PTR_FUN_00031728_1_00069dc8,0), piVar2 == (int *)0x0 + )) { + uVar3 = (**(code **)(*piVar5 + 8))(piVar5,param_2[3],param_3); + } + else { + uVar3 = (**(code **)(*piVar2 + 0xc))(piVar2,param_2[3],param_3,uVar4); + } + } + } + } + } + return uVar3; +} + + + +### FUNC FUN_0004e5a0 @ 0004e5a0 + +undefined4 FUN_0004e5a0(int *param_1,int param_2,undefined4 param_3,undefined4 param_4) + +{ + int iVar1; + undefined4 uVar2; + int *piVar3; + int *piVar4; + char local_18 [4]; + + iVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,param_3,param_4,local_18); + if (iVar1 == 1) { + uVar2 = 1; + if (local_18[0] == '\0') { + return 0; + } + } + else { + piVar4 = (int *)param_1[3]; + if ((piVar4 != (int *)0x0) && + (piVar3 = (int *)FUN_00030ba0(piVar4,&PTR_PTR_FUN_00031728_1_00068d20, + &PTR_PTR_FUN_00031728_1_00069dc8,0), piVar3 != (int *)0x0)) { + uVar2 = (**(code **)(*piVar3 + 0xc))(piVar3,*(undefined4 *)(param_2 + 0xc),param_3,param_4); + return uVar2; + } + uVar2 = (**(code **)(*piVar4 + 8))(piVar4,*(undefined4 *)(param_2 + 0xc),param_3); + } + return uVar2; +} + + + +### FUNC _Filebuf_base @ 0004e61c + +/* std::_Filebuf_base::_Filebuf_base() */ + +void __thiscall std::_Filebuf_base::_Filebuf_base(_Filebuf_base *this) + +{ + *(undefined2 *)(this + 8) = 0; + *(undefined4 *)this = 0xffffffff; + *(undefined4 *)(this + 4) = 0; + return; +} + + + +### FUNC _S_initialize @ 0004e628 + +/* std::_Filebuf_base::_S_initialize() */ + +void std::_Filebuf_base::_S_initialize(void) + +{ + _M_page_size = sysconf(0x27); + return; +} + + + +### FUNC _M_file_size @ 0004e640 + +/* std::_Filebuf_base::_M_file_size() */ + +int __thiscall std::_Filebuf_base::_M_file_size(_Filebuf_base *this) + +{ + bool bVar1; + int iVar2; + int iVar3; + stat sStack_70; + + iVar2 = fstat(*(int *)this,&sStack_70); + iVar3 = 0; + if ((iVar2 == 0) && ((sStack_70.st_mode & 0xf000) == 0x8000)) { + bVar1 = 0 < sStack_70.st_blocks; + if (sStack_70.st_blocks == 0) { + bVar1 = sStack_70.st_blksize != 0; + } + iVar3 = sStack_70.st_blksize; + if (!bVar1) { + iVar3 = 0; + } + } + return iVar3; +} + + + +### FUNC _M_open @ 0004e698 + +/* std::_Filebuf_base::_M_open(char const*, int, long) */ + +bool __thiscall +std::_Filebuf_base::_M_open(_Filebuf_base *this,char *param_1,int param_2,long param_3) + +{ + __off_t _Var1; + int iVar2; + _Filebuf_base _Var3; + bool bVar4; + stat sStack_80; + + bVar4 = false; + if (this[8] != (_Filebuf_base)0x0) { + return false; + } + iVar2 = 0x241; + switch(param_2 & 0xfffffff9) { + case 1: + case 0x11: + iVar2 = 0x441; + break; + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 10: + case 0xb: + case 0xc: + case 0xd: + case 0xe: + case 0xf: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + case 0x1a: + case 0x1b: + case 0x1c: + case 0x1d: + case 0x1e: + case 0x1f: + case 0x20: + case 0x21: + case 0x22: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2a: + case 0x2b: + case 0x2c: + case 0x2d: + case 0x2e: + case 0x2f: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + return false; + case 8: + param_3 = 0; + iVar2 = 0; + break; + case 9: + case 0x19: + iVar2 = 0x442; + break; + case 0x10: + case 0x30: + break; + case 0x18: + iVar2 = 2; + break; + case 0x38: + iVar2 = 0x242; + break; + default: + goto switchD_0004e6ca_default; + } + iVar2 = open(param_1,iVar2,param_3); + if (-1 < iVar2) { + _Var3 = (_Filebuf_base)0x1; + this[8] = (_Filebuf_base)0x1; + if ((param_2 & 3U) != 0) { + _Var3 = (_Filebuf_base)0x0; + _Var1 = lseek(iVar2,0,2); + if (_Var1 == -1) { + this[8] = (_Filebuf_base)0x0; + } + else { + _Var3 = this[8]; + } + } + this[9] = _Var3; + *(int *)this = iVar2; + *(int *)(this + 4) = param_2; + if (_Var3 != (_Filebuf_base)0x0) { + iVar2 = fstat(iVar2,&sStack_80); + _Var3 = (_Filebuf_base)0x0; + if ((iVar2 == 0) && (_Var3 = (_Filebuf_base)0x1, (sStack_80.st_mode & 0xf000) != 0x8000)) { + _Var3 = (_Filebuf_base)0x0; + } + this[10] = _Var3; + bVar4 = this[8] != (_Filebuf_base)0x0; + } + } +switchD_0004e6ca_default: + return bVar4; +} + + + +### FUNC _M_open @ 0004e794 + +/* std::_Filebuf_base::_M_open(char const*, int) */ + +void __thiscall std::_Filebuf_base::_M_open(_Filebuf_base *this,char *param_1,int param_2) + +{ + _M_open(this,param_1,param_2,0x1b6); + return; +} + + + +### FUNC _M_open @ 0004e7a4 + +/* std::_Filebuf_base::_M_open(int, int) */ + +undefined4 std::_Filebuf_base::_M_open(int param_1,int param_2) + +{ + uint uVar1; + int iVar2; + undefined1 uVar3; + undefined4 uVar4; + stat sStack_80; + + uVar4 = 0; + if ((-1 < param_2) && (*(char *)(param_1 + 8) == '\0')) { + uVar1 = fcntl(param_2,3); + if (uVar1 != 0xffffffff) { + *(int *)param_1 = param_2; + *(undefined2 *)(param_1 + 8) = 1; + *(uint *)(param_1 + 4) = *(uint *)(&DAT_0004e814 + (uVar1 & 3 ^ 2) * 4) | uVar1 >> 10 & 1; + iVar2 = fstat(param_2,&sStack_80); + uVar3 = 0; + if ((iVar2 == 0) && (uVar3 = 1, (sStack_80.st_mode & 0xf000) != 0x8000)) { + uVar3 = 0; + } + *(undefined1 *)(param_1 + 10) = uVar3; + uVar4 = 1; + } + } + return uVar4; +} + + + +### FUNC _M_close @ 0004e824 + +/* std::_Filebuf_base::_M_close() */ + +undefined4 __thiscall std::_Filebuf_base::_M_close(_Filebuf_base *this) + +{ + undefined4 uVar1; + int iVar2; + + uVar1 = 0; + if (this[8] != (_Filebuf_base)0x0) { + uVar1 = 1; + if (this[9] != (_Filebuf_base)0x0) { + iVar2 = close(*(int *)this); + uVar1 = 1; + if (iVar2 != 0) { + uVar1 = 0; + } + } + *(undefined4 *)(this + 4) = 0; + *(undefined2 *)(this + 8) = 0; + } + return uVar1; +} + + + +### FUNC _M_read @ 0004e854 + +/* std::_Filebuf_base::_M_read(char*, int) */ + +void __thiscall std::_Filebuf_base::_M_read(_Filebuf_base *this,char *param_1,int param_2) + +{ + read(*(int *)this,param_1,param_2); + return; +} + + + +### FUNC _M_write @ 0004e860 + +/* std::_Filebuf_base::_M_write(char*, int) */ + +undefined4 __thiscall std::_Filebuf_base::_M_write(_Filebuf_base *this,char *param_1,int param_2) + +{ + size_t sVar1; + + sVar1 = write(*(int *)this,param_1,param_2); + if (sVar1 != param_2) { + do { + if ((int)sVar1 < 1) { + return 0; + } + if (param_2 <= (int)sVar1) { + return 0; + } + param_1 = param_1 + sVar1; + param_2 = param_2 - sVar1; + sVar1 = write(*(int *)this,param_1,param_2); + } while (param_2 != sVar1); + } + return 1; +} + + + +### FUNC _M_seek @ 0004e89e + +/* WARNING: Type propagation algorithm not settling */ +/* std::_Filebuf_base::_M_seek(long, int) */ + +__off_t __thiscall std::_Filebuf_base::_M_seek(_Filebuf_base *this,long param_1,int param_2) + +{ + bool bVar1; + __off_t _Var2; + int iVar3; + int iVar4; + stat sStack_80; + + iVar3 = 1; + if (param_2 == 4) { + iVar3 = fstat(*(int *)this,&sStack_80); + iVar4 = 0; + if ((iVar3 == 0) && ((sStack_80.st_mode & 0xf000) == 0x8000)) { + bVar1 = 0 < sStack_80.st_blocks; + if (sStack_80.st_blocks == 0) { + bVar1 = sStack_80.st_blksize != 0; + } + iVar4 = sStack_80.st_blksize; + if (!bVar1) { + iVar4 = 0; + } + } + iVar3 = 2; + if (iVar4 < -param_1) { + return -1; + } + } + else if (param_2 != 2) { + if (param_2 != 1) { + return -1; + } + iVar3 = 0; + if (param_1 < 0) { + return -1; + } + } + _Var2 = lseek(*(int *)this,param_1,iVar3); + return _Var2; +} + + + +### FUNC _M_mmap @ 0004e92a + +/* std::_Filebuf_base::_M_mmap(long, long) */ + +void * __thiscall std::_Filebuf_base::_M_mmap(_Filebuf_base *this,long param_1,long param_2) + +{ + void *__addr; + __off_t _Var1; + void *pvVar2; + + __addr = mmap((void *)0x0,param_2,1,2,*(int *)this,param_1); + pvVar2 = (void *)0x0; + if (__addr != (void *)0xffffffff) { + _Var1 = lseek(*(int *)this,param_2 + param_1,0); + pvVar2 = __addr; + if (_Var1 < 0) { + munmap(__addr,param_2); + pvVar2 = (void *)0x0; + } + } + return pvVar2; +} + + + +### FUNC _M_unmap @ 0004e97a + +/* std::_Filebuf_base::_M_unmap(void*, long) */ + +void __thiscall std::_Filebuf_base::_M_unmap(_Filebuf_base *this,void *param_1,long param_2) + +{ + munmap(param_1,param_2); + return; +} + + + +### FUNC _M_doit @ 0004e988 + +/* WARNING: Type propagation algorithm not settling */ +/* std::_Underflow >::_M_doit(std::filebuf*) */ + +uint std::_Underflow>::_M_doit(filebuf *param_1) + +{ + bool bVar1; + __off_t _Var2; + int iVar3; + void *__addr; + uint uVar4; + byte *pbVar5; + int extraout_r1; + int extraout_r1_00; + int iVar6; + size_t __len; + stat sStack_80; + + if (param_1[0x2f] == (filebuf)0x0) { + if (param_1[0x28] == (filebuf)0x0) { + return 0xffffffff; + } + if (-1 < (int)((uint)(byte)param_1[0x24] << 0x1c)) { + return 0xffffffff; + } + if (param_1[0x30] != (filebuf)0x0) { + return 0xffffffff; + } + if (param_1[0x31] != (filebuf)0x0) { + return 0xffffffff; + } + if (*(int *)(param_1 + 0x34) == 0) { + iVar6 = _Filebuf_base::_M_page_size + 0xfff; + __aeabi_uidivmod(); + iVar6 = FUN_000352a0(param_1,0,iVar6 - extraout_r1); + if (iVar6 != 1) { + return 0xffffffff; + } + } + *(undefined4 *)(param_1 + 0x44) = *(undefined4 *)(param_1 + 0x3c); + *(undefined4 *)(param_1 + 0x48) = *(undefined4 *)(param_1 + 0x3c); + *(undefined4 *)(param_1 + 0x50) = *(undefined4 *)(param_1 + 0x4c); + param_1[0x2f] = (filebuf)0x1; + } + else if (param_1[0x32] != (filebuf)0x0) { + pbVar5 = *(byte **)(param_1 + 0x60); + *(undefined4 *)(param_1 + 4) = *(undefined4 *)(param_1 + 0x5c); + *(byte **)(param_1 + 8) = pbVar5; + *(byte **)(param_1 + 0xc) = *(byte **)(param_1 + 100); + param_1[0x32] = (filebuf)0x0; + if (pbVar5 != *(byte **)(param_1 + 100)) { + return (uint)*pbVar5; + } + } + if ((param_1[0x2a] == (filebuf)0x0) || (param_1[0x2d] == (filebuf)0x0)) goto LAB_0004eb1c; + if (*(void **)(param_1 + 0x54) != (void *)0x0) { + munmap(*(void **)(param_1 + 0x54),*(size_t *)(param_1 + 0x58)); + } + iVar6 = 0; + _Var2 = lseek(*(int *)(param_1 + 0x20),0,1); + iVar3 = fstat(*(int *)(param_1 + 0x20),&sStack_80); + if (iVar3 == 0) { + if ((sStack_80.st_mode & 0xf000) == 0x8000) { + bVar1 = 0 < sStack_80.st_blocks; + if (sStack_80.st_blocks == 0) { + bVar1 = sStack_80.st_blksize != 0; + } + iVar6 = sStack_80.st_blksize; + if (!bVar1) { + iVar6 = 0; + } + } + if (_Var2 < iVar6) goto LAB_0004ea9e; +LAB_0004eb18: + *(undefined4 *)(param_1 + 0x54) = 0; + } + else { + if (-1 < _Var2) goto LAB_0004eb18; +LAB_0004ea9e: + if ((_Var2 < 0) || (iVar6 < 1)) goto LAB_0004eb18; + __aeabi_uidivmod(_Var2,_Filebuf_base::_M_page_size); + iVar3 = _Var2 - extraout_r1_00; + __len = iVar6 - iVar3; + if (0xfffff < iVar6 - iVar3) { + __len = 0x100000; + } + *(size_t *)(param_1 + 0x58) = __len; + __addr = mmap((void *)0x0,__len,1,2,*(int *)(param_1 + 0x20),iVar3); + if (__addr == (void *)0xffffffff) goto LAB_0004eb18; + _Var2 = lseek(*(int *)(param_1 + 0x20),__len + iVar3,0); + if (_Var2 < 0) { + munmap(__addr,__len); + goto LAB_0004eb18; + } + *(void **)(param_1 + 0x54) = __addr; + if (__addr != (void *)0x0) { + *(void **)(param_1 + 4) = __addr; + *(int *)(param_1 + 8) = (int)__addr + extraout_r1_00; + *(int *)(param_1 + 0xc) = (int)__addr + *(int *)(param_1 + 0x58); + return (uint)*(byte *)((int)__addr + extraout_r1_00); + } + } + *(undefined4 *)(param_1 + 0x58) = 0; +LAB_0004eb1c: + uVar4 = FUN_0004eb44(param_1); + return uVar4; +} + + + +### FUNC FUN_0004eb44 @ 0004eb44 + +uint FUN_0004eb44(int param_1) + +{ + byte *pbVar1; + uint uVar2; + int iVar3; + void *__buf; + int iVar4; + byte *local_1c; + int local_18; + + *(undefined4 *)(param_1 + 0x4c) = *(undefined4 *)(param_1 + 0x50); + __buf = *(void **)(param_1 + 0x3c); + uVar2 = *(uint *)(param_1 + 0x44); + if ((uVar2 < *(uint *)(param_1 + 0x48)) && (iVar4 = *(uint *)(param_1 + 0x48) - uVar2, iVar4 != 0) + ) { + __aeabi_memmove(__buf,uVar2,iVar4); + __buf = (void *)((int)__buf + iVar4); + } + *(void **)(param_1 + 0x48) = __buf; + iVar4 = read(*(int *)(param_1 + 0x20),__buf,*(int *)(param_1 + 0x40) - (int)__buf); + if (-1 < iVar4) { + while( true ) { + iVar3 = *(int *)(param_1 + 0x48) + iVar4; + *(int *)(param_1 + 0x48) = iVar3; + if (*(int *)(param_1 + 0x3c) == iVar3) break; + iVar3 = (**(code **)(**(int **)(param_1 + 0x68) + 0xc)) + (*(int **)(param_1 + 0x68),param_1 + 0x50,*(int *)(param_1 + 0x3c),iVar3, + &local_18,*(undefined4 *)(param_1 + 0x34),*(undefined4 *)(param_1 + 0x38), + &local_1c); + if (iVar3 == 2) { +LAB_0004ec20: + if (*(void **)(param_1 + 0x54) != (void *)0x0) { + munmap(*(void **)(param_1 + 0x54),*(size_t *)(param_1 + 0x58)); + *(undefined4 *)(param_1 + 0x54) = 0; + *(undefined4 *)(param_1 + 0x58) = 0; + } + *(undefined1 *)(param_1 + 0x30) = 0; + *(undefined1 *)(param_1 + 0x2f) = 0; + *(undefined1 *)(param_1 + 0x31) = 1; + *(undefined4 *)(param_1 + 4) = 0; + *(undefined4 *)(param_1 + 8) = 0; + *(undefined4 *)(param_1 + 0xc) = 0; + return 0xffffffff; + } + if (iVar3 == 3) { + pbVar1 = *(byte **)(param_1 + 0x3c); + local_1c = *(byte **)(param_1 + 0x48); + *(byte **)(param_1 + 0x44) = local_1c; +LAB_0004ec56: + *(byte **)(param_1 + 4) = pbVar1; + *(byte **)(param_1 + 8) = pbVar1; + *(byte **)(param_1 + 0xc) = local_1c; + return (uint)*pbVar1; + } + pbVar1 = *(byte **)(param_1 + 0x34); + if (((local_1c != pbVar1) && (local_18 == *(int *)(param_1 + 0x3c))) || + ((*(char *)(param_1 + 0x2c) != '\0' && + (((int)local_1c - (int)pbVar1) * *(int *)(param_1 + 0x6c) - + (local_18 - *(int *)(param_1 + 0x3c)) != 0)))) goto LAB_0004ec20; + if (local_1c != pbVar1) { + *(int *)(param_1 + 0x44) = local_18; + goto LAB_0004ec56; + } + if (*(int *)(param_1 + 0x70) <= local_18 - *(int *)(param_1 + 0x3c)) goto LAB_0004ec20; + if ((iVar4 < 1) || + (iVar4 = read(*(int *)(param_1 + 0x20),*(void **)(param_1 + 0x48), + *(int *)(param_1 + 0x40) - (int)*(void **)(param_1 + 0x48)), iVar4 < 0)) + break; + } + } + *(undefined4 *)(param_1 + 4) = 0; + *(undefined4 *)(param_1 + 8) = 0; + *(undefined4 *)(param_1 + 0xc) = 0; + return 0xffffffff; +} + + + +### FUNC FUN_0004ec64 @ 0004ec64 + +undefined4 * FUN_0004ec64(undefined4 *param_1,undefined4 param_2) + +{ + param_1[6] = 0; + param_1[5] = 0; + param_1[4] = 0; + param_1[3] = 0; + param_1[2] = 0; + param_1[1] = 0; + *param_1 = &PTR_FUN_00035128_1_000690ec; + std::locale::locale((locale *)(param_1 + 7)); + param_1[8] = param_2; + *param_1 = &PTR_FUN_0004eca0_1_00069df8; + return param_1; +} + + + +### FUNC FUN_0004eca0 @ 0004eca0 + +undefined4 * FUN_0004eca0(undefined4 *param_1) + +{ + *param_1 = &PTR_FUN_0004eca0_1_00069df8; + fflush((FILE *)param_1[8]); + *param_1 = &PTR_FUN_00035128_1_000690ec; + std::locale::~locale((locale *)(param_1 + 7)); + return param_1; +} + + + +### FUNC FUN_0004ecd0 @ 0004ecd0 + +void FUN_0004ecd0(undefined4 *param_1) + +{ + *param_1 = &PTR_FUN_0004eca0_1_00069df8; + fflush((FILE *)param_1[8]); + *param_1 = &PTR_FUN_00035128_1_000690ec; + std::locale::~locale((locale *)(param_1 + 7)); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_0004ed04 @ 0004ed04 + +int FUN_0004ed04(int param_1,char *param_2,size_t param_3) + +{ + int __modes; + + __modes = 2; + if (param_2 != (char *)0x0 || param_3 != 0) { + __modes = 0; + } + setvbuf(*(FILE **)(param_1 + 0x20),param_2,__modes,param_3); + return param_1; +} + + + +### FUNC FUN_0004ed24 @ 0004ed24 + +void FUN_0004ed24(fpos_t *param_1,int param_2,long param_3,int param_4) + +{ + int iVar1; + + iVar1 = 0; + if (param_4 == 1) { +LAB_0004ed44: + iVar1 = fseek(*(FILE **)(param_2 + 0x20),param_3,iVar1); + if (iVar1 == 0) { + fgetpos(*(FILE **)(param_2 + 0x20),param_1); + goto LAB_0004ed62; + } + } + else { + if (param_4 == 4) { + iVar1 = 2; + goto LAB_0004ed44; + } + if (param_4 == 2) { + iVar1 = 1; + goto LAB_0004ed44; + } + } + param_1->__pos = -1; +LAB_0004ed62: + (param_1->__state).__count = 0; + return; +} + + + +### FUNC FUN_0004ed6a @ 0004ed6a + +void FUN_0004ed6a(__off_t *param_1,int param_2,__off_t param_3,__off_t param_4) + +{ + int iVar1; + __off_t local_18; + + local_18 = param_3; + iVar1 = fsetpos(*(FILE **)(param_2 + 0x20),(fpos_t *)&local_18); + if (iVar1 != 0) { + *param_1 = -1; + param_1[1] = 0; + return; + } + *param_1 = param_3; + param_1[1] = param_4; + return; +} + + + +### FUNC FUN_0004ed98 @ 0004ed98 + +undefined4 FUN_0004ed98(int param_1) + +{ + int iVar1; + undefined4 uVar2; + + iVar1 = fflush(*(FILE **)(param_1 + 0x20)); + uVar2 = 0xffffffff; + if (iVar1 == 0) { + uVar2 = 0; + } + return uVar2; +} + + + +### FUNC FUN_0004edb0 @ 0004edb0 + +void FUN_0004edb0(undefined4 *param_1) + +{ + *param_1 = &PTR_FUN_0004eca0_1_00069df8; + fflush((FILE *)param_1[8]); + *param_1 = &PTR_FUN_00035128_1_000690ec; + std::locale::~locale((locale *)(param_1 + 7)); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_0004ede8 @ 0004ede8 + +int FUN_0004ede8(int param_1) + +{ + int __c; + int iVar1; + + __c = getc(*(FILE **)(param_1 + 0x20)); + iVar1 = -1; + if (__c != -1) { + ungetc(__c,*(FILE **)(param_1 + 0x20)); + iVar1 = __c; + } + return iVar1; +} + + + +### FUNC FUN_0004ee0a @ 0004ee0a + +void FUN_0004ee0a(int param_1) + +{ + getc(*(FILE **)(param_1 + 0x20)); + return; +} + + + +### FUNC FUN_0004ee16 @ 0004ee16 + +int FUN_0004ee16(int param_1,int param_2) + +{ + int iVar1; + + if (param_2 != -1) { + iVar1 = ungetc(param_2,*(FILE **)(param_1 + 0x20)); + return iVar1; + } + if (*(uint *)(param_1 + 4) < *(uint *)(param_1 + 8)) { + *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) - 1; + return 0; + } + return -1; +} + + + +### FUNC FUN_0004ee44 @ 0004ee44 + +void FUN_0004ee44(undefined4 *param_1) + +{ + *param_1 = &PTR_FUN_0004eca0_1_00069df8; + fflush((FILE *)param_1[8]); + *param_1 = &PTR_FUN_00035128_1_000690ec; + std::locale::~locale((locale *)(param_1 + 7)); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_0004ee7e @ 0004ee7e + +int FUN_0004ee7e(int param_1,int param_2) + +{ + int iVar1; + int iVar2; + int iVar3; + + if (param_2 == -1) { + iVar2 = *(int *)(param_1 + 0x10); + iVar3 = *(int *)(param_1 + 0x14); + iVar1 = 0; + if (iVar3 != iVar2) { + fflush(*(FILE **)(param_1 + 0x20)); + iVar1 = -1; + if (*(int *)(param_1 + 0x14) - *(int *)(param_1 + 0x10) < iVar3 - iVar2) { + return 0; + } + } + } + else { + iVar1 = putc(param_2,*(FILE **)(param_1 + 0x20)); + } + return iVar1; +} + + + +### FUNC ~codecvt @ 0004eeb8 + +/* std::codecvt::~codecvt() */ + +void __thiscall std::codecvt::~codecvt(codecvt *this) + +{ + locale::facet::~facet((facet *)this); + return; +} + + + +### FUNC ~codecvt @ 0004eec2 + +/* std::codecvt::~codecvt() */ + +void __thiscall std::codecvt::~codecvt(codecvt *this) + +{ + locale::facet::~facet((facet *)this); + operator_delete(this); + return; +} + + + +### FUNC do_length @ 0004eee2 + +/* std::codecvt::do_length(mbstate_t&, char const*, char const*, unsigned + int) const */ + +uint __thiscall +std::codecvt::do_length + (codecvt *this,mbstate_t *param_1,char *param_2,char *param_3, + uint param_4) + +{ + if ((uint)((int)param_3 - (int)param_2) <= param_4) { + param_4 = (int)param_3 - (int)param_2; + } + return param_4; +} + + + +### FUNC do_max_length @ 0004eeee + +/* std::codecvt::do_max_length() const */ + +undefined4 std::codecvt::do_max_length(void) + +{ + return 1; +} + + + +### FUNC do_always_noconv @ 0004eef2 + +/* std::codecvt::do_always_noconv() const */ + +undefined4 std::codecvt::do_always_noconv(void) + +{ + return 1; +} + + + +### FUNC do_encoding @ 0004eef6 + +/* std::codecvt::do_encoding() const */ + +undefined4 std::codecvt::do_encoding(void) + +{ + return 1; +} + + + +### FUNC do_unshift @ 0004eefa + +/* std::codecvt::do_unshift(mbstate_t&, char*, char*, char*&) const */ + +undefined4 __thiscall +std::codecvt::do_unshift + (codecvt *this,mbstate_t *param_1,char *param_2,char *param_3, + char **param_4) + +{ + *param_4 = param_2; + return 3; +} + + + +### FUNC do_in @ 0004ef02 + +/* std::codecvt::do_in(mbstate_t&, char const*, char const*, char const*&, + char*, char*, char*&) const */ + +undefined4 __thiscall +std::codecvt::do_in + (codecvt *this,mbstate_t *param_1,char *param_2,char *param_3, + char **param_4,char *param_5,char *param_6,char **param_7) + +{ + *param_4 = param_2; + *param_7 = param_5; + return 3; +} + + + +### FUNC do_out @ 0004ef10 + +/* std::codecvt::do_out(mbstate_t&, char const*, char const*, char const*&, + char*, char*, char*&) const */ + +undefined4 __thiscall +std::codecvt::do_out + (codecvt *this,mbstate_t *param_1,char *param_2,char *param_3, + char **param_4,char *param_5,char *param_6,char **param_7) + +{ + *param_4 = param_2; + *param_7 = param_5; + return 3; +} + + + +### FUNC ~codecvt @ 0004ef1e + +/* std::codecvt::~codecvt() */ + +void __thiscall +std::codecvt::~codecvt(codecvt *this) + +{ + locale::facet::~facet((facet *)this); + return; +} + + + +### FUNC ~codecvt @ 0004ef28 + +/* std::codecvt::~codecvt() */ + +void __thiscall +std::codecvt::~codecvt(codecvt *this) + +{ + locale::facet::~facet((facet *)this); + operator_delete(this); + return; +} + + + +### FUNC do_out @ 0004ef48 + +/* std::codecvt::do_out(mbstate_t&, wchar_t const*, wchar_t const*, + wchar_t const*&, char*, char*, char*&) const */ + +undefined4 __thiscall +std::codecvt::do_out + (codecvt *this,mbstate_t *param_1,wchar_t *param_2, + wchar_t *param_3,wchar_t **param_4,char *param_5,char *param_6,char **param_7) + +{ + int iVar1; + char *pcVar2; + int iVar3; + wchar_t *pwVar4; + wchar_t wVar5; + + iVar1 = (int)param_3 - (int)param_2 >> 2; + iVar3 = (int)param_6 - (int)param_5; + if (iVar1 <= (int)param_6 - (int)param_5) { + iVar3 = iVar1; + } + pwVar4 = param_2 + iVar3; + if (0 < iVar3 * 4) { + iVar1 = iVar3 + 1; + pcVar2 = param_5; + do { + wVar5 = *param_2; + param_2 = param_2 + 1; + *pcVar2 = (char)wVar5; + iVar1 = iVar1 + -1; + pcVar2 = pcVar2 + 1; + } while (1 < iVar1); + } + *param_4 = pwVar4; + *param_7 = param_5 + iVar3; + return 0; +} + + + +### FUNC do_in @ 0004ef8e + +/* std::codecvt::do_in(mbstate_t&, char const*, char const*, char const*&, + wchar_t*, wchar_t*, wchar_t*&) const */ + +undefined4 __thiscall +std::codecvt::do_in + (codecvt *this,mbstate_t *param_1,char *param_2,char *param_3, + char **param_4,wchar_t *param_5,wchar_t *param_6,wchar_t **param_7) + +{ + char *pcVar1; + wchar_t *pwVar2; + int iVar3; + int iVar4; + + iVar3 = (int)param_6 - (int)param_5 >> 2; + if ((int)param_3 - (int)param_2 <= iVar3) { + iVar3 = (int)param_3 - (int)param_2; + } + pcVar1 = param_2 + iVar3; + if (0 < iVar3) { + iVar4 = iVar3 + 1; + pwVar2 = param_5; + do { + *pwVar2 = (uint)(byte)*param_2; + pwVar2 = pwVar2 + 1; + iVar4 = iVar4 + -1; + param_2 = (char *)((byte *)param_2 + 1); + } while (1 < iVar4); + } + *param_4 = pcVar1; + *param_7 = param_5 + iVar3; + return 0; +} + + + +### FUNC do_unshift @ 0004efd4 + +/* std::codecvt::do_unshift(mbstate_t&, char*, char*, char*&) const */ + +undefined4 __thiscall +std::codecvt::do_unshift + (codecvt *this,mbstate_t *param_1,char *param_2,char *param_3, + char **param_4) + +{ + *param_4 = param_2; + return 3; +} + + + +### FUNC do_encoding @ 0004efdc + +/* std::codecvt::do_encoding() const */ + +undefined4 std::codecvt::do_encoding(void) + +{ + return 1; +} + + + +### FUNC do_always_noconv @ 0004efe0 + +/* std::codecvt::do_always_noconv() const */ + +undefined4 std::codecvt::do_always_noconv(void) + +{ + return 1; +} + + + +### FUNC do_length @ 0004efe4 + +/* std::codecvt::do_length(mbstate_t&, char const*, char const*, unsigned + int) const */ + +uint __thiscall +std::codecvt::do_length + (codecvt *this,mbstate_t *param_1,char *param_2,char *param_3, + uint param_4) + +{ + if ((uint)((int)param_3 - (int)param_2) <= param_4) { + param_4 = (int)param_3 - (int)param_2; + } + return param_4; +} + + + +### FUNC do_max_length @ 0004eff0 + +/* std::codecvt::do_max_length() const */ + +undefined4 std::codecvt::do_max_length(void) + +{ + return 1; +} + + + +### FUNC ~collate @ 0004eff4 + +/* std::collate::~collate() */ + +void __thiscall std::collate::~collate(collate *this) + +{ + locale::facet::~facet((facet *)this); + return; +} + + + +### FUNC ~collate @ 0004effe + +/* std::collate::~collate() */ + +void __thiscall std::collate::~collate(collate *this) + +{ + locale::facet::~facet((facet *)this); + operator_delete(this); + return; +} + + + +### FUNC do_compare @ 0004f01e + +/* std::collate::do_compare(char const*, char const*, char const*, char const*) const */ + +undefined4 __thiscall +std::collate::do_compare + (collate *this,char *param_1,char *param_2,char *param_3,char *param_4) + +{ + int iVar1; + size_t __n; + undefined4 uVar2; + size_t sVar3; + size_t sVar4; + + sVar3 = (int)param_4 - (int)param_3; + sVar4 = (int)param_2 - (int)param_1; + __n = sVar3; + if ((int)sVar4 <= (int)sVar3) { + __n = sVar4; + } + iVar1 = memcmp(param_1,param_3,__n); + if (iVar1 == 0) { + uVar2 = 0; + if ((sVar4 != sVar3) && (uVar2 = 0xffffffff, (int)sVar3 <= (int)sVar4)) { + uVar2 = 1; + } + } + else { + uVar2 = 0xffffffff; + if (0 < iVar1) { + uVar2 = 1; + } + } + return uVar2; +} + + + +### FUNC do_transform @ 0004f05c + +/* std::collate::do_transform(char const*, char const*) const */ + +void std::collate::do_transform(char *param_1,char *param_2) + +{ + FUN_0004f078(); + return; +} + + + +### FUNC FUN_0004f078 @ 0004f078 + +undefined4 * FUN_0004f078(undefined4 *param_1,int param_2,int param_3) + +{ + undefined4 *puVar1; + int iVar2; + uint uVar3; + uint local_18; + + param_1[4] = param_1; + param_1[5] = param_1; + iVar2 = param_3 - param_2; + uVar3 = iVar2 + 1; + if (uVar3 != 0) { + puVar1 = param_1; + if (0x10 < uVar3) { + local_18 = uVar3; + if (uVar3 < 0x81) { + puVar1 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18); + uVar3 = local_18; + } + else { + puVar1 = (undefined4 *)operator_new(uVar3); + } + param_1[4] = puVar1; + param_1[5] = puVar1; + *param_1 = (undefined1 *)((int)puVar1 + uVar3); + } + if (param_3 != param_2) { + __aeabi_memcpy(puVar1,param_2,iVar2); + puVar1 = (undefined4 *)((int)puVar1 + iVar2); + } + param_1[4] = puVar1; + *(undefined1 *)puVar1 = 0; + return param_1; + } + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); +} + + + +### FUNC do_hash @ 0004f114 + +/* std::collate::do_hash(char const*, char const*) const */ + +int __thiscall std::collate::do_hash(collate *this,char *param_1,char *param_2) + +{ + int iVar1; + + iVar1 = 0; + if (param_1 < param_2) { + iVar1 = 0; + do { + iVar1 = iVar1 * 5 + (uint)(byte)*param_1; + param_1 = (char *)((byte *)param_1 + 1); + } while (param_2 != param_1); + } + return iVar1; +} + + + +### FUNC ~collate @ 0004f12c + +/* std::collate::~collate() */ + +void __thiscall std::collate::~collate(collate *this) + +{ + locale::facet::~facet((facet *)this); + return; +} + + + +### FUNC ~collate @ 0004f136 + +/* std::collate::~collate() */ + +void __thiscall std::collate::~collate(collate *this) + +{ + locale::facet::~facet((facet *)this); + operator_delete(this); + return; +} + + + +### FUNC do_compare @ 0004f156 + +/* std::collate::do_compare(wchar_t const*, wchar_t const*, wchar_t const*, wchar_t const*) + const */ + +undefined4 __thiscall +std::collate::do_compare + (collate *this,wchar_t *param_1,wchar_t *param_2,wchar_t *param_3, + wchar_t *param_4) + +{ + undefined4 uVar1; + uint uVar2; + uint uVar3; + int iVar4; + int iVar5; + int iVar6; + bool bVar7; + bool bVar8; + wchar_t *local_1c; + + bVar7 = param_3 == param_4; + local_1c = param_1; + if ((param_1 != param_2) && (param_3 != param_4)) { + iVar6 = (int)param_3 + (4 - (int)param_4); + iVar5 = 0; + do { + uVar3 = *(uint *)((int)param_3 + -iVar5); + uVar2 = *(uint *)((int)param_1 + -iVar5); + if (uVar2 < uVar3) { + return 0xffffffff; + } + if (uVar3 < uVar2) { + return 1; + } + bVar7 = iVar6 == iVar5; + iVar4 = iVar5 + -4; + } while ((iVar6 != iVar5) && + (bVar8 = (int)param_1 + (4 - (int)param_2) != iVar5, iVar5 = iVar4, bVar8)); + local_1c = (wchar_t *)((int)param_1 - iVar4); + } + uVar1 = 0xffffffff; + if ((bVar7) && (uVar1 = 1, local_1c == param_2)) { + uVar1 = 0; + } + return uVar1; +} + + + +### FUNC do_transform @ 0004f1d8 + +/* std::collate::do_transform(wchar_t const*, wchar_t const*) const */ + +void std::collate::do_transform(wchar_t *param_1,wchar_t *param_2) + +{ + FUN_0004f1f4(); + return; +} + + + +### FUNC FUN_0004f1f4 @ 0004f1f4 + +int * FUN_0004f1f4(int *param_1,int param_2,int param_3) + +{ + uint uVar1; + int *piVar2; + undefined4 uVar3; + int iVar4; + uint local_18; + + param_1[0x10] = (int)param_1; + param_1[0x11] = (int)param_1; + iVar4 = param_3 - param_2; + uVar1 = (iVar4 >> 2) + 1; + if (0x3ffffffe < (uint)(iVar4 >> 2)) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + piVar2 = param_1; + if (0x10 < uVar1) { + if (0x3fffffff < uVar1) { + FUN_00030824(4); + uVar3 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + uVar1 = uVar1 * 4; + local_18 = uVar1; + if (uVar1 < 0x81) { + piVar2 = (int *)std::__node_alloc::_M_allocate(&local_18); + uVar1 = local_18; + } + else { + piVar2 = (int *)operator_new(uVar1); + } + param_1[0x10] = (int)piVar2; + param_1[0x11] = (int)piVar2; + *param_1 = (int)piVar2 + (uVar1 & 0xfffffffc); + } + if (param_3 != param_2) { + __aeabi_memcpy(piVar2,param_2,iVar4); + piVar2 = (int *)((int)piVar2 + iVar4); + } + param_1[0x10] = (int)piVar2; + *piVar2 = 0; + return param_1; +} + + + +### FUNC do_hash @ 0004f2c8 + +/* std::collate::do_hash(wchar_t const*, wchar_t const*) const */ + +int __thiscall +std::collate::do_hash(collate *this,wchar_t *param_1,wchar_t *param_2) + +{ + int iVar1; + wchar_t wVar2; + + iVar1 = 0; + if (param_1 < param_2) { + iVar1 = 0; + do { + wVar2 = *param_1; + param_1 = param_1 + 1; + iVar1 = wVar2 + iVar1 * 5; + } while (param_1 < param_2); + } + return iVar1; +} + + + +### FUNC classic_table @ 0004f2e0 + +/* std::ctype::classic_table() */ + +undefined * std::ctype::classic_table(void) + +{ + return &DAT_00065b4c; +} + + + +### FUNC ctype @ 0004f2ec + +/* std::ctype::ctype(std::ctype_base::mask const*, bool, unsigned int) */ + +ctype * __thiscall +std::ctype::ctype(ctype *this,mask *param_1,bool param_2,uint param_3) + +{ + mask *pmVar1; + + *(uint *)(this + 4) = (uint)(param_3 != 0); + pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)this = &PTR__ctype_00069fe8; + pmVar1 = param_1; + if (param_1 == (mask *)0x0) { + pmVar1 = &DAT_00065b4c; + } + *(mask **)(this + 0xc) = pmVar1; + this[0x10] = (ctype)(param_1 != (mask *)0x0 && param_2); + return this; +} + + + +### FUNC ~ctype @ 0004f344 + +/* std::ctype::~ctype() */ + +void __thiscall std::ctype::~ctype(ctype *this) + +{ + *(undefined ***)this = &PTR__ctype_00069fe8; + if ((this[0x10] != (ctype)0x0) && (*(void **)(this + 0xc) != (void *)0x0)) { + operator_delete__(*(void **)(this + 0xc)); + } + locale::facet::~facet((facet *)this); + return; +} + + + +### FUNC ~ctype @ 0004f370 + +/* std::ctype::~ctype() */ + +void __thiscall std::ctype::~ctype(ctype *this) + +{ + *(undefined ***)this = &PTR__ctype_00069fe8; + if ((this[0x10] != (ctype)0x0) && (*(void **)(this + 0xc) != (void *)0x0)) { + operator_delete__(*(void **)(this + 0xc)); + } + locale::facet::~facet((facet *)this); + operator_delete(this); + return; +} + + + +### FUNC scan_is @ 0004f3b0 + +/* std::ctype::scan_is(std::ctype_base::mask, char const*, char const*) const */ + +byte * __thiscall +std::ctype::scan_is(ctype *this,uint param_2,byte *param_3,byte *param_4) + +{ + int iVar1; + int iVar2; + + iVar2 = (int)param_4 - (int)param_3 >> 2; + iVar1 = *(int *)(this + 0xc); + if (0 < iVar2) { + iVar2 = iVar2 + 1; + do { + if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) != 0) { + return param_3; + } + if ((*(uint *)(iVar1 + (uint)param_3[1] * 4) & param_2) != 0) { + return param_3 + 1; + } + if ((*(uint *)(iVar1 + (uint)param_3[2] * 4) & param_2) != 0) { + return param_3 + 2; + } + if ((*(uint *)(iVar1 + (uint)param_3[3] * 4) & param_2) != 0) { + return param_3 + 3; + } + iVar2 = iVar2 + -1; + param_3 = param_3 + 4; + } while (1 < iVar2); + } + iVar2 = (int)param_4 - (int)param_3; + if (iVar2 != 1) { + if (iVar2 != 2) { + if (iVar2 != 3) { + return param_4; + } + if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) != 0) { + return param_3; + } + param_3 = param_3 + 1; + } + if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) != 0) { + return param_3; + } + param_3 = param_3 + 1; + } + if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) == 0) { + return param_4; + } + return param_3; +} + + + +### FUNC scan_not @ 0004f43c + +/* std::ctype::scan_not(std::ctype_base::mask, char const*, char const*) const */ + +byte * __thiscall +std::ctype::scan_not(ctype *this,uint param_2,byte *param_3,byte *param_4) + +{ + int iVar1; + int iVar2; + + iVar2 = (int)param_4 - (int)param_3 >> 2; + iVar1 = *(int *)(this + 0xc); + if (0 < iVar2) { + iVar2 = iVar2 + 1; + do { + if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) == 0) { + return param_3; + } + if ((*(uint *)(iVar1 + (uint)param_3[1] * 4) & param_2) == 0) { + return param_3 + 1; + } + if ((*(uint *)(iVar1 + (uint)param_3[2] * 4) & param_2) == 0) { + return param_3 + 2; + } + if ((*(uint *)(iVar1 + (uint)param_3[3] * 4) & param_2) == 0) { + return param_3 + 3; + } + iVar2 = iVar2 + -1; + param_3 = param_3 + 4; + } while (1 < iVar2); + } + iVar2 = (int)param_4 - (int)param_3; + if (iVar2 != 1) { + if (iVar2 != 2) { + if (iVar2 != 3) { + return param_4; + } + if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) == 0) { + return param_3; + } + param_3 = param_3 + 1; + } + if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) == 0) { + return param_3; + } + param_3 = param_3 + 1; + } + if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) != 0) { + return param_4; + } + return param_3; +} + + + +### FUNC do_toupper @ 0004f4c8 + +/* std::ctype::do_toupper(char) const */ + +undefined1 __thiscall std::ctype::do_toupper(ctype *this,char param_1) + +{ + return (&DAT_00065f4c)[param_1]; +} + + + +### FUNC do_tolower @ 0004f4d4 + +/* std::ctype::do_tolower(char) const */ + +undefined1 __thiscall std::ctype::do_tolower(ctype *this,char param_1) + +{ + return (&DAT_0006604c)[param_1]; +} + + + +### FUNC do_toupper @ 0004f4e0 + +/* std::ctype::do_toupper(char*, char const*) const */ + +char * __thiscall std::ctype::do_toupper(ctype *this,char *param_1,char *param_2) + +{ + if (param_1 < param_2) { + do { + *param_1 = (&DAT_00065f4c)[(byte)*param_1]; + param_1 = (char *)((byte *)param_1 + 1); + } while (param_2 != param_1); + } + return param_2; +} + + + +### FUNC do_tolower @ 0004f4fc + +/* std::ctype::do_tolower(char*, char const*) const */ + +char * __thiscall std::ctype::do_tolower(ctype *this,char *param_1,char *param_2) + +{ + if (param_1 < param_2) { + do { + *param_1 = (&DAT_0006604c)[(byte)*param_1]; + param_1 = (char *)((byte *)param_1 + 1); + } while (param_2 != param_1); + } + return param_2; +} + + + +### FUNC do_widen @ 0004f518 + +/* std::ctype::do_widen(char) const */ + +int __thiscall std::ctype::do_widen(ctype *this,char param_1) + +{ + return (int)param_1; +} + + + +### FUNC do_widen @ 0004f51c + +/* std::ctype::do_widen(char const*, char const*, char*) const */ + +char * __thiscall +std::ctype::do_widen(ctype *this,char *param_1,char *param_2,char *param_3) + +{ + if (param_2 != param_1) { + __aeabi_memmove(param_3); + } + return param_2; +} + + + +### FUNC do_narrow @ 0004f530 + +/* std::ctype::do_narrow(char, char) const */ + +int std::ctype::do_narrow(char param_1,char param_2) + +{ + return (int)param_2; +} + + + +### FUNC do_narrow @ 0004f534 + +/* std::ctype::do_narrow(char const*, char const*, char, char*) const */ + +char * __thiscall +std::ctype::do_narrow + (ctype *this,char *param_1,char *param_2,char param_3,char *param_4) + +{ + if ((int)param_2 - (int)param_1 != 0) { + __aeabi_memmove(param_4,param_1,(int)param_2 - (int)param_1,(int)param_3); + } + return param_2; +} + + + +### FUNC ~ctype @ 0004f548 + +/* std::ctype::~ctype() */ + +void __thiscall std::ctype::~ctype(ctype *this) + +{ + locale::facet::~facet((facet *)this); + return; +} + + + +### FUNC ~ctype @ 0004f552 + +/* std::ctype::~ctype() */ + +void __thiscall std::ctype::~ctype(ctype *this) + +{ + locale::facet::~facet((facet *)this); + operator_delete(this); + return; +} + + + +### FUNC do_is @ 0004f574 + +/* std::ctype::do_is(std::ctype_base::mask, wchar_t) const */ + +undefined4 __thiscall std::ctype::do_is(undefined4 param_1,uint param_2,uint param_3) + +{ + undefined4 uVar1; + + uVar1 = 0; + if (param_3 < 0x100) { + uVar1 = 1; + if ((*(uint *)(&DAT_00065b4c + param_3 * 4) & param_2) == 0) { + uVar1 = 0; + } + } + return uVar1; +} + + + +### FUNC do_is @ 0004f594 + +/* std::ctype::do_is(wchar_t const*, wchar_t const*, std::ctype_base::mask*) const */ + +wchar_t * __thiscall +std::ctype::do_is(ctype *this,wchar_t *param_1,wchar_t *param_2,mask *param_3) + +{ + undefined4 uVar1; + + if (param_1 < param_2) { + do { + uVar1 = 0; + if ((uint)*param_1 < 0x100) { + uVar1 = *(undefined4 *)(&DAT_00065b4c + *param_1 * 4); + } + *(undefined4 *)param_3 = uVar1; + param_3 = (mask *)((int)param_3 + 4); + param_1 = param_1 + 1; + } while (param_1 < param_2); + } + return param_2; +} + + + +### FUNC do_scan_is @ 0004f5bc + +/* std::ctype::do_scan_is(std::ctype_base::mask, wchar_t const*, wchar_t const*) const */ + +uint * __thiscall +std::ctype::do_scan_is(undefined4 param_1,uint param_2,uint *param_3,uint *param_4) + +{ + int iVar1; + + iVar1 = (int)param_4 - (int)param_3 >> 4; + if (0 < iVar1) { + iVar1 = iVar1 + 1; + do { + if ((*param_3 < 0x100) && ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) != 0)) { + return param_3; + } + if ((param_3[1] < 0x100) && ((*(uint *)(&DAT_00065b4c + param_3[1] * 4) & param_2) != 0)) { + return param_3 + 1; + } + if ((param_3[2] < 0x100) && ((*(uint *)(&DAT_00065b4c + param_3[2] * 4) & param_2) != 0)) { + return param_3 + 2; + } + if ((param_3[3] < 0x100) && ((*(uint *)(&DAT_00065b4c + param_3[3] * 4) & param_2) != 0)) { + return param_3 + 3; + } + iVar1 = iVar1 + -1; + param_3 = param_3 + 4; + } while (1 < iVar1); + } + iVar1 = (int)param_4 - (int)param_3 >> 2; + if (iVar1 != 1) { + if (iVar1 != 2) { + if (iVar1 != 3) { + return param_4; + } + if ((*param_3 < 0x100) && ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) != 0)) { + return param_3; + } + param_3 = param_3 + 1; + } + if ((*param_3 < 0x100) && ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) != 0)) { + return param_3; + } + param_3 = param_3 + 1; + } + if ((*param_3 < 0x100) && ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) != 0)) { + return param_3; + } + return param_4; +} + + + +### FUNC do_scan_not @ 0004f6b4 + +/* std::ctype::do_scan_not(std::ctype_base::mask, wchar_t const*, wchar_t const*) const */ + +uint * __thiscall +std::ctype::do_scan_not(undefined4 param_1,uint param_2,uint *param_3,uint *param_4) + +{ + int iVar1; + + iVar1 = (int)param_4 - (int)param_3 >> 4; + if (0 < iVar1) { + iVar1 = iVar1 + 1; + do { + if (0xff < *param_3) { + return param_3; + } + if ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) == 0) { + return param_3; + } + if (0xff < param_3[1]) { + return param_3 + 1; + } + if ((*(uint *)(&DAT_00065b4c + param_3[1] * 4) & param_2) == 0) { + return param_3 + 1; + } + if (0xff < param_3[2]) { + return param_3 + 2; + } + if ((*(uint *)(&DAT_00065b4c + param_3[2] * 4) & param_2) == 0) { + return param_3 + 2; + } + if (0xff < param_3[3]) { + return param_3 + 3; + } + if ((*(uint *)(&DAT_00065b4c + param_3[3] * 4) & param_2) == 0) { + return param_3 + 3; + } + iVar1 = iVar1 + -1; + param_3 = param_3 + 4; + } while (1 < iVar1); + } + iVar1 = (int)param_4 - (int)param_3 >> 2; + if (iVar1 != 1) { + if (iVar1 != 2) { + if (iVar1 != 3) { + return param_4; + } + if (0xff < *param_3) { + return param_3; + } + if ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) == 0) { + return param_3; + } + param_3 = param_3 + 1; + } + if (0xff < *param_3) { + return param_3; + } + if ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) == 0) { + return param_3; + } + param_3 = param_3 + 1; + } + if (0xff < *param_3) { + return param_3; + } + if ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) != 0) { + return param_4; + } + return param_3; +} + + + +### FUNC do_toupper @ 0004f7bc + +/* std::ctype::do_toupper(wchar_t) const */ + +wchar_t __thiscall std::ctype::do_toupper(ctype *this,wchar_t param_1) + +{ + if ((uint)param_1 < 0x100) { + param_1 = (wchar_t)(byte)(&DAT_00065f4c)[param_1]; + } + return param_1; +} + + + +### FUNC do_toupper @ 0004f7d0 + +/* std::ctype::do_toupper(wchar_t*, wchar_t const*) const */ + +wchar_t * __thiscall +std::ctype::do_toupper(ctype *this,wchar_t *param_1,wchar_t *param_2) + +{ + wchar_t wVar1; + + if (param_1 < param_2) { + do { + wVar1 = *param_1; + if ((uint)wVar1 < 0x100) { + wVar1 = (wchar_t)(byte)(&DAT_00065f4c)[wVar1]; + } + *param_1 = wVar1; + param_1 = param_1 + 1; + } while (param_1 < param_2); + } + return param_2; +} + + + +### FUNC do_tolower @ 0004f7f0 + +/* std::ctype::do_tolower(wchar_t) const */ + +wchar_t __thiscall std::ctype::do_tolower(ctype *this,wchar_t param_1) + +{ + if ((uint)param_1 < 0x100) { + param_1 = (wchar_t)(byte)(&DAT_0006604c)[param_1]; + } + return param_1; +} + + + +### FUNC do_tolower @ 0004f804 + +/* std::ctype::do_tolower(wchar_t*, wchar_t const*) const */ + +wchar_t * __thiscall +std::ctype::do_tolower(ctype *this,wchar_t *param_1,wchar_t *param_2) + +{ + wchar_t wVar1; + + if (param_1 < param_2) { + do { + wVar1 = *param_1; + if ((uint)wVar1 < 0x100) { + wVar1 = (wchar_t)(byte)(&DAT_0006604c)[wVar1]; + } + *param_1 = wVar1; + param_1 = param_1 + 1; + } while (param_1 < param_2); + } + return param_2; +} + + + +### FUNC do_widen @ 0004f824 + +/* std::ctype::do_widen(char) const */ + +int __thiscall std::ctype::do_widen(ctype *this,char param_1) + +{ + return (int)param_1; +} + + + +### FUNC do_widen @ 0004f828 + +/* std::ctype::do_widen(char const*, char const*, wchar_t*) const */ + +char * __thiscall +std::ctype::do_widen(ctype *this,char *param_1,char *param_2,wchar_t *param_3) + +{ + if (param_1 != param_2) { + do { + *param_3 = (uint)(byte)*param_1; + param_3 = param_3 + 1; + param_1 = (char *)((byte *)param_1 + 1); + } while (param_2 != param_1); + } + return param_2; +} + + + +### FUNC do_narrow @ 0004f83a + +/* std::ctype::do_narrow(wchar_t, char) const */ + +wchar_t __thiscall std::ctype::do_narrow(ctype *this,wchar_t param_1,char param_2) + +{ + wchar_t wVar1; + + wVar1 = (int)param_2; + if ((param_1 & 0xffU) == param_1) { + wVar1 = param_1 & 0xffU; + } + return wVar1; +} + + + +### FUNC do_narrow @ 0004f848 + +/* std::ctype::do_narrow(wchar_t const*, wchar_t const*, char, char*) const */ + +wchar_t * __thiscall +std::ctype::do_narrow + (ctype *this,wchar_t *param_1,wchar_t *param_2,char param_3,char *param_4) + +{ + char cVar1; + wchar_t wVar2; + + if (param_1 != param_2) { + do { + wVar2 = *param_1; + param_1 = param_1 + 1; + cVar1 = param_3; + if ((wVar2 & 0xffU) == wVar2) { + cVar1 = (char)wVar2; + } + *param_4 = cVar1; + param_4 = param_4 + 1; + } while (param_2 != param_1); + } + return param_2; +} + + + +### FUNC moneypunct @ 0004f870 + +/* std::moneypunct::moneypunct(unsigned int) */ + +moneypunct * __thiscall +std::moneypunct::moneypunct(moneypunct *this,uint param_1) + +{ + *(uint *)(this + 4) = (uint)(param_1 != 0); + pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)this = &PTR__moneypunct_0006a0a8; + this[0xc] = (moneypunct)0x2; + this[0xd] = (moneypunct)0x3; + this[0xf] = (moneypunct)0x4; + this[0xe] = (moneypunct)0x0; + this[0x10] = (moneypunct)0x2; + this[0x12] = (moneypunct)0x0; + this[0x11] = (moneypunct)0x3; + this[0x13] = (moneypunct)0x4; + return this; +} + + + +### FUNC ~moneypunct @ 0004f8b4 + +/* std::moneypunct::~moneypunct() */ + +void __thiscall std::moneypunct::~moneypunct(moneypunct *this) + +{ + locale::facet::~facet((facet *)this); + return; +} + + + +### FUNC ~moneypunct @ 0004f8be + +/* std::moneypunct::~moneypunct() */ + +void __thiscall std::moneypunct::~moneypunct(moneypunct *this) + +{ + locale::facet::~facet((facet *)this); + operator_delete(this); + return; +} + + + +### FUNC do_decimal_point @ 0004f8de + +/* std::moneypunct::do_decimal_point() const */ + +undefined4 std::moneypunct::do_decimal_point(void) + +{ + return 0x20; +} + + + +### FUNC do_thousands_sep @ 0004f8e2 + +/* std::moneypunct::do_thousands_sep() const */ + +undefined4 std::moneypunct::do_thousands_sep(void) + +{ + return 0x20; +} + + + +### FUNC do_grouping @ 0004f8e8 + +/* std::moneypunct::do_grouping() const */ + +void __thiscall std::moneypunct::do_grouping(moneypunct *this) + +{ + undefined1 auStack_c [4]; + + FUN_00031c38(this,&DAT_00066173,auStack_c); + return; +} + + + +### FUNC do_curr_symbol @ 0004f904 + +/* std::moneypunct::do_curr_symbol() const */ + +void __thiscall std::moneypunct::do_curr_symbol(moneypunct *this) + +{ + undefined1 auStack_c [4]; + + FUN_00031c38(this,&DAT_00066173,auStack_c); + return; +} + + + +### FUNC do_positive_sign @ 0004f920 + +/* std::moneypunct::do_positive_sign() const */ + +void __thiscall std::moneypunct::do_positive_sign(moneypunct *this) + +{ + undefined1 auStack_c [4]; + + FUN_00031c38(this,&DAT_00066173,auStack_c); + return; +} + + + +### FUNC do_negative_sign @ 0004f93c + +/* std::moneypunct::do_negative_sign() const */ + +void __thiscall std::moneypunct::do_negative_sign(moneypunct *this) + +{ + undefined1 auStack_c [4]; + + FUN_00031c38(this,&DAT_00066173,auStack_c); + return; +} + + + +### FUNC do_pos_format @ 0004f958 + +/* std::moneypunct::do_pos_format() const */ + +undefined4 __thiscall std::moneypunct::do_pos_format(moneypunct *this) + +{ + return *(undefined4 *)(this + 0xc); +} + + + +### FUNC do_neg_format @ 0004f96e + +/* std::moneypunct::do_neg_format() const */ + +undefined4 __thiscall std::moneypunct::do_neg_format(moneypunct *this) + +{ + return *(undefined4 *)(this + 0x10); +} + + + +### FUNC do_frac_digits @ 0004f984 + +/* std::moneypunct::do_frac_digits() const */ + +undefined4 std::moneypunct::do_frac_digits(void) + +{ + return 0; +} + + + +### FUNC moneypunct @ 0004f988 + +/* std::moneypunct::moneypunct(unsigned int) */ + +moneypunct * __thiscall +std::moneypunct::moneypunct(moneypunct *this,uint param_1) + +{ + *(uint *)(this + 4) = (uint)(param_1 != 0); + pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)this = &PTR__moneypunct_0006a0dc; + this[0xc] = (moneypunct)0x2; + this[0xd] = (moneypunct)0x3; + this[0xf] = (moneypunct)0x4; + this[0xe] = (moneypunct)0x0; + this[0x10] = (moneypunct)0x2; + this[0x12] = (moneypunct)0x0; + this[0x11] = (moneypunct)0x3; + this[0x13] = (moneypunct)0x4; + return this; +} + + + +### FUNC ~moneypunct @ 0004f9cc + +/* std::moneypunct::~moneypunct() */ + +void __thiscall std::moneypunct::~moneypunct(moneypunct *this) + +{ + locale::facet::~facet((facet *)this); + return; +} + + + +### FUNC ~moneypunct @ 0004f9d6 + +/* std::moneypunct::~moneypunct() */ + +void __thiscall std::moneypunct::~moneypunct(moneypunct *this) + +{ + locale::facet::~facet((facet *)this); + operator_delete(this); + return; +} + + + +### FUNC do_decimal_point @ 0004f9f6 + +/* std::moneypunct::do_decimal_point() const */ + +undefined4 std::moneypunct::do_decimal_point(void) + +{ + return 0x20; +} + + + +### FUNC do_thousands_sep @ 0004f9fa + +/* std::moneypunct::do_thousands_sep() const */ + +undefined4 std::moneypunct::do_thousands_sep(void) + +{ + return 0x20; +} + + + +### FUNC do_grouping @ 0004fa00 + +/* std::moneypunct::do_grouping() const */ + +void __thiscall std::moneypunct::do_grouping(moneypunct *this) + +{ + undefined1 auStack_c [4]; + + FUN_00031c38(this,&DAT_00066173,auStack_c); + return; +} + + + +### FUNC do_curr_symbol @ 0004fa1c + +/* std::moneypunct::do_curr_symbol() const */ + +void __thiscall std::moneypunct::do_curr_symbol(moneypunct *this) + +{ + undefined1 auStack_c [4]; + + FUN_00031c38(this,&DAT_00066173,auStack_c); + return; +} + + + +### FUNC do_positive_sign @ 0004fa38 + +/* std::moneypunct::do_positive_sign() const */ + +void __thiscall std::moneypunct::do_positive_sign(moneypunct *this) + +{ + undefined1 auStack_c [4]; + + FUN_00031c38(this,&DAT_00066173,auStack_c); + return; +} + + + +### FUNC do_negative_sign @ 0004fa54 + +/* std::moneypunct::do_negative_sign() const */ + +void __thiscall std::moneypunct::do_negative_sign(moneypunct *this) + +{ + undefined1 auStack_c [4]; + + FUN_00031c38(this,&DAT_00066173,auStack_c); + return; +} + + + +### FUNC do_pos_format @ 0004fa70 + +/* std::moneypunct::do_pos_format() const */ + +undefined4 __thiscall std::moneypunct::do_pos_format(moneypunct *this) + +{ + return *(undefined4 *)(this + 0xc); +} + + + +### FUNC do_neg_format @ 0004fa86 + +/* std::moneypunct::do_neg_format() const */ + +undefined4 __thiscall std::moneypunct::do_neg_format(moneypunct *this) + +{ + return *(undefined4 *)(this + 0x10); +} + + + +### FUNC do_frac_digits @ 0004fa9c + +/* std::moneypunct::do_frac_digits() const */ + +undefined4 std::moneypunct::do_frac_digits(void) + +{ + return 0; +} + + + +### FUNC moneypunct @ 0004faa0 + +/* std::moneypunct::moneypunct(unsigned int) */ + +moneypunct * __thiscall +std::moneypunct::moneypunct(moneypunct *this,uint param_1) + +{ + *(uint *)(this + 4) = (uint)(param_1 != 0); + pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)this = &PTR__moneypunct_0006a110; + this[0xc] = (moneypunct)0x2; + this[0xd] = (moneypunct)0x3; + this[0xf] = (moneypunct)0x4; + this[0xe] = (moneypunct)0x0; + this[0x10] = (moneypunct)0x2; + this[0x12] = (moneypunct)0x0; + this[0x11] = (moneypunct)0x3; + this[0x13] = (moneypunct)0x4; + return this; +} + + + +### FUNC ~moneypunct @ 0004fae4 + +/* std::moneypunct::~moneypunct() */ + +void __thiscall std::moneypunct::~moneypunct(moneypunct *this) + +{ + locale::facet::~facet((facet *)this); + return; +} + + + +### FUNC ~moneypunct @ 0004faee + +/* std::moneypunct::~moneypunct() */ + +void __thiscall std::moneypunct::~moneypunct(moneypunct *this) + +{ + locale::facet::~facet((facet *)this); + operator_delete(this); + return; +} + + + +### FUNC do_decimal_point @ 0004fb0e + +/* std::moneypunct::do_decimal_point() const */ + +undefined4 std::moneypunct::do_decimal_point(void) + +{ + return 0x20; +} + + + +### FUNC do_thousands_sep @ 0004fb12 + +/* std::moneypunct::do_thousands_sep() const */ + +undefined4 std::moneypunct::do_thousands_sep(void) + +{ + return 0x20; +} + + + +### FUNC do_grouping @ 0004fb18 + +/* std::moneypunct::do_grouping() const */ + +void __thiscall std::moneypunct::do_grouping(moneypunct *this) + +{ + undefined1 auStack_c [4]; + + FUN_00031c38(this,&DAT_00066173,auStack_c); + return; +} + + + +### FUNC do_curr_symbol @ 0004fb34 + +/* std::moneypunct::do_curr_symbol() const */ + +void __thiscall std::moneypunct::do_curr_symbol(moneypunct *this) + +{ + size_t sVar1; + + *(moneypunct **)(this + 0x40) = this; + *(moneypunct **)(this + 0x44) = this; + sVar1 = wcslen(L""); + FUN_0004fe38(this,&DAT_00066174,&DAT_00066174 + sVar1 * 4); + return; +} + + + +### FUNC do_positive_sign @ 0004fb8c + +/* std::moneypunct::do_positive_sign() const */ + +void __thiscall std::moneypunct::do_positive_sign(moneypunct *this) + +{ + size_t sVar1; + + *(moneypunct **)(this + 0x40) = this; + *(moneypunct **)(this + 0x44) = this; + sVar1 = wcslen(L""); + FUN_0004fe38(this,&DAT_00066174,&DAT_00066174 + sVar1 * 4); + return; +} + + + +### FUNC do_negative_sign @ 0004fbe4 + +/* std::moneypunct::do_negative_sign() const */ + +void __thiscall std::moneypunct::do_negative_sign(moneypunct *this) + +{ + size_t sVar1; + + *(moneypunct **)(this + 0x40) = this; + *(moneypunct **)(this + 0x44) = this; + sVar1 = wcslen(L""); + FUN_0004fe38(this,&DAT_00066174,&DAT_00066174 + sVar1 * 4); + return; +} + + + +### FUNC do_frac_digits @ 0004fc3c + +/* std::moneypunct::do_frac_digits() const */ + +undefined4 std::moneypunct::do_frac_digits(void) + +{ + return 0; +} + + + +### FUNC do_pos_format @ 0004fc40 + +/* std::moneypunct::do_pos_format() const */ + +undefined4 __thiscall std::moneypunct::do_pos_format(moneypunct *this) + +{ + return *(undefined4 *)(this + 0xc); +} + + + +### FUNC do_neg_format @ 0004fc56 + +/* std::moneypunct::do_neg_format() const */ + +undefined4 __thiscall std::moneypunct::do_neg_format(moneypunct *this) + +{ + return *(undefined4 *)(this + 0x10); +} + + + +### FUNC moneypunct @ 0004fc6c + +/* std::moneypunct::moneypunct(unsigned int) */ + +moneypunct * __thiscall +std::moneypunct::moneypunct(moneypunct *this,uint param_1) + +{ + *(uint *)(this + 4) = (uint)(param_1 != 0); + pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)this = &PTR__moneypunct_0006a144; + this[0xc] = (moneypunct)0x2; + this[0xd] = (moneypunct)0x3; + this[0xf] = (moneypunct)0x4; + this[0xe] = (moneypunct)0x0; + this[0x10] = (moneypunct)0x2; + this[0x12] = (moneypunct)0x0; + this[0x11] = (moneypunct)0x3; + this[0x13] = (moneypunct)0x4; + return this; +} + + + +### FUNC ~moneypunct @ 0004fcb0 + +/* std::moneypunct::~moneypunct() */ + +void __thiscall std::moneypunct::~moneypunct(moneypunct *this) + +{ + locale::facet::~facet((facet *)this); + return; +} + + + +### FUNC ~moneypunct @ 0004fcba + +/* std::moneypunct::~moneypunct() */ + +void __thiscall std::moneypunct::~moneypunct(moneypunct *this) + +{ + locale::facet::~facet((facet *)this); + operator_delete(this); + return; +} + + + +### FUNC do_decimal_point @ 0004fcda + +/* std::moneypunct::do_decimal_point() const */ + +undefined4 std::moneypunct::do_decimal_point(void) + +{ + return 0x20; +} + + + +### FUNC do_thousands_sep @ 0004fcde + +/* std::moneypunct::do_thousands_sep() const */ + +undefined4 std::moneypunct::do_thousands_sep(void) + +{ + return 0x20; +} + + + +### FUNC do_grouping @ 0004fce4 + +/* std::moneypunct::do_grouping() const */ + +void __thiscall std::moneypunct::do_grouping(moneypunct *this) + +{ + undefined1 auStack_c [4]; + + FUN_00031c38(this,&DAT_00066173,auStack_c); + return; +} + + + +### FUNC do_curr_symbol @ 0004fd00 + +/* std::moneypunct::do_curr_symbol() const */ + +void __thiscall std::moneypunct::do_curr_symbol(moneypunct *this) + +{ + size_t sVar1; + + *(moneypunct **)(this + 0x40) = this; + *(moneypunct **)(this + 0x44) = this; + sVar1 = wcslen(L""); + FUN_0004fe38(this,&DAT_00066174,&DAT_00066174 + sVar1 * 4); + return; +} + + + +### FUNC do_positive_sign @ 0004fd58 + +/* std::moneypunct::do_positive_sign() const */ + +void __thiscall std::moneypunct::do_positive_sign(moneypunct *this) + +{ + size_t sVar1; + + *(moneypunct **)(this + 0x40) = this; + *(moneypunct **)(this + 0x44) = this; + sVar1 = wcslen(L""); + FUN_0004fe38(this,&DAT_00066174,&DAT_00066174 + sVar1 * 4); + return; +} + + + +### FUNC do_negative_sign @ 0004fdb0 + +/* std::moneypunct::do_negative_sign() const */ + +void __thiscall std::moneypunct::do_negative_sign(moneypunct *this) + +{ + size_t sVar1; + + *(moneypunct **)(this + 0x40) = this; + *(moneypunct **)(this + 0x44) = this; + sVar1 = wcslen(L""); + FUN_0004fe38(this,&DAT_00066174,&DAT_00066174 + sVar1 * 4); + return; +} + + + +### FUNC do_frac_digits @ 0004fe08 + +/* std::moneypunct::do_frac_digits() const */ + +undefined4 std::moneypunct::do_frac_digits(void) + +{ + return 0; +} + + + +### FUNC do_pos_format @ 0004fe0c + +/* std::moneypunct::do_pos_format() const */ + +undefined4 __thiscall std::moneypunct::do_pos_format(moneypunct *this) + +{ + return *(undefined4 *)(this + 0xc); +} + + + +### FUNC do_neg_format @ 0004fe22 + +/* std::moneypunct::do_neg_format() const */ + +undefined4 __thiscall std::moneypunct::do_neg_format(moneypunct *this) + +{ + return *(undefined4 *)(this + 0x10); +} + + + +### FUNC FUN_0004fe38 @ 0004fe38 + +void FUN_0004fe38(int *param_1,int param_2,int param_3) + +{ + uint uVar1; + undefined4 *puVar2; + undefined4 uVar3; + uint uVar4; + uint local_18; + + uVar4 = param_3 - param_2 >> 2; + uVar1 = uVar4 + 1; + if (0x3ffffffe < uVar4) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + if (uVar1 < 0x11) { + puVar2 = (undefined4 *)param_1[0x11]; + } + else { + if (0x3fffffff < uVar1) { + FUN_00030824(4); + uVar3 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + uVar1 = uVar1 * 4; + local_18 = uVar1; + if (uVar1 < 0x81) { + puVar2 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18); + uVar1 = local_18; + } + else { + puVar2 = (undefined4 *)operator_new(uVar1); + } + param_1[0x10] = (int)puVar2; + param_1[0x11] = (int)puVar2; + *param_1 = (int)puVar2 + (uVar1 & 0xfffffffc); + } + if (param_3 != param_2) { + __aeabi_memcpy(puVar2,param_2); + puVar2 = (undefined4 *)((int)puVar2 + (param_3 - param_2)); + } + param_1[0x10] = (int)puVar2; + *puVar2 = 0; + return; +} + + + +### FUNC __valid_grouping @ 0004fee0 + +/* std::priv::__valid_grouping(char const*, char const*, char const*, char const*) */ + +undefined4 std::priv::__valid_grouping(char *param_1,char *param_2,char *param_3,char *param_4) + +{ + byte bVar1; + byte bVar2; + char *pcVar3; + undefined4 uVar4; + + uVar4 = 1; + if ((param_1 != param_2) && (param_3 != param_4)) { + bVar2 = param_2[-1]; + bVar1 = *param_3; + for (pcVar3 = param_2 + -1; pcVar3 != param_1; pcVar3 = pcVar3 + -1) { + if (bVar2 != bVar1) { + return 0; + } + if (param_3 != param_4 + -1) { + param_3 = (char *)((byte *)param_3 + 1); + } + bVar1 = *param_3; + bVar2 = pcVar3[-1]; + } + uVar4 = 1; + if (bVar1 < bVar2) { + uVar4 = 0; + } + } + return uVar4; +} + + + +### FUNC __digit_val_table @ 0004ff38 + +/* std::priv::__digit_val_table(unsigned int) */ + +undefined1 std::priv::__digit_val_table(uint param_1) + +{ + return (&DAT_00066206)[param_1]; +} + + + +### FUNC __narrow_atoms @ 0004ff44 + +/* std::priv::__narrow_atoms() */ + +char * std::priv::__narrow_atoms(void) + +{ + return "+-0xX"; +} + + + +### FUNC __get_fdigit @ 0004ff50 + +/* std::priv::__get_fdigit(wchar_t&, wchar_t const*) */ + +undefined4 std::priv::__get_fdigit(wchar_t *param_1,wchar_t *param_2) + +{ + wchar_t wVar1; + wchar_t wVar2; + + wVar1 = *param_1; + wVar2 = L'0'; + if ((((((*param_2 != wVar1) && (wVar2 = L'1', param_2[1] != wVar1)) && + (wVar2 = L'2', param_2[2] != wVar1)) && + ((wVar2 = L'3', param_2[3] != wVar1 && (wVar2 = L'4', param_2[4] != wVar1)))) && + ((wVar2 = L'5', param_2[5] != wVar1 && + ((wVar2 = L'6', param_2[6] != wVar1 && (wVar2 = L'7', param_2[7] != wVar1)))))) && + ((wVar2 = L'8', param_2[8] != wVar1 && (wVar2 = L'9', param_2[9] != wVar1)))) { + return 0; + } + *param_1 = wVar2; + return 1; +} + + + +### FUNC __get_fdigit_or_sep @ 0004ffb0 + +/* std::priv::__get_fdigit_or_sep(wchar_t&, wchar_t, wchar_t const*) */ + +undefined4 std::priv::__get_fdigit_or_sep(wchar_t *param_1,wchar_t param_2,wchar_t *param_3) + +{ + wchar_t wVar1; + wchar_t wVar2; + + wVar1 = *param_1; + wVar2 = L','; + if ((((((wVar1 != param_2) && (wVar2 = L'0', *param_3 != wVar1)) && + (wVar2 = L'1', param_3[1] != wVar1)) && + ((wVar2 = L'2', param_3[2] != wVar1 && (wVar2 = L'3', param_3[3] != wVar1)))) && + ((wVar2 = L'4', param_3[4] != wVar1 && + ((wVar2 = L'5', param_3[5] != wVar1 && (wVar2 = L'6', param_3[6] != wVar1)))))) && + ((wVar2 = L'7', param_3[7] != wVar1 && + ((wVar2 = L'8', param_3[8] != wVar1 && (wVar2 = L'9', param_3[9] != wVar1)))))) { + return 0; + } + *param_1 = wVar2; + return 1; +} + + + +### FUNC __hex_char_table_lo @ 00050018 + +/* std::priv::__hex_char_table_lo() */ + +char * std::priv::__hex_char_table_lo(void) + +{ + return "0123456789abcdefx"; +} + + + +### FUNC __hex_char_table_hi @ 00050024 + +/* std::priv::__hex_char_table_hi() */ + +char * std::priv::__hex_char_table_hi(void) + +{ + return "0123456789ABCDEFX"; +} + + + +### FUNC FUN_00050030 @ 00050030 + +int FUN_00050030(int param_1) + +{ + int iVar1; + int iVar2; + + iVar1 = FUN_00041ecc(&stack0xfffffff0); + iVar2 = (int)&stack0xfffffff0 - iVar1; + if (iVar2 != 0) { + __aeabi_memmove(param_1,iVar1,iVar2); + param_1 = param_1 + iVar2; + } + return param_1; +} + + + +### FUNC FUN_00050058 @ 00050058 + +byte * FUN_00050058(byte *param_1,byte *param_2,int param_3,byte param_4,uint param_5,uint param_6, + int param_7) + +{ + byte *pbVar1; + byte *pbVar2; + int iVar3; + uint uVar4; + uint uVar5; + uint uVar6; + + pbVar1 = (byte *)0x0; + if (param_1 != param_2) { + uVar5 = 0; + uVar6 = (uint)(*param_1 == param_5 || *param_1 == param_6); + pbVar2 = param_1 + 1; + if (uVar6 == 0) { + pbVar2 = param_1; + } + uVar4 = 0; + pbVar1 = param_2; + while( true ) { + if (uVar4 < (uint)(*(int *)(param_3 + 0x10) - *(int *)(param_3 + 0x14))) { + uVar5 = (uint)*(byte *)(*(int *)(param_3 + 0x14) + uVar4); + uVar4 = uVar4 + 1; + } + if (((uVar5 == 0) || ((int)param_2 - (int)(pbVar2 + param_7) <= (int)uVar5)) || + (uVar5 == 0xff)) break; + param_2 = param_2 + -uVar5; + iVar3 = (int)(pbVar1 + 1) - (int)param_2; + if (0 < iVar3) { + __aeabi_memmove(pbVar1 + (2 - iVar3),param_2); + } + *param_2 = param_4; + pbVar1 = pbVar1 + 1; + } + pbVar1 = pbVar1 + ((uVar6 + param_7) - (int)(pbVar2 + param_7)); + } + return pbVar1; +} + + + +### FUNC FUN_000500f4 @ 000500f4 + +void FUN_000500f4(byte *param_1,uint param_2,int param_3,undefined4 param_4,uint param_5, + uint param_6,int param_7) + +{ + byte bVar1; + byte *pbVar2; + byte *pbVar3; + byte *pbVar4; + byte *pbVar5; + uint uVar6; + uint uVar7; + uint uVar8; + uint uVar9; + uint uVar10; + uint uVar11; + byte *pbVar12; + uint local_30; + + pbVar4 = param_1 + 0x118; + pbVar2 = *(byte **)(param_1 + 0x118); + if (param_2 <= (uint)(*(int *)(param_1 + 0x10) - (int)pbVar2)) { + bVar1 = *pbVar2; + uVar8 = 0; + pbVar2 = pbVar2 + param_2; + uVar9 = uVar8; + while( true ) { + if (uVar8 < (uint)(*(int *)(param_3 + 0x10) - *(int *)(param_3 + 0x14))) { + uVar9 = (uint)*(byte *)(*(int *)(param_3 + 0x14) + uVar8); + uVar8 = uVar8 + 1; + } + if (uVar9 == 0) break; + pbVar3 = *(byte **)pbVar4; + if (uVar9 == 0xff) { + return; + } + if ((int)(pbVar2 + ((-param_7 - (uint)(bVar1 == param_5 || bVar1 == param_6)) - (int)pbVar3)) + <= (int)uVar9) { + return; + } + pbVar2 = pbVar2 + -uVar9; + pbVar12 = *(byte **)(param_1 + 0x10); + if (pbVar12 == pbVar2) { + pbVar5 = param_1 + 0x10; + if (pbVar3 != param_1) { + pbVar5 = *(byte **)param_1; + } + if ((int)pbVar5 - (int)pbVar12 == 1) { + uVar6 = (int)pbVar12 - (int)pbVar3; + if (uVar6 == 0xfffffffe) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + uVar10 = uVar6; + if (uVar6 < 2) { + uVar10 = 1; + } + uVar11 = uVar6 + uVar10 + 1; + local_30 = 0xfffffffe; + uVar7 = 0xfffffffe; + if (uVar6 <= uVar11) { + uVar7 = uVar11; + } + if (uVar6 + uVar10 != -2) { + local_30 = uVar7; + } + pbVar5 = param_1 + 0x14; + if (0x80 < local_30 >> 1) { + pbVar5 = (byte *)operator_new(local_30); + pbVar12 = *(byte **)(param_1 + 0x10); + pbVar3 = *(byte **)pbVar4; + } + pbVar2 = pbVar5; + if (0 < (int)pbVar12 - (int)pbVar3) { + pbVar12 = pbVar12 + (1 - (int)pbVar3); + do { + *pbVar2 = *pbVar3; + pbVar12 = pbVar12 + -1; + pbVar2 = pbVar2 + 1; + pbVar3 = pbVar3 + 1; + } while (1 < (int)pbVar12); + } + *pbVar2 = 0; + pbVar3 = *(byte **)pbVar4; + if (((pbVar3 != param_1) && (pbVar3 != (byte *)0x0)) && (param_1 + 0x14 != pbVar3)) { + if ((uint)(*(int *)param_1 - (int)pbVar3) < 0x81) { + std::__node_alloc::_M_deallocate(pbVar3,*(int *)param_1 - (int)pbVar3); + } + else { + operator_delete(pbVar3); + } + } + *(byte **)(param_1 + 0x10) = pbVar2; + *(byte **)param_1 = pbVar5 + local_30; + *(byte **)pbVar4 = pbVar5; + } + pbVar2[1] = 0; + **(undefined1 **)(param_1 + 0x10) = (char)param_4; + pbVar2 = *(byte **)(param_1 + 0x10); + *(byte **)(param_1 + 0x10) = pbVar2 + 1; + } + else { + pbVar2 = (byte *)FUN_00050418(param_1,pbVar2,param_4); + } + } + } + return; +} + + + +### FUNC FUN_00050274 @ 00050274 + +int FUN_00050274(int *param_1,int *param_2,int param_3,int param_4,int param_5,int param_6, + int param_7) + +{ + int *piVar1; + int iVar2; + int *piVar3; + uint uVar4; + uint uVar5; + uint uVar6; + + iVar2 = 0; + if (param_1 != param_2) { + uVar5 = 0; + uVar6 = (uint)(*param_1 == param_5 || *param_1 == param_6); + piVar3 = param_1 + 1; + if (uVar6 == 0) { + piVar3 = param_1; + } + uVar4 = 0; + piVar1 = param_2; + while( true ) { + if (uVar4 < (uint)(*(int *)(param_3 + 0x10) - *(int *)(param_3 + 0x14))) { + uVar5 = (uint)*(byte *)(*(int *)(param_3 + 0x14) + uVar4); + uVar4 = uVar4 + 1; + } + if (((uVar5 == 0) || ((int)param_2 - (int)(piVar3 + param_7) >> 2 <= (int)uVar5)) || + (uVar5 == 0xff)) break; + param_2 = param_2 + -uVar5; + iVar2 = (int)(piVar1 + 1) - (int)param_2; + if (0 < iVar2) { + __aeabi_memmove((int)piVar1 + (8 - iVar2),param_2); + } + *param_2 = param_4; + piVar1 = piVar1 + 1; + } + iVar2 = uVar6 + param_7 + ((int)piVar1 - (int)(piVar3 + param_7) >> 2); + } + return iVar2; +} + + + +### FUNC FUN_0005031c @ 0005031c + +void FUN_0005031c(int *param_1,uint param_2,int param_3,int param_4,int param_5,int param_6, + int param_7) + +{ + int *piVar1; + int *piVar2; + uint uVar3; + int *piVar4; + uint uVar5; + uint uVar6; + uint uVar7; + int iVar8; + uint uVar9; + + piVar1 = (int *)param_1[0x112]; + if (param_2 <= (uint)(param_1[0x10] - (int)piVar1 >> 2)) { + iVar8 = *piVar1; + uVar7 = 0; + piVar1 = piVar1 + param_2; + uVar9 = 0; + while( true ) { + if (uVar9 < (uint)(*(int *)(param_3 + 0x10) - *(int *)(param_3 + 0x14))) { + uVar7 = (uint)*(byte *)(*(int *)(param_3 + 0x14) + uVar9); + uVar9 = uVar9 + 1; + } + if (uVar7 == 0) break; + piVar2 = (int *)param_1[0x112]; + if (uVar7 == 0xff) { + return; + } + if ((int)((-param_7 - (uint)(iVar8 == param_5 || iVar8 == param_6)) + + ((int)piVar1 - (int)piVar2 >> 2)) <= (int)uVar7) { + return; + } + piVar1 = piVar1 + -uVar7; + piVar4 = (int *)param_1[0x10]; + if (piVar4 == piVar1) { + if (piVar2 == param_1) { + if ((int)piVar4 - (int)param_1 >> 2 == 0xf) goto LAB_000503d4; + } + else if (*param_1 - (int)piVar4 >> 2 == 1) { +LAB_000503d4: + uVar3 = (int)piVar4 - (int)piVar2 >> 2; + uVar5 = uVar3; + if (uVar3 < 2) { + uVar5 = 1; + } + uVar6 = uVar3 + uVar5 + 1; + uVar5 = 0x3ffffffe; + if (uVar3 <= uVar6) { + uVar5 = uVar6; + } + uVar3 = 0x3ffffffe; + if (uVar6 < 0x3fffffff) { + uVar3 = uVar5; + } + FUN_000506a4(param_1,uVar3); + piVar1 = (int *)param_1[0x10]; + } + *piVar1 = param_4; + piVar1[1] = 0; + param_1[0x10] = (int)(piVar1 + 1); + } + else { + piVar1 = (int *)FUN_00050548(param_1,piVar1,param_4); + } + } + } + return; +} + + + +### FUNC FUN_00050418 @ 00050418 + +int * FUN_00050418(int *param_1,int *param_2,undefined1 param_3) + +{ + int *piVar1; + int *piVar2; + int iVar3; + uint uVar4; + undefined1 *puVar5; + uint uVar6; + uint uVar7; + uint uVar8; + int *piVar9; + int *piVar10; + int *local_1c; + + piVar9 = (int *)param_1[0x46]; + piVar1 = param_1 + 0x46; + if (piVar9 == param_1) { + iVar3 = param_1[4]; + uVar6 = (int)param_1 + (0x10 - iVar3); + } + else { + iVar3 = param_1[4]; + uVar6 = *param_1 - iVar3; + } + if (uVar6 < 2) { + local_1c = param_1 + 4; + uVar6 = iVar3 - (int)piVar9; + if (uVar6 == 0xfffffffe) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + uVar7 = uVar6; + if (uVar6 < 2) { + uVar7 = 1; + } + uVar8 = uVar6 + uVar7 + 1; + uVar4 = 0xfffffffe; + if (uVar6 <= uVar8) { + uVar4 = uVar8; + } + uVar8 = 0xfffffffe; + if (uVar6 + uVar7 != -2) { + uVar8 = uVar4; + } + if (uVar8 >> 1 < 0x81) { + piVar2 = param_1 + 5; + } + else { + piVar2 = (int *)operator_new(uVar8); + piVar9 = (int *)*piVar1; + } + piVar10 = piVar2; + if (0 < (int)param_2 - (int)piVar9) { + puVar5 = (undefined1 *)((int)param_2 + (1 - (int)piVar9)); + do { + *(char *)piVar10 = (char)*piVar9; + puVar5 = puVar5 + -1; + piVar10 = (int *)((int)piVar10 + 1); + piVar9 = (int *)((int)piVar9 + 1); + } while (1 < (int)puVar5); + } + *(undefined1 *)piVar10 = param_3; + puVar5 = (undefined1 *)((int)piVar10 + 1); + if (0 < *local_1c - (int)param_2) { + iVar3 = (*local_1c + 1) - (int)param_2; + do { + *puVar5 = (char)*param_2; + iVar3 = iVar3 + -1; + puVar5 = puVar5 + 1; + param_2 = (int *)((int)param_2 + 1); + } while (1 < iVar3); + } + *puVar5 = 0; + piVar9 = (int *)*piVar1; + if (((piVar9 != param_1) && (piVar9 != (int *)0x0)) && (param_1 + 5 != piVar9)) { + if ((uint)(*param_1 - (int)piVar9) < 0x81) { + std::__node_alloc::_M_deallocate(piVar9,*param_1 - (int)piVar9); + } + else { + operator_delete(piVar9); + } + } + param_1[4] = (int)puVar5; + *param_1 = (int)((int)piVar2 + uVar8); + *piVar1 = (int)piVar2; + } + else { + local_1c = param_1 + 4; + *(undefined1 *)(iVar3 + 1) = 0; + if ((int *)*local_1c != param_2) { + __aeabi_memmove((undefined1 *)((int)param_2 + 1),param_2); + } + *(undefined1 *)param_2 = param_3; + *local_1c = *local_1c + 1; + piVar10 = param_2; + } + return piVar10; +} + + + +### FUNC FUN_00050548 @ 00050548 + +wchar_t * FUN_00050548(wchar_t *param_1,wchar_t *param_2,wchar_t param_3) + +{ + wchar_t *pwVar1; + wchar_t *pwVar2; + undefined4 uVar3; + wchar_t wVar4; + int iVar5; + uint uVar6; + uint uVar7; + wchar_t *pwVar8; + wchar_t *pwVar9; + uint uVar10; + wchar_t *pwVar11; + uint local_18; + + pwVar1 = (wchar_t *)param_1[0x112]; + if (pwVar1 == param_1) { + wVar4 = param_1[0x10]; + uVar6 = 0x10 - (wVar4 - (int)param_1 >> 2); + } + else { + wVar4 = param_1[0x10]; + uVar6 = *param_1 - wVar4 >> 2; + } + pwVar9 = param_1 + 0x10; + if (uVar6 < 2) { + uVar7 = wVar4 - (int)pwVar1 >> 2; + uVar6 = uVar7; + if (uVar7 < 2) { + uVar6 = 1; + } + uVar10 = uVar7 + uVar6 + 1; + uVar6 = 0x3ffffffe; + if (uVar7 <= uVar10) { + uVar6 = uVar10; + } + uVar7 = 0x3ffffffe; + if (uVar10 < 0x3fffffff) { + uVar7 = uVar6; + } + if (uVar7 >> 1 < 0x81) { + pwVar2 = param_1 + 0x11; + } + else { + if (0x3fffffff < uVar7) { + FUN_00030824(4); + uVar3 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + local_18 = uVar7 << 2; + if (local_18 < 0x81) { + pwVar2 = (wchar_t *)std::__node_alloc::_M_allocate(&local_18); + } + else { + pwVar2 = (wchar_t *)operator_new(local_18); + } + pwVar1 = (wchar_t *)param_1[0x112]; + } + pwVar11 = pwVar2; + if (0 < (int)param_2 - (int)pwVar1) { + iVar5 = ((uint)((int)param_2 - (int)pwVar1) >> 2) + 1; + pwVar8 = pwVar1; + do { + wVar4 = *pwVar8; + pwVar8 = pwVar8 + 1; + *pwVar11 = wVar4; + pwVar11 = pwVar11 + 1; + iVar5 = iVar5 + -1; + } while (1 < iVar5); + } + *pwVar11 = param_3; + pwVar8 = pwVar11 + 1; + if (0 < *pwVar9 - (int)param_2) { + iVar5 = ((uint)(*pwVar9 - (int)param_2) >> 2) + 1; + do { + wVar4 = *param_2; + param_2 = param_2 + 1; + *pwVar8 = wVar4; + pwVar8 = pwVar8 + 1; + iVar5 = iVar5 + -1; + } while (1 < iVar5); + } + *pwVar8 = L'\0'; + if (((pwVar1 != param_1) && (pwVar1 != (wchar_t *)0x0)) && (param_1 + 0x11 != pwVar1)) { + if ((uint)(*param_1 - (int)pwVar1) < 0x81) { + std::__node_alloc::_M_deallocate(pwVar1,*param_1 - (int)pwVar1); + } + else { + operator_delete(pwVar1); + } + } + param_1[0x10] = (wchar_t)pwVar8; + *param_1 = (wchar_t)(pwVar2 + uVar7); + param_1[0x112] = (wchar_t)pwVar2; + } + else { + *(undefined4 *)(wVar4 + L'\x04') = 0; + wmemmove(param_2 + 1,param_2,wVar4 - (int)param_2 >> 2); + *param_2 = param_3; + *pwVar9 = *pwVar9 + L'\x04'; + pwVar11 = param_2; + } + return pwVar11; +} + + + +### FUNC FUN_000506a4 @ 000506a4 + +void FUN_000506a4(int *param_1,uint param_2) + +{ + int *piVar1; + int *piVar2; + undefined4 uVar3; + int iVar4; + int *piVar5; + int iVar6; + int *piVar7; + uint local_18; + + if (param_2 >> 1 < 0x81) { + piVar1 = param_1 + 0x11; + } + else { + if (param_2 >> 0x1e != 0) { + FUN_00030824(4); + uVar3 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + local_18 = param_2 << 2; + if (local_18 < 0x81) { + piVar1 = (int *)std::__node_alloc::_M_allocate(&local_18); + } + else { + piVar1 = (int *)operator_new(local_18); + } + } + piVar2 = (int *)param_1[0x112]; + piVar7 = piVar1; + if (0 < param_1[0x10] - (int)piVar2) { + iVar4 = ((uint)(param_1[0x10] - (int)piVar2) >> 2) + 1; + piVar5 = piVar2; + do { + iVar6 = *piVar5; + piVar5 = piVar5 + 1; + *piVar7 = iVar6; + piVar7 = piVar7 + 1; + iVar4 = iVar4 + -1; + } while (1 < iVar4); + } + *piVar7 = 0; + if (((piVar2 != param_1) && (piVar2 != (int *)0x0)) && (param_1 + 0x11 != piVar2)) { + if ((uint)(*param_1 - (int)piVar2) < 0x81) { + std::__node_alloc::_M_deallocate(piVar2,*param_1 - (int)piVar2); + } + else { + operator_delete(piVar2); + } + } + param_1[0x10] = (int)piVar7; + *param_1 = (int)(piVar1 + param_2); + param_1[0x112] = (int)piVar1; + return; +} + + + +### FUNC _Initialize_get_float @ 00050758 + +/* std::priv::_Initialize_get_float(std::ctype const&, wchar_t&, wchar_t&, wchar_t&, + wchar_t&, wchar_t*) */ + +void std::priv::_Initialize_get_float + (ctype *param_1,wchar_t *param_2,wchar_t *param_3,wchar_t *param_4,wchar_t *param_5, + wchar_t *param_6) + +{ + wchar_t wVar1; + undefined4 local_20; + undefined4 local_1c; + undefined2 local_18; + undefined1 local_16 [2]; + + local_16[0] = 0; + local_18 = 0x3938; + local_1c = 0x37363534; + local_20 = 0x33323130; + wVar1 = (**(code **)(*(int *)param_1 + 0x28))(param_1,0x2b); + *param_2 = wVar1; + wVar1 = (**(code **)(*(int *)param_1 + 0x28))(param_1,0x2d); + *param_3 = wVar1; + wVar1 = (**(code **)(*(int *)param_1 + 0x28))(param_1,0x65); + *param_4 = wVar1; + wVar1 = (**(code **)(*(int *)param_1 + 0x28))(param_1,0x45); + *param_5 = wVar1; + (**(code **)(*(int *)param_1 + 0x2c))(param_1,&local_20,local_16,param_6); + return; +} + + + +### FUNC __string_to_float @ 000507d0 + +/* std::priv::__string_to_float(std::priv::__basic_iostring const&, float&) */ + +void std::priv::__string_to_float(__basic_iostring *param_1,float *param_2) + +{ + float fVar1; + + FUN_000507e8(*(undefined4 *)(param_1 + 0x118)); + fVar1 = (float)__truncdfsf2(); + *param_2 = fVar1; + return; +} + + + +### FUNC FUN_000507e8 @ 000507e8 + +undefined8 FUN_000507e8(byte *param_1) + +{ + bool bVar1; + bool bVar2; + undefined8 uVar3; + longlong lVar4; + bool bVar5; + uint uVar6; + int iVar7; + byte *pbVar8; + byte *pbVar9; + uint uVar10; + int iVar11; + uint uVar12; + uint uVar13; + uint uVar14; + uint uVar15; + uint uVar16; + longlong lVar17; + undefined8 uVar18; + uint local_4c; + uint local_44; + uint local_40; + int local_3c; + byte local_38 [20]; + int local_24; + undefined8 local_20; + + lVar17 = CONCAT44(local_20._4_4_,(uint)local_20); + uVar10 = (uint)*param_1; + pbVar8 = param_1 + 1; + bVar5 = false; + if (uVar10 != 0x2b) { + bVar2 = false; + bVar5 = true; + if (uVar10 != 0x2d) goto LAB_00050808; + } + bVar2 = bVar5; + uVar10 = (uint)param_1[1]; + pbVar8 = param_1 + 2; +LAB_00050808: + iVar11 = 0; + local_3c = 0; + uVar15 = 0; + do { + pbVar9 = pbVar8 + 1; + uVar10 = uVar10 - 0x30; + if (uVar10 < 10) { + uVar6 = uVar15; + if (iVar11 == 0x11) { + local_3c = local_3c + (uVar15 ^ 1); + iVar11 = 0x11; + } + else { + iVar7 = 0; + if (iVar11 != 0 || uVar10 != 0) { + local_38[iVar11] = (byte)uVar10; + iVar7 = iVar11 + 1; + } + local_3c = local_3c - uVar15; + iVar11 = iVar7; + } + } + else { + uVar6 = 1; + if ((uVar10 != 0xfffffffe) || (uVar15 != 0)) break; + } + uVar10 = (uint)*pbVar8; + uVar15 = uVar6; + pbVar8 = pbVar9; + } while( true ); + if (iVar11 == 0) { + return 0; + } + local_40 = 0x20; + if ((uVar10 | 0x20) == 0x35) { + uVar10 = (uint)*pbVar8; + bVar5 = false; + if ((uVar10 == 0x20) || (uVar10 == 0x2b)) { +LAB_0005088e: + bVar1 = bVar5; + uVar10 = (uint)*pbVar9; + pbVar9 = pbVar8 + 2; + } + else { + bVar1 = false; + bVar5 = true; + if (uVar10 == 0x2d) goto LAB_0005088e; + } + uVar10 = uVar10 - 0x30; + if (uVar10 < 10) { + iVar7 = 0; + do { + iVar7 = iVar7 * 10 + uVar10; + uVar10 = *pbVar9 - 0x30; + pbVar9 = pbVar9 + 1; + } while (uVar10 < 10); + if (bVar1) { + iVar7 = -iVar7; + } + local_3c = iVar7 + local_3c; + } + } + uVar10 = 0; + uVar15 = 0; + if (-0x133 < local_3c + iVar11) { + uVar15 = 0x7ff00000; + uVar10 = 0; + lVar17 = CONCAT44(local_20._4_4_,(uint)local_20); + if (local_3c + iVar11 < 0x136) { + lVar17 = 0; + lVar4 = 0; + if (0 < iVar11) { + pbVar8 = local_38; + do { + local_20._4_4_ = (uint)((ulonglong)lVar4 >> 0x20); + local_20._0_4_ = (uint)lVar4; + lVar17 = __muldi3((uint)local_20,local_20._4_4_,10,0); + local_20 = lVar4; + local_20 = lVar17; + lVar4 = lVar17 + (ulonglong)*pbVar8; + uVar10 = (uint)lVar4; + uVar15 = (uint)((ulonglong)lVar4 >> 0x20); + pbVar8 = pbVar8 + 1; + } while (pbVar8 < local_38 + iVar11); + lVar17 = lVar4; + if (lVar4 != 0) { + if (uVar15 == 0) { + local_40 = 0; + } + uVar13 = local_40 | 0x10; + uVar16 = uVar13 - 0x20; + local_4c = 0; + uVar6 = 0; + if ((int)uVar16 < 0) { + uVar6 = uVar15 >> (local_40 | 0x10); + } + uVar14 = uVar15 >> (uVar16 & 0xff); + if ((int)uVar16 < 0) { + uVar14 = uVar15 << (0x20 - uVar13 & 0xff) | uVar10 >> (local_40 | 0x10); + } + if (uVar14 != 0 || uVar6 != 0) { + local_40 = uVar13; + } + uVar13 = local_40 | 8; + uVar16 = uVar13 - 0x20; + uVar6 = 0; + if ((int)uVar16 < 0) { + uVar6 = uVar15 >> (local_40 | 8); + } + uVar14 = uVar15 >> (uVar16 & 0xff); + if ((int)uVar16 < 0) { + uVar14 = uVar15 << (0x20 - uVar13 & 0xff) | uVar10 >> (local_40 | 8); + } + if (uVar14 != 0 || uVar6 != 0) { + local_40 = uVar13; + } + uVar13 = local_40 | 4; + uVar16 = uVar13 - 0x20; + uVar6 = 0; + if ((int)uVar16 < 0) { + uVar6 = uVar15 >> (local_40 | 4); + } + uVar14 = uVar15 >> (uVar16 & 0xff); + if ((int)uVar16 < 0) { + uVar14 = uVar15 << (0x20 - uVar13 & 0xff) | uVar10 >> (local_40 | 4); + } + if (uVar14 != 0 || uVar6 != 0) { + local_40 = uVar13; + } + uVar13 = local_40 + 2; + uVar16 = local_40 - 0x1e; + uVar6 = 0; + if ((int)uVar16 < 0) { + uVar6 = uVar15 >> uVar13; + } + uVar14 = uVar15 >> (uVar16 & 0xff); + if ((int)uVar16 < 0) { + uVar14 = uVar10 >> uVar13 | uVar15 << (0x1e - local_40 & 0xff); + } + if (uVar14 != 0 || uVar6 != 0) { + local_40 = uVar13; + } + uVar13 = local_40 + 1; + uVar16 = local_40 - 0x1f; + uVar6 = 0; + if ((int)uVar16 < 0) { + uVar6 = uVar15 >> uVar13; + } + uVar14 = uVar15 >> (uVar16 & 0xff); + if ((int)uVar16 < 0) { + uVar14 = uVar10 >> uVar13 | uVar15 << (0x1f - local_40 & 0xff); + } + if (uVar14 != 0 || uVar6 != 0) { + local_40 = uVar13; + } + uVar6 = local_40 - 0x20; + local_44 = 0; + if ((int)uVar6 < 0) { + local_44 = uVar15 >> local_40; + } + uVar13 = uVar15 >> (uVar6 & 0xff); + if ((int)uVar6 < 0) { + uVar13 = uVar15 << (0x20 - local_40 & 0xff) | uVar10 >> local_40; + } + uVar6 = local_40 + 1; + if (uVar13 == 0 && local_44 == 0) { + uVar6 = local_40; + } + uVar13 = 0x20 - uVar6; + uVar16 = 0x40 - uVar6; + if ((int)uVar13 < 0) { + local_4c = uVar10 << (uVar16 & 0xff); + } + local_20._0_4_ = local_4c; + local_20._4_4_ = uVar10 << (uVar13 & 0xff); + if ((int)uVar13 < 0) { + local_20._4_4_ = uVar10 >> (0x20 - uVar16 & 0xff) | uVar15 << (uVar16 & 0xff); + } + FUN_00050d84(&local_20,local_3c,&local_24); + local_24 = local_24 + uVar6; + if (-0x3fe < local_24) { + uVar6 = local_20._4_4_ >> 0xb; + uVar15 = (uint)local_20 >> 0xb | local_20._4_4_ << 0x15; + uVar10 = uVar15; + local_20._4_4_ = uVar6; + if ((((uint)local_20 & 0x400) != 0) && + (((uint)local_20 >> 0xb & 1) != 0 || ((uint)local_20 & 0x3ff) != 0)) { + local_20._4_4_ = uVar6 + (0xfffffffe < uVar15); + uVar10 = uVar15 + 1; + if ((local_20._4_4_ & 0x200000) != 0) { + local_24 = local_24 + 1; + uVar10 = local_20._4_4_ * -0x80000000 | uVar15 + 1 >> 1; + local_20._4_4_ = local_20._4_4_ >> 1; + } + } + local_20._0_4_ = uVar10; + uVar15 = 0x7ff00000; + uVar10 = 0; + lVar17 = CONCAT44(local_20._4_4_,(uint)local_20); + if (local_24 < 0x401) { + uVar15 = (local_24 + 0x3fe) * 0x100000 & 0x7ff00000U | local_20._4_4_ & 0x800fffff; + uVar10 = (uint)local_20; + lVar17 = CONCAT44(uVar15,(uint)local_20); + } + goto LAB_00050ae0; + } + if (-0x434 < local_24) { + uVar6 = -local_24 - 0x3f2; + if ((int)uVar6 < 0x41) { + if (uVar6 == 0x40) { + uVar12 = local_20._4_4_ >> 0x1f; + uVar13 = 0x7fffffff; + uVar10 = 0; + uVar15 = 0; + } + else { + uVar16 = -local_24 - 0x412; + uVar13 = 1 << (uVar16 & 0xff); + if ((int)uVar16 < 0) { + uVar13 = 1 >> (0x20 - uVar6 & 0xff); + } + uVar14 = 0; + if ((int)uVar16 < 0) { + uVar14 = 1 << (uVar6 & 0xff); + } + uVar13 = uVar13 - (uVar14 < 2); + uVar10 = local_20._4_4_ >> (uVar16 & 0xff); + if ((int)uVar16 < 0) { + uVar10 = local_20._4_4_ << (0x20 - uVar6 & 0xff) | + (uint)local_20 >> (uVar6 & 0xff); + } + uVar12 = ~uVar10 & 1; + uVar15 = 0; + if ((int)uVar16 < 0) { + uVar15 = local_20._4_4_ >> (uVar6 & 0xff); + } + local_20._0_4_ = (uint)local_20 & uVar14 - 2; + } + lVar17 = CONCAT44(uVar15,uVar10); + if ((uVar12 != 0) && + (lVar17 = CONCAT44(uVar15,uVar10), + ((uint)local_20 != 0 || (uVar10 & 1) != 0) || (local_20._4_4_ & uVar13) != 0)) { + uVar6 = uVar10 + 1; + uVar15 = uVar15 + (0xfffffffe < uVar10); + uVar10 = uVar6; + lVar17 = CONCAT44(uVar15,uVar6); + } + goto LAB_00050ae0; + } + } + lVar17 = 0; + } + } + uVar15 = 0; + uVar10 = uVar15; + } + } +LAB_00050ae0: + local_20 = lVar17; + uVar18 = __subdf3(0,0x80000000,uVar10,uVar15); + uVar3 = CONCAT44(uVar15,uVar10); + if (bVar2) { + uVar3 = uVar18; + } + return uVar3; +} + + + +### FUNC __string_to_float @ 00050c2c + +/* std::priv::__string_to_float(std::priv::__basic_iostring const&, double&) */ + +void std::priv::__string_to_float(__basic_iostring *param_1,double *param_2) + +{ + double dVar1; + + dVar1 = (double)FUN_000507e8(*(undefined4 *)(param_1 + 0x118)); + *param_2 = dVar1; + return; +} + + + +### FUNC __string_to_float @ 00050c40 + +/* std::priv::__string_to_float(std::priv::__basic_iostring const&, long double&) */ + +void std::priv::__string_to_float(__basic_iostring *param_1,longdouble *param_2) + +{ + longdouble lVar1; + + lVar1 = (longdouble)FUN_00050c54(*(undefined4 *)(param_1 + 0x118)); + *param_2 = lVar1; + return; +} + + + +### FUNC FUN_00050c54 @ 00050c54 + +undefined8 FUN_00050c54(byte *param_1) + +{ + bool bVar1; + bool bVar2; + bool bVar3; + uint uVar4; + byte *pbVar5; + int iVar6; + int iVar7; + int iVar8; + int iVar9; + byte *pbVar10; + uint uVar11; + uint uVar12; + undefined8 uVar13; + undefined8 uVar14; + undefined1 local_24 [16]; + + uVar11 = (uint)*param_1; + pbVar5 = param_1 + 1; + bVar3 = false; + if (uVar11 != 0x2b) { + bVar1 = false; + bVar3 = true; + if (uVar11 != 0x2d) goto LAB_00050c78; + } + bVar1 = bVar3; + uVar11 = (uint)param_1[1]; + pbVar5 = param_1 + 2; +LAB_00050c78: + iVar6 = 0; + iVar9 = 0; + uVar12 = 0; + do { + pbVar10 = pbVar5 + 1; + uVar11 = uVar11 - 0x30; + if (uVar11 < 10) { + uVar4 = uVar12; + if (iVar6 == 0xf) { + iVar9 = iVar9 + (uVar12 ^ 1); + iVar6 = 0xf; + } + else { + iVar7 = 0; + if (iVar6 != 0 || uVar11 != 0) { + local_24[iVar6] = (char)uVar11; + iVar7 = iVar6 + 1; + } + iVar9 = iVar9 - uVar12; + iVar6 = iVar7; + } + } + else { + uVar4 = 1; + if ((uVar11 != 0xfffffffe) || (uVar12 != 0)) { + if (iVar6 == 0) { + uVar14 = 0; + } + else { + if ((uVar11 | 0x20) == 0x35) { + uVar11 = (uint)*pbVar5; + bVar3 = false; + if (((uVar11 == 0x20) || (uVar11 == 0x2b)) || + (bVar2 = false, bVar3 = true, uVar11 == 0x2d)) { + bVar2 = bVar3; + uVar11 = (uint)*pbVar10; + pbVar10 = pbVar5 + 2; + } + uVar11 = uVar11 - 0x30; + if (uVar11 < 10) { + iVar7 = 0; + do { + iVar7 = iVar7 * 10 + uVar11; + uVar11 = *pbVar10 - 0x30; + pbVar10 = pbVar10 + 1; + } while (uVar11 < 10); + iVar8 = -iVar7; + if (!bVar2) { + iVar8 = iVar7; + } + iVar9 = iVar8 + iVar9; + } + } + uVar14 = 0; + if (-0x133 < iVar9 + iVar6) { + uVar13 = 0x7ff0000000000000; + if (iVar9 + iVar6 < 0x136) { + uVar13 = FUN_00051158(local_24,iVar6,iVar9); + } + uVar14 = __subdf3(0,0x80000000,(int)uVar13,(int)((ulonglong)uVar13 >> 0x20)); + if (!bVar1) { + uVar14 = uVar13; + } + } + } + return uVar14; + } + } + uVar11 = (uint)*pbVar5; + uVar12 = uVar4; + pbVar5 = pbVar10; + } while( true ); +} + + + +### FUNC FUN_00050d84 @ 00050d84 + +/* WARNING: Removing unreachable block (ram,0x00051064) */ +/* WARNING: Removing unreachable block (ram,0x00050eb6) */ +/* WARNING: Removing unreachable block (ram,0x00050ef8) */ +/* WARNING: Removing unreachable block (ram,0x0005109c) */ + +void FUN_00050d84(uint *param_1,int param_2,int *param_3) + +{ + int iVar1; + uint uVar2; + int iVar3; + int iVar4; + uint uVar5; + uint uVar6; + uint uVar7; + undefined4 uVar8; + uint uVar9; + int iVar10; + uint uVar11; + ulonglong uVar12; + longlong lVar13; + undefined8 uVar14; + int local_64; + int local_50; + int local_4c; + uint local_48; + uint local_2c; + uint local_24; + uint local_20; + uint local_1c; + + *param_3 = 0; + if (param_2 == 0) { + return; + } + local_48 = 0x80000000; + if (param_2 < 1) { + iVar1 = param_2; + if (param_2 < -0x1b) { + iVar1 = -0x1c; + } + iVar1 = __udivsi3((iVar1 + 0x1b) - param_2,0x1c); + local_64 = iVar1 * 0x1c + param_2 + 0x1c; + local_4c = 0x24; + local_50 = 0xd; +LAB_00050e1c: + local_1c = *param_1; + local_24 = param_1[1]; + iVar1 = iVar1 + 1; + iVar10 = 0; + do { + iVar3 = local_50; + if (iVar1 <= local_50) { + iVar3 = iVar1; + } + iVar4 = (iVar3 + local_4c) * 8; + uVar8 = *(undefined4 *)(&DAT_000662b0 + iVar4); + uVar12 = __muldi3(uVar8,0,local_1c,0); + local_20 = (uint)uVar12; + lVar13 = __muldi3(uVar8,0,local_24,0); + uVar12 = lVar13 + (uVar12 >> 0x20); + uVar9 = (uint)(uVar12 >> 0x20); + uVar8 = *(undefined4 *)(&DAT_000662b4 + iVar4); + lVar13 = __muldi3(uVar8,0,local_1c,0); + lVar13 = lVar13 + (uVar12 & 0xffffffff); + local_2c = (uint)lVar13; + uVar2 = (uint)((ulonglong)lVar13 >> 0x20); + uVar14 = __muldi3(uVar8,0,local_24,0); + uVar7 = uVar9 + (uint)uVar14; + uVar6 = uVar7 + uVar2; + uVar7 = (int)((ulonglong)uVar14 >> 0x20) + (uint)CARRY4(uVar9,(uint)uVar14) + + (uint)CARRY4(uVar7,uVar2); + iVar1 = iVar1 - iVar3; + if (uVar7 < 0x80000000) { + if ((uVar6 != 0xffffffff || uVar7 != 0x7fffffff) || (local_2c < 0xc0000000)) { + uVar9 = uVar6 * 2 | local_2c >> 0x1f; + uVar7 = uVar7 * 2 | uVar6 >> 0x1f; + *param_1 = uVar9; + param_1[1] = uVar7; + local_2c = local_2c * 2 | local_20 >> 0x1f; + local_20 = local_20 << 1; + iVar4 = 1; + uVar6 = uVar9; + goto LAB_00050f50; + } + iVar4 = 0; + *param_1 = 0; + param_1[1] = 0x80000000; + local_1c = 0; + uVar9 = local_48; + uVar2 = local_1c; + } + else { + *param_1 = uVar6; + param_1[1] = uVar7; + iVar4 = 0; +LAB_00050f50: + uVar9 = uVar7; + uVar2 = uVar6; + if ((int)local_2c < 0) { + local_1c = 1; + if ((local_20 != 0 || local_2c != 0x80000000) || ((uVar6 & 1) != 0)) { + uVar2 = uVar6 + 1; + *param_1 = uVar2; + local_24 = 0; + uVar9 = uVar7 + (0xfffffffe < uVar6); + param_1[1] = uVar9; + if (uVar2 == 0 && uVar9 == 0) { + *param_1 = uVar6 + 2; + param_1[1] = uVar7 + (0xfffffffd < uVar6); + uVar9 = local_24; + uVar2 = local_1c; + } + } + } + } + local_1c = uVar2; + local_24 = uVar9; + iVar10 = (*(short *)(&DAT_00066530 + (iVar3 + local_4c) * 2) - iVar4) + iVar10; + } while (iVar1 != 0); + *param_3 = iVar10; + if (local_64 == 0) { + return; + } + } + else { + iVar10 = 0; + local_64 = param_2; + if (0x1b < param_2) { + iVar1 = -2 - param_2; + if (-2 - param_2 < -0x37) { + iVar1 = -0x38; + } + iVar1 = __udivsi3(iVar1 + param_2 + 0x1d,0x1c); + local_64 = param_2 + iVar1 * -0x1c + -0x1b; + local_4c = 0x19; + local_50 = 0xb; + goto LAB_00050e1c; + } + } + uVar6 = *param_1; + iVar1 = (local_64 + -1) * 8; + uVar8 = *(undefined4 *)(&DAT_000662b0 + iVar1); + uVar12 = __muldi3(uVar8,0,uVar6,0); + uVar9 = (uint)uVar12; + uVar7 = param_1[1]; + lVar13 = __muldi3(uVar8,0,uVar7,0); + uVar12 = lVar13 + (uVar12 >> 0x20); + uVar5 = (uint)(uVar12 >> 0x20); + uVar8 = *(undefined4 *)(&DAT_000662b4 + iVar1); + lVar13 = __muldi3(uVar8,0,uVar6,0); + lVar13 = lVar13 + (uVar12 & 0xffffffff); + uVar6 = (uint)lVar13; + uVar11 = (uint)((ulonglong)lVar13 >> 0x20); + uVar14 = __muldi3(uVar8,0,uVar7,0); + uVar7 = uVar5 + (uint)uVar14; + uVar2 = uVar7 + uVar11; + uVar7 = (int)((ulonglong)uVar14 >> 0x20) + (uint)CARRY4(uVar5,(uint)uVar14) + + (uint)CARRY4(uVar7,uVar11); + if (uVar7 < 0x80000000) { + if ((uVar2 == 0xffffffff && uVar7 == 0x7fffffff) && (0xbfffffff < uVar6)) { + iVar1 = 0; + *param_1 = 0; + param_1[1] = 0x80000000; + goto LAB_00051122; + } + uVar5 = uVar2 * 2 | uVar6 >> 0x1f; + uVar7 = uVar7 * 2 | uVar2 >> 0x1f; + *param_1 = uVar5; + param_1[1] = uVar7; + uVar6 = uVar6 * 2 | uVar9 >> 0x1f; + uVar9 = uVar9 << 1; + iVar1 = 1; + } + else { + *param_1 = uVar2; + param_1[1] = uVar7; + iVar1 = 0; + uVar5 = uVar2; + } + if (((int)uVar6 < 0) && ((uVar9 != 0 || uVar6 != 0x80000000 || ((uVar5 & 1) != 0)))) { + *param_1 = uVar5 + 1; + uVar6 = uVar7 + (0xfffffffe < uVar5); + param_1[1] = uVar6; + if (uVar6 == 0 && uVar5 + 1 == 0) { + *param_1 = uVar5 + 2; + param_1[1] = uVar7 + (0xfffffffd < uVar5); + } + } +LAB_00051122: + *param_3 = (*(short *)(&DAT_00066530 + (local_64 + -1) * 2) - iVar1) + iVar10; + return; +} + + + +### FUNC FUN_00051158 @ 00051158 + +undefined8 FUN_00051158(byte *param_1,int param_2,undefined4 param_3) + +{ + longlong lVar1; + uint uVar2; + uint uVar3; + uint uVar4; + uint uVar5; + byte *pbVar6; + uint uVar7; + uint uVar8; + uint uVar9; + bool bVar10; + longlong lVar11; + uint uStack_3c; + uint local_2c; + int local_24; + undefined8 local_20; + + lVar1 = 0; + pbVar6 = param_1 + param_2; + if (0 < param_2) { + do { + local_20._4_4_ = (uint)((ulonglong)lVar1 >> 0x20); + local_20._0_4_ = (uint)lVar1; + lVar11 = __muldi3((uint)local_20,local_20._4_4_,10,0); + local_20 = lVar1; + lVar1 = lVar11 + (ulonglong)*param_1; + uVar2 = (uint)lVar1; + uVar3 = (uint)((ulonglong)lVar1 >> 0x20); + param_1 = param_1 + 1; + } while (param_1 < pbVar6); + if (lVar1 != 0) { + uVar5 = 0x20; + if (uVar3 == 0) { + uVar5 = 0; + } + uVar7 = uVar5 | 0x10; + uVar9 = uVar7 - 0x20; + local_2c = 0; + uVar8 = 0; + if ((int)uVar9 < 0) { + uVar8 = uVar3 >> (uVar5 | 0x10); + } + uVar4 = uVar3 >> (uVar9 & 0xff); + if ((int)uVar9 < 0) { + uVar4 = uVar3 << (0x20 - uVar7 & 0xff) | uVar2 >> (uVar5 | 0x10); + } + if (uVar4 != 0 || uVar8 != 0) { + uVar5 = uVar7; + } + uVar7 = uVar5 | 8; + uVar9 = uVar7 - 0x20; + uVar8 = 0; + if ((int)uVar9 < 0) { + uVar8 = uVar3 >> (uVar5 | 8); + } + uVar4 = uVar3 >> (uVar9 & 0xff); + if ((int)uVar9 < 0) { + uVar4 = uVar3 << (0x20 - uVar7 & 0xff) | uVar2 >> (uVar5 | 8); + } + if (uVar4 != 0 || uVar8 != 0) { + uVar5 = uVar7; + } + uVar7 = uVar5 | 4; + uVar9 = uVar7 - 0x20; + uVar8 = 0; + if ((int)uVar9 < 0) { + uVar8 = uVar3 >> (uVar5 | 4); + } + uVar4 = uVar3 >> (uVar9 & 0xff); + if ((int)uVar9 < 0) { + uVar4 = uVar3 << (0x20 - uVar7 & 0xff) | uVar2 >> (uVar5 | 4); + } + if (uVar4 != 0 || uVar8 != 0) { + uVar5 = uVar7; + } + uVar7 = uVar5 + 2; + uVar9 = uVar5 - 0x1e; + uVar8 = 0; + if ((int)uVar9 < 0) { + uVar8 = uVar3 >> uVar7; + } + uVar4 = uVar3 >> (uVar9 & 0xff); + if ((int)uVar9 < 0) { + uVar4 = uVar2 >> uVar7 | uVar3 << (0x1e - uVar5 & 0xff); + } + if (uVar4 != 0 || uVar8 != 0) { + uVar5 = uVar7; + } + uVar7 = uVar5 + 1; + uVar9 = uVar5 - 0x1f; + uVar8 = 0; + if ((int)uVar9 < 0) { + uVar8 = uVar3 >> uVar7; + } + uVar4 = uVar3 >> (uVar9 & 0xff); + if ((int)uVar9 < 0) { + uVar4 = uVar2 >> uVar7 | uVar3 << (0x1f - uVar5 & 0xff); + } + if (uVar4 != 0 || uVar8 != 0) { + uVar5 = uVar7; + } + uVar7 = uVar5 - 0x20; + uVar8 = 0; + if ((int)uVar7 < 0) { + uVar8 = uVar3 >> uVar5; + } + uVar9 = uVar3 >> (uVar7 & 0xff); + if ((int)uVar7 < 0) { + uVar9 = uVar3 << (0x20 - uVar5 & 0xff) | uVar2 >> uVar5; + } + uVar7 = uVar5 + 1; + if (uVar9 == 0 && uVar8 == 0) { + uVar7 = uVar5; + } + uVar8 = 0x20 - uVar7; + uVar5 = 0x40 - uVar7; + if ((int)uVar8 < 0) { + local_2c = uVar2 << (uVar5 & 0xff); + } + local_20._0_4_ = local_2c; + local_20._4_4_ = uVar2 << (uVar8 & 0xff); + if ((int)uVar8 < 0) { + local_20._4_4_ = uVar2 >> (0x20 - uVar5 & 0xff) | uVar3 << (uVar5 & 0xff); + } + FUN_00050d84(&local_20,param_3,&local_24); + local_24 = local_24 + uVar7; + if (-0x3fe < local_24) { + uVar2 = local_20._4_4_ >> 0xf; + uVar3 = (uint)local_20 >> 0xf | local_20._4_4_ << 0x11; + if ((((uint)local_20 & 0x4000) != 0) && + (((uint)local_20 >> 0xf & 1) != 0 || ((uint)local_20 & 0x7ff) != 0)) { + bVar10 = 0xfffffffe < uVar3; + uVar3 = uVar3 + 1; + uVar2 = uVar2 + bVar10; + } + uStack_3c = 0x7ff00000; + uVar5 = 0; + if (local_24 < 0x401) { + uStack_3c = uVar2; + uVar5 = uVar3; + } + goto LAB_000513c2; + } + if (local_24 < -0x4033) { +LAB_0005139a: + uVar8 = 0; + uVar3 = 0; + } + else { + uVar2 = -local_24 - 0x3fee; + if (0x40 < (int)uVar2) goto LAB_0005139a; + if (uVar2 == 0x40) { + uVar4 = local_20._4_4_ >> 0x1f; + uVar9 = local_20._4_4_ & 0x7fffffff; + uVar8 = 0; + uVar3 = 0; + } + else { + uVar5 = -local_24 - 0x400e; + local_2c = 1 << (uVar5 & 0xff); + if ((int)uVar5 < 0) { + local_2c = 1 >> (0x20 - uVar2 & 0xff); + } + uVar7 = 0; + if ((int)uVar5 < 0) { + uVar7 = 1 << (uVar2 & 0xff); + } + uVar9 = local_2c - (uVar7 < 2) & local_20._4_4_; + uVar8 = local_20._4_4_ >> (uVar5 & 0xff); + if ((int)uVar5 < 0) { + uVar8 = local_20._4_4_ << (0x20 - uVar2 & 0xff) | (uint)local_20 >> (uVar2 & 0xff); + } + uVar4 = ~uVar8 & 1; + uVar3 = 0; + if ((int)uVar5 < 0) { + uVar3 = local_20._4_4_ >> (uVar2 & 0xff); + } + local_20._0_4_ = (uint)local_20 & uVar7 - 2; + } + if ((uVar4 != 0) && (((uVar8 & 1) != 0 || (uint)local_20 != 0) || uVar9 != 0)) { + bVar10 = 0xfffffffe < uVar8; + uVar8 = uVar8 + 1; + uVar5 = 0; + uVar3 = uVar3 + bVar10; + uStack_3c = 0; + if (uVar3 == 0x100000 && uVar8 == 0) goto LAB_000513c2; + } + } + uStack_3c = uVar3; + uVar5 = uVar8; + goto LAB_000513c2; + } + } + uStack_3c = 0; + uVar5 = 0; +LAB_000513c2: + return CONCAT44(uStack_3c,uVar5); +} + + + +### FUNC FUN_00051490 @ 00051490 + +/* WARNING: Removing unreachable block (ram,0x00051594) */ + +int FUN_00051490(int param_1,uint param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5, + undefined4 param_6) + +{ + undefined4 *puVar1; + size_t sVar2; + char *pcVar3; + char *pcVar4; + char cVar5; + char *pcVar6; + int iVar7; + char cVar8; + char *pcVar9; + char local_170 [32]; + char acStack_150 [316]; + + local_170[0] = '%'; + iVar7 = 1; + if ((int)(param_2 * 0x100000) < 0) { + local_170[1] = 0x2b; + iVar7 = 2; + } + if ((int)(param_2 << 0x15) < 0) { + local_170[iVar7] = '#'; + iVar7 = iVar7 + 1; + } + local_170[iVar7] = '.'; + local_170[iVar7 + 1] = '*'; + if ((param_2 & 0xc0) == 0x40) { + cVar8 = 'F'; + cVar5 = 'f'; + } + else if ((param_2 & 0xc0) == 0x80) { + cVar8 = 'E'; + cVar5 = 'e'; + } + else { + cVar8 = 'G'; + cVar5 = 'g'; + } + if ((param_2 & 0x4000) == 0) { + cVar8 = cVar5; + } + local_170[iVar7 + 2] = cVar8; + local_170[iVar7 + 3] = '\0'; + snprintf(acStack_150,0x13a,local_170,param_3,param_5,param_6); + puVar1 = (undefined4 *)(param_1 + 0x118); + sVar2 = strlen(acStack_150); + pcVar3 = *(char **)(param_1 + 0x118); + pcVar9 = *(char **)(param_1 + 0x10); + if ((uint)((int)pcVar9 - (int)pcVar3) < sVar2) { + if (pcVar9 != pcVar3) { + __aeabi_memmove(pcVar3,acStack_150); + pcVar3 = (char *)*puVar1; + pcVar9 = *(char **)(param_1 + 0x10); + } + FUN_00051ae8(param_1,pcVar9 + (int)(acStack_150 + -(int)pcVar3),acStack_150 + sVar2); + pcVar9 = *(char **)(param_1 + 0x10); + } + else { + if (sVar2 != 0) { + __aeabi_memmove(pcVar3,acStack_150,sVar2); + pcVar9 = *(char **)(param_1 + 0x10); + pcVar3 = (char *)*puVar1; + } + pcVar3 = pcVar3 + sVar2; + if (pcVar3 != pcVar9) { + __aeabi_memmove(pcVar3,pcVar9); + pcVar9 = pcVar3 + (*(int *)(param_1 + 0x10) - (int)pcVar9); + *(char **)(param_1 + 0x10) = pcVar9; + } + } + pcVar4 = (char *)*puVar1; + iVar7 = (int)pcVar9 - (int)pcVar4 >> 2; + pcVar3 = pcVar4; + if (0 < iVar7) { + iVar7 = iVar7 + 1; + do { + cVar8 = *pcVar3; + if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_00051636; + cVar8 = pcVar3[1]; + pcVar6 = pcVar3 + 1; + if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_0005163c; + cVar8 = pcVar3[2]; + pcVar6 = pcVar3 + 2; + if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_0005163c; + cVar8 = pcVar3[3]; + pcVar6 = pcVar3 + 3; + if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_0005163c; + iVar7 = iVar7 + -1; + pcVar3 = pcVar3 + 4; + } while (1 < iVar7); + } + iVar7 = (int)pcVar9 - (int)pcVar3; + pcVar6 = pcVar9; + if (iVar7 == 1) { +LAB_00051624: + cVar8 = *pcVar3; + if (((cVar8 != '.') && (cVar8 != 'e')) && (cVar8 != 'E')) goto LAB_0005163c; + } + else if (iVar7 == 2) { +LAB_00051614: + cVar8 = *pcVar3; + if (((cVar8 != '.') && (cVar8 != 'E')) && (cVar8 != 'e')) { + pcVar3 = pcVar3 + 1; + goto LAB_00051624; + } + } + else { + if (iVar7 != 3) goto LAB_0005163c; + cVar8 = *pcVar3; + if (((cVar8 != '.') && (cVar8 != 'E')) && (cVar8 != 'e')) { + pcVar3 = pcVar3 + 1; + goto LAB_00051614; + } + } +LAB_00051636: + pcVar6 = pcVar3; +LAB_0005163c: + return (int)pcVar6 - (int)pcVar4; +} + + + +### FUNC FUN_00051642 @ 00051642 + +/* WARNING: Removing unreachable block (ram,0x0005174a) */ + +int FUN_00051642(int param_1,uint param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5, + undefined4 param_6) + +{ + undefined4 *puVar1; + size_t sVar2; + char *pcVar3; + char *pcVar4; + char cVar5; + char *pcVar6; + int iVar7; + char cVar8; + char *pcVar9; + char local_170 [32]; + char acStack_150 [316]; + + local_170[0] = '%'; + iVar7 = 1; + if ((int)(param_2 * 0x100000) < 0) { + local_170[1] = 0x2b; + iVar7 = 2; + } + if ((int)(param_2 << 0x15) < 0) { + local_170[iVar7] = '#'; + iVar7 = iVar7 + 1; + } + local_170[iVar7] = '.'; + local_170[iVar7 + 1] = '*'; + local_170[iVar7 + 2] = 'L'; + if ((param_2 & 0xc0) == 0x40) { + cVar8 = 'F'; + cVar5 = 'f'; + } + else if ((param_2 & 0xc0) == 0x80) { + cVar8 = 'E'; + cVar5 = 'e'; + } + else { + cVar8 = 'G'; + cVar5 = 'g'; + } + if ((param_2 & 0x4000) == 0) { + cVar8 = cVar5; + } + local_170[iVar7 + 3] = cVar8; + local_170[iVar7 + 4] = '\0'; + snprintf(acStack_150,0x13a,local_170,param_3,param_5,param_6); + puVar1 = (undefined4 *)(param_1 + 0x118); + sVar2 = strlen(acStack_150); + pcVar3 = *(char **)(param_1 + 0x118); + pcVar9 = *(char **)(param_1 + 0x10); + if ((uint)((int)pcVar9 - (int)pcVar3) < sVar2) { + if (pcVar9 != pcVar3) { + __aeabi_memmove(pcVar3,acStack_150); + pcVar3 = (char *)*puVar1; + pcVar9 = *(char **)(param_1 + 0x10); + } + FUN_00051ae8(param_1,pcVar9 + (int)(acStack_150 + -(int)pcVar3),acStack_150 + sVar2); + pcVar9 = *(char **)(param_1 + 0x10); + } + else { + if (sVar2 != 0) { + __aeabi_memmove(pcVar3,acStack_150,sVar2); + pcVar9 = *(char **)(param_1 + 0x10); + pcVar3 = (char *)*puVar1; + } + pcVar3 = pcVar3 + sVar2; + if (pcVar3 != pcVar9) { + __aeabi_memmove(pcVar3,pcVar9); + pcVar9 = pcVar3 + (*(int *)(param_1 + 0x10) - (int)pcVar9); + *(char **)(param_1 + 0x10) = pcVar9; + } + } + pcVar4 = (char *)*puVar1; + iVar7 = (int)pcVar9 - (int)pcVar4 >> 2; + pcVar3 = pcVar4; + if (0 < iVar7) { + iVar7 = iVar7 + 1; + do { + cVar8 = *pcVar3; + if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_000517ec; + cVar8 = pcVar3[1]; + pcVar6 = pcVar3 + 1; + if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_000517f2; + cVar8 = pcVar3[2]; + pcVar6 = pcVar3 + 2; + if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_000517f2; + cVar8 = pcVar3[3]; + pcVar6 = pcVar3 + 3; + if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_000517f2; + iVar7 = iVar7 + -1; + pcVar3 = pcVar3 + 4; + } while (1 < iVar7); + } + iVar7 = (int)pcVar9 - (int)pcVar3; + pcVar6 = pcVar9; + if (iVar7 == 1) { +LAB_000517da: + cVar8 = *pcVar3; + if (((cVar8 != '.') && (cVar8 != 'e')) && (cVar8 != 'E')) goto LAB_000517f2; + } + else if (iVar7 == 2) { +LAB_000517ca: + cVar8 = *pcVar3; + if (((cVar8 != '.') && (cVar8 != 'E')) && (cVar8 != 'e')) { + pcVar3 = pcVar3 + 1; + goto LAB_000517da; + } + } + else { + if (iVar7 != 3) goto LAB_000517f2; + cVar8 = *pcVar3; + if (((cVar8 != '.') && (cVar8 != 'E')) && (cVar8 != 'e')) { + pcVar3 = pcVar3 + 1; + goto LAB_000517ca; + } + } +LAB_000517ec: + pcVar6 = pcVar3; +LAB_000517f2: + return (int)pcVar6 - (int)pcVar4; +} + + + +### FUNC FUN_000517f8 @ 000517f8 + +void FUN_000517f8(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) + +{ + char *pcVar1; + size_t sVar2; + char acStack_150 [316]; + undefined1 auStack_14 [4]; + + snprintf(acStack_150,0x13a,"%Lf",param_4,param_3,param_4); + pcVar1 = strchr(acStack_150,0x2e); + if (pcVar1 != (char *)0x0) { + FUN_00051c30(param_1,acStack_150,pcVar1,auStack_14); + return; + } + sVar2 = strlen(acStack_150); + FUN_00051ae8(param_1,acStack_150,acStack_150 + sVar2); + return; +} + + + +### FUNC FUN_00051848 @ 00051848 + +void FUN_00051848(int param_1,int *param_2,int *param_3,undefined4 param_4,int param_5) + +{ + undefined4 uVar1; + undefined4 *puVar2; + uint uVar3; + int *piVar4; + uint uVar5; + int iVar6; + uint uVar7; + char *pcVar8; + char *pcVar9; + uint local_24; + + pcVar8 = *(char **)(param_1 + 0x118); + pcVar9 = *(char **)(param_1 + 0x10); + local_24 = 0x3ffffffe; + if (param_5 != 1) { + if (pcVar8 != pcVar9) { + uVar1 = (**(code **)(*param_3 + 0x28))(param_3,*pcVar8); + if ((int *)param_2[0x112] == param_2) { + puVar2 = (undefined4 *)param_2[0x10]; + iVar6 = 0x10 - ((int)puVar2 - (int)param_2 >> 2); + } + else { + puVar2 = (undefined4 *)param_2[0x10]; + iVar6 = *param_2 - (int)puVar2 >> 2; + } + if (iVar6 == 1) { + uVar3 = (int)puVar2 - param_2[0x112] >> 2; + uVar7 = uVar3; + if (uVar3 < 2) { + uVar7 = 1; + } + uVar5 = uVar3 + uVar7 + 1; + uVar7 = 0x3ffffffe; + if (uVar3 <= uVar5) { + uVar7 = uVar5; + } + uVar3 = 0x3ffffffe; + if (uVar5 < 0x3fffffff) { + uVar3 = uVar7; + } + FUN_000506a4(param_2,uVar3); + puVar2 = (undefined4 *)param_2[0x10]; + } + *puVar2 = uVar1; + puVar2[1] = 0; + param_2[0x10] = (int)(puVar2 + 1); + } + goto joined_r0x00051a58; + } + if (pcVar8 == pcVar9) goto joined_r0x00051a58; + while (*pcVar8 != '.') { + uVar1 = (**(code **)(*param_3 + 0x28))(); + pcVar8 = pcVar8 + 1; + piVar4 = (int *)param_2[0x112]; + if (piVar4 == param_2) { + puVar2 = (undefined4 *)param_2[0x10]; + iVar6 = 0x10 - ((int)puVar2 - (int)param_2 >> 2); + } + else { + puVar2 = (undefined4 *)param_2[0x10]; + iVar6 = *param_2 - (int)puVar2 >> 2; + } + if (iVar6 == 1) { + uVar3 = (int)puVar2 - (int)piVar4 >> 2; + uVar7 = uVar3; + if (uVar3 < 2) { + uVar7 = 1; + } + uVar5 = uVar3 + uVar7 + 1; + uVar7 = local_24; + if (uVar3 <= uVar5) { + uVar7 = uVar5; + } + uVar3 = local_24; + if (uVar5 < 0x3fffffff) { + uVar3 = uVar7; + } + FUN_000506a4(param_2,uVar3); + puVar2 = (undefined4 *)param_2[0x10]; + } + *puVar2 = uVar1; + puVar2[1] = 0; + param_2[0x10] = (int)(puVar2 + 1); + if (pcVar9 == pcVar8) { + return; + } + } + piVar4 = (int *)param_2[0x112]; + if (piVar4 == param_2) { + puVar2 = (undefined4 *)param_2[0x10]; + if ((int)puVar2 - (int)param_2 >> 2 == 0xf) goto LAB_00051a1a; + } + else { + puVar2 = (undefined4 *)param_2[0x10]; + if (*param_2 - (int)puVar2 >> 2 == 1) { +LAB_00051a1a: + uVar3 = (int)puVar2 - (int)piVar4 >> 2; + uVar7 = uVar3; + if (uVar3 < 2) { + uVar7 = 1; + } + uVar5 = uVar3 + uVar7 + 1; + uVar7 = local_24; + if (uVar3 <= uVar5) { + uVar7 = uVar5; + } + uVar3 = local_24; + if (uVar5 < 0x3fffffff) { + uVar3 = uVar7; + } + FUN_000506a4(param_2,uVar3); + puVar2 = (undefined4 *)param_2[0x10]; + } + } + *puVar2 = param_4; + puVar2[1] = 0; + param_2[0x10] = (int)(puVar2 + 1); +joined_r0x00051a58: + if ((pcVar8 != pcVar9) && (pcVar8 = pcVar8 + 1, pcVar8 != pcVar9)) { + do { + uVar1 = (**(code **)(*param_3 + 0x28))(param_3,*pcVar8); + if ((int *)param_2[0x112] == param_2) { + puVar2 = (undefined4 *)param_2[0x10]; + if ((int)puVar2 - (int)param_2 >> 2 == 0xf) goto LAB_000519c4; + } + else { + puVar2 = (undefined4 *)param_2[0x10]; + if (*param_2 - (int)puVar2 >> 2 == 1) { +LAB_000519c4: + uVar3 = (int)puVar2 - param_2[0x112] >> 2; + uVar7 = uVar3; + if (uVar3 < 2) { + uVar7 = 1; + } + uVar5 = uVar3 + uVar7 + 1; + uVar7 = local_24; + if (uVar3 <= uVar5) { + uVar7 = uVar5; + } + uVar3 = local_24; + if (uVar5 < 0x3fffffff) { + uVar3 = uVar7; + } + FUN_000506a4(param_2,uVar3); + puVar2 = (undefined4 *)param_2[0x10]; + } + } + *puVar2 = uVar1; + puVar2[1] = 0; + param_2[0x10] = (int)(puVar2 + 1); + pcVar8 = pcVar8 + 1; + } while (pcVar9 != pcVar8); + } + return; +} + + + +### FUNC FUN_00051a60 @ 00051a60 + +void FUN_00051a60(int param_1,int param_2) + +{ + char *pcVar1; + char *pcVar2; + char *pcVar3; + int iVar4; + char *pcVar5; + + if (param_2 == 0x2e) { + return; + } + pcVar3 = *(char **)(param_1 + 0x118); + pcVar2 = *(char **)(param_1 + 0x10); + if ((int)pcVar2 - (int)pcVar3 == 0) { + return; + } + iVar4 = (int)pcVar2 - (int)pcVar3 >> 2; + pcVar5 = pcVar3; + if (0 < iVar4) { + iVar4 = iVar4 + 1; + do { + pcVar1 = pcVar5; + if ((((*pcVar5 == '.') || (pcVar1 = pcVar5 + 1, pcVar5[1] == '.')) || + (pcVar1 = pcVar5 + 2, pcVar5[2] == '.')) || (pcVar1 = pcVar5 + 3, pcVar5[3] == '.')) + goto joined_r0x00051ada; + iVar4 = iVar4 + -1; + pcVar5 = pcVar5 + 4; + } while (1 < iVar4); + } + iVar4 = (int)pcVar2 - (int)pcVar5; + if (iVar4 != 1) { + if (iVar4 != 2) { + if (iVar4 != 3) { + return; + } + pcVar1 = pcVar5; + if (*pcVar5 == '.') goto joined_r0x00051ada; + pcVar5 = pcVar5 + 1; + } + pcVar1 = pcVar5; + if (*pcVar5 == '.') goto joined_r0x00051ada; + pcVar5 = pcVar5 + 1; + } + pcVar1 = pcVar5; + if (*pcVar5 != '.') { + return; + } +joined_r0x00051ada: + if ((pcVar1 != pcVar2) && ((int)pcVar1 - (int)pcVar3 != -1)) { + pcVar3[(int)pcVar1 - (int)pcVar3] = (char)param_2; + } + return; +} + + + +### FUNC FUN_00051ae8 @ 00051ae8 + +int * FUN_00051ae8(int *param_1,undefined1 *param_2,undefined1 *param_3) + +{ + int *piVar1; + undefined1 *puVar2; + int *piVar3; + undefined1 *puVar4; + uint uVar5; + uint uVar6; + uint uVar7; + uint uVar8; + int *piVar9; + uint uVar10; + int *piVar11; + + if (param_2 != param_3) { + uVar10 = (int)param_3 - (int)param_2; + piVar9 = (int *)param_1[0x46]; + piVar1 = param_1 + 0x46; + if (piVar9 == param_1) { + puVar4 = (undefined1 *)param_1[4]; + uVar5 = (int)param_1 + (0x10 - (int)puVar4); + } + else { + puVar4 = (undefined1 *)param_1[4]; + uVar5 = *param_1 - (int)puVar4; + } + if (uVar10 < uVar5) { + puVar2 = param_2 + 1; + if (0 < (int)param_3 - (int)puVar2) { + param_3 = param_3 + (1 - (int)puVar2); + do { + puVar4 = puVar4 + 1; + *puVar4 = *puVar2; + param_3 = param_3 + -1; + puVar2 = puVar2 + 1; + } while (1 < (int)param_3); + puVar4 = (undefined1 *)param_1[4]; + } + puVar4[uVar10] = 0; + *(undefined1 *)param_1[4] = *param_2; + param_1[4] = param_1[4] + uVar10; + } + else { + uVar5 = (int)puVar4 - (int)piVar9; + if (-uVar5 - 2 < uVar10) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + uVar7 = uVar5; + if (uVar5 <= uVar10) { + uVar7 = uVar10; + } + uVar8 = uVar5 + uVar7 + 1; + uVar6 = 0xfffffffe; + if (uVar5 <= uVar8) { + uVar6 = uVar8; + } + uVar8 = 0xfffffffe; + if (uVar5 + uVar7 != -2) { + uVar8 = uVar6; + } + if (uVar8 >> 1 < 0x81) { + piVar3 = param_1 + 5; + } + else { + piVar3 = (int *)operator_new(uVar8); + puVar4 = (undefined1 *)param_1[4]; + piVar9 = (int *)*piVar1; + } + piVar11 = piVar3; + if (0 < (int)puVar4 - (int)piVar9) { + puVar4 = puVar4 + (1 - (int)piVar9); + do { + *(char *)piVar11 = (char)*piVar9; + puVar4 = puVar4 + -1; + piVar11 = (int *)((int)piVar11 + 1); + piVar9 = (int *)((int)piVar9 + 1); + } while (1 < (int)puVar4); + } + if (0 < (int)uVar10) { + param_3 = param_3 + (1 - (int)param_2); + do { + *(undefined1 *)piVar11 = *param_2; + param_3 = param_3 + -1; + piVar11 = (int *)((int)piVar11 + 1); + param_2 = param_2 + 1; + } while (1 < (int)param_3); + } + *(undefined1 *)piVar11 = 0; + piVar9 = (int *)*piVar1; + if (((piVar9 != param_1) && (piVar9 != (int *)0x0)) && (param_1 + 5 != piVar9)) { + if ((uint)(*param_1 - (int)piVar9) < 0x81) { + std::__node_alloc::_M_deallocate(piVar9,*param_1 - (int)piVar9); + } + else { + operator_delete(piVar9); + } + } + param_1[4] = (int)piVar11; + *param_1 = (int)((int)piVar3 + uVar8); + *piVar1 = (int)piVar3; + } + } + return param_1; +} + + + +### FUNC FUN_00051c30 @ 00051c30 + +int * FUN_00051c30(int *param_1,undefined1 *param_2,undefined1 *param_3) + +{ + undefined1 *puVar1; + int *piVar2; + int *piVar3; + int *piVar4; + undefined1 *puVar5; + undefined1 *puVar6; + undefined1 *puVar7; + int *piVar8; + int *local_1c; + + if (param_2 != param_3) { + puVar1 = param_3 + -(int)param_2; + piVar4 = (int *)param_1[0x46]; + piVar2 = param_1 + 0x46; + if (piVar4 == param_1) { + local_1c = (int *)param_1[4]; + puVar6 = (undefined1 *)((int)param_1 + (0x10 - (int)local_1c)); + } + else { + local_1c = (int *)param_1[4]; + puVar6 = (undefined1 *)(*param_1 - (int)local_1c); + } + piVar8 = param_1 + 4; + if (puVar1 < puVar6) { + *(undefined1 *)local_1c = *param_2; + param_2 = param_2 + 1; + if (param_2 != param_3) { + __aeabi_memcpy(*piVar8 + 1,param_2,(int)param_3 - (int)param_2); + } + puVar1[*piVar8] = 0; + *piVar8 = (int)(puVar1 + *piVar8); + } + else { + puVar6 = (undefined1 *)((int)local_1c - (int)piVar4); + if ((undefined1 *)(-2 - (int)puVar6) < puVar1) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + puVar7 = puVar6; + if (puVar6 <= puVar1) { + puVar7 = puVar1; + } + puVar7 = puVar6 + (int)puVar7; + puVar5 = (undefined1 *)0xfffffffe; + if (puVar6 <= puVar7 + 1) { + puVar5 = puVar7 + 1; + } + puVar6 = (undefined1 *)0xfffffffe; + if (puVar7 != (undefined1 *)0xfffffffe) { + puVar6 = puVar5; + } + if ((uint)puVar6 >> 1 < 0x81) { + piVar3 = param_1 + 5; + } + else { + piVar3 = (int *)operator_new((uint)puVar6); + local_1c = (int *)*piVar8; + piVar4 = (int *)*piVar2; + } + piVar8 = piVar3; + if (local_1c != piVar4) { + __aeabi_memcpy(piVar3,piVar4,(int)local_1c - (int)piVar4); + piVar8 = (int *)((int)piVar3 + ((int)local_1c - (int)piVar4)); + } + __aeabi_memcpy(piVar8,param_2); + *(undefined1 *)((int)piVar8 + (int)puVar1) = 0; + piVar4 = (int *)*piVar2; + if (((piVar4 != param_1) && (piVar4 != (int *)0x0)) && (param_1 + 5 != piVar4)) { + if ((uint)(*param_1 - (int)piVar4) < 0x81) { + std::__node_alloc::_M_deallocate(piVar4,*param_1 - (int)piVar4); + } + else { + operator_delete(piVar4); + } + } + param_1[4] = (int)((int)piVar8 + (int)puVar1); + *param_1 = (int)((int)piVar3 + (int)puVar6); + *piVar2 = (int)piVar3; + } + } + return param_1; +} + + + +### FUNC do_decimal_point @ 00051d58 + +/* std::numpunct::do_decimal_point() const */ + +undefined4 std::numpunct::do_decimal_point(void) + +{ + return 0x2e; +} + + + +### FUNC do_thousands_sep @ 00051d5c + +/* std::numpunct::do_thousands_sep() const */ + +undefined4 std::numpunct::do_thousands_sep(void) + +{ + return 0x2c; +} + + + +### FUNC do_grouping @ 00051d60 + +/* std::numpunct::do_grouping() const */ + +void __thiscall std::numpunct::do_grouping(numpunct *this) + +{ + *this = (numpunct)0x0; + *(numpunct **)(this + 0x10) = this; + *(numpunct **)(this + 0x14) = this; + return; +} + + + +### FUNC do_truename @ 00051d6c + +/* std::numpunct::do_truename() const */ + +void __thiscall std::numpunct::do_truename(numpunct *this) + +{ + undefined1 auStack_c [4]; + + FUN_00031c38(this,&DAT_00051d84,auStack_c); + return; +} + + + +### FUNC do_falsename @ 00051d8c + +/* std::numpunct::do_falsename() const */ + +void __thiscall std::numpunct::do_falsename(numpunct *this) + +{ + undefined1 auStack_c [4]; + + FUN_00031c38(this,"false",auStack_c); + return; +} + + + +### FUNC ~numpunct @ 00051dac + +/* std::numpunct::~numpunct() */ + +void __thiscall std::numpunct::~numpunct(numpunct *this) + +{ + locale::facet::~facet((facet *)this); + return; +} + + + +### FUNC ~numpunct @ 00051db6 + +/* std::numpunct::~numpunct() */ + +void __thiscall std::numpunct::~numpunct(numpunct *this) + +{ + locale::facet::~facet((facet *)this); + operator_delete(this); + return; +} + + + +### FUNC do_decimal_point @ 00051dd6 + +/* std::numpunct::do_decimal_point() const */ + +undefined4 std::numpunct::do_decimal_point(void) + +{ + return 0x2e; +} + + + +### FUNC do_thousands_sep @ 00051dda + +/* std::numpunct::do_thousands_sep() const */ + +undefined4 std::numpunct::do_thousands_sep(void) + +{ + return 0x2c; +} + + + +### FUNC do_grouping @ 00051dde + +/* std::numpunct::do_grouping() const */ + +void __thiscall std::numpunct::do_grouping(numpunct *this) + +{ + *this = (numpunct)0x0; + *(numpunct **)(this + 0x10) = this; + *(numpunct **)(this + 0x14) = this; + return; +} + + + +### FUNC do_truename @ 00051de8 + +/* std::numpunct::do_truename() const */ + +void __thiscall std::numpunct::do_truename(numpunct *this) + +{ + size_t sVar1; + + *(numpunct **)(this + 0x40) = this; + *(numpunct **)(this + 0x44) = this; + sVar1 = wcslen(L"true"); + FUN_0004fe38(this,&DAT_00051e34,&DAT_00051e34 + sVar1 * 4); + return; +} + + + +### FUNC do_falsename @ 00051e48 + +/* std::numpunct::do_falsename() const */ + +void __thiscall std::numpunct::do_falsename(numpunct *this) + +{ + size_t sVar1; + + *(numpunct **)(this + 0x40) = this; + *(numpunct **)(this + 0x44) = this; + sVar1 = wcslen(L"false"); + FUN_0004fe38(this,L"false",L"false" + sVar1); + return; +} + + + +### FUNC ~numpunct @ 00051eac + +/* std::numpunct::~numpunct() */ + +void __thiscall std::numpunct::~numpunct(numpunct *this) + +{ + locale::facet::~facet((facet *)this); + return; +} + + + +### FUNC ~numpunct @ 00051eb6 + +/* std::numpunct::~numpunct() */ + +void __thiscall std::numpunct::~numpunct(numpunct *this) + +{ + locale::facet::~facet((facet *)this); + operator_delete(this); + return; +} + + + +### FUNC __write_formatted_time @ 00051ed8 + +/* std::priv::__write_formatted_time(std::priv::__basic_iostring&, std::ctype const&, + char, char, std::priv::_Time_Info const&, tm const*) */ + +void std::priv::__write_formatted_time + (__basic_iostring *param_1,ctype *param_2,char param_3,char param_4, + _Time_Info *param_5,tm *param_6) + +{ + FUN_00051ef0(param_1,param_2,(int)param_3,(int)param_4,param_5,param_6); + return; +} + + + +### FUNC FUN_00051ef0 @ 00051ef0 + +void FUN_00051ef0(undefined4 param_1,int *param_2,int param_3,int param_4,int param_5,tm *param_6) + +{ + int *piVar1; + int iVar2; + undefined4 uVar3; + uint uVar4; + int iVar5; + int extraout_r1; + int extraout_r1_00; + int extraout_r1_01; + int extraout_r1_02; + int extraout_r1_03; + uint extraout_r1_04; + int extraout_r1_05; + int *piVar6; + int extraout_r1_06; + time_t extraout_r1_07; + uint uVar7; + int extraout_r1_08; + int extraout_r1_09; + int extraout_r1_10; + int extraout_r1_11; + int extraout_r1_12; + char *pcVar8; + int iVar9; + int iVar10; + time_t tVar11; + code *pcVar12; + undefined1 uVar13; + int iVar14; + char *pcVar15; + char *pcVar16; + undefined1 auStack_a8 [4]; + int local_a4 [4]; + int *local_94; + int *local_90; + undefined1 auStack_8c [4]; + int local_88 [4]; + int *local_78; + int *local_74; + undefined1 auStack_70 [4]; + int local_6c [4]; + int *local_5c; + int *local_58; + char acStack_54 [64]; + + switch(param_3) { + case 0x25: + pcVar12 = *(code **)(*param_2 + 0x18); + uVar3 = 0x25; + goto LAB_00052440; + case 0x41: + param_5 = param_5 + param_6->tm_wday * 0x18; + uVar3 = *(undefined4 *)(param_5 + 0x130); + iVar2 = 0x4d; + goto LAB_000520c0; + case 0x42: + param_5 = param_5 + param_6->tm_mon * 0x18; + uVar3 = *(undefined4 *)(param_5 + 0x2f8); + iVar2 = 0xbf; + goto LAB_000520c0; + case 0x43: + iVar2 = param_6->tm_mday; + goto LAB_00052320; + case 0x44: + pcVar15 = *(char **)(param_5 + 0x28); + pcVar8 = *(char **)(param_5 + 0x2c); + while (pcVar15 != pcVar8) { + if (*pcVar8 == '%') { + pcVar16 = pcVar8 + 2; + if (pcVar8[1] != '#') { + pcVar16 = pcVar8 + 1; + } + uVar13 = 0; + if (pcVar8[1] == '#') { + uVar13 = 0x23; + } + FUN_00051ef0(param_1,param_2,*pcVar16,uVar13,param_5,param_6); + pcVar8 = pcVar16 + 1; + } + else { + FUN_00054550(param_1,1); + pcVar8 = pcVar8 + 1; + } + } + break; + case 0x47: + case 0x67: + iVar9 = param_6->tm_year; + iVar5 = param_6->tm_wday; + iVar14 = param_6->tm_yday; + uVar4 = iVar9 + 0x76c; + __aeabi_idivmod((iVar14 + 0x17e) - iVar5,7); + iVar2 = (iVar14 + 3) - extraout_r1; + if (iVar2 < 0) { + uVar7 = iVar9 + 0x76b; + iVar2 = 0x16d; + if ((uVar7 & 3) == 0) { + __aeabi_idivmod(uVar7,100); + iVar2 = 0x16e; + if (extraout_r1_08 == 0) { + __aeabi_idivmod(uVar7,400); + iVar2 = 0x16e; + if (extraout_r1_09 != 0) { + iVar2 = 0x16d; + } + } + } + __aeabi_idivmod((iVar2 + iVar14 + 0x17e) - iVar5,7); + iVar2 = (iVar2 + iVar14 + 3) - extraout_r1_10; + } + else { + iVar10 = 0x16d; + if ((uVar4 & 3) == 0) { + __aeabi_idivmod(uVar4,100); + iVar10 = 0x16e; + if (extraout_r1_00 == 0) { + __aeabi_idivmod(uVar4,400); + iVar10 = 0x16e; + if (extraout_r1_01 != 0) { + iVar10 = 0x16d; + } + } + } + __aeabi_idivmod(((iVar14 - iVar10) + 0x17e) - iVar5,7); + iVar5 = ((iVar14 - iVar10) + 3) - extraout_r1_02; + uVar7 = iVar9 + 0x76d; + if (iVar5 < 0) { + uVar7 = uVar4; + } + if (-1 < iVar5) { + iVar2 = iVar5; + } + } + if (param_3 != 0x47) { + if (param_3 == 0x67) { + __aeabi_idivmod(uVar7,100); + __aeabi_idivmod(extraout_r1_03 + 100,100); + uVar7 = extraout_r1_04; + } + else { + iVar2 = __divsi3(iVar2,7); + uVar7 = iVar2 + 1; + } + } + uVar4 = FUN_00050030(acStack_54,0,uVar7); + goto LAB_000525d2; + case 0x48: + if (param_4 == 0x23) { + pcVar8 = "%ld"; + } + else { + pcVar8 = "%.2ld"; + } + sprintf(acStack_54,pcVar8,param_6->tm_hour); + iVar2 = param_6->tm_hour; + goto LAB_000525ba; + case 0x49: + if (param_4 == 0x23) { + pcVar8 = "%ld"; + } + else { + pcVar8 = "%.2ld"; + } + __aeabi_idivmod(param_6->tm_hour,0xc); + iVar2 = 0xc; + if (extraout_r1_11 != 0) { + iVar2 = extraout_r1_11; + } + sprintf(acStack_54,pcVar8,iVar2); + __aeabi_idivmod(param_6->tm_hour,0xc); + uVar4 = 2; + if ((extraout_r1_12 != 0) && (uVar4 = 1, 9 < extraout_r1_12)) { + uVar4 = 2; + } + if (param_4 != 0x23) { + uVar4 = 2; + } + uVar4 = uVar4 | (uint)acStack_54; + goto LAB_000525d2; + case 0x4d: + if (param_4 == 0x23) { + pcVar8 = "%ld"; + } + else { + pcVar8 = "%.2ld"; + } + sprintf(acStack_54,pcVar8,param_6->tm_min); + iVar2 = param_6->tm_min; + goto LAB_000525ba; + case 0x52: + FUN_00031c38(local_6c,&DAT_000648a8,auStack_70); + piVar1 = local_58; + local_90 = local_58; + while (local_5c != piVar1) { + local_58 = local_90; + if ((char)*piVar1 == '%') { + piVar6 = (int *)((int)piVar1 + 2); + if (*(char *)((int)piVar1 + 1) != '#') { + piVar6 = (int *)((int)piVar1 + 1); + } + uVar13 = 0; + if (*(char *)((int)piVar1 + 1) == '#') { + uVar13 = 0x23; + } + FUN_00051ef0(param_1,param_2,(char)*piVar6,uVar13,param_5,param_6); + piVar1 = (int *)((int)piVar6 + 1); + local_90 = local_58; + } + else { + FUN_00054550(param_1,1); + piVar1 = (int *)((int)piVar1 + 1); + local_90 = local_58; + } + } + if ((local_90 != local_6c) && (local_90 != (int *)0x0)) { + if (0x80 < (uint)(local_6c[0] - (int)local_90)) { +LAB_00052652: + operator_delete(local_90); + return; + } + std::__node_alloc::_M_deallocate(local_90,local_6c[0] - (int)local_90); + } + break; + case 0x53: + if (param_4 == 0x23) { + pcVar8 = "%ld"; + } + else { + pcVar8 = "%.2ld"; + } + sprintf(acStack_54,pcVar8,param_6->tm_sec); + iVar2 = param_6->tm_sec; + goto LAB_000525ba; + case 0x54: + FUN_00031c38(local_a4,&DAT_00066294,auStack_a8); + piVar1 = local_90; + while (local_94 != piVar1) { + if ((char)*piVar1 == '%') { + piVar6 = (int *)((int)piVar1 + 2); + if (*(char *)((int)piVar1 + 1) != '#') { + piVar6 = (int *)((int)piVar1 + 1); + } + uVar13 = 0; + if (*(char *)((int)piVar1 + 1) == '#') { + uVar13 = 0x23; + } + FUN_00051ef0(param_1,param_2,(char)*piVar6,uVar13,param_5,param_6); + piVar1 = (int *)((int)piVar6 + 1); + } + else { + FUN_00054550(param_1,1); + piVar1 = (int *)((int)piVar1 + 1); + } + } + if ((local_90 != local_a4) && (local_90 != (int *)0x0)) { + if (0x80 < (uint)(local_a4[0] - (int)local_90)) goto LAB_00052652; + std::__node_alloc::_M_deallocate(local_90,local_a4[0] - (int)local_90); + } + break; + case 0x55: + iVar2 = (param_6->tm_yday + 7) - param_6->tm_wday; + goto LAB_00052218; + case 0x57: + iVar2 = 1; + if (param_6->tm_wday != 0) { + iVar2 = 8 - param_6->tm_wday; + } + iVar2 = param_6->tm_yday + iVar2; +LAB_00052218: + tVar11 = __divsi3(iVar2,7); + goto LAB_00052482; + case 0x58: + pcVar15 = *(char **)(param_5 + 0x10); + pcVar8 = *(char **)(param_5 + 0x14); + while (pcVar15 != pcVar8) { + if (*pcVar8 == '%') { + pcVar16 = pcVar8 + 2; + if (pcVar8[1] != '#') { + pcVar16 = pcVar8 + 1; + } + uVar13 = 0; + if (pcVar8[1] == '#') { + uVar13 = 0x23; + } + FUN_00051ef0(param_1,param_2,*pcVar16,uVar13,param_5,param_6); + pcVar8 = pcVar16 + 1; + } + else { + FUN_00054550(param_1,1); + pcVar8 = pcVar8 + 1; + } + } + break; + case 0x59: + tVar11 = param_6->tm_year + 0x76c; + goto LAB_00052482; + case 0x61: + param_5 = param_5 + param_6->tm_wday * 0x18; + uVar3 = *(undefined4 *)(param_5 + 0x88); + iVar2 = 0x8c; + goto LAB_00052346; + case 0x62: + case 0x68: + param_5 = param_5 + param_6->tm_mon * 0x18; + uVar3 = *(undefined4 *)(param_5 + 0x1d8); + iVar2 = 0x77; +LAB_000520c0: + iVar2 = iVar2 << 2; +LAB_00052346: + FUN_0003dfb8(param_1,*(undefined4 *)(param_5 + iVar2),uVar3,local_6c); + return; + case 99: + iVar2 = param_5 + 0x30; + if (param_4 == 0x23) { + iVar2 = param_5 + 0x60; + } + pcVar15 = *(char **)(iVar2 + 0x10); + pcVar8 = *(char **)(iVar2 + 0x14); + while (pcVar15 != pcVar8) { + if (*pcVar8 == '%') { + pcVar16 = pcVar8 + 2; + if (pcVar8[1] != '#') { + pcVar16 = pcVar8 + 1; + } + uVar13 = 0; + if (pcVar8[1] == '#') { + uVar13 = 0x23; + } + FUN_00051ef0(param_1,param_2,*pcVar16,uVar13,param_5,param_6); + pcVar8 = pcVar16 + 1; + } + else { + FUN_00054550(param_1,1); + pcVar8 = pcVar8 + 1; + } + } + break; + case 100: + if (param_4 == 0x23) { + pcVar8 = "%ld"; + } + else { + pcVar8 = "%.2ld"; + } + sprintf(acStack_54,pcVar8,param_6->tm_mday); + iVar2 = param_6->tm_mday; +LAB_000525ba: + uVar4 = 1; + if (9 < iVar2) { +LAB_000525c2: + uVar4 = 2; + } +LAB_000525c4: + if (param_4 != 0x23) { + uVar4 = 2; + } + uVar4 = uVar4 | (uint)acStack_54; + goto LAB_000525d2; + case 0x65: + iVar2 = param_6->tm_mday; + goto LAB_00052320; + case 0x6a: + tVar11 = param_6->tm_yday + 1; + goto LAB_00052482; + case 0x6b: + iVar2 = param_6->tm_hour; + goto LAB_00052320; + case 0x6c: + __aeabi_idivmod(param_6->tm_hour,0xc); + iVar2 = extraout_r1_05; +LAB_00052320: + sprintf(acStack_54,"%2ld",iVar2); + uVar4 = (uint)acStack_54 | 2; + goto LAB_000525d2; + case 0x6d: + if (param_4 == 0x23) { + pcVar8 = "%ld"; + } + else { + pcVar8 = "%.2ld"; + } + sprintf(acStack_54,pcVar8,param_6->tm_mon + 1); + uVar4 = 1; + if (8 < param_6->tm_mon) goto LAB_000525c2; + goto LAB_000525c4; + case 0x6e: + pcVar12 = *(code **)(*param_2 + 0x18); + uVar3 = 10; +LAB_00052440: + uVar3 = (*pcVar12)(param_2,uVar3); + FUN_00054550(param_1,1,uVar3); + return; + case 0x70: + iVar2 = __divsi3(param_6->tm_hour,0xc); + param_5 = param_5 + iVar2 * 0x18; + uVar3 = *(undefined4 *)(param_5 + 0x418); + iVar2 = 0x41c; + goto LAB_00052346; + case 0x72: + FUN_00031c38(local_88,&DAT_000662a4,auStack_8c); + piVar1 = local_74; + local_90 = local_74; + while (local_78 != piVar1) { + local_74 = local_90; + if ((char)*piVar1 == '%') { + piVar6 = (int *)((int)piVar1 + 2); + if (*(char *)((int)piVar1 + 1) != '#') { + piVar6 = (int *)((int)piVar1 + 1); + } + uVar13 = 0; + if (*(char *)((int)piVar1 + 1) == '#') { + uVar13 = 0x23; + } + FUN_00051ef0(param_1,param_2,(char)*piVar6,uVar13,param_5,param_6); + piVar1 = (int *)((int)piVar6 + 1); + local_90 = local_74; + } + else { + FUN_00054550(param_1,1); + piVar1 = (int *)((int)piVar1 + 1); + local_90 = local_74; + } + } + if ((local_90 != local_88) && (local_90 != (int *)0x0)) { + if (0x80 < (uint)(local_88[0] - (int)local_90)) goto LAB_00052652; + std::__node_alloc::_M_deallocate(local_90,local_88[0] - (int)local_90); + } + break; + case 0x73: + tVar11 = mktime(param_6); + goto LAB_00052482; + case 0x74: + uVar3 = (**(code **)(*param_2 + 0x18))(param_2,9); + FUN_00054550(param_1,1,uVar3); + goto LAB_00052452; + case 0x75: +LAB_00052452: + __aeabi_idivmod(param_6->tm_wday + 6,7); + uVar4 = FUN_00050030(acStack_54,0,extraout_r1_06 + 1); + goto LAB_000525d2; + case 0x77: + tVar11 = param_6->tm_wday; + goto LAB_00052482; + case 0x78: + iVar2 = param_5 + 0x18; + if (param_4 == 0x23) { + iVar2 = param_5 + 0x48; + } + pcVar15 = *(char **)(iVar2 + 0x10); + pcVar8 = *(char **)(iVar2 + 0x14); + while (pcVar15 != pcVar8) { + if (*pcVar8 == '%') { + pcVar16 = pcVar8 + 2; + if (pcVar8[1] != '#') { + pcVar16 = pcVar8 + 1; + } + uVar13 = 0; + if (pcVar8[1] == '#') { + uVar13 = 0x23; + } + FUN_00051ef0(param_1,param_2,*pcVar16,uVar13,param_5,param_6); + pcVar8 = pcVar16 + 1; + } + else { + FUN_00054550(param_1,1); + pcVar8 = pcVar8 + 1; + } + } + break; + case 0x79: + __aeabi_idivmod(param_6->tm_year + 0x76c,100); + tVar11 = extraout_r1_07; +LAB_00052482: + uVar4 = FUN_00050030(acStack_54,0,tVar11); +LAB_000525d2: + FUN_00051c30(param_1,acStack_54,uVar4,local_6c); + } + return; +} + + + +### FUNC __write_formatted_time @ 0005271c + +/* std::priv::__write_formatted_time(std::priv::__basic_iostring&, std::ctype + const&, char, char, std::priv::_WTime_Info const&, tm const*) */ + +void std::priv::__write_formatted_time + (__basic_iostring *param_1,ctype *param_2,char param_3,char param_4, + _WTime_Info *param_5,tm *param_6) + +{ + FUN_00052734(param_1,param_2,(int)param_3,(int)param_4,param_5,param_6); + return; +} + + + +### FUNC FUN_00052734 @ 00052734 + +void FUN_00052734(int *param_1,int *param_2,int param_3,int param_4,int param_5,tm *param_6) + +{ + undefined4 uVar1; + uint uVar2; + int iVar3; + int iVar4; + int iVar5; + int extraout_r1; + int extraout_r1_00; + int extraout_r1_01; + int extraout_r1_02; + int extraout_r1_03; + uint extraout_r1_04; + int extraout_r1_05; + undefined4 *puVar6; + time_t extraout_r1_06; + int extraout_r1_07; + int extraout_r1_08; + int extraout_r1_09; + int extraout_r1_10; + int extraout_r1_11; + char *pcVar7; + int extraout_r1_12; + int iVar8; + int iVar9; + time_t tVar10; + code *pcVar11; + uint uVar12; + uint uVar13; + int *piVar14; + undefined1 auStack_190 [4]; + int local_18c [5]; + int *local_178; + undefined1 auStack_174 [4]; + int local_170 [5]; + int *local_15c; + undefined1 auStack_158 [4]; + char acStack_154 [64]; + int local_114 [5]; + int *local_100; + + switch(param_3) { + case 0x25: + pcVar11 = *(code **)(*param_2 + 0x28); + uVar1 = 0x25; + goto LAB_00052b7e; + default: + goto switchD_0005275e_caseD_26; + case 0x41: + param_5 = param_5 + param_6->tm_wday * 0x48; + uVar1 = *(undefined4 *)(param_5 + 0x2b0); + iVar4 = 0x2b4; + goto LAB_00052b1e; + case 0x42: + param_5 = param_5 + param_6->tm_mon * 0x48; + uVar1 = *(undefined4 *)(param_5 + 0x808); + iVar4 = 0x80c; + goto LAB_00052b1e; + case 0x43: + iVar4 = param_6->tm_mday; + goto LAB_00052a90; + case 0x44: + iVar4 = param_5 + 0x18; + goto LAB_00052b6c; + case 0x47: + case 0x67: + iVar3 = param_6->tm_year; + iVar5 = param_6->tm_wday; + iVar8 = param_6->tm_yday; + uVar2 = iVar3 + 0x76c; + __aeabi_idivmod((iVar8 + 0x17e) - iVar5,7); + iVar4 = (iVar8 + 3) - extraout_r1; + if (iVar4 < 0) { + uVar12 = iVar3 + 0x76b; + iVar4 = 0x16d; + if ((uVar12 & 3) == 0) { + __aeabi_idivmod(uVar12,100); + iVar4 = 0x16e; + if (extraout_r1_07 == 0) { + __aeabi_idivmod(uVar12,400); + iVar4 = 0x16e; + if (extraout_r1_08 != 0) { + iVar4 = 0x16d; + } + } + } + __aeabi_idivmod((iVar4 + iVar8 + 0x17e) - iVar5,7); + iVar4 = (iVar4 + iVar8 + 3) - extraout_r1_09; + } + else { + iVar9 = 0x16d; + if ((uVar2 & 3) == 0) { + __aeabi_idivmod(uVar2,100); + iVar9 = 0x16e; + if (extraout_r1_00 == 0) { + __aeabi_idivmod(uVar2,400); + iVar9 = 0x16e; + if (extraout_r1_01 != 0) { + iVar9 = 0x16d; + } + } + } + __aeabi_idivmod(((iVar8 - iVar9) + 0x17e) - iVar5,7); + iVar5 = ((iVar8 - iVar9) + 3) - extraout_r1_02; + uVar12 = iVar3 + 0x76d; + if (iVar5 < 0) { + uVar12 = uVar2; + } + if (-1 < iVar5) { + iVar4 = iVar5; + } + } + if (param_3 != 0x47) { + if (param_3 == 0x67) { + __aeabi_idivmod(uVar12,100); + __aeabi_idivmod(extraout_r1_03 + 100,100); + uVar12 = extraout_r1_04; + } + else { + iVar4 = __divsi3(iVar4,7); + uVar12 = iVar4 + 1; + } + } + iVar4 = FUN_00050030(acStack_154,0,uVar12); + (**(code **)(*param_2 + 0x2c))(param_2,acStack_154,iVar4,local_114); + iVar4 = iVar4 - (int)acStack_154; + goto LAB_00052e3e; + case 0x48: + if (param_4 == 0x23) { + pcVar7 = "%ld"; + } + else { + pcVar7 = "%.2ld"; + } + sprintf(acStack_154,pcVar7,param_6->tm_hour); + iVar4 = param_6->tm_hour; + goto LAB_00052d1e; + case 0x49: + if (param_4 == 0x23) { + pcVar7 = "%ld"; + } + else { + pcVar7 = "%.2ld"; + } + __aeabi_idivmod(param_6->tm_hour,0xc); + iVar4 = 0xc; + if (extraout_r1_10 != 0) { + iVar4 = extraout_r1_10; + } + sprintf(acStack_154,pcVar7,iVar4); + __aeabi_idivmod(param_6->tm_hour,0xc); + uVar2 = 1; + if (extraout_r1_11 == 0) { + uVar2 = 2; + } + if (9 < extraout_r1_11) { + uVar2 = 2; + } + if (param_4 != 0x23) { + uVar2 = 2; + } + uVar12 = (uint)acStack_154 | uVar2; + pcVar11 = *(code **)(*param_2 + 0x2c); + goto LAB_00052d44; + case 0x4d: + if (param_4 == 0x23) { + pcVar7 = "%ld"; + } + else { + pcVar7 = "%.2ld"; + } + sprintf(acStack_154,pcVar7,param_6->tm_min); + iVar4 = param_6->tm_min; + goto LAB_00052d1e; + case 0x52: + FUN_00031c38(local_114,&DAT_000648a8,auStack_158); + FUN_0005467c(param_1,param_2,local_114,param_5,param_6); + if (local_100 == local_114) { + return; + } + if (local_100 == (int *)0x0) { + return; + } + if ((uint)(local_114[0] - (int)local_100) < 0x81) { + std::__node_alloc::_M_deallocate(local_100,local_114[0] - (int)local_100); + return; + } + operator_delete(local_100); + return; + case 0x53: + if (param_4 == 0x23) { + pcVar7 = "%ld"; + } + else { + pcVar7 = "%.2ld"; + } + sprintf(acStack_154,pcVar7,param_6->tm_sec); + iVar4 = param_6->tm_sec; + goto LAB_00052d1e; + case 0x54: + FUN_00031c38(local_18c,&DAT_00066294,auStack_190); + FUN_0005467c(param_1,param_2,local_18c,param_5,param_6); + if (local_178 == local_18c) { + return; + } + if (local_178 == (int *)0x0) { + return; + } + if ((uint)(local_18c[0] - (int)local_178) < 0x81) { + std::__node_alloc::_M_deallocate(local_178,local_18c[0] - (int)local_178); + return; + } + operator_delete(local_178); + return; + case 0x55: + iVar4 = (param_6->tm_yday + 7) - param_6->tm_wday; + goto LAB_00052ac8; + case 0x57: + iVar4 = 1; + if (param_6->tm_wday != 0) { + iVar4 = 8 - param_6->tm_wday; + } + iVar4 = param_6->tm_yday + iVar4; +LAB_00052ac8: + tVar10 = __divsi3(iVar4,7); + break; + case 0x58: + iVar4 = param_5; + goto LAB_00052b6c; + case 0x59: + iVar4 = FUN_00050030(acStack_154,0,param_6->tm_year + 0x76c); + goto LAB_00052e2a; + case 0x61: + param_5 = param_5 + param_6->tm_wday * 0x48; + uVar1 = *(undefined4 *)(param_5 + 0xb8); + iVar4 = 0xbc; + goto LAB_00052b1e; + case 0x62: + case 0x68: + param_5 = param_5 + param_6->tm_mon * 0x48; + uVar1 = *(undefined4 *)(param_5 + 0x4a8); + iVar4 = 0x4ac; + goto LAB_00052b1e; + case 99: + iVar4 = param_5 + 0x30; + iVar3 = param_5 + 0x60; + goto LAB_00052b62; + case 100: + if (param_4 == 0x23) { + pcVar7 = "%ld"; + } + else { + pcVar7 = "%.2ld"; + } + sprintf(acStack_154,pcVar7,param_6->tm_mday); + iVar4 = param_6->tm_mday; +LAB_00052d1e: + uVar2 = 1; + if (9 < iVar4) { +LAB_00052d26: + uVar2 = 2; + } +LAB_00052d28: + if (param_4 != 0x23) { + uVar2 = 2; + } + uVar12 = (uint)acStack_154 | uVar2; + pcVar11 = *(code **)(*param_2 + 0x2c); +LAB_00052d44: + (*pcVar11)(param_2,acStack_154,uVar12,local_114); + piVar14 = local_114 + uVar2; + goto LAB_00052e48; + case 0x65: + iVar4 = param_6->tm_mday; + goto LAB_00052a90; + case 0x6a: + tVar10 = param_6->tm_yday + 1; + break; + case 0x6b: + iVar4 = param_6->tm_hour; + goto LAB_00052a90; + case 0x6c: + __aeabi_idivmod(param_6->tm_hour,0xc); + iVar4 = extraout_r1_05; +LAB_00052a90: + sprintf(acStack_154,"%2ld",iVar4); + (**(code **)(*param_2 + 0x2c))(param_2,acStack_154,(uint)acStack_154 | 2,local_114); + piVar14 = local_114 + 2; + goto LAB_00052e48; + case 0x6d: + if (param_4 == 0x23) { + pcVar7 = "%ld"; + } + else { + pcVar7 = "%.2ld"; + } + sprintf(acStack_154,pcVar7,param_6->tm_mon + 1); + uVar2 = 1; + if (8 < param_6->tm_mon) goto LAB_00052d26; + goto LAB_00052d28; + case 0x6e: + pcVar11 = *(code **)(*param_2 + 0x28); + uVar1 = 10; +LAB_00052b7e: + uVar1 = (*pcVar11)(param_2,uVar1); + puVar6 = (undefined4 *)param_1[0x10]; + uVar2 = (int)puVar6 - param_1[0x112] >> 2; + if (param_1 == (int *)param_1[0x112]) { + uVar12 = 0x10 - ((int)puVar6 - (int)param_1 >> 2); + } + else { + uVar12 = *param_1 - (int)puVar6 >> 2; + } + if (uVar12 < 2) { + uVar12 = uVar2; + if (uVar2 < 2) { + uVar12 = 1; + } + uVar13 = uVar2 + uVar12 + 1; + uVar12 = 0x3ffffffe; + if (uVar2 <= uVar13) { + uVar12 = uVar13; + } + uVar2 = 0x3ffffffe; + if (uVar13 < 0x3fffffff) { + uVar2 = uVar12; + } + FUN_000506a4(param_1,uVar2); + puVar6 = (undefined4 *)param_1[0x10]; + } + *puVar6 = uVar1; + puVar6[1] = 0; + param_1[0x10] = (int)(puVar6 + 1); + return; + case 0x70: + iVar4 = __divsi3(param_6->tm_hour,0xc); + param_5 = param_5 + iVar4 * 0x48; + uVar1 = *(undefined4 *)(param_5 + 0xb68); + iVar4 = 0xb6c; +LAB_00052b1e: + FUN_00045484(param_1,*(undefined4 *)(param_5 + iVar4),uVar1,local_114); + return; + case 0x72: + FUN_00031c38(local_170,&DAT_000662a4,auStack_174); + FUN_0005467c(param_1,param_2,local_170,param_5,param_6); + if (local_15c == local_170) { + return; + } + if (local_15c == (int *)0x0) { + return; + } + if ((uint)(local_170[0] - (int)local_15c) < 0x81) { + std::__node_alloc::_M_deallocate(local_15c,local_170[0] - (int)local_15c); + return; + } + operator_delete(local_15c); + return; + case 0x73: + tVar10 = mktime(param_6); + break; + case 0x74: + uVar1 = (**(code **)(*param_2 + 0x28))(param_2,9); + puVar6 = (undefined4 *)param_1[0x10]; + uVar2 = (int)puVar6 - param_1[0x112] >> 2; + if (param_1 == (int *)param_1[0x112]) { + uVar12 = 0x10 - ((int)puVar6 - (int)param_1 >> 2); + } + else { + uVar12 = *param_1 - (int)puVar6 >> 2; + } + if (uVar12 < 2) { + uVar12 = uVar2; + if (uVar2 < 2) { + uVar12 = 1; + } + uVar13 = uVar2 + uVar12 + 1; + uVar12 = 0x3ffffffe; + if (uVar2 <= uVar13) { + uVar12 = uVar13; + } + uVar2 = 0x3ffffffe; + if (uVar13 < 0x3fffffff) { + uVar2 = uVar12; + } + FUN_000506a4(param_1,uVar2); + puVar6 = (undefined4 *)param_1[0x10]; + } + *puVar6 = uVar1; + puVar6[1] = 0; + param_1[0x10] = (int)(puVar6 + 1); + goto LAB_00052e0e; + case 0x75: +LAB_00052e0e: + __aeabi_idivmod(param_6->tm_wday + 6,7); + tVar10 = extraout_r1_12 + 1; + break; + case 0x77: + tVar10 = param_6->tm_wday; + break; + case 0x78: + iVar4 = param_5 + 0x18; + iVar3 = param_5 + 0x48; +LAB_00052b62: + if (param_4 == 0x23) { + iVar4 = iVar3; + } +LAB_00052b6c: + FUN_0005467c(param_1,param_2,iVar4,param_5,param_6); + return; + case 0x79: + __aeabi_idivmod(param_6->tm_year + 0x76c,100); + tVar10 = extraout_r1_06; + } + iVar4 = FUN_00050030(acStack_154,0,tVar10); +LAB_00052e2a: + (**(code **)(*param_2 + 0x2c))(param_2,acStack_154,iVar4,local_114); + iVar4 = iVar4 - (int)acStack_154; +LAB_00052e3e: + piVar14 = local_114 + iVar4; +LAB_00052e48: + FUN_0005473c(param_1,local_114,piVar14,local_170); +switchD_0005275e_caseD_26: + return; +} + + + +### FUNC time_init @ 00052f04 + +/* WARNING: Removing unreachable block (ram,0x00052fb4) */ +/* WARNING: Removing unreachable block (ram,0x00053050) */ +/* std::priv::time_init::time_init() */ + +int std::priv::time_init::time_init(void) + +{ + int iVar1; + char *pcVar2; + size_t sVar3; + int iVar4; + undefined1 *puVar5; + int iVar6; + undefined1 *puVar7; + int *piVar8; + int iVar9; + + iVar1 = FUN_00053160(); + iVar9 = 0; + *(undefined4 *)(iVar1 + 0x438) = 0; + piVar8 = (int *)(iVar1 + 0x8c); + do { + pcVar2 = &DAT_000665ee + iVar9; + sVar3 = strlen(pcVar2); + iVar6 = piVar8[-1]; + iVar4 = *piVar8; + if ((uint)(iVar6 - iVar4) < sVar3) { + if (iVar6 != iVar4) { + __aeabi_memmove(iVar4,pcVar2); + iVar6 = piVar8[-1]; + iVar4 = *piVar8; + } + FUN_00037294(piVar8 + -5,&DAT_000665ee + iVar9 + (iVar6 - iVar4),&DAT_000665ee + sVar3 + iVar9 + ); + } + else { + if (sVar3 != 0) { + __aeabi_memmove(iVar4,pcVar2,sVar3); + iVar6 = piVar8[-1]; + iVar4 = *piVar8; + } + iVar4 = iVar4 + sVar3; + if (iVar4 != iVar6) { + __aeabi_memmove(iVar4,iVar6); + piVar8[-1] = piVar8[-1] + (iVar4 - iVar6); + } + } + iVar9 = iVar9 + 0xe; + piVar8 = piVar8 + 6; + } while (iVar9 != 0xc4); + piVar8 = (int *)(iVar1 + 0x1dc); + pcVar2 = "Jan"; + iVar9 = 0x18; + do { + sVar3 = strlen(pcVar2); + iVar6 = piVar8[-1]; + iVar4 = *piVar8; + if ((uint)(iVar6 - iVar4) < sVar3) { + if (iVar6 != iVar4) { + __aeabi_memmove(iVar4,pcVar2); + iVar6 = piVar8[-1]; + iVar4 = *piVar8; + } + FUN_00037294(piVar8 + -5,pcVar2 + (iVar6 - iVar4),pcVar2 + sVar3); + } + else { + if (sVar3 != 0) { + __aeabi_memmove(iVar4,pcVar2,sVar3); + iVar6 = piVar8[-1]; + iVar4 = *piVar8; + } + iVar4 = iVar4 + sVar3; + if (iVar4 != iVar6) { + __aeabi_memmove(iVar4,iVar6); + piVar8[-1] = piVar8[-1] + (iVar4 - iVar6); + } + } + iVar9 = iVar9 + -1; + pcVar2 = pcVar2 + 0x18; + piVar8 = piVar8 + 6; + } while (iVar9 != 0); + puVar5 = *(undefined1 **)(iVar1 + 0x41c); + puVar7 = *(undefined1 **)(iVar1 + 0x418); + piVar8 = (int *)(iVar1 + 0x418); + if ((uint)((int)puVar7 - (int)puVar5) < 2) { + if (puVar7 != puVar5) { + __aeabi_memcpy(puVar5,&DAT_00053148); + puVar5 = *(undefined1 **)(iVar1 + 0x41c); + puVar7 = (undefined1 *)*piVar8; + } + FUN_00037294(iVar1 + 0x408,&DAT_00053148 + ((int)puVar7 - (int)puVar5),&DAT_0005314a); + } + else { + *puVar5 = 0x41; + puVar5[1] = 0x4d; + puVar5 = (undefined1 *)*piVar8; + puVar7 = (undefined1 *)(*(int *)(iVar1 + 0x41c) + 2); + if (puVar7 != puVar5) { + *puVar7 = *puVar5; + *piVar8 = (int)(puVar7 + (*piVar8 - (int)puVar5)); + } + } + puVar5 = *(undefined1 **)(iVar1 + 0x434); + puVar7 = *(undefined1 **)(iVar1 + 0x430); + piVar8 = (int *)(iVar1 + 0x430); + if ((uint)((int)puVar7 - (int)puVar5) < 2) { + if (puVar7 != puVar5) { + __aeabi_memcpy(puVar5,&DAT_00053150); + puVar5 = *(undefined1 **)(iVar1 + 0x434); + puVar7 = (undefined1 *)*piVar8; + } + FUN_00037294(iVar1 + 0x420,&DAT_00053150 + ((int)puVar7 - (int)puVar5),&DAT_00053152); + } + else { + *puVar5 = 0x50; + puVar5[1] = 0x4d; + puVar5 = (undefined1 *)*piVar8; + puVar7 = (undefined1 *)(*(int *)(iVar1 + 0x434) + 2); + if (puVar7 != puVar5) { + *puVar7 = *puVar5; + *piVar8 = (int)(puVar7 + (*piVar8 - (int)puVar5)); + } + } + FUN_0005404c(iVar1); + return iVar1; +} + + + +### FUNC FUN_00053160 @ 00053160 + +void FUN_00053160(undefined1 *param_1) + +{ + undefined1 *puVar1; + int iVar2; + + param_1[0x30] = 0; + param_1[0x48] = 0; + param_1[0x60] = 0; + *(undefined1 **)(param_1 + 0x8c) = param_1 + 0x78; + *(undefined1 **)(param_1 + 0x88) = param_1 + 0x78; + *param_1 = 0; + param_1[0x18] = 0; + *(undefined1 **)(param_1 + 0x28) = param_1 + 0x18; + *(undefined1 **)(param_1 + 0x2c) = param_1 + 0x18; + *(undefined1 **)(param_1 + 0x40) = param_1 + 0x30; + *(undefined1 **)(param_1 + 0x44) = param_1 + 0x30; + *(undefined1 **)(param_1 + 0x58) = param_1 + 0x48; + *(undefined1 **)(param_1 + 0x5c) = param_1 + 0x48; + *(undefined1 **)(param_1 + 0x70) = param_1 + 0x60; + *(undefined1 **)(param_1 + 0x74) = param_1 + 0x60; + *(undefined1 **)(param_1 + 0x10) = param_1; + *(undefined1 **)(param_1 + 0x14) = param_1; + *(undefined1 **)(param_1 + 0xa4) = param_1 + 0x90; + *(undefined1 **)(param_1 + 0xa0) = param_1 + 0x90; + param_1[0x78] = 0; + param_1[0x90] = 0; + *(undefined1 **)(param_1 + 0xbc) = param_1 + 0xa8; + *(undefined1 **)(param_1 + 0xb8) = param_1 + 0xa8; + param_1[0xa8] = 0; + *(undefined1 **)(param_1 + 0xd4) = param_1 + 0xc0; + *(undefined1 **)(param_1 + 0xd0) = param_1 + 0xc0; + param_1[0xc0] = 0; + *(undefined1 **)(param_1 + 0xec) = param_1 + 0xd8; + *(undefined1 **)(param_1 + 0xe8) = param_1 + 0xd8; + param_1[0xd8] = 0; + *(undefined1 **)(param_1 + 0x104) = param_1 + 0xf0; + *(undefined1 **)(param_1 + 0x100) = param_1 + 0xf0; + param_1[0xf0] = 0; + *(undefined1 **)(param_1 + 0x11c) = param_1 + 0x108; + *(undefined1 **)(param_1 + 0x118) = param_1 + 0x108; + param_1[0x108] = 0; + *(undefined1 **)(param_1 + 0x134) = param_1 + 0x120; + *(undefined1 **)(param_1 + 0x130) = param_1 + 0x120; + param_1[0x120] = 0; + *(undefined1 **)(param_1 + 0x14c) = param_1 + 0x138; + *(undefined1 **)(param_1 + 0x148) = param_1 + 0x138; + param_1[0x138] = 0; + *(undefined1 **)(param_1 + 0x164) = param_1 + 0x150; + *(undefined1 **)(param_1 + 0x160) = param_1 + 0x150; + param_1[0x150] = 0; + *(undefined1 **)(param_1 + 0x17c) = param_1 + 0x168; + *(undefined1 **)(param_1 + 0x178) = param_1 + 0x168; + param_1[0x168] = 0; + *(undefined1 **)(param_1 + 0x194) = param_1 + 0x180; + *(undefined1 **)(param_1 + 400) = param_1 + 0x180; + param_1[0x180] = 0; + *(undefined1 **)(param_1 + 0x1ac) = param_1 + 0x198; + *(undefined1 **)(param_1 + 0x1a8) = param_1 + 0x198; + param_1[0x198] = 0; + *(undefined1 **)(param_1 + 0x1c4) = param_1 + 0x1b0; + *(undefined1 **)(param_1 + 0x1c0) = param_1 + 0x1b0; + param_1[0x1b0] = 0; + puVar1 = param_1 + 0x1c8; + iVar2 = 0x18; + do { + *puVar1 = 0; + *(undefined1 **)(puVar1 + 0x10) = puVar1; + *(undefined1 **)(puVar1 + 0x14) = puVar1; + iVar2 = iVar2 + -1; + puVar1 = puVar1 + 0x18; + } while (iVar2 != 0); + *(undefined1 **)(param_1 + 0x41c) = param_1 + 0x408; + *(undefined1 **)(param_1 + 0x418) = param_1 + 0x408; + param_1[0x408] = 0; + param_1[0x420] = 0; + *(undefined1 **)(param_1 + 0x434) = param_1 + 0x420; + *(undefined1 **)(param_1 + 0x430) = param_1 + 0x420; + return; +} + + + +### FUNC time_init @ 000532e0 + +/* std::priv::time_init::time_init(char const*) */ + +time_init * __thiscall +std::priv::time_init::time_init(time_init *this,char *param_1) + +{ + int iVar1; + undefined4 uVar2; + undefined1 auStack_118 [256]; + int local_18; + char *local_14; + + local_14 = param_1; + FUN_00053160(); + if (param_1 == (char *)0x0) { + locale::_M_throw_on_null_name(); + } + else { + iVar1 = FUN_0004a3cc(&local_14,auStack_118,0,&local_18); + if (iVar1 != 0) { + FUN_00053350(this,iVar1); + uVar2 = FUN_000536e8(iVar1); + *(undefined4 *)(this + 0x438) = uVar2; + FUN_0004a698(iVar1); + return this; + } + } + uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"time"); + FUN_00039fc0(this); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar2); +} + + + +### FUNC FUN_00053350 @ 00053350 + +/* WARNING: Removing unreachable block (ram,0x00053630) */ +/* WARNING: Removing unreachable block (ram,0x000534f4) */ +/* WARNING: Removing unreachable block (ram,0x000533ce) */ +/* WARNING: Removing unreachable block (ram,0x0005346a) */ +/* WARNING: Removing unreachable block (ram,0x0005358c) */ +/* WARNING: Removing unreachable block (ram,0x000536ca) */ + +void FUN_00053350(int param_1,undefined4 param_2) + +{ + char *pcVar1; + size_t sVar2; + int iVar3; + int iVar4; + int *piVar5; + int iVar6; + int iVar7; + + iVar7 = param_1 + 0x78; + iVar6 = 0; + do { + pcVar1 = (char *)FUN_0004de78(param_2,iVar6); + sVar2 = strlen(pcVar1); + iVar4 = *(int *)(iVar7 + 0x10); + iVar3 = *(int *)(iVar7 + 0x14); + if ((uint)(iVar4 - iVar3) < sVar2) { + if (iVar4 != iVar3) { + __aeabi_memmove(iVar3,pcVar1); + iVar4 = *(int *)(iVar7 + 0x10); + iVar3 = *(int *)(iVar7 + 0x14); + } + FUN_00037294(iVar7,pcVar1 + (iVar4 - iVar3),pcVar1 + sVar2); + } + else { + if (sVar2 != 0) { + __aeabi_memmove(iVar3,pcVar1,sVar2); + iVar4 = *(int *)(iVar7 + 0x10); + iVar3 = *(int *)(iVar7 + 0x14); + } + iVar3 = iVar3 + sVar2; + if (iVar3 != iVar4) { + __aeabi_memmove(iVar3,iVar4); + *(int *)(iVar7 + 0x10) = *(int *)(iVar7 + 0x10) + (iVar3 - iVar4); + } + } + iVar7 = iVar7 + 0x18; + iVar6 = iVar6 + 1; + } while (iVar6 != 7); + piVar5 = (int *)(param_1 + 0x134); + iVar6 = 0; + do { + pcVar1 = (char *)FUN_0004de68(param_2); + sVar2 = strlen(pcVar1); + iVar3 = piVar5[-1]; + iVar7 = *piVar5; + if ((uint)(iVar3 - iVar7) < sVar2) { + if (iVar3 != iVar7) { + __aeabi_memmove(iVar7,pcVar1); + iVar3 = piVar5[-1]; + iVar7 = *piVar5; + } + FUN_00037294(piVar5 + -5,pcVar1 + (iVar3 - iVar7),pcVar1 + sVar2); + } + else { + if (sVar2 != 0) { + __aeabi_memmove(iVar7,pcVar1,sVar2); + iVar3 = piVar5[-1]; + iVar7 = *piVar5; + } + iVar7 = iVar7 + sVar2; + if (iVar7 != iVar3) { + __aeabi_memmove(iVar7); + piVar5[-1] = piVar5[-1] + (iVar7 - iVar3); + } + } + piVar5 = piVar5 + 6; + iVar6 = iVar6 + 1; + } while (iVar6 != 7); + iVar7 = param_1 + 0x1c8; + iVar6 = 0; + do { + pcVar1 = (char *)FUN_0004de58(param_2,iVar6); + sVar2 = strlen(pcVar1); + iVar4 = *(int *)(iVar7 + 0x10); + iVar3 = *(int *)(iVar7 + 0x14); + if ((uint)(iVar4 - iVar3) < sVar2) { + if (iVar4 != iVar3) { + __aeabi_memmove(iVar3,pcVar1); + iVar4 = *(int *)(iVar7 + 0x10); + iVar3 = *(int *)(iVar7 + 0x14); + } + FUN_00037294(iVar7,pcVar1 + (iVar4 - iVar3),pcVar1 + sVar2); + } + else { + if (sVar2 != 0) { + __aeabi_memmove(iVar3,pcVar1,sVar2); + iVar4 = *(int *)(iVar7 + 0x10); + iVar3 = *(int *)(iVar7 + 0x14); + } + iVar3 = iVar3 + sVar2; + if (iVar3 != iVar4) { + __aeabi_memmove(iVar3,iVar4); + *(int *)(iVar7 + 0x10) = *(int *)(iVar7 + 0x10) + (iVar3 - iVar4); + } + } + iVar7 = iVar7 + 0x18; + iVar6 = iVar6 + 1; + } while (iVar6 != 0xc); + piVar5 = (int *)(param_1 + 0x2fc); + iVar6 = 0; + do { + pcVar1 = (char *)FUN_0004de48(param_2); + sVar2 = strlen(pcVar1); + iVar3 = piVar5[-1]; + iVar7 = *piVar5; + if ((uint)(iVar3 - iVar7) < sVar2) { + if (iVar3 != iVar7) { + __aeabi_memmove(iVar7,pcVar1); + iVar3 = piVar5[-1]; + iVar7 = *piVar5; + } + FUN_00037294(piVar5 + -5,pcVar1 + (iVar3 - iVar7),pcVar1 + sVar2); + } + else { + if (sVar2 != 0) { + __aeabi_memmove(iVar7,pcVar1,sVar2); + iVar3 = piVar5[-1]; + iVar7 = *piVar5; + } + iVar7 = iVar7 + sVar2; + if (iVar7 != iVar3) { + __aeabi_memmove(iVar7,iVar3); + piVar5[-1] = piVar5[-1] + (iVar7 - iVar3); + } + } + piVar5 = piVar5 + 6; + iVar6 = iVar6 + 1; + } while (iVar6 != 0xc); + pcVar1 = (char *)FUN_0004dec8(param_2); + sVar2 = strlen(pcVar1); + iVar6 = *(int *)(param_1 + 0x41c); + iVar7 = *(int *)(param_1 + 0x418); + piVar5 = (int *)(param_1 + 0x418); + if ((uint)(iVar7 - iVar6) < sVar2) { + if (iVar7 != iVar6) { + __aeabi_memmove(iVar6,pcVar1); + iVar6 = *(int *)(param_1 + 0x41c); + iVar7 = *piVar5; + } + FUN_00037294(param_1 + 0x408,pcVar1 + (iVar7 - iVar6),pcVar1 + sVar2); + } + else { + if (sVar2 != 0) { + __aeabi_memmove(iVar6,pcVar1,sVar2); + iVar7 = *piVar5; + iVar6 = *(int *)(param_1 + 0x41c); + } + iVar6 = iVar6 + sVar2; + if (iVar6 != iVar7) { + __aeabi_memmove(iVar6); + *piVar5 = *piVar5 + (iVar6 - iVar7); + } + } + pcVar1 = (char *)FUN_0004ded0(param_2); + sVar2 = strlen(pcVar1); + iVar6 = *(int *)(param_1 + 0x434); + iVar7 = *(int *)(param_1 + 0x430); + piVar5 = (int *)(param_1 + 0x430); + if ((uint)(iVar7 - iVar6) < sVar2) { + if (iVar7 != iVar6) { + __aeabi_memmove(iVar6,pcVar1); + iVar6 = *(int *)(param_1 + 0x434); + iVar7 = *piVar5; + } + FUN_00037294(param_1 + 0x420,pcVar1 + (iVar7 - iVar6),pcVar1 + sVar2); + } + else { + if (sVar2 != 0) { + __aeabi_memmove(iVar6,pcVar1,sVar2); + iVar7 = *piVar5; + iVar6 = *(int *)(param_1 + 0x434); + } + iVar6 = iVar6 + sVar2; + if (iVar6 != iVar7) { + __aeabi_memmove(iVar6); + *piVar5 = *piVar5 + (iVar6 - iVar7); + } + } + FUN_00054198(param_1,param_2); + return; +} + + + +### FUNC FUN_000536e8 @ 000536e8 + +undefined4 FUN_000536e8(void) + +{ + char cVar1; + char cVar2; + char cVar3; + int iVar4; + undefined4 uVar5; + char *pcVar6; + char *pcVar7; + bool bVar8; + + iVar4 = FUN_0004de94(); + pcVar6 = (char *)(iVar4 + -1); + do { + pcVar7 = pcVar6; + cVar1 = pcVar7[1]; + pcVar6 = pcVar7 + 1; + if (cVar1 == '%') break; + } while (cVar1 != '\0'); + uVar5 = 0; + if (cVar1 != '\0') { + cVar1 = pcVar7[2]; + bVar8 = cVar1 == '\0'; + if ((cVar1 != '%') && (pcVar7 = pcVar7 + 3, !bVar8)) { + do { + pcVar6 = pcVar7; + bVar8 = *pcVar6 == '\0'; + if (*pcVar6 == '%') break; + pcVar7 = pcVar6 + 1; + } while (!bVar8); + pcVar6 = pcVar6 + -1; + } + uVar5 = 0; + if (!bVar8) { + pcVar7 = pcVar6 + 2; + cVar2 = pcVar6[2]; + cVar3 = cVar2; + while ((cVar3 != '%' && (cVar3 != '\0'))) { + pcVar6 = pcVar7 + 1; + pcVar7 = pcVar7 + 1; + cVar3 = *pcVar6; + } + uVar5 = 0; + if (cVar3 != '\0') { + cVar3 = pcVar7[1]; + if (cVar1 == 'y') { + if (cVar2 == 'm') { + uVar5 = 3; + if (cVar3 != 'd') { + return 0; + } + } + else if ((cVar2 == 'd') && (uVar5 = 4, cVar3 != 'm')) { + return 0; + } + } + else if (cVar1 == 'm') { + uVar5 = 2; + if (cVar2 != 'd' || cVar3 != 'y') { + return 0; + } + } + else if ((cVar1 == 'd') && (uVar5 = 1, cVar2 != 'm' || cVar3 != 'y')) { + return 0; + } + } + } + } + return uVar5; +} + + + +### FUNC time_init @ 000537f2 + +/* std::priv::time_init::time_init(_Locale_time*) */ + +time_init * __thiscall +std::priv::time_init::time_init(time_init *this,_Locale_time *param_1) + +{ + undefined4 uVar1; + + uVar1 = FUN_00053160(); + FUN_00053350(uVar1,param_1); + uVar1 = FUN_000536e8(param_1); + *(undefined4 *)(this + 0x438) = uVar1; + return this; +} + + + +### FUNC time_init @ 00053828 + +/* std::priv::time_init::time_init() */ + +int std::priv::time_init::time_init(void) + +{ + int iVar1; + size_t sVar2; + int iVar3; + int iVar4; + wchar_t *__s; + + iVar1 = FUN_00053b3c(); + *(undefined4 *)(iVar1 + 3000) = 0; + sVar2 = wcslen(L"Sun"); + FUN_0004413c(iVar1 + 0x78,&DAT_000668f4,&DAT_000668f4 + sVar2 * 4); + sVar2 = wcslen(L"Mon"); + FUN_0004413c(iVar1 + 0xc0,&DAT_0006692c,&DAT_0006692c + sVar2 * 4); + sVar2 = wcslen(L"Tue"); + FUN_0004413c(iVar1 + 0x108,&DAT_00066964,&DAT_00066964 + sVar2 * 4); + sVar2 = wcslen(L"Wed"); + FUN_0004413c(iVar1 + 0x150,&DAT_0006699c,&DAT_0006699c + sVar2 * 4); + sVar2 = wcslen(L"Thu"); + FUN_0004413c(iVar1 + 0x198,&DAT_000669d4,&DAT_000669d4 + sVar2 * 4); + sVar2 = wcslen(L"Fri"); + FUN_0004413c(iVar1 + 0x1e0,&DAT_00066a0c,&DAT_00066a0c + sVar2 * 4); + sVar2 = wcslen(L"Sat"); + FUN_0004413c(iVar1 + 0x228,&DAT_00066a44,&DAT_00066a44 + sVar2 * 4); + sVar2 = wcslen(L"Sunday"); + FUN_0004413c(iVar1 + 0x270,L"Sunday",L"Sunday" + sVar2); + sVar2 = wcslen(L"Monday"); + FUN_0004413c(iVar1 + 0x2b8,L"Monday",L"Monday" + sVar2); + sVar2 = wcslen(L"Tuesday"); + FUN_0004413c(iVar1 + 0x300,L"Tuesday",L"Tuesday" + sVar2); + sVar2 = wcslen(L"Wednesday"); + FUN_0004413c(iVar1 + 0x348,L"Wednesday",L"Wednesday" + sVar2); + sVar2 = wcslen(L"Thursday"); + FUN_0004413c(iVar1 + 0x390,L"Thursday",L"Thursday" + sVar2); + sVar2 = wcslen(L"Friday"); + FUN_0004413c(iVar1 + 0x3d8,L"Friday",L"Friday" + sVar2); + sVar2 = wcslen(L"Saturday"); + FUN_0004413c(iVar1 + 0x420,L"Saturday",L"Saturday" + sVar2); + iVar4 = iVar1 + 0x468; + iVar3 = 0x18; + __s = L"Jan"; + do { + sVar2 = wcslen(__s); + FUN_0004413c(iVar4,__s,__s + sVar2); + __s = __s + 0x18; + iVar3 = iVar3 + -1; + iVar4 = iVar4 + 0x48; + } while (iVar3 != 0); + sVar2 = wcslen(L"AM"); + FUN_0004413c(iVar1 + 0xb28,&DAT_00053b20,&DAT_00053b20 + sVar2 * 4); + sVar2 = wcslen(L"PM"); + FUN_0004413c(iVar1 + 0xb70,&DAT_00053b30,&DAT_00053b30 + sVar2 * 4); + FUN_0005404c(iVar1); + return iVar1; +} + + + +### FUNC FUN_00053b3c @ 00053b3c + +void FUN_00053b3c(undefined1 *param_1) + +{ + undefined4 *puVar1; + int iVar2; + + param_1[0x30] = 0; + param_1[0x48] = 0; + param_1[0x60] = 0; + *(undefined1 **)(param_1 + 0xbc) = param_1 + 0x78; + *(undefined1 **)(param_1 + 0xb8) = param_1 + 0x78; + *param_1 = 0; + param_1[0x18] = 0; + *(undefined1 **)(param_1 + 0x28) = param_1 + 0x18; + *(undefined1 **)(param_1 + 0x2c) = param_1 + 0x18; + *(undefined1 **)(param_1 + 0x40) = param_1 + 0x30; + *(undefined1 **)(param_1 + 0x44) = param_1 + 0x30; + *(undefined1 **)(param_1 + 0x58) = param_1 + 0x48; + *(undefined1 **)(param_1 + 0x5c) = param_1 + 0x48; + *(undefined1 **)(param_1 + 0x74) = param_1 + 0x60; + *(undefined1 **)(param_1 + 0x70) = param_1 + 0x60; + *(undefined1 **)(param_1 + 0x10) = param_1; + *(undefined1 **)(param_1 + 0x14) = param_1; + *(undefined1 **)(param_1 + 0x104) = param_1 + 0xc0; + *(undefined1 **)(param_1 + 0x100) = param_1 + 0xc0; + *(undefined4 *)(param_1 + 0xc0) = 0; + *(undefined1 **)(param_1 + 0x14c) = param_1 + 0x108; + *(undefined1 **)(param_1 + 0x148) = param_1 + 0x108; + *(undefined4 *)(param_1 + 0x108) = 0; + *(undefined1 **)(param_1 + 0x194) = param_1 + 0x150; + *(undefined1 **)(param_1 + 400) = param_1 + 0x150; + *(undefined4 *)(param_1 + 0x150) = 0; + *(undefined1 **)(param_1 + 0x1dc) = param_1 + 0x198; + *(undefined1 **)(param_1 + 0x1d8) = param_1 + 0x198; + *(undefined4 *)(param_1 + 0x198) = 0; + *(undefined1 **)(param_1 + 0x224) = param_1 + 0x1e0; + *(undefined1 **)(param_1 + 0x220) = param_1 + 0x1e0; + *(undefined4 *)(param_1 + 0x1e0) = 0; + *(undefined1 **)(param_1 + 0x26c) = param_1 + 0x228; + *(undefined1 **)(param_1 + 0x268) = param_1 + 0x228; + *(undefined4 *)(param_1 + 0x228) = 0; + *(undefined4 *)(param_1 + 0x78) = 0; + *(undefined1 **)(param_1 + 0x2b4) = param_1 + 0x270; + *(undefined1 **)(param_1 + 0x2b0) = param_1 + 0x270; + *(undefined4 *)(param_1 + 0x270) = 0; + *(undefined1 **)(param_1 + 0x2fc) = param_1 + 0x2b8; + *(undefined1 **)(param_1 + 0x2f8) = param_1 + 0x2b8; + *(undefined4 *)(param_1 + 0x2b8) = 0; + *(undefined1 **)(param_1 + 0x344) = param_1 + 0x300; + *(undefined1 **)(param_1 + 0x340) = param_1 + 0x300; + *(undefined4 *)(param_1 + 0x300) = 0; + *(undefined1 **)(param_1 + 0x38c) = param_1 + 0x348; + *(undefined1 **)(param_1 + 0x388) = param_1 + 0x348; + *(undefined4 *)(param_1 + 0x348) = 0; + *(undefined1 **)(param_1 + 0x3d4) = param_1 + 0x390; + *(undefined1 **)(param_1 + 0x3d0) = param_1 + 0x390; + *(undefined4 *)(param_1 + 0x390) = 0; + *(undefined1 **)(param_1 + 0x41c) = param_1 + 0x3d8; + *(undefined1 **)(param_1 + 0x418) = param_1 + 0x3d8; + *(undefined4 *)(param_1 + 0x3d8) = 0; + *(undefined1 **)(param_1 + 0x464) = param_1 + 0x420; + *(undefined1 **)(param_1 + 0x460) = param_1 + 0x420; + *(undefined4 *)(param_1 + 0x420) = 0; + puVar1 = (undefined4 *)(param_1 + 0x468); + iVar2 = 0x18; + do { + *puVar1 = 0; + puVar1[0x10] = puVar1; + puVar1[0x11] = puVar1; + iVar2 = iVar2 + -1; + puVar1 = puVar1 + 0x12; + } while (iVar2 != 0); + *(undefined1 **)(param_1 + 0xb6c) = param_1 + 0xb28; + *(undefined1 **)(param_1 + 0xb68) = param_1 + 0xb28; + *(undefined4 *)(param_1 + 0xb28) = 0; + *(undefined4 *)(param_1 + 0xb70) = 0; + *(undefined1 **)(param_1 + 0xbb4) = param_1 + 0xb70; + *(undefined1 **)(param_1 + 0xbb0) = param_1 + 0xb70; + return; +} + + + +### FUNC time_init @ 00053cd4 + +/* std::priv::time_init::time_init(char const*) */ + +time_init * __thiscall +std::priv::time_init::time_init(time_init *this,char *param_1) + +{ + int iVar1; + undefined4 uVar2; + undefined1 auStack_118 [256]; + int local_18; + char *local_14; + + local_14 = param_1; + FUN_00053b3c(); + if (param_1 == (char *)0x0) { + locale::_M_throw_on_null_name(); + } + else { + iVar1 = FUN_0004a3cc(&local_14,auStack_118,0,&local_18); + if (iVar1 != 0) { + FUN_00053d48(this,iVar1); + uVar2 = FUN_000536e8(iVar1); + *(undefined4 *)(this + 3000) = uVar2; + FUN_0004a698(iVar1); + return this; + } + } + uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"time"); + FUN_0003b28c(this); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar2); +} + + + +### FUNC FUN_00053d48 @ 00053d48 + +void FUN_00053d48(int param_1,undefined4 param_2) + +{ + wchar_t *pwVar1; + size_t sVar2; + int iVar3; + int iVar4; + undefined1 auStack_214 [512]; + + iVar4 = 0; + pwVar1 = (wchar_t *)FUN_0004df08(param_2,0); + sVar2 = wcslen(pwVar1); + FUN_0004413c(param_1 + 0x78,pwVar1,pwVar1 + sVar2); + pwVar1 = (wchar_t *)FUN_0004df08(param_2,1,auStack_214,0x80); + sVar2 = wcslen(pwVar1); + FUN_0004413c(param_1 + 0xc0,pwVar1,pwVar1 + sVar2); + pwVar1 = (wchar_t *)FUN_0004df08(param_2,2,auStack_214,0x80); + sVar2 = wcslen(pwVar1); + FUN_0004413c(param_1 + 0x108,pwVar1,pwVar1 + sVar2); + pwVar1 = (wchar_t *)FUN_0004df08(param_2,3,auStack_214,0x80); + sVar2 = wcslen(pwVar1); + FUN_0004413c(param_1 + 0x150,pwVar1,pwVar1 + sVar2); + pwVar1 = (wchar_t *)FUN_0004df08(param_2,4,auStack_214,0x80); + sVar2 = wcslen(pwVar1); + FUN_0004413c(param_1 + 0x198,pwVar1,pwVar1 + sVar2); + pwVar1 = (wchar_t *)FUN_0004df08(param_2,5,auStack_214,0x80); + sVar2 = wcslen(pwVar1); + FUN_0004413c(param_1 + 0x1e0,pwVar1,pwVar1 + sVar2); + pwVar1 = (wchar_t *)FUN_0004df08(param_2,6,auStack_214,0x80); + sVar2 = wcslen(pwVar1); + FUN_0004413c(param_1 + 0x228,pwVar1,pwVar1 + sVar2); + pwVar1 = (wchar_t *)FUN_0004def8(param_2,0,auStack_214,0x80); + sVar2 = wcslen(pwVar1); + FUN_0004413c(param_1 + 0x270,pwVar1,pwVar1 + sVar2); + pwVar1 = (wchar_t *)FUN_0004def8(param_2,1,auStack_214,0x80); + sVar2 = wcslen(pwVar1); + FUN_0004413c(param_1 + 0x2b8,pwVar1,pwVar1 + sVar2); + pwVar1 = (wchar_t *)FUN_0004def8(param_2,2,auStack_214,0x80); + sVar2 = wcslen(pwVar1); + FUN_0004413c(param_1 + 0x300,pwVar1,pwVar1 + sVar2); + pwVar1 = (wchar_t *)FUN_0004def8(param_2,3,auStack_214,0x80); + sVar2 = wcslen(pwVar1); + FUN_0004413c(param_1 + 0x348,pwVar1,pwVar1 + sVar2); + pwVar1 = (wchar_t *)FUN_0004def8(param_2,4,auStack_214,0x80); + sVar2 = wcslen(pwVar1); + FUN_0004413c(param_1 + 0x390,pwVar1,pwVar1 + sVar2); + pwVar1 = (wchar_t *)FUN_0004def8(param_2,5,auStack_214,0x80); + sVar2 = wcslen(pwVar1); + FUN_0004413c(param_1 + 0x3d8,pwVar1,pwVar1 + sVar2); + pwVar1 = (wchar_t *)FUN_0004def8(param_2,6,auStack_214,0x80); + sVar2 = wcslen(pwVar1); + FUN_0004413c(param_1 + 0x420,pwVar1,pwVar1 + sVar2); + iVar3 = param_1 + 0x468; + do { + pwVar1 = (wchar_t *)FUN_0004dee8(param_2,iVar4,auStack_214,0x80); + sVar2 = wcslen(pwVar1); + FUN_0004413c(iVar3,pwVar1,pwVar1 + sVar2); + iVar3 = iVar3 + 0x48; + iVar4 = iVar4 + 1; + } while (iVar4 != 0xc); + iVar3 = param_1 + 0x7c8; + iVar4 = 0; + do { + pwVar1 = (wchar_t *)FUN_0004ded8(param_2,iVar4,auStack_214,0x80); + sVar2 = wcslen(pwVar1); + FUN_0004413c(iVar3,pwVar1,pwVar1 + sVar2); + iVar3 = iVar3 + 0x48; + iVar4 = iVar4 + 1; + } while (iVar4 != 0xc); + pwVar1 = (wchar_t *)FUN_0004df18(param_2); + sVar2 = wcslen(pwVar1); + FUN_0004413c(param_1 + 0xb28,pwVar1,pwVar1 + sVar2); + pwVar1 = (wchar_t *)FUN_0004df28(param_2,auStack_214,0x80); + sVar2 = wcslen(pwVar1); + FUN_0004413c(param_1 + 0xb70,pwVar1,pwVar1 + sVar2); + FUN_00054198(param_1,param_2); + return; +} + + + +### FUNC time_init @ 00054014 + +/* std::priv::time_init::time_init(_Locale_time*) */ + +time_init * __thiscall +std::priv::time_init::time_init(time_init *this,_Locale_time *param_1) + +{ + undefined4 uVar1; + + uVar1 = FUN_00053b3c(); + FUN_00053d48(uVar1,param_1); + uVar1 = FUN_000536e8(param_1); + *(undefined4 *)(this + 3000) = uVar1; + return this; +} + + + +### FUNC FUN_0005404c @ 0005404c + +void FUN_0005404c(int param_1) + +{ + undefined1 *puVar1; + undefined1 *puVar2; + + puVar2 = *(undefined1 **)(param_1 + 0x10); + puVar1 = *(undefined1 **)(param_1 + 0x14); + if ((uint)((int)puVar2 - (int)puVar1) < 8) { + if (puVar2 != puVar1) { + __aeabi_memcpy(puVar1,&DAT_00066294); + puVar2 = *(undefined1 **)(param_1 + 0x10); + puVar1 = *(undefined1 **)(param_1 + 0x14); + } + FUN_00037294(param_1,&DAT_00066294 + ((int)puVar2 - (int)puVar1),&DAT_0006629c); + } + else { + puVar1[7] = 0x53; + puVar1[6] = 0x25; + puVar1[5] = 0x3a; + puVar1[4] = 0x4d; + puVar1[3] = 0x25; + puVar1[2] = 0x3a; + puVar1[1] = 0x48; + *puVar1 = 0x25; + puVar1 = *(undefined1 **)(param_1 + 0x10); + puVar2 = (undefined1 *)(*(int *)(param_1 + 0x14) + 8); + if (puVar2 != puVar1) { + *puVar2 = *puVar1; + *(undefined1 **)(param_1 + 0x10) = puVar2 + (*(int *)(param_1 + 0x10) - (int)puVar1); + } + } + puVar2 = *(undefined1 **)(param_1 + 0x28); + puVar1 = *(undefined1 **)(param_1 + 0x2c); + if ((uint)((int)puVar2 - (int)puVar1) < 8) { + if (puVar2 != puVar1) { + __aeabi_memcpy(puVar1,&DAT_0005418c); + puVar2 = *(undefined1 **)(param_1 + 0x28); + puVar1 = *(undefined1 **)(param_1 + 0x2c); + } + FUN_00037294(param_1 + 0x18,&DAT_0005418c + ((int)puVar2 - (int)puVar1),&DAT_00054194); + } + else { + *puVar1 = 0x25; + puVar1[4] = 100; + puVar1[3] = 0x25; + puVar1[2] = 0x2f; + puVar1[1] = 0x6d; + puVar1[7] = 0x79; + puVar1[6] = 0x25; + puVar1[5] = 0x2f; + puVar1 = *(undefined1 **)(param_1 + 0x28); + puVar2 = (undefined1 *)(*(int *)(param_1 + 0x2c) + 8); + if (puVar2 != puVar1) { + *puVar2 = *puVar1; + *(undefined1 **)(param_1 + 0x28) = puVar2 + (*(int *)(param_1 + 0x28) - (int)puVar1); + } + } + puVar2 = *(undefined1 **)(param_1 + 0x40); + puVar1 = *(undefined1 **)(param_1 + 0x44); + if ((uint)((int)puVar2 - (int)puVar1) < 8) { + if (puVar2 != puVar1) { + __aeabi_memcpy(puVar1,&DAT_0005418c); + puVar2 = *(undefined1 **)(param_1 + 0x40); + puVar1 = *(undefined1 **)(param_1 + 0x44); + } + FUN_00037294(param_1 + 0x30,&DAT_0005418c + ((int)puVar2 - (int)puVar1),&DAT_00054194); + } + else { + *puVar1 = 0x25; + puVar1[4] = 100; + puVar1[3] = 0x25; + puVar1[2] = 0x2f; + puVar1[1] = 0x6d; + puVar1[7] = 0x79; + puVar1[6] = 0x25; + puVar1[5] = 0x2f; + puVar1 = *(undefined1 **)(param_1 + 0x40); + puVar2 = (undefined1 *)(*(int *)(param_1 + 0x44) + 8); + if (puVar2 != puVar1) { + *puVar2 = *puVar1; + *(undefined1 **)(param_1 + 0x40) = puVar2 + (*(int *)(param_1 + 0x40) - (int)puVar1); + return; + } + } + return; +} + + + +### FUNC FUN_00054198 @ 00054198 + +/* WARNING: Removing unreachable block (ram,0x00054452) */ +/* WARNING: Removing unreachable block (ram,0x00054362) */ +/* WARNING: Removing unreachable block (ram,0x00054218) */ +/* WARNING: Removing unreachable block (ram,0x000543d8) */ +/* WARNING: Removing unreachable block (ram,0x000544cc) */ +/* WARNING: Removing unreachable block (ram,0x000542c4) */ +/* WARNING: Removing unreachable block (ram,0x000542a0) */ +/* WARNING: Removing unreachable block (ram,0x00054508) */ +/* WARNING: Removing unreachable block (ram,0x00054506) */ +/* WARNING: Removing unreachable block (ram,0x0005425e) */ +/* WARNING: Removing unreachable block (ram,0x00054528) */ +/* WARNING: Removing unreachable block (ram,0x00054526) */ +/* WARNING: Removing unreachable block (ram,0x000542e8) */ + +void FUN_00054198(int param_1,undefined4 param_2) + +{ + char *pcVar1; + size_t sVar2; + int iVar3; + short *psVar4; + int iVar5; + undefined *puVar6; + undefined *puVar7; + + pcVar1 = (char *)FUN_0004dea0(param_2); + sVar2 = strlen(pcVar1); + iVar5 = *(int *)(param_1 + 0x10); + iVar3 = *(int *)(param_1 + 0x14); + if ((uint)(iVar5 - iVar3) < sVar2) { + if (iVar5 != iVar3) { + __aeabi_memmove(iVar3,pcVar1); + iVar5 = *(int *)(param_1 + 0x10); + iVar3 = *(int *)(param_1 + 0x14); + } + FUN_00037294(param_1,pcVar1 + (iVar5 - iVar3),pcVar1 + sVar2); + iVar5 = *(int *)(param_1 + 0x10); + } + else { + if (sVar2 != 0) { + __aeabi_memmove(iVar3,pcVar1,sVar2); + iVar5 = *(int *)(param_1 + 0x10); + iVar3 = *(int *)(param_1 + 0x14); + } + iVar3 = iVar3 + sVar2; + if (iVar3 != iVar5) { + __aeabi_memmove(iVar3,iVar5); + iVar5 = *(int *)(param_1 + 0x10) + (iVar3 - iVar5); + *(int *)(param_1 + 0x10) = iVar5; + } + } + psVar4 = *(short **)(param_1 + 0x14); + iVar5 = iVar5 - (int)psVar4; + if ((iVar5 == 2) && (*psVar4 == 0x5425)) { + __aeabi_memcpy(psVar4,&DAT_00066294); + puVar6 = &DAT_00066294 + (*(int *)(param_1 + 0x10) - *(int *)(param_1 + 0x14)); + puVar7 = &DAT_0006629c; + } + else if ((iVar5 == 2) && (*psVar4 == 0x7225)) { + __aeabi_memcpy(psVar4,&DAT_000662a4); + puVar6 = &DAT_000662a4 + (*(int *)(param_1 + 0x10) - *(int *)(param_1 + 0x14)); + puVar7 = &DAT_000662af; + } + else { + if ((iVar5 != 2) || (*psVar4 != 0x5225)) goto LAB_000542f4; + __aeabi_memcpy(psVar4,&DAT_000648a8); + puVar6 = &DAT_000648a8 + (*(int *)(param_1 + 0x10) - *(int *)(param_1 + 0x14)); + puVar7 = &DAT_000648ad; + } + FUN_00037294(param_1,puVar6,puVar7); +LAB_000542f4: + pcVar1 = (char *)FUN_0004de94(param_2); + sVar2 = strlen(pcVar1); + iVar5 = *(int *)(param_1 + 0x28); + iVar3 = *(int *)(param_1 + 0x2c); + if ((uint)(iVar5 - iVar3) < sVar2) { + if (iVar5 != iVar3) { + __aeabi_memmove(iVar3,pcVar1); + iVar5 = *(int *)(param_1 + 0x28); + iVar3 = *(int *)(param_1 + 0x2c); + } + FUN_00037294(param_1 + 0x18,pcVar1 + (iVar5 - iVar3),pcVar1 + sVar2); + } + else { + if (sVar2 != 0) { + __aeabi_memmove(iVar3,pcVar1,sVar2); + iVar5 = *(int *)(param_1 + 0x28); + iVar3 = *(int *)(param_1 + 0x2c); + } + iVar3 = iVar3 + sVar2; + if (iVar3 != iVar5) { + __aeabi_memmove(iVar3); + *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + (iVar3 - iVar5); + } + } + pcVar1 = (char *)FUN_0004de88(param_2); + sVar2 = strlen(pcVar1); + iVar5 = *(int *)(param_1 + 0x40); + iVar3 = *(int *)(param_1 + 0x44); + if ((uint)(iVar5 - iVar3) < sVar2) { + if (iVar5 != iVar3) { + __aeabi_memmove(iVar3,pcVar1); + iVar5 = *(int *)(param_1 + 0x40); + iVar3 = *(int *)(param_1 + 0x44); + } + FUN_00037294(param_1 + 0x30,pcVar1 + (iVar5 - iVar3),pcVar1 + sVar2); + } + else { + if (sVar2 != 0) { + __aeabi_memmove(iVar3,pcVar1,sVar2); + iVar5 = *(int *)(param_1 + 0x40); + iVar3 = *(int *)(param_1 + 0x44); + } + iVar3 = iVar3 + sVar2; + if (iVar3 != iVar5) { + __aeabi_memmove(iVar3); + *(int *)(param_1 + 0x40) = *(int *)(param_1 + 0x40) + (iVar3 - iVar5); + } + } + pcVar1 = (char *)FUN_0004debc(param_2); + sVar2 = strlen(pcVar1); + iVar5 = *(int *)(param_1 + 0x58); + iVar3 = *(int *)(param_1 + 0x5c); + if ((uint)(iVar5 - iVar3) < sVar2) { + if (iVar5 != iVar3) { + __aeabi_memmove(iVar3,pcVar1); + iVar5 = *(int *)(param_1 + 0x58); + iVar3 = *(int *)(param_1 + 0x5c); + } + FUN_00037294(param_1 + 0x48,pcVar1 + (iVar5 - iVar3),pcVar1 + sVar2); + } + else { + if (sVar2 != 0) { + __aeabi_memmove(iVar3,pcVar1,sVar2); + iVar5 = *(int *)(param_1 + 0x58); + iVar3 = *(int *)(param_1 + 0x5c); + } + iVar3 = iVar3 + sVar2; + if (iVar3 != iVar5) { + __aeabi_memmove(iVar3); + *(int *)(param_1 + 0x58) = *(int *)(param_1 + 0x58) + (iVar3 - iVar5); + } + } + pcVar1 = (char *)FUN_0004deb0(param_2); + sVar2 = strlen(pcVar1); + iVar5 = *(int *)(param_1 + 0x70); + iVar3 = *(int *)(param_1 + 0x74); + if ((uint)(iVar5 - iVar3) < sVar2) { + if (iVar5 != iVar3) { + __aeabi_memmove(iVar3,pcVar1); + iVar5 = *(int *)(param_1 + 0x70); + iVar3 = *(int *)(param_1 + 0x74); + } + FUN_00037294(param_1 + 0x60,pcVar1 + (iVar5 - iVar3),pcVar1 + sVar2); + } + else { + if (sVar2 != 0) { + __aeabi_memmove(iVar3,pcVar1,sVar2); + iVar5 = *(int *)(param_1 + 0x70); + iVar3 = *(int *)(param_1 + 0x74); + } + iVar3 = iVar3 + sVar2; + if (iVar3 != iVar5) { + __aeabi_memmove(iVar3); + *(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) + (iVar3 - iVar5); + return; + } + } + return; +} + + + +### FUNC FUN_00054550 @ 00054550 + +int * FUN_00054550(int *param_1,uint param_2,undefined4 param_3) + +{ + int iVar1; + int *piVar2; + int *piVar3; + uint uVar4; + uint uVar5; + undefined1 *puVar6; + uint uVar7; + uint uVar8; + int *piVar9; + int *piVar10; + int *piVar11; + + if (param_2 != 0) { + piVar9 = (int *)param_1[0x46]; + piVar10 = (int *)param_1[4]; + piVar2 = param_1 + 0x46; + if ((uint)((-2 - (int)piVar10) + (int)piVar9) < param_2) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + if (piVar9 == param_1) { + piVar3 = param_1 + 4; + } + else { + piVar3 = (int *)*param_1; + } + piVar11 = piVar10; + if ((uint)((int)piVar3 - (int)piVar10) <= param_2) { + uVar4 = (int)piVar10 - (int)piVar9; + if (-uVar4 - 2 < param_2) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + uVar7 = uVar4; + if (uVar4 <= param_2) { + uVar7 = param_2; + } + uVar8 = uVar4 + uVar7 + 1; + uVar5 = 0xfffffffe; + if (uVar4 <= uVar8) { + uVar5 = uVar8; + } + uVar8 = 0xfffffffe; + if (uVar4 + uVar7 != -2) { + uVar8 = uVar5; + } + if (uVar8 >> 1 < 0x81) { + piVar3 = param_1 + 5; + } + else { + piVar3 = (int *)operator_new(uVar8); + piVar10 = (int *)param_1[4]; + piVar9 = (int *)*piVar2; + } + piVar11 = piVar3; + if (0 < (int)piVar10 - (int)piVar9) { + puVar6 = (undefined1 *)((int)piVar10 + (1 - (int)piVar9)); + do { + *(char *)piVar11 = (char)*piVar9; + puVar6 = puVar6 + -1; + piVar11 = (int *)((int)piVar11 + 1); + piVar9 = (int *)((int)piVar9 + 1); + } while (1 < (int)puVar6); + } + *(undefined1 *)piVar11 = 0; + piVar10 = (int *)*piVar2; + if (((piVar10 != param_1) && (piVar10 != (int *)0x0)) && (param_1 + 5 != piVar10)) { + if ((uint)(*param_1 - (int)piVar10) < 0x81) { + std::__node_alloc::_M_deallocate(piVar10,*param_1 - (int)piVar10); + } + else { + operator_delete(piVar10); + } + } + param_1[4] = (int)piVar11; + *param_1 = (int)((int)piVar3 + uVar8); + *piVar2 = (int)piVar3; + } + if (0 < (int)(param_2 - 1)) { + iVar1 = -param_2; + if (param_2 == 2 || iVar1 < -2) { + iVar1 = -2; + } + __aeabi_memset((undefined1 *)((int)piVar11 + 1),iVar1 + param_2 + 1,param_3); + piVar11 = (int *)param_1[4]; + } + *(undefined1 *)((int)piVar11 + param_2) = 0; + *(char *)param_1[4] = (char)param_3; + param_1[4] = param_1[4] + param_2; + } + return param_1; +} + + + +### FUNC FUN_0005467c @ 0005467c + +void FUN_0005467c(int *param_1,undefined4 param_2,int param_3,undefined4 param_4,undefined4 param_5) + +{ + byte *pbVar1; + byte bVar2; + byte *pbVar3; + uint uVar4; + byte *pbVar5; + uint *puVar6; + uint uVar7; + uint uVar8; + undefined1 uVar9; + byte *pbVar10; + + pbVar3 = *(byte **)(param_3 + 0x10); + pbVar10 = *(byte **)(param_3 + 0x14); + if (pbVar3 != pbVar10) { + do { + bVar2 = *pbVar10; + if (bVar2 == 0x25) { + pbVar1 = pbVar10 + 1; + pbVar5 = pbVar10 + 1; + pbVar10 = pbVar10 + 2; + if (*pbVar1 != 0x23) { + pbVar10 = pbVar5; + } + uVar9 = 0; + if (*pbVar1 == 0x23) { + uVar9 = 0x23; + } + FUN_00052734(param_1,param_2,*pbVar10,uVar9,param_4,param_5); + } + else { + puVar6 = (uint *)param_1[0x10]; + uVar4 = (int)puVar6 - param_1[0x112] >> 2; + if (param_1 == (int *)param_1[0x112]) { + uVar7 = 0x10 - ((int)puVar6 - (int)param_1 >> 2); + } + else { + uVar7 = *param_1 - (int)puVar6 >> 2; + } + if (uVar7 < 2) { + uVar7 = uVar4; + if (uVar4 < 2) { + uVar7 = 1; + } + uVar8 = uVar4 + uVar7 + 1; + uVar7 = 0x3ffffffe; + if (uVar4 <= uVar8) { + uVar7 = uVar8; + } + uVar4 = 0x3ffffffe; + if (uVar8 < 0x3fffffff) { + uVar4 = uVar7; + } + FUN_000506a4(param_1,uVar4); + puVar6 = (uint *)param_1[0x10]; + } + *puVar6 = (uint)bVar2; + puVar6[1] = 0; + param_1[0x10] = (int)(puVar6 + 1); + } + pbVar10 = pbVar10 + 1; + } while (pbVar10 != pbVar3); + } + return; +} + + + +### FUNC FUN_0005473c @ 0005473c + +int * FUN_0005473c(int *param_1,int *param_2,int *param_3) + +{ + int *piVar1; + int iVar2; + int *piVar3; + int *piVar4; + undefined4 uVar5; + int *piVar6; + uint uVar7; + int *piVar8; + uint uVar9; + uint uVar10; + int *piVar11; + uint local_18; + + if (param_2 != param_3) { + piVar6 = (int *)param_1[0x112]; + piVar1 = param_1 + 0x112; + iVar2 = (int)param_3 - (int)param_2; + uVar9 = iVar2 >> 2; + if (piVar6 == param_1) { + piVar3 = (int *)param_1[0x10]; + uVar7 = 0x10 - ((int)piVar3 - (int)param_1 >> 2); + } + else { + piVar3 = (int *)param_1[0x10]; + uVar7 = *param_1 - (int)piVar3 >> 2; + } + piVar8 = param_1 + 0x10; + if (uVar9 < uVar7) { + piVar1 = param_2 + 1; + *piVar3 = *param_2; + if (piVar1 != param_3) { + __aeabi_memcpy(piVar3 + 1,piVar1,(int)param_3 - (int)piVar1); + piVar3 = (int *)*piVar8; + } + piVar3[uVar9] = 0; + *piVar8 = (int)(piVar3 + uVar9); + } + else { + uVar7 = (int)piVar3 - (int)piVar6 >> 2; + if (0x3ffffffe - uVar7 < uVar9) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + uVar10 = uVar7; + if (uVar7 <= uVar9) { + uVar10 = uVar9; + } + uVar10 = uVar7 + uVar10 + 1; + uVar9 = 0x3ffffffe; + if (uVar7 <= uVar10) { + uVar9 = uVar10; + } + uVar7 = 0x3ffffffe; + if (uVar10 < 0x3fffffff) { + uVar7 = uVar9; + } + if (uVar7 >> 1 < 0x81) { + piVar4 = param_1 + 0x11; + } + else { + if (0x3fffffff < uVar7) { + FUN_00030824(4); + uVar5 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar5,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); + } + local_18 = uVar7 << 2; + if (local_18 < 0x81) { + piVar4 = (int *)std::__node_alloc::_M_allocate(&local_18); + } + else { + piVar4 = (int *)operator_new(local_18); + } + piVar3 = (int *)*piVar8; + piVar6 = (int *)*piVar1; + } + piVar11 = piVar4; + if (piVar3 != piVar6) { + __aeabi_memcpy(piVar4,piVar6,(int)piVar3 - (int)piVar6); + piVar11 = (int *)((int)piVar4 + ((int)piVar3 - (int)piVar6)); + } + __aeabi_memcpy(piVar11,param_2,iVar2); + *(undefined4 *)((int)piVar11 + iVar2) = 0; + piVar6 = (int *)*piVar1; + if (((piVar6 != param_1) && (piVar6 != (int *)0x0)) && (param_1 + 0x11 != piVar6)) { + if ((uint)(*param_1 - (int)piVar6) < 0x81) { + std::__node_alloc::_M_deallocate(piVar6,*param_1 - (int)piVar6); + } + else { + operator_delete(piVar6); + } + } + *param_1 = (int)(piVar4 + uVar7); + *piVar8 = (int)piVar11 + iVar2; + *piVar1 = (int)piVar4; + } + } + return param_1; +} + + + +### FUNC FUN_0005489c @ 0005489c + +void FUN_0005489c(undefined4 *param_1,undefined4 param_2,locale *param_3) + +{ + int *piVar1; + int iVar2; + void *pvVar3; + undefined1 auStack_28 [8]; + undefined4 local_20; + locale alStack_1c [4]; + undefined1 auStack_18 [4]; + + piVar1 = (int *)std::locale::_M_use_facet(param_3,(id *)&std::ctype::id); + iVar2 = FUN_00031886(*(undefined4 *)(*piVar1 + -4),&std::ctype::typeinfo); + if (iVar2 == 1) { + pvVar3 = (void *)*param_1; + if (pvVar3 == (void *)0x0) { + pvVar3 = operator_new(0x1c); + FUN_0005529c(pvVar3,0,&local_20,auStack_28,auStack_18); + *param_1 = pvVar3; + } + local_20 = param_2; + std::locale::locale(alStack_1c,param_3); + FUN_0005536c(auStack_28,pvVar3,&local_20); + std::locale::~locale(alStack_1c); + return; + } + return; +} + + + +### FUNC FUN_00054940 @ 00054940 + +void FUN_00054940(int *param_1,undefined4 param_2) + +{ + undefined4 local_c; + + if (*param_1 != 0) { + local_c = param_2; + FUN_00055706(*param_1,&local_c); + } + return; +} + + + +### FUNC FUN_00054958 @ 00054958 + +void FUN_00054958(locale *param_1,int *param_2,int param_3) + +{ + int iVar1; + locale *plVar2; + int extraout_r1; + int *piVar3; + int iVar4; + + iVar1 = *param_2; + if (iVar1 != 0) { + iVar4 = *(int *)(iVar1 + 8); + __aeabi_uidivmod(param_3,(*(int *)(iVar1 + 0xc) - iVar4 >> 2) + -1); + for (piVar3 = *(int **)(iVar4 + extraout_r1 * 4); + (int *)*(int *)(iVar4 + extraout_r1 * 4 + 4) != piVar3; piVar3 = (int *)*piVar3) { + if (piVar3[1] == param_3) { + if (piVar3 != (int *)0x0) { + plVar2 = (locale *)(piVar3 + 2); + goto LAB_000549a0; + } + break; + } + } + } + plVar2 = (locale *)std::locale::classic(); +LAB_000549a0: + std::locale::locale(param_1,plVar2); + return; +} + + + +### FUNC FUN_000549ac @ 000549ac + +int * FUN_000549ac(int *param_1,int param_2,char *param_3) + +{ + int iVar1; + undefined4 *puVar2; + undefined1 auStack_11c [256]; + int local_1c; + char *local_18; + + *param_1 = 0; + param_1[1] = 0; + local_18 = param_3; + if (param_3 == (char *)0x0) { + std::locale::_M_throw_on_null_name(); + } + else { + iVar1 = FUN_0004a4bc(&local_18,auStack_11c,0,&local_1c); + *param_1 = iVar1; + if (iVar1 != 0) { + if (param_2 == 1) { + puVar2 = (undefined4 *)operator_new(4); + *puVar2 = 0; + param_1[1] = (int)puVar2; + } + return param_1; + } + } + std::locale::_M_throw_on_creation_failure(local_1c,local_18,"messages"); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(); +} + + + +### FUNC FUN_00054a08 @ 00054a08 + +undefined4 * FUN_00054a08(undefined4 *param_1,int param_2,undefined4 param_3) + +{ + undefined4 *puVar1; + + *param_1 = param_3; + puVar1 = (undefined4 *)0x0; + if (param_2 == 1) { + puVar1 = (undefined4 *)operator_new(4); + *puVar1 = 0; + } + param_1[1] = puVar1; + return param_1; +} + + + +### FUNC FUN_00054a26 @ 00054a26 + +undefined4 * FUN_00054a26(undefined4 *param_1) + +{ + undefined4 *puVar1; + void *pvVar2; + + FUN_0004a824(*param_1); + puVar1 = (undefined4 *)param_1[1]; + if (puVar1 != (undefined4 *)0x0) { + pvVar2 = (void *)*puVar1; + if (pvVar2 != (void *)0x0) { + FUN_000551be(pvVar2); + operator_delete(pvVar2); + } + operator_delete(puVar1); + } + return param_1; +} + + + +### FUNC FUN_00054aa6 @ 00054aa6 + +void FUN_00054aa6(undefined4 param_1,int *param_2,int param_3,undefined4 param_4,undefined4 param_5, + int param_6) + +{ + undefined4 uVar1; + undefined1 auStack_18 [4]; + + if ((-1 < param_3) && (*param_2 != 0)) { + uVar1 = FUN_0004df40(*param_2,param_3,param_4,param_5,*(undefined4 *)(param_6 + 0x14)); + FUN_00031c38(param_1,uVar1,auStack_18); + return; + } + FUN_00036f1c(param_1); + return; +} + + + +### FUNC FUN_00054aec @ 00054aec + +void FUN_00054aec(undefined4 param_1,undefined4 *param_2,int param_3,undefined4 param_4, + undefined4 param_5,undefined4 param_6) + +{ + int *piVar1; + int iVar2; + locale *plVar3; + char *__s; + size_t sVar4; + char *pcVar5; + int extraout_r1; + int *piVar6; + int iVar7; + uint uVar8; + int *piVar9; + int local_60 [16]; + int *local_20; + int *local_1c; + uint local_18; + + iVar2 = *(int *)param_2[1]; + if (iVar2 != 0) { + iVar7 = *(int *)(iVar2 + 8); + __aeabi_uidivmod(param_3,(*(int *)(iVar2 + 0xc) - iVar7 >> 2) + -1); + for (piVar6 = *(int **)(iVar7 + extraout_r1 * 4); + (int *)*(int *)(iVar7 + extraout_r1 * 4 + 4) != piVar6; piVar6 = (int *)*piVar6) { + if (piVar6[1] == param_3) { + if (piVar6 != (int *)0x0) { + plVar3 = (locale *)(piVar6 + 2); + goto LAB_00054b3c; + } + break; + } + } + } + plVar3 = (locale *)std::locale::classic(); +LAB_00054b3c: + std::locale::locale((locale *)local_60,plVar3); + piVar6 = (int *)std::locale::_M_use_facet((locale *)local_60,(id *)&std::ctype::id); + std::locale::~locale((locale *)local_60); + __s = (char *)FUN_0004df40(*param_2,param_3,param_4,param_5,&DAT_0006478a); + if ((__s == (char *)0x0) || + ((*__s == '\0' && + ((pcVar5 = (char *)FUN_0004df40(*param_2,param_3,param_4,param_5,&LAB_00054cb4), + pcVar5 == (char *)0x0 || ((*pcVar5 == '*' && (pcVar5[1] == '\0')))))))) { + FUN_0004bac8(param_1,param_6); + } + else { + sVar4 = strlen(__s); + local_20 = local_60; + local_1c = local_20; + if (0x3ffffffe < sVar4) { + /* WARNING: Subroutine does not return */ + std::__stl_throw_length_error("basic_string"); + } + if (0x10 < sVar4 + 1) { + uVar8 = (sVar4 + 1) * 4; + local_18 = uVar8; + if (uVar8 < 0x81) { + local_1c = (int *)std::__node_alloc::_M_allocate(&local_18); + uVar8 = local_18; + } + else { + local_1c = (int *)operator_new(uVar8); + } + local_60[0] = (int)local_1c + (uVar8 & 0xfffffffc); + } + piVar9 = local_1c + sVar4; + if (0 < (int)(sVar4 * 4)) { + uVar8 = sVar4 ^ 0xffffffff; + if ((int)(sVar4 ^ 0xffffffff) < -1) { + uVar8 = 0xfffffffe; + } + local_20 = local_1c; + __aeabi_memclr4(local_1c,(sVar4 + uVar8) * 4 + 8); + } + piVar1 = local_1c; + local_20 = piVar9; + *piVar9 = 0; + (**(code **)(*piVar6 + 0x2c))(piVar6,__s,__s + sVar4,piVar1); + FUN_0004bac8(param_1,local_60); + if ((local_1c != local_60) && (local_1c != (int *)0x0)) { + if (0x80 < (uint)(local_60[0] - (int)local_1c)) { + operator_delete(local_1c); + return; + } + std::__node_alloc::_M_deallocate(local_1c,local_60[0] - (int)local_1c); + return; + } + } + return; +} + + + +### FUNC FUN_00054cc0 @ 00054cc0 + +void FUN_00054cc0(int *param_1,undefined4 param_2) + +{ + int iVar1; + undefined4 local_14; + + if (*param_1 != 0) { + FUN_0004df3e(*param_1,param_2); + } + if ((int *)param_1[1] != (int *)0x0) { + iVar1 = *(int *)param_1[1]; + if (iVar1 != 0) { + local_14 = param_2; + FUN_00055706(iVar1,&local_14); + } + } + return; +} + + + +### FUNC messages @ 00054cf0 + +/* std::messages::messages(unsigned int) */ + +messages * __thiscall std::messages::messages(messages *this,uint param_1) + +{ + *(uint *)(this + 4) = (uint)(param_1 != 0); + pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)this = &PTR__facet_0006a268; + return this; +} + + + +### FUNC messages_byname @ 00054d1c + +/* std::messages_byname::messages_byname(char const*, unsigned int) */ + +void __thiscall +std::messages_byname::messages_byname(messages_byname *this,char *param_1,uint param_2) + +{ + int *piVar1; + int iVar2; + undefined4 uVar3; + undefined1 auStack_11c [256]; + int local_1c; + char *local_18; + + *(uint *)(this + 4) = (uint)(param_2 != 0); + pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)this = &PTR__messages_byname_0006a284; + piVar1 = (int *)operator_new(0xc); + *piVar1 = 0; + piVar1[1] = 0; + local_18 = param_1; + if (param_1 == (char *)0x0) { + locale::_M_throw_on_null_name(); + } + else { + iVar2 = FUN_0004a4bc(&local_18,auStack_11c,0,&local_1c); + *piVar1 = iVar2; + if (iVar2 != 0) { + *(int **)(this + 0xc) = piVar1; + return; + } + } + uVar3 = locale::_M_throw_on_creation_failure(local_1c,local_18,"messages"); + operator_delete(piVar1); + locale::facet::~facet((facet *)this); + /* WARNING: Subroutine does not return */ + ___Unwind_Resume(uVar3); +} + + + +### FUNC messages_byname @ 00054dac + +/* std::messages_byname::messages_byname(_Locale_messages*) */ + +messages_byname * __thiscall +std::messages_byname::messages_byname(messages_byname *this,_Locale_messages *param_1) + +{ + undefined4 *puVar1; + + *(undefined4 *)(this + 4) = 0; + pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)this = &PTR__messages_byname_0006a284; + puVar1 = (undefined4 *)operator_new(0xc); + *puVar1 = param_1; + puVar1[1] = 0; + *(undefined4 **)(this + 0xc) = puVar1; + return this; +} + + + +### FUNC ~messages_byname @ 00054df0 + +/* std::messages_byname::~messages_byname() */ + +void __thiscall std::messages_byname::~messages_byname(messages_byname *this) + +{ + void *pvVar1; + + *(undefined ***)this = &PTR__messages_byname_0006a284; + pvVar1 = *(void **)(this + 0xc); + if (pvVar1 != (void *)0x0) { + FUN_00054a26(pvVar1); + operator_delete(pvVar1); + } + locale::facet::~facet((facet *)this); + return; +} + + + +### FUNC ~messages_byname @ 00054e3c + +/* std::messages_byname::~messages_byname() */ + +void __thiscall std::messages_byname::~messages_byname(messages_byname *this) + +{ + void *pvVar1; + + *(undefined ***)this = &PTR__messages_byname_0006a284; + pvVar1 = *(void **)(this + 0xc); + if (pvVar1 != (void *)0x0) { + FUN_00054a26(pvVar1); + operator_delete(pvVar1); + } + locale::facet::~facet((facet *)this); + operator_delete(this); + return; +} + + + +### FUNC do_open @ 00054e98 + +/* std::messages_byname::do_open(std::string const&, std::locale const&) const */ + +int __thiscall +std::messages_byname::do_open(messages_byname *this,string *param_1,locale *param_2) + +{ + int iVar1; + int iVar2; + int *piVar3; + int iVar4; + + piVar3 = *(int **)(this + 0xc); + iVar1 = *piVar3; + iVar4 = -1; + if (((iVar1 != 0) && (iVar1 = FUN_0004df38(iVar1,*(undefined4 *)(param_1 + 0x14)), iVar1 != -1)) + && (iVar2 = piVar3[1], iVar4 = iVar1, iVar2 != 0)) { + FUN_0005489c(iVar2,iVar1,param_2); + } + return iVar4; +} + + + +### FUNC do_get @ 00054ece + +/* std::messages_byname::do_get(int, int, int, std::string const&) const */ + +void std::messages_byname::do_get(int param_1,int param_2,int param_3,string *param_4) + +{ + undefined4 uVar1; + undefined4 in_stack_00000000; + int in_stack_00000004; + undefined1 auStack_18 [4]; + + if ((-1 < param_3) && (**(int **)(param_2 + 0xc) != 0)) { + uVar1 = FUN_0004df40(**(int **)(param_2 + 0xc),param_3,param_4,in_stack_00000000, + *(undefined4 *)(in_stack_00000004 + 0x14)); + FUN_00031c38(param_1,uVar1,auStack_18); + return; + } + FUN_00036f1c(param_1); + return; +} + + + +### FUNC do_close @ 00054f14 + +/* std::messages_byname::do_close(int) const */ + +void __thiscall std::messages_byname::do_close(messages_byname *this,int param_1) + +{ + int iVar1; + int *piVar2; + int local_14; + + piVar2 = *(int **)(this + 0xc); + iVar1 = *piVar2; + if (iVar1 != 0) { + FUN_0004df3e(iVar1,param_1); + } + piVar2 = (int *)piVar2[1]; + if (piVar2 != (int *)0x0) { + iVar1 = *piVar2; + if (iVar1 != 0) { + local_14 = param_1; + FUN_00055706(iVar1,&local_14); + } + } + return; +} + + + +### FUNC messages @ 00054f44 + +/* std::messages::messages(unsigned int) */ + +messages * __thiscall +std::messages::messages(messages *this,uint param_1) + +{ + *(uint *)(this + 4) = (uint)(param_1 != 0); + pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)this = &PTR__facet_0006a2a0; + return this; +} + + + +### FUNC messages_byname @ 00054f70 + +/* std::messages_byname::messages_byname(char const*, unsigned int) */ + +messages_byname * __thiscall +std::messages_byname::messages_byname + (messages_byname *this,char *param_1,uint param_2) + +{ + void *pvVar1; + + *(uint *)(this + 4) = (uint)(param_2 != 0); + pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)this = &PTR__messages_byname_0006a2bc; + pvVar1 = operator_new(0xc); + FUN_000549ac(pvVar1,1,param_1); + *(void **)(this + 0xc) = pvVar1; + return this; +} + + + +### FUNC messages_byname @ 00054fd4 + +/* std::messages_byname::messages_byname(_Locale_messages*) */ + +messages_byname * __thiscall +std::messages_byname::messages_byname + (messages_byname *this,_Locale_messages *param_1) + +{ + undefined4 *puVar1; + undefined4 *puVar2; + + *(undefined4 *)(this + 4) = 0; + pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); + *(undefined ***)this = &PTR__messages_byname_0006a2bc; + puVar1 = (undefined4 *)operator_new(0xc); + *puVar1 = param_1; + puVar2 = (undefined4 *)operator_new(4); + *puVar2 = 0; + puVar1[1] = puVar2; + *(undefined4 **)(this + 0xc) = puVar1; + return this; +} + + + +### FUNC ~messages_byname @ 00055030 + +/* std::messages_byname::~messages_byname() */ + +void __thiscall std::messages_byname::~messages_byname(messages_byname *this) + +{ + void *pvVar1; + + *(undefined ***)this = &PTR__messages_byname_0006a2bc; + pvVar1 = *(void **)(this + 0xc); + if (pvVar1 != (void *)0x0) { + FUN_00054a26(pvVar1); + operator_delete(pvVar1); + } + locale::facet::~facet((facet *)this); + return; +} + + + +### FUNC ~messages_byname @ 0005507c + +/* std::messages_byname::~messages_byname() */ + +void __thiscall std::messages_byname::~messages_byname(messages_byname *this) + +{ + void *pvVar1; + + *(undefined ***)this = &PTR__messages_byname_0006a2bc; + pvVar1 = *(void **)(this + 0xc); + if (pvVar1 != (void *)0x0) { + FUN_00054a26(pvVar1); + operator_delete(pvVar1); + } + locale::facet::~facet((facet *)this); + operator_delete(this); + return; +} + + + +### FUNC do_open @ 000550d8 + +/* std::messages_byname::do_open(std::string const&, std::locale const&) const */ + +int __thiscall +std::messages_byname::do_open + (messages_byname *this,string *param_1,locale *param_2) + +{ + int iVar1; + int iVar2; + int *piVar3; + int iVar4; + + piVar3 = *(int **)(this + 0xc); + iVar1 = *piVar3; + iVar4 = -1; + if (((iVar1 != 0) && (iVar1 = FUN_0004df38(iVar1,*(undefined4 *)(param_1 + 0x14)), iVar1 != -1)) + && (iVar2 = piVar3[1], iVar4 = iVar1, iVar2 != 0)) { + FUN_0005489c(iVar2,iVar1,param_2); + } + return iVar4; +} + + + +### FUNC do_get @ 0005510e + +/* std::messages_byname::do_get(int, int, int, std::wstring const&) const */ + +void std::messages_byname::do_get(int param_1,int param_2,int param_3,wstring *param_4) + +{ + FUN_00054aec(param_1,*(undefined4 *)(param_2 + 0xc)); + return; +} + + + +### FUNC do_close @ 00055128 + +/* std::messages_byname::do_close(int) const */ + +void __thiscall std::messages_byname::do_close(messages_byname *this,int param_1) + +{ + int iVar1; + int *piVar2; + int local_14; + + piVar2 = *(int **)(this + 0xc); + iVar1 = *piVar2; + if (iVar1 != 0) { + FUN_0004df3e(iVar1,param_1); + } + piVar2 = (int *)piVar2[1]; + if (piVar2 != (int *)0x0) { + iVar1 = *piVar2; + if (iVar1 != 0) { + local_14 = param_1; + FUN_00055706(iVar1,&local_14); + } + } + return; +} + + + +### FUNC FUN_00055156 @ 00055156 + +void FUN_00055156(facet *param_1) + +{ + std::locale::facet::~facet(param_1); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_0005517c @ 0005517c + +void FUN_0005517c(undefined4 param_1) + +{ + undefined4 in_stack_00000004; + + FUN_00036f1c(param_1,in_stack_00000004); + return; +} + + + +### FUNC FUN_0005518a @ 0005518a + +void FUN_0005518a(facet *param_1) + +{ + std::locale::facet::~facet(param_1); + operator_delete(param_1); + return; +} + + + +### FUNC FUN_000551b0 @ 000551b0 + +void FUN_000551b0(undefined4 param_1) + +{ + undefined4 in_stack_00000004; + + FUN_0004bac8(param_1,in_stack_00000004); + return; +} + + + +### FUNC FUN_000551be @ 000551be + +int FUN_000551be(int param_1) + +{ + undefined4 *puVar1; + uint uVar2; + void *pvVar3; + undefined4 local_18; + + puVar1 = (undefined4 *)*(void **)(param_1 + 4); + while (puVar1 != (undefined4 *)0x0) { + pvVar3 = (void *)*puVar1; + std::locale::~locale((locale *)(puVar1 + 2)); + std::__node_alloc::_M_deallocate(puVar1,0xc); + puVar1 = (undefined4 *)pvVar3; + } + *(undefined4 *)(param_1 + 4) = 0; + local_18 = 0; + FUN_0004aa50(param_1 + 8,*(int *)(param_1 + 0xc) - *(int *)(param_1 + 8) >> 2,&local_18); + *(undefined4 *)(param_1 + 0x14) = 0; + pvVar3 = *(void **)(param_1 + 8); + if (pvVar3 != (void *)0x0) { + uVar2 = *(int *)(param_1 + 0x10) - (int)pvVar3; + if (uVar2 < 0x81) { + std::__node_alloc::_M_deallocate(pvVar3,uVar2); + } + else { + operator_delete(pvVar3); + } + } + puVar1 = (undefined4 *)*(void **)(param_1 + 4); + while (puVar1 != (undefined4 *)0x0) { + pvVar3 = (void *)*puVar1; + std::locale::~locale((locale *)(puVar1 + 2)); + std::__node_alloc::_M_deallocate(puVar1,0xc); + puVar1 = (undefined4 *)pvVar3; + } + *(undefined4 *)(param_1 + 4) = 0; + return param_1; +} + + + +### FUNC FUN_0005529c @ 0005529c + +int FUN_0005529c(int param_1,uint param_2) + +{ + int *piVar1; + int iVar2; + int *piVar3; + uint uVar4; + uint uVar5; + undefined4 local_18; + + *(undefined4 *)(param_1 + 4) = 0; + *(undefined4 *)(param_1 + 8) = 0; + *(undefined4 *)(param_1 + 0xc) = 0; + *(undefined4 *)(param_1 + 0x10) = 0; + *(undefined4 *)(param_1 + 0x14) = 0; + *(undefined4 *)(param_1 + 0x18) = 0x3f800000; + piVar1 = &DAT_0006537c; + uVar5 = 0x1e; + while (uVar4 = uVar5, 0 < (int)uVar4) { + uVar5 = uVar4 >> 1; + if ((uint)piVar1[uVar5] < param_2) { + piVar1 = piVar1 + uVar5 + 1; + uVar5 = (uVar4 - 1) - uVar5; + } + } + piVar3 = &DAT_000653f0; + if (piVar1 != (int *)&DAT_000653f4) { + piVar3 = piVar1; + } + iVar2 = *piVar3; + FUN_0004a990(param_1 + 8,iVar2 + 1); + local_18 = 0; + FUN_0004aa50(param_1 + 8,iVar2 + 1,&local_18); + return param_1; +} + + + +### FUNC FUN_0005536c @ 0005536c + +void FUN_0005536c(undefined4 param_1,int param_2,undefined4 param_3) + +{ + int iVar1; + undefined4 uVar2; + uint uVar3; + undefined4 *puVar4; + int iVar5; + undefined4 *puVar6; + uint uVar7; + uint uVar8; + + iVar1 = *(int *)(param_2 + 8); + iVar5 = *(int *)(param_2 + 0xc); + uVar2 = __floatunsisf(*(int *)(param_2 + 0x14) + 1); + __divsf3(uVar2,*(undefined4 *)(param_2 + 0x18)); + uVar3 = __fixunssfsi(); + if ((iVar5 - iVar1 >> 2) - 1U < uVar3) { + puVar6 = &DAT_0006537c; + uVar8 = 0x1e; + while (uVar7 = uVar8, 0 < (int)uVar7) { + uVar8 = uVar7 >> 1; + if ((uint)puVar6[uVar8] < uVar3) { + puVar6 = puVar6 + uVar8 + 1; + uVar8 = (uVar7 - 1) - uVar8; + } + } + puVar4 = &DAT_000653f0; + if (puVar6 != (undefined4 *)&DAT_000653f4) { + puVar4 = puVar6; + } + FUN_00055480(param_2,*puVar4); + } + FUN_000553e8(param_1,param_2,param_3); + return; +} + + + +### FUNC FUN_000553e8 @ 000553e8 + +void FUN_000553e8(undefined4 *param_1,int param_2,int *param_3) + +{ + undefined4 *puVar1; + int extraout_r1; + undefined4 *puVar2; + undefined4 *puVar3; + int iVar4; + int iVar5; + undefined4 local_1c; + uint local_18; + + iVar5 = *(int *)(param_2 + 8); + iVar4 = *param_3; + __aeabi_uidivmod(iVar4,(*(int *)(param_2 + 0xc) - iVar5 >> 2) + -1); + puVar3 = *(undefined4 **)(iVar5 + extraout_r1 * 4); + puVar1 = *(undefined4 **)(iVar5 + extraout_r1 * 4 + 4); + puVar2 = puVar3; + if (puVar3 == puVar1) { + FUN_0005564c(&local_1c,param_2,extraout_r1,param_3); + *(undefined1 *)(param_1 + 1) = 1; + *param_1 = local_1c; + return; + } + do { + if (puVar2[1] == iVar4) { + *(undefined1 *)(param_1 + 1) = 0; + *param_1 = puVar2; + return; + } + puVar2 = (undefined4 *)*puVar2; + } while (puVar1 != puVar2); + local_18 = 0xc; + puVar2 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18); + puVar2[1] = *param_3; + std::locale::locale((locale *)(puVar2 + 2),(locale *)(param_3 + 1)); + *puVar2 = 0; + *puVar2 = *puVar3; + *puVar3 = puVar2; + *(int *)(param_2 + 0x14) = *(int *)(param_2 + 0x14) + 1; + *(undefined1 *)(param_1 + 1) = 1; + *param_1 = puVar2; + return; +} + + + +### FUNC FUN_00055480 @ 00055480 + +void FUN_00055480(int param_1,int param_2) + +{ + uint uVar1; + uint uVar2; + void *pvVar3; + int *****pppppiVar4; + void *pvVar5; + undefined4 uVar6; + int extraout_r1; + int *****pppppiVar7; + int *****pppppiVar8; + undefined4 *puVar9; + int iVar10; + int *****pppppiVar11; + int ****ppppiVar12; + int *****pppppiVar13; + int ****ppppiVar14; + int *****pppppiVar15; + int *****pppppiVar16; + void *local_3c; + int local_38; + void *local_20; + int ****local_1c; + uint local_18; + + local_20 = (void *)0x0; + local_1c = (int ****)0x0; + pppppiVar13 = (int *****)(param_1 + 4); + uVar1 = param_2 + 1; + if (uVar1 >> 0x1e == 0) { + if (uVar1 == 0) { + local_38 = 0; + local_3c = (void *)0x0; + } + else { + uVar1 = uVar1 * 4; + local_18 = uVar1; + if (uVar1 < 0x81) { + local_20 = (void *)std::__node_alloc::_M_allocate(&local_18); + uVar2 = local_18; + } + else { + local_20 = operator_new(uVar1); + uVar2 = uVar1; + } + local_3c = (void *)((int)local_20 + uVar1); + local_38 = (int)local_20 + (uVar2 & 0xfffffffc); + if (0 < (int)uVar1) { + iVar10 = -2 - param_2; + if (-2 - param_2 < -1) { + iVar10 = -2; + } + __aeabi_memclr4(local_20,(iVar10 + param_2) * 4 + 0xc); + } + } + while (pppppiVar16 = (int *****)*pppppiVar13, pppppiVar16 != (int *****)0x0) { + ppppiVar14 = pppppiVar16[1]; + __aeabi_uidivmod(ppppiVar14,param_2); + pppppiVar11 = pppppiVar16; + for (ppppiVar12 = *pppppiVar16; + (ppppiVar12 != (int ****)0x0 && (ppppiVar14 == (int ****)ppppiVar12[1])); + ppppiVar12 = (int ****)*ppppiVar12) { + pppppiVar11 = (int *****)*pppppiVar11; + } + pppppiVar15 = *(int ******)((int)local_20 + extraout_r1 * 4); + pvVar3 = (void *)((int)local_20 + extraout_r1 * 4); + iVar10 = 0; + pvVar5 = pvVar3; + pppppiVar7 = &local_1c; + if (pppppiVar15 != (int *****)local_1c) { + do { + pppppiVar7 = *(int ******)((int)pvVar5 + -4); + pvVar5 = (void *)((int)pvVar5 + -4); + } while (pppppiVar15 == pppppiVar7); + iVar10 = ((int)pvVar5 - (int)local_20 >> 2) + 1; + pppppiVar4 = (int *****)*pppppiVar7; + if ((pppppiVar15 != pppppiVar4) && + (pppppiVar8 = (int *****)*pppppiVar4, pppppiVar7 = pppppiVar4, pppppiVar15 != pppppiVar8) + ) { + for (pppppiVar4 = (int *****)*pppppiVar8; pppppiVar7 = pppppiVar8, + pppppiVar15 != pppppiVar4; pppppiVar4 = (int *****)*pppppiVar4) { + pppppiVar8 = (int *****)*pppppiVar8; + } + } + } + if (((pppppiVar13 != pppppiVar11) && (pppppiVar13 != pppppiVar7)) && + (pppppiVar7 != pppppiVar11)) { + ppppiVar12 = *pppppiVar7; + *pppppiVar13 = *pppppiVar11; + *pppppiVar7 = (int ****)pppppiVar16; + *pppppiVar11 = ppppiVar12; + } + puVar9 = (undefined4 *)((int)local_20 + iVar10 * 4); + uVar1 = (int)pvVar3 + (4 - (int)puVar9); + if (0 < (int)uVar1) { + iVar10 = (uVar1 >> 2) + 1; + do { + *puVar9 = pppppiVar16; + puVar9 = puVar9 + 1; + iVar10 = iVar10 + -1; + } while (1 < iVar10); + } + } + *(int *****)(param_1 + 4) = local_1c; + *(void **)(param_1 + 0xc) = local_3c; + pvVar5 = *(void **)(param_1 + 8); + *(void **)(param_1 + 8) = local_20; + iVar10 = *(int *)(param_1 + 0x10); + *(int *)(param_1 + 0x10) = local_38; + local_1c = (int ****)pppppiVar16; + if (pvVar5 != (void *)0x0) { + uVar1 = iVar10 - (int)pvVar5; + if (uVar1 < 0x81) { + std::__node_alloc::_M_deallocate(pvVar5,uVar1); + pppppiVar16 = (int *****)local_1c; + } + else { + operator_delete(pvVar5); + pppppiVar16 = (int *****)local_1c; + } + } + while (pppppiVar16 != (int *****)0x0) { + pppppiVar13 = (int *****)*pppppiVar16; + std::locale::~locale((locale *)(pppppiVar16 + 2)); + std::__node_alloc::_M_deallocate(pppppiVar16,0xc); + pppppiVar16 = pppppiVar13; + } + return; + } + FUN_00030824(4); + uVar6 = FUN_00031390(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar6,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); +} + + + +### FUNC FUN_0005564c @ 0005564c + +void FUN_0005564c(undefined4 *param_1,int param_2,int param_3,undefined4 *param_4) + +{ + int iVar1; + undefined4 *puVar2; + uint uVar3; + int iVar4; + undefined4 *puVar5; + undefined4 *puVar6; + undefined4 *puVar7; + int local_30; + uint local_18; + + param_3 = param_3 * 4; + iVar4 = *(int *)(param_2 + 8); + puVar5 = *(undefined4 **)(iVar4 + param_3); + iVar1 = iVar4 + param_3; + if (puVar5 == *(undefined4 **)(param_2 + 4)) { + local_30 = 0; + puVar6 = (undefined4 *)(param_2 + 4); + } + else { + do { + puVar6 = *(undefined4 **)(iVar1 + -4); + iVar1 = iVar1 + -4; + } while (puVar5 == puVar6); + local_30 = (iVar1 - iVar4 >> 2) + 1; + puVar2 = (undefined4 *)*puVar6; + if (((puVar5 != puVar2) && (puVar7 = (undefined4 *)*puVar2, puVar6 = puVar2, puVar5 != puVar7)) + && (puVar2 = (undefined4 *)*puVar7, puVar6 = puVar7, puVar5 != puVar2)) { + puVar6 = puVar2; + for (puVar7 = (undefined4 *)*puVar2; puVar5 != puVar7; puVar7 = (undefined4 *)*puVar7) { + puVar6 = (undefined4 *)*puVar6; + } + } + } + local_18 = 0xc; + puVar5 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18); + puVar5[1] = *param_4; + std::locale::locale((locale *)(puVar5 + 2),(locale *)(param_4 + 1)); + *puVar5 = 0; + *puVar5 = *puVar6; + *puVar6 = puVar5; + puVar6 = (undefined4 *)(iVar4 + local_30 * 4); + uVar3 = (iVar4 + param_3 + 4) - (int)puVar6; + if (0 < (int)uVar3) { + iVar1 = (uVar3 >> 2) + 1; + do { + *puVar6 = puVar5; + puVar6 = puVar6 + 1; + iVar1 = iVar1 + -1; + } while (1 < iVar1); + } + *(int *)(param_2 + 0x14) = *(int *)(param_2 + 0x14) + 1; + *param_1 = *(undefined4 *)(*(int *)(param_2 + 8) + param_3); + return; +} + + + +### FUNC FUN_00055706 @ 00055706 + +int FUN_00055706(int param_1,int *param_2) + +{ + int iVar1; + int *piVar2; + int extraout_r1; + int *piVar3; + uint uVar4; + int iVar5; + int iVar6; + int iVar7; + undefined4 *puVar8; + int *piVar9; + int iVar10; + int *piVar11; + int *piVar12; + int local_2c; + + iVar10 = *(int *)(param_1 + 8); + iVar7 = *param_2; + __aeabi_uidivmod(iVar7,(*(int *)(param_1 + 0xc) - iVar10 >> 2) + -1); + iVar5 = extraout_r1 * 4; + piVar9 = *(int **)(iVar10 + iVar5); + iVar6 = iVar10 + iVar5; + piVar3 = *(int **)(iVar6 + 4); + iVar1 = 0; + if (piVar9 != piVar3) { + if (piVar9[1] != iVar7) { + piVar11 = (int *)*piVar9; + iVar1 = 0; +LAB_00055790: + if (piVar3 != piVar11) { + if (piVar11[1] != iVar7) goto LAB_0005578c; + iVar5 = 1; + do { + iVar1 = iVar5; + puVar8 = (undefined4 *)*piVar9; + piVar11 = (int *)*puVar8; + *piVar9 = (int)piVar11; + std::locale::~locale((locale *)(puVar8 + 2)); + if (puVar8 != (undefined4 *)0x0) { + std::__node_alloc::_M_deallocate(puVar8,0xc); + } + } while ((piVar3 != piVar11) && (iVar5 = iVar1 + 1, piVar11[1] == *param_2)); + } + goto LAB_0005582c; + } + if (piVar9 == *(int **)(param_1 + 4)) { + local_2c = 0; + piVar11 = (int *)(param_1 + 4); + } + else { + do { + piVar11 = *(int **)(iVar6 + -4); + iVar6 = iVar6 + -4; + } while (piVar9 == piVar11); + local_2c = (iVar6 - iVar10 >> 2) + 1; + piVar2 = (int *)*piVar11; + if (((piVar9 != piVar2) && (piVar12 = (int *)*piVar2, piVar11 = piVar2, piVar9 != piVar12)) && + (piVar2 = (int *)*piVar12, piVar11 = piVar12, piVar9 != piVar2)) { + piVar11 = piVar2; + for (piVar12 = (int *)*piVar2; piVar9 != piVar12; piVar12 = (int *)*piVar12) { + piVar11 = (int *)*piVar11; + } + } + } + iVar6 = 1; + do { + iVar1 = iVar6; + puVar8 = (undefined4 *)*piVar11; + piVar9 = (int *)*puVar8; + *piVar11 = (int)piVar9; + std::locale::~locale((locale *)(puVar8 + 2)); + if (puVar8 != (undefined4 *)0x0) { + std::__node_alloc::_M_deallocate(puVar8,0xc); + } + } while ((piVar3 != piVar9) && (iVar6 = iVar1 + 1, piVar9[1] == *param_2)); + puVar8 = (undefined4 *)(*(int *)(param_1 + 8) + local_2c * 4); + uVar4 = (*(int *)(param_1 + 8) + iVar5 + 4) - (int)puVar8; + if (0 < (int)uVar4) { + iVar5 = (uVar4 >> 2) + 1; + do { + *puVar8 = piVar9; + puVar8 = puVar8 + 1; + iVar5 = iVar5 + -1; + } while (1 < iVar5); + } +LAB_0005582c: + *(int *)(param_1 + 0x14) = *(int *)(param_1 + 0x14) - iVar1; + FUN_00055840(); + } + return iVar1; +LAB_0005578c: + piVar11 = (int *)*piVar11; + piVar9 = (int *)*piVar9; + goto LAB_00055790; +} + + + +### FUNC FUN_00055840 @ 00055840 + +void FUN_00055840(int param_1) + +{ + undefined4 uVar1; + undefined4 uVar2; + undefined4 uVar3; + undefined4 uVar4; + int iVar5; + uint uVar6; + uint uVar7; + char *pcVar8; + uint uVar9; + char *pcVar10; + + uVar9 = (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 8) >> 2) - 1; + uVar1 = __floatunsisf(*(undefined4 *)(param_1 + 0x14)); + uVar2 = __floatunsisf(uVar9); + uVar2 = __divsf3(uVar1,uVar2); + uVar3 = *(undefined4 *)(param_1 + 0x18); + uVar4 = __mulsf3(uVar3,0x3e800000); + iVar5 = __aeabi_fcmpgt(uVar2,uVar4); + if (iVar5 == 0) { + iVar5 = 0; + uVar7 = 0x1e; + while (uVar6 = uVar7, 0 < (int)uVar6) { + uVar7 = uVar6 >> 1; + if ((uint)(&DAT_0006537c)[uVar7 + iVar5] < uVar9) { + iVar5 = uVar7 + iVar5 + 1; + uVar7 = (uVar6 - 1) - uVar7; + } + } + pcVar8 = (char *)(&DAT_0006537c + iVar5); + if ((iVar5 * 4 == 0x78) || ((iVar5 != 0 && ((&DAT_0006537c)[iVar5] == uVar9)))) { + pcVar8 = "St7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE" + iVar5 * 4 + 0x38; + } + if (pcVar8 == "\a") { + if (uVar9 < 8) { + return; + } + pcVar8 = "\a"; + } + else { + uVar2 = __floatunsisf(*(undefined4 *)(pcVar8 + -4)); + uVar2 = __divsf3(uVar1,uVar2); + iVar5 = __aeabi_fcmpgt(uVar2,uVar3); + if (iVar5 != 0) { + return; + } + if (pcVar8 != "\x17") { + do { + pcVar10 = pcVar8 + -4; + uVar2 = __floatunsisf(*(undefined4 *)(pcVar8 + -8)); + uVar2 = __divsf3(uVar1,uVar2); + iVar5 = __aeabi_fcmpgt(uVar2,uVar3); + if (iVar5 != 0) break; + pcVar8 = pcVar10; + } while (pcVar10 != "\x17"); + } + } + FUN_00055480(param_1,*(undefined4 *)pcVar8); + } + return; +} + + + +### FUNC FUN_00055958 @ 00055958 + +void FUN_00055958(void) + +{ + undefined4 uVar1; + + FUN_00030824(4); + uVar1 = FUN_000318b0(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar1,&PTR_PTR_FUN_00031728_1_00068e38,0x318c9); +} + + + +### FUNC FUN_00055980 @ 00055980 + +void FUN_00055980(void) + +{ + undefined4 uVar1; + + FUN_00030824(4); + uVar1 = FUN_000318f4(); + /* WARNING: Subroutine does not return */ + FUN_000309e0(uVar1,&PTR_PTR_FUN_00031728_1_00068e44,0x3190d); +} + + + +### FUNC __udivsi3 @ 000559a8 + +uint __udivsi3(uint param_1,uint param_2) + +{ + uint uVar1; + uint uVar2; + uint uVar3; + bool bVar4; + + if (param_2 - 1 == 0) { + return param_1; + } + if (param_2 == 0) { + if (param_1 != 0) { + param_1 = 0xffffffff; + } + uVar1 = __aeabi_ldiv0(param_1); + return uVar1; + } + if (param_1 <= param_2) { + return (uint)(param_1 == param_2); + } + if ((param_2 & param_2 - 1) == 0) { + return param_1 >> (0x1fU - LZCOUNT(param_2) & 0xff); + } + uVar2 = param_2 << (LZCOUNT(param_2) - LZCOUNT(param_1) & 0xffU); + uVar1 = 1 << (LZCOUNT(param_2) - LZCOUNT(param_1) & 0xffU); + uVar3 = 0; + while( true ) { + if (uVar2 <= param_1) { + param_1 = param_1 - uVar2; + uVar3 = uVar3 | uVar1; + } + if (uVar2 >> 1 <= param_1) { + param_1 = param_1 - (uVar2 >> 1); + uVar3 = uVar3 | uVar1 >> 1; + } + if (uVar2 >> 2 <= param_1) { + param_1 = param_1 - (uVar2 >> 2); + uVar3 = uVar3 | uVar1 >> 2; + } + if (uVar2 >> 3 <= param_1) { + param_1 = param_1 - (uVar2 >> 3); + uVar3 = uVar3 | uVar1 >> 3; + } + bVar4 = param_1 == 0; + if (!bVar4) { + uVar1 = uVar1 >> 4; + bVar4 = uVar1 == 0; + } + if (bVar4) break; + uVar2 = uVar2 >> 4; + } + return uVar3; +} + + + +### FUNC __aeabi_uidivmod @ 00055a50 + +void __aeabi_uidivmod(int param_1,int param_2) + +{ + if (param_2 != 0) { + __udivsi3(); + return; + } + if (param_1 != 0) { + param_1 = -1; + } + __aeabi_ldiv0(param_1); + return; +} + + + +### FUNC __divsi3 @ 00055a70 + +uint __divsi3(uint param_1,uint param_2) + +{ + uint uVar1; + uint uVar2; + uint uVar3; + uint uVar4; + uint uVar5; + bool bVar6; + + if (param_2 == 0) { + bVar6 = (int)param_1 < 0; + if (0 < (int)param_1) { + param_1 = 0x7fffffff; + } + if (bVar6) { + param_1 = 0x80000000; + } + uVar1 = __aeabi_ldiv0(param_1); + return uVar1; + } + uVar5 = param_1 ^ param_2; + uVar1 = param_2; + if ((int)param_2 < 0) { + uVar1 = -param_2; + } + if (uVar1 - 1 == 0) { + if ((int)param_2 < 0) { + param_1 = -param_1; + } + return param_1; + } + uVar4 = param_1; + if ((int)param_1 < 0) { + uVar4 = -param_1; + } + if (uVar4 <= uVar1) { + if (uVar4 < uVar1) { + param_1 = 0; + } + if (uVar4 == uVar1) { + param_1 = (int)uVar5 >> 0x1f | 1; + } + return param_1; + } + if ((uVar1 & uVar1 - 1) == 0) { + uVar4 = uVar4 >> (0x1fU - LZCOUNT(uVar1) & 0xff); + if ((int)uVar5 < 0) { + uVar4 = -uVar4; + } + return uVar4; + } + uVar3 = uVar1 << (LZCOUNT(uVar1) - LZCOUNT(uVar4) & 0xffU); + uVar1 = 1 << (LZCOUNT(uVar1) - LZCOUNT(uVar4) & 0xffU); + uVar2 = 0; + while( true ) { + if (uVar3 <= uVar4) { + uVar4 = uVar4 - uVar3; + uVar2 = uVar2 | uVar1; + } + if (uVar3 >> 1 <= uVar4) { + uVar4 = uVar4 - (uVar3 >> 1); + uVar2 = uVar2 | uVar1 >> 1; + } + if (uVar3 >> 2 <= uVar4) { + uVar4 = uVar4 - (uVar3 >> 2); + uVar2 = uVar2 | uVar1 >> 2; + } + if (uVar3 >> 3 <= uVar4) { + uVar4 = uVar4 - (uVar3 >> 3); + uVar2 = uVar2 | uVar1 >> 3; + } + bVar6 = uVar4 == 0; + if (!bVar6) { + uVar1 = uVar1 >> 4; + bVar6 = uVar1 == 0; + } + if (bVar6) break; + uVar3 = uVar3 >> 4; + } + if ((int)uVar5 < 0) { + uVar2 = -uVar2; + } + return uVar2; +} + + + +### FUNC FUN_00055a78 @ 00055a78 + +uint FUN_00055a78(uint param_1,uint param_2) + +{ + uint uVar1; + uint uVar2; + uint uVar3; + uint uVar4; + uint uVar5; + bool in_NG; + bool bVar6; + + uVar5 = param_1 ^ param_2; + uVar2 = param_2; + if (in_NG) { + uVar2 = -param_2; + } + if (uVar2 - 1 == 0) { + if ((int)param_2 < 0) { + param_1 = -param_1; + } + return param_1; + } + uVar4 = param_1; + if ((int)param_1 < 0) { + uVar4 = -param_1; + } + if (uVar4 <= uVar2) { + if (uVar4 < uVar2) { + param_1 = 0; + } + if (uVar4 == uVar2) { + param_1 = (int)uVar5 >> 0x1f | 1; + } + return param_1; + } + if ((uVar2 & uVar2 - 1) == 0) { + uVar4 = uVar4 >> (0x1fU - LZCOUNT(uVar2) & 0xff); + if ((int)uVar5 < 0) { + uVar4 = -uVar4; + } + return uVar4; + } + uVar3 = uVar2 << (LZCOUNT(uVar2) - LZCOUNT(uVar4) & 0xffU); + uVar2 = 1 << (LZCOUNT(uVar2) - LZCOUNT(uVar4) & 0xffU); + uVar1 = 0; + while( true ) { + if (uVar3 <= uVar4) { + uVar4 = uVar4 - uVar3; + uVar1 = uVar1 | uVar2; + } + if (uVar3 >> 1 <= uVar4) { + uVar4 = uVar4 - (uVar3 >> 1); + uVar1 = uVar1 | uVar2 >> 1; + } + if (uVar3 >> 2 <= uVar4) { + uVar4 = uVar4 - (uVar3 >> 2); + uVar1 = uVar1 | uVar2 >> 2; + } + if (uVar3 >> 3 <= uVar4) { + uVar4 = uVar4 - (uVar3 >> 3); + uVar1 = uVar1 | uVar2 >> 3; + } + bVar6 = uVar4 == 0; + if (!bVar6) { + uVar2 = uVar2 >> 4; + bVar6 = uVar2 == 0; + } + if (bVar6) break; + uVar3 = uVar3 >> 4; + } + if ((int)uVar5 < 0) { + uVar1 = -uVar1; + } + return uVar1; +} + + + +### FUNC __aeabi_idivmod @ 00055b4c + +void __aeabi_idivmod(int param_1,int param_2) + +{ + bool bVar1; + + if (param_2 != 0) { + FUN_00055a78(); + return; + } + bVar1 = param_1 < 0; + if (0 < param_1) { + param_1 = 0x7fffffff; + } + if (bVar1) { + param_1 = -0x80000000; + } + __aeabi_ldiv0(param_1); + return; +} + + + +### FUNC __aeabi_drsub @ 00055b6c + +void __aeabi_drsub(undefined4 param_1,uint param_2) + +{ + __adddf3(param_1,param_2 ^ 0x80000000); + return; +} + + + +### FUNC __subdf3 @ 00055b74 + +ulonglong __subdf3(uint param_1,uint param_2,uint param_3,uint param_4) + +{ + int iVar1; + uint uVar2; + byte bVar3; + byte bVar4; + uint uVar5; + uint uVar6; + uint uVar7; + uint uVar8; + uint uVar9; + int iVar10; + uint uVar11; + uint uVar12; + uint uVar13; + bool bVar14; + bool bVar15; + bool bVar16; + + uVar8 = param_4 ^ 0x80000000; + uVar11 = param_2 << 1; + param_4 = param_4 << 1; + iVar10 = (int)uVar11 >> 0x15; + iVar1 = (int)param_4 >> 0x15; + if ((((uVar11 == param_4 && param_1 == param_3 || uVar11 == 0 && param_1 == 0) || + param_4 == 0 && param_3 == 0) || iVar10 == -1) || iVar1 == -1) { + if (iVar10 == -1 || iVar1 == -1) { + uVar11 = uVar8; + uVar12 = param_3; + if (iVar10 == -1) { + uVar11 = param_2; + uVar12 = param_1; + } + if (iVar10 != -1 || iVar1 != -1) { + param_3 = uVar12; + uVar8 = uVar11; + } + bVar14 = (uVar11 & 0xfffff) == 0; + bVar15 = uVar12 == 0 && bVar14; + if (uVar12 == 0 && bVar14) { + bVar15 = param_3 == 0 && (uVar8 & 0xfffff) == 0; + } + if (bVar15) { + bVar15 = uVar11 == uVar8; + } + if (!bVar15) { + uVar11 = uVar11 | 0x80000; + } + return CONCAT44(uVar11,uVar12); + } + if (uVar11 != param_4 || param_1 != param_3) { + if (uVar11 == 0 && param_1 == 0) { + param_1 = param_3; + param_2 = uVar8; + } + return CONCAT44(param_2,param_1); + } + if (param_2 != uVar8) { + return 0; + } + if (uVar11 >> 0x15 == 0) { + bVar3 = (byte)(param_1 >> 0x1f); + uVar11 = param_2 * 2 + (uint)bVar3; + if (CARRY4(param_2,param_2) || CARRY4(param_2 * 2,(uint)bVar3)) { + uVar11 = uVar11 | 0x80000000; + } + return CONCAT44(uVar11,param_1 << 1); + } + if (uVar11 < 0xffc00000) { + return CONCAT44(param_2 + 0x100000,param_1); + } + param_2 = param_2 & 0x80000000; +LAB_00055de8: + return (ulonglong)(param_2 | 0x7ff00000) << 0x20; + } + uVar11 = uVar11 >> 0x15; + param_4 = param_4 >> 0x15; + uVar12 = param_4 - uVar11; + bVar14 = uVar12 != 0; + if (param_4 < uVar11) { + uVar12 = -uVar12; + } + uVar7 = param_1; + uVar9 = param_2; + if (bVar14 && uVar11 <= param_4) { + uVar11 = uVar11 + uVar12; + uVar7 = param_3; + uVar9 = uVar8; + param_3 = param_1; + uVar8 = param_2; + } + if (0x36 < uVar12) { + return CONCAT44(uVar9,uVar7); + } + uVar6 = uVar9 & 0xfffff | 0x100000; + if ((uVar9 & 0x80000000) != 0) { + bVar14 = uVar7 != 0; + uVar7 = -uVar7; + uVar6 = -(uVar6 + bVar14); + } + uVar9 = uVar8 & 0xfffff | 0x100000; + if ((uVar8 & 0x80000000) != 0) { + bVar14 = param_3 != 0; + param_3 = -param_3; + uVar9 = -(uVar9 + bVar14); + } + if (uVar11 == uVar12) { + uVar9 = uVar9 ^ 0x100000; + if (uVar11 == 0) { + uVar6 = uVar6 ^ 0x100000; + uVar11 = 1; + } + else { + uVar12 = uVar12 - 1; + } + } + uVar8 = -uVar12 + 0x20; + if ((int)uVar12 < 0x21) { + uVar13 = param_3 << (uVar8 & 0xff); + param_3 = param_3 >> (uVar12 & 0xff); + uVar5 = uVar7 + param_3; + uVar2 = uVar9 << (uVar8 & 0xff); + uVar8 = uVar5 + uVar2; + uVar12 = uVar6 + CARRY4(uVar7,param_3) + ((int)uVar9 >> (uVar12 & 0xff)) + + (uint)CARRY4(uVar5,uVar2); + } + else { + uVar13 = uVar9 << (-uVar12 + 0x40 & 0xff); + if (param_3 != 0) { + uVar13 = uVar13 | 2; + } + uVar12 = (int)uVar9 >> (uVar12 - 0x20 & 0xff); + uVar8 = uVar7 + uVar12; + uVar12 = uVar6 + ((int)uVar9 >> 0x1f) + (uint)CARRY4(uVar7,uVar12); + } + param_2 = uVar12 & 0x80000000; + uVar7 = uVar12; + if ((int)uVar12 < 0) { + bVar14 = uVar13 == 0; + uVar13 = -uVar13; + uVar7 = -uVar8; + uVar8 = -(uVar8 + !bVar14); + uVar7 = -(uVar12 + (bVar14 <= uVar7)); + } + if (0xfffff < uVar7) { + uVar9 = uVar11 - 1; + if (0x1fffff < uVar7) { + bVar3 = (byte)uVar7; + uVar7 = uVar7 >> 1; + bVar4 = (byte)uVar8; + uVar8 = (uint)(bVar3 & 1) << 0x1f | uVar8 >> 1; + uVar13 = (uint)(bVar4 & 1) << 0x1f | uVar13 >> 1; + uVar9 = uVar11; + if (0xffbfffff < uVar11 * 0x200000) goto LAB_00055de8; + } +LAB_00055c90: + bVar14 = 0x7fffffff < uVar13; + if (uVar13 == 0x80000000) { + bVar14 = (bool)((byte)uVar8 & 1); + } + return CONCAT44(uVar7 + uVar9 * 0x100000 + (uint)CARRY4(uVar8,(uint)bVar14) | param_2, + uVar8 + bVar14); + } + bVar3 = (byte)(uVar13 >> 0x1f); + uVar13 = uVar13 << 1; + uVar9 = uVar8 * 2; + bVar14 = CARRY4(uVar8,uVar8); + uVar8 = uVar8 * 2 + (uint)bVar3; + uVar7 = uVar7 * 2 + (uint)(bVar14 || CARRY4(uVar9,(uint)bVar3)); + uVar9 = uVar11 - 2; + if ((uVar7 & 0x100000) != 0) goto LAB_00055c90; + uVar11 = uVar8; + uVar6 = uVar7; + if (uVar7 == 0) { + uVar11 = 0; + uVar6 = uVar8; + } + iVar10 = LZCOUNT(uVar6); + if (uVar7 == 0) { + iVar10 = iVar10 + 0x20; + } + uVar7 = iVar10 - 0xb; + bVar16 = SBORROW4(uVar7,0x20); + uVar8 = iVar10 - 0x2b; + bVar14 = (int)uVar8 < 0; + bVar15 = uVar8 == 0; + if ((int)uVar7 < 0x20) { + bVar16 = SCARRY4(uVar8,0xc); + iVar10 = iVar10 + -0x1f; + bVar14 = iVar10 < 0; + bVar15 = iVar10 == 0; + uVar8 = uVar7; + if (!bVar15 && bVar14 == bVar16) { + uVar11 = uVar6 << (uVar7 & 0xff); + uVar6 = uVar6 >> (0xcU - iVar10 & 0xff); + goto LAB_00055d10; + } + } + if (bVar15 || bVar14 != bVar16) { + uVar13 = 0x20 - uVar8; + } + uVar6 = uVar6 << (uVar8 & 0xff); + if (bVar15 || bVar14 != bVar16) { + uVar6 = uVar6 | uVar11 >> (uVar13 & 0xff); + uVar11 = uVar11 << (uVar8 & 0xff); + } +LAB_00055d10: + if ((int)uVar7 <= (int)uVar9) { + return CONCAT44(uVar6 + (uVar9 - uVar7) * 0x100000 | param_2,uVar11); + } + uVar8 = ~(uVar9 - uVar7); + if ((int)uVar8 < 0x1f) { + iVar10 = uVar8 - 0x13; + if (iVar10 != 0 && iVar10 < 0 == SCARRY4(uVar8 - 0x1f,0xc)) { + return CONCAT44(uVar12,uVar11 >> (0x20 - (0xcU - iVar10) & 0xff) | + uVar6 << (0xcU - iVar10 & 0xff)) & 0x80000000ffffffff; + } + uVar8 = uVar8 + 1; + return CONCAT44(param_2 | uVar6 >> (uVar8 & 0xff), + uVar11 >> (uVar8 & 0xff) | uVar6 << (0x20 - uVar8 & 0xff)); + } + return CONCAT44(uVar12,uVar6 >> (uVar8 - 0x1f & 0xff)) & 0x80000000ffffffff; +} + + + +### FUNC __adddf3 @ 00055b78 + +ulonglong __adddf3(uint param_1,uint param_2,uint param_3,uint param_4) + +{ + int iVar1; + uint uVar2; + byte bVar3; + byte bVar4; + uint uVar5; + uint uVar6; + uint uVar7; + int iVar8; + uint uVar9; + uint uVar10; + uint uVar11; + uint uVar12; + uint uVar13; + bool bVar14; + bool bVar15; + bool bVar16; + + uVar9 = param_2 << 1; + uVar6 = param_4 << 1; + iVar8 = (int)uVar9 >> 0x15; + iVar1 = (int)uVar6 >> 0x15; + if ((((uVar9 == uVar6 && param_1 == param_3 || uVar9 == 0 && param_1 == 0) || + uVar6 == 0 && param_3 == 0) || iVar8 == -1) || iVar1 == -1) { + if (iVar8 == -1 || iVar1 == -1) { + uVar9 = param_4; + uVar6 = param_3; + if (iVar8 == -1) { + uVar9 = param_2; + uVar6 = param_1; + } + if (iVar8 != -1 || iVar1 != -1) { + param_3 = uVar6; + param_4 = uVar9; + } + bVar14 = (uVar9 & 0xfffff) == 0; + bVar15 = uVar6 == 0 && bVar14; + if (uVar6 == 0 && bVar14) { + bVar15 = param_3 == 0 && (param_4 & 0xfffff) == 0; + } + if (bVar15) { + bVar15 = uVar9 == param_4; + } + if (!bVar15) { + uVar9 = uVar9 | 0x80000; + } + return CONCAT44(uVar9,uVar6); + } + if (uVar9 != uVar6 || param_1 != param_3) { + if (uVar9 == 0 && param_1 == 0) { + param_1 = param_3; + param_2 = param_4; + } + return CONCAT44(param_2,param_1); + } + if (param_2 != param_4) { + return 0; + } + if (uVar9 >> 0x15 == 0) { + bVar3 = (byte)(param_1 >> 0x1f); + uVar9 = param_2 * 2 + (uint)bVar3; + if (CARRY4(param_2,param_2) || CARRY4(param_2 * 2,(uint)bVar3)) { + uVar9 = uVar9 | 0x80000000; + } + return CONCAT44(uVar9,param_1 << 1); + } + if (uVar9 < 0xffc00000) { + return CONCAT44(param_2 + 0x100000,param_1); + } + param_2 = param_2 & 0x80000000; +LAB_00055de8: + return (ulonglong)(param_2 | 0x7ff00000) << 0x20; + } + uVar9 = uVar9 >> 0x15; + uVar6 = uVar6 >> 0x15; + uVar11 = uVar6 - uVar9; + bVar14 = uVar11 != 0; + if (uVar6 < uVar9) { + uVar11 = -uVar11; + } + uVar10 = param_1; + uVar7 = param_2; + if (bVar14 && uVar9 <= uVar6) { + uVar9 = uVar9 + uVar11; + uVar10 = param_3; + uVar7 = param_4; + param_3 = param_1; + param_4 = param_2; + } + if (0x36 < uVar11) { + return CONCAT44(uVar7,uVar10); + } + uVar6 = uVar7 & 0xfffff | 0x100000; + if ((uVar7 & 0x80000000) != 0) { + bVar14 = uVar10 != 0; + uVar10 = -uVar10; + uVar6 = -(uVar6 + bVar14); + } + uVar7 = param_4 & 0xfffff | 0x100000; + if ((param_4 & 0x80000000) != 0) { + bVar14 = param_3 != 0; + param_3 = -param_3; + uVar7 = -(uVar7 + bVar14); + } + if (uVar9 == uVar11) { + uVar7 = uVar7 ^ 0x100000; + if (uVar9 == 0) { + uVar6 = uVar6 ^ 0x100000; + uVar9 = 1; + } + else { + uVar11 = uVar11 - 1; + } + } + uVar13 = -uVar11 + 0x20; + if ((int)uVar11 < 0x21) { + uVar12 = param_3 << (uVar13 & 0xff); + param_3 = param_3 >> (uVar11 & 0xff); + uVar5 = uVar10 + param_3; + uVar2 = uVar7 << (uVar13 & 0xff); + uVar13 = uVar5 + uVar2; + uVar6 = uVar6 + CARRY4(uVar10,param_3) + ((int)uVar7 >> (uVar11 & 0xff)) + + (uint)CARRY4(uVar5,uVar2); + } + else { + uVar12 = uVar7 << (-uVar11 + 0x40 & 0xff); + if (param_3 != 0) { + uVar12 = uVar12 | 2; + } + uVar11 = (int)uVar7 >> (uVar11 - 0x20 & 0xff); + uVar13 = uVar10 + uVar11; + uVar6 = uVar6 + ((int)uVar7 >> 0x1f) + (uint)CARRY4(uVar10,uVar11); + } + param_2 = uVar6 & 0x80000000; + uVar11 = uVar6; + if ((int)uVar6 < 0) { + bVar14 = uVar12 == 0; + uVar12 = -uVar12; + uVar11 = -uVar13; + uVar13 = -(uVar13 + !bVar14); + uVar11 = -(uVar6 + (bVar14 <= uVar11)); + } + if (0xfffff < uVar11) { + uVar10 = uVar9 - 1; + if (0x1fffff < uVar11) { + bVar3 = (byte)uVar11; + uVar11 = uVar11 >> 1; + bVar4 = (byte)uVar13; + uVar13 = (uint)(bVar3 & 1) << 0x1f | uVar13 >> 1; + uVar12 = (uint)(bVar4 & 1) << 0x1f | uVar12 >> 1; + uVar10 = uVar9; + if (0xffbfffff < uVar9 * 0x200000) goto LAB_00055de8; + } +LAB_00055c90: + bVar14 = 0x7fffffff < uVar12; + if (uVar12 == 0x80000000) { + bVar14 = (bool)((byte)uVar13 & 1); + } + return CONCAT44(uVar11 + uVar10 * 0x100000 + (uint)CARRY4(uVar13,(uint)bVar14) | param_2, + uVar13 + bVar14); + } + bVar3 = (byte)(uVar12 >> 0x1f); + uVar12 = uVar12 << 1; + uVar10 = uVar13 * 2; + bVar14 = CARRY4(uVar13,uVar13); + uVar13 = uVar13 * 2 + (uint)bVar3; + uVar11 = uVar11 * 2 + (uint)(bVar14 || CARRY4(uVar10,(uint)bVar3)); + uVar10 = uVar9 - 2; + if ((uVar11 & 0x100000) != 0) goto LAB_00055c90; + uVar9 = uVar13; + uVar7 = uVar11; + if (uVar11 == 0) { + uVar9 = 0; + uVar7 = uVar13; + } + iVar8 = LZCOUNT(uVar7); + if (uVar11 == 0) { + iVar8 = iVar8 + 0x20; + } + uVar13 = iVar8 - 0xb; + bVar16 = SBORROW4(uVar13,0x20); + uVar11 = iVar8 - 0x2b; + bVar14 = (int)uVar11 < 0; + bVar15 = uVar11 == 0; + if ((int)uVar13 < 0x20) { + bVar16 = SCARRY4(uVar11,0xc); + iVar8 = iVar8 + -0x1f; + bVar14 = iVar8 < 0; + bVar15 = iVar8 == 0; + uVar11 = uVar13; + if (!bVar15 && bVar14 == bVar16) { + uVar9 = uVar7 << (uVar13 & 0xff); + uVar7 = uVar7 >> (0xcU - iVar8 & 0xff); + goto LAB_00055d10; + } + } + if (bVar15 || bVar14 != bVar16) { + uVar12 = 0x20 - uVar11; + } + uVar7 = uVar7 << (uVar11 & 0xff); + if (bVar15 || bVar14 != bVar16) { + uVar7 = uVar7 | uVar9 >> (uVar12 & 0xff); + uVar9 = uVar9 << (uVar11 & 0xff); + } +LAB_00055d10: + if ((int)uVar13 <= (int)uVar10) { + return CONCAT44(uVar7 + (uVar10 - uVar13) * 0x100000 | param_2,uVar9); + } + uVar11 = ~(uVar10 - uVar13); + if ((int)uVar11 < 0x1f) { + iVar8 = uVar11 - 0x13; + if (iVar8 != 0 && iVar8 < 0 == SCARRY4(uVar11 - 0x1f,0xc)) { + return CONCAT44(uVar6,uVar9 >> (0x20 - (0xcU - iVar8) & 0xff) | uVar7 << (0xcU - iVar8 & 0xff) + ) & 0x80000000ffffffff; + } + uVar11 = uVar11 + 1; + return CONCAT44(param_2 | uVar7 >> (uVar11 & 0xff), + uVar9 >> (uVar11 & 0xff) | uVar7 << (0x20 - uVar11 & 0xff)); + } + return CONCAT44(uVar6,uVar7 >> (uVar11 - 0x1f & 0xff)) & 0x80000000ffffffff; +} + + + +### FUNC __floatunsidf @ 00055e24 + +ulonglong __floatunsidf(uint param_1) + +{ + uint uVar1; + uint uVar2; + int iVar3; + uint uVar4; + uint in_r12; + bool bVar5; + bool bVar6; + bool bVar7; + + if (param_1 == 0) { + return 0; + } + uVar1 = 0; + iVar3 = LZCOUNT(param_1); + uVar4 = iVar3 + 0x15; + bVar7 = SBORROW4(uVar4,0x20); + uVar2 = iVar3 - 0xb; + bVar5 = (int)uVar2 < 0; + bVar6 = uVar2 == 0; + if (uVar4 < 0x20) { + bVar7 = SCARRY4(uVar2,0xc); + bVar5 = false; + bVar6 = iVar3 + 1 == 0; + uVar2 = uVar4; + if (!bVar6 && !bVar7) { + uVar1 = param_1 << uVar4; + param_1 = param_1 >> (0xcU - (iVar3 + 1) & 0xff); + goto LAB_00055d10; + } + } + if (bVar6 || bVar5 != bVar7) { + in_r12 = 0x20 - uVar2; + } + param_1 = param_1 << (uVar2 & 0xff); + if (bVar6 || bVar5 != bVar7) { + param_1 = param_1 | 0U >> (in_r12 & 0xff); + uVar1 = 0 << (uVar2 & 0xff); + } +LAB_00055d10: + if (uVar4 < 0x433) { + return CONCAT44(param_1 + (0x432 - uVar4) * 0x100000,uVar1); + } + uVar2 = ~(0x432 - uVar4); + if (0x1e < (int)uVar2) { + return (ulonglong)(param_1 >> (uVar2 - 0x1f & 0xff)); + } + iVar3 = uVar2 - 0x13; + if (iVar3 == 0 || iVar3 < 0 != SCARRY4(uVar2 - 0x1f,0xc)) { + uVar2 = uVar2 + 1; + return CONCAT44(param_1 >> (uVar2 & 0xff), + uVar1 >> (uVar2 & 0xff) | param_1 << (0x20 - uVar2 & 0xff)); + } + return (ulonglong)(uVar1 >> (0x20 - (0xcU - iVar3) & 0xff) | param_1 << (0xcU - iVar3 & 0xff)); +} + + + +### FUNC __floatsidf @ 00055e48 + +ulonglong __floatsidf(uint param_1) + +{ + uint uVar1; + uint uVar2; + uint uVar3; + int iVar4; + uint uVar5; + uint uVar6; + uint in_r12; + bool bVar7; + bool bVar8; + bool bVar9; + + if (param_1 == 0) { + return 0; + } + uVar6 = param_1 & 0x80000000; + uVar2 = param_1; + if ((int)uVar6 < 0) { + uVar2 = -param_1; + } + uVar1 = 0; + iVar4 = LZCOUNT(uVar2); + uVar5 = iVar4 + 0x15; + bVar9 = SBORROW4(uVar5,0x20); + uVar3 = iVar4 - 0xb; + bVar7 = (int)uVar3 < 0; + bVar8 = uVar3 == 0; + if (uVar5 < 0x20) { + bVar9 = SCARRY4(uVar3,0xc); + bVar7 = false; + bVar8 = iVar4 + 1 == 0; + uVar3 = uVar5; + if (!bVar8 && !bVar9) { + uVar1 = uVar2 << uVar5; + uVar2 = uVar2 >> (0xcU - (iVar4 + 1) & 0xff); + goto LAB_00055d10; + } + } + if (bVar8 || bVar7 != bVar9) { + in_r12 = 0x20 - uVar3; + } + uVar2 = uVar2 << (uVar3 & 0xff); + if (bVar8 || bVar7 != bVar9) { + uVar2 = uVar2 | 0U >> (in_r12 & 0xff); + uVar1 = 0 << (uVar3 & 0xff); + } +LAB_00055d10: + if (uVar5 < 0x433) { + return CONCAT44(uVar2 + (0x432 - uVar5) * 0x100000 | uVar6,uVar1); + } + uVar3 = ~(0x432 - uVar5); + if (0x1e < (int)uVar3) { + return CONCAT44(param_1,uVar2 >> (uVar3 - 0x1f & 0xff)) & 0x80000000ffffffff; + } + iVar4 = uVar3 - 0x13; + if (iVar4 == 0 || iVar4 < 0 != SCARRY4(uVar3 - 0x1f,0xc)) { + uVar3 = uVar3 + 1; + return CONCAT44(uVar6 | uVar2 >> (uVar3 & 0xff), + uVar1 >> (uVar3 & 0xff) | uVar2 << (0x20 - uVar3 & 0xff)); + } + return CONCAT44(param_1,uVar1 >> (0x20 - (0xcU - iVar4) & 0xff) | uVar2 << (0xcU - iVar4 & 0xff)) + & 0x80000000ffffffff; +} + + + +### FUNC __aeabi_f2d @ 00055e70 + +ulonglong __aeabi_f2d(uint param_1,undefined4 param_2,undefined4 param_3,uint param_4) + +{ + uint uVar1; + uint uVar2; + uint uVar3; + uint uVar4; + uint uVar5; + int iVar6; + uint uVar7; + uint in_r12; + bool bVar8; + bool bVar9; + bool bVar10; + + uVar3 = param_1 << 1; + bVar9 = uVar3 == 0; + uVar1 = param_1 & 0x80000000; + uVar5 = (uint)((int)uVar3 >> 3) >> 1; + uVar2 = uVar1 | uVar5; + param_1 = param_1 << 0x1d; + if (!bVar9) { + param_4 = uVar3 & 0xff000000; + bVar9 = param_4 == 0; + } + if (!bVar9) { + bVar9 = param_4 == 0xff000000; + } + if (!bVar9) { + return CONCAT44(uVar2,param_1) ^ 0x3800000000000000; + } + if (uVar3 == 0 || param_4 == 0xff000000) { + return CONCAT44(uVar2,param_1); + } + uVar3 = param_1; + uVar4 = uVar5; + if (uVar5 == 0) { + uVar3 = 0; + uVar4 = param_1; + } + iVar6 = LZCOUNT(uVar4); + if (uVar5 == 0) { + iVar6 = iVar6 + 0x20; + } + uVar7 = iVar6 - 0xb; + bVar10 = SBORROW4(uVar7,0x20); + uVar5 = iVar6 - 0x2b; + bVar9 = (int)uVar5 < 0; + bVar8 = uVar5 == 0; + if ((int)uVar7 < 0x20) { + bVar10 = SCARRY4(uVar5,0xc); + iVar6 = iVar6 + -0x1f; + bVar9 = iVar6 < 0; + bVar8 = iVar6 == 0; + uVar5 = uVar7; + if (!bVar8 && bVar9 == bVar10) { + uVar3 = uVar4 << (uVar7 & 0xff); + uVar4 = uVar4 >> (0xcU - iVar6 & 0xff); + goto LAB_00055d10; + } + } + if (bVar8 || bVar9 != bVar10) { + in_r12 = 0x20 - uVar5; + } + uVar4 = uVar4 << (uVar5 & 0xff); + if (bVar8 || bVar9 != bVar10) { + uVar4 = uVar4 | uVar3 >> (in_r12 & 0xff); + uVar3 = uVar3 << (uVar5 & 0xff); + } +LAB_00055d10: + if ((int)uVar7 < 0x381) { + return CONCAT44(uVar4 + (0x380 - uVar7) * 0x100000 | uVar1,uVar3); + } + uVar5 = ~(0x380 - uVar7); + if ((int)uVar5 < 0x1f) { + iVar6 = uVar5 - 0x13; + if (iVar6 != 0 && iVar6 < 0 == SCARRY4(uVar5 - 0x1f,0xc)) { + return CONCAT44(uVar2,uVar3 >> (0x20 - (0xcU - iVar6) & 0xff) | uVar4 << (0xcU - iVar6 & 0xff) + ) & 0x80000000ffffffff; + } + uVar5 = uVar5 + 1; + return CONCAT44(uVar1 | uVar4 >> (uVar5 & 0xff), + uVar3 >> (uVar5 & 0xff) | uVar4 << (0x20 - uVar5 & 0xff)); + } + return CONCAT44(uVar2,uVar4 >> (uVar5 - 0x1f & 0xff)) & 0x80000000ffffffff; +} + + + +### FUNC __aeabi_ul2d @ 00055eb0 + +ulonglong __aeabi_ul2d(uint param_1,uint param_2) + +{ + byte bVar1; + byte bVar2; + uint uVar3; + uint uVar4; + uint uVar5; + int iVar6; + uint uVar7; + uint uVar8; + int iVar9; + bool bVar10; + bool bVar11; + bool bVar12; + + if (param_1 == 0 && param_2 == 0) { + return CONCAT44(param_2,param_1); + } + iVar9 = 0x432; + uVar8 = param_2 >> 0x16; + if (uVar8 != 0) { + iVar9 = 3; + if (param_2 >> 0x19 != 0) { + iVar9 = 6; + } + if (param_2 >> 0x1c != 0) { + iVar9 = iVar9 + 3; + } + iVar9 = iVar9 - ((int)param_2 >> 0x1f); + uVar8 = param_1 << (0x20U - iVar9 & 0xff); + param_1 = param_1 >> iVar9 | param_2 << (0x20U - iVar9 & 0xff); + param_2 = param_2 >> iVar9; + iVar9 = iVar9 + 0x432; + } + if (0xfffff < param_2) { + if (0x1fffff < param_2) { + bVar1 = (byte)param_2; + param_2 = param_2 >> 1; + bVar2 = (byte)param_1; + param_1 = (uint)(bVar1 & 1) << 0x1f | param_1 >> 1; + uVar8 = (uint)(bVar2 & 1) << 0x1f | uVar8 >> 1; + iVar9 = iVar9 + 1; + if (0xffbfffff < (uint)(iVar9 * 0x200000)) { + return 0x7ff0000000000000; + } + } +LAB_00055c90: + bVar11 = 0x7fffffff < uVar8; + if (uVar8 == 0x80000000) { + bVar11 = (bool)((byte)param_1 & 1); + } + return CONCAT44(param_2 + iVar9 * 0x100000 + (uint)CARRY4(param_1,(uint)bVar11),param_1 + bVar11 + ); + } + bVar1 = (byte)(uVar8 >> 0x1f); + uVar8 = uVar8 << 1; + uVar3 = param_1 * 2; + bVar11 = CARRY4(param_1,param_1); + param_1 = param_1 * 2 + (uint)bVar1; + param_2 = param_2 * 2 + (uint)(bVar11 || CARRY4(uVar3,(uint)bVar1)); + iVar9 = iVar9 + -1; + if ((param_2 & 0x100000) != 0) goto LAB_00055c90; + uVar3 = param_1; + uVar4 = param_2; + if (param_2 == 0) { + uVar3 = 0; + uVar4 = param_1; + } + iVar6 = LZCOUNT(uVar4); + if (param_2 == 0) { + iVar6 = iVar6 + 0x20; + } + uVar7 = iVar6 - 0xb; + bVar12 = SBORROW4(uVar7,0x20); + uVar5 = iVar6 - 0x2b; + bVar11 = (int)uVar5 < 0; + bVar10 = uVar5 == 0; + if ((int)uVar7 < 0x20) { + bVar12 = SCARRY4(uVar5,0xc); + iVar6 = iVar6 + -0x1f; + bVar11 = iVar6 < 0; + bVar10 = iVar6 == 0; + uVar5 = uVar7; + if (!bVar10 && bVar11 == bVar12) { + uVar3 = uVar4 << (uVar7 & 0xff); + uVar4 = uVar4 >> (0xcU - iVar6 & 0xff); + goto LAB_00055d10; + } + } + if (bVar10 || bVar11 != bVar12) { + uVar8 = 0x20 - uVar5; + } + uVar4 = uVar4 << (uVar5 & 0xff); + if (bVar10 || bVar11 != bVar12) { + uVar4 = uVar4 | uVar3 >> (uVar8 & 0xff); + uVar3 = uVar3 << (uVar5 & 0xff); + } +LAB_00055d10: + if ((int)uVar7 <= iVar9) { + return CONCAT44(uVar4 + (iVar9 - uVar7) * 0x100000,uVar3); + } + uVar8 = ~(iVar9 - uVar7); + if (0x1e < (int)uVar8) { + return (ulonglong)(uVar4 >> (uVar8 - 0x1f & 0xff)); + } + iVar9 = uVar8 - 0x13; + if (iVar9 == 0 || iVar9 < 0 != SCARRY4(uVar8 - 0x1f,0xc)) { + uVar8 = uVar8 + 1; + return CONCAT44(uVar4 >> (uVar8 & 0xff),uVar3 >> (uVar8 & 0xff) | uVar4 << (0x20 - uVar8 & 0xff) + ); + } + return (ulonglong)(uVar3 >> (0x20 - (0xcU - iVar9) & 0xff) | uVar4 << (0xcU - iVar9 & 0xff)); +} + + + +### FUNC __floatdidf @ 00055ec4 + +ulonglong __floatdidf(uint param_1,uint param_2) + +{ + byte bVar1; + byte bVar2; + uint uVar3; + uint uVar4; + uint uVar5; + int iVar6; + uint uVar7; + int iVar8; + uint uVar9; + uint uVar10; + bool bVar11; + bool bVar12; + bool bVar13; + + if (param_1 == 0 && param_2 == 0) { + return CONCAT44(param_2,param_1); + } + uVar9 = param_2 & 0x80000000; + uVar4 = param_2; + if ((int)uVar9 < 0) { + bVar12 = param_1 != 0; + param_1 = -param_1; + uVar4 = -(param_2 + bVar12); + } + iVar8 = 0x432; + uVar10 = uVar4 >> 0x16; + if (uVar10 != 0) { + iVar8 = 3; + if (uVar4 >> 0x19 != 0) { + iVar8 = 6; + } + if (uVar4 >> 0x1c != 0) { + iVar8 = iVar8 + 3; + } + iVar8 = iVar8 - ((int)uVar4 >> 0x1f); + uVar10 = param_1 << (0x20U - iVar8 & 0xff); + param_1 = param_1 >> iVar8 | uVar4 << (0x20U - iVar8 & 0xff); + uVar4 = uVar4 >> iVar8; + iVar8 = iVar8 + 0x432; + } + if (0xfffff < uVar4) { + if (0x1fffff < uVar4) { + bVar1 = (byte)uVar4; + uVar4 = uVar4 >> 1; + bVar2 = (byte)param_1; + param_1 = (uint)(bVar1 & 1) << 0x1f | param_1 >> 1; + uVar10 = (uint)(bVar2 & 1) << 0x1f | uVar10 >> 1; + iVar8 = iVar8 + 1; + if (0xffbfffff < (uint)(iVar8 * 0x200000)) { + return (ulonglong)(uVar9 | 0x7ff00000) << 0x20; + } + } +LAB_00055c90: + bVar12 = 0x7fffffff < uVar10; + if (uVar10 == 0x80000000) { + bVar12 = (bool)((byte)param_1 & 1); + } + return CONCAT44(uVar4 + iVar8 * 0x100000 + (uint)CARRY4(param_1,(uint)bVar12) | uVar9, + param_1 + bVar12); + } + bVar1 = (byte)(uVar10 >> 0x1f); + uVar10 = uVar10 << 1; + uVar3 = param_1 * 2; + bVar12 = CARRY4(param_1,param_1); + param_1 = param_1 * 2 + (uint)bVar1; + uVar4 = uVar4 * 2 + (uint)(bVar12 || CARRY4(uVar3,(uint)bVar1)); + iVar8 = iVar8 + -1; + if ((uVar4 & 0x100000) != 0) goto LAB_00055c90; + uVar3 = param_1; + uVar5 = uVar4; + if (uVar4 == 0) { + uVar3 = 0; + uVar5 = param_1; + } + iVar6 = LZCOUNT(uVar5); + if (uVar4 == 0) { + iVar6 = iVar6 + 0x20; + } + uVar7 = iVar6 - 0xb; + bVar13 = SBORROW4(uVar7,0x20); + uVar4 = iVar6 - 0x2b; + bVar12 = (int)uVar4 < 0; + bVar11 = uVar4 == 0; + if ((int)uVar7 < 0x20) { + bVar13 = SCARRY4(uVar4,0xc); + iVar6 = iVar6 + -0x1f; + bVar12 = iVar6 < 0; + bVar11 = iVar6 == 0; + uVar4 = uVar7; + if (!bVar11 && bVar12 == bVar13) { + uVar3 = uVar5 << (uVar7 & 0xff); + uVar5 = uVar5 >> (0xcU - iVar6 & 0xff); + goto LAB_00055d10; + } + } + if (bVar11 || bVar12 != bVar13) { + uVar10 = 0x20 - uVar4; + } + uVar5 = uVar5 << (uVar4 & 0xff); + if (bVar11 || bVar12 != bVar13) { + uVar5 = uVar5 | uVar3 >> (uVar10 & 0xff); + uVar3 = uVar3 << (uVar4 & 0xff); + } +LAB_00055d10: + if ((int)uVar7 <= iVar8) { + return CONCAT44(uVar5 + (iVar8 - uVar7) * 0x100000 | uVar9,uVar3); + } + uVar4 = ~(iVar8 - uVar7); + if (0x1e < (int)uVar4) { + return CONCAT44(param_2,uVar5 >> (uVar4 - 0x1f & 0xff)) & 0x80000000ffffffff; + } + iVar8 = uVar4 - 0x13; + if (iVar8 == 0 || iVar8 < 0 != SCARRY4(uVar4 - 0x1f,0xc)) { + uVar4 = uVar4 + 1; + return CONCAT44(uVar9 | uVar5 >> (uVar4 & 0xff), + uVar3 >> (uVar4 & 0xff) | uVar5 << (0x20 - uVar4 & 0xff)); + } + return CONCAT44(param_2,uVar3 >> (0x20 - (0xcU - iVar8) & 0xff) | uVar5 << (0xcU - iVar8 & 0xff)) + & 0x80000000ffffffff; +} + + + +### FUNC __muldf3 @ 00055f24 + +ulonglong __muldf3(undefined4 param_1,uint param_2,uint param_3,uint param_4) + +{ + longlong lVar1; + ulonglong uVar2; + byte bVar3; + uint uVar4; + uint uVar5; + uint uVar6; + int iVar7; + uint uVar8; + uint unaff_r5; + uint uVar9; + uint uVar10; + bool bVar11; + bool bVar12; + bool bVar13; + ulonglong uVar14; + + uVar14 = CONCAT44(param_2,param_1); + uVar10 = 0x7ff; + uVar6 = param_2 >> 0x14 & 0x7ff; + bVar11 = uVar6 == 0; + if (!bVar11) { + unaff_r5 = param_4 >> 0x14 & 0x7ff; + bVar11 = unaff_r5 == 0; + } + if (!bVar11) { + bVar11 = uVar6 == 0x7ff; + } + if (!bVar11) { + bVar11 = unaff_r5 == 0x7ff; + } + if (bVar11) { + uVar14 = FUN_00056104(); + } + uVar4 = (uint)(uVar14 >> 0x20); + iVar7 = uVar6 + unaff_r5; + uVar9 = uVar4 ^ param_4; + uVar4 = uVar4 & ~(uVar10 << 0x15); + param_4 = param_4 & ~(uVar10 << 0x15); + uVar6 = uVar4 | 0x100000; + uVar5 = param_4 | 0x100000; + if ((uint)uVar14 == 0 && (uVar4 & 0xfffff) == 0 || param_3 == 0 && (param_4 & 0xfffff) == 0) { + param_3 = (uint)uVar14 | param_3; + uVar5 = (uVar9 & 0x80000000 | uVar6) ^ uVar5; + uVar6 = uVar10 >> 1; + bVar13 = SBORROW4(iVar7,uVar6); + uVar8 = iVar7 - uVar6; + bVar11 = uVar8 == 0; + uVar4 = uVar8; + if (!bVar11 && (int)uVar6 <= iVar7) { + bVar13 = SBORROW4(uVar10,uVar8); + uVar4 = uVar10 - uVar8; + bVar11 = uVar10 == uVar8; + } + if (!bVar11 && (int)uVar4 < 0 == bVar13) { + return CONCAT44(uVar5 | uVar8 * 0x100000,param_3); + } + uVar5 = uVar5 | 0x100000; + uVar6 = 0; + bVar13 = SBORROW4(uVar8,1); + uVar8 = uVar8 - 1; + bVar11 = uVar8 == 0; + uVar10 = uVar8; + } + else { + uVar2 = (ulonglong)param_3 * (uVar14 & 0xffffffff); + uVar14 = (ulonglong)uVar5 * (uVar14 & 0xffffffff) + + (ulonglong)param_3 * (ulonglong)uVar6 + (uVar2 >> 0x20); + uVar4 = (uint)uVar14; + lVar1 = (ulonglong)uVar5 * (ulonglong)uVar6 + (uVar14 >> 0x20); + uVar6 = (uint)lVar1; + uVar10 = (uint)((ulonglong)lVar1 >> 0x20); + if ((int)uVar2 != 0) { + uVar4 = uVar4 | 1; + } + uVar8 = (iVar7 + -0xff) - ((uVar10 < 0x200) + 0x300); + if (uVar10 < 0x200) { + bVar3 = (byte)(uVar4 >> 0x1f); + uVar4 = uVar4 << 1; + lVar1 = CONCAT44(uVar10 * 2 + (uint)(CARRY4(uVar6,uVar6) || CARRY4(uVar6 * 2,(uint)bVar3)), + uVar6 * 2 + (uint)bVar3); + } + uVar5 = uVar9 & 0x80000000 | (int)((ulonglong)lVar1 >> 0x20) << 0xb | (uint)lVar1 >> 0x15; + param_3 = (uint)lVar1 << 0xb | uVar4 >> 0x15; + uVar6 = uVar4 * 0x800; + bVar12 = 0xfc < uVar8; + bVar13 = SBORROW4(uVar8,0xfd); + uVar9 = uVar8 - 0xfd; + bVar11 = uVar9 == 0; + uVar10 = uVar9; + if (bVar12 && !bVar11) { + bVar12 = 0x6ff < uVar9; + bVar13 = SBORROW4(uVar9,0x700); + uVar10 = uVar8 - 0x7fd; + bVar11 = uVar9 == 0x700; + } + if (!bVar12 || bVar11) { + bVar11 = 0x7fffffff < uVar6; + if (uVar6 == 0x80000000) { + bVar11 = (bool)((byte)(uVar4 >> 0x15) & 1); + } + return CONCAT44(uVar5 + uVar8 * 0x100000 + (uint)CARRY4(param_3,(uint)bVar11),param_3 + bVar11 + ); + } + } + if (!bVar11 && (int)uVar10 < 0 == bVar13) { + return (ulonglong)(uVar5 & 0x80000000 | 0x7ff00000) << 0x20; + } + if (uVar8 != 0xffffffca && (int)(uVar8 + 0x36) < 0 == SCARRY4(uVar8,0x36)) { + uVar10 = -uVar8; + uVar4 = uVar10 - 0x20; + if (0x1f < (int)uVar10) { + uVar9 = param_3 >> (uVar4 & 0xff) | uVar5 << (0x20 - uVar4 & 0xff); + uVar10 = (uVar5 >> (uVar4 & 0xff) & ~((uVar5 & 0x80000000) >> (uVar4 & 0xff))) - + ((int)uVar9 >> 0x1f); + if ((uVar6 == 0 && param_3 << (0x20 - uVar4 & 0xff) == 0) && (uVar9 & 0x7fffffff) == 0) { + uVar10 = uVar10 & ~(uVar9 >> 0x1f); + } + return CONCAT44(uVar5,uVar10) & 0x80000000ffffffff; + } + iVar7 = uVar10 - 0x14; + if (iVar7 != 0 && iVar7 < 0 == SCARRY4(uVar4,0xc)) { + uVar4 = 0xc - iVar7; + uVar10 = param_3 << (uVar4 & 0xff); + uVar4 = param_3 >> (0x20 - uVar4 & 0xff) | uVar5 << (uVar4 & 0xff); + uVar9 = uVar4 + -((int)uVar10 >> 0x1f); + if (uVar6 == 0 && (uVar10 & 0x7fffffff) == 0) { + uVar9 = uVar9 & ~(uVar10 >> 0x1f); + } + return CONCAT44((uVar5 & 0x80000000) + (uint)CARRY4(uVar4,-((int)uVar10 >> 0x1f)),uVar9); + } + uVar4 = param_3 << (uVar8 + 0x20 & 0xff); + uVar9 = param_3 >> (uVar10 & 0xff) | uVar5 << (uVar8 + 0x20 & 0xff); + uVar8 = uVar9 + -((int)uVar4 >> 0x1f); + if (uVar6 == 0 && (uVar4 & 0x7fffffff) == 0) { + uVar8 = uVar8 & ~(uVar4 >> 0x1f); + } + return CONCAT44((uVar5 & 0x80000000) + ((uVar5 & 0x7fffffff) >> (uVar10 & 0xff)) + + (uint)CARRY4(uVar9,-((int)uVar4 >> 0x1f)),uVar8); + } + return (ulonglong)(uVar5 & 0x80000000) << 0x20; +} + + + +### FUNC FUN_00056104 @ 00056104 + +ulonglong FUN_00056104(int param_1,uint param_2,int param_3,uint param_4) + +{ + bool bVar1; + int iVar2; + uint uVar3; + uint unaff_r4; + uint uVar4; + uint uVar5; + uint in_r12; + + uVar4 = in_r12 & param_4 >> 0x14; + if (unaff_r4 != in_r12 && uVar4 != in_r12) { + if (param_1 == 0 && (param_2 & 0x7fffffff) == 0 || param_3 == 0 && (param_4 & 0x7fffffff) == 0) + { + return (ulonglong)((param_2 ^ param_4) & 0x80000000) << 0x20; + } + if (unaff_r4 == 0) { + uVar5 = param_2 & 0x80000000; + do { + iVar2 = param_1 >> 0x1f; + param_1 = param_1 << 1; + param_2 = param_2 * 2 - iVar2; + } while ((param_2 & 0x100000) == 0); + param_2 = param_2 | uVar5; + if (uVar4 != 0) { + return CONCAT44(param_2,param_1); + } + } + do { + iVar2 = param_3 >> 0x1f; + param_3 = param_3 << 1; + param_4 = param_4 * 2 - iVar2; + } while ((param_4 & 0x100000) == 0); + return CONCAT44(param_2,param_1); + } + bVar1 = (param_2 & 0x7fffffff) != 0; + iVar2 = param_3; + uVar5 = param_4; + if (param_1 != 0 || bVar1) { + iVar2 = param_1; + uVar5 = param_2; + } + uVar3 = uVar5; + if ((((param_1 != 0 || bVar1) && (param_3 != 0 || (param_4 & 0x7fffffff) != 0)) && + ((unaff_r4 != in_r12 || (iVar2 == 0 && (uVar5 & 0xfffff) == 0)))) && + ((uVar4 != in_r12 || + (iVar2 = param_3, uVar3 = param_4, param_3 == 0 && (param_4 & 0xfffff) == 0)))) { + return (ulonglong)((uVar5 ^ param_4) & 0x80000000 | 0x7ff00000) << 0x20; + } + return CONCAT44(uVar3,iVar2) | 0x7ff8000000000000; +} + + + +### FUNC __divdf3 @ 00056190 + +ulonglong __divdf3(undefined4 param_1,uint param_2,uint param_3,uint param_4) + +{ + uint uVar1; + uint uVar2; + uint uVar3; + uint uVar4; + uint uVar5; + uint uVar6; + int iVar7; + uint uVar8; + uint unaff_r5; + uint uVar9; + uint uVar10; + uint uVar11; + uint uVar12; + bool bVar13; + bool bVar14; + bool bVar15; + undefined8 uVar16; + + uVar16 = CONCAT44(param_2,param_1); + uVar11 = 0x7ff; + uVar6 = param_2 >> 0x14 & 0x7ff; + bVar13 = uVar6 == 0; + if (!bVar13) { + unaff_r5 = param_4 >> 0x14 & 0x7ff; + bVar13 = unaff_r5 == 0; + } + if (!bVar13) { + bVar13 = uVar6 == 0x7ff; + } + if (!bVar13) { + bVar13 = unaff_r5 == 0x7ff; + } + if (bVar13) { + uVar16 = FUN_00056324(); + } + uVar8 = (uint)((ulonglong)uVar16 >> 0x20); + uVar2 = (uint)uVar16; + iVar7 = uVar6 - unaff_r5; + if (param_3 == 0 && (param_4 & 0xfffff) == 0) { + uVar6 = (uVar8 ^ param_4) & 0x80000000 | uVar8 & 0xfffff; + bVar14 = SCARRY4(iVar7,uVar11 >> 1); + uVar8 = iVar7 + (uVar11 >> 1); + bVar13 = (int)uVar8 < 0; + bVar15 = uVar8 == 0; + if (!bVar15 && bVar13 == bVar14) { + bVar14 = SBORROW4(uVar11,uVar8); + bVar13 = (int)(uVar11 - uVar8) < 0; + bVar15 = uVar11 == uVar8; + } + if (!bVar15 && bVar13 == bVar14) { + return CONCAT44(uVar6 | uVar8 * 0x100000,uVar2); + } + uVar6 = uVar6 | 0x100000; + uVar4 = 0; + bVar15 = SBORROW4(uVar8,1); + uVar8 = uVar8 - 1; + bVar13 = uVar8 == 0; + uVar11 = uVar8; + } + else { + uVar4 = (param_4 << 0xc) >> 4 | 0x10000000 | param_3 >> 0x18; + uVar11 = param_3 << 8; + uVar9 = (uVar8 << 0xc) >> 4 | 0x10000000 | uVar2 >> 0x18; + uVar2 = uVar2 * 0x100; + uVar6 = (uVar8 ^ param_4) & 0x80000000; + bVar13 = uVar4 <= uVar9; + if (uVar9 == uVar4) { + bVar13 = uVar11 <= uVar2; + } + iVar7 = iVar7 + (uint)bVar13; + uVar8 = iVar7 + 0x3fd; + if (!bVar13) { + uVar4 = uVar4 >> 1; + uVar11 = (uint)((byte)(param_3 >> 0x18) & 1) << 0x1f | uVar11 >> 1; + } + uVar10 = uVar2 - uVar11; + uVar9 = uVar9 - (uVar4 + (uVar2 < uVar11)); + uVar5 = uVar4 >> 1; + uVar3 = (uint)((byte)uVar4 & 1) << 0x1f | uVar11 >> 1; + uVar2 = 0x100000; + uVar11 = 0x80000; + while( true ) { + bVar13 = uVar3 <= uVar10; + if (uVar5 < uVar9 || uVar9 - uVar5 < (uint)bVar13) { + uVar10 = uVar10 - uVar3; + uVar2 = uVar2 | uVar11; + uVar9 = uVar9 - (uVar5 + !bVar13); + } + uVar4 = uVar5 >> 1; + uVar3 = (uint)((byte)uVar5 & 1) << 0x1f | uVar3 >> 1; + bVar13 = uVar3 <= uVar10; + if (uVar4 < uVar9 || uVar9 - uVar4 < (uint)bVar13) { + uVar10 = uVar10 - uVar3; + uVar2 = uVar2 | uVar11 >> 1; + uVar9 = uVar9 - (uVar4 + !bVar13); + } + uVar12 = uVar5 >> 2; + uVar1 = (uint)((byte)uVar4 & 1) << 0x1f | uVar3 >> 1; + bVar13 = uVar1 <= uVar10; + if (uVar12 < uVar9 || uVar9 - uVar12 < (uint)bVar13) { + uVar10 = uVar10 - uVar1; + uVar2 = uVar2 | uVar11 >> 2; + uVar9 = uVar9 - (uVar12 + !bVar13); + } + uVar5 = uVar5 >> 3; + uVar3 = (uint)((byte)uVar12 & 1) << 0x1f | uVar1 >> 1; + bVar13 = uVar3 <= uVar10; + if (uVar5 < uVar9 || uVar9 - uVar5 < (uint)bVar13) { + uVar10 = uVar10 - uVar3; + uVar2 = uVar2 | uVar11 >> 3; + uVar9 = uVar9 - (uVar5 + !bVar13); + } + uVar4 = uVar9 | uVar10; + if (uVar4 == 0) break; + uVar9 = uVar9 << 4 | uVar10 >> 0x1c; + uVar10 = uVar10 << 4; + uVar5 = uVar5 << 3 | uVar3 >> 0x1d; + uVar3 = (uVar1 >> 1) << 3; + uVar11 = uVar11 >> 4; + if (uVar11 == 0) { + if ((uVar6 & 0x100000) != 0) goto LAB_000562d0; + uVar6 = uVar6 | uVar2; + uVar2 = 0; + uVar11 = 0x80000000; + } + } + if ((uVar6 & 0x100000) == 0) { + uVar6 = uVar6 | uVar2; + uVar2 = 0; + } +LAB_000562d0: + bVar14 = 0xfc < uVar8; + bVar15 = SBORROW4(uVar8,0xfd); + uVar12 = iVar7 + 0x300; + bVar13 = uVar12 == 0; + uVar11 = uVar12; + if (bVar14 && !bVar13) { + bVar14 = 0x6ff < uVar12; + bVar15 = SBORROW4(uVar12,0x700); + uVar11 = iVar7 - 0x400; + bVar13 = uVar12 == 0x700; + } + if (!bVar14 || bVar13) { + bVar13 = uVar5 <= uVar9; + if (uVar9 == uVar5) { + bVar13 = uVar3 <= uVar10; + } + if (uVar9 == uVar5 && uVar10 == uVar3) { + bVar13 = (bool)((byte)uVar2 & 1); + } + return CONCAT44(uVar6 + uVar8 * 0x100000 + (uint)CARRY4(uVar2,(uint)bVar13),uVar2 + bVar13); + } + } + if (!bVar13 && (int)uVar11 < 0 == bVar15) { + return (ulonglong)(uVar6 & 0x80000000 | 0x7ff00000) << 0x20; + } + if (uVar8 == 0xffffffca || (int)(uVar8 + 0x36) < 0 != SCARRY4(uVar8,0x36)) { + return (ulonglong)(uVar6 & 0x80000000) << 0x20; + } + uVar11 = -uVar8; + uVar9 = uVar11 - 0x20; + if (0x1f < (int)uVar11) { + uVar8 = uVar2 >> (uVar9 & 0xff) | uVar6 << (0x20 - uVar9 & 0xff); + uVar11 = (uVar6 >> (uVar9 & 0xff) & ~((uVar6 & 0x80000000) >> (uVar9 & 0xff))) - + ((int)uVar8 >> 0x1f); + if ((uVar4 == 0 && uVar2 << (0x20 - uVar9 & 0xff) == 0) && (uVar8 & 0x7fffffff) == 0) { + uVar11 = uVar11 & ~(uVar8 >> 0x1f); + } + return CONCAT44(uVar6,uVar11) & 0x80000000ffffffff; + } + iVar7 = uVar11 - 0x14; + if (iVar7 != 0 && iVar7 < 0 == SCARRY4(uVar9,0xc)) { + uVar8 = 0xc - iVar7; + uVar11 = uVar2 << (uVar8 & 0xff); + uVar2 = uVar2 >> (0x20 - uVar8 & 0xff) | uVar6 << (uVar8 & 0xff); + uVar8 = uVar2 + -((int)uVar11 >> 0x1f); + if (uVar4 == 0 && (uVar11 & 0x7fffffff) == 0) { + uVar8 = uVar8 & ~(uVar11 >> 0x1f); + } + return CONCAT44((uVar6 & 0x80000000) + (uint)CARRY4(uVar2,-((int)uVar11 >> 0x1f)),uVar8); + } + uVar9 = uVar2 << (uVar8 + 0x20 & 0xff); + uVar2 = uVar2 >> (uVar11 & 0xff) | uVar6 << (uVar8 + 0x20 & 0xff); + uVar8 = uVar2 + -((int)uVar9 >> 0x1f); + if (uVar4 == 0 && (uVar9 & 0x7fffffff) == 0) { + uVar8 = uVar8 & ~(uVar9 >> 0x1f); + } + return CONCAT44((uVar6 & 0x80000000) + ((uVar6 & 0x7fffffff) >> (uVar11 & 0xff)) + + (uint)CARRY4(uVar2,-((int)uVar9 >> 0x1f)),uVar8); +} + + + +### FUNC FUN_00056324 @ 00056324 + +ulonglong FUN_00056324(int param_1,uint param_2,int param_3,uint param_4) + +{ + int iVar1; + uint unaff_r4; + uint uVar2; + uint uVar3; + uint in_r12; + + uVar2 = in_r12 & param_4 >> 0x14; + uVar3 = param_2; + if (unaff_r4 != in_r12 || uVar2 != in_r12) { + if (unaff_r4 == in_r12) { + if ((param_1 == 0 && (param_2 & 0xfffff) == 0) && + (param_1 = param_3, uVar3 = param_4, uVar2 != in_r12)) { +LAB_0005616c: + return (ulonglong)((param_2 ^ param_4) & 0x80000000 | 0x7ff00000) << 0x20; + } + } + else if (uVar2 == in_r12) { + param_1 = param_3; + uVar3 = param_4; + if (param_3 == 0 && (param_4 & 0xfffff) == 0) { +LAB_00056120: + return (ulonglong)((param_2 ^ param_4) & 0x80000000) << 0x20; + } + } + else { + if ((param_1 != 0 || (param_2 & 0x7fffffff) != 0) && + (param_3 != 0 || (param_4 & 0x7fffffff) != 0)) { + if (unaff_r4 == 0) { + uVar3 = param_2 & 0x80000000; + do { + iVar1 = param_1 >> 0x1f; + param_1 = param_1 << 1; + param_2 = param_2 * 2 - iVar1; + } while ((param_2 & 0x100000) == 0); + param_2 = param_2 | uVar3; + if (uVar2 != 0) { + return CONCAT44(param_2,param_1); + } + } + do { + iVar1 = param_3 >> 0x1f; + param_3 = param_3 << 1; + param_4 = param_4 * 2 - iVar1; + } while ((param_4 & 0x100000) == 0); + return CONCAT44(param_2,param_1); + } + if (param_1 != 0 || (param_2 & 0x7fffffff) != 0) goto LAB_0005616c; + if (param_3 != 0 || (param_4 & 0x7fffffff) != 0) goto LAB_00056120; + } + } + return CONCAT44(uVar3,param_1) | 0x7ff8000000000000; +} + + + +### FUNC __gedf2 @ 00056394 + +uint __gedf2(uint param_1,uint param_2,uint param_3,uint param_4) + +{ + uint uVar1; + bool bVar2; + bool bVar3; + + if (((int)(param_2 << 1) >> 0x15 == -1 || (int)(param_4 << 1) >> 0x15 == -1) && + ((((int)(param_2 << 1) >> 0x15 == -1 && (param_1 != 0 || (param_2 & 0xfffff) != 0)) || + (((int)(param_4 << 1) >> 0x15 == -1 && (param_3 != 0 || (param_4 & 0xfffff) != 0)))))) { + return 0xffffffff; + } + bVar3 = (param_2 & 0x7fffffff) == 0; + bVar2 = param_1 == 0 && bVar3; + if (param_1 == 0 && bVar3) { + bVar2 = param_3 == 0 && (param_4 & 0x7fffffff) == 0; + } + if (!bVar2) { + bVar2 = param_2 == param_4; + } + if (bVar2) { + bVar2 = param_1 == param_3; + } + if (!bVar2) { + uVar1 = param_2 ^ param_4; + bVar3 = uVar1 == 0; + if (-1 < (int)uVar1) { + bVar3 = param_2 == param_4; + } + bVar2 = -1 < (int)uVar1 && param_4 <= param_2; + if (bVar3) { + bVar2 = param_3 <= param_1; + } + param_4 = (int)param_4 >> 0x1f; + if (!bVar2) { + param_4 = ~param_4; + } + return param_4 | 1; + } + return 0; +} + + + +### FUNC __ledf2 @ 0005639c + +uint __ledf2(uint param_1,uint param_2,uint param_3,uint param_4) + +{ + uint uVar1; + bool bVar2; + bool bVar3; + + if (((int)(param_2 << 1) >> 0x15 == -1 || (int)(param_4 << 1) >> 0x15 == -1) && + ((((int)(param_2 << 1) >> 0x15 == -1 && (param_1 != 0 || (param_2 & 0xfffff) != 0)) || + (((int)(param_4 << 1) >> 0x15 == -1 && (param_3 != 0 || (param_4 & 0xfffff) != 0)))))) { + return 1; + } + bVar3 = (param_2 & 0x7fffffff) == 0; + bVar2 = param_1 == 0 && bVar3; + if (param_1 == 0 && bVar3) { + bVar2 = param_3 == 0 && (param_4 & 0x7fffffff) == 0; + } + if (!bVar2) { + bVar2 = param_2 == param_4; + } + if (bVar2) { + bVar2 = param_1 == param_3; + } + if (!bVar2) { + uVar1 = param_2 ^ param_4; + bVar3 = uVar1 == 0; + if (-1 < (int)uVar1) { + bVar3 = param_2 == param_4; + } + bVar2 = -1 < (int)uVar1 && param_4 <= param_2; + if (bVar3) { + bVar2 = param_3 <= param_1; + } + param_4 = (int)param_4 >> 0x1f; + if (!bVar2) { + param_4 = ~param_4; + } + return param_4 | 1; + } + return 0; +} + + + +### FUNC __eqdf2 @ 000563a4 + +uint __eqdf2(uint param_1,uint param_2,uint param_3,uint param_4) + +{ + uint uVar1; + bool bVar2; + bool bVar3; + + if (((int)(param_2 << 1) >> 0x15 == -1 || (int)(param_4 << 1) >> 0x15 == -1) && + ((((int)(param_2 << 1) >> 0x15 == -1 && (param_1 != 0 || (param_2 & 0xfffff) != 0)) || + (((int)(param_4 << 1) >> 0x15 == -1 && (param_3 != 0 || (param_4 & 0xfffff) != 0)))))) { + return 1; + } + bVar3 = (param_2 & 0x7fffffff) == 0; + bVar2 = param_1 == 0 && bVar3; + if (param_1 == 0 && bVar3) { + bVar2 = param_3 == 0 && (param_4 & 0x7fffffff) == 0; + } + if (!bVar2) { + bVar2 = param_2 == param_4; + } + if (bVar2) { + bVar2 = param_1 == param_3; + } + if (!bVar2) { + uVar1 = param_2 ^ param_4; + bVar3 = uVar1 == 0; + if (-1 < (int)uVar1) { + bVar3 = param_2 == param_4; + } + bVar2 = -1 < (int)uVar1 && param_4 <= param_2; + if (bVar3) { + bVar2 = param_3 <= param_1; + } + param_4 = (int)param_4 >> 0x1f; + if (!bVar2) { + param_4 = ~param_4; + } + return param_4 | 1; + } + return 0; +} + + + +### FUNC __aeabi_cdrcmple @ 0005642c + +void __aeabi_cdrcmple(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) + +{ + __aeabi_cdcmple(param_3,param_4,param_1,param_2); + return; +} + + + +### FUNC __aeabi_cdcmple @ 00056448 + +undefined4 __aeabi_cdcmple(undefined4 param_1) + +{ + __eqdf2(); + return param_1; +} + + + +### FUNC __aeabi_dcmpeq @ 0005645c + +undefined1 __aeabi_dcmpeq(void) + +{ + undefined1 in_ZR; + + __aeabi_cdcmple(); + return in_ZR; +} + + + +### FUNC __aeabi_dcmplt @ 00056470 + +bool __aeabi_dcmplt(void) + +{ + undefined1 in_CY; + + __aeabi_cdcmple(); + return !(bool)in_CY; +} + + + +### FUNC __aeabi_dcmple @ 00056484 + +bool __aeabi_dcmple(void) + +{ + undefined1 in_ZR; + undefined1 in_CY; + + __aeabi_cdcmple(); + return !(bool)in_CY || (bool)in_ZR; +} + + + +### FUNC __aeabi_dcmpge @ 00056498 + +bool __aeabi_dcmpge(void) + +{ + undefined1 in_ZR; + undefined1 in_CY; + + __aeabi_cdrcmple(); + return !(bool)in_CY || (bool)in_ZR; +} + + + +### FUNC __aeabi_dcmpgt @ 000564ac + +bool __aeabi_dcmpgt(void) + +{ + undefined1 in_CY; + + __aeabi_cdrcmple(); + return !(bool)in_CY; +} + + + +### FUNC __fixdfsi @ 000564c0 + +uint __fixdfsi(uint param_1,uint param_2) + +{ + uint uVar1; + int iVar2; + uint uVar3; + + iVar2 = param_2 * 2 + 0x200000; + if (param_2 * 2 < 0xffe00000) { + if (-1 < iVar2) { + return 0; + } + uVar1 = iVar2 >> 0x15; + uVar3 = -uVar1 - 0x3e1; + if (uVar1 < 0xfffffc20 && uVar3 != 0) { + uVar1 = (param_2 << 0xb | 0x80000000 | param_1 >> 0x15) >> (uVar3 & 0xff); + if ((param_2 & 0x80000000) != 0) { + uVar1 = -uVar1; + } + return uVar1; + } + } + else if (param_1 != 0 || (param_2 & 0xfffff) != 0) { + return 0; + } + param_2 = param_2 & 0x80000000; + if (param_2 == 0) { + param_2 = 0x7fffffff; + } + return param_2; +} + + + +### FUNC __fixunsdfsi @ 0005651c + +uint __fixunsdfsi(uint param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + + if (SUB41(param_2 >> 0x1f,0)) { + return 0; + } + iVar1 = param_2 * 2 + 0x200000; + if (param_2 * 2 < 0xffe00000) { + if (-1 < iVar1) { + return 0; + } + uVar2 = -(iVar1 >> 0x15) - 0x3e1; + if (-1 < (int)uVar2) { + return (param_2 << 0xb | 0x80000000 | param_1 >> 0x15) >> (uVar2 & 0xff); + } + } + else if (param_1 != 0 || (param_2 & 0xfffff) != 0) { + return 0; + } + return 0xffffffff; +} + + + +### FUNC __truncdfsf2 @ 00056570 + +uint __truncdfsf2(uint param_1,uint param_2) + +{ + uint uVar1; + uint uVar2; + uint uVar3; + uint in_r12; + bool bVar4; + bool bVar5; + + uVar2 = param_2 * 2; + bVar5 = uVar2 < 0x70000000; + uVar3 = uVar2 + 0x90000000; + uVar1 = uVar3; + if (!bVar5) { + in_r12 = uVar2 + 0x8fe00000; + uVar1 = in_r12; + } + bVar4 = uVar1 == 0; + if (!bVar5 && uVar3 >= 0x200000) { + bVar4 = in_r12 == 0x1fc00000; + } + if (((bVar5 || uVar3 < 0x200000) || 0x1fc00000 < in_r12) || bVar4) { + if ((param_2 & 0x40000000) != 0) { + if (((int)uVar2 >> 0x15 == -1) && (param_1 != 0 || (param_2 & 0xfffff) != 0)) { + return 0x7fc00000; + } + return param_2 & 0x80000000 | 0x7f800000; + } + if ((int)(uVar2 + 0x92e00000) < 0 != SCARRY4(uVar3,0x2e00000)) { + return param_2 & 0x80000000; + } + uVar3 = 0x18 - (uVar2 + 0x92e00000 >> 0x15); + uVar2 = param_1 >> (uVar3 & 0xff); + if (param_1 << (0x20 - uVar3 & 0xff) != 0) { + uVar2 = uVar2 | 1; + } + uVar1 = param_2 & 0x1fffff | 0x100000; + param_1 = uVar2 | uVar1 << (0x20 - uVar3 & 0xff); + uVar3 = (uVar1 >> (uVar3 & 0xff)) << 1; + } + uVar2 = (param_2 & 0x80000000 | param_1 >> 0x1d) + uVar3 * 4 + (uint)(0x7fffffff < param_1 * 8); + if (param_1 * 8 == 0x80000000) { + uVar2 = uVar2 & 0xfffffffe; + } + return uVar2; +} + + + +### FUNC __aeabi_frsub @ 00056610 + +void __aeabi_frsub(uint param_1) + +{ + __addsf3(param_1 ^ 0x80000000); + return; +} + + + +### FUNC __subsf3 @ 00056618 + +uint __subsf3(uint param_1,uint param_2,undefined4 param_3,uint param_4) + +{ + int iVar1; + int iVar2; + byte bVar3; + uint uVar4; + uint uVar5; + uint uVar6; + uint uVar7; + uint uVar8; + bool bVar9; + + uVar5 = param_2 ^ 0x80000000; + uVar4 = param_1 << 1; + bVar9 = uVar4 == 0; + if (!bVar9) { + param_4 = param_2 << 1; + bVar9 = param_4 == 0; + } + if (!bVar9) { + bVar9 = uVar4 == param_4; + } + iVar1 = (int)uVar4 >> 0x18; + if (!bVar9) { + bVar9 = iVar1 == -1; + } + if (!bVar9) { + bVar9 = (int)param_4 >> 0x18 == -1; + } + if (bVar9) { + iVar2 = (int)(param_2 << 1) >> 0x18; + if (iVar1 == -1 || iVar2 == -1) { + uVar4 = uVar5; + if (iVar1 == -1) { + uVar4 = param_1; + } + if (iVar1 != -1 || iVar2 != -1) { + uVar5 = uVar4; + } + if (((uVar4 & 0x7fffff) != 0 || (uVar5 & 0x7fffff) != 0) || uVar4 != uVar5) { + uVar4 = uVar4 | 0x400000; + } + return uVar4; + } + if (uVar4 != param_2 << 1) { + if (uVar4 == 0) { + param_1 = uVar5; + } + return param_1; + } + if (param_1 != uVar5) { + return 0; + } + if ((uVar4 & 0xff000000) == 0) { + uVar4 = param_1 << 1; + if (SUB41(param_1 >> 0x1f,0)) { + uVar4 = uVar4 | 0x80000000; + } + return uVar4; + } + if (uVar4 < 0xfe000000) { + return param_1 + 0x800000; + } + param_1 = param_1 & 0x80000000; +LAB_0005677c: + return param_1 | 0x7f800000; + } + uVar4 = uVar4 >> 0x18; + param_4 = param_4 >> 0x18; + uVar8 = param_4 - uVar4; + uVar6 = uVar5; + uVar7 = uVar4; + if (uVar8 != 0 && uVar4 <= param_4) { + uVar7 = uVar4 + uVar8; + uVar6 = param_1; + param_1 = uVar5; + } + if (param_4 < uVar4) { + uVar8 = -uVar8; + } + if (0x19 < uVar8) { + return param_1; + } + uVar4 = param_1 & 0xffffff | 0x800000; + if ((param_1 & 0x80000000) != 0) { + uVar4 = -uVar4; + } + uVar5 = uVar6 & 0xffffff | 0x800000; + if ((uVar6 & 0x80000000) != 0) { + uVar5 = -uVar5; + } + if (uVar7 == uVar8) { + uVar5 = uVar5 ^ 0x800000; + if (uVar7 == 0) { + uVar4 = uVar4 ^ 0x800000; + uVar7 = 1; + } + else { + uVar8 = uVar8 - 1; + } + } + uVar4 = uVar4 + ((int)uVar5 >> (uVar8 & 0xff)); + uVar5 = uVar5 << (0x20 - uVar8 & 0xff); + param_1 = uVar4 & 0x80000000; + if ((int)uVar4 < 0) { + bVar9 = uVar5 != 0; + uVar5 = -uVar5; + uVar4 = -(uVar4 + bVar9); + } + if (uVar4 < 0x800000) { + iVar1 = (int)uVar5 >> 0x1f; + uVar5 = uVar5 << 1; + uVar4 = uVar4 * 2 - iVar1; + uVar8 = uVar7 - 2; + if ((uVar4 & 0x800000) == 0) { + uVar5 = LZCOUNT(uVar4) - 8; + uVar4 = uVar4 << (uVar5 & 0xff); + if ((int)uVar8 < (int)uVar5) { + uVar4 = uVar4 >> (-(uVar8 - uVar5) & 0xff); + } + else { + uVar4 = uVar4 + (uVar8 - uVar5) * 0x800000; + } + return uVar4 | param_1; + } + } + else { + uVar8 = uVar7 - 1; + if (0xffffff < uVar4) { + bVar3 = (byte)uVar4; + uVar4 = uVar4 >> 1; + uVar5 = (uint)(bVar3 & 1) << 0x1f | uVar5 >> 1; + uVar8 = uVar7; + if (0xfd < uVar7) goto LAB_0005677c; + } + } + uVar4 = uVar4 + uVar8 * 0x800000 + (uint)(0x7fffffff < uVar5); + if (uVar5 == 0x80000000) { + uVar4 = uVar4 & 0xfffffffe; + } + return uVar4 | param_1; +} + + + +### FUNC __addsf3 @ 0005661c + +uint __addsf3(uint param_1,uint param_2,undefined4 param_3,uint param_4) + +{ + int iVar1; + int iVar2; + byte bVar3; + uint uVar4; + uint uVar5; + uint uVar6; + uint uVar7; + uint uVar8; + bool bVar9; + + uVar4 = param_1 << 1; + bVar9 = uVar4 == 0; + if (!bVar9) { + param_4 = param_2 << 1; + bVar9 = param_4 == 0; + } + if (!bVar9) { + bVar9 = uVar4 == param_4; + } + iVar1 = (int)uVar4 >> 0x18; + if (!bVar9) { + bVar9 = iVar1 == -1; + } + if (!bVar9) { + bVar9 = (int)param_4 >> 0x18 == -1; + } + if (bVar9) { + iVar2 = (int)(param_2 << 1) >> 0x18; + if (iVar1 == -1 || iVar2 == -1) { + uVar4 = param_2; + if (iVar1 == -1) { + uVar4 = param_1; + } + if (iVar1 != -1 || iVar2 != -1) { + param_2 = uVar4; + } + if (((uVar4 & 0x7fffff) != 0 || (param_2 & 0x7fffff) != 0) || uVar4 != param_2) { + uVar4 = uVar4 | 0x400000; + } + return uVar4; + } + if (uVar4 != param_2 << 1) { + if (uVar4 == 0) { + param_1 = param_2; + } + return param_1; + } + if (param_1 != param_2) { + return 0; + } + if ((uVar4 & 0xff000000) == 0) { + uVar4 = param_1 << 1; + if (SUB41(param_1 >> 0x1f,0)) { + uVar4 = uVar4 | 0x80000000; + } + return uVar4; + } + if (uVar4 < 0xfe000000) { + return param_1 + 0x800000; + } + param_1 = param_1 & 0x80000000; +LAB_0005677c: + return param_1 | 0x7f800000; + } + uVar4 = uVar4 >> 0x18; + param_4 = param_4 >> 0x18; + uVar8 = param_4 - uVar4; + uVar5 = param_2; + uVar7 = uVar4; + if (uVar8 != 0 && uVar4 <= param_4) { + uVar7 = uVar4 + uVar8; + uVar5 = param_1; + param_1 = param_2; + } + if (param_4 < uVar4) { + uVar8 = -uVar8; + } + if (0x19 < uVar8) { + return param_1; + } + uVar4 = param_1 & 0xffffff | 0x800000; + if ((param_1 & 0x80000000) != 0) { + uVar4 = -uVar4; + } + uVar6 = uVar5 & 0xffffff | 0x800000; + if ((uVar5 & 0x80000000) != 0) { + uVar6 = -uVar6; + } + if (uVar7 == uVar8) { + uVar6 = uVar6 ^ 0x800000; + if (uVar7 == 0) { + uVar4 = uVar4 ^ 0x800000; + uVar7 = 1; + } + else { + uVar8 = uVar8 - 1; + } + } + uVar4 = uVar4 + ((int)uVar6 >> (uVar8 & 0xff)); + uVar6 = uVar6 << (0x20 - uVar8 & 0xff); + param_1 = uVar4 & 0x80000000; + if ((int)uVar4 < 0) { + bVar9 = uVar6 != 0; + uVar6 = -uVar6; + uVar4 = -(uVar4 + bVar9); + } + if (uVar4 < 0x800000) { + iVar1 = (int)uVar6 >> 0x1f; + uVar6 = uVar6 << 1; + uVar4 = uVar4 * 2 - iVar1; + uVar8 = uVar7 - 2; + if ((uVar4 & 0x800000) == 0) { + uVar7 = LZCOUNT(uVar4) - 8; + uVar4 = uVar4 << (uVar7 & 0xff); + if ((int)uVar8 < (int)uVar7) { + uVar4 = uVar4 >> (-(uVar8 - uVar7) & 0xff); + } + else { + uVar4 = uVar4 + (uVar8 - uVar7) * 0x800000; + } + return uVar4 | param_1; + } + } + else { + uVar8 = uVar7 - 1; + if (0xffffff < uVar4) { + bVar3 = (byte)uVar4; + uVar4 = uVar4 >> 1; + uVar6 = (uint)(bVar3 & 1) << 0x1f | uVar6 >> 1; + uVar8 = uVar7; + if (0xfd < uVar7) goto LAB_0005677c; + } + } + uVar4 = uVar4 + uVar8 * 0x800000 + (uint)(0x7fffffff < uVar6); + if (uVar6 == 0x80000000) { + uVar4 = uVar4 & 0xfffffffe; + } + return uVar4 | param_1; +} + + + +### FUNC __floatunsisf @ 000567ac + +uint __floatunsisf(uint param_1) + +{ + uint uVar1; + uint uVar2; + int iVar3; + + if (param_1 == 0) { + return 0; + } + uVar1 = LZCOUNT(param_1); + uVar2 = uVar1 - 8; + iVar3 = uVar2 * -0x800000 + 0x4a800000; + if (7 < uVar1) { + uVar1 = 0 << (uVar2 & 0xff); + uVar2 = iVar3 + (param_1 << (uVar2 & 0xff)) + (0U >> (0x20 - uVar2 & 0xff)) + + (uint)(0x7fffffff < uVar1); + if (uVar1 == 0x80000000) { + uVar2 = uVar2 & 0xfffffffe; + } + return uVar2; + } + uVar2 = param_1 << uVar1 + 0x18; + uVar1 = (iVar3 + (param_1 >> (0x20 - (uVar1 + 0x18) & 0xff))) - ((int)uVar2 >> 0x1f); + if ((uVar2 & 0x7fffffff) == 0) { + uVar1 = uVar1 & ~(uVar2 >> 0x1f); + } + return uVar1; +} + + + +### FUNC __floatsisf @ 000567b4 + +uint __floatsisf(uint param_1) + +{ + uint uVar1; + uint uVar2; + uint uVar3; + int iVar4; + + uVar3 = param_1 & 0x80000000; + if ((int)uVar3 < 0) { + param_1 = -param_1; + } + if (param_1 == 0) { + return 0; + } + uVar1 = LZCOUNT(param_1); + uVar2 = uVar1 - 8; + iVar4 = ((uVar3 | 0x4b000000) - 0x800000) + uVar2 * -0x800000; + if (7 < uVar1) { + uVar3 = 0 << (uVar2 & 0xff); + uVar1 = iVar4 + (param_1 << (uVar2 & 0xff)) + (0U >> (0x20 - uVar2 & 0xff)) + + (uint)(0x7fffffff < uVar3); + if (uVar3 == 0x80000000) { + uVar1 = uVar1 & 0xfffffffe; + } + return uVar1; + } + uVar3 = param_1 << uVar1 + 0x18; + uVar1 = (iVar4 + (param_1 >> (0x20 - (uVar1 + 0x18) & 0xff))) - ((int)uVar3 >> 0x1f); + if ((uVar3 & 0x7fffffff) == 0) { + uVar1 = uVar1 & ~(uVar3 >> 0x1f); + } + return uVar1; +} + + + +### FUNC __aeabi_ul2f @ 000567d4 + +uint __aeabi_ul2f(uint param_1,uint param_2) + +{ + uint uVar1; + uint uVar2; + uint uVar3; + uint uVar4; + int iVar5; + + if (param_1 == 0 && param_2 == 0) { + return param_1; + } + uVar1 = param_1; + uVar2 = param_2; + if (param_2 == 0) { + uVar1 = 0; + uVar2 = param_1; + } + iVar5 = 0x5b000000; + if (param_2 == 0) { + iVar5 = 0x4b000000; + } + uVar3 = LZCOUNT(uVar2); + uVar4 = uVar3 - 8; + iVar5 = iVar5 + -0x800000 + uVar4 * -0x800000; + if (uVar3 < 8) { + uVar4 = uVar2 << uVar3 + 0x18; + uVar2 = (iVar5 + (uVar2 >> (0x20 - (uVar3 + 0x18) & 0xff))) - ((int)uVar4 >> 0x1f); + if (uVar1 == 0 && (uVar4 & 0x7fffffff) == 0) { + uVar2 = uVar2 & ~(uVar4 >> 0x1f); + } + return uVar2; + } + uVar3 = uVar1 << (uVar4 & 0xff); + uVar2 = iVar5 + (uVar2 << (uVar4 & 0xff)) + (uVar1 >> (0x20 - uVar4 & 0xff)) + + (uint)(0x7fffffff < uVar3); + if (uVar3 == 0x80000000) { + uVar2 = uVar2 & 0xfffffffe; + } + return uVar2; +} + + + +### FUNC __aeabi_l2f @ 000567e4 + +uint __aeabi_l2f(uint param_1,uint param_2) + +{ + uint uVar1; + uint uVar2; + uint uVar3; + uint uVar4; + uint uVar5; + int iVar6; + bool bVar7; + + if (param_1 == 0 && param_2 == 0) { + return param_1; + } + uVar5 = param_2 & 0x80000000; + if ((int)uVar5 < 0) { + bVar7 = param_1 != 0; + param_1 = -param_1; + param_2 = -(param_2 + bVar7); + } + uVar1 = param_1; + uVar2 = param_2; + if (param_2 == 0) { + uVar1 = 0; + uVar2 = param_1; + } + uVar5 = uVar5 | 0x5b000000; + if (param_2 == 0) { + uVar5 = uVar5 + 0xf0000000; + } + uVar3 = LZCOUNT(uVar2); + uVar4 = uVar3 - 8; + iVar6 = (uVar5 - 0x800000) + uVar4 * -0x800000; + if (uVar3 < 8) { + uVar5 = uVar2 << uVar3 + 0x18; + uVar2 = (iVar6 + (uVar2 >> (0x20 - (uVar3 + 0x18) & 0xff))) - ((int)uVar5 >> 0x1f); + if (uVar1 == 0 && (uVar5 & 0x7fffffff) == 0) { + uVar2 = uVar2 & ~(uVar5 >> 0x1f); + } + return uVar2; + } + uVar5 = uVar1 << (uVar4 & 0xff); + uVar2 = iVar6 + (uVar2 << (uVar4 & 0xff)) + (uVar1 >> (0x20 - uVar4 & 0xff)) + + (uint)(0x7fffffff < uVar5); + if (uVar5 == 0x80000000) { + uVar2 = uVar2 & 0xfffffffe; + } + return uVar2; +} + + + +### FUNC __mulsf3 @ 00056860 + +uint __mulsf3(uint param_1,uint param_2,undefined4 param_3,uint param_4) + +{ + uint uVar1; + longlong lVar2; + uint uVar3; + int iVar4; + uint uVar5; + int iVar6; + int iVar7; + uint uVar8; + uint uVar9; + bool bVar10; + bool bVar11; + + uVar3 = param_1 >> 0x17 & 0xff; + bVar10 = uVar3 == 0; + if (!bVar10) { + param_4 = param_2 >> 0x17 & 0xff; + bVar10 = param_4 == 0; + } + if (!bVar10) { + bVar10 = uVar3 == 0xff; + } + if (!bVar10) { + bVar10 = param_4 == 0xff; + } + if (bVar10) { + param_4 = param_2 >> 0x17 & 0xff; + if (uVar3 == 0xff || param_4 == 0xff) { + uVar9 = param_2; + if (param_1 != 0 && param_1 != 0x80000000) { + uVar9 = param_1; + } + uVar5 = uVar9; + if (((((param_1 == 0 || param_1 == 0x80000000) || param_2 == 0) || param_2 == 0x80000000) || + ((uVar3 == 0xff && ((uVar9 & 0x7fffff) != 0)))) || + ((param_4 == 0xff && (uVar5 = param_2, (param_2 & 0x7fffff) != 0)))) { + return uVar5 | 0x7fc00000; + } + uVar9 = uVar9 ^ param_2; + goto LAB_000569dc; + } + if ((param_1 & 0x7fffffff) == 0 || (param_2 & 0x7fffffff) == 0) { + return (param_1 ^ param_2) & 0x80000000; + } + bVar10 = uVar3 == 0; + uVar9 = param_1 & 0x80000000; + while( true ) { + if (bVar10) { + param_1 = param_1 << 1; + bVar10 = (param_1 & 0x800000) == 0; + } + if (!bVar10) break; + uVar3 = uVar3 - 1; + } + param_1 = param_1 | uVar9; + bVar10 = param_4 == 0; + uVar9 = param_2 & 0x80000000; + while( true ) { + if (bVar10) { + param_2 = param_2 << 1; + bVar10 = (param_2 & 0x800000) == 0; + } + if (!bVar10) break; + param_4 = param_4 - 1; + } + param_2 = param_2 | uVar9; + } + iVar4 = uVar3 + param_4; + uVar9 = param_1 ^ param_2; + uVar3 = param_1 << 9; + bVar10 = uVar3 == 0; + if (!bVar10) { + param_2 = param_2 << 9; + bVar10 = param_2 == 0; + } + if (bVar10) { + if (uVar3 == 0) { + param_2 = param_2 << 9; + } + uVar9 = uVar9 & 0x80000000 | param_1 & 0x7fffff | param_2 >> 9; + bVar11 = SBORROW4(iVar4,0x7f); + iVar6 = iVar4 + -0x7f; + bVar10 = iVar6 == 0; + iVar7 = iVar6; + if (!bVar10 && 0x7e < iVar4) { + bVar11 = SBORROW4(0xff,iVar6); + iVar7 = -iVar6 + 0xff; + bVar10 = -iVar6 == -0xff; + } + if (!bVar10 && iVar7 < 0 == bVar11) { + return uVar9 | iVar6 * 0x800000; + } + uVar9 = uVar9 | 0x800000; + uVar8 = 0; + bVar11 = SBORROW4(iVar6,1); + uVar5 = iVar4 - 0x80; + bVar10 = uVar5 == 0; + uVar3 = uVar5; + } + else { + lVar2 = (ulonglong)(param_2 >> 5 | 0x8000000) * (ulonglong)(uVar3 >> 5 | 0x8000000); + bVar10 = (uint)((ulonglong)lVar2 >> 0x20) < 0x800000; + if (bVar10) { + lVar2 = lVar2 * 2; + } + uVar8 = (uint)lVar2; + uVar9 = uVar9 & 0x80000000 | (uint)((ulonglong)lVar2 >> 0x20); + uVar5 = iVar4 - (bVar10 + 0x7f); + bVar11 = SBORROW4(uVar5,0xfd); + bVar10 = uVar5 == 0xfd; + uVar3 = uVar5 - 0xfd; + if (uVar5 < 0xfe) { + uVar3 = uVar9 + uVar5 * 0x800000 + (uint)(0x7fffffff < uVar8); + if (uVar8 == 0x80000000) { + uVar3 = uVar3 & 0xfffffffe; + } + return uVar3; + } + } + if (bVar10 || (int)uVar3 < 0 != bVar11) { + if (uVar5 != 0xffffffe7 && (int)(uVar5 + 0x19) < 0 == SCARRY4(uVar5,0x19)) { + uVar1 = (uVar9 << 1) >> (-uVar5 & 0xff); + uVar3 = uVar9 << (uVar5 + 0x20 & 0xff); + uVar9 = (uVar9 & 0x80000000 | uVar1 >> 1) + (uint)((byte)uVar1 & 1); + if (uVar8 == 0 && (uVar3 & 0x7fffffff) == 0) { + uVar9 = uVar9 & ~(uVar3 >> 0x1f); + } + return uVar9; + } + return uVar9 & 0x80000000; + } +LAB_000569dc: + return uVar9 & 0x80000000 | 0x7f800000; +} + + + +### FUNC __divsf3 @ 000569f8 + +uint __divsf3(uint param_1,uint param_2,undefined4 param_3,uint param_4) + +{ + uint uVar1; + uint uVar2; + int iVar3; + uint uVar4; + int iVar5; + uint uVar6; + bool bVar7; + bool bVar8; + bool bVar9; + + uVar2 = param_1 >> 0x17 & 0xff; + bVar7 = uVar2 == 0; + if (!bVar7) { + param_4 = param_2 >> 0x17 & 0xff; + bVar7 = param_4 == 0; + } + if (!bVar7) { + bVar7 = uVar2 == 0xff; + } + if (!bVar7) { + bVar7 = param_4 == 0xff; + } + if (bVar7) { + param_4 = param_2 >> 0x17 & 0xff; + uVar6 = param_1; + if (uVar2 == 0xff) { + if (((param_1 & 0x7fffff) != 0) || (uVar6 = param_2, param_4 == 0xff)) { +LAB_000569ec: + return uVar6 | 0x7fc00000; + } + } + else { + if (param_4 == 0xff) { + uVar6 = param_2; + if ((param_2 & 0x7fffff) == 0) { +LAB_00056990: + return (param_1 ^ param_2) & 0x80000000; + } + goto LAB_000569ec; + } + if ((param_1 & 0x7fffffff) != 0 && (param_2 & 0x7fffffff) != 0) { + bVar7 = uVar2 == 0; + uVar6 = param_1 & 0x80000000; + while( true ) { + if (bVar7) { + param_1 = param_1 << 1; + bVar7 = (param_1 & 0x800000) == 0; + } + if (!bVar7) break; + uVar2 = uVar2 - 1; + } + param_1 = param_1 | uVar6; + bVar7 = param_4 == 0; + uVar6 = param_2 & 0x80000000; + while( true ) { + if (bVar7) { + param_2 = param_2 << 1; + bVar7 = (param_2 & 0x800000) == 0; + } + if (!bVar7) break; + param_4 = param_4 - 1; + } + param_2 = param_2 | uVar6; + goto LAB_00056a10; + } + if ((param_1 & 0x7fffffff) == 0) { + if ((param_2 & 0x7fffffff) != 0) goto LAB_00056990; + goto LAB_000569ec; + } + } + param_1 = param_1 ^ param_2; + } + else { +LAB_00056a10: + iVar3 = uVar2 - param_4; + if (param_2 << 9 == 0) { + param_1 = (param_1 ^ param_2) & 0x80000000 | param_1 & 0x7fffff; + bVar9 = SCARRY4(iVar3,0x7f); + iVar5 = iVar3 + 0x7f; + bVar7 = iVar5 < 0; + bVar8 = iVar5 == 0; + if (!bVar8 && bVar7 == bVar9) { + bVar9 = SBORROW4(0xff,iVar5); + bVar7 = -iVar5 + 0xff < 0; + bVar8 = -iVar5 == -0xff; + } + if (!bVar8 && bVar7 == bVar9) { + return param_1 | iVar5 * 0x800000; + } + param_1 = param_1 | 0x800000; + uVar2 = 0; + bVar8 = SBORROW4(iVar5,1); + uVar4 = iVar3 + 0x7e; + bVar7 = uVar4 == 0; + uVar6 = uVar4; + } + else { + uVar1 = (param_2 << 9) >> 4 | 0x10000000; + uVar2 = (param_1 << 9) >> 4 | 0x10000000; + param_1 = (param_1 ^ param_2) & 0x80000000; + bVar7 = uVar1 <= uVar2; + if (!bVar7) { + uVar2 = uVar2 << 1; + } + uVar4 = iVar3 + 0x7d + (uint)bVar7; + uVar6 = 0x800000; + do { + if (uVar1 <= uVar2) { + uVar2 = uVar2 - uVar1; + param_1 = param_1 | uVar6; + } + if (uVar1 >> 1 <= uVar2) { + uVar2 = uVar2 - (uVar1 >> 1); + param_1 = param_1 | uVar6 >> 1; + } + if (uVar1 >> 2 <= uVar2) { + uVar2 = uVar2 - (uVar1 >> 2); + param_1 = param_1 | uVar6 >> 2; + } + if (uVar1 >> 3 <= uVar2) { + uVar2 = uVar2 - (uVar1 >> 3); + param_1 = param_1 | uVar6 >> 3; + } + uVar2 = uVar2 * 0x10; + bVar7 = uVar2 == 0; + if (!bVar7) { + uVar6 = uVar6 >> 4; + bVar7 = uVar6 == 0; + } + } while (!bVar7); + bVar8 = SBORROW4(uVar4,0xfd); + bVar7 = uVar4 == 0xfd; + uVar6 = uVar4 - 0xfd; + if (uVar4 < 0xfe) { + uVar6 = param_1 + uVar4 * 0x800000 + (uint)(uVar1 <= uVar2); + if (uVar2 == uVar1) { + uVar6 = uVar6 & 0xfffffffe; + } + return uVar6; + } + } + if (bVar7 || (int)uVar6 < 0 != bVar8) { + if (uVar4 != 0xffffffe7 && (int)(uVar4 + 0x19) < 0 == SCARRY4(uVar4,0x19)) { + uVar1 = (param_1 << 1) >> (-uVar4 & 0xff); + uVar6 = param_1 << (uVar4 + 0x20 & 0xff); + uVar4 = (param_1 & 0x80000000 | uVar1 >> 1) + (uint)((byte)uVar1 & 1); + if (uVar2 == 0 && (uVar6 & 0x7fffffff) == 0) { + uVar4 = uVar4 & ~(uVar6 >> 0x1f); + } + return uVar4; + } + return param_1 & 0x80000000; + } + } + return param_1 & 0x80000000 | 0x7f800000; +} + + + +### FUNC __gesf2 @ 00056b58 + +uint __gesf2(uint param_1,uint param_2) + +{ + uint uVar1; + uint uVar2; + uint uVar3; + bool bVar4; + bool bVar5; + + uVar1 = param_1 * 2; + uVar2 = param_2 * 2; + if (((int)uVar1 >> 0x18 == -1 || (int)uVar2 >> 0x18 == -1) && + ((((int)uVar1 >> 0x18 == -1 && ((param_1 & 0x7fffff) != 0)) || + (((int)uVar2 >> 0x18 == -1 && ((param_2 & 0x7fffff) != 0)))))) { + return 0xffffffff; + } + uVar3 = uVar1 | param_2 & 0x7fffffff; + bVar5 = uVar3 == 0; + if (!bVar5) { + uVar3 = param_1 ^ param_2; + bVar5 = uVar3 == 0; + } + bVar4 = -1 < (int)uVar3; + if (bVar4) { + param_1 = uVar1 + param_2 * -2; + bVar5 = param_1 == 0; + } + if ((bVar4 && uVar1 >= uVar2) && !bVar5) { + param_1 = (int)param_2 >> 0x1f; + } + if (!bVar4 || uVar1 < uVar2) { + param_1 = ~((int)param_2 >> 0x1f); + } + if (!bVar5) { + param_1 = param_1 | 1; + } + return param_1; +} + + + +### FUNC __lesf2 @ 00056b60 + +uint __lesf2(uint param_1,uint param_2) + +{ + uint uVar1; + uint uVar2; + uint uVar3; + bool bVar4; + bool bVar5; + + uVar1 = param_1 * 2; + uVar2 = param_2 * 2; + if (((int)uVar1 >> 0x18 == -1 || (int)uVar2 >> 0x18 == -1) && + ((((int)uVar1 >> 0x18 == -1 && ((param_1 & 0x7fffff) != 0)) || + (((int)uVar2 >> 0x18 == -1 && ((param_2 & 0x7fffff) != 0)))))) { + return 1; + } + uVar3 = uVar1 | param_2 & 0x7fffffff; + bVar5 = uVar3 == 0; + if (!bVar5) { + uVar3 = param_1 ^ param_2; + bVar5 = uVar3 == 0; + } + bVar4 = -1 < (int)uVar3; + if (bVar4) { + param_1 = uVar1 + param_2 * -2; + bVar5 = param_1 == 0; + } + if ((bVar4 && uVar1 >= uVar2) && !bVar5) { + param_1 = (int)param_2 >> 0x1f; + } + if (!bVar4 || uVar1 < uVar2) { + param_1 = ~((int)param_2 >> 0x1f); + } + if (!bVar5) { + param_1 = param_1 | 1; + } + return param_1; +} + + + +### FUNC __eqsf2 @ 00056b68 + +uint __eqsf2(uint param_1,uint param_2) + +{ + uint uVar1; + uint uVar2; + uint uVar3; + bool bVar4; + bool bVar5; + + uVar1 = param_1 * 2; + uVar2 = param_2 * 2; + if (((int)uVar1 >> 0x18 == -1 || (int)uVar2 >> 0x18 == -1) && + ((((int)uVar1 >> 0x18 == -1 && ((param_1 & 0x7fffff) != 0)) || + (((int)uVar2 >> 0x18 == -1 && ((param_2 & 0x7fffff) != 0)))))) { + return 1; + } + uVar3 = uVar1 | param_2 & 0x7fffffff; + bVar5 = uVar3 == 0; + if (!bVar5) { + uVar3 = param_1 ^ param_2; + bVar5 = uVar3 == 0; + } + bVar4 = -1 < (int)uVar3; + if (bVar4) { + param_1 = uVar1 + param_2 * -2; + bVar5 = param_1 == 0; + } + if ((bVar4 && uVar1 >= uVar2) && !bVar5) { + param_1 = (int)param_2 >> 0x1f; + } + if (!bVar4 || uVar1 < uVar2) { + param_1 = ~((int)param_2 >> 0x1f); + } + if (!bVar5) { + param_1 = param_1 | 1; + } + return param_1; +} + + + +### FUNC __aeabi_cfrcmple @ 00056bcc + +void __aeabi_cfrcmple(undefined4 param_1,undefined4 param_2) + +{ + __aeabi_cfcmple(param_2,param_1); + return; +} + + + +### FUNC __aeabi_cfcmple @ 00056bdc + +undefined8 __aeabi_cfcmple(undefined4 param_1,undefined4 param_2) + +{ + __eqsf2(); + return CONCAT44(param_2,param_1); +} + + + +### FUNC __aeabi_fcmpeq @ 00056bf0 + +undefined1 __aeabi_fcmpeq(void) + +{ + undefined1 in_ZR; + + __aeabi_cfcmple(); + return in_ZR; +} + + + +### FUNC __aeabi_fcmplt @ 00056c04 + +bool __aeabi_fcmplt(void) + +{ + undefined1 in_CY; + + __aeabi_cfcmple(); + return !(bool)in_CY; +} + + + +### FUNC __aeabi_fcmple @ 00056c18 + +bool __aeabi_fcmple(void) + +{ + undefined1 in_ZR; + undefined1 in_CY; + + __aeabi_cfcmple(); + return !(bool)in_CY || (bool)in_ZR; +} + + + +### FUNC __aeabi_fcmpge @ 00056c2c + +bool __aeabi_fcmpge(void) + +{ + undefined1 in_ZR; + undefined1 in_CY; + + __aeabi_cfrcmple(); + return !(bool)in_CY || (bool)in_ZR; +} + + + +### FUNC __aeabi_fcmpgt @ 00056c40 + +bool __aeabi_fcmpgt(void) + +{ + undefined1 in_CY; + + __aeabi_cfrcmple(); + return !(bool)in_CY; +} + + + +### FUNC __unordsf2 @ 00056c54 + +undefined4 __unordsf2(uint param_1,uint param_2) + +{ + if ((((int)(param_1 << 1) >> 0x18 != -1) || ((param_1 & 0x7fffff) == 0)) && + (((int)(param_2 << 1) >> 0x18 != -1 || ((param_2 & 0x7fffff) == 0)))) { + return 0; + } + return 1; +} + + + +### FUNC __fixsfsi @ 00056c8c + +uint __fixsfsi(uint param_1) + +{ + uint uVar1; + uint uVar2; + + if (param_1 << 1 < 0x7f000000) { + return 0; + } + uVar1 = (param_1 << 1) >> 0x18; + uVar2 = 0x9e - uVar1; + if (uVar1 < 0x9f && uVar2 != 0) { + uVar1 = (param_1 << 8 | 0x80000000) >> (uVar2 & 0xff); + if ((param_1 & 0x80000000) != 0) { + uVar1 = -uVar1; + } + return uVar1; + } + if ((uVar2 == 0xffffff9f) && ((param_1 & 0x7fffff) != 0)) { + return 0; + } + param_1 = param_1 & 0x80000000; + if (param_1 == 0) { + param_1 = 0x7fffffff; + } + return param_1; +} + + + +### FUNC __fixunssfsi @ 00056ce8 + +uint __fixunssfsi(uint param_1) + +{ + uint uVar1; + + if ((SUB41(param_1 >> 0x1f,0)) || (param_1 << 1 < 0x7f000000)) { + return 0; + } + uVar1 = 0x9e - ((param_1 << 1) >> 0x18); + if (-1 < (int)uVar1) { + return (param_1 << 8 | 0x80000000) >> (uVar1 & 0xff); + } + if ((uVar1 == 0xffffff9f) && ((param_1 & 0x7fffff) != 0)) { + return 0; + } + return 0xffffffff; +} + + + +### FUNC __aeabi_ldivmod @ 00056d3c + +void __aeabi_ldivmod(int param_1,int param_2,int param_3,int param_4) + +{ + bool bVar1; + bool bVar2; + bool bVar3; + + if (param_4 != 0 || param_3 != 0) { + __gnu_ldivmod_helper(); + return; + } + bVar1 = param_2 < 0; + bVar2 = param_2 == 0; + if (bVar2) { + bVar1 = param_1 < 0; + } + bVar3 = param_1 != 0; + if (bVar1) { + param_2 = -0x80000000; + param_1 = 0; + } + if ((!bVar2 || bVar3) && !bVar1) { + param_2 = 0x7fffffff; + } + if ((!bVar2 || bVar3) && !bVar1) { + param_1 = -1; + } + __aeabi_ldiv0(param_1,param_2); + return; +} + + + +### FUNC __aeabi_uldivmod @ 00056d80 + +void __aeabi_uldivmod(int param_1,int param_2,int param_3,int param_4) + +{ + if (param_4 != 0 || param_3 != 0) { + __gnu_uldivmod_helper(); + return; + } + if (param_2 != 0 || param_1 != 0) { + param_2 = -1; + param_1 = -1; + } + __aeabi_ldiv0(param_1,param_2); + return; +} + + + +### FUNC __aeabi_ldiv0 @ 00056dbc + +void __aeabi_ldiv0(void) + +{ + raise(8); + return; +} + + + +### FUNC __muldi3 @ 00056dcc + +undefined8 __muldi3(uint param_1,int param_2,uint param_3,int param_4) + +{ + return CONCAT44(param_4 * param_1 + param_2 * param_3 + + (int)((ulonglong)param_1 * (ulonglong)param_3 >> 0x20), + (int)((ulonglong)param_1 * (ulonglong)param_3)); +} + + + +### FUNC __gnu_ldivmod_helper @ 00056de8 + +void __gnu_ldivmod_helper + (uint param_1,int param_2,undefined4 param_3,undefined4 param_4,int *param_5) + +{ + uint uVar1; + longlong lVar2; + + lVar2 = __divdi3(); + lVar2 = lVar2 * CONCAT44(param_4,param_3); + uVar1 = (uint)lVar2; + *param_5 = param_1 - uVar1; + param_5[1] = param_2 - ((int)((ulonglong)lVar2 >> 0x20) + (uint)(param_1 < uVar1)); + return; +} + + + +### FUNC __gnu_uldivmod_helper @ 00056e24 + +void __gnu_uldivmod_helper + (uint param_1,int param_2,undefined4 param_3,undefined4 param_4,int *param_5) + +{ + uint uVar1; + longlong lVar2; + + lVar2 = __udivdi3(); + lVar2 = lVar2 * CONCAT44(param_4,param_3); + uVar1 = (uint)lVar2; + *param_5 = param_1 - uVar1; + param_5[1] = param_2 - ((int)((ulonglong)lVar2 >> 0x20) + (uint)(param_1 < uVar1)); + return; +} + + + +### FUNC FUN_00056e60 @ 00056e60 + +int FUN_00056e60(int *param_1,int param_2) + +{ + int iVar1; + int iVar2; + + do { + iVar2 = *param_1; + iVar1 = (*(code *)&SUB_ffff0fc0)(iVar2,iVar2 + param_2,param_1); + } while (iVar1 != 0); + return iVar2; +} + + + +### FUNC FUN_00056e98 @ 00056e98 + +int FUN_00056e98(int *param_1,int param_2) + +{ + int iVar1; + int iVar2; + + do { + iVar2 = *param_1; + iVar1 = (*(code *)&SUB_ffff0fc0)(iVar2,iVar2 - param_2,param_1); + } while (iVar1 != 0); + return iVar2; +} + + + +### FUNC FUN_00056ed0 @ 00056ed0 + +uint FUN_00056ed0(uint *param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + + do { + uVar2 = *param_1; + iVar1 = (*(code *)&SUB_ffff0fc0)(uVar2,uVar2 | param_2,param_1); + } while (iVar1 != 0); + return uVar2; +} + + + +### FUNC FUN_00056f08 @ 00056f08 + +uint FUN_00056f08(uint *param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + + do { + uVar2 = *param_1; + iVar1 = (*(code *)&SUB_ffff0fc0)(uVar2,uVar2 & param_2,param_1); + } while (iVar1 != 0); + return uVar2; +} + + + +### FUNC FUN_00056f40 @ 00056f40 + +uint FUN_00056f40(uint *param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + + do { + uVar2 = *param_1; + iVar1 = (*(code *)&SUB_ffff0fc0)(uVar2,uVar2 ^ param_2,param_1); + } while (iVar1 != 0); + return uVar2; +} + + + +### FUNC FUN_00056f78 @ 00056f78 + +uint FUN_00056f78(uint *param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + + do { + uVar2 = *param_1; + iVar1 = (*(code *)&SUB_ffff0fc0)(uVar2,~(uVar2 & param_2),param_1); + } while (iVar1 != 0); + return uVar2; +} + + + +### FUNC FUN_00056fb4 @ 00056fb4 + +int FUN_00056fb4(uint param_1,int param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + int iVar4; + + iVar1 = (param_1 & 3) << 3; + do { + uVar3 = *(uint *)(param_1 & 0xfffffffc); + uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1; + iVar4 = (*(code *)&SUB_ffff0fc0) + (uVar3,(uVar2 + param_2 & 0xffff) << iVar1 | ~(0xffff << iVar1) & uVar3, + (uint *)(param_1 & 0xfffffffc)); + } while (iVar4 != 0); + return (int)(short)uVar2; +} + + + +### FUNC FUN_00057018 @ 00057018 + +int FUN_00057018(uint param_1,int param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + int iVar4; + + iVar1 = (param_1 & 3) << 3; + do { + uVar3 = *(uint *)(param_1 & 0xfffffffc); + uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1; + iVar4 = (*(code *)&SUB_ffff0fc0) + (uVar3,(uVar2 - param_2 & 0xffff) << iVar1 | ~(0xffff << iVar1) & uVar3, + (uint *)(param_1 & 0xfffffffc)); + } while (iVar4 != 0); + return (int)(short)uVar2; +} + + + +### FUNC FUN_0005707c @ 0005707c + +int FUN_0005707c(uint param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + int iVar4; + + iVar1 = (param_1 & 3) << 3; + do { + uVar3 = *(uint *)(param_1 & 0xfffffffc); + uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1; + iVar4 = (*(code *)&SUB_ffff0fc0) + (uVar3,((uVar2 | param_2) & 0xffff) << iVar1 | ~(0xffff << iVar1) & uVar3, + (uint *)(param_1 & 0xfffffffc)); + } while (iVar4 != 0); + return (int)(short)uVar2; +} + + + +### FUNC FUN_000570e0 @ 000570e0 + +int FUN_000570e0(uint param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + int iVar4; + + iVar1 = (param_1 & 3) << 3; + do { + uVar3 = *(uint *)(param_1 & 0xfffffffc); + uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1; + iVar4 = (*(code *)&SUB_ffff0fc0) + (uVar3,(uVar2 & param_2 & 0xffff) << iVar1 | ~(0xffff << iVar1) & uVar3, + (uint *)(param_1 & 0xfffffffc)); + } while (iVar4 != 0); + return (int)(short)uVar2; +} + + + +### FUNC FUN_00057144 @ 00057144 + +int FUN_00057144(uint param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + int iVar4; + + iVar1 = (param_1 & 3) << 3; + do { + uVar3 = *(uint *)(param_1 & 0xfffffffc); + uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1; + iVar4 = (*(code *)&SUB_ffff0fc0) + (uVar3,((uVar2 ^ param_2) & 0xffff) << iVar1 | ~(0xffff << iVar1) & uVar3, + (uint *)(param_1 & 0xfffffffc)); + } while (iVar4 != 0); + return (int)(short)uVar2; +} + + + +### FUNC FUN_000571a8 @ 000571a8 + +int FUN_000571a8(uint param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + int iVar4; + + iVar1 = (param_1 & 3) << 3; + do { + uVar3 = *(uint *)(param_1 & 0xfffffffc); + uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1; + iVar4 = (*(code *)&SUB_ffff0fc0) + (uVar3,(~(uVar2 & param_2) & 0xffff) << iVar1 | ~(0xffff << iVar1) & uVar3, + (uint *)(param_1 & 0xfffffffc)); + } while (iVar4 != 0); + return (int)(short)uVar2; +} + + + +### FUNC FUN_00057210 @ 00057210 + +int FUN_00057210(uint param_1,int param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + uint uVar4; + int iVar5; + + iVar1 = (param_1 & 3) << 3; + uVar2 = 0xff << iVar1; + do { + uVar4 = *(uint *)(param_1 & 0xfffffffc); + uVar3 = (uVar4 & uVar2) >> iVar1; + iVar5 = (*(code *)&SUB_ffff0fc0) + (uVar4,uVar2 & uVar3 + param_2 << iVar1 | ~uVar2 & uVar4, + (uint *)(param_1 & 0xfffffffc)); + } while (iVar5 != 0); + return (int)(char)uVar3; +} + + + +### FUNC FUN_00057270 @ 00057270 + +int FUN_00057270(uint param_1,int param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + uint uVar4; + int iVar5; + + iVar1 = (param_1 & 3) << 3; + uVar2 = 0xff << iVar1; + do { + uVar4 = *(uint *)(param_1 & 0xfffffffc); + uVar3 = (uVar4 & uVar2) >> iVar1; + iVar5 = (*(code *)&SUB_ffff0fc0) + (uVar4,uVar2 & uVar3 - param_2 << iVar1 | ~uVar2 & uVar4, + (uint *)(param_1 & 0xfffffffc)); + } while (iVar5 != 0); + return (int)(char)uVar3; +} + + + +### FUNC FUN_000572d0 @ 000572d0 + +int FUN_000572d0(uint param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + uint uVar4; + int iVar5; + + iVar1 = (param_1 & 3) << 3; + uVar2 = 0xff << iVar1; + do { + uVar4 = *(uint *)(param_1 & 0xfffffffc); + uVar3 = (uVar4 & uVar2) >> iVar1; + iVar5 = (*(code *)&SUB_ffff0fc0) + (uVar4,uVar2 & (uVar3 | param_2) << iVar1 | ~uVar2 & uVar4, + (uint *)(param_1 & 0xfffffffc)); + } while (iVar5 != 0); + return (int)(char)uVar3; +} + + + +### FUNC FUN_00057330 @ 00057330 + +int FUN_00057330(uint param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + uint uVar4; + int iVar5; + + iVar1 = (param_1 & 3) << 3; + uVar2 = 0xff << iVar1; + do { + uVar4 = *(uint *)(param_1 & 0xfffffffc); + uVar3 = (uVar4 & uVar2) >> iVar1; + iVar5 = (*(code *)&SUB_ffff0fc0) + (uVar4,uVar2 & (uVar3 & param_2) << iVar1 | ~uVar2 & uVar4, + (uint *)(param_1 & 0xfffffffc)); + } while (iVar5 != 0); + return (int)(char)uVar3; +} + + + +### FUNC FUN_00057390 @ 00057390 + +int FUN_00057390(uint param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + uint uVar4; + int iVar5; + + iVar1 = (param_1 & 3) << 3; + uVar2 = 0xff << iVar1; + do { + uVar4 = *(uint *)(param_1 & 0xfffffffc); + uVar3 = (uVar4 & uVar2) >> iVar1; + iVar5 = (*(code *)&SUB_ffff0fc0) + (uVar4,uVar2 & (uVar3 ^ param_2) << iVar1 | ~uVar2 & uVar4, + (uint *)(param_1 & 0xfffffffc)); + } while (iVar5 != 0); + return (int)(char)uVar3; +} + + + +### FUNC FUN_000573f0 @ 000573f0 + +int FUN_000573f0(uint param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + uint uVar4; + int iVar5; + + iVar1 = (param_1 & 3) << 3; + uVar2 = 0xff << iVar1; + do { + uVar4 = *(uint *)(param_1 & 0xfffffffc); + uVar3 = (uVar4 & uVar2) >> iVar1; + iVar5 = (*(code *)&SUB_ffff0fc0) + (uVar4,uVar2 & ~(uVar3 & param_2) << iVar1 | ~uVar2 & uVar4, + (uint *)(param_1 & 0xfffffffc)); + } while (iVar5 != 0); + return (int)(char)uVar3; +} + + + +### FUNC FUN_00057454 @ 00057454 + +int FUN_00057454(int *param_1,int param_2) + +{ + int iVar1; + int iVar2; + + do { + iVar2 = *param_1 + param_2; + iVar1 = (*(code *)&SUB_ffff0fc0)(*param_1,iVar2,param_1); + } while (iVar1 != 0); + return iVar2; +} + + + +### FUNC FUN_0005748c @ 0005748c + +int FUN_0005748c(int *param_1,int param_2) + +{ + int iVar1; + int iVar2; + + do { + iVar2 = *param_1 - param_2; + iVar1 = (*(code *)&SUB_ffff0fc0)(*param_1,iVar2,param_1); + } while (iVar1 != 0); + return iVar2; +} + + + +### FUNC FUN_000574c4 @ 000574c4 + +uint FUN_000574c4(uint *param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + + do { + uVar2 = *param_1 | param_2; + iVar1 = (*(code *)&SUB_ffff0fc0)(*param_1,uVar2,param_1); + } while (iVar1 != 0); + return uVar2; +} + + + +### FUNC FUN_000574fc @ 000574fc + +uint FUN_000574fc(uint *param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + + do { + uVar2 = *param_1 & param_2; + iVar1 = (*(code *)&SUB_ffff0fc0)(*param_1,uVar2,param_1); + } while (iVar1 != 0); + return uVar2; +} + + + +### FUNC FUN_00057534 @ 00057534 + +uint FUN_00057534(uint *param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + + do { + uVar2 = *param_1 ^ param_2; + iVar1 = (*(code *)&SUB_ffff0fc0)(*param_1,uVar2,param_1); + } while (iVar1 != 0); + return uVar2; +} + + + +### FUNC FUN_0005756c @ 0005756c + +uint FUN_0005756c(uint *param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + + do { + uVar2 = ~(*param_1 & param_2); + iVar1 = (*(code *)&SUB_ffff0fc0)(*param_1,uVar2,param_1); + } while (iVar1 != 0); + return uVar2; +} + + + +### FUNC FUN_000575a8 @ 000575a8 + +int FUN_000575a8(uint param_1,int param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + int iVar4; + uint uVar5; + + iVar1 = (param_1 & 3) << 3; + uVar2 = 0xffff << iVar1; + do { + uVar3 = *(uint *)(param_1 & 0xfffffffc); + uVar5 = (param_2 + ((uVar3 & uVar2) >> iVar1) & 0xffff) << iVar1 | ~uVar2 & uVar3; + iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); + } while (iVar4 != 0); + return (int)(short)((uVar5 & uVar2) >> iVar1); +} + + + +### FUNC FUN_00057614 @ 00057614 + +int FUN_00057614(uint param_1,int param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + int iVar4; + uint uVar5; + + iVar1 = (param_1 & 3) << 3; + uVar2 = 0xffff << iVar1; + do { + uVar3 = *(uint *)(param_1 & 0xfffffffc); + uVar5 = (((uVar3 & uVar2) >> iVar1) - param_2 & 0xffff) << iVar1 | ~uVar2 & uVar3; + iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); + } while (iVar4 != 0); + return (int)(short)((uVar5 & uVar2) >> iVar1); +} + + + +### FUNC FUN_00057680 @ 00057680 + +int FUN_00057680(uint param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + int iVar4; + uint uVar5; + + iVar1 = (param_1 & 3) << 3; + uVar2 = 0xffff << iVar1; + do { + uVar3 = *(uint *)(param_1 & 0xfffffffc); + uVar5 = ((param_2 | (uVar3 & uVar2) >> iVar1) & 0xffff) << iVar1 | ~uVar2 & uVar3; + iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); + } while (iVar4 != 0); + return (int)(short)((uVar5 & uVar2) >> iVar1); +} + + + +### FUNC FUN_000576ec @ 000576ec + +int FUN_000576ec(uint param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + int iVar4; + uint uVar5; + + iVar1 = (param_1 & 3) << 3; + uVar2 = 0xffff << iVar1; + do { + uVar3 = *(uint *)(param_1 & 0xfffffffc); + uVar5 = (param_2 & (uVar3 & uVar2) >> iVar1 & 0xffff) << iVar1 | ~uVar2 & uVar3; + iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); + } while (iVar4 != 0); + return (int)(short)((uVar5 & uVar2) >> iVar1); +} + + + +### FUNC FUN_00057758 @ 00057758 + +int FUN_00057758(uint param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + int iVar4; + uint uVar5; + + iVar1 = (param_1 & 3) << 3; + uVar2 = 0xffff << iVar1; + do { + uVar3 = *(uint *)(param_1 & 0xfffffffc); + uVar5 = ((param_2 ^ (uVar3 & uVar2) >> iVar1) & 0xffff) << iVar1 | ~uVar2 & uVar3; + iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); + } while (iVar4 != 0); + return (int)(short)((uVar5 & uVar2) >> iVar1); +} + + + +### FUNC FUN_000577c4 @ 000577c4 + +int FUN_000577c4(uint param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + int iVar4; + uint uVar5; + + iVar1 = (param_1 & 3) << 3; + uVar2 = 0xffff << iVar1; + do { + uVar3 = *(uint *)(param_1 & 0xfffffffc); + uVar5 = (~(param_2 & (uVar3 & uVar2) >> iVar1) & 0xffff) << iVar1 | ~uVar2 & uVar3; + iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); + } while (iVar4 != 0); + return (int)(short)((uVar5 & uVar2) >> iVar1); +} + + + +### FUNC FUN_00057834 @ 00057834 + +int FUN_00057834(uint param_1,int param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + int iVar4; + uint uVar5; + + iVar1 = (param_1 & 3) << 3; + uVar2 = 0xff << iVar1; + do { + uVar3 = *(uint *)(param_1 & 0xfffffffc); + uVar5 = uVar2 & param_2 + ((uVar3 & uVar2) >> iVar1) << iVar1 | ~uVar2 & uVar3; + iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); + } while (iVar4 != 0); + return (int)(char)((uVar5 & uVar2) >> iVar1); +} + + + +### FUNC FUN_0005789c @ 0005789c + +int FUN_0005789c(uint param_1,int param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + int iVar4; + uint uVar5; + + iVar1 = (param_1 & 3) << 3; + uVar2 = 0xff << iVar1; + do { + uVar3 = *(uint *)(param_1 & 0xfffffffc); + uVar5 = uVar2 & ((uVar3 & uVar2) >> iVar1) - param_2 << iVar1 | ~uVar2 & uVar3; + iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); + } while (iVar4 != 0); + return (int)(char)((uVar5 & uVar2) >> iVar1); +} + + + +### FUNC FUN_00057904 @ 00057904 + +int FUN_00057904(uint param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + int iVar4; + uint uVar5; + + iVar1 = (param_1 & 3) << 3; + uVar2 = 0xff << iVar1; + do { + uVar3 = *(uint *)(param_1 & 0xfffffffc); + uVar5 = uVar2 & (param_2 | (uVar3 & uVar2) >> iVar1) << iVar1 | ~uVar2 & uVar3; + iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); + } while (iVar4 != 0); + return (int)(char)((uVar5 & uVar2) >> iVar1); +} + + + +### FUNC FUN_0005796c @ 0005796c + +int FUN_0005796c(uint param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + int iVar4; + uint uVar5; + + iVar1 = (param_1 & 3) << 3; + uVar2 = 0xff << iVar1; + do { + uVar3 = *(uint *)(param_1 & 0xfffffffc); + uVar5 = uVar2 & (param_2 & (uVar3 & uVar2) >> iVar1) << iVar1 | ~uVar2 & uVar3; + iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); + } while (iVar4 != 0); + return (int)(char)((uVar5 & uVar2) >> iVar1); +} + + + +### FUNC FUN_000579d4 @ 000579d4 + +int FUN_000579d4(uint param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + int iVar4; + uint uVar5; + + iVar1 = (param_1 & 3) << 3; + uVar2 = 0xff << iVar1; + do { + uVar3 = *(uint *)(param_1 & 0xfffffffc); + uVar5 = uVar2 & (param_2 ^ (uVar3 & uVar2) >> iVar1) << iVar1 | ~uVar2 & uVar3; + iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); + } while (iVar4 != 0); + return (int)(char)((uVar5 & uVar2) >> iVar1); +} + + + +### FUNC FUN_00057a3c @ 00057a3c + +int FUN_00057a3c(uint param_1,uint param_2) + +{ + int iVar1; + uint uVar2; + uint uVar3; + int iVar4; + uint uVar5; + + iVar1 = (param_1 & 3) << 3; + uVar2 = 0xff << iVar1; + do { + uVar3 = *(uint *)(param_1 & 0xfffffffc); + uVar5 = uVar2 & ~(param_2 & (uVar3 & uVar2) >> iVar1) << iVar1 | ~uVar2 & uVar3; + iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); + } while (iVar4 != 0); + return (int)(char)((uVar5 & uVar2) >> iVar1); +} + + + +### FUNC FUN_00057aa8 @ 00057aa8 + +int FUN_00057aa8(int *param_1,int param_2,undefined4 param_3) + +{ + int iVar1; + + do { + if (param_2 != *param_1) { + return *param_1; + } + iVar1 = (*(code *)&SUB_ffff0fc0)(param_2,param_3,param_1); + } while (iVar1 != 0); + return param_2; +} + + + +### FUNC FUN_00057aec @ 00057aec + +int FUN_00057aec(uint param_1,ushort param_2,uint param_3,undefined4 param_4) + +{ + int iVar1; + uint uVar2; + uint uVar3; + int iVar4; + + iVar1 = (param_1 & 3) << 3; + do { + uVar3 = *(uint *)(param_1 & 0xfffffffc); + uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1; + if (uVar2 != param_2) { + param_2 = (ushort)uVar2; + break; + } + iVar4 = (*(code *)&SUB_ffff0fc0) + (uVar3,~(0xffff << iVar1) & uVar3 | (param_3 & 0xffff) << iVar1, + (uint *)(param_1 & 0xfffffffc),uVar2,param_4); + } while (iVar4 != 0); + return (int)(short)param_2; +} + + + +### FUNC FUN_00057b68 @ 00057b68 + +int FUN_00057b68(uint param_1,byte param_2,int param_3,undefined4 param_4) + +{ + int iVar1; + uint uVar2; + uint uVar3; + uint uVar4; + int iVar5; + + iVar1 = (param_1 & 3) << 3; + uVar2 = 0xff << iVar1; + do { + uVar4 = *(uint *)(param_1 & 0xfffffffc); + uVar3 = (uVar4 & uVar2) >> iVar1; + if (uVar3 != param_2) { + param_2 = (byte)uVar3; + break; + } + iVar5 = (*(code *)&SUB_ffff0fc0) + (uVar4,~uVar2 & uVar4 | uVar2 & param_3 << iVar1, + (uint *)(param_1 & 0xfffffffc),uVar3,param_4); + } while (iVar5 != 0); + return (int)(char)param_2; +} + + + +### FUNC FUN_00057bd8 @ 00057bd8 + +bool FUN_00057bd8(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) + +{ + int iVar1; + + iVar1 = (*(code *)&SUB_ffff0fc0)(param_2,param_3,param_1,&SUB_ffff0fc0,param_4); + return iVar1 == 0; +} + + + +### FUNC FUN_00057c24 @ 00057c24 + +bool FUN_00057c24(undefined4 param_1,int param_2) + +{ + char cVar1; + + cVar1 = FUN_00057b68(); + return param_2 == cVar1; +} + + + +### FUNC FUN_00057c50 @ 00057c50 + +undefined4 FUN_00057c50(undefined4 *param_1,undefined4 param_2) + +{ + int iVar1; + undefined4 uVar2; + + do { + uVar2 = *param_1; + iVar1 = (*(code *)&SUB_ffff0fc0)(uVar2,param_2,param_1); + } while (iVar1 != 0); + return uVar2; +} + + + +### FUNC FUN_00057c88 @ 00057c88 + +int FUN_00057c88(uint param_1,uint param_2) + +{ + int iVar1; + int iVar2; + uint uVar3; + + iVar1 = (param_1 & 3) << 3; + do { + uVar3 = *(uint *)(param_1 & 0xfffffffc); + iVar2 = (*(code *)&SUB_ffff0fc0) + (uVar3,~(0xffff << iVar1) & uVar3 | (param_2 & 0xffff) << iVar1, + (uint *)(param_1 & 0xfffffffc)); + } while (iVar2 != 0); + return (int)(short)((0xffff << iVar1 & uVar3) >> iVar1); +} + + + +### FUNC FUN_00057ce8 @ 00057ce8 + +int FUN_00057ce8(uint param_1,int param_2) + +{ + int iVar1; + uint uVar2; + int iVar3; + uint uVar4; + + iVar1 = (param_1 & 3) << 3; + uVar2 = 0xff << iVar1; + do { + uVar4 = *(uint *)(param_1 & 0xfffffffc); + iVar3 = (*(code *)&SUB_ffff0fc0) + (uVar4,~uVar2 & uVar4 | uVar2 & param_2 << iVar1, + (uint *)(param_1 & 0xfffffffc)); + } while (iVar3 != 0); + return (int)(char)((uVar2 & uVar4) >> iVar1); +} + + + +### FUNC FUN_00057dc8 @ 00057dc8 + +int FUN_00057dc8(uint *param_1) + +{ + uint uVar1; + + uVar1 = *param_1; + if ((uVar1 & 0x40000000) == 0) { + uVar1 = uVar1 & 0x7fffffff; + } + else { + uVar1 = uVar1 | 0x80000000; + } + return (int)param_1 + uVar1; +} + + + +### FUNC FUN_00057de0 @ 00057de0 + +int FUN_00057de0(int param_1,int param_2,uint param_3) + +{ + int iVar1; + uint uVar2; + int iVar3; + int iVar4; + int iVar5; + int iVar6; + + if (param_2 == 0) { + return 0; + } + iVar6 = 0; + iVar5 = param_2 + -1; + do { + while( true ) { + iVar1 = (iVar6 + iVar5) / 2; + iVar4 = param_1 + iVar1 * 8; + uVar2 = FUN_00057dc8(iVar4); + if (iVar1 == param_2 + -1) break; + iVar3 = FUN_00057dc8(param_1 + iVar1 * 8 + 8); + if (param_3 < uVar2) goto LAB_00057e44; + if (param_3 <= iVar3 - 1U) { + return iVar4; + } + iVar6 = iVar1 + 1; + } + if (uVar2 <= param_3) { + return iVar4; + } +LAB_00057e44: + if (iVar1 == iVar6) { + return 0; + } + iVar5 = iVar1 + -1; + } while( true ); +} + + + +### FUNC FUN_00057e84 @ 00057e84 + +code * FUN_00057e84(int param_1) + +{ + if (param_1 == 1) { + return __aeabi_unwind_cpp_pr1; + } + if (param_1 != 2) { + if (param_1 == 0) { + return __aeabi_unwind_cpp_pr0; + } + return (code *)0x0; + } + return __aeabi_unwind_cpp_pr2; +} + + + +### FUNC FUN_00057ed4 @ 00057ed4 + +/* WARNING: Removing unreachable block (ram,0x00057f14) */ + +undefined4 FUN_00057ed4(int param_1,int param_2,undefined4 param_3) + +{ + int iVar1; + undefined4 uVar2; + int iVar3; + bool bVar4; + int local_14; + undefined4 uStack_10; + + local_14 = param_2; + uStack_10 = param_3; + iVar1 = __gnu_Unwind_Find_exidx(param_2 + -2,&local_14,param_3,__gnu_Unwind_Find_exidx,param_1); + if ((iVar1 == 0) || (iVar1 = FUN_00057de0(iVar1,local_14,param_2 + -2), iVar1 == 0)) { + *(undefined4 *)(param_1 + 0x10) = 0; + uVar2 = 9; + } + else { + uVar2 = FUN_00057dc8(); + iVar3 = *(int *)(iVar1 + 4); + bVar4 = iVar3 == 1; + if (bVar4) { + iVar3 = 0; + *(undefined4 *)(param_1 + 0x10) = 0; + } + *(undefined4 *)(param_1 + 0x48) = uVar2; + if (bVar4) { + uVar2 = 5; + } + else { + if (iVar3 < 0) { + *(int *)(param_1 + 0x4c) = iVar1 + 4; + } + else { + uVar2 = FUN_00057dc8(); + *(undefined4 *)(param_1 + 0x4c) = uVar2; + } + *(uint *)(param_1 + 0x50) = (uint)(iVar3 < 0); + if ((int)**(uint **)(param_1 + 0x4c) < 0) { + iVar1 = FUN_00057e84(**(uint **)(param_1 + 0x4c) >> 0x18 & 0xf); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 == 0) { + uVar2 = 9; + } + else { + uVar2 = 0; + } + } + else { + uVar2 = FUN_00057dc8(); + *(undefined4 *)(param_1 + 0x10) = uVar2; + uVar2 = 0; + } + } + } + return uVar2; +} + + + +### FUNC FUN_00057fd8 @ 00057fd8 + +void FUN_00057fd8(uint *param_1) + +{ + if ((*param_1 & 1) == 0) { + if ((*param_1 & 2) == 0) { + __gnu_Unwind_Restore_VFP(param_1 + 0x12); + } + else { + __gnu_Unwind_Restore_VFP_D(); + } + } + if ((*param_1 & 4) == 0) { + __gnu_Unwind_Restore_VFP_D_16_to_31(param_1 + 0x34); + } + if ((*param_1 & 8) == 0) { + __gnu_Unwind_Restore_WMMXD(param_1 + 0x54); + } + if ((*param_1 & 0x10) != 0) { + return; + } + __gnu_Unwind_Restore_WMMXC(param_1 + 0x74); + return; +} + + + +### FUNC FUN_00058044 @ 00058044 + +undefined4 FUN_00058044(int *param_1) + +{ + undefined4 uVar1; + + if (*param_1 == 0) { + uVar1 = 0; + } + else { + uVar1 = *(undefined4 *)(*param_1 + (int)param_1); + } + return uVar1; +} + + + +### FUNC FUN_00058058 @ 00058058 + +undefined4 FUN_00058058(void) + +{ + return 9; +} + + + +### FUNC FUN_00058060 @ 00058060 + +void FUN_00058060(void) + +{ + return; +} + + + +### FUNC FUN_00058064 @ 00058064 + +int FUN_00058064(int param_1,int param_2) + +{ + int iVar1; + int iVar2; + int iVar3; + uint uVar4; + int iVar5; + code *pcVar6; + undefined4 uVar7; + undefined8 uVar8; + undefined4 uStack_3f8; + undefined4 uStack_3f4; + undefined4 uStack_3f0; + undefined4 uStack_3ec; + undefined4 uStack_3e8; + undefined4 uStack_3e4; + undefined4 uStack_3e0; + undefined4 uStack_3dc; + undefined4 uStack_3d8; + undefined4 uStack_3d4; + undefined4 uStack_3d0; + undefined4 uStack_3cc; + undefined4 uStack_3c8; + undefined4 uStack_3c4; + undefined4 uStack_3c0; + undefined4 uStack_3bc; + undefined4 uStack_3b8; + undefined4 uStack_3b4; + undefined1 auStack_218 [56]; + undefined4 uStack_1e0; + int iStack_34; + int iStack_30; + undefined4 uStack_2c; + + do { + iVar1 = FUN_00057ed4(param_1,*(undefined4 *)(param_2 + 0x40)); + if (iVar1 != 0) goto LAB_00058084; + *(undefined4 *)(param_1 + 0x14) = *(undefined4 *)(param_2 + 0x40); + iVar1 = param_2; + iVar2 = (**(code **)(param_1 + 0x10))(1,param_1); + } while (iVar2 == 8); + if (iVar2 == 7) { + FUN_00058060(0,*(undefined4 *)(param_2 + 0x40)); + uVar8 = restore_core_regs(param_2 + 4); + iVar5 = (int)((ulonglong)uVar8 >> 0x20); + iVar2 = (int)uVar8; + pcVar6 = *(code **)(iVar2 + 0xc); + uVar7 = *(undefined4 *)(iVar2 + 0x18); + uStack_3f4 = *(undefined4 *)(iVar5 + 4); + uStack_3f0 = *(undefined4 *)(iVar5 + 8); + uStack_3ec = *(undefined4 *)(iVar5 + 0xc); + uStack_3e8 = *(undefined4 *)(iVar5 + 0x10); + uStack_3e4 = *(undefined4 *)(iVar5 + 0x14); + uStack_3e0 = *(undefined4 *)(iVar5 + 0x18); + uStack_3dc = *(undefined4 *)(iVar5 + 0x1c); + uStack_3d8 = *(undefined4 *)(iVar5 + 0x20); + uStack_3d4 = *(undefined4 *)(iVar5 + 0x24); + uStack_3d0 = *(undefined4 *)(iVar5 + 0x28); + uStack_3cc = *(undefined4 *)(iVar5 + 0x2c); + uStack_3c8 = *(undefined4 *)(iVar5 + 0x30); + uStack_3c4 = *(undefined4 *)(iVar5 + 0x34); + uStack_3c0 = *(undefined4 *)(iVar5 + 0x38); + uStack_3bc = *(undefined4 *)(iVar5 + 0x3c); + uStack_3b8 = *(undefined4 *)(iVar5 + 0x40); + iVar5 = 0; + uStack_3f8 = 0; + uStack_2c = 0; + iStack_34 = param_2; + iStack_30 = param_1; + do { + iVar3 = FUN_00057ed4(iVar2,uStack_3b8); + if (iVar1 == 0) { + uVar4 = 9; + } + else { + uVar4 = 10; + } + if (iVar3 == 0) { + *(undefined4 *)(iVar2 + 0x14) = uStack_3b8; + memcpy(auStack_218,&uStack_3f8,0x1e0); + iVar5 = (**(code **)(iVar2 + 0x10))(uVar4,iVar2,auStack_218); + uStack_3b4 = uStack_1e0; + } + else { + uVar4 = uVar4 | 0x10; + uStack_3b4 = uStack_3c0; + } + iVar1 = (*pcVar6)(1,uVar4,iVar2,iVar2,&uStack_3f8,uVar7); + if (iVar1 != 0) { + return 9; + } + if (iVar3 != 0) { + return iVar3; + } + memcpy(&uStack_3f8,auStack_218,0x1e0); + iVar1 = 0; + } while (iVar5 == 8); + if (iVar5 == 7) { + FUN_00058060(0,uStack_3b8); + restore_core_regs(&uStack_3f4); + } + return 9; + } +LAB_00058084: + /* WARNING: Subroutine does not return */ + abort(); +} + + + +### FUNC FUN_000580c8 @ 000580c8 + +int FUN_000580c8(int param_1,int param_2,int param_3) + +{ + int iVar1; + int iVar2; + uint uVar3; + int iVar4; + code *pcVar5; + undefined4 uVar6; + undefined4 local_3e8; + undefined4 local_3e4; + undefined4 uStack_3e0; + undefined4 uStack_3dc; + undefined4 uStack_3d8; + undefined4 local_3d4; + undefined4 uStack_3d0; + undefined4 uStack_3cc; + undefined4 uStack_3c8; + undefined4 local_3c4; + undefined4 uStack_3c0; + undefined4 uStack_3bc; + undefined4 uStack_3b8; + undefined4 local_3b4; + undefined4 uStack_3b0; + undefined4 uStack_3ac; + undefined4 local_3a8; + undefined4 local_3a4; + undefined1 auStack_208 [56]; + undefined4 local_1d0; + + pcVar5 = *(code **)(param_1 + 0xc); + uVar6 = *(undefined4 *)(param_1 + 0x18); + local_3e4 = *(undefined4 *)(param_2 + 4); + uStack_3e0 = *(undefined4 *)(param_2 + 8); + uStack_3dc = *(undefined4 *)(param_2 + 0xc); + uStack_3d8 = *(undefined4 *)(param_2 + 0x10); + local_3d4 = *(undefined4 *)(param_2 + 0x14); + uStack_3d0 = *(undefined4 *)(param_2 + 0x18); + uStack_3cc = *(undefined4 *)(param_2 + 0x1c); + uStack_3c8 = *(undefined4 *)(param_2 + 0x20); + local_3c4 = *(undefined4 *)(param_2 + 0x24); + uStack_3c0 = *(undefined4 *)(param_2 + 0x28); + uStack_3bc = *(undefined4 *)(param_2 + 0x2c); + uStack_3b8 = *(undefined4 *)(param_2 + 0x30); + local_3b4 = *(undefined4 *)(param_2 + 0x34); + uStack_3b0 = *(undefined4 *)(param_2 + 0x38); + uStack_3ac = *(undefined4 *)(param_2 + 0x3c); + local_3a8 = *(undefined4 *)(param_2 + 0x40); + iVar4 = 0; + local_3e8 = 0; + do { + iVar1 = FUN_00057ed4(param_1,local_3a8); + if (param_3 == 0) { + uVar3 = 9; + } + else { + uVar3 = 10; + } + if (iVar1 == 0) { + *(undefined4 *)(param_1 + 0x14) = local_3a8; + memcpy(auStack_208,&local_3e8,0x1e0); + iVar4 = (**(code **)(param_1 + 0x10))(uVar3,param_1,auStack_208); + local_3a4 = local_1d0; + } + else { + uVar3 = uVar3 | 0x10; + local_3a4 = uStack_3b0; + } + iVar2 = (*pcVar5)(1,uVar3,param_1,param_1,&local_3e8,uVar6); + if (iVar2 != 0) { + return 9; + } + if (iVar1 != 0) { + return iVar1; + } + memcpy(&local_3e8,auStack_208,0x1e0); + param_3 = 0; + } while (iVar4 == 8); + if (iVar4 == 7) { + FUN_00058060(0,local_3a8); + restore_core_regs(&local_3e4); + } + return 9; +} + + + +### FUNC _Unwind_GetCFA @ 000581f0 + +undefined4 _Unwind_GetCFA(int param_1) + +{ + return *(undefined4 *)(param_1 + 0x44); +} + + + +### FUNC __gnu_Unwind_RaiseException @ 000581f8 + +undefined4 __gnu_Unwind_RaiseException(int param_1,int param_2) + +{ + int iVar1; + undefined4 local_1f8; + undefined4 local_1f4; + undefined4 uStack_1f0; + undefined4 uStack_1ec; + undefined4 uStack_1e8; + undefined4 local_1e4; + undefined4 uStack_1e0; + undefined4 uStack_1dc; + undefined4 uStack_1d8; + undefined4 local_1d4; + undefined4 uStack_1d0; + undefined4 uStack_1cc; + undefined4 uStack_1c8; + undefined4 local_1c4; + undefined4 uStack_1c0; + undefined4 uStack_1bc; + undefined4 local_1b8; + + *(undefined4 *)(param_2 + 0x40) = *(undefined4 *)(param_2 + 0x3c); + local_1f4 = *(undefined4 *)(param_2 + 4); + uStack_1f0 = *(undefined4 *)(param_2 + 8); + uStack_1ec = *(undefined4 *)(param_2 + 0xc); + uStack_1e8 = *(undefined4 *)(param_2 + 0x10); + local_1e4 = *(undefined4 *)(param_2 + 0x14); + uStack_1e0 = *(undefined4 *)(param_2 + 0x18); + uStack_1dc = *(undefined4 *)(param_2 + 0x1c); + uStack_1d8 = *(undefined4 *)(param_2 + 0x20); + local_1d4 = *(undefined4 *)(param_2 + 0x24); + uStack_1d0 = *(undefined4 *)(param_2 + 0x28); + uStack_1cc = *(undefined4 *)(param_2 + 0x2c); + uStack_1c8 = *(undefined4 *)(param_2 + 0x30); + local_1c4 = *(undefined4 *)(param_2 + 0x34); + uStack_1c0 = *(undefined4 *)(param_2 + 0x38); + uStack_1bc = *(undefined4 *)(param_2 + 0x3c); + local_1b8 = *(undefined4 *)(param_2 + 0x40); + local_1f8 = 0xffffffff; + do { + iVar1 = FUN_00057ed4(param_1,local_1b8); + if (iVar1 != 0) { + return 9; + } + iVar1 = (**(code **)(param_1 + 0x10))(0,param_1,&local_1f8); + } while (iVar1 == 8); + FUN_00057fd8(&local_1f8); + if (iVar1 == 6) { + FUN_00058064(param_1,param_2); + } + return 9; +} + + + +### FUNC __gnu_Unwind_ForcedUnwind @ 0005829c + +void __gnu_Unwind_ForcedUnwind(int param_1,undefined4 param_2,undefined4 param_3,int param_4) + +{ + undefined4 uVar1; + + *(undefined4 *)(param_1 + 0x18) = param_3; + uVar1 = *(undefined4 *)(param_4 + 0x3c); + *(undefined4 *)(param_1 + 0xc) = param_2; + *(undefined4 *)(param_4 + 0x40) = uVar1; + FUN_000580c8(param_1,param_4,0); + return; +} + + + +### FUNC __gnu_Unwind_Resume @ 000582b8 + +void __gnu_Unwind_Resume(int param_1,int param_2) + +{ + int iVar1; + + iVar1 = *(int *)(param_1 + 0xc); + *(undefined4 *)(param_2 + 0x40) = *(undefined4 *)(param_1 + 0x14); + if (iVar1 == 0) { + iVar1 = (**(code **)(param_1 + 0x10))(2,param_1,param_2); + if (iVar1 != 7) { + if (iVar1 != 8) goto LAB_00058328; + FUN_00058064(param_1,param_2); + } + FUN_00058060(0,*(undefined4 *)(param_2 + 0x40)); + restore_core_regs(param_2 + 4); + } + else { + FUN_000580c8(param_1,param_2,1); + } +LAB_00058328: + /* WARNING: Subroutine does not return */ + abort(); +} + + + +### FUNC __gnu_Unwind_Resume_or_Rethrow @ 0005832c + +void __gnu_Unwind_Resume_or_Rethrow(int param_1,int param_2) + +{ + if (*(int *)(param_1 + 0xc) == 0) { + __gnu_Unwind_RaiseException(); + return; + } + *(undefined4 *)(param_2 + 0x40) = *(undefined4 *)(param_2 + 0x3c); + FUN_000580c8(param_1,param_2,0); + return; +} + + + +### FUNC _Unwind_Complete @ 0005834c + +void _Unwind_Complete(void) + +{ + return; +} + + + +### FUNC _Unwind_DeleteException @ 00058350 + +void _Unwind_DeleteException(int param_1) + +{ + if (*(code **)(param_1 + 8) == (code *)0x0) { + return; + } + /* WARNING: Could not recover jumptable at 0x00058364. Too many branches */ + /* WARNING: Treating indirect jump as call */ + (**(code **)(param_1 + 8))(1,param_1); + return; +} + + + +### FUNC _Unwind_VRS_Get @ 00058368 + +undefined4 +_Unwind_VRS_Get(int param_1,undefined4 param_2,uint param_3,int param_4,undefined4 *param_5) + +{ + bool bVar1; + + switch(param_2) { + case 0: + bVar1 = param_3 == 0xf; + if (param_3 < 0x10) { + bVar1 = param_4 == 0; + } + if (bVar1) { + *param_5 = *(undefined4 *)(param_1 + param_3 * 4 + 4); + return 0; + } + break; + case 1: + return 1; + case 2: + break; + case 3: + return 1; + case 4: + return 1; + } + return 2; +} + + + +### FUNC FUN_000583c4 @ 000583c4 + +undefined4 FUN_000583c4(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) + +{ + undefined4 local_c; + + local_c = param_4; + _Unwind_VRS_Get(param_1,0,param_2,0,&local_c,param_2,param_3); + return local_c; +} + + + +### FUNC _Unwind_VRS_Set @ 000583ec + +undefined4 +_Unwind_VRS_Set(int param_1,undefined4 param_2,uint param_3,int param_4,undefined4 *param_5) + +{ + bool bVar1; + + switch(param_2) { + case 0: + bVar1 = param_3 == 0xf; + if (param_3 < 0x10) { + bVar1 = param_4 == 0; + } + if (bVar1) { + *(undefined4 *)(param_1 + param_3 * 4 + 4) = *param_5; + return 0; + } + break; + case 1: + return 1; + case 2: + break; + case 3: + return 1; + case 4: + return 1; + } + return 2; +} + + + +### FUNC FUN_00058448 @ 00058448 + +void FUN_00058448(undefined4 param_1,undefined4 param_2,undefined4 param_3) + +{ + undefined4 local_c; + + local_c = param_3; + _Unwind_VRS_Set(param_1,0,param_2,0,&local_c,param_2,param_3); + return; +} + + + +### FUNC __gnu_Unwind_Backtrace @ 00058474 + +int __gnu_Unwind_Backtrace(code *param_1,undefined4 param_2,int param_3) + +{ + int iVar1; + undefined1 auStack_250 [16]; + code *local_240; + undefined4 local_1f8; + undefined4 local_1f4; + undefined4 uStack_1f0; + undefined4 uStack_1ec; + undefined4 uStack_1e8; + undefined4 local_1e4; + undefined4 uStack_1e0; + undefined4 uStack_1dc; + undefined4 uStack_1d8; + undefined4 local_1d4; + undefined4 uStack_1d0; + undefined4 uStack_1cc; + undefined4 uStack_1c8; + undefined4 local_1c4; + undefined4 uStack_1c0; + undefined4 uStack_1bc; + undefined4 local_1b8; + + *(undefined4 *)(param_3 + 0x40) = *(undefined4 *)(param_3 + 0x3c); + local_1f4 = *(undefined4 *)(param_3 + 4); + uStack_1f0 = *(undefined4 *)(param_3 + 8); + uStack_1ec = *(undefined4 *)(param_3 + 0xc); + uStack_1e8 = *(undefined4 *)(param_3 + 0x10); + local_1e4 = *(undefined4 *)(param_3 + 0x14); + uStack_1e0 = *(undefined4 *)(param_3 + 0x18); + uStack_1dc = *(undefined4 *)(param_3 + 0x1c); + uStack_1d8 = *(undefined4 *)(param_3 + 0x20); + local_1d4 = *(undefined4 *)(param_3 + 0x24); + uStack_1d0 = *(undefined4 *)(param_3 + 0x28); + uStack_1cc = *(undefined4 *)(param_3 + 0x2c); + uStack_1c8 = *(undefined4 *)(param_3 + 0x30); + local_1c4 = *(undefined4 *)(param_3 + 0x34); + uStack_1c0 = *(undefined4 *)(param_3 + 0x38); + uStack_1bc = *(undefined4 *)(param_3 + 0x3c); + local_1b8 = *(undefined4 *)(param_3 + 0x40); + local_1f8 = 0xffffffff; + do { + iVar1 = FUN_00057ed4(auStack_250,local_1b8); + if (iVar1 != 0) { +LAB_000584d8: + iVar1 = 9; + break; + } + FUN_00058448(&local_1f8,0xc,auStack_250); + iVar1 = (*param_1)(&local_1f8,param_2); + if (iVar1 != 0) goto LAB_000584d8; + iVar1 = (*local_240)(8,auStack_250,&local_1f8); + } while ((iVar1 - 5U & 0xfffffffb) != 0); + FUN_00057fd8(&local_1f8); + return iVar1; +} + + + +### FUNC __aeabi_unwind_cpp_pr0 @ 0005892c + +/* WARNING: Removing unreachable block (ram,0x000585fc) */ +/* WARNING: Removing unreachable block (ram,0x00058584) */ +/* WARNING: Removing unreachable block (ram,0x0005858c) */ +/* WARNING: Removing unreachable block (ram,0x000585e4) */ +/* WARNING: Removing unreachable block (ram,0x00058894) */ + +undefined4 __aeabi_unwind_cpp_pr0(uint param_1,code *param_2,undefined4 param_3) + +{ + ushort uVar1; + bool bVar2; + bool bVar3; + uint uVar4; + code *pcVar5; + undefined4 uVar6; + int iVar7; + uint uVar8; + uint *puVar9; + uint uVar10; + int iVar11; + uint uVar12; + uint *puVar13; + code *pcStack_38; + int iStack_34; + uint *puStack_30; + undefined1 uStack_2c; + undefined1 uStack_2b; + + puStack_30 = (uint *)(*(int **)(param_2 + 0x4c) + 1); + uVar10 = param_1 & 3; + iStack_34 = **(int **)(param_2 + 0x4c) << 8; + uStack_2b = 0; + uStack_2c = 3; + puVar13 = puStack_30; + if (uVar10 == 2) { + puVar13 = *(uint **)(param_2 + 0x38); + } + if ((*(uint *)(param_2 + 0x50) & 1) == 0) { + bVar3 = false; +LAB_000585d4: + do { + while( true ) { + if (*puVar13 == 0) goto LAB_0005888c; + uVar1 = *(ushort *)((int)puVar13 + 2); + uVar8 = *puVar13; + puVar9 = puVar13 + 1; + uVar12 = (uVar1 & 0xfffffffe) + *(int *)(param_2 + 0x48); + uVar4 = FUN_000583c4(param_3,0xf); + if (uVar4 < uVar12) { + bVar2 = false; + } + else if (uVar4 < uVar12 + ((ushort)uVar8 & 0xfffffffe)) { + bVar2 = true; + } + else { + bVar2 = false; + } + uVar8 = (ushort)uVar8 & 1 | (uVar1 & 1) << 1; + if (uVar8 != 1) break; + if (uVar10 == 0) { + if (bVar2) { + uVar8 = *puVar9; + if (puVar13[2] == 0xfffffffe) { + return 9; + } + pcStack_38 = param_2 + 0x58; + iVar7 = 1; + if (puVar13[2] == 0xffffffff) { +LAB_000586fc: + iVar11 = FUN_000583c4(param_3,0xd); + pcVar5 = param_2; + if (iVar7 != 2) { + pcVar5 = pcStack_38; + } + *(int *)(param_2 + 0x20) = iVar11; + if (iVar7 == 2) { + pcVar5 = pcVar5 + 0x2c; + *(code **)pcVar5 = pcStack_38; + } +LAB_00058914: + *(code **)(param_2 + 0x24) = pcVar5; + *(uint **)(param_2 + 0x28) = puVar9; + return 6; + } + uVar6 = FUN_00058044(puVar13 + 2); + iVar7 = __cxa_type_match(param_2,uVar6,uVar8 >> 0x1f); + if (iVar7 != 0) goto LAB_000586fc; + } + } + else { + iVar11 = *(int *)(param_2 + 0x20); + iVar7 = FUN_000583c4(param_3,0xd); + if ((iVar11 == iVar7) && (puVar9 == *(uint **)(param_2 + 0x28))) { + uVar6 = FUN_00057dc8(puVar9); + FUN_00058448(param_3,0xf,uVar6); +LAB_0005885c: + uVar6 = 0; + pcVar5 = param_2; + goto LAB_000588ec; + } + } + puVar13 = puVar13 + 3; + } + if (uVar8 != 0) { + if (uVar8 != 2) { + return 9; + } + uVar8 = *puVar9 & 0x7fffffff; + if (uVar10 == 0) { + if (bVar2) { + uVar4 = (param_1 >> 3 ^ 1) & 1; + if (uVar8 == 0) { + uVar4 = 1; + } + if (uVar4 != 0) { + uVar4 = 0; + do { + if (uVar4 == uVar8) { + iVar7 = FUN_000583c4(param_3,0xd); + *(int *)(param_2 + 0x20) = iVar7; + pcVar5 = pcStack_38; + goto LAB_00058914; + } + uVar4 = uVar4 + 1; + pcStack_38 = param_2 + 0x58; + uVar6 = FUN_00058044(puVar9 + uVar4); + iVar7 = __cxa_type_match(param_2,uVar6,0,&pcStack_38); + } while (iVar7 == 0); + } + } + } + else { + iVar11 = *(int *)(param_2 + 0x20); + iVar7 = FUN_000583c4(param_3,0xd); + if ((iVar11 == iVar7) && (puVar9 == *(uint **)(param_2 + 0x28))) { + *(int *)(param_2 + 0x30) = 4; + *(uint *)(param_2 + 0x28) = uVar8; + *(int *)(param_2 + 0x2c) = 0; + *(uint **)(param_2 + 0x34) = puVar13 + 2; + if ((int)*puVar9 < 0) { + uVar6 = FUN_00057dc8(puVar9 + uVar8 + 1); + FUN_00058448(param_3,0xf,uVar6); + goto LAB_0005885c; + } + bVar3 = true; + } + } + if ((int)*puVar9 < 0) { + puVar9 = puVar13 + 2; + } + puVar13 = puVar9 + uVar8 + 1; + goto LAB_000585d4; + } + if (uVar10 == 0) { + bVar2 = false; + } + puVar13 = puVar13 + 2; + } while (!bVar2); + pcVar5 = (code *)FUN_00057dc8(puVar9); + *(uint **)(param_2 + 0x38) = puVar13; + iVar7 = __cxa_begin_cleanup(param_2); + if (iVar7 == 0) { + return 9; + } + uVar6 = 0xf; + } + else { + bVar3 = false; +LAB_0005888c: + iVar7 = __gnu_unwind_execute(param_3,&iStack_34); + if (iVar7 != 0) { + return 9; + } + if (!bVar3) { + return 8; + } + uVar6 = FUN_000583c4(param_3,0xf); + FUN_00058448(param_3,0xe,uVar6); + pcVar5 = __cxa_call_unexpected; + uVar6 = 0xf; + } +LAB_000588ec: + FUN_00058448(param_3,uVar6,pcVar5); + return 7; +} + + + +### FUNC __aeabi_unwind_cpp_pr1 @ 00058934 + +/* WARNING: Removing unreachable block (ram,0x000585fc) */ +/* WARNING: Removing unreachable block (ram,0x0005856c) */ +/* WARNING: Removing unreachable block (ram,0x000585e4) */ +/* WARNING: Removing unreachable block (ram,0x00058894) */ + +undefined4 __aeabi_unwind_cpp_pr1(uint param_1,code *param_2,undefined4 param_3) + +{ + ushort uVar1; + bool bVar2; + bool bVar3; + uint uVar4; + code *pcVar5; + undefined4 uVar6; + int iVar7; + uint uVar8; + uint *puVar9; + uint uVar10; + int iVar11; + uint uVar12; + uint *puVar13; + code *pcStack_38; + int iStack_34; + uint *puStack_30; + undefined1 uStack_2c; + undefined1 uStack_2b; + + uVar8 = **(uint **)(param_2 + 0x4c); + puStack_30 = *(uint **)(param_2 + 0x4c) + 1; + uVar10 = param_1 & 3; + uStack_2b = (undefined1)(uVar8 >> 0x10); + iStack_34 = uVar8 << 0x10; + puVar13 = puStack_30 + (uVar8 >> 0x10 & 0xff); + uStack_2c = 2; + if (uVar10 == 2) { + puVar13 = *(uint **)(param_2 + 0x38); + } + if ((*(uint *)(param_2 + 0x50) & 1) == 0) { + bVar3 = false; +LAB_000585d4: + do { + while( true ) { + if (*puVar13 == 0) goto LAB_0005888c; + uVar1 = *(ushort *)((int)puVar13 + 2); + uVar8 = *puVar13; + puVar9 = puVar13 + 1; + uVar12 = (uVar1 & 0xfffffffe) + *(int *)(param_2 + 0x48); + uVar4 = FUN_000583c4(param_3,0xf); + if (uVar4 < uVar12) { + bVar2 = false; + } + else if (uVar4 < uVar12 + ((ushort)uVar8 & 0xfffffffe)) { + bVar2 = true; + } + else { + bVar2 = false; + } + uVar8 = (ushort)uVar8 & 1 | (uVar1 & 1) << 1; + if (uVar8 != 1) break; + if (uVar10 == 0) { + if (bVar2) { + uVar8 = *puVar9; + if (puVar13[2] == 0xfffffffe) { + return 9; + } + pcStack_38 = param_2 + 0x58; + iVar7 = 1; + if (puVar13[2] == 0xffffffff) { +LAB_000586fc: + iVar11 = FUN_000583c4(param_3,0xd); + pcVar5 = param_2; + if (iVar7 != 2) { + pcVar5 = pcStack_38; + } + *(int *)(param_2 + 0x20) = iVar11; + if (iVar7 == 2) { + pcVar5 = pcVar5 + 0x2c; + *(code **)pcVar5 = pcStack_38; + } +LAB_00058914: + *(code **)(param_2 + 0x24) = pcVar5; + *(uint **)(param_2 + 0x28) = puVar9; + return 6; + } + uVar6 = FUN_00058044(puVar13 + 2); + iVar7 = __cxa_type_match(param_2,uVar6,uVar8 >> 0x1f); + if (iVar7 != 0) goto LAB_000586fc; + } + } + else { + iVar11 = *(int *)(param_2 + 0x20); + iVar7 = FUN_000583c4(param_3,0xd); + if ((iVar11 == iVar7) && (puVar9 == *(uint **)(param_2 + 0x28))) { + uVar6 = FUN_00057dc8(puVar9); + FUN_00058448(param_3,0xf,uVar6); +LAB_0005885c: + uVar6 = 0; + pcVar5 = param_2; + goto LAB_000588ec; + } + } + puVar13 = puVar13 + 3; + } + if (uVar8 != 0) { + if (uVar8 != 2) { + return 9; + } + uVar8 = *puVar9 & 0x7fffffff; + if (uVar10 == 0) { + if (bVar2) { + uVar4 = (param_1 >> 3 ^ 1) & 1; + if (uVar8 == 0) { + uVar4 = 1; + } + if (uVar4 != 0) { + uVar4 = 0; + do { + if (uVar4 == uVar8) { + iVar7 = FUN_000583c4(param_3,0xd); + *(int *)(param_2 + 0x20) = iVar7; + pcVar5 = pcStack_38; + goto LAB_00058914; + } + uVar4 = uVar4 + 1; + pcStack_38 = param_2 + 0x58; + uVar6 = FUN_00058044(puVar9 + uVar4); + iVar7 = __cxa_type_match(param_2,uVar6,0,&pcStack_38); + } while (iVar7 == 0); + } + } + } + else { + iVar11 = *(int *)(param_2 + 0x20); + iVar7 = FUN_000583c4(param_3,0xd); + if ((iVar11 == iVar7) && (puVar9 == *(uint **)(param_2 + 0x28))) { + *(int *)(param_2 + 0x30) = 4; + *(uint *)(param_2 + 0x28) = uVar8; + *(int *)(param_2 + 0x2c) = 0; + *(uint **)(param_2 + 0x34) = puVar13 + 2; + if ((int)*puVar9 < 0) { + uVar6 = FUN_00057dc8(puVar9 + uVar8 + 1); + FUN_00058448(param_3,0xf,uVar6); + goto LAB_0005885c; + } + bVar3 = true; + } + } + if ((int)*puVar9 < 0) { + puVar9 = puVar13 + 2; + } + puVar13 = puVar9 + uVar8 + 1; + goto LAB_000585d4; + } + if (uVar10 == 0) { + bVar2 = false; + } + puVar13 = puVar13 + 2; + } while (!bVar2); + pcVar5 = (code *)FUN_00057dc8(puVar9); + *(uint **)(param_2 + 0x38) = puVar13; + iVar7 = __cxa_begin_cleanup(param_2); + if (iVar7 == 0) { + return 9; + } + uVar6 = 0xf; + } + else { + bVar3 = false; +LAB_0005888c: + iVar7 = __gnu_unwind_execute(param_3,&iStack_34); + if (iVar7 != 0) { + return 9; + } + if (!bVar3) { + return 8; + } + uVar6 = FUN_000583c4(param_3,0xf); + FUN_00058448(param_3,0xe,uVar6); + pcVar5 = __cxa_call_unexpected; + uVar6 = 0xf; + } +LAB_000588ec: + FUN_00058448(param_3,uVar6,pcVar5); + return 7; +} + + + +### FUNC __aeabi_unwind_cpp_pr2 @ 0005893c + +/* WARNING: Removing unreachable block (ram,0x00058600) */ +/* WARNING: Removing unreachable block (ram,0x0005856c) */ +/* WARNING: Removing unreachable block (ram,0x000585e8) */ +/* WARNING: Removing unreachable block (ram,0x00058604) */ +/* WARNING: Removing unreachable block (ram,0x00058894) */ + +undefined4 __aeabi_unwind_cpp_pr2(uint param_1,code *param_2,undefined4 param_3) + +{ + bool bVar1; + bool bVar2; + uint uVar3; + code *pcVar4; + undefined4 uVar5; + int iVar6; + uint uVar7; + uint *puVar8; + uint uVar9; + uint uVar10; + int iVar11; + uint uVar12; + uint *puVar13; + code *local_38; + int local_34; + uint *local_30; + undefined1 local_2c; + undefined1 local_2b; + + uVar7 = **(uint **)(param_2 + 0x4c); + local_30 = *(uint **)(param_2 + 0x4c) + 1; + uVar9 = param_1 & 3; + local_2b = (undefined1)(uVar7 >> 0x10); + local_34 = uVar7 << 0x10; + puVar13 = local_30 + (uVar7 >> 0x10 & 0xff); + local_2c = 2; + if (uVar9 == 2) { + puVar13 = *(uint **)(param_2 + 0x38); + } + if ((*(uint *)(param_2 + 0x50) & 1) == 0) { + bVar2 = false; +LAB_000585d4: + do { + while( true ) { + uVar7 = *puVar13; + if (uVar7 == 0) goto LAB_0005888c; + uVar10 = puVar13[1]; + puVar8 = puVar13 + 2; + uVar12 = (uVar10 & 0xfffffffe) + *(int *)(param_2 + 0x48); + uVar3 = FUN_000583c4(param_3,0xf); + if (uVar3 < uVar12) { + bVar1 = false; + } + else if (uVar3 < uVar12 + (uVar7 & 0xfffffffe)) { + bVar1 = true; + } + else { + bVar1 = false; + } + uVar7 = uVar7 & 1 | (uVar10 & 1) << 1; + if (uVar7 != 1) break; + if (uVar9 == 0) { + if (bVar1) { + uVar7 = *puVar8; + if (puVar13[3] == 0xfffffffe) { + return 9; + } + local_38 = param_2 + 0x58; + iVar6 = 1; + if (puVar13[3] == 0xffffffff) { +LAB_000586fc: + iVar11 = FUN_000583c4(param_3,0xd); + pcVar4 = param_2; + if (iVar6 != 2) { + pcVar4 = local_38; + } + *(int *)(param_2 + 0x20) = iVar11; + if (iVar6 == 2) { + pcVar4 = pcVar4 + 0x2c; + *(code **)pcVar4 = local_38; + } +LAB_00058914: + *(code **)(param_2 + 0x24) = pcVar4; + *(uint **)(param_2 + 0x28) = puVar8; + return 6; + } + uVar5 = FUN_00058044(puVar13 + 3); + iVar6 = __cxa_type_match(param_2,uVar5,uVar7 >> 0x1f); + if (iVar6 != 0) goto LAB_000586fc; + } + } + else { + iVar11 = *(int *)(param_2 + 0x20); + iVar6 = FUN_000583c4(param_3,0xd); + if ((iVar11 == iVar6) && (puVar8 == *(uint **)(param_2 + 0x28))) { + uVar5 = FUN_00057dc8(puVar8); + FUN_00058448(param_3,0xf,uVar5); +LAB_0005885c: + uVar5 = 0; + pcVar4 = param_2; + goto LAB_000588ec; + } + } + puVar13 = puVar13 + 4; + } + if (uVar7 != 0) { + if (uVar7 != 2) { + return 9; + } + uVar7 = *puVar8 & 0x7fffffff; + if (uVar9 == 0) { + if (bVar1) { + uVar3 = (param_1 >> 3 ^ 1) & 1; + if (uVar7 == 0) { + uVar3 = 1; + } + if (uVar3 != 0) { + uVar3 = 0; + do { + if (uVar3 == uVar7) { + iVar6 = FUN_000583c4(param_3,0xd); + *(int *)(param_2 + 0x20) = iVar6; + pcVar4 = local_38; + goto LAB_00058914; + } + uVar3 = uVar3 + 1; + local_38 = param_2 + 0x58; + uVar5 = FUN_00058044(puVar8 + uVar3); + iVar6 = __cxa_type_match(param_2,uVar5,0,&local_38); + } while (iVar6 == 0); + } + } + } + else { + iVar11 = *(int *)(param_2 + 0x20); + iVar6 = FUN_000583c4(param_3,0xd); + if ((iVar11 == iVar6) && (puVar8 == *(uint **)(param_2 + 0x28))) { + *(int *)(param_2 + 0x30) = 4; + *(uint *)(param_2 + 0x28) = uVar7; + *(int *)(param_2 + 0x2c) = 0; + *(uint **)(param_2 + 0x34) = puVar13 + 3; + if ((int)*puVar8 < 0) { + uVar5 = FUN_00057dc8(puVar8 + uVar7 + 1); + FUN_00058448(param_3,0xf,uVar5); + goto LAB_0005885c; + } + bVar2 = true; + } + } + if ((int)*puVar8 < 0) { + puVar8 = puVar13 + 3; + } + puVar13 = puVar8 + uVar7 + 1; + goto LAB_000585d4; + } + if (uVar9 == 0) { + bVar1 = false; + } + puVar13 = puVar13 + 3; + } while (!bVar1); + pcVar4 = (code *)FUN_00057dc8(puVar8); + *(uint **)(param_2 + 0x38) = puVar13; + iVar6 = __cxa_begin_cleanup(param_2); + if (iVar6 == 0) { + return 9; + } + uVar5 = 0xf; + } + else { + bVar2 = false; +LAB_0005888c: + iVar6 = __gnu_unwind_execute(param_3,&local_34); + if (iVar6 != 0) { + return 9; + } + if (!bVar2) { + return 8; + } + uVar5 = FUN_000583c4(param_3,0xf); + FUN_00058448(param_3,0xe,uVar5); + pcVar4 = __cxa_call_unexpected; + uVar5 = 0xf; + } +LAB_000588ec: + FUN_00058448(param_3,uVar5,pcVar4); + return 7; +} + + + +### FUNC _Unwind_VRS_Pop @ 00058944 + +/* WARNING: Type propagation algorithm not settling */ + +undefined4 _Unwind_VRS_Pop(uint *param_1,undefined4 param_2,uint param_3,uint param_4) + +{ + uint *puVar1; + uint uVar2; + undefined4 *puVar3; + int iVar4; + uint uVar5; + undefined4 *puVar6; + uint uVar7; + uint uVar8; + undefined4 *puVar9; + uint uVar10; + bool bVar11; + undefined4 auStack_1ac [33]; + undefined1 auStack_128 [124]; + undefined4 auStack_ac [36]; + + switch(param_2) { + case 0: + if (param_4 != 0) { + return 2; + } + iVar4 = 1; + puVar1 = (uint *)param_1[0xe]; + do { + bVar11 = (param_3 & 0xffff & 1 << (iVar4 - 1U & 0xff)) != 0; + if (bVar11) { + param_1[iVar4] = *puVar1; + } + iVar4 = iVar4 + 1; + if (bVar11) { + puVar1 = puVar1 + 1; + } + } while (iVar4 != 0x11); + if ((param_3 & 0x2000) != 0) { + return 0; + } + param_1[0xe] = (uint)puVar1; + return 0; + case 1: + if ((param_4 & 0xfffffffb) != 1) { + return 2; + } + uVar5 = param_3 >> 0x10; + param_3 = param_3 & 0xffff; + uVar7 = param_3 + uVar5; + if (param_4 == 1) { + if (0x10 < uVar7) { + return 2; + } + if (0xf < uVar5) { + return 2; + } + uVar8 = 0; + uVar7 = 1; + } + else { + if (0x20 < uVar7) { + return 2; + } + uVar8 = param_3; + if (uVar5 < 0x10) { + if (uVar7 < 0x11) { + uVar8 = 0; + uVar7 = uVar8; + goto LAB_00058a18; + } + uVar8 = uVar7 - 0x10; + } + uVar7 = 0; + } +LAB_00058a18: + uVar10 = uVar8; + if (uVar8 != 0) { + uVar10 = 1; + } + if (param_4 != 5 && uVar8 != 0) { + return 2; + } + if ((uVar5 < 0x10) && (uVar2 = *param_1, (uVar2 & 1) != 0)) { + *param_1 = uVar2 & 0xfffffffe; + if (param_4 != 5) { + *param_1 = uVar2 & 0xfffffffc; + __gnu_Unwind_Save_VFP(param_1 + 0x12); + goto LAB_00058a80; + } + *param_1 = uVar2 & 0xfffffffe | 2; + __gnu_Unwind_Save_VFP_D(); + if (uVar10 != 0) goto LAB_00058a88; +LAB_00058a68: + __gnu_Unwind_Save_VFP_D(auStack_ac + 1); +LAB_00058ab4: + if (uVar10 == 0) goto LAB_00058ac8; + __gnu_Unwind_Save_VFP_D_16_to_31(auStack_128); + } + else { +LAB_00058a80: + if (uVar10 == 0) { + if (uVar7 != 0) { + __gnu_Unwind_Save_VFP(auStack_ac + 1); + goto LAB_00058ac8; + } + if (0xf < uVar5) goto LAB_00058ac8; + goto LAB_00058a68; + } +LAB_00058a88: + if ((*param_1 & 4) != 0) { + *param_1 = *param_1 & 0xfffffffb; + __gnu_Unwind_Save_VFP_D_16_to_31(param_1 + 0x34); + } + if (uVar7 == 0) { + if (uVar5 < 0x10) goto LAB_00058a68; + goto LAB_00058ab4; + } + __gnu_Unwind_Save_VFP(auStack_ac + 1); + } + param_3 = 0x10 - uVar5; +LAB_00058ac8: + puVar6 = (undefined4 *)param_1[0xe]; + if (0 < (int)param_3) { + for (iVar4 = 0; iVar4 != param_3 * 2; iVar4 = iVar4 + 1) { + auStack_ac[uVar5 * 2 + iVar4 + 1U] = puVar6[iVar4]; + } + puVar6 = puVar6 + iVar4; + } + if (uVar10 != 0) { + uVar2 = uVar5; + if (uVar5 < 0x10) { + uVar2 = 0x10; + } + puVar3 = auStack_1ac + uVar2 * 2; + puVar9 = puVar6 + uVar8 * 2; + for (; puVar6 != puVar9; puVar6 = puVar6 + 1) { + puVar3 = puVar3 + 1; + *puVar3 = *puVar6; + } + } + if (uVar7 != 0) { + puVar6 = puVar6 + 1; + } + param_1[0xe] = (uint)puVar6; + if (uVar7 == 0) { + if (uVar5 < 0x10) { + __gnu_Unwind_Restore_VFP_D(auStack_ac + 1); + } + if (uVar10 != 0) { + __gnu_Unwind_Restore_VFP_D_16_to_31(auStack_128); + } + } + else { + __gnu_Unwind_Restore_VFP(auStack_ac + 1); + } + return 0; + case 2: + break; + case 3: + if (param_4 == 3) { + if ((param_3 & 0xffff) + (param_3 >> 0x10) < 0x11) { + if ((*param_1 & 8) != 0) { + *param_1 = *param_1 & 0xfffffff7; + __gnu_Unwind_Save_WMMXD(param_1 + 0x54); + } + __gnu_Unwind_Save_WMMXD(auStack_ac + 1); + puVar6 = (undefined4 *)param_1[0xe]; + puVar3 = auStack_ac + (param_3 >> 0x10) * 2; + puVar9 = puVar6 + (param_3 & 0xffff) * 2; + for (; puVar6 != puVar9; puVar6 = puVar6 + 1) { + puVar3 = puVar3 + 1; + *puVar3 = *puVar6; + } + param_1[0xe] = (uint)puVar6; + __gnu_Unwind_Restore_WMMXD(auStack_ac + 1); + return 0; + } + } + break; + case 4: + bVar11 = param_3 == 0x10; + if (param_3 < 0x11) { + bVar11 = param_4 == 0; + } + if (bVar11) { + if ((*param_1 & 0x10) != 0) { + *param_1 = *param_1 & 0xffffffef; + __gnu_Unwind_Save_WMMXC(param_1 + 0x74); + } + puVar6 = auStack_ac + 1; + __gnu_Unwind_Save_WMMXC(puVar6); + puVar3 = (undefined4 *)param_1[0xe]; + uVar5 = 0; + do { + bVar11 = (param_3 & 1 << (uVar5 & 0xff)) != 0; + if (bVar11) { + puVar6[uVar5] = *puVar3; + } + uVar5 = uVar5 + 1; + if (bVar11) { + puVar3 = puVar3 + 1; + } + } while (uVar5 != 4); + param_1[0xe] = (uint)puVar3; + __gnu_Unwind_Restore_WMMXC(puVar6); + return 0; + } + } + return 2; +} + + + +### FUNC restore_core_regs @ 00058cb0 + +undefined8 restore_core_regs(undefined8 *param_1) + +{ + return *param_1; +} + + + +### FUNC __gnu_Unwind_Restore_VFP @ 00058cc4 + +undefined8 __gnu_Unwind_Restore_VFP(undefined8 *param_1) + +{ + return *param_1; +} + + + +### FUNC __gnu_Unwind_Save_VFP @ 00058ccc + +void __gnu_Unwind_Save_VFP(undefined8 *param_1) + +{ + undefined8 in_d0; + undefined8 in_d1; + undefined8 in_d2; + undefined8 in_d3; + undefined8 in_d4; + undefined8 in_d5; + undefined8 in_d6; + undefined8 in_d7; + undefined8 unaff_d8; + undefined8 unaff_d9; + undefined8 unaff_d10; + undefined8 unaff_d11; + undefined8 unaff_d12; + undefined8 unaff_d13; + undefined8 unaff_d14; + undefined8 unaff_d15; + + *param_1 = in_d0; + param_1[1] = in_d1; + param_1[2] = in_d2; + param_1[3] = in_d3; + param_1[4] = in_d4; + param_1[5] = in_d5; + param_1[6] = in_d6; + param_1[7] = in_d7; + param_1[8] = unaff_d8; + param_1[9] = unaff_d9; + param_1[10] = unaff_d10; + param_1[0xb] = unaff_d11; + param_1[0xc] = unaff_d12; + param_1[0xd] = unaff_d13; + param_1[0xe] = unaff_d14; + param_1[0xf] = unaff_d15; + return; +} + + + +### FUNC __gnu_Unwind_Restore_VFP_D @ 00058cd4 + +undefined8 __gnu_Unwind_Restore_VFP_D(undefined8 *param_1) + +{ + return *param_1; +} + + + +### FUNC __gnu_Unwind_Save_VFP_D @ 00058cdc + +void __gnu_Unwind_Save_VFP_D(undefined8 *param_1) + +{ + undefined8 in_d0; + undefined8 in_d1; + undefined8 in_d2; + undefined8 in_d3; + undefined8 in_d4; + undefined8 in_d5; + undefined8 in_d6; + undefined8 in_d7; + undefined8 unaff_d8; + undefined8 unaff_d9; + undefined8 unaff_d10; + undefined8 unaff_d11; + undefined8 unaff_d12; + undefined8 unaff_d13; + undefined8 unaff_d14; + undefined8 unaff_d15; + + *param_1 = in_d0; + param_1[1] = in_d1; + param_1[2] = in_d2; + param_1[3] = in_d3; + param_1[4] = in_d4; + param_1[5] = in_d5; + param_1[6] = in_d6; + param_1[7] = in_d7; + param_1[8] = unaff_d8; + param_1[9] = unaff_d9; + param_1[10] = unaff_d10; + param_1[0xb] = unaff_d11; + param_1[0xc] = unaff_d12; + param_1[0xd] = unaff_d13; + param_1[0xe] = unaff_d14; + param_1[0xf] = unaff_d15; + return; +} + + + +### FUNC __gnu_Unwind_Restore_VFP_D_16_to_31 @ 00058ce4 + +void __gnu_Unwind_Restore_VFP_D_16_to_31(void) + +{ + return; +} + + + +### FUNC __gnu_Unwind_Save_VFP_D_16_to_31 @ 00058cec + +void __gnu_Unwind_Save_VFP_D_16_to_31(undefined8 *param_1) + +{ + undefined8 in_d16; + undefined8 in_d17; + undefined8 in_d18; + undefined8 in_d19; + undefined8 in_d20; + undefined8 in_d21; + undefined8 in_d22; + undefined8 in_d23; + undefined8 in_d24; + undefined8 in_d25; + undefined8 in_d26; + undefined8 in_d27; + undefined8 in_d28; + undefined8 in_d29; + undefined8 in_d30; + undefined8 in_d31; + + *param_1 = in_d16; + param_1[1] = in_d17; + param_1[2] = in_d18; + param_1[3] = in_d19; + param_1[4] = in_d20; + param_1[5] = in_d21; + param_1[6] = in_d22; + param_1[7] = in_d23; + param_1[8] = in_d24; + param_1[9] = in_d25; + param_1[10] = in_d26; + param_1[0xb] = in_d27; + param_1[0xc] = in_d28; + param_1[0xd] = in_d29; + param_1[0xe] = in_d30; + param_1[0xf] = in_d31; + return; +} + + + +### FUNC __gnu_Unwind_Restore_WMMXD @ 00058cf4 + +int __gnu_Unwind_Restore_WMMXD(int param_1) + +{ + undefined4 in_cr0; + undefined4 in_cr1; + undefined4 in_cr2; + undefined4 in_cr3; + undefined4 in_cr4; + undefined4 in_cr5; + undefined4 in_cr6; + undefined4 in_cr7; + undefined4 in_cr8; + undefined4 in_cr9; + undefined4 in_cr10; + undefined4 in_cr11; + undefined4 in_cr12; + undefined4 in_cr13; + undefined4 in_cr14; + undefined4 in_cr15; + + coprocessor_loadlong(1,in_cr0,param_1); + coprocessor_loadlong(1,in_cr1,param_1 + 8); + coprocessor_loadlong(1,in_cr2,param_1 + 0x10); + coprocessor_loadlong(1,in_cr3,param_1 + 0x18); + coprocessor_loadlong(1,in_cr4,param_1 + 0x20); + coprocessor_loadlong(1,in_cr5,param_1 + 0x28); + coprocessor_loadlong(1,in_cr6,param_1 + 0x30); + coprocessor_loadlong(1,in_cr7,param_1 + 0x38); + coprocessor_loadlong(1,in_cr8,param_1 + 0x40); + coprocessor_loadlong(1,in_cr9,param_1 + 0x48); + coprocessor_loadlong(1,in_cr10,param_1 + 0x50); + coprocessor_loadlong(1,in_cr11,param_1 + 0x58); + coprocessor_loadlong(1,in_cr12,param_1 + 0x60); + coprocessor_loadlong(1,in_cr13,param_1 + 0x68); + coprocessor_loadlong(1,in_cr14,param_1 + 0x70); + coprocessor_loadlong(1,in_cr15,param_1 + 0x78); + return param_1 + 0x80; +} + + + +### FUNC __gnu_Unwind_Save_WMMXD @ 00058d38 + +int __gnu_Unwind_Save_WMMXD(int param_1) + +{ + undefined4 in_cr0; + undefined4 in_cr1; + undefined4 in_cr2; + undefined4 in_cr3; + undefined4 in_cr4; + undefined4 in_cr5; + undefined4 in_cr6; + undefined4 in_cr7; + undefined4 in_cr8; + undefined4 in_cr9; + undefined4 in_cr10; + undefined4 in_cr11; + undefined4 in_cr12; + undefined4 in_cr13; + undefined4 in_cr14; + undefined4 in_cr15; + + coprocessor_storelong(1,in_cr0,param_1); + coprocessor_storelong(1,in_cr1,param_1 + 8); + coprocessor_storelong(1,in_cr2,param_1 + 0x10); + coprocessor_storelong(1,in_cr3,param_1 + 0x18); + coprocessor_storelong(1,in_cr4,param_1 + 0x20); + coprocessor_storelong(1,in_cr5,param_1 + 0x28); + coprocessor_storelong(1,in_cr6,param_1 + 0x30); + coprocessor_storelong(1,in_cr7,param_1 + 0x38); + coprocessor_storelong(1,in_cr8,param_1 + 0x40); + coprocessor_storelong(1,in_cr9,param_1 + 0x48); + coprocessor_storelong(1,in_cr10,param_1 + 0x50); + coprocessor_storelong(1,in_cr11,param_1 + 0x58); + coprocessor_storelong(1,in_cr12,param_1 + 0x60); + coprocessor_storelong(1,in_cr13,param_1 + 0x68); + coprocessor_storelong(1,in_cr14,param_1 + 0x70); + coprocessor_storelong(1,in_cr15,param_1 + 0x78); + return param_1 + 0x80; +} + + + +### FUNC __gnu_Unwind_Restore_WMMXC @ 00058d7c + +int __gnu_Unwind_Restore_WMMXC(int param_1) + +{ + undefined4 in_cr8; + undefined4 in_cr9; + undefined4 in_cr10; + undefined4 in_cr11; + + coprocessor_load2(1,in_cr8,param_1); + coprocessor_load2(1,in_cr9,param_1 + 4); + coprocessor_load2(1,in_cr10,param_1 + 8); + coprocessor_load2(1,in_cr11,param_1 + 0xc); + return param_1 + 0x10; +} + + + +### FUNC __gnu_Unwind_Save_WMMXC @ 00058d90 + +int __gnu_Unwind_Save_WMMXC(int param_1) + +{ + undefined4 in_cr8; + undefined4 in_cr9; + undefined4 in_cr10; + undefined4 in_cr11; + + coprocessor_store2(1,in_cr8,param_1); + coprocessor_store2(1,in_cr9,param_1 + 4); + coprocessor_store2(1,in_cr10,param_1 + 8); + coprocessor_store2(1,in_cr11,param_1 + 0xc); + return param_1 + 0x10; +} + + + +### FUNC ___Unwind_RaiseException @ 00058da4 + +void ___Unwind_RaiseException + (undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) + +{ + undefined4 uStack_44; + undefined4 uStack_40; + undefined4 uStack_3c; + undefined4 uStack_38; + undefined4 uStack_34; + + uStack_44 = 0; + uStack_40 = param_1; + uStack_3c = param_2; + uStack_38 = param_3; + uStack_34 = param_4; + __gnu_Unwind_RaiseException(param_1,&uStack_44,param_3,0,param_3); + return; +} + + + +### FUNC ___Unwind_Resume @ 00058dc8 + +void ___Unwind_Resume(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) + +{ + undefined4 uStack_44; + undefined4 uStack_40; + undefined4 uStack_3c; + undefined4 uStack_38; + undefined4 uStack_34; + + uStack_44 = 0; + uStack_40 = param_1; + uStack_3c = param_2; + uStack_38 = param_3; + uStack_34 = param_4; + __gnu_Unwind_Resume(param_1,&uStack_44,param_3,0,param_3); + return; +} + + + +### FUNC _Unwind_Resume_or_Rethrow @ 00058dec + +void _Unwind_Resume_or_Rethrow + (undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) + +{ + undefined4 uStack_44; + undefined4 uStack_40; + undefined4 uStack_3c; + undefined4 uStack_38; + undefined4 uStack_34; + + uStack_44 = 0; + uStack_40 = param_1; + uStack_3c = param_2; + uStack_38 = param_3; + uStack_34 = param_4; + __gnu_Unwind_Resume_or_Rethrow(param_1,&uStack_44,param_3,0,param_3); + return; +} + + + +### FUNC _Unwind_ForcedUnwind @ 00058e10 + +void _Unwind_ForcedUnwind(void) + +{ + __gnu_Unwind_ForcedUnwind(); + return; +} + + + +### FUNC _Unwind_Backtrace @ 00058e34 + +void _Unwind_Backtrace(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) + +{ + undefined4 uStack_44; + undefined4 uStack_40; + undefined4 uStack_3c; + undefined4 uStack_38; + undefined4 uStack_34; + + uStack_44 = 0; + uStack_40 = param_1; + uStack_3c = param_2; + uStack_38 = param_3; + uStack_34 = param_4; + __gnu_Unwind_Backtrace(param_1,param_2,&uStack_44,0,param_3); + return; +} + + + +### FUNC FUN_00058e58 @ 00058e58 + +uint FUN_00058e58(uint *param_1) + +{ + char cVar1; + uint uVar2; + + if ((char)param_1[2] == '\0') { + if (*(char *)((int)param_1 + 9) == '\0') { + return 0xb0; + } + *(char *)((int)param_1 + 9) = *(char *)((int)param_1 + 9) + -1; + *param_1 = *(uint *)param_1[1]; + param_1[1] = (uint)((uint *)param_1[1] + 1); + cVar1 = '\x03'; + } + else { + cVar1 = (char)param_1[2] + -1; + } + *(char *)(param_1 + 2) = cVar1; + uVar2 = *param_1; + *param_1 = uVar2 << 8; + return uVar2 >> 0x18; +} + + + +### FUNC FUN_00058eb8 @ 00058eb8 + +undefined4 FUN_00058eb8(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) + +{ + undefined4 local_c; + + local_c = param_4; + _Unwind_VRS_Get(param_1,0,0xc,0,&local_c,param_2,param_3); + return local_c; +} + + + +### FUNC __gnu_unwind_execute @ 00058ee4 + +undefined4 __gnu_unwind_execute(int *param_1,undefined4 param_2,undefined4 param_3,int param_4) + +{ + uint uVar1; + undefined4 uVar2; + uint uVar3; + undefined4 uVar4; + bool bVar5; + int iVar6; + int *piVar7; + undefined4 uVar8; + int local_24; + + bVar5 = false; + piVar7 = param_1; + uVar8 = param_2; + local_24 = param_4; +LAB_00058efc: + do { + while( true ) { + uVar1 = FUN_00058e58(param_2); + if (uVar1 == 0xb0) { + if (!bVar5) { + _Unwind_VRS_Get(param_1,0,0xe,0,&local_24,uVar8,param_3); + _Unwind_VRS_Set(param_1,0,0xf,0,&local_24); + } + return 0; + } + if ((uVar1 & 0x80) != 0) break; + _Unwind_VRS_Get(param_1,0,0xd,0,&local_24,uVar8,param_3); + iVar6 = (uVar1 & 0x3f) * 4 + 4; + if ((uVar1 & 0x40) != 0) { + iVar6 = -iVar6; + } + local_24 = local_24 + iVar6; +LAB_00059024: + piVar7 = &local_24; + _Unwind_VRS_Set(param_1,0,0xd,0); + } + uVar3 = uVar1 & 0xf0; + if (uVar3 == 0x80) { + uVar3 = FUN_00058e58(param_2); + uVar3 = uVar3 | uVar1 << 8; + if (uVar3 == 0x8000) { + return 9; + } + iVar6 = _Unwind_VRS_Pop(param_1,0,(uVar3 << 0x14) >> 0x10,0,piVar7); + if (iVar6 != 0) { + return 9; + } + if ((uVar3 & 0x800) != 0) { + bVar5 = true; + } + goto LAB_00058efc; + } + if (uVar3 == 0x90) { + if ((uVar1 & 0xd) == 0xd) { + return 9; + } + _Unwind_VRS_Get(param_1,0,uVar1 & 0xf,0,&local_24,uVar8,param_3); + goto LAB_00059024; + } + if (uVar3 == 0xa0) { + uVar3 = 0xff0 >> (~uVar1 & 7) & 0xff0; + if ((uVar1 & 8) != 0) { + uVar3 = uVar3 | 0x4000; + } + uVar2 = 0; + uVar4 = uVar2; + } + else if (uVar3 == 0xb0) { + if (uVar1 == 0xb1) { + uVar3 = FUN_00058e58(param_2); + if (uVar3 == 0) { + return 9; + } + if ((uVar3 & 0xf0) != 0) { + return 9; + } + uVar2 = 0; + uVar4 = uVar2; + } + else { + if (uVar1 == 0xb2) { + _Unwind_VRS_Get(param_1,0,0xd,0,&local_24,uVar8,param_3); + uVar1 = FUN_00058e58(param_2); + uVar3 = 2; + while ((uVar1 & 0x80) != 0) { + local_24 = local_24 + ((uVar1 & 0x7f) << (uVar3 & 0xff)); + uVar3 = uVar3 + 7; + uVar1 = FUN_00058e58(param_2); + } + local_24 = local_24 + 0x204 + ((uVar1 & 0x7f) << (uVar3 & 0xff)); + goto LAB_00059024; + } + if (uVar1 == 0xb3) { + uVar1 = FUN_00058e58(param_2); + uVar2 = 1; + goto LAB_00059178; + } + if ((uVar1 & 0xfc) == 0xb4) { + return 9; + } + uVar2 = 1; + uVar3 = (uVar1 & 7) + 1 | 0x80000; + uVar4 = uVar2; + } + } + else if (uVar3 == 0xc0) { + if (uVar1 == 0xc6) { + uVar1 = FUN_00058e58(param_2); + uVar2 = 3; +LAB_00059178: + uVar3 = (uVar1 & 0xf) + 1 | (uVar1 & 0xf0) << 0xc; + uVar4 = uVar2; + } + else if (uVar1 == 199) { + uVar3 = FUN_00058e58(param_2); + if (uVar3 == 0) { + return 9; + } + if ((uVar3 & 0xf0) != 0) { + return 9; + } + uVar2 = 4; + uVar4 = 0; + } + else { + if ((uVar1 & 0xf8) != 0xc0) { + if (uVar1 == 200) { + uVar1 = FUN_00058e58(param_2); + uVar3 = (uVar1 & 0xf) + 1 | ((uVar1 & 0xf0) + 0x10) * 0x1000; + } + else { + if (uVar1 != 0xc9) { + return 9; + } + uVar1 = FUN_00058e58(param_2); + uVar3 = (uVar1 & 0xf) + 1 | (uVar1 & 0xf0) << 0xc; + } + goto LAB_0005924c; + } + uVar2 = 3; + uVar3 = (uVar1 & 0xf) + 1 | 0xa0000; + uVar4 = uVar2; + } + } + else { + if ((uVar1 & 0xf8) != 0xd0) { + return 9; + } + uVar3 = (uVar1 & 7) + 1 | 0x80000; +LAB_0005924c: + uVar2 = 1; + uVar4 = 5; + } + iVar6 = _Unwind_VRS_Pop(param_1,uVar2,uVar3,uVar4,piVar7); + if (iVar6 != 0) { + return 9; + } + } while( true ); +} + + + +### FUNC __gnu_unwind_frame @ 0005926c + +void __gnu_unwind_frame(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) + +{ + int iVar1; + int local_14; + int local_10; + undefined1 local_c; + undefined1 local_b; + undefined2 uStack_a; + + iVar1 = *(int *)(param_1 + 0x4c); + local_14 = *(int *)(iVar1 + 4) << 8; + local_10 = iVar1 + 8; + uStack_a = (undefined2)((uint)param_4 >> 0x10); + _local_c = CONCAT11(*(undefined1 *)(iVar1 + 7),3); + __gnu_unwind_execute(param_2,&local_14,3,*(undefined1 *)(iVar1 + 7),param_1); + return; +} + + + +### FUNC _Unwind_GetRegionStart @ 000592ac + +undefined4 _Unwind_GetRegionStart(void) + +{ + int iVar1; + + iVar1 = thunk_FUN_00058eb8(); + return *(undefined4 *)(iVar1 + 0x48); +} + + + +### FUNC _Unwind_GetLanguageSpecificData @ 000592bc + +int _Unwind_GetLanguageSpecificData(void) + +{ + int iVar1; + + iVar1 = thunk_FUN_00058eb8(); + return *(int *)(iVar1 + 0x4c) + (uint)*(byte *)(*(int *)(iVar1 + 0x4c) + 7) * 4 + 8; +} + + + +### FUNC _Unwind_GetDataRelBase @ 000592d8 + +void _Unwind_GetDataRelBase(void) + +{ + /* WARNING: Subroutine does not return */ + abort(); +} + + + +### FUNC _Unwind_GetTextRelBase @ 000592e0 + +void _Unwind_GetTextRelBase(void) + +{ + /* WARNING: Subroutine does not return */ + abort(); +} + + + +### FUNC __divdi3 @ 000592e8 + +undefined8 __divdi3(uint param_1,uint param_2,uint param_3,uint param_4) + +{ + uint uVar1; + uint uVar2; + int iVar3; + uint uVar4; + int iVar5; + uint uVar6; + uint uVar7; + bool bVar8; + bool bVar9; + undefined8 uVar10; + longlong lVar11; + int iVar12; + + if ((int)param_2 < 0) { + uVar4 = -param_1; + param_2 = -(param_2 + (param_1 != 0)); + uVar6 = 0xffffffff; + } + else { + uVar6 = 0; + uVar4 = param_1; + } + uVar7 = param_3; + if ((int)param_4 < 0) { + uVar7 = -param_3; + param_4 = -(param_4 + (param_3 != 0)); + uVar6 = ~uVar6; + } + bVar9 = param_2 <= param_4; + bVar8 = param_4 != param_2; + if (!bVar8) { + bVar9 = uVar4 <= uVar7; + } + uVar2 = param_4; + uVar1 = uVar7; + if (bVar9 && (bVar8 || uVar7 != uVar4)) { + uVar1 = 0; + uVar2 = 0; + } + lVar11 = CONCAT44(uVar2,uVar1); + if (!bVar9 || !bVar8 && uVar7 == uVar4) { + if (param_4 == 0) { + iVar5 = LZCOUNT(uVar7) + 0x20; + } + else { + iVar5 = LZCOUNT(param_4); + } + if (param_2 == 0) { + iVar3 = LZCOUNT(uVar4) + 0x20; + } + else { + iVar3 = LZCOUNT(param_2); + } + iVar5 = iVar5 - iVar3; + iVar12 = iVar5; + uVar10 = __ashldi3(uVar7,param_4,iVar5,iVar3,param_1,iVar5,param_3); + uVar7 = (uint)((ulonglong)uVar10 >> 0x20); + uVar1 = (uint)uVar10; + bVar9 = uVar7 <= param_2; + if (param_2 == uVar7) { + bVar9 = uVar1 <= uVar4; + } + if (bVar9) { + bVar9 = uVar4 < uVar1; + uVar4 = uVar4 - uVar1; + param_2 = param_2 - (uVar7 + bVar9); + lVar11 = __ashldi3(1,0,iVar5); + } + else { + lVar11 = 0; + } + if (iVar5 != 0) { + uVar7 = uVar7 >> 1; + uVar1 = (uint)((byte)((ulonglong)uVar10 >> 0x20) & 1) << 0x1f | uVar1 >> 1; + do { + uVar2 = uVar4 - uVar1; + iVar3 = param_2 - (uVar7 + (uVar4 < uVar1)); + bVar9 = uVar7 <= param_2; + if (param_2 == uVar7) { + bVar9 = uVar1 <= uVar4; + } + param_2 = param_2 * 2 + (uint)CARRY4(uVar4,uVar4); + uVar4 = uVar4 * 2; + if (bVar9) { + param_2 = iVar3 * 2 + (uint)CARRY4(uVar2,uVar2) + (uint)(0xfffffffe < uVar2 * 2); + uVar4 = uVar2 * 2 + 1; + } + iVar5 = iVar5 + -1; + } while (iVar5 != 0); + lVar11 = lVar11 + CONCAT44(param_2,uVar4); + uVar7 = (uint)lVar11; + uVar10 = __lshrdi3(uVar4,param_2,iVar12); + uVar10 = __ashldi3((int)uVar10,(int)((ulonglong)uVar10 >> 0x20),iVar12); + lVar11 = CONCAT44((int)((ulonglong)lVar11 >> 0x20) - + ((int)((ulonglong)uVar10 >> 0x20) + (uint)(uVar7 < (uint)uVar10)), + uVar7 - (uint)uVar10); + } + } + if (uVar6 != 0) { + uVar6 = 1; + } + uVar4 = (uint)lVar11 ^ -uVar6; + return CONCAT44(((uint)((ulonglong)lVar11 >> 0x20) ^ -(uint)(uVar6 != 0)) + + (uint)CARRY4(uVar4,uVar6),uVar4 + uVar6); +} + + + +### FUNC __udivdi3 @ 00059468 + +int __udivdi3(uint param_1,uint param_2,uint param_3,uint param_4) + +{ + uint uVar1; + int iVar2; + uint uVar3; + int iVar4; + uint uVar5; + int iVar6; + int iVar7; + uint uVar8; + bool bVar9; + bool bVar10; + undefined8 uVar11; + + bVar9 = param_2 <= param_4; + if (param_4 == param_2) { + bVar9 = param_1 <= param_3; + } + if (bVar9 && (param_4 != param_2 || param_3 != param_1)) { + return 0; + } + if (param_4 == 0) { + iVar6 = LZCOUNT(param_3) + 0x20; + } + else { + iVar6 = LZCOUNT(param_4); + } + if (param_2 == 0) { + iVar4 = LZCOUNT(param_1) + 0x20; + } + else { + iVar4 = LZCOUNT(param_2); + } + iVar6 = iVar6 - iVar4; + uVar11 = __ashldi3(param_3,param_4,iVar6,param_4,param_4); + uVar5 = (uint)((ulonglong)uVar11 >> 0x20); + uVar3 = (uint)uVar11; + bVar9 = uVar5 <= param_2; + if (param_2 == uVar5) { + bVar9 = uVar3 <= param_1; + } + if (bVar9) { + bVar9 = param_1 < uVar3; + param_1 = param_1 - uVar3; + param_2 = param_2 - (uVar5 + bVar9); + iVar4 = __ashldi3(1,0,iVar6); + } + else { + iVar4 = 0; + } + if (iVar6 != 0) { + uVar5 = uVar5 >> 1; + uVar3 = (uint)((byte)((ulonglong)uVar11 >> 0x20) & 1) << 0x1f | uVar3 >> 1; + iVar7 = iVar6; + do { + uVar8 = param_1 - uVar3; + bVar10 = CARRY4(param_1,param_1); + uVar1 = param_1 * 2; + iVar2 = param_2 * 2; + bVar9 = uVar5 <= param_2; + if (param_2 == uVar5) { + bVar9 = uVar3 <= param_1; + } + param_2 = (param_2 - (uVar5 + (param_1 < uVar3))) * 2 + (uint)CARRY4(uVar8,uVar8) + + (uint)(0xfffffffe < uVar8 * 2); + param_1 = uVar8 * 2 + 1; + if (!bVar9) { + param_2 = iVar2 + (uint)bVar10; + param_1 = uVar1; + } + iVar7 = iVar7 + -1; + } while (iVar7 != 0); + uVar11 = __lshrdi3(param_1,param_2,iVar6); + iVar6 = __ashldi3((int)uVar11,(int)((ulonglong)uVar11 >> 0x20),iVar6); + return (param_1 + iVar4) - iVar6; + } + return iVar4; +} + + + +### FUNC __lshrdi3 @ 00059574 + +undefined8 __lshrdi3(uint param_1,uint param_2,uint param_3) + +{ + uint uVar1; + + if ((int)(param_3 - 0x20) < 0) { + uVar1 = param_1 >> (param_3 & 0xff) | param_2 << (0x20 - param_3 & 0xff); + } + else { + uVar1 = param_2 >> (param_3 - 0x20 & 0xff); + } + return CONCAT44(param_2 >> (param_3 & 0xff),uVar1); +} + + + +### FUNC __ashldi3 @ 00059590 + +undefined8 __ashldi3(uint param_1,int param_2,uint param_3) + +{ + uint uVar1; + + if ((int)(param_3 - 0x20) < 0) { + uVar1 = param_2 << (param_3 & 0xff) | param_1 >> (0x20 - param_3 & 0xff); + } + else { + uVar1 = param_1 << (param_3 - 0x20 & 0xff); + } + return CONCAT44(uVar1,param_1 << (param_3 & 0xff)); +} + + + diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/AboutAboutActivity.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/AboutAboutActivity.java new file mode 100644 index 0000000..850fcb5 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/AboutAboutActivity.java @@ -0,0 +1,252 @@ +package cn.com.magnity.magnitycx; + +import android.content.Intent; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.net.Uri; +import android.os.Bundle; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.view.ContextMenu; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; +import cn.com.magnity.magnitycx.sdk.MagParameter; +import cn.com.magnity.magnitycx.sdk.UsbConnection; +import com.baidu.mobstat.StatService; +import com.google.zxing.BinaryBitmap; +import com.google.zxing.ChecksumException; +import com.google.zxing.FormatException; +import com.google.zxing.NotFoundException; +import com.google.zxing.RGBLuminanceSource; +import com.google.zxing.Result; +import com.google.zxing.common.HybridBinarizer; +import com.google.zxing.qrcode.QRCodeReader; +import java.io.File; +import java.io.FileOutputStream; + +/* loaded from: classes.dex */ +public class AboutAboutActivity extends AppCompatActivity { + private ImageView imageView_; + private PackageInfo packInfo_; + private TextView tvCompanyCaption_; + private TextView tvCompany_; + private TextView tvFWVersionCaption_; + private TextView tvFWVersion_; + private TextView tvHWVersionCaption_; + private TextView tvHWVersion_; + private TextView tvProductTypeCaption_; + private TextView tvProductType_; + private TextView tvRightCaption_; + private TextView tvRight_; + private TextView tvSWVersionCaption_; + private TextView tvSWVersion_; + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.support.v4.app.BaseFragmentActivityGingerbread, android.app.Activity + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_about_about); + ActionBar actionBar = getSupportActionBar(); + actionBar.setHomeButtonEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + setTitle(R.string.settingsAboutAbout); + PackageManager packageManager = getPackageManager(); + try { + this.packInfo_ = packageManager.getPackageInfo(getPackageName(), 0); + } catch (PackageManager.NameNotFoundException e) { + this.packInfo_ = null; + } + this.tvProductTypeCaption_ = (TextView) findViewById(R.id.id_text1); + this.tvProductTypeCaption_.setText(R.string.productType); + this.tvProductType_ = (TextView) findViewById(R.id.id_text2); + if (UsbConnection.getInstance().isConnected()) { + switch (MagApplication.magParameter.basePara1.devType) { + case 0: + this.tvProductType_.setText(R.string.c1); + break; + case 1: + this.tvProductType_.setText(R.string.c3); + break; + case 2: + this.tvProductType_.setText(R.string.c3p); + break; + case 3: + this.tvProductType_.setText(R.string.core160); + break; + case 4: + default: + this.tvProductType_.setText(""); + break; + case 5: + this.tvProductType_.setText(R.string.c1pro); + break; + case 6: + this.tvProductType_.setText(R.string.c1prolite); + break; + } + } else { + this.tvProductType_.setText(""); + } + View view = findViewById(R.id.id_swVersion); + this.tvSWVersionCaption_ = (TextView) view.findViewById(R.id.id_text1); + this.tvSWVersionCaption_.setText(R.string.swVersion); + this.tvSWVersion_ = (TextView) view.findViewById(R.id.id_text2); + if (this.packInfo_ != null) { + this.tvSWVersion_.setText(this.packInfo_.versionName); + } + View view2 = findViewById(R.id.id_right); + this.tvRightCaption_ = (TextView) view2.findViewById(R.id.id_text1); + this.tvRightCaption_.setText(R.string.right); + this.tvRight_ = (TextView) view2.findViewById(R.id.id_text2); + this.tvRight_.setText(R.string.juge); + View view3 = findViewById(R.id.id_fwVersion); + this.tvFWVersionCaption_ = (TextView) view3.findViewById(R.id.id_text1); + this.tvFWVersionCaption_.setText(R.string.fwVersion); + this.tvFWVersion_ = (TextView) view3.findViewById(R.id.id_text2); + if (UsbConnection.getInstance().isConnected()) { + this.tvFWVersion_.setText(Integer.toString(MagApplication.magParameter.basePara1.swVersion)); + } else { + this.tvFWVersion_.setText(""); + } + View view4 = findViewById(R.id.id_hwVersion); + this.tvHWVersionCaption_ = (TextView) view4.findViewById(R.id.id_text1); + this.tvHWVersionCaption_.setText(R.string.hwVersion); + this.tvHWVersion_ = (TextView) view4.findViewById(R.id.id_text2); + if (UsbConnection.getInstance().isConnected()) { + this.tvHWVersion_.setText(Integer.toString(MagApplication.magParameter.basePara1.hwVersion)); + } else { + this.tvHWVersion_.setText(""); + } + View view5 = findViewById(R.id.id_company); + this.tvCompanyCaption_ = (TextView) view5.findViewById(R.id.id_text1); + this.tvCompanyCaption_.setText(R.string.company); + this.tvCompany_ = (TextView) view5.findViewById(R.id.id_text2); + this.tvCompany_.setText("http://www.magnity.com.cn"); + this.tvCompany_.setTextColor(-12211576); + this.tvCompany_.setPaintFlags(8); + view5.setOnClickListener(new MagClickListener()); + this.imageView_ = (ImageView) findViewById(R.id.id_barcodeView); + registerForContextMenu(this.imageView_); + } + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.app.Activity + protected void onDestroy() { + unregisterForContextMenu(this.imageView_); + super.onDestroy(); + } + + @Override // android.app.Activity, android.view.View.OnCreateContextMenuListener + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { + super.onCreateContextMenu(menu, v, menuInfo); + menu.add(0, 2, 1, R.string.menu_read_barcode); + } + + @Override // android.app.Activity + public boolean onContextItemSelected(MenuItem item) { + switch (item.getItemId()) { + case 1: + shareOnlineImage(this.imageView_); + break; + case 2: + StatService.onEvent(getApplicationContext(), MagParameter.EVENT_ENTER_WECHAT_STORE_ID, MagParameter.EVENT_ENTER_WECHAT_STORE); + readBarcode(this.imageView_); + break; + } + return super.onContextItemSelected(item); + } + + @Override // android.support.v4.app.FragmentActivity, android.app.Activity + protected void onPause() { + super.onPause(); + StatService.onPause(this); + } + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.app.Activity + protected void onPostResume() { + super.onPostResume(); + StatService.onResume(this); + } + + private void shareOnlineImage(ImageView v) { + Bitmap bmp = ((BitmapDrawable) v.getDrawable()).getBitmap(); + try { + File file = new File(getExternalFilesDir("temp"), "barcode.jpg"); + try { + FileOutputStream out = new FileOutputStream(file); + bmp.compress(Bitmap.CompressFormat.JPEG, 100, out); + out.close(); + if (file.exists()) { + Intent intent = new Intent("android.intent.action.SEND"); + intent.putExtra("android.intent.extra.STREAM", Uri.fromFile(file)); + intent.addFlags(1); + intent.setType("image/*"); + startActivity(Intent.createChooser(intent, getResources().getString(R.string.menu_share_barcode))); + } + } catch (Exception e) { + } + } catch (Exception e2) { + } + } + + private void readBarcode(ImageView v) { + Result re = null; + try { + Bitmap bmp = ((BitmapDrawable) v.getDrawable()).getBitmap(); + int width = bmp.getWidth(); + int height = bmp.getHeight(); + int[] data = new int[width * height]; + bmp.getPixels(data, 0, width, 0, 0, width, height); + RGBLuminanceSource source = new RGBLuminanceSource(width, height, data); + BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source)); + QRCodeReader reader = new QRCodeReader(); + try { + try { + re = reader.decode(bitmap1); + } catch (NotFoundException e) { + e.printStackTrace(); + } + } catch (ChecksumException e2) { + e2.printStackTrace(); + } catch (FormatException e3) { + e3.printStackTrace(); + } + if (re == null) { + Toast.makeText(this, R.string.tip_barcode_fail, 0).show(); + } else { + Toast.makeText(this, String.format(getResources().getString(R.string.tip_goto_store), re.getText()), 0).show(); + StoreActivity.actionStart(this, re.getText()); + } + } catch (Exception e4) { + } + } + + @Override // android.app.Activity + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + super.onBackPressed(); + break; + } + return super.onOptionsItemSelected(item); + } + + private class MagClickListener implements View.OnClickListener { + private MagClickListener() { + } + + @Override // android.view.View.OnClickListener + public void onClick(View v) { + switch (v.getId()) { + case R.id.id_company /* 2131624064 */: + Uri uri = Uri.parse("http://www.magnity.com.cn"); + Intent intent = new Intent("android.intent.action.VIEW", uri); + AboutAboutActivity.this.startActivity(intent); + break; + } + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/AboutProductActivity.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/AboutProductActivity.java new file mode 100644 index 0000000..efaacc7 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/AboutProductActivity.java @@ -0,0 +1,42 @@ +package cn.com.magnity.magnitycx; + +import android.os.Bundle; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.view.MenuItem; +import com.baidu.mobstat.StatService; + +/* loaded from: classes.dex */ +public class AboutProductActivity extends AppCompatActivity { + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.support.v4.app.BaseFragmentActivityGingerbread, android.app.Activity + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_about_product); + ActionBar actionBar = getSupportActionBar(); + actionBar.setHomeButtonEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + setTitle(R.string.settingsAboutProduct); + } + + @Override // android.support.v4.app.FragmentActivity, android.app.Activity + protected void onPause() { + super.onPause(); + StatService.onPause(this); + } + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.app.Activity + protected void onPostResume() { + super.onPostResume(); + StatService.onResume(this); + } + + @Override // android.app.Activity + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + super.onBackPressed(); + break; + } + return super.onOptionsItemSelected(item); + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/BuildConfig.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/BuildConfig.java new file mode 100644 index 0000000..4fcb636 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/BuildConfig.java @@ -0,0 +1,11 @@ +package cn.com.magnity.magnitycx; + +/* loaded from: classes.dex */ +public final class BuildConfig { + public static final String APPLICATION_ID = "cn.com.magnity.magnitycx"; + public static final String BUILD_TYPE = "release"; + public static final boolean DEBUG = false; + public static final String FLAVOR = ""; + public static final int VERSION_CODE = 114; + public static final String VERSION_NAME = "1.1.4"; +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/DialogFragmentMediaInfo.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/DialogFragmentMediaInfo.java new file mode 100644 index 0000000..861402e --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/DialogFragmentMediaInfo.java @@ -0,0 +1,101 @@ +package cn.com.magnity.magnitycx; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.os.Bundle; +import android.support.v4.app.DialogFragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; +import cn.com.magnity.magnitycx.log.Logging; +import java.util.ArrayList; + +/* loaded from: classes.dex */ +public class DialogFragmentMediaInfo extends DialogFragment { + private static final String MEDIAFILEINFO = "mediaFileInfo"; + private MagOnClickListener magOnClickListener_; + private ArrayList mediaInfos_; + + public static DialogFragmentMediaInfo newInstance(ArrayList info) { + Bundle bundle = new Bundle(); + bundle.putStringArrayList(MEDIAFILEINFO, info); + DialogFragmentMediaInfo dlg = new DialogFragmentMediaInfo(); + dlg.setArguments(bundle); + return dlg; + } + + @Override // android.support.v4.app.DialogFragment, android.support.v4.app.Fragment + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Bundle bundle = getArguments(); + if (bundle != null) { + this.mediaInfos_ = bundle.getStringArrayList(MEDIAFILEINFO); + } + this.magOnClickListener_ = new MagOnClickListener(); + } + + private void fillCatigory(View rootView, int viewId, int stringId, String name) { + View item = rootView.findViewById(viewId); + TextView text = (TextView) item.findViewById(R.id.id_text_item_left); + text.setText(stringId); + TextView text2 = (TextView) item.findViewById(R.id.id_text_item_right); + text2.setText(name); + } + + @Override // android.support.v4.app.DialogFragment + public Dialog onCreateDialog(Bundle savedInstanceState) { + int i; + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + LayoutInflater inflater = getActivity().getLayoutInflater(); + View view = inflater.inflate(R.layout.dialog_fragment_media_info, (ViewGroup) null); + Button btnOk = (Button) view.findViewById(R.id.id_btn_ok); + btnOk.setOnClickListener(this.magOnClickListener_); + try { + int i2 = 0 + 1; + try { + boolean isVideo = Integer.parseInt(this.mediaInfos_.get(0)) != 0; + int i3 = i2 + 1; + fillCatigory(view, R.id.id_media_info_name, R.string.mediaInfoName, this.mediaInfos_.get(i2)); + int i4 = i3 + 1; + fillCatigory(view, R.id.id_media_info_time, R.string.mediaInfoTime, this.mediaInfos_.get(i3)); + int i5 = i4 + 1; + fillCatigory(view, R.id.id_media_info_size, R.string.mediaInfoSize, this.mediaInfos_.get(i4)); + if (isVideo) { + i = i5 + 1; + fillCatigory(view, R.id.id_media_info_duration, R.string.mediaInfoDuration, this.mediaInfos_.get(i5)); + } else { + View item = view.findViewById(R.id.id_media_info_duration); + item.setVisibility(8); + i = i5 + 1; + } + int i6 = i + 1; + fillCatigory(view, R.id.id_media_info_resolution, R.string.mediaInfoResolution, this.mediaInfos_.get(i)); + i2 = i6 + 1; + fillCatigory(view, R.id.id_media_info_path, R.string.mediaInfoPath, this.mediaInfos_.get(i6)); + } catch (Exception e) { + Logging.trace("Fail to get media info"); + builder.setView(view); + return builder.create(); + } + } catch (Exception e2) { + } + builder.setView(view); + return builder.create(); + } + + private class MagOnClickListener implements View.OnClickListener { + private MagOnClickListener() { + } + + @Override // android.view.View.OnClickListener + public void onClick(View v) { + switch (v.getId()) { + case R.id.id_btn_ok /* 2131624096 */: + DialogFragmentMediaInfo.this.dismiss(); + break; + } + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/DialogFragmentMode.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/DialogFragmentMode.java new file mode 100644 index 0000000..8834fdf --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/DialogFragmentMode.java @@ -0,0 +1,76 @@ +package cn.com.magnity.magnitycx; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.DialogFragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageButton; + +/* loaded from: classes.dex */ +public class DialogFragmentMode extends DialogFragment { + private ImageButton btnGoBack_; + private ImageButton btnModeIr_; + private ImageButton btnModePip_; + private ModeClickListener modeClickListener_; + + @Override // android.support.v4.app.DialogFragment, android.support.v4.app.Fragment + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setStyle(0, android.R.style.Theme.Black.NoTitleBar.Fullscreen); + this.modeClickListener_ = new ModeClickListener(); + } + + @Override // android.support.v4.app.Fragment + @Nullable + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.dialog_fragment_mode, container); + this.btnGoBack_ = (ImageButton) rootView.findViewById(R.id.id_goback); + this.btnModeIr_ = (ImageButton) rootView.findViewById(R.id.id_mode_ir); + this.btnModePip_ = (ImageButton) rootView.findViewById(R.id.id_mode_pip); + this.btnGoBack_.setOnClickListener(this.modeClickListener_); + this.btnModeIr_.setOnClickListener(this.modeClickListener_); + this.btnModePip_.setOnClickListener(this.modeClickListener_); + setDialogProperty(); + return rootView; + } + + private void setDialogProperty() { + getDialog().requestWindowFeature(1); + getDialog().setCanceledOnTouchOutside(true); + Window window = getDialog().getWindow(); + WindowManager.LayoutParams windowParams = window.getAttributes(); + windowParams.width = -1; + windowParams.height = -2; + window.setAttributes(windowParams); + window.setGravity(48); + window.setWindowAnimations(R.style.ThemeDialog); + } + + @Override // android.support.v4.app.DialogFragment, android.support.v4.app.Fragment + public void onStart() { + super.onStart(); + Window window = getDialog().getWindow(); + WindowManager.LayoutParams windowParams = window.getAttributes(); + windowParams.dimAmount = 0.4f; + windowParams.alpha = 1.0f; + window.setAttributes(windowParams); + } + + private class ModeClickListener implements View.OnClickListener { + private ModeClickListener() { + } + + @Override // android.view.View.OnClickListener + public void onClick(View v) { + switch (v.getId()) { + case R.id.id_goback /* 2131624058 */: + DialogFragmentMode.this.dismiss(); + break; + } + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/DialogFragmentPalette.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/DialogFragmentPalette.java new file mode 100644 index 0000000..bab32c0 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/DialogFragmentPalette.java @@ -0,0 +1,130 @@ +package cn.com.magnity.magnitycx; + +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.DialogFragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageButton; +import android.widget.TextView; +import cn.com.magnity.magnitycx.sdk.DeviceController; +import cn.com.magnity.magnitycx.sdk.SharedPreferencesManager; +import java.util.HashMap; + +/* loaded from: classes.dex */ +public class DialogFragmentPalette extends DialogFragment implements View.OnClickListener { + private View rootView_; + private HashMap mapIndex2Id_ = new HashMap() { // from class: cn.com.magnity.magnitycx.DialogFragmentPalette.1 + { + put(0, Integer.valueOf(R.id.id_palette_white_hot)); + put(1, Integer.valueOf(R.id.id_palette_black_hot)); + put(2, Integer.valueOf(R.id.id_palette_iron_bow)); + put(3, Integer.valueOf(R.id.id_palette_rain_bow)); + put(4, Integer.valueOf(R.id.id_palette_glow_bow)); + put(5, Integer.valueOf(R.id.id_palette_autumn)); + put(6, Integer.valueOf(R.id.id_palette_winter)); + put(7, Integer.valueOf(R.id.id_palette_hot_metal)); + put(8, Integer.valueOf(R.id.id_palette_jet)); + put(9, Integer.valueOf(R.id.id_palette_red_saturation)); + put(10, Integer.valueOf(R.id.id_palette_high_contrast)); + put(11, Integer.valueOf(R.id.id_palette_ret_hot)); + } + }; + private HashMap mapId2Index_ = new HashMap() { // from class: cn.com.magnity.magnitycx.DialogFragmentPalette.2 + { + put(Integer.valueOf(R.id.id_palette_white_hot), 0); + put(Integer.valueOf(R.id.id_palette_black_hot), 1); + put(Integer.valueOf(R.id.id_palette_iron_bow), 2); + put(Integer.valueOf(R.id.id_palette_rain_bow), 3); + put(Integer.valueOf(R.id.id_palette_glow_bow), 4); + put(Integer.valueOf(R.id.id_palette_autumn), 5); + put(Integer.valueOf(R.id.id_palette_winter), 6); + put(Integer.valueOf(R.id.id_palette_hot_metal), 7); + put(Integer.valueOf(R.id.id_palette_jet), 8); + put(Integer.valueOf(R.id.id_palette_red_saturation), 9); + put(Integer.valueOf(R.id.id_palette_high_contrast), 10); + put(Integer.valueOf(R.id.id_palette_ret_hot), 11); + } + }; + + @Override // android.support.v4.app.DialogFragment, android.support.v4.app.Fragment + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override // android.support.v4.app.Fragment + @Nullable + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + this.rootView_ = inflater.inflate(R.layout.dialog_fragment_palette, container); + initPalette(this.rootView_); + getDialog().requestWindowFeature(1); + getDialog().setCanceledOnTouchOutside(true); + getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.liveBackground))); + return this.rootView_; + } + + @Override // android.support.v4.app.DialogFragment, android.support.v4.app.Fragment + public void onStart() { + super.onStart(); + Window window = getDialog().getWindow(); + WindowManager.LayoutParams windowParams = window.getAttributes(); + windowParams.dimAmount = 0.0f; + windowParams.alpha = 0.7f; + window.setAttributes(windowParams); + } + + @Override // android.support.v4.app.DialogFragment, android.support.v4.app.Fragment + public void onDestroyView() { + super.onDestroyView(); + } + + private void initPalette(View rootView) { + fillPalette(rootView, R.id.id_palette_white_hot, R.mipmap.palette_white_hot, R.string.paletteWhiteHot); + fillPalette(rootView, R.id.id_palette_black_hot, R.mipmap.palette_black_hot, R.string.paletteBlackHot); + fillPalette(rootView, R.id.id_palette_iron_bow, R.mipmap.palette_iron_bow, R.string.paletteIronBow); + fillPalette(rootView, R.id.id_palette_rain_bow, R.mipmap.palette_rain_bow, R.string.paletteRainBow); + fillPalette(rootView, R.id.id_palette_glow_bow, R.mipmap.palette_glow_bow, R.string.paletteGlowBow); + fillPalette(rootView, R.id.id_palette_autumn, R.mipmap.palette_autumn, R.string.paletteAutumn); + fillPalette(rootView, R.id.id_palette_winter, R.mipmap.palette_winter, R.string.paletteWinter); + fillPalette(rootView, R.id.id_palette_hot_metal, R.mipmap.palette_hot_metal, R.string.paletteHotMetal); + fillPalette(rootView, R.id.id_palette_jet, R.mipmap.palette_jet, R.string.paletteJet); + fillPalette(rootView, R.id.id_palette_red_saturation, R.mipmap.palette_red_saturation, R.string.paletteRedSaturation); + fillPalette(rootView, R.id.id_palette_high_contrast, R.mipmap.palette_high_contrast, R.string.paletteHighContrast); + fillPalette(rootView, R.id.id_palette_ret_hot, R.mipmap.palette_red_hot, R.string.paletteRedhot); + updateSelectionUi(0, SharedPreferencesManager.getInt("paletteIndex", 2)); + } + + private void fillPalette(View rootView, int viewId, int imgId, int tvId) { + View v = rootView.findViewById(viewId); + v.setBackgroundColor(0); + ImageButton viewer = (ImageButton) v.findViewById(R.id.id_palette_image); + viewer.setImageResource(imgId); + viewer.setOnClickListener(this); + TextView tv = (TextView) v.findViewById(R.id.id_palette_label); + tv.setText(tvId); + } + + void updateSelectionUi(int formerSelected, int currentSelected) { + View v = this.rootView_.findViewById(((Integer) this.mapIndex2Id_.get(Integer.valueOf(formerSelected))).intValue()); + v.setBackgroundColor(0); + View v2 = this.rootView_.findViewById(((Integer) this.mapIndex2Id_.get(Integer.valueOf(currentSelected))).intValue()); + v2.setBackgroundColor(1073741823); + } + + @Override // android.view.View.OnClickListener + public void onClick(View v) { + ViewGroup parent; + if (v.getId() == R.id.id_palette_image && (parent = (ViewGroup) v.getParent().getParent()) != null) { + int index = ((Integer) this.mapId2Index_.get(Integer.valueOf(parent.getId()))).intValue(); + updateSelectionUi(SharedPreferencesManager.getInt("paletteIndex", 2), index); + DeviceController.Lock(); + DeviceController.setColorPalette(index); + DeviceController.Unlock(); + SharedPreferencesManager.putIntWithCommit("paletteIndex", index); + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/DialogFragmentSetting.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/DialogFragmentSetting.java new file mode 100644 index 0000000..2863060 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/DialogFragmentSetting.java @@ -0,0 +1,79 @@ +package cn.com.magnity.magnitycx; + +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.DialogFragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageButton; + +/* loaded from: classes.dex */ +public class DialogFragmentSetting extends DialogFragment { + private ImageButton btnGoBack_; + private ImageButton btnSettingInText_; + private SettingClickListener settingClickListener_; + + @Override // android.support.v4.app.DialogFragment, android.support.v4.app.Fragment + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setStyle(0, android.R.style.Theme.Black.NoTitleBar.Fullscreen); + this.settingClickListener_ = new SettingClickListener(); + } + + @Override // android.support.v4.app.Fragment + @Nullable + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.dialog_fragment_setting, container); + this.btnGoBack_ = (ImageButton) rootView.findViewById(R.id.id_goback); + this.btnSettingInText_ = (ImageButton) rootView.findViewById(R.id.id_setting_in_text); + this.btnGoBack_.setOnClickListener(this.settingClickListener_); + this.btnSettingInText_.setOnClickListener(this.settingClickListener_); + setDialogProperty(); + return rootView; + } + + void setDialogProperty() { + getDialog().requestWindowFeature(1); + getDialog().setCanceledOnTouchOutside(true); + Window window = getDialog().getWindow(); + WindowManager.LayoutParams windowParams = window.getAttributes(); + windowParams.width = -1; + windowParams.height = -2; + window.setAttributes(windowParams); + window.setGravity(48); + window.setWindowAnimations(R.style.ThemeDialog); + } + + @Override // android.support.v4.app.DialogFragment, android.support.v4.app.Fragment + public void onStart() { + super.onStart(); + Window window = getDialog().getWindow(); + WindowManager.LayoutParams windowParams = window.getAttributes(); + windowParams.dimAmount = 0.4f; + windowParams.alpha = 1.0f; + window.setAttributes(windowParams); + } + + private class SettingClickListener implements View.OnClickListener { + private SettingClickListener() { + } + + @Override // android.view.View.OnClickListener + public void onClick(View v) { + switch (v.getId()) { + case R.id.id_goback /* 2131624058 */: + DialogFragmentSetting.this.dismiss(); + break; + case R.id.id_setting_in_text /* 2131624119 */: + Intent intent = new Intent(DialogFragmentSetting.this.getActivity(), (Class) SupportActivity.class); + DialogFragmentSetting.this.startActivity(intent); + DialogFragmentSetting.this.dismiss(); + break; + } + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/DialogOption.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/DialogOption.java new file mode 100644 index 0000000..e6c1d8d --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/DialogOption.java @@ -0,0 +1,149 @@ +package cn.com.magnity.magnitycx; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.DialogFragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; +import cn.com.magnity.magnitycx.sdk.DelegateOptionSelected; +import java.util.ArrayList; + +/* loaded from: classes.dex */ +public class DialogOption extends DialogFragment { + private static final String ARGUMENT_LIST = "ARGUMENT_LIST"; + private static final int[] LIST_ITEMS = {R.id.id_option_sel1, R.id.id_option_sel2, R.id.id_option_sel3, R.id.id_option_sel4, R.id.id_option_sel5}; + private int initSel_; + private DelegateOptionSelected intf_; + private int itemId_; + private int[] listNames_; + private int tipId_; + private int titleId_; + + public static DialogOption newInstance(int titleId, int itemId, int[] listNames, int initSel, DelegateOptionSelected intf, int tipId) { + Bundle bundle = new Bundle(); + ArrayList bundlelist = new ArrayList(); + bundlelist.add(Integer.valueOf(titleId)); + bundlelist.add(Integer.valueOf(itemId)); + bundlelist.add(listNames); + bundlelist.add(Integer.valueOf(initSel)); + bundlelist.add(intf); + bundlelist.add(Integer.valueOf(tipId)); + bundle.putParcelableArrayList(ARGUMENT_LIST, bundlelist); + DialogOption dlg = new DialogOption(); + dlg.setArguments(bundle); + return dlg; + } + + @Override // android.support.v4.app.DialogFragment, android.support.v4.app.Fragment + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Bundle bundle = getArguments(); + if (bundle != null) { + ArrayList list = bundle.getParcelableArrayList(ARGUMENT_LIST); + int i = 0 + 1; + this.titleId_ = ((Integer) list.get(0)).intValue(); + int i2 = i + 1; + this.itemId_ = ((Integer) list.get(i)).intValue(); + int i3 = i2 + 1; + this.listNames_ = (int[]) list.get(i2); + int i4 = i3 + 1; + this.initSel_ = ((Integer) list.get(i3)).intValue(); + int i5 = i4 + 1; + this.intf_ = (DelegateOptionSelected) list.get(i4); + int i6 = i5 + 1; + this.tipId_ = ((Integer) list.get(i5)).intValue(); + } + } + + @Override // android.support.v4.app.Fragment + @Nullable + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + getDialog().requestWindowFeature(1); + getDialog().setCanceledOnTouchOutside(true); + return super.onCreateView(inflater, container, savedInstanceState); + } + + @Override // android.support.v4.app.DialogFragment + @NonNull + public Dialog onCreateDialog(Bundle savedInstanceState) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + LayoutInflater inflater = getActivity().getLayoutInflater(); + View rootView = inflater.inflate(R.layout.dialog_fragment_option, (ViewGroup) null); + MagClickListner magClickListner = new MagClickListner(); + int i = 0; + View v = rootView.findViewById(R.id.id_option_title); + ((TextView) v).setText(this.titleId_); + for (int id : this.listNames_) { + View v2 = setText_(rootView, LIST_ITEMS[i], id, this.initSel_ == i); + v2.setOnClickListener(magClickListner); + i++; + } + for (int j = i; j < LIST_ITEMS.length; j++) { + View v3 = rootView.findViewById(LIST_ITEMS[j]); + v3.setVisibility(8); + } + if (this.tipId_ != 0) { + View v4 = rootView.findViewById(R.id.id_text); + v4.setVisibility(0); + ((TextView) v4).setText(this.tipId_); + } + View v5 = rootView.findViewById(R.id.id_btn_cancel); + v5.setOnClickListener(magClickListner); + builder.setView(rootView); + return builder.create(); + } + + private View setText_(View rootView, int itemId, int stringId, boolean isSelected) { + View item = rootView.findViewById(itemId); + TextView txtView = (TextView) item.findViewById(R.id.id_setting_item_text); + txtView.setText(stringId); + ImageView imgView = (ImageView) item.findViewById(R.id.id_setting_icon); + if (isSelected) { + imgView.setImageResource(R.mipmap.item_selected); + } else { + imgView.setImageResource(R.mipmap.item_unselected); + } + return item; + } + + private class MagClickListner implements View.OnClickListener { + private MagClickListner() { + } + + @Override // android.view.View.OnClickListener + public void onClick(View v) { + int id = v.getId(); + switch (id) { + case R.id.id_option_sel1 /* 2131624100 */: + DialogOption.this.intf_.onOptionSelected(DialogOption.this.itemId_, 0); + DialogOption.this.dismiss(); + break; + case R.id.id_option_sel2 /* 2131624101 */: + DialogOption.this.intf_.onOptionSelected(DialogOption.this.itemId_, 1); + DialogOption.this.dismiss(); + break; + case R.id.id_option_sel3 /* 2131624102 */: + DialogOption.this.intf_.onOptionSelected(DialogOption.this.itemId_, 2); + DialogOption.this.dismiss(); + break; + case R.id.id_option_sel4 /* 2131624103 */: + DialogOption.this.intf_.onOptionSelected(DialogOption.this.itemId_, 3); + DialogOption.this.dismiss(); + break; + case R.id.id_option_sel5 /* 2131624104 */: + DialogOption.this.intf_.onOptionSelected(DialogOption.this.itemId_, 4); + DialogOption.this.dismiss(); + break; + case R.id.id_btn_cancel /* 2131624106 */: + DialogOption.this.dismiss(); + break; + } + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentMainBottom.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentMainBottom.java new file mode 100644 index 0000000..b6a63c4 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentMainBottom.java @@ -0,0 +1,409 @@ +package cn.com.magnity.magnitycx; + +import android.animation.ObjectAnimator; +import android.content.Intent; +import android.graphics.Bitmap; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.util.DisplayMetrics; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; +import cn.com.magnity.magnitycx.FragmentMainCenter; +import cn.com.magnity.magnitycx.MainActivity; +import cn.com.magnity.magnitycx.sdk.BitmapUtilities; +import cn.com.magnity.magnitycx.sdk.DelegateDeviceConnected; +import cn.com.magnity.magnitycx.sdk.DeviceController; +import cn.com.magnity.magnitycx.sdk.GlobalFunc; +import cn.com.magnity.magnitycx.sdk.MagParameter; +import cn.com.magnity.magnitycx.sdk.SharedPreferencesManager; +import cn.com.magnity.magnitycx.sdk.TimerHelper; +import cn.com.magnity.magnitycx.sdk.UsbCommunication; +import com.baidu.mobstat.Config; +import com.baidu.mobstat.StatService; +import java.io.File; +import java.util.ArrayList; + +/* loaded from: classes.dex */ +public class FragmentMainBottom extends Fragment implements MainActivity.DelegateFling, DelegateDeviceConnected, FragmentMainCenter.DelegateCapture { + static final int PHOTO_MARGIN_MARGIN = 0; + private ImageButton btnCapture_; + private ImageButton btnPalette_; + private Handler handler_; + private RelativeLayout layoutSelection_; + private MagClickListener magClickListener_; + private int modeSelection_; + private int screenHeight_; + private int screenWidth_; + private TimerHelper timerHelper_; + private TextView tvPhoto_; + private TextView tvRecord_; + private ImageButton viewBrowse_; + private View viewRecordingPoint_; + private ImageView viewSelectPointer_; + + @Override // android.support.v4.app.Fragment + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override // android.support.v4.app.Fragment + @Nullable + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.fragment_main_bottom, container, false); + init(rootView); + return rootView; + } + + @Override // android.support.v4.app.Fragment + public void onResume() { + ArrayList fileNames = new ArrayList<>(); + GlobalFunc globalFunc = MagApplication.globalFunc; + GlobalFunc.updateFileList(fileNames); + if (fileNames.size() == 0) { + this.viewBrowse_.setScaleType(ImageView.ScaleType.CENTER); + this.viewBrowse_.setImageResource(R.mipmap.empty_photo); + } else { + String pathName = MagApplication.magParameter.mediaDir + File.separator + fileNames.get(0); + int w = getResources().getDimensionPixelSize(R.dimen.mainBottomButtonSize); + BitmapUtilities.getBitmapThumbnail(pathName, w, w); + this.viewBrowse_.setScaleType(ImageView.ScaleType.CENTER_CROP); + this.viewBrowse_.setImageBitmap(BitmapUtilities.getBitmapThumbnail(pathName, getResources().getDimensionPixelSize(R.dimen.mainBottomButtonSize), getResources().getDimensionPixelSize(R.dimen.mainBottomButtonSize))); + } + super.onResume(); + } + + @Override // android.support.v4.app.Fragment + public void onStop() { + if (DeviceController.isRecording()) { + this.btnCapture_.performClick(); + } + super.onStop(); + } + + private void init(View v) { + this.magClickListener_ = new MagClickListener(); + this.tvPhoto_ = (TextView) v.findViewById(R.id.id_photo); + this.tvRecord_ = (TextView) v.findViewById(R.id.id_record); + this.btnCapture_ = (ImageButton) v.findViewById(R.id.id_capture); + this.btnPalette_ = (ImageButton) v.findViewById(R.id.id_palette); + this.viewBrowse_ = (ImageButton) v.findViewById(R.id.id_browse); + this.viewSelectPointer_ = (ImageView) v.findViewById(R.id.id_selector_point); + this.layoutSelection_ = (RelativeLayout) v.findViewById(R.id.id_selection); + this.viewRecordingPoint_ = v.findViewById(R.id.id_recording_point); + this.tvPhoto_.setOnClickListener(this.magClickListener_); + this.tvRecord_.setOnClickListener(this.magClickListener_); + this.btnCapture_.setOnClickListener(this.magClickListener_); + this.btnPalette_.setOnClickListener(this.magClickListener_); + this.viewBrowse_.setOnClickListener(this.magClickListener_); + DisplayMetrics outMetrics = new DisplayMetrics(); + getActivity().getWindow().getWindowManager().getDefaultDisplay().getMetrics(outMetrics); + this.screenWidth_ = outMetrics.widthPixels; + this.screenHeight_ = outMetrics.heightPixels; + initModeSelection(); + onDeviceDisconnected(); + } + + public void initModeSelection() { + this.modeSelection_ = SharedPreferencesManager.getInt("modeSelection", 0); + int orientation = getActivity().getResources().getConfiguration().orientation; + RelativeLayout.LayoutParams layoutPhoto = (RelativeLayout.LayoutParams) this.tvPhoto_.getLayoutParams(); + RelativeLayout.LayoutParams layoutRecord = (RelativeLayout.LayoutParams) this.tvRecord_.getLayoutParams(); + if (layoutPhoto.getRules()[13] != 0) { + layoutPhoto.addRule(13, 0); + } + if (layoutPhoto.getRules()[0] != 0) { + layoutPhoto.addRule(0, 0); + } + if (layoutPhoto.getRules()[3] != 0) { + layoutPhoto.addRule(3, 0); + } + if (layoutRecord.getRules()[13] != 0) { + layoutRecord.addRule(13, 0); + } + if (layoutRecord.getRules()[1] != 0) { + layoutRecord.addRule(1, 0); + } + if (layoutRecord.getRules()[2] != 0) { + layoutRecord.addRule(2, 0); + } + if (this.modeSelection_ == 0) { + this.btnCapture_.setImageResource(R.drawable.button_capture_photo_select); + } else { + this.btnCapture_.setImageResource(R.mipmap.recording_finished); + } + if (orientation == 1) { + if (this.modeSelection_ == 0) { + if (layoutPhoto.getRules()[13] == 0) { + layoutPhoto.addRule(13); + } + if (layoutRecord.getRules()[1] == 0) { + layoutRecord.addRule(1, R.id.id_photo); + } + this.tvPhoto_.setTextColor(getResources().getColor(R.color.selectedModeText)); + this.tvRecord_.setTextColor(getResources().getColor(R.color.textColor)); + return; + } + if (this.modeSelection_ == 1) { + if (layoutRecord.getRules()[13] == 0) { + layoutRecord.addRule(13); + } + if (layoutPhoto.getRules()[0] == 0) { + layoutPhoto.addRule(0, R.id.id_record); + } + this.tvPhoto_.setTextColor(getResources().getColor(R.color.textColor)); + this.tvRecord_.setTextColor(getResources().getColor(R.color.selectedModeText)); + return; + } + return; + } + if (this.modeSelection_ == 0) { + if (layoutPhoto.getRules()[13] == 0) { + layoutPhoto.addRule(13); + } + if (layoutRecord.getRules()[2] == 0) { + layoutRecord.addRule(2, R.id.id_photo); + } + this.tvPhoto_.setTextColor(getResources().getColor(R.color.selectedModeText)); + this.tvRecord_.setTextColor(getResources().getColor(R.color.textColor)); + return; + } + if (this.modeSelection_ == 1) { + if (layoutRecord.getRules()[13] == 0) { + layoutRecord.addRule(13); + } + if (layoutPhoto.getRules()[3] == 0) { + layoutPhoto.addRule(3, R.id.id_record); + } + this.tvPhoto_.setTextColor(getResources().getColor(R.color.textColor)); + this.tvRecord_.setTextColor(getResources().getColor(R.color.selectedModeText)); + } + } + + @Override // cn.com.magnity.magnitycx.sdk.DelegateDeviceConnected + public void onDeviceConnected(UsbCommunication usbComm) { + if (this.btnPalette_ != null) { + this.btnPalette_.setVisibility(0); + } + if (this.btnCapture_ != null) { + this.btnCapture_.setVisibility(0); + } + if (this.viewSelectPointer_ != null) { + this.viewSelectPointer_.setVisibility(0); + } + if (this.layoutSelection_ != null) { + this.layoutSelection_.setVisibility(0); + } + } + + @Override // cn.com.magnity.magnitycx.sdk.DelegateDeviceConnected + public void onDeviceDisconnected() { + if (DeviceController.isRecording()) { + ((MainActivity) getActivity()).getFragmentMainCenter().stopRecording(); + updateButtonsWhenRecordingStatusChanged(true); + blinkWhenRecordingStatusChanged(false); + getActivity().setRequestedOrientation(10); + } + if (this.btnPalette_ != null) { + this.btnPalette_.setVisibility(4); + } + if (this.btnCapture_ != null) { + if (this.modeSelection_ == 0) { + this.btnCapture_.setImageResource(R.drawable.button_capture_photo_select); + } else { + this.btnCapture_.setImageResource(R.mipmap.recording_finished); + } + this.btnCapture_.setVisibility(4); + } + if (this.viewSelectPointer_ != null) { + this.viewSelectPointer_.setVisibility(8); + } + if (this.layoutSelection_ != null) { + this.layoutSelection_.setVisibility(8); + } + } + + @Override // cn.com.magnity.magnitycx.FragmentMainCenter.DelegateCapture + public Bitmap onCapture() { + return null; + } + + @Override // cn.com.magnity.magnitycx.FragmentMainCenter.DelegateCapture + public void onCaptureFinished(String pathName) { + this.viewBrowse_.setScaleType(ImageView.ScaleType.CENTER_CROP); + this.viewBrowse_.setImageBitmap(BitmapUtilities.getBitmapThumbnail(pathName, getResources().getDimensionPixelSize(R.dimen.mainBottomButtonSize), getResources().getDimensionPixelSize(R.dimen.mainBottomButtonSize))); + } + + @Override // cn.com.magnity.magnitycx.FragmentMainCenter.DelegateCapture + public boolean onStartRecording(String pathName) { + return false; + } + + @Override // cn.com.magnity.magnitycx.FragmentMainCenter.DelegateCapture + public void onStopRecording() { + } + + @Override // cn.com.magnity.magnitycx.MainActivity.DelegateFling + public void afterFling(int index) { + setNewSelection(index); + } + + void setNewSelection(int index) { + String sProperty; + if (this.modeSelection_ != index && !DeviceController.isRecording()) { + float posPhoto = 0.0f; + float posRecord = 0.0f; + int orientation = getActivity().getResources().getConfiguration().orientation; + if (orientation == 1) { + sProperty = "x"; + if (index == 0) { + posPhoto = (this.screenWidth_ - this.tvPhoto_.getWidth()) / 2; + posRecord = posPhoto + 0.0f + this.tvPhoto_.getWidth(); + } else if (index == 1) { + posRecord = (this.screenWidth_ - this.tvRecord_.getWidth()) / 2; + posPhoto = (posRecord - 0.0f) - this.tvPhoto_.getWidth(); + } + } else { + sProperty = Config.EXCEPTION_TYPE; + if (index == 0) { + posPhoto = (this.screenHeight_ - this.tvPhoto_.getHeight()) / 2; + posRecord = (posPhoto - 0.0f) - this.tvRecord_.getHeight(); + } else if (index == 1) { + posRecord = (this.screenHeight_ - this.tvRecord_.getHeight()) / 2; + posPhoto = posRecord + 0.0f + this.tvRecord_.getHeight(); + } + } + ObjectAnimator oaPhoto = ObjectAnimator.ofFloat(this.tvPhoto_, sProperty, posPhoto); + oaPhoto.setDuration(300L); + ObjectAnimator oaRecord = ObjectAnimator.ofFloat(this.tvRecord_, sProperty, posRecord); + oaRecord.setDuration(300L); + switch (index) { + case 0: + oaPhoto.setStartDelay(30L); + this.tvPhoto_.setTextColor(getResources().getColor(R.color.selectedModeText)); + this.tvRecord_.setTextColor(getResources().getColor(R.color.textColor)); + this.btnCapture_.setImageResource(R.drawable.button_capture_photo_select); + break; + case 1: + oaRecord.setStartDelay(30L); + this.tvPhoto_.setTextColor(getResources().getColor(R.color.textColor)); + this.tvRecord_.setTextColor(getResources().getColor(R.color.selectedModeText)); + this.btnCapture_.setImageResource(R.mipmap.recording_finished); + break; + } + oaPhoto.start(); + oaRecord.start(); + this.modeSelection_ = index; + SharedPreferencesManager.putIntWithCommit("modeSelection", this.modeSelection_); + } + } + + /* JADX INFO: Access modifiers changed from: private */ + public void updateButtonsWhenRecordingStatusChanged(boolean visible) { + FragmentMainTop fragmentMainTop = ((MainActivity) getActivity()).getFragmentMainTop(); + if (visible) { + this.viewSelectPointer_.setVisibility(0); + this.viewBrowse_.setVisibility(0); + this.layoutSelection_.setVisibility(0); + fragmentMainTop.showButtonsWhenRecordingFinish(); + return; + } + this.viewSelectPointer_.setVisibility(8); + this.viewBrowse_.setVisibility(4); + this.layoutSelection_.setVisibility(8); + fragmentMainTop.hideButtonsWhenRecordingStart(); + } + + /* JADX INFO: Access modifiers changed from: private */ + public void blinkWhenRecordingStatusChanged(boolean blink) { + if (blink) { + this.viewRecordingPoint_.setVisibility(0); + this.handler_ = new Handler() { // from class: cn.com.magnity.magnitycx.FragmentMainBottom.1 + @Override // android.os.Handler + public void handleMessage(Message msg) { + if (DeviceController.isRecording()) { + if (FragmentMainBottom.this.viewRecordingPoint_.getVisibility() == 0) { + FragmentMainBottom.this.viewRecordingPoint_.setVisibility(4); + } else { + FragmentMainBottom.this.viewRecordingPoint_.setVisibility(0); + } + } + } + }; + this.timerHelper_ = new TimerHelper() { // from class: cn.com.magnity.magnitycx.FragmentMainBottom.2 + @Override // cn.com.magnity.magnitycx.sdk.TimerHelper + public void run() { + FragmentMainBottom.this.handler_.sendEmptyMessage(0); + } + }; + this.timerHelper_.start(0L, 500L); + return; + } + this.timerHelper_.stop(); + this.viewRecordingPoint_.setVisibility(4); + } + + private class MagClickListener implements View.OnClickListener { + private MagClickListener() { + } + + @Override // android.view.View.OnClickListener + public void onClick(View v) { + switch (v.getId()) { + case R.id.id_photo /* 2131624122 */: + FragmentMainBottom.this.setNewSelection(0); + break; + case R.id.id_record /* 2131624123 */: + FragmentMainBottom.this.setNewSelection(1); + break; + case R.id.id_browse /* 2131624124 */: + ArrayList fileNames = new ArrayList<>(); + GlobalFunc globalFunc = MagApplication.globalFunc; + GlobalFunc.updateFileList(fileNames); + if (!fileNames.isEmpty()) { + Intent intent = new Intent(FragmentMainBottom.this.getActivity(), (Class) MediaSingleActivity.class); + intent.putExtra(MediaSingleActivity.MEDIAWINDOWFLAG, 0); + intent.putExtra(MediaSingleActivity.MEDIAINDEX, 0); + intent.putStringArrayListExtra(MediaSingleActivity.MEDIANAMELIST, fileNames); + FragmentMainBottom.this.startActivity(intent); + break; + } + break; + case R.id.id_capture /* 2131624126 */: + FragmentMainCenter fragmentMainCenter = ((MainActivity) FragmentMainBottom.this.getActivity()).getFragmentMainCenter(); + if (FragmentMainBottom.this.modeSelection_ == 0) { + StatService.onEvent(FragmentMainBottom.this.getContext(), MagParameter.EVENT_PHOTO_ID, MagParameter.EVENT_PHOTO); + fragmentMainCenter.capturePhoto(); + break; + } else if (DeviceController.isRecording()) { + fragmentMainCenter.stopRecording(); + FragmentMainBottom.this.updateButtonsWhenRecordingStatusChanged(true); + FragmentMainBottom.this.blinkWhenRecordingStatusChanged(false); + FragmentMainBottom.this.btnCapture_.setImageResource(R.mipmap.recording_finished); + FragmentMainBottom.this.getActivity().setRequestedOrientation(10); + break; + } else if (fragmentMainCenter.startRecording()) { + StatService.onEvent(FragmentMainBottom.this.getContext(), MagParameter.EVENT_VIDEO_ID, MagParameter.EVENT_VIDEO); + FragmentMainBottom.this.updateButtonsWhenRecordingStatusChanged(false); + FragmentMainBottom.this.blinkWhenRecordingStatusChanged(true); + FragmentMainBottom.this.btnCapture_.setImageResource(R.mipmap.recording_normal); + FragmentMainBottom.this.getActivity().setRequestedOrientation(14); + break; + } + break; + case R.id.id_palette /* 2131624128 */: + DialogFragmentPalette fragmentPalette = new DialogFragmentPalette(); + StatService.onEvent(FragmentMainBottom.this.getContext(), MagParameter.EVENT_COLOR_PALETTE_ID, MagParameter.EVENT_COLOR_PALETTE); + fragmentPalette.show(FragmentMainBottom.this.getFragmentManager(), "FragmentPalette"); + break; + } + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentMainCenter.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentMainCenter.java new file mode 100644 index 0000000..00958e2 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentMainCenter.java @@ -0,0 +1,345 @@ +package cn.com.magnity.magnitycx; + +import android.graphics.Bitmap; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; +import cn.com.magnity.magnitycx.FragmentMainTop; +import cn.com.magnity.magnitycx.log.Logging; +import cn.com.magnity.magnitycx.sdk.DelegateDeviceConnected; +import cn.com.magnity.magnitycx.sdk.DeviceController; +import cn.com.magnity.magnitycx.sdk.GlobalFunc; +import cn.com.magnity.magnitycx.sdk.UsbCommunication; +import cn.com.magnity.magnitycx.sdk.UsbConnection; +import cn.com.magnity.magnitycx.sdk.VisibleCamera; +import com.baidu.mobstat.StatService; +import com.github.lzyzsd.circleprogress.DonutProgress; +import java.io.File; +import java.io.FileOutputStream; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +/* loaded from: classes.dex */ +public class FragmentMainCenter extends Fragment implements DelegateDeviceConnected, FragmentMainTop.DelegateDisplayModeChanged, UsbCommunication.IProgressCallback { + public static ImageViewerVisible imgViewerVisible_; + private Bitmap bmpCaptured_; + private ImageView imgViewAnim_; + private ImageViewer imgViewer_; + private LinearLayout layout_; + private DonutProgress progBarLoading_; + private String recordingFileName_ = ""; + private TextView tvTipInfo_; + + public interface DelegateCapture { + Bitmap onCapture(); + + void onCaptureFinished(String str); + + boolean onStartRecording(String str); + + void onStopRecording(); + } + + @Override // android.support.v4.app.Fragment + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override // android.support.v4.app.Fragment + @Nullable + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View rootViewer = inflater.inflate(R.layout.fragment_main_center, container, false); + this.imgViewAnim_ = (ImageView) rootViewer.findViewById(R.id.id_imgViewAnim); + this.imgViewer_ = (ImageViewer) rootViewer.findViewById(R.id.id_imgviewer); + this.progBarLoading_ = (DonutProgress) rootViewer.findViewById(R.id.id_loading); + this.tvTipInfo_ = (TextView) rootViewer.findViewById(R.id.id_text); + imgViewerVisible_ = (ImageViewerVisible) rootViewer.findViewById(R.id.id_imgViewerVisible); + this.layout_ = (LinearLayout) rootViewer.findViewById(R.id.id_layoutDevUnconn); + onDeviceDisconnected(); + return rootViewer; + } + + @Override // android.support.v4.app.Fragment + public void onDestroyView() { + super.onDestroyView(); + } + + @Override // android.support.v4.app.Fragment + public void onDestroy() { + super.onDestroy(); + } + + @Override // cn.com.magnity.magnitycx.sdk.DelegateDeviceConnected + public void onDeviceConnected(UsbCommunication comm) { + if (this.imgViewer_ != null) { + this.imgViewer_.setVisibility(0); + } + if (imgViewerVisible_ != null) { + boolean hasPermission = VisibleCamera.isCameraPermission(); + if (MagApplication.magParameter.dispMode == 1) { + imgViewerVisible_.setVisibility(4); + } else if (hasPermission) { + imgViewerVisible_.setVisibility(0); + } + } + if (this.layout_ != null) { + this.layout_.setVisibility(4); + } + if (comm != null && this.imgViewer_ != null) { + this.imgViewer_.initData(MagApplication.magParameter.basePara1.fpaWidth, MagApplication.magParameter.basePara1.fpaHeight); + comm.setImageViewer(this.imgViewer_); + } + } + + public void startLoading() { + this.layout_.setVisibility(4); + this.progBarLoading_.setVisibility(0); + this.progBarLoading_.setProgress(0.0f); + this.tvTipInfo_.setVisibility(0); + this.tvTipInfo_.setText(""); + } + + @Override // android.support.v4.app.Fragment + public void onResume() { + super.onResume(); + StatService.onPageStart(getActivity(), "主页面中"); + } + + @Override // android.support.v4.app.Fragment + public void onPause() { + super.onPause(); + StatService.onPageEnd(getActivity(), "主页面中"); + } + + public void stopLoading(boolean succ) { + this.progBarLoading_.setVisibility(8); + this.tvTipInfo_.setVisibility(8); + if (!succ) { + this.layout_.setVisibility(0); + } + } + + @Override // cn.com.magnity.magnitycx.sdk.DelegateDeviceConnected + public void onDeviceDisconnected() { + getResources(); + if (this.layout_ != null) { + this.layout_.setVisibility(0); + } + if (this.imgViewAnim_ != null) { + this.imgViewAnim_.clearAnimation(); + this.imgViewAnim_.invalidate(); + this.imgViewAnim_.setVisibility(4); + } + if (this.imgViewer_ != null) { + this.imgViewer_.setVisibility(4); + } + if (imgViewerVisible_ != null) { + imgViewerVisible_.setVisibility(4); + } + if (this.progBarLoading_ != null) { + this.progBarLoading_.setVisibility(8); + } + if (this.tvTipInfo_ != null) { + this.tvTipInfo_.setVisibility(8); + } + } + + @Override // cn.com.magnity.magnitycx.sdk.UsbCommunication.IProgressCallback + public void progressCancel(int id) { + getActivity().setRequestedOrientation(10); + switch (id) { + case 0: + stopLoading(false); + UsbConnection.getInstance().notifyObervers(0); + break; + } + Toast.makeText(getContext(), R.string.tipForFail, 1).show(); + } + + @Override // cn.com.magnity.magnitycx.sdk.UsbCommunication.IProgressCallback + public void progressFinished(int id) { + switch (id) { + case 0: + stopLoading(true); + UsbConnection.getInstance().notifyObervers(1); + getActivity().setRequestedOrientation(10); + break; + case 1: + stopLoading(true); + getActivity().setRequestedOrientation(10); + break; + } + } + + @Override // cn.com.magnity.magnitycx.sdk.UsbCommunication.IProgressCallback + public void progressChanged(int id, int progress) { + switch (id) { + case 0: + case 1: + this.progBarLoading_.setProgress(progress); + break; + } + } + + @Override // cn.com.magnity.magnitycx.sdk.UsbCommunication.IProgressCallback + public void progressStart(int id) { + getActivity().setRequestedOrientation(14); + switch (id) { + case 0: + startLoading(); + this.tvTipInfo_.setText(R.string.tipForNewMobile); + break; + case 1: + startLoading(); + this.tvTipInfo_.setText(R.string.tipForDeviceInit); + break; + } + } + + @Override // cn.com.magnity.magnitycx.FragmentMainTop.DelegateDisplayModeChanged + public boolean onDisplayModeChanged(int oldMode, int newMode) { + boolean hasPermission = VisibleCamera.isCameraPermission(); + if (newMode == 0 && hasPermission) { + imgViewerVisible_.setVisibility(0); + } else { + imgViewerVisible_.setVisibility(8); + if (!hasPermission) { + return false; + } + } + return true; + } + + public ImageViewer getImageViewer() { + return this.imgViewer_; + } + + public boolean startRecording() { + this.imgViewAnim_.clearAnimation(); + this.imgViewAnim_.invalidate(); + this.imgViewAnim_.setVisibility(4); + if (!(this.imgViewer_ instanceof DelegateCapture) || this.imgViewer_.getVisibility() != 0) { + return false; + } + String type = ""; + switch (MagApplication.magParameter.basePara1.devType) { + case 0: + type = getResources().getString(R.string.c1); + break; + case 1: + type = getResources().getString(R.string.c3); + break; + case 2: + type = getResources().getString(R.string.c3p); + break; + case 3: + type = getResources().getString(R.string.core160); + break; + case 5: + type = getResources().getString(R.string.c1pro); + break; + case 6: + type = getResources().getString(R.string.c1prolite); + break; + } + this.recordingFileName_ = MagApplication.magParameter.mediaDir + File.separator + type + new SimpleDateFormat("yyyyMMddHHmmssSSS", Locale.US).format(new Date()) + ".mp4"; + if (!this.imgViewer_.onStartRecording(this.recordingFileName_)) { + Logging.warn("Fail to start recording"); + return false; + } + return true; + } + + public void stopRecording() { + this.imgViewer_.onStopRecording(); + FragmentMainBottom fragmentMainBottom = ((MainActivity) getActivity()).getFragmentMainBottom(); + if (fragmentMainBottom instanceof DelegateCapture) { + fragmentMainBottom.onCaptureFinished(this.recordingFileName_); + GlobalFunc.notifyMediaSync(getContext(), new File(this.recordingFileName_)); + } + this.recordingFileName_ = ""; + } + + public boolean capturePhoto() { + if (MagApplication.magParameter.mediaDir.isEmpty()) { + Logging.error("Media not mounted"); + return false; + } + String type = ""; + switch (MagApplication.magParameter.basePara1.devType) { + case 0: + type = getResources().getString(R.string.c1); + break; + case 1: + type = getResources().getString(R.string.c3); + break; + case 2: + type = getResources().getString(R.string.c3p); + break; + case 3: + type = getResources().getString(R.string.core160); + break; + case 5: + type = getResources().getString(R.string.c1pro); + break; + case 6: + type = getResources().getString(R.string.c1prolite); + break; + } + String pathName = MagApplication.magParameter.mediaDir + File.separator + type + new SimpleDateFormat("yyyyMMddHHmmssSSS", Locale.US).format(new Date()) + ".jpg"; + if ((this.imgViewer_ instanceof DelegateCapture) && this.imgViewer_.getVisibility() == 0) { + this.bmpCaptured_ = this.imgViewer_.onCapture(); + if (MagApplication.magParameter.basePara1.devType == 2) { + DeviceController.Lock(); + DeviceController.saveDDT(pathName.replace(".jpg", ".ddt")); + DeviceController.Unlock(); + } + } + if (this.bmpCaptured_ == null) { + Logging.error("Capture photo fail because of ir bmp is null"); + return false; + } + try { + FileOutputStream out = new FileOutputStream(pathName); + this.bmpCaptured_.compress(Bitmap.CompressFormat.JPEG, 100, out); + out.close(); + GlobalFunc.notifyMediaSync(getContext(), new File(pathName)); + FragmentMainBottom fragmentMainBottom = ((MainActivity) getActivity()).getFragmentMainBottom(); + if (fragmentMainBottom instanceof DelegateCapture) { + fragmentMainBottom.onCaptureFinished(pathName); + } + Animation anim = AnimationUtils.loadAnimation(getActivity(), R.anim.photo_capture); + anim.setFillAfter(true); + anim.setAnimationListener(new Animation.AnimationListener() { // from class: cn.com.magnity.magnitycx.FragmentMainCenter.1 + @Override // android.view.animation.Animation.AnimationListener + public void onAnimationStart(Animation animation) { + } + + @Override // android.view.animation.Animation.AnimationListener + public void onAnimationEnd(Animation animation) { + FragmentMainCenter.this.imgViewAnim_.clearAnimation(); + FragmentMainCenter.this.imgViewAnim_.invalidate(); + } + + @Override // android.view.animation.Animation.AnimationListener + public void onAnimationRepeat(Animation animation) { + } + }); + this.imgViewAnim_.startAnimation(anim); + return true; + } catch (Exception e) { + Logging.error("Capture photo fail (" + e.getMessage() + ")"); + return false; + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentMainTop.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentMainTop.java new file mode 100644 index 0000000..93747b4 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentMainTop.java @@ -0,0 +1,383 @@ +package cn.com.magnity.magnitycx; + +import android.content.Intent; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.PopupMenu; +import android.widget.PopupWindow; +import android.widget.TextView; +import android.widget.Toast; +import cn.com.magnity.magnitycx.log.Logging; +import cn.com.magnity.magnitycx.sdk.DelegateDeviceConnected; +import cn.com.magnity.magnitycx.sdk.DeviceController; +import cn.com.magnity.magnitycx.sdk.MagParameter; +import cn.com.magnity.magnitycx.sdk.SharedPreferencesManager; +import cn.com.magnity.magnitycx.sdk.UsbCommunication; +import com.baidu.mobstat.StatService; +import java.lang.reflect.Method; + +/* loaded from: classes.dex */ +public class FragmentMainTop extends Fragment implements DelegateDeviceConnected, PopupMenu.OnMenuItemClickListener, ActivityCompat.OnRequestPermissionsResultCallback { + private ImageButton btnCross_; + private ImageButton btnLaserOn_; + private ImageButton btnMode_; + private ImageButton btnMore_; + private ImageButton btnTraceMaxMin_; + private ImageButton btnZoom_; + private MainTopClickListener clickListener_; + private PopupWindow popupWindowMore_; + private UsbCommunication usbComm_; + + public interface DelegateDisplayModeChanged { + boolean onDisplayModeChanged(int i, int i2); + } + + @Override // android.support.v4.app.Fragment + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + this.clickListener_ = new MainTopClickListener(); + } + + @Override // android.support.v4.app.Fragment + @Nullable + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.fragment_main_top, container, false); + this.btnMode_ = (ImageButton) rootView.findViewById(R.id.id_mode); + this.btnCross_ = (ImageButton) rootView.findViewById(R.id.id_cross); + this.btnLaserOn_ = (ImageButton) rootView.findViewById(R.id.id_laser); + this.btnMore_ = (ImageButton) rootView.findViewById(R.id.id_more); + this.btnTraceMaxMin_ = (ImageButton) rootView.findViewById(R.id.id_trace_max_min); + this.btnZoom_ = (ImageButton) rootView.findViewById(R.id.id_zoom); + this.btnMode_.setOnClickListener(this.clickListener_); + this.btnCross_.setOnClickListener(this.clickListener_); + this.btnLaserOn_.setOnClickListener(this.clickListener_); + this.btnMore_.setOnClickListener(this.clickListener_); + this.btnTraceMaxMin_.setOnClickListener(this.clickListener_); + this.btnZoom_.setOnClickListener(this.clickListener_); + if (MagApplication.magParameter.dispMode == 1) { + this.btnMode_.setImageResource(R.mipmap.disp_mode_ironly); + } else { + this.btnMode_.setImageResource(R.mipmap.disp_mode_pip); + } + if (MagApplication.magParameter.isShowCross) { + this.btnCross_.setImageResource(R.mipmap.center_cross_on); + } else { + this.btnCross_.setImageResource(R.mipmap.center_cross_off); + } + if (MagApplication.magParameter.isTraceMaxMin) { + this.btnTraceMaxMin_.setImageResource(R.mipmap.trace_max_min_on); + } else { + this.btnTraceMaxMin_.setImageResource(R.mipmap.trace_max_min_off); + } + int ratio = MagApplication.magParameter.imageEX; + if (ratio == 0) { + this.btnZoom_.setImageResource(R.mipmap.zoom_1x); + } else if (ratio == 1) { + this.btnZoom_.setImageResource(R.mipmap.zoom_2x); + } else if (ratio == 2) { + this.btnZoom_.setImageResource(R.mipmap.zoom_4x); + } + initPopupWindowMore(); + onDeviceDisconnected(); + return rootView; + } + + private void initPopupWindowMore() { + View moreView = LayoutInflater.from(getActivity()).inflate(R.layout.popup_window_more, (ViewGroup) null); + View viewItem = moreView.findViewById(R.id.id_menu_item_setting); + viewItem.setOnClickListener(this.clickListener_); + ImageView viewLogo = (ImageView) viewItem.findViewById(R.id.id_item_menu_logo); + viewLogo.setImageResource(R.mipmap.settings); + TextView txtView = (TextView) viewItem.findViewById(R.id.id_item_menu_text); + txtView.setText(R.string.labelSetting); + View viewItem2 = moreView.findViewById(R.id.id_menu_item_help); + viewItem2.setOnClickListener(this.clickListener_); + ImageView viewLogo2 = (ImageView) viewItem2.findViewById(R.id.id_item_menu_logo); + viewLogo2.setImageResource(R.mipmap.help); + TextView txtView2 = (TextView) viewItem2.findViewById(R.id.id_item_menu_text); + txtView2.setText(R.string.labelHelp); + this.popupWindowMore_ = new PopupWindow(moreView, -2, -2); + this.popupWindowMore_.setOutsideTouchable(true); + this.popupWindowMore_.setFocusable(true); + this.popupWindowMore_.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.liveBackground))); + } + + @Override // cn.com.magnity.magnitycx.sdk.DelegateDeviceConnected + public void onDeviceConnected(UsbCommunication comm) { + this.usbComm_ = comm; + if (this.btnMode_ != null) { + this.btnMode_.setVisibility(0); + } + if (this.btnZoom_ != null) { + this.btnZoom_.setVisibility(0); + } + switch (MagApplication.magParameter.basePara1.devType) { + case 0: + case 3: + case 5: + case 6: + if (this.btnCross_ != null) { + this.btnCross_.setVisibility(0); + } + if (this.btnTraceMaxMin_ != null) { + this.btnTraceMaxMin_.setVisibility(0); + } + if (this.btnZoom_ != null) { + this.btnZoom_.setVisibility(8); + break; + } + break; + case 1: + if (this.btnCross_ != null) { + this.btnCross_.setVisibility(8); + } + if (this.btnTraceMaxMin_ != null) { + this.btnTraceMaxMin_.setVisibility(8); + } + if (this.btnLaserOn_ != null) { + this.btnLaserOn_.setImageResource(R.mipmap.laser_off); + this.btnLaserOn_.setVisibility(0); + } + if (this.btnZoom_ != null) { + this.btnZoom_.setVisibility(0); + break; + } + break; + case 2: + if (this.btnCross_ != null) { + this.btnCross_.setVisibility(0); + } + if (this.btnTraceMaxMin_ != null) { + this.btnTraceMaxMin_.setVisibility(8); + } + if (this.btnLaserOn_ != null) { + this.btnLaserOn_.setVisibility(0); + } + if (this.btnZoom_ != null) { + this.btnZoom_.setVisibility(0); + break; + } + break; + } + } + + @Override // cn.com.magnity.magnitycx.sdk.DelegateDeviceConnected + public void onDeviceDisconnected() { + this.usbComm_ = null; + if (this.btnMode_ != null) { + this.btnMode_.setVisibility(4); + } + if (this.btnCross_ != null) { + this.btnCross_.setVisibility(4); + } + if (this.btnTraceMaxMin_ != null) { + this.btnTraceMaxMin_.setVisibility(8); + } + if (this.btnLaserOn_ != null) { + this.btnLaserOn_.setVisibility(8); + } + if (this.btnZoom_ != null) { + this.btnZoom_.setVisibility(8); + } + } + + public void hideButtonsWhenRecordingStart() { + this.btnMode_.setVisibility(4); + this.btnMore_.setVisibility(4); + } + + public void showButtonsWhenRecordingFinish() { + this.btnMode_.setVisibility(0); + this.btnMore_.setVisibility(0); + } + + @Override // android.widget.PopupMenu.OnMenuItemClickListener + public boolean onMenuItemClick(MenuItem item) { + return false; + } + + private void setIconsVisible(Menu menu, boolean flag) { + if (menu != null) { + try { + Method method = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE); + if (method != null) { + method.setAccessible(true); + method.invoke(menu, Boolean.valueOf(flag)); + } + } catch (Exception e) { + } + } + } + + /* JADX INFO: Access modifiers changed from: private */ + public void exchangeLogo(final ImageButton btn, final int resIdOn, final int resIdOff, final boolean on) { + Animation anim; + if (getResources().getConfiguration().orientation == 2) { + anim = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_right_out); + } else { + anim = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_bottom_out); + } + anim.setDuration(200L); + anim.setAnimationListener(new Animation.AnimationListener() { // from class: cn.com.magnity.magnitycx.FragmentMainTop.1 + @Override // android.view.animation.Animation.AnimationListener + public void onAnimationStart(Animation animation) { + } + + @Override // android.view.animation.Animation.AnimationListener + public void onAnimationEnd(Animation animation) { + Animation anim2; + if (on) { + btn.setImageResource(resIdOn); + } else { + btn.setImageResource(resIdOff); + } + if (FragmentMainTop.this.getResources().getConfiguration().orientation == 2) { + anim2 = AnimationUtils.loadAnimation(FragmentMainTop.this.getActivity(), R.anim.slide_left_in); + } else { + anim2 = AnimationUtils.loadAnimation(FragmentMainTop.this.getActivity(), R.anim.slide_top_in); + } + anim2.setDuration(200L); + btn.startAnimation(anim2); + } + + @Override // android.view.animation.Animation.AnimationListener + public void onAnimationRepeat(Animation animation) { + } + }); + btn.startAnimation(anim); + } + + public void openLaser() { + if (!this.usbComm_.setLaserState(1)) { + Logging.error("Fail to set laser off"); + } else { + exchangeLogo(this.btnLaserOn_, R.mipmap.laser_on, R.mipmap.laser_off, true); + MagApplication.magParameter.isLaserOn = true; + } + } + + public void closeLaser() { + if (!this.usbComm_.setLaserState(0)) { + Logging.error("Fail to set laser off"); + } else { + exchangeLogo(this.btnLaserOn_, R.mipmap.laser_on, R.mipmap.laser_off, false); + MagApplication.magParameter.isLaserOn = false; + } + } + + private class MainTopClickListener implements View.OnClickListener { + private MainTopClickListener() { + } + + @Override // android.view.View.OnClickListener + public void onClick(View v) { + int dispMode; + switch (v.getId()) { + case R.id.id_mode /* 2131624136 */: + int dispMode2 = MagApplication.magParameter.dispMode; + if (dispMode2 == 0) { + dispMode = 1; + StatService.onEvent(FragmentMainTop.this.getContext(), MagParameter.EVENT_DISABLE_VISWND_ID, MagParameter.EVENT_DISABLE_VISWND); + } else { + dispMode = 0; + StatService.onEvent(FragmentMainTop.this.getContext(), MagParameter.EVENT_ENABLE_VISWND_ID, MagParameter.EVENT_ENABLE_VISWND); + } + FragmentMainTop.this.exchangeLogo(FragmentMainTop.this.btnMode_, R.mipmap.disp_mode_pip, R.mipmap.disp_mode_ironly, dispMode == 0); + FragmentMainCenter fragment = ((MainActivity) FragmentMainTop.this.getActivity()).getFragmentMainCenter(); + if (fragment instanceof DelegateDisplayModeChanged) { + boolean ret = fragment.onDisplayModeChanged(0, dispMode); + if (!ret) { + FragmentMainTop.this.exchangeLogo(FragmentMainTop.this.btnMode_, R.mipmap.disp_mode_pip, R.mipmap.disp_mode_ironly, dispMode != 0); + break; + } + } + SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_DISPMODE, dispMode); + MagApplication.magParameter.dispMode = dispMode; + int num = MagApplication.magParameter.onceTipVisibleMove; + if (dispMode == 0) { + int num2 = num - 1; + if (num != 0) { + MagApplication.magParameter.onceTipVisibleMove = num2; + SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_ONCETIPVISIBLEMOVE, num2); + Toast.makeText(FragmentMainTop.this.getContext(), R.string.onceTipVisibleMove, 1).show(); + break; + } + } + break; + case R.id.id_cross /* 2131624137 */: + MagApplication.magParameter.isShowCross = !MagApplication.magParameter.isShowCross; + if (MagApplication.magParameter.isShowCross) { + StatService.onEvent(FragmentMainTop.this.getContext(), MagParameter.EVENT_ENABLE_CENTER_TEMP_ID, MagParameter.EVENT_ENABLE_CENTER_TEMP); + } else { + StatService.onEvent(FragmentMainTop.this.getContext(), MagParameter.EVENT_DISABLE_CENTER_TEMP_ID, MagParameter.EVENT_DISABLE_CENTER_TEMP); + } + SharedPreferencesManager.putBooleanWithCommit(MagParameter.KEY_SHOWCROSS, MagApplication.magParameter.isShowCross); + FragmentMainTop.this.exchangeLogo(FragmentMainTop.this.btnCross_, R.mipmap.center_cross_on, R.mipmap.center_cross_off, MagApplication.magParameter.isShowCross); + break; + case R.id.id_zoom /* 2131624138 */: + int ratio = MagApplication.magParameter.imageEX; + if (ratio == 0) { + MagApplication.magParameter.imageEX = 1; + SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_EXMODE, MagApplication.magParameter.imageEX); + FragmentMainTop.this.exchangeLogo(FragmentMainTop.this.btnZoom_, R.mipmap.zoom_2x, R.mipmap.zoom_1x, true); + } else if (ratio == 1) { + MagApplication.magParameter.imageEX = 2; + FragmentMainTop.this.exchangeLogo(FragmentMainTop.this.btnZoom_, R.mipmap.zoom_4x, R.mipmap.zoom_2x, true); + } else if (ratio == 2) { + MagApplication.magParameter.imageEX = 0; + FragmentMainTop.this.exchangeLogo(FragmentMainTop.this.btnZoom_, R.mipmap.zoom_1x, R.mipmap.zoom_4x, true); + } + SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_EXMODE, MagApplication.magParameter.imageEX); + DeviceController.setEX(MagApplication.magParameter.imageEX, MagApplication.magParameter.basePara1.fpaWidth / 2, MagApplication.magParameter.basePara1.fpaHeight / 2); + break; + case R.id.id_trace_max_min /* 2131624139 */: + MagApplication.magParameter.isTraceMaxMin = !MagApplication.magParameter.isTraceMaxMin; + SharedPreferencesManager.putBooleanWithCommit(MagParameter.KEY_TRACEMAXMIN, MagApplication.magParameter.isTraceMaxMin); + FragmentMainTop.this.exchangeLogo(FragmentMainTop.this.btnTraceMaxMin_, R.mipmap.trace_max_min_on, R.mipmap.trace_max_min_off, MagApplication.magParameter.isTraceMaxMin); + if ((MagApplication.magParameter.basePara1.devType == 0 || MagApplication.magParameter.basePara1.devType == 5 || MagApplication.magParameter.basePara1.devType == 6 || MagApplication.magParameter.basePara1.devType == 3) && MagApplication.magParameter.maxMinTrace == -1 && MagApplication.magParameter.isTraceMaxMin) { + MagApplication.magParameter.maxMinTrace = 0; + SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_MAXMINTRACE, MagApplication.magParameter.maxMinTrace); + break; + } + break; + case R.id.id_laser /* 2131624140 */: + if (MagApplication.magParameter.isLaserOn) { + StatService.onEvent(FragmentMainTop.this.getContext(), MagParameter.EVENT_DISABLE_LASER_ID, MagParameter.EVENT_DISABLE_LASER); + FragmentMainTop.this.closeLaser(); + break; + } else { + QueryDialogFragment dlgMediaDel = QueryDialogFragment.newInstance(R.layout.dialog_fragment_query_open_laser); + StatService.onEvent(FragmentMainTop.this.getContext(), MagParameter.EVENT_ENABLE_LASER_ID, MagParameter.EVENT_ENABLE_LASER); + dlgMediaDel.show(FragmentMainTop.this.getActivity().getSupportFragmentManager(), "openLaser"); + break; + } + case R.id.id_more /* 2131624141 */: + Intent intent = new Intent(FragmentMainTop.this.getActivity(), (Class) SettingActivity.class); + FragmentMainTop.this.startActivity(intent); + break; + case R.id.id_menu_item_setting /* 2131624220 */: + Intent intent2 = new Intent(FragmentMainTop.this.getActivity(), (Class) SettingActivity.class); + FragmentMainTop.this.startActivity(intent2); + FragmentMainTop.this.popupWindowMore_.dismiss(); + break; + case R.id.id_menu_item_help /* 2131624221 */: + Intent intent3 = new Intent(FragmentMainTop.this.getActivity(), (Class) SupportActivity.class); + FragmentMainTop.this.startActivity(intent3); + FragmentMainTop.this.popupWindowMore_.dismiss(); + break; + } + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentMedia.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentMedia.java new file mode 100644 index 0000000..9c3d484 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentMedia.java @@ -0,0 +1,411 @@ +package cn.com.magnity.magnitycx; + +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.support.v4.content.FileProvider; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AbsListView; +import android.widget.AdapterView; +import android.widget.Button; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.ListAdapter; +import android.widget.Toast; +import cn.com.magnity.magnitycx.MediaActivity; +import cn.com.magnity.magnitycx.QueryDialogFragment; +import cn.com.magnity.magnitycx.sdk.DelegateMediaStatusChanged; +import cn.com.magnity.magnitycx.sdk.GlobalFunc; +import cn.com.magnity.magnitycx.sdk.MagParameter; +import cn.com.magnity.magnitycx.sdk.SharedPreferencesManager; +import com.baidu.mobstat.StatService; +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +/* loaded from: classes.dex */ +public class FragmentMedia extends Fragment implements MediaActivity.DelegateBackPressed, QueryDialogFragment.DelegateQueryResult, AbsListView.OnScrollListener { + private static final int MODE_NORMAL = 0; + private static final int MODE_SELECTION = 1; + private Button btnDelete_; + private Button btnSelectAll_; + private Button btnSocialShare_; + private ArrayList fileNames_; + private int firstVisiblePos_; + private GridView gridView_; + private int index_; + private Map mapSelStatus_; + private MediaGridViewAdapter mediaGridViewAdapter_; + private MediaItemClickListener mediaItemClickListener_; + private MediaItemLongClickListener mediaItemLongClickListener_; + private MediaMenuClickListener mediaMenuClickListener_; + private ViewGroup menu_; + private int mode_ = 0; + private int visibleItemCount_; + + @Override // android.support.v4.app.Fragment + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setRetainInstance(true); + this.fileNames_ = new ArrayList<>(); + this.mediaMenuClickListener_ = new MediaMenuClickListener(); + this.mediaItemClickListener_ = new MediaItemClickListener(); + this.mediaItemLongClickListener_ = new MediaItemLongClickListener(); + this.mapSelStatus_ = new HashMap(); + } + + @Override // android.support.v4.app.Fragment + @Nullable + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.fragment_media, (ViewGroup) null); + initViews(rootView); + return rootView; + } + + private void initViews(View rootView) { + this.menu_ = (ViewGroup) rootView.findViewById(R.id.id_media_menu); + if (this.mode_ == 0) { + this.menu_.setVisibility(8); + } else if (this.mode_ == 1) { + this.menu_.setVisibility(0); + } + this.btnSocialShare_ = (Button) rootView.findViewById(R.id.id_btn_social_share); + this.btnSocialShare_.setOnClickListener(this.mediaMenuClickListener_); + this.btnDelete_ = (Button) rootView.findViewById(R.id.id_btn_delete); + this.btnDelete_.setOnClickListener(this.mediaMenuClickListener_); + this.btnSelectAll_ = (Button) rootView.findViewById(R.id.id_btn_select_all); + this.btnSelectAll_.setOnClickListener(this.mediaMenuClickListener_); + this.gridView_ = (GridView) rootView.findViewById(R.id.id_photowall); + this.gridView_.setOnScrollListener(this); + this.gridView_.setOnItemClickListener(this.mediaItemClickListener_); + this.gridView_.setOnItemLongClickListener(this.mediaItemLongClickListener_); + setAdapter(); + } + + private void setAdapter() { + updateFileList(); + this.mediaGridViewAdapter_ = new MediaGridViewAdapter(getActivity(), this.gridView_, this.fileNames_, this.mapSelStatus_); + this.mediaGridViewAdapter_.setMode(this.mode_); + this.gridView_.setAdapter((ListAdapter) this.mediaGridViewAdapter_); + } + + private void updateFileList() { + GlobalFunc globalFunc = MagApplication.globalFunc; + GlobalFunc.updateFileList(this.fileNames_); + } + + /* JADX INFO: Access modifiers changed from: private */ + public void updateGridView() { + this.mediaGridViewAdapter_.notifyDataSetChanged(); + this.gridView_.setSelection(this.index_); + this.gridView_.invalidateViews(); + } + + @Override // android.support.v4.app.Fragment + public void onResume() { + super.onResume(); + updateFileList(); + updateGridView(); + StatService.onPageStart(getActivity(), "媒体"); + if (this.mode_ == 0) { + getActivity().setTitle(String.format(getResources().getString(R.string.mediaTitle), Integer.valueOf(this.fileNames_.size()))); + } else { + getActivity().setTitle(String.format(getResources().getString(R.string.mediaSelectedNum), Integer.valueOf(getSelectedItemCount()))); + } + int num = MagApplication.magParameter.onceTipMediaLongClick; + int num2 = num - 1; + if (num != 0) { + MagApplication.magParameter.onceTipMediaLongClick = num2; + SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_ONCETIPMEDIALONGCLICK, num2); + Toast.makeText(getContext(), R.string.onceTipMediaLongClick, 1).show(); + } + } + + /* JADX INFO: Access modifiers changed from: private */ + public int getSelectedItemCount() { + int num = 0; + for (Object value : this.mapSelStatus_.values()) { + if (((Boolean) value).booleanValue()) { + num++; + } + } + return num; + } + + @Override // android.support.v4.app.Fragment + public void onPause() { + this.index_ = this.gridView_.getFirstVisiblePosition(); + StatService.onPageEnd(getActivity(), "媒体"); + super.onPause(); + } + + @Override // android.support.v4.app.Fragment + public void onDestroy() { + super.onDestroy(); + this.mediaGridViewAdapter_.cancelAllTasks(); + } + + @Override // android.widget.AbsListView.OnScrollListener + public void onScrollStateChanged(AbsListView view, int scrollState) { + } + + @Override // android.widget.AbsListView.OnScrollListener + public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { + this.firstVisiblePos_ = firstVisibleItem; + this.visibleItemCount_ = visibleItemCount; + if (this.visibleItemCount_ > 0) { + this.mediaGridViewAdapter_.loadBitmap(this.firstVisiblePos_, this.visibleItemCount_); + } + } + + @Override // cn.com.magnity.magnitycx.MediaActivity.DelegateBackPressed + public boolean onActivityBackPressed() { + if (this.mode_ == 0) { + return true; + } + this.mode_ = 0; + unselectAllFiles(); + this.mediaGridViewAdapter_.cancelAllTasks(); + this.menu_.setVisibility(8); + if (!this.mapSelStatus_.isEmpty()) { + this.mapSelStatus_.clear(); + } + if (getActivity() instanceof DelegateMediaStatusChanged) { + ((DelegateMediaStatusChanged) getActivity()).onModeChanged(1, 0, this.fileNames_.size()); + } + this.mediaGridViewAdapter_.setMode(0); + return false; + } + + @Override // android.support.v4.app.Fragment + public void onActivityResult(int requestCode, int resultCode, Intent data) { + getActivity().setTitle(Integer.toString(this.fileNames_.size()) + getResources().getString(R.string.mediaTitle)); + updateGridView(); + } + + @Override // cn.com.magnity.magnitycx.QueryDialogFragment.DelegateQueryResult + public void onQueryResult(int result) { + if (result == 1) { + deleteSelectedFiles(); + updateButtons(); + } + } + + private void deleteSelectedFiles() { + Iterator iter = this.mapSelStatus_.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry entry = (Map.Entry) iter.next(); + boolean val = ((Boolean) entry.getValue()).booleanValue(); + if (val) { + String pathName = MagApplication.magParameter.mediaDir + File.separator + ((String) entry.getKey()); + File file = new File(pathName); + if (file != null && file.isFile()) { + if (file.delete()) { + iter.remove(); + } + File file2 = new File(pathName.replace(".jpg", ".ddt")); + if (file2 != null && file2.isFile()) { + file2.delete(); + } + } + } + } + updateFileList(); + updateGridView(); + if (this.fileNames_.isEmpty()) { + onActivityBackPressed(); + } else if (getActivity() instanceof DelegateMediaStatusChanged) { + ((DelegateMediaStatusChanged) getActivity()).onSelChanged(0, this.fileNames_.size()); + } + } + + /* JADX INFO: Access modifiers changed from: private */ + public void socialShare() { + Intent intent; + boolean hasVideo = false; + ArrayList lst = new ArrayList<>(); + for (Map.Entry entry : this.mapSelStatus_.entrySet()) { + boolean val = ((Boolean) entry.getValue()).booleanValue(); + if (val) { + String pathName = MagApplication.magParameter.mediaDir + File.separator + ((String) entry.getKey()); + File f = new File(pathName); + if (f != null && f.isFile()) { + GlobalFunc globalFunc = MagApplication.globalFunc; + int type = GlobalFunc.guessMediaTypeBySuffix(pathName); + if (type == 0) { + lst.add(FileProvider.getUriForFile(getContext(), "cn.com.magnity.magnitycx.fileprovider", f)); + } else if (type == 1) { + lst.add(FileProvider.getUriForFile(getContext(), "cn.com.magnity.magnitycx.fileprovider", f)); + hasVideo = true; + } + } + } + } + if (lst.size() > 1) { + intent = new Intent("android.intent.action.SEND_MULTIPLE"); + intent.putParcelableArrayListExtra("android.intent.extra.STREAM", lst); + } else if (lst.size() == 1) { + intent = new Intent("android.intent.action.SEND"); + intent.putExtra("android.intent.extra.STREAM", lst.get(0)); + } else { + return; + } + intent.setType(hasVideo ? "video/*" : "image/*"); + intent.addFlags(1); + startActivity(Intent.createChooser(intent, getResources().getString(R.string.mediaSocialShare))); + } + + /* JADX INFO: Access modifiers changed from: private */ + public void selectAllFiles() { + Iterator it = this.fileNames_.iterator(); + while (it.hasNext()) { + String name = it.next(); + this.mapSelStatus_.put(name, true); + } + if (getActivity() instanceof DelegateMediaStatusChanged) { + int num = this.fileNames_.size(); + ((DelegateMediaStatusChanged) getActivity()).onSelChanged(num, num); + } + updateGridView(); + } + + /* JADX INFO: Access modifiers changed from: private */ + public void unselectAllFiles() { + Iterator it = this.fileNames_.iterator(); + while (it.hasNext()) { + String name = it.next(); + this.mapSelStatus_.put(name, false); + } + if (getActivity() instanceof DelegateMediaStatusChanged) { + ((DelegateMediaStatusChanged) getActivity()).onSelChanged(0, this.fileNames_.size()); + } + updateGridView(); + } + + /* JADX INFO: Access modifiers changed from: private */ + public boolean isAllItemSelected() { + return this.fileNames_.size() == this.mapSelStatus_.size() && !this.mapSelStatus_.containsValue(false); + } + + private boolean isNoItemSelected() { + return !this.mapSelStatus_.containsValue(true); + } + + /* JADX INFO: Access modifiers changed from: private */ + public void updateButtons() { + if (isNoItemSelected()) { + this.btnSocialShare_.setEnabled(false); + this.btnDelete_.setEnabled(false); + this.btnSelectAll_.setText(R.string.mediaSelectAll); + Drawable drawable = getResources().getDrawable(R.drawable.button_unselect_all_select); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + this.btnSelectAll_.setCompoundDrawables(null, drawable, null, null); + return; + } + this.btnSocialShare_.setEnabled(true); + this.btnDelete_.setEnabled(true); + if (isAllItemSelected()) { + this.btnSelectAll_.setText(R.string.mediaUnselectAll); + Drawable drawable2 = getResources().getDrawable(R.drawable.button_select_all_select); + drawable2.setBounds(0, 0, drawable2.getMinimumWidth(), drawable2.getMinimumHeight()); + this.btnSelectAll_.setCompoundDrawables(null, drawable2, null, null); + return; + } + this.btnSelectAll_.setText(R.string.mediaSelectAll); + Drawable drawable3 = getResources().getDrawable(R.drawable.button_unselect_all_select); + drawable3.setBounds(0, 0, drawable3.getMinimumWidth(), drawable3.getMinimumHeight()); + this.btnSelectAll_.setCompoundDrawables(null, drawable3, null, null); + } + + private class MediaMenuClickListener implements View.OnClickListener { + private MediaMenuClickListener() { + } + + @Override // android.view.View.OnClickListener + public void onClick(View v) { + switch (v.getId()) { + case R.id.id_btn_social_share /* 2131624072 */: + FragmentMedia.this.socialShare(); + break; + case R.id.id_btn_delete /* 2131624143 */: + QueryDialogFragment dlg = QueryDialogFragment.newInstance(R.layout.dialog_fragment_query_delete_media); + if (dlg != null) { + dlg.show(FragmentMedia.this.getActivity().getSupportFragmentManager(), "deleteMedia"); + break; + } + break; + case R.id.id_btn_select_all /* 2131624144 */: + if (FragmentMedia.this.isAllItemSelected()) { + FragmentMedia.this.unselectAllFiles(); + } else { + FragmentMedia.this.selectAllFiles(); + } + FragmentMedia.this.updateButtons(); + break; + } + } + } + + private class MediaItemClickListener implements AdapterView.OnItemClickListener { + private MediaItemClickListener() { + } + + @Override // android.widget.AdapterView.OnItemClickListener + public void onItemClick(AdapterView parent, View view, int position, long id) { + if (FragmentMedia.this.mode_ != 0) { + String name = (String) FragmentMedia.this.fileNames_.get(position); + ImageView v = (ImageView) view.findViewById(R.id.id_photo_selected); + ImageView vimg = (ImageView) view.findViewById(R.id.id_wallphoto); + Object val = FragmentMedia.this.mapSelStatus_.get(name); + if (val == null || !((Boolean) val).booleanValue()) { + v.setImageResource(R.mipmap.media_selected); + vimg.setAlpha(0.6f); + FragmentMedia.this.mapSelStatus_.put(name, true); + } else { + v.setImageResource(R.mipmap.media_unselected); + vimg.setAlpha(1.0f); + FragmentMedia.this.mapSelStatus_.put(name, false); + } + if (FragmentMedia.this.getActivity() instanceof DelegateMediaStatusChanged) { + ((DelegateMediaStatusChanged) FragmentMedia.this.getActivity()).onSelChanged(FragmentMedia.this.getSelectedItemCount(), FragmentMedia.this.fileNames_.size()); + } + FragmentMedia.this.updateButtons(); + return; + } + Intent intent = new Intent(FragmentMedia.this.getActivity(), (Class) MediaSingleActivity.class); + intent.putExtra(MediaSingleActivity.MEDIAWINDOWFLAG, 1); + intent.putExtra(MediaSingleActivity.MEDIAINDEX, position); + intent.putStringArrayListExtra(MediaSingleActivity.MEDIANAMELIST, FragmentMedia.this.fileNames_); + FragmentMedia.this.startActivityForResult(intent, 0); + } + } + + private class MediaItemLongClickListener implements AdapterView.OnItemLongClickListener { + private MediaItemLongClickListener() { + } + + @Override // android.widget.AdapterView.OnItemLongClickListener + public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { + if (FragmentMedia.this.mode_ != 1) { + String name = (String) FragmentMedia.this.fileNames_.get(position); + FragmentMedia.this.mapSelStatus_.put(name, true); + FragmentMedia.this.updateButtons(); + FragmentMedia.this.menu_.setVisibility(0); + FragmentMedia.this.mode_ = 1; + if (FragmentMedia.this.getActivity() instanceof DelegateMediaStatusChanged) { + ((DelegateMediaStatusChanged) FragmentMedia.this.getActivity()).onModeChanged(0, 1, FragmentMedia.this.fileNames_.size()); + } + FragmentMedia.this.mediaGridViewAdapter_.setMode(1); + FragmentMedia.this.updateGridView(); + } + return true; + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentSetting.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentSetting.java new file mode 100644 index 0000000..5939ced --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentSetting.java @@ -0,0 +1,559 @@ +package cn.com.magnity.magnitycx; + +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.DialogFragment; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; +import cn.com.magnity.magnitycx.sdk.DelegateOptionSelected; +import cn.com.magnity.magnitycx.sdk.DeviceController; +import cn.com.magnity.magnitycx.sdk.ExtPara; +import cn.com.magnity.magnitycx.sdk.MagParameter; +import cn.com.magnity.magnitycx.sdk.MsgBus; +import cn.com.magnity.magnitycx.sdk.SharedPreferencesManager; +import cn.com.magnity.magnitycx.sdk.UsbCommunication; +import cn.com.magnity.magnitycx.sdk.UsbConnection; +import com.baidu.mobstat.StatService; + +/* loaded from: classes.dex */ +public class FragmentSetting extends Fragment implements DelegateOptionSelected { + private View rootView_; + private SettingClickListner settingClickListner_; + + @Override // android.support.v4.app.Fragment + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + this.settingClickListner_ = new SettingClickListner(); + } + + @Override // android.support.v4.app.Fragment + @Nullable + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + this.rootView_ = inflater.inflate(R.layout.fragment_setting, (ViewGroup) null); + initUi(this.rootView_); + return this.rootView_; + } + + /* JADX WARN: Can't fix incorrect switch cases order, some code will duplicate */ + private void initUi(View rootView) { + int id; + int id2; + int id3; + int id4; + int id5; + int devType = MagApplication.magParameter.basePara1.devType; + setText1_(rootView, R.id.id_setting_subheader_visible, R.string.settingsVisible); + switch (MagApplication.magParameter.visWndSize) { + case 0: + id = R.string.settingsVisibleSizeSmall; + break; + case 1: + id = R.string.settingsVisibleSizeMedium; + break; + case 2: + id = R.string.settingsVisibleSizeLarge; + break; + default: + id = R.string.settingsVisibleSizeSmall; + break; + } + setTextIcon(rootView, R.id.id_setting_item_visiblesize, R.string.settingsVisibleSize, id, R.mipmap.expand_more).setOnClickListener(this.settingClickListner_); + setText1_(rootView, R.id.id_setting_subheader_maxmintrace, R.string.settingsTempTrace); + switch (MagApplication.magParameter.maxMinTrace) { + case -1: + id2 = R.string.settingsNoneTrace; + break; + case 0: + id2 = R.string.settingsMaxTrace; + break; + case 1: + id2 = R.string.settingsMinTrace; + break; + case 2: + id2 = R.string.settingsMaxMinTrace; + break; + default: + id2 = R.string.settingsMaxTrace; + break; + } + setTextIcon(rootView, R.id.id_setting_item_maxmintrace, R.string.settingsTraceTarget, id2, R.mipmap.expand_more).setOnClickListener(this.settingClickListner_); + if (UsbConnection.getInstance().isConnected()) { + switch (devType) { + case 0: + case 5: + case 6: + StatService.onEvent(getContext(), MagParameter.EVENT_C1_ID, MagParameter.EVENT_C1); + rootView.findViewById(R.id.trace_divider3).setVisibility(8); + rootView.findViewById(R.id.trace_divider4).setVisibility(8); + rootView.findViewById(R.id.id_setting_item_roitrace).setVisibility(8); + break; + case 1: + StatService.onEvent(getContext(), MagParameter.EVENT_C3_ID, MagParameter.EVENT_C3); + rootView.findViewById(R.id.trace_divider1).setVisibility(8); + rootView.findViewById(R.id.trace_divider2).setVisibility(8); + rootView.findViewById(R.id.trace_divider3).setVisibility(8); + rootView.findViewById(R.id.trace_divider4).setVisibility(8); + rootView.findViewById(R.id.id_setting_subheader_maxmintrace).setVisibility(8); + rootView.findViewById(R.id.id_setting_item_maxmintrace).setVisibility(8); + rootView.findViewById(R.id.id_setting_item_roitrace).setVisibility(8); + break; + case 2: + StatService.onEvent(getContext(), MagParameter.EVENT_C3_ID, MagParameter.EVENT_C3); + setTextIcon(rootView, R.id.id_setting_item_roitrace, R.string.settingsTraceROI, "", MagApplication.magParameter.isTraceRoi ? R.mipmap.media_selected : R.mipmap.media_unselected).setOnClickListener(this.settingClickListner_); + break; + case 3: + case 4: + default: + rootView.findViewById(R.id.trace_divider3).setVisibility(8); + rootView.findViewById(R.id.trace_divider4).setVisibility(8); + rootView.findViewById(R.id.id_setting_item_roitrace).setVisibility(8); + break; + } + } else { + rootView.findViewById(R.id.trace_divider1).setVisibility(8); + rootView.findViewById(R.id.trace_divider2).setVisibility(8); + rootView.findViewById(R.id.trace_divider3).setVisibility(8); + rootView.findViewById(R.id.trace_divider4).setVisibility(8); + rootView.findViewById(R.id.id_setting_subheader_maxmintrace).setVisibility(8); + rootView.findViewById(R.id.id_setting_item_maxmintrace).setVisibility(8); + rootView.findViewById(R.id.id_setting_item_roitrace).setVisibility(8); + } + setText1_(rootView, R.id.id_setting_subheader_imageflip, R.string.settingsImageFlip); + int imageFlip = MagApplication.magParameter.imageFlip; + setTextIcon(rootView, R.id.id_setting_item_imageHorflip, R.string.settingsImageFlipHor, "", (imageFlip & 1) != 0 ? R.mipmap.media_selected : R.mipmap.media_unselected).setOnClickListener(this.settingClickListner_); + setTextIcon(rootView, R.id.id_setting_item_imageVerflip, R.string.settingsImageFlipVer, "", (imageFlip & 2) != 0 ? R.mipmap.media_selected : R.mipmap.media_unselected).setOnClickListener(this.settingClickListner_); + if ((UsbConnection.getInstance().isConnected() && devType == 2) || devType == 1) { + switch (MagApplication.magParameter.imageEX) { + case 1: + id5 = R.string.settingsEX2; + break; + case 2: + id5 = R.string.settingsEX4; + break; + case 3: + id5 = R.string.settingsEX8; + break; + case 4: + id5 = R.string.settingsEX16; + break; + default: + id5 = R.string.settingsEX1; + break; + } + setTextIcon(rootView, R.id.id_setting_item_imageEX, R.string.settingsImageEX, id5, R.mipmap.expand_more).setOnClickListener(this.settingClickListner_); + } else { + rootView.findViewById(R.id.id_imageEX_divider).setVisibility(8); + rootView.findViewById(R.id.id_setting_item_imageEX).setVisibility(8); + } + if (UsbConnection.getInstance().isConnected() && devType == 2) { + setText1_(rootView, R.id.id_setting_subheader_emissivity, R.string.settingsTemperature); + switch (MagApplication.magParameter.emissivity) { + case 70: + id4 = R.string.settingsEM4; + break; + case 80: + id4 = R.string.settingsEM3; + break; + case 90: + id4 = R.string.settingsEM2; + break; + case 100: + id4 = R.string.settingsEM1; + break; + default: + id4 = R.string.settingsEM1; + break; + } + setTextIcon(rootView, R.id.id_setting_item_emissivity, R.string.settingsEmissivity, id4, R.mipmap.expand_more).setOnClickListener(this.settingClickListner_); + } else { + rootView.findViewById(R.id.id_emissivity_divider1).setVisibility(8); + rootView.findViewById(R.id.id_setting_subheader_emissivity).setVisibility(8); + rootView.findViewById(R.id.id_emissivity_divider2).setVisibility(8); + rootView.findViewById(R.id.id_setting_item_emissivity).setVisibility(8); + rootView.findViewById(R.id.id_emissivity_divider3).setVisibility(8); + } + if (UsbConnection.getInstance().isConnected() && (devType == 1 || devType == 2)) { + setText1_(rootView, R.id.id_setting_subheader_fps, R.string.settingsFps); + switch (MagApplication.magParameter.fpsMode) { + case 1: + id3 = R.string.settingsFpsLow; + break; + default: + id3 = R.string.settingsFpsHigh; + break; + } + setTextIcon(rootView, R.id.id_setting_item_fps, R.string.settingsFps, id3, R.mipmap.expand_more).setOnClickListener(this.settingClickListner_); + } else { + rootView.findViewById(R.id.id_fps_divider1).setVisibility(8); + rootView.findViewById(R.id.id_setting_subheader_fps).setVisibility(8); + rootView.findViewById(R.id.id_fps_divider2).setVisibility(8); + rootView.findViewById(R.id.id_setting_item_fps).setVisibility(8); + rootView.findViewById(R.id.id_fps_divider3).setVisibility(8); + } + if (UsbConnection.getInstance().isConnected() && devType == 1) { + setText1_(rootView, R.id.id_setting_subheader_moving_cross, R.string.settingsMovingCross); + setTextIcon(rootView, R.id.id_setting_item_moving_cross, R.string.settingsMovingCrossOn, "", MagApplication.magParameter.isShowMovingCross ? R.mipmap.media_selected : R.mipmap.media_unselected).setOnClickListener(this.settingClickListner_); + } else { + rootView.findViewById(R.id.id_moving_cross_divider1).setVisibility(8); + rootView.findViewById(R.id.id_setting_subheader_moving_cross).setVisibility(8); + rootView.findViewById(R.id.id_moving_cross_divider2).setVisibility(8); + rootView.findViewById(R.id.id_setting_item_moving_cross).setVisibility(8); + rootView.findViewById(R.id.id_moving_cross_divider3).setVisibility(8); + } + setText1_(rootView, R.id.id_setting_subheader_about, R.string.settingsAbout); + setTextIcon(rootView, R.id.id_setting_item_aboutProduct, R.string.settingsAboutProduct, "", R.mipmap.expand_more).setOnClickListener(this.settingClickListner_); + setTextIcon(rootView, R.id.id_setting_item_aboutAbout, R.string.settingsAboutAbout, "", R.mipmap.expand_more).setOnClickListener(this.settingClickListner_); + } + + private void updateVisibleUi(int opt) { + int id; + switch (opt) { + case 0: + MagApplication.magParameter.visWndSize = 0; + SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_VISWNDSIZE, 0); + id = R.string.settingsVisibleSizeSmall; + break; + case 1: + default: + MagApplication.magParameter.visWndSize = 1; + SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_VISWNDSIZE, 1); + id = R.string.settingsVisibleSizeMedium; + break; + case 2: + MagApplication.magParameter.visWndSize = 2; + SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_VISWNDSIZE, 2); + id = R.string.settingsVisibleSizeLarge; + break; + } + View item = this.rootView_.findViewById(R.id.id_setting_item_visiblesize); + TextView txtView = (TextView) item.findViewById(R.id.id_setting_item_text2); + txtView.setText(id); + if (MagApplication.magParameter.dispMode == 0) { + FragmentMainCenter.imgViewerVisible_.setVisibility(4); + FragmentMainCenter.imgViewerVisible_.setVisibility(0); + } + } + + private void updateTempTraceUi(int opt) { + int id; + switch (opt) { + case 0: + MagApplication.magParameter.maxMinTrace = -1; + SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_MAXMINTRACE, -1); + id = R.string.settingsNoneTrace; + break; + case 1: + default: + MagApplication.magParameter.maxMinTrace = 0; + SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_MAXMINTRACE, 0); + id = R.string.settingsMaxTrace; + break; + case 2: + MagApplication.magParameter.maxMinTrace = 1; + SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_MAXMINTRACE, 1); + id = R.string.settingsMinTrace; + break; + case 3: + MagApplication.magParameter.maxMinTrace = 2; + SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_MAXMINTRACE, 2); + id = R.string.settingsMaxMinTrace; + break; + } + View item = this.rootView_.findViewById(R.id.id_setting_item_maxmintrace); + TextView txtView = (TextView) item.findViewById(R.id.id_setting_item_text2); + txtView.setText(id); + } + + private void updateImageEX(int opt) { + int id; + switch (opt) { + case 1: + id = R.string.settingsEX2; + break; + case 2: + id = R.string.settingsEX4; + break; + case 3: + id = R.string.settingsEX8; + break; + case 4: + id = R.string.settingsEX16; + break; + default: + id = R.string.settingsEX1; + break; + } + if (DeviceController.isProcessImage()) { + View item = this.rootView_.findViewById(R.id.id_setting_item_imageEX); + TextView txtView = (TextView) item.findViewById(R.id.id_setting_item_text2); + txtView.setText(id); + MagApplication.magParameter.imageEX = opt; + SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_EXMODE, 0); + DeviceController.setEX(opt, MagApplication.magParameter.basePara1.fpaWidth / 2, MagApplication.magParameter.basePara1.fpaHeight / 2); + } + } + + private void updateEmissivity(int opt) { + int id; + switch (opt) { + case 1: + MagApplication.magParameter.emissivity = 90; + SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_EMISSIVITY, 90); + id = R.string.settingsEM2; + break; + case 2: + MagApplication.magParameter.emissivity = 80; + SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_EMISSIVITY, 80); + id = R.string.settingsEM3; + break; + case 3: + MagApplication.magParameter.emissivity = 70; + SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_EMISSIVITY, 70); + id = R.string.settingsEM4; + break; + default: + MagApplication.magParameter.emissivity = 100; + SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_EMISSIVITY, 100); + id = R.string.settingsEM1; + break; + } + DeviceController.Lock(); + ExtPara param = new ExtPara(); + DeviceController.getExtParameter(param); + DeviceController.setEmissivity(MagApplication.magParameter.emissivity, param.intCurrentEnvTemperature); + DeviceController.Unlock(); + View item = this.rootView_.findViewById(R.id.id_setting_item_emissivity); + TextView txtView = (TextView) item.findViewById(R.id.id_setting_item_text2); + txtView.setText(id); + } + + private void updateFpsUi(int opt) { + int id; + switch (opt) { + case 1: + MagApplication.magParameter.fpsMode = 1; + id = R.string.settingsFpsLow; + StatService.onEvent(getContext(), MagParameter.EVENT_FRAME_RATE_LOW_ID, MagParameter.EVENT_FRAME_RATE_LOW); + break; + default: + MagApplication.magParameter.fpsMode = 0; + id = R.string.settingsFpsHigh; + StatService.onEvent(getContext(), MagParameter.EVENT_FRAME_RATE_HIGH_ID, MagParameter.EVENT_FRAME_RATE_HIGH); + break; + } + SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_FPSMODE, MagApplication.magParameter.fpsMode); + View item = this.rootView_.findViewById(R.id.id_setting_item_fps); + TextView txtView = (TextView) item.findViewById(R.id.id_setting_item_text2); + txtView.setText(id); + MsgBus.getInstance().postEmptytMsg(UsbCommunication.MSG_SET_BASEPARAMETER); + } + + /* JADX INFO: Access modifiers changed from: private */ + public void updateRoiTraceParameter(int itemId, int stringId) { + boolean isTraceRoi = !MagApplication.magParameter.isTraceRoi; + MagApplication.magParameter.isTraceRoi = isTraceRoi; + SharedPreferencesManager.putBooleanWithCommit(MagParameter.KEY_TRACEROI, isTraceRoi); + setTextIcon(this.rootView_, itemId, stringId, "", isTraceRoi ? R.mipmap.media_selected : R.mipmap.media_unselected); + if (isTraceRoi) { + Toast.makeText(getContext(), R.string.tipTraceRoi, 1).show(); + StatService.onEvent(getContext(), MagParameter.EVENT_ROIT_TRACE_ID, MagParameter.EVENT_ROIT_TRACE); + } + } + + /* JADX INFO: Access modifiers changed from: private */ + public void updateFlipParameter(int mode, int itemId, int stringId) { + int imageFlip; + boolean selected; + int imageFlip2 = MagApplication.magParameter.imageFlip; + if ((imageFlip2 & mode) == 0) { + imageFlip = imageFlip2 | mode; + selected = true; + } else { + imageFlip = imageFlip2 & (mode ^ (-1)); + selected = false; + } + MagApplication.magParameter.imageFlip = imageFlip; + SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_FLIPMODE, imageFlip); + setTextIcon(this.rootView_, itemId, stringId, "", selected ? R.mipmap.media_selected : R.mipmap.media_unselected); + ExtPara param = new ExtPara(); + DeviceController.Lock(); + DeviceController.getExtParameter(param); + param.dwFlip = imageFlip; + DeviceController.setExtParameter(param); + DeviceController.Unlock(); + } + + /* JADX INFO: Access modifiers changed from: private */ + public void updateMovingCrossValue(int itemId, int stringId) { + boolean selected = !MagApplication.magParameter.isShowMovingCross; + MagApplication.magParameter.isShowMovingCross = selected; + SharedPreferencesManager.putBooleanWithCommit(MagParameter.KEY_SHOWMOVINGCROSS, selected); + setTextIcon(this.rootView_, itemId, stringId, "", selected ? R.mipmap.media_selected : R.mipmap.media_unselected); + } + + private View setText1_(View rootView, int itemId, int stringId) { + View item = rootView.findViewById(itemId); + TextView txtView = (TextView) item.findViewById(R.id.id_setting_item_text); + txtView.setText(stringId); + return item; + } + + private View setTextIcon(View rootView, int itemId, int stringId1, int stringId2, int iconId) { + View item = rootView.findViewById(itemId); + TextView txtView = (TextView) item.findViewById(R.id.id_setting_item_text); + txtView.setText(stringId1); + TextView txtView2 = (TextView) item.findViewById(R.id.id_setting_item_text2); + txtView2.setText(stringId2); + ImageView iv = (ImageView) item.findViewById(R.id.id_setting_icon); + iv.setImageResource(iconId); + return item; + } + + private View setTextIcon(View rootView, int itemId, int stringId1, String text, int iconId) { + View item = rootView.findViewById(itemId); + TextView txtView = (TextView) item.findViewById(R.id.id_setting_item_text); + txtView.setText(stringId1); + TextView txtView2 = (TextView) item.findViewById(R.id.id_setting_item_text2); + txtView2.setText(text); + ImageView iv = (ImageView) item.findViewById(R.id.id_setting_icon); + iv.setImageResource(iconId); + return item; + } + + @Override // cn.com.magnity.magnitycx.sdk.DelegateOptionSelected + public void onOptionSelected(int itemId, int opt) { + switch (itemId) { + case R.id.id_setting_item_visiblesize /* 2131624149 */: + updateVisibleUi(opt); + break; + case R.id.id_setting_item_maxmintrace /* 2131624153 */: + updateTempTraceUi(opt); + break; + case R.id.id_setting_item_imageEX /* 2131624160 */: + updateImageEX(opt); + break; + case R.id.id_setting_item_emissivity /* 2131624165 */: + updateEmissivity(opt); + break; + case R.id.id_setting_item_fps /* 2131624170 */: + updateFpsUi(opt); + break; + } + } + + private class SettingClickListner implements View.OnClickListener { + private SettingClickListner() { + } + + @Override // android.view.View.OnClickListener + public void onClick(View v) { + int index; + int index2; + int index3; + switch (v.getId()) { + case R.id.id_setting_item_aboutProduct /* 2131624146 */: + Intent intent = new Intent(FragmentSetting.this.getActivity(), (Class) AboutProductActivity.class); + StatService.onEvent(FragmentSetting.this.getContext(), MagParameter.EVENT_CLICK_PRODUCT_ID, MagParameter.EVENT_CLICK_PRODUCT); + FragmentSetting.this.startActivity(intent); + break; + case R.id.id_setting_item_aboutAbout /* 2131624147 */: + Intent intent2 = new Intent(FragmentSetting.this.getActivity(), (Class) AboutAboutActivity.class); + StatService.onEvent(FragmentSetting.this.getContext(), MagParameter.EVENT_CLICK_ABOUT_ID, MagParameter.EVENT_CLICK_ABOUT); + FragmentSetting.this.startActivity(intent2); + break; + case R.id.id_setting_item_visiblesize /* 2131624149 */: + switch (MagApplication.magParameter.visWndSize) { + case 0: + index3 = 0; + StatService.onEvent(FragmentSetting.this.getContext(), MagParameter.EVENT_VISWND_SMALL_ID, MagParameter.EVENT_VISWND_SMALL); + break; + case 1: + default: + index3 = 1; + StatService.onEvent(FragmentSetting.this.getContext(), MagParameter.EVENT_VISWND_MIDDLE_ID, MagParameter.EVENT_VISWND_MIDDLE); + break; + case 2: + index3 = 2; + StatService.onEvent(FragmentSetting.this.getContext(), MagParameter.EVENT_VISWND_LARGE_ID, MagParameter.EVENT_VISWND_LARGE); + break; + } + DialogFragment dlg = DialogOption.newInstance(R.string.visibleSizeOptionText, R.id.id_setting_item_visiblesize, new int[]{R.string.settingsVisibleSizeSmall, R.string.settingsVisibleSizeMedium, R.string.settingsVisibleSizeLarge}, index3, FragmentSetting.this, 0); + dlg.show(FragmentSetting.this.getActivity().getSupportFragmentManager(), "dialogOptionVisible"); + break; + case R.id.id_setting_item_maxmintrace /* 2131624153 */: + switch (MagApplication.magParameter.maxMinTrace) { + case -1: + index2 = 0; + StatService.onEvent(FragmentSetting.this.getContext(), MagParameter.EVENT_TRACE_NONE_ID, MagParameter.EVENT_TRACE_NONE); + break; + case 0: + default: + index2 = 1; + StatService.onEvent(FragmentSetting.this.getContext(), MagParameter.EVENT_TRACE_MAX_ID, MagParameter.EVENT_TRACE_MAX); + break; + case 1: + index2 = 2; + StatService.onEvent(FragmentSetting.this.getContext(), MagParameter.EVENT_TRACE_MIN_ID, MagParameter.EVENT_TRACE_MIN); + break; + case 2: + index2 = 3; + StatService.onEvent(FragmentSetting.this.getContext(), MagParameter.EVENT_TRACE_MAXMIN_ID, MagParameter.EVENT_TRACE_MAXMIN); + break; + } + DialogFragment dlg2 = DialogOption.newInstance(R.string.settingsTraceTarget, R.id.id_setting_item_maxmintrace, new int[]{R.string.settingsNoneTrace, R.string.settingsMaxTrace, R.string.settingsMinTrace, R.string.settingsMaxMinTrace}, index2, FragmentSetting.this, 0); + dlg2.show(FragmentSetting.this.getActivity().getSupportFragmentManager(), "dialogOptionMaxMinTrace"); + break; + case R.id.id_setting_item_roitrace /* 2131624155 */: + FragmentSetting.this.updateRoiTraceParameter(R.id.id_setting_item_roitrace, R.string.settingsTraceROI); + break; + case R.id.id_setting_item_imageHorflip /* 2131624158 */: + StatService.onEvent(FragmentSetting.this.getContext(), MagParameter.EVENT_FLIP_HORIZONTAL_ID, MagParameter.EVENT_FLIP_HORIZONTAL); + FragmentSetting.this.updateFlipParameter(1, R.id.id_setting_item_imageHorflip, R.string.settingsImageFlipHor); + break; + case R.id.id_setting_item_imageVerflip /* 2131624159 */: + StatService.onEvent(FragmentSetting.this.getContext(), MagParameter.EVENT_FLIP_VERTICAL_ID, MagParameter.EVENT_FLIP_VERTICAL); + FragmentSetting.this.updateFlipParameter(2, R.id.id_setting_item_imageVerflip, R.string.settingsImageFlipVer); + break; + case R.id.id_setting_item_imageEX /* 2131624160 */: + DialogFragment dlg3 = DialogOption.newInstance(R.string.settingsImageEX, R.id.id_setting_item_imageEX, new int[]{R.string.settingsEX1, R.string.settingsEX2, R.string.settingsEX4, R.string.settingsEX8, R.string.settingsEX16}, DeviceController.getEX(), FragmentSetting.this, 0); + dlg3.show(FragmentSetting.this.getActivity().getSupportFragmentManager(), "dialogOptionImageEx"); + break; + case R.id.id_setting_item_emissivity /* 2131624165 */: + switch (MagApplication.magParameter.emissivity) { + case 70: + index = 3; + StatService.onEvent(FragmentSetting.this.getContext(), MagParameter.EVENT_EMISSIVITY_LIGHT_ID, MagParameter.EVENT_EMISSIVITY_LIGHT); + break; + case 80: + index = 2; + StatService.onEvent(FragmentSetting.this.getContext(), MagParameter.EVENT_EMISSIVITY_HALF_ID, MagParameter.EVENT_EMISSIVITY_HALF); + break; + case 90: + index = 1; + StatService.onEvent(FragmentSetting.this.getContext(), MagParameter.EVENT_EMISSIVITY_DARK_ID, MagParameter.EVENT_EMISSIVITY_DARK); + break; + default: + index = 0; + StatService.onEvent(FragmentSetting.this.getContext(), MagParameter.EVENT_EMISSIVITY_NONE_ID, MagParameter.EVENT_EMISSIVITY_NONE); + break; + } + DialogFragment dlg4 = DialogOption.newInstance(R.string.settingsEmissivity, R.id.id_setting_item_emissivity, new int[]{R.string.settingsEM1, R.string.settingsEM2, R.string.settingsEM3, R.string.settingsEM4}, index, FragmentSetting.this, 0); + dlg4.show(FragmentSetting.this.getActivity().getSupportFragmentManager(), "dialogOptionEmissivity"); + break; + case R.id.id_setting_item_fps /* 2131624170 */: + DialogFragment dlg5 = DialogOption.newInstance(R.string.settingsFps, R.id.id_setting_item_fps, new int[]{R.string.settingsFpsHigh, R.string.settingsFpsLow}, MagApplication.magParameter.fpsMode, FragmentSetting.this, R.string.settingsFpsTip); + dlg5.show(FragmentSetting.this.getActivity().getSupportFragmentManager(), "dialogOptionFps"); + break; + case R.id.id_setting_item_moving_cross /* 2131624175 */: + FragmentSetting.this.updateMovingCrossValue(R.id.id_setting_item_moving_cross, R.string.settingsMovingCrossOn); + break; + } + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentSupport.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentSupport.java new file mode 100644 index 0000000..48fee54 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentSupport.java @@ -0,0 +1,63 @@ +package cn.com.magnity.magnitycx; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +/* loaded from: classes.dex */ +public class FragmentSupport extends Fragment { + private SupportClickListener settingClickListener_; + + @Override // android.support.v4.app.Fragment + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + this.settingClickListener_ = new SupportClickListener(); + } + + @Override // android.support.v4.app.Fragment + @Nullable + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.fragment_support, (ViewGroup) null); + View view = rootView.findViewById(R.id.id_product); + view.setOnClickListener(this.settingClickListener_); + ImageView icon = (ImageView) view.findViewById(R.id.id_icon); + icon.setImageResource(R.mipmap.help); + TextView text = (TextView) view.findViewById(R.id.id_text); + text.setText(R.string.labelProductInfo); + View view2 = rootView.findViewById(R.id.id_about); + view2.setOnClickListener(this.settingClickListener_); + ImageView icon2 = (ImageView) view2.findViewById(R.id.id_icon); + icon2.setImageResource(R.mipmap.about); + TextView text2 = (TextView) view2.findViewById(R.id.id_text); + text2.setText(R.string.labelAbout); + return rootView; + } + + @Override // android.support.v4.app.Fragment + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + getActivity().setTitle(R.string.labelHelp); + } + + private class SupportClickListener implements View.OnClickListener { + private SupportClickListener() { + } + + @Override // android.view.View.OnClickListener + public void onClick(View v) { + switch (v.getId()) { + case R.id.id_product /* 2131624177 */: + ((SupportActivity) FragmentSupport.this.getActivity()).showHelp(); + break; + case R.id.id_about /* 2131624178 */: + ((SupportActivity) FragmentSupport.this.getActivity()).showAbout(); + break; + } + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentSupportAbout.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentSupportAbout.java new file mode 100644 index 0000000..f3a8f53 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentSupportAbout.java @@ -0,0 +1,124 @@ +package cn.com.magnity.magnitycx; + +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.text.method.LinkMovementMethod; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import cn.com.magnity.magnitycx.sdk.UsbConnection; + +/* loaded from: classes.dex */ +public class FragmentSupportAbout extends Fragment { + private PackageInfo packInfo_; + private SettingClickListener settingClickListener_; + private TextView tvCompanyCaption_; + private TextView tvCompany_; + private TextView tvHWVersionCaption_; + private TextView tvHWVersion_; + private TextView tvProductTypeCaption_; + private TextView tvProductType_; + private TextView tvRightCaption_; + private TextView tvRight_; + private TextView tvSWVersionCaption_; + private TextView tvSWVersion_; + + @Override // android.support.v4.app.Fragment + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + this.settingClickListener_ = new SettingClickListener(); + PackageManager packageManager = getActivity().getPackageManager(); + try { + this.packInfo_ = packageManager.getPackageInfo(getActivity().getPackageName(), 0); + } catch (PackageManager.NameNotFoundException e) { + this.packInfo_ = null; + } + } + + @Override // android.support.v4.app.Fragment + @Nullable + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.fragment_support_about, container, false); + View view = rootView.findViewById(R.id.id_productType); + this.tvProductTypeCaption_ = (TextView) view.findViewById(R.id.id_text1); + this.tvProductTypeCaption_.setText(R.string.productType); + this.tvProductType_ = (TextView) view.findViewById(R.id.id_text2); + if (UsbConnection.getInstance().isConnected()) { + switch (MagApplication.magParameter.basePara1.devType) { + case 0: + this.tvProductType_.setText(R.string.c1); + break; + case 1: + this.tvProductType_.setText(R.string.c3); + break; + case 2: + this.tvProductType_.setText(R.string.c3p); + break; + case 3: + this.tvProductType_.setText(R.string.core160); + break; + case 4: + default: + this.tvProductType_.setText(""); + break; + case 5: + this.tvProductType_.setText(R.string.c1pro); + break; + case 6: + this.tvProductType_.setText(R.string.c1prolite); + break; + } + } else { + this.tvProductType_.setText(""); + } + View view2 = rootView.findViewById(R.id.id_swVersion); + this.tvSWVersionCaption_ = (TextView) view2.findViewById(R.id.id_text1); + this.tvSWVersionCaption_.setText(R.string.swVersion); + this.tvSWVersion_ = (TextView) view2.findViewById(R.id.id_text2); + if (this.packInfo_ != null) { + this.tvSWVersion_.setText(this.packInfo_.versionName); + } + View view3 = rootView.findViewById(R.id.id_right); + this.tvRightCaption_ = (TextView) view3.findViewById(R.id.id_text1); + this.tvRightCaption_.setText(R.string.right); + this.tvRight_ = (TextView) view3.findViewById(R.id.id_text2); + this.tvRight_.setText(R.string.juge); + View view4 = rootView.findViewById(R.id.id_hwVersion); + this.tvHWVersionCaption_ = (TextView) view4.findViewById(R.id.id_text1); + this.tvHWVersionCaption_.setText(R.string.hwVersion); + this.tvHWVersion_ = (TextView) view4.findViewById(R.id.id_text2); + if (UsbConnection.getInstance().isConnected()) { + this.tvHWVersion_.setText(Integer.toString(MagApplication.magParameter.basePara1.hwVersion)); + } else { + this.tvHWVersion_.setText(""); + } + View view5 = rootView.findViewById(R.id.id_company); + this.tvCompanyCaption_ = (TextView) view5.findViewById(R.id.id_text1); + this.tvCompanyCaption_.setText(R.string.company); + this.tvCompany_ = (TextView) view5.findViewById(R.id.id_text2); + this.tvCompany_.setText("http://www.magnity.com.cn"); + this.tvCompany_.setAutoLinkMask(15); + this.tvCompany_.setMovementMethod(LinkMovementMethod.getInstance()); + return rootView; + } + + @Override // android.support.v4.app.Fragment + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + getActivity().setTitle(R.string.labelAbout); + } + + private class SettingClickListener implements View.OnClickListener { + private SettingClickListener() { + } + + @Override // android.view.View.OnClickListener + public void onClick(View v) { + v.getId(); + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentSupportHelp.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentSupportHelp.java new file mode 100644 index 0000000..f925193 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/FragmentSupportHelp.java @@ -0,0 +1,28 @@ +package cn.com.magnity.magnitycx; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +/* loaded from: classes.dex */ +public class FragmentSupportHelp extends Fragment { + @Override // android.support.v4.app.Fragment + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override // android.support.v4.app.Fragment + @Nullable + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_support_help, (ViewGroup) null); + } + + @Override // android.support.v4.app.Fragment + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + getActivity().setTitle(R.string.labelProductInfo); + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/ImageViewer.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/ImageViewer.java new file mode 100644 index 0000000..e8118d9 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/ImageViewer.java @@ -0,0 +1,959 @@ +package cn.com.magnity.magnitycx; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.PaintFlagsDrawFilter; +import android.graphics.Rect; +import android.graphics.Typeface; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.SurfaceHolder; +import android.view.SurfaceView; +import cn.com.magnity.magnitycx.FragmentMainCenter; +import cn.com.magnity.magnitycx.log.Logging; +import cn.com.magnity.magnitycx.sdk.DeviceController; +import cn.com.magnity.magnitycx.sdk.MagParameter; +import cn.com.magnity.magnitycx.sdk.SharedPreferencesManager; +import cn.com.magnity.magnitycx.sdk.State; +import cn.com.magnity.magnitycx.sdk.TimerHelper; +import cn.com.magnity.magnitycx.sdk.UsbCommunication; +import cn.com.magnity.magnitycx.sdk.WaitCondition; +import com.baidu.mobstat.Config; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +/* loaded from: classes.dex */ +public class ImageViewer extends SurfaceView implements SurfaceHolder.Callback, UsbCommunication.DelegateNewFrame, FragmentMainCenter.DelegateCapture { + private static final int MAX_ROI_NUM = 1; + private int aimOrientation_; + private int aimX_; + private int aimY_; + private Bitmap bmpIr_; + private Canvas cachedCanvas_; + private Bitmap cachedbmp_; + private WaitCondition condRecording_; + private int dx_; + private int dy_; + private volatile int fpaHeight_; + private volatile int fpaWidth_; + private int frameIndex_; + private int height_; + private SurfaceHolder holder_; + private volatile int imageStableCounter_; + private boolean isAimDrag_; + private volatile boolean isExitThreadRecording_; + private volatile boolean isExitThreadRender_; + private volatile boolean isTempStable_; + private ArrayList listRoi_; + private Matrix matrixVGA_; + private Matrix matrix_; + private Paint paintROIVGA_; + private Paint paintROI_; + private Paint paintVGA_; + private Paint paint_; + private PaintFlagsDrawFilter pfd_; + private AtomicLong recordingTimeElapsed_; + private volatile ThreadLocalParam threadLocalParam_; + private ThreadRecording threadRecording_; + private ThreadRender threadRender_; + private TimerHelper timerHelper_; + private WaitCondition waitCondition_; + private int width_; + private static volatile Lock lock_ = new ReentrantLock(); + private static volatile long[] ticks_ = new long[20]; + private static Object syncNotifyNewFrame_ = new Object(); + private static ArrayList imgViewerList_ = new ArrayList<>(); + + private class ThreadLocalParam implements Cloneable { + int centerTemp; + State state; + + private ThreadLocalParam() { + } + + public Object clone() throws CloneNotSupportedException { + ThreadLocalParam param = (ThreadLocalParam) super.clone(); + if (this.state != null) { + param.state = (State) this.state.clone(); + } + return param; + } + } + + private class OSDParam { + private Bitmap crossLogo_; + private Bitmap laserLogo_; + private Bitmap maxTrace_; + private Bitmap minTrace_; + private Bitmap moveingCrossLogo_; + private Bitmap waterMark_; + + private OSDParam() { + } + + public Bitmap getCrossLogo() { + return this.crossLogo_; + } + + public Bitmap getWaterMark() { + return this.waterMark_; + } + + public Bitmap getMinTrace() { + return this.minTrace_; + } + + public Bitmap getMaxTrace() { + return this.maxTrace_; + } + + public Bitmap getMovingCrossLogo() { + return this.moveingCrossLogo_; + } + + public Bitmap getLaserLogo() { + return this.laserLogo_; + } + + public void setCrossLogo(int id) { + this.crossLogo_ = BitmapFactory.decodeResource(ImageViewer.this.getResources(), id); + } + + public void setWaterMark(int id) { + this.waterMark_ = BitmapFactory.decodeResource(ImageViewer.this.getResources(), id); + } + + public void setMinTrace(int id) { + this.minTrace_ = BitmapFactory.decodeResource(ImageViewer.this.getResources(), id); + } + + public void setMaxTrace(int id) { + this.maxTrace_ = BitmapFactory.decodeResource(ImageViewer.this.getResources(), id); + } + + public void setMovingCrossLogo(int id) { + this.moveingCrossLogo_ = BitmapFactory.decodeResource(ImageViewer.this.getResources(), id); + } + + public void setLaserLogo(int id) { + this.laserLogo_ = BitmapFactory.decodeResource(ImageViewer.this.getResources(), id); + } + + /* JADX INFO: Access modifiers changed from: private */ + public void reset() { + if (this.crossLogo_ != null && !this.crossLogo_.isRecycled()) { + this.crossLogo_.recycle(); + this.crossLogo_ = null; + } + if (this.waterMark_ != null && !this.waterMark_.isRecycled()) { + this.waterMark_.recycle(); + this.waterMark_ = null; + } + if (this.minTrace_ != null && !this.minTrace_.isRecycled()) { + this.minTrace_.recycle(); + this.minTrace_ = null; + } + if (this.maxTrace_ != null && !this.maxTrace_.isRecycled()) { + this.maxTrace_.recycle(); + this.maxTrace_ = null; + } + if (this.moveingCrossLogo_ != null && !this.moveingCrossLogo_.isRecycled()) { + this.moveingCrossLogo_.recycle(); + this.moveingCrossLogo_ = null; + } + if (this.laserLogo_ != null && !this.laserLogo_.isRecycled()) { + this.laserLogo_.recycle(); + this.laserLogo_ = null; + } + } + } + + public void setTempStableFlag(boolean isStable) { + this.isTempStable_ = isStable; + } + + public boolean getTempStableFlag() { + return this.isTempStable_; + } + + public void setImageStableCounter(int counter) { + this.imageStableCounter_ = counter; + } + + public int getImageStableCounter() { + return this.imageStableCounter_; + } + + public ImageViewer(Context context, AttributeSet attrs) { + super(context, attrs); + this.waitCondition_ = new WaitCondition(); + this.condRecording_ = new WaitCondition(); + this.threadLocalParam_ = new ThreadLocalParam(); + this.paint_ = new Paint(1); + this.matrix_ = new Matrix(); + this.matrixVGA_ = new Matrix(); + this.paintVGA_ = new Paint(1); + this.paintROI_ = new Paint(1); + this.paintROIVGA_ = new Paint(1); + this.listRoi_ = new ArrayList<>(); + this.recordingTimeElapsed_ = new AtomicLong(0L); + this.holder_ = getHolder(); + this.holder_.setFormat(-2); + this.holder_.addCallback(this); + this.timerHelper_ = new TimerHelper() { // from class: cn.com.magnity.magnitycx.ImageViewer.1 + @Override // cn.com.magnity.magnitycx.sdk.TimerHelper + public void run() { + ImageViewer.this.recordingTimeElapsed_.getAndIncrement(); + } + }; + } + + private void invalidate_() { + synchronized (this.waitCondition_.cond) { + this.waitCondition_.notified = true; + this.waitCondition_.cond.notify(); + } + } + + private void recordingOneFrame() { + synchronized (this.condRecording_.cond) { + this.condRecording_.notified = true; + this.condRecording_.cond.notify(); + } + } + + private void updateUiTemps(int fpaWidth, int fpaHeight) { + int pos; + switch (DeviceController.getPreviewOrientation()) { + case 0: + case 180: + pos = ((fpaHeight + 1) * fpaWidth) / 2; + break; + default: + pos = ((fpaWidth + 1) * fpaHeight) / 2; + break; + } + this.threadLocalParam_.centerTemp = DeviceController.getTemperature(pos, 1, false); + this.threadLocalParam_.state = DeviceController.getState(); + ROIInfo.lock(); + try { + Iterator it = this.listRoi_.iterator(); + while (it.hasNext()) { + ROIInfo roiInfo = it.next(); + switch (roiInfo.getType()) { + case 1: + int[] info = new int[5]; + if (roiInfo.isBigEnouth() && DeviceController.getRectTemperatureInfo(roiInfo.getBeginPointX(), roiInfo.getBeginPointY(), roiInfo.getEndPointX(), roiInfo.getEndPointY(), info, false)) { + roiInfo.setTempInfo(info[0], info[1], info[2], info[3], info[4]); + break; + } + break; + } + } + } finally { + ROIInfo.unlock(); + } + } + + public void initData(int fpaWidth, int fpaHeight) { + this.fpaWidth_ = fpaWidth; + this.fpaHeight_ = fpaHeight; + if (this.bmpIr_ == null) { + this.bmpIr_ = Bitmap.createBitmap(fpaWidth, fpaHeight, Bitmap.Config.ARGB_8888); + } else if (this.bmpIr_.getWidth() != fpaWidth || this.bmpIr_.getHeight() != fpaHeight) { + if (!this.bmpIr_.isRecycled()) { + this.bmpIr_.recycle(); + } + this.bmpIr_ = Bitmap.createBitmap(fpaWidth, fpaHeight, Bitmap.Config.ARGB_8888); + } + } + + @Override // cn.com.magnity.magnitycx.sdk.UsbCommunication.DelegateNewFrame + public void onNewFrameReceived(int fpaTemp, int camTemp) { + DeviceController.Lock(); + if (!DeviceController.getOutputBMPData(this.bmpIr_, this.fpaWidth_ * this.fpaHeight_ * 4)) { + DeviceController.Unlock(); + return; + } + int i = this.frameIndex_; + this.frameIndex_ = i + 1; + if ((i & 7) == 0) { + updateUiTemps(this.fpaWidth_, this.fpaHeight_); + } + DeviceController.Unlock(); + if (DeviceController.isRecording()) { + recordingOneFrame(); + } + invalidate_(); + } + + private void calculateScreenFit() { + int width; + int height; + int width2 = getWidth(); + int height2 = getHeight(); + if (getResources().getConfiguration().orientation == 1) { + if (width2 * 4 > height2 * 3) { + height = (height2 / 12) * 12; + width = (height * 3) / 4; + } else { + width = (width2 / 12) * 12; + height = (width * 4) / 3; + } + } else if (width2 * 3 > height2 * 4) { + height = (height2 / 12) * 12; + width = (height * 4) / 3; + } else { + width = (width2 / 12) * 12; + height = (width * 3) / 4; + } + this.dx_ = (getWidth() - width) / 2; + this.dy_ = (getHeight() - height) / 2; + this.width_ = width; + this.height_ = height; + } + + @Override // android.view.SurfaceHolder.Callback + public void surfaceCreated(SurfaceHolder holder) { + if (this.cachedbmp_ == null) { + switch (DeviceController.getPreviewOrientation()) { + case 0: + case 180: + this.cachedbmp_ = Bitmap.createBitmap(640, 480, Bitmap.Config.ARGB_8888); + break; + case 90: + case 270: + this.cachedbmp_ = Bitmap.createBitmap(480, 640, Bitmap.Config.ARGB_8888); + break; + } + } + if (this.cachedCanvas_ == null) { + this.cachedCanvas_ = new Canvas(); + this.cachedCanvas_.setBitmap(this.cachedbmp_); + } + Canvas canvas = this.holder_.lockCanvas(); + if (canvas != null) { + this.paint_.setTextSize(getResources().getDimensionPixelSize(R.dimen.liveTemperatureTextSize)); + this.paint_.setTypeface(Typeface.SANS_SERIF); + this.paint_.setTextAlign(Paint.Align.LEFT); + this.paint_.setColor(getResources().getColor(R.color.liveBackground)); + canvas.drawRect(0.0f, 0.0f, getWidth(), getHeight(), this.paint_); + this.holder_.unlockCanvasAndPost(canvas); + this.paint_.setColor(getResources().getColor(R.color.textColor)); + this.paint_.setStyle(Paint.Style.FILL_AND_STROKE); + this.paint_.setStrokeWidth(2.0f); + this.paint_.setShadowLayer(12.0f, 0.0f, 0.0f, getResources().getColor(R.color.black)); + this.paintVGA_.setTextSize(getResources().getDimensionPixelSize(R.dimen.recordingTemperatureTextSize)); + this.paintVGA_.setTypeface(Typeface.SANS_SERIF); + this.paintVGA_.setTextAlign(Paint.Align.LEFT); + this.paintVGA_.setColor(getResources().getColor(R.color.textColor)); + this.paintVGA_.setStyle(Paint.Style.FILL_AND_STROKE); + this.paintVGA_.setStrokeWidth(1.0f); + this.paintVGA_.setShadowLayer(6.0f, 0.0f, 0.0f, getResources().getColor(R.color.black)); + this.paintROI_.setColor(getResources().getColor(R.color.roiColor)); + this.paintROI_.setStyle(Paint.Style.STROKE); + this.paintROI_.setStrokeWidth(4.0f); + this.paintROI_.setShadowLayer(6.0f, 0.0f, 0.0f, getResources().getColor(R.color.black)); + this.paintROIVGA_.setColor(getResources().getColor(R.color.roiColor)); + this.paintROIVGA_.setStyle(Paint.Style.STROKE); + this.paintROIVGA_.setStrokeWidth(2.0f); + this.paintROIVGA_.setShadowLayer(2.0f, 0.0f, 0.0f, getResources().getColor(R.color.black)); + } + this.pfd_ = new PaintFlagsDrawFilter(0, 3); + synchronized (syncNotifyNewFrame_) { + imgViewerList_.add(this); + } + calculateScreenFit(); + this.aimOrientation_ = getResources().getConfiguration().orientation; + if (this.aimOrientation_ == 1) { + this.aimX_ = SharedPreferencesManager.getInt("aimX_portrait", getWidth() / 2); + this.aimY_ = SharedPreferencesManager.getInt("aimY_portrait", getHeight() / 2); + } else { + this.aimX_ = SharedPreferencesManager.getInt("aimX_landscape", getWidth() / 2); + this.aimY_ = SharedPreferencesManager.getInt("aimY_landscape", getHeight() / 2); + } + DeviceController.setColorbarSize(100, 20); + DeviceController.setColorPalette(SharedPreferencesManager.getInt("paletteIndex", 2)); + this.threadRender_ = new ThreadRender(); + this.isExitThreadRender_ = false; + this.waitCondition_.notified = false; + this.threadRender_.start(); + this.threadRecording_ = new ThreadRecording(); + this.isExitThreadRecording_ = false; + this.condRecording_.notified = false; + this.threadRecording_.start(); + } + + @Override // android.view.SurfaceHolder.Callback + public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { + calculateScreenFit(); + } + + @Override // android.view.SurfaceHolder.Callback + public void surfaceDestroyed(SurfaceHolder holder) { + if (this.aimOrientation_ == 1) { + SharedPreferencesManager.putInt("aimX_portrait", this.aimX_); + SharedPreferencesManager.putIntWithCommit("aimY_portrait", this.aimY_); + } else { + SharedPreferencesManager.putInt("aimX_landscape", this.aimX_); + SharedPreferencesManager.putIntWithCommit("aimY_landscape", this.aimY_); + } + this.isExitThreadRender_ = true; + synchronized (this.waitCondition_.cond) { + this.waitCondition_.notified = true; + this.waitCondition_.cond.notify(); + } + try { + this.threadRender_.join(); + this.threadRender_ = null; + } catch (InterruptedException e) { + } + this.isExitThreadRecording_ = true; + synchronized (this.condRecording_.cond) { + this.condRecording_.notified = true; + this.condRecording_.cond.notify(); + } + try { + this.threadRecording_.join(); + this.threadRecording_ = null; + } catch (InterruptedException e2) { + } + synchronized (syncNotifyNewFrame_) { + imgViewerList_.remove(this); + } + this.cachedCanvas_ = null; + if (!this.cachedbmp_.isRecycled()) { + this.cachedbmp_.recycle(); + this.cachedbmp_ = null; + } + } + + @Override // cn.com.magnity.magnitycx.FragmentMainCenter.DelegateCapture + public boolean onStartRecording(String pathName) { + boolean ret = DeviceController.startRecording(pathName, this.cachedbmp_.getWidth(), this.cachedbmp_.getHeight(), 2048, 20, 5); + this.recordingTimeElapsed_.set(0L); + this.timerHelper_.start(1000L, 1000L); + return ret; + } + + @Override // cn.com.magnity.magnitycx.FragmentMainCenter.DelegateCapture + public void onStopRecording() { + this.timerHelper_.stop(); + if (DeviceController.isRecording()) { + DeviceController.stopRecording(); + } + } + + @Override // cn.com.magnity.magnitycx.FragmentMainCenter.DelegateCapture + public Bitmap onCapture() { + OSDParam osdParam = new OSDParam(); + osdParam.setCrossLogo(R.mipmap.cross_capture); + osdParam.setWaterMark(R.mipmap.water_mark); + osdParam.setMinTrace(R.mipmap.min_trace_capture); + osdParam.setMaxTrace(R.mipmap.max_trace_capture); + DeviceController.Lock(); + updateUiTemps(this.fpaWidth_, this.fpaHeight_); + DeviceController.Unlock(); + drawImage(this.cachedCanvas_, this.paintVGA_, this.paintROIVGA_, this.matrixVGA_, 0, 0, this.cachedbmp_.getWidth(), this.cachedbmp_.getHeight(), osdParam); + return this.cachedbmp_; + } + + @Override // cn.com.magnity.magnitycx.FragmentMainCenter.DelegateCapture + public void onCaptureFinished(String pathName) { + } + + @Override // android.view.View + public boolean onTouchEvent(MotionEvent event) { + boolean z = false; + if (!DeviceController.isProcessImage()) { + return false; + } + switch (event.getActionMasked()) { + case 0: + if (MagApplication.magParameter.isTraceRoi) { + int[] coor = DeviceController.screenXY2ClientXY(((int) event.getX()) - this.dx_, ((int) event.getY()) - this.dy_, this.width_, this.height_); + boolean isPointInROI = false; + ROIInfo.lock(); + try { + Iterator it = this.listRoi_.iterator(); + while (true) { + if (it.hasNext()) { + if (it.next().isPointIn(coor[0], coor[1])) { + it.remove(); + isPointInROI = true; + } + } + } + if (!isPointInROI && this.listRoi_.size() > 0) { + this.listRoi_.remove(0); + } + ROIInfo.unlock(); + ROIInfo roiInfo = new ROIInfo(1); + roiInfo.setBeginPoint(coor[0], coor[1]); + roiInfo.setEndPoint(coor[0], coor[1]); + ROIInfo.lock(); + try { + this.listRoi_.add(roiInfo); + return true; + } finally { + } + } finally { + } + } + if (MagApplication.magParameter.basePara1.devType != 1 || !MagApplication.magParameter.isShowMovingCross || event.getX() <= this.aimX_ - 48 || event.getX() >= this.aimX_ + 48 || event.getY() <= this.aimY_ - 48 || event.getY() >= this.aimY_ + 48) { + return false; + } + this.isAimDrag_ = true; + return true; + case 1: + if (MagApplication.magParameter.isTraceRoi) { + int num = this.listRoi_.size(); + if (num < 1) { + return false; + } + ROIInfo roiInfo2 = this.listRoi_.get(num - 1); + int[] coor2 = DeviceController.screenXY2ClientXY(((int) event.getX()) - this.dx_, ((int) event.getY()) - this.dy_, this.width_, this.height_); + ROIInfo.lock(); + try { + roiInfo2.setEndPoint(coor2[0], coor2[1]); + if (!roiInfo2.isBigEnouth()) { + this.listRoi_.remove(num - 1); + } else { + roiInfo2.setFinished(); + ROIInfo.unlock(); + invalidate_(); + z = true; + } + return z; + } finally { + } + } + if (!this.isAimDrag_) { + return false; + } + this.isAimDrag_ = false; + invalidate_(); + return true; + case 2: + if (MagApplication.magParameter.isTraceRoi) { + int num2 = this.listRoi_.size(); + if (num2 < 1) { + return false; + } + ROIInfo roiInfo3 = this.listRoi_.get(num2 - 1); + int[] coor3 = DeviceController.screenXY2ClientXY(((int) event.getX()) - this.dx_, ((int) event.getY()) - this.dy_, this.width_, this.height_); + if (!roiInfo3.isFinished()) { + ROIInfo.lock(); + try { + roiInfo3.setEndPoint(coor3[0], coor3[1]); + } finally { + } + } + return true; + } + if (!this.isAimDrag_) { + return false; + } + this.aimX_ = (int) event.getX(); + this.aimY_ = (int) event.getY(); + if (this.aimX_ < this.dx_) { + this.aimX_ = this.dx_; + } else if (this.aimX_ > this.dx_ + this.width_) { + this.aimX_ = this.dx_ + this.width_; + } + if (this.aimY_ < this.dy_) { + this.aimY_ = this.dy_; + } else if (this.aimY_ > this.dy_ + this.height_) { + this.aimY_ = this.dy_ + this.height_; + } + invalidate_(); + return true; + default: + return false; + } + } + + /* JADX INFO: Access modifiers changed from: private */ + public void doDraw(OSDParam param) { + Bitmap crossLogo; + Canvas canvas = this.holder_.lockCanvas(); + if (canvas != null) { + drawImage(canvas, this.paint_, this.paintROI_, this.matrix_, this.dx_, this.dy_, this.width_, this.height_, param); + drawMarginBackground(canvas, this.paint_, this.dx_, this.dy_, this.width_, this.height_); + if (DeviceController.isRecording()) { + drawRecordingTime(canvas, this.paint_, this.dx_, this.dy_, this.width_, this.height_, this.recordingTimeElapsed_.get()); + } + if (MagApplication.magParameter.basePara1.devType == 1 && (crossLogo = param.getMovingCrossLogo()) != null && MagApplication.magParameter.isShowMovingCross) { + canvas.drawBitmap(crossLogo, this.aimX_ - (crossLogo.getWidth() / 2), this.aimY_ - (crossLogo.getHeight() / 2), (Paint) null); + } + this.holder_.unlockCanvasAndPost(canvas); + } + } + + private void drawFps(Canvas canvas, Paint paint, int dx, int dy, int width, int height, int recvFps, int showFps) { + Paint p = new Paint(); + p.setColor(-16711936); + p.setTextSize(20.0f); + String s = String.format("接收帧率:%s", Integer.valueOf(recvFps)); + Rect rect = new Rect(); + p.getTextBounds(s, 0, s.length(), rect); + canvas.drawText(s, dx + 2, rect.height() + dy + 2, p); + canvas.drawText(String.format("显示帧率:%s", Integer.valueOf(showFps)), dx + 2, ((rect.height() + 2) * 2) + dy, p); + } + + private void drawRecordingTime(Canvas canvas, Paint paint, int dx, int dy, int width, int height, long seconds) { + long hour = seconds / 3600; + long min = (seconds - (3600 * hour)) / 60; + long sec = (seconds - (3600 * hour)) - (60 * min); + String hms = String.format("%02d", Long.valueOf(hour)) + Config.TRACE_TODAY_VISIT_SPLIT + String.format("%02d", Long.valueOf(min)) + Config.TRACE_TODAY_VISIT_SPLIT + String.format("%02d", Long.valueOf(sec)); + float oldFontSize = paint.getTextSize(); + paint.setTextSize(getResources().getDimensionPixelSize(R.dimen.recordingTimeTextSize)); + int oldFontColor = paint.getColor(); + paint.setColor(getResources().getColor(R.color.highlightText)); + Rect rect = new Rect(); + paint.getTextBounds(hms + "8", 0, hms.length() + 1, rect); + canvas.drawText(hms, ((getWidth() - rect.width()) / 2) + dx, (dy + height) - 20, paint); + paint.setTextSize(oldFontSize); + paint.setColor(oldFontColor); + } + + private void drawMarginBackground(Canvas canvas, Paint paint, int dx, int dy, int width, int height) { + int oldColor = paint.getColor(); + paint.setColor(getResources().getColor(R.color.black)); + canvas.drawRect(0.0f, 0.0f, dx, getHeight(), paint); + canvas.drawRect(0.0f, 0.0f, getWidth(), dy, paint); + canvas.drawRect(dx + width, 0.0f, getWidth(), getHeight(), paint); + canvas.drawRect(0.0f, dy + height, getWidth(), getHeight(), paint); + paint.setColor(oldColor); + } + + private void drawROIs(Canvas canvas, Paint paint, Paint paintROI, Rect rect, int dx, int dy, int width, int height, OSDParam osdParam) { + String format; + int[] coor; + Bitmap maxTrace = osdParam.getMaxTrace(); + Bitmap minTrace = osdParam.getMinTrace(); + int traceType = MagApplication.magParameter.maxMinTrace; + if (this.isTempStable_) { + format = "%.1f℃"; + } else { + format = "~%.1f℃"; + } + int pad = maxTrace.getWidth() / 6; + ROIInfo.lock(); + try { + Iterator it = this.listRoi_.iterator(); + while (it.hasNext()) { + ROIInfo roiInfo = it.next(); + switch (roiInfo.getType()) { + case 1: + int[] coor2 = DeviceController.clientXY2ScreenXY(roiInfo.getBeginPointX(), roiInfo.getBeginPointY(), width, height); + int[] coor22 = DeviceController.clientXY2ScreenXY(roiInfo.getEndPointX(), roiInfo.getEndPointY(), width, height); + canvas.drawRect(coor2[0] + dx, coor2[1] + dy, coor22[0] + dx, coor22[1] + dy, paintROI); + if (roiInfo.isBigEnouth() && roiInfo.isTempValid()) { + if ((traceType == 0 || traceType == 2 || traceType == -1) && (coor = DeviceController.clientPos2ScreenXY(roiInfo.getMaxPos(), width, height)) != null) { + canvas.drawBitmap(maxTrace, (coor[0] - (maxTrace.getWidth() / 2)) + dx, (coor[1] - (maxTrace.getHeight() / 2)) + dy, paint); + String str = String.format(format, Float.valueOf(roiInfo.getMaxTemp() * 0.001f)); + paint.getTextBounds(str, 0, str.length(), rect); + int cx = rect.width(); + int cy = rect.height(); + int x = coor[0] + pad; + int y = coor[1] + cy + pad; + if (x > width - cx) { + x = (coor[0] - pad) - cx; + } + if (y > height) { + y = (coor[1] - pad) - cy; + } + canvas.drawText(str, x + dx, y + dy, paint); + } + if (traceType != 1 && traceType != 2) { + break; + } else { + int[] coor3 = DeviceController.clientPos2ScreenXY(roiInfo.getMinPos(), width, height); + if (coor3 == null) { + break; + } else { + canvas.drawBitmap(minTrace, (coor3[0] - (minTrace.getWidth() / 2)) + dx, (coor3[1] - (minTrace.getHeight() / 2)) + dy, paint); + String str2 = String.format(format, Float.valueOf(roiInfo.getMinTemp() * 0.001f)); + paint.getTextBounds(str2, 0, str2.length(), rect); + int cx2 = rect.width(); + int cy2 = rect.height(); + int x2 = coor3[0] + pad; + int y2 = coor3[1] + cy2 + pad; + if (x2 > width - cx2) { + x2 = (coor3[0] - pad) - cx2; + } + if (y2 > height) { + y2 = (coor3[1] - pad) - cy2; + } + canvas.drawText(str2, x2 + dx, y2 + dy, paint); + break; + } + } + } + break; + } + } + } finally { + ROIInfo.unlock(); + } + } + + private void drawMaxMin(Canvas canvas, Paint paint, State state, Rect rect, int dx, int dy, int width, int height, OSDParam osdParam) { + String format; + int[] coor; + int[] coor2; + Bitmap maxTrace = osdParam.getMaxTrace(); + Bitmap minTrace = osdParam.getMinTrace(); + if (this.isTempStable_) { + format = "%.1f℃"; + } else { + format = "~%.1f℃"; + } + if (maxTrace != null && minTrace != null) { + int pad = maxTrace.getWidth() / 6; + int traceType = MagApplication.magParameter.maxMinTrace; + if ((traceType == 0 || traceType == 2) && (coor = DeviceController.clientXY2ScreenXY(state.intMaxX, state.intMaxY, width, height)) != null) { + canvas.drawBitmap(maxTrace, (coor[0] - (maxTrace.getWidth() / 2)) + dx, (coor[1] - (maxTrace.getHeight() / 2)) + dy, paint); + String str = String.format(format, Float.valueOf(state.intMaxTemperature * 0.001f)); + paint.getTextBounds(str, 0, str.length(), rect); + int cx = rect.width(); + int cy = rect.height(); + int x = coor[0] + pad; + int y = coor[1] + cy + pad; + if (x > width - cx) { + x = (coor[0] - pad) - cx; + } + if (y > height) { + y = (coor[1] - pad) - cy; + } + canvas.drawText(str, x + dx, y + dy, paint); + } + if ((traceType == 1 || traceType == 2) && (coor2 = DeviceController.clientXY2ScreenXY(state.intMinX, state.intMinY, width, height)) != null) { + canvas.drawBitmap(minTrace, (coor2[0] - (minTrace.getWidth() / 2)) + dx, (coor2[1] - (minTrace.getHeight() / 2)) + dy, paint); + String str2 = String.format(format, Float.valueOf(state.intMinTemperature * 0.001f)); + paint.getTextBounds(str2, 0, str2.length(), rect); + int cx2 = rect.width(); + int cy2 = rect.height(); + int x2 = coor2[0] + pad; + int y2 = coor2[1] + cy2 + pad; + if (x2 > width - cx2) { + x2 = (coor2[0] - pad) - cx2; + } + if (y2 > height) { + y2 = (coor2[1] - pad) - cy2; + } + canvas.drawText(str2, x2 + dx, y2 + dy, paint); + } + } + } + + /* JADX INFO: Access modifiers changed from: private */ + public void drawImage(Canvas canvas, Paint paint, Paint paintROI, Matrix matrix, int dx, int dy, int width, int height, OSDParam osdParam) { + Bitmap laserLogo; + Bitmap crossLogo; + String str; + matrix.reset(); + Rect rect = new Rect(); + ThreadLocalParam param = null; + switch (DeviceController.getPreviewOrientation()) { + case 0: + float ratioX = width / this.fpaWidth_; + float ratioY = height / this.fpaHeight_; + matrix.postScale(ratioX, ratioY, 0.0f, 0.0f); + matrix.postTranslate(dx, dy); + break; + case 90: + float ratioX2 = width / this.fpaHeight_; + float ratioY2 = height / this.fpaWidth_; + matrix.postRotate(90.0f); + matrix.postTranslate(this.fpaHeight_ + dx, dy); + matrix.postScale(ratioX2, ratioY2, dx, dy); + break; + case 180: + float ratioX3 = width / this.fpaWidth_; + float ratioY3 = height / this.fpaHeight_; + matrix.postRotate(180.0f, this.fpaWidth_ / 2, this.fpaHeight_ / 2); + matrix.postTranslate(dx, dy); + matrix.postScale(ratioX3, ratioY3, dx, dy); + break; + case 270: + float ratioX4 = width / this.fpaHeight_; + float ratioY4 = height / this.fpaWidth_; + matrix.postRotate(-90.0f); + matrix.postTranslate(dx, this.fpaWidth_ + dy); + matrix.postScale(ratioX4, ratioY4, dx, dy); + break; + } + canvas.setDrawFilter(this.pfd_); + DeviceController.Lock(); + canvas.drawBitmap(this.bmpIr_, matrix, null); + try { + param = (ThreadLocalParam) this.threadLocalParam_.clone(); + } catch (CloneNotSupportedException e) { + } finally { + DeviceController.Unlock(); + } + DeviceController.Unlock(); + MagParameter magParameter = MagApplication.magParameter; + if (magParameter.isShowCross && (crossLogo = osdParam.getCrossLogo()) != null) { + canvas.drawBitmap(crossLogo, ((width - crossLogo.getWidth()) / 2) + dx, ((height - crossLogo.getHeight()) / 2) + dy, (Paint) null); + if (this.isTempStable_) { + str = String.format("%.1f℃", Float.valueOf(param.centerTemp * 0.001f)); + } else { + str = String.format("~%.1f℃", Float.valueOf(param.centerTemp * 0.001f)); + } + paint.getTextBounds(str, 0, str.length(), rect); + int offset = crossLogo.getWidth() / 6; + canvas.drawText(str, (width / 2) + dx + offset, (height / 2) + dy + rect.height() + offset, paint); + } + if (magParameter.isLaserOn && (laserLogo = osdParam.getLaserLogo()) != null) { + int laserPos = magParameter.basePara2.laserPos; + int x = laserPos & 255; + int y = laserPos >> 16; + switch (magParameter.imageEX) { + case 1: + x = ((x - (this.fpaWidth_ / 2)) * 2) + (this.fpaWidth_ / 2); + y = ((y - (this.fpaHeight_ / 2)) * 2) + (this.fpaHeight_ / 2); + break; + case 2: + x = ((x - (this.fpaWidth_ / 2)) * 4) + (this.fpaWidth_ / 2); + y = ((y - (this.fpaHeight_ / 2)) * 4) + (this.fpaHeight_ / 2); + break; + case 3: + x = ((x - (this.fpaWidth_ / 2)) * 8) + (this.fpaWidth_ / 2); + y = ((y - (this.fpaHeight_ / 2)) * 8) + (this.fpaHeight_ / 2); + break; + case 4: + x = ((x - (this.fpaWidth_ / 2)) * 16) + (this.fpaWidth_ / 2); + y = ((y - (this.fpaHeight_ / 2)) * 16) + (this.fpaHeight_ / 2); + break; + } + int[] screenCoor = DeviceController.sensorXY2ScreenXY(x, y, width, height); + if ((magParameter.imageFlip & 1) != 0) { + screenCoor[0] = (width - 1) - screenCoor[0]; + } + if ((magParameter.imageFlip & 2) != 0) { + screenCoor[1] = (height - 1) - screenCoor[1]; + } + canvas.drawBitmap(laserLogo, (screenCoor[0] - (laserLogo.getWidth() / 2)) + dx, (screenCoor[1] - (laserLogo.getHeight() / 2)) + dy, (Paint) null); + } + if (magParameter.maxMinTrace != -1 && magParameter.isTraceMaxMin && param.state != null) { + drawMaxMin(canvas, paint, param.state, rect, dx, dy, width, height, osdParam); + } + if (magParameter.isTraceRoi) { + drawROIs(canvas, paint, paintROI, rect, dx, dy, width, height, osdParam); + } + Bitmap waterMark = osdParam.getWaterMark(); + if (waterMark != null) { + canvas.drawBitmap(waterMark, ((dx + width) - waterMark.getWidth()) - 8, dy + 8, (Paint) null); + } + if (MagApplication.isShowFps && this.frameIndex_ > 20) { + drawFps(canvas, paint, dx, dy, width, height, UsbCommunication.getReceivedFps(), getShowFps()); + } + } + + private class ThreadRecording extends Thread { + private ThreadRecording() { + } + + @Override // java.lang.Thread, java.lang.Runnable + public void run() { + Logging.trace("Enter ThreadRecording."); + OSDParam osdParam = new OSDParam(); + osdParam.setCrossLogo(R.mipmap.cross_capture); + osdParam.setWaterMark(R.mipmap.water_mark); + osdParam.setMinTrace(R.mipmap.min_trace_capture); + osdParam.setMaxTrace(R.mipmap.max_trace_capture); + while (!ImageViewer.this.isExitThreadRecording_) { + synchronized (ImageViewer.this.condRecording_.cond) { + while (!ImageViewer.this.condRecording_.notified) { + try { + ImageViewer.this.condRecording_.cond.wait(); + } catch (InterruptedException e) { + } + } + ImageViewer.this.condRecording_.notified = false; + } + if (ImageViewer.this.isExitThreadRecording_) { + break; + } else if (DeviceController.isRecording()) { + ImageViewer.this.drawImage(ImageViewer.this.cachedCanvas_, ImageViewer.this.paintVGA_, ImageViewer.this.paintROIVGA_, ImageViewer.this.matrixVGA_, 0, 0, ImageViewer.this.cachedbmp_.getWidth(), ImageViewer.this.cachedbmp_.getHeight(), osdParam); + DeviceController.doRecording(ImageViewer.this.cachedbmp_); + } + } + osdParam.reset(); + Logging.trace("Leave ThreadRecording."); + } + } + + private class ThreadRender extends Thread { + private ThreadRender() { + } + + @Override // java.lang.Thread, java.lang.Runnable + public void run() { + Logging.trace("Enter ThreadRender."); + OSDParam osdParam = new OSDParam(); + osdParam.setCrossLogo(R.mipmap.cross); + osdParam.setMinTrace(R.mipmap.min_trace); + osdParam.setMaxTrace(R.mipmap.max_trace); + osdParam.setLaserLogo(R.mipmap.laser); + osdParam.setMovingCrossLogo(R.mipmap.moving_cross); + int frameIndex = -1; + long t1 = 0; + while (!ImageViewer.this.isExitThreadRender_) { + synchronized (ImageViewer.this.waitCondition_.cond) { + while (!ImageViewer.this.waitCondition_.notified) { + try { + ImageViewer.this.waitCondition_.cond.wait(); + } catch (InterruptedException e) { + } + } + ImageViewer.this.waitCondition_.notified = false; + } + if (ImageViewer.this.isExitThreadRender_) { + break; + } + if (DeviceController.isOutputDataReady()) { + ImageViewer.this.doDraw(osdParam); + if (MagApplication.isShowFps) { + if (t1 == 0) { + t1 = System.currentTimeMillis(); + } else { + long t = System.currentTimeMillis(); + ImageViewer.lock_.lock(); + ImageViewer.ticks_[frameIndex % ImageViewer.ticks_.length] = t - t1; + ImageViewer.lock_.unlock(); + t1 = t; + } + } + frameIndex++; + } else { + Logging.trace("draw not ready."); + } + } + osdParam.reset(); + Logging.trace("Leave ThreadRender."); + } + } + + private static int getShowFps() { + long[] ticks = new long[ticks_.length]; + lock_.lock(); + System.arraycopy(ticks_, 0, ticks, 0, ticks_.length); + lock_.unlock(); + int sum = 0; + for (int i = ticks.length - 1; i != -1; i--) { + sum = (int) (sum + ticks[i]); + } + return (ticks_.length * 1000) / sum; + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/ImageViewerVisible.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/ImageViewerVisible.java new file mode 100644 index 0000000..917921b --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/ImageViewerVisible.java @@ -0,0 +1,132 @@ +package cn.com.magnity.magnitycx; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Point; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.SurfaceHolder; +import android.view.SurfaceView; +import android.widget.RelativeLayout; +import cn.com.magnity.magnitycx.sdk.MagParameter; +import cn.com.magnity.magnitycx.sdk.SharedPreferencesManager; +import cn.com.magnity.magnitycx.sdk.VisibleCamera; + +/* loaded from: classes.dex */ +public class ImageViewerVisible extends SurfaceView implements SurfaceHolder.Callback { + private SurfaceHolder holder_; + private int leftMargin_; + private int mouseDownX_; + private int mouseDownY_; + private int topMargin_; + + public ImageViewerVisible(Context context, AttributeSet attrs) { + super(context, attrs); + this.holder_ = null; + this.holder_ = getHolder(); + this.holder_.addCallback(this); + this.holder_.setFormat(-2); + this.holder_.setType(3); + } + + @Override // android.view.SurfaceHolder.Callback + public void surfaceCreated(SurfaceHolder holder) { + int width; + int height; + this.leftMargin_ = MagApplication.magParameter.visWndLeftMargin; + this.topMargin_ = MagApplication.magParameter.visWndTopMargin; + switch (MagApplication.magParameter.visWndSize) { + case 0: + width = ((MagApplication.magParameter.portraitScreenWidth / 4) / 12) * 12; + break; + case 1: + width = ((MagApplication.magParameter.portraitScreenWidth / 3) / 12) * 12; + break; + case 2: + width = ((MagApplication.magParameter.portraitScreenWidth / 2) / 12) * 12; + break; + default: + width = ((MagApplication.magParameter.portraitScreenWidth / 4) / 12) * 12; + break; + } + if (getResources().getConfiguration().orientation == 2) { + height = width; + width = (height * 4) / 3; + VisibleCamera.initCamera(MagApplication.magParameter.visCameraId, this.holder_, height); + } else { + height = (width * 4) / 3; + VisibleCamera.initCamera(MagApplication.magParameter.visCameraId, this.holder_, width); + } + Point outSize = new Point(); + MagApplication.windowManager.getDefaultDisplay().getSize(outSize); + RelativeLayout layout = (RelativeLayout) getParent(); + RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) getLayoutParams(); + lp.width = width; + lp.height = height; + if (this.leftMargin_ < 0 || this.leftMargin_ > outSize.x - lp.width) { + this.leftMargin_ = outSize.x - lp.width; + } + if (this.topMargin_ < 0) { + this.topMargin_ = 0; + } else if (this.topMargin_ > layout.getHeight() - lp.height) { + this.topMargin_ = layout.getHeight() - lp.height; + } + lp.leftMargin = this.leftMargin_; + lp.topMargin = this.topMargin_; + setLayoutParams(lp); + Canvas canvas = this.holder_.lockCanvas(); + if (canvas != null) { + Paint pint = new Paint(); + pint.setColor(getResources().getColor(R.color.black)); + canvas.drawRect(0.0f, 0.0f, lp.width, lp.height, pint); + this.holder_.unlockCanvasAndPost(canvas); + } + } + + @Override // android.view.SurfaceHolder.Callback + public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { + } + + @Override // android.view.SurfaceHolder.Callback + public void surfaceDestroyed(SurfaceHolder holder) { + RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) getLayoutParams(); + MagApplication.magParameter.visWndLeftMargin = params.leftMargin; + MagApplication.magParameter.visWndTopMargin = params.topMargin; + SharedPreferencesManager.putInt(MagParameter.KEY_VISWNDLEFTMARGIN, params.leftMargin); + SharedPreferencesManager.putInt(MagParameter.KEY_VISWNDTOPMARGIN, params.topMargin); + SharedPreferencesManager.commit(); + VisibleCamera.deinitCamera(); + } + + @Override // android.view.View + public boolean onTouchEvent(MotionEvent event) { + switch (event.getAction()) { + case 0: + this.mouseDownX_ = (int) event.getRawX(); + this.mouseDownY_ = (int) event.getRawY(); + RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) getLayoutParams(); + this.leftMargin_ = params.leftMargin; + this.topMargin_ = params.topMargin; + break; + case 2: + RelativeLayout.LayoutParams params2 = (RelativeLayout.LayoutParams) getLayoutParams(); + params2.leftMargin = (this.leftMargin_ + ((int) event.getRawX())) - this.mouseDownX_; + params2.topMargin = (this.topMargin_ + ((int) event.getRawY())) - this.mouseDownY_; + RelativeLayout layout = (RelativeLayout) getParent(); + if (params2.leftMargin < 0) { + params2.leftMargin = 0; + } else if (params2.leftMargin > layout.getWidth() - params2.width) { + params2.leftMargin = layout.getWidth() - params2.width; + } + if (params2.topMargin < 0) { + params2.topMargin = 0; + } else if (params2.topMargin > layout.getHeight() - params2.height) { + params2.topMargin = layout.getHeight() - params2.height; + } + setLayoutParams(params2); + break; + } + return true; + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/MagApplication.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/MagApplication.java new file mode 100644 index 0000000..931b2ea --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/MagApplication.java @@ -0,0 +1,113 @@ +package cn.com.magnity.magnitycx; + +import android.app.Activity; +import android.app.Application; +import android.os.Bundle; +import android.os.Handler; +import android.util.DisplayMetrics; +import android.view.WindowManager; +import cn.com.magnity.magnitycx.sdk.GlobalFunc; +import cn.com.magnity.magnitycx.sdk.MagParameter; +import cn.com.magnity.magnitycx.sdk.UsbConnection; + +/* loaded from: classes.dex */ +public class MagApplication extends Application { + public static GlobalFunc globalFunc; + private static MagApplication instance_; + public static MagParameter magParameter; + public static WindowManager windowManager; + private int counter_; + private Handler handler_ = new Handler(); + private Runnable runnable_ = new Runnable() { // from class: cn.com.magnity.magnitycx.MagApplication.1 + @Override // java.lang.Runnable + public void run() { + UsbConnection.getInstance().deinit(true); + UsbConnection.getInstance().setCallbackReceiver(null); + } + }; + private static boolean handlerProhibited_ = false; + public static boolean isShowFps = false; + + static /* synthetic */ int access$008(MagApplication x0) { + int i = x0.counter_; + x0.counter_ = i + 1; + return i; + } + + static /* synthetic */ int access$010(MagApplication x0) { + int i = x0.counter_; + x0.counter_ = i - 1; + return i; + } + + public static void setUsbDeinitAllowed(boolean flag) { + handlerProhibited_ = !flag; + } + + public static MagApplication getInstance() { + return instance_; + } + + @Override // android.app.Application + public void onCreate() { + super.onCreate(); + instance_ = this; + magParameter = new MagParameter(this); + globalFunc = new GlobalFunc(); + windowManager = (WindowManager) getSystemService("window"); + DisplayMetrics metric = new DisplayMetrics(); + try { + windowManager.getDefaultDisplay().getMetrics(metric); + } catch (Exception e) { + int i = 0 + 1; + } + switch (getResources().getConfiguration().orientation) { + case 1: + magParameter.portraitScreenWidth = metric.widthPixels; + magParameter.portraitScreenHeight = metric.heightPixels; + break; + case 2: + magParameter.portraitScreenWidth = metric.heightPixels; + magParameter.portraitScreenHeight = metric.widthPixels; + break; + } + registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() { // from class: cn.com.magnity.magnitycx.MagApplication.2 + @Override // android.app.Application.ActivityLifecycleCallbacks + public void onActivityCreated(Activity activity, Bundle savedInstanceState) { + } + + @Override // android.app.Application.ActivityLifecycleCallbacks + public void onActivityStarted(Activity activity) { + MagApplication.access$008(MagApplication.this); + if (MagApplication.this.counter_ == 1) { + MagApplication.this.handler_.removeCallbacks(MagApplication.this.runnable_); + boolean unused = MagApplication.handlerProhibited_ = false; + } + } + + @Override // android.app.Application.ActivityLifecycleCallbacks + public void onActivityResumed(Activity activity) { + } + + @Override // android.app.Application.ActivityLifecycleCallbacks + public void onActivityPaused(Activity activity) { + } + + @Override // android.app.Application.ActivityLifecycleCallbacks + public void onActivityStopped(Activity activity) { + MagApplication.access$010(MagApplication.this); + if (MagApplication.this.counter_ == 0 && !MagApplication.handlerProhibited_) { + MagApplication.this.handler_.postDelayed(MagApplication.this.runnable_, 500L); + } + } + + @Override // android.app.Application.ActivityLifecycleCallbacks + public void onActivitySaveInstanceState(Activity activity, Bundle outState) { + } + + @Override // android.app.Application.ActivityLifecycleCallbacks + public void onActivityDestroyed(Activity activity) { + } + }); + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/MainActivity.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/MainActivity.java new file mode 100644 index 0000000..a5de3ed --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/MainActivity.java @@ -0,0 +1,307 @@ +package cn.com.magnity.magnitycx; + +import android.graphics.RectF; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.view.GestureDetectorCompat; +import android.support.v7.app.AppCompatActivity; +import android.util.DisplayMetrics; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.view.OrientationEventListener; +import android.view.Window; +import android.view.WindowManager; +import android.widget.LinearLayout; +import cn.com.magnity.magnitycx.QueryDialogFragment; +import cn.com.magnity.magnitycx.log.Logging; +import cn.com.magnity.magnitycx.sdk.DeviceController; +import cn.com.magnity.magnitycx.sdk.UsbConnection; +import cn.com.magnity.magnitycx.upgrade.UpgradeManager; +import cn.com.magnity.magnitycx.util.ActivityUtils; +import com.baidu.mobstat.StatService; +import org.apache.log4j.Level; + +/* loaded from: classes.dex */ +public class MainActivity extends AppCompatActivity implements QueryDialogFragment.DelegateQueryResult { + private FragmentMainBottom fragmentBottom_; + private FragmentMainCenter fragmentCenter_; + private FragmentMainTop fragmentTop_; + private GestureDetectorCompat gestureDetector_; + private boolean mIsLoggingInitSucc; + OrientationEventListener orientationListener_; + private UpgradeManager upgradeManager_; + + public interface DelegateFling { + void afterFling(int i); + } + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.app.Activity + protected void onPostResume() { + super.onPostResume(); + StatService.onPageStart(getApplicationContext(), ""); + } + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.support.v4.app.BaseFragmentActivityGingerbread, android.app.Activity + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + ActivityUtils.requestRuntimePermission(this, new String[]{"android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.ACCESS_FINE_LOCATION", "android.permission.CAMERA"}, 0); + this.mIsLoggingInitSucc = Logging.init(Level.INFO); + Logging.info("App start"); + Logging.trace("Main activity created"); + setContentView(R.layout.activity_main); + disableRotationAnimation(); + overridePendingTransition(0, 0); + getWindow().setFormat(-3); + StatService.setDebugOn(false); + this.orientationListener_ = new OrientationEventListener(this, 2) { // from class: cn.com.magnity.magnitycx.MainActivity.1 + @Override // android.view.OrientationEventListener + public void onOrientationChanged(int orientation) { + if (orientation != -1) { + int degree = 0; + switch (MagApplication.windowManager.getDefaultDisplay().getRotation()) { + case 0: + degree = 90; + break; + case 1: + degree = 0; + break; + case 2: + degree = 270; + break; + case 3: + degree = 180; + break; + } + if (degree != DeviceController.getPreviewOrientation()) { + DeviceController.Lock(); + DeviceController.setPreviewOrientation(degree); + DeviceController.Unlock(); + } + } + } + }; + if (this.orientationListener_.canDetectOrientation()) { + this.orientationListener_.enable(); + } else { + this.orientationListener_.disable(); + int degree = 0; + switch (MagApplication.windowManager.getDefaultDisplay().getRotation()) { + case 0: + degree = 90; + break; + case 1: + degree = 0; + break; + case 2: + degree = 270; + break; + case 3: + degree = 180; + break; + } + DeviceController.Lock(); + DeviceController.setPreviewOrientation(degree); + DeviceController.Unlock(); + } + this.gestureDetector_ = new GestureDetectorCompat(this, new MyGestureListener()); + FragmentManager fm = getSupportFragmentManager(); + this.fragmentTop_ = (FragmentMainTop) fm.findFragmentById(R.id.fragment_container_main_top); + if (this.fragmentTop_ == null) { + this.fragmentTop_ = new FragmentMainTop(); + fm.beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).add(R.id.fragment_container_main_top, this.fragmentTop_).commit(); + } + this.fragmentCenter_ = (FragmentMainCenter) fm.findFragmentById(R.id.fragment_container_main_center); + if (this.fragmentCenter_ == null) { + this.fragmentCenter_ = new FragmentMainCenter(); + fm.beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).add(R.id.fragment_container_main_center, this.fragmentCenter_).commit(); + } + this.fragmentBottom_ = (FragmentMainBottom) fm.findFragmentById(R.id.fragment_container_main_bottom); + if (this.fragmentBottom_ == null) { + this.fragmentBottom_ = new FragmentMainBottom(); + fm.beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).add(R.id.fragment_container_main_bottom, this.fragmentBottom_).commit(); + } + UsbConnection usbConn = UsbConnection.getInstance(); + usbConn.registerObserver(this.fragmentTop_); + usbConn.registerObserver(this.fragmentCenter_); + usbConn.registerObserver(this.fragmentBottom_); + if (savedInstanceState == null) { + this.upgradeManager_ = new UpgradeManager(this); + this.upgradeManager_.start(); + } + } + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.app.Activity + protected void onStart() { + super.onStart(); + UsbConnection usbConn = UsbConnection.getInstance(); + if (usbConn != null) { + usbConn.setCallbackReceiver(this.fragmentCenter_); + if (!usbConn.isConnected()) { + usbConn.init(); + } else { + usbConn.notifyObervers(1); + } + } + } + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.app.Activity + protected void onStop() { + super.onStop(); + } + + @Override // android.support.v4.app.FragmentActivity, android.app.Activity + protected void onResume() { + super.onResume(); + } + + @Override // android.support.v4.app.FragmentActivity, android.app.Activity + public void onBackPressed() { + super.onBackPressed(); + UsbConnection usbConn = UsbConnection.getInstance(); + if (usbConn != null) { + usbConn.setCallbackReceiver(null); + usbConn.deinit(false); + } + } + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.app.Activity + protected void onDestroy() { + Logging.trace("Main activity destroyed"); + super.onDestroy(); + this.orientationListener_.disable(); + UsbConnection usbConn = UsbConnection.getInstance(); + usbConn.unregisterAll(); + if (this.upgradeManager_ != null) { + this.upgradeManager_.stop(); + } + } + + @Override // android.support.v4.app.FragmentActivity, android.app.Activity, android.support.v4.app.ActivityCompat.OnRequestPermissionsResultCallback + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + for (int i = 0; i < permissions.length; i++) { + String permission = permissions[i]; + int result = grantResults[i]; + if (result == 0) { + switch (permission) { + case "android.permission.WRITE_EXTERNAL_STORAGE": + if (this.mIsLoggingInitSucc) { + break; + } else { + this.mIsLoggingInitSucc = Logging.init(Level.INFO); + if (this.mIsLoggingInitSucc) { + Logging.info("App start"); + break; + } else { + break; + } + } + } + } + } + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + } + + private void disableRotationAnimation() { + Window localWindow = getWindow(); + WindowManager.LayoutParams localLayoutParams = localWindow.getAttributes(); + localLayoutParams.rotationAnimation = 2; + localWindow.setAttributes(localLayoutParams); + } + + @Override // cn.com.magnity.magnitycx.QueryDialogFragment.DelegateQueryResult + public void onQueryResult(int result) { + if (result == 1) { + this.fragmentTop_.openLaser(); + } + } + + @Override // android.support.v4.app.FragmentActivity, android.app.Activity + protected void onPause() { + super.onPause(); + StatService.onPageEnd(getApplicationContext(), "��ҳ��"); + } + + @Override // android.app.Activity, android.view.Window.Callback + public boolean dispatchTouchEvent(MotionEvent ev) { + if (this.gestureDetector_ != null && !MagApplication.magParameter.isTraceRoi) { + this.gestureDetector_.onTouchEvent(ev); + } + return super.dispatchTouchEvent(ev); + } + + public FragmentMainTop getFragmentMainTop() { + return this.fragmentTop_; + } + + public FragmentMainCenter getFragmentMainCenter() { + return this.fragmentCenter_; + } + + public FragmentMainBottom getFragmentMainBottom() { + return this.fragmentBottom_; + } + + public RectF getRect(int index) { + RectF rt = new RectF(); + LinearLayout layout = null; + switch (index) { + case 0: + layout = (LinearLayout) findViewById(R.id.fragment_container_main_top); + break; + case 1: + layout = (LinearLayout) findViewById(R.id.fragment_container_main_center); + break; + case 2: + layout = (LinearLayout) findViewById(R.id.fragment_container_main_bottom); + break; + } + rt.left = layout.getX(); + rt.top = layout.getY(); + rt.right = rt.left + layout.getWidth(); + rt.bottom = rt.top + layout.getHeight(); + return rt; + } + + private class MyGestureListener extends GestureDetector.SimpleOnGestureListener { + private MyGestureListener() { + } + + @Override // android.view.GestureDetector.SimpleOnGestureListener, android.view.GestureDetector.OnDoubleTapListener + public boolean onDoubleTap(MotionEvent e) { + DeviceController.Lock(); + DeviceController.triggerFFC(); + DeviceController.Unlock(); + return super.onDoubleTap(e); + } + + @Override // android.view.GestureDetector.SimpleOnGestureListener, android.view.GestureDetector.OnGestureListener + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { + DisplayMetrics outMetrics = new DisplayMetrics(); + MainActivity.this.getWindow().getWindowManager().getDefaultDisplay().getMetrics(outMetrics); + int resw = outMetrics.widthPixels; + int resh = outMetrics.heightPixels; + if (resw >= resh) { + resw = resh; + } + int cmp = resw / 4; + if (MainActivity.this.getResources().getConfiguration().orientation == 1) { + float dist = e2.getX() - e1.getX(); + if (dist > cmp) { + MainActivity.this.fragmentBottom_.afterFling(0); + } else if (dist < (-cmp)) { + MainActivity.this.fragmentBottom_.afterFling(1); + } + } else { + float dist2 = e2.getY() - e1.getY(); + if (dist2 > cmp) { + MainActivity.this.fragmentBottom_.afterFling(1); + } else if (dist2 < cmp) { + MainActivity.this.fragmentBottom_.afterFling(0); + } + } + return true; + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/MediaActivity.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/MediaActivity.java new file mode 100644 index 0000000..8f15620 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/MediaActivity.java @@ -0,0 +1,102 @@ +package cn.com.magnity.magnitycx; + +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.view.MenuItem; +import cn.com.magnity.magnitycx.QueryDialogFragment; +import cn.com.magnity.magnitycx.sdk.DelegateMediaStatusChanged; +import com.baidu.mobstat.StatService; + +/* loaded from: classes.dex */ +public class MediaActivity extends AppCompatActivity implements QueryDialogFragment.DelegateQueryResult, DelegateMediaStatusChanged { + private Fragment fragment_; + + public interface DelegateBackPressed { + boolean onActivityBackPressed(); + } + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.support.v4.app.BaseFragmentActivityGingerbread, android.app.Activity + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_media); + cancelDefaultAnimation(); + ActionBar actionBar = getSupportActionBar(); + actionBar.setHomeButtonEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + FragmentManager fm = getSupportFragmentManager(); + this.fragment_ = fm.findFragmentById(R.id.id_space_fragment_media); + if (this.fragment_ == null) { + this.fragment_ = new FragmentMedia(); + getSupportFragmentManager().beginTransaction().add(R.id.id_space_fragment_media, this.fragment_).commit(); + } + } + + @Override // android.support.v4.app.FragmentActivity, android.app.Activity + protected void onPause() { + cancelDefaultAnimation(); + StatService.onPageEnd(getApplicationContext(), "媒体页面"); + super.onPause(); + } + + private void cancelDefaultAnimation() { + TypedArray activityStyle = getTheme().obtainStyledAttributes(new int[]{android.R.attr.windowAnimationStyle}); + int windowAnimationStyleResId = activityStyle.getResourceId(0, 0); + activityStyle.recycle(); + TypedArray activityStyle2 = getTheme().obtainStyledAttributes(windowAnimationStyleResId, new int[]{android.R.attr.activityCloseEnterAnimation, android.R.attr.activityCloseExitAnimation}); + int activityCloseEnterAnimation = activityStyle2.getResourceId(0, 0); + int activityCloseExitAnimation = activityStyle2.getResourceId(1, 0); + activityStyle2.recycle(); + overridePendingTransition(activityCloseEnterAnimation, activityCloseExitAnimation); + } + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.app.Activity + protected void onPostResume() { + super.onPostResume(); + StatService.onPageStart(getApplicationContext(), "媒体页面"); + } + + @Override // cn.com.magnity.magnitycx.QueryDialogFragment.DelegateQueryResult + public void onQueryResult(int result) { + if (this.fragment_ instanceof QueryDialogFragment.DelegateQueryResult) { + ((QueryDialogFragment.DelegateQueryResult) this.fragment_).onQueryResult(result); + } + } + + @Override // cn.com.magnity.magnitycx.sdk.DelegateMediaStatusChanged + public void onSelChanged(int newSelCount, int count) { + setTitle(String.format(getResources().getString(R.string.mediaSelectedNum), Integer.valueOf(newSelCount))); + } + + @Override // cn.com.magnity.magnitycx.sdk.DelegateMediaStatusChanged + public void onModeChanged(int oldMode, int newMode, int count) { + if (newMode == 0) { + getSupportActionBar().setHomeAsUpIndicator((Drawable) null); + setTitle(String.format(getResources().getString(R.string.mediaTitle), Integer.valueOf(count))); + } else if (newMode == 1) { + getSupportActionBar().setHomeAsUpIndicator(R.mipmap.media_cancel_sel_mode); + setTitle(String.format(getResources().getString(R.string.mediaSelectedNum), 1)); + } + } + + @Override // android.support.v4.app.FragmentActivity, android.app.Activity + public void onBackPressed() { + if (!(this.fragment_ instanceof DelegateBackPressed) || ((DelegateBackPressed) this.fragment_).onActivityBackPressed()) { + super.onBackPressed(); + } + } + + @Override // android.app.Activity + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + onBackPressed(); + break; + } + return super.onOptionsItemSelected(item); + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/MediaGridViewAdapter.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/MediaGridViewAdapter.java new file mode 100644 index 0000000..76d6899 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/MediaGridViewAdapter.java @@ -0,0 +1,181 @@ +package cn.com.magnity.magnitycx; + +import android.content.Context; +import android.graphics.Bitmap; +import android.os.AsyncTask; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.GridView; +import android.widget.ImageView; +import cn.com.magnity.magnitycx.sdk.BitmapUtilities; +import cn.com.magnity.magnitycx.sdk.GlobalFunc; +import cn.com.magnity.magnitycx.sdk.LruCacheManager; +import java.io.File; +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +/* loaded from: classes.dex */ +public class MediaGridViewAdapter extends BaseAdapter { + private static final int SAMPLESIZE = 2; + private Context context_; + private ArrayList fileNames_; + private WeakReference gridView_; + private LayoutInflater layoutInflater_; + private Map mapSelStatus_; + private int mode_; + private LruCacheManager lruCacheManager_ = LruCacheManager.getInstance(); + private Map mapTask_ = new HashMap(); + + public MediaGridViewAdapter(Context context, GridView gridView, ArrayList fileNames, Map mapSelStatus) { + this.layoutInflater_ = LayoutInflater.from(context); + this.context_ = context; + this.gridView_ = new WeakReference<>(gridView); + this.fileNames_ = fileNames; + this.mapSelStatus_ = mapSelStatus; + } + + @Override // android.widget.Adapter + public int getCount() { + return this.fileNames_.size(); + } + + @Override // android.widget.Adapter + public Object getItem(int position) { + return this.fileNames_.get(position); + } + + @Override // android.widget.Adapter + public long getItemId(int position) { + return this.fileNames_.get(position).hashCode(); + } + + public void setMode(int mode) { + this.mode_ = mode; + } + + @Override // android.widget.Adapter + public View getView(int position, View convertView, ViewGroup parent) { + View rootView; + if (convertView == null) { + rootView = this.layoutInflater_.inflate(R.layout.item_gridview, (ViewGroup) null); + } else { + rootView = convertView; + } + String name = this.fileNames_.get(position); + ImageView imgView = (ImageView) rootView.findViewById(R.id.id_wallphoto); + imgView.setTag(name); + ImageView logoView = (ImageView) rootView.findViewById(R.id.id_photo_video); + loadCachedBitmapIfExist(imgView, logoView, name); + ImageView viewSelLogo = (ImageView) rootView.findViewById(R.id.id_photo_selected); + if (this.mode_ == 1) { + Object obj = this.mapSelStatus_.get(name); + if (obj == null || !((Boolean) obj).booleanValue()) { + viewSelLogo.setImageResource(R.mipmap.media_unselected); + imgView.setAlpha(1.0f); + } else { + viewSelLogo.setImageResource(R.mipmap.media_selected); + imgView.setAlpha(0.6f); + } + viewSelLogo.setVisibility(0); + } else { + viewSelLogo.setVisibility(4); + imgView.setAlpha(1.0f); + } + return rootView; + } + + public void loadBitmap(int firstVisiblePos, int visibleCount) { + GridView gridView = this.gridView_.get(); + if (gridView != null) { + Iterator iter = this.mapTask_.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry entry = (Map.Entry) iter.next(); + int pos = this.fileNames_.indexOf((String) entry.getKey()); + if (pos < firstVisiblePos) { + iter.remove(); + } + } + for (int i = firstVisiblePos; i < firstVisiblePos + visibleCount; i++) { + String name = this.fileNames_.get(i); + Bitmap bitmap = this.lruCacheManager_.get(name); + if (bitmap != null) { + ImageView imageView = (ImageView) gridView.findViewWithTag(name); + if (imageView != null && bitmap != null) { + imageView.setImageBitmap(bitmap); + } + } else if (((AsyncLoadImageTask) this.mapTask_.get(name)) == null) { + int size = gridView.getColumnWidth(); + AsyncLoadImageTask task = new AsyncLoadImageTask(size, size); + this.mapTask_.put(name, task); + task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, name); + } + } + } + } + + private void loadCachedBitmapIfExist(ImageView imgView, ImageView logoView, String name) { + Bitmap bitmap = this.lruCacheManager_.get(name); + if (bitmap != null) { + imgView.setImageBitmap(bitmap); + } else { + imgView.setImageResource(R.mipmap.empty_photo); + } + GlobalFunc globalFunc = MagApplication.globalFunc; + if (GlobalFunc.guessMediaTypeBySuffix(name) == 1) { + logoView.setVisibility(0); + } else { + logoView.setVisibility(4); + } + } + + public void cancelAllTasks() { + for (Map.Entry entry : this.mapTask_.entrySet()) { + AsyncLoadImageTask task = (AsyncLoadImageTask) entry.getValue(); + if (task != null) { + task.cancel(false); + } + } + this.mapTask_.clear(); + } + + private class AsyncLoadImageTask extends AsyncTask { + private int height_; + private String name_; + private int width_; + + public AsyncLoadImageTask(int width, int height) { + this.width_ = width; + this.height_ = height; + } + + /* JADX INFO: Access modifiers changed from: protected */ + @Override // android.os.AsyncTask + public Bitmap doInBackground(String... params) { + this.name_ = params[0]; + Bitmap bitmap = BitmapUtilities.getBitmapThumbnail(MagApplication.magParameter.mediaDir + File.separator + this.name_, this.width_, this.height_); + if (bitmap != null) { + MediaGridViewAdapter.this.lruCacheManager_.put(this.name_, bitmap); + } + return bitmap; + } + + /* JADX INFO: Access modifiers changed from: protected */ + @Override // android.os.AsyncTask + public void onPostExecute(Bitmap bitmap) { + ImageView imageView; + super.onPostExecute((AsyncLoadImageTask) bitmap); + if (!isCancelled()) { + GridView gridView = (GridView) MediaGridViewAdapter.this.gridView_.get(); + if (gridView != null && (imageView = (ImageView) gridView.findViewWithTag(this.name_)) != null && bitmap != null) { + imageView.setImageBitmap(bitmap); + } + MediaGridViewAdapter.this.mapTask_.remove(this.name_); + } + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/MediaImageView.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/MediaImageView.java new file mode 100644 index 0000000..9289f9e --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/MediaImageView.java @@ -0,0 +1,18 @@ +package cn.com.magnity.magnitycx; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.ImageView; + +/* loaded from: classes.dex */ +public class MediaImageView extends ImageView { + public MediaImageView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override // android.widget.ImageView, android.view.View + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + setMeasuredDimension(widthMeasureSpec, widthMeasureSpec); + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/MediaSingleActivity.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/MediaSingleActivity.java new file mode 100644 index 0000000..7787240 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/MediaSingleActivity.java @@ -0,0 +1,445 @@ +package cn.com.magnity.magnitycx; + +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Point; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.media.ExifInterface; +import android.media.MediaMetadataRetriever; +import android.media.ThumbnailUtils; +import android.net.Uri; +import android.os.Bundle; +import android.os.Environment; +import android.support.v4.content.FileProvider; +import android.support.v4.media.session.PlaybackStateCompat; +import android.support.v4.view.PagerAdapter; +import android.support.v4.view.ViewPager; +import android.support.v7.app.AppCompatActivity; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.Toast; +import cn.com.magnity.magnitycx.QueryDialogFragment; +import cn.com.magnity.magnitycx.sdk.BitmapUtilities; +import cn.com.magnity.magnitycx.sdk.GlobalFunc; +import com.baidu.mobstat.StatService; +import java.io.File; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; + +/* loaded from: classes.dex */ +public class MediaSingleActivity extends AppCompatActivity implements QueryDialogFragment.DelegateQueryResult { + public static final String MEDIAINDEX = "mediaIndex"; + public static final String MEDIANAMELIST = "mediaNameList"; + public static final String MEDIAWINDOWFLAG = "mediaWindowFlag"; + private Button btnDel_; + private Button btnInfo_; + private Button btnShare_; + private int currentIndex_; + private ArrayList fileNames_; + private boolean isVideo_; + private MagClickListener magClickListener_; + private int mediaWindowFlag_; + private ViewPager viewPager_; + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.support.v4.app.BaseFragmentActivityGingerbread, android.app.Activity + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_media_single); + if (savedInstanceState != null) { + this.mediaWindowFlag_ = savedInstanceState.getInt(MEDIAWINDOWFLAG); + this.currentIndex_ = savedInstanceState.getInt(MEDIAINDEX); + this.fileNames_ = savedInstanceState.getStringArrayList(MEDIANAMELIST); + } else { + Intent intent = getIntent(); + if (intent != null) { + this.mediaWindowFlag_ = intent.getIntExtra(MEDIAWINDOWFLAG, 0); + this.currentIndex_ = intent.getIntExtra(MEDIAINDEX, 0); + this.fileNames_ = intent.getStringArrayListExtra(MEDIANAMELIST); + } else { + this.mediaWindowFlag_ = 0; + this.currentIndex_ = 0; + this.fileNames_ = new ArrayList<>(); + GlobalFunc globalFunc = MagApplication.globalFunc; + GlobalFunc.updateFileList(this.fileNames_); + } + } + setTitle(getResources().getString(R.string.mediaHouse) + " " + Integer.toString(this.currentIndex_ + 1) + "/" + this.fileNames_.size()); + this.btnShare_ = (Button) findViewById(R.id.id_btn_social_share); + this.btnInfo_ = (Button) findViewById(R.id.id_btn_meida_info); + this.btnDel_ = (Button) findViewById(R.id.id_btn_media_delete); + this.viewPager_ = (ViewPager) findViewById(R.id.id_media_viewpager); + this.viewPager_.setAdapter(new MediaPageAdapter()); + this.viewPager_.addOnPageChangeListener(new MediaPageListener()); + this.viewPager_.setPageMargin(30); + this.viewPager_.setCurrentItem(this.currentIndex_); + this.viewPager_.setPageTransformer(true, new DepthPageTransformer()); + if (this.currentIndex_ < this.fileNames_.size()) { + GlobalFunc globalFunc2 = MagApplication.globalFunc; + this.isVideo_ = GlobalFunc.guessMediaTypeBySuffix(this.fileNames_.get(this.currentIndex_)) == 1; + } + this.magClickListener_ = new MagClickListener(); + this.btnShare_.setOnClickListener(this.magClickListener_); + this.btnInfo_.setOnClickListener(this.magClickListener_); + this.btnDel_.setOnClickListener(this.magClickListener_); + } + + @Override // android.support.v4.app.FragmentActivity, android.app.Activity + protected void onPause() { + super.onPause(); + StatService.onPageEnd(getApplicationContext(), "单个媒体页面"); + } + + @Override // android.support.v4.app.FragmentActivity, android.app.Activity + protected void onResume() { + super.onResume(); + showInfoWhenFileNotExist(); + StatService.onPageStart(getApplicationContext(), "单个媒体页面"); + } + + /* JADX INFO: Access modifiers changed from: private */ + public void showInfoWhenFileNotExist() { + File file = new File(MagApplication.magParameter.mediaDir + File.separator + this.fileNames_.get(this.currentIndex_)); + if (file != null && !file.exists()) { + Toast.makeText(getApplicationContext(), R.string.fileDeleted, 0).show(); + } + } + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.app.Activity + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt(MEDIAWINDOWFLAG, this.mediaWindowFlag_); + outState.putInt(MEDIAINDEX, this.currentIndex_); + outState.putStringArrayList(MEDIANAMELIST, this.fileNames_); + } + + @Override // android.app.Activity + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.meida_single_menu, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override // android.app.Activity + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.id_action_media_expand /* 2131624225 */: + if (this.mediaWindowFlag_ == 1) { + super.onBackPressed(); + break; + } else { + finish(); + Intent intent = new Intent(this, (Class) MediaActivity.class); + startActivity(intent); + break; + } + } + return super.onOptionsItemSelected(item); + } + + /* JADX INFO: Access modifiers changed from: private */ + public Bitmap decodeBitmap(String pathName) { + BitmapFactory.Options opts = new BitmapFactory.Options(); + opts.outWidth = 0; + opts.outHeight = 0; + opts.inJustDecodeBounds = true; + BitmapFactory.decodeFile(pathName, opts); + Point outSize = new Point(); + MagApplication.windowManager.getDefaultDisplay().getSize(outSize); + int r1 = ((opts.outWidth - 1) / outSize.x) + 1; + int r2 = ((opts.outHeight - 1) / outSize.y) + 1; + opts.inSampleSize = Math.max(Math.max(r1, r2), 1); + opts.inJustDecodeBounds = false; + Bitmap bitmap = BitmapFactory.decodeFile(pathName, opts); + if (bitmap == null) { + return ThumbnailUtils.createVideoThumbnail(pathName, 1); + } + return bitmap; + } + + private File getMediaStoragePath(Context context) { + File file; + String state = Environment.getExternalStorageState(); + if ("mounted".equals(state) && (file = new File(Environment.getExternalStorageDirectory(), "magnity/Cx/media")) != null) { + if (!file.exists()) { + file.mkdirs(); + return file; + } + return file; + } + return null; + } + + /* JADX INFO: Access modifiers changed from: private */ + public void socialShare() { + Uri uri; + File f = new File(getMediaStoragePath(this), this.fileNames_.get(this.currentIndex_)); + if (f != null && f.isFile() && (uri = FileProvider.getUriForFile(this, "cn.com.magnity.magnitycx.fileprovider", f)) != null) { + Intent intent = new Intent("android.intent.action.SEND"); + intent.setType(this.isVideo_ ? "video/*" : "image/*"); + intent.putExtra("android.intent.extra.STREAM", uri); + intent.addFlags(1); + startActivity(Intent.createChooser(intent, getResources().getString(R.string.mediaSocialShare))); + } + } + + ArrayList getMediaInfos() { + File f; + Point pt; + ArrayList infos = new ArrayList<>(); + String time = null; + String size = null; + String reso = null; + String duration = null; + String name = this.fileNames_.get(this.currentIndex_); + String pathName = MagApplication.magParameter.mediaDir + File.separator + name; + GlobalFunc globalFunc = MagApplication.globalFunc; + int mediaType = GlobalFunc.guessMediaTypeBySuffix(name); + if (mediaType == 0) { + try { + ExifInterface exifInterface = new ExifInterface(pathName); + time = exifInterface.getAttribute("DateTimeDigitized"); + size = null; + reso = null; + } catch (Exception e) { + } + } else if (mediaType == 1) { + MediaMetadataRetriever mmr = new MediaMetadataRetriever(); + try { + mmr.setDataSource(pathName); + time = null; + size = null; + String w = mmr.extractMetadata(18); + String h = mmr.extractMetadata(19); + if (w != null && h != null && w != "0" && h != "0") { + reso = w + " x " + h; + } + duration = mmr.extractMetadata(9); + if (duration != null) { + long sec = Integer.parseInt(duration) / 1000; + long hour = sec / 3600; + long min = (sec - (3600 * hour)) / 60; + duration = String.format("%02d:%02d:%02d", Long.valueOf(hour), Long.valueOf(min), Long.valueOf((sec - (3600 * hour)) - (60 * min))); + } + } catch (Exception e2) { + } + } else { + time = null; + size = null; + reso = null; + } + if ((time == null || size == null || reso == null) && (f = new File(pathName)) != null && f.isFile()) { + if (time == null) { + Date dt = new Date(f.lastModified()); + SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + time = ft.format(dt); + } + if (size == null) { + DecimalFormat df = new DecimalFormat("0.0"); + long bytes = f.length(); + if (bytes < PlaybackStateCompat.ACTION_PLAY_FROM_MEDIA_ID) { + size = df.format(bytes) + "B"; + } else if (bytes < 1048576) { + size = df.format(bytes / 1024.0f) + "KB"; + } else { + size = df.format(bytes / 1048576.0f) + "MB"; + } + } + if (reso == null && (pt = BitmapUtilities.getBitmapSize(pathName)) != null) { + reso = pt.x + " x " + pt.y; + } + } + if (mediaType == 1) { + infos.add("1"); + } else { + infos.add("0"); + } + infos.add(name); + infos.add(time); + infos.add(size); + infos.add(duration); + infos.add(reso); + infos.add(pathName); + return infos; + } + + @Override // cn.com.magnity.magnitycx.QueryDialogFragment.DelegateQueryResult + public void onQueryResult(int result) { + if (result == 1) { + String pathName = MagApplication.magParameter.mediaDir + File.separator + this.fileNames_.get(this.currentIndex_); + File f = new File(pathName); + if (f != null && f.isFile()) { + f.delete(); + this.fileNames_.remove(this.currentIndex_); + File f2 = new File(pathName.replace(".jpg", ".ddt")); + if (f2 != null && f2.isFile()) { + f2.delete(); + } + if (this.fileNames_.isEmpty()) { + finish(); + return; + } + this.viewPager_.setAdapter(new MediaPageAdapter()); + if (this.currentIndex_ > this.fileNames_.size() - 1) { + this.viewPager_.setCurrentItem(this.currentIndex_ - 1); + } else { + this.viewPager_.setCurrentItem(this.currentIndex_); + } + showInfoWhenFileNotExist(); + setTitle(getResources().getString(R.string.mediaHouse) + " " + Integer.toString(this.currentIndex_ + 1) + "/" + this.fileNames_.size()); + } + } + } + + private class MagClickListener implements View.OnClickListener { + private MagClickListener() { + } + + @Override // android.view.View.OnClickListener + public void onClick(View v) { + switch (v.getId()) { + case R.id.id_btn_social_share /* 2131624072 */: + MediaSingleActivity.this.socialShare(); + break; + case R.id.id_btn_meida_info /* 2131624073 */: + DialogFragmentMediaInfo dlgMediaInfo = DialogFragmentMediaInfo.newInstance(MediaSingleActivity.this.getMediaInfos()); + dlgMediaInfo.show(MediaSingleActivity.this.getSupportFragmentManager(), "dialogFragmentMediaInfo"); + break; + case R.id.id_btn_media_delete /* 2131624074 */: + QueryDialogFragment dlgMediaDel = QueryDialogFragment.newInstance(R.layout.dialog_fragment_query_delete_media); + dlgMediaDel.show(MediaSingleActivity.this.getSupportFragmentManager(), "deleteMedia"); + break; + case R.id.id_img_single /* 2131624185 */: + if (MediaSingleActivity.this.isVideo_) { + Intent intent = new Intent("android.intent.action.VIEW"); + String pathName = MagApplication.magParameter.mediaDir + File.separator + ((String) MediaSingleActivity.this.fileNames_.get(MediaSingleActivity.this.currentIndex_)); + intent.setDataAndType(Uri.parse("file:///" + pathName), "video/*"); + MagApplication.setUsbDeinitAllowed(false); + if (intent.resolveActivity(MediaSingleActivity.this.getPackageManager()) != null) { + MediaSingleActivity.this.startActivity(intent); + break; + } + } + break; + } + } + } + + private class MediaPageAdapter extends PagerAdapter { + private MediaPageAdapter() { + } + + @Override // android.support.v4.view.PagerAdapter + public int getCount() { + return MediaSingleActivity.this.fileNames_.size(); + } + + @Override // android.support.v4.view.PagerAdapter + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + private void releaseImageViewResouce(ImageView imageView) { + Drawable drawable; + if (imageView != null && (drawable = imageView.getDrawable()) != null && (drawable instanceof BitmapDrawable)) { + BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; + Bitmap bitmap = bitmapDrawable.getBitmap(); + if (bitmap != null && !bitmap.isRecycled()) { + bitmap.recycle(); + } + } + } + + @Override // android.support.v4.view.PagerAdapter + public void destroyItem(ViewGroup container, int position, Object object) { + View view = (View) object; + if (view != null) { + releaseImageViewResouce((ImageView) view.findViewById(R.id.id_img_single)); + container.removeView(view); + } + } + + @Override // android.support.v4.view.PagerAdapter + public Object instantiateItem(ViewGroup container, int position) { + View view = MediaSingleActivity.this.getLayoutInflater().inflate(R.layout.include_media_single, (ViewGroup) null); + String name = (String) MediaSingleActivity.this.fileNames_.get(position); + ImageView img = (ImageView) view.findViewById(R.id.id_img_single); + img.setImageBitmap(MediaSingleActivity.this.decodeBitmap(MagApplication.magParameter.mediaDir + File.separator + ((String) MediaSingleActivity.this.fileNames_.get(position)))); + ImageView videoLogo = (ImageView) view.findViewById(R.id.id_video_play_logo); + GlobalFunc globalFunc = MagApplication.globalFunc; + int type = GlobalFunc.guessMediaTypeBySuffix(name); + if (type == 1) { + videoLogo.setVisibility(0); + } else { + videoLogo.setVisibility(4); + } + img.setOnClickListener(MediaSingleActivity.this.magClickListener_); + container.addView(view); + return view; + } + } + + private class MediaPageListener implements ViewPager.OnPageChangeListener { + private MediaPageListener() { + } + + @Override // android.support.v4.view.ViewPager.OnPageChangeListener + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + } + + @Override // android.support.v4.view.ViewPager.OnPageChangeListener + public void onPageSelected(int position) { + MediaSingleActivity.this.currentIndex_ = position; + MediaSingleActivity mediaSingleActivity = MediaSingleActivity.this; + GlobalFunc globalFunc = MagApplication.globalFunc; + mediaSingleActivity.isVideo_ = GlobalFunc.guessMediaTypeBySuffix((String) MediaSingleActivity.this.fileNames_.get(position)) == 1; + MediaSingleActivity.this.setTitle(MediaSingleActivity.this.getResources().getString(R.string.mediaHouse) + " " + Integer.toString(position + 1) + "/" + MediaSingleActivity.this.fileNames_.size()); + MediaSingleActivity.this.showInfoWhenFileNotExist(); + } + + @Override // android.support.v4.view.ViewPager.OnPageChangeListener + public void onPageScrollStateChanged(int state) { + } + } + + public class DepthPageTransformer implements ViewPager.PageTransformer { + private static final float MIN_SCALE = 0.75f; + + public DepthPageTransformer() { + } + + @Override // android.support.v4.view.ViewPager.PageTransformer + public void transformPage(View view, float position) { + int pageWidth = view.getWidth(); + if (position < -1.0f) { + view.setAlpha(0.0f); + return; + } + if (position <= 0.0f) { + view.setAlpha(1.0f); + view.setTranslationX(0.0f); + view.setScaleX(1.0f); + view.setScaleY(1.0f); + return; + } + if (position <= 1.0f) { + view.setAlpha(1.0f - position); + view.setTranslationX(pageWidth * (-position)); + float scaleFactor = MIN_SCALE + (0.25f * (1.0f - Math.abs(position))); + view.setScaleX(scaleFactor); + view.setScaleY(scaleFactor); + return; + } + view.setAlpha(0.0f); + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/QueryDialogFragment.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/QueryDialogFragment.java new file mode 100644 index 0000000..a5ec90e --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/QueryDialogFragment.java @@ -0,0 +1,77 @@ +package cn.com.magnity.magnitycx; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.DialogFragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; + +/* loaded from: classes.dex */ +public class QueryDialogFragment extends DialogFragment { + private static final String RESID = "resid"; + private MagOnClickListener magOnClickListener_; + private int resId_; + + public interface DelegateQueryResult { + void onQueryResult(int i); + } + + public static QueryDialogFragment newInstance(int resId) { + Bundle bundle = new Bundle(); + bundle.putInt(RESID, resId); + QueryDialogFragment dlg = new QueryDialogFragment(); + dlg.setArguments(bundle); + return dlg; + } + + @Override // android.support.v4.app.DialogFragment, android.support.v4.app.Fragment + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Bundle bundle = getArguments(); + if (bundle != null) { + this.resId_ = bundle.getInt(RESID); + } + this.magOnClickListener_ = new MagOnClickListener(); + } + + @Override // android.support.v4.app.DialogFragment + @NonNull + public Dialog onCreateDialog(Bundle savedInstanceState) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + LayoutInflater inflater = getActivity().getLayoutInflater(); + View view = inflater.inflate(this.resId_, (ViewGroup) null); + Button btnCancel = (Button) view.findViewById(R.id.id_btn_cancel); + Button btnOk = (Button) view.findViewById(R.id.id_btn_ok); + btnCancel.setOnClickListener(this.magOnClickListener_); + btnOk.setOnClickListener(this.magOnClickListener_); + builder.setView(view); + return builder.create(); + } + + private class MagOnClickListener implements View.OnClickListener { + private MagOnClickListener() { + } + + @Override // android.view.View.OnClickListener + public void onClick(View v) { + int result = 0; + switch (v.getId()) { + case R.id.id_btn_ok /* 2131624096 */: + result = 1; + break; + case R.id.id_btn_cancel /* 2131624106 */: + result = 0; + break; + } + if (QueryDialogFragment.this.getActivity() instanceof DelegateQueryResult) { + ((DelegateQueryResult) QueryDialogFragment.this.getActivity()).onQueryResult(result); + } + QueryDialogFragment.this.dismiss(); + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/R.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/R.java new file mode 100644 index 0000000..3b6de79 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/R.java @@ -0,0 +1,2608 @@ +package cn.com.magnity.magnitycx; + +/* loaded from: classes.dex */ +public final class R { + + public static final class anim { + public static final int abc_fade_in = 0x7f050000; + public static final int abc_fade_out = 0x7f050001; + public static final int abc_grow_fade_in_from_bottom = 0x7f050002; + public static final int abc_popup_enter = 0x7f050003; + public static final int abc_popup_exit = 0x7f050004; + public static final int abc_shrink_fade_out_from_bottom = 0x7f050005; + public static final int abc_slide_in_bottom = 0x7f050006; + public static final int abc_slide_in_top = 0x7f050007; + public static final int abc_slide_out_bottom = 0x7f050008; + public static final int abc_slide_out_top = 0x7f050009; + public static final int design_bottom_sheet_slide_in = 0x7f05000a; + public static final int design_bottom_sheet_slide_out = 0x7f05000b; + public static final int design_fab_in = 0x7f05000c; + public static final int design_fab_out = 0x7f05000d; + public static final int design_snackbar_in = 0x7f05000e; + public static final int design_snackbar_out = 0x7f05000f; + public static final int fade_in = 0x7f050010; + public static final int fade_in_out = 0x7f050011; + public static final int fade_out = 0x7f050012; + public static final int photo_capture = 0x7f050013; + public static final int scale_in = 0x7f050014; + public static final int scale_out = 0x7f050015; + public static final int slide_bottom_out = 0x7f050016; + public static final int slide_bottom_out_top_in = 0x7f050017; + public static final int slide_left_in = 0x7f050018; + public static final int slide_right_out = 0x7f050019; + public static final int slide_top_in = 0x7f05001a; + public static final int slide_top_out = 0x7f05001b; + } + + public static final class animator { + public static final int color_change = 0x7f060000; + public static final int design_appbar_state_list_animator = 0x7f060001; + } + + public static final class attr { + public static final int actionBarDivider = 0x7f010072; + public static final int actionBarItemBackground = 0x7f010073; + public static final int actionBarPopupTheme = 0x7f01006c; + public static final int actionBarSize = 0x7f010071; + public static final int actionBarSplitStyle = 0x7f01006e; + public static final int actionBarStyle = 0x7f01006d; + public static final int actionBarTabBarStyle = 0x7f010068; + public static final int actionBarTabStyle = 0x7f010067; + public static final int actionBarTabTextStyle = 0x7f010069; + public static final int actionBarTheme = 0x7f01006f; + public static final int actionBarWidgetTheme = 0x7f010070; + public static final int actionButtonStyle = 0x7f01008d; + public static final int actionDropDownStyle = 0x7f010089; + public static final int actionLayout = 0x7f01012b; + public static final int actionMenuTextAppearance = 0x7f010074; + public static final int actionMenuTextColor = 0x7f010075; + public static final int actionModeBackground = 0x7f010078; + public static final int actionModeCloseButtonStyle = 0x7f010077; + public static final int actionModeCloseDrawable = 0x7f01007a; + public static final int actionModeCopyDrawable = 0x7f01007c; + public static final int actionModeCutDrawable = 0x7f01007b; + public static final int actionModeFindDrawable = 0x7f010080; + public static final int actionModePasteDrawable = 0x7f01007d; + public static final int actionModePopupWindowStyle = 0x7f010082; + public static final int actionModeSelectAllDrawable = 0x7f01007e; + public static final int actionModeShareDrawable = 0x7f01007f; + public static final int actionModeSplitBackground = 0x7f010079; + public static final int actionModeStyle = 0x7f010076; + public static final int actionModeWebSearchDrawable = 0x7f010081; + public static final int actionOverflowButtonStyle = 0x7f01006a; + public static final int actionOverflowMenuStyle = 0x7f01006b; + public static final int actionProviderClass = 0x7f01012d; + public static final int actionViewClass = 0x7f01012c; + public static final int activityChooserViewStyle = 0x7f010095; + public static final int alertDialogButtonGroupStyle = 0x7f0100b9; + public static final int alertDialogCenterButtons = 0x7f0100ba; + public static final int alertDialogStyle = 0x7f0100b8; + public static final int alertDialogTheme = 0x7f0100bb; + public static final int allowStacking = 0x7f0100de; + public static final int alpha = 0x7f0100f8; + public static final int arcProgressStyle = 0x7f010179; + public static final int arc_angle = 0x7f0100cf; + public static final int arc_bottom_text = 0x7f0100d9; + public static final int arc_bottom_text_size = 0x7f0100da; + public static final int arc_finished_color = 0x7f0100d3; + public static final int arc_max = 0x7f0100d1; + public static final int arc_progress = 0x7f0100ce; + public static final int arc_stroke_width = 0x7f0100d0; + public static final int arc_suffix_text = 0x7f0100d6; + public static final int arc_suffix_text_padding = 0x7f0100d8; + public static final int arc_suffix_text_size = 0x7f0100d7; + public static final int arc_text_color = 0x7f0100d5; + public static final int arc_text_size = 0x7f0100d4; + public static final int arc_unfinished_color = 0x7f0100d2; + public static final int arrowHeadLength = 0x7f01011c; + public static final int arrowShaftLength = 0x7f01011d; + public static final int autoCompleteTextViewStyle = 0x7f0100c0; + public static final int background = 0x7f010038; + public static final int backgroundSplit = 0x7f01003a; + public static final int backgroundStacked = 0x7f010039; + public static final int backgroundTint = 0x7f01018e; + public static final int backgroundTintMode = 0x7f01018f; + public static final int barLength = 0x7f01011e; + public static final int behavior_autoHide = 0x7f010125; + public static final int behavior_hideable = 0x7f0100dc; + public static final int behavior_overlapTop = 0x7f01013f; + public static final int behavior_peekHeight = 0x7f0100db; + public static final int behavior_skipCollapsed = 0x7f0100dd; + public static final int borderWidth = 0x7f010123; + public static final int borderlessButtonStyle = 0x7f010092; + public static final int bottomSheetDialogTheme = 0x7f010103; + public static final int bottomSheetStyle = 0x7f010104; + public static final int buttonBarButtonStyle = 0x7f01008f; + public static final int buttonBarNegativeButtonStyle = 0x7f0100be; + public static final int buttonBarNeutralButtonStyle = 0x7f0100bf; + public static final int buttonBarPositiveButtonStyle = 0x7f0100bd; + public static final int buttonBarStyle = 0x7f01008e; + public static final int buttonGravity = 0x7f010183; + public static final int buttonPanelSideLayout = 0x7f01004d; + public static final int buttonStyle = 0x7f0100c1; + public static final int buttonStyleSmall = 0x7f0100c2; + public static final int buttonTint = 0x7f0100f9; + public static final int buttonTintMode = 0x7f0100fa; + public static final int checkboxStyle = 0x7f0100c3; + public static final int checkedTextViewStyle = 0x7f0100c4; + public static final int circleProgressStyle = 0x7f010177; + public static final int circle_finished_color = 0x7f0100e2; + public static final int circle_max = 0x7f0100e0; + public static final int circle_prefix_text = 0x7f0100e5; + public static final int circle_progress = 0x7f0100df; + public static final int circle_suffix_text = 0x7f0100e6; + public static final int circle_text_color = 0x7f0100e4; + public static final int circle_text_size = 0x7f0100e3; + public static final int circle_unfinished_color = 0x7f0100e1; + public static final int closeIcon = 0x7f010144; + public static final int closeItemLayout = 0x7f01004a; + public static final int collapseContentDescription = 0x7f010185; + public static final int collapseIcon = 0x7f010184; + public static final int collapsedTitleGravity = 0x7f0100f3; + public static final int collapsedTitleTextAppearance = 0x7f0100ed; + public static final int color = 0x7f010118; + public static final int colorAccent = 0x7f0100b0; + public static final int colorBackgroundFloating = 0x7f0100b7; + public static final int colorButtonNormal = 0x7f0100b4; + public static final int colorControlActivated = 0x7f0100b2; + public static final int colorControlHighlight = 0x7f0100b3; + public static final int colorControlNormal = 0x7f0100b1; + public static final int colorPrimary = 0x7f0100ae; + public static final int colorPrimaryDark = 0x7f0100af; + public static final int colorSwitchThumbNormal = 0x7f0100b5; + public static final int commitIcon = 0x7f010149; + public static final int constraintSet = 0x7f010000; + public static final int contentInsetEnd = 0x7f010043; + public static final int contentInsetEndWithActions = 0x7f010047; + public static final int contentInsetLeft = 0x7f010044; + public static final int contentInsetRight = 0x7f010045; + public static final int contentInsetStart = 0x7f010042; + public static final int contentInsetStartWithNavigation = 0x7f010046; + public static final int contentScrim = 0x7f0100ee; + public static final int controlBackground = 0x7f0100b6; + public static final int counterEnabled = 0x7f01016d; + public static final int counterMaxLength = 0x7f01016e; + public static final int counterOverflowTextAppearance = 0x7f010170; + public static final int counterTextAppearance = 0x7f01016f; + public static final int customNavigationLayout = 0x7f01003b; + public static final int defaultQueryHint = 0x7f010143; + public static final int dialogPreferredPadding = 0x7f010087; + public static final int dialogTheme = 0x7f010086; + public static final int displayOptions = 0x7f010031; + public static final int divider = 0x7f010037; + public static final int dividerHorizontal = 0x7f010094; + public static final int dividerPadding = 0x7f010129; + public static final int dividerVertical = 0x7f010093; + public static final int donutProgressStyle = 0x7f010178; + public static final int donut_background_color = 0x7f010111; + public static final int donut_circle_starting_degree = 0x7f010115; + public static final int donut_finished_color = 0x7f010109; + public static final int donut_finished_stroke_width = 0x7f01010a; + public static final int donut_inner_bottom_text = 0x7f010112; + public static final int donut_inner_bottom_text_color = 0x7f010114; + public static final int donut_inner_bottom_text_size = 0x7f010113; + public static final int donut_inner_drawable = 0x7f010117; + public static final int donut_max = 0x7f010107; + public static final int donut_prefix_text = 0x7f01010e; + public static final int donut_progress = 0x7f010106; + public static final int donut_show_text = 0x7f010116; + public static final int donut_suffix_text = 0x7f01010f; + public static final int donut_text = 0x7f010110; + public static final int donut_text_color = 0x7f01010d; + public static final int donut_text_size = 0x7f01010c; + public static final int donut_unfinished_color = 0x7f010108; + public static final int donut_unfinished_stroke_width = 0x7f01010b; + public static final int drawableSize = 0x7f01011a; + public static final int drawerArrowStyle = 0x7f010001; + public static final int dropDownListViewStyle = 0x7f0100a6; + public static final int dropdownListPreferredItemHeight = 0x7f01008a; + public static final int editTextBackground = 0x7f01009b; + public static final int editTextColor = 0x7f01009a; + public static final int editTextStyle = 0x7f0100c5; + public static final int elevation = 0x7f010048; + public static final int errorEnabled = 0x7f01016b; + public static final int errorTextAppearance = 0x7f01016c; + public static final int expandActivityOverflowButtonDrawable = 0x7f01004c; + public static final int expanded = 0x7f010053; + public static final int expandedTitleGravity = 0x7f0100f4; + public static final int expandedTitleMargin = 0x7f0100e7; + public static final int expandedTitleMarginBottom = 0x7f0100eb; + public static final int expandedTitleMarginEnd = 0x7f0100ea; + public static final int expandedTitleMarginStart = 0x7f0100e8; + public static final int expandedTitleMarginTop = 0x7f0100e9; + public static final int expandedTitleTextAppearance = 0x7f0100ec; + public static final int fabSize = 0x7f010121; + public static final int foregroundInsidePadding = 0x7f010126; + public static final int gapBetweenBars = 0x7f01011b; + public static final int goIcon = 0x7f010145; + public static final int headerLayout = 0x7f010135; + public static final int height = 0x7f010002; + public static final int hideOnContentScroll = 0x7f010041; + public static final int hintAnimationEnabled = 0x7f010171; + public static final int hintEnabled = 0x7f01016a; + public static final int hintTextAppearance = 0x7f010169; + public static final int homeAsUpIndicator = 0x7f01008c; + public static final int homeLayout = 0x7f01003c; + public static final int icon = 0x7f010035; + public static final int iconifiedByDefault = 0x7f010141; + public static final int imageButtonStyle = 0x7f01009c; + public static final int indeterminateProgressStyle = 0x7f01003e; + public static final int initialActivityCount = 0x7f01004b; + public static final int insetForeground = 0x7f01013e; + public static final int isLightTheme = 0x7f010003; + public static final int itemBackground = 0x7f010133; + public static final int itemIconTint = 0x7f010131; + public static final int itemPadding = 0x7f010040; + public static final int itemTextAppearance = 0x7f010134; + public static final int itemTextColor = 0x7f010132; + public static final int keylines = 0x7f0100fb; + public static final int layout = 0x7f010140; + public static final int layoutManager = 0x7f01013a; + public static final int layout_anchor = 0x7f0100fe; + public static final int layout_anchorGravity = 0x7f010100; + public static final int layout_behavior = 0x7f0100fd; + public static final int layout_collapseMode = 0x7f0100f6; + public static final int layout_collapseParallaxMultiplier = 0x7f0100f7; + public static final int layout_constraintBaseline_creator = 0x7f010004; + public static final int layout_constraintBaseline_toBaselineOf = 0x7f010005; + public static final int layout_constraintBottom_creator = 0x7f010006; + public static final int layout_constraintBottom_toBottomOf = 0x7f010007; + public static final int layout_constraintBottom_toTopOf = 0x7f010008; + public static final int layout_constraintDimensionRatio = 0x7f010009; + public static final int layout_constraintEnd_toEndOf = 0x7f01000a; + public static final int layout_constraintEnd_toStartOf = 0x7f01000b; + public static final int layout_constraintGuide_begin = 0x7f01000c; + public static final int layout_constraintGuide_end = 0x7f01000d; + public static final int layout_constraintGuide_percent = 0x7f01000e; + public static final int layout_constraintHeight_default = 0x7f01000f; + public static final int layout_constraintHeight_max = 0x7f010010; + public static final int layout_constraintHeight_min = 0x7f010011; + public static final int layout_constraintHorizontal_bias = 0x7f010012; + public static final int layout_constraintHorizontal_chainStyle = 0x7f010013; + public static final int layout_constraintHorizontal_weight = 0x7f010014; + public static final int layout_constraintLeft_creator = 0x7f010015; + public static final int layout_constraintLeft_toLeftOf = 0x7f010016; + public static final int layout_constraintLeft_toRightOf = 0x7f010017; + public static final int layout_constraintRight_creator = 0x7f010018; + public static final int layout_constraintRight_toLeftOf = 0x7f010019; + public static final int layout_constraintRight_toRightOf = 0x7f01001a; + public static final int layout_constraintStart_toEndOf = 0x7f01001b; + public static final int layout_constraintStart_toStartOf = 0x7f01001c; + public static final int layout_constraintTop_creator = 0x7f01001d; + public static final int layout_constraintTop_toBottomOf = 0x7f01001e; + public static final int layout_constraintTop_toTopOf = 0x7f01001f; + public static final int layout_constraintVertical_bias = 0x7f010020; + public static final int layout_constraintVertical_chainStyle = 0x7f010021; + public static final int layout_constraintVertical_weight = 0x7f010022; + public static final int layout_constraintWidth_default = 0x7f010023; + public static final int layout_constraintWidth_max = 0x7f010024; + public static final int layout_constraintWidth_min = 0x7f010025; + public static final int layout_dodgeInsetEdges = 0x7f010102; + public static final int layout_editor_absoluteX = 0x7f010026; + public static final int layout_editor_absoluteY = 0x7f010027; + public static final int layout_goneMarginBottom = 0x7f010028; + public static final int layout_goneMarginEnd = 0x7f010029; + public static final int layout_goneMarginLeft = 0x7f01002a; + public static final int layout_goneMarginRight = 0x7f01002b; + public static final int layout_goneMarginStart = 0x7f01002c; + public static final int layout_goneMarginTop = 0x7f01002d; + public static final int layout_insetEdge = 0x7f010101; + public static final int layout_keyline = 0x7f0100ff; + public static final int layout_optimizationLevel = 0x7f01002e; + public static final int layout_scrollFlags = 0x7f010056; + public static final int layout_scrollInterpolator = 0x7f010057; + public static final int listChoiceBackgroundIndicator = 0x7f0100ad; + public static final int listDividerAlertDialog = 0x7f010088; + public static final int listItemLayout = 0x7f010051; + public static final int listLayout = 0x7f01004e; + public static final int listMenuViewStyle = 0x7f0100cd; + public static final int listPopupWindowStyle = 0x7f0100a7; + public static final int listPreferredItemHeight = 0x7f0100a1; + public static final int listPreferredItemHeightLarge = 0x7f0100a3; + public static final int listPreferredItemHeightSmall = 0x7f0100a2; + public static final int listPreferredItemPaddingLeft = 0x7f0100a4; + public static final int listPreferredItemPaddingRight = 0x7f0100a5; + public static final int logo = 0x7f010036; + public static final int logoDescription = 0x7f010188; + public static final int maxActionInlineWidth = 0x7f01014d; + public static final int maxButtonHeight = 0x7f010182; + public static final int measureWithLargestChild = 0x7f010127; + public static final int menu = 0x7f010130; + public static final int multiChoiceItemLayout = 0x7f01004f; + public static final int navigationContentDescription = 0x7f010187; + public static final int navigationIcon = 0x7f010186; + public static final int navigationMode = 0x7f010030; + public static final int overlapAnchor = 0x7f010136; + public static final int paddingBottomNoButtons = 0x7f010138; + public static final int paddingEnd = 0x7f01018c; + public static final int paddingStart = 0x7f01018b; + public static final int paddingTopNoTitle = 0x7f010139; + public static final int panelBackground = 0x7f0100aa; + public static final int panelMenuListTheme = 0x7f0100ac; + public static final int panelMenuListWidth = 0x7f0100ab; + public static final int passwordToggleContentDescription = 0x7f010174; + public static final int passwordToggleDrawable = 0x7f010173; + public static final int passwordToggleEnabled = 0x7f010172; + public static final int passwordToggleTint = 0x7f010175; + public static final int passwordToggleTintMode = 0x7f010176; + public static final int popupMenuStyle = 0x7f010098; + public static final int popupTheme = 0x7f010049; + public static final int popupWindowStyle = 0x7f010099; + public static final int preserveIconSpacing = 0x7f01012e; + public static final int pressedTranslationZ = 0x7f010122; + public static final int progressBarPadding = 0x7f01003f; + public static final int progressBarStyle = 0x7f01003d; + public static final int queryBackground = 0x7f01014b; + public static final int queryHint = 0x7f010142; + public static final int radioButtonStyle = 0x7f0100c6; + public static final int ratingBarStyle = 0x7f0100c7; + public static final int ratingBarStyleIndicator = 0x7f0100c8; + public static final int ratingBarStyleSmall = 0x7f0100c9; + public static final int reverseLayout = 0x7f01013c; + public static final int rippleColor = 0x7f010120; + public static final int scrimAnimationDuration = 0x7f0100f2; + public static final int scrimVisibleHeightTrigger = 0x7f0100f1; + public static final int searchHintIcon = 0x7f010147; + public static final int searchIcon = 0x7f010146; + public static final int searchViewStyle = 0x7f0100a0; + public static final int seekBarStyle = 0x7f0100ca; + public static final int selectableItemBackground = 0x7f010090; + public static final int selectableItemBackgroundBorderless = 0x7f010091; + public static final int showAsAction = 0x7f01012a; + public static final int showDividers = 0x7f010128; + public static final int showText = 0x7f010158; + public static final int showTitle = 0x7f010052; + public static final int singleChoiceItemLayout = 0x7f010050; + public static final int spanCount = 0x7f01013b; + public static final int spinBars = 0x7f010119; + public static final int spinnerDropDownItemStyle = 0x7f01008b; + public static final int spinnerStyle = 0x7f0100cb; + public static final int splitTrack = 0x7f010157; + public static final int srcCompat = 0x7f010058; + public static final int stackFromEnd = 0x7f01013d; + public static final int state_above_anchor = 0x7f010137; + public static final int state_collapsed = 0x7f010054; + public static final int state_collapsible = 0x7f010055; + public static final int statusBarBackground = 0x7f0100fc; + public static final int statusBarScrim = 0x7f0100ef; + public static final int subMenuArrow = 0x7f01012f; + public static final int submitBackground = 0x7f01014c; + public static final int subtitle = 0x7f010032; + public static final int subtitleTextAppearance = 0x7f01017b; + public static final int subtitleTextColor = 0x7f01018a; + public static final int subtitleTextStyle = 0x7f010034; + public static final int suggestionRowLayout = 0x7f01014a; + public static final int switchMinWidth = 0x7f010155; + public static final int switchPadding = 0x7f010156; + public static final int switchStyle = 0x7f0100cc; + public static final int switchTextAppearance = 0x7f010154; + public static final int tabBackground = 0x7f01015c; + public static final int tabContentStart = 0x7f01015b; + public static final int tabGravity = 0x7f01015e; + public static final int tabIndicatorColor = 0x7f010159; + public static final int tabIndicatorHeight = 0x7f01015a; + public static final int tabMaxWidth = 0x7f010160; + public static final int tabMinWidth = 0x7f01015f; + public static final int tabMode = 0x7f01015d; + public static final int tabPadding = 0x7f010168; + public static final int tabPaddingBottom = 0x7f010167; + public static final int tabPaddingEnd = 0x7f010166; + public static final int tabPaddingStart = 0x7f010164; + public static final int tabPaddingTop = 0x7f010165; + public static final int tabSelectedTextColor = 0x7f010163; + public static final int tabTextAppearance = 0x7f010161; + public static final int tabTextColor = 0x7f010162; + public static final int textAllCaps = 0x7f01005c; + public static final int textAppearanceLargePopupMenu = 0x7f010083; + public static final int textAppearanceListItem = 0x7f0100a8; + public static final int textAppearanceListItemSmall = 0x7f0100a9; + public static final int textAppearancePopupMenuHeader = 0x7f010085; + public static final int textAppearanceSearchResultSubtitle = 0x7f01009e; + public static final int textAppearanceSearchResultTitle = 0x7f01009d; + public static final int textAppearanceSmallPopupMenu = 0x7f010084; + public static final int textColorAlertDialogListItem = 0x7f0100bc; + public static final int textColorError = 0x7f010105; + public static final int textColorSearchUrl = 0x7f01009f; + public static final int theme = 0x7f01018d; + public static final int thickness = 0x7f01011f; + public static final int thumbTextPadding = 0x7f010153; + public static final int thumbTint = 0x7f01014e; + public static final int thumbTintMode = 0x7f01014f; + public static final int tickMark = 0x7f010059; + public static final int tickMarkTint = 0x7f01005a; + public static final int tickMarkTintMode = 0x7f01005b; + public static final int title = 0x7f01002f; + public static final int titleEnabled = 0x7f0100f5; + public static final int titleMargin = 0x7f01017c; + public static final int titleMarginBottom = 0x7f010180; + public static final int titleMarginEnd = 0x7f01017e; + public static final int titleMarginStart = 0x7f01017d; + public static final int titleMarginTop = 0x7f01017f; + public static final int titleMargins = 0x7f010181; + public static final int titleTextAppearance = 0x7f01017a; + public static final int titleTextColor = 0x7f010189; + public static final int titleTextStyle = 0x7f010033; + public static final int toolbarId = 0x7f0100f0; + public static final int toolbarNavigationButtonStyle = 0x7f010097; + public static final int toolbarStyle = 0x7f010096; + public static final int track = 0x7f010150; + public static final int trackTint = 0x7f010151; + public static final int trackTintMode = 0x7f010152; + public static final int useCompatPadding = 0x7f010124; + public static final int voiceIcon = 0x7f010148; + public static final int windowActionBar = 0x7f01005d; + public static final int windowActionBarOverlay = 0x7f01005f; + public static final int windowActionModeOverlay = 0x7f010060; + public static final int windowFixedHeightMajor = 0x7f010064; + public static final int windowFixedHeightMinor = 0x7f010062; + public static final int windowFixedWidthMajor = 0x7f010061; + public static final int windowFixedWidthMinor = 0x7f010063; + public static final int windowMinWidthMajor = 0x7f010065; + public static final int windowMinWidthMinor = 0x7f010066; + public static final int windowNoTitle = 0x7f01005e; + } + + public static final class bool { + public static final int abc_action_bar_embed_tabs = 0x7f0b0000; + public static final int abc_allow_stacked_button_bar = 0x7f0b0001; + public static final int abc_config_actionMenuItemAllCaps = 0x7f0b0002; + public static final int abc_config_closeDialogWhenTouchOutside = 0x7f0b0003; + public static final int abc_config_showMenuShortcutsWhenKeyboardPresent = 0x7f0b0004; + } + + public static final class color { + public static final int abc_background_cache_hint_selector_material_dark = 0x7f0d005c; + public static final int abc_background_cache_hint_selector_material_light = 0x7f0d005d; + public static final int abc_btn_colored_borderless_text_material = 0x7f0d005e; + public static final int abc_btn_colored_text_material = 0x7f0d005f; + public static final int abc_color_highlight_material = 0x7f0d0060; + public static final int abc_hint_foreground_material_dark = 0x7f0d0061; + public static final int abc_hint_foreground_material_light = 0x7f0d0062; + public static final int abc_input_method_navigation_guard = 0x7f0d0001; + public static final int abc_primary_text_disable_only_material_dark = 0x7f0d0063; + public static final int abc_primary_text_disable_only_material_light = 0x7f0d0064; + public static final int abc_primary_text_material_dark = 0x7f0d0065; + public static final int abc_primary_text_material_light = 0x7f0d0066; + public static final int abc_search_url_text = 0x7f0d0067; + public static final int abc_search_url_text_normal = 0x7f0d0002; + public static final int abc_search_url_text_pressed = 0x7f0d0003; + public static final int abc_search_url_text_selected = 0x7f0d0004; + public static final int abc_secondary_text_material_dark = 0x7f0d0068; + public static final int abc_secondary_text_material_light = 0x7f0d0069; + public static final int abc_tint_btn_checkable = 0x7f0d006a; + public static final int abc_tint_default = 0x7f0d006b; + public static final int abc_tint_edittext = 0x7f0d006c; + public static final int abc_tint_seek_thumb = 0x7f0d006d; + public static final int abc_tint_spinner = 0x7f0d006e; + public static final int abc_tint_switch_thumb = 0x7f0d006f; + public static final int abc_tint_switch_track = 0x7f0d0070; + public static final int accent_material_dark = 0x7f0d0005; + public static final int accent_material_light = 0x7f0d0006; + public static final int activityBackground = 0x7f0d0007; + public static final int background_floating_material_dark = 0x7f0d0008; + public static final int background_floating_material_light = 0x7f0d0009; + public static final int background_material_dark = 0x7f0d000a; + public static final int background_material_light = 0x7f0d000b; + public static final int black = 0x7f0d000c; + public static final int bright_foreground_disabled_material_dark = 0x7f0d000d; + public static final int bright_foreground_disabled_material_light = 0x7f0d000e; + public static final int bright_foreground_inverse_material_dark = 0x7f0d000f; + public static final int bright_foreground_inverse_material_light = 0x7f0d0010; + public static final int bright_foreground_material_dark = 0x7f0d0011; + public static final int bright_foreground_material_light = 0x7f0d0012; + public static final int buttonNormal = 0x7f0d0013; + public static final int buttonPressed = 0x7f0d0014; + public static final int button_material_dark = 0x7f0d0015; + public static final int button_material_light = 0x7f0d0016; + public static final int colorAccent = 0x7f0d0017; + public static final int colorPrimary = 0x7f0d0018; + public static final int colorPrimaryDark = 0x7f0d0019; + public static final int design_bottom_navigation_shadow_color = 0x7f0d001a; + public static final int design_error = 0x7f0d0071; + public static final int design_fab_shadow_end_color = 0x7f0d001b; + public static final int design_fab_shadow_mid_color = 0x7f0d001c; + public static final int design_fab_shadow_start_color = 0x7f0d001d; + public static final int design_fab_stroke_end_inner_color = 0x7f0d001e; + public static final int design_fab_stroke_end_outer_color = 0x7f0d001f; + public static final int design_fab_stroke_top_inner_color = 0x7f0d0020; + public static final int design_fab_stroke_top_outer_color = 0x7f0d0021; + public static final int design_snackbar_background_color = 0x7f0d0022; + public static final int design_textinput_error_color_dark = 0x7f0d0023; + public static final int design_textinput_error_color_light = 0x7f0d0024; + public static final int design_tint_password_toggle = 0x7f0d0072; + public static final int dialogHeaderFooterBackground = 0x7f0d0025; + public static final int dim_foreground_disabled_material_dark = 0x7f0d0026; + public static final int dim_foreground_disabled_material_light = 0x7f0d0027; + public static final int dim_foreground_material_dark = 0x7f0d0028; + public static final int dim_foreground_material_light = 0x7f0d0029; + public static final int dividerLine = 0x7f0d002a; + public static final int foreground_material_dark = 0x7f0d002b; + public static final int foreground_material_light = 0x7f0d002c; + public static final int halfTransparent = 0x7f0d002d; + public static final int highlightText = 0x7f0d002e; + public static final int highlighted_text_material_dark = 0x7f0d002f; + public static final int highlighted_text_material_light = 0x7f0d0030; + public static final int liveBackground = 0x7f0d0031; + public static final int mainBottomBackground = 0x7f0d0032; + public static final int mainTopBackground = 0x7f0d0033; + public static final int material_blue_grey_800 = 0x7f0d0034; + public static final int material_blue_grey_900 = 0x7f0d0035; + public static final int material_blue_grey_950 = 0x7f0d0036; + public static final int material_deep_teal_200 = 0x7f0d0037; + public static final int material_deep_teal_500 = 0x7f0d0038; + public static final int material_grey_100 = 0x7f0d0039; + public static final int material_grey_300 = 0x7f0d003a; + public static final int material_grey_50 = 0x7f0d003b; + public static final int material_grey_600 = 0x7f0d003c; + public static final int material_grey_800 = 0x7f0d003d; + public static final int material_grey_850 = 0x7f0d003e; + public static final int material_grey_900 = 0x7f0d003f; + public static final int notification_action_color_filter = 0x7f0d0000; + public static final int notification_icon_bg_color = 0x7f0d0040; + public static final int notification_material_background_media_default_color = 0x7f0d0041; + public static final int primaryText = 0x7f0d0042; + public static final int primary_dark_material_dark = 0x7f0d0043; + public static final int primary_dark_material_light = 0x7f0d0044; + public static final int primary_material_dark = 0x7f0d0045; + public static final int primary_material_light = 0x7f0d0046; + public static final int primary_text_default_material_dark = 0x7f0d0047; + public static final int primary_text_default_material_light = 0x7f0d0048; + public static final int primary_text_disabled_material_dark = 0x7f0d0049; + public static final int primary_text_disabled_material_light = 0x7f0d004a; + public static final int ripple_material_dark = 0x7f0d004b; + public static final int ripple_material_light = 0x7f0d004c; + public static final int roiColor = 0x7f0d004d; + public static final int secondary_text_default_material_dark = 0x7f0d004e; + public static final int secondary_text_default_material_light = 0x7f0d004f; + public static final int secondary_text_disabled_material_dark = 0x7f0d0050; + public static final int secondary_text_disabled_material_light = 0x7f0d0051; + public static final int selectedModeText = 0x7f0d0052; + public static final int settingItemPressed = 0x7f0d0053; + public static final int settingSubHeaderBackground = 0x7f0d0054; + public static final int settingSubHeaderTextColor = 0x7f0d0055; + public static final int switch_thumb_disabled_material_dark = 0x7f0d0056; + public static final int switch_thumb_disabled_material_light = 0x7f0d0057; + public static final int switch_thumb_material_dark = 0x7f0d0073; + public static final int switch_thumb_material_light = 0x7f0d0074; + public static final int switch_thumb_normal_material_dark = 0x7f0d0058; + public static final int switch_thumb_normal_material_light = 0x7f0d0059; + public static final int textColor = 0x7f0d005a; + public static final int transparent = 0x7f0d005b; + } + + public static final class dimen { + public static final int abc_action_bar_content_inset_material = 0x7f09000c; + public static final int abc_action_bar_content_inset_with_nav = 0x7f09000d; + public static final int abc_action_bar_default_height_material = 0x7f090001; + public static final int abc_action_bar_default_padding_end_material = 0x7f09000e; + public static final int abc_action_bar_default_padding_start_material = 0x7f09000f; + public static final int abc_action_bar_elevation_material = 0x7f09001e; + public static final int abc_action_bar_icon_vertical_padding_material = 0x7f09001f; + public static final int abc_action_bar_overflow_padding_end_material = 0x7f090020; + public static final int abc_action_bar_overflow_padding_start_material = 0x7f090021; + public static final int abc_action_bar_progress_bar_size = 0x7f090002; + public static final int abc_action_bar_stacked_max_height = 0x7f090022; + public static final int abc_action_bar_stacked_tab_max_width = 0x7f090023; + public static final int abc_action_bar_subtitle_bottom_margin_material = 0x7f090024; + public static final int abc_action_bar_subtitle_top_margin_material = 0x7f090025; + public static final int abc_action_button_min_height_material = 0x7f090026; + public static final int abc_action_button_min_width_material = 0x7f090027; + public static final int abc_action_button_min_width_overflow_material = 0x7f090028; + public static final int abc_alert_dialog_button_bar_height = 0x7f090000; + public static final int abc_button_inset_horizontal_material = 0x7f090029; + public static final int abc_button_inset_vertical_material = 0x7f09002a; + public static final int abc_button_padding_horizontal_material = 0x7f09002b; + public static final int abc_button_padding_vertical_material = 0x7f09002c; + public static final int abc_cascading_menus_min_smallest_width = 0x7f09002d; + public static final int abc_config_prefDialogWidth = 0x7f090005; + public static final int abc_control_corner_material = 0x7f09002e; + public static final int abc_control_inset_material = 0x7f09002f; + public static final int abc_control_padding_material = 0x7f090030; + public static final int abc_dialog_fixed_height_major = 0x7f090006; + public static final int abc_dialog_fixed_height_minor = 0x7f090007; + public static final int abc_dialog_fixed_width_major = 0x7f090008; + public static final int abc_dialog_fixed_width_minor = 0x7f090009; + public static final int abc_dialog_list_padding_bottom_no_buttons = 0x7f090031; + public static final int abc_dialog_list_padding_top_no_title = 0x7f090032; + public static final int abc_dialog_min_width_major = 0x7f09000a; + public static final int abc_dialog_min_width_minor = 0x7f09000b; + public static final int abc_dialog_padding_material = 0x7f090033; + public static final int abc_dialog_padding_top_material = 0x7f090034; + public static final int abc_dialog_title_divider_material = 0x7f090035; + public static final int abc_disabled_alpha_material_dark = 0x7f090036; + public static final int abc_disabled_alpha_material_light = 0x7f090037; + public static final int abc_dropdownitem_icon_width = 0x7f090038; + public static final int abc_dropdownitem_text_padding_left = 0x7f090039; + public static final int abc_dropdownitem_text_padding_right = 0x7f09003a; + public static final int abc_edit_text_inset_bottom_material = 0x7f09003b; + public static final int abc_edit_text_inset_horizontal_material = 0x7f09003c; + public static final int abc_edit_text_inset_top_material = 0x7f09003d; + public static final int abc_floating_window_z = 0x7f09003e; + public static final int abc_list_item_padding_horizontal_material = 0x7f09003f; + public static final int abc_panel_menu_list_width = 0x7f090040; + public static final int abc_progress_bar_height_material = 0x7f090041; + public static final int abc_search_view_preferred_height = 0x7f090042; + public static final int abc_search_view_preferred_width = 0x7f090043; + public static final int abc_seekbar_track_background_height_material = 0x7f090044; + public static final int abc_seekbar_track_progress_height_material = 0x7f090045; + public static final int abc_select_dialog_padding_start_material = 0x7f090046; + public static final int abc_switch_padding = 0x7f090019; + public static final int abc_text_size_body_1_material = 0x7f090047; + public static final int abc_text_size_body_2_material = 0x7f090048; + public static final int abc_text_size_button_material = 0x7f090049; + public static final int abc_text_size_caption_material = 0x7f09004a; + public static final int abc_text_size_display_1_material = 0x7f09004b; + public static final int abc_text_size_display_2_material = 0x7f09004c; + public static final int abc_text_size_display_3_material = 0x7f09004d; + public static final int abc_text_size_display_4_material = 0x7f09004e; + public static final int abc_text_size_headline_material = 0x7f09004f; + public static final int abc_text_size_large_material = 0x7f090050; + public static final int abc_text_size_medium_material = 0x7f090051; + public static final int abc_text_size_menu_header_material = 0x7f090052; + public static final int abc_text_size_menu_material = 0x7f090053; + public static final int abc_text_size_small_material = 0x7f090054; + public static final int abc_text_size_subhead_material = 0x7f090055; + public static final int abc_text_size_subtitle_material_toolbar = 0x7f090003; + public static final int abc_text_size_title_material = 0x7f090056; + public static final int abc_text_size_title_material_toolbar = 0x7f090004; + public static final int activityGoBackMargin = 0x7f090057; + public static final int activity_horizontal_margin = 0x7f09001d; + public static final int activity_vertical_margin = 0x7f090058; + public static final int appTitleTextSize = 0x7f090059; + public static final int barcodesize = 0x7f09005a; + public static final int buttonMoreLeftPadding = 0x7f09005b; + public static final int buttonPaletteLeftRightPadding = 0x7f09005c; + public static final int buttonPhotoLeftRightPadding = 0x7f09005d; + public static final int design_appbar_elevation = 0x7f09005e; + public static final int design_bottom_navigation_active_item_max_width = 0x7f09005f; + public static final int design_bottom_navigation_active_text_size = 0x7f090060; + public static final int design_bottom_navigation_elevation = 0x7f090061; + public static final int design_bottom_navigation_height = 0x7f090062; + public static final int design_bottom_navigation_item_max_width = 0x7f090063; + public static final int design_bottom_navigation_item_min_width = 0x7f090064; + public static final int design_bottom_navigation_margin = 0x7f090065; + public static final int design_bottom_navigation_shadow_height = 0x7f090066; + public static final int design_bottom_navigation_text_size = 0x7f090067; + public static final int design_bottom_sheet_modal_elevation = 0x7f090068; + public static final int design_bottom_sheet_peek_height_min = 0x7f090069; + public static final int design_fab_border_width = 0x7f09006a; + public static final int design_fab_elevation = 0x7f09006b; + public static final int design_fab_image_size = 0x7f09006c; + public static final int design_fab_size_mini = 0x7f09006d; + public static final int design_fab_size_normal = 0x7f09006e; + public static final int design_fab_translation_z_pressed = 0x7f09006f; + public static final int design_navigation_elevation = 0x7f090070; + public static final int design_navigation_icon_padding = 0x7f090071; + public static final int design_navigation_icon_size = 0x7f090072; + public static final int design_navigation_max_width = 0x7f090010; + public static final int design_navigation_padding_bottom = 0x7f090073; + public static final int design_navigation_separator_vertical_padding = 0x7f090074; + public static final int design_snackbar_action_inline_max_width = 0x7f090011; + public static final int design_snackbar_background_corner_radius = 0x7f090012; + public static final int design_snackbar_elevation = 0x7f090075; + public static final int design_snackbar_extra_spacing_horizontal = 0x7f090013; + public static final int design_snackbar_max_width = 0x7f090014; + public static final int design_snackbar_min_width = 0x7f090015; + public static final int design_snackbar_padding_horizontal = 0x7f090076; + public static final int design_snackbar_padding_vertical = 0x7f090077; + public static final int design_snackbar_padding_vertical_2lines = 0x7f090016; + public static final int design_snackbar_text_size = 0x7f090078; + public static final int design_tab_max_width = 0x7f090079; + public static final int design_tab_scrollable_min_width = 0x7f090017; + public static final int design_tab_text_size = 0x7f09007a; + public static final int design_tab_text_size_2line = 0x7f09007b; + public static final int devUnconnTextSize = 0x7f09007c; + public static final int dialogContentLeftMargin = 0x7f09007d; + public static final int dialogItemVerticalMargin = 0x7f09007e; + public static final int dialogTailTopMargin = 0x7f09007f; + public static final int dialogTextSize = 0x7f090080; + public static final int dialogTitleBottomMargin = 0x7f090081; + public static final int dialogTitleTopMargin = 0x7f090082; + public static final int disabled_alpha_material_dark = 0x7f090083; + public static final int disabled_alpha_material_light = 0x7f090084; + public static final int fab_margin = 0x7f090085; + public static final int highlight_alpha_material_colored = 0x7f090086; + public static final int highlight_alpha_material_dark = 0x7f090087; + public static final int highlight_alpha_material_light = 0x7f090088; + public static final int hint_alpha_material_dark = 0x7f090089; + public static final int hint_alpha_material_light = 0x7f09008a; + public static final int hint_pressed_alpha_material_dark = 0x7f09008b; + public static final int hint_pressed_alpha_material_light = 0x7f09008c; + public static final int item_touch_helper_max_drag_scroll_per_frame = 0x7f09008d; + public static final int item_touch_helper_swipe_escape_max_velocity = 0x7f09008e; + public static final int item_touch_helper_swipe_escape_velocity = 0x7f09008f; + public static final int labelPhotoLeftRightPadding = 0x7f090090; + public static final int liveTemperatureTextSize = 0x7f090091; + public static final int mainBottomButtonSize = 0x7f090092; + public static final int mainBottomPadding = 0x7f090093; + public static final int mainTopButtonPadding = 0x7f090094; + public static final int mainTopMagrin = 0x7f090095; + public static final int mediaInfoTextLeftMargin = 0x7f090096; + public static final int mediaInfoTextRightMargin = 0x7f090097; + public static final int mediaItemExpectedWidth = 0x7f090098; + public static final int mediaItemMargin = 0x7f090099; + public static final int modeSelectorPointBottomMargin = 0x7f09009a; + public static final int modeSelectorPointTopMargin = 0x7f09009b; + public static final int notification_action_icon_size = 0x7f09009c; + public static final int notification_action_text_size = 0x7f09009d; + public static final int notification_big_circle_margin = 0x7f09009e; + public static final int notification_content_margin_start = 0x7f09001a; + public static final int notification_large_icon_height = 0x7f09009f; + public static final int notification_large_icon_width = 0x7f0900a0; + public static final int notification_main_column_padding_top = 0x7f09001b; + public static final int notification_media_narrow_margin = 0x7f09001c; + public static final int notification_right_icon_size = 0x7f0900a1; + public static final int notification_right_side_padding_top = 0x7f090018; + public static final int notification_small_icon_background_padding = 0x7f0900a2; + public static final int notification_small_icon_size_as_large = 0x7f0900a3; + public static final int notification_subtext_size = 0x7f0900a4; + public static final int notification_top_pad = 0x7f0900a5; + public static final int notification_top_pad_large_text = 0x7f0900a6; + public static final int paletteItemMargin = 0x7f0900a7; + public static final int popMenuItemBottomMargin = 0x7f0900a8; + public static final int popMenuItemLeftMargin = 0x7f0900a9; + public static final int popMenuItemRightMargin = 0x7f0900aa; + public static final int popMenuItemTopMargin = 0x7f0900ab; + public static final int recordingTemperatureTextSize = 0x7f0900ac; + public static final int recordingTimeTextSize = 0x7f0900ad; + public static final int settingItemIconLeftMargin = 0x7f0900ae; + public static final int settingItemIconRightMargin = 0x7f0900af; + public static final int settingItemLeftMargin = 0x7f0900b0; + public static final int settingItemTextSize = 0x7f0900b1; + public static final int settingItemVerticalMargin = 0x7f0900b2; + public static final int settingSubHeaderTextSize = 0x7f0900b3; + public static final int settingSubHeaderVerticalMargin = 0x7f0900b4; + public static final int supportIconMargin = 0x7f0900b5; + public static final int supportItemHeight = 0x7f0900b6; + public static final int supportItemLeftMargin = 0x7f0900b7; + public static final int supportItemRightMargin = 0x7f0900b8; + public static final int supportLinespacing = 0x7f0900b9; + public static final int supportRightMargin = 0x7f0900ba; + public static final int supportRowIconMargin = 0x7f0900bb; + public static final int supportSubHeaderText = 0x7f0900bc; + public static final int supportSubHeaderTopmargin = 0x7f0900bd; + } + + public static final class drawable { + public static final int abc_ab_share_pack_mtrl_alpha = 0x7f020000; + public static final int abc_action_bar_item_background_material = 0x7f020001; + public static final int abc_btn_borderless_material = 0x7f020002; + public static final int abc_btn_check_material = 0x7f020003; + public static final int abc_btn_check_to_on_mtrl_000 = 0x7f020004; + public static final int abc_btn_check_to_on_mtrl_015 = 0x7f020005; + public static final int abc_btn_colored_material = 0x7f020006; + public static final int abc_btn_default_mtrl_shape = 0x7f020007; + public static final int abc_btn_radio_material = 0x7f020008; + public static final int abc_btn_radio_to_on_mtrl_000 = 0x7f020009; + public static final int abc_btn_radio_to_on_mtrl_015 = 0x7f02000a; + public static final int abc_btn_switch_to_on_mtrl_00001 = 0x7f02000b; + public static final int abc_btn_switch_to_on_mtrl_00012 = 0x7f02000c; + public static final int abc_cab_background_internal_bg = 0x7f02000d; + public static final int abc_cab_background_top_material = 0x7f02000e; + public static final int abc_cab_background_top_mtrl_alpha = 0x7f02000f; + public static final int abc_control_background_material = 0x7f020010; + public static final int abc_dialog_material_background = 0x7f020011; + public static final int abc_edit_text_material = 0x7f020012; + public static final int abc_ic_ab_back_material = 0x7f020013; + public static final int abc_ic_arrow_drop_right_black_24dp = 0x7f020014; + public static final int abc_ic_clear_material = 0x7f020015; + public static final int abc_ic_commit_search_api_mtrl_alpha = 0x7f020016; + public static final int abc_ic_go_search_api_material = 0x7f020017; + public static final int abc_ic_menu_copy_mtrl_am_alpha = 0x7f020018; + public static final int abc_ic_menu_cut_mtrl_alpha = 0x7f020019; + public static final int abc_ic_menu_overflow_material = 0x7f02001a; + public static final int abc_ic_menu_paste_mtrl_am_alpha = 0x7f02001b; + public static final int abc_ic_menu_selectall_mtrl_alpha = 0x7f02001c; + public static final int abc_ic_menu_share_mtrl_alpha = 0x7f02001d; + public static final int abc_ic_search_api_material = 0x7f02001e; + public static final int abc_ic_star_black_16dp = 0x7f02001f; + public static final int abc_ic_star_black_36dp = 0x7f020020; + public static final int abc_ic_star_black_48dp = 0x7f020021; + public static final int abc_ic_star_half_black_16dp = 0x7f020022; + public static final int abc_ic_star_half_black_36dp = 0x7f020023; + public static final int abc_ic_star_half_black_48dp = 0x7f020024; + public static final int abc_ic_voice_search_api_material = 0x7f020025; + public static final int abc_item_background_holo_dark = 0x7f020026; + public static final int abc_item_background_holo_light = 0x7f020027; + public static final int abc_list_divider_mtrl_alpha = 0x7f020028; + public static final int abc_list_focused_holo = 0x7f020029; + public static final int abc_list_longpressed_holo = 0x7f02002a; + public static final int abc_list_pressed_holo_dark = 0x7f02002b; + public static final int abc_list_pressed_holo_light = 0x7f02002c; + public static final int abc_list_selector_background_transition_holo_dark = 0x7f02002d; + public static final int abc_list_selector_background_transition_holo_light = 0x7f02002e; + public static final int abc_list_selector_disabled_holo_dark = 0x7f02002f; + public static final int abc_list_selector_disabled_holo_light = 0x7f020030; + public static final int abc_list_selector_holo_dark = 0x7f020031; + public static final int abc_list_selector_holo_light = 0x7f020032; + public static final int abc_menu_hardkey_panel_mtrl_mult = 0x7f020033; + public static final int abc_popup_background_mtrl_mult = 0x7f020034; + public static final int abc_ratingbar_indicator_material = 0x7f020035; + public static final int abc_ratingbar_material = 0x7f020036; + public static final int abc_ratingbar_small_material = 0x7f020037; + public static final int abc_scrubber_control_off_mtrl_alpha = 0x7f020038; + public static final int abc_scrubber_control_to_pressed_mtrl_000 = 0x7f020039; + public static final int abc_scrubber_control_to_pressed_mtrl_005 = 0x7f02003a; + public static final int abc_scrubber_primary_mtrl_alpha = 0x7f02003b; + public static final int abc_scrubber_track_mtrl_alpha = 0x7f02003c; + public static final int abc_seekbar_thumb_material = 0x7f02003d; + public static final int abc_seekbar_tick_mark_material = 0x7f02003e; + public static final int abc_seekbar_track_material = 0x7f02003f; + public static final int abc_spinner_mtrl_am_alpha = 0x7f020040; + public static final int abc_spinner_textfield_background_material = 0x7f020041; + public static final int abc_switch_thumb_material = 0x7f020042; + public static final int abc_switch_track_mtrl_alpha = 0x7f020043; + public static final int abc_tab_indicator_material = 0x7f020044; + public static final int abc_tab_indicator_mtrl_alpha = 0x7f020045; + public static final int abc_text_cursor_material = 0x7f020046; + public static final int abc_text_select_handle_left_mtrl_dark = 0x7f020047; + public static final int abc_text_select_handle_left_mtrl_light = 0x7f020048; + public static final int abc_text_select_handle_middle_mtrl_dark = 0x7f020049; + public static final int abc_text_select_handle_middle_mtrl_light = 0x7f02004a; + public static final int abc_text_select_handle_right_mtrl_dark = 0x7f02004b; + public static final int abc_text_select_handle_right_mtrl_light = 0x7f02004c; + public static final int abc_textfield_activated_mtrl_alpha = 0x7f02004d; + public static final int abc_textfield_default_mtrl_alpha = 0x7f02004e; + public static final int abc_textfield_search_activated_mtrl_alpha = 0x7f02004f; + public static final int abc_textfield_search_default_mtrl_alpha = 0x7f020050; + public static final int abc_textfield_search_material = 0x7f020051; + public static final int abc_vector_test = 0x7f020052; + public static final int avd_hide_password = 0x7f020053; + public static final int avd_hide_password_1 = 0x7f02008e; + public static final int avd_hide_password_2 = 0x7f02008f; + public static final int avd_hide_password_3 = 0x7f020090; + public static final int avd_show_password = 0x7f020054; + public static final int avd_show_password_1 = 0x7f020091; + public static final int avd_show_password_2 = 0x7f020092; + public static final int avd_show_password_3 = 0x7f020093; + public static final int browse_normal = 0x7f020055; + public static final int browse_press = 0x7f020056; + public static final int button_browse_select = 0x7f020057; + public static final int button_capture_photo_select = 0x7f020058; + public static final int button_delete_select = 0x7f020059; + public static final int button_mode_select = 0x7f02005a; + public static final int button_more_select = 0x7f02005b; + public static final int button_palette_select = 0x7f02005c; + public static final int button_photo_info_select = 0x7f02005d; + public static final int button_select_all_select = 0x7f02005e; + public static final int button_select_color = 0x7f02005f; + public static final int button_social_share_select = 0x7f020060; + public static final int button_unselect_all_select = 0x7f020061; + public static final int capture_photo_normal = 0x7f020062; + public static final int capture_photo_pressed = 0x7f020063; + public static final int circular_shape = 0x7f020064; + public static final int delete_disabled = 0x7f020065; + public static final int delete_normal = 0x7f020066; + public static final int delete_pressed = 0x7f020067; + public static final int design_bottom_navigation_item_background = 0x7f020068; + public static final int design_fab_background = 0x7f020069; + public static final int design_ic_visibility = 0x7f02006a; + public static final int design_ic_visibility_off = 0x7f02006b; + public static final int design_password_eye = 0x7f02006c; + public static final int design_snackbar_background = 0x7f02006d; + public static final int dialog_border = 0x7f02006e; + public static final int dialog_btn_normal = 0x7f02006f; + public static final int dialog_btn_pressed = 0x7f020070; + public static final int dialog_button_select = 0x7f020071; + public static final int imag_mask_select = 0x7f020072; + public static final int info_normal = 0x7f020073; + public static final int info_pressed = 0x7f020074; + public static final int mode_normal = 0x7f020075; + public static final int mode_press = 0x7f020076; + public static final int navigation_empty_icon = 0x7f020077; + public static final int notification_action_background = 0x7f020078; + public static final int notification_bg = 0x7f020079; + public static final int notification_bg_low = 0x7f02007a; + public static final int notification_bg_low_normal = 0x7f02007b; + public static final int notification_bg_low_pressed = 0x7f02007c; + public static final int notification_bg_normal = 0x7f02007d; + public static final int notification_bg_normal_pressed = 0x7f02007e; + public static final int notification_icon_background = 0x7f02007f; + public static final int notification_template_icon_bg = 0x7f02008c; + public static final int notification_template_icon_low_bg = 0x7f02008d; + public static final int notification_tile_bg = 0x7f020080; + public static final int notify_panel_notification_icon_bg = 0x7f020081; + public static final int palette_normal = 0x7f020082; + public static final int palette_pressed = 0x7f020083; + public static final int select_all_normal = 0x7f020084; + public static final int select_all_pressed = 0x7f020085; + public static final int setting_item_select = 0x7f020086; + public static final int social_share_disabled = 0x7f020087; + public static final int social_share_normal = 0x7f020088; + public static final int social_share_pressed = 0x7f020089; + public static final int unselect_all_normal = 0x7f02008a; + public static final int unselect_all_pressed = 0x7f02008b; + } + + public static final class id { + public static final int action0 = 0x7f0e0108; + public static final int action_bar = 0x7f0e006b; + public static final int action_bar_activity_content = 0x7f0e0000; + public static final int action_bar_container = 0x7f0e006a; + public static final int action_bar_root = 0x7f0e0066; + public static final int action_bar_spinner = 0x7f0e0001; + public static final int action_bar_subtitle = 0x7f0e0049; + public static final int action_bar_title = 0x7f0e0048; + public static final int action_container = 0x7f0e0105; + public static final int action_context_bar = 0x7f0e006c; + public static final int action_divider = 0x7f0e010c; + public static final int action_image = 0x7f0e0106; + public static final int action_menu_divider = 0x7f0e0002; + public static final int action_menu_presenter = 0x7f0e0003; + public static final int action_mode_bar = 0x7f0e0068; + public static final int action_mode_bar_stub = 0x7f0e0067; + public static final int action_mode_close_button = 0x7f0e004a; + public static final int action_text = 0x7f0e0107; + public static final int actions = 0x7f0e0114; + public static final int activity_chooser_view_content = 0x7f0e004b; + public static final int add = 0x7f0e0026; + public static final int alertTitle = 0x7f0e005f; + public static final int all = 0x7f0e0014; + public static final int always = 0x7f0e0041; + public static final int auto = 0x7f0e002d; + public static final int basic = 0x7f0e0015; + public static final int beginning = 0x7f0e003f; + public static final int bottom = 0x7f0e002e; + public static final int buttonPanel = 0x7f0e0052; + public static final int cancel_action = 0x7f0e0109; + public static final int center = 0x7f0e002f; + public static final int center_horizontal = 0x7f0e0030; + public static final int center_vertical = 0x7f0e0031; + public static final int chains = 0x7f0e0016; + public static final int checkbox = 0x7f0e0062; + public static final int chronometer = 0x7f0e0111; + public static final int clip_horizontal = 0x7f0e003a; + public static final int clip_vertical = 0x7f0e003b; + public static final int collapseActionView = 0x7f0e0042; + public static final int contentPanel = 0x7f0e0055; + public static final int custom = 0x7f0e005c; + public static final int customPanel = 0x7f0e005b; + public static final int decor_content_parent = 0x7f0e0069; + public static final int default_activity_button = 0x7f0e004e; + public static final int design_bottom_sheet = 0x7f0e0091; + public static final int design_menu_item_action_area = 0x7f0e0098; + public static final int design_menu_item_action_area_stub = 0x7f0e0097; + public static final int design_menu_item_text = 0x7f0e0096; + public static final int design_navigation_view = 0x7f0e0095; + public static final int disableHome = 0x7f0e001b; + public static final int edit_query = 0x7f0e006d; + public static final int end = 0x7f0e0032; + public static final int end_padder = 0x7f0e011b; + public static final int enterAlways = 0x7f0e0021; + public static final int enterAlwaysCollapsed = 0x7f0e0022; + public static final int exitUntilCollapsed = 0x7f0e0023; + public static final int expand_activities_button = 0x7f0e004c; + public static final int expanded_menu = 0x7f0e0061; + public static final int fill = 0x7f0e003c; + public static final int fill_horizontal = 0x7f0e003d; + public static final int fill_vertical = 0x7f0e0033; + public static final int fixed = 0x7f0e0046; + public static final int fragment_container_main_bottom = 0x7f0e0084; + public static final int fragment_container_main_center = 0x7f0e0083; + public static final int fragment_container_main_top = 0x7f0e0082; + public static final int home = 0x7f0e0004; + public static final int homeAsUp = 0x7f0e001c; + public static final int icon = 0x7f0e0050; + public static final int icon_group = 0x7f0e0115; + public static final int id_about = 0x7f0e00f2; + public static final int id_action_media_expand = 0x7f0e0121; + public static final int id_barcodeView = 0x7f0e0081; + public static final int id_browse = 0x7f0e00bc; + public static final int id_btn_cancel = 0x7f0e00aa; + public static final int id_btn_delete = 0x7f0e00cf; + public static final int id_btn_media_delete = 0x7f0e008a; + public static final int id_btn_meida_info = 0x7f0e0089; + public static final int id_btn_ok = 0x7f0e00a0; + public static final int id_btn_select_all = 0x7f0e00d0; + public static final int id_btn_social_share = 0x7f0e0088; + public static final int id_cancel = 0x7f0e0120; + public static final int id_capture = 0x7f0e00be; + public static final int id_capture_container = 0x7f0e00bd; + public static final int id_company = 0x7f0e0080; + public static final int id_cross = 0x7f0e00c9; + public static final int id_emissivity_divider1 = 0x7f0e00e2; + public static final int id_emissivity_divider2 = 0x7f0e00e4; + public static final int id_emissivity_divider3 = 0x7f0e00e6; + public static final int id_fps_divider1 = 0x7f0e00e7; + public static final int id_fps_divider2 = 0x7f0e00e9; + public static final int id_fps_divider3 = 0x7f0e00eb; + public static final int id_fwVersion = 0x7f0e007d; + public static final int id_goback = 0x7f0e007a; + public static final int id_hwVersion = 0x7f0e007e; + public static final int id_icon = 0x7f0e00f3; + public static final int id_imageEX_divider = 0x7f0e00e1; + public static final int id_imgViewAnim = 0x7f0e00c4; + public static final int id_imgViewerVisible = 0x7f0e00c2; + public static final int id_img_single = 0x7f0e00f9; + public static final int id_imgviewer = 0x7f0e00c3; + public static final int id_item_menu_logo = 0x7f0e00f4; + public static final int id_item_menu_text = 0x7f0e00f5; + public static final int id_laser = 0x7f0e00cc; + public static final int id_layout = 0x7f0e008c; + public static final int id_layoutDevUnconn = 0x7f0e00c5; + public static final int id_loading = 0x7f0e00c6; + public static final int id_loading2 = 0x7f0e00c7; + public static final int id_main_center = 0x7f0e00c1; + public static final int id_media_group = 0x7f0e00f8; + public static final int id_media_info_duration = 0x7f0e009d; + public static final int id_media_info_name = 0x7f0e009a; + public static final int id_media_info_path = 0x7f0e009f; + public static final int id_media_info_resolution = 0x7f0e009e; + public static final int id_media_info_size = 0x7f0e009c; + public static final int id_media_info_time = 0x7f0e009b; + public static final int id_media_menu = 0x7f0e0087; + public static final int id_media_viewpager = 0x7f0e0086; + public static final int id_menu_item_help = 0x7f0e011d; + public static final int id_menu_item_setting = 0x7f0e011c; + public static final int id_mode = 0x7f0e00c8; + public static final int id_mode_ir = 0x7f0e00a1; + public static final int id_mode_pip = 0x7f0e00a2; + public static final int id_more = 0x7f0e00cd; + public static final int id_moving_cross_divider1 = 0x7f0e00ec; + public static final int id_moving_cross_divider2 = 0x7f0e00ee; + public static final int id_moving_cross_divider3 = 0x7f0e00f0; + public static final int id_option_sel1 = 0x7f0e00a4; + public static final int id_option_sel2 = 0x7f0e00a5; + public static final int id_option_sel3 = 0x7f0e00a6; + public static final int id_option_sel4 = 0x7f0e00a7; + public static final int id_option_sel5 = 0x7f0e00a8; + public static final int id_option_title = 0x7f0e00a3; + public static final int id_palette = 0x7f0e00c0; + public static final int id_palette_autumn = 0x7f0e00b0; + public static final int id_palette_black_hot = 0x7f0e00ac; + public static final int id_palette_glow_bow = 0x7f0e00af; + public static final int id_palette_high_contrast = 0x7f0e00b5; + public static final int id_palette_hot_metal = 0x7f0e00b2; + public static final int id_palette_image = 0x7f0e00fb; + public static final int id_palette_iron_bow = 0x7f0e00ad; + public static final int id_palette_jet = 0x7f0e00b3; + public static final int id_palette_label = 0x7f0e00fc; + public static final int id_palette_rain_bow = 0x7f0e00ae; + public static final int id_palette_red_saturation = 0x7f0e00b4; + public static final int id_palette_ret_hot = 0x7f0e00b6; + public static final int id_palette_white_hot = 0x7f0e00ab; + public static final int id_palette_winter = 0x7f0e00b1; + public static final int id_photo = 0x7f0e00ba; + public static final int id_photo_selected = 0x7f0e0103; + public static final int id_photo_video = 0x7f0e0104; + public static final int id_photowall = 0x7f0e00ce; + public static final int id_product = 0x7f0e00f1; + public static final int id_productType = 0x7f0e007b; + public static final int id_record = 0x7f0e00bb; + public static final int id_recording_point = 0x7f0e00bf; + public static final int id_right = 0x7f0e007f; + public static final int id_selection = 0x7f0e00b9; + public static final int id_selector_point = 0x7f0e00b8; + public static final int id_setting_icon = 0x7f0e00fe; + public static final int id_setting_in_text = 0x7f0e00b7; + public static final int id_setting_item_aboutAbout = 0x7f0e00d3; + public static final int id_setting_item_aboutProduct = 0x7f0e00d2; + public static final int id_setting_item_emissivity = 0x7f0e00e5; + public static final int id_setting_item_fps = 0x7f0e00ea; + public static final int id_setting_item_imageEX = 0x7f0e00e0; + public static final int id_setting_item_imageHorflip = 0x7f0e00de; + public static final int id_setting_item_imageVerflip = 0x7f0e00df; + public static final int id_setting_item_maxmintrace = 0x7f0e00d9; + public static final int id_setting_item_moving_cross = 0x7f0e00ef; + public static final int id_setting_item_roitrace = 0x7f0e00db; + public static final int id_setting_item_text = 0x7f0e00fd; + public static final int id_setting_item_text2 = 0x7f0e00ff; + public static final int id_setting_item_visiblesize = 0x7f0e00d5; + public static final int id_setting_subheader_about = 0x7f0e00d1; + public static final int id_setting_subheader_emissivity = 0x7f0e00e3; + public static final int id_setting_subheader_fps = 0x7f0e00e8; + public static final int id_setting_subheader_imageflip = 0x7f0e00dd; + public static final int id_setting_subheader_maxmintrace = 0x7f0e00d7; + public static final int id_setting_subheader_moving_cross = 0x7f0e00ed; + public static final int id_setting_subheader_visible = 0x7f0e00d4; + public static final int id_space_fragment = 0x7f0e008d; + public static final int id_space_fragment_media = 0x7f0e0085; + public static final int id_space_fragment_setting = 0x7f0e008b; + public static final int id_swVersion = 0x7f0e007c; + public static final int id_text = 0x7f0e00a9; + public static final int id_text1 = 0x7f0e0100; + public static final int id_text2 = 0x7f0e0101; + public static final int id_text_item_left = 0x7f0e00f6; + public static final int id_text_item_right = 0x7f0e00f7; + public static final int id_trace_max_min = 0x7f0e00cb; + public static final int id_video_play_logo = 0x7f0e00fa; + public static final int id_wallphoto = 0x7f0e0102; + public static final int id_zoom = 0x7f0e00ca; + public static final int ifRoom = 0x7f0e0043; + public static final int image = 0x7f0e004d; + public static final int info = 0x7f0e0112; + public static final int item_touch_helper_previous_elevation = 0x7f0e0005; + public static final int largeLabel = 0x7f0e008f; + public static final int left = 0x7f0e0034; + public static final int line1 = 0x7f0e0117; + public static final int line3 = 0x7f0e0119; + public static final int listMode = 0x7f0e0018; + public static final int list_item = 0x7f0e004f; + public static final int masked = 0x7f0e011f; + public static final int media_actions = 0x7f0e010b; + public static final int middle = 0x7f0e0040; + public static final int mini = 0x7f0e003e; + public static final int multiply = 0x7f0e0027; + public static final int navigation_header_container = 0x7f0e0094; + public static final int never = 0x7f0e0044; + public static final int none = 0x7f0e0017; + public static final int normal = 0x7f0e0019; + public static final int notification_background = 0x7f0e0113; + public static final int notification_main_column = 0x7f0e010e; + public static final int notification_main_column_container = 0x7f0e010d; + public static final int packed = 0x7f0e0012; + public static final int parallax = 0x7f0e0038; + public static final int parent = 0x7f0e000f; + public static final int parentPanel = 0x7f0e0054; + public static final int pin = 0x7f0e0039; + public static final int progress_circular = 0x7f0e0006; + public static final int progress_horizontal = 0x7f0e0007; + public static final int radio = 0x7f0e0064; + public static final int right = 0x7f0e0035; + public static final int right_icon = 0x7f0e0116; + public static final int right_side = 0x7f0e010f; + public static final int screen = 0x7f0e0028; + public static final int scroll = 0x7f0e0024; + public static final int scrollIndicatorDown = 0x7f0e005a; + public static final int scrollIndicatorUp = 0x7f0e0056; + public static final int scrollView = 0x7f0e0057; + public static final int scrollable = 0x7f0e0047; + public static final int search_badge = 0x7f0e006f; + public static final int search_bar = 0x7f0e006e; + public static final int search_button = 0x7f0e0070; + public static final int search_close_btn = 0x7f0e0075; + public static final int search_edit_frame = 0x7f0e0071; + public static final int search_go_btn = 0x7f0e0077; + public static final int search_mag_icon = 0x7f0e0072; + public static final int search_plate = 0x7f0e0073; + public static final int search_src_text = 0x7f0e0074; + public static final int search_voice_btn = 0x7f0e0078; + public static final int select_dialog_listview = 0x7f0e0079; + public static final int shortcut = 0x7f0e0063; + public static final int showCustom = 0x7f0e001d; + public static final int showHome = 0x7f0e001e; + public static final int showTitle = 0x7f0e001f; + public static final int smallLabel = 0x7f0e008e; + public static final int snackbar_action = 0x7f0e0093; + public static final int snackbar_text = 0x7f0e0092; + public static final int snap = 0x7f0e0025; + public static final int spacer = 0x7f0e0053; + public static final int split_action_bar = 0x7f0e0008; + public static final int spread = 0x7f0e0010; + public static final int spread_inside = 0x7f0e0013; + public static final int src_atop = 0x7f0e0029; + public static final int src_in = 0x7f0e002a; + public static final int src_over = 0x7f0e002b; + public static final int start = 0x7f0e0036; + public static final int status_bar_latest_event_content = 0x7f0e010a; + public static final int submenuarrow = 0x7f0e0065; + public static final int submit_area = 0x7f0e0076; + public static final int tabMode = 0x7f0e001a; + public static final int text = 0x7f0e011a; + public static final int text2 = 0x7f0e0118; + public static final int textSpacerNoButtons = 0x7f0e0059; + public static final int textSpacerNoTitle = 0x7f0e0058; + public static final int text_input_password_toggle = 0x7f0e0099; + public static final int textinput_counter = 0x7f0e0009; + public static final int textinput_error = 0x7f0e000a; + public static final int time = 0x7f0e0110; + public static final int title = 0x7f0e0051; + public static final int titleDividerNoCustom = 0x7f0e0060; + public static final int title_template = 0x7f0e005e; + public static final int top = 0x7f0e0037; + public static final int topPanel = 0x7f0e005d; + public static final int touch_outside = 0x7f0e0090; + public static final int trace_divider1 = 0x7f0e00d6; + public static final int trace_divider2 = 0x7f0e00d8; + public static final int trace_divider3 = 0x7f0e00da; + public static final int trace_divider4 = 0x7f0e00dc; + public static final int transition_current_scene = 0x7f0e000b; + public static final int transition_scene_layoutid_cache = 0x7f0e000c; + public static final int up = 0x7f0e000d; + public static final int useLogo = 0x7f0e0020; + public static final int view_offset_helper = 0x7f0e000e; + public static final int visible = 0x7f0e011e; + public static final int withText = 0x7f0e0045; + public static final int wrap = 0x7f0e0011; + public static final int wrap_content = 0x7f0e002c; + } + + public static final class integer { + public static final int abc_config_activityDefaultDur = 0x7f0c0001; + public static final int abc_config_activityShortDur = 0x7f0c0002; + public static final int app_bar_elevation_anim_duration = 0x7f0c0003; + public static final int bottom_sheet_slide_duration = 0x7f0c0004; + public static final int cancel_button_image_alpha = 0x7f0c0005; + public static final int design_snackbar_text_max_lines = 0x7f0c0000; + public static final int hide_password_duration = 0x7f0c0006; + public static final int show_password_duration = 0x7f0c0007; + public static final int status_bar_notification_info_maxnum = 0x7f0c0008; + } + + public static final class layout { + public static final int abc_action_bar_title_item = 0x7f040000; + public static final int abc_action_bar_up_container = 0x7f040001; + public static final int abc_action_bar_view_list_nav_layout = 0x7f040002; + public static final int abc_action_menu_item_layout = 0x7f040003; + public static final int abc_action_menu_layout = 0x7f040004; + public static final int abc_action_mode_bar = 0x7f040005; + public static final int abc_action_mode_close_item_material = 0x7f040006; + public static final int abc_activity_chooser_view = 0x7f040007; + public static final int abc_activity_chooser_view_list_item = 0x7f040008; + public static final int abc_alert_dialog_button_bar_material = 0x7f040009; + public static final int abc_alert_dialog_material = 0x7f04000a; + public static final int abc_alert_dialog_title_material = 0x7f04000b; + public static final int abc_dialog_title_material = 0x7f04000c; + public static final int abc_expanded_menu_layout = 0x7f04000d; + public static final int abc_list_menu_item_checkbox = 0x7f04000e; + public static final int abc_list_menu_item_icon = 0x7f04000f; + public static final int abc_list_menu_item_layout = 0x7f040010; + public static final int abc_list_menu_item_radio = 0x7f040011; + public static final int abc_popup_menu_header_item_layout = 0x7f040012; + public static final int abc_popup_menu_item_layout = 0x7f040013; + public static final int abc_screen_content_include = 0x7f040014; + public static final int abc_screen_simple = 0x7f040015; + public static final int abc_screen_simple_overlay_action_mode = 0x7f040016; + public static final int abc_screen_toolbar = 0x7f040017; + public static final int abc_search_dropdown_item_icons_2line = 0x7f040018; + public static final int abc_search_view = 0x7f040019; + public static final int abc_select_dialog_material = 0x7f04001a; + public static final int actionbar_setting = 0x7f04001b; + public static final int activity_about_about = 0x7f04001c; + public static final int activity_about_product = 0x7f04001d; + public static final int activity_main = 0x7f04001e; + public static final int activity_media = 0x7f04001f; + public static final int activity_media_single = 0x7f040020; + public static final int activity_setting = 0x7f040021; + public static final int activity_store = 0x7f040022; + public static final int activity_support = 0x7f040023; + public static final int design_bottom_navigation_item = 0x7f040024; + public static final int design_bottom_sheet_dialog = 0x7f040025; + public static final int design_layout_snackbar = 0x7f040026; + public static final int design_layout_snackbar_include = 0x7f040027; + public static final int design_layout_tab_icon = 0x7f040028; + public static final int design_layout_tab_text = 0x7f040029; + public static final int design_menu_item_action_area = 0x7f04002a; + public static final int design_navigation_item = 0x7f04002b; + public static final int design_navigation_item_header = 0x7f04002c; + public static final int design_navigation_item_separator = 0x7f04002d; + public static final int design_navigation_item_subheader = 0x7f04002e; + public static final int design_navigation_menu = 0x7f04002f; + public static final int design_navigation_menu_item = 0x7f040030; + public static final int design_text_input_password_icon = 0x7f040031; + public static final int dialog_fragment_media_info = 0x7f040032; + public static final int dialog_fragment_mode = 0x7f040033; + public static final int dialog_fragment_option = 0x7f040034; + public static final int dialog_fragment_palette = 0x7f040035; + public static final int dialog_fragment_query_delete_media = 0x7f040036; + public static final int dialog_fragment_query_open_laser = 0x7f040037; + public static final int dialog_fragment_setting = 0x7f040038; + public static final int fragment_main_bottom = 0x7f040039; + public static final int fragment_main_center = 0x7f04003a; + public static final int fragment_main_top = 0x7f04003b; + public static final int fragment_media = 0x7f04003c; + public static final int fragment_setting = 0x7f04003d; + public static final int fragment_support = 0x7f04003e; + public static final int fragment_support_about = 0x7f04003f; + public static final int fragment_support_help = 0x7f040040; + public static final int include_icon_text_item = 0x7f040041; + public static final int include_item_menu = 0x7f040042; + public static final int include_media_info_item = 0x7f040043; + public static final int include_media_single = 0x7f040044; + public static final int include_palette_item = 0x7f040045; + public static final int include_setting_item = 0x7f040046; + public static final int include_setting_subheader = 0x7f040047; + public static final int include_textview_textview = 0x7f040048; + public static final int item_gridview = 0x7f040049; + public static final int layout_test = 0x7f04004a; + public static final int notification_action = 0x7f04004b; + public static final int notification_action_tombstone = 0x7f04004c; + public static final int notification_media_action = 0x7f04004d; + public static final int notification_media_cancel_action = 0x7f04004e; + public static final int notification_template_big_media = 0x7f04004f; + public static final int notification_template_big_media_custom = 0x7f040050; + public static final int notification_template_big_media_narrow = 0x7f040051; + public static final int notification_template_big_media_narrow_custom = 0x7f040052; + public static final int notification_template_custom_big = 0x7f040053; + public static final int notification_template_icon_group = 0x7f040054; + public static final int notification_template_lines_media = 0x7f040055; + public static final int notification_template_media = 0x7f040056; + public static final int notification_template_media_custom = 0x7f040057; + public static final int notification_template_part_chronometer = 0x7f040058; + public static final int notification_template_part_time = 0x7f040059; + public static final int popup_window_more = 0x7f04005a; + public static final int select_dialog_item_material = 0x7f04005b; + public static final int select_dialog_multichoice_material = 0x7f04005c; + public static final int select_dialog_singlechoice_material = 0x7f04005d; + public static final int support_simple_spinner_dropdown_item = 0x7f04005e; + } + + public static final class menu { + public static final int about_menu = 0x7f0f0000; + public static final int meida_single_menu = 0x7f0f0001; + } + + public static final class mipmap { + public static final int about = 0x7f030000; + public static final int action_media_expand = 0x7f030001; + public static final int barcode = 0x7f030002; + public static final int cancel = 0x7f030003; + public static final int center_cross_off = 0x7f030004; + public static final int center_cross_on = 0x7f030005; + public static final int cross = 0x7f030006; + public static final int cross_capture = 0x7f030007; + public static final int dev_unconnected = 0x7f030008; + public static final int disp_mode_ironly = 0x7f030009; + public static final int disp_mode_pip = 0x7f03000a; + public static final int empty_photo = 0x7f03000b; + public static final int expand_more = 0x7f03000c; + public static final int goback = 0x7f03000d; + public static final int help = 0x7f03000e; + public static final int horizontal_divider = 0x7f03000f; + public static final int ic_launcher = 0x7f030010; + public static final int item_selected = 0x7f030011; + public static final int item_unselected = 0x7f030012; + public static final int laser = 0x7f030013; + public static final int laser_capture = 0x7f030014; + public static final int laser_off = 0x7f030015; + public static final int laser_on = 0x7f030016; + public static final int logo = 0x7f030017; + public static final int max_trace = 0x7f030018; + public static final int max_trace_capture = 0x7f030019; + public static final int media_cancel_sel_mode = 0x7f03001a; + public static final int media_selected = 0x7f03001b; + public static final int media_unselected = 0x7f03001c; + public static final int media_video_play_logo = 0x7f03001d; + public static final int media_video_play_press = 0x7f03001e; + public static final int min_trace = 0x7f03001f; + public static final int min_trace_capture = 0x7f030020; + public static final int mode_ir = 0x7f030021; + public static final int mode_pip = 0x7f030022; + public static final int mode_selector_point = 0x7f030023; + public static final int moving_cross = 0x7f030024; + public static final int palette_autumn = 0x7f030025; + public static final int palette_black_hot = 0x7f030026; + public static final int palette_glow_bow = 0x7f030027; + public static final int palette_high_contrast = 0x7f030028; + public static final int palette_hot_metal = 0x7f030029; + public static final int palette_iron_bow = 0x7f03002a; + public static final int palette_jet = 0x7f03002b; + public static final int palette_rain_bow = 0x7f03002c; + public static final int palette_red_hot = 0x7f03002d; + public static final int palette_red_saturation = 0x7f03002e; + public static final int palette_white_hot = 0x7f03002f; + public static final int palette_winter = 0x7f030030; + public static final int product_info = 0x7f030031; + public static final int recording_finished = 0x7f030032; + public static final int recording_normal = 0x7f030033; + public static final int recording_point = 0x7f030034; + public static final int setting_normal = 0x7f030035; + public static final int setting_press = 0x7f030036; + public static final int settings = 0x7f030037; + public static final int thumb_video = 0x7f030038; + public static final int titile_divider = 0x7f030039; + public static final int trace_max_min_off = 0x7f03003a; + public static final int trace_max_min_on = 0x7f03003b; + public static final int water_mark = 0x7f03003c; + public static final int zoom_1x = 0x7f03003d; + public static final int zoom_2x = 0x7f03003e; + public static final int zoom_4x = 0x7f03003f; + } + + public static final class string { + public static final int abc_action_bar_home_description = 0x7f080000; + public static final int abc_action_bar_home_description_format = 0x7f080001; + public static final int abc_action_bar_home_subtitle_description_format = 0x7f080002; + public static final int abc_action_bar_up_description = 0x7f080003; + public static final int abc_action_menu_overflow_description = 0x7f080004; + public static final int abc_action_mode_done = 0x7f080005; + public static final int abc_activity_chooser_view_see_all = 0x7f080006; + public static final int abc_activitychooserview_choose_application = 0x7f080007; + public static final int abc_capital_off = 0x7f080008; + public static final int abc_capital_on = 0x7f080009; + public static final int abc_font_family_body_1_material = 0x7f080087; + public static final int abc_font_family_body_2_material = 0x7f080088; + public static final int abc_font_family_button_material = 0x7f080089; + public static final int abc_font_family_caption_material = 0x7f08008a; + public static final int abc_font_family_display_1_material = 0x7f08008b; + public static final int abc_font_family_display_2_material = 0x7f08008c; + public static final int abc_font_family_display_3_material = 0x7f08008d; + public static final int abc_font_family_display_4_material = 0x7f08008e; + public static final int abc_font_family_headline_material = 0x7f08008f; + public static final int abc_font_family_menu_material = 0x7f080090; + public static final int abc_font_family_subhead_material = 0x7f080091; + public static final int abc_font_family_title_material = 0x7f080092; + public static final int abc_search_hint = 0x7f08000a; + public static final int abc_searchview_description_clear = 0x7f08000b; + public static final int abc_searchview_description_query = 0x7f08000c; + public static final int abc_searchview_description_search = 0x7f08000d; + public static final int abc_searchview_description_submit = 0x7f08000e; + public static final int abc_searchview_description_voice = 0x7f08000f; + public static final int abc_shareactionprovider_share_with = 0x7f080010; + public static final int abc_shareactionprovider_share_with_application = 0x7f080011; + public static final int abc_toolbar_collapse_description = 0x7f080012; + public static final int appTitle = 0x7f080015; + public static final int app_name = 0x7f080016; + public static final int appbar_scrolling_view_behavior = 0x7f080093; + public static final int barcodeDescription = 0x7f080017; + public static final int bottom_sheet_behavior = 0x7f080094; + public static final int c1 = 0x7f080018; + public static final int c1pro = 0x7f080019; + public static final int c1prolite = 0x7f08001a; + public static final int c3 = 0x7f08001b; + public static final int c3p = 0x7f08001c; + public static final int character_counter_pattern = 0x7f080095; + public static final int checkUpgradeError = 0x7f08001d; + public static final int company = 0x7f08001e; + public static final int core160 = 0x7f08001f; + public static final int deleteMediaYesOrNo = 0x7f080020; + public static final int fileDeleted = 0x7f080021; + public static final int fwVersion = 0x7f080022; + public static final int hwVersion = 0x7f080023; + public static final int juge = 0x7f080024; + public static final int labelAbout = 0x7f080025; + public static final int labelCancel = 0x7f080026; + public static final int labelDelete = 0x7f080027; + public static final int labelHelp = 0x7f080028; + public static final int labelOK = 0x7f080029; + public static final int labelPhotoMode = 0x7f08002a; + public static final int labelProductInfo = 0x7f08002b; + public static final int labelRecordMode = 0x7f08002c; + public static final int labelSetting = 0x7f08002d; + public static final int labelUpgrade = 0x7f08002e; + public static final int mediaDelete = 0x7f08002f; + public static final int mediaHouse = 0x7f080030; + public static final int mediaInfo = 0x7f080031; + public static final int mediaInfoDuration = 0x7f080032; + public static final int mediaInfoName = 0x7f080033; + public static final int mediaInfoPath = 0x7f080034; + public static final int mediaInfoResolution = 0x7f080035; + public static final int mediaInfoSize = 0x7f080036; + public static final int mediaInfoTime = 0x7f080037; + public static final int mediaSelectAll = 0x7f080038; + public static final int mediaSelectedNum = 0x7f080039; + public static final int mediaSocialShare = 0x7f08003a; + public static final int mediaTile = 0x7f08003b; + public static final int mediaTitle = 0x7f08003c; + public static final int mediaUnselectAll = 0x7f08003d; + public static final int menu_read_barcode = 0x7f08003e; + public static final int menu_share_barcode = 0x7f08003f; + public static final int onceTipMediaLongClick = 0x7f080040; + public static final int onceTipVisibleMove = 0x7f080041; + public static final int openLaserYesOrNo = 0x7f080042; + public static final int paletteAutumn = 0x7f080043; + public static final int paletteBlackHot = 0x7f080044; + public static final int paletteGlowBow = 0x7f080045; + public static final int paletteHighContrast = 0x7f080046; + public static final int paletteHotMetal = 0x7f080047; + public static final int paletteIronBow = 0x7f080048; + public static final int paletteJet = 0x7f080049; + public static final int paletteRainBow = 0x7f08004a; + public static final int paletteRedSaturation = 0x7f08004b; + public static final int paletteRedhot = 0x7f08004c; + public static final int paletteWhiteHot = 0x7f08004d; + public static final int paletteWinter = 0x7f08004e; + public static final int password_toggle_content_description = 0x7f080096; + public static final int path_password_eye = 0x7f080097; + public static final int path_password_eye_mask_strike_through = 0x7f080098; + public static final int path_password_eye_mask_visible = 0x7f080099; + public static final int path_password_strike_through = 0x7f08009a; + public static final int productType = 0x7f08004f; + public static final int remote_url = 0x7f080050; + public static final int right = 0x7f080051; + public static final int search_menu_title = 0x7f080013; + public static final int settingsAbout = 0x7f080052; + public static final int settingsAboutAbout = 0x7f080053; + public static final int settingsAboutProduct = 0x7f080054; + public static final int settingsEM1 = 0x7f080055; + public static final int settingsEM2 = 0x7f080056; + public static final int settingsEM3 = 0x7f080057; + public static final int settingsEM4 = 0x7f080058; + public static final int settingsEX1 = 0x7f080059; + public static final int settingsEX16 = 0x7f08005a; + public static final int settingsEX2 = 0x7f08005b; + public static final int settingsEX4 = 0x7f08005c; + public static final int settingsEX8 = 0x7f08005d; + public static final int settingsEmissivity = 0x7f08005e; + public static final int settingsFps = 0x7f08005f; + public static final int settingsFpsHigh = 0x7f080060; + public static final int settingsFpsLow = 0x7f080061; + public static final int settingsFpsTip = 0x7f080062; + public static final int settingsImageEX = 0x7f080063; + public static final int settingsImageFlip = 0x7f080064; + public static final int settingsImageFlipHor = 0x7f080065; + public static final int settingsImageFlipVer = 0x7f080066; + public static final int settingsMaxMinTrace = 0x7f080067; + public static final int settingsMaxTrace = 0x7f080068; + public static final int settingsMinTrace = 0x7f080069; + public static final int settingsMovingCross = 0x7f08006a; + public static final int settingsMovingCrossOn = 0x7f08006b; + public static final int settingsNoneTrace = 0x7f08006c; + public static final int settingsTempTrace = 0x7f08006d; + public static final int settingsTemperature = 0x7f08006e; + public static final int settingsTraceROI = 0x7f08006f; + public static final int settingsTraceTarget = 0x7f080070; + public static final int settingsVisible = 0x7f080071; + public static final int settingsVisibleSize = 0x7f080072; + public static final int settingsVisibleSizeLarge = 0x7f080073; + public static final int settingsVisibleSizeMedium = 0x7f080074; + public static final int settingsVisibleSizeSmall = 0x7f080075; + public static final int status_bar_notification_info_overflow = 0x7f080014; + public static final int swVersion = 0x7f080076; + public static final int tempTraceOptionText = 0x7f080077; + public static final int tipForDeviceInit = 0x7f080078; + public static final int tipForExitApp = 0x7f080079; + public static final int tipForFail = 0x7f08007a; + public static final int tipForNewMobile = 0x7f08007b; + public static final int tipTraceRoi = 0x7f08007c; + public static final int tip_barcode_fail = 0x7f08007d; + public static final int tip_goto_store = 0x7f08007e; + public static final int title_activity_custom_scan = 0x7f08007f; + public static final int title_activity_store = 0x7f080080; + public static final int unknownProductType = 0x7f080081; + public static final int upgrade = 0x7f080082; + public static final int upgradeError = 0x7f080083; + public static final int upgradeID = 0x7f080084; + public static final int upgrading = 0x7f080085; + public static final int visibleSizeOptionText = 0x7f080086; + } + + public static final class style { + public static final int AlertDialog_AppCompat = 0x7f0a00a2; + public static final int AlertDialog_AppCompat_Light = 0x7f0a00a3; + public static final int Animation_AppCompat_Dialog = 0x7f0a00a4; + public static final int Animation_AppCompat_DropDownUp = 0x7f0a00a5; + public static final int Animation_Design_BottomSheetDialog = 0x7f0a00a6; + public static final int AppTheme = 0x7f0a00a7; + public static final int AppTheme_AppBarOverlay = 0x7f0a00a8; + public static final int AppTheme_NoActionBar = 0x7f0a0040; + public static final int AppTheme_PopupOverlay = 0x7f0a00a9; + public static final int Base_AlertDialog_AppCompat = 0x7f0a00aa; + public static final int Base_AlertDialog_AppCompat_Light = 0x7f0a00ab; + public static final int Base_Animation_AppCompat_Dialog = 0x7f0a00ac; + public static final int Base_Animation_AppCompat_DropDownUp = 0x7f0a00ad; + public static final int Base_DialogWindowTitleBackground_AppCompat = 0x7f0a00af; + public static final int Base_DialogWindowTitle_AppCompat = 0x7f0a00ae; + public static final int Base_TextAppearance_AppCompat = 0x7f0a0041; + public static final int Base_TextAppearance_AppCompat_Body1 = 0x7f0a0042; + public static final int Base_TextAppearance_AppCompat_Body2 = 0x7f0a0043; + public static final int Base_TextAppearance_AppCompat_Button = 0x7f0a0028; + public static final int Base_TextAppearance_AppCompat_Caption = 0x7f0a0044; + public static final int Base_TextAppearance_AppCompat_Display1 = 0x7f0a0045; + public static final int Base_TextAppearance_AppCompat_Display2 = 0x7f0a0046; + public static final int Base_TextAppearance_AppCompat_Display3 = 0x7f0a0047; + public static final int Base_TextAppearance_AppCompat_Display4 = 0x7f0a0048; + public static final int Base_TextAppearance_AppCompat_Headline = 0x7f0a0049; + public static final int Base_TextAppearance_AppCompat_Inverse = 0x7f0a000c; + public static final int Base_TextAppearance_AppCompat_Large = 0x7f0a004a; + public static final int Base_TextAppearance_AppCompat_Large_Inverse = 0x7f0a000d; + public static final int Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = 0x7f0a004b; + public static final int Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = 0x7f0a004c; + public static final int Base_TextAppearance_AppCompat_Medium = 0x7f0a004d; + public static final int Base_TextAppearance_AppCompat_Medium_Inverse = 0x7f0a000e; + public static final int Base_TextAppearance_AppCompat_Menu = 0x7f0a004e; + public static final int Base_TextAppearance_AppCompat_SearchResult = 0x7f0a00b0; + public static final int Base_TextAppearance_AppCompat_SearchResult_Subtitle = 0x7f0a004f; + public static final int Base_TextAppearance_AppCompat_SearchResult_Title = 0x7f0a0050; + public static final int Base_TextAppearance_AppCompat_Small = 0x7f0a0051; + public static final int Base_TextAppearance_AppCompat_Small_Inverse = 0x7f0a000f; + public static final int Base_TextAppearance_AppCompat_Subhead = 0x7f0a0052; + public static final int Base_TextAppearance_AppCompat_Subhead_Inverse = 0x7f0a0010; + public static final int Base_TextAppearance_AppCompat_Title = 0x7f0a0053; + public static final int Base_TextAppearance_AppCompat_Title_Inverse = 0x7f0a0011; + public static final int Base_TextAppearance_AppCompat_Widget_ActionBar_Menu = 0x7f0a0097; + public static final int Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle = 0x7f0a0054; + public static final int Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = 0x7f0a0055; + public static final int Base_TextAppearance_AppCompat_Widget_ActionBar_Title = 0x7f0a0056; + public static final int Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = 0x7f0a0057; + public static final int Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle = 0x7f0a0058; + public static final int Base_TextAppearance_AppCompat_Widget_ActionMode_Title = 0x7f0a0059; + public static final int Base_TextAppearance_AppCompat_Widget_Button = 0x7f0a005a; + public static final int Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored = 0x7f0a009e; + public static final int Base_TextAppearance_AppCompat_Widget_Button_Colored = 0x7f0a009f; + public static final int Base_TextAppearance_AppCompat_Widget_Button_Inverse = 0x7f0a0098; + public static final int Base_TextAppearance_AppCompat_Widget_DropDownItem = 0x7f0a00b1; + public static final int Base_TextAppearance_AppCompat_Widget_PopupMenu_Header = 0x7f0a005b; + public static final int Base_TextAppearance_AppCompat_Widget_PopupMenu_Large = 0x7f0a005c; + public static final int Base_TextAppearance_AppCompat_Widget_PopupMenu_Small = 0x7f0a005d; + public static final int Base_TextAppearance_AppCompat_Widget_Switch = 0x7f0a005e; + public static final int Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem = 0x7f0a005f; + public static final int Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item = 0x7f0a00b2; + public static final int Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle = 0x7f0a0060; + public static final int Base_TextAppearance_Widget_AppCompat_Toolbar_Title = 0x7f0a0061; + public static final int Base_ThemeOverlay_AppCompat = 0x7f0a00b7; + public static final int Base_ThemeOverlay_AppCompat_ActionBar = 0x7f0a00b8; + public static final int Base_ThemeOverlay_AppCompat_Dark = 0x7f0a00b9; + public static final int Base_ThemeOverlay_AppCompat_Dark_ActionBar = 0x7f0a00ba; + public static final int Base_ThemeOverlay_AppCompat_Dialog = 0x7f0a0018; + public static final int Base_ThemeOverlay_AppCompat_Dialog_Alert = 0x7f0a0019; + public static final int Base_ThemeOverlay_AppCompat_Light = 0x7f0a00bb; + public static final int Base_Theme_AppCompat = 0x7f0a0062; + public static final int Base_Theme_AppCompat_CompactMenu = 0x7f0a00b3; + public static final int Base_Theme_AppCompat_Dialog = 0x7f0a0012; + public static final int Base_Theme_AppCompat_DialogWhenLarge = 0x7f0a0002; + public static final int Base_Theme_AppCompat_Dialog_Alert = 0x7f0a0013; + public static final int Base_Theme_AppCompat_Dialog_FixedSize = 0x7f0a00b4; + public static final int Base_Theme_AppCompat_Dialog_MinWidth = 0x7f0a0014; + public static final int Base_Theme_AppCompat_Light = 0x7f0a0063; + public static final int Base_Theme_AppCompat_Light_DarkActionBar = 0x7f0a00b5; + public static final int Base_Theme_AppCompat_Light_Dialog = 0x7f0a0015; + public static final int Base_Theme_AppCompat_Light_DialogWhenLarge = 0x7f0a0003; + public static final int Base_Theme_AppCompat_Light_Dialog_Alert = 0x7f0a0016; + public static final int Base_Theme_AppCompat_Light_Dialog_FixedSize = 0x7f0a00b6; + public static final int Base_Theme_AppCompat_Light_Dialog_MinWidth = 0x7f0a0017; + public static final int Base_V11_ThemeOverlay_AppCompat_Dialog = 0x7f0a001c; + public static final int Base_V11_Theme_AppCompat_Dialog = 0x7f0a001a; + public static final int Base_V11_Theme_AppCompat_Light_Dialog = 0x7f0a001b; + public static final int Base_V12_Widget_AppCompat_AutoCompleteTextView = 0x7f0a0024; + public static final int Base_V12_Widget_AppCompat_EditText = 0x7f0a0025; + public static final int Base_V21_ThemeOverlay_AppCompat_Dialog = 0x7f0a0068; + public static final int Base_V21_Theme_AppCompat = 0x7f0a0064; + public static final int Base_V21_Theme_AppCompat_Dialog = 0x7f0a0065; + public static final int Base_V21_Theme_AppCompat_Light = 0x7f0a0066; + public static final int Base_V21_Theme_AppCompat_Light_Dialog = 0x7f0a0067; + public static final int Base_V22_Theme_AppCompat = 0x7f0a0095; + public static final int Base_V22_Theme_AppCompat_Light = 0x7f0a0096; + public static final int Base_V23_Theme_AppCompat = 0x7f0a0099; + public static final int Base_V23_Theme_AppCompat_Light = 0x7f0a009a; + public static final int Base_V7_ThemeOverlay_AppCompat_Dialog = 0x7f0a00c0; + public static final int Base_V7_Theme_AppCompat = 0x7f0a00bc; + public static final int Base_V7_Theme_AppCompat_Dialog = 0x7f0a00bd; + public static final int Base_V7_Theme_AppCompat_Light = 0x7f0a00be; + public static final int Base_V7_Theme_AppCompat_Light_Dialog = 0x7f0a00bf; + public static final int Base_V7_Widget_AppCompat_AutoCompleteTextView = 0x7f0a00c1; + public static final int Base_V7_Widget_AppCompat_EditText = 0x7f0a00c2; + public static final int Base_Widget_AppCompat_ActionBar = 0x7f0a00c3; + public static final int Base_Widget_AppCompat_ActionBar_Solid = 0x7f0a00c4; + public static final int Base_Widget_AppCompat_ActionBar_TabBar = 0x7f0a00c5; + public static final int Base_Widget_AppCompat_ActionBar_TabText = 0x7f0a0069; + public static final int Base_Widget_AppCompat_ActionBar_TabView = 0x7f0a006a; + public static final int Base_Widget_AppCompat_ActionButton = 0x7f0a006b; + public static final int Base_Widget_AppCompat_ActionButton_CloseMode = 0x7f0a006c; + public static final int Base_Widget_AppCompat_ActionButton_Overflow = 0x7f0a006d; + public static final int Base_Widget_AppCompat_ActionMode = 0x7f0a00c6; + public static final int Base_Widget_AppCompat_ActivityChooserView = 0x7f0a00c7; + public static final int Base_Widget_AppCompat_AutoCompleteTextView = 0x7f0a0026; + public static final int Base_Widget_AppCompat_Button = 0x7f0a006e; + public static final int Base_Widget_AppCompat_ButtonBar = 0x7f0a0072; + public static final int Base_Widget_AppCompat_ButtonBar_AlertDialog = 0x7f0a00c9; + public static final int Base_Widget_AppCompat_Button_Borderless = 0x7f0a006f; + public static final int Base_Widget_AppCompat_Button_Borderless_Colored = 0x7f0a0070; + public static final int Base_Widget_AppCompat_Button_ButtonBar_AlertDialog = 0x7f0a00c8; + public static final int Base_Widget_AppCompat_Button_Colored = 0x7f0a009b; + public static final int Base_Widget_AppCompat_Button_Small = 0x7f0a0071; + public static final int Base_Widget_AppCompat_CompoundButton_CheckBox = 0x7f0a0073; + public static final int Base_Widget_AppCompat_CompoundButton_RadioButton = 0x7f0a0074; + public static final int Base_Widget_AppCompat_CompoundButton_Switch = 0x7f0a00ca; + public static final int Base_Widget_AppCompat_DrawerArrowToggle = 0x7f0a0000; + public static final int Base_Widget_AppCompat_DrawerArrowToggle_Common = 0x7f0a00cb; + public static final int Base_Widget_AppCompat_DropDownItem_Spinner = 0x7f0a0075; + public static final int Base_Widget_AppCompat_EditText = 0x7f0a0027; + public static final int Base_Widget_AppCompat_ImageButton = 0x7f0a0076; + public static final int Base_Widget_AppCompat_Light_ActionBar = 0x7f0a00cc; + public static final int Base_Widget_AppCompat_Light_ActionBar_Solid = 0x7f0a00cd; + public static final int Base_Widget_AppCompat_Light_ActionBar_TabBar = 0x7f0a00ce; + public static final int Base_Widget_AppCompat_Light_ActionBar_TabText = 0x7f0a0077; + public static final int Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse = 0x7f0a0078; + public static final int Base_Widget_AppCompat_Light_ActionBar_TabView = 0x7f0a0079; + public static final int Base_Widget_AppCompat_Light_PopupMenu = 0x7f0a007a; + public static final int Base_Widget_AppCompat_Light_PopupMenu_Overflow = 0x7f0a007b; + public static final int Base_Widget_AppCompat_ListMenuView = 0x7f0a00cf; + public static final int Base_Widget_AppCompat_ListPopupWindow = 0x7f0a007c; + public static final int Base_Widget_AppCompat_ListView = 0x7f0a007d; + public static final int Base_Widget_AppCompat_ListView_DropDown = 0x7f0a007e; + public static final int Base_Widget_AppCompat_ListView_Menu = 0x7f0a007f; + public static final int Base_Widget_AppCompat_PopupMenu = 0x7f0a0080; + public static final int Base_Widget_AppCompat_PopupMenu_Overflow = 0x7f0a0081; + public static final int Base_Widget_AppCompat_PopupWindow = 0x7f0a00d0; + public static final int Base_Widget_AppCompat_ProgressBar = 0x7f0a001d; + public static final int Base_Widget_AppCompat_ProgressBar_Horizontal = 0x7f0a001e; + public static final int Base_Widget_AppCompat_RatingBar = 0x7f0a0082; + public static final int Base_Widget_AppCompat_RatingBar_Indicator = 0x7f0a009c; + public static final int Base_Widget_AppCompat_RatingBar_Small = 0x7f0a009d; + public static final int Base_Widget_AppCompat_SearchView = 0x7f0a00d1; + public static final int Base_Widget_AppCompat_SearchView_ActionBar = 0x7f0a00d2; + public static final int Base_Widget_AppCompat_SeekBar = 0x7f0a0083; + public static final int Base_Widget_AppCompat_SeekBar_Discrete = 0x7f0a00d3; + public static final int Base_Widget_AppCompat_Spinner = 0x7f0a0084; + public static final int Base_Widget_AppCompat_Spinner_Underlined = 0x7f0a0004; + public static final int Base_Widget_AppCompat_TextView_SpinnerItem = 0x7f0a0085; + public static final int Base_Widget_AppCompat_Toolbar = 0x7f0a00d4; + public static final int Base_Widget_AppCompat_Toolbar_Button_Navigation = 0x7f0a0086; + public static final int Base_Widget_Design_AppBarLayout = 0x7f0a00d5; + public static final int Base_Widget_Design_TabLayout = 0x7f0a00d6; + public static final int LineDividerLine = 0x7f0a00d7; + public static final int Platform_AppCompat = 0x7f0a001f; + public static final int Platform_AppCompat_Light = 0x7f0a0020; + public static final int Platform_ThemeOverlay_AppCompat = 0x7f0a0087; + public static final int Platform_ThemeOverlay_AppCompat_Dark = 0x7f0a0088; + public static final int Platform_ThemeOverlay_AppCompat_Light = 0x7f0a0089; + public static final int Platform_V11_AppCompat = 0x7f0a0021; + public static final int Platform_V11_AppCompat_Light = 0x7f0a0022; + public static final int Platform_V14_AppCompat = 0x7f0a0029; + public static final int Platform_V14_AppCompat_Light = 0x7f0a002a; + public static final int Platform_V21_AppCompat = 0x7f0a008a; + public static final int Platform_V21_AppCompat_Light = 0x7f0a008b; + public static final int Platform_V25_AppCompat = 0x7f0a00a0; + public static final int Platform_V25_AppCompat_Light = 0x7f0a00a1; + public static final int Platform_Widget_AppCompat_Spinner = 0x7f0a0023; + public static final int PopupMenu = 0x7f0a00d8; + public static final int RtlOverlay_DialogWindowTitle_AppCompat = 0x7f0a0032; + public static final int RtlOverlay_Widget_AppCompat_ActionBar_TitleItem = 0x7f0a0033; + public static final int RtlOverlay_Widget_AppCompat_DialogTitle_Icon = 0x7f0a0034; + public static final int RtlOverlay_Widget_AppCompat_PopupMenuItem = 0x7f0a0035; + public static final int RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup = 0x7f0a0036; + public static final int RtlOverlay_Widget_AppCompat_PopupMenuItem_Text = 0x7f0a0037; + public static final int RtlOverlay_Widget_AppCompat_SearchView_MagIcon = 0x7f0a003d; + public static final int RtlOverlay_Widget_AppCompat_Search_DropDown = 0x7f0a0038; + public static final int RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 = 0x7f0a0039; + public static final int RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 = 0x7f0a003a; + public static final int RtlOverlay_Widget_AppCompat_Search_DropDown_Query = 0x7f0a003b; + public static final int RtlOverlay_Widget_AppCompat_Search_DropDown_Text = 0x7f0a003c; + public static final int RtlUnderlay_Widget_AppCompat_ActionButton = 0x7f0a003e; + public static final int RtlUnderlay_Widget_AppCompat_ActionButton_Overflow = 0x7f0a003f; + public static final int TextAppearance_AppCompat = 0x7f0a00d9; + public static final int TextAppearance_AppCompat_Body1 = 0x7f0a00da; + public static final int TextAppearance_AppCompat_Body2 = 0x7f0a00db; + public static final int TextAppearance_AppCompat_Button = 0x7f0a00dc; + public static final int TextAppearance_AppCompat_Caption = 0x7f0a00dd; + public static final int TextAppearance_AppCompat_Display1 = 0x7f0a00de; + public static final int TextAppearance_AppCompat_Display2 = 0x7f0a00df; + public static final int TextAppearance_AppCompat_Display3 = 0x7f0a00e0; + public static final int TextAppearance_AppCompat_Display4 = 0x7f0a00e1; + public static final int TextAppearance_AppCompat_Headline = 0x7f0a00e2; + public static final int TextAppearance_AppCompat_Inverse = 0x7f0a00e3; + public static final int TextAppearance_AppCompat_Large = 0x7f0a00e4; + public static final int TextAppearance_AppCompat_Large_Inverse = 0x7f0a00e5; + public static final int TextAppearance_AppCompat_Light_SearchResult_Subtitle = 0x7f0a00e6; + public static final int TextAppearance_AppCompat_Light_SearchResult_Title = 0x7f0a00e7; + public static final int TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = 0x7f0a00e8; + public static final int TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = 0x7f0a00e9; + public static final int TextAppearance_AppCompat_Medium = 0x7f0a00ea; + public static final int TextAppearance_AppCompat_Medium_Inverse = 0x7f0a00eb; + public static final int TextAppearance_AppCompat_Menu = 0x7f0a00ec; + public static final int TextAppearance_AppCompat_Notification = 0x7f0a002b; + public static final int TextAppearance_AppCompat_Notification_Info = 0x7f0a008c; + public static final int TextAppearance_AppCompat_Notification_Info_Media = 0x7f0a008d; + public static final int TextAppearance_AppCompat_Notification_Line2 = 0x7f0a00ed; + public static final int TextAppearance_AppCompat_Notification_Line2_Media = 0x7f0a00ee; + public static final int TextAppearance_AppCompat_Notification_Media = 0x7f0a008e; + public static final int TextAppearance_AppCompat_Notification_Time = 0x7f0a008f; + public static final int TextAppearance_AppCompat_Notification_Time_Media = 0x7f0a0090; + public static final int TextAppearance_AppCompat_Notification_Title = 0x7f0a002c; + public static final int TextAppearance_AppCompat_Notification_Title_Media = 0x7f0a0091; + public static final int TextAppearance_AppCompat_SearchResult_Subtitle = 0x7f0a00ef; + public static final int TextAppearance_AppCompat_SearchResult_Title = 0x7f0a00f0; + public static final int TextAppearance_AppCompat_Small = 0x7f0a00f1; + public static final int TextAppearance_AppCompat_Small_Inverse = 0x7f0a00f2; + public static final int TextAppearance_AppCompat_Subhead = 0x7f0a00f3; + public static final int TextAppearance_AppCompat_Subhead_Inverse = 0x7f0a00f4; + public static final int TextAppearance_AppCompat_Title = 0x7f0a00f5; + public static final int TextAppearance_AppCompat_Title_Inverse = 0x7f0a00f6; + public static final int TextAppearance_AppCompat_Widget_ActionBar_Menu = 0x7f0a00f7; + public static final int TextAppearance_AppCompat_Widget_ActionBar_Subtitle = 0x7f0a00f8; + public static final int TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = 0x7f0a00f9; + public static final int TextAppearance_AppCompat_Widget_ActionBar_Title = 0x7f0a00fa; + public static final int TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = 0x7f0a00fb; + public static final int TextAppearance_AppCompat_Widget_ActionMode_Subtitle = 0x7f0a00fc; + public static final int TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse = 0x7f0a00fd; + public static final int TextAppearance_AppCompat_Widget_ActionMode_Title = 0x7f0a00fe; + public static final int TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse = 0x7f0a00ff; + public static final int TextAppearance_AppCompat_Widget_Button = 0x7f0a0100; + public static final int TextAppearance_AppCompat_Widget_Button_Borderless_Colored = 0x7f0a0101; + public static final int TextAppearance_AppCompat_Widget_Button_Colored = 0x7f0a0102; + public static final int TextAppearance_AppCompat_Widget_Button_Inverse = 0x7f0a0103; + public static final int TextAppearance_AppCompat_Widget_DropDownItem = 0x7f0a0104; + public static final int TextAppearance_AppCompat_Widget_PopupMenu_Header = 0x7f0a0105; + public static final int TextAppearance_AppCompat_Widget_PopupMenu_Large = 0x7f0a0106; + public static final int TextAppearance_AppCompat_Widget_PopupMenu_Small = 0x7f0a0107; + public static final int TextAppearance_AppCompat_Widget_Switch = 0x7f0a0108; + public static final int TextAppearance_AppCompat_Widget_TextView_SpinnerItem = 0x7f0a0109; + public static final int TextAppearance_Design_CollapsingToolbar_Expanded = 0x7f0a010a; + public static final int TextAppearance_Design_Counter = 0x7f0a010b; + public static final int TextAppearance_Design_Counter_Overflow = 0x7f0a010c; + public static final int TextAppearance_Design_Error = 0x7f0a010d; + public static final int TextAppearance_Design_Hint = 0x7f0a010e; + public static final int TextAppearance_Design_Snackbar_Message = 0x7f0a010f; + public static final int TextAppearance_Design_Tab = 0x7f0a0110; + public static final int TextAppearance_StatusBar_EventContent = 0x7f0a002d; + public static final int TextAppearance_StatusBar_EventContent_Info = 0x7f0a002e; + public static final int TextAppearance_StatusBar_EventContent_Line2 = 0x7f0a002f; + public static final int TextAppearance_StatusBar_EventContent_Time = 0x7f0a0030; + public static final int TextAppearance_StatusBar_EventContent_Title = 0x7f0a0031; + public static final int TextAppearance_Widget_AppCompat_ExpandedMenu_Item = 0x7f0a0111; + public static final int TextAppearance_Widget_AppCompat_Toolbar_Subtitle = 0x7f0a0112; + public static final int TextAppearance_Widget_AppCompat_Toolbar_Title = 0x7f0a0113; + public static final int ThemeDefault = 0x7f0a0128; + public static final int ThemeDialog = 0x7f0a0129; + public static final int ThemeFullScreen = 0x7f0a012a; + public static final int ThemeMain = 0x7f0a012b; + public static final int ThemeOverlay_AppCompat = 0x7f0a012c; + public static final int ThemeOverlay_AppCompat_ActionBar = 0x7f0a012d; + public static final int ThemeOverlay_AppCompat_Dark = 0x7f0a012e; + public static final int ThemeOverlay_AppCompat_Dark_ActionBar = 0x7f0a012f; + public static final int ThemeOverlay_AppCompat_Dialog = 0x7f0a0130; + public static final int ThemeOverlay_AppCompat_Dialog_Alert = 0x7f0a0131; + public static final int ThemeOverlay_AppCompat_Light = 0x7f0a0132; + public static final int Theme_AppCompat = 0x7f0a0114; + public static final int Theme_AppCompat_CompactMenu = 0x7f0a0115; + public static final int Theme_AppCompat_DayNight = 0x7f0a0005; + public static final int Theme_AppCompat_DayNight_DarkActionBar = 0x7f0a0006; + public static final int Theme_AppCompat_DayNight_Dialog = 0x7f0a0007; + public static final int Theme_AppCompat_DayNight_DialogWhenLarge = 0x7f0a000a; + public static final int Theme_AppCompat_DayNight_Dialog_Alert = 0x7f0a0008; + public static final int Theme_AppCompat_DayNight_Dialog_MinWidth = 0x7f0a0009; + public static final int Theme_AppCompat_DayNight_NoActionBar = 0x7f0a000b; + public static final int Theme_AppCompat_Dialog = 0x7f0a0116; + public static final int Theme_AppCompat_DialogWhenLarge = 0x7f0a0119; + public static final int Theme_AppCompat_Dialog_Alert = 0x7f0a0117; + public static final int Theme_AppCompat_Dialog_MinWidth = 0x7f0a0118; + public static final int Theme_AppCompat_Light = 0x7f0a011a; + public static final int Theme_AppCompat_Light_DarkActionBar = 0x7f0a011b; + public static final int Theme_AppCompat_Light_Dialog = 0x7f0a011c; + public static final int Theme_AppCompat_Light_DialogWhenLarge = 0x7f0a011f; + public static final int Theme_AppCompat_Light_Dialog_Alert = 0x7f0a011d; + public static final int Theme_AppCompat_Light_Dialog_MinWidth = 0x7f0a011e; + public static final int Theme_AppCompat_Light_NoActionBar = 0x7f0a0120; + public static final int Theme_AppCompat_NoActionBar = 0x7f0a0121; + public static final int Theme_Design = 0x7f0a0122; + public static final int Theme_Design_BottomSheetDialog = 0x7f0a0123; + public static final int Theme_Design_Light = 0x7f0a0124; + public static final int Theme_Design_Light_BottomSheetDialog = 0x7f0a0125; + public static final int Theme_Design_Light_NoActionBar = 0x7f0a0126; + public static final int Theme_Design_NoActionBar = 0x7f0a0127; + public static final int Widget_AppCompat_ActionBar = 0x7f0a0133; + public static final int Widget_AppCompat_ActionBar_Solid = 0x7f0a0134; + public static final int Widget_AppCompat_ActionBar_TabBar = 0x7f0a0135; + public static final int Widget_AppCompat_ActionBar_TabText = 0x7f0a0136; + public static final int Widget_AppCompat_ActionBar_TabView = 0x7f0a0137; + public static final int Widget_AppCompat_ActionButton = 0x7f0a0138; + public static final int Widget_AppCompat_ActionButton_CloseMode = 0x7f0a0139; + public static final int Widget_AppCompat_ActionButton_Overflow = 0x7f0a013a; + public static final int Widget_AppCompat_ActionMode = 0x7f0a013b; + public static final int Widget_AppCompat_ActivityChooserView = 0x7f0a013c; + public static final int Widget_AppCompat_AutoCompleteTextView = 0x7f0a013d; + public static final int Widget_AppCompat_Button = 0x7f0a013e; + public static final int Widget_AppCompat_ButtonBar = 0x7f0a0144; + public static final int Widget_AppCompat_ButtonBar_AlertDialog = 0x7f0a0145; + public static final int Widget_AppCompat_Button_Borderless = 0x7f0a013f; + public static final int Widget_AppCompat_Button_Borderless_Colored = 0x7f0a0140; + public static final int Widget_AppCompat_Button_ButtonBar_AlertDialog = 0x7f0a0141; + public static final int Widget_AppCompat_Button_Colored = 0x7f0a0142; + public static final int Widget_AppCompat_Button_Small = 0x7f0a0143; + public static final int Widget_AppCompat_CompoundButton_CheckBox = 0x7f0a0146; + public static final int Widget_AppCompat_CompoundButton_RadioButton = 0x7f0a0147; + public static final int Widget_AppCompat_CompoundButton_Switch = 0x7f0a0148; + public static final int Widget_AppCompat_DrawerArrowToggle = 0x7f0a0149; + public static final int Widget_AppCompat_DropDownItem_Spinner = 0x7f0a014a; + public static final int Widget_AppCompat_EditText = 0x7f0a014b; + public static final int Widget_AppCompat_ImageButton = 0x7f0a014c; + public static final int Widget_AppCompat_Light_ActionBar = 0x7f0a014d; + public static final int Widget_AppCompat_Light_ActionBar_Solid = 0x7f0a014e; + public static final int Widget_AppCompat_Light_ActionBar_Solid_Inverse = 0x7f0a014f; + public static final int Widget_AppCompat_Light_ActionBar_TabBar = 0x7f0a0150; + public static final int Widget_AppCompat_Light_ActionBar_TabBar_Inverse = 0x7f0a0151; + public static final int Widget_AppCompat_Light_ActionBar_TabText = 0x7f0a0152; + public static final int Widget_AppCompat_Light_ActionBar_TabText_Inverse = 0x7f0a0153; + public static final int Widget_AppCompat_Light_ActionBar_TabView = 0x7f0a0154; + public static final int Widget_AppCompat_Light_ActionBar_TabView_Inverse = 0x7f0a0155; + public static final int Widget_AppCompat_Light_ActionButton = 0x7f0a0156; + public static final int Widget_AppCompat_Light_ActionButton_CloseMode = 0x7f0a0157; + public static final int Widget_AppCompat_Light_ActionButton_Overflow = 0x7f0a0158; + public static final int Widget_AppCompat_Light_ActionMode_Inverse = 0x7f0a0159; + public static final int Widget_AppCompat_Light_ActivityChooserView = 0x7f0a015a; + public static final int Widget_AppCompat_Light_AutoCompleteTextView = 0x7f0a015b; + public static final int Widget_AppCompat_Light_DropDownItem_Spinner = 0x7f0a015c; + public static final int Widget_AppCompat_Light_ListPopupWindow = 0x7f0a015d; + public static final int Widget_AppCompat_Light_ListView_DropDown = 0x7f0a015e; + public static final int Widget_AppCompat_Light_PopupMenu = 0x7f0a015f; + public static final int Widget_AppCompat_Light_PopupMenu_Overflow = 0x7f0a0160; + public static final int Widget_AppCompat_Light_SearchView = 0x7f0a0161; + public static final int Widget_AppCompat_Light_Spinner_DropDown_ActionBar = 0x7f0a0162; + public static final int Widget_AppCompat_ListMenuView = 0x7f0a0163; + public static final int Widget_AppCompat_ListPopupWindow = 0x7f0a0164; + public static final int Widget_AppCompat_ListView = 0x7f0a0165; + public static final int Widget_AppCompat_ListView_DropDown = 0x7f0a0166; + public static final int Widget_AppCompat_ListView_Menu = 0x7f0a0167; + public static final int Widget_AppCompat_NotificationActionContainer = 0x7f0a0092; + public static final int Widget_AppCompat_NotificationActionText = 0x7f0a0093; + public static final int Widget_AppCompat_PopupMenu = 0x7f0a0168; + public static final int Widget_AppCompat_PopupMenu_Overflow = 0x7f0a0169; + public static final int Widget_AppCompat_PopupWindow = 0x7f0a016a; + public static final int Widget_AppCompat_ProgressBar = 0x7f0a016b; + public static final int Widget_AppCompat_ProgressBar_Horizontal = 0x7f0a016c; + public static final int Widget_AppCompat_RatingBar = 0x7f0a016d; + public static final int Widget_AppCompat_RatingBar_Indicator = 0x7f0a016e; + public static final int Widget_AppCompat_RatingBar_Small = 0x7f0a016f; + public static final int Widget_AppCompat_SearchView = 0x7f0a0170; + public static final int Widget_AppCompat_SearchView_ActionBar = 0x7f0a0171; + public static final int Widget_AppCompat_SeekBar = 0x7f0a0172; + public static final int Widget_AppCompat_SeekBar_Discrete = 0x7f0a0173; + public static final int Widget_AppCompat_Spinner = 0x7f0a0174; + public static final int Widget_AppCompat_Spinner_DropDown = 0x7f0a0175; + public static final int Widget_AppCompat_Spinner_DropDown_ActionBar = 0x7f0a0176; + public static final int Widget_AppCompat_Spinner_Underlined = 0x7f0a0177; + public static final int Widget_AppCompat_TextView_SpinnerItem = 0x7f0a0178; + public static final int Widget_AppCompat_Toolbar = 0x7f0a0179; + public static final int Widget_AppCompat_Toolbar_Button_Navigation = 0x7f0a017a; + public static final int Widget_Design_AppBarLayout = 0x7f0a0094; + public static final int Widget_Design_BottomNavigationView = 0x7f0a017b; + public static final int Widget_Design_BottomSheet_Modal = 0x7f0a017c; + public static final int Widget_Design_CollapsingToolbar = 0x7f0a017d; + public static final int Widget_Design_CoordinatorLayout = 0x7f0a017e; + public static final int Widget_Design_FloatingActionButton = 0x7f0a017f; + public static final int Widget_Design_NavigationView = 0x7f0a0180; + public static final int Widget_Design_ScrimInsetsFrameLayout = 0x7f0a0181; + public static final int Widget_Design_Snackbar = 0x7f0a0182; + public static final int Widget_Design_TabLayout = 0x7f0a0001; + public static final int Widget_Design_TextInputLayout = 0x7f0a0183; + } + + public static final class styleable { + public static final int ActionBarLayout_android_layout_gravity = 0x00000000; + public static final int ActionBar_background = 0x0000000a; + public static final int ActionBar_backgroundSplit = 0x0000000c; + public static final int ActionBar_backgroundStacked = 0x0000000b; + public static final int ActionBar_contentInsetEnd = 0x00000015; + public static final int ActionBar_contentInsetEndWithActions = 0x00000019; + public static final int ActionBar_contentInsetLeft = 0x00000016; + public static final int ActionBar_contentInsetRight = 0x00000017; + public static final int ActionBar_contentInsetStart = 0x00000014; + public static final int ActionBar_contentInsetStartWithNavigation = 0x00000018; + public static final int ActionBar_customNavigationLayout = 0x0000000d; + public static final int ActionBar_displayOptions = 0x00000003; + public static final int ActionBar_divider = 0x00000009; + public static final int ActionBar_elevation = 0x0000001a; + public static final int ActionBar_height = 0x00000000; + public static final int ActionBar_hideOnContentScroll = 0x00000013; + public static final int ActionBar_homeAsUpIndicator = 0x0000001c; + public static final int ActionBar_homeLayout = 0x0000000e; + public static final int ActionBar_icon = 0x00000007; + public static final int ActionBar_indeterminateProgressStyle = 0x00000010; + public static final int ActionBar_itemPadding = 0x00000012; + public static final int ActionBar_logo = 0x00000008; + public static final int ActionBar_navigationMode = 0x00000002; + public static final int ActionBar_popupTheme = 0x0000001b; + public static final int ActionBar_progressBarPadding = 0x00000011; + public static final int ActionBar_progressBarStyle = 0x0000000f; + public static final int ActionBar_subtitle = 0x00000004; + public static final int ActionBar_subtitleTextStyle = 0x00000006; + public static final int ActionBar_title = 0x00000001; + public static final int ActionBar_titleTextStyle = 0x00000005; + public static final int ActionMenuItemView_android_minWidth = 0x00000000; + public static final int ActionMode_background = 0x00000003; + public static final int ActionMode_backgroundSplit = 0x00000004; + public static final int ActionMode_closeItemLayout = 0x00000005; + public static final int ActionMode_height = 0x00000000; + public static final int ActionMode_subtitleTextStyle = 0x00000002; + public static final int ActionMode_titleTextStyle = 0x00000001; + public static final int ActivityChooserView_expandActivityOverflowButtonDrawable = 0x00000001; + public static final int ActivityChooserView_initialActivityCount = 0x00000000; + public static final int AlertDialog_android_layout = 0x00000000; + public static final int AlertDialog_buttonPanelSideLayout = 0x00000001; + public static final int AlertDialog_listItemLayout = 0x00000005; + public static final int AlertDialog_listLayout = 0x00000002; + public static final int AlertDialog_multiChoiceItemLayout = 0x00000003; + public static final int AlertDialog_showTitle = 0x00000006; + public static final int AlertDialog_singleChoiceItemLayout = 0x00000004; + public static final int AppBarLayoutStates_state_collapsed = 0x00000000; + public static final int AppBarLayoutStates_state_collapsible = 0x00000001; + public static final int AppBarLayout_Layout_layout_scrollFlags = 0x00000000; + public static final int AppBarLayout_Layout_layout_scrollInterpolator = 0x00000001; + public static final int AppBarLayout_android_background = 0x00000000; + public static final int AppBarLayout_elevation = 0x00000001; + public static final int AppBarLayout_expanded = 0x00000002; + public static final int AppCompatImageView_android_src = 0x00000000; + public static final int AppCompatImageView_srcCompat = 0x00000001; + public static final int AppCompatSeekBar_android_thumb = 0x00000000; + public static final int AppCompatSeekBar_tickMark = 0x00000001; + public static final int AppCompatSeekBar_tickMarkTint = 0x00000002; + public static final int AppCompatSeekBar_tickMarkTintMode = 0x00000003; + public static final int AppCompatTextHelper_android_drawableBottom = 0x00000002; + public static final int AppCompatTextHelper_android_drawableEnd = 0x00000006; + public static final int AppCompatTextHelper_android_drawableLeft = 0x00000003; + public static final int AppCompatTextHelper_android_drawableRight = 0x00000004; + public static final int AppCompatTextHelper_android_drawableStart = 0x00000005; + public static final int AppCompatTextHelper_android_drawableTop = 0x00000001; + public static final int AppCompatTextHelper_android_textAppearance = 0x00000000; + public static final int AppCompatTextView_android_textAppearance = 0x00000000; + public static final int AppCompatTextView_textAllCaps = 0x00000001; + public static final int AppCompatTheme_actionBarDivider = 0x00000017; + public static final int AppCompatTheme_actionBarItemBackground = 0x00000018; + public static final int AppCompatTheme_actionBarPopupTheme = 0x00000011; + public static final int AppCompatTheme_actionBarSize = 0x00000016; + public static final int AppCompatTheme_actionBarSplitStyle = 0x00000013; + public static final int AppCompatTheme_actionBarStyle = 0x00000012; + public static final int AppCompatTheme_actionBarTabBarStyle = 0x0000000d; + public static final int AppCompatTheme_actionBarTabStyle = 0x0000000c; + public static final int AppCompatTheme_actionBarTabTextStyle = 0x0000000e; + public static final int AppCompatTheme_actionBarTheme = 0x00000014; + public static final int AppCompatTheme_actionBarWidgetTheme = 0x00000015; + public static final int AppCompatTheme_actionButtonStyle = 0x00000032; + public static final int AppCompatTheme_actionDropDownStyle = 0x0000002e; + public static final int AppCompatTheme_actionMenuTextAppearance = 0x00000019; + public static final int AppCompatTheme_actionMenuTextColor = 0x0000001a; + public static final int AppCompatTheme_actionModeBackground = 0x0000001d; + public static final int AppCompatTheme_actionModeCloseButtonStyle = 0x0000001c; + public static final int AppCompatTheme_actionModeCloseDrawable = 0x0000001f; + public static final int AppCompatTheme_actionModeCopyDrawable = 0x00000021; + public static final int AppCompatTheme_actionModeCutDrawable = 0x00000020; + public static final int AppCompatTheme_actionModeFindDrawable = 0x00000025; + public static final int AppCompatTheme_actionModePasteDrawable = 0x00000022; + public static final int AppCompatTheme_actionModePopupWindowStyle = 0x00000027; + public static final int AppCompatTheme_actionModeSelectAllDrawable = 0x00000023; + public static final int AppCompatTheme_actionModeShareDrawable = 0x00000024; + public static final int AppCompatTheme_actionModeSplitBackground = 0x0000001e; + public static final int AppCompatTheme_actionModeStyle = 0x0000001b; + public static final int AppCompatTheme_actionModeWebSearchDrawable = 0x00000026; + public static final int AppCompatTheme_actionOverflowButtonStyle = 0x0000000f; + public static final int AppCompatTheme_actionOverflowMenuStyle = 0x00000010; + public static final int AppCompatTheme_activityChooserViewStyle = 0x0000003a; + public static final int AppCompatTheme_alertDialogButtonGroupStyle = 0x0000005e; + public static final int AppCompatTheme_alertDialogCenterButtons = 0x0000005f; + public static final int AppCompatTheme_alertDialogStyle = 0x0000005d; + public static final int AppCompatTheme_alertDialogTheme = 0x00000060; + public static final int AppCompatTheme_android_windowAnimationStyle = 0x00000001; + public static final int AppCompatTheme_android_windowIsFloating = 0x00000000; + public static final int AppCompatTheme_autoCompleteTextViewStyle = 0x00000065; + public static final int AppCompatTheme_borderlessButtonStyle = 0x00000037; + public static final int AppCompatTheme_buttonBarButtonStyle = 0x00000034; + public static final int AppCompatTheme_buttonBarNegativeButtonStyle = 0x00000063; + public static final int AppCompatTheme_buttonBarNeutralButtonStyle = 0x00000064; + public static final int AppCompatTheme_buttonBarPositiveButtonStyle = 0x00000062; + public static final int AppCompatTheme_buttonBarStyle = 0x00000033; + public static final int AppCompatTheme_buttonStyle = 0x00000066; + public static final int AppCompatTheme_buttonStyleSmall = 0x00000067; + public static final int AppCompatTheme_checkboxStyle = 0x00000068; + public static final int AppCompatTheme_checkedTextViewStyle = 0x00000069; + public static final int AppCompatTheme_colorAccent = 0x00000055; + public static final int AppCompatTheme_colorBackgroundFloating = 0x0000005c; + public static final int AppCompatTheme_colorButtonNormal = 0x00000059; + public static final int AppCompatTheme_colorControlActivated = 0x00000057; + public static final int AppCompatTheme_colorControlHighlight = 0x00000058; + public static final int AppCompatTheme_colorControlNormal = 0x00000056; + public static final int AppCompatTheme_colorPrimary = 0x00000053; + public static final int AppCompatTheme_colorPrimaryDark = 0x00000054; + public static final int AppCompatTheme_colorSwitchThumbNormal = 0x0000005a; + public static final int AppCompatTheme_controlBackground = 0x0000005b; + public static final int AppCompatTheme_dialogPreferredPadding = 0x0000002c; + public static final int AppCompatTheme_dialogTheme = 0x0000002b; + public static final int AppCompatTheme_dividerHorizontal = 0x00000039; + public static final int AppCompatTheme_dividerVertical = 0x00000038; + public static final int AppCompatTheme_dropDownListViewStyle = 0x0000004b; + public static final int AppCompatTheme_dropdownListPreferredItemHeight = 0x0000002f; + public static final int AppCompatTheme_editTextBackground = 0x00000040; + public static final int AppCompatTheme_editTextColor = 0x0000003f; + public static final int AppCompatTheme_editTextStyle = 0x0000006a; + public static final int AppCompatTheme_homeAsUpIndicator = 0x00000031; + public static final int AppCompatTheme_imageButtonStyle = 0x00000041; + public static final int AppCompatTheme_listChoiceBackgroundIndicator = 0x00000052; + public static final int AppCompatTheme_listDividerAlertDialog = 0x0000002d; + public static final int AppCompatTheme_listMenuViewStyle = 0x00000072; + public static final int AppCompatTheme_listPopupWindowStyle = 0x0000004c; + public static final int AppCompatTheme_listPreferredItemHeight = 0x00000046; + public static final int AppCompatTheme_listPreferredItemHeightLarge = 0x00000048; + public static final int AppCompatTheme_listPreferredItemHeightSmall = 0x00000047; + public static final int AppCompatTheme_listPreferredItemPaddingLeft = 0x00000049; + public static final int AppCompatTheme_listPreferredItemPaddingRight = 0x0000004a; + public static final int AppCompatTheme_panelBackground = 0x0000004f; + public static final int AppCompatTheme_panelMenuListTheme = 0x00000051; + public static final int AppCompatTheme_panelMenuListWidth = 0x00000050; + public static final int AppCompatTheme_popupMenuStyle = 0x0000003d; + public static final int AppCompatTheme_popupWindowStyle = 0x0000003e; + public static final int AppCompatTheme_radioButtonStyle = 0x0000006b; + public static final int AppCompatTheme_ratingBarStyle = 0x0000006c; + public static final int AppCompatTheme_ratingBarStyleIndicator = 0x0000006d; + public static final int AppCompatTheme_ratingBarStyleSmall = 0x0000006e; + public static final int AppCompatTheme_searchViewStyle = 0x00000045; + public static final int AppCompatTheme_seekBarStyle = 0x0000006f; + public static final int AppCompatTheme_selectableItemBackground = 0x00000035; + public static final int AppCompatTheme_selectableItemBackgroundBorderless = 0x00000036; + public static final int AppCompatTheme_spinnerDropDownItemStyle = 0x00000030; + public static final int AppCompatTheme_spinnerStyle = 0x00000070; + public static final int AppCompatTheme_switchStyle = 0x00000071; + public static final int AppCompatTheme_textAppearanceLargePopupMenu = 0x00000028; + public static final int AppCompatTheme_textAppearanceListItem = 0x0000004d; + public static final int AppCompatTheme_textAppearanceListItemSmall = 0x0000004e; + public static final int AppCompatTheme_textAppearancePopupMenuHeader = 0x0000002a; + public static final int AppCompatTheme_textAppearanceSearchResultSubtitle = 0x00000043; + public static final int AppCompatTheme_textAppearanceSearchResultTitle = 0x00000042; + public static final int AppCompatTheme_textAppearanceSmallPopupMenu = 0x00000029; + public static final int AppCompatTheme_textColorAlertDialogListItem = 0x00000061; + public static final int AppCompatTheme_textColorSearchUrl = 0x00000044; + public static final int AppCompatTheme_toolbarNavigationButtonStyle = 0x0000003c; + public static final int AppCompatTheme_toolbarStyle = 0x0000003b; + public static final int AppCompatTheme_windowActionBar = 0x00000002; + public static final int AppCompatTheme_windowActionBarOverlay = 0x00000004; + public static final int AppCompatTheme_windowActionModeOverlay = 0x00000005; + public static final int AppCompatTheme_windowFixedHeightMajor = 0x00000009; + public static final int AppCompatTheme_windowFixedHeightMinor = 0x00000007; + public static final int AppCompatTheme_windowFixedWidthMajor = 0x00000006; + public static final int AppCompatTheme_windowFixedWidthMinor = 0x00000008; + public static final int AppCompatTheme_windowMinWidthMajor = 0x0000000a; + public static final int AppCompatTheme_windowMinWidthMinor = 0x0000000b; + public static final int AppCompatTheme_windowNoTitle = 0x00000003; + public static final int ArcProgress_arc_angle = 0x00000001; + public static final int ArcProgress_arc_bottom_text = 0x0000000b; + public static final int ArcProgress_arc_bottom_text_size = 0x0000000c; + public static final int ArcProgress_arc_finished_color = 0x00000005; + public static final int ArcProgress_arc_max = 0x00000003; + public static final int ArcProgress_arc_progress = 0x00000000; + public static final int ArcProgress_arc_stroke_width = 0x00000002; + public static final int ArcProgress_arc_suffix_text = 0x00000008; + public static final int ArcProgress_arc_suffix_text_padding = 0x0000000a; + public static final int ArcProgress_arc_suffix_text_size = 0x00000009; + public static final int ArcProgress_arc_text_color = 0x00000007; + public static final int ArcProgress_arc_text_size = 0x00000006; + public static final int ArcProgress_arc_unfinished_color = 0x00000004; + public static final int BottomNavigationView_elevation = 0x00000000; + public static final int BottomNavigationView_itemBackground = 0x00000004; + public static final int BottomNavigationView_itemIconTint = 0x00000002; + public static final int BottomNavigationView_itemTextColor = 0x00000003; + public static final int BottomNavigationView_menu = 0x00000001; + public static final int BottomSheetBehavior_Layout_behavior_hideable = 0x00000001; + public static final int BottomSheetBehavior_Layout_behavior_peekHeight = 0x00000000; + public static final int BottomSheetBehavior_Layout_behavior_skipCollapsed = 0x00000002; + public static final int ButtonBarLayout_allowStacking = 0x00000000; + public static final int CircleProgress_circle_finished_color = 0x00000003; + public static final int CircleProgress_circle_max = 0x00000001; + public static final int CircleProgress_circle_prefix_text = 0x00000006; + public static final int CircleProgress_circle_progress = 0x00000000; + public static final int CircleProgress_circle_suffix_text = 0x00000007; + public static final int CircleProgress_circle_text_color = 0x00000005; + public static final int CircleProgress_circle_text_size = 0x00000004; + public static final int CircleProgress_circle_unfinished_color = 0x00000002; + public static final int CollapsingToolbarLayout_Layout_layout_collapseMode = 0x00000000; + public static final int CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier = 0x00000001; + public static final int CollapsingToolbarLayout_collapsedTitleGravity = 0x0000000d; + public static final int CollapsingToolbarLayout_collapsedTitleTextAppearance = 0x00000007; + public static final int CollapsingToolbarLayout_contentScrim = 0x00000008; + public static final int CollapsingToolbarLayout_expandedTitleGravity = 0x0000000e; + public static final int CollapsingToolbarLayout_expandedTitleMargin = 0x00000001; + public static final int CollapsingToolbarLayout_expandedTitleMarginBottom = 0x00000005; + public static final int CollapsingToolbarLayout_expandedTitleMarginEnd = 0x00000004; + public static final int CollapsingToolbarLayout_expandedTitleMarginStart = 0x00000002; + public static final int CollapsingToolbarLayout_expandedTitleMarginTop = 0x00000003; + public static final int CollapsingToolbarLayout_expandedTitleTextAppearance = 0x00000006; + public static final int CollapsingToolbarLayout_scrimAnimationDuration = 0x0000000c; + public static final int CollapsingToolbarLayout_scrimVisibleHeightTrigger = 0x0000000b; + public static final int CollapsingToolbarLayout_statusBarScrim = 0x00000009; + public static final int CollapsingToolbarLayout_title = 0x00000000; + public static final int CollapsingToolbarLayout_titleEnabled = 0x0000000f; + public static final int CollapsingToolbarLayout_toolbarId = 0x0000000a; + public static final int ColorStateListItem_alpha = 0x00000002; + public static final int ColorStateListItem_android_alpha = 0x00000001; + public static final int ColorStateListItem_android_color = 0x00000000; + public static final int CompoundButton_android_button = 0x00000000; + public static final int CompoundButton_buttonTint = 0x00000001; + public static final int CompoundButton_buttonTintMode = 0x00000002; + public static final int ConstraintLayout_Layout_android_maxHeight = 0x00000002; + public static final int ConstraintLayout_Layout_android_maxWidth = 0x00000001; + public static final int ConstraintLayout_Layout_android_minHeight = 0x00000004; + public static final int ConstraintLayout_Layout_android_minWidth = 0x00000003; + public static final int ConstraintLayout_Layout_android_orientation = 0x00000000; + public static final int ConstraintLayout_Layout_constraintSet = 0x00000005; + public static final int ConstraintLayout_Layout_layout_constraintBaseline_creator = 0x00000006; + public static final int ConstraintLayout_Layout_layout_constraintBaseline_toBaselineOf = 0x00000007; + public static final int ConstraintLayout_Layout_layout_constraintBottom_creator = 0x00000008; + public static final int ConstraintLayout_Layout_layout_constraintBottom_toBottomOf = 0x00000009; + public static final int ConstraintLayout_Layout_layout_constraintBottom_toTopOf = 0x0000000a; + public static final int ConstraintLayout_Layout_layout_constraintDimensionRatio = 0x0000000b; + public static final int ConstraintLayout_Layout_layout_constraintEnd_toEndOf = 0x0000000c; + public static final int ConstraintLayout_Layout_layout_constraintEnd_toStartOf = 0x0000000d; + public static final int ConstraintLayout_Layout_layout_constraintGuide_begin = 0x0000000e; + public static final int ConstraintLayout_Layout_layout_constraintGuide_end = 0x0000000f; + public static final int ConstraintLayout_Layout_layout_constraintGuide_percent = 0x00000010; + public static final int ConstraintLayout_Layout_layout_constraintHeight_default = 0x00000011; + public static final int ConstraintLayout_Layout_layout_constraintHeight_max = 0x00000012; + public static final int ConstraintLayout_Layout_layout_constraintHeight_min = 0x00000013; + public static final int ConstraintLayout_Layout_layout_constraintHorizontal_bias = 0x00000014; + public static final int ConstraintLayout_Layout_layout_constraintHorizontal_chainStyle = 0x00000015; + public static final int ConstraintLayout_Layout_layout_constraintHorizontal_weight = 0x00000016; + public static final int ConstraintLayout_Layout_layout_constraintLeft_creator = 0x00000017; + public static final int ConstraintLayout_Layout_layout_constraintLeft_toLeftOf = 0x00000018; + public static final int ConstraintLayout_Layout_layout_constraintLeft_toRightOf = 0x00000019; + public static final int ConstraintLayout_Layout_layout_constraintRight_creator = 0x0000001a; + public static final int ConstraintLayout_Layout_layout_constraintRight_toLeftOf = 0x0000001b; + public static final int ConstraintLayout_Layout_layout_constraintRight_toRightOf = 0x0000001c; + public static final int ConstraintLayout_Layout_layout_constraintStart_toEndOf = 0x0000001d; + public static final int ConstraintLayout_Layout_layout_constraintStart_toStartOf = 0x0000001e; + public static final int ConstraintLayout_Layout_layout_constraintTop_creator = 0x0000001f; + public static final int ConstraintLayout_Layout_layout_constraintTop_toBottomOf = 0x00000020; + public static final int ConstraintLayout_Layout_layout_constraintTop_toTopOf = 0x00000021; + public static final int ConstraintLayout_Layout_layout_constraintVertical_bias = 0x00000022; + public static final int ConstraintLayout_Layout_layout_constraintVertical_chainStyle = 0x00000023; + public static final int ConstraintLayout_Layout_layout_constraintVertical_weight = 0x00000024; + public static final int ConstraintLayout_Layout_layout_constraintWidth_default = 0x00000025; + public static final int ConstraintLayout_Layout_layout_constraintWidth_max = 0x00000026; + public static final int ConstraintLayout_Layout_layout_constraintWidth_min = 0x00000027; + public static final int ConstraintLayout_Layout_layout_editor_absoluteX = 0x00000028; + public static final int ConstraintLayout_Layout_layout_editor_absoluteY = 0x00000029; + public static final int ConstraintLayout_Layout_layout_goneMarginBottom = 0x0000002a; + public static final int ConstraintLayout_Layout_layout_goneMarginEnd = 0x0000002b; + public static final int ConstraintLayout_Layout_layout_goneMarginLeft = 0x0000002c; + public static final int ConstraintLayout_Layout_layout_goneMarginRight = 0x0000002d; + public static final int ConstraintLayout_Layout_layout_goneMarginStart = 0x0000002e; + public static final int ConstraintLayout_Layout_layout_goneMarginTop = 0x0000002f; + public static final int ConstraintLayout_Layout_layout_optimizationLevel = 0x00000030; + public static final int ConstraintSet_android_alpha = 0x00000009; + public static final int ConstraintSet_android_elevation = 0x00000015; + public static final int ConstraintSet_android_id = 0x00000001; + public static final int ConstraintSet_android_layout_height = 0x00000004; + public static final int ConstraintSet_android_layout_marginBottom = 0x00000008; + public static final int ConstraintSet_android_layout_marginEnd = 0x00000013; + public static final int ConstraintSet_android_layout_marginLeft = 0x00000005; + public static final int ConstraintSet_android_layout_marginRight = 0x00000007; + public static final int ConstraintSet_android_layout_marginStart = 0x00000012; + public static final int ConstraintSet_android_layout_marginTop = 0x00000006; + public static final int ConstraintSet_android_layout_width = 0x00000003; + public static final int ConstraintSet_android_orientation = 0x00000000; + public static final int ConstraintSet_android_rotationX = 0x00000010; + public static final int ConstraintSet_android_rotationY = 0x00000011; + public static final int ConstraintSet_android_scaleX = 0x0000000e; + public static final int ConstraintSet_android_scaleY = 0x0000000f; + public static final int ConstraintSet_android_transformPivotX = 0x0000000a; + public static final int ConstraintSet_android_transformPivotY = 0x0000000b; + public static final int ConstraintSet_android_translationX = 0x0000000c; + public static final int ConstraintSet_android_translationY = 0x0000000d; + public static final int ConstraintSet_android_translationZ = 0x00000014; + public static final int ConstraintSet_android_visibility = 0x00000002; + public static final int ConstraintSet_layout_constraintBaseline_creator = 0x00000016; + public static final int ConstraintSet_layout_constraintBaseline_toBaselineOf = 0x00000017; + public static final int ConstraintSet_layout_constraintBottom_creator = 0x00000018; + public static final int ConstraintSet_layout_constraintBottom_toBottomOf = 0x00000019; + public static final int ConstraintSet_layout_constraintBottom_toTopOf = 0x0000001a; + public static final int ConstraintSet_layout_constraintDimensionRatio = 0x0000001b; + public static final int ConstraintSet_layout_constraintEnd_toEndOf = 0x0000001c; + public static final int ConstraintSet_layout_constraintEnd_toStartOf = 0x0000001d; + public static final int ConstraintSet_layout_constraintGuide_begin = 0x0000001e; + public static final int ConstraintSet_layout_constraintGuide_end = 0x0000001f; + public static final int ConstraintSet_layout_constraintGuide_percent = 0x00000020; + public static final int ConstraintSet_layout_constraintHeight_default = 0x00000021; + public static final int ConstraintSet_layout_constraintHeight_max = 0x00000022; + public static final int ConstraintSet_layout_constraintHeight_min = 0x00000023; + public static final int ConstraintSet_layout_constraintHorizontal_bias = 0x00000024; + public static final int ConstraintSet_layout_constraintHorizontal_chainStyle = 0x00000025; + public static final int ConstraintSet_layout_constraintHorizontal_weight = 0x00000026; + public static final int ConstraintSet_layout_constraintLeft_creator = 0x00000027; + public static final int ConstraintSet_layout_constraintLeft_toLeftOf = 0x00000028; + public static final int ConstraintSet_layout_constraintLeft_toRightOf = 0x00000029; + public static final int ConstraintSet_layout_constraintRight_creator = 0x0000002a; + public static final int ConstraintSet_layout_constraintRight_toLeftOf = 0x0000002b; + public static final int ConstraintSet_layout_constraintRight_toRightOf = 0x0000002c; + public static final int ConstraintSet_layout_constraintStart_toEndOf = 0x0000002d; + public static final int ConstraintSet_layout_constraintStart_toStartOf = 0x0000002e; + public static final int ConstraintSet_layout_constraintTop_creator = 0x0000002f; + public static final int ConstraintSet_layout_constraintTop_toBottomOf = 0x00000030; + public static final int ConstraintSet_layout_constraintTop_toTopOf = 0x00000031; + public static final int ConstraintSet_layout_constraintVertical_bias = 0x00000032; + public static final int ConstraintSet_layout_constraintVertical_chainStyle = 0x00000033; + public static final int ConstraintSet_layout_constraintVertical_weight = 0x00000034; + public static final int ConstraintSet_layout_constraintWidth_default = 0x00000035; + public static final int ConstraintSet_layout_constraintWidth_max = 0x00000036; + public static final int ConstraintSet_layout_constraintWidth_min = 0x00000037; + public static final int ConstraintSet_layout_editor_absoluteX = 0x00000038; + public static final int ConstraintSet_layout_editor_absoluteY = 0x00000039; + public static final int ConstraintSet_layout_goneMarginBottom = 0x0000003a; + public static final int ConstraintSet_layout_goneMarginEnd = 0x0000003b; + public static final int ConstraintSet_layout_goneMarginLeft = 0x0000003c; + public static final int ConstraintSet_layout_goneMarginRight = 0x0000003d; + public static final int ConstraintSet_layout_goneMarginStart = 0x0000003e; + public static final int ConstraintSet_layout_goneMarginTop = 0x0000003f; + public static final int CoordinatorLayout_Layout_android_layout_gravity = 0x00000000; + public static final int CoordinatorLayout_Layout_layout_anchor = 0x00000002; + public static final int CoordinatorLayout_Layout_layout_anchorGravity = 0x00000004; + public static final int CoordinatorLayout_Layout_layout_behavior = 0x00000001; + public static final int CoordinatorLayout_Layout_layout_dodgeInsetEdges = 0x00000006; + public static final int CoordinatorLayout_Layout_layout_insetEdge = 0x00000005; + public static final int CoordinatorLayout_Layout_layout_keyline = 0x00000003; + public static final int CoordinatorLayout_keylines = 0x00000000; + public static final int CoordinatorLayout_statusBarBackground = 0x00000001; + public static final int DesignTheme_bottomSheetDialogTheme = 0x00000000; + public static final int DesignTheme_bottomSheetStyle = 0x00000001; + public static final int DesignTheme_textColorError = 0x00000002; + public static final int DonutProgress_donut_background_color = 0x0000000b; + public static final int DonutProgress_donut_circle_starting_degree = 0x0000000f; + public static final int DonutProgress_donut_finished_color = 0x00000003; + public static final int DonutProgress_donut_finished_stroke_width = 0x00000004; + public static final int DonutProgress_donut_inner_bottom_text = 0x0000000c; + public static final int DonutProgress_donut_inner_bottom_text_color = 0x0000000e; + public static final int DonutProgress_donut_inner_bottom_text_size = 0x0000000d; + public static final int DonutProgress_donut_inner_drawable = 0x00000011; + public static final int DonutProgress_donut_max = 0x00000001; + public static final int DonutProgress_donut_prefix_text = 0x00000008; + public static final int DonutProgress_donut_progress = 0x00000000; + public static final int DonutProgress_donut_show_text = 0x00000010; + public static final int DonutProgress_donut_suffix_text = 0x00000009; + public static final int DonutProgress_donut_text = 0x0000000a; + public static final int DonutProgress_donut_text_color = 0x00000007; + public static final int DonutProgress_donut_text_size = 0x00000006; + public static final int DonutProgress_donut_unfinished_color = 0x00000002; + public static final int DonutProgress_donut_unfinished_stroke_width = 0x00000005; + public static final int DrawerArrowToggle_arrowHeadLength = 0x00000004; + public static final int DrawerArrowToggle_arrowShaftLength = 0x00000005; + public static final int DrawerArrowToggle_barLength = 0x00000006; + public static final int DrawerArrowToggle_color = 0x00000000; + public static final int DrawerArrowToggle_drawableSize = 0x00000002; + public static final int DrawerArrowToggle_gapBetweenBars = 0x00000003; + public static final int DrawerArrowToggle_spinBars = 0x00000001; + public static final int DrawerArrowToggle_thickness = 0x00000007; + public static final int FloatingActionButton_Behavior_Layout_behavior_autoHide = 0x00000000; + public static final int FloatingActionButton_backgroundTint = 0x00000006; + public static final int FloatingActionButton_backgroundTintMode = 0x00000007; + public static final int FloatingActionButton_borderWidth = 0x00000004; + public static final int FloatingActionButton_elevation = 0x00000000; + public static final int FloatingActionButton_fabSize = 0x00000002; + public static final int FloatingActionButton_pressedTranslationZ = 0x00000003; + public static final int FloatingActionButton_rippleColor = 0x00000001; + public static final int FloatingActionButton_useCompatPadding = 0x00000005; + public static final int ForegroundLinearLayout_android_foreground = 0x00000000; + public static final int ForegroundLinearLayout_android_foregroundGravity = 0x00000001; + public static final int ForegroundLinearLayout_foregroundInsidePadding = 0x00000002; + public static final int LinearConstraintLayout_android_orientation = 0x00000000; + public static final int LinearLayoutCompat_Layout_android_layout_gravity = 0x00000000; + public static final int LinearLayoutCompat_Layout_android_layout_height = 0x00000002; + public static final int LinearLayoutCompat_Layout_android_layout_weight = 0x00000003; + public static final int LinearLayoutCompat_Layout_android_layout_width = 0x00000001; + public static final int LinearLayoutCompat_android_baselineAligned = 0x00000002; + public static final int LinearLayoutCompat_android_baselineAlignedChildIndex = 0x00000003; + public static final int LinearLayoutCompat_android_gravity = 0x00000000; + public static final int LinearLayoutCompat_android_orientation = 0x00000001; + public static final int LinearLayoutCompat_android_weightSum = 0x00000004; + public static final int LinearLayoutCompat_divider = 0x00000005; + public static final int LinearLayoutCompat_dividerPadding = 0x00000008; + public static final int LinearLayoutCompat_measureWithLargestChild = 0x00000006; + public static final int LinearLayoutCompat_showDividers = 0x00000007; + public static final int ListPopupWindow_android_dropDownHorizontalOffset = 0x00000000; + public static final int ListPopupWindow_android_dropDownVerticalOffset = 0x00000001; + public static final int MenuGroup_android_checkableBehavior = 0x00000005; + public static final int MenuGroup_android_enabled = 0x00000000; + public static final int MenuGroup_android_id = 0x00000001; + public static final int MenuGroup_android_menuCategory = 0x00000003; + public static final int MenuGroup_android_orderInCategory = 0x00000004; + public static final int MenuGroup_android_visible = 0x00000002; + public static final int MenuItem_actionLayout = 0x0000000e; + public static final int MenuItem_actionProviderClass = 0x00000010; + public static final int MenuItem_actionViewClass = 0x0000000f; + public static final int MenuItem_android_alphabeticShortcut = 0x00000009; + public static final int MenuItem_android_checkable = 0x0000000b; + public static final int MenuItem_android_checked = 0x00000003; + public static final int MenuItem_android_enabled = 0x00000001; + public static final int MenuItem_android_icon = 0x00000000; + public static final int MenuItem_android_id = 0x00000002; + public static final int MenuItem_android_menuCategory = 0x00000005; + public static final int MenuItem_android_numericShortcut = 0x0000000a; + public static final int MenuItem_android_onClick = 0x0000000c; + public static final int MenuItem_android_orderInCategory = 0x00000006; + public static final int MenuItem_android_title = 0x00000007; + public static final int MenuItem_android_titleCondensed = 0x00000008; + public static final int MenuItem_android_visible = 0x00000004; + public static final int MenuItem_showAsAction = 0x0000000d; + public static final int MenuView_android_headerBackground = 0x00000004; + public static final int MenuView_android_horizontalDivider = 0x00000002; + public static final int MenuView_android_itemBackground = 0x00000005; + public static final int MenuView_android_itemIconDisabledAlpha = 0x00000006; + public static final int MenuView_android_itemTextAppearance = 0x00000001; + public static final int MenuView_android_verticalDivider = 0x00000003; + public static final int MenuView_android_windowAnimationStyle = 0x00000000; + public static final int MenuView_preserveIconSpacing = 0x00000007; + public static final int MenuView_subMenuArrow = 0x00000008; + public static final int NavigationView_android_background = 0x00000000; + public static final int NavigationView_android_fitsSystemWindows = 0x00000001; + public static final int NavigationView_android_maxWidth = 0x00000002; + public static final int NavigationView_elevation = 0x00000003; + public static final int NavigationView_headerLayout = 0x00000009; + public static final int NavigationView_itemBackground = 0x00000007; + public static final int NavigationView_itemIconTint = 0x00000005; + public static final int NavigationView_itemTextAppearance = 0x00000008; + public static final int NavigationView_itemTextColor = 0x00000006; + public static final int NavigationView_menu = 0x00000004; + public static final int PopupWindowBackgroundState_state_above_anchor = 0x00000000; + public static final int PopupWindow_android_popupAnimationStyle = 0x00000001; + public static final int PopupWindow_android_popupBackground = 0x00000000; + public static final int PopupWindow_overlapAnchor = 0x00000002; + public static final int RecycleListView_paddingBottomNoButtons = 0x00000000; + public static final int RecycleListView_paddingTopNoTitle = 0x00000001; + public static final int RecyclerView_android_descendantFocusability = 0x00000001; + public static final int RecyclerView_android_orientation = 0x00000000; + public static final int RecyclerView_layoutManager = 0x00000002; + public static final int RecyclerView_reverseLayout = 0x00000004; + public static final int RecyclerView_spanCount = 0x00000003; + public static final int RecyclerView_stackFromEnd = 0x00000005; + public static final int ScrimInsetsFrameLayout_insetForeground = 0x00000000; + public static final int ScrollingViewBehavior_Layout_behavior_overlapTop = 0x00000000; + public static final int SearchView_android_focusable = 0x00000000; + public static final int SearchView_android_imeOptions = 0x00000003; + public static final int SearchView_android_inputType = 0x00000002; + public static final int SearchView_android_maxWidth = 0x00000001; + public static final int SearchView_closeIcon = 0x00000008; + public static final int SearchView_commitIcon = 0x0000000d; + public static final int SearchView_defaultQueryHint = 0x00000007; + public static final int SearchView_goIcon = 0x00000009; + public static final int SearchView_iconifiedByDefault = 0x00000005; + public static final int SearchView_layout = 0x00000004; + public static final int SearchView_queryBackground = 0x0000000f; + public static final int SearchView_queryHint = 0x00000006; + public static final int SearchView_searchHintIcon = 0x0000000b; + public static final int SearchView_searchIcon = 0x0000000a; + public static final int SearchView_submitBackground = 0x00000010; + public static final int SearchView_suggestionRowLayout = 0x0000000e; + public static final int SearchView_voiceIcon = 0x0000000c; + public static final int SnackbarLayout_android_maxWidth = 0x00000000; + public static final int SnackbarLayout_elevation = 0x00000001; + public static final int SnackbarLayout_maxActionInlineWidth = 0x00000002; + public static final int Spinner_android_dropDownWidth = 0x00000003; + public static final int Spinner_android_entries = 0x00000000; + public static final int Spinner_android_popupBackground = 0x00000001; + public static final int Spinner_android_prompt = 0x00000002; + public static final int Spinner_popupTheme = 0x00000004; + public static final int SwitchCompat_android_textOff = 0x00000001; + public static final int SwitchCompat_android_textOn = 0x00000000; + public static final int SwitchCompat_android_thumb = 0x00000002; + public static final int SwitchCompat_showText = 0x0000000d; + public static final int SwitchCompat_splitTrack = 0x0000000c; + public static final int SwitchCompat_switchMinWidth = 0x0000000a; + public static final int SwitchCompat_switchPadding = 0x0000000b; + public static final int SwitchCompat_switchTextAppearance = 0x00000009; + public static final int SwitchCompat_thumbTextPadding = 0x00000008; + public static final int SwitchCompat_thumbTint = 0x00000003; + public static final int SwitchCompat_thumbTintMode = 0x00000004; + public static final int SwitchCompat_track = 0x00000005; + public static final int SwitchCompat_trackTint = 0x00000006; + public static final int SwitchCompat_trackTintMode = 0x00000007; + public static final int TabItem_android_icon = 0x00000000; + public static final int TabItem_android_layout = 0x00000001; + public static final int TabItem_android_text = 0x00000002; + public static final int TabLayout_tabBackground = 0x00000003; + public static final int TabLayout_tabContentStart = 0x00000002; + public static final int TabLayout_tabGravity = 0x00000005; + public static final int TabLayout_tabIndicatorColor = 0x00000000; + public static final int TabLayout_tabIndicatorHeight = 0x00000001; + public static final int TabLayout_tabMaxWidth = 0x00000007; + public static final int TabLayout_tabMinWidth = 0x00000006; + public static final int TabLayout_tabMode = 0x00000004; + public static final int TabLayout_tabPadding = 0x0000000f; + public static final int TabLayout_tabPaddingBottom = 0x0000000e; + public static final int TabLayout_tabPaddingEnd = 0x0000000d; + public static final int TabLayout_tabPaddingStart = 0x0000000b; + public static final int TabLayout_tabPaddingTop = 0x0000000c; + public static final int TabLayout_tabSelectedTextColor = 0x0000000a; + public static final int TabLayout_tabTextAppearance = 0x00000008; + public static final int TabLayout_tabTextColor = 0x00000009; + public static final int TextAppearance_android_shadowColor = 0x00000005; + public static final int TextAppearance_android_shadowDx = 0x00000006; + public static final int TextAppearance_android_shadowDy = 0x00000007; + public static final int TextAppearance_android_shadowRadius = 0x00000008; + public static final int TextAppearance_android_textColor = 0x00000003; + public static final int TextAppearance_android_textColorHint = 0x00000004; + public static final int TextAppearance_android_textSize = 0x00000000; + public static final int TextAppearance_android_textStyle = 0x00000002; + public static final int TextAppearance_android_typeface = 0x00000001; + public static final int TextAppearance_textAllCaps = 0x00000009; + public static final int TextInputLayout_android_hint = 0x00000001; + public static final int TextInputLayout_android_textColorHint = 0x00000000; + public static final int TextInputLayout_counterEnabled = 0x00000006; + public static final int TextInputLayout_counterMaxLength = 0x00000007; + public static final int TextInputLayout_counterOverflowTextAppearance = 0x00000009; + public static final int TextInputLayout_counterTextAppearance = 0x00000008; + public static final int TextInputLayout_errorEnabled = 0x00000004; + public static final int TextInputLayout_errorTextAppearance = 0x00000005; + public static final int TextInputLayout_hintAnimationEnabled = 0x0000000a; + public static final int TextInputLayout_hintEnabled = 0x00000003; + public static final int TextInputLayout_hintTextAppearance = 0x00000002; + public static final int TextInputLayout_passwordToggleContentDescription = 0x0000000d; + public static final int TextInputLayout_passwordToggleDrawable = 0x0000000c; + public static final int TextInputLayout_passwordToggleEnabled = 0x0000000b; + public static final int TextInputLayout_passwordToggleTint = 0x0000000e; + public static final int TextInputLayout_passwordToggleTintMode = 0x0000000f; + public static final int Themes_arcProgressStyle = 0x00000002; + public static final int Themes_circleProgressStyle = 0x00000000; + public static final int Themes_donutProgressStyle = 0x00000001; + public static final int Toolbar_android_gravity = 0x00000000; + public static final int Toolbar_android_minHeight = 0x00000001; + public static final int Toolbar_buttonGravity = 0x00000015; + public static final int Toolbar_collapseContentDescription = 0x00000017; + public static final int Toolbar_collapseIcon = 0x00000016; + public static final int Toolbar_contentInsetEnd = 0x00000006; + public static final int Toolbar_contentInsetEndWithActions = 0x0000000a; + public static final int Toolbar_contentInsetLeft = 0x00000007; + public static final int Toolbar_contentInsetRight = 0x00000008; + public static final int Toolbar_contentInsetStart = 0x00000005; + public static final int Toolbar_contentInsetStartWithNavigation = 0x00000009; + public static final int Toolbar_logo = 0x00000004; + public static final int Toolbar_logoDescription = 0x0000001a; + public static final int Toolbar_maxButtonHeight = 0x00000014; + public static final int Toolbar_navigationContentDescription = 0x00000019; + public static final int Toolbar_navigationIcon = 0x00000018; + public static final int Toolbar_popupTheme = 0x0000000b; + public static final int Toolbar_subtitle = 0x00000003; + public static final int Toolbar_subtitleTextAppearance = 0x0000000d; + public static final int Toolbar_subtitleTextColor = 0x0000001c; + public static final int Toolbar_title = 0x00000002; + public static final int Toolbar_titleMargin = 0x0000000e; + public static final int Toolbar_titleMarginBottom = 0x00000012; + public static final int Toolbar_titleMarginEnd = 0x00000010; + public static final int Toolbar_titleMarginStart = 0x0000000f; + public static final int Toolbar_titleMarginTop = 0x00000011; + public static final int Toolbar_titleMargins = 0x00000013; + public static final int Toolbar_titleTextAppearance = 0x0000000c; + public static final int Toolbar_titleTextColor = 0x0000001b; + public static final int ViewBackgroundHelper_android_background = 0x00000000; + public static final int ViewBackgroundHelper_backgroundTint = 0x00000001; + public static final int ViewBackgroundHelper_backgroundTintMode = 0x00000002; + public static final int ViewStubCompat_android_id = 0x00000000; + public static final int ViewStubCompat_android_inflatedId = 0x00000002; + public static final int ViewStubCompat_android_layout = 0x00000001; + public static final int View_android_focusable = 0x00000001; + public static final int View_android_theme = 0x00000000; + public static final int View_paddingEnd = 0x00000003; + public static final int View_paddingStart = 0x00000002; + public static final int View_theme = 0x00000004; + public static final int[] ActionBar = {R.attr.height, R.attr.title, R.attr.navigationMode, R.attr.displayOptions, R.attr.subtitle, R.attr.titleTextStyle, R.attr.subtitleTextStyle, R.attr.icon, R.attr.logo, R.attr.divider, R.attr.background, R.attr.backgroundStacked, R.attr.backgroundSplit, R.attr.customNavigationLayout, R.attr.homeLayout, R.attr.progressBarStyle, R.attr.indeterminateProgressStyle, R.attr.progressBarPadding, R.attr.itemPadding, R.attr.hideOnContentScroll, R.attr.contentInsetStart, R.attr.contentInsetEnd, R.attr.contentInsetLeft, R.attr.contentInsetRight, R.attr.contentInsetStartWithNavigation, R.attr.contentInsetEndWithActions, R.attr.elevation, R.attr.popupTheme, R.attr.homeAsUpIndicator}; + public static final int[] ActionBarLayout = {android.R.attr.layout_gravity}; + public static final int[] ActionMenuItemView = {android.R.attr.minWidth}; + public static final int[] ActionMenuView = new int[0]; + public static final int[] ActionMode = {R.attr.height, R.attr.titleTextStyle, R.attr.subtitleTextStyle, R.attr.background, R.attr.backgroundSplit, R.attr.closeItemLayout}; + public static final int[] ActivityChooserView = {R.attr.initialActivityCount, R.attr.expandActivityOverflowButtonDrawable}; + public static final int[] AlertDialog = {android.R.attr.layout, R.attr.buttonPanelSideLayout, R.attr.listLayout, R.attr.multiChoiceItemLayout, R.attr.singleChoiceItemLayout, R.attr.listItemLayout, R.attr.showTitle}; + public static final int[] AppBarLayout = {android.R.attr.background, R.attr.elevation, R.attr.expanded}; + public static final int[] AppBarLayoutStates = {R.attr.state_collapsed, R.attr.state_collapsible}; + public static final int[] AppBarLayout_Layout = {R.attr.layout_scrollFlags, R.attr.layout_scrollInterpolator}; + public static final int[] AppCompatImageView = {android.R.attr.src, R.attr.srcCompat}; + public static final int[] AppCompatSeekBar = {android.R.attr.thumb, R.attr.tickMark, R.attr.tickMarkTint, R.attr.tickMarkTintMode}; + public static final int[] AppCompatTextHelper = {android.R.attr.textAppearance, android.R.attr.drawableTop, android.R.attr.drawableBottom, android.R.attr.drawableLeft, android.R.attr.drawableRight, android.R.attr.drawableStart, android.R.attr.drawableEnd}; + public static final int[] AppCompatTextView = {android.R.attr.textAppearance, R.attr.textAllCaps}; + public static final int[] AppCompatTheme = {android.R.attr.windowIsFloating, android.R.attr.windowAnimationStyle, R.attr.windowActionBar, R.attr.windowNoTitle, R.attr.windowActionBarOverlay, R.attr.windowActionModeOverlay, R.attr.windowFixedWidthMajor, R.attr.windowFixedHeightMinor, R.attr.windowFixedWidthMinor, R.attr.windowFixedHeightMajor, R.attr.windowMinWidthMajor, R.attr.windowMinWidthMinor, R.attr.actionBarTabStyle, R.attr.actionBarTabBarStyle, R.attr.actionBarTabTextStyle, R.attr.actionOverflowButtonStyle, R.attr.actionOverflowMenuStyle, R.attr.actionBarPopupTheme, R.attr.actionBarStyle, R.attr.actionBarSplitStyle, R.attr.actionBarTheme, R.attr.actionBarWidgetTheme, R.attr.actionBarSize, R.attr.actionBarDivider, R.attr.actionBarItemBackground, R.attr.actionMenuTextAppearance, R.attr.actionMenuTextColor, R.attr.actionModeStyle, R.attr.actionModeCloseButtonStyle, R.attr.actionModeBackground, R.attr.actionModeSplitBackground, R.attr.actionModeCloseDrawable, R.attr.actionModeCutDrawable, R.attr.actionModeCopyDrawable, R.attr.actionModePasteDrawable, R.attr.actionModeSelectAllDrawable, R.attr.actionModeShareDrawable, R.attr.actionModeFindDrawable, R.attr.actionModeWebSearchDrawable, R.attr.actionModePopupWindowStyle, R.attr.textAppearanceLargePopupMenu, R.attr.textAppearanceSmallPopupMenu, R.attr.textAppearancePopupMenuHeader, R.attr.dialogTheme, R.attr.dialogPreferredPadding, R.attr.listDividerAlertDialog, R.attr.actionDropDownStyle, R.attr.dropdownListPreferredItemHeight, R.attr.spinnerDropDownItemStyle, R.attr.homeAsUpIndicator, R.attr.actionButtonStyle, R.attr.buttonBarStyle, R.attr.buttonBarButtonStyle, R.attr.selectableItemBackground, R.attr.selectableItemBackgroundBorderless, R.attr.borderlessButtonStyle, R.attr.dividerVertical, R.attr.dividerHorizontal, R.attr.activityChooserViewStyle, R.attr.toolbarStyle, R.attr.toolbarNavigationButtonStyle, R.attr.popupMenuStyle, R.attr.popupWindowStyle, R.attr.editTextColor, R.attr.editTextBackground, R.attr.imageButtonStyle, R.attr.textAppearanceSearchResultTitle, R.attr.textAppearanceSearchResultSubtitle, R.attr.textColorSearchUrl, R.attr.searchViewStyle, R.attr.listPreferredItemHeight, R.attr.listPreferredItemHeightSmall, R.attr.listPreferredItemHeightLarge, R.attr.listPreferredItemPaddingLeft, R.attr.listPreferredItemPaddingRight, R.attr.dropDownListViewStyle, R.attr.listPopupWindowStyle, R.attr.textAppearanceListItem, R.attr.textAppearanceListItemSmall, R.attr.panelBackground, R.attr.panelMenuListWidth, R.attr.panelMenuListTheme, R.attr.listChoiceBackgroundIndicator, R.attr.colorPrimary, R.attr.colorPrimaryDark, R.attr.colorAccent, R.attr.colorControlNormal, R.attr.colorControlActivated, R.attr.colorControlHighlight, R.attr.colorButtonNormal, R.attr.colorSwitchThumbNormal, R.attr.controlBackground, R.attr.colorBackgroundFloating, R.attr.alertDialogStyle, R.attr.alertDialogButtonGroupStyle, R.attr.alertDialogCenterButtons, R.attr.alertDialogTheme, R.attr.textColorAlertDialogListItem, R.attr.buttonBarPositiveButtonStyle, R.attr.buttonBarNegativeButtonStyle, R.attr.buttonBarNeutralButtonStyle, R.attr.autoCompleteTextViewStyle, R.attr.buttonStyle, R.attr.buttonStyleSmall, R.attr.checkboxStyle, R.attr.checkedTextViewStyle, R.attr.editTextStyle, R.attr.radioButtonStyle, R.attr.ratingBarStyle, R.attr.ratingBarStyleIndicator, R.attr.ratingBarStyleSmall, R.attr.seekBarStyle, R.attr.spinnerStyle, R.attr.switchStyle, R.attr.listMenuViewStyle}; + public static final int[] ArcProgress = {R.attr.arc_progress, R.attr.arc_angle, R.attr.arc_stroke_width, R.attr.arc_max, R.attr.arc_unfinished_color, R.attr.arc_finished_color, R.attr.arc_text_size, R.attr.arc_text_color, R.attr.arc_suffix_text, R.attr.arc_suffix_text_size, R.attr.arc_suffix_text_padding, R.attr.arc_bottom_text, R.attr.arc_bottom_text_size}; + public static final int[] BottomNavigationView = {R.attr.elevation, R.attr.menu, R.attr.itemIconTint, R.attr.itemTextColor, R.attr.itemBackground}; + public static final int[] BottomSheetBehavior_Layout = {R.attr.behavior_peekHeight, R.attr.behavior_hideable, R.attr.behavior_skipCollapsed}; + public static final int[] ButtonBarLayout = {R.attr.allowStacking}; + public static final int[] CircleProgress = {R.attr.circle_progress, R.attr.circle_max, R.attr.circle_unfinished_color, R.attr.circle_finished_color, R.attr.circle_text_size, R.attr.circle_text_color, R.attr.circle_prefix_text, R.attr.circle_suffix_text}; + public static final int[] CollapsingToolbarLayout = {R.attr.title, R.attr.expandedTitleMargin, R.attr.expandedTitleMarginStart, R.attr.expandedTitleMarginTop, R.attr.expandedTitleMarginEnd, R.attr.expandedTitleMarginBottom, R.attr.expandedTitleTextAppearance, R.attr.collapsedTitleTextAppearance, R.attr.contentScrim, R.attr.statusBarScrim, R.attr.toolbarId, R.attr.scrimVisibleHeightTrigger, R.attr.scrimAnimationDuration, R.attr.collapsedTitleGravity, R.attr.expandedTitleGravity, R.attr.titleEnabled}; + public static final int[] CollapsingToolbarLayout_Layout = {R.attr.layout_collapseMode, R.attr.layout_collapseParallaxMultiplier}; + public static final int[] ColorStateListItem = {android.R.attr.color, android.R.attr.alpha, R.attr.alpha}; + public static final int[] CompoundButton = {android.R.attr.button, R.attr.buttonTint, R.attr.buttonTintMode}; + public static final int[] ConstraintLayout_Layout = {android.R.attr.orientation, android.R.attr.maxWidth, android.R.attr.maxHeight, android.R.attr.minWidth, android.R.attr.minHeight, R.attr.constraintSet, R.attr.layout_constraintBaseline_creator, R.attr.layout_constraintBaseline_toBaselineOf, R.attr.layout_constraintBottom_creator, R.attr.layout_constraintBottom_toBottomOf, R.attr.layout_constraintBottom_toTopOf, R.attr.layout_constraintDimensionRatio, R.attr.layout_constraintEnd_toEndOf, R.attr.layout_constraintEnd_toStartOf, R.attr.layout_constraintGuide_begin, R.attr.layout_constraintGuide_end, R.attr.layout_constraintGuide_percent, R.attr.layout_constraintHeight_default, R.attr.layout_constraintHeight_max, R.attr.layout_constraintHeight_min, R.attr.layout_constraintHorizontal_bias, R.attr.layout_constraintHorizontal_chainStyle, R.attr.layout_constraintHorizontal_weight, R.attr.layout_constraintLeft_creator, R.attr.layout_constraintLeft_toLeftOf, R.attr.layout_constraintLeft_toRightOf, R.attr.layout_constraintRight_creator, R.attr.layout_constraintRight_toLeftOf, R.attr.layout_constraintRight_toRightOf, R.attr.layout_constraintStart_toEndOf, R.attr.layout_constraintStart_toStartOf, R.attr.layout_constraintTop_creator, R.attr.layout_constraintTop_toBottomOf, R.attr.layout_constraintTop_toTopOf, R.attr.layout_constraintVertical_bias, R.attr.layout_constraintVertical_chainStyle, R.attr.layout_constraintVertical_weight, R.attr.layout_constraintWidth_default, R.attr.layout_constraintWidth_max, R.attr.layout_constraintWidth_min, R.attr.layout_editor_absoluteX, R.attr.layout_editor_absoluteY, R.attr.layout_goneMarginBottom, R.attr.layout_goneMarginEnd, R.attr.layout_goneMarginLeft, R.attr.layout_goneMarginRight, R.attr.layout_goneMarginStart, R.attr.layout_goneMarginTop, R.attr.layout_optimizationLevel}; + public static final int[] ConstraintSet = {android.R.attr.orientation, android.R.attr.id, android.R.attr.visibility, android.R.attr.layout_width, android.R.attr.layout_height, android.R.attr.layout_marginLeft, android.R.attr.layout_marginTop, android.R.attr.layout_marginRight, android.R.attr.layout_marginBottom, android.R.attr.alpha, android.R.attr.transformPivotX, android.R.attr.transformPivotY, android.R.attr.translationX, android.R.attr.translationY, android.R.attr.scaleX, android.R.attr.scaleY, android.R.attr.rotationX, android.R.attr.rotationY, android.R.attr.layout_marginStart, android.R.attr.layout_marginEnd, android.R.attr.translationZ, android.R.attr.elevation, R.attr.layout_constraintBaseline_creator, R.attr.layout_constraintBaseline_toBaselineOf, R.attr.layout_constraintBottom_creator, R.attr.layout_constraintBottom_toBottomOf, R.attr.layout_constraintBottom_toTopOf, R.attr.layout_constraintDimensionRatio, R.attr.layout_constraintEnd_toEndOf, R.attr.layout_constraintEnd_toStartOf, R.attr.layout_constraintGuide_begin, R.attr.layout_constraintGuide_end, R.attr.layout_constraintGuide_percent, R.attr.layout_constraintHeight_default, R.attr.layout_constraintHeight_max, R.attr.layout_constraintHeight_min, R.attr.layout_constraintHorizontal_bias, R.attr.layout_constraintHorizontal_chainStyle, R.attr.layout_constraintHorizontal_weight, R.attr.layout_constraintLeft_creator, R.attr.layout_constraintLeft_toLeftOf, R.attr.layout_constraintLeft_toRightOf, R.attr.layout_constraintRight_creator, R.attr.layout_constraintRight_toLeftOf, R.attr.layout_constraintRight_toRightOf, R.attr.layout_constraintStart_toEndOf, R.attr.layout_constraintStart_toStartOf, R.attr.layout_constraintTop_creator, R.attr.layout_constraintTop_toBottomOf, R.attr.layout_constraintTop_toTopOf, R.attr.layout_constraintVertical_bias, R.attr.layout_constraintVertical_chainStyle, R.attr.layout_constraintVertical_weight, R.attr.layout_constraintWidth_default, R.attr.layout_constraintWidth_max, R.attr.layout_constraintWidth_min, R.attr.layout_editor_absoluteX, R.attr.layout_editor_absoluteY, R.attr.layout_goneMarginBottom, R.attr.layout_goneMarginEnd, R.attr.layout_goneMarginLeft, R.attr.layout_goneMarginRight, R.attr.layout_goneMarginStart, R.attr.layout_goneMarginTop}; + public static final int[] CoordinatorLayout = {R.attr.keylines, R.attr.statusBarBackground}; + public static final int[] CoordinatorLayout_Layout = {android.R.attr.layout_gravity, R.attr.layout_behavior, R.attr.layout_anchor, R.attr.layout_keyline, R.attr.layout_anchorGravity, R.attr.layout_insetEdge, R.attr.layout_dodgeInsetEdges}; + public static final int[] DesignTheme = {R.attr.bottomSheetDialogTheme, R.attr.bottomSheetStyle, R.attr.textColorError}; + public static final int[] DonutProgress = {R.attr.donut_progress, R.attr.donut_max, R.attr.donut_unfinished_color, R.attr.donut_finished_color, R.attr.donut_finished_stroke_width, R.attr.donut_unfinished_stroke_width, R.attr.donut_text_size, R.attr.donut_text_color, R.attr.donut_prefix_text, R.attr.donut_suffix_text, R.attr.donut_text, R.attr.donut_background_color, R.attr.donut_inner_bottom_text, R.attr.donut_inner_bottom_text_size, R.attr.donut_inner_bottom_text_color, R.attr.donut_circle_starting_degree, R.attr.donut_show_text, R.attr.donut_inner_drawable}; + public static final int[] DrawerArrowToggle = {R.attr.color, R.attr.spinBars, R.attr.drawableSize, R.attr.gapBetweenBars, R.attr.arrowHeadLength, R.attr.arrowShaftLength, R.attr.barLength, R.attr.thickness}; + public static final int[] FloatingActionButton = {R.attr.elevation, R.attr.rippleColor, R.attr.fabSize, R.attr.pressedTranslationZ, R.attr.borderWidth, R.attr.useCompatPadding, R.attr.backgroundTint, R.attr.backgroundTintMode}; + public static final int[] FloatingActionButton_Behavior_Layout = {R.attr.behavior_autoHide}; + public static final int[] ForegroundLinearLayout = {android.R.attr.foreground, android.R.attr.foregroundGravity, R.attr.foregroundInsidePadding}; + public static final int[] LinearConstraintLayout = {android.R.attr.orientation}; + public static final int[] LinearLayoutCompat = {android.R.attr.gravity, android.R.attr.orientation, android.R.attr.baselineAligned, android.R.attr.baselineAlignedChildIndex, android.R.attr.weightSum, R.attr.divider, R.attr.measureWithLargestChild, R.attr.showDividers, R.attr.dividerPadding}; + public static final int[] LinearLayoutCompat_Layout = {android.R.attr.layout_gravity, android.R.attr.layout_width, android.R.attr.layout_height, android.R.attr.layout_weight}; + public static final int[] ListPopupWindow = {android.R.attr.dropDownHorizontalOffset, android.R.attr.dropDownVerticalOffset}; + public static final int[] MenuGroup = {android.R.attr.enabled, android.R.attr.id, android.R.attr.visible, android.R.attr.menuCategory, android.R.attr.orderInCategory, android.R.attr.checkableBehavior}; + public static final int[] MenuItem = {android.R.attr.icon, android.R.attr.enabled, android.R.attr.id, android.R.attr.checked, android.R.attr.visible, android.R.attr.menuCategory, android.R.attr.orderInCategory, android.R.attr.title, android.R.attr.titleCondensed, android.R.attr.alphabeticShortcut, android.R.attr.numericShortcut, android.R.attr.checkable, android.R.attr.onClick, R.attr.showAsAction, R.attr.actionLayout, R.attr.actionViewClass, R.attr.actionProviderClass}; + public static final int[] MenuView = {android.R.attr.windowAnimationStyle, android.R.attr.itemTextAppearance, android.R.attr.horizontalDivider, android.R.attr.verticalDivider, android.R.attr.headerBackground, android.R.attr.itemBackground, android.R.attr.itemIconDisabledAlpha, R.attr.preserveIconSpacing, R.attr.subMenuArrow}; + public static final int[] NavigationView = {android.R.attr.background, android.R.attr.fitsSystemWindows, android.R.attr.maxWidth, R.attr.elevation, R.attr.menu, R.attr.itemIconTint, R.attr.itemTextColor, R.attr.itemBackground, R.attr.itemTextAppearance, R.attr.headerLayout}; + public static final int[] PopupWindow = {android.R.attr.popupBackground, android.R.attr.popupAnimationStyle, R.attr.overlapAnchor}; + public static final int[] PopupWindowBackgroundState = {R.attr.state_above_anchor}; + public static final int[] RecycleListView = {R.attr.paddingBottomNoButtons, R.attr.paddingTopNoTitle}; + public static final int[] RecyclerView = {android.R.attr.orientation, android.R.attr.descendantFocusability, R.attr.layoutManager, R.attr.spanCount, R.attr.reverseLayout, R.attr.stackFromEnd}; + public static final int[] ScrimInsetsFrameLayout = {R.attr.insetForeground}; + public static final int[] ScrollingViewBehavior_Layout = {R.attr.behavior_overlapTop}; + public static final int[] SearchView = {android.R.attr.focusable, android.R.attr.maxWidth, android.R.attr.inputType, android.R.attr.imeOptions, R.attr.layout, R.attr.iconifiedByDefault, R.attr.queryHint, R.attr.defaultQueryHint, R.attr.closeIcon, R.attr.goIcon, R.attr.searchIcon, R.attr.searchHintIcon, R.attr.voiceIcon, R.attr.commitIcon, R.attr.suggestionRowLayout, R.attr.queryBackground, R.attr.submitBackground}; + public static final int[] SnackbarLayout = {android.R.attr.maxWidth, R.attr.elevation, R.attr.maxActionInlineWidth}; + public static final int[] Spinner = {android.R.attr.entries, android.R.attr.popupBackground, android.R.attr.prompt, android.R.attr.dropDownWidth, R.attr.popupTheme}; + public static final int[] SwitchCompat = {android.R.attr.textOn, android.R.attr.textOff, android.R.attr.thumb, R.attr.thumbTint, R.attr.thumbTintMode, R.attr.track, R.attr.trackTint, R.attr.trackTintMode, R.attr.thumbTextPadding, R.attr.switchTextAppearance, R.attr.switchMinWidth, R.attr.switchPadding, R.attr.splitTrack, R.attr.showText}; + public static final int[] TabItem = {android.R.attr.icon, android.R.attr.layout, android.R.attr.text}; + public static final int[] TabLayout = {R.attr.tabIndicatorColor, R.attr.tabIndicatorHeight, R.attr.tabContentStart, R.attr.tabBackground, R.attr.tabMode, R.attr.tabGravity, R.attr.tabMinWidth, R.attr.tabMaxWidth, R.attr.tabTextAppearance, R.attr.tabTextColor, R.attr.tabSelectedTextColor, R.attr.tabPaddingStart, R.attr.tabPaddingTop, R.attr.tabPaddingEnd, R.attr.tabPaddingBottom, R.attr.tabPadding}; + public static final int[] TextAppearance = {android.R.attr.textSize, android.R.attr.typeface, android.R.attr.textStyle, android.R.attr.textColor, android.R.attr.textColorHint, android.R.attr.shadowColor, android.R.attr.shadowDx, android.R.attr.shadowDy, android.R.attr.shadowRadius, R.attr.textAllCaps}; + public static final int[] TextInputLayout = {android.R.attr.textColorHint, android.R.attr.hint, R.attr.hintTextAppearance, R.attr.hintEnabled, R.attr.errorEnabled, R.attr.errorTextAppearance, R.attr.counterEnabled, R.attr.counterMaxLength, R.attr.counterTextAppearance, R.attr.counterOverflowTextAppearance, R.attr.hintAnimationEnabled, R.attr.passwordToggleEnabled, R.attr.passwordToggleDrawable, R.attr.passwordToggleContentDescription, R.attr.passwordToggleTint, R.attr.passwordToggleTintMode}; + public static final int[] Themes = {R.attr.circleProgressStyle, R.attr.donutProgressStyle, R.attr.arcProgressStyle}; + public static final int[] Toolbar = {android.R.attr.gravity, android.R.attr.minHeight, R.attr.title, R.attr.subtitle, R.attr.logo, R.attr.contentInsetStart, R.attr.contentInsetEnd, R.attr.contentInsetLeft, R.attr.contentInsetRight, R.attr.contentInsetStartWithNavigation, R.attr.contentInsetEndWithActions, R.attr.popupTheme, R.attr.titleTextAppearance, R.attr.subtitleTextAppearance, R.attr.titleMargin, R.attr.titleMarginStart, R.attr.titleMarginEnd, R.attr.titleMarginTop, R.attr.titleMarginBottom, R.attr.titleMargins, R.attr.maxButtonHeight, R.attr.buttonGravity, R.attr.collapseIcon, R.attr.collapseContentDescription, R.attr.navigationIcon, R.attr.navigationContentDescription, R.attr.logoDescription, R.attr.titleTextColor, R.attr.subtitleTextColor}; + public static final int[] View = {android.R.attr.theme, android.R.attr.focusable, R.attr.paddingStart, R.attr.paddingEnd, R.attr.theme}; + public static final int[] ViewBackgroundHelper = {android.R.attr.background, R.attr.backgroundTint, R.attr.backgroundTintMode}; + public static final int[] ViewStubCompat = {android.R.attr.id, android.R.attr.layout, android.R.attr.inflatedId}; + } + + public static final class xml { + public static final int device_filter = 0x7f070000; + public static final int file_provider = 0x7f070001; + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/ROIInfo.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/ROIInfo.java new file mode 100644 index 0000000..baf9ba4 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/ROIInfo.java @@ -0,0 +1,127 @@ +package cn.com.magnity.magnitycx; + +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +/* loaded from: classes.dex */ +public class ROIInfo { + public static final int TYPE_POINT = 0; + public static final int TYPE_RECT = 1; + private static volatile Lock lock = new ReentrantLock(); + private int aveTemp_; + private int maxTempPos_; + private int maxTemp_; + private int minTempPos_; + private int minTemp_; + public String name; + private int type_; + private int x0_; + private int x1_; + private int y0_; + private int y1_; + private boolean isFinished_ = false; + private boolean isBigEnouth_ = false; + private boolean isTempValid_ = false; + + public ROIInfo(int type) { + this.type_ = type; + } + + public void setBeginPoint(int x0, int y0) { + this.x0_ = x0; + this.y0_ = y0; + this.isBigEnouth_ = false; + this.isFinished_ = false; + } + + public void translate(int dx, int dy) { + this.x0_ += dx; + this.y0_ += dy; + this.x1_ += dx; + this.y1_ += dy; + } + + public void setEndPoint(int x1, int y1) { + this.x1_ = x1; + this.y1_ = y1; + int limit = MagApplication.magParameter.basePara1.fpaWidth / 12; + if (Math.abs(this.x1_ - this.x0_) > limit && Math.abs(this.y1_ - this.y0_) > limit) { + this.isBigEnouth_ = true; + } else { + this.isBigEnouth_ = false; + } + } + + public void setTempInfo(int minTemp, int maxTemp, int aveTemp, int minPos, int maxPos) { + this.maxTemp_ = maxTemp; + this.minTemp_ = minTemp; + this.aveTemp_ = aveTemp; + this.maxTempPos_ = maxPos; + this.minTempPos_ = minPos; + this.isTempValid_ = true; + } + + public boolean isPointIn(int x, int y) { + return x < this.x1_ && x > this.x0_ && y < this.y1_ && y > this.y0_; + } + + public void setFinished() { + this.isFinished_ = true; + } + + public int getBeginPointX() { + return this.x0_ > this.x1_ ? this.x1_ : this.x0_; + } + + public int getBeginPointY() { + return this.y0_ > this.y1_ ? this.y1_ : this.y0_; + } + + public int getEndPointX() { + return this.x0_ > this.x1_ ? this.x0_ : this.x1_; + } + + public int getEndPointY() { + return this.y0_ > this.y1_ ? this.y0_ : this.y1_; + } + + public int getType() { + return this.type_; + } + + public int getMaxTemp() { + return this.maxTemp_; + } + + public int getMinTemp() { + return this.minTemp_; + } + + public int getMaxPos() { + return this.maxTempPos_; + } + + public int getMinPos() { + return this.minTempPos_; + } + + public boolean isFinished() { + return this.isFinished_; + } + + public boolean isBigEnouth() { + return this.isBigEnouth_; + } + + public boolean isTempValid() { + return this.isTempValid_; + } + + public static void lock() { + lock.lock(); + } + + public static void unlock() { + lock.unlock(); + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/SettingActivity.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/SettingActivity.java new file mode 100644 index 0000000..2ce2ee7 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/SettingActivity.java @@ -0,0 +1,52 @@ +package cn.com.magnity.magnitycx; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.view.MenuItem; +import com.baidu.mobstat.StatService; + +/* loaded from: classes.dex */ +public class SettingActivity extends AppCompatActivity { + FragmentSetting fragmentSetting_; + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.support.v4.app.BaseFragmentActivityGingerbread, android.app.Activity + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_setting); + ActionBar actionBar = getSupportActionBar(); + actionBar.setHomeButtonEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + setTitle(R.string.labelSetting); + FragmentManager fm = getSupportFragmentManager(); + Fragment fragment = fm.findFragmentById(R.id.id_space_fragment_setting); + if (fragment == null) { + this.fragmentSetting_ = new FragmentSetting(); + getSupportFragmentManager().beginTransaction().add(R.id.id_space_fragment_setting, this.fragmentSetting_).commit(); + } + } + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.app.Activity + protected void onPostResume() { + super.onPostResume(); + StatService.onPageStart(getApplicationContext(), "设置主界面"); + } + + @Override // android.support.v4.app.FragmentActivity, android.app.Activity + protected void onPause() { + super.onPause(); + StatService.onPageEnd(getApplicationContext(), "设置主界面"); + } + + @Override // android.app.Activity + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + super.onBackPressed(); + break; + } + return super.onOptionsItemSelected(item); + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/StoreActivity.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/StoreActivity.java new file mode 100644 index 0000000..d5fe46d --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/StoreActivity.java @@ -0,0 +1,144 @@ +package cn.com.magnity.magnitycx; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.KeyEvent; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.ViewGroup; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.LinearLayout; +import com.baidu.mobstat.StatService; + +/* loaded from: classes.dex */ +public class StoreActivity extends AppCompatActivity { + ViewGroup mLayout; + WebView mWebView; + + public static void actionStart(Context ctx, String uri) { + Intent intent = new Intent(ctx, (Class) StoreActivity.class); + intent.putExtra("uri", uri); + ctx.startActivity(intent); + } + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.support.v4.app.BaseFragmentActivityGingerbread, android.app.Activity + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_store); + this.mLayout = (ViewGroup) findViewById(R.id.id_layout); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(-1, -1); + this.mWebView = new WebView(getApplicationContext()); + WebSettings webSettings = this.mWebView.getSettings(); + webSettings.setJavaScriptEnabled(true); + webSettings.setUseWideViewPort(true); + webSettings.setSupportZoom(true); + webSettings.setBuiltInZoomControls(true); + webSettings.setDisplayZoomControls(false); + webSettings.setCacheMode(1); + webSettings.setDomStorageEnabled(true); + webSettings.setAllowFileAccess(true); + webSettings.setJavaScriptCanOpenWindowsAutomatically(true); + webSettings.setLoadsImagesAutomatically(true); + webSettings.setDefaultTextEncodingName("utf-8"); + this.mWebView.setWebViewClient(new WebViewClient() { // from class: cn.com.magnity.magnitycx.StoreActivity.1 + @Override // android.webkit.WebViewClient + public boolean shouldOverrideUrlLoading(WebView view, String url) { + view.loadUrl(url); + return false; + } + + @Override // android.webkit.WebViewClient + public void onPageCommitVisible(WebView view, String url) { + StoreActivity.this.setTitle(StoreActivity.this.mWebView.getTitle()); + super.onPageCommitVisible(view, url); + } + }); + this.mWebView.setLayoutParams(params); + this.mLayout.addView(this.mWebView); + Bundle bundle = getIntent().getExtras(); + if (bundle != null) { + this.mWebView.loadUrl(bundle.getString("uri")); + } + } + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.app.Activity + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + this.mWebView.saveState(outState); + } + + @Override // android.app.Activity + protected void onRestoreInstanceState(Bundle savedInstanceState) { + super.onRestoreInstanceState(savedInstanceState); + this.mWebView.restoreState(savedInstanceState); + } + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.app.Activity + protected void onStart() { + super.onStart(); + this.mWebView.getSettings().setJavaScriptEnabled(true); + } + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.app.Activity + protected void onStop() { + this.mWebView.getSettings().setJavaScriptEnabled(false); + super.onStop(); + } + + @Override // android.support.v4.app.FragmentActivity, android.app.Activity + protected void onPause() { + super.onPause(); + StatService.onPageEnd(getApplicationContext(), "微商"); + } + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.app.Activity + protected void onPostResume() { + super.onPostResume(); + StatService.onPageStart(getApplicationContext(), "微商"); + } + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.app.Activity + protected void onDestroy() { + if (this.mWebView != null) { + this.mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null); + this.mWebView.clearHistory(); + this.mLayout.removeView(this.mWebView); + this.mWebView.destroy(); + this.mWebView = null; + } + super.onDestroy(); + } + + @Override // android.app.Activity, android.view.KeyEvent.Callback + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode != 4 || !this.mWebView.canGoBack()) { + return super.onKeyDown(keyCode, event); + } + this.mWebView.getSettings().setCacheMode(3); + this.mWebView.goBack(); + return true; + } + + @Override // android.app.Activity + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.about_menu, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override // android.app.Activity + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.id_cancel /* 2131624224 */: + finish(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/SupportActivity.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/SupportActivity.java new file mode 100644 index 0000000..d486d95 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/SupportActivity.java @@ -0,0 +1,56 @@ +package cn.com.magnity.magnitycx; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.view.MenuItem; +import com.baidu.mobstat.StatService; + +/* loaded from: classes.dex */ +public class SupportActivity extends AppCompatActivity { + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.support.v4.app.BaseFragmentActivityGingerbread, android.app.Activity + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_support); + ActionBar actionBar = getSupportActionBar(); + actionBar.setHomeButtonEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + FragmentManager fm = getSupportFragmentManager(); + Fragment fragment = fm.findFragmentById(R.id.id_space_fragment_setting); + if (fragment == null) { + getSupportFragmentManager().beginTransaction().add(R.id.id_space_fragment, new FragmentSupport()).commit(); + } + } + + @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.app.Activity + protected void onPostResume() { + super.onPostResume(); + StatService.onResume(this); + } + + @Override // android.support.v4.app.FragmentActivity, android.app.Activity + protected void onPause() { + super.onPause(); + StatService.onPause(this); + } + + public void showHelp() { + getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.id_space_fragment, new FragmentSupportHelp()).commit(); + } + + public void showAbout() { + getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.id_space_fragment, new FragmentSupportAbout()).commit(); + } + + @Override // android.app.Activity + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + super.onBackPressed(); + break; + } + return super.onOptionsItemSelected(item); + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/log/Logging.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/log/Logging.java new file mode 100644 index 0000000..381b513 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/log/Logging.java @@ -0,0 +1,70 @@ +package cn.com.magnity.magnitycx.log; + +import android.os.Build; +import cn.com.magnity.magnitycx.MagApplication; +import java.io.File; +import java.io.IOException; +import org.apache.log4j.FileAppender; +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.apache.log4j.PatternLayout; + +/* loaded from: classes.dex */ +public class Logging { + private static Logger logger_ = null; + + public static void trace(Object msg) { + if (logger_ != null) { + logger_.trace(msg); + } + } + + public static void debug(Object msg) { + if (logger_ != null) { + logger_.debug(msg); + } + } + + public static void info(Object msg) { + if (logger_ != null) { + logger_.info(msg); + } + } + + public static void warn(Object msg) { + if (logger_ != null) { + logger_.warn(msg); + } + } + + public static void error(Object msg) { + if (logger_ != null) { + logger_.error(msg); + } + } + + public static void fatal(Object msg) { + if (logger_ != null) { + logger_.fatal(msg); + } + } + + public static boolean init(Level level) { + if (MagApplication.magParameter.logDir.isEmpty()) { + return false; + } + String pathName = MagApplication.magParameter.logDir + File.separator + (Build.MODEL + "-Android_" + Build.VERSION.RELEASE + "_" + Build.VERSION.SDK_INT) + ".log"; + try { + PatternLayout patternLayout = new PatternLayout(); + patternLayout.setConversionPattern("%d{yyyy-MM-dd HH:mm:ss} -%-5.5p- %m %n"); + FileAppender fileAppender = new FileAppender(patternLayout, pathName); + logger_ = Logger.getLogger(Logging.class); + logger_.addAppender(fileAppender); + logger_.setLevel(level); + return true; + } catch (IOException e) { + logger_ = null; + return false; + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/AsyncLoadImage.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/AsyncLoadImage.java new file mode 100644 index 0000000..c43ab6d --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/AsyncLoadImage.java @@ -0,0 +1,138 @@ +package cn.com.magnity.magnitycx.sdk; + +import android.os.Handler; +import android.os.Message; +import java.util.ArrayList; + +/* loaded from: classes.dex */ +public class AsyncLoadImage { + private static final int MSG = 305419896; + private Handler[] handlers_; + private String imageDir_; + private volatile int maxTaskLen = Integer.MAX_VALUE; + private Object receiver_; + private volatile boolean running_; + private volatile ArrayList taskList; + private volatile ArrayList taskList_; + private ImageLoaderThread[] threads_; + private WaitCondition wcObj_; + + public interface DelegateExecute { + Object onBackToDo(Object obj); + + void onExecuteFinished(Object obj); + } + + public AsyncLoadImage(String imageDir, int threadNum, Object receiver) { + this.receiver_ = receiver; + this.imageDir_ = imageDir; + this.threads_ = new ImageLoaderThread[threadNum]; + ImageLoaderThread[] imageLoaderThreadArr = this.threads_; + int length = imageLoaderThreadArr.length; + int i = 0; + int index = 0; + while (i < length) { + ImageLoaderThread imageLoaderThread = imageLoaderThreadArr[i]; + ImageLoaderThread thread = new ImageLoaderThread(index); + thread.start(); + i++; + index++; + } + this.wcObj_ = new WaitCondition(); + this.taskList_ = new ArrayList<>(); + for (Handler handler : this.handlers_) { + new Handler() { // from class: cn.com.magnity.magnitycx.sdk.AsyncLoadImage.1 + @Override // android.os.Handler + public void handleMessage(Message msg) { + switch (msg.what) { + case AsyncLoadImage.MSG /* 305419896 */: + if (AsyncLoadImage.this.receiver_ instanceof DelegateExecute) { + ((DelegateExecute) AsyncLoadImage.this.receiver_).onExecuteFinished(msg.obj); + break; + } + break; + } + super.handleMessage(msg); + } + }; + } + } + + public void add(String name) { + synchronized (this.wcObj_.cond) { + if (!this.taskList_.contains(name)) { + if (this.taskList_.size() > this.maxTaskLen) { + } + if (!this.taskList_.contains(name)) { + this.taskList_.add(name); + this.wcObj_.notified = true; + this.wcObj_.cond.notify(); + } + } + } + } + + public void setTaskQueueLen(int len) { + synchronized (this.wcObj_.cond) { + this.maxTaskLen = len; + } + } + + public void removeAll() { + synchronized (this.wcObj_.cond) { + this.taskList_.clear(); + } + } + + public void exit() { + this.running_ = false; + synchronized (this.wcObj_.cond) { + this.wcObj_.notified = true; + this.wcObj_.cond.notifyAll(); + } + try { + for (ImageLoaderThread thread : this.threads_) { + thread.join(); + } + } catch (InterruptedException e) { + } + } + + private class ImageLoaderThread extends Thread { + private int index_; + + public ImageLoaderThread(int index) { + this.index_ = index; + } + + @Override // java.lang.Thread, java.lang.Runnable + public void run() { + while (AsyncLoadImage.this.running_) { + synchronized (AsyncLoadImage.this.wcObj_.cond) { + while (!AsyncLoadImage.this.wcObj_.notified) { + try { + AsyncLoadImage.this.wcObj_.cond.wait(); + } catch (InterruptedException e) { + } + } + AsyncLoadImage.this.wcObj_.notified = false; + if (AsyncLoadImage.this.taskList_.size() > 0) { + String name = (String) AsyncLoadImage.this.taskList_.get(0); + AsyncLoadImage.this.taskList_.remove(0); + if (AsyncLoadImage.this.running_) { + if (AsyncLoadImage.this.receiver_ instanceof DelegateExecute) { + Object object = ((DelegateExecute) AsyncLoadImage.this.receiver_).onBackToDo(name); + Message msg = new Message(); + msg.what = AsyncLoadImage.MSG; + msg.obj = object; + AsyncLoadImage.this.handlers_[this.index_].sendMessage(msg); + } + } else { + return; + } + } + } + } + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/BasePara1.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/BasePara1.java new file mode 100644 index 0000000..2fdb5d1 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/BasePara1.java @@ -0,0 +1,46 @@ +package cn.com.magnity.magnitycx.sdk; + +/* loaded from: classes.dex */ +public class BasePara1 implements Cloneable { + public int devType; + public int fpaFlip; + public int fpaGain; + public int fpaHeight; + public int fpaWidth; + public int fps; + public int gfid; + public int gsk; + public int hwVersion; + public int interFrame; + public int interLine; + public int reserved1; + public int reserved2; + public int serialNumber; + public int swVersion; + + public BasePara1() { + reset(); + } + + public void reset() { + this.serialNumber = 0; + this.hwVersion = 0; + this.devType = 0; + this.swVersion = 0; + this.reserved1 = 0; + this.fpaWidth = 0; + this.fpaHeight = 0; + this.fps = 0; + this.reserved2 = 0; + this.fpaGain = 0; + this.fpaFlip = 0; + this.interFrame = 0; + this.interLine = 0; + this.gfid = 0; + this.gsk = 0; + } + + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/BasePara2.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/BasePara2.java new file mode 100644 index 0000000..1b741b7 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/BasePara2.java @@ -0,0 +1,46 @@ +package cn.com.magnity.magnitycx.sdk; + +/* loaded from: classes.dex */ +public class BasePara2 implements Cloneable { + public float ATErrorSlope; + public int ATZeroErrorPoint; + public int baseLineAcc; + public int denoiseLevel; + public int enlargeRange; + public int ffcTriggerFrame; + public int ffcTriggerTemperature; + public short fpaTempFix; + public int laserPos; + public int reserved1; + public short reserved2; + public int reserved5; + public int reserved6; + public int shutterCloseSpeed; + public int shutterOpenSpeed; + + public BasePara2() { + reset(); + } + + public void reset() { + this.baseLineAcc = 0; + this.denoiseLevel = 0; + this.reserved1 = 0; + this.reserved2 = (short) 0; + this.fpaTempFix = (short) 0; + this.shutterCloseSpeed = 0; + this.shutterOpenSpeed = 0; + this.ffcTriggerFrame = 0; + this.ffcTriggerTemperature = 0; + this.enlargeRange = 0; + this.laserPos = 0; + this.ATZeroErrorPoint = 0; + this.ATErrorSlope = 0.0f; + this.reserved5 = 0; + this.reserved6 = 0; + } + + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/BitmapUtilities.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/BitmapUtilities.java new file mode 100644 index 0000000..49440a8 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/BitmapUtilities.java @@ -0,0 +1,72 @@ +package cn.com.magnity.magnitycx.sdk; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Matrix; +import android.graphics.Point; +import android.media.ThumbnailUtils; + +/* loaded from: classes.dex */ +public class BitmapUtilities { + public static Bitmap getBitmapThumbnail(String pathName, int width, int height) { + Bitmap bitmap = null; + BitmapFactory.Options opts = new BitmapFactory.Options(); + opts.inJustDecodeBounds = true; + BitmapFactory.decodeFile(pathName, opts); + if (opts.outWidth > 0 && opts.outHeight > 0) { + float r = Math.max(opts.outHeight / height, opts.outWidth / width); + opts.inSampleSize = (int) (r + 0.5d); + opts.inJustDecodeBounds = false; + bitmap = BitmapFactory.decodeFile(pathName, opts); + } + if (bitmap == null) { + return ThumbnailUtils.createVideoThumbnail(pathName, 1); + } + return bitmap; + } + + public static Bitmap getBitmapThumbnail(String pathName, int sampleSize) { + Bitmap bitmap = null; + BitmapFactory.Options opts = new BitmapFactory.Options(); + opts.inJustDecodeBounds = true; + BitmapFactory.decodeFile(pathName, opts); + if (opts.outWidth > 0 && opts.outHeight > 0) { + opts.inSampleSize = sampleSize; + opts.inJustDecodeBounds = false; + bitmap = BitmapFactory.decodeFile(pathName, opts); + } + if (bitmap == null) { + return ThumbnailUtils.createVideoThumbnail(pathName, 1); + } + return bitmap; + } + + public static Point getBitmapSize(String pathName) { + BitmapFactory.Options opts = new BitmapFactory.Options(); + opts.inJustDecodeBounds = true; + BitmapFactory.decodeFile(pathName, opts); + if (opts.outWidth <= 0 || opts.outHeight <= 0) { + return null; + } + return new Point(opts.outWidth, opts.outHeight); + } + + public static Bitmap getBitmapThumbnail(Bitmap bmp, int width, int height) { + Bitmap bitmap; + if (bmp == null) { + return null; + } + int bmpWidth = bmp.getWidth(); + int bmpHeight = bmp.getHeight(); + if (width > 0 && height > 0) { + Matrix matrix = new Matrix(); + float scaleWidth = width / bmpWidth; + float scaleHeight = height / bmpHeight; + matrix.postScale(scaleWidth, scaleHeight); + bitmap = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight, matrix, true); + } else { + bitmap = bmp; + } + return bitmap; + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/CaliInfo.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/CaliInfo.java new file mode 100644 index 0000000..1e85661 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/CaliInfo.java @@ -0,0 +1,22 @@ +package cn.com.magnity.magnitycx.sdk; + +/* loaded from: classes.dex */ +public class CaliInfo implements Cloneable { + public long date; + public int reserved; + public int size; + + public CaliInfo() { + reset(); + } + + public void reset() { + this.size = 0; + this.reserved = 0; + this.date = 0L; + } + + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/D2PCmd.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/D2PCmd.java new file mode 100644 index 0000000..819adf8 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/D2PCmd.java @@ -0,0 +1,13 @@ +package cn.com.magnity.magnitycx.sdk; + +/* loaded from: classes.dex */ +public class D2PCmd { + public static final int D2P_CaliHandledAck = 1538635104; + public static final int D2P_CmdHandledAck = 1538635103; + public static final int D2P_SendCaliFile = 1538635101; + public static final int D2P_SendCaliInfo = 1538635102; + public static final int D2P_SendFPAState = 1538635106; + public static final int D2P_SendLifeTime = 1538635105; + public static final int D2P_SendParameter1 = 1538635099; + public static final int D2P_SendParameter2 = 1538635100; +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/DelegateDeviceConnected.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/DelegateDeviceConnected.java new file mode 100644 index 0000000..a1c584e --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/DelegateDeviceConnected.java @@ -0,0 +1,8 @@ +package cn.com.magnity.magnitycx.sdk; + +/* loaded from: classes.dex */ +public interface DelegateDeviceConnected { + void onDeviceConnected(UsbCommunication usbCommunication); + + void onDeviceDisconnected(); +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/DelegateMedia.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/DelegateMedia.java new file mode 100644 index 0000000..4cb007c --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/DelegateMedia.java @@ -0,0 +1,10 @@ +package cn.com.magnity.magnitycx.sdk; + +/* loaded from: classes.dex */ +public interface DelegateMedia { + void onCapture(); + + void onRecordingStart(); + + void onRecordingStop(); +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/DelegateMediaStatusChanged.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/DelegateMediaStatusChanged.java new file mode 100644 index 0000000..3f2c363 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/DelegateMediaStatusChanged.java @@ -0,0 +1,8 @@ +package cn.com.magnity.magnitycx.sdk; + +/* loaded from: classes.dex */ +public interface DelegateMediaStatusChanged { + void onModeChanged(int i, int i2, int i3); + + void onSelChanged(int i, int i2); +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/DelegateOptionSelected.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/DelegateOptionSelected.java new file mode 100644 index 0000000..4ae34e6 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/DelegateOptionSelected.java @@ -0,0 +1,6 @@ +package cn.com.magnity.magnitycx.sdk; + +/* loaded from: classes.dex */ +public interface DelegateOptionSelected { + void onOptionSelected(int i, int i2); +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/DeviceController.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/DeviceController.java new file mode 100644 index 0000000..50f9692 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/DeviceController.java @@ -0,0 +1,93 @@ +package cn.com.magnity.magnitycx.sdk; + +import android.graphics.Bitmap; + +/* loaded from: classes.dex */ +public class DeviceController { + public static final int BITSPERPIXEL = 16; + + public interface ShutterCallBack { + void setShutterState(int i); + } + + public static native void Lock(); + + public static native void Unlock(); + + public static native int[] clientPos2ScreenXY(int i, int i2, int i3); + + public static native int[] clientXY2ScreenXY(int i, int i2, int i3, int i4); + + public static native boolean doRecording(Bitmap bitmap); + + public static native int getEX(); + + public static native void getExtParameter(ExtPara extPara); + + public static native boolean getOutputBMPData(Bitmap bitmap, int i); + + public static native boolean getOutputColorbarData(Bitmap bitmap, int i); + + public static native int getPreviewOrientation(); + + public static native boolean getRectTemperatureInfo(int i, int i2, int i3, int i4, int[] iArr, boolean z); + + public static native State getState(); + + public static native int getTemperature(int i, int i2, boolean z); + + public static native boolean isOutputDataReady(); + + public static native boolean isProcessImage(); + + public static native boolean isRecording(); + + public static native boolean pushFrame(byte[] bArr, int i, int i2); + + public static native boolean saveDDT(String str); + + public static native int[] screenXY2ClientXY(int i, int i2, int i3, int i4); + + public static native int[] screenXY2SensorXY(int i, int i2, int i3, int i4); + + public static native int[] sensorXY2ScreenXY(int i, int i2, int i3, int i4); + + public static native void setAutoEnlarge(int i); + + public static native void setColorPalette(int i); + + public static native void setColorbarSize(int i, int i2); + + public static native void setEX(int i, int i2, int i3); + + public static native void setEmissivity(int i, int i2); + + public static native void setExtParameter(ExtPara extPara); + + public static native void setPreviewOrientation(int i); + + public static native boolean startProcess(ShutterCallBack shutterCallBack, int i, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10, String str); + + public static native boolean startRecording(String str, int i, int i2, int i3, int i4, int i5); + + public static native void stopProcess(); + + public static native void stopRecording(); + + public static native void triggerFFC(); + + static { + System.loadLibrary("avutil-55"); + System.loadLibrary("avcodec-57"); + System.loadLibrary("swresample-2"); + System.loadLibrary("avformat-57"); + System.loadLibrary("swscale-4"); + System.loadLibrary("postproc-54"); + System.loadLibrary("avfilter-6"); + System.loadLibrary("avdevice-57"); + System.loadLibrary("cxsdk"); + System.loadLibrary("cxx2java"); + setColorbarSize(100, 20); + setColorPalette(SharedPreferencesManager.getInt("paletteIndex", 2)); + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/ExtPara.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/ExtPara.java new file mode 100644 index 0000000..13bc20d --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/ExtPara.java @@ -0,0 +1,12 @@ +package cn.com.magnity.magnitycx.sdk; + +/* loaded from: classes.dex */ +public class ExtPara { + public boolean bIsothermal; + public int dwFlip; + public int intAutoEnlargeRange; + public int intBrightOffset; + public int intContrastOffset; + public int intCurrentEnvTemperature; + public int intDetailRatio; +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/GlobalFunc.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/GlobalFunc.java new file mode 100644 index 0000000..12850bf --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/GlobalFunc.java @@ -0,0 +1,127 @@ +package cn.com.magnity.magnitycx.sdk; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.webkit.MimeTypeMap; +import cn.com.magnity.magnitycx.MagApplication; +import java.io.File; +import java.io.FileFilter; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; + +/* loaded from: classes.dex */ +public class GlobalFunc { + public static final int MEDIA_IMAGE = 0; + public static final int MEDIA_OTHER = -1; + public static final int MEDIA_VIDEO = 1; + + public static int guessMediaTypeBySuffix(String name) { + String mimeType = getMimeType(getExtension(name)); + if (mimeType == null) { + return -1; + } + if (mimeType.contains("video/")) { + return 1; + } + return mimeType.contains("image/") ? 0 : -1; + } + + public static void updateFileList(ArrayList fileNames) { + File file = new File(MagApplication.magParameter.mediaDir); + File[] files = file.listFiles(new FileFilter() { // from class: cn.com.magnity.magnitycx.sdk.GlobalFunc.1 + @Override // java.io.FileFilter + public boolean accept(File pathname) { + String name = pathname.getName().toLowerCase(); + return !name.endsWith(".ddt"); + } + }); + if (file == null || files == null) { + fileNames.clear(); + return; + } + ArrayList fileInfos = new ArrayList<>(); + for (File f : files) { + FileInfo fileInfo = new FileInfo(); + fileInfo.name = f.getName(); + fileInfo.lastModified = f.lastModified(); + fileInfos.add(fileInfo); + } + Collections.sort(fileInfos, new FileInfoComparator()); + fileNames.clear(); + Iterator it = fileInfos.iterator(); + while (it.hasNext()) { + fileNames.add(it.next().name); + } + } + + public static void notifyMediaSync(Context context, File file) { + Intent intent = new Intent("android.intent.action.MEDIA_SCANNER_SCAN_FILE"); + Uri uri = Uri.fromFile(file); + intent.setData(uri); + context.sendBroadcast(intent); + } + + public static int byteArrayToInt(byte[] b) { + return (b[0] & 255) | ((b[1] & 255) << 8) | ((b[2] & 255) << 16) | ((b[3] & 255) << 24); + } + + public static byte[] intToByteArray(int a) { + return new byte[]{(byte) (a & 255), (byte) ((a >> 8) & 255), (byte) ((a >> 16) & 255), (byte) ((a >> 24) & 255)}; + } + + public static void intToByteArray(int a, byte[] out, int offset) { + if (out.length >= offset + 4) { + int offset2 = offset + 1; + out[offset] = (byte) a; + int offset3 = offset2 + 1; + out[offset2] = (byte) (a >> 8); + int offset4 = offset3 + 1; + out[offset3] = (byte) (a >> 16); + int i = offset4 + 1; + out[offset4] = (byte) (a >> 24); + } + } + + private static String getExtension(String name) { + int idx = name.lastIndexOf("."); + if (idx <= 0) { + return ""; + } + String suffix = name.substring(idx + 1); + return suffix; + } + + private static String getMimeType(String suffix) { + if (suffix.isEmpty()) { + return null; + } + return MimeTypeMap.getSingleton().getMimeTypeFromExtension(suffix); + } + + private static class FileInfoComparator implements Comparator { + private FileInfoComparator() { + } + + @Override // java.util.Comparator + public int compare(FileInfo lhs, FileInfo rhs) { + if (lhs.lastModified > rhs.lastModified) { + return -1; + } + if (lhs.lastModified == rhs.lastModified) { + return 0; + } + return 1; + } + } + + private static class FileInfo { + public long lastModified; + public String name; + + private FileInfo() { + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/ImgHeader.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/ImgHeader.java new file mode 100644 index 0000000..bab6b75 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/ImgHeader.java @@ -0,0 +1,9 @@ +package cn.com.magnity.magnitycx.sdk; + +/* loaded from: classes.dex */ +public class ImgHeader { + public int frameIndex; + public int[] reserved = new int[4]; + public int sendBytes; + public int startCode; +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/ImgTail.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/ImgTail.java new file mode 100644 index 0000000..a025cad --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/ImgTail.java @@ -0,0 +1,13 @@ +package cn.com.magnity.magnitycx.sdk; + +import java.io.Serializable; + +/* loaded from: classes.dex */ +public class ImgTail implements Serializable { + public int camTemp; + public int endCode; + public int fpaTemp; + public int frameIndex; + public int intDrop; + public int[] reserved = new int[2]; +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/LruCacheManager.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/LruCacheManager.java new file mode 100644 index 0000000..f3797ce --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/LruCacheManager.java @@ -0,0 +1,52 @@ +package cn.com.magnity.magnitycx.sdk; + +import android.graphics.Bitmap; +import android.os.Build; +import android.support.v4.util.LruCache; + +/* loaded from: classes.dex */ +public class LruCacheManager { + private static final int CACHE_SIZE = 10485760; + private static LruCacheManager instance_; + private LruCache memCache_; + + private LruCacheManager() { + } + + public static LruCacheManager getInstance() { + if (instance_ == null) { + instance_ = new LruCacheManager(); + instance_.init(); + } + return instance_; + } + + private void init() { + int maxMemory = (int) Runtime.getRuntime().maxMemory(); + int cacheSize = CACHE_SIZE; + if (CACHE_SIZE > maxMemory / 8) { + cacheSize = maxMemory / 8; + } + this.memCache_ = new LruCache(cacheSize) { // from class: cn.com.magnity.magnitycx.sdk.LruCacheManager.1 + /* JADX INFO: Access modifiers changed from: protected */ + @Override // android.support.v4.util.LruCache + public int sizeOf(String key, Bitmap bitmap) { + return Build.VERSION.SDK_INT >= 12 ? bitmap.getByteCount() : bitmap.getRowBytes() * bitmap.getHeight(); + } + + /* JADX INFO: Access modifiers changed from: protected */ + @Override // android.support.v4.util.LruCache + public void entryRemoved(boolean evicted, String key, Bitmap oldValue, Bitmap newValue) { + super.entryRemoved(evicted, (boolean) key, oldValue, newValue); + } + }; + } + + public synchronized Bitmap put(String key, Bitmap value) { + return this.memCache_.put(key, value); + } + + public synchronized Bitmap get(String key) { + return this.memCache_.get(key); + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/MagParameter.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/MagParameter.java new file mode 100644 index 0000000..9a231ac --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/MagParameter.java @@ -0,0 +1,228 @@ +package cn.com.magnity.magnitycx.sdk; + +import android.content.Context; +import android.os.Environment; +import java.io.File; + +/* loaded from: classes.dex */ +public class MagParameter { + public static final int DISPMODE_IRONLY = 1; + public static final int DISPMODE_PIP = 0; + public static final int EM_LEVEL1 = 100; + public static final int EM_LEVEL2 = 90; + public static final int EM_LEVEL3 = 80; + public static final int EM_LEVEL4 = 70; + public static final String EVENT_C1 = "c1设备启动"; + public static final String EVENT_C1_ID = "C1"; + public static final String EVENT_C3 = "c3设备启动"; + public static final String EVENT_C3_ID = "C3"; + public static final String EVENT_CLICK_ABOUT = "点击关于"; + public static final String EVENT_CLICK_ABOUT_ID = "CLICK_ABOUT"; + public static final String EVENT_CLICK_PRODUCT = "点击产品"; + public static final String EVENT_CLICK_PRODUCT_ID = "CLICK_PRODUCT"; + public static final String EVENT_CLICK_SHARE = "点击分享"; + public static final String EVENT_CLICK_SHARE_ID = "CLICK_SHARE"; + public static final String EVENT_COLOR_PALETTE = "调色板"; + public static final String EVENT_COLOR_PALETTE_ID = "COLOR_PALETTE"; + public static final String EVENT_DIABLE_MAX_TEMP = "关闭最高温测温"; + public static final String EVENT_DIABLE_MAX_TEMP_ID = "DISABLE_MAX_TEMP"; + public static final String EVENT_DISABLE_CENTER_TEMP = "关闭中心测温"; + public static final String EVENT_DISABLE_CENTER_TEMP_ID = "DISABLE_CENTER_TEMP"; + public static final String EVENT_DISABLE_LASER = "关闭激光"; + public static final String EVENT_DISABLE_LASER_ID = "DISABLE_LASER"; + public static final String EVENT_DISABLE_VISWND = "关闭可见光"; + public static final String EVENT_DISABLE_VISWND_ID = "DISABLE_VISWND"; + public static final String EVENT_EMISSIVITY_DARK = "辐射率暗光"; + public static final String EVENT_EMISSIVITY_DARK_ID = "EMISSIVITY_DARK"; + public static final String EVENT_EMISSIVITY_HALF = "辐射率半光"; + public static final String EVENT_EMISSIVITY_HALF_ID = "EMISSIVITY_HALF"; + public static final String EVENT_EMISSIVITY_LIGHT = "辐射率亮光"; + public static final String EVENT_EMISSIVITY_LIGHT_ID = "EMISSIVITY_LIGHT"; + public static final String EVENT_EMISSIVITY_NONE = "辐射率无光"; + public static final String EVENT_EMISSIVITY_NONE_ID = "EMISSIVITY_NONE"; + public static final String EVENT_ENABLE_CENTER_TEMP = "打开中心测温"; + public static final String EVENT_ENABLE_CENTER_TEMP_ID = "ENABLE_CENTER_TEMP"; + public static final String EVENT_ENABLE_LASER = "打开激光"; + public static final String EVENT_ENABLE_LASER_ID = "ENABLE_LASER"; + public static final String EVENT_ENABLE_MAX_TEMP = "打开最高温测温"; + public static final String EVENT_ENABLE_MAX_TEMP_ID = "ENABLE_MAX_TEMP"; + public static final String EVENT_ENABLE_VISWND = "打开可见光"; + public static final String EVENT_ENABLE_VISWND_ID = "ENABLE_VISWND"; + public static final String EVENT_ENTER_COMPANY_WEBSITE = "进入官网"; + public static final String EVENT_ENTER_COMPANY_WEBSITE_ID = "ENTER_COMPANY_WEBSITE"; + public static final String EVENT_ENTER_WECHAT_STORE = "进入微店"; + public static final String EVENT_ENTER_WECHAT_STORE_ID = "ENTER_WECHAT_STORE"; + public static final String EVENT_FLIP_HORIZONTAL = "水平翻转"; + public static final String EVENT_FLIP_HORIZONTAL_ID = "FLIP_HORIZONTAL"; + public static final String EVENT_FLIP_VERTICAL = "竖直翻转"; + public static final String EVENT_FLIP_VERTICAL_ID = "FLIP_VERTICAL"; + public static final String EVENT_FRAME_RATE_HIGH = "帧率高"; + public static final String EVENT_FRAME_RATE_HIGH_ID = "FRAME_RATE_HIGH"; + public static final String EVENT_FRAME_RATE_LOW = "帧率低"; + public static final String EVENT_FRAME_RATE_LOW_ID = "FRAME_RATE_LOW"; + public static final String EVENT_PHOTO = "拍照"; + public static final String EVENT_PHOTO_ID = "PHOTO"; + public static final String EVENT_ROIT_TRACE = "矩形测温"; + public static final String EVENT_ROIT_TRACE_ID = "ROIT_TRACE"; + public static final String EVENT_TRACE_MAX = "目标最高温"; + public static final String EVENT_TRACE_MAXMIN = "目标全"; + public static final String EVENT_TRACE_MAXMIN_ID = "TRACE_MAXMIN"; + public static final String EVENT_TRACE_MAX_ID = "TRACE_MAX"; + public static final String EVENT_TRACE_MIN = "目标最低温"; + public static final String EVENT_TRACE_MIN_ID = "TRACE_MIN"; + public static final String EVENT_TRACE_NONE = "目标无"; + public static final String EVENT_TRACE_NONE_ID = "TRACE_NONE"; + public static final String EVENT_VIDEO = "录像"; + public static final String EVENT_VIDEO_ID = "VIDEO"; + public static final String EVENT_VISWND_LARGE = "可见光尺寸大"; + public static final String EVENT_VISWND_LARGE_ID = "VISWND_LARGE"; + public static final String EVENT_VISWND_MIDDLE = "可见光尺寸中"; + public static final String EVENT_VISWND_MIDDLE_ID = "VISWND_MIDDLE"; + public static final String EVENT_VISWND_SMALL = "可见光尺寸小"; + public static final String EVENT_VISWND_SMALL_ID = "VISWND_SMALL"; + public static final int FLIP_HOR = 1; + public static final int FLIP_NO = 0; + public static final int FLIP_VER = 2; + public static final int FPS_HIGH = 0; + public static final int FPS_LOW = 1; + public static final String KEY_DISPMODE = "dispMode"; + public static final String KEY_EMISSIVITY = "emissivity"; + public static final String KEY_EXMODE = "exMode"; + public static final String KEY_FLIPMODE = "flipMode"; + public static final String KEY_FPSMODE = "fpsMode"; + public static final String KEY_MAXMINTRACE = "maxMinTrace"; + public static final String KEY_ONCETIPMEDIALONGCLICK = "onceTipMediaLongClick2"; + public static final String KEY_ONCETIPVISIBLEMOVE = "onceTipVisibleMove2"; + public static final String KEY_SHOWCROSS = "isShowCross"; + public static final String KEY_SHOWMOVINGCROSS = "isShowMovingCross"; + public static final String KEY_TRACEMAXMIN = "isTraceMaxMin"; + public static final String KEY_TRACEROI = "isTraceRoi"; + public static final String KEY_VISCAMID = "visCameraId"; + public static final String KEY_VISWNDLEFTMARGIN = "visWndLeftMargin"; + public static final String KEY_VISWNDSIZE = "visWndSize"; + public static final String KEY_VISWNDTOPMARGIN = "visWndTopMargin"; + public static final int TRACE_MAX = 0; + public static final int TRACE_MAXMIN = 2; + public static final int TRACE_MIN = 1; + public static final int TRACE_NONE = -1; + public static final int TYPE_160CORE = 3; + public static final int TYPE_C1 = 0; + public static final int TYPE_C1Pro = 5; + public static final int TYPE_C1ProLite = 6; + public static final int TYPE_C3 = 1; + public static final int TYPE_C3P = 2; + public static final int TYPE_C6 = 4; + public static final int VISWND_LARGE = 2; + public static final int VISWND_MEDIUM = 1; + public static final int VISWND_SMALL = 0; + public BasePara1 basePara1; + public BasePara2 basePara2; + public CaliInfo caliInfo; + public int dispMode; + public int emissivity; + public int fpsMode; + public int imageEX; + public int imageFlip; + public boolean isLaserOn; + public boolean isShowCross; + public boolean isShowMovingCross; + public boolean isTraceMaxMin; + public boolean isTraceRoi; + public int maxMinTrace; + public int onceTipMediaLongClick; + public int onceTipVisibleMove; + public int portraitScreenHeight; + public int portraitScreenWidth; + public int visCameraId; + public int visWndLeftMargin; + public int visWndSize; + public int visWndTopMargin; + public String logDir = ""; + public String caliDir = ""; + public String mediaDir = ""; + public String otherDir = ""; + + public MagParameter(Context context) { + SharedPreferencesManager.init(context); + this.basePara1 = new BasePara1(); + this.basePara2 = new BasePara2(); + this.caliInfo = new CaliInfo(); + this.dispMode = SharedPreferencesManager.getInt(KEY_DISPMODE, 1); + this.isShowCross = SharedPreferencesManager.getBoolean(KEY_SHOWCROSS, false); + this.isShowMovingCross = SharedPreferencesManager.getBoolean(KEY_SHOWMOVINGCROSS, false); + this.isTraceMaxMin = SharedPreferencesManager.getBoolean(KEY_TRACEMAXMIN, false); + this.isLaserOn = false; + this.isTraceRoi = SharedPreferencesManager.getBoolean(KEY_TRACEROI, false); + this.visCameraId = SharedPreferencesManager.getInt(KEY_VISCAMID, 0); + this.visWndSize = SharedPreferencesManager.getInt(KEY_VISWNDSIZE, 1); + this.maxMinTrace = SharedPreferencesManager.getInt(KEY_MAXMINTRACE, 0); + this.imageFlip = SharedPreferencesManager.getInt(KEY_FLIPMODE, 0); + this.imageEX = SharedPreferencesManager.getInt(KEY_EXMODE, 0); + this.emissivity = SharedPreferencesManager.getInt(KEY_EMISSIVITY, 100); + this.visWndLeftMargin = SharedPreferencesManager.getInt(KEY_VISWNDLEFTMARGIN, -1); + this.visWndTopMargin = SharedPreferencesManager.getInt(KEY_VISWNDTOPMARGIN, 0); + this.onceTipMediaLongClick = SharedPreferencesManager.getInt(KEY_ONCETIPMEDIALONGCLICK, 3); + this.onceTipVisibleMove = SharedPreferencesManager.getInt(KEY_ONCETIPVISIBLEMOVE, 3); + this.fpsMode = SharedPreferencesManager.getInt(KEY_FPSMODE, 1); + createDirs(); + } + + private void createDirs() { + if (Environment.getExternalStorageState().equals("mounted")) { + String pathName = Environment.getExternalStorageDirectory().getPath() + File.separator + "magnity" + File.separator + "Cx"; + File file = new File(pathName); + if (file.exists() || file.mkdirs()) { + String pathName2 = pathName + File.separator; + this.logDir = pathName2 + "log"; + File file2 = new File(this.logDir); + if (!file2.exists()) { + file2.mkdirs(); + } + this.caliDir = pathName2 + "others"; + File file3 = new File(this.caliDir); + if (!file3.exists()) { + file3.mkdirs(); + } + this.mediaDir = pathName2 + "media"; + File file4 = new File(this.mediaDir); + if (!file4.exists()) { + file4.mkdirs(); + } + this.otherDir = pathName2 + "others"; + File file5 = new File(this.otherDir); + if (!file5.exists()) { + file5.mkdirs(); + } + } + } + } + + public class Size { + private int height_; + private int width_; + + public Size() { + } + + public Size(int width, int height) { + this.width_ = width; + this.height_ = height; + } + + public void setWidth(int width) { + this.width_ = width; + } + + public void setHeight(int height) { + this.height_ = height; + } + + public int getWidth() { + return this.width_; + } + + public int getHeight() { + return this.height_; + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/MsgBus.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/MsgBus.java new file mode 100644 index 0000000..9602fe8 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/MsgBus.java @@ -0,0 +1,77 @@ +package cn.com.magnity.magnitycx.sdk; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Parcelable; +import android.support.v4.content.LocalBroadcastManager; +import cn.com.magnity.magnitycx.MagApplication; + +/* loaded from: classes.dex */ +public class MsgBus { + private static MsgBus mInstance; + private static LocalBroadcastManager mLocalBroadcastManager; + + public static synchronized MsgBus getInstance() { + MsgBus msgBus; + synchronized (MsgBus.class) { + if (mInstance == null) { + mInstance = new MsgBus(MagApplication.getInstance()); + } + msgBus = mInstance; + } + return msgBus; + } + + public MsgBus(Context context) { + mLocalBroadcastManager = LocalBroadcastManager.getInstance(context.getApplicationContext()); + } + + public void register(BroadcastReceiver receiver, String action) { + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(action); + mLocalBroadcastManager.registerReceiver(receiver, intentFilter); + } + + public void register(BroadcastReceiver receiver, String[] actions) { + IntentFilter intentFilter = new IntentFilter(); + for (String msg : actions) { + intentFilter.addAction(msg); + } + mLocalBroadcastManager.registerReceiver(receiver, intentFilter); + } + + public void unregister(BroadcastReceiver receiver) { + mLocalBroadcastManager.unregisterReceiver(receiver); + } + + public void postEmptytMsg(String msg) { + mLocalBroadcastManager.sendBroadcast(new Intent(msg)); + } + + public void postMsg(String msg, String tag, int val) { + Intent intent = new Intent(msg); + intent.putExtra(tag, val); + mLocalBroadcastManager.sendBroadcast(intent); + } + + public void postMsg(String msg, String tag, String val) { + Intent intent = new Intent(msg); + intent.putExtra(tag, val); + mLocalBroadcastManager.sendBroadcast(intent); + } + + public void postMsg(String msg, String tag, Parcelable parcel) { + Intent intent = new Intent(msg); + intent.putExtra(tag, parcel); + mLocalBroadcastManager.sendBroadcast(intent); + } + + public void postMsg(String msg, String tag1, Parcelable parcel, String tag2, int val) { + Intent intent = new Intent(); + intent.putExtra(tag1, parcel); + intent.putExtra(tag2, val); + mLocalBroadcastManager.sendBroadcast(intent); + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/Observable.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/Observable.java new file mode 100644 index 0000000..e5c06fe --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/Observable.java @@ -0,0 +1,35 @@ +package cn.com.magnity.magnitycx.sdk; + +import java.util.ArrayList; + +/* loaded from: classes.dex */ +public abstract class Observable { + protected final ArrayList observers_ = new ArrayList<>(); + + public void registerObserver(T observer) { + if (observer != null) { + synchronized (this.observers_) { + if (!this.observers_.contains(observer)) { + this.observers_.add(observer); + } + } + } + } + + public void unregisterObserver(T observer) { + if (observer != null) { + synchronized (this.observers_) { + int index = this.observers_.indexOf(observer); + if (index != -1) { + this.observers_.remove(index); + } + } + } + } + + public void unregisterAll() { + synchronized (this.observers_) { + this.observers_.clear(); + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/P2DCmd.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/P2DCmd.java new file mode 100644 index 0000000..3a9f1b6 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/P2DCmd.java @@ -0,0 +1,20 @@ +package cn.com.magnity.magnitycx.sdk; + +/* loaded from: classes.dex */ +public class P2DCmd { + public static final int P2D_GetCaliFile = 1807136368; + public static final int P2D_GetCaliInfo = 1807136367; + public static final int P2D_GetFPAState = 1807136376; + public static final int P2D_GetLifeTime = 1807136373; + public static final int P2D_GetParameter1 = 1807136363; + public static final int P2D_GetParameter2 = 1807136364; + public static final int P2D_PowerSave = 1807136375; + public static final int P2D_SendCaliFile = 1807136369; + public static final int P2D_SetFrameRate = 1807136377; + public static final int P2D_SetLaserState = 1807136374; + public static final int P2D_SetParameter1 = 1807136365; + public static final int P2D_SetParameter2 = 1807136366; + public static final int P2D_SetShutterState = 1807136370; + public static final int P2D_StartTransferImg = 1807136371; + public static final int P2D_StopTransferImg = 1807136372; +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/SharedPreferencesManager.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/SharedPreferencesManager.java new file mode 100644 index 0000000..06b2d69 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/SharedPreferencesManager.java @@ -0,0 +1,58 @@ +package cn.com.magnity.magnitycx.sdk; + +import android.content.Context; +import android.content.SharedPreferences; + +/* loaded from: classes.dex */ +public class SharedPreferencesManager { + private static SharedPreferences.Editor editor_; + private static SharedPreferences preferences_; + + public static void init(Context context) { + preferences_ = context.getApplicationContext().getSharedPreferences("magnitycx", 0); + editor_ = preferences_.edit(); + } + + public static boolean commit() { + return editor_.commit(); + } + + public static SharedPreferences.Editor putInt(String key, int value) { + return editor_.putInt(key, value); + } + + public static void putIntWithCommit(String key, int value) { + editor_.putInt(key, value); + editor_.commit(); + } + + public static int getInt(String key, int defValue) { + return preferences_.getInt(key, defValue); + } + + public static SharedPreferences.Editor putFloat(String key, float value) { + return editor_.putFloat(key, value); + } + + public static void putFloatWithCommit(String key, float value) { + editor_.putFloat(key, value); + editor_.commit(); + } + + public static float getFloat(String key, float defValue) { + return preferences_.getFloat(key, defValue); + } + + public static SharedPreferences.Editor putBoolean(String key, boolean value) { + return editor_.putBoolean(key, value); + } + + public static void putBooleanWithCommit(String key, boolean value) { + editor_.putBoolean(key, value); + editor_.commit(); + } + + public static boolean getBoolean(String key, boolean defValue) { + return preferences_.getBoolean(key, defValue); + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/State.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/State.java new file mode 100644 index 0000000..aa833c0 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/State.java @@ -0,0 +1,25 @@ +package cn.com.magnity.magnitycx.sdk; + +import java.util.Arrays; + +/* loaded from: classes.dex */ +public class State implements Cloneable { + public int intAveNETDt; + public int intAveTemperature; + public int[] intHistTemperature = new int[256]; + public int intMaxTemperature; + public int intMaxX; + public int intMaxY; + public int intMinTemperature; + public int intMinX; + public int intMinY; + public int intSTDTemperature; + + public Object clone() throws CloneNotSupportedException { + State state = (State) super.clone(); + if (this.intHistTemperature != null) { + state.intHistTemperature = Arrays.copyOf(this.intHistTemperature, this.intHistTemperature.length); + } + return state; + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/TimerHelper.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/TimerHelper.java new file mode 100644 index 0000000..95495fe --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/TimerHelper.java @@ -0,0 +1,29 @@ +package cn.com.magnity.magnitycx.sdk; + +import java.util.Timer; +import java.util.TimerTask; + +/* loaded from: classes.dex */ +public abstract class TimerHelper { + private Timer timer_ = null; + + public abstract void run(); + + public void start(long delay, long period) { + stop(); + this.timer_ = new Timer(); + this.timer_.schedule(new TimerTask() { // from class: cn.com.magnity.magnitycx.sdk.TimerHelper.1 + @Override // java.util.TimerTask, java.lang.Runnable + public void run() { + TimerHelper.this.run(); + } + }, delay, period); + } + + public void stop() { + if (this.timer_ != null) { + this.timer_.cancel(); + this.timer_ = null; + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/UsbCommunication.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/UsbCommunication.java new file mode 100644 index 0000000..c43cf84 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/UsbCommunication.java @@ -0,0 +1,966 @@ +package cn.com.magnity.magnitycx.sdk; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.hardware.usb.UsbDevice; +import android.hardware.usb.UsbDeviceConnection; +import android.hardware.usb.UsbEndpoint; +import android.hardware.usb.UsbInterface; +import android.hardware.usb.UsbManager; +import android.os.Handler; +import android.os.Message; +import android.support.v4.media.TransportMediator; +import android.support.v7.widget.helper.ItemTouchHelper; +import cn.com.magnity.magnitycx.ImageViewer; +import cn.com.magnity.magnitycx.MagApplication; +import cn.com.magnity.magnitycx.R; +import cn.com.magnity.magnitycx.log.Logging; +import cn.com.magnity.magnitycx.sdk.DeviceController; +import com.baidu.mobstat.Config; +import com.baidu.mobstat.autotrace.Common; +import java.io.File; +import java.io.FileOutputStream; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; +import org.apache.log4j.Priority; + +/* loaded from: classes.dex */ +public class UsbCommunication implements DeviceController.ShutterCallBack { + private static final int DOWNLOAD_CALI_TIMEOUT = 5000; + private static final int HEADER_SIZE = 28; + private static final int IMG_END_CODE = 464630044; + private static final int IMG_START_CODE = 464630043; + private static final int MAX_CALI_FILE_LEN = 104857600; + private static final int MAX_RECEIVED_LEN = 16384; + private static final int MIN_CALI_FILE_LEN = 65536; + public static final String MSG_SET_BASEPARAMETER = "set_baseparameter"; + public static final String MSG_TRIGGER_FFC = "trigger_ffc"; + public static final int PROGRESS_CALI_ID = 0; + private static final int PROGRESS_CANCEL = 3; + private static final int PROGRESS_CHANGED = 2; + private static final int PROGRESS_FINISHED = 1; + private static final int PROGRESS_START = 0; + public static final int PROGRESS_WAIT_FOR_CORRECT_STREAM_ID = 1; + private static final int QUERY_DEVICE_LIFETIME = 4; + private static final int TAIL_SIZE = 28; + private static final int TIMEOUT = 800; + private static final int TIME_FOR_DEVICE_INIT = 15000; + private static volatile Lock lock_ = new ReentrantLock(); + private static volatile long[] ticks_ = new long[20]; + private volatile int camTemp_; + private UsbConnection conn_; + private volatile int fpaTemp_; + private byte[] imgExchangeBuf1_; + private ImageViewer imgViewer_; + private volatile boolean isExitThreadImgProcess_; + private IProgressCallback progressCallback_; + private ThreadCaliRecv threadCaliRecv_; + private ThreadImgProcess threadImgProcess_; + private ThreadImgRecv threadImgRecv_; + private UsbDeviceConnection usbConn_; + private UsbEndpoint usbEpCaliIn_; + private UsbEndpoint usbEpCaliOut_; + private UsbEndpoint usbEpCmdIn_; + private UsbEndpoint usbEpCmdOut_; + private UsbEndpoint usbEpImgIn_; + private UsbInterface usbInterface_; + private volatile boolean connected_ = false; + private volatile boolean isExitCaliRecvThread = false; + private WaitCondition condImgProcess_ = new WaitCondition(); + private volatile boolean isToRecvFirstCaliPacket_ = false; + private String caliPathName_ = ""; + private Handler handler_ = new Handler() { // from class: cn.com.magnity.magnitycx.sdk.UsbCommunication.1 + @Override // android.os.Handler + public void handleMessage(Message msg) { + super.handleMessage(msg); + switch (msg.what) { + case 0: + if (UsbCommunication.this.progressCallback_ != null) { + UsbCommunication.this.progressCallback_.progressStart(((Integer) msg.obj).intValue()); + break; + } + break; + case 1: + if (UsbCommunication.this.progressCallback_ != null) { + UsbCommunication.this.progressCallback_.progressFinished(((Integer) msg.obj).intValue()); + break; + } + break; + case 2: + if (UsbCommunication.this.progressCallback_ != null) { + UsbCommunication.this.progressCallback_.progressChanged(msg.arg1, msg.arg2); + break; + } + break; + case 3: + if (UsbCommunication.this.progressCallback_ != null) { + UsbCommunication.this.progressCallback_.progressCancel(((Integer) msg.obj).intValue()); + break; + } + break; + case 4: + int t = UsbCommunication.this.getDevLifeTime(); + if (t != -1) { + if (MagApplication.magParameter.basePara1.devType == 0 || MagApplication.magParameter.basePara1.devType == 5 || MagApplication.magParameter.basePara1.devType == 6 || MagApplication.magParameter.basePara1.devType == 3) { + if (t > 5000) { + if (UsbCommunication.this.imgViewer_.getImageStableCounter() == 4) { + } + UsbCommunication.this.imgViewer_.setImageStableCounter(0); + } else { + UsbCommunication.this.imgViewer_.setImageStableCounter(4); + } + } else if (MagApplication.magParameter.basePara1.devType == 1 || MagApplication.magParameter.basePara1.devType == 2) { + if (t > 26000) { + if (UsbCommunication.this.imgViewer_.getImageStableCounter() == 1) { + DeviceController.Lock(); + DeviceController.triggerFFC(); + DeviceController.Unlock(); + } + UsbCommunication.this.imgViewer_.setImageStableCounter(0); + } else if (t > 19500) { + if (UsbCommunication.this.imgViewer_.getImageStableCounter() == 2) { + DeviceController.Lock(); + DeviceController.triggerFFC(); + DeviceController.Unlock(); + } + UsbCommunication.this.imgViewer_.setImageStableCounter(1); + } else if (t > 13000) { + if (UsbCommunication.this.imgViewer_.getImageStableCounter() == 3) { + DeviceController.Lock(); + DeviceController.triggerFFC(); + DeviceController.Unlock(); + } + UsbCommunication.this.imgViewer_.setImageStableCounter(2); + } else if (t > 6500) { + if (UsbCommunication.this.imgViewer_.getImageStableCounter() == 4) { + DeviceController.Lock(); + DeviceController.triggerFFC(); + DeviceController.Unlock(); + } + UsbCommunication.this.imgViewer_.setImageStableCounter(3); + } else { + UsbCommunication.this.imgViewer_.setImageStableCounter(4); + } + } + if (t > 40000) { + UsbCommunication.this.imgViewer_.setTempStableFlag(true); + break; + } else { + UsbCommunication.this.imgViewer_.setTempStableFlag(false); + break; + } + } + break; + } + } + }; + private BroadcastReceiver mReceiver = new BroadcastReceiver() { // from class: cn.com.magnity.magnitycx.sdk.UsbCommunication.2 + @Override // android.content.BroadcastReceiver + public void onReceive(Context context, Intent intent) { + switch (intent.getAction()) { + case "set_baseparameter": + UsbCommunication.this.setFrameRate(); + DeviceController.triggerFFC(); + break; + case "trigger_ffc": + DeviceController.triggerFFC(); + break; + } + } + }; + + public interface DelegateNewFrame { + void onNewFrameReceived(int i, int i2); + } + + public interface IProgressCallback { + void progressCancel(int i); + + void progressChanged(int i, int i2); + + void progressFinished(int i); + + void progressStart(int i); + } + + /* JADX INFO: Access modifiers changed from: private */ + public int getDevLifeTime() { + int i = -1; + if (sendEmptyCmd(P2DCmd.P2D_GetLifeTime, TIMEOUT) < 0) { + Logging.error("Fail to get device lifetime"); + } + byte[] data = new byte[64]; + int len = recvCmd(data, 0, data.length, TIMEOUT); + if (len < 0) { + Logging.error("Fail to get lifetime ack"); + } else if (len < 4) { + Logging.error("Get wrong ack size(" + len + ")"); + } else if (len < 8) { + Logging.error("Get wrong ack size(" + len + ", cmd: " + GlobalFunc.byteArrayToInt(data) + ")"); + } else { + ByteBuffer bb = ByteBuffer.wrap(data, 0, len); + bb.order(ByteOrder.LITTLE_ENDIAN); + try { + if (bb.getInt() == 1538635105) { + i = bb.getInt(); + } else { + Logging.error("Get wrong cmd(expected is lifetime)"); + } + } catch (IndexOutOfBoundsException e) { + Logging.error("Exception of get liftime"); + } + } + return i; + } + + public void setCallbackReceiver(IProgressCallback cb) { + this.progressCallback_ = cb; + } + + public UsbCommunication(UsbConnection conn, UsbManager usbMgr, UsbDevice device, IProgressCallback cb) throws Exception { + this.conn_ = conn; + this.progressCallback_ = cb; + this.usbConn_ = usbMgr.openDevice(device); + if (this.usbConn_ == null) { + throw new Exception("Unable to open USB device"); + } + if (device.getInterfaceCount() < 1) { + throw new Exception("Unable to get USB interface"); + } + this.usbInterface_ = device.getInterface(0); + if (!this.usbConn_.claimInterface(this.usbInterface_, true)) { + throw new Exception("Unable to claim USB interface"); + } + if (this.usbInterface_.getEndpointCount() < 4) { + throw new Exception("Unable to get USB endpoint (" + this.usbInterface_.getEndpointCount() + ")"); + } + for (int i = this.usbInterface_.getEndpointCount() - 1; i != -1; i--) { + UsbEndpoint ep = this.usbInterface_.getEndpoint(i); + switch (ep.getAddress()) { + case 3: + this.usbEpCmdOut_ = ep; + break; + case 5: + this.usbEpCaliOut_ = ep; + break; + case 129: + this.usbEpImgIn_ = ep; + break; + case TransportMediator.KEYCODE_MEDIA_RECORD /* 130 */: + this.usbEpCmdIn_ = ep; + break; + case 132: + this.usbEpCaliIn_ = ep; + break; + default: + Logging.warn("Unknown endpoint found."); + break; + } + } + if (this.usbEpCmdIn_ == null || this.usbEpCmdOut_ == null || this.usbEpCaliIn_ == null || this.usbEpCaliOut_ == null || this.usbEpImgIn_ == null) { + Logging.warn("Some endpoint lost."); + } + } + + public void setImageViewer(ImageViewer imageViewer) { + this.imgViewer_ = imageViewer; + } + + public int connect() { + if (this.connected_) { + return 1; + } + MsgBus.getInstance().register(this.mReceiver, new String[]{MSG_SET_BASEPARAMETER, MSG_TRIGGER_FFC}); + byte[] data = new byte[64]; + if (sendEmptyCmd(P2DCmd.P2D_GetParameter1, TIMEOUT) < 0) { + Logging.error("Fail to get parameter1"); + return -1; + } + int len = recvCmd(data, 0, data.length, TIMEOUT); + if (len > 0) { + if (parseCmd(data, len) != 1) { + return -1; + } + if (MagApplication.magParameter.basePara1.devType != 0 && MagApplication.magParameter.basePara1.devType != 5 && MagApplication.magParameter.basePara1.devType != 6 && MagApplication.magParameter.basePara1.devType != 1 && MagApplication.magParameter.basePara1.devType != 2 && MagApplication.magParameter.basePara1.devType != 3) { + Logging.error("unknown device type " + MagApplication.magParameter.basePara1.devType); + return -1; + } + if (sendEmptyCmd(P2DCmd.P2D_GetParameter2, TIMEOUT) < 0) { + Logging.error("Fail to get parameter2"); + return -1; + } + int len2 = recvCmd(data, 0, data.length, TIMEOUT); + if (len2 > 0) { + if (parseCmd(data, len2) != 1) { + return -1; + } + if (sendEmptyCmd(P2DCmd.P2D_GetCaliInfo, TIMEOUT) < 0) { + Logging.error("Fail to get remote file info"); + return -1; + } + int len3 = recvCmd(data, 0, data.length, TIMEOUT); + if (len3 > 0) { + int ret = parseCmd(data, len3); + if (ret == 1) { + return !startTransfer(this.caliPathName_) ? -1 : 1; + } + return ret; + } + Logging.error("Fail to get remote file info"); + return -1; + } + Logging.error("Fail to get parameter2 ack"); + return -1; + } + Logging.error("Fail to get parameter1 ack"); + return -1; + } + + /* JADX INFO: Access modifiers changed from: private */ + public boolean startTransfer(String caliPathName) { + BasePara1 para1 = MagApplication.magParameter.basePara1; + BasePara2 para2 = MagApplication.magParameter.basePara2; + if (!DeviceController.startProcess(this, para1.fpaWidth, para1.fpaHeight, para1.serialNumber, para1.devType, para2.shutterCloseSpeed, para2.shutterOpenSpeed, para2.ffcTriggerFrame, para2.ffcTriggerTemperature, SharedPreferencesManager.getInt("paletteIndex", 2), para2.baseLineAcc, caliPathName)) { + Logging.error("SDK start fail"); + try { + File f = new File(caliPathName); + f.delete(); + return false; + } catch (Exception e) { + return false; + } + } + DeviceController.setEX(MagApplication.magParameter.imageEX, MagApplication.magParameter.basePara1.fpaWidth / 2, MagApplication.magParameter.basePara1.fpaHeight / 2); + ExtPara param = new ExtPara(); + DeviceController.Lock(); + DeviceController.getExtParameter(param); + param.dwFlip = MagApplication.magParameter.imageFlip; + DeviceController.setExtParameter(param); + DeviceController.setAutoEnlarge(para2.enlargeRange); + DeviceController.Unlock(); + Logging.info("****Start****"); + this.connected_ = true; + this.threadImgRecv_ = new ThreadImgRecv(); + this.threadImgRecv_.start(); + this.threadImgProcess_ = new ThreadImgProcess(); + this.isExitThreadImgProcess_ = false; + this.condImgProcess_.notified = false; + this.threadImgProcess_.start(); + try { + Thread.sleep(5L); + } catch (InterruptedException e2) { + } + if (sendEmptyCmd(P2DCmd.P2D_StartTransferImg, Common.EDIT_SNAPSHOT_INTERVAL) < 0) { + Logging.error("Fail to start remote transferring"); + DeviceController.stopProcess(); + return false; + } + if (para1.devType == 1) { + MagApplication.magParameter.isTraceRoi = false; + MagApplication.magParameter.isShowCross = false; + MagApplication.magParameter.isTraceMaxMin = true; + MagApplication.magParameter.maxMinTrace = -1; + MagApplication.magParameter.emissivity = 100; + DeviceController.Lock(); + DeviceController.setEmissivity(100, Priority.INFO_INT); + DeviceController.Unlock(); + } else if (para1.devType == 0 || para1.devType == 5 || para1.devType == 6 || para1.devType == 3) { + MagApplication.magParameter.isTraceRoi = false; + MagApplication.magParameter.isShowMovingCross = false; + MagApplication.magParameter.emissivity = 100; + DeviceController.Lock(); + DeviceController.setEmissivity(100, Priority.INFO_INT); + DeviceController.Unlock(); + } else if (para1.devType == 2) { + MagApplication.magParameter.isShowMovingCross = false; + MagApplication.magParameter.isTraceMaxMin = true; + } + if (para1.devType == 1 || para1.devType == 2) { + if (MagApplication.magParameter.fpsMode == 0) { + MagApplication.magParameter.basePara1.interFrame = 9; + MagApplication.magParameter.basePara1.interLine = 12; + } else { + MagApplication.magParameter.basePara1.interFrame = 105; + MagApplication.magParameter.basePara1.interLine = 105; + } + setFrameRate(); + } + return true; + } + + private void stopTransfer() { + if (sendEmptyCmd(P2DCmd.P2D_StopTransferImg, TIMEOUT) < 0) { + Logging.error("Fail to stop remote transferring"); + } + this.connected_ = false; + try { + if (this.threadImgRecv_ != null) { + this.threadImgRecv_.join(); + this.threadImgRecv_ = null; + } + } catch (InterruptedException e) { + this.threadImgRecv_ = null; + Logging.trace("Thread join interrupted1"); + } + this.isExitThreadImgProcess_ = true; + synchronized (this.condImgProcess_.cond) { + this.condImgProcess_.notified = true; + this.condImgProcess_.cond.notify(); + } + try { + if (this.threadImgProcess_ != null) { + this.threadImgProcess_.join(); + this.threadImgProcess_ = null; + } + } catch (InterruptedException e2) { + this.condImgProcess_ = null; + Logging.trace("Thread join interrupted2"); + } + DeviceController.stopProcess(); + Logging.trace("****Stop****"); + } + + public void disconnect() { + MsgBus.getInstance().unregister(this.mReceiver); + setLaserState(0); + MagApplication.magParameter.isLaserOn = false; + stopTransfer(); + this.conn_ = null; + if (this.usbConn_ != null) { + if (this.usbInterface_ != null) { + this.usbConn_.releaseInterface(this.usbInterface_); + } + this.usbConn_.close(); + this.usbConn_ = null; + } + this.usbEpImgIn_ = null; + this.usbEpCaliOut_ = null; + this.usbEpCaliIn_ = null; + this.usbEpCmdOut_ = null; + this.usbEpCmdIn_ = null; + stopCaliRecvThread(); + } + + @Override // cn.com.magnity.magnitycx.sdk.DeviceController.ShutterCallBack + public void setShutterState(int on) { + setShutterState_(on); + } + + private void startCaliRecvThread() { + if (this.threadCaliRecv_ == null) { + this.threadCaliRecv_ = new ThreadCaliRecv(); + this.isExitCaliRecvThread = false; + this.threadCaliRecv_.start(); + } + } + + private void stopCaliRecvThread() { + try { + if (this.threadCaliRecv_ != null) { + this.isExitCaliRecvThread = true; + this.threadCaliRecv_.join(); + this.threadCaliRecv_ = null; + } + } catch (InterruptedException e) { + this.threadCaliRecv_ = null; + Logging.trace("Thread join interrupted."); + } + } + + private void setShutterState_(int on) { + byte[] buf = {(byte) P2DCmd.P2D_SetShutterState, (byte) 7059126, (byte) 27574, (byte) 107, (byte) on, (byte) (on >> 8), (byte) (on >> 16), (byte) (on >> 24)}; + sendCmd(buf, 0, buf.length, TIMEOUT); + } + + public boolean setLaserState(int on) { + byte[] buf = {(byte) P2DCmd.P2D_SetLaserState, (byte) 7059126, (byte) 27574, (byte) 107, (byte) on, (byte) (on >> 8), (byte) (on >> 16), (byte) (on >> 24)}; + return sendCmd(buf, 0, buf.length, TIMEOUT) >= 0; + } + + /* JADX INFO: Access modifiers changed from: private */ + public boolean setFrameRate() { + int interFrame; + int interLine; + byte[] buf = new byte[12]; + if (MagApplication.magParameter.fpsMode == 0) { + interFrame = 9; + interLine = 12; + } else { + interFrame = 105; + interLine = 105; + } + buf[0] = (byte) P2DCmd.P2D_SetFrameRate; + buf[1] = (byte) 7059126; + buf[2] = (byte) 27574; + buf[3] = (byte) 107; + buf[4] = (byte) interFrame; + buf[5] = (byte) (interFrame >> 8); + buf[6] = (byte) (interFrame >> 16); + buf[7] = (byte) (interFrame >> 24); + buf[8] = (byte) interLine; + buf[9] = (byte) (interLine >> 8); + buf[10] = (byte) (interLine >> 16); + buf[11] = (byte) (interLine >> 24); + return sendCmd(buf, 0, buf.length, TIMEOUT) >= 0; + } + + private boolean waitForCmdAck(int cmd, int timeout) { + switch (cmd) { + case P2DCmd.P2D_SetParameter1 /* 1807136365 */: + case P2DCmd.P2D_SetParameter2 /* 1807136366 */: + case P2DCmd.P2D_GetCaliFile /* 1807136368 */: + case P2DCmd.P2D_SendCaliFile /* 1807136369 */: + case P2DCmd.P2D_SetShutterState /* 1807136370 */: + case P2DCmd.P2D_StartTransferImg /* 1807136371 */: + case P2DCmd.P2D_StopTransferImg /* 1807136372 */: + case P2DCmd.P2D_SetLaserState /* 1807136374 */: + case P2DCmd.P2D_SetFrameRate /* 1807136377 */: + byte[] buf = new byte[64]; + int ret = this.usbConn_.bulkTransfer(this.usbEpCmdIn_, buf, 0, buf.length, timeout); + if (ret < 0) { + Logging.trace("Fail to get command ack - " + Integer.toHexString(cmd)); + return false; + } + case P2DCmd.P2D_GetCaliInfo /* 1807136367 */: + case P2DCmd.P2D_GetLifeTime /* 1807136373 */: + case P2DCmd.P2D_PowerSave /* 1807136375 */: + case P2DCmd.P2D_GetFPAState /* 1807136376 */: + default: + return true; + } + } + + public synchronized int sendCmd(byte[] data, int offset, int len, int timeout) { + int ret; + ret = this.usbConn_.bulkTransfer(this.usbEpCmdOut_, data, offset, len, timeout); + if (ret < 0) { + ret = -1; + } else if (!waitForCmdAck(GlobalFunc.byteArrayToInt(data), timeout)) { + ret = -1; + } + return ret; + } + + public synchronized int sendEmptyCmd(int data, int timeout) { + int ret; + ret = this.usbConn_.bulkTransfer(this.usbEpCmdOut_, GlobalFunc.intToByteArray(data), 0, 4, timeout); + if (ret < 0) { + ret = -1; + } else if (!waitForCmdAck(data, timeout)) { + ret = -1; + } + return ret; + } + + public synchronized int recvCmd(byte[] buffer, int offset, int len, int timeout) { + return this.usbConn_.bulkTransfer(this.usbEpCmdIn_, buffer, offset, len, timeout); + } + + public int sendCali(byte[] data, int offset, int len, int timeout) { + int ret = this.usbConn_.bulkTransfer(this.usbEpCaliOut_, data, offset, len, timeout); + if (ret >= 0 && waitForCmdAck(GlobalFunc.byteArrayToInt(data), timeout)) { + return ret; + } + return -1; + } + + public synchronized int sendEmptyCali(int data, int timeout) { + int ret; + ret = this.usbConn_.bulkTransfer(this.usbEpCaliOut_, GlobalFunc.intToByteArray(data), 0, 4, timeout); + if (ret < 0) { + ret = -1; + } else if (!waitForCmdAck(data, timeout)) { + ret = -1; + } + return ret; + } + + public int recvCali(byte[] buffer, int offset, int len, int timeout) { + return this.usbConn_.bulkTransfer(this.usbEpCaliIn_, buffer, offset, len, timeout); + } + + public int recvImg(byte[] buffer, int offset, int len, int timeout) { + return this.usbConn_.bulkTransfer(this.usbEpImgIn_, buffer, offset, len, timeout); + } + + public int getCmdInAddress() { + return this.usbEpCmdIn_.getAddress(); + } + + public int getCaliInAddress() { + return this.usbEpCaliIn_.getAddress(); + } + + public int getImgInAddress() { + return this.usbEpImgIn_.getAddress(); + } + + private int parseCmd(byte[] data, int len) { + String productType; + if (len < 4) { + return -1; + } + ByteBuffer bb = ByteBuffer.wrap(data, 0, len); + bb.order(ByteOrder.LITTLE_ENDIAN); + int cmd = bb.getInt(); + switch (cmd) { + case D2PCmd.D2P_SendParameter1 /* 1538635099 */: + Logging.trace("D2P_SendParameter1"); + BasePara1 para1 = MagApplication.magParameter.basePara1; + try { + para1.serialNumber = bb.getInt(); + int val = bb.getInt(); + para1.hwVersion = 16777215 & val; + para1.devType = (val >> 24) & 255; + para1.swVersion = bb.getInt(); + para1.reserved1 = bb.getInt(); + para1.fpaWidth = bb.getInt(); + para1.fpaHeight = bb.getInt(); + para1.fps = bb.getInt(); + para1.reserved2 = bb.getInt(); + para1.fpaGain = bb.getInt(); + para1.fpaFlip = bb.getInt(); + para1.interFrame = bb.getInt(); + para1.interLine = bb.getInt(); + para1.gfid = bb.getInt(); + para1.gsk = bb.getInt(); + if (bb.hasRemaining()) { + Logging.warn("D2PCmd.D2P_SendParameter1 cmd size is too long"); + return -1; + } + Logging.trace("Serial number: " + para1.serialNumber); + return 1; + } catch (IndexOutOfBoundsException e) { + para1.reset(); + Logging.error("D2PCmd.D2P_SendParameter1 cmd size is not enough"); + return -1; + } + case D2PCmd.D2P_SendParameter2 /* 1538635100 */: + Logging.trace("D2P_SendParameter2"); + BasePara2 para2 = MagApplication.magParameter.basePara2; + try { + para2.baseLineAcc = bb.getInt(); + para2.denoiseLevel = bb.getInt(); + para2.reserved1 = bb.getInt(); + para2.reserved2 = bb.getShort(); + para2.fpaTempFix = bb.getShort(); + para2.shutterCloseSpeed = bb.getInt(); + para2.shutterOpenSpeed = bb.getInt(); + para2.ffcTriggerFrame = bb.getInt(); + para2.ffcTriggerTemperature = bb.getInt(); + para2.enlargeRange = bb.getInt(); + para2.laserPos = bb.getInt(); + para2.ATZeroErrorPoint = bb.getInt(); + para2.ATErrorSlope = bb.getFloat(); + para2.reserved5 = bb.getInt(); + para2.reserved6 = bb.getInt(); + if (bb.hasRemaining()) { + Logging.warn("D2PCmd.D2P_SendParameter2 cmd size is too long"); + return -1; + } + return 1; + } catch (IndexOutOfBoundsException e2) { + para2.reset(); + Logging.error("D2PCmd.D2P_SendParameter2 cmd size is not enough"); + return -1; + } + case D2PCmd.D2P_SendCaliFile /* 1538635101 */: + Logging.trace("D2P_SendRemoteFile"); + this.isToRecvFirstCaliPacket_ = true; + return 1; + case D2PCmd.D2P_SendCaliInfo /* 1538635102 */: + Logging.trace("D2P_SendRemoteFileInfo"); + CaliInfo caliInfo = MagApplication.magParameter.caliInfo; + try { + caliInfo.size = bb.getInt(); + caliInfo.reserved = bb.getInt(); + caliInfo.date = bb.getLong(); + if (bb.hasRemaining()) { + Logging.warn("D2PCmd.D2P_SendRemoteFileInfo cmd size is too long"); + return -1; + } + Logging.trace("Remote file info: " + caliInfo.size + ", " + caliInfo.date); + if (MagApplication.magParameter.caliInfo.size < 65536 || MagApplication.magParameter.caliInfo.size > MAX_CALI_FILE_LEN) { + this.caliPathName_ = ""; + Logging.error("remoteFileInfo error(invalid size)"); + return -1; + } + if (MagApplication.magParameter.caliDir != null) { + switch (MagApplication.magParameter.basePara1.devType) { + case 0: + productType = MagApplication.getInstance().getResources().getString(R.string.c1); + break; + case 1: + productType = MagApplication.getInstance().getResources().getString(R.string.c3); + break; + case 2: + productType = MagApplication.getInstance().getResources().getString(R.string.c3p); + break; + case 3: + productType = MagApplication.getInstance().getResources().getString(R.string.core160); + break; + case 4: + default: + productType = MagApplication.getInstance().getResources().getString(R.string.unknownProductType); + break; + case 5: + productType = MagApplication.getInstance().getResources().getString(R.string.c1pro); + break; + case 6: + productType = MagApplication.getInstance().getResources().getString(R.string.c1prolite); + break; + } + this.caliPathName_ = MagApplication.magParameter.caliDir + File.separator + productType + "." + MagApplication.magParameter.basePara1.serialNumber + "." + MagApplication.magParameter.caliInfo.date; + File dir = new File(MagApplication.magParameter.caliDir); + File file = new File(this.caliPathName_); + if (!file.exists() || file.length() != MagApplication.magParameter.caliInfo.size) { + File[] files = dir.listFiles(); + for (File f : files) { + if (f.getName().contains(MagApplication.magParameter.basePara1.serialNumber + ".")) { + f.delete(); + } + } + stopCaliRecvThread(); + startCaliRecvThread(); + try { + Thread.sleep(50L); + } catch (InterruptedException e3) { + } + sendEmptyCmd(P2DCmd.P2D_GetCaliFile, TIMEOUT); + return 0; + } + } + return 1; + } catch (IndexOutOfBoundsException e4) { + caliInfo.reset(); + Logging.error("D2PCmd.D2P_SendRemoteFileInfo cmd size is not enough"); + return -1; + } + default: + Logging.warn("Unknown command(" + cmd + ")"); + return -1; + } + } + + private class ThreadImgRecv extends Thread { + private ThreadImgRecv() { + } + + @Override // java.lang.Thread, java.lang.Runnable + public void run() { + int drop; + int frameBytes = ((MagApplication.magParameter.basePara1.fpaWidth * MagApplication.magParameter.basePara1.fpaHeight) * 16) / 8; + int imgRecvBufLength = frameBytes + 1024; + if (UsbCommunication.this.imgExchangeBuf1_ == null || UsbCommunication.this.imgExchangeBuf1_.length < imgRecvBufLength) { + UsbCommunication.this.imgExchangeBuf1_ = new byte[imgRecvBufLength]; + } + Logging.trace("Enter ThreadImgReceiver"); + byte[] recvbuf = new byte[imgRecvBufLength]; + boolean headerFound = false; + int total = 0; + int index = 0; + long t1 = 0; + while (UsbCommunication.this.connected_) { + int len = UsbCommunication.this.recvImg(recvbuf, total, recvbuf.length - total, ItemTouchHelper.Callback.DEFAULT_DRAG_ANIMATION_DURATION); + if (len > 0) { + if (!headerFound) { + if (len >= 28) { + ByteBuffer bb = ByteBuffer.wrap(recvbuf, 0, 28); + bb.order(ByteOrder.LITTLE_ENDIAN); + if (bb.getInt() == UsbCommunication.IMG_START_CODE) { + headerFound = true; + } + } + total = 0; + } else if (len >= 28) { + ByteBuffer bb2 = ByteBuffer.wrap(recvbuf, (total + len) - 28, 28); + bb2.order(ByteOrder.LITTLE_ENDIAN); + if (bb2.getInt() == UsbCommunication.IMG_END_CODE) { + if ((total + len) - 28 == frameBytes) { + int frameIndex = bb2.getInt(); + long t = System.currentTimeMillis(); + synchronized (UsbCommunication.this.condImgProcess_.cond) { + System.arraycopy(recvbuf, 0, UsbCommunication.this.imgExchangeBuf1_, 0, recvbuf.length); + if (MagApplication.magParameter.basePara1.devType == 0 || MagApplication.magParameter.basePara1.devType == 5 || MagApplication.magParameter.basePara1.devType == 6 || MagApplication.magParameter.basePara1.devType == 3) { + UsbCommunication.this.fpaTemp_ = bb2.getInt(); + UsbCommunication.this.camTemp_ = UsbCommunication.this.fpaTemp_ - 500; + drop = bb2.getInt(); + } else { + bb2.getInt(); + drop = bb2.getInt(); + UsbCommunication.this.camTemp_ = bb2.getInt(); + UsbCommunication.this.fpaTemp_ = UsbCommunication.this.camTemp_ + 500; + } + if (drop == 0 || drop == 1) { + UsbCommunication.this.condImgProcess_.notified = true; + UsbCommunication.this.condImgProcess_.cond.notify(); + } + } + if (UsbCommunication.this.imgViewer_ != null && (index == 0 || !UsbCommunication.this.imgViewer_.getTempStableFlag() || UsbCommunication.this.imgViewer_.getImageStableCounter() != 0)) { + int index2 = index + 1; + if ((index & 15) == 0) { + UsbCommunication.this.handler_.sendEmptyMessage(4); + } + index = index2; + } + if (MagApplication.isShowFps) { + if (t1 != 0) { + UsbCommunication.lock_.lock(); + UsbCommunication.ticks_[frameIndex % UsbCommunication.ticks_.length] = t - t1; + UsbCommunication.lock_.unlock(); + } + t1 = t; + } + } + headerFound = false; + total = 0; + } else { + total += len; + } + } else { + total += len; + } + if (total > frameBytes) { + headerFound = false; + total = 0; + } + } + } + Logging.trace("Leave ThreadImgReceiver"); + } + } + + public static int getReceivedFps() { + long[] ticks = new long[ticks_.length]; + lock_.lock(); + System.arraycopy(ticks_, 0, ticks, 0, ticks_.length); + lock_.unlock(); + int sum = 0; + for (int i = ticks.length - 1; i != -1; i--) { + sum = (int) (sum + ticks[i]); + } + return (ticks_.length * 1000) / sum; + } + + private class ThreadImgProcess extends Thread { + private ThreadImgProcess() { + } + + @Override // java.lang.Thread, java.lang.Runnable + public void run() { + int fpaTemp; + int camTemp; + Logging.trace("Enter ThreadImgProcess"); + int frameBytes = ((MagApplication.magParameter.basePara1.fpaWidth * MagApplication.magParameter.basePara1.fpaHeight) * 16) / 8; + byte[] imgExchangeBuf2 = new byte[frameBytes + 1024]; + while (!UsbCommunication.this.isExitThreadImgProcess_) { + synchronized (UsbCommunication.this.condImgProcess_.cond) { + while (!UsbCommunication.this.condImgProcess_.notified) { + try { + UsbCommunication.this.condImgProcess_.cond.wait(); + } catch (InterruptedException e) { + } + } + UsbCommunication.this.condImgProcess_.notified = false; + if (imgExchangeBuf2 == null) { + imgExchangeBuf2 = new byte[UsbCommunication.this.imgExchangeBuf1_.length]; + } + System.arraycopy(UsbCommunication.this.imgExchangeBuf1_, 0, imgExchangeBuf2, 0, UsbCommunication.this.imgExchangeBuf1_.length); + fpaTemp = UsbCommunication.this.fpaTemp_ + MagApplication.magParameter.basePara2.fpaTempFix; + camTemp = UsbCommunication.this.camTemp_ + MagApplication.magParameter.basePara2.fpaTempFix; + } + DeviceController.Lock(); + boolean ret = DeviceController.pushFrame(imgExchangeBuf2, fpaTemp, camTemp); + DeviceController.Unlock(); + if (UsbCommunication.this.isExitThreadImgProcess_) { + break; + } else if (ret && UsbCommunication.this.imgViewer_ != null) { + UsbCommunication.this.imgViewer_.onNewFrameReceived(fpaTemp, camTemp); + } + } + Logging.trace("Leave ThreadImgProcess"); + } + } + + private class ThreadCaliRecv extends Thread { + private ThreadCaliRecv() { + } + + @Override // java.lang.Thread, java.lang.Runnable + public void run() { + Logging.trace("Enter ThreadRemoteFileReceiver"); + byte[] recvbuf = new byte[16384]; + int totalSize = 0; + FileOutputStream out = null; + UsbCommunication.this.handler_.sendMessage(UsbCommunication.this.handler_.obtainMessage(0, 0)); + long t1 = System.currentTimeMillis(); + while (true) { + if (UsbCommunication.this.isExitCaliRecvThread) { + break; + } + int remain = MagApplication.magParameter.caliInfo.size - totalSize; + UsbCommunication usbCommunication = UsbCommunication.this; + if (remain > 16384) { + remain = recvbuf.length; + } + int len = usbCommunication.recvCali(recvbuf, 0, remain, UsbCommunication.TIMEOUT); + if (len >= 0 && !UsbCommunication.this.caliPathName_.isEmpty()) { + if (UsbCommunication.this.isToRecvFirstCaliPacket_) { + totalSize = 0; + UsbCommunication.this.isToRecvFirstCaliPacket_ = false; + } + if (totalSize == 0) { + try { + FileOutputStream out2 = new FileOutputStream(UsbCommunication.this.caliPathName_); + out = out2; + } catch (Exception e) { + Logging.error("Receive remote file error 1."); + UsbCommunication.this.handler_.sendMessage(UsbCommunication.this.handler_.obtainMessage(3, 0)); + } + } + totalSize += len; + if (totalSize > MagApplication.magParameter.caliInfo.size) { + try { + out.close(); + Logging.error("Receive remote file error 3."); + UsbCommunication.this.handler_.sendMessage(UsbCommunication.this.handler_.obtainMessage(3, 0)); + break; + } catch (Exception e2) { + Logging.error("Receive remote file error 2."); + UsbCommunication.this.handler_.sendMessage(UsbCommunication.this.handler_.obtainMessage(3, 0)); + } + } else { + try { + out.write(recvbuf, 0, len); + UsbCommunication.this.handler_.sendMessage(UsbCommunication.this.handler_.obtainMessage(2, 0, (totalSize * 100) / MagApplication.magParameter.caliInfo.size)); + if (totalSize == MagApplication.magParameter.caliInfo.size) { + try { + out.close(); + Logging.info("Receive remote file succ."); + UsbCommunication.this.handler_.sendMessage(UsbCommunication.this.handler_.obtainMessage(1, 0)); + if (!UsbCommunication.this.startTransfer(UsbCommunication.this.caliPathName_)) { + UsbCommunication.this.handler_.sendMessage(UsbCommunication.this.handler_.obtainMessage(3, 0)); + Logging.error("SDK start fail."); + } + } catch (Exception e3) { + Logging.error("Receive remote file error 5."); + UsbCommunication.this.handler_.sendMessage(UsbCommunication.this.handler_.obtainMessage(3, 0)); + } + } + } catch (Exception e4) { + Logging.error("Receive remote file error 4."); + UsbCommunication.this.handler_.sendMessage(UsbCommunication.this.handler_.obtainMessage(3, 0)); + } + } + } else if (System.currentTimeMillis() - t1 > Config.BPLUS_DELAY_TIME) { + UsbCommunication.this.handler_.sendMessage(UsbCommunication.this.handler_.obtainMessage(3, 0)); + break; + } + } + Logging.trace("Leave ThreadRemoteFileReceiver"); + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/UsbConnection.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/UsbConnection.java new file mode 100644 index 0000000..d18bc25 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/UsbConnection.java @@ -0,0 +1,246 @@ +package cn.com.magnity.magnitycx.sdk; + +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.hardware.usb.UsbDevice; +import android.hardware.usb.UsbManager; +import android.telephony.TelephonyManager; +import cn.com.magnity.magnitycx.FragmentMainCenter; +import cn.com.magnity.magnitycx.MagApplication; +import cn.com.magnity.magnitycx.log.Logging; + +/* loaded from: classes.dex */ +public class UsbConnection extends Observable { + private static final String ACTION_USB_PERMISSION = "cn.com.magnity.magnitycx.USB_PERMISSION"; + private static UsbConnection instance_ = new UsbConnection(); + private FragmentMainCenter fragmentMainCenter_; + private PhoneReceiver phoneReceiver_; + private UsbCommunication usbComm_; + private UsbConnectionReceiver usbConnectionReceiver_; + private UsbPermissionReceiver usbPermissionReceiver_; + private Context context_ = MagApplication.getInstance(); + private UsbManager usbManager_ = (UsbManager) this.context_.getSystemService("usb"); + + public static UsbConnection getInstance() { + return instance_; + } + + private UsbConnection() { + } + + public void setCallbackReceiver(FragmentMainCenter fragment) { + this.fragmentMainCenter_ = fragment; + if (this.usbComm_ != null) { + this.usbComm_.setCallbackReceiver(fragment); + } + } + + public boolean init() { + if (this.phoneReceiver_ == null) { + registerPhoneReceiver(); + } + if (this.usbConnectionReceiver_ == null) { + registerConnectionReceiver(); + } + UsbDevice device = findDevice(33596, 1); + if (device != null) { + requestDevicePermission(device); + } + return device != null; + } + + public void deinit(boolean notifyUi) { + if (this.usbConnectionReceiver_ != null) { + this.context_.unregisterReceiver(this.usbConnectionReceiver_); + this.usbConnectionReceiver_ = null; + } + if (this.usbPermissionReceiver_ != null) { + this.context_.unregisterReceiver(this.usbPermissionReceiver_); + this.usbPermissionReceiver_ = null; + } + disconnect(notifyUi); + } + + public boolean isConnected() { + return this.usbComm_ != null; + } + + /* JADX INFO: Access modifiers changed from: private */ + public boolean connect(UsbDevice device) { + if (this.usbComm_ != null) { + return true; + } + Logging.info("Try to connect to device"); + try { + this.usbComm_ = new UsbCommunication(this, this.usbManager_, device, this.fragmentMainCenter_); + int ret = this.usbComm_.connect(); + if (ret == -1) { + Logging.error("Fail to connect to device, do clean work now"); + this.usbComm_.disconnect(); + this.usbComm_ = null; + return false; + } + if (ret == 0) { + return false; + } + notifyObervers(1); + return true; + } catch (Exception ex) { + Logging.warn("Exception when connecting to device (" + ex.getMessage() + ")"); + if (this.usbComm_ != null) { + this.usbComm_.disconnect(); + } + this.usbComm_ = null; + return false; + } + } + + public void notifyObervers(int status) { + synchronized (this.observers_) { + if (status == 1) { + for (int i = this.observers_.size() - 1; i != -1; i--) { + ((DelegateDeviceConnected) this.observers_.get(i)).onDeviceConnected(this.usbComm_); + } + } else if (status == 2) { + for (int i2 = this.observers_.size() - 1; i2 != -1; i2--) { + } + } else if (status == 0) { + for (int i3 = this.observers_.size() - 1; i3 != -1; i3--) { + ((DelegateDeviceConnected) this.observers_.get(i3)).onDeviceDisconnected(); + } + } + } + } + + /* JADX INFO: Access modifiers changed from: private */ + public void disconnect(boolean notifyUi) { + Logging.info("Try to disconnect to device"); + if (this.usbComm_ != null) { + this.usbComm_.disconnect(); + this.usbComm_ = null; + } + if (notifyUi) { + notifyObervers(0); + } + } + + private UsbDevice findDevice(int vendorId, int productId) { + for (UsbDevice device : this.usbManager_.getDeviceList().values()) { + if (device.getVendorId() == vendorId && device.getProductId() == productId) { + return device; + } + } + return null; + } + + private void registerConnectionReceiver() { + this.usbConnectionReceiver_ = new UsbConnectionReceiver(); + IntentFilter localFilter = new IntentFilter(); + localFilter.addAction("android.hardware.usb.action.USB_DEVICE_ATTACHED"); + localFilter.addAction("android.hardware.usb.action.USB_DEVICE_DETACHED"); + this.context_.registerReceiver(this.usbConnectionReceiver_, localFilter); + } + + private void registerPhoneReceiver() { + this.phoneReceiver_ = new PhoneReceiver(); + IntentFilter localFilter = new IntentFilter(); + localFilter.addAction("android.intent.action.NEW_OUTGOING_CALL"); + localFilter.addAction("android.intent.action.PHONE_STATE"); + this.context_.registerReceiver(this.phoneReceiver_, localFilter); + } + + private void requestDevicePermission(UsbDevice device) { + if (this.usbManager_.hasPermission(device)) { + Logging.trace("Already has permission"); + connect(device); + return; + } + if (this.usbPermissionReceiver_ == null) { + this.usbPermissionReceiver_ = new UsbPermissionReceiver(); + IntentFilter localFilter = new IntentFilter(ACTION_USB_PERMISSION); + this.context_.registerReceiver(this.usbPermissionReceiver_, localFilter); + } + PendingIntent pendingIntent = PendingIntent.getBroadcast(this.context_, 0, new Intent(ACTION_USB_PERMISSION), 0); + this.usbManager_.requestPermission(device, pendingIntent); + Logging.trace("Request permission"); + } + + private final class UsbConnectionReceiver extends BroadcastReceiver { + private UsbConnectionReceiver() { + } + + @Override // android.content.BroadcastReceiver + public void onReceive(Context context, Intent intent) { + switch (intent.getAction()) { + case "android.hardware.usb.action.USB_DEVICE_ATTACHED": + Logging.trace("Broadcast for usb attached received"); + UsbConnection.this.disconnect(false); + UsbConnection.this.init(); + break; + case "android.hardware.usb.action.USB_DEVICE_DETACHED": + Logging.trace("Broadcast for usb detached received"); + UsbConnection.this.disconnect(true); + break; + } + } + } + + private final class UsbPermissionReceiver extends BroadcastReceiver { + private UsbPermissionReceiver() { + } + + @Override // android.content.BroadcastReceiver + public void onReceive(Context context, Intent intent) { + switch (intent.getAction()) { + case "cn.com.magnity.magnitycx.USB_PERMISSION": + Logging.trace("Broadcast for usb permission received"); + if (!intent.getBooleanExtra("permission", false)) { + Logging.warn("Permission rejected by user"); + break; + } else { + UsbDevice device = (UsbDevice) intent.getParcelableExtra("device"); + if (device != null) { + UsbConnection.this.connect(device); + UsbConnection.this.context_.unregisterReceiver(UsbConnection.this.usbPermissionReceiver_); + UsbConnection.this.usbPermissionReceiver_ = null; + break; + } else { + Logging.warn("Failed to get device"); + break; + } + } + } + } + } + + private class PhoneReceiver extends BroadcastReceiver { + private PhoneReceiver() { + } + + @Override // android.content.BroadcastReceiver + public void onReceive(Context context, Intent intent) { + switch (intent.getAction()) { + case "android.intent.action.PHONE_STATE": + if (MagApplication.magParameter.basePara1.swVersion > 100) { + String state = intent.getStringExtra("state"); + if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)) { + Logging.trace("ring"); + UsbConnection.this.deinit(true); + break; + } else if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)) { + Logging.trace("hang up"); + UsbConnection.this.init(); + break; + } else if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_OFFHOOK)) { + Logging.trace("hang on"); + break; + } + } + break; + } + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/VisibleCamera.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/VisibleCamera.java new file mode 100644 index 0000000..101d446 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/VisibleCamera.java @@ -0,0 +1,103 @@ +package cn.com.magnity.magnitycx.sdk; + +import android.hardware.Camera; +import android.view.SurfaceHolder; +import cn.com.magnity.magnitycx.MagApplication; +import java.util.List; + +/* loaded from: classes.dex */ +public class VisibleCamera { + private static Camera camera_; + private static boolean isPreview_; + + public static void initCamera(int id, SurfaceHolder surfaceHolder, int size) { + if (Camera.getNumberOfCameras() >= 1) { + if (!isPreview_) { + camera_ = Camera.open(id); + setPreviewOrientation(id); + } + if (camera_ != null && !isPreview_) { + try { + Camera.Parameters parameters = camera_.getParameters(); + setPreviewSize(parameters, size); + parameters.setPictureFormat(256); + parameters.set("jpeg-quality", 85); + parameters.setFlashMode("auto"); + parameters.setFocusMode("continuous-picture"); + camera_.setParameters(parameters); + camera_.setPreviewDisplay(surfaceHolder); + camera_.startPreview(); + camera_.cancelAutoFocus(); + } catch (Exception e) { + } + isPreview_ = true; + } + } + } + + public static void deinitCamera() { + if (camera_ != null) { + if (isPreview_) { + camera_.stopPreview(); + isPreview_ = false; + } + camera_.release(); + camera_ = null; + } + } + + private static void setPreviewSize(Camera.Parameters parameters, int size) { + List list = parameters.getSupportedPreviewSizes(); + int num = list.size(); + for (int i = 0; i < num; i++) { + Camera.Size s = list.get(i); + if ((s.width <= s.height || s.width * 3 == s.height * 4) && ((s.width >= s.height || s.width * 4 == s.height * 3) && Math.min(s.width, s.height) >= size)) { + parameters.setPreviewSize(s.width, s.height); + return; + } + } + } + + private static void setPreviewOrientation(int id) { + int result; + if (camera_ != null) { + Camera.CameraInfo info = new Camera.CameraInfo(); + Camera.getCameraInfo(id, info); + int rotation = MagApplication.windowManager.getDefaultDisplay().getRotation(); + int degrees = 0; + switch (rotation) { + case 0: + degrees = 0; + break; + case 1: + degrees = 90; + break; + case 2: + degrees = 180; + break; + case 3: + degrees = 270; + break; + } + if (info.facing == 1) { + int result2 = (info.orientation + degrees) % 360; + result = (360 - result2) % 360; + } else { + result = ((info.orientation - degrees) + 360) % 360; + } + camera_.setDisplayOrientation(result); + } + } + + public static boolean isCameraPermission() { + if (camera_ != null) { + return true; + } + try { + Camera.open().release(); + return true; + } catch (Exception e) { + return false; + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/VisibleCameraHelper.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/VisibleCameraHelper.java new file mode 100644 index 0000000..aa28b15 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/VisibleCameraHelper.java @@ -0,0 +1,291 @@ +package cn.com.magnity.magnitycx.sdk; + +import android.content.Context; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.hardware.Camera; +import android.media.ExifInterface; +import android.net.Uri; +import android.view.SurfaceHolder; +import cn.com.magnity.magnitycx.MagApplication; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +/* loaded from: classes.dex */ +public class VisibleCameraHelper { + private static volatile VisibleCameraHelper instance_; + private Camera camera_; + private final CameraSizeComparator sizeComparator = new CameraSizeComparator(); + private Camera.PictureCallback jpegCallback = new Camera.PictureCallback() { // from class: cn.com.magnity.magnitycx.sdk.VisibleCameraHelper.1 + @Override // android.hardware.Camera.PictureCallback + public void onPictureTaken(byte[] data, Camera camera) { + try { + Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length); + File myCaptureFile = new File(MagApplication.magParameter.mediaDir, "1.jpg"); + BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile)); + bm.compress(Bitmap.CompressFormat.JPEG, 100, bos); + bos.flush(); + bos.close(); + camera.stopPreview(); + camera.startPreview(); + } catch (Exception e) { + e.printStackTrace(); + } + } + }; + + public int getOrientation(Context context, Uri photoUri) { + Cursor cursor = context.getContentResolver().query(photoUri, new String[]{"_id", "orientation"}, null, null, null); + if (cursor == null) { + return 0; + } + cursor.moveToFirst(); + int i = cursor.getInt(cursor.getColumnIndexOrThrow("orientation")); + cursor.close(); + return i; + } + + public int getExifOrientation(String filepath) { + int orientation; + ExifInterface exif = null; + try { + ExifInterface exif2 = new ExifInterface(filepath); + exif = exif2; + } catch (IOException ex) { + ex.printStackTrace(); + } + if (exif == null || (orientation = exif.getAttributeInt("Orientation", -1)) == -1) { + return 0; + } + switch (orientation) { + } + return 0; + } + + public static VisibleCameraHelper getInstance() { + if (instance_ == null) { + synchronized (VisibleCameraHelper.class) { + if (instance_ == null) { + instance_ = new VisibleCameraHelper(); + } + } + } + return instance_; + } + + public boolean openCamera(int id) { + if (Camera.getNumberOfCameras() < 1) { + return false; + } + if (this.camera_ != null) { + stopPreview(); + closeCamera(); + } + try { + this.camera_ = Camera.open(id); + return this.camera_ != null; + } catch (Exception e) { + return false; + } + } + + public void closeCamera() { + if (this.camera_ != null) { + this.camera_.release(); + this.camera_ = null; + } + } + + public Size setPreviewSize(int expectedWidth, float rate) { + Camera.Parameters parameters; + if (this.camera_ == null || (parameters = this.camera_.getParameters()) == null) { + return null; + } + List list = parameters.getSupportedPreviewSizes(); + Collections.sort(list, this.sizeComparator); + Camera.Size size = null; + int num = list.size(); + int i = 0; + while (i < num) { + Camera.Size size2 = list.get(i); + size = size2; + if (size.width > expectedWidth && equalRate(size, rate)) { + break; + } + i++; + } + if (i == num) { + return null; + } + parameters.setPreviewSize(size.width, size.height); + this.camera_.setParameters(parameters); + return new Size(size.width, size.height); + } + + public Size setPictureSize(int expectedWidth, float rate) { + Camera.Parameters parameters; + if (this.camera_ == null || (parameters = this.camera_.getParameters()) == null) { + return null; + } + List list = parameters.getSupportedPictureSizes(); + Collections.sort(list, this.sizeComparator); + Camera.Size size = null; + int num = list.size(); + int i = 0; + while (i < num) { + Camera.Size size2 = list.get(i); + size = size2; + if (size.width > expectedWidth && equalRate(size, rate)) { + break; + } + i++; + } + if (i == num) { + return null; + } + parameters.setPictureSize(size.width, size.height); + this.camera_.setParameters(parameters); + return new Size(size.width, size.height); + } + + private boolean equalRate(Camera.Size s, float rate) { + float r = s.width / s.height; + return ((double) Math.abs(r - rate)) <= 0.1d; + } + + public boolean startPreview(SurfaceHolder holder, int flashMode) { + String mode; + if (this.camera_ == null) { + return false; + } + stopPreview(); + try { + this.camera_.setPreviewDisplay(holder); + Camera.Parameters parameters = this.camera_.getParameters(); + if (parameters != null) { + switch (flashMode) { + case 0: + mode = "off"; + break; + case 1: + mode = "auto"; + break; + case 2: + mode = "on"; + break; + case 3: + mode = "red-eye"; + break; + case 4: + mode = "torch"; + break; + default: + mode = "off"; + break; + } + parameters.setFlashMode(mode); + this.camera_.setParameters(parameters); + } + this.camera_.startPreview(); + return true; + } catch (IOException e) { + return false; + } + } + + public void stopPreview() { + if (this.camera_ != null) { + this.camera_.stopPreview(); + } + } + + public int setPreviewOrientation(int cameraId) { + int result; + if (this.camera_ == null) { + return 0; + } + Camera.CameraInfo info = new Camera.CameraInfo(); + Camera.getCameraInfo(cameraId, info); + int rotation = MagApplication.windowManager.getDefaultDisplay().getRotation(); + int degrees = 0; + switch (rotation) { + case 0: + degrees = 0; + break; + case 1: + degrees = 90; + break; + case 2: + degrees = 180; + break; + case 3: + degrees = 270; + break; + } + if (info.facing == 1) { + int result2 = (info.orientation + degrees) % 360; + result = (360 - result2) % 360; + } else { + result = ((info.orientation - degrees) + 360) % 360; + } + this.camera_.setDisplayOrientation(result); + return result; + } + + public void takePicture() { + if (this.camera_ != null) { + this.camera_.takePicture(null, null, this.jpegCallback); + } + } + + private class CameraSizeComparator implements Comparator { + private CameraSizeComparator() { + } + + @Override // java.util.Comparator + public int compare(Camera.Size lhs, Camera.Size rhs) { + if (lhs.width == rhs.width) { + return 0; + } + if (lhs.width > rhs.width) { + return 1; + } + return -1; + } + } + + public class Size { + private int height_; + private int width_; + + public Size() { + } + + public Size(int width, int height) { + this.width_ = width; + this.height_ = height; + } + + public void setWidth(int width) { + this.width_ = width; + } + + public void setHeight(int height) { + this.height_ = height; + } + + public int getWidth() { + return this.width_; + } + + public int getHeight() { + return this.height_; + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/WaitCondition.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/WaitCondition.java new file mode 100644 index 0000000..9bfc9f6 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/sdk/WaitCondition.java @@ -0,0 +1,7 @@ +package cn.com.magnity.magnitycx.sdk; + +/* loaded from: classes.dex */ +public class WaitCondition { + public final Object cond = new Object(); + public volatile boolean notified = false; +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/upgrade/CheckVersionTask.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/upgrade/CheckVersionTask.java new file mode 100644 index 0000000..b6d226a --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/upgrade/CheckVersionTask.java @@ -0,0 +1,315 @@ +package cn.com.magnity.magnitycx.upgrade; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.res.Configuration; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.os.Message; +import android.support.v4.content.FileProvider; +import cn.com.magnity.magnitycx.MagApplication; +import cn.com.magnity.magnitycx.MainActivity; +import cn.com.magnity.magnitycx.R; +import cn.com.magnity.magnitycx.log.Logging; +import java.io.File; +import java.util.Locale; +import org.apache.log4j.Priority; +import org.json.JSONArray; +import org.json.JSONObject; + +/* loaded from: classes.dex */ +public class CheckVersionTask implements Runnable { + private static final int CHECK_ERROR = -1; + private static final int CHECK_OK = 0; + private static final String UPGRADEINFO_DESC = "description"; + private static final String UPGRADEINFO_FORCE = "forceUpgrade"; + private static final String UPGRADEINFO_URL = "url"; + private static final String UPGRADEINFO_VERSIONCODE = "versionCode"; + private static final String UPGRADEINFO_VERSIONNAME = "versionName"; + public static final int UPGRADE_BEGIN = 1; + private static final int UPGRADE_ERROR = -2; + public static final int UPGRADE_FINISHED = 3; + public static final int UPGRADE_RECEIVED_SIZE = 2; + private Context ctx_; + private boolean isForceUpgrade_; + private int localVersion_; + Handler handler_ = new Handler() { // from class: cn.com.magnity.magnitycx.upgrade.CheckVersionTask.1 + @Override // android.os.Handler + public void handleMessage(Message msg) { + super.handleMessage(msg); + switch (msg.what) { + case -2: + if (CheckVersionTask.this.progressDialog_ != null) { + CheckVersionTask.this.progressDialog_.dismiss(); + CheckVersionTask.this.progressDialog_ = null; + } + AlertDialog.Builder builder = new AlertDialog.Builder(CheckVersionTask.this.ctx_); + builder.setTitle(R.string.upgradeError); + builder.setPositiveButton(R.string.labelOK, new DialogInterface.OnClickListener() { // from class: cn.com.magnity.magnitycx.upgrade.CheckVersionTask.1.1 + @Override // android.content.DialogInterface.OnClickListener + public void onClick(DialogInterface dialog, int which) { + CheckVersionTask.this.unlockScreen(); + } + }); + AlertDialog dialog = builder.create(); + dialog.setCanceledOnTouchOutside(false); + dialog.show(); + break; + case -1: + CheckVersionTask.this.unlockScreen(); + break; + case 0: + CheckVersionTask.this.lockScreen(); + Bundle bundle = msg.getData(); + CheckVersionTask.this.isForceUpgrade_ = bundle.getBoolean(CheckVersionTask.UPGRADEINFO_FORCE); + CheckVersionTask.this.showUpgradeDialog(bundle.getString(CheckVersionTask.UPGRADEINFO_DESC), bundle.getString(CheckVersionTask.UPGRADEINFO_URL), bundle.getString(CheckVersionTask.UPGRADEINFO_VERSIONNAME), bundle.getInt(CheckVersionTask.UPGRADEINFO_VERSIONCODE), CheckVersionTask.this.isForceUpgrade_); + break; + case 1: + CheckVersionTask.this.progressDialog_ = new ProgressDialog(CheckVersionTask.this.ctx_); + CheckVersionTask.this.progressDialog_.setOnCancelListener(new DialogInterface.OnCancelListener() { // from class: cn.com.magnity.magnitycx.upgrade.CheckVersionTask.1.2 + @Override // android.content.DialogInterface.OnCancelListener + public void onCancel(DialogInterface dialog2) { + CheckVersionTask.this.stopDownloadApk(); + CheckVersionTask.this.unlockScreen(); + if (CheckVersionTask.this.isForceUpgrade_ && (CheckVersionTask.this.ctx_ instanceof MainActivity)) { + ((MainActivity) CheckVersionTask.this.ctx_).onBackPressed(); + } + } + }); + CheckVersionTask.this.progressDialog_.setProgressStyle(1); + CheckVersionTask.this.progressDialog_.setMessage(CheckVersionTask.this.ctx_.getResources().getString(R.string.upgrading)); + CheckVersionTask.this.progressDialog_.setProgressNumberFormat("%1d KB/%2d KB"); + CheckVersionTask.this.progressDialog_.setProgress(0); + CheckVersionTask.this.progressDialog_.setMax(msg.arg1 / 1000); + CheckVersionTask.this.progressDialog_.setCanceledOnTouchOutside(false); + CheckVersionTask.this.progressDialog_.show(); + break; + case 2: + if (CheckVersionTask.this.progressDialog_ != null) { + CheckVersionTask.this.progressDialog_.setProgress(msg.arg1 / 1000); + break; + } + break; + case 3: + if (CheckVersionTask.this.progressDialog_ != null) { + CheckVersionTask.this.progressDialog_.dismiss(); + CheckVersionTask.this.progressDialog_ = null; + } + CheckVersionTask.this.unlockScreen(); + if (msg.obj != null && (msg.obj instanceof File)) { + CheckVersionTask.this.installApk((File) msg.obj); + break; + } + break; + } + } + }; + private ProgressDialog progressDialog_ = null; + private Thread threadUpgrading_ = null; + + public CheckVersionTask(Context ctx, int localVersion) { + this.ctx_ = ctx; + this.localVersion_ = localVersion; + } + + public void stopDownload() { + stopDownloadApk(); + } + + public UpgradeInfo parseVersionInfo(String str) throws Exception { + UpgradeInfo info = null; + JSONObject object = new JSONObject(str); + if (object != null && object.length() >= 1) { + String productType = this.ctx_.getString(R.string.upgradeID); + if (object.has(productType)) { + JSONArray array = object.getJSONArray(productType); + if (array.length() > 0) { + JSONObject obj = array.getJSONObject(array.length() - 1); + info = new UpgradeInfo(); + if (obj.has("verName")) { + info.setVersionName(obj.getString("verName")); + } + if (obj.has("verCode")) { + info.setVersionCode(obj.getInt("verCode")); + } + if (obj.has("apkUrl")) { + info.setApkUrl(obj.getString("apkUrl")); + } + try { + Configuration config = this.ctx_.getResources().getConfiguration(); + if (!config.locale.getLanguage().equals(Locale.CHINA.getLanguage()) || !config.locale.getCountry().equals(Locale.CHINA.getCountry())) { + if (obj.has("description-en")) { + info.setDescription(obj.getString("description-en")); + } + } else if (obj.has(UPGRADEINFO_DESC)) { + info.setDescription(obj.getString(UPGRADEINFO_DESC)); + } + } catch (Exception e) { + } + if (obj.has(UPGRADEINFO_FORCE)) { + info.setForceUpgrade(obj.getBoolean(UPGRADEINFO_FORCE)); + } + } + } + } + return info; + } + + /* JADX INFO: Access modifiers changed from: private */ + public void lockScreen() { + if (this.ctx_ instanceof Activity) { + ((Activity) this.ctx_).setRequestedOrientation(14); + } + } + + /* JADX INFO: Access modifiers changed from: private */ + public void unlockScreen() { + if (this.ctx_ instanceof Activity) { + ((Activity) this.ctx_).setRequestedOrientation(10); + } + } + + @Override // java.lang.Runnable + public void run() { + String path = this.ctx_.getResources().getString(R.string.remote_url); + try { + String str = HttpHelper.GetRemoteVersionInfo(path, 10000, Priority.INFO_INT); + UpgradeInfo upgradeInfo = parseVersionInfo(str); + if (upgradeInfo == null) { + Logging.info("Parse version info fail."); + this.handler_.sendEmptyMessage(-1); + } else if (upgradeInfo.getVersionCode() > this.localVersion_) { + Logging.info("New app version is detected(" + upgradeInfo.getVersionCode() + ")"); + Message msg = new Message(); + msg.what = 0; + Bundle bundle = new Bundle(); + bundle.putBoolean(UPGRADEINFO_FORCE, upgradeInfo.isForceUpgrade()); + bundle.putString(UPGRADEINFO_DESC, upgradeInfo.getDescription()); + bundle.putString(UPGRADEINFO_URL, upgradeInfo.getApkUrl()); + bundle.putString(UPGRADEINFO_VERSIONNAME, upgradeInfo.getVersionName()); + bundle.putInt(UPGRADEINFO_VERSIONCODE, upgradeInfo.getVersionCode()); + msg.setData(bundle); + this.handler_.sendMessage(msg); + } + } catch (Exception ex) { + this.handler_.sendEmptyMessage(-1); + Logging.error("Check upgrade error(" + ex.getMessage() + ")"); + } + } + + /* JADX INFO: Access modifiers changed from: private */ + public void showUpgradeDialog(String description, final String url, final String versionName, final int versionCode, boolean isForceUpgrade) { + AlertDialog.Builder builer = new AlertDialog.Builder(this.ctx_); + builer.setTitle(this.ctx_.getResources().getString(R.string.upgrade) + "(V" + versionName + ")"); + builer.setMessage(description); + builer.setPositiveButton(R.string.labelOK, new DialogInterface.OnClickListener() { // from class: cn.com.magnity.magnitycx.upgrade.CheckVersionTask.2 + @Override // android.content.DialogInterface.OnClickListener + public void onClick(DialogInterface dialog, int which) { + String path = MagApplication.magParameter.otherDir + File.separator + "MAG-Cx." + versionName + ".apk"; + File file = new File(path); + if (file.exists()) { + PackageManager pm = CheckVersionTask.this.ctx_.getPackageManager(); + PackageInfo packInfo = pm.getPackageArchiveInfo(path, 1); + if (packInfo == null || packInfo.versionCode != versionCode) { + CheckVersionTask.this.startDownloadApk(url, versionName); + return; + } else { + CheckVersionTask.this.installApk(file); + return; + } + } + CheckVersionTask.this.startDownloadApk(url, versionName); + } + }); + if (!isForceUpgrade) { + builer.setNegativeButton(R.string.labelCancel, new DialogInterface.OnClickListener() { // from class: cn.com.magnity.magnitycx.upgrade.CheckVersionTask.3 + @Override // android.content.DialogInterface.OnClickListener + public void onClick(DialogInterface dialog, int which) { + CheckVersionTask.this.unlockScreen(); + } + }); + } else { + builer.setOnCancelListener(new DialogInterface.OnCancelListener() { // from class: cn.com.magnity.magnitycx.upgrade.CheckVersionTask.4 + @Override // android.content.DialogInterface.OnCancelListener + public void onCancel(DialogInterface dialog) { + if (CheckVersionTask.this.ctx_ instanceof MainActivity) { + ((MainActivity) CheckVersionTask.this.ctx_).onBackPressed(); + } + } + }); + } + AlertDialog dialog = builer.create(); + dialog.setCanceledOnTouchOutside(false); + dialog.show(); + } + + /* JADX INFO: Access modifiers changed from: private */ + public void startDownloadApk(final String url, final String version) { + HttpHelper.isCancelled = false; + this.threadUpgrading_ = new Thread() { // from class: cn.com.magnity.magnitycx.upgrade.CheckVersionTask.5 + @Override // java.lang.Thread, java.lang.Runnable + public void run() { + try { + File file = HttpHelper.getRemoteApk(url, version, 10000, 30000, CheckVersionTask.this.handler_); + if (file == null) { + CheckVersionTask.this.handler_.sendEmptyMessage(-2); + } else { + CheckVersionTask.this.handler_.sendMessage(CheckVersionTask.this.handler_.obtainMessage(3, file)); + } + } catch (Exception ex) { + Logging.error("Upgrading error(" + ex.getMessage() + ")"); + CheckVersionTask.this.handler_.sendEmptyMessage(-2); + } + } + }; + this.threadUpgrading_.start(); + } + + /* JADX INFO: Access modifiers changed from: private */ + public void stopDownloadApk() { + HttpHelper.isCancelled = true; + try { + this.threadUpgrading_.join(500L); + this.threadUpgrading_ = null; + } catch (Exception e) { + this.threadUpgrading_ = null; + } + } + + private File getOthersStoragePath(Context context) { + File file; + String state = Environment.getExternalStorageState(); + if ("mounted".equals(state) && (file = new File(Environment.getExternalStorageDirectory(), "magnity/Cx/others")) != null) { + if (!file.exists()) { + file.mkdirs(); + return file; + } + return file; + } + return null; + } + + /* JADX INFO: Access modifiers changed from: private */ + public void installApk(File file) { + Intent installIntent = new Intent("android.intent.action.VIEW"); + installIntent.setFlags(268435456); + File usedFile = new File(getOthersStoragePath(this.ctx_), file.getName()); + if (Build.VERSION.SDK_INT >= 24) { + installIntent.setFlags(1); + Uri contentUri = FileProvider.getUriForFile(this.ctx_, "cn.com.magnity.magnitycx.fileprovider", usedFile); + installIntent.setDataAndType(contentUri, "application/vnd.android.package-archive"); + } else { + installIntent.setDataAndType(Uri.fromFile(usedFile), "application/vnd.android.package-archive"); + } + this.ctx_.startActivity(installIntent); + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/upgrade/HttpHelper.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/upgrade/HttpHelper.java new file mode 100644 index 0000000..6f40f6f --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/upgrade/HttpHelper.java @@ -0,0 +1,224 @@ +package cn.com.magnity.magnitycx.upgrade; + +import android.os.Handler; +import cn.com.magnity.magnitycx.MagApplication; +import cn.com.magnity.magnitycx.log.Logging; +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; + +/* loaded from: classes.dex */ +public class HttpHelper { + public static volatile boolean isCancelled; + + public static String GetRemoteVersionInfo(String path, int connTimeout, int readTimeout) throws Exception { + String str; + BufferedReader br = null; + InputStream is = null; + try { + URL url = new URL(path); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setConnectTimeout(connTimeout); + conn.setReadTimeout(readTimeout); + conn.setRequestMethod("GET"); + conn.setRequestProperty("Accept-Language", "zh-CN"); + conn.setRequestProperty("Charset", "UTF-8"); + conn.setRequestProperty("Connextion", "Keep-Alive"); + int code = conn.getResponseCode(); + if (code == 302) { + URL url2 = new URL(conn.getHeaderField("Location")); + conn = (HttpURLConnection) url2.openConnection(); + conn.setConnectTimeout(connTimeout); + conn.setReadTimeout(readTimeout); + conn.setRequestMethod("GET"); + conn.setRequestProperty("Accept-Language", "zh-CN"); + conn.setRequestProperty("Charset", "UTF-8"); + conn.setRequestProperty("Connextion", "Keep-Alive"); + code = conn.getResponseCode(); + } + if (code == 200) { + is = conn.getInputStream(); + BufferedReader br2 = new BufferedReader(new InputStreamReader(is)); + try { + StringBuffer stringBuffer = new StringBuffer(""); + String newLine = System.getProperty("line.separator"); + while (true) { + String line = br2.readLine(); + if (line == null) { + break; + } + stringBuffer.append(line + newLine); + } + if (stringBuffer.length() > 0) { + stringBuffer.deleteCharAt(stringBuffer.length() - 1); + } + br2.close(); + is.close(); + str = stringBuffer.toString(); + if (br2 != null) { + try { + br2.close(); + } catch (IOException e) { + Logging.error("Fail to get remote info because of io error."); + } + } + if (is != null) { + is.close(); + } + } catch (Throwable th) { + th = th; + br = br2; + if (br != null) { + try { + br.close(); + } catch (IOException e2) { + Logging.error("Fail to get remote info because of io error."); + throw th; + } + } + if (is != null) { + is.close(); + } + throw th; + } + } else { + Logging.error("Get error respond(" + code + ")"); + str = ""; + if (0 != 0) { + try { + br.close(); + } catch (IOException e3) { + Logging.error("Fail to get remote info because of io error."); + } + } + if (0 != 0) { + is.close(); + } + } + return str; + } catch (Throwable th2) { + th = th2; + } + } + + public static File getRemoteApk(String path, String version, int connTimeout, int readTimeout, Handler handler) throws Exception { + File file; + FileOutputStream fos; + int total; + int len; + FileOutputStream fos2 = null; + BufferedInputStream bis = null; + InputStream is = null; + try { + URL url = new URL(path); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setConnectTimeout(connTimeout); + conn.setReadTimeout(readTimeout); + conn.setRequestMethod("GET"); + conn.setRequestProperty("Accept-Language", "zh-CN"); + conn.setRequestProperty("Charset", "UTF-8"); + conn.setRequestProperty("Connextion", "Keep-Alive"); + int code = conn.getResponseCode(); + if (code == 302) { + URL url2 = new URL(conn.getHeaderField("Location")); + conn = (HttpURLConnection) url2.openConnection(); + conn.setConnectTimeout(connTimeout); + conn.setReadTimeout(readTimeout); + conn.setRequestProperty("Accept-Encoding", "identity"); + conn.setRequestMethod("GET"); + conn.setRequestProperty("Accept-Language", "zh-CN"); + conn.setRequestProperty("Charset", "UTF-8"); + conn.setRequestProperty("Connextion", "Keep-Alive"); + code = conn.getResponseCode(); + } + if (code == 200) { + int size = conn.getContentLength(); + handler.sendMessage(handler.obtainMessage(1, size, 0)); + is = conn.getInputStream(); + BufferedInputStream bis2 = new BufferedInputStream(is); + try { + file = new File(MagApplication.magParameter.otherDir, "MAG-Cx." + version + ".apk"); + if (file.exists()) { + file.delete(); + } + fos = new FileOutputStream(file); + total = 0; + } catch (Throwable th) { + th = th; + bis = bis2; + } + try { + byte[] buf = new byte[1024]; + while (!isCancelled && (len = bis2.read(buf)) != -1) { + fos.write(buf, 0, len); + total += len; + handler.sendMessage(handler.obtainMessage(2, total, 0)); + } + fos.close(); + bis2.close(); + is.close(); + if (total != size) { + file = null; + } + if (fos != null) { + try { + fos.close(); + } catch (IOException e) { + Logging.error("Fail to get remote file because of io error."); + } + } + if (bis2 != null) { + bis2.close(); + } + if (is != null) { + is.close(); + } + } catch (Throwable th2) { + th = th2; + bis = bis2; + fos2 = fos; + if (fos2 != null) { + try { + fos2.close(); + } catch (IOException e2) { + Logging.error("Fail to get remote file because of io error."); + throw th; + } + } + if (bis != null) { + bis.close(); + } + if (is != null) { + is.close(); + } + throw th; + } + } else { + Logging.error("Get error respond(" + code + ")"); + file = null; + if (0 != 0) { + try { + fos2.close(); + } catch (IOException e3) { + Logging.error("Fail to get remote file because of io error."); + } + } + if (0 != 0) { + bis.close(); + } + if (0 != 0) { + is.close(); + } + } + return file; + } catch (Throwable th3) { + th = th3; + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/upgrade/UpgradeInfo.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/upgrade/UpgradeInfo.java new file mode 100644 index 0000000..9529a4b --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/upgrade/UpgradeInfo.java @@ -0,0 +1,50 @@ +package cn.com.magnity.magnitycx.upgrade; + +/* loaded from: classes.dex */ +public class UpgradeInfo { + private String apkUrl_; + private String description_; + private boolean isForceUpgrade_; + private int versionCode_; + private String versionName_; + + public void setVersionName(String name) { + this.versionName_ = name; + } + + public String getVersionName() { + return this.versionName_; + } + + public void setVersionCode(int code) { + this.versionCode_ = code; + } + + public int getVersionCode() { + return this.versionCode_; + } + + public void setDescription(String description) { + this.description_ = description; + } + + public String getDescription() { + return this.description_; + } + + public void setApkUrl(String url) { + this.apkUrl_ = url; + } + + public String getApkUrl() { + return this.apkUrl_; + } + + public void setForceUpgrade(boolean b) { + this.isForceUpgrade_ = b; + } + + public boolean isForceUpgrade() { + return this.isForceUpgrade_; + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/upgrade/UpgradeManager.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/upgrade/UpgradeManager.java new file mode 100644 index 0000000..5a5b413 --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/upgrade/UpgradeManager.java @@ -0,0 +1,67 @@ +package cn.com.magnity.magnitycx.upgrade; + +import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import cn.com.magnity.magnitycx.log.Logging; + +/* loaded from: classes.dex */ +public class UpgradeManager { + private Context ctx_; + private CheckVersionTask task_; + private Thread thread_; + + public UpgradeManager(Context ctx) { + this.ctx_ = ctx; + } + + public boolean start() { + if (!checkNetWorkStatus(this.ctx_)) { + return false; + } + this.task_ = new CheckVersionTask(this.ctx_, getLocalVersionCode(this.ctx_)); + this.thread_ = new Thread(this.task_); + this.thread_.start(); + return true; + } + + public void stop() { + if (this.task_ != null) { + this.task_.stopDownload(); + try { + this.thread_.join(500L); + } catch (InterruptedException e) { + } + this.thread_ = null; + this.task_ = null; + } + } + + private int getLocalVersionCode(Context ctx) { + PackageManager packageManager = ctx.getPackageManager(); + try { + PackageInfo packInfo = packageManager.getPackageInfo(ctx.getPackageName(), 0); + return packInfo.versionCode; + } catch (PackageManager.NameNotFoundException ex) { + Logging.warn("Fail to get packet name(" + ex.getMessage() + ")"); + return 100; + } + } + + public static boolean checkNetWorkStatus(Context context) { + try { + ConnectivityManager cm = (ConnectivityManager) context.getSystemService("connectivity"); + NetworkInfo netinfo = cm.getActiveNetworkInfo(); + if (netinfo != null) { + if (netinfo.isConnected()) { + return true; + } + } + return false; + } catch (Exception e) { + return false; + } + } +} diff --git a/analysis/jadx_magcx/cn/com/magnity/magnitycx/util/ActivityUtils.java b/analysis/jadx_magcx/cn/com/magnity/magnitycx/util/ActivityUtils.java new file mode 100644 index 0000000..9d577be --- /dev/null +++ b/analysis/jadx_magcx/cn/com/magnity/magnitycx/util/ActivityUtils.java @@ -0,0 +1,27 @@ +package cn.com.magnity.magnitycx.util; + +import android.app.Activity; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; +import java.util.ArrayList; + +/* loaded from: classes.dex */ +public final class ActivityUtils { + public static boolean requestRuntimePermission(Activity activity, String[] permissionTypes, int requestCode) { + if (permissionTypes == null) { + return false; + } + ArrayList permissions = new ArrayList<>(); + for (int i = 0; i < permissionTypes.length; i++) { + String permissionType = permissionTypes[i]; + if (ContextCompat.checkSelfPermission(activity, permissionType) != 0) { + permissions.add(permissionTypes[i]); + } + } + if (permissions.isEmpty()) { + return true; + } + ActivityCompat.requestPermissions(activity, (String[]) permissions.toArray(new String[permissions.size()]), requestCode); + return false; + } +} diff --git a/analysis/magcx_official_flow.md b/analysis/magcx_official_flow.md new file mode 100644 index 0000000..fffe976 --- /dev/null +++ b/analysis/magcx_official_flow.md @@ -0,0 +1,103 @@ +# MAG160C 官方 MAG-Cx 完整逆向结论(2026-09-10,jadx + Ghidra 全量解包) + +> 产物来源: +> - Java 层:`analysis/jadx_magcx/`(jadx 1.5.1 反编译官方普通版 MAG-Cx.apk 全量源码) +> - Native 层:`analysis/ida/export/ghidra_dump/libcxsdk_decomp.txt` +> (Ghidra 11.3.2 headless 全量反编译 lib/armeabi/libcxsdk.so,1290 函数) +> - libcoresdk(arm64) 反编译已在 `analysis/ida/export/ghidra_dump/`(专业版/网络路径) +> - 本文结论全部来自以上反编译源码,与真机日志交叉验证(vivo V2509A, Android 16)。 + +## 1. USB 协议权威版(以官方 Java UsbCommunication.java 为准) + +### 1.1 端点与超时 +| 端点 | 方向 | 用途 | 超时 | +|---|---|---|---| +| 0x03 | OUT | 命令(4B 小端 magic;FFC/激光/帧率带参数) | 800ms | +| 0x82 | IN | 命令响应/ack(读 ≤64B) | 800ms | +| 0x81 | IN | 图像流(28B 头 + 38400B + 28B 尾) | 800ms | +| 0x84 | IN | 标定文件下载(16KB 块) | 800ms/块 | +| 0x05 | OUT | 向相机发送标定(SendCaliFile 上传方向,本项目暂不用) | 800ms | + +**全部 800ms**(官方 `TIMEOUT` 常量)。响应缓冲 64B。 + +### 1.2 命令集(P2DCmd,全部 4 字节小端) +| 值 | 官方名 | 说明 | +|---|---|---| +| 0x6BB6B66B | GetParameter1 | → 0x5BB5B55B BasePara1(60B) | +| 0x6BB6B66C | GetParameter2 | → 0x5BB5B55C BasePara2(60B) | +| 0x6BB6B66D | SetParameter1 | 带 ack(64B 读) | +| 0x6BB6B66E | SetParameter2 | 带 ack | +| 0x6BB6B66F | GetCaliInfo | → 0x5BB5B55E {i32 size, i32 reserved, i64 date} | +| 0x6BB6B670 | GetCaliFile | ack 0x5BB5B55D,随后相机在 0x84 推标定文件 | +| 0x6BB6B671 | SendCaliFile | 上传方向(配 0x05 OUT) | +| 0x6BB6B672 | SetShutterState | FFC!8B {magic LE, u32 on LE} | +| 0x6BB6B673 | StartTransferImg | 开始推流,带 ack | +| 0x6BB6B674 | StopTransferImg | 停流,带 ack | +| 0x6BB6B675 | GetLifeTime | → 0x5BB5B561 {magic, i32 开机毫秒} | +| 0x6BB6B676 | SetLaserState | 8B(激光,非省电!) | +| 0x6BB6B677 | PowerSave | 8B | +| 0x6BB6B678 | GetFPAState | → 0x5BB5B562 | +| 0x6BB6B679 | SetFrameRate | 12B {magic, i32 interFrame, i32 interLine} | + +D2P 响应魔数:5B=SendParameter1、5C=SendParameter2、5D=SendCaliFile、 +5E=SendCaliInfo、61=SendLifeTime(均在 0x5BB5B5xx 空间)。 + +**注意**:0x6BB6B66B 是回文数(字节对称),因此历史上"66b 有响应、其余全无" +正是字节序反了的特征——非回文命令全部变成无效字节。`MagProtocolTest` 已锁死。 + +### 1.3 BasePara1(0x5BB5B55B payload,14×i32 = 56B) +int[0] serialNumber;int[1] hwVersion(低24位)|devType(高8位); +int[2] swVersion;int[4] fpaWidth;int[5] fpaHeight;int[6] fps; +int[8] fpaGain;int[9] fpaFlip;int[10] interFrame;int[11] interLine。 +devType:0=c1, 1=c3, 2=c3p, **3=core160(MAG160C)**, 5=c1pro, 6=c1prolite。 + +### 1.4 官方连接序列(connect() + startTransfer()) +``` +1. write GetParameter1 → read 64B → BasePara1(失败则整个 connect 放弃) +2. write GetParameter2 → read → BasePara2 +3. write GetCaliInfo → read → {size, reserved, date} +4. 缓存判定:{caliDir}/{productType}.{serial}.{date} 存在且长度==size + ├─ 命中:直接 startTransfer() + └─ 未命中:启动 ThreadCaliRecv(0x84 连续读,16KB/块,无数据 5s 放弃) + → sleep 50ms → write GetCaliFile(670)(waitForCmdAck 读 ack) + → 收满 size 字节存盘 → startTransfer(caliPath) +5. startTransfer: + a. native startProcess(w, h, serial, devType, shutterClose/OpenSpeed, + ffcTriggerFrame, ffcTriggerTemperature, paletteIndex, baseLineAcc, + caliPath) ← libcxsdk Controller::StartProcess → LoadCalibrationTable + (caliPath),加载失败即 startProcess 失败并删除缓存文件 + b. native setEX / getExtParameter+setExtParameter(dwFlip) / setAutoEnlarge + (全部 native,不占 USB) + c. 启动 ThreadImgRecv + ThreadImgProcess → sleep 5ms + → write StartTransferImg(673)(waitForCmdAck 读 ack) +``` + +### 1.5 图像流帧结构(与 FrameStream/管线一致) +28B 头:0x1BB1B11B, frameIndex, dataLen(=w*h*2), type(0/1), period, 保留×3。 +38400B u16LE 像素。 +28B 尾:0x1BB1B11C, frameIndex, fpaTemp, intDrop(=type), reserved[2]。 +官方 ThreadImgRecv:搜头→凑满 frameBytes→校验尾→drop∈{0,1} 才交给处理线程; +fpaTemp 在尾 +8(devType0/5/6/3),camTemp=fpaTemp-500。 + +### 1.6 FFC 触发(官方逻辑) +- 双击/消息(MSG_TRIGGER_FFC)→ SetShutterState(672); +- 每 16 帧查 GetLifeTime(675):devType1/2 按 6.5s/13s/19.5s/26s 档位触发 FFC; + **devType0/5/6/3(含 core160)该路径不自动 FFC**(仅温度稳定标志)。 +- 本项目管线内部 FFC 调度(onFfc→672)为等效实现,且 672 相机随时接受。 + +## 2. 本项目复刻状态(IrSession.kt = 官方 UsbCommunication 等价物) +- 连接序列 1-5 已逐行复刻(含 0x84 拉取、缓存 files/cali/{product}.{serial}.{date}); +- 命令打包小端(与官方 intToByteArray 一致)——**历史上 cmd4/cmd8 用 + ByteBuffer.putInt 默认大端导致非回文命令全部反转**(16 轮黑屏的根因, + MagProtocolTest 锁死); +- usfs 坑:bulk 读超时后端点被标 halted,后续传输全部瞬间失败,须每次失败后 + CLEAR_HALT(IrSession.diagnoseEndpoint); +- 会话互斥(同一时刻仅一个 IrSession 持有相机)+ DETACHED 释放 + 去抖。 + +## 3. 工具与环境(2026-09-10 本机) +- jadx 1.5.1:C:\Tools\jadx-1.5.1(反编译产物 C:\Tools\jadx-out,已拷贝入库 + analysis/jadx_magcx/) +- Ghidra 11.3.2:C:\Tools\ghidra_11.3.2_PUBLIC;工程 C:\Tools\ghidra_proj\MagCX; + 全量反编译脚本 C:\Tools\ghidra_scripts_user\DumpAllDecomp.java +- 重跑命令(PowerShell/cmd): + `set JAVA_HOME=C:\Tools\jdk-21&& C:\Tools\ghidra_11.3.2_PUBLIC\support\analyzeHeadless.bat C:\Tools\ghidra_proj MagCX -process libcxsdk.so -scriptPath C:\Tools\ghidra_scripts_user -postScript DumpAllDecomp.java <输出文件>` diff --git a/docs/android_app/HANDOFF_DEVELOPMENT.md b/docs/android_app/HANDOFF_DEVELOPMENT.md index dabeeb5..141a5e4 100644 --- a/docs/android_app/HANDOFF_DEVELOPMENT.md +++ b/docs/android_app/HANDOFF_DEVELOPMENT.md @@ -101,11 +101,16 @@ res/drawable/*.xml 自绘矢量图标(双弧圆等可靠几何图形 4. 暖机窗口检查在 ffc_step **之前**(顺序不能改)。 - 验证方式:`android/app/src/test/.../RenderPipelineTest.kt`(JVM 差分测试,参照 `analysis/render_offline.c` 的 C 输出,60帧序列与官方DDT)。 -### 4.2 USB 协议(analysis/protocol_spec.md 全文) -- 命令:普通 4 字节 magic;FFC 8 字节 {magic, param}。 -- 初始化:66b→66c→66f(4B)→FFC(0)×2→300ms→START(73);停止 STOP(74)。 -- 帧流:EP 0x81 bulk,0x1BB1B11B 头 + 0x1C 起像素 + 尾部 shutter 于 +0x24。 -- 相机信息块 0x5BB5B55B:+0x00 pid、+0x08 序列号、+0x10 宽、+0x14 高、+0x18 fps。 +### 4.2 USB 协议(权威版:analysis/magcx_official_flow.md) +- **2026-09-10 已反编译官方普通版全量源码**(jadx:`analysis/jadx_magcx/`, + UsbCommunication.java 是 USB 层真身;Ghidra:libcxsdk 全量伪代码 + `analysis/ida/export/ghidra_dump/libcxsdk_decomp.txt`,1290 函数)。 +- 协议要点:命令 4 字节**小端**;超时全线 800ms;序列 + GetParameter1(66b)→GetParameter2(66c)→GetCaliInfo(66f)→[缓存缺失] + GetCaliFile(670)+EP 0x84 拉 16KB 块→StartTransferImg(673);FFC=672(帧驱动)。 +- 官方响应格式:0x5BB5B55B BasePara1(60B,含 serial/devType/宽/高/fps)。 +- 旧 analysis/protocol_spec.md 的 66f/670 描述("prepare/version query")不准, + 以 magcx_official_flow.md 为准。 ### 4.3 实时画面渲染(最终约定:构图钉死竖屏框架) - **Activity 锁定竖屏**(manifest `screenOrientation="portrait"`):屏幕相对手机框架 @@ -166,6 +171,11 @@ git -C C:\Project\MAG160C commit -m "android: ..." 3. **SurfaceView 与旋转**:不要在横竖屏间切换不同布局分支(SurfaceView 会被销毁且 surface 不重建)。 用"稳定单分支 + 覆盖层"布局(当前实现即如此)。 4. **写代码要谨慎**:本会话多次因急于成稿写出语法错误/残留死代码。每写一个文件后立即编译。 +5. **ByteBuffer.putInt 默认大端**:USB 命令必须小端(官方 intToByteArray)。 + 16 轮黑屏调试的根因就是它(66b 回文数掩盖了字节反转),MagProtocolTest 已锁死。 +6. **官方 App 源码已入库,先读它再写协议代码**:analysis/jadx_magcx/(Java)、 + analysis/ida/export/ghidra_dump/libcxsdk_decomp.txt(native)、 + analysis/magcx_official_flow.md(权威结论)。不要凭旧文档猜协议。 ## 7. 当前状态与待办 diff --git a/docs/android_app/session_state.md b/docs/android_app/session_state.md index 1f7031e..09b01e5 100644 --- a/docs/android_app/session_state.md +++ b/docs/android_app/session_state.md @@ -350,6 +350,32 @@ - 预期日志:GetParameter1 resp=0x5BB5B55B len=60 → GetParameter2 → GetCaliInfo (cali size=…date=…)→ 下载(首次)或 cache hit → frames 递增。 +## 用户反馈修复 第十七轮(2026-09-10,根因确认:命令字节序反转) + +- [x] **第 16 轮日志**:官方序列下 GetParameter1 仍唯一有响应(60B BasePara1 完整 + 解析成功:serial=160043865 devType=3=core160 160x120@15fps),66c/66f/673 全部 + 800ms 超时 → 与"字节内容"相关而非流程顺序。 +- [x] **根因**:`MagProtocol.cmd4/cmd8` 用 `ByteBuffer.putInt` —— **默认大端**! + 官方 `GlobalFunc.intToByteArray` 是小端。66b=0x6BB6B66B 是回文数,大小端 + 字节相同,所以 16 轮调试里它是唯一能被相机识别的命令,完美掩盖了 bug; + 其余命令(66c/66f/670/672/673/674)发出去的字节全是反的 → 相机不应答、 + 收到垃圾触发看门狗重启。PC 的 C 参考(mag160c_ir.c)是手工小端打包,所以 + PC 上一直正常。 +- [x] **修复**:cmd4 改手工小端打包(与官方 intToByteArray 逐字节一致); + cmd8 = cmd4(magic)+cmd4(param)。新增 MagProtocolTest 锁死 + GetParameter2/StartTransferImg/SetShutterState 的线缆字节序。 +- [x] 构建+单测全过;APK 已更新。提交 623d62b。 +- [x] **按用户要求完成全量解包复核**(产物入库 analysis/): + - `analysis/jadx_magcx/`:官方普通版全量 Java 源码(64 文件); + - `analysis/ida/export/ghidra_dump/libcxsdk_decomp.txt`:Ghidra 11.3.2 全量 + 反编译 libcxsdk.so(1290 函数); + - `analysis/magcx_official_flow.md`:权威协议结论(命令表/BasePara/CaliInfo/ + 连接序列/FFC 逻辑/工具重跑命令)。 + - native 复核:`Controller::StartProcess` 必须 `LoadCalibrationTable(caliPath)` + (官方 startProcess 失败会删缓存文件重下)→ 我们的 loadDdt 等价正确; + `Controller::PushFrame` 输入=整帧缓冲(28B头+像素+28B尾),与本管线一致。 +- 预期:66b/66c/66f 全部有响应 → cali 下载(首次)→ 流出帧。 + ## 待办 - 真机USB实测(温度绝对值标定、FFC/录像/MDT保存端到端)——进行中: