// File: /workspace/github_c_makefile_star2_O0/carlitosmarin[P]Sistema-Ficheros-SOII/./src/ficheros_basico.c
// Function: liberar_bloques_inodo
int liberar_bloques_inodo (unsigned int inodo, unsigned int blogico) {	
	struct inodo in;
	in = leer_inodo(inodo);
	
	//Tipos de punteros
	unsigned int npdirectos = puntD; // Directos = 12
	unsigned int npindirectos0 = tamBloque/sizeof(unsigned int); //en 1024 bytes caben 256 punteros
	unsigned int npindirectos1 = npindirectos0*npindirectos0;
	unsigned int npindirectos2 = npindirectos1*npindirectos0;
	
	int ultBloque = in.tamBytesLogicos/tamBloque, blog = blogico, bAuxiliar; //Ultimo bloque con contenido
	if(ultBloque < blogico) return 0;
	int bucle, bucle2, bucle3;
	int punt[3] = {0,0,0}; //Indica el nivel de cada puntero
	
    unsigned int bufferNivel0[npindirectos0];
    unsigned int bufferNivel1[npindirectos0];
    unsigned int bufferNivel2[npindirectos0];
    unsigned char bufferAuxiliar[tamBloque];
    memset(bufferAuxiliar,0,tamBloque);
    
	int idx;
	
	if(blog < npdirectos) idx = -1; //Si esta en los punteros directos
	else if (blog < npdirectos+npindirectos0) { //Indirectos 0
		idx = 0;
		punt[idx] = blog - npdirectos;
	} else if (blog < npdirectos+npindirectos0+npindirectos1) {
		idx = 1;
		punt[idx-1] = (blog-(npdirectos+npindirectos0))%npindirectos0; //puntero nivel 0
		punt[idx] = (blog-(npdirectos+npindirectos0))/npindirectos0; //puntero nivel 1
	} else if (blog < npdirectos+npindirectos0+npindirectos1+npindirectos2) {
		idx = 2;
		punt[idx-2] = ((blog-(npdirectos+npindirectos0+npindirectos1))%npindirectos1)%npindirectos0; //puntero nivel 0
		punt[idx-1] = ((blog-(npdirectos+npindirectos0+npindirectos1))%npindirectos1)/npindirectos0; //puntero nivel 1
		punt[idx] = (blog-(npdirectos+npindirectos0+npindirectos1))/npindirectos1; //puntero nivel 2
	}
	
	if (idx == -1) {
		for(; blog <= ultBloque && blog < npdirectos; blog++) {
		//PUNTEROS DIRECTOS
		//El bloque logico es uno de los 12 primeros bloques logicos del inodo
			if(in.punterosDirectos[blog] > 0) {
				liberar_bloque(in.punterosDirectos[blog]);
				in.cantBloquesOcupados--;
				in.ctime = time(NULL);
			}
			in.punterosDirectos[blog] = 0; //0 el puntero actual
		}
		idx = 0; //Pasamos a punteros indirectos0
	} 
		//PUNTEROS INDIRECTOS 0
		//El bloque logico esta comprendido entre 12 y el 267 (12+256-1)
	if(idx = 0 && in.punterosIndirectos[idx] != 0) { //Si apunta a algo
		if(bread(in.punterosIndirectos[idx],bufferNivel0) < 0) return -1; //Leer el bloque de punteros de nivel 0
		for(bucle = punt[idx]; blog <= ultBloque && bucle < npindirectos0; bucle++, blog++) {
			if(bufferNivel0[bucle] != 0) {
				liberar_bloque(bufferNivel0[bucle]);
				in.cantBloquesOcupados--;
				in.ctime = time(NULL);
				bufferNivel0[bucle] = 0;
			}
		}
		if(strcmp((const char *)bufferNivel0,(const char *)bufferAuxiliar) == 0) { 
			//No quedan punteros ocupados en el bloque de nivel 0
			liberar_bloque(in.punterosIndirectos[idx]);
			in.punterosIndirectos[0] = 0;
			in.cantBloquesOcupados--;
			in.ctime = time(NULL);
		} else {
			if(bwrite(in.punterosIndirectos[idx],bufferNivel0) < 0) return -2; //Error BWRITE 
			//Escribimos el bloque modificado				
		}
		idx = 1; //Pasamos a punteros indirectos 1
	} else if(idx == 0) {
		blog = npindirectos0 + npdirectos;
		idx = 1;
	}
	//PUNTEROS INDIRECTOS 1
	//El bloque logico esta comprendido entre 268 y el 65.803 (12+256+256²-1)
	if(idx == 1 && in.punterosIndirectos[idx] != 0) {
		if(bread(in.punterosIndirectos[idx],bufferNivel1) < 0) return -1; //Leer el bloque de punteros de nivel 1
		for(bucle = punt[idx]; blog <= ultBloque && bucle < npindirectos0; bucle++){
		bAuxiliar = blog;
		if(bufferNivel1[bucle] != 0) {
			if(bread(bufferNivel1[bucle], bufferNivel0) < 0) return -1;
			for(bucle2 = punt[idx-1]; bAuxiliar <= ultBloque && bucle2 < npindirectos0; bucle2++, bAuxiliar++) {
				if(bufferNivel0[bucle2] != 0) {
					liberar_bloque(bufferNivel0[bucle2]);
					in.cantBloquesOcupados--;
					in.ctime = time(NULL);
					bufferNivel0[bucle2] = 0;
				}	
			}
			if(strcmp((const char *)bufferNivel0,(const char *)bufferAuxiliar) == 0) { 
				//No quedan punteros ocupados en el bloque de nivel 0
				liberar_bloque(bufferNivel1[bucle]);
				bufferNivel1[bucle] = 0;
				in.cantBloquesOcupados--;
				in.ctime = time(NULL);
			} else {
			if(bwrite(bufferNivel1[bucle],bufferNivel0) < 0) return -2; //Error BWRITE 
			//Escribimos el bloque modificado
			}
		} else blog += npindirectos0;
		
		punt[idx-1] = 0;
			
		}
		//Comprobamos si tenemos que liberar los punteros
		if(strcmp((const char *)bufferNivel1,(const char *)bufferAuxiliar) == 0) { 
			liberar_bloque(in.punterosIndirectos[idx]); 
			in.punterosIndirectos[idx] = 0;
			in.cantBloquesOcupados--;
			in.ctime = time(NULL);	
		} else {
			if(bwrite(in.punterosIndirectos[idx],bufferNivel1) < 0) return -2;
		}
		idx = 2; //Pasamos a punteros indirectos 2
	} else if (idx == 1) {
		blog = npdirectos+npindirectos0+npindirectos1;
		idx = 2;
	}
	
	//PUNTEROS INDIRECTOS 2
	//El bloque logico esta comprendido entre 65.804 y el 16.843.019 (12+256+256²+256³-1)
	if(idx == 2 && in.punterosIndirectos[idx] != 0) { 
		if(bread(in.punterosIndirectos[idx],bufferNivel2) < 0) return -1; //Leer el bloque de nivel 2
		for(bucle3 = punt[idx]; blog <= ultBloque && bucle3 < npindirectos0; bucle3++) {
			if(bufferNivel2[bucle3] != 0) {
				if(bread(bufferNivel2[bucle3],bufferNivel1) < 0) return -1;
				for(bucle2 = punt[idx-1]; blog <= ultBloque && bucle2 < npindirectos0; bucle2++) {
					bAuxiliar = blog;
					if(bufferNivel1[bucle2] != 0) {
						if(bread(bufferNivel1[bucle2], bufferNivel0) < 0) return -1;
						for(bucle = punt[idx-2]; bAuxiliar <= ultBloque && bucle < npindirectos0; bucle++, bAuxiliar++) {
							if(bufferNivel0[bucle] != 0) {
								liberar_bloque(bufferNivel0[bucle]);
								in.cantBloquesOcupados--;
								in.ctime = time(NULL);
								bufferNivel0[bucle] = 0;
							}	
						}
						//Comprobar si tenemos  que liberar punteros
						if(strcmp((const char *)bufferNivel0,(const char *)bufferAuxiliar) == 0) { 
							//No quedan punteros ocupados en el bloque de nivel 0
							liberar_bloque(bufferNivel1[bucle2]);
							bufferNivel1[bucle2] = 0;
							in.cantBloquesOcupados--;
							in.ctime = time(NULL);
						} else {
							if(bwrite(bufferNivel1[bucle2],bufferNivel0) < 0) return -2; 
						}	
					}
					blog += npindirectos0;
					punt[idx-2] = 0;
				}
				//Comprobar si tenemos  que liberar punteros
				if(strcmp((const char *)bufferNivel0,(const char *)bufferAuxiliar) == 0) { 
					//No quedan punteros ocupados en el bloque de nivel 0
					liberar_bloque(bufferNivel2[bucle3]);
					bufferNivel2[bucle3] = 0;
					in.cantBloquesOcupados--;
					in.ctime = time(NULL);
				} else {
					if(bwrite(bufferNivel2[bucle3],bufferNivel1) < 0) return -2; 
				}	
			}
			punt[idx-1] = 0;
		}
		//Comprobar si tenemos  que liberar punteros
		if(strcmp((const char *)bufferNivel2,(const char *)bufferAuxiliar) == 0) { 
			//No quedan punteros ocupados en el bloque de nivel 0
			liberar_bloque(in.punterosIndirectos[idx]);
			in.punterosIndirectos[idx] = 0;
			in.cantBloquesOcupados--;
			in.ctime = time(NULL);
		} else {
			if(bwrite(in.punterosIndirectos[idx-1],bufferNivel1) < 0) return -2; 
		}
	}		
		
	if(escribir_inodo(in, inodo) < 0) return -3; //Escribimos el inodo modificado
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x5a0, %rsp            # imm = 0x5A0
movl %edi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movl -0x8(%rbp), %esi
leaq -0x110(%rbp), %rdi
callq 0x1f20
leaq -0x90(%rbp), %rdi
leaq -0x110(%rbp), %rsi
movl $0x80, %edx
callq 0x1120
movl $0xc, -0x114(%rbp)
movl $0x100, -0x118(%rbp)    # imm = 0x100
movl -0x118(%rbp), %eax
imull -0x118(%rbp), %eax
movl %eax, -0x11c(%rbp)
movl -0x11c(%rbp), %eax
imull -0x118(%rbp), %eax
movl %eax, -0x120(%rbp)
movl -0x6c(%rbp), %eax
shrl $0xa, %eax
movl %eax, -0x124(%rbp)
movl -0xc(%rbp), %eax
movl %eax, -0x128(%rbp)
movl -0x124(%rbp), %eax
cmpl -0xc(%rbp), %eax
jae 0x23ae
movl $0x0, -0x4(%rbp)
jmp 0x30f7
movl $0x0, -0x140(%rbp)
movq $0x0, -0x148(%rbp)
movl -0x118(%rbp), %eax
movq %rsp, %rcx
movq %rcx, -0x150(%rbp)
leaq 0xf(,%rax,4), %rdx
andq $-0x10, %rdx
movq %rsp, %rcx
subq %rdx, %rcx
movq %rcx, -0x590(%rbp)
movq %rcx, %rsp
movq %rax, -0x158(%rbp)
movl -0x118(%rbp), %eax
leaq 0xf(,%rax,4), %rdx
andq $-0x10, %rdx
movq %rsp, %rcx
subq %rdx, %rcx
movq %rcx, -0x588(%rbp)
movq %rcx, %rsp
movq %rax, -0x160(%rbp)
movl -0x118(%rbp), %eax
leaq 0xf(,%rax,4), %rdx
andq $-0x10, %rdx
movq %rsp, %rcx
subq %rdx, %rcx
movq %rcx, -0x580(%rbp)
movq %rcx, %rsp
movq %rax, -0x168(%rbp)
leaq -0x570(%rbp), %rdi
xorl %esi, %esi
movl $0x400, %edx            # imm = 0x400
callq 0x10b0
movl -0x128(%rbp), %eax
cmpl -0x114(%rbp), %eax
jae 0x2478
movl $0xffffffff, -0x574(%rbp) # imm = 0xFFFFFFFF
jmp 0x2622
movl -0x128(%rbp), %eax
movl -0x114(%rbp), %ecx
addl -0x118(%rbp), %ecx
cmpl %ecx, %eax
jae 0x24b7
movl $0x0, -0x574(%rbp)
movl -0x128(%rbp), %ecx
subl -0x114(%rbp), %ecx
movslq -0x574(%rbp), %rax
movl %ecx, -0x148(%rbp,%rax,4)
jmp 0x2620
movl -0x128(%rbp), %eax
movl -0x114(%rbp), %ecx
addl -0x118(%rbp), %ecx
addl -0x11c(%rbp), %ecx
cmpl %ecx, %eax
jae 0x253c
movl $0x1, -0x574(%rbp)
movl -0x128(%rbp), %eax
movl -0x114(%rbp), %ecx
addl -0x118(%rbp), %ecx
subl %ecx, %eax
xorl %edx, %edx
divl -0x118(%rbp)
movl -0x574(%rbp), %eax
subl $0x1, %eax
cltq
movl %edx, -0x148(%rbp,%rax,4)
movl -0x128(%rbp), %eax
movl -0x114(%rbp), %ecx
addl -0x118(%rbp), %ecx
subl %ecx, %eax
xorl %edx, %edx
divl -0x118(%rbp)
movl %eax, %ecx
movslq -0x574(%rbp), %rax
movl %ecx, -0x148(%rbp,%rax,4)
jmp 0x261e
movl -0x128(%rbp), %eax
movl -0x114(%rbp), %ecx
addl -0x118(%rbp), %ecx
addl -0x11c(%rbp), %ecx
addl -0x120(%rbp), %ecx
cmpl %ecx, %eax
jae 0x261c
movl $0x2, -0x574(%rbp)
movl -0x128(%rbp), %eax
movl -0x114(%rbp), %ecx
addl -0x118(%rbp), %ecx
addl -0x11c(%rbp), %ecx
subl %ecx, %eax
xorl %edx, %edx
divl -0x11c(%rbp)
movl %edx, %eax
xorl %edx, %edx
divl -0x118(%rbp)
movl -0x574(%rbp), %eax
subl $0x2, %eax
cltq
movl %edx, -0x148(%rbp,%rax,4)
movl -0x128(%rbp), %eax
movl -0x114(%rbp), %ecx
addl -0x118(%rbp), %ecx
addl -0x11c(%rbp), %ecx
subl %ecx, %eax
xorl %edx, %edx
divl -0x11c(%rbp)
movl %edx, %eax
xorl %edx, %edx
divl -0x118(%rbp)
movl %eax, %ecx
movl -0x574(%rbp), %eax
subl $0x1, %eax
cltq
movl %ecx, -0x148(%rbp,%rax,4)
movl -0x128(%rbp), %eax
movl -0x114(%rbp), %ecx
addl -0x118(%rbp), %ecx
addl -0x11c(%rbp), %ecx
subl %ecx, %eax
xorl %edx, %edx
divl -0x11c(%rbp)
movl %eax, %ecx
movslq -0x574(%rbp), %rax
movl %ecx, -0x148(%rbp,%rax,4)
jmp 0x261e
jmp 0x2620
jmp 0x2622
cmpl $-0x1, -0x574(%rbp)
jne 0x26c9
jmp 0x2631
movl -0x128(%rbp), %ecx
xorl %eax, %eax
cmpl -0x124(%rbp), %ecx
movb %al, -0x591(%rbp)
jg 0x265c
movl -0x128(%rbp), %eax
cmpl -0x114(%rbp), %eax
setb %al
movb %al, -0x591(%rbp)
movb -0x591(%rbp), %al
testb $0x1, %al
jne 0x2668
jmp 0x26bf
movslq -0x128(%rbp), %rax
cmpl $0x0, -0x64(%rbp,%rax,4)
jbe 0x269c
movslq -0x128(%rbp), %rax
movl -0x64(%rbp,%rax,4), %edi
callq 0x1dc0
movl -0x68(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x68(%rbp)
xorl %eax, %eax
movl %eax, %edi
callq 0x1130
movq %rax, -0x78(%rbp)
movslq -0x128(%rbp), %rax
movl $0x0, -0x64(%rbp,%rax,4)
movl -0x128(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x128(%rbp)
jmp 0x2631
movl $0x0, -0x574(%rbp)
movl $0x0, -0x574(%rbp)
xorl %eax, %eax
testb $0x1, %al
jne 0x26de
jmp 0x285f
movq -0x590(%rbp), %rsi
movslq -0x574(%rbp), %rax
movl -0x34(%rbp,%rax,4), %edi
callq 0x1380
cmpl $0x0, %eax
jge 0x2710
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl $0x1, -0x578(%rbp)
jmp 0x30ed
movslq -0x574(%rbp), %rax
movl -0x148(%rbp,%rax,4), %eax
movl %eax, -0x130(%rbp)
movl -0x128(%rbp), %ecx
xorl %eax, %eax
cmpl -0x124(%rbp), %ecx
movb %al, -0x592(%rbp)
jg 0x274f
movl -0x130(%rbp), %eax
cmpl -0x118(%rbp), %eax
setb %al
movb %al, -0x592(%rbp)
movb -0x592(%rbp), %al
testb $0x1, %al
jne 0x275b
jmp 0x27d8
movq -0x590(%rbp), %rax
movslq -0x130(%rbp), %rcx
cmpl $0x0, (%rax,%rcx,4)
je 0x27b3
movq -0x590(%rbp), %rax
movslq -0x130(%rbp), %rcx
movl (%rax,%rcx,4), %edi
callq 0x1dc0
movl -0x68(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x68(%rbp)
xorl %eax, %eax
movl %eax, %edi
callq 0x1130
movq %rax, %rcx
movq -0x590(%rbp), %rax
movq %rcx, -0x78(%rbp)
movslq -0x130(%rbp), %rcx
movl $0x0, (%rax,%rcx,4)
jmp 0x27b5
movl -0x130(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x130(%rbp)
movl -0x128(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x128(%rbp)
jmp 0x2724
movq -0x590(%rbp), %rdi
leaq -0x570(%rbp), %rsi
callq 0x1100
cmpl $0x0, %eax
jne 0x281f
movslq -0x574(%rbp), %rax
movl -0x34(%rbp,%rax,4), %edi
callq 0x1dc0
movl $0x0, -0x34(%rbp)
movl -0x68(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x68(%rbp)
xorl %eax, %eax
movl %eax, %edi
callq 0x1130
movq %rax, -0x78(%rbp)
jmp 0x2853
movq -0x590(%rbp), %rsi
movslq -0x574(%rbp), %rax
movl -0x34(%rbp,%rax,4), %edi
callq 0x1320
cmpl $0x0, %eax
jge 0x2851
movl $0xfffffffe, -0x4(%rbp) # imm = 0xFFFFFFFE
movl $0x1, -0x578(%rbp)
jmp 0x30ed
jmp 0x2853
movl $0x1, -0x574(%rbp)
jmp 0x2886
cmpl $0x0, -0x574(%rbp)
jne 0x2884
movl -0x118(%rbp), %eax
addl -0x114(%rbp), %eax
movl %eax, -0x128(%rbp)
movl $0x1, -0x574(%rbp)
jmp 0x2886
cmpl $0x1, -0x574(%rbp)
jne 0x2baf
movslq -0x574(%rbp), %rax
cmpl $0x0, -0x34(%rbp,%rax,4)
je 0x2baf
movq -0x588(%rbp), %rsi
movslq -0x574(%rbp), %rax
movl -0x34(%rbp,%rax,4), %edi
callq 0x1380
cmpl $0x0, %eax
jge 0x28d7
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl $0x1, -0x578(%rbp)
jmp 0x30ed
movslq -0x574(%rbp), %rax
movl -0x148(%rbp,%rax,4), %eax
movl %eax, -0x130(%rbp)
movl -0x128(%rbp), %ecx
xorl %eax, %eax
cmpl -0x124(%rbp), %ecx
movb %al, -0x593(%rbp)
jg 0x2916
movl -0x130(%rbp), %eax
cmpl -0x118(%rbp), %eax
setb %al
movb %al, -0x593(%rbp)
movb -0x593(%rbp), %al
testb $0x1, %al
jne 0x2925
jmp 0x2b20
movq -0x588(%rbp), %rax
movl -0x128(%rbp), %ecx
movl %ecx, -0x12c(%rbp)
movslq -0x130(%rbp), %rcx
cmpl $0x0, (%rax,%rcx,4)
je 0x2ae4
movq -0x590(%rbp), %rsi
movq -0x588(%rbp), %rax
movslq -0x130(%rbp), %rcx
movl (%rax,%rcx,4), %edi
callq 0x1380
cmpl $0x0, %eax
jge 0x2981
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl $0x1, -0x578(%rbp)
jmp 0x30ed
movl -0x574(%rbp), %eax
subl $0x1, %eax
cltq
movl -0x148(%rbp,%rax,4), %eax
movl %eax, -0x134(%rbp)
movl -0x12c(%rbp), %ecx
xorl %eax, %eax
cmpl -0x124(%rbp), %ecx
movb %al, -0x594(%rbp)
jg 0x29c4
movl -0x134(%rbp), %eax
cmpl -0x118(%rbp), %eax
setb %al
movb %al, -0x594(%rbp)
movb -0x594(%rbp), %al
testb $0x1, %al
jne 0x29d0
jmp 0x2a4d
movq -0x590(%rbp), %rax
movslq -0x134(%rbp), %rcx
cmpl $0x0, (%rax,%rcx,4)
je 0x2a28
movq -0x590(%rbp), %rax
movslq -0x134(%rbp), %rcx
movl (%rax,%rcx,4), %edi
callq 0x1dc0
movl -0x68(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x68(%rbp)
xorl %eax, %eax
movl %eax, %edi
callq 0x1130
movq %rax, %rcx
movq -0x590(%rbp), %rax
movq %rcx, -0x78(%rbp)
movslq -0x134(%rbp), %rcx
movl $0x0, (%rax,%rcx,4)
jmp 0x2a2a
movl -0x134(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x134(%rbp)
movl -0x12c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x12c(%rbp)
jmp 0x2999
movq -0x590(%rbp), %rdi
leaq -0x570(%rbp), %rsi
callq 0x1100
cmpl $0x0, %eax
jne 0x2aa8
movq -0x588(%rbp), %rax
movslq -0x130(%rbp), %rcx
movl (%rax,%rcx,4), %edi
callq 0x1dc0
movq -0x588(%rbp), %rax
movslq -0x130(%rbp), %rcx
movl $0x0, (%rax,%rcx,4)
movl -0x68(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x68(%rbp)
xorl %eax, %eax
movl %eax, %edi
callq 0x1130
movq %rax, -0x78(%rbp)
jmp 0x2ae2
movq -0x590(%rbp), %rsi
movq -0x588(%rbp), %rax
movslq -0x130(%rbp), %rcx
movl (%rax,%rcx,4), %edi
callq 0x1320
cmpl $0x0, %eax
jge 0x2ae0
movl $0xfffffffe, -0x4(%rbp) # imm = 0xFFFFFFFE
movl $0x1, -0x578(%rbp)
jmp 0x30ed
jmp 0x2ae2
jmp 0x2af6
movl -0x118(%rbp), %eax
addl -0x128(%rbp), %eax
movl %eax, -0x128(%rbp)
movl -0x574(%rbp), %eax
subl $0x1, %eax
cltq
movl $0x0, -0x148(%rbp,%rax,4)
movl -0x130(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x130(%rbp)
jmp 0x28eb
movq -0x588(%rbp), %rdi
leaq -0x570(%rbp), %rsi
callq 0x1100
cmpl $0x0, %eax
jne 0x2b6f
movslq -0x574(%rbp), %rax
movl -0x34(%rbp,%rax,4), %edi
callq 0x1dc0
movslq -0x574(%rbp), %rax
movl $0x0, -0x34(%rbp,%rax,4)
movl -0x68(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x68(%rbp)
xorl %eax, %eax
movl %eax, %edi
callq 0x1130
movq %rax, -0x78(%rbp)
jmp 0x2ba3
movq -0x588(%rbp), %rsi
movslq -0x574(%rbp), %rax
movl -0x34(%rbp,%rax,4), %edi
callq 0x1320
cmpl $0x0, %eax
jge 0x2ba1
movl $0xfffffffe, -0x4(%rbp) # imm = 0xFFFFFFFE
movl $0x1, -0x578(%rbp)
jmp 0x30ed
jmp 0x2ba3
movl $0x2, -0x574(%rbp)
jmp 0x2bdc
cmpl $0x1, -0x574(%rbp)
jne 0x2bda
movl -0x114(%rbp), %eax
addl -0x118(%rbp), %eax
addl -0x11c(%rbp), %eax
movl %eax, -0x128(%rbp)
movl $0x2, -0x574(%rbp)
jmp 0x2bdc
cmpl $0x2, -0x574(%rbp)
jne 0x3062
movslq -0x574(%rbp), %rax
cmpl $0x0, -0x34(%rbp,%rax,4)
je 0x3062
movq -0x580(%rbp), %rsi
movslq -0x574(%rbp), %rax
movl -0x34(%rbp,%rax,4), %edi
callq 0x1380
cmpl $0x0, %eax
jge 0x2c2d
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl $0x1, -0x578(%rbp)
jmp 0x30ed
movslq -0x574(%rbp), %rax
movl -0x148(%rbp,%rax,4), %eax
movl %eax, -0x138(%rbp)
movl -0x128(%rbp), %ecx
xorl %eax, %eax
cmpl -0x124(%rbp), %ecx
movb %al, -0x595(%rbp)
jg 0x2c6c
movl -0x138(%rbp), %eax
cmpl -0x118(%rbp), %eax
setb %al
movb %al, -0x595(%rbp)
movb -0x595(%rbp), %al
testb $0x1, %al
jne 0x2c7b
jmp 0x2fd9
movq -0x580(%rbp), %rax
movslq -0x138(%rbp), %rcx
cmpl $0x0, (%rax,%rcx,4)
je 0x2faf
movq -0x588(%rbp), %rsi
movq -0x580(%rbp), %rax
movslq -0x138(%rbp), %rcx
movl (%rax,%rcx,4), %edi
callq 0x1380
cmpl $0x0, %eax
jge 0x2ccb
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl $0x1, -0x578(%rbp)
jmp 0x30ed
movl -0x574(%rbp), %eax
subl $0x1, %eax
cltq
movl -0x148(%rbp,%rax,4), %eax
movl %eax, -0x134(%rbp)
movl -0x128(%rbp), %ecx
xorl %eax, %eax
cmpl -0x124(%rbp), %ecx
movb %al, -0x596(%rbp)
jg 0x2d0e
movl -0x134(%rbp), %eax
cmpl -0x118(%rbp), %eax
setb %al
movb %al, -0x596(%rbp)
movb -0x596(%rbp), %al
testb $0x1, %al
jne 0x2d1d
jmp 0x2f18
movq -0x588(%rbp), %rax
movl -0x128(%rbp), %ecx
movl %ecx, -0x12c(%rbp)
movslq -0x134(%rbp), %rcx
cmpl $0x0, (%rax,%rcx,4)
je 0x2edc
movq -0x590(%rbp), %rsi
movq -0x588(%rbp), %rax
movslq -0x134(%rbp), %rcx
movl (%rax,%rcx,4), %edi
callq 0x1380
cmpl $0x0, %eax
jge 0x2d79
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl $0x1, -0x578(%rbp)
jmp 0x30ed
movl -0x574(%rbp), %eax
subl $0x2, %eax
cltq
movl -0x148(%rbp,%rax,4), %eax
movl %eax, -0x130(%rbp)
movl -0x12c(%rbp), %ecx
xorl %eax, %eax
cmpl -0x124(%rbp), %ecx
movb %al, -0x597(%rbp)
jg 0x2dbc
movl -0x130(%rbp), %eax
cmpl -0x118(%rbp), %eax
setb %al
movb %al, -0x597(%rbp)
movb -0x597(%rbp), %al
testb $0x1, %al
jne 0x2dc8
jmp 0x2e45
movq -0x590(%rbp), %rax
movslq -0x130(%rbp), %rcx
cmpl $0x0, (%rax,%rcx,4)
je 0x2e20
movq -0x590(%rbp), %rax
movslq -0x130(%rbp), %rcx
movl (%rax,%rcx,4), %edi
callq 0x1dc0
movl -0x68(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x68(%rbp)
xorl %eax, %eax
movl %eax, %edi
callq 0x1130
movq %rax, %rcx
movq -0x590(%rbp), %rax
movq %rcx, -0x78(%rbp)
movslq -0x130(%rbp), %rcx
movl $0x0, (%rax,%rcx,4)
jmp 0x2e22
movl -0x130(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x130(%rbp)
movl -0x12c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x12c(%rbp)
jmp 0x2d91
movq -0x590(%rbp), %rdi
leaq -0x570(%rbp), %rsi
callq 0x1100
cmpl $0x0, %eax
jne 0x2ea0
movq -0x588(%rbp), %rax
movslq -0x134(%rbp), %rcx
movl (%rax,%rcx,4), %edi
callq 0x1dc0
movq -0x588(%rbp), %rax
movslq -0x134(%rbp), %rcx
movl $0x0, (%rax,%rcx,4)
movl -0x68(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x68(%rbp)
xorl %eax, %eax
movl %eax, %edi
callq 0x1130
movq %rax, -0x78(%rbp)
jmp 0x2eda
movq -0x590(%rbp), %rsi
movq -0x588(%rbp), %rax
movslq -0x134(%rbp), %rcx
movl (%rax,%rcx,4), %edi
callq 0x1320
cmpl $0x0, %eax
jge 0x2ed8
movl $0xfffffffe, -0x4(%rbp) # imm = 0xFFFFFFFE
movl $0x1, -0x578(%rbp)
jmp 0x30ed
jmp 0x2eda
jmp 0x2edc
movl -0x118(%rbp), %eax
addl -0x128(%rbp), %eax
movl %eax, -0x128(%rbp)
movl -0x574(%rbp), %eax
subl $0x2, %eax
cltq
movl $0x0, -0x148(%rbp,%rax,4)
movl -0x134(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x134(%rbp)
jmp 0x2ce3
movq -0x590(%rbp), %rdi
leaq -0x570(%rbp), %rsi
callq 0x1100
cmpl $0x0, %eax
jne 0x2f73
movq -0x580(%rbp), %rax
movslq -0x138(%rbp), %rcx
movl (%rax,%rcx,4), %edi
callq 0x1dc0
movq -0x580(%rbp), %rax
movslq -0x138(%rbp), %rcx
movl $0x0, (%rax,%rcx,4)
movl -0x68(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x68(%rbp)
xorl %eax, %eax
movl %eax, %edi
callq 0x1130
movq %rax, -0x78(%rbp)
jmp 0x2fad
movq -0x588(%rbp), %rsi
movq -0x580(%rbp), %rax
movslq -0x138(%rbp), %rcx
movl (%rax,%rcx,4), %edi
callq 0x1320
cmpl $0x0, %eax
jge 0x2fab
movl $0xfffffffe, -0x4(%rbp) # imm = 0xFFFFFFFE
movl $0x1, -0x578(%rbp)
jmp 0x30ed
jmp 0x2fad
jmp 0x2faf
movl -0x574(%rbp), %eax
subl $0x1, %eax
cltq
movl $0x0, -0x148(%rbp,%rax,4)
movl -0x138(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x138(%rbp)
jmp 0x2c41
movq -0x580(%rbp), %rdi
leaq -0x570(%rbp), %rsi
callq 0x1100
cmpl $0x0, %eax
jne 0x3028
movslq -0x574(%rbp), %rax
movl -0x34(%rbp,%rax,4), %edi
callq 0x1dc0
movslq -0x574(%rbp), %rax
movl $0x0, -0x34(%rbp,%rax,4)
movl -0x68(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x68(%rbp)
xorl %eax, %eax
movl %eax, %edi
callq 0x1130
movq %rax, -0x78(%rbp)
jmp 0x3060
movq -0x588(%rbp), %rsi
movl -0x574(%rbp), %eax
subl $0x1, %eax
cltq
movl -0x34(%rbp,%rax,4), %edi
callq 0x1320
cmpl $0x0, %eax
jge 0x305e
movl $0xfffffffe, -0x4(%rbp) # imm = 0xFFFFFFFE
movl $0x1, -0x578(%rbp)
jmp 0x30ed
jmp 0x3060
jmp 0x3062
movl -0x8(%rbp), %edi
subq $0x80, %rsp
movups -0x20(%rbp), %xmm0
movq %rsp, %rax
movq %rax, -0x5a0(%rbp)
movups %xmm0, 0x70(%rax)
movups -0x30(%rbp), %xmm0
movups %xmm0, 0x60(%rax)
movups -0x40(%rbp), %xmm0
movups %xmm0, 0x50(%rax)
movups -0x50(%rbp), %xmm0
movups %xmm0, 0x40(%rax)
movups -0x90(%rbp), %xmm0
movups -0x80(%rbp), %xmm1
movups -0x70(%rbp), %xmm2
movups -0x60(%rbp), %xmm3
movups %xmm3, 0x30(%rax)
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0x1e40
addq $0x80, %rsp
cmpl $0x0, %eax
jge 0x30dc
movl $0xfffffffd, -0x4(%rbp) # imm = 0xFFFFFFFD
movl $0x1, -0x578(%rbp)
jmp 0x30ed
movl $0x0, -0x4(%rbp)
movl $0x1, -0x578(%rbp)
movq -0x150(%rbp), %rax
movq %rax, %rsp
movl -0x4(%rbp), %eax
movq %rbp, %rsp
popq %rbp
retq
nop