// File: kiudee[P]VAHD-Projekt/./Subjects1-6.h
// Function: Subject::_process()
int Subject::_process()
{
    _Message *m;
    int busy;

    busy = 0;
    if (_child != NULL) {  // relay subject
        busy = _child->_process();
    } else {               // bad relay subject or standard subject
        if (_activeSubjects != NULL) {            // standard subject
            busy = _activeSubjects->process();      // first, process children
            _activeSubject = this;
            busy = busy | _activeRelays->process(); // then active relays
            m = _sink->_oQueue->dequeue();          // then subject itself
            if (m != NULL) {
                if (DEBUG) {
                    std::cout << "-- Executing message " << m->debugID << " in subject " << _debugID << ".\n";
                }
                source = m->source + _debugID;        // create local ID of source
                sink = m->sink;                       // set sink to sink of message
                if (m->ObjPtr != NULL) {
                    m->ObjPtr->_owner = this;    // set new owner of object
                }
                if (m->ObjPtr == NULL || m->ObjPtr->_sink == NULL || m->ObjPtr->_sink->_home == this) {
                    (this->*(m->VerbPtr))(m->ObjPtr);    // execute message
                } else {
                    if (WARNING) {
                        std::cout << "-- Warning! Message " << m->debugID << " not meant for subject " << _debugID << ".\n";
                    }
                }
                delete m;
                busy = 1;
            }
        }
    }
    return busy;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x20(%rbp)
movl $0x0, -0x14(%rbp)
cmpq $0x0, 0x18(%rax)
je 0x6638
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movl %eax, -0x14(%rbp)
jmp 0x678e
movq -0x20(%rbp), %rax
cmpq $0x0, 0x48(%rax)
je 0x678c
movq -0x20(%rbp), %rax
movq 0x48(%rax), %rdi
callq 0x83a0
movl %eax, %ecx
movq -0x20(%rbp), %rax
movl %ecx, -0x14(%rbp)
leaq 0x1abac(%rip), %rcx     # 0x21210
movq %rax, (%rcx)
movl -0x14(%rbp), %ecx
movl %ecx, -0x24(%rbp)
movq 0x38(%rax), %rdi
callq 0x8400
movl -0x24(%rbp), %ecx
movl %eax, %edx
movq -0x20(%rbp), %rax
orl %edx, %ecx
movl %ecx, -0x14(%rbp)
movq 0x20(%rax), %rax
movq 0x38(%rax), %rdi
callq 0x7460
movq %rax, -0x10(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0x678a
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
movq 0x8(%rcx), %rcx
addq 0x8(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x10(%rbp), %rcx
movq 0x10(%rcx), %rcx
movq %rcx, 0x58(%rax)
movq -0x10(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0x66db
movq -0x20(%rbp), %rcx
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movq %rcx, 0x8(%rax)
movq -0x10(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0x670b
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
cmpq $0x0, 0x18(%rax)
je 0x670b
movq -0x20(%rbp), %rcx
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
cmpq %rcx, 0x18(%rax)
jne 0x6765
movq -0x20(%rbp), %rcx
movq -0x10(%rbp), %rdx
movq 0x18(%rdx), %rax
movq %rax, -0x38(%rbp)
movq 0x20(%rdx), %rdx
addq %rdx, %rcx
movq %rcx, -0x30(%rbp)
andq $0x1, %rax
cmpq $0x0, %rax
je 0x6749
movq -0x38(%rbp), %rcx
movq -0x30(%rbp), %rax
movq (%rax), %rax
subq $0x1, %rcx
movq (%rax,%rcx), %rax
movq %rax, -0x40(%rbp)
jmp 0x6751
movq -0x38(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x30(%rbp), %rdi
movq -0x40(%rbp), %rax
movq -0x10(%rbp), %rcx
movq 0x28(%rcx), %rsi
callq *%rax
jmp 0x6767
jmp 0x6767
movq -0x10(%rbp), %rax
movq %rax, -0x48(%rbp)
cmpq $0x0, %rax
je 0x6783
movq -0x48(%rbp), %rdi
movl $0x38, %esi
callq 0x31d0
movl $0x1, -0x14(%rbp)
jmp 0x678c
jmp 0x678e
movl -0x14(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopw (%rax,%rax)