// File: halfflat[P]tinyopt/include/tinyopt/tinyopt.h
// Function: to::state::match_option(to::key const&)
maybe<match_result> match_option(const key& k) {
        if (k.style==key::compact) {
            if (auto m = match_compact_key(k.label.c_str())) {
                if ((*argv)[optoff+*m])
                    return match_result{*argv+optoff+*m, 1, 0};
                else
                    return match_result{argv[1], 2, 0};
            }
        }
        else if (!optoff && k.label==*argv) {
            return match_result{argv[1], 2, 0};
        }
        else if (!optoff && k.style==key::longfmt) {
            auto keylen = k.label.length();
            if (!std::strncmp(*argv, k.label.c_str(), keylen) && (*argv)[keylen]=='=') {
                return match_result{*argv+keylen+1, 1, 0};
            }
        }

        return nothing;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movq %rdi, -0x98(%rbp)
movq %rdi, %rax
movq %rax, -0x90(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x2, 0x20(%rax)
jne 0xe489
movq -0x18(%rbp), %rdi
callq 0x30b0
movq -0x88(%rbp), %rsi
movq %rax, %rdx
leaq -0x20(%rbp), %rdi
callq 0xe5f0
leaq -0x20(%rbp), %rdi
callq 0xe6f0
testb $0x1, %al
jne 0xe36f
jmp 0xe466
movq -0x88(%rbp), %rax
movq 0x8(%rax), %rcx
movq (%rcx), %rcx
movq %rcx, -0xa0(%rbp)
movl 0x10(%rax), %eax
movl %eax, -0xa4(%rbp)
leaq -0x20(%rbp), %rdi
callq 0xe710
movl -0xa4(%rbp), %ecx
movq %rax, %rdx
movq -0xa0(%rbp), %rax
addl (%rdx), %ecx
movl %ecx, %ecx
cmpb $0x0, (%rax,%rcx)
je 0xe42a
movq -0x88(%rbp), %rcx
movq 0x8(%rcx), %rax
movq (%rax), %rax
movl 0x10(%rcx), %ecx
addq %rcx, %rax
movq %rax, -0xb0(%rbp)
leaq -0x20(%rbp), %rdi
callq 0xe710
movq -0x98(%rbp), %rdi
movq %rax, %rcx
movq -0xb0(%rbp), %rax
movl (%rcx), %ecx
addq %rcx, %rax
movq %rax, -0x30(%rbp)
movl $0x1, -0x28(%rbp)
movl $0x0, -0x24(%rbp)
leaq -0x30(%rbp), %rsi
callq 0xe730
jmp 0xe407
movl $0x1, -0x40(%rbp)
jmp 0xe46d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x20(%rbp), %rdi
callq 0xe760
jmp 0xe5c5
movq -0x98(%rbp), %rdi
movq -0x88(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x50(%rbp)
movl $0x2, -0x48(%rbp)
movl $0x0, -0x44(%rbp)
leaq -0x50(%rbp), %rsi
callq 0xe730
jmp 0xe45d
movl $0x1, -0x40(%rbp)
jmp 0xe46d
movl $0x0, -0x40(%rbp)
leaq -0x20(%rbp), %rdi
callq 0xe760
movl -0x40(%rbp), %eax
testl %eax, %eax
je 0xe484
jmp 0xe47f
jmp 0xe5b5
jmp 0xe5a9
movq -0x88(%rbp), %rax
cmpl $0x0, 0x10(%rax)
jne 0xe4e9
movq -0x88(%rbp), %rax
movq -0x18(%rbp), %rdi
movq 0x8(%rax), %rax
movq (%rax), %rsi
callq 0xe790
testb $0x1, %al
jne 0xe4b3
jmp 0xe4e9
movq -0x98(%rbp), %rdi
movq -0x88(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x60(%rbp)
movl $0x2, -0x58(%rbp)
movl $0x0, -0x54(%rbp)
leaq -0x60(%rbp), %rsi
callq 0xe730
jmp 0xe5b5
movq -0x88(%rbp), %rax
cmpl $0x0, 0x10(%rax)
jne 0xe5a5
movq -0x18(%rbp), %rax
cmpl $0x1, 0x20(%rax)
jne 0xe5a5
movq -0x18(%rbp), %rdi
callq 0x32c0
movq %rax, %rcx
movq -0x88(%rbp), %rax
movq %rcx, -0x68(%rbp)
movq 0x8(%rax), %rax
movq (%rax), %rax
movq %rax, -0xb8(%rbp)
movq -0x18(%rbp), %rdi
callq 0x30b0
movq -0xb8(%rbp), %rdi
movq %rax, %rsi
movq -0x68(%rbp), %rdx
callq 0x30e0
cmpl $0x0, %eax
jne 0xe5a3
movq -0x88(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rax
movq -0x68(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x3d, %eax
jne 0xe5a3
movq -0x98(%rbp), %rdi
movq -0x88(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rax
addq -0x68(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x78(%rbp)
movl $0x1, -0x70(%rbp)
movl $0x0, -0x6c(%rbp)
leaq -0x78(%rbp), %rsi
callq 0xe730
jmp 0xe5b5
jmp 0xe5a5
jmp 0xe5a7
jmp 0xe5a9
movq -0x98(%rbp), %rdi
callq 0xe7c0
movq -0x90(%rbp), %rax
addq $0xc0, %rsp
popq %rbp
retq
movq -0x38(%rbp), %rdi
callq 0x3320
nop