// File: zheng-ji[P]lruCache/./lrucache.h
// Function: LRUCache<int, int>::GetCache(int const&, int&, bool)
int GetCache(const T & t, Value & value, bool bUpdate = true) 
        {
            std::lock_guard<std::mutex> lck(mt);
            HashMapIter mapIter = m_LRUCache.find(t);

            if (mapIter == m_LRUCache.end())
                return -1;

            mapIter = m_LRUCache.find(t);

            if (mapIter != m_LRUCache.end()) 
            {
                if (m_iTimeLimit > 0) 
                {
                    time_t tNow = time(NULL);
                    if (tNow - mapIter->second.updatetime > m_iTimeLimit) 
                    {
                        return -2;
                    }
                }

                value = mapIter->second.value;

                if (bUpdate) 
                {
                    m_List.erase(mapIter->second.listiter);
                    m_List.push_front(t);
                    mapIter->second.listiter = m_List.begin();
                }

                return m_iCacheSize;
            }

            return -3;
        }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb0, %rsp
movb %cl, %al
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
andb $0x1, %al
movb %al, -0x21(%rbp)
movq -0x10(%rbp), %rsi
movq %rsi, -0x98(%rbp)
addq $0x60, %rsi
leaq -0x30(%rbp), %rdi
callq 0x3bf0
movq -0x98(%rbp), %rdi
addq $0x18, %rdi
movq -0x18(%rbp), %rsi
callq 0x3c20
movq %rax, -0x90(%rbp)
jmp 0x2983
movq -0x98(%rbp), %rdi
movq -0x90(%rbp), %rax
movq %rax, -0x38(%rbp)
addq $0x18, %rdi
callq 0x3c80
movq %rax, -0x50(%rbp)
leaq -0x38(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x3c50
testb $0x1, %al
jne 0x29b5
jmp 0x29e2
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl $0x1, -0x54(%rbp)
jmp 0x2b3f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x3df0
jmp 0x2b54
movq -0x98(%rbp), %rdi
addq $0x18, %rdi
movq -0x18(%rbp), %rsi
callq 0x3c20
movq %rax, -0xa0(%rbp)
jmp 0x29ff
movq -0x98(%rbp), %rdi
movq -0xa0(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rax
movq %rax, -0x38(%rbp)
addq $0x18, %rdi
callq 0x3c80
movq %rax, -0x68(%rbp)
leaq -0x38(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x3cb0
testb $0x1, %al
jne 0x2a3c
jmp 0x2b31
movq -0x98(%rbp), %rax
cmpl $0x0, 0x5c(%rax)
jle 0x2a9d
xorl %eax, %eax
movl %eax, %edi
callq 0x2110
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0xa8(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x3ce0
movq -0x98(%rbp), %rcx
movq %rax, %rdx
movq -0xa8(%rbp), %rax
subq 0x18(%rdx), %rax
movslq 0x5c(%rcx), %rcx
cmpq %rcx, %rax
jle 0x2a9b
movl $0xfffffffe, -0x4(%rbp) # imm = 0xFFFFFFFE
movl $0x1, -0x54(%rbp)
jmp 0x2b3f
jmp 0x2a9d
leaq -0x38(%rbp), %rdi
callq 0x3ce0
movl 0x8(%rax), %ecx
movq -0x20(%rbp), %rax
movl %ecx, (%rax)
testb $0x1, -0x21(%rbp)
je 0x2b1b
leaq -0x38(%rbp), %rdi
callq 0x3ce0
movq %rax, %rsi
addq $0x10, %rsi
leaq -0x78(%rbp), %rdi
callq 0x3d60
movq -0x98(%rbp), %rdi
movq -0x78(%rbp), %rsi
callq 0x3d10
movq -0x98(%rbp), %rdi
movq %rax, -0x80(%rbp)
movq -0x18(%rbp), %rsi
callq 0x3d80
jmp 0x2af4
movq -0x98(%rbp), %rdi
callq 0x3dc0
movq %rax, -0x88(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x3ce0
movq -0x88(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x98(%rbp), %rax
movl 0x50(%rax), %eax
movl %eax, -0x4(%rbp)
movl $0x1, -0x54(%rbp)
jmp 0x2b3f
movl $0xfffffffd, -0x4(%rbp) # imm = 0xFFFFFFFD
movl $0x1, -0x54(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x3df0
movl -0x4(%rbp), %eax
addq $0xb0, %rsp
popq %rbp
retq
movq -0x40(%rbp), %rdi
callq 0x2200
nopl (%rax)