请仔细阅读和分析下面函数
1. 保持原始的功能逻辑不变
2. 已经给定的结构体名字和元素不要更改
3. 程序内部错误和异常使用英文, 其他添加中文注释说明
4. 不使用 auto,使用显式 for 循环
5. 结构体采用32位定义
6. 不要使用小函数,使用一个函数进行部署
7. 实现全部功能,完整可编译的代码
8. 提高执行效率,降低计算复杂度
HDDMDevice *__fastcall HDDMDeviceCache::loadDevice(
HDDMDeviceCache *this,
const std::string *archFilePath,
const std::string *deviceFilePath,
const std::string *templatePath,
const std::string *nodeTemplatePath)
{
int v6; // eax
__int64 v7; // r15
__int64 v8; // r14
__int64 n128; // r13
_QWORD *s1_1; // r14
HDDMDevice *Device_2; // rbx
_QWORD *s2_1; // rsi
size_t n; // rdx
bool v15; // zf
HDDMDevice *Device_1; // rax
const std::string *p_qword160; // r12
HDConfig *v18; // rbx
unsigned __int64 v19; // rbx
HEXInternalException *v20; // rbx
char isDerived; // al
char ValueAsBoolERKSs; // bl
char ValueAsBoolERKSs_1; // bl
unsigned __int16 word4; // si
unsigned __int16 word6; // cx
__int64 v26; // rdx
unsigned __int64 v27; // rbx
__int64 v28; // rdx
__int64 v29; // rdi
__int64 v30; // rax
__int64 v31; // rcx
__int64 v32; // rsi
_QWORD *v33; // r12
__int64 v34; // rdx
unsigned __int64 v35; // rax
unsigned int v36; // ebp
__int64 v37; // rcx
unsigned int v38; // edi
int v39; // r8d
int v40; // edx
int v41; // esi
__int64 v42; // rcx
int v43; // r9d
int v44; // r10d
__int16 n3; // cx
unsigned int v46; // r14d
__int64 v47; // r13
__int64 v48; // r13
__int64 v49; // r13
__int64 v50; // r8
const HDDMTilePort *s1_4; // r13
__int64 v52; // r8
std::string *v53; // rax
_QWORD *v54; // r14
__int64 v55; // r15
__int64 v56; // rax
__int64 v57; // r8
__int64 v58; // r14
__int64 v59; // rax
unsigned int v60; // r15d
unsigned int v61; // r14d
__int64 v62; // r14
__int64 v63; // rax
__int64 v64; // r8
int *insert_hint_unique_pos_3; // rdx
int *insert_hint_unique_pos_2; // r15
int *insert_hint_unique_pos_4; // r14
__int64 insert_hint_unique_pos_5; // rax
__int64 insert_hint_unique_pos; // rax
__int64 v70; // rdx
_BOOL8 v71; // rdi
unsigned __int64 v72; // r14
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__12; // rdx
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2; // r15
__int64 insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14; // rax
__int64 insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__13; // rax
__int64 v77; // rdx
_BOOL8 v78; // rdi
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__15; // rdx
HDDMTile *v80; // rsi
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5; // r15
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__16; // r14
__int64 insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__17; // rax
HDDMTile *v84; // rax
__int64 insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__3; // rax
__int64 v86; // rdx
_BOOL8 v87; // rdi
unsigned __int64 v88; // r14
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__18; // rdx
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8; // r15
__int64 insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20; // rax
__int64 insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__6; // rax
__int64 v93; // rdx
_BOOL8 v94; // rdi
unsigned int v95; // r14d
unsigned int v96; // r15d
__int64 v97; // r13
__int64 v98; // r13
__int64 v99; // r13
__int64 v100; // r13
__int64 v101; // r13
__int64 v102; // r13
__int64 v103; // r13
__int64 v104; // rax
__int64 v105; // rdx
int v106; // eax
__int64 v107; // rax
int v108; // ecx
unsigned int v109; // ebx
__int64 v110; // rdx
int v111; // ebp
__int64 v112; // rax
__int64 v113; // rax
__int64 v114; // rax
__int64 qwordA8; // rdx
__int64 v116; // r13
int v117; // r14d
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__21; // rax
unsigned __int64 v119; // r12
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__10; // rbx
__int64 insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22; // rax
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__11; // r15
__int64 insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__9; // rax
__int64 v124; // rdx
_BOOL8 v125; // rdi
int v126; // ebx
__int64 v127; // rax
__int64 v128; // rax
__int64 v129; // rax
__int64 TileType; // rbx
int v131; // eax
__int64 v132; // rdx
__int64 v133; // rcx
__int64 v134; // rax
__int64 TileTypeERKSs; // rbx
int v136; // eax
__int64 v137; // rdx
__int64 v138; // rcx
__int64 v139; // rax
HPAParamMgr *ParamMgrEv; // rbp
char ValueAsBoolERKSs_2; // bl
const char *s1_3; // rbp
HDDMInactiveExceptionAccess *v143; // rbp
char v144; // bl
google::protobuf::Message *message; // rdx
HEXDataException *v146; // rbp
HDDMDevice **v147; // rbx
__int64 v148; // rax
__int64 v149; // rax
HDDMOracle *v150; // rbx
HEXDataException *exception; // rbx
char *DEBUG:_Request_device_load:_%s__%s_n; // [rsp+0h] [rbp-AC8h]
__int64 v153; // [rsp+8h] [rbp-AC0h]
int v154; // [rsp+10h] [rbp-AB8h]
HDDMTilePort **p_s1; // [rsp+20h] [rbp-AA8h]
std::string *v158; // [rsp+30h] [rbp-A98h]
std::string *v160; // [rsp+58h] [rbp-A70h]
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4_; // [rsp+68h] [rbp-A60h]
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__19; // [rsp+68h] [rbp-A60h]
unsigned int insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4_a; // [rsp+68h] [rbp-A60h]
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__7; // [rsp+68h] [rbp-A60h]
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__4; // [rsp+68h] [rbp-A60h]
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__1; // [rsp+68h] [rbp-A60h]
int *insert_hint_unique_pos_1; // [rsp+68h] [rbp-A60h]
unsigned int v168; // [rsp+74h] [rbp-A54h]
HDDMDevice *Device; // [rsp+98h] [rbp-A30h]
__int64 v170; // [rsp+A0h] [rbp-A28h]
__int64 v171; // [rsp+C0h] [rbp-A08h]
char ValueAsBool; // [rsp+CBh] [rbp-9FDh]
unsigned int v173; // [rsp+CCh] [rbp-9FCh]
char v174; // [rsp+E5h] [rbp-9E3h] BYREF
char v175; // [rsp+E7h] [rbp-9E1h] BYREF
char v176; // [rsp+E9h] [rbp-9DFh] BYREF
char v177; // [rsp+EAh] [rbp-9DEh] BYREF
char v178; // [rsp+ECh] [rbp-9DCh] BYREF
char v179; // [rsp+EDh] [rbp-9DBh] BYREF
char v180; // [rsp+EFh] [rbp-9D9h] BYREF
unsigned __int16 xngFileType[8]; // [rsp+F0h] [rbp-9D8h] BYREF
unsigned __int16 xngFileType_1[8]; // [rsp+100h] [rbp-9C8h] BYREF
unsigned __int16 p_xngFileVersion[7]; // [rsp+110h] [rbp-9B8h] BYREF
unsigned __int16 xngFileVersion; // [rsp+11Eh] [rbp-9AAh] BYREF
_QWORD v185[2]; // [rsp+120h] [rbp-9A8h] BYREF
_QWORD v186[2]; // [rsp+130h] [rbp-998h] BYREF
_QWORD v187[2]; // [rsp+140h] [rbp-988h] BYREF
_QWORD v188[2]; // [rsp+150h] [rbp-978h] BYREF
__int64 v189; // [rsp+160h] [rbp-968h] BYREF
__int64 v190; // [rsp+170h] [rbp-958h] BYREF
int v191[2]; // [rsp+180h] [rbp-948h] BYREF
int v192[2]; // [rsp+190h] [rbp-938h] BYREF
_QWORD v193[2]; // [rsp+1A0h] [rbp-928h] BYREF
_QWORD v194[2]; // [rsp+1B0h] [rbp-918h] BYREF
_QWORD v195[2]; // [rsp+1C0h] [rbp-908h] BYREF
_QWORD deviceFilePath_1[2]; // [rsp+1F0h] [rbp-8D8h] BYREF
_QWORD v197[2]; // [rsp+200h] [rbp-8C8h] BYREF
__int64 v198; // [rsp+210h] [rbp-8B8h] BYREF
__int64 v199; // [rsp+220h] [rbp-8A8h] BYREF
_QWORD v200[2]; // [rsp+230h] [rbp-898h] BYREF
_QWORD v201[2]; // [rsp+240h] [rbp-888h] BYREF
_QWORD v202[2]; // [rsp+250h] [rbp-878h] BYREF
_QWORD v203[2]; // [rsp+260h] [rbp-868h] BYREF
_QWORD v204[2]; // [rsp+270h] [rbp-858h] BYREF
_QWORD v205[2]; // [rsp+280h] [rbp-848h] BYREF
_QWORD v206[2]; // [rsp+2A0h] [rbp-828h] BYREF
_QWORD v207[2]; // [rsp+2B0h] [rbp-818h] BYREF
_QWORD v208[2]; // [rsp+2C0h] [rbp-808h] BYREF
_QWORD v209[2]; // [rsp+2D0h] [rbp-7F8h] BYREF
_QWORD v210[2]; // [rsp+2F0h] [rbp-7D8h] BYREF
_QWORD v211[2]; // [rsp+300h] [rbp-7C8h] BYREF
_QWORD v212[2]; // [rsp+310h] [rbp-7B8h] BYREF
_QWORD v213[2]; // [rsp+320h] [rbp-7A8h] BYREF
_QWORD v214[2]; // [rsp+330h] [rbp-798h] BYREF
_QWORD v215[2]; // [rsp+340h] [rbp-788h] BYREF
_QWORD v216[2]; // [rsp+350h] [rbp-778h] BYREF
_QWORD v217[2]; // [rsp+360h] [rbp-768h] BYREF
_QWORD v218[2]; // [rsp+370h] [rbp-758h] BYREF
_QWORD v219[2]; // [rsp+380h] [rbp-748h] BYREF
_QWORD v220[2]; // [rsp+390h] [rbp-738h] BYREF
unsigned int v221[4]; // [rsp+3A0h] [rbp-728h] BYREF
_QWORD v222[2]; // [rsp+3B0h] [rbp-718h] BYREF
HDDMTile *v223[2]; // [rsp+3C0h] [rbp-708h] BYREF
HDDMTilePort *p_s1_1[2]; // [rsp+3D0h] [rbp-6F8h] BYREF
__int64 v225; // [rsp+3E0h] [rbp-6E8h] BYREF
__int64 v226; // [rsp+3F0h] [rbp-6D8h] BYREF
_QWORD v227[2]; // [rsp+400h] [rbp-6C8h] BYREF
_QWORD v228[2]; // [rsp+410h] [rbp-6B8h] BYREF
__int64 v229; // [rsp+420h] [rbp-6A8h] BYREF
_QWORD v230[2]; // [rsp+430h] [rbp-698h] BYREF
_QWORD v231[2]; // [rsp+440h] [rbp-688h] BYREF
_QWORD v232[2]; // [rsp+450h] [rbp-678h] BYREF
const HDDMTile *v233[2]; // [rsp+460h] [rbp-668h] BYREF
__int64 v234; // [rsp+470h] [rbp-658h] BYREF
int v235; // [rsp+478h] [rbp-650h] BYREF
int *insert_hint_unique_pos_6; // [rsp+480h] [rbp-648h]
int *v237; // [rsp+488h] [rbp-640h]
int *v238; // [rsp+490h] [rbp-638h]
__int64 v239; // [rsp+498h] [rbp-630h]
void *s1_2; // [rsp+4A0h] [rbp-628h] BYREF
int v241; // [rsp+4A8h] [rbp-620h] BYREF
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__23; // [rsp+4B0h] [rbp-618h]
int *v243; // [rsp+4B8h] [rbp-610h]
int *v244; // [rsp+4C0h] [rbp-608h]
__int64 v245; // [rsp+4C8h] [rbp-600h]
_BYTE v246[64]; // [rsp+4D0h] [rbp-5F8h] BYREF
void *istream[12]; // [rsp+510h] [rbp-5B8h] BYREF
_BYTE v248[176]; // [rsp+570h] [rbp-558h] BYREF
void *s1; // [rsp+620h] [rbp-4A8h] BYREF
char *v250; // [rsp+628h] [rbp-4A0h] BYREF
HDDMDevice v251; // [rsp+630h] [rbp-498h] BYREF
char v252; // [rsp+A88h] [rbp-40h]
std::string::string(&s1, "", &s1_2);
std::string::string(istream, "device:loadDevice", &v234);
HUTMemWatcher::HUTMemWatcher((HUTMemWatcher *)v248, (const std::string *)istream, (const std::string *)&s1);
std::string::_Rep::_M_dispose((char *)istream[0] - 24, v246);
std::string::_Rep::_M_dispose((char *)s1 - 24, istream);
if ( &_pthread_key_create )
{
v6 = pthread_mutex_lock(&mutex_);
if ( v6 )
std::__throw_system_error(v6);
}
HUTRuntime::HUTRuntime((HUTRuntime *)v246, 1);
HUTMemory::getUsedMemory((HUTMemory *)v246);
p_s1 = (HDDMTilePort **)HPAParamMgr::getParamMgr((HPAParamMgr *)v246);
std::string::string(v185, "device.trackDeviceDataLoading", istream);
ValueAsBool = HPAParamMgr::getValueAsBool((HPAParamMgr *)p_s1, (const std::string *)v185);
std::string::_Rep::_M_dispose(v185[0] - 24LL, &s1);
if ( ValueAsBool )
{
v7 = *(_QWORD *)archFilePath;
v8 = *(_QWORD *)deviceFilePath;
std::string::string(v218, "trackDeviceDataLoading", &v175);
std::string::string(v217, "device", &s1);
v154 = v8;
v153 = v7;
DEBUG:_Request_device_load:_%s__%s_n = "DEBUG: Request device load: %s, %s\n";
ComMsgMgr::sendScopedMsg::eval(
2,
"/proj/rdi-xco/wall/workspaces/wall287/sub/REL/2016.3/src/shared/device/devmodel/HDDMDevice.cxx",
770,
v217,
v218,
16777218);
std::string::_Rep::_M_dispose(v217[0] - 24LL, istream);
std::string::_Rep::_M_dispose(v218[0] - 24LL, &s1);
}
std::string::string((std::string *)v186, archFilePath);
sub_2188390(&s1, (const std::string *)v186);
n128 = 0;
std::string::_Rep::_M_dispose(v186[0] - 24LL, istream);
s1_1 = s1;
do
{
Device_2 = *(HDDMDevice **)((char *)&this->qword0 + n128);
if ( Device_2 )
{
s2_1 = (_QWORD *)Device_2->qword160;
n = *(s1_1 - 3);
if ( n == *(s2_1 - 3) && !memcmp(s1_1, s2_1, n) )
{
++Device_2->dword158;
if ( ValueAsBool )
{
std::string::string(v220, "trackDeviceDataLoading", &v176);
std::string::string(v219, "device", istream);
ComMsgMgr::sendScopedMsg::eval(
3,
"/proj/rdi-xco/wall/workspaces/wall287/sub/REL/2016.3/src/shared/device/devmodel/HDDMDevice.cxx",
789,
v219,
v220,
16777218);
std::string::_Rep::_M_dispose(v219[0] - 24LL, &s1_2);
std::string::_Rep::_M_dispose(v220[0] - 24LL, istream);
s1_1 = s1;
}
std::string::_Rep::_M_dispose(s1_1 - 3, istream);
goto LABEL_13;
}
}
n128 += 8;
}
while ( n128 != 128 );
std::string::_Rep::_M_dispose(s1_1 - 3, istream);
std::string::string(v188, "", istream);
std::string::string(v187, "", &s1_2);
Device = (HDDMDevice *)HDDMDeviceCache::createDevice(this, (const std::string *)v187, (const std::string *)v188);
std::string::_Rep::_M_dispose(v187[0] - 24LL, &s1);
std::string::_Rep::_M_dispose(v188[0] - 24LL, &s1);
++Device->dword158;
xngFileType[0] = 0;
xngFileVersion = 0;
HDDMDeviceCache::getFileTypeAndVersion(this, archFilePath, xngFileType, &xngFileVersion);
if ( (unsigned __int16)(xngFileType[0] - 2) > 1u )
{
exception = (HEXDataException *)__cxa_allocate_exception(0x18u);
std::string::string((std::string *)&v190, archFilePath);
std::string::string(&v189, "File is not a chip or device XNG:", istream);
sub_1E8DC92(exception, (int)DEBUG:_Request_device_load:_%s__%s_n, v153);
std::string::_Rep::_M_dispose(v189 - 24, &s1);
std::string::_Rep::_M_dispose(v190 - 24, &s1);
__cxa_throw(exception, (struct type_info *)&`typeinfo for'HEXDataException, sub_1F4CF30);
}
*(_QWORD *)v191 = (char *)&std::string::_Rep::_S_empty_rep_storage + 24;
*(_QWORD *)v192 = (char *)&std::string::_Rep::_S_empty_rep_storage + 24;
if ( xngFileType[0] == 2 )
{
sub_1F9A060(&s1, *(_QWORD *)archFilePath, 4, 0);
std::istream::read((std::istream *)&v251, (char *)&s1_2, 8);
HDDMXng::Chip::Chip((HDDMXng::Chip *)istream);
HDDMDevice::readMessage(&v251, (std::istream *)istream, message);
std::string::assign((std::string *)v191, (const std::string *)istream[7]);
std::string::assign((std::string *)v192, (const std::string *)istream[6]);
HDDMXng::Chip::~Chip((HDDMXng::Chip *)istream);
sub_1F34A70(&s1);
}
else // xngd
{
std::string::string((std::string *)v193, archFilePath);
HUBSimpleScanner::HUBSimpleScanner(&s1, v193);
std::string::_Rep::_M_dispose(v193[0] - 24LL, istream);
HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)&s1, "xngd", 1);
HUBSimpleScanner::scanInt((HUBSimpleScanner *)&s1, 1, "version number");
HUBSimpleScanner::scanWord((HUBSimpleScanner *)v194, (bool)&s1, (const char *)&dword_0 + 1);
std::string::swap((std::string *)v191, (std::string *)v194);
std::string::_Rep::_M_dispose(v194[0] - 24LL, istream);
HUBSimpleScanner::scanWord((HUBSimpleScanner *)v195, (bool)&s1, (const char *)&dword_0 + 1);
std::string::swap((std::string *)v192, (std::string *)v195);
std::string::_Rep::_M_dispose(v195[0] - 24LL, istream);
HUBSimpleScanner::~HUBSimpleScanner((HUBSimpleScanner *)&s1);
}
std::string::string((std::string *)deviceFilePath_1, deviceFilePath);
if ( !*(_QWORD *)(deviceFilePath_1[0] - 24LL) )
{
sub_21886D0(v197, archFilePath, v191);
std::string::swap((std::string *)deviceFilePath_1, (std::string *)v197);
std::string::_Rep::_M_dispose(v197[0] - 24LL, &s1);
}
HDDMDevice::setloadpaths(Device, archFilePath, (const std::string *)deviceFilePath_1);
xngFileType_1[0] = 0;
p_xngFileVersion[0] = 0;
HDDMDeviceCache::getFileTypeAndVersion(this, (const std::string *)deviceFilePath_1, xngFileType_1, p_xngFileVersion);
if ( xngFileType_1[0] != 1 )
{
v146 = (HEXDataException *)__cxa_allocate_exception(0x18u);
std::string::string((std::string *)&v199, (const std::string *)deviceFilePath_1);
std::string::string(&v198, "File is not an architecture XNG:", istream);
sub_1E8DC92(v146, (int)DEBUG:_Request_device_load:_%s__%s_n, v153);
std::string::_Rep::_M_dispose(v198 - 24, &s1);
std::string::_Rep::_M_dispose(v199 - 24, &s1);
__cxa_throw(v146, (struct type_info *)&`typeinfo for'HEXDataException, sub_1F4CF30);
}
HDDMDevice::readarch_pb(Device, (const std::string *)deviceFilePath_1, p_xngFileVersion[0]);
v15 = xngFileType[0] != 3;
Device->byte1F1 = xngFileType[0] == 3;
if ( !v15 )
{
HDDMDevice::readdevice(Device, archFilePath);
Device_1 = Device;
if ( Device->qword40 )
goto LABEL_24;
LABEL_29:
HDDMDevice::createRPMGrid(Device_1);
goto LABEL_24;
}
v251.word4 = -1;
v251.word6 = -1;
*(_WORD *)&v251.byte0 = -1;
s1 = (char *)&std::string::_Rep::_S_empty_rep_storage + 24;
v250 = (char *)&std::string::_Rep::_S_empty_rep_storage + 24;
*(_WORD *)&v251.gap1[1] = -1;
v251.word8 = -1;
v251.wordA = -1;
*(_QWORD *)&v251.word10 = (char *)&std::string::_Rep::_S_empty_rep_storage + 24;
memset(&v251.dword18, 0, 24);
v251.qword30 = 0xFFFFFFFF00000000LL;
std::string::assign((std::string *)&v250, "chip", 4u);
std::string::assign((std::string *)&s1, (const std::string *)v192);
std::string::assign((std::string *)&v251.word10, archFilePath);
v251.word6 = 0;
*(_WORD *)&v251.byte0 = 0;
*(_WORD *)&v251.gap1[1] = 0;
v251.word4 = 0;
v251.word8 = 0;
v251.wordA = 0;
v251.qword30 = 0;
istream[0] = 0;
std::vector<HDDMChip *>::_M_fill_assign(&Device->qword3B8, 1, istream);
HDDMDevice::readchip_pb(Device, &s1);
std::string::_Rep::_M_dispose(*(_QWORD *)&v251.word10 - 24LL, istream);
std::string::_Rep::_M_dispose(v250 - 24, istream);
std::string::_Rep::_M_dispose((char *)s1 - 24, istream);
Device_1 = Device;
if ( !Device->qword40 )
goto LABEL_29;
LABEL_24:
HDDMDevice::createRoutingDS(Device);
HDDMDevice::setrecursivedeviceid(Device, Device->byte0 & 0xF);
p_qword160 = (const std::string *)&Device->qword160;
std::string::string((std::string *)v200, (const std::string *)&Device->qword160);
std::string::string((std::string *)v232, (const std::string *)v200);
std::string::_Rep::_M_dispose(v200[0] - 24LL, &s1);
std::string::string(v201, "cfg", &v174);
boost::filesystem::path::replace_extension((boost::filesystem::path *)v232, (const boost::filesystem::path *)v201);
std::string::_Rep::_M_dispose(v201[0] - 24LL, &s1);
HUTEnv::getRDIDataDir((HUTEnv *)v202, (const std::string *)v232);
std::string::string((std::string *)v233, (const std::string *)v202);
std::string::_Rep::_M_dispose(v202[0] - 24LL, &s1);
boost::filesystem::path::operator/=(v233, v232);
std::string::string((std::string *)&v234, (const std::string *)v233);
boost::filesystem::path::stem((boost::filesystem::path *)v203);
std::string::string((std::string *)&s1_2, (const std::string *)v203);
std::string::_Rep::_M_dispose(v203[0] - 24LL, &s1);
std::string::string((std::string *)v204, (const std::string *)&v234);
boost::filesystem::detail::status(v221, v204, 0);
if ( v221[0] <= 1 )
{
std::string::_Rep::_M_dispose(v204[0] - 24LL, &s1);
}
else
{
std::string::_Rep::_M_dispose(v204[0] - 24LL, &s1);
v18 = (HDConfig *)operator new(0xB0u);
HDConfig::HDConfig(v18, 0, 1);
*(_QWORD *)Device->gap310 = v18;
std::string::string(v205, "", istream);
HDConfig::readFile(*(HDConfig **)Device->gap310, (const std::string *)&v234, (const std::string *)v205);
std::string::_Rep::_M_dispose(v205[0] - 24LL, &s1);
istream[0] = (char *)&std::string::_Rep::_S_empty_rep_storage + 24;
std::string::string(v206, "DeviceName", v231);
LOBYTE(v18) = sub_1F2E490(*(std::string **)Device->gap310, (HDARPart *)v206, (std::string *)istream);
std::string::_Rep::_M_dispose(v206[0] - 24LL, &s1);
if ( (_BYTE)v18 )
{
v19 = *((_QWORD *)s1_2 - 3);
if ( v19 != *((_QWORD *)istream[0] - 3) || memcmp(s1_2, istream[0], *((_QWORD *)s1_2 - 3)) )
{
std::string::string(&s1, " Device name does not match configuration name! ", v231);
std::string::append((std::string *)&s1, (const std::string *)istream);
v20 = (HEXInternalException *)__cxa_allocate_exception(0x18u);
HEXInternalException::HEXInternalException(v20, (const std::string *)&s1);
__cxa_throw(v20, (struct type_info *)&`typeinfo for'HEXInternalException, sub_1F508A0);
}
}
else
{
v19 = *((_QWORD *)istream[0] - 3);
}
std::string::_M_mutate((std::string *)istream, 0, v19, 0);
std::string::string(v207, "BaseDevice", v231);
v144 = sub_1F2E490(*(std::string **)Device->gap310, (HDARPart *)v207, (std::string *)istream);
std::string::_Rep::_M_dispose(v207[0] - 24LL, &s1);
if ( v144 )
std::string::assign((std::string *)&Device->gap310[8], (const std::string *)istream);
std::string::_Rep::_M_dispose((char *)istream[0] - 24, &s1);
}
HDConfig::HDConfig((HDConfig *)&s1, 0, 1);
std::string::string(v209, "", v231);
std::string::string(v208, "specdevice.cfg", v230);
HDConfig::readFile((HDConfig *)&s1, (const std::string *)v208, (const std::string *)v209);
std::string::_Rep::_M_dispose(v208[0] - 24LL, istream);
std::string::_Rep::_M_dispose(v209[0] - 24LL, istream);
std::string::string(istream, "specialDevice.", v231);
std::string::append((std::string *)istream, (const std::string *)&s1_2);
if ( (unsigned __int8)HDConfig::exists((HDConfig *)&s1, (const std::string *)istream, 0) )
{
if ( !*(_QWORD *)Device->gap310 )
sub_2035550(
(unsigned int)"/proj/rdi-xco/wall/workspaces/wall287/sub/REL/2016.3/src/shared/device/devmodel/HDDMDevice.cxx",
932,
(unsigned int)"device",
0x20000000,
(unsigned int)"@21-424@%s",
(_DWORD)s1_2,
(_DWORD)DEBUG:_Request_device_load:_%s__%s_n,
v153,
v154);
}
else if ( *(_QWORD *)Device->gap310 )
{
s1_3 = (const char *)s1_2;
std::string::string(v222, "device", &v177);
ComMsgMgr::sendMsg::eval(
1,
"/proj/rdi-xco/wall/workspaces/wall287/sub/REL/2016.3/src/shared/device/devmodel/HDDMDevice.cxx",
938,
v222,
&unk_8000000,
"@21-425@%s",
s1_3);
std::string::_Rep::_M_dispose(v222[0] - 24LL, v231);
}
std::string::_Rep::_M_dispose((char *)istream[0] - 24, v231);
HDConfig::~HDConfig((HDConfig *)&s1);
std::string::_Rep::_M_dispose((char *)s1_2 - 24, &s1);
std::string::_Rep::_M_dispose(v234 - 24, &s1);
std::string::_Rep::_M_dispose((char *)v233[0] - 24, &s1);
std::string::_Rep::_M_dispose(v232[0] - 24LL, &s1);
HDDMDerived::HDDMDerived((HDDMDerived *)istream, Device);
isDerived = HDDMDerived::isDerived((HDDMDerived *)istream);
Device->byte321 = isDerived;
if ( isDerived )
{
HDDMDerived::buildTileList((HDDMDerived *)istream);
HDDMDerived::buildSiteList((HDDMDerived *)istream);
if ( Device->byte321 )
HDDMDerived::updateDevice((HDDMDerived *)istream);
}
HDDMDevice::postprocess(Device);
std::string::string(v210, "device.disableTemplateLoading", &s1_2);
ValueAsBoolERKSs = HPAParamMgr::getValueAsBool((HPAParamMgr *)p_s1, (const std::string *)v210);
std::string::_Rep::_M_dispose(v210[0] - 24LL, &s1);
if ( !ValueAsBoolERKSs )
{
HDDMTemplateIO::HDDMTemplateIO((HDDMTemplateIO *)&s1);
std::string::string(v211, "device.loadAllNodeTemplates", &v234);
ValueAsBoolERKSs_1 = HPAParamMgr::getValueAsBool((HPAParamMgr *)p_s1, (const std::string *)v211);
std::string::_Rep::_M_dispose(v211[0] - 24LL, &s1_2);
if ( ValueAsBoolERKSs_1 )
v252 = 1;
std::string::string((std::string *)v213, nodeTemplatePath);
std::string::string((std::string *)v212, templatePath);
HDDMTemplateIO::loadTemplateData(&s1, Device, v212, v213);
std::string::_Rep::_M_dispose(v212[0] - 24LL, &s1_2);
std::string::_Rep::_M_dispose(v213[0] - 24LL, &s1_2);
HDDMTemplateIO::~HDDMTemplateIO((HDDMTemplateIO *)&s1);
}
HDDMNodeAdjuster::HDDMNodeAdjuster((HDDMNodeAdjuster *)&s1, Device);
HDDMNodeAdjuster::performAdjustments((HDDMNodeAdjuster *)&s1, p_qword160);
HDDMNodeAdjuster::~HDDMNodeAdjuster((HDDMNodeAdjuster *)&s1);
HDDMDevice::suppressCostcodes(Device);
if ( !HUTEnv::getEnv((HUTEnv *)"DEVMODEL_CHECKTILEPORTS", (const char *)p_qword160) )
goto LABEL_184;
v235 = 0;
insert_hint_unique_pos_6 = 0;
v239 = 0;
v241 = 0;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__23 = 0;
v245 = 0;
v237 = &v235;
v238 = &v235;
v243 = &v241;
v244 = &v241;
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Begin checking tile ports {\n", 28);
word4 = Device->word4;
word6 = Device->word6;
if ( !(word6 * word4) )
goto LABEL_159;
v173 = 0;
v26 = 0;
do
{
v27 = *(_QWORD *)(Device->qwordF8 + 8 * v26);
v28 = *(_QWORD *)(*(_QWORD *)(HDDMDeviceCache::m_devcache[(*(_WORD *)v27 >> 6) & 0xF] + 168LL)
+ 8LL * (*(_WORD *)(v27 + 4) & 0x3FF));
v29 = *(_QWORD *)(v28 + 560);
v30 = *(_QWORD *)(v28 + 552);
if ( !(unsigned __int16)((v29 - v30) >> 3) )
goto LABEL_158;
v171 = 0;
do
{
v160 = *(std::string **)(v30 + 8 * v171);
v31 = *((_QWORD *)v160 + 3);
v32 = *((_QWORD *)v160 + 4);
if ( !(unsigned __int16)((v32 - v31) >> 3) )
goto LABEL_156;
v170 = 0;
while ( 1 )
{
v33 = *(_QWORD **)(v31 + 8 * v170);
v34 = v33[3];
v35 = (v33[4] - v34) >> 3;
if ( (_DWORD)v35 )
{
v36 = 0;
while ( 1 )
{
s1_4 = 0;
if ( (unsigned __int16)v36 < v35 )
s1_4 = *(const HDDMTilePort **)(v34 + 8LL * (unsigned __int16)v36);
v223[0] = 0;
p_s1_1[0] = 0;
if ( (unsigned __int8)HDDMTile::getMatchingPort((HDDMTile *)v27, s1_4, v223, p_s1_1) )
{
if ( !(unsigned int)std::string::compare((std::string *)((char *)v160 + 8), "Z") )
hut::detail::assertion_failed(
(hut::detail *)"edge1->getName() != \"Z\"",
"void {anonymous}::_checkTilePorts(const HDDMDevice*)",
"/proj/rdi-xco/wall/workspaces/wall287/sub/REL/2016.3/src/shared/device/devmodel/HDDMDevice.cxx",
(const char *)&elf_hash_bucket[82],
v52);
v53 = *(std::string **)p_s1_1[0];
v233[0] = 0;
s1 = 0;
v158 = v53;
HDDMTile::getMatchingPort(v223[0], p_s1_1[0], v233, (const HDDMTilePort **)&s1);
if ( s1 )
v54 = *(_QWORD **)s1;
else
v54 = 0;
if ( (const HDDMTile *)v27 != v233[0] )
{
HDDMTile::getName((HDDMTile *)&v229);
if ( v233[0] )
HDDMTile::getName((HDDMTile *)v228);
else
std::string::string(v228, "NULL", &v179);
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Tile3 = ", 8);
v55 = std::__ostream_insert<char,std::char_traits<char>>(
&std::cout,
v228[0],
*(_QWORD *)(v228[0] - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v55, " should be ", 11);
v56 = std::__ostream_insert<char,std::char_traits<char>>(v55, v229, *(_QWORD *)(v229 - 24));
std::__ostream_insert<char,std::char_traits<char>>(v56, "\n", 1);
std::string::_Rep::_M_dispose(v228[0] - 24LL, v232);
std::string::_Rep::_M_dispose(v229 - 24, v232);
if ( (const HDDMTile *)v27 != v233[0] )
hut::detail::assertion_failed(
(hut::detail *)"tile3 == tile1",
"void {anonymous}::_checkTilePorts(const HDDMDevice*)",
"/proj/rdi-xco/wall/workspaces/wall287/sub/REL/2016.3/src/shared/device/devmodel/HDDMDevice.cxx",
(const char *)&elf_hash_bucket[85],
v57);
}
if ( v33 != v54 )
{
if ( v54 )
std::string::string((std::string *)v227, (const std::string *)(v54 + 2));
else
std::string::string(v227, "NULL", &v178);
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Face3 = ", 8);
v58 = std::__ostream_insert<char,std::char_traits<char>>(
&std::cout,
v227[0],
*(_QWORD *)(v227[0] - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v58, " should be ", 11);
v59 = std::__ostream_insert<char,std::char_traits<char>>(v58, v33[2], *(_QWORD *)(v33[2] - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v59, "\n", 1);
std::string::_Rep::_M_dispose(v227[0] - 24LL, v232);
}
if ( s1_4 != s1 )
{
v60 = *((_DWORD *)s1_4 + 2);
v61 = -1;
if ( s1 )
v61 = *((_DWORD *)s1 + 2);
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Port3 = ", 8);
v62 = std::ostream::_M_insert<unsigned long>(&std::cout, v61);
std::__ostream_insert<char,std::char_traits<char>>(v62, " should be ", 11);
v63 = std::ostream::_M_insert<unsigned long>(v62, v60);
std::__ostream_insert<char,std::char_traits<char>>(v63, "\n", 1);
if ( s1_4 != s1 )
hut::detail::assertion_failed(
(hut::detail *)"port3 == port1",
"void {anonymous}::_checkTilePorts(const HDDMDevice*)",
"/proj/rdi-xco/wall/workspaces/wall287/sub/REL/2016.3/src/shared/device/devmodel/HDDMDevice.cxx",
(const char *)&elf_hash_bucket[87] + 3,
v64);
}
if ( *((_DWORD *)s1_4 + 3) != *((_DWORD *)p_s1_1[0] + 3) )
{
insert_hint_unique_pos_3 = insert_hint_unique_pos_6;
insert_hint_unique_pos_2 = &v235;
if ( !insert_hint_unique_pos_6 )
goto LABEL_86;
do
{
while ( v27 <= *((_QWORD *)insert_hint_unique_pos_3 + 4) )
{
insert_hint_unique_pos_2 = insert_hint_unique_pos_3;
insert_hint_unique_pos_3 = (int *)*((_QWORD *)insert_hint_unique_pos_3 + 2);
if ( !insert_hint_unique_pos_3 )
goto LABEL_84;
}
insert_hint_unique_pos_3 = (int *)*((_QWORD *)insert_hint_unique_pos_3 + 3);
}
while ( insert_hint_unique_pos_3 );
LABEL_84:
if ( insert_hint_unique_pos_2 == &v235 || v27 < *((_QWORD *)insert_hint_unique_pos_2 + 4) )
{
LABEL_86:
insert_hint_unique_pos_4 = insert_hint_unique_pos_2;
insert_hint_unique_pos_5 = operator new(0x30u);
insert_hint_unique_pos_2 = (int *)insert_hint_unique_pos_5;
if ( insert_hint_unique_pos_5 )
{
*(_DWORD *)insert_hint_unique_pos_5 = 0;
*(_QWORD *)(insert_hint_unique_pos_5 + 8) = 0;
*(_QWORD *)(insert_hint_unique_pos_5 + 16) = 0;
*(_QWORD *)(insert_hint_unique_pos_5 + 24) = 0;
*(_QWORD *)(insert_hint_unique_pos_5 + 32) = v27;
*(_DWORD *)(insert_hint_unique_pos_5 + 40) = 0;
}
insert_hint_unique_pos = std::_Rb_tree<HDDMTile const*,std::pair<HDDMTile const* const,int>,std::_Select1st<std::pair<HDDMTile const* const,int>>,std::less<HDDMTile const*>,std::allocator<std::pair<HDDMTile const* const,int>>>::_M_get_insert_hint_unique_pos(
&v234,
insert_hint_unique_pos_4,
insert_hint_unique_pos_5 + 32);
if ( v70 )
{
v71 = 1;
if ( !insert_hint_unique_pos && (int *)v70 != &v235 )
v71 = *((_QWORD *)insert_hint_unique_pos_2 + 4) < *(_QWORD *)(v70 + 32);
std::_Rb_tree_insert_and_rebalance(v71, insert_hint_unique_pos_2, v70, &v235);
++v239;
}
else
{
insert_hint_unique_pos_1 = (int *)insert_hint_unique_pos;
operator delete(insert_hint_unique_pos_2);
insert_hint_unique_pos_2 = insert_hint_unique_pos_1;
}
}
++insert_hint_unique_pos_2[10];
v72 = *(_QWORD *)(*(_QWORD *)(HDDMDeviceCache::m_devcache[(*(_WORD *)v27 >> 6) & 0xF] + 168LL)
+ 8LL * (*(_WORD *)(v27 + 4) & 0x3FF));
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__12 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__23;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2 = &v241;
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__23 )
goto LABEL_98;
do
{
while ( v72 <= *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__12 + 4) )
{
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__12;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__12 = (int *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__12
+ 2);
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__12 )
goto LABEL_96;
}
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__12 = (int *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__12
+ 3);
}
while ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__12 );
LABEL_96:
if ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2 == &v241
|| v72 < *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2 + 4) )
{
LABEL_98:
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4_ = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14 = operator new(0x30u);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2 = (int *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14;
if ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14 )
{
*(_DWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14 = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14 + 8) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14 + 16) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14 + 24) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14 + 32) = v72;
*(_DWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14 + 40) = 0;
}
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__13 = std::_Rb_tree<HDDMTileType const*,std::pair<HDDMTileType const* const,int>,std::_Select1st<std::pair<HDDMTileType const* const,int>>,std::less<HDDMTileType const*>,std::allocator<std::pair<HDDMTileType const* const,int>>>::_M_get_insert_hint_unique_pos(
&s1_2,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4_,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14
+ 32);
if ( v77 )
{
v78 = 1;
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__13 && (int *)v77 != &v241 )
v78 = *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2 + 4) < *(_QWORD *)(v77 + 32);
std::_Rb_tree_insert_and_rebalance(
v78,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2,
v77,
&v241);
++v245;
}
else
{
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__1 = (int *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__13;
operator delete(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__1;
}
}
++insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2[10];
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__15 = insert_hint_unique_pos_6;
if ( insert_hint_unique_pos_6 )
{
v80 = v223[0];
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5 = &v235;
do
{
while ( (HDDMTile *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__15 + 4) >= v223[0] )
{
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__15;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__15 = (int *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__15
+ 2);
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__15 )
goto LABEL_108;
}
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__15 = (int *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__15
+ 3);
}
while ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__15 );
LABEL_108:
if ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5 == &v235
|| (HDDMTile *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5 + 4) > v223[0] )
{
LABEL_110:
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__16 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__17 = operator new(0x30u);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5 = (int *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__17;
if ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__17 )
{
*(_DWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__17 = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__17 + 8) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__17 + 16) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__17 + 24) = 0;
v84 = v223[0];
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5[10] = 0;
*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5 + 4) = v84;
}
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__3 = std::_Rb_tree<HDDMTile const*,std::pair<HDDMTile const* const,int>,std::_Select1st<std::pair<HDDMTile const* const,int>>,std::less<HDDMTile const*>,std::allocator<std::pair<HDDMTile const* const,int>>>::_M_get_insert_hint_unique_pos(
&v234,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__16,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5
+ 8);
if ( v86 )
{
v87 = 1;
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__3 && (int *)v86 != &v235 )
v87 = *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5 + 4) < *(_QWORD *)(v86 + 32);
std::_Rb_tree_insert_and_rebalance(
v87,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5,
v86,
&v235);
++v239;
}
else
{
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__4 = (int *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__3;
operator delete(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__4;
}
v80 = v223[0];
}
++insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5[10];
v88 = *(_QWORD *)(*(_QWORD *)(HDDMDeviceCache::m_devcache[(*(_WORD *)v80 >> 6) & 0xF] + 168LL)
+ 8LL * (*((_WORD *)v80 + 2) & 0x3FF));
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__18 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__23;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8 = &v241;
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__23 )
goto LABEL_123;
do
{
while ( v88 <= *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__18 + 4) )
{
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__18;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__18 = (int *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__18
+ 2);
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__18 )
goto LABEL_121;
}
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__18 = (int *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__18
+ 3);
}
while ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__18 );
LABEL_121:
if ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8 == &v241
|| v88 < *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8 + 4) )
{
LABEL_123:
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__19 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20 = operator new(0x30u);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8 = (int *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20;
if ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20 )
{
*(_DWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20 = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20 + 8) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20 + 16) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20 + 24) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20 + 32) = v88;
*(_DWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20 + 40) = 0;
}
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__6 = std::_Rb_tree<HDDMTileType const*,std::pair<HDDMTileType const* const,int>,std::_Select1st<std::pair<HDDMTileType const* const,int>>,std::less<HDDMTileType const*>,std::allocator<std::pair<HDDMTileType const* const,int>>>::_M_get_insert_hint_unique_pos(
&s1_2,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__19,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20
+ 32);
if ( v93 )
{
v94 = 1;
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__6 && (int *)v93 != &v241 )
v94 = *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8 + 4) < *(_QWORD *)(v93 + 32);
std::_Rb_tree_insert_and_rebalance(
v94,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8,
v93,
&v241);
++v245;
}
else
{
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__7 = (int *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__6;
operator delete(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__7;
}
}
++insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8[10];
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4_a = *((_DWORD *)p_s1_1[0] + 3);
v168 = *((_DWORD *)p_s1_1[0] + 2);
HDDMTile::getName((HDDMTile *)&v226);
v95 = *((_DWORD *)s1_4 + 3);
v96 = *((_DWORD *)s1_4 + 2);
HDDMTile::getName((HDDMTile *)&v225);
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Global mismatch: ", 17);
v97 = std::__ostream_insert<char,std::char_traits<char>>(&std::cout, v225, *(_QWORD *)(v225 - 24));
std::__ostream_insert<char,std::char_traits<char>>(v97, ".", 1);
v98 = std::__ostream_insert<char,std::char_traits<char>>(v97, v33[2], *(_QWORD *)(v33[2] - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v98, "[", 1);
v99 = std::ostream::_M_insert<unsigned long>(v98, v96);
std::__ostream_insert<char,std::char_traits<char>>(v99, "] = ", 4);
v100 = std::ostream::_M_insert<unsigned long>(v99, v95);
std::__ostream_insert<char,std::char_traits<char>>(v100, " ", 1);
v101 = std::__ostream_insert<char,std::char_traits<char>>(v100, v226, *(_QWORD *)(v226 - 24));
std::__ostream_insert<char,std::char_traits<char>>(v101, ".", 1);
v102 = std::__ostream_insert<char,std::char_traits<char>>(
v101,
*((_QWORD *)v158 + 2),
*(_QWORD *)(*((_QWORD *)v158 + 2) - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v102, "[", 1);
v103 = std::ostream::_M_insert<unsigned long>(v102, v168);
std::__ostream_insert<char,std::char_traits<char>>(v103, "] = ", 4);
v104 = std::ostream::_M_insert<unsigned long>(
v103,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4_a);
std::__ostream_insert<char,std::char_traits<char>>(v104, "\n", 1);
std::string::_Rep::_M_dispose(v225 - 24, v232);
std::string::_Rep::_M_dispose(v226 - 24, v232);
goto LABEL_56;
}
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5 = &v235;
goto LABEL_110;
}
}
else if ( v223[0] )
{
if ( (*(_BYTE *)v27 & 0x20) != 0 )
{
v143 = (HDDMInactiveExceptionAccess *)__cxa_allocate_exception(0x18u);
HDDMTile::getRawName((HDDMTile *)v231);
std::string::string(v232, "Tile", v233);
HDDMInactiveExceptionAccess::HDDMInactiveExceptionAccess(
v143,
(const std::string *)v232,
(const std::string *)v231);
std::string::_Rep::_M_dispose(v232[0] - 24LL, &s1);
std::string::_Rep::_M_dispose(v231[0] - 24LL, &s1);
__cxa_throw(v143, (struct type_info *)&`typeinfo for'HDDMInactiveExceptionAccess, sub_1ED58B0);
}
v37 = HDDMDeviceCache::m_devcache[(*(_WORD *)v27 >> 6) & 0xF];
v38 = *(unsigned __int16 *)(v37 + 6);
v39 = *(unsigned __int16 *)(v37 + 4);
v40 = *(_DWORD *)(v27 + 40) % v38;
v41 = v39 - 1 - *(_DWORD *)(v27 + 40) / v38;
v42 = *(_QWORD *)(*(_QWORD *)(v37 + 168) + 8LL * (*(_WORD *)(v27 + 4) & 0x3FF));
v43 = *(unsigned __int16 *)(v42 + 24);
v44 = *(unsigned __int16 *)(v42 + 26);
n3 = ***(_WORD ***)s1_4;
if ( n3 == 1 )
{
if ( v43 + v40 == v38 )
goto LABEL_56;
}
else if ( n3 )
{
if ( n3 == 2 )
{
if ( !(_WORD)v41 )
goto LABEL_56;
}
else if ( n3 != 3 || !(_WORD)v40 )
{
goto LABEL_56;
}
}
else if ( v44 + (unsigned __int16)v41 == v39 )
{
goto LABEL_56;
}
v46 = *((_DWORD *)s1_4 + 2);
HDDMTile::getName((HDDMTile *)v230);
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Missing matching port for ", 26);
v47 = std::__ostream_insert<char,std::char_traits<char>>(&std::cout, v230[0], *(_QWORD *)(v230[0] - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v47, ".", 1);
v48 = std::__ostream_insert<char,std::char_traits<char>>(v47, v33[2], *(_QWORD *)(v33[2] - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v48, "[", 1);
v49 = std::ostream::_M_insert<unsigned long>(v48, v46);
std::__ostream_insert<char,std::char_traits<char>>(v49, "]", 1);
std::__ostream_insert<char,std::char_traits<char>>(v49, "\n", 1);
std::string::_Rep::_M_dispose(v230[0] - 24LL, &s1);
hut::detail::assertion_failed(
(hut::detail *)"false",
"void {anonymous}::_checkTilePorts(const HDDMDevice*)",
"/proj/rdi-xco/wall/workspaces/wall287/sub/REL/2016.3/src/shared/device/devmodel/HDDMDevice.cxx",
(const char *)&elf_hash_bucket[80] + 1,
v50);
}
LABEL_56:
v34 = v33[3];
++v36;
v35 = (v33[4] - v34) >> 3;
if ( v36 >= (unsigned int)v35 )
{
v105 = *((_QWORD *)v160 + 3);
v32 = *((_QWORD *)v160 + 4);
goto LABEL_139;
}
}
}
v105 = v31;
LABEL_139:
v106 = v170++;
if ( (unsigned __int16)((v32 - v105) >> 3) <= v106 + 1 )
break;
v31 = v105;
}
v107 = *(_QWORD *)(*(_QWORD *)(HDDMDeviceCache::m_devcache[(*(_WORD *)v27 >> 6) & 0xF] + 168LL)
+ 8LL * (*(_WORD *)(v27 + 4) & 0x3FF));
v29 = *(_QWORD *)(v107 + 560);
v30 = *(_QWORD *)(v107 + 552);
LABEL_156:
v108 = v171++;
}
while ( v108 + 1 < (unsigned __int16)((v29 - v30) >> 3) );
word4 = Device->word4;
word6 = Device->word6;
LABEL_158:
v26 = ++v173;
}
while ( v173 < word6 * (unsigned int)word4 );
LABEL_159:
if ( v239 )
{
std::ofstream::basic_ofstream(&s1, "badGlobals.txt", 48);
if ( (unsigned __int16)Device->word6 * (unsigned __int16)Device->word4 )
{
v109 = 0;
v110 = 0;
do
{
v233[0] = *(const HDDMTile **)(Device->qwordF8 + 8 * v110);
v111 = *(_DWORD *)std::map<HDDMTile const*,int>::operator[](&v234, v233);
if ( v111 > 0 )
{
HDDMTile::getName((HDDMTile *)p_s1_1);
v112 = std::__ostream_insert<char,std::char_traits<char>>(&s1, p_s1_1[0], *((_QWORD *)p_s1_1[0] - 3));
v113 = std::operator<<<std::char_traits<char>>(v112, " ");
v114 = std::ostream::operator<<(v113, (unsigned int)v111);
std::operator<<<std::char_traits<char>>(v114, "\n");
std::string::_Rep::_M_dispose((char *)p_s1_1[0] - 24, v232);
}
v110 = ++v109;
}
while ( v109 < (unsigned __int16)Device->word6 * (unsigned int)(unsigned __int16)Device->word4 );
}
qwordA8 = Device->qwordA8;
if ( (unsigned __int16)((Device->qwordB0 - qwordA8) >> 3) )
{
v116 = 0;
v117 = 0;
do
{
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__21 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__23;
v119 = *(_QWORD *)(qwordA8 + v116);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__10 = &v241;
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__23 )
goto LABEL_174;
do
{
while ( v119 <= *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__21 + 4) )
{
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__10 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__21;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__21 = (int *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__21
+ 2);
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__21 )
goto LABEL_172;
}
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__21 = (int *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__21
+ 3);
}
while ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__21 );
LABEL_172:
if ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__10 == &v241
|| v119 < *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__10 + 4) )
{
LABEL_174:
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22 = operator new(0x30u);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__11 = (int *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22;
if ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22 )
{
*(_DWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22 = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22 + 8) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22 + 16) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22 + 24) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22 + 32) = v119;
*(_DWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22 + 40) = 0;
}
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__9 = std::_Rb_tree<HDDMTileType const*,std::pair<HDDMTileType const* const,int>,std::_Select1st<std::pair<HDDMTileType const* const,int>>,std::less<HDDMTileType const*>,std::allocator<std::pair<HDDMTileType const* const,int>>>::_M_get_insert_hint_unique_pos(
&s1_2,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__10,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22
+ 32);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__10 = (int *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__9;
if ( v124 )
{
v125 = 1;
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__9 && (int *)v124 != &v241 )
v125 = *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__11 + 4) < *(_QWORD *)(v124 + 32);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__10 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__11;
std::_Rb_tree_insert_and_rebalance(
v125,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__11,
v124,
&v241);
++v245;
}
else
{
operator delete(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__11);
}
}
v126 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__10[10];
if ( v126 > 0 )
{
HDDMTileType::getName((HDDMTileType *)v223);
v127 = std::__ostream_insert<char,std::char_traits<char>>(&s1, v223[0], *((_QWORD *)v223[0] - 3));
v128 = std::operator<<<std::char_traits<char>>(v127, " ");
v129 = std::ostream::operator<<(v128, (unsigned int)v126);
std::operator<<<std::char_traits<char>>(v129, "\n");
std::string::_Rep::_M_dispose((char *)v223[0] - 24, v233);
}
++v117;
v116 += 8;
qwordA8 = Device->qwordA8;
}
while ( v117 < (unsigned __int16)((Device->qwordB0 - qwordA8) >> 3) );
}
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "}\n", 2);
std::ofstream::~ofstream(&s1);
}
std::_Rb_tree<HDDMTileType const*,std::pair<HDDMTileType const* const,int>,std::_Select1st<std::pair<HDDMTileType const* const,int>>,std::less<HDDMTileType const*>,std::allocator<std::pair<HDDMTileType const* const,int>>>::_M_erase(
&s1_2,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__23);
std::_Rb_tree<HDDMTile const*,std::pair<HDDMTile const* const,int>,std::_Select1st<std::pair<HDDMTile const* const,int>>,std::less<HDDMTile const*>,std::allocator<std::pair<HDDMTile const* const,int>>>::_M_erase(
&v234,
insert_hint_unique_pos_6);
LABEL_184:
if ( !*(_QWORD *)&Device->gap329[7] )
{
v150 = (HDDMOracle *)operator new(0x138u);
HDDMOracle::HDDMOracle(v150, Device);
*(_QWORD *)&Device->gap329[7] = v150;
}
std::string::string(v214, "RCLK_INT_L", &s1_2);
TileType = HDDMDevice::getTileType(Device, (const std::string *)v214);
std::string::_Rep::_M_dispose(v214[0] - 24LL, &s1);
if ( TileType )
{
v131 = *(unsigned __int16 *)(TileType + 2);
if ( (_WORD)v131 )
{
v132 = 0;
v133 = 8 * (3LL * (unsigned int)(v131 - 1) + 3);
do
{
v134 = *(_QWORD *)(TileType + 216) + v132;
if ( (*(_BYTE *)(v134 + 1) & 8) != 0 )
*(_BYTE *)(v134 + 2) |= 0x10u;
v132 += 24;
}
while ( v132 != v133 );
}
}
std::string::string(v215, "RCLK_INT_R", &s1_2);
TileTypeERKSs = HDDMDevice::getTileType(Device, (const std::string *)v215);
std::string::_Rep::_M_dispose(v215[0] - 24LL, &s1);
if ( TileTypeERKSs )
{
v136 = *(unsigned __int16 *)(TileTypeERKSs + 2);
if ( (_WORD)v136 )
{
v137 = 0;
v138 = 8 * (3LL * (unsigned int)(v136 - 1) + 3);
do
{
v139 = *(_QWORD *)(TileTypeERKSs + 216) + v137;
if ( (*(_BYTE *)(v139 + 1) & 8) != 0 )
*(_BYTE *)(v139 + 2) |= 0x10u;
v137 += 24;
}
while ( v137 != v138 );
}
}
HDDMResourceLimits::HDDMResourceLimits((HDDMResourceLimits *)&s1, Device, 0);
*(&Device->byte321 + 1) = HDDMResourceLimits::isDeviceLimited((HDDMResourceLimits *)&s1);
HDDMResourceLimits::~HDDMResourceLimits((HDDMResourceLimits *)&s1);
if ( ValueAsBool )
{
HUTMemory::getUsedMemory((HUTMemory *)&s1);
HUTRuntime::getWallSecs((HUTRuntime *)v246);
HUTRuntime::getUserSecs((HUTRuntime *)v246);
std::string::string(&s1, "trackDeviceDataLoading", &v180);
std::string::string(v233, "device", &s1_2);
ComMsgMgr::sendScopedMsg::eval(
4,
"/proj/rdi-xco/wall/workspaces/wall287/sub/REL/2016.3/src/shared/device/devmodel/HDDMDevice.cxx",
1045,
v233,
&s1,
16777218);
std::string::_Rep::_M_dispose((char *)v233[0] - 24, &v234);
std::string::_Rep::_M_dispose((char *)s1 - 24, &s1_2);
}
HDDMProto::freeMemory((HDDMProto *)&qword_992E0F0);
ParamMgrEv = (HPAParamMgr *)HPAParamMgr::getParamMgr((HPAParamMgr *)&qword_992E0F0);
std::string::string(v216, "arch.regenRpmGrid", &s1_2);
ValueAsBoolERKSs_2 = HPAParamMgr::getValueAsBool(ParamMgrEv, (const std::string *)v216);
std::string::_Rep::_M_dispose(v216[0] - 24LL, &s1);
if ( ValueAsBoolERKSs_2 )
{
HDDMSiteRPMHack::HDDMSiteRPMHack((HDDMSiteRPMHack *)&s1, Device);
HDDMSiteRPMHack::regenRPMGrid((HDDMSiteRPMHack *)&s1);
HDDMDevice::createRPMGrid(Device);
HDDMSiteRPMHack::~HDDMSiteRPMHack((HDDMSiteRPMHack *)&s1);
}
if ( !*(_QWORD *)&Device->gap329[15] )
{
v147 = (HDDMDevice **)operator new(0x20u);
v147[1] = 0;
v147[2] = 0;
v147[3] = 0;
*v147 = Device;
v148 = Device->qword98 - Device->qword90;
s1 = 0;
v149 = v148 >> 3;
if ( (_WORD)v149 )
std::vector<HDDMConnectionDB *>::_M_fill_insert(v147 + 1, 0, (unsigned __int16)v149, &s1);
*(_QWORD *)&Device->gap329[15] = v147;
}
HDDMDerived::~HDDMDerived((HDDMDerived *)istream);
std::string::_Rep::_M_dispose(deviceFilePath_1[0] - 24LL, &s1);
std::string::_Rep::_M_dispose(*(_QWORD *)v192 - 24LL, &s1);
std::string::_Rep::_M_dispose(*(_QWORD *)v191 - 24LL, &s1);
Device_2 = Device;
LABEL_13:
HUTRuntime::~HUTRuntime((HUTRuntime *)v246);
if ( &_pthread_key_create )
pthread_mutex_unlock(&mutex_);
HUTMemWatcher::~HUTMemWatcher((HUTMemWatcher *)v248);
return Device_2;
}