; assembly | /* r2dec pseudo code output */ | /* balber_berutil.t/assume @ 0x473930 */ | #include | ; (fcn) method.std::__1::ostreambuf_iterator_wchar_t__std::__1::char_traits_wchar_t____BloombergLP::bdldfp::DecimalNumPut_wchar_t__std::__1::ostreambuf_iterator_wchar_t__std::__1::char_traits_wchar_t_____::do_put_impl_BloombergLP::bdldfp.Decimal_Type64__std::__1 () | uint64_t method_std::_1::ostreambuf_iterator_wchar_t_std::_1::char_traits_wchar_t_BloombergLP::bdldfp::DecimalNumPut_wchar_t_std::_1::ostreambuf_iterator_wchar_t_std::_1::char_traits_wchar_t_::do_put_impl_BloombergLP::bdldfp_Decimal_Type64_std::_1 (int64_t arg5, int64_t arg4, int64_t arg3, int64_t arg2) { | int64_t var_8h; | int64_t var_10h; | int32_t var_18h; | int64_t var_1ch; | uint32_t var_20h; | int64_t var_28h; | int32_t var_30h; | int64_t var_34h; | uint32_t var_38h; | int64_t var_40h; | int64_t var_48h; | int64_t var_50h; | int64_t var_58h; | int64_t var_5ch; | uint32_t var_60h; | int64_t var_68h; | int64_t var_70h; | char * var_78h; | int64_t var_80h; | int64_t var_81h; | int64_t var_82h; | int64_t var_84h; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | /* std::__1::ostreambuf_iterator > BloombergLP::bdldfp::DecimalNumPut > >::do_put_impl(std::__1::ostreambuf_iterator >, std::__1::ios_base&, wchar_t, BloombergLP::bdldfp::Decimal_Type64) const */ 0x00473930 push rbp | 0x00473931 push r15 | 0x00473933 push r14 | 0x00473935 push r13 | 0x00473937 push r12 | 0x00473939 push rbx | 0x0047393a sub rsp, 0x88 | 0x00473941 mov r15, r8 | r15 = r8; 0x00473944 mov dword [rsp + 0x1c], ecx | *((rsp + 0x1c)) = ecx; 0x00473948 mov rbx, rsi | rbx = rsi; 0x0047394b mov r12, qword [rdx + 0x10] | r12 = *((rdx + 0x10)); 0x0047394f cmp r12, 0x18e | 0x00473956 mov r13d, r12d | r13d = r12d; 0x00473959 mov ecx, 0x18e | ecx = 0x18e; | if (r12 < 0x18e) { 0x0047395e cmovl ecx, r12d | ecx = r12d; | } 0x00473962 mov eax, dword [rdx + 0x18] | eax = *((rdx + 0x18)); 0x00473965 mov dword [rsp + 0x18], eax | *((rsp + 0x18)) = eax; 0x00473969 mov dword [rsp + 0x34], ecx | *((rsp + 0x34)) = ecx; 0x0047396d mov dword [rsp + 0x58], ecx | *((rsp + 0x58)) = ecx; 0x00473971 mov qword [rsp + 0x5c], 2 | *((rsp + 0x5c)) = 2; 0x0047397a mov qword [rsp + 0x68], 0x50a13c | *((rsp + 0x68)) = 0x50a13c; 0x00473983 mov qword [rsp + 0x70], 0x509f09 | *((rsp + 0x70)) = 0x509f09; 0x0047398c mov qword [rsp + 0x78], 0x509f08 | *((rsp + 0x78)) = "snan"; 0x00473995 mov word [rsp + 0x80], 0x652e | *((rsp + 0x80)) = 0x652e; 0x0047399f mov dword [rsp + 0x84], 2 | *((rsp + 0x84)) = 2; 0x004739aa mov qword [rsp + 0x28], rdx | *((rsp + 0x28)) = rdx; 0x004739af mov eax, dword [rdx + 8] | eax = *((rdx + 8)); 0x004739b2 test eax, 0x104 | | if ((eax & 0x104) != 0) { 0x004739b7 je 0x4739c7 | 0x004739b9 xor ecx, ecx | ecx = 0; 0x004739bb test eax, 0x100 | 0x004739c0 sete cl | cl = ((eax & 0x100) == 0) ? 1 : 0; 0x004739c3 mov dword [rsp + 0x5c], ecx | *((rsp + 0x5c)) = ecx; | } 0x004739c7 test eax, 0x800 | | if ((eax & 0x800) != 0) { 0x004739cc je 0x4739d6 | 0x004739ce mov dword [rsp + 0x60], 1 | *((rsp + 0x60)) = 1; | } 0x004739d6 mov ecx, eax | ecx = eax; 0x004739d8 shr ecx, 0xa | ecx >>= 0xa; 0x004739db and cl, 1 | cl &= 1; 0x004739de mov byte [rsp + 0x82], cl | *((rsp + 0x82)) = cl; 0x004739e5 test eax, 0x4000 | | if ((eax & 0x4000) != 0) { 0x004739ea je 0x473a0f | 0x004739ec mov qword [rsp + 0x68], 0x509f0d | *((rsp + 0x68)) = 0x509f0d; 0x004739f5 mov qword [rsp + 0x70], 0x509f12 | *((rsp + 0x70)) = 0x509f12; 0x004739fe mov qword [rsp + 0x78], 0x509f11 | *((rsp + 0x78)) = "SNAN"; 0x00473a07 mov byte [rsp + 0x81], 0x45 | *((rsp + 0x81)) = 0x45; | } 0x00473a0f mov r14, qword [rip + 0x4e59c2] | r14 = BloombergLP::bslma::Default::s_defaultAllocator; 0x00473a16 test r14, r14 | | if (r14 == 0) { 0x00473a19 jne 0x473a23 | 0x00473a1b call 0x4b9920 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00473a20 mov r14, rax | r14 = rax; | } 0x00473a23 mov rax, qword [r14] | rax = *(r14); 0x00473a26 mov esi, 0x311 | esi = 0x311; 0x00473a2b mov rdi, r14 | rdi = r14; 0x00473a2e call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00473a31 lea rcx, [rsp + 0x58] | 0x00473a36 mov qword [rsp + 0x50], rax | *((rsp + 0x50)) = rax; 0x00473a3b mov rdi, rax | 0x00473a3e mov esi, 0x311 | 0x00473a43 mov rdx, r15 | 0x00473a46 mov qword [rsp + 0x48], r14 | *((rsp + 0x48)) = r14; 0x00473a4b call 0x4777b0 | eax = BloombergLP::bdldfp::DecimalImpUtil::format(char*,int,BloombergLP::bdldfp::DecimalImpUtil_IntelDfp::ValueType64,BloombergLP::bdldfp::DecimalFormatConfigconst&) (rax, 0x311, r15, rsp + 0x58); 0x00473a50 mov ebp, eax | 0x00473a52 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00473a57 mov rsi, qword [rsp + 0x28] | rsi = *((rsp + 0x28)); 0x00473a5c call 0x404a20 | std::_1::ios_base::getloc()const (); 0x00473a61 mov qword [rsp + 0x38], r15 | *((rsp + 0x38)) = r15; 0x00473a66 mov rdi, qword [rip + 0x4e596b] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x00473a6d test rdi, rdi | | if (rdi == 0) { 0x00473a70 jne 0x473a7a | 0x00473a72 call 0x4b9920 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00473a77 mov rdi, rax | rdi = rax; | } 0x00473a7a mov dword [rsp + 0x20], ebp | *((rsp + 0x20)) = ebp; 0x00473a7e mov eax, ebp | eax = ebp; 0x00473a80 mov qword [rsp + 0x40], rax | *((rsp + 0x40)) = rax; 0x00473a85 lea r15, [rax*4] | r15 = rax*4; 0x00473a8d mov rax, qword [rdi] | rax = *(rdi); 0x00473a90 mov rsi, r15 | rsi = r15; 0x00473a93 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00473a96 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x00473a9b lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00473aa0 mov esi, 0x9591e0 | esi = std::__1::ctype::id; 0x00473aa5 call 0x404b10 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00473aaa mov rsi, qword [rsp + 0x50] | rsi = *((rsp + 0x50)); 0x00473aaf mov rdx, rsi | rdx = *((rsp + 0x50)); 0x00473ab2 add rdx, qword [rsp + 0x40] | rdx += *((rsp + 0x40)); 0x00473ab7 mov rbp, qword [rax] | rbp = *(rax); 0x00473aba mov rdi, rax | rdi = rax; 0x00473abd mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x00473ac2 call qword [rbp + 0x60] | uint64_t (*rbp + 0x60)() (); 0x00473ac5 mov ebp, r13d | 0x00473ac8 sub ebp, dword [rsp + 0x34] | ebp -= *((rsp + 0x34)); 0x00473acc lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00473ad1 call 0x404b90 | std::_1::locale::~locale() (); 0x00473ad6 mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x00473adb mov rax, qword [rsp + 0x40] | rax = *((rsp + 0x40)); 0x00473ae0 lea r13, [rcx + rax*4] | r13 = rcx + rax*4; 0x00473ae4 mov eax, dword [rsp + 0x18] | eax = *((rsp + 0x18)); 0x00473ae8 sub eax, ebp | eax -= ebp; 0x00473aea xor r14d, r14d | r14d = 0; 0x00473aed sub eax, dword [rsp + 0x20] | eax -= *((rsp + 0x20)); 0x00473af1 mov dword [rsp + 0x18], eax | *((rsp + 0x18)) = eax; 0x00473af5 cmovns r14d, eax | __asm ("cmovns r14d, eax"); 0x00473af9 mov eax, r14d | eax = r14d; 0x00473afc or eax, ebp | eax |= ebp; | if (eax == 0) { 0x00473afe je 0x473be1 | goto label_12; | } 0x00473b04 mov qword [rsp + 0x20], r13 | *((rsp + 0x20)) = r13; 0x00473b09 test ebp, ebp | 0x00473b0b mov dword [rsp + 0x30], ebp | *((rsp + 0x30)) = ebp; | if (ebp == 0) { 0x00473b0f je 0x473b85 | goto label_13; | } 0x00473b11 mov rax, qword [rsp + 0x28] | rax = *((rsp + 0x28)); 0x00473b16 test byte [rax + 9], 1 | 0x00473b1a mov r13, qword [rsp + 0x20] | r13 = *((rsp + 0x20)); | if ((*((rax + 9)) & 1) == 0) { 0x00473b1f je 0x473b85 | goto label_13; | } 0x00473b21 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00473b26 mov rsi, qword [rsp + 0x28] | rsi = *((rsp + 0x28)); 0x00473b2b call 0x404a20 | std::_1::ios_base::getloc()const (); 0x00473b30 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00473b35 mov esi, 0x9591e0 | esi = std::__1::ctype::id; 0x00473b3a mov r13, qword [rsp + 0x10] | r13 = *((rsp + 0x10)); 0x00473b3f call 0x404b10 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00473b44 movsx esi, byte [rsp + 0x81] | esi = *((rsp + 0x81)); 0x00473b4c mov rcx, qword [rax] | rcx = *(rax); 0x00473b4f mov rdi, rax | rdi = rax; 0x00473b52 call qword [rcx + 0x58] | eax = uint64_t (*rcx + 0x58)() (); 0x00473b55 mov ebp, eax | 0x00473b57 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00473b5c call 0x404b90 | std::_1::locale::~locale() (); 0x00473b61 cmp qword [rsp + 0x20], r13 | | if (*((rsp + 0x20)) == r13) { 0x00473b66 je 0x473b85 | goto label_13; | } 0x00473b68 nop dword [rax + rax] | | do { 0x00473b70 cmp dword [r13], ebp | | if (*(r13) == ebp) { 0x00473b74 je 0x473b85 | goto label_13; | } 0x00473b76 add r13, 4 | r13 += 4; 0x00473b7a add r15, 0xfffffffffffffffc | r15 += 0xfffffffffffffffc; 0x00473b7e jne 0x473b70 | | } while (r15 != 0); 0x00473b80 mov r13, qword [rsp + 0x20] | r13 = *((rsp + 0x20)); | label_13: 0x00473b85 cmp qword [rsp + 0x38], 0 | 0x00473b8b setns al | __asm ("setns al"); 0x00473b8e cmp dword [rsp + 0x60], 1 | 0x00473b93 setne cl | cl = (*((rsp + 0x60)) != 1) ? 1 : 0; 0x00473b96 mov r15d, 0xb0 | r15d = 0xb0; 0x00473b9c mov rdx, qword [rsp + 0x28] | rdx = *((rsp + 0x28)); 0x00473ba1 and r15d, dword [rdx + 8] | r15d &= *((rdx + 8)); 0x00473ba5 test al, cl | | if ((al & cl) != 0) { 0x00473ba7 jne 0x473c42 | goto label_14; | } 0x00473bad cmp r15d, 0x10 | | if (r15d != 0x10) { 0x00473bb1 jne 0x473c42 | goto label_14; | } 0x00473bb7 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x00473bbc lea rbp, [rax + 4] | rbp = rax + 4; 0x00473bc0 test rbx, rbx | | if (rbx == 0) { 0x00473bc3 je 0x473c49 | goto label_15; | } 0x00473bc9 mov eax, dword [rax] | eax = *(rax); 0x00473bcb mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00473bcf cmp rcx, qword [rbx + 0x38] | | if (rcx == *((rbx + 0x38))) { 0x00473bd3 je 0x473c4d | goto label_16; | } 0x00473bd5 lea rdx, [rcx + 4] | rdx = rcx + 4; 0x00473bd9 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00473bdd mov dword [rcx], eax | *(rcx) = eax; 0x00473bdf jmp 0x473c58 | goto label_17; | label_12: 0x00473be1 cmp r13, rcx | 0x00473be4 mov r15, rcx | r15 = rcx; | if (r13 == rcx) { 0x00473be7 je 0x473e89 | goto label_18; | } 0x00473bed mov r14, qword [rsp + 0x40] | r14 = *((rsp + 0x40)); 0x00473bf2 shl r14, 2 | r14 <<= 2; 0x00473bf6 xor ebp, ebp | ebp = 0; 0x00473bf8 jmp 0x473c0f | | while (rbx == 0) { | label_0: 0x00473c00 xor ebx, ebx | ebx = 0; | label_1: 0x00473c02 add rbp, 4 | rbp += 4; 0x00473c06 cmp r14, rbp | | if (r14 == rbp) { 0x00473c09 je 0x473e89 | goto label_18; | } 0x00473c0f test rbx, rbx | 0x00473c12 je 0x473c00 | | } 0x00473c14 mov eax, dword [r15 + rbp] | eax = *((r15 + rbp)); 0x00473c18 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00473c1c cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x00473c20 je 0x473c30 | 0x00473c22 lea rdx, [rcx + 4] | rdx = rcx + 4; 0x00473c26 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00473c2a mov dword [rcx], eax | *(rcx) = eax; 0x00473c2c jmp 0x473c3b | | } else { 0x00473c30 mov rcx, qword [rbx] | rcx = *(rbx); 0x00473c33 mov rdi, rbx | rdi = rbx; 0x00473c36 mov esi, eax | esi = eax; 0x00473c38 call qword [rcx + 0x68] | eax = uint64_t (*rcx + 0x68)() (); | } 0x00473c3b cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00473c3e je 0x473c00 | goto label_0; | } 0x00473c40 jmp 0x473c02 | goto label_1; | label_14: 0x00473c42 mov rbp, qword [rsp + 0x10] | rbp = *((rsp + 0x10)); 0x00473c47 jmp 0x473c61 | goto label_19; | label_15: 0x00473c49 xor ebx, ebx | ebx = 0; 0x00473c4b jmp 0x473c61 | goto label_19; | label_16: 0x00473c4d mov rcx, qword [rbx] | rcx = *(rbx); 0x00473c50 mov rdi, rbx | rdi = rbx; 0x00473c53 mov esi, eax | esi = eax; 0x00473c55 call qword [rcx + 0x68] | eax = uint64_t (*rcx + 0x68)() (); | label_17: 0x00473c58 xor ecx, ecx | ecx = 0; 0x00473c5a cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00473c5d cmove rbx, rcx | rbx = rcx; | } | label_19: 0x00473c61 cmp dword [rsp + 0x18], 0 | 0x00473c66 mov dword [rsp + 0x38], r15d | *((rsp + 0x38)) = r15d; | if (*((rsp + 0x18)) <= 0) { 0x00473c6b jle 0x473cc4 | goto label_20; | } 0x00473c6d cmp r15d, 0x20 | | if (r15d == 0x20) { 0x00473c71 je 0x473cc4 | goto label_20; | } 0x00473c73 lea r15d, [r14 + 1] | r15d = r14 + 1; 0x00473c77 jmp 0x473c8b | | while (rbx == 0) { | label_2: 0x00473c80 xor ebx, ebx | ebx = 0; | label_3: 0x00473c82 dec r15d | r15d--; 0x00473c85 cmp r15d, 1 | | if (r15d <= 1) { 0x00473c89 jle 0x473cc4 | goto label_20; | } 0x00473c8b test rbx, rbx | 0x00473c8e je 0x473c80 | | } 0x00473c90 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x00473c94 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x00473c98 je 0x473cb0 | 0x00473c9a lea rcx, [rax + 4] | rcx = rax + 4; 0x00473c9e mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00473ca2 mov ecx, dword [rsp + 0x1c] | ecx = *((rsp + 0x1c)); 0x00473ca6 mov dword [rax], ecx | *(rax) = ecx; 0x00473ca8 mov eax, ecx | eax = ecx; 0x00473caa jmp 0x473cbd | | } else { 0x00473cb0 mov rax, qword [rbx] | rax = *(rbx); 0x00473cb3 mov rdi, rbx | rdi = rbx; 0x00473cb6 mov esi, dword [rsp + 0x1c] | esi = *((rsp + 0x1c)); 0x00473cba call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); | } 0x00473cbd cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00473cc0 je 0x473c80 | goto label_2; | } 0x00473cc2 jmp 0x473c82 | goto label_3; | label_20: 0x00473cc4 cmp rbp, r13 | | if (rbp == r13) { 0x00473cc7 je 0x473d12 | goto label_21; | } 0x00473cc9 mov r15d, dword [rsp + 0x38] | r15d = *((rsp + 0x38)); 0x00473cce jmp 0x473cdb | | while (rbx == 0) { | label_4: 0x00473cd0 xor ebx, ebx | ebx = 0; | label_5: 0x00473cd2 add rbp, 4 | rbp += 4; 0x00473cd6 cmp r13, rbp | | if (r13 == rbp) { 0x00473cd9 je 0x473d17 | goto label_22; | } 0x00473cdb test rbx, rbx | 0x00473cde je 0x473cd0 | | } 0x00473ce0 mov eax, dword [rbp] | eax = *(rbp); 0x00473ce3 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00473ce7 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x00473ceb je 0x473d00 | 0x00473ced lea rdx, [rcx + 4] | rdx = rcx + 4; 0x00473cf1 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00473cf5 mov dword [rcx], eax | *(rcx) = eax; 0x00473cf7 jmp 0x473d0b | | } else { 0x00473d00 mov rcx, qword [rbx] | rcx = *(rbx); 0x00473d03 mov rdi, rbx | rdi = rbx; 0x00473d06 mov esi, eax | esi = eax; 0x00473d08 call qword [rcx + 0x68] | eax = uint64_t (*rcx + 0x68)() (); | } 0x00473d0b cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00473d0e je 0x473cd0 | goto label_4; | } 0x00473d10 jmp 0x473cd2 | goto label_5; | label_21: 0x00473d12 mov r15d, dword [rsp + 0x38] | r15d = *((rsp + 0x38)); | label_22: 0x00473d17 cmp dword [rsp + 0x30], 0 | | if (*((rsp + 0x30)) == 0) { 0x00473d1c je 0x473e22 | goto label_23; | } 0x00473d22 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00473d27 mov rsi, qword [rsp + 0x28] | rsi = *((rsp + 0x28)); 0x00473d2c call 0x404a20 | std::_1::ios_base::getloc()const (); 0x00473d31 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00473d36 mov esi, 0x9591e0 | esi = std::__1::ctype::id; 0x00473d3b call 0x404b10 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00473d40 mov rcx, qword [rax] | rcx = *(rax); 0x00473d43 mov rdi, rax | rdi = rax; 0x00473d46 mov esi, 0x30 | esi = 0x30; 0x00473d4b call qword [rcx + 0x58] | eax = uint64_t (*rcx + 0x58)() (); 0x00473d4e mov ebp, eax | 0x00473d50 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00473d55 call 0x404b90 | std::_1::locale::~locale() (); 0x00473d5a cmp dword [rsp + 0x30], 0 | | if (*((rsp + 0x30)) <= 0) { 0x00473d5f jle 0x473db2 | goto label_24; | } 0x00473d61 sub r12d, dword [rsp + 0x34] | r12d -= *((rsp + 0x34)); 0x00473d66 inc r12d | r12d++; 0x00473d69 jmp 0x473d7b | | while (rbx == 0) { | label_6: 0x00473d70 xor ebx, ebx | ebx = 0; | label_7: 0x00473d72 dec r12d | r12d--; 0x00473d75 cmp r12d, 1 | | if (r12d <= 1) { 0x00473d79 jle 0x473db2 | goto label_24; | } 0x00473d7b test rbx, rbx | 0x00473d7e je 0x473d70 | | } 0x00473d80 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x00473d84 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x00473d88 je 0x473da0 | 0x00473d8a lea rcx, [rax + 4] | rcx = rax + 4; 0x00473d8e mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00473d92 mov dword [rax], ebp | *(rax) = ebp; 0x00473d94 mov eax, ebp | eax = ebp; 0x00473d96 jmp 0x473dab | | } else { 0x00473da0 mov rax, qword [rbx] | rax = *(rbx); 0x00473da3 mov rdi, rbx | rdi = rbx; 0x00473da6 mov esi, ebp | esi = ebp; 0x00473da8 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); | } 0x00473dab cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00473dae je 0x473d70 | goto label_6; | } 0x00473db0 jmp 0x473d72 | goto label_7; | label_24: 0x00473db2 cmp r13, qword [rsp + 0x20] | | if (r13 == *((rsp + 0x20))) { 0x00473db7 je 0x473e22 | goto label_23; | } 0x00473db9 mov eax, 0x100 | eax = 0x100; 0x00473dbe mov rcx, qword [rsp + 0x28] | rcx = *((rsp + 0x28)); 0x00473dc3 and eax, dword [rcx + 8] | eax &= *((rcx + 8)); | if (eax == 0) { 0x00473dc6 je 0x473e22 | goto label_23; | } 0x00473dc8 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x00473dcd mov rcx, qword [rsp + 0x40] | rcx = *((rsp + 0x40)); 0x00473dd2 lea rbp, [rax + rcx*4] | rbp = rax + rcx*4; 0x00473dd6 jmp 0x473deb | | while (rbx == 0) { | label_8: 0x00473de0 xor ebx, ebx | ebx = 0; | label_9: 0x00473de2 add r13, 4 | r13 += 4; 0x00473de6 cmp rbp, r13 | | if (rbp == r13) { 0x00473de9 je 0x473e22 | goto label_23; | } 0x00473deb test rbx, rbx | 0x00473dee je 0x473de0 | | } 0x00473df0 mov eax, dword [r13] | eax = *(r13); 0x00473df4 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00473df8 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x00473dfc je 0x473e10 | 0x00473dfe lea rdx, [rcx + 4] | rdx = rcx + 4; 0x00473e02 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00473e06 mov dword [rcx], eax | *(rcx) = eax; 0x00473e08 jmp 0x473e1b | | } else { 0x00473e10 mov rcx, qword [rbx] | rcx = *(rbx); 0x00473e13 mov rdi, rbx | rdi = rbx; 0x00473e16 mov esi, eax | esi = eax; 0x00473e18 call qword [rcx + 0x68] | eax = uint64_t (*rcx + 0x68)() (); | } 0x00473e1b cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00473e1e je 0x473de0 | goto label_8; | } 0x00473e20 jmp 0x473de2 | goto label_9; | label_23: 0x00473e22 cmp dword [rsp + 0x18], 0 | | if (*((rsp + 0x18)) <= 0) { 0x00473e27 jle 0x473e84 | goto label_25; | } 0x00473e29 cmp r15d, 0x20 | 0x00473e2d mov r15, qword [rsp + 0x10] | r15 = *((rsp + 0x10)); | if (r15d != 0x20) { 0x00473e32 jne 0x473e89 | goto label_18; | } 0x00473e34 inc r14d | r14d++; 0x00473e37 jmp 0x473e4b | | while (rbx == 0) { | label_10: 0x00473e40 xor ebx, ebx | ebx = 0; | label_11: 0x00473e42 dec r14d | r14d--; 0x00473e45 cmp r14d, 1 | | if (r14d <= 1) { 0x00473e49 jle 0x473e89 | goto label_18; | } 0x00473e4b test rbx, rbx | 0x00473e4e je 0x473e40 | | } 0x00473e50 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x00473e54 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x00473e58 je 0x473e70 | 0x00473e5a lea rcx, [rax + 4] | rcx = rax + 4; 0x00473e5e mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00473e62 mov ecx, dword [rsp + 0x1c] | ecx = *((rsp + 0x1c)); 0x00473e66 mov dword [rax], ecx | *(rax) = ecx; 0x00473e68 mov eax, ecx | eax = ecx; 0x00473e6a jmp 0x473e7d | | } else { 0x00473e70 mov rax, qword [rbx] | rax = *(rbx); 0x00473e73 mov rdi, rbx | rdi = rbx; 0x00473e76 mov esi, dword [rsp + 0x1c] | esi = *((rsp + 0x1c)); 0x00473e7a call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); | } 0x00473e7d cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00473e80 je 0x473e40 | goto label_10; | } 0x00473e82 jmp 0x473e42 | goto label_11; | label_25: 0x00473e84 mov r15, qword [rsp + 0x10] | r15 = *((rsp + 0x10)); | label_18: 0x00473e89 mov rdi, qword [rip + 0x4e5548] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x00473e90 test rdi, rdi | | if (rdi != 0) { 0x00473e93 je 0x473e9c | 0x00473e95 mov rbp, qword [rsp + 0x48] | rbp = *((rsp + 0x48)); 0x00473e9a jmp 0x473ea9 | | } else { 0x00473e9c call 0x4b9920 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00473ea1 mov rbp, qword [rsp + 0x48] | rbp = *((rsp + 0x48)); 0x00473ea6 mov rdi, rax | rdi = rax; | } 0x00473ea9 mov rax, qword [rdi] | rax = *(rdi); 0x00473eac mov rsi, r15 | rsi = r15; 0x00473eaf call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00473eb2 mov rax, qword [rbp] | rax = *(rbp); 0x00473eb6 mov rdi, rbp | rdi = rbp; 0x00473eb9 mov rsi, qword [rsp + 0x50] | rsi = *((rsp + 0x50)); 0x00473ebe call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00473ec1 mov rax, rbx | rax = rbx; 0x00473ec4 add rsp, 0x88 | 0x00473ecb pop rbx | 0x00473ecc pop r12 | 0x00473ece pop r13 | 0x00473ed0 pop r14 | 0x00473ed2 pop r15 | 0x00473ed4 pop rbp | 0x00473ed5 ret | return rax; | }