// File: Shenggan[P]SnowFlake/test/test_SnowFlake.cc
// Function: main
int main() {
    LLOG_FILE(); 
    SnowFlake sf(2, 3);
    pthread_t tid;
    pthread_create(&tid, NULL, test, &sf);
    for (int i = 0; i < (1<<12); i++) {
        LLOG(INFO) << sf.nextId();
    }
    pthread_join(tid, NULL);
    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x190, %rsp            # imm = 0x190
movl $0x0, -0x4(%rbp)
callq 0x2b40
movq %rax, -0x160(%rbp)
leaq -0x29(%rbp), %rdi
movq %rdi, -0x158(%rbp)
callq 0x23b0
movq -0x158(%rbp), %rdx
leaq 0x3864(%rip), %rsi      # 0x6020
leaq -0x28(%rbp), %rdi
callq 0x2c00
jmp 0x27c7
movq -0x160(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x34b0
jmp 0x27d9
leaq -0x28(%rbp), %rdi
callq 0x20e0
leaq -0x29(%rbp), %rdi
callq 0x2250
leaq -0x88(%rbp), %rdi
movl $0x2, %esi
movl $0x3, %edx
callq 0x3510
leaq -0x90(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
leaq -0x2a3(%rip), %rdx      # 0x2570
leaq -0x88(%rbp), %rcx
callq 0x23d0
movl $0x0, -0x94(%rbp)
cmpl $0x1000, -0x94(%rbp)    # imm = 0x1000
jge 0x2a32
callq 0x2b40
movq %rax, %rdi
callq 0x2bf0
movl %eax, %ecx
xorl %eax, %eax
cmpl %ecx, %eax
jl 0x2a1c
leaq -0x119(%rbp), %rdi
movq %rdi, -0x168(%rbp)
callq 0x23b0
movq -0x168(%rbp), %rdx
leaq 0x3791(%rip), %rsi      # 0x6004
leaq -0x118(%rbp), %rdi
callq 0x2c00
jmp 0x2881
leaq -0x141(%rbp), %rdi
movq %rdi, -0x170(%rbp)
callq 0x23b0
movq -0x170(%rbp), %rdx
leaq 0x3789(%rip), %rsi      # 0x602b
leaq -0x140(%rbp), %rdi
callq 0x2c00
jmp 0x28b0
leaq -0xf8(%rbp), %rdi
xorl %esi, %esi
leaq -0x118(%rbp), %rdx
leaq -0x140(%rbp), %rcx
movl $0x13, %r8d
callq 0x2cb0
jmp 0x28d4
leaq -0x88(%rbp), %rdi
callq 0x2ff0
movq %rax, -0x178(%rbp)
jmp 0x28e9
movq -0x178(%rbp), %rax
movq %rax, -0x150(%rbp)
leaq -0xf8(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x2f10
movq %rax, -0x180(%rbp)
jmp 0x2913
callq 0x2b40
movq %rax, -0x188(%rbp)
jmp 0x2921
movq -0x180(%rbp), %rsi
movq -0x188(%rbp), %rdi
callq 0x32e0
jmp 0x2936
leaq -0xf8(%rbp), %rdi
callq 0x3470
leaq -0x140(%rbp), %rdi
callq 0x20e0
leaq -0x141(%rbp), %rdi
callq 0x2250
leaq -0x118(%rbp), %rdi
callq 0x20e0
leaq -0x119(%rbp), %rdi
callq 0x2250
jmp 0x2a1c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x299a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x20e0
leaq -0x29(%rbp), %rdi
callq 0x2250
jmp 0x2a4d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2a0e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x29f6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x29ea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x3470
leaq -0x140(%rbp), %rdi
callq 0x20e0
leaq -0x141(%rbp), %rdi
callq 0x2250
leaq -0x118(%rbp), %rdi
callq 0x20e0
leaq -0x119(%rbp), %rdi
callq 0x2250
jmp 0x2a4d
jmp 0x2a1e
movl -0x94(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x94(%rbp)
jmp 0x2829
movq -0x90(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x21c0
xorl %eax, %eax
addq $0x190, %rsp            # imm = 0x190
popq %rbp
retq
movq -0x38(%rbp), %rdi
callq 0x23a0
nopw %cs:(%rax,%rax)