// File: /workspace/github_cpp_makefile_star2_O3/shreyas-gopalakrishna[P]Concurrent-Skip-list/unit_test_3.cpp
// Function: main
int main(int argc, char *argv[]){

    cout << "\n---------- Unit Test - 3 ----------" << endl;

    cout << "\nThis Unit test uses 8 Threads. Numbers (1-5000) are used for this unit test." << endl;
    cout << "All threads call a function which performs insert, delete, search and range with random numbers (1-5000)." << endl;
    cout << "This simulates all operations parallelly on the skip list." << endl;

    cout << "\nThe final elements in the skip list will be based on if insert or delete got scheduled and executed first for any given element.\n" << endl;
    
    cout << "Few of the numbers from the 'delete vector' are deleted from the skip list and few may still exist since insert got scheduled after delete for these numbers." << endl;
    cout << "But the tests notice that none of the numbers not present in the 'delete vector' are deleted. And our traversal of the skip list is sorted. This verifies our skip list to be accurate. \n" << endl;

	generate_input(5000);

    skiplist = SkipList(numbers_insert.size(), 0.5);

    concurrent_skiplist_combined();

    // checking if insert is done
    if(skiplist.search(numbers_insert[0]) == to_string(numbers_insert[0]) || skiplist.search(numbers_insert[0]) == ""){
        cout << "Unit Test 1: Insert: PASS" << endl;
    }else{
        cout << "Unit Test 1: Insert: FAIL" << endl;
    }

    // checking if insert is done
    if(skiplist.search(numbers_insert[1]) == to_string(numbers_insert[1]) || skiplist.search(numbers_insert[1]) == "" ){
        cout << "Unit Test 2: Insert: PASS" << endl;
    }else{
        cout << "Unit Test 2: Insert: FAIL" << endl;
    }


    // checking if delete is done
    if(skiplist.search(numbers_delete[0]) == ""){
        cout << "Unit Test 3: Delete: PASS" << endl;
    }else{
        cout << "Unit Test 3: Delete: FAIL" << endl;
    }

    // checking if delete is done
    if(skiplist.search(numbers_delete[1]) == ""){
        cout << "Unit Test 4: Delete: PASS" << endl;
    }else{
        cout << "Unit Test 4: Delete: FAIL" << endl;
    }


    if(skiplist.search(numbers_get[0]) == to_string(numbers_get[0]) || skiplist.search(numbers_get[0]) == ""){
        cout << "Unit Test 5: Search: PASS" << endl;
    }else{
        cout << "Unit Test 5: Insert: FAIL" << endl;
    }

    // checking if Search is done
    if(skiplist.search(numbers_get[1]) == to_string(numbers_get[1]) || skiplist.search(numbers_get[1]) == ""){
        cout << "Unit Test 6: Search: PASS" << endl;
    }else{
        cout << "Unit Test 6: Search: FAIL" << endl;
    }

    // checking by search if deleted element is present
    if(skiplist.search(numbers_delete[0]) == ""){
        cout << "Unit Test 7: Search: PASS" << endl;
    }else{
        cout << "Unit Test 7: Search: FAIL" << endl;
    }

    map<int, string> range_output = skiplist.range(1, 5000);

    // checking range
    if(range_output.count(numbers_delete[0]) == 0){
        cout << "Unit Test 8: Range: PASS" << endl;
    }else{
        cout << "Unit Test 8: Range: FAIL" << endl;
    }

    // checking range
    if(range_output.count(numbers_delete[1]) == 0){
        cout << "Unit Test 9: Range: PASS" << endl;
    }else{
        cout << "Unit Test 9: Range: FAIL" << endl;
    }

	
    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x78, %rsp
movq 0x6342(%rip), %rbx      # 0x8fd0
leaq 0x338b(%rip), %rsi      # 0x6020
movl $0x24, %edx
movq %rbx, %rdi
callq 0x2200
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x21a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
leaq 0x3375(%rip), %rsi      # 0x6045
movl $0x4d, %edx
movq %rbx, %rdi
callq 0x2200
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x21a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
leaq 0x3388(%rip), %rsi      # 0x6093
movl $0x69, %edx
movq %rbx, %rdi
callq 0x2200
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x21a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
leaq 0x33b7(%rip), %rsi      # 0x60fd
movl $0x3a, %edx
movq %rbx, %rdi
callq 0x2200
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x21a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
leaq 0x33b7(%rip), %rsi      # 0x6138
movl $0x82, %edx
movq %rbx, %rdi
callq 0x2200
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x21a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
leaq 0x33ff(%rip), %rsi      # 0x61bb
movl $0x9d, %edx
movq %rbx, %rdi
callq 0x2200
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x21a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
leaq 0x3462(%rip), %rsi      # 0x6259
movl $0xb9, %edx
movq %rbx, %rdi
callq 0x2200
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x21a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
movl $0x1388, %edi           # imm = 0x1388
callq 0x252c
movq 0x6374(%rip), %rsi      # 0x91b0
subq 0x6365(%rip), %rsi      # 0x91a8
shrq $0x2, %rsi
leaq 0x28(%rsp), %r14
movss 0x31b0(%rip), %xmm0     # 0x6004
movq %r14, %rdi
callq 0x4500
movups (%r14), %xmm0
movups %xmm0, 0x6331(%rip)     # 0x9198
leaq 0x632a(%rip), %r15      # 0x9198
movq %r14, %rdi
callq 0x54ba
callq 0x2bbc
movq 0x6326(%rip), %rax      # 0x91a8
movl (%rax), %edx
leaq 0x28(%rsp), %rdi
movq %r15, %rsi
callq 0x4b60
movq 0x6310(%rip), %rax      # 0x91a8
movl (%rax), %r14d
movl %r14d, %ebp
negl %ebp
cmovsl %r14d, %ebp
movl $0x1, %r15d
cmpl $0xa, %ebp
jb 0x2ef8
movl $0x4, %r15d
movl $0xd1b71759, %eax       # imm = 0xD1B71759
movl %ebp, %ecx
cmpl $0x63, %ecx
jbe 0x2eef
cmpl $0x3e7, %ecx            # imm = 0x3E7
jbe 0x2ef5
cmpl $0x2710, %ecx           # imm = 0x2710
jb 0x2ef8
movl %ecx, %edx
imulq %rax, %rdx
shrq $0x2d, %rdx
addl $0x4, %r15d
cmpl $0x1869f, %ecx          # imm = 0x1869F
movl %edx, %ecx
ja 0x2ebc
addl $-0x3, %r15d
jmp 0x2ef8
addl $-0x2, %r15d
jmp 0x2ef8
decl %r15d
shrl $0x1f, %r14d
leal (%r15,%r14), %esi
leaq 0x18(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x8(%rsp), %rdi
movl $0x2d, %edx
callq 0x2210
addq 0x8(%rsp), %r14
movq %r14, %rdi
movl %r15d, %esi
movl %ebp, %edx
callq 0x3939
movq 0x30(%rsp), %rdx
leaq 0x33dd(%rip), %r14      # 0x6313
cmpq 0x10(%rsp), %rdx
jne 0x2f58
movq 0x8(%rsp), %r15
testq %rdx, %rdx
je 0x2fb4
movq 0x28(%rsp), %rdi
movq %r15, %rsi
callq 0x21e0
testl %eax, %eax
je 0x2fb4
movq 0x6249(%rip), %rax      # 0x91a8
movl (%rax), %edx
leaq 0x6230(%rip), %rsi      # 0x9198
leaq 0x58(%rsp), %rdi
callq 0x4b60
leaq 0x3399(%rip), %rsi      # 0x6312
leaq 0x58(%rsp), %r15
movq %r15, %rdi
callq 0x2080
movl %eax, %ebp
movq (%r15), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x2fa2
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x21d0
testl %ebp, %ebp
movq 0x8(%rsp), %r15
leaq 0x337d(%rip), %rax      # 0x632d
cmovneq %rax, %r14
cmpq %r13, %r15
je 0x2fc9
movq 0x18(%rsp), %rsi
incq %rsi
movq %r15, %rdi
callq 0x21d0
leaq 0x38(%rsp), %r12
movq -0x10(%r12), %rdi
cmpq %r12, %rdi
je 0x2fe5
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x21d0
movl $0x19, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2200
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x21a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
movq 0x6185(%rip), %rax      # 0x91a8
movl 0x4(%rax), %edx
leaq 0x616b(%rip), %rsi      # 0x9198
leaq 0x28(%rsp), %rdi
callq 0x4b60
movq 0x616a(%rip), %rax      # 0x91a8
movl 0x4(%rax), %r14d
movl %r14d, %ebp
negl %ebp
cmovsl %r14d, %ebp
movl $0x1, %r15d
cmpl $0xa, %ebp
jb 0x309f
movl $0x4, %r15d
movl $0xd1b71759, %eax       # imm = 0xD1B71759
movl %ebp, %ecx
cmpl $0x63, %ecx
jbe 0x3096
cmpl $0x3e7, %ecx            # imm = 0x3E7
jbe 0x309c
cmpl $0x2710, %ecx           # imm = 0x2710
jb 0x309f
movl %ecx, %edx
imulq %rax, %rdx
shrq $0x2d, %rdx
addl $0x4, %r15d
cmpl $0x1869f, %ecx          # imm = 0x1869F
movl %edx, %ecx
ja 0x3063
addl $-0x3, %r15d
jmp 0x309f
addl $-0x2, %r15d
jmp 0x309f
decl %r15d
shrl $0x1f, %r14d
leal (%r15,%r14), %esi
leaq 0x8(%rsp), %rdi
movq %r13, (%rdi)
movl $0x2d, %edx
callq 0x2210
addq 0x8(%rsp), %r14
movq %r14, %rdi
movl %r15d, %esi
movl %ebp, %edx
callq 0x3939
movq 0x30(%rsp), %rdx
leaq 0x3270(%rip), %r14      # 0x6347
cmpq 0x10(%rsp), %rdx
jne 0x30f9
movq 0x8(%rsp), %r15
testq %rdx, %rdx
je 0x3156
movq 0x28(%rsp), %rdi
movq %r15, %rsi
callq 0x21e0
testl %eax, %eax
je 0x3156
movq 0x60a8(%rip), %rax      # 0x91a8
movl 0x4(%rax), %edx
leaq 0x608e(%rip), %rsi      # 0x9198
leaq 0x58(%rsp), %rdi
callq 0x4b60
leaq 0x31f7(%rip), %rsi      # 0x6312
leaq 0x58(%rsp), %r15
movq %r15, %rdi
callq 0x2080
movl %eax, %ebp
movq (%r15), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x3144
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x21d0
testl %ebp, %ebp
movq 0x8(%rsp), %r15
leaq 0x320f(%rip), %rax      # 0x6361
cmovneq %rax, %r14
cmpq %r13, %r15
je 0x316b
movq 0x18(%rsp), %rsi
incq %rsi
movq %r15, %rdi
callq 0x21d0
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x3182
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x21d0
movl $0x19, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2200
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x21a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
movq 0x6000(%rip), %rax      # 0x91c0
movl (%rax), %edx
leaq 0x5fcf(%rip), %rsi      # 0x9198
leaq 0x28(%rsp), %r14
movq %r14, %rdi
callq 0x4b60
leaq 0x3135(%rip), %rsi      # 0x6312
movq %r14, %rdi
callq 0x2080
movl %eax, %ebp
movq (%r14), %rdi
cmpq %r12, %rdi
je 0x31fc
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x21d0
testl %ebp, %ebp
leaq 0x3176(%rip), %rax      # 0x637b
leaq 0x3189(%rip), %rsi      # 0x6395
cmoveq %rax, %rsi
movl $0x19, %edx
movq %rbx, %rdi
callq 0x2200
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x21a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
movq 0x5f75(%rip), %rax      # 0x91c0
movl 0x4(%rax), %edx
leaq 0x5f43(%rip), %rsi      # 0x9198
leaq 0x28(%rsp), %r14
movq %r14, %rdi
callq 0x4b60
leaq 0x30a9(%rip), %rsi      # 0x6312
movq %r14, %rdi
callq 0x2080
movl %eax, %ebp
movq (%r14), %rdi
cmpq %r12, %rdi
je 0x3288
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x21d0
testl %ebp, %ebp
leaq 0x311e(%rip), %rax      # 0x63af
leaq 0x3131(%rip), %rsi      # 0x63c9
cmoveq %rax, %rsi
movl $0x19, %edx
movq %rbx, %rdi
callq 0x2200
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x21a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
movq 0x5f01(%rip), %rax      # 0x91d8
movl (%rax), %edx
leaq 0x5eb8(%rip), %rsi      # 0x9198
leaq 0x28(%rsp), %rdi
callq 0x4b60
movq 0x5ee7(%rip), %rax      # 0x91d8
movl (%rax), %r14d
movl %r14d, %ebp
negl %ebp
cmovsl %r14d, %ebp
movl $0x1, %r15d
cmpl $0xa, %ebp
jb 0x3351
movl $0x4, %r15d
movl $0xd1b71759, %eax       # imm = 0xD1B71759
movl %ebp, %ecx
cmpl $0x63, %ecx
jbe 0x3348
cmpl $0x3e7, %ecx            # imm = 0x3E7
jbe 0x334e
cmpl $0x2710, %ecx           # imm = 0x2710
jb 0x3351
movl %ecx, %edx
imulq %rax, %rdx
shrq $0x2d, %rdx
addl $0x4, %r15d
cmpl $0x1869f, %ecx          # imm = 0x1869F
movl %edx, %ecx
ja 0x3315
addl $-0x3, %r15d
jmp 0x3351
addl $-0x2, %r15d
jmp 0x3351
decl %r15d
shrl $0x1f, %r14d
leal (%r15,%r14), %esi
leaq 0x8(%rsp), %rdi
movq %r13, (%rdi)
movl $0x2d, %edx
callq 0x2210
addq 0x8(%rsp), %r14
movq %r14, %rdi
movl %r15d, %esi
movl %ebp, %edx
callq 0x3939
movq 0x30(%rsp), %rdx
leaq 0x305a(%rip), %r14      # 0x63e3
cmpq 0x10(%rsp), %rdx
jne 0x33ab
movq 0x8(%rsp), %r15
testq %rdx, %rdx
je 0x3407
movq 0x28(%rsp), %rdi
movq %r15, %rsi
callq 0x21e0
testl %eax, %eax
je 0x3407
movq 0x5e26(%rip), %rax      # 0x91d8
movl (%rax), %edx
leaq 0x5ddd(%rip), %rsi      # 0x9198
leaq 0x58(%rsp), %rdi
callq 0x4b60
leaq 0x2f46(%rip), %rsi      # 0x6312
leaq 0x58(%rsp), %r15
movq %r15, %rdi
callq 0x2080
movl %eax, %ebp
movq (%r15), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x33f5
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x21d0
testl %ebp, %ebp
movq 0x8(%rsp), %r15
leaq 0x2ffa(%rip), %rax      # 0x63fd
cmovneq %rax, %r14
cmpq %r13, %r15
je 0x341c
movq 0x18(%rsp), %rsi
incq %rsi
movq %r15, %rdi
callq 0x21d0
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x3433
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x21d0
movl $0x19, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2200
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x21a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
movq 0x5d67(%rip), %rax      # 0x91d8
movl 0x4(%rax), %edx
leaq 0x5d1d(%rip), %rsi      # 0x9198
leaq 0x28(%rsp), %rdi
callq 0x4b60
movq 0x5d4c(%rip), %rax      # 0x91d8
movl 0x4(%rax), %r14d
movl %r14d, %ebp
negl %ebp
cmovsl %r14d, %ebp
movl $0x1, %r15d
cmpl $0xa, %ebp
jb 0x34ed
movl $0x4, %r15d
movl $0xd1b71759, %eax       # imm = 0xD1B71759
movl %ebp, %ecx
cmpl $0x63, %ecx
jbe 0x34e4
cmpl $0x3e7, %ecx            # imm = 0x3E7
jbe 0x34ea
cmpl $0x2710, %ecx           # imm = 0x2710
jb 0x34ed
movl %ecx, %edx
imulq %rax, %rdx
shrq $0x2d, %rdx
addl $0x4, %r15d
cmpl $0x1869f, %ecx          # imm = 0x1869F
movl %edx, %ecx
ja 0x34b1
addl $-0x3, %r15d
jmp 0x34ed
addl $-0x2, %r15d
jmp 0x34ed
decl %r15d
shrl $0x1f, %r14d
leal (%r15,%r14), %esi
leaq 0x8(%rsp), %rdi
movq %r13, (%rdi)
movl $0x2d, %edx
callq 0x2210
addq 0x8(%rsp), %r14
movq %r14, %rdi
movl %r15d, %esi
movl %ebp, %edx
callq 0x3939
movq 0x30(%rsp), %rdx
leaq 0x2ef2(%rip), %r14      # 0x6417
cmpq 0x10(%rsp), %rdx
jne 0x3547
movq 0x8(%rsp), %r15
testq %rdx, %rdx
je 0x35a4
movq 0x28(%rsp), %rdi
movq %r15, %rsi
callq 0x21e0
testl %eax, %eax
je 0x35a4
movq 0x5c8a(%rip), %rax      # 0x91d8
movl 0x4(%rax), %edx
leaq 0x5c40(%rip), %rsi      # 0x9198
leaq 0x58(%rsp), %rdi
callq 0x4b60
leaq 0x2da9(%rip), %rsi      # 0x6312
leaq 0x58(%rsp), %r15
movq %r15, %rdi
callq 0x2080
movl %eax, %ebp
movq (%r15), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x3592
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x21d0
testl %ebp, %ebp
movq 0x8(%rsp), %r15
leaq 0x2e91(%rip), %rax      # 0x6431
cmovneq %rax, %r14
cmpq %r13, %r15
je 0x35b9
movq 0x18(%rsp), %rsi
incq %rsi
movq %r15, %rdi
callq 0x21d0
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x35d0
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x21d0
movl $0x19, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2200
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x21a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
movq 0x5bb2(%rip), %rax      # 0x91c0
movl (%rax), %edx
leaq 0x5b81(%rip), %rsi      # 0x9198
leaq 0x28(%rsp), %r14
movq %r14, %rdi
callq 0x4b60
leaq 0x2ce7(%rip), %rsi      # 0x6312
movq %r14, %rdi
callq 0x2080
movl %eax, %ebp
movq (%r14), %rdi
cmpq %r12, %rdi
je 0x364a
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x21d0
testl %ebp, %ebp
leaq 0x2df8(%rip), %rax      # 0x644b
leaq 0x2e0b(%rip), %rsi      # 0x6465
cmoveq %rax, %rsi
movl $0x19, %edx
movq %rbx, %rdi
callq 0x2200
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x21a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
leaq 0x5aff(%rip), %rsi      # 0x9198
leaq 0x28(%rsp), %rbx
movq %rbx, %rdi
movl $0x1, %edx
movl $0x1388, %ecx           # imm = 0x1388
callq 0x50f0
movq 0x5b09(%rip), %rsi      # 0x91c0
movq %rbx, %rdi
callq 0x38f2
testq %rax, %rax
leaq 0x2db6(%rip), %rax      # 0x647f
leaq 0x2dc8(%rip), %rsi      # 0x6498
cmoveq %rax, %rsi
movq 0x58f5(%rip), %rbx      # 0x8fd0
movl $0x18, %edx
movq %rbx, %rdi
callq 0x2200
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x21a0
movsbl %al, %esi
movq 0x58ca(%rip), %rdi      # 0x8fd0
callq 0x2030
movq %rax, %rdi
callq 0x2110
movq 0x5aa6(%rip), %rsi      # 0x91c0
addq $0x4, %rsi
leaq 0x28(%rsp), %rdi
callq 0x38f2
testq %rax, %rax
leaq 0x2d7f(%rip), %rax      # 0x64b1
leaq 0x2d91(%rip), %rsi      # 0x64ca
cmoveq %rax, %rsi
movq 0x588c(%rip), %rbx      # 0x8fd0
movl $0x18, %edx
movq %rbx, %rdi
callq 0x2200
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x21a0
movsbl %al, %esi
movq 0x5861(%rip), %rdi      # 0x8fd0
callq 0x2030
movq %rax, %rdi
callq 0x2110
leaq 0x28(%rsp), %rdi
callq 0x39a6
xorl %eax, %eax
addq $0x78, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x379b
jmp 0x379b
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r13, %rdi
je 0x37da
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21d0
jmp 0x37da
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r13, %rdi
je 0x37e9
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21d0
jmp 0x37e9
jmp 0x37d7
jmp 0x37d7
movq %rax, %rbx
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
jne 0x37f7
jmp 0x3813
movq %rax, %rbx
leaq 0x38(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3813
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x21d0
jmp 0x3813
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x39a6
movq %rbx, %rdi
callq 0x2290
nop