// File: keyan[P]ev_routing_engine/main.cpp
// Function: main
int main(int argc, char **argv) {
  if (argc != 3) {
    std::cout << "Error: requires initial and final supercharger names" << std::endl;
    return -1;
  }

  std::string initial_charger_name = argv[1];
  std::string goal_charger_name = argv[2];

  if (initial_charger_name == goal_charger_name) {
    std::cout << "Error: initial and final superchargers cannot be identical" << std::endl;
    return -1;
  }

  Router routing_engine = Router(network);
  std::string result = routing_engine.route(initial_charger_name, goal_charger_name);
  std::cout << result << std::endl;

  return 0;
}

// Assembly:
subq $0x158, %rsp            # imm = 0x158
movl $0x0, 0x154(%rsp)
movl %edi, 0x150(%rsp)
movq %rsi, 0x148(%rsp)
cmpl $0x3, 0x150(%rsp)
je 0xf7bd
movq 0x18846(%rip), %rdi     # 0x27fd8
leaq 0xe87b(%rip), %rsi      # 0x1e014
callq 0x2200
movq %rax, %rdi
movq 0x18818(%rip), %rsi     # 0x27fc0
callq 0x2220
movl $0xffffffff, 0x154(%rsp) # imm = 0xFFFFFFFF
jmp 0xfaa0
movq 0x148(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x20(%rsp)
leaq 0x127(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x2380
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
leaq 0x128(%rsp), %rdi
callq 0x22b0
jmp 0xf7f9
leaq 0x127(%rsp), %rdi
callq 0x2240
movq 0x148(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
leaq 0xef(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0x2380
movq 0x10(%rsp), %rsi
movq 0x18(%rsp), %rdx
leaq 0xf0(%rsp), %rdi
callq 0x22b0
jmp 0xf842
leaq 0xef(%rsp), %rdi
callq 0x2240
leaq 0x128(%rsp), %rdi
leaq 0xf0(%rsp), %rsi
callq 0xfac0
testb $0x1, %al
jne 0xf86d
jmp 0xf91a
movq 0x18764(%rip), %rdi     # 0x27fd8
leaq 0xe7ce(%rip), %rsi      # 0x1e049
callq 0x2200
movq %rax, 0x8(%rsp)
jmp 0xf887
movq 0x8(%rsp), %rdi
movq 0x1872d(%rip), %rsi     # 0x27fc0
callq 0x2220
jmp 0xf89a
movl $0xffffffff, 0x154(%rsp) # imm = 0xFFFFFFFF
movl $0x1, 0xe8(%rsp)
jmp 0xfa68
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x118(%rsp)
movl %eax, 0x114(%rsp)
leaq 0x127(%rsp), %rdi
callq 0x2240
jmp 0xfaaf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x118(%rsp)
movl %eax, 0x114(%rsp)
leaq 0xef(%rsp), %rdi
callq 0x2240
jmp 0xfa91
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x118(%rsp)
movl %eax, 0x114(%rsp)
jmp 0xfa84
leaq 0x188f7(%rip), %rsi     # 0x28218
leaq 0x90(%rsp), %rdi
callq 0xfb60
jmp 0xf930
leaq 0x50(%rsp), %rdi
leaq 0x128(%rsp), %rsi
callq 0x20d0
jmp 0xf944
leaq 0x30(%rsp), %rdi
leaq 0xf0(%rsp), %rsi
callq 0x20d0
jmp 0xf958
leaq 0x70(%rsp), %rdi
leaq 0x90(%rsp), %rsi
leaq 0x50(%rsp), %rdx
leaq 0x30(%rsp), %rcx
callq 0x13de0
jmp 0xf976
leaq 0x30(%rsp), %rdi
callq 0x2140
leaq 0x50(%rsp), %rdi
callq 0x2140
movq 0x18647(%rip), %rdi     # 0x27fd8
leaq 0x70(%rsp), %rsi
callq 0x21e0
movq %rax, (%rsp)
jmp 0xf9a1
movq (%rsp), %rdi
movq 0x18614(%rip), %rsi     # 0x27fc0
callq 0x2220
jmp 0xf9b3
movl $0x0, 0x154(%rsp)
movl $0x1, 0xe8(%rsp)
leaq 0x70(%rsp), %rdi
callq 0x2140
leaq 0x90(%rsp), %rdi
callq 0xff50
jmp 0xfa68
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x118(%rsp)
movl %eax, 0x114(%rsp)
jmp 0xfa59
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x118(%rsp)
movl %eax, 0x114(%rsp)
jmp 0xfa2f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x118(%rsp)
movl %eax, 0x114(%rsp)
leaq 0x30(%rsp), %rdi
callq 0x2140
leaq 0x50(%rsp), %rdi
callq 0x2140
jmp 0xfa59
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x118(%rsp)
movl %eax, 0x114(%rsp)
leaq 0x70(%rsp), %rdi
callq 0x2140
leaq 0x90(%rsp), %rdi
callq 0xff50
jmp 0xfa84
leaq 0xf0(%rsp), %rdi
callq 0x2140
leaq 0x128(%rsp), %rdi
callq 0x2140
jmp 0xfaa0
leaq 0xf0(%rsp), %rdi
callq 0x2140
leaq 0x128(%rsp), %rdi
callq 0x2140
jmp 0xfaaf
movl 0x154(%rsp), %eax
addq $0x158, %rsp            # imm = 0x158
retq
movq 0x118(%rsp), %rdi
callq 0x2370
nopl (%rax)