// File: yayuntian[P]user_agent/userAgent.cpp
// Function: echo_ua(UserAgent&)
void echo_ua(UserAgent& p) {

    cout << p.ua << endl;
    if (!p.browser.Name.empty()) {
        printf("browser Name: %s, Version: %s\n",
               p.browser.Name.c_str(),
               p.browser.Version.c_str());
    }
    if (!p.browser.Engine.empty()) {
        printf("browser Engine: %s, Version: %s\n",
               p.browser.Engine.c_str(),
               p.browser.EngineVersion.c_str());
    }

    print_val("os", p.os);
    print_val("platform", p.platform);
    print_val("localization", p.localization);
    print_val("mozilla", p.mozilla);

    print_val("bot", p.bot);
    print_val("mobile", p.mobile);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1d0, %rsp            # imm = 0x1D0
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rsi
movq 0x7d0c6(%rip), %rdi     # 0x91fc0
callq 0x83f0
movq %rax, %rdi
movq 0x7d08f(%rip), %rsi     # 0x91f98
callq 0x84e0
movq -0x8(%rbp), %rdi
addq $0xa0, %rdi
addq $0x40, %rdi
callq 0x8800
testb $0x1, %al
jne 0x14f6d
movq -0x8(%rbp), %rdi
addq $0xa0, %rdi
addq $0x40, %rdi
callq 0x81a0
movq %rax, -0x190(%rbp)
movq -0x8(%rbp), %rdi
addq $0xa0, %rdi
addq $0x60, %rdi
callq 0x81a0
movq -0x190(%rbp), %rsi
movq %rax, %rdx
leaq 0x55ef3(%rip), %rdi     # 0x6ae59
movb $0x0, %al
callq 0x8070
movq -0x8(%rbp), %rdi
addq $0xa0, %rdi
callq 0x8800
testb $0x1, %al
jne 0x14fc4
movq -0x8(%rbp), %rdi
addq $0xa0, %rdi
callq 0x81a0
movq %rax, -0x198(%rbp)
movq -0x8(%rbp), %rdi
addq $0xa0, %rdi
addq $0x20, %rdi
callq 0x81a0
movq -0x198(%rbp), %rsi
movq %rax, %rdx
leaq 0x55ebb(%rip), %rdi     # 0x6ae78
movb $0x0, %al
callq 0x8070
leaq -0x29(%rbp), %rdi
movq %rdi, -0x1a0(%rbp)
callq 0x88c0
movq -0x1a0(%rbp), %rdx
leaq 0x58459(%rip), %rsi     # 0x6d43b
leaq -0x28(%rbp), %rdi
callq 0x13330
jmp 0x14fed
movq -0x8(%rbp), %rsi
addq $0x60, %rsi
leaq -0x60(%rbp), %rdi
callq 0x81c0
jmp 0x15000
leaq -0x28(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x14e10
jmp 0x1500f
leaq -0x60(%rbp), %rdi
callq 0x89e8
leaq -0x28(%rbp), %rdi
callq 0x89e8
leaq -0x29(%rbp), %rdi
callq 0x8510
leaq -0x81(%rbp), %rdi
movq %rdi, -0x1a8(%rbp)
callq 0x88c0
movq -0x1a8(%rbp), %rdx
leaq 0x55e4e(%rip), %rsi     # 0x6ae99
leaq -0x80(%rbp), %rdi
callq 0x13330
jmp 0x15056
movq -0x8(%rbp), %rsi
addq $0x40, %rsi
leaq -0xa8(%rbp), %rdi
callq 0x81c0
jmp 0x1506c
leaq -0x80(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x14e10
jmp 0x1507e
leaq -0xa8(%rbp), %rdi
callq 0x89e8
leaq -0x80(%rbp), %rdi
callq 0x89e8
leaq -0x81(%rbp), %rdi
callq 0x8510
leaq -0xc9(%rbp), %rdi
movq %rdi, -0x1b0(%rbp)
callq 0x88c0
movq -0x1b0(%rbp), %rdx
leaq 0x55de2(%rip), %rsi     # 0x6aea2
leaq -0xc8(%rbp), %rdi
callq 0x13330
jmp 0x150ce
movq -0x8(%rbp), %rsi
subq $-0x80, %rsi
leaq -0xf0(%rbp), %rdi
callq 0x81c0
jmp 0x150e4
leaq -0xc8(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x14e10
jmp 0x150f9
leaq -0xf0(%rbp), %rdi
callq 0x89e8
leaq -0xc8(%rbp), %rdi
callq 0x89e8
leaq -0xc9(%rbp), %rdi
callq 0x8510
leaq -0x111(%rbp), %rdi
movq %rdi, -0x1b8(%rbp)
callq 0x88c0
movq -0x1b8(%rbp), %rdx
leaq 0x55d71(%rip), %rsi     # 0x6aeaf
leaq -0x110(%rbp), %rdi
callq 0x13330
jmp 0x1514c
movq -0x8(%rbp), %rsi
addq $0x20, %rsi
leaq -0x138(%rbp), %rdi
callq 0x81c0
jmp 0x15162
leaq -0x110(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0x14e10
jmp 0x15177
leaq -0x138(%rbp), %rdi
callq 0x89e8
leaq -0x110(%rbp), %rdi
callq 0x89e8
leaq -0x111(%rbp), %rdi
callq 0x8510
leaq -0x159(%rbp), %rdi
movq %rdi, -0x1c0(%rbp)
callq 0x88c0
movq -0x1c0(%rbp), %rdx
leaq 0x513f6(%rip), %rsi     # 0x665b2
leaq -0x158(%rbp), %rdi
callq 0x13330
jmp 0x151ca
movq -0x8(%rbp), %rax
movzbl 0x120(%rax), %esi
andl $0x1, %esi
leaq -0x158(%rbp), %rdi
callq 0x14e70
jmp 0x151e6
leaq -0x158(%rbp), %rdi
callq 0x89e8
leaq -0x159(%rbp), %rdi
callq 0x8510
leaq -0x181(%rbp), %rdi
movq %rdi, -0x1c8(%rbp)
callq 0x88c0
movq -0x1c8(%rbp), %rdx
leaq 0x55c98(%rip), %rsi     # 0x6aeb7
leaq -0x180(%rbp), %rdi
callq 0x13330
jmp 0x1522d
movq -0x8(%rbp), %rax
movzbl 0x121(%rax), %esi
andl $0x1, %esi
leaq -0x180(%rbp), %rdi
callq 0x14e70
jmp 0x15249
leaq -0x180(%rbp), %rdi
callq 0x89e8
leaq -0x181(%rbp), %rdi
callq 0x8510
addq $0x1d0, %rsp            # imm = 0x1D0
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x152a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x1529b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x89e8
leaq -0x28(%rbp), %rdi
callq 0x89e8
leaq -0x29(%rbp), %rdi
callq 0x8510
jmp 0x15405
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x152ef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x152e6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x89e8
leaq -0x80(%rbp), %rdi
callq 0x89e8
leaq -0x81(%rbp), %rdi
callq 0x8510
jmp 0x15405
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x15340
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x15334
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xf0(%rbp), %rdi
callq 0x89e8
leaq -0xc8(%rbp), %rdi
callq 0x89e8
leaq -0xc9(%rbp), %rdi
callq 0x8510
jmp 0x15405
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x15391
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x15385
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x138(%rbp), %rdi
callq 0x89e8
leaq -0x110(%rbp), %rdi
callq 0x89e8
leaq -0x111(%rbp), %rdi
callq 0x8510
jmp 0x15405
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x153c5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x158(%rbp), %rdi
callq 0x89e8
leaq -0x159(%rbp), %rdi
callq 0x8510
jmp 0x15405
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x153f9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x180(%rbp), %rdi
callq 0x89e8
leaq -0x181(%rbp), %rdi
callq 0x8510
movq -0x38(%rbp), %rdi
callq 0x88a0
nop