// File: vsklad[P]cgen/commandline.cpp
// Function: CGenCommandLineReader::parse_variable_except(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, CGenVariableInfo, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, CGenVariableInfo>>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
void CGenCommandLineReader::parse_variable_except(CGenVariablesMap& variables_map, const std::string& variable_name) {
    if (variable_name.empty()) {
        parse_error(ERROR_EXCEPT_MUST_FOLLOW_DEFINITION);
    };
    if (is_binary_variable_name(variable_name)) {
        parse_error(ERROR_BINARY_VARIABLE_EXCEPT_INCOMPATIBLE);
    };
    
    CGenVariableInfo& variable_value = variables_map.find(variable_name)->second;
    
    if (variable_value.replace_existing) {
        parse_error(ERROR_EXCEPT_REPLACE_INCOMPATIBLE);
    };
    
    skip_token();
    read_symbol(':');
    const uint32_t param1 = read_uint32();
    if (is_symbol('.')) {
        if (param1 == 0) {
            parse_error(ERROR_RANGE_FIRST_ZERO);
        };
        variable_value.except_range_first = param1 - 1; // becomes zero based
        read_symbol('.');
        read_symbol('.');
        const uint32_t param2 = read_uint32(); // index of the last element, 1 based
        if (param2 < variable_value.except_range_first) {
            parse_error(ERROR_RANGE_FIRST_LAST);
        };
        variable_value.except_range_size = param2 - variable_value.except_range_first;
    } else {
        if (param1 == 0) {
            parse_error(ERROR_EXCEPT_ZERO);
        };
        variable_value.except_count = param1;
    };
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x190, %rsp            # imm = 0x190
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x130(%rbp)
movq -0x18(%rbp), %rdi
callq 0xd540
testb $0x1, %al
jne 0x227d4
jmp 0x2286c
movq -0x130(%rbp), %rax
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
addq %rcx, %rax
movq %rax, -0x140(%rbp)
leaq -0x39(%rbp), %rdi
movq %rdi, -0x138(%rbp)
callq 0xd5b0
movq -0x138(%rbp), %rdx
leaq 0x3ed97(%rip), %rsi     # 0x615a1
leaq -0x38(%rbp), %rdi
callq 0xd440
jmp 0x22815
movq -0x140(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x262a0
jmp 0x22827
leaq -0x38(%rbp), %rdi
callq 0xd1b0
leaq -0x39(%rbp), %rdi
callq 0xd370
jmp 0x2286c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x2285e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x38(%rbp), %rdi
callq 0xd1b0
leaq -0x39(%rbp), %rdi
callq 0xd370
jmp 0x22d25
movq -0x18(%rbp), %rdi
callq 0x26c60
testb $0x1, %al
jne 0x2287e
jmp 0x22916
movq -0x130(%rbp), %rax
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
addq %rcx, %rax
movq %rax, -0x150(%rbp)
leaq -0x71(%rbp), %rdi
movq %rdi, -0x148(%rbp)
callq 0xd5b0
movq -0x148(%rbp), %rdx
leaq 0x3ed2c(%rip), %rsi     # 0x615e0
leaq -0x70(%rbp), %rdi
callq 0xd440
jmp 0x228bf
movq -0x150(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x262a0
jmp 0x228d1
leaq -0x70(%rbp), %rdi
callq 0xd1b0
leaq -0x71(%rbp), %rdi
callq 0xd370
jmp 0x22916
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x22908
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x70(%rbp), %rdi
callq 0xd1b0
leaq -0x71(%rbp), %rdi
callq 0xd370
jmp 0x22d25
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x26cc0
movq %rax, -0x88(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x26cf0
addq $0x20, %rax
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
testb $0x1, 0x38(%rax)
je 0x229f9
movq -0x130(%rbp), %rax
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
addq %rcx, %rax
movq %rax, -0x160(%rbp)
leaq -0xa9(%rbp), %rdi
movq %rdi, -0x158(%rbp)
callq 0xd5b0
movq -0x158(%rbp), %rdx
leaq 0x3ec8e(%rip), %rsi     # 0x61613
leaq -0xa8(%rbp), %rdi
callq 0xd440
jmp 0x22993
movq -0x160(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x262a0
jmp 0x229a8
leaq -0xa8(%rbp), %rdi
callq 0xd1b0
leaq -0xa9(%rbp), %rdi
callq 0xd370
jmp 0x229f9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x229e8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0xd1b0
leaq -0xa9(%rbp), %rdi
callq 0xd370
jmp 0x22d25
movq -0x130(%rbp), %rdi
movq (%rdi), %rax
addq -0x18(%rax), %rdi
callq 0x26900
movq -0x130(%rbp), %rdi
movq (%rdi), %rax
addq -0x18(%rax), %rdi
movl $0x3a, %esi
callq 0x26430
movq -0x130(%rbp), %rdi
movq (%rdi), %rax
addq -0x18(%rax), %rdi
xorl %esi, %esi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
callq 0x25c30
movq -0x130(%rbp), %rdi
movl %eax, -0xb0(%rbp)
movq (%rdi), %rax
addq -0x18(%rax), %rdi
movl $0x2e, %esi
callq 0x263d0
testb $0x1, %al
jne 0x22a65
jmp 0x22c58
cmpl $0x0, -0xb0(%rbp)
jne 0x22b1f
movq -0x130(%rbp), %rax
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
addq %rcx, %rax
movq %rax, -0x170(%rbp)
leaq -0xd1(%rbp), %rdi
movq %rdi, -0x168(%rbp)
callq 0xd5b0
movq -0x168(%rbp), %rdx
leaq 0x3eba3(%rip), %rsi     # 0x6164e
leaq -0xd0(%rbp), %rdi
callq 0xd440
jmp 0x22ab9
movq -0x170(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x262a0
jmp 0x22ace
leaq -0xd0(%rbp), %rdi
callq 0xd1b0
leaq -0xd1(%rbp), %rdi
callq 0xd370
jmp 0x22b1f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x22b0e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0xd1b0
leaq -0xd1(%rbp), %rdi
callq 0xd370
jmp 0x22d25
movq -0x130(%rbp), %rdi
movl -0xb0(%rbp), %ecx
subl $0x1, %ecx
movq -0x80(%rbp), %rax
movl %ecx, 0xc(%rax)
movq (%rdi), %rax
addq -0x18(%rax), %rdi
movl $0x2e, %esi
callq 0x26430
movq -0x130(%rbp), %rdi
movq (%rdi), %rax
addq -0x18(%rax), %rdi
movl $0x2e, %esi
callq 0x26430
movq -0x130(%rbp), %rdi
movq (%rdi), %rax
addq -0x18(%rax), %rdi
xorl %esi, %esi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
callq 0x25c30
movl %eax, -0xd8(%rbp)
movl -0xd8(%rbp), %eax
movq -0x80(%rbp), %rcx
cmpl 0xc(%rcx), %eax
jae 0x22c3f
movq -0x130(%rbp), %rax
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
addq %rcx, %rax
movq %rax, -0x180(%rbp)
leaq -0xf9(%rbp), %rdi
movq %rdi, -0x178(%rbp)
callq 0xd5b0
movq -0x178(%rbp), %rdx
leaq 0x3eac7(%rip), %rsi     # 0x61692
leaq -0xf8(%rbp), %rdi
callq 0xd440
jmp 0x22bd9
movq -0x180(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x262a0
jmp 0x22bee
leaq -0xf8(%rbp), %rdi
callq 0xd1b0
leaq -0xf9(%rbp), %rdi
callq 0xd370
jmp 0x22c3f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x22c2e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0xd1b0
leaq -0xf9(%rbp), %rdi
callq 0xd370
jmp 0x22d25
movl -0xd8(%rbp), %ecx
movq -0x80(%rbp), %rax
subl 0xc(%rax), %ecx
movq -0x80(%rbp), %rax
movl %ecx, 0x10(%rax)
jmp 0x22d1c
cmpl $0x0, -0xb0(%rbp)
jne 0x22d0f
movq -0x130(%rbp), %rax
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
addq %rcx, %rax
movq %rax, -0x190(%rbp)
leaq -0x121(%rbp), %rdi
movq %rdi, -0x188(%rbp)
callq 0xd5b0
movq -0x188(%rbp), %rdx
leaq 0x3ea43(%rip), %rsi     # 0x616e1
leaq -0x120(%rbp), %rdi
callq 0xd440
jmp 0x22cac
movq -0x190(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0x262a0
jmp 0x22cc1
leaq -0x120(%rbp), %rdi
callq 0xd1b0
leaq -0x121(%rbp), %rdi
callq 0xd370
jmp 0x22d0f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x22d01
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x120(%rbp), %rdi
callq 0xd1b0
leaq -0x121(%rbp), %rdi
callq 0xd370
jmp 0x22d25
movl -0xb0(%rbp), %ecx
movq -0x80(%rbp), %rax
movl %ecx, 0x8(%rax)
addq $0x190, %rsp            # imm = 0x190
popq %rbp
retq
movq -0x48(%rbp), %rdi
callq 0xd5a0
nop