// File: Wombozo[P]harmony/src/Triad.cpp
// Function: Triad::Triad(Note*, std::vector<Interval, std::allocator<Interval>>)
Triad::Triad(Note *n, std::vector<Interval> ints) : root(n), bass(n), inversion(0)
{
    std::string str;
    if (ints.size() < 2)
        throw E_CHORD_UNKNOWN;
    
    intervals = {ints.at(0), ints.at(1)};
    if (!ints.at(0).getName().compare("major third") && !ints.at(1).getName().compare("perfect fifth"))
    {
        str = triads[0];
    }
    else if (!ints.at(0).getName().compare("minor third") && !ints.at(1).getName().compare("perfect fifth"))
    {
        str = triads[1];
    }
    else if (!ints.at(0).getName().compare("major third") && !ints.at(1).getName().compare("augmtented fifth"))
    {
        str = triads[2];
    }
    else if (!ints.at(0).getName().compare("minor third") && !ints.at(1).getName().compare("diminished fifth"))
    {
        str = triads[3];
    }
    else if (!ints.at(0).getName().compare("perfect fourth") && !ints.at(1).getName().compare("perfect fifth"))
    {
        str = triads[4];
    }
    else if (!ints.at(0).getName().compare("major second") && !ints.at(1).getName().compare("perfect fifth"))
    {
        str = triads[5];
    }
    else if (!ints.at(0).getName().compare("major third") && !ints.at(1).getName().compare("diminished fifth"))
    {
        str = triads[6];
    }
    else if (!ints.at(0).getName().compare("minor third") && !ints.at(1).getName().compare("augmented fifth"))
    {
        str = triads[7];
    }
    else
        throw E_CHORD_UNKNOWN;
    _setNotes(this, &ints);
    name = n->display() + str;
    typeName = str;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x4c0, %rsp            # imm = 0x4C0
movq %rdx, -0x338(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x348(%rbp)
movq -0x10(%rbp), %rax
movq %rax, (%rdi)
movq -0x10(%rbp), %rax
movq %rax, 0x8(%rdi)
addq $0x10, %rdi
movq %rdi, -0x360(%rbp)
callq 0x3300
movq -0x348(%rbp), %rdi
addq $0x30, %rdi
movq %rdi, -0x358(%rbp)
callq 0x3300
movq -0x348(%rbp), %rdi
movl $0x0, 0x50(%rdi)
addq $0x58, %rdi
movq %rdi, -0x350(%rbp)
callq 0xf520
movq -0x348(%rbp), %rdi
addq $0x70, %rdi
movq %rdi, -0x340(%rbp)
callq 0x72c0
leaq -0x38(%rbp), %rdi
callq 0x3300
movq -0x338(%rbp), %rdi
callq 0xf540
cmpq $0x2, %rax
jae 0x14fe8
movl $0x4, %edi
callq 0x3140
movq %rax, %rdi
movl $0x1, (%rdi)
leaq 0xb86f(%rip), %rsi      # 0x20838
xorl %eax, %eax
movl %eax, %edx
callq 0x33a0
jmp 0x15bac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x15b6a
movq -0x338(%rbp), %rdi
leaq -0xa8(%rbp), %rax
movq %rax, -0xb0(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0xf940
movq %rax, -0x368(%rbp)
jmp 0x1500f
movq -0x368(%rbp), %rsi
leaq -0xa8(%rbp), %rdi
callq 0xf980
jmp 0x15024
movq -0x338(%rbp), %rdi
leaq -0x80(%rbp), %rax
movq %rax, -0x378(%rbp)
movq %rax, -0xb0(%rbp)
movl $0x1, %esi
callq 0xf940
movq %rax, -0x370(%rbp)
jmp 0x15050
movq -0x370(%rbp), %rsi
movq -0x378(%rbp), %rdi
callq 0xf980
jmp 0x15065
movq -0x348(%rbp), %rdi
leaq -0xa8(%rbp), %rax
movq %rax, -0x58(%rbp)
movq $0x2, -0x50(%rbp)
addq $0x58, %rdi
movq -0x58(%rbp), %rsi
movq -0x50(%rbp), %rdx
callq 0x15ef0
jmp 0x15092
leaq -0xa8(%rbp), %rax
movq %rax, -0x388(%rbp)
addq $0x50, %rax
movq %rax, -0x380(%rbp)
movq -0x380(%rbp), %rdi
addq $-0x28, %rdi
movq %rdi, -0x390(%rbp)
callq 0xc990
movq -0x388(%rbp), %rcx
movq -0x390(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x380(%rbp)
jne 0x150ab
movq -0x338(%rbp), %rdi
movb $0x0, -0xf1(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0xf940
movq %rax, -0x398(%rbp)
jmp 0x150fc
movq -0x398(%rbp), %rsi
leaq -0xd0(%rbp), %rdi
callq 0xc9b0
jmp 0x15111
leaq -0xd0(%rbp), %rdi
leaq 0x40de(%rip), %rsi      # 0x191fd
callq 0x30b0
movl %eax, %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x399(%rbp)
jne 0x1518a
movq -0x338(%rbp), %rdi
movl $0x1, %esi
callq 0xf940
movq %rax, -0x3a8(%rbp)
jmp 0x1514d
movq -0x3a8(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0xc9b0
jmp 0x15162
movb $0x1, -0xf1(%rbp)
leaq -0xf0(%rbp), %rdi
leaq 0x40e5(%rip), %rsi      # 0x1925c
callq 0x30b0
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
movb %al, -0x399(%rbp)
movb -0x399(%rbp), %al
movb %al, -0x3a9(%rbp)
testb $0x1, -0xf1(%rbp)
jne 0x151a1
jmp 0x151ad
leaq -0xf0(%rbp), %rdi
callq 0x3190
leaq -0xd0(%rbp), %rdi
callq 0x3190
movb -0x3a9(%rbp), %al
testb $0x1, %al
jne 0x151c8
jmp 0x152b3
leaq 0xc321(%rip), %rsi      # 0x214f0
leaq -0x38(%rbp), %rdi
callq 0x3050
jmp 0x151da
jmp 0x15ab1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movq -0xb0(%rbp), %rax
leaq -0xa8(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x3b8(%rbp)
je 0x15236
movq -0x3b8(%rbp), %rdi
addq $-0x28, %rdi
movq %rdi, -0x3c0(%rbp)
callq 0xc990
movq -0x3c0(%rbp), %rax
leaq -0xa8(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x3b8(%rbp)
jne 0x15205
jmp 0x15b6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xa8(%rbp), %rax
movq %rax, -0x3d0(%rbp)
addq $0x50, %rax
movq %rax, -0x3c8(%rbp)
movq -0x3c8(%rbp), %rdi
addq $-0x28, %rdi
movq %rdi, -0x3d8(%rbp)
callq 0xc990
movq -0x3d0(%rbp), %rcx
movq -0x3d8(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x3c8(%rbp)
jne 0x15260
jmp 0x15b6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x3190
jmp 0x15b6a
movq -0x338(%rbp), %rdi
movb $0x0, -0x139(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0xf940
movq %rax, -0x3e0(%rbp)
jmp 0x152d3
movq -0x3e0(%rbp), %rsi
leaq -0x118(%rbp), %rdi
callq 0xc9b0
jmp 0x152e8
leaq -0x118(%rbp), %rdi
leaq 0x3efb(%rip), %rsi      # 0x191f1
callq 0x30b0
movl %eax, %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x3e1(%rbp)
jne 0x15361
movq -0x338(%rbp), %rdi
movl $0x1, %esi
callq 0xf940
movq %rax, -0x3f0(%rbp)
jmp 0x15324
movq -0x3f0(%rbp), %rsi
leaq -0x138(%rbp), %rdi
callq 0xc9b0
jmp 0x15339
movb $0x1, -0x139(%rbp)
leaq -0x138(%rbp), %rdi
leaq 0x3f0e(%rip), %rsi      # 0x1925c
callq 0x30b0
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
movb %al, -0x3e1(%rbp)
movb -0x3e1(%rbp), %al
movb %al, -0x3f1(%rbp)
testb $0x1, -0x139(%rbp)
jne 0x15378
jmp 0x15384
leaq -0x138(%rbp), %rdi
callq 0x3190
leaq -0x118(%rbp), %rdi
callq 0x3190
movb -0x3f1(%rbp), %al
testb $0x1, %al
jne 0x1539c
jmp 0x153d0
leaq 0xc16d(%rip), %rsi      # 0x21510
leaq -0x38(%rbp), %rdi
callq 0x3050
jmp 0x153ae
jmp 0x15aaf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x118(%rbp), %rdi
callq 0x3190
jmp 0x15b6a
movq -0x338(%rbp), %rdi
movb $0x0, -0x181(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0xf940
movq %rax, -0x400(%rbp)
jmp 0x153f0
movq -0x400(%rbp), %rsi
leaq -0x160(%rbp), %rdi
callq 0xc9b0
jmp 0x15405
leaq -0x160(%rbp), %rdi
leaq 0x3dea(%rip), %rsi      # 0x191fd
callq 0x30b0
movl %eax, %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x401(%rbp)
jne 0x1547e
movq -0x338(%rbp), %rdi
movl $0x1, %esi
callq 0xf940
movq %rax, -0x410(%rbp)
jmp 0x15441
movq -0x410(%rbp), %rsi
leaq -0x180(%rbp), %rdi
callq 0xc9b0
jmp 0x15456
movb $0x1, -0x181(%rbp)
leaq -0x180(%rbp), %rdi
leaq 0x4021(%rip), %rsi      # 0x1948c
callq 0x30b0
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
movb %al, -0x401(%rbp)
movb -0x401(%rbp), %al
movb %al, -0x411(%rbp)
testb $0x1, -0x181(%rbp)
jne 0x15495
jmp 0x154a1
leaq -0x180(%rbp), %rdi
callq 0x3190
leaq -0x160(%rbp), %rdi
callq 0x3190
movb -0x411(%rbp), %al
testb $0x1, %al
jne 0x154b9
jmp 0x154ed
leaq 0xc070(%rip), %rsi      # 0x21530
leaq -0x38(%rbp), %rdi
callq 0x3050
jmp 0x154cb
jmp 0x15aad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x3190
jmp 0x15b6a
movq -0x338(%rbp), %rdi
movb $0x0, -0x1c9(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0xf940
movq %rax, -0x420(%rbp)
jmp 0x1550d
movq -0x420(%rbp), %rsi
leaq -0x1a8(%rbp), %rdi
callq 0xc9b0
jmp 0x15522
leaq -0x1a8(%rbp), %rdi
leaq 0x3cc1(%rip), %rsi      # 0x191f1
callq 0x30b0
movl %eax, %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x421(%rbp)
jne 0x1559b
movq -0x338(%rbp), %rdi
movl $0x1, %esi
callq 0xf940
movq %rax, -0x430(%rbp)
jmp 0x1555e
movq -0x430(%rbp), %rsi
leaq -0x1c8(%rbp), %rdi
callq 0xc9b0
jmp 0x15573
movb $0x1, -0x1c9(%rbp)
leaq -0x1c8(%rbp), %rdi
leaq 0x3cc3(%rip), %rsi      # 0x1924b
callq 0x30b0
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
movb %al, -0x421(%rbp)
movb -0x421(%rbp), %al
movb %al, -0x431(%rbp)
testb $0x1, -0x1c9(%rbp)
jne 0x155b2
jmp 0x155be
leaq -0x1c8(%rbp), %rdi
callq 0x3190
leaq -0x1a8(%rbp), %rdi
callq 0x3190
movb -0x431(%rbp), %al
testb $0x1, %al
jne 0x155d6
jmp 0x1560a
leaq 0xbf73(%rip), %rsi      # 0x21550
leaq -0x38(%rbp), %rdi
callq 0x3050
jmp 0x155e8
jmp 0x15aab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1a8(%rbp), %rdi
callq 0x3190
jmp 0x15b6a
movq -0x338(%rbp), %rdi
movb $0x0, -0x211(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0xf940
movq %rax, -0x440(%rbp)
jmp 0x1562a
movq -0x440(%rbp), %rsi
leaq -0x1f0(%rbp), %rdi
callq 0xc9b0
jmp 0x1563f
leaq -0x1f0(%rbp), %rdi
leaq 0x3bde(%rip), %rsi      # 0x1922b
callq 0x30b0
movl %eax, %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x441(%rbp)
jne 0x156b8
movq -0x338(%rbp), %rdi
movl $0x1, %esi
callq 0xf940
movq %rax, -0x450(%rbp)
jmp 0x1567b
movq -0x450(%rbp), %rsi
leaq -0x210(%rbp), %rdi
callq 0xc9b0
jmp 0x15690
movb $0x1, -0x211(%rbp)
leaq -0x210(%rbp), %rdi
leaq 0x3bb7(%rip), %rsi      # 0x1925c
callq 0x30b0
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
movb %al, -0x441(%rbp)
movb -0x441(%rbp), %al
movb %al, -0x451(%rbp)
testb $0x1, -0x211(%rbp)
jne 0x156cf
jmp 0x156db
leaq -0x210(%rbp), %rdi
callq 0x3190
leaq -0x1f0(%rbp), %rdi
callq 0x3190
movb -0x451(%rbp), %al
testb $0x1, %al
jne 0x156f3
jmp 0x15727
leaq 0xbe76(%rip), %rsi      # 0x21570
leaq -0x38(%rbp), %rdi
callq 0x3050
jmp 0x15705
jmp 0x15aa9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0x3190
jmp 0x15b6a
movq -0x338(%rbp), %rdi
movb $0x0, -0x259(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0xf940
movq %rax, -0x460(%rbp)
jmp 0x15747
movq -0x460(%rbp), %rsi
leaq -0x238(%rbp), %rdi
callq 0xc9b0
jmp 0x1575c
leaq -0x238(%rbp), %rdi
leaq 0x3a58(%rip), %rsi      # 0x191c2
callq 0x30b0
movl %eax, %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x461(%rbp)
jne 0x157d5
movq -0x338(%rbp), %rdi
movl $0x1, %esi
callq 0xf940
movq %rax, -0x470(%rbp)
jmp 0x15798
movq -0x470(%rbp), %rsi
leaq -0x258(%rbp), %rdi
callq 0xc9b0
jmp 0x157ad
movb $0x1, -0x259(%rbp)
leaq -0x258(%rbp), %rdi
leaq 0x3a9a(%rip), %rsi      # 0x1925c
callq 0x30b0
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
movb %al, -0x461(%rbp)
movb -0x461(%rbp), %al
movb %al, -0x471(%rbp)
testb $0x1, -0x259(%rbp)
jne 0x157ec
jmp 0x157f8
leaq -0x258(%rbp), %rdi
callq 0x3190
leaq -0x238(%rbp), %rdi
callq 0x3190
movb -0x471(%rbp), %al
testb $0x1, %al
jne 0x15810
jmp 0x15844
leaq 0xbd79(%rip), %rsi      # 0x21590
leaq -0x38(%rbp), %rdi
callq 0x3050
jmp 0x15822
jmp 0x15aa7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x238(%rbp), %rdi
callq 0x3190
jmp 0x15b6a
movq -0x338(%rbp), %rdi
movb $0x0, -0x2a1(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0xf940
movq %rax, -0x480(%rbp)
jmp 0x15864
movq -0x480(%rbp), %rsi
leaq -0x280(%rbp), %rdi
callq 0xc9b0
jmp 0x15879
leaq -0x280(%rbp), %rdi
leaq 0x3976(%rip), %rsi      # 0x191fd
callq 0x30b0
movl %eax, %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x481(%rbp)
jne 0x158f2
movq -0x338(%rbp), %rdi
movl $0x1, %esi
callq 0xf940
movq %rax, -0x490(%rbp)
jmp 0x158b5
movq -0x490(%rbp), %rsi
leaq -0x2a0(%rbp), %rdi
callq 0xc9b0
jmp 0x158ca
movb $0x1, -0x2a1(%rbp)
leaq -0x2a0(%rbp), %rdi
leaq 0x396c(%rip), %rsi      # 0x1924b
callq 0x30b0
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
movb %al, -0x481(%rbp)
movb -0x481(%rbp), %al
movb %al, -0x491(%rbp)
testb $0x1, -0x2a1(%rbp)
jne 0x15909
jmp 0x15915
leaq -0x2a0(%rbp), %rdi
callq 0x3190
leaq -0x280(%rbp), %rdi
callq 0x3190
movb -0x491(%rbp), %al
testb $0x1, %al
jne 0x1592d
jmp 0x15961
leaq 0xbc7c(%rip), %rsi      # 0x215b0
leaq -0x38(%rbp), %rdi
callq 0x3050
jmp 0x1593f
jmp 0x15aa5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x280(%rbp), %rdi
callq 0x3190
jmp 0x15b6a
movq -0x338(%rbp), %rdi
movb $0x0, -0x2e9(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0xf940
movq %rax, -0x4a0(%rbp)
jmp 0x15981
movq -0x4a0(%rbp), %rsi
leaq -0x2c8(%rbp), %rdi
callq 0xc9b0
jmp 0x15996
leaq -0x2c8(%rbp), %rdi
leaq 0x384d(%rip), %rsi      # 0x191f1
callq 0x30b0
movl %eax, %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x4a1(%rbp)
jne 0x15a0f
movq -0x338(%rbp), %rdi
movl $0x1, %esi
callq 0xf940
movq %rax, -0x4b0(%rbp)
jmp 0x159d2
movq -0x4b0(%rbp), %rsi
leaq -0x2e8(%rbp), %rdi
callq 0xc9b0
jmp 0x159e7
movb $0x1, -0x2e9(%rbp)
leaq -0x2e8(%rbp), %rdi
leaq 0x386e(%rip), %rsi      # 0x1926a
callq 0x30b0
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
movb %al, -0x4a1(%rbp)
movb -0x4a1(%rbp), %al
movb %al, -0x4b1(%rbp)
testb $0x1, -0x2e9(%rbp)
jne 0x15a26
jmp 0x15a32
leaq -0x2e8(%rbp), %rdi
callq 0x3190
leaq -0x2c8(%rbp), %rdi
callq 0x3190
movb -0x4b1(%rbp), %al
testb $0x1, %al
jne 0x15a4a
jmp 0x15a7b
leaq 0xbb7f(%rip), %rsi      # 0x215d0
leaq -0x38(%rbp), %rdi
callq 0x3050
jmp 0x15a5c
jmp 0x15aa3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x2c8(%rbp), %rdi
callq 0x3190
jmp 0x15b6a
movl $0x4, %edi
callq 0x3140
movq %rax, %rdi
movl $0x1, (%rdi)
leaq 0xada3(%rip), %rsi      # 0x20838
xorl %eax, %eax
movl %eax, %edx
callq 0x33a0
jmp 0x15bac
jmp 0x15aa5
jmp 0x15aa7
jmp 0x15aa9
jmp 0x15aab
jmp 0x15aad
jmp 0x15aaf
jmp 0x15ab1
movq -0x338(%rbp), %rsi
movq -0x348(%rbp), %rdi
callq 0x15bb0
jmp 0x15ac6
movq -0x10(%rbp), %rsi
movq (%rsi), %rax
movq (%rax), %rax
leaq -0x330(%rbp), %rdi
callq *%rax
jmp 0x15adb
leaq -0x310(%rbp), %rdi
leaq -0x330(%rbp), %rsi
leaq -0x38(%rbp), %rdx
callq 0xfc40
jmp 0x15af4
movq -0x348(%rbp), %rdi
addq $0x10, %rdi
leaq -0x310(%rbp), %rsi
movq %rsi, -0x4c0(%rbp)
callq 0x32a0
movq -0x4c0(%rbp), %rdi
callq 0x3190
leaq -0x330(%rbp), %rdi
callq 0x3190
movq -0x348(%rbp), %rdi
addq $0x30, %rdi
leaq -0x38(%rbp), %rsi
callq 0x3050
jmp 0x15b40
leaq -0x38(%rbp), %rdi
callq 0x3190
addq $0x4c0, %rsp            # imm = 0x4C0
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x330(%rbp), %rdi
callq 0x3190
leaq -0x38(%rbp), %rdi
callq 0x3190
movq -0x340(%rbp), %rdi
callq 0x72e0
movq -0x350(%rbp), %rdi
callq 0xf660
movq -0x358(%rbp), %rdi
callq 0x3190
movq -0x360(%rbp), %rdi
callq 0x3190
movq -0x40(%rbp), %rdi
callq 0x33d0
nopl (%rax)