// File: /workspace/github_cpp_makefile_star2_O2/SimpleButNotNaive[P]AES/main.cpp
// Function: main
int main() {
    aes_encryptor encrypter;
    aes_decryptor decryptor;

    vector<vector<uint8>> cipher;

    cipher = encrypter.encryption(plain_text, key, IV);

    printf("密文：\n");
    for (auto group : cipher) {
        for (int i = 0; i < group.size(); i++) {
            if (group[i] <= 0x0f)
                printf("0%x", group[i]);
            else
                printf("%x", group[i]);
        }
    }
    printf("\n");

    string text = decryptor.decryption(cipher, key, IV);
    printf("明文：\n");
    printf("%s\n", text.c_str());

    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x288, %rsp            # imm = 0x288
andl $0x0, -0x1e8(%rbp)
andl $0x0, -0x124(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0x40(%rbp)
andq $0x0, -0x30(%rbp)
leaq 0x3c7f(%rip), %rsi      # 0x6328
leaq -0x120(%rbp), %rdi
callq 0x10f0
leaq 0x3c8c(%rip), %rsi      # 0x6348
leaq -0x100(%rbp), %rdi
callq 0x10f0
leaq 0x3c99(%rip), %rsi      # 0x6368
leaq -0xe0(%rbp), %rdi
callq 0x10f0
leaq -0x68(%rbp), %rdi
leaq -0x2a8(%rbp), %rsi
leaq -0x120(%rbp), %rdx
leaq -0x100(%rbp), %rcx
leaq -0xe0(%rbp), %r8
callq 0x1d10
leaq -0x40(%rbp), %r15
leaq -0x68(%rbp), %rbx
movq %r15, %rdi
movq %rbx, %rsi
callq 0x2946
movq %rbx, %rdi
callq 0x2196
leaq -0xe0(%rbp), %rdi
callq 0x1188
leaq -0x100(%rbp), %rdi
callq 0x1188
leaq -0x120(%rbp), %rdi
callq 0x1188
leaq 0xabc(%rip), %rdi       # 0x3202
callq 0x1120
movq (%r15), %r14
movq 0x8(%r15), %rax
movq %rax, -0x48(%rbp)
leaq 0xaa1(%rip), %r12       # 0x31fe
leaq 0xa9b(%rip), %r13       # 0x31ff
cmpq -0x48(%rbp), %r14
je 0x27b5
movq %rbx, %r15
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1b3c
xorl %ebx, %ebx
movq -0x68(%rbp), %rax
movq -0x60(%rbp), %rcx
subq %rax, %rcx
cmpq %rbx, %rcx
jbe 0x27a4
movzbl (%rax,%rbx), %esi
cmpl $0x10, %esi
movq %r13, %rdi
cmovbq %r12, %rdi
xorl %eax, %eax
callq 0x1040
incq %rbx
jmp 0x277a
movq %r15, %rbx
movq %r15, %rdi
callq 0x1b9e
addq $0x18, %r14
jmp 0x2764
pushq $0xa
popq %rdi
callq 0x1100
leaq -0x80(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x28ec
leaq 0x3b77(%rip), %rsi      # 0x6348
leaq -0xc0(%rbp), %rdi
callq 0x10f0
leaq 0x3b84(%rip), %rsi      # 0x6368
leaq -0xa0(%rbp), %rdi
callq 0x10f0
leaq -0x68(%rbp), %rdi
leaq -0x1e4(%rbp), %rsi
leaq -0x80(%rbp), %rdx
leaq -0xc0(%rbp), %rcx
leaq -0xa0(%rbp), %r8
callq 0x174c
leaq -0xa0(%rbp), %rdi
callq 0x1188
leaq -0xc0(%rbp), %rdi
callq 0x1188
leaq -0x80(%rbp), %rdi
callq 0x2196
leaq 0x9d2(%rip), %rdi       # 0x320c
callq 0x1120
leaq -0x68(%rbp), %rbx
movq (%rbx), %rdi
callq 0x1120
movq %rbx, %rdi
callq 0x1188
leaq -0x40(%rbp), %rdi
callq 0x2196
xorl %eax, %eax
addq $0x288, %rsp            # imm = 0x288
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq -0xa0(%rbp), %rdi
callq 0x1188
jmp 0x2884
movq %rax, %rbx
leaq -0xc0(%rbp), %rdi
callq 0x1188
jmp 0x2895
movq %rax, %rbx
leaq -0x80(%rbp), %rdi
callq 0x2196
jmp 0x28da
jmp 0x28d7
movq %rax, %rbx
leaq -0xe0(%rbp), %rdi
callq 0x1188
jmp 0x28b6
movq %rax, %rbx
leaq -0x100(%rbp), %rdi
callq 0x1188
jmp 0x28c7
movq %rax, %rbx
leaq -0x120(%rbp), %rdi
callq 0x1188
jmp 0x28da
jmp 0x28d7
movq %rax, %rbx
leaq -0x40(%rbp), %rdi
callq 0x2196
movq %rbx, %rdi
callq 0x1150
nop