// File: Laakeri[P]maxpre/src/./SE.cpp
// Function: maxPreprocessor::Preprocessor::trySEAmsLex(std::vector<int, std::allocator<int>>&, std::vector<int, std::allocator<int>>&)
void Preprocessor::trySEAmsLex(vector<int>& clauses, vector<int>& toRemove) {
	vector<int> cand = amsLex.amsLexSE(clauses);
	for (int c1 : cand) {
		for (int c2 : clauses) {
			if (c1 == c2) continue;
			if (!pi.canSubsume1(c1, c2)) continue;
			if (pi.clauses[c1].lit.size() == pi.clauses[c2].lit.size() && pi.canSubsume(c1, c2) && pi.canSubsume(c2, c1) && c1 > c2) {
				if (isSubsumed(pi.clauses[c1].lit, pi.clauses[c2].lit)) {
					if (pi.clauses[c1].isHard() && pi.clauses[c2].isHard()) {
						toRemove.push_back(c2);
					}
					else if(pi.clauses[c1].isHard()) {
						toRemove.push_back(c2);
					}
					else if(pi.clauses[c2].isHard()) {
						toRemove.push_back(c1);
					}
					else {
						pi.clauses[c1].weight += pi.clauses[c2].weight;
						pi.clauses[c2].weight = 0;
						toRemove.push_back(c2);
					}
				}
			}
			else if (pi.clauses[c1].lit.size() > pi.clauses[c2].lit.size() && pi.canSubsume(c2, c1) && pi.clauses[c2].isHard()) {
				if (isSubsumed(pi.clauses[c1].lit, pi.clauses[c2].lit)) {
					toRemove.push_back(c1);
				}
			}
			else if (pi.clauses[c2].lit.size() > pi.clauses[c1].lit.size() && pi.canSubsume(c1, c2) && pi.clauses[c1].isHard()) {
				if (isSubsumed(pi.clauses[c2].lit, pi.clauses[c1].lit)) {
					toRemove.push_back(c2);
				}
			}
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xf0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x8(%rbp), %rsi
movq %rsi, -0x88(%rbp)
addq $0x330, %rsi            # imm = 0x330
movq -0x10(%rbp), %rdx
leaq -0x30(%rbp), %rdi
callq 0x69bf0
leaq -0x30(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rdi
callq 0xa800
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rdi
callq 0xa830
movq %rax, -0x48(%rbp)
leaq -0x40(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0xa860
testb $0x1, %al
jne 0x148ce
jmp 0x14dcd
leaq -0x40(%rbp), %rdi
callq 0xa8a0
movl (%rax), %eax
movl %eax, -0x4c(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rdi
callq 0xa800
movq %rax, -0x60(%rbp)
movq -0x58(%rbp), %rdi
callq 0xa830
movq %rax, -0x68(%rbp)
leaq -0x60(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0xa860
testb $0x1, %al
jne 0x14914
jmp 0x14dbd
leaq -0x60(%rbp), %rdi
callq 0xa8a0
movl (%rax), %eax
movl %eax, -0x6c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x6c(%rbp), %eax
jne 0x1492f
jmp 0x14daf
movq -0x88(%rbp), %rdi
movl -0x4c(%rbp), %esi
movl -0x6c(%rbp), %edx
callq 0x5fc50
movb %al, -0x89(%rbp)
jmp 0x14949
movb -0x89(%rbp), %al
testb $0x1, %al
jne 0x14974
jmp 0x14955
jmp 0x14daf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x30(%rbp), %rdi
callq 0xab00
jmp 0x14ddf
movq -0x88(%rbp), %rdi
movslq -0x4c(%rbp), %rsi
callq 0x3c600
movq %rax, %rdi
callq 0xf940
movq -0x88(%rbp), %rdi
movq %rax, -0x98(%rbp)
movslq -0x6c(%rbp), %rsi
callq 0x3c600
movq %rax, %rdi
callq 0xf940
movq %rax, %rcx
movq -0x98(%rbp), %rax
cmpq %rcx, %rax
jne 0x14bbc
movq -0x88(%rbp), %rdi
movl -0x4c(%rbp), %esi
movl -0x6c(%rbp), %edx
callq 0x5fcf0
movb %al, -0x99(%rbp)
jmp 0x149d8
movb -0x99(%rbp), %al
testb $0x1, %al
jne 0x149e7
jmp 0x14bbc
movq -0x88(%rbp), %rdi
movl -0x6c(%rbp), %esi
movl -0x4c(%rbp), %edx
callq 0x5fcf0
movb %al, -0x9a(%rbp)
jmp 0x14a01
movb -0x9a(%rbp), %al
testb $0x1, %al
jne 0x14a10
jmp 0x14bbc
movl -0x4c(%rbp), %eax
cmpl -0x6c(%rbp), %eax
jle 0x14bbc
movq -0x88(%rbp), %rdi
movslq -0x4c(%rbp), %rsi
callq 0x3c600
movq -0x88(%rbp), %rdi
movq %rax, -0xa8(%rbp)
movslq -0x6c(%rbp), %rsi
callq 0x3c600
movq -0x88(%rbp), %rdi
movq -0xa8(%rbp), %rsi
movq %rax, %rdx
callq 0x13a00
testb $0x1, %al
jne 0x14a62
jmp 0x14bb7
movq -0x88(%rbp), %rdi
movslq -0x4c(%rbp), %rsi
callq 0x3c600
movq %rax, %rdi
callq 0x60e90
movb %al, -0xa9(%rbp)
jmp 0x14a82
movb -0xa9(%rbp), %al
testb $0x1, %al
jne 0x14a8e
jmp 0x14ace
movq -0x88(%rbp), %rdi
movslq -0x6c(%rbp), %rsi
callq 0x3c600
movq %rax, %rdi
callq 0x60e90
movb %al, -0xaa(%rbp)
jmp 0x14aae
movb -0xaa(%rbp), %al
testb $0x1, %al
jne 0x14aba
jmp 0x14ace
movq -0x18(%rbp), %rdi
leaq -0x6c(%rbp), %rsi
callq 0xa8c0
jmp 0x14ac9
jmp 0x14bb5
movq -0x88(%rbp), %rdi
movslq -0x4c(%rbp), %rsi
callq 0x3c600
movq %rax, %rdi
callq 0x60e90
movb %al, -0xab(%rbp)
jmp 0x14aee
movb -0xab(%rbp), %al
testb $0x1, %al
jne 0x14afa
jmp 0x14b0e
movq -0x18(%rbp), %rdi
leaq -0x6c(%rbp), %rsi
callq 0xa8c0
jmp 0x14b09
jmp 0x14bb3
movq -0x88(%rbp), %rdi
movslq -0x6c(%rbp), %rsi
callq 0x3c600
movq %rax, %rdi
callq 0x60e90
movb %al, -0xac(%rbp)
jmp 0x14b2e
movb -0xac(%rbp), %al
testb $0x1, %al
jne 0x14b3a
jmp 0x14b4b
movq -0x18(%rbp), %rdi
leaq -0x4c(%rbp), %rsi
callq 0xa8c0
jmp 0x14b49
jmp 0x14bb1
movq -0x88(%rbp), %rdi
movslq -0x6c(%rbp), %rsi
callq 0x3c600
movq -0x88(%rbp), %rdi
movq 0x18(%rax), %rax
movq %rax, -0xb8(%rbp)
movslq -0x4c(%rbp), %rsi
callq 0x3c600
movq -0xb8(%rbp), %rdx
movq -0x88(%rbp), %rdi
movq 0x18(%rax), %rcx
addq %rdx, %rcx
movq %rcx, 0x18(%rax)
movslq -0x6c(%rbp), %rsi
callq 0x3c600
movq $0x0, 0x18(%rax)
movq -0x18(%rbp), %rdi
leaq -0x6c(%rbp), %rsi
callq 0xa8c0
jmp 0x14baf
jmp 0x14bb1
jmp 0x14bb3
jmp 0x14bb5
jmp 0x14bb7
jmp 0x14dad
movq -0x88(%rbp), %rdi
movslq -0x4c(%rbp), %rsi
callq 0x3c600
movq %rax, %rdi
callq 0xf940
movq -0x88(%rbp), %rdi
movq %rax, -0xc0(%rbp)
movslq -0x6c(%rbp), %rsi
callq 0x3c600
movq %rax, %rdi
callq 0xf940
movq %rax, %rcx
movq -0xc0(%rbp), %rax
cmpq %rcx, %rax
jbe 0x14cb4
movq -0x88(%rbp), %rdi
movl -0x6c(%rbp), %esi
movl -0x4c(%rbp), %edx
callq 0x5fcf0
movb %al, -0xc1(%rbp)
jmp 0x14c20
movb -0xc1(%rbp), %al
testb $0x1, %al
jne 0x14c2f
jmp 0x14cb4
movq -0x88(%rbp), %rdi
movslq -0x6c(%rbp), %rsi
callq 0x3c600
movq %rax, %rdi
callq 0x60e90
movb %al, -0xc2(%rbp)
jmp 0x14c4f
movb -0xc2(%rbp), %al
testb $0x1, %al
jne 0x14c5b
jmp 0x14cb4
movq -0x88(%rbp), %rdi
movslq -0x4c(%rbp), %rsi
callq 0x3c600
movq -0x88(%rbp), %rdi
movq %rax, -0xd0(%rbp)
movslq -0x6c(%rbp), %rsi
callq 0x3c600
movq -0x88(%rbp), %rdi
movq -0xd0(%rbp), %rsi
movq %rax, %rdx
callq 0x13a00
testb $0x1, %al
jne 0x14c9e
jmp 0x14caf
movq -0x18(%rbp), %rdi
leaq -0x4c(%rbp), %rsi
callq 0xa8c0
jmp 0x14cad
jmp 0x14caf
jmp 0x14dab
movq -0x88(%rbp), %rdi
movslq -0x6c(%rbp), %rsi
callq 0x3c600
movq %rax, %rdi
callq 0xf940
movq -0x88(%rbp), %rdi
movq %rax, -0xd8(%rbp)
movslq -0x4c(%rbp), %rsi
callq 0x3c600
movq %rax, %rdi
callq 0xf940
movq %rax, %rcx
movq -0xd8(%rbp), %rax
cmpq %rcx, %rax
jbe 0x14da9
movq -0x88(%rbp), %rdi
movl -0x4c(%rbp), %esi
movl -0x6c(%rbp), %edx
callq 0x5fcf0
movb %al, -0xd9(%rbp)
jmp 0x14d18
movb -0xd9(%rbp), %al
testb $0x1, %al
jne 0x14d27
jmp 0x14da9
movq -0x88(%rbp), %rdi
movslq -0x4c(%rbp), %rsi
callq 0x3c600
movq %rax, %rdi
callq 0x60e90
movb %al, -0xda(%rbp)
jmp 0x14d47
movb -0xda(%rbp), %al
testb $0x1, %al
jne 0x14d53
jmp 0x14da9
movq -0x88(%rbp), %rdi
movslq -0x6c(%rbp), %rsi
callq 0x3c600
movq -0x88(%rbp), %rdi
movq %rax, -0xe8(%rbp)
movslq -0x4c(%rbp), %rsi
callq 0x3c600
movq -0x88(%rbp), %rdi
movq -0xe8(%rbp), %rsi
movq %rax, %rdx
callq 0x13a00
testb $0x1, %al
jne 0x14d96
jmp 0x14da7
movq -0x18(%rbp), %rdi
leaq -0x6c(%rbp), %rsi
callq 0xa8c0
jmp 0x14da5
jmp 0x14da7
jmp 0x14da9
jmp 0x14dab
jmp 0x14dad
jmp 0x14daf
leaq -0x60(%rbp), %rdi
callq 0xa930
jmp 0x148fe
jmp 0x14dbf
leaq -0x40(%rbp), %rdi
callq 0xa930
jmp 0x148b8
leaq -0x30(%rbp), %rdi
callq 0xab00
addq $0xf0, %rsp
popq %rbp
retq
movq -0x78(%rbp), %rdi
callq 0x4610
nopl (%rax,%rax)