// File: /workspace/github_c_makefile_star2_O0/rchiossi[P]dexterity/lib/dex_offset.c
// Function: dx_shift_offset
void dx_shift_offset(Dex* dx, uint32_t base, int32_t delta) {
  unsigned int i;

  dx_shift *shift, *prev;

  if (dx == NULL) return;

  shift = (dx_shift*) malloc_s(sizeof(dx_shift));

  shift->base = base;
  shift->delta = delta;
  shift->next = NULL;
  
  dxo_header(dx->header,shift);
  dxo_maplist(dx->map_list,shift);

  for (i=0; i<dx->header->string_ids_size; i++)
    dxo_stringid(dx->string_ids[i],shift);
  
  for (i=0; i<dx->header->type_ids_size; i++)
    dxo_typeid(dx->type_ids[i],shift);
  
  for (i=0; i<dx->header->proto_ids_size; i++)
    dxo_protoid(dx->proto_ids[i],shift);
  
  for (i=0; i<dx->header->field_ids_size; i++)
    dxo_fieldid(dx->field_ids[i],shift);
  
  for (i=0; i<dx->header->method_ids_size; i++)
    dxo_methodid(dx->method_ids[i],shift);
  
  for (i=0; i<dx->header->class_defs_size; i++)
    dxo_classdef(dx->class_defs[i],shift);
    
  //Data
  for (i=0; i<dx->meta.string_data_list_size; i++)
    dxo_stringdata(dx->string_data_list[i],shift);
  
  for (i=0; i<dx->meta.type_lists_size; i++)
    dxo_typelist(dx->type_lists[i],shift);
  
  for (i=0; i<dx->meta.an_directories_size; i++)
    dxo_annotationdirectoryitem(dx->an_directories[i],shift);
  
  for (i=0; i<dx->meta.class_data_size; i++)
    dxo_classdata(dx->class_data[i],shift);
  
  for (i=0; i<dx->meta.encoded_arrays_size; i++)
    dxo_encodedarray(dx->encoded_arrays[i],shift);
  
  for (i=0; i<dx->meta.code_list_size; i++)
    dxo_codeitem(dx->code_list[i],shift);
  
  for (i=0; i<dx->meta.debug_info_list_size; i++)
    dxo_debuginfo(dx->debug_info_list[i],shift);
  
  for (i=0; i<dx->meta.an_set_size; i++)
    dxo_annotationsetitem(dx->an_set[i],shift);
  
  for (i=0; i<dx->meta.an_set_ref_lists_size; i++)
    dxo_annotationsetreflist(dx->an_set_ref_lists[i],shift);
  
  for (i=0; i<dx->meta.annotations_size; i++)
    dxo_annotationitem(dx->annotations[i],shift);  

  prev = shift;
  shift = shift->next;
  free(prev);

  //ULEB expansion
  while (shift != NULL) {
    printf("delta1 = %d\n",shift->delta);
    dx->header->file_size += shift->delta;

    if (shift->base > dx->header->data_off)
      dx->header->data_size += shift->delta;

    dx_shift_offset(dx,shift->base,shift->delta);

    prev = shift;
    shift = shift->next;
    free(prev);
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movl %edx, -0x10(%rbp)
cmpq $0x0, -0x8(%rbp)
jne 0xc4ee
jmp 0xc98b
movl $0x10, %edi
callq 0x4750
movq %rax, -0x20(%rbp)
movl -0xc(%rbp), %ecx
movq -0x20(%rbp), %rax
movl %ecx, (%rax)
movl -0x10(%rbp), %ecx
movq -0x20(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x20(%rbp), %rax
movq $0x0, 0x8(%rax)
movq -0x8(%rbp), %rax
movq (%rax), %rdi
movq -0x20(%rbp), %rsi
callq 0x4430
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x20(%rbp), %rsi
callq 0x46d0
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
movq (%rcx), %rcx
cmpl 0x40(%rcx), %eax
jae 0xc575
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x47a0
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xc543
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
movq (%rcx), %rcx
cmpl 0x48(%rcx), %eax
jae 0xc5ae
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x43c0
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xc57c
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
movq (%rcx), %rcx
cmpl 0x50(%rcx), %eax
jae 0xc5e7
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x41d0
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xc5b5
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
movq (%rcx), %rcx
cmpl 0x58(%rcx), %eax
jae 0xc620
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x4110
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xc5ee
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
movq (%rcx), %rcx
cmpl 0x60(%rcx), %eax
jae 0xc659
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x4060
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xc627
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
movq (%rcx), %rcx
cmpl 0x68(%rcx), %eax
jae 0xc692
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x40e0
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xc660
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpq 0xc8(%rcx), %rax
jae 0xc6cc
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x4560
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xc699
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpq 0xd8(%rcx), %rax
jae 0xc706
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x4420
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xc6d3
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpq 0xe8(%rcx), %rax
jae 0xc740
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x4860
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xc70d
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpq 0xf8(%rcx), %rax
jae 0xc77a
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x47e0
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xc747
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpq 0x108(%rcx), %rax
jae 0xc7b4
movq -0x8(%rbp), %rax
movq 0x60(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x46b0
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xc781
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpq 0x118(%rcx), %rax
jae 0xc7ee
movq -0x8(%rbp), %rax
movq 0x68(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x4960
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xc7bb
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpq 0x128(%rcx), %rax
jae 0xc828
movq -0x8(%rbp), %rax
movq 0x70(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x4030
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xc7f5
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpq 0x138(%rcx), %rax
jae 0xc862
movq -0x8(%rbp), %rax
movq 0x78(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x4100
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xc82f
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpq 0x148(%rcx), %rax
jae 0xc89f
movq -0x8(%rbp), %rax
movq 0x80(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x43b0
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xc869
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpq 0x158(%rcx), %rax
jae 0xc8dc
movq -0x8(%rbp), %rax
movq 0x88(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x4460
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xc8a6
movq -0x20(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x28(%rbp), %rdi
callq 0x4080
cmpq $0x0, -0x20(%rbp)
je 0xc98b
movq -0x20(%rbp), %rax
movl 0x4(%rax), %esi
leaq 0x18c0(%rip), %rdi      # 0xe1d2
movb $0x0, %al
callq 0x4290
movq -0x20(%rbp), %rax
movl 0x4(%rax), %ecx
movq -0x8(%rbp), %rax
movq (%rax), %rax
addl 0x28(%rax), %ecx
movl %ecx, 0x28(%rax)
movq -0x20(%rbp), %rax
movl (%rax), %eax
movq -0x8(%rbp), %rcx
movq (%rcx), %rcx
cmpl 0x74(%rcx), %eax
jbe 0xc953
movq -0x20(%rbp), %rax
movl 0x4(%rax), %ecx
movq -0x8(%rbp), %rax
movq (%rax), %rax
addl 0x70(%rax), %ecx
movl %ecx, 0x70(%rax)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movl (%rax), %esi
movq -0x20(%rbp), %rax
movl 0x4(%rax), %edx
callq 0x46a0
movq -0x20(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x28(%rbp), %rdi
callq 0x4080
jmp 0xc8f9
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)