// File: /workspace/github_c_makefile_star2_O0/cbouilla[P]AES-attacks-finder/Solver.c
// Function: DeleteVariable
Solver DeleteVariable(int x, Solver B, SysEqLin E)
{
	if (B==NULL) return NULL;
	if (SearchElement(x,B->var,B->Nvar)==-1) return copySolver(B);
	if (B->type == 0) return NULL;
	Solver f2 = DeleteVariable(x,B->fils2,E);
	if (f2==NULL) return DeleteVariable(x,B->fils1,E);
	Solver f1;
	if (B->type==1) f1 = DeleteVariable(x,B->fils1,E);
	else
	{
		SysEqLin F = EsachantX(B->fils2->var,B->fils2->Nvar,E);
		f1 = DeleteVariable(x,B->fils1,F);
		freeSysEq(F);
	}
	if (f1 == NULL) return f2;
	if (B->type==2)
	{
		Solver result = NewSolver();
		result->var=DifferenceListesTriees(B->var,B->Nvar,&x,1,&result->Nvar);
		result->temps=max(f2->temps,max(0,f2->sortie)+f1->temps);
		result->memoire=max(f1->memoire,f2->memoire);
		result->sortie=max(0,f2->sortie)+max(0,f1->sortie);
		result->type=2;
		result->fils1 = f1;
		result->fils2 = f2;
		return result;
	}
	else
	{
		Solver result = UnionSolver(f1,f2,E);
		freeSolver(f1);
		freeSolver(f2);
		return result;
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movl %edi, -0xc(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
cmpq $0x0, -0x18(%rbp)
jne 0xb6d7
movq $0x0, -0x8(%rbp)
jmp 0xb96d
movl -0xc(%rbp), %edi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
movq -0x18(%rbp), %rax
movl 0x8(%rax), %edx
callq 0x2b60
cmpl $-0x1, %eax
jne 0xb704
movq -0x18(%rbp), %rdi
callq 0x9380
movq %rax, -0x8(%rbp)
jmp 0xb96d
movq -0x18(%rbp), %rax
movsbl 0x18(%rax), %eax
cmpl $0x0, %eax
jne 0xb71e
movq $0x0, -0x8(%rbp)
jmp 0xb96d
movl -0xc(%rbp), %edi
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rsi
movq -0x20(%rbp), %rdx
callq 0xb6b0
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0xb75a
movl -0xc(%rbp), %edi
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rsi
movq -0x20(%rbp), %rdx
callq 0xb6b0
movq %rax, -0x8(%rbp)
jmp 0xb96d
movq -0x18(%rbp), %rax
movsbl 0x18(%rax), %eax
cmpl $0x1, %eax
jne 0xb781
movl -0xc(%rbp), %edi
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rsi
movq -0x20(%rbp), %rdx
callq 0xb6b0
movq %rax, -0x30(%rbp)
jmp 0xb7c5
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rax
movq (%rax), %rdi
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rax
movl 0x8(%rax), %esi
movq -0x20(%rbp), %rdx
callq 0x11aa0
movq %rax, -0x38(%rbp)
movl -0xc(%rbp), %edi
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rsi
movq -0x38(%rbp), %rdx
callq 0xb6b0
movq %rax, -0x30(%rbp)
movq -0x38(%rbp), %rdi
callq 0x12220
cmpq $0x0, -0x30(%rbp)
jne 0xb7d9
movq -0x28(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xb96d
movq -0x18(%rbp), %rax
movsbl 0x18(%rax), %eax
cmpl $0x2, %eax
jne 0xb93e
callq 0x9280
movq %rax, -0x40(%rbp)
movq -0x18(%rbp), %rax
movq (%rax), %rdi
movq -0x18(%rbp), %rax
movl 0x8(%rax), %esi
movq -0x40(%rbp), %r8
addq $0x8, %r8
leaq -0xc(%rbp), %rdx
movl $0x1, %ecx
callq 0x2a20
movq %rax, %rcx
movq -0x40(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0x4c(%rbp)
movq -0x28(%rbp), %rcx
xorl %eax, %eax
cmpl 0x14(%rcx), %eax
jle 0xb83d
xorl %eax, %eax
movl %eax, -0x50(%rbp)
jmp 0xb847
movq -0x28(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0x50(%rbp)
movl -0x4c(%rbp), %eax
movl -0x50(%rbp), %ecx
movq -0x30(%rbp), %rdx
addl 0xc(%rdx), %ecx
cmpl %ecx, %eax
jle 0xb864
movq -0x28(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0x54(%rbp)
jmp 0xb88d
movq -0x28(%rbp), %rcx
xorl %eax, %eax
cmpl 0x14(%rcx), %eax
jle 0xb876
xorl %eax, %eax
movl %eax, -0x58(%rbp)
jmp 0xb880
movq -0x28(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0x58(%rbp)
movl -0x58(%rbp), %eax
movq -0x30(%rbp), %rcx
addl 0xc(%rcx), %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %ecx
movq -0x40(%rbp), %rax
movl %ecx, 0xc(%rax)
movq -0x30(%rbp), %rax
movl 0x10(%rax), %eax
movq -0x28(%rbp), %rcx
cmpl 0x10(%rcx), %eax
jle 0xb8b3
movq -0x30(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0x5c(%rbp)
jmp 0xb8bd
movq -0x28(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0x5c(%rbp)
movl -0x5c(%rbp), %ecx
movq -0x40(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0x28(%rbp), %rcx
xorl %eax, %eax
cmpl 0x14(%rcx), %eax
jle 0xb8d9
xorl %eax, %eax
movl %eax, -0x60(%rbp)
jmp 0xb8e3
movq -0x28(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0x60(%rbp)
movl -0x60(%rbp), %eax
movl %eax, -0x64(%rbp)
movq -0x30(%rbp), %rcx
xorl %eax, %eax
cmpl 0x14(%rcx), %eax
jle 0xb8fb
xorl %eax, %eax
movl %eax, -0x68(%rbp)
jmp 0xb905
movq -0x30(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0x68(%rbp)
movl -0x64(%rbp), %ecx
movl -0x68(%rbp), %eax
addl %eax, %ecx
movq -0x40(%rbp), %rax
movl %ecx, 0x14(%rax)
movq -0x40(%rbp), %rax
movb $0x2, 0x18(%rax)
movq -0x30(%rbp), %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x28(%rbp), %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x40(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xb96d
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0xaa60
movq %rax, -0x48(%rbp)
movq -0x30(%rbp), %rdi
callq 0x93b0
movq -0x28(%rbp), %rdi
callq 0x93b0
movq -0x48(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x70, %rsp
popq %rbp
retq
nopw (%rax,%rax)