// File: Czxck001[P]algorithms/src/fft.cc
// Function: main
int main() {
  auto x = CVec<double>{0, 0, 0, 0, 1, 1, 1, 1};
  for (auto xi: x) {
    std::cout << xi << std::endl;
  }
  std::cout << std::endl;

  auto X = fft(x);
  for (auto Xk: X) {
    std::cout << Xk << std::endl;
  }
  std::cout << std::endl;

  auto y = ifft(X);
  for (auto yi: y) {
    std::cout << yi << std::endl;
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x190, %rsp            # imm = 0x190
movl $0x0, -0x4(%rbp)
movups 0x2e17(%rip), %xmm0     # 0x40b0
movaps %xmm0, -0x40(%rbp)
movups 0x2dfc(%rip), %xmm0     # 0x40a0
movaps %xmm0, -0x50(%rbp)
movups 0x2de1(%rip), %xmm0     # 0x4090
movaps %xmm0, -0x60(%rbp)
movups 0x2dc6(%rip), %xmm0     # 0x4080
movaps %xmm0, -0x70(%rbp)
movups 0x2dab(%rip), %xmm0     # 0x4070
movaps %xmm0, -0x80(%rbp)
movups 0x2d90(%rip), %xmm0     # 0x4060
movaps %xmm0, -0x90(%rbp)
movups 0x2d72(%rip), %xmm0     # 0x4050
movaps %xmm0, -0xa0(%rbp)
movups 0x2d54(%rip), %xmm0     # 0x4040
movaps %xmm0, -0xb0(%rbp)
leaq -0xb0(%rbp), %rax
movq %rax, -0x30(%rbp)
movq $0x8, -0x28(%rbp)
leaq -0xb1(%rbp), %rdi
movq %rdi, -0x178(%rbp)
callq 0x1640
movq -0x178(%rbp), %rcx
movq -0x30(%rbp), %rsi
movq -0x28(%rbp), %rdx
leaq -0x20(%rbp), %rdi
callq 0x1660
jmp 0x1333
leaq -0xb1(%rbp), %rdi
callq 0x16e0
leaq -0x20(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq -0xd0(%rbp), %rdi
callq 0x1700
movq %rax, -0xd8(%rbp)
movq -0xd0(%rbp), %rdi
callq 0x1730
movq %rax, -0xe0(%rbp)
leaq -0xd8(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x1760
testb $0x1, %al
jne 0x138c
jmp 0x141d
leaq -0xd8(%rbp), %rdi
callq 0x17a0
movups (%rax), %xmm0
movaps %xmm0, -0xf0(%rbp)
movq 0x5c2f(%rip), %rdi      # 0x6fd8
leaq -0xf0(%rbp), %rsi
callq 0x10e0
movq %rax, -0x180(%rbp)
jmp 0x13be
movq -0x180(%rbp), %rdi
movq 0x5bfc(%rip), %rsi      # 0x6fc8
callq 0x10d0
jmp 0x13d3
jmp 0x13d5
leaq -0xd8(%rbp), %rdi
callq 0x17c0
jmp 0x1370
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0xb1(%rbp), %rdi
callq 0x16e0
jmp 0x162f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1626
movq 0x5bb4(%rip), %rdi      # 0x6fd8
movq 0x5b9d(%rip), %rsi      # 0x6fc8
callq 0x10d0
jmp 0x1432
leaq -0x108(%rbp), %rdi
leaq -0x20(%rbp), %rsi
callq 0x17e0
jmp 0x1444
leaq -0x108(%rbp), %rax
movq %rax, -0x110(%rbp)
movq -0x110(%rbp), %rdi
callq 0x1700
movq %rax, -0x118(%rbp)
movq -0x110(%rbp), %rdi
callq 0x1730
movq %rax, -0x120(%rbp)
leaq -0x118(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0x1760
testb $0x1, %al
jne 0x1491
jmp 0x14ff
leaq -0x118(%rbp), %rdi
callq 0x17a0
movups (%rax), %xmm0
movaps %xmm0, -0x130(%rbp)
movq 0x5b2a(%rip), %rdi      # 0x6fd8
leaq -0x130(%rbp), %rsi
callq 0x10e0
movq %rax, -0x188(%rbp)
jmp 0x14c3
movq -0x188(%rbp), %rdi
movq 0x5af7(%rip), %rsi      # 0x6fc8
callq 0x10d0
jmp 0x14d8
jmp 0x14da
leaq -0x118(%rbp), %rdi
callq 0x17c0
jmp 0x1478
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x161a
movq 0x5ad2(%rip), %rdi      # 0x6fd8
movq 0x5abb(%rip), %rsi      # 0x6fc8
callq 0x10d0
jmp 0x1514
leaq -0x148(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x1b30
jmp 0x1529
leaq -0x148(%rbp), %rax
movq %rax, -0x150(%rbp)
movq -0x150(%rbp), %rdi
callq 0x1700
movq %rax, -0x158(%rbp)
movq -0x150(%rbp), %rdi
callq 0x1730
movq %rax, -0x160(%rbp)
leaq -0x158(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0x1760
testb $0x1, %al
jne 0x1576
jmp 0x15ed
leaq -0x158(%rbp), %rdi
callq 0x17a0
movups (%rax), %xmm0
movaps %xmm0, -0x170(%rbp)
movq 0x5a45(%rip), %rdi      # 0x6fd8
leaq -0x170(%rbp), %rsi
callq 0x10e0
movq %rax, -0x190(%rbp)
jmp 0x15a8
movq -0x190(%rbp), %rdi
movq 0x5a12(%rip), %rsi      # 0x6fc8
callq 0x10d0
jmp 0x15bd
jmp 0x15bf
leaq -0x158(%rbp), %rdi
callq 0x17c0
jmp 0x155d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x148(%rbp), %rdi
callq 0x1cb0
jmp 0x161a
leaq -0x148(%rbp), %rdi
callq 0x1cb0
leaq -0x108(%rbp), %rdi
callq 0x1cb0
leaq -0x20(%rbp), %rdi
callq 0x1cb0
movl -0x4(%rbp), %eax
addq $0x190, %rsp            # imm = 0x190
popq %rbp
retq
leaq -0x108(%rbp), %rdi
callq 0x1cb0
leaq -0x20(%rbp), %rdi
callq 0x1cb0
movq -0xc0(%rbp), %rdi
callq 0x1130
nopl (%rax,%rax)