[*] Binary protection state of libelf-0.185.so

  
  	Full RELRO     Canary found      NX enabled   DSO          No RPATH     No RUNPATH   No Symbols


[*] Function system tear down of libelf-0.185.so

    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libelf-0.185.so @ 0x3374 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00003374 ()                                      | void fcn_00003374 (int16_t arg_2d0h, int16_t arg1) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_60h;
                                                                 |     int16_t var_62h;
                                                                 |     int16_t var_64h;
                                                                 |     int16_t var_66h;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_6ch;
                                                                 |     r0 = arg1;
                                                                 |     if (? < ?) {
    0x00003374 strhs pc, [r0, -0x8df]!                           |         *((r0 -= 0x8df)) = pc;
                                                                 |     }
    0x00003378 ldr.w r3, [pc, 0x520]                             |     
    0x0000337c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00003380 sub sp, 0x74                                      |     
    0x00003382 add r2, pc                                        |     r2 += pc;
    0x00003384 ldr r6, [r0]                                      |     r6 = *(r0);
    0x00003386 mov r4, r0                                        |     r4 = r0;
    0x00003388 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x0000338a ldr r3, [r3]                                      |     r3 = *(0x389c);
    0x0000338c str r3, [sp, 0x6c]                                |     var_6ch = r3;
    0x0000338e mov.w r3, 0                                       |     r3 = 0;
    0x00003392 ldrd r7, r3, [r0, 0x50]                           |     __asm ("ldrd r7, r3, [r0, 0x50]");
    0x00003396 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00003398 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0000339a beq.w 0x35ac                                      |         goto label_19;
                                                                 |     }
    0x0000339e ldr r2, [r0, 0x20]                                |     r2 = *((r0 + 0x20));
    0x000033a0 ldr r3, [r0, 0x28]                                |     r3 = *((r0 + 0x28));
    0x000033a2 adds r3, r3, r2                                   |     r3 += r2;
    0x000033a4 ldr r2, [r0, 0x24]                                |     r2 = *((r0 + 0x24));
    0x000033a6 adc r2, r2, 0                                     |     __asm ("adc r2, r2, 0");
    0x000033aa cmp r3, r7                                        |     
    0x000033ac sbcs r1, r2, 0                                    |     __asm ("sbcs r1, r2, 0");
                                                                 |     if (r3 < r7) {
    0x000033b0 blt 0x3404                                        |         goto label_4;
                                                                 |     }
    0x000033b2 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x000033b4 subs r3, r3, r7                                   |     r3 -= r7;
    0x000033b6 sbc.w r2, r2, r1                                  |     __asm ("sbc.w r2, r2, r1");
    0x000033ba cmp r3, 0x3c                                      |     
    0x000033bc sbcs r2, r2, 0                                    |     __asm ("sbcs r2, r2, 0");
                                                                 |     if (r3 < 0x3c) {
    0x000033c0 blt 0x3404                                        |         goto label_4;
                                                                 |     }
    0x000033c2 adds r5, r6, r7                                   |     r5 = r6 + r7;
                                                                 | label_6:
    0x000033c4 ldrb.w r3, [r5, 0x3a]                             |     r3 = *((r5 + 0x3a));
    0x000033c8 cmp r3, 0x60                                      |     
                                                                 |     if (r3 == 0x60) {
    0x000033ca beq 0x3410                                        |         goto label_20;
                                                                 |     }
                                                                 | label_0:
    0x000033cc movs r0, 0xf                                      |     r0 = 0xf;
    0x000033ce mov.w r6, -1                                      |     r6 = -1;
    0x000033d2 bl 0x259c                                         |     fcn_0000259c (r0);
                                                                 |     do {
                                                                 | label_1:
    0x000033d6 ldr.w r2, [pc, 0x4c8]                             |         r2 = *(0x000038a0);
    0x000033da ldr.w r3, [pc, 0x4c0]                             |         r3 = *(0x389e);
    0x000033de add r2, pc                                        |         r2 += pc;
    0x000033e0 ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x000033e2 ldr r2, [r3]                                      |         r2 = *(0x389e);
    0x000033e4 ldr r3, [sp, 0x6c]                                |         r3 = var_6ch;
    0x000033e6 eors r2, r3                                       |         r2 ^= r3;
    0x000033e8 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x000033ec bne.w 0x3892                                      |             goto label_21;
                                                                 |         }
    0x000033f0 mov r0, r6                                        |         r0 = r6;
    0x000033f2 add sp, 0x74                                      |         
    0x000033f4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_3:
    0x000033f8 blx 0x2328                                        |         r0 = memset (r0, r1, r2);
    0x000033fc ldr r3, [r0]                                      |         r3 = *(r0);
    0x000033fe cmp r3, 4                                         |         
                                                                 |         if (r3 == 4) {
    0x00003400 beq.w 0x35bc                                      |             goto label_5;
                                                                 |         }
                                                                 | label_4:
    0x00003404 movs r0, 0xe                                      |         r0 = 0xe;
    0x00003406 mov.w r6, -1                                      |         r6 = -1;
    0x0000340a bl 0x259c                                         |         fcn_0000259c (r0);
    0x0000340e b 0x33d6                                          |         
                                                                 |     } while (1);
                                                                 | label_20:
    0x00003410 ldrb.w r3, [r5, 0x3b]                             |     r3 = *((r5 + 0x3b));
    0x00003414 cmp r3, 0xa                                       |     
                                                                 |     if (r3 != 0xa) {
    0x00003416 bne 0x33cc                                        |         goto label_0;
                                                                 |     }
    0x00003418 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x0000341a movs r6, 0                                        |     r6 = 0;
    0x0000341c ldr r0, [r5]                                      |     r0 = *(r5);
    0x0000341e ldr r1, [r5, 4]                                   |     r1 = *((r5 + 4));
    0x00003420 ldr r2, [r5, 8]                                   |     r2 = *((r5 + 8));
    0x00003422 str.w r0, [r4, 0xcc]                              |     __asm ("str.w r0, [r4, 0xcc]");
    0x00003426 str.w r1, [r4, 0xd0]                              |     __asm ("str.w r1, [r4, 0xd0]");
    0x0000342a str.w r2, [r4, 0xd4]                              |     __asm ("str.w r2, [r4, 0xd4]");
    0x0000342e strb.w r6, [r4, 0xdc]                             |     *((r4 + 0xdc)) = r6;
    0x00003432 str.w r3, [r4, 0xd8]                              |     __asm ("str.w r3, [r4, 0xd8]");
    0x00003436 ldrb r3, [r5]                                     |     r3 = *(r5);
    0x00003438 cmp r3, 0x2f                                      |     
                                                                 |     if (r3 != 0x2f) {
    0x0000343a bne.w 0x3592                                      |         goto label_22;
                                                                 |     }
    0x0000343e ldrb r7, [r5, 1]                                  |     r7 = *((r5 + 1));
    0x00003440 cmp r7, 0x20                                      |     
                                                                 |     if (r7 == 0x20) {
    0x00003442 beq.w 0x35fa                                      |         goto label_23;
                                                                 |     }
    0x00003446 cmp r7, 0x53                                      |     
                                                                 |     if (r7 == 0x53) {
    0x00003448 beq.w 0x3632                                      |         goto label_24;
                                                                 |     }
    0x0000344c cmp r7, 0x2f                                      |     
                                                                 |     if (r7 == 0x2f) {
    0x0000344e bne 0x3464                                        |         
    0x00003450 ldr.w r1, [pc, 0x450]                             |         
    0x00003454 movs r2, 0x10                                     |         r2 = 0x10;
    0x00003456 mov r0, r5                                        |         r0 = r5;
    0x00003458 add r1, pc                                        |         r1 = 0x6d00;
    0x0000345a blx 0x2234                                        |         r0 = fcn_00002234 ();
    0x0000345e cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00003460 beq.w 0x3672                                      |             goto label_25;
                                                                 |         }
                                                                 |     }
                                                                 | label_7:
    0x00003464 blx 0x22f8                                        |     r0 = inflateEnd ();
    0x00003468 ldr r3, [r0]                                      |     r3 = *(r0);
    0x0000346a ldrh.w r3, [r3, r7, lsl 1]                        |     offset_0 = r7 << 1;
                                                                 |     r3 = *((r3 + offset_0));
    0x0000346e lsls r1, r3, 0x14                                 |     r1 = r3 << 0x14;
                                                                 |     if (r1 >= r3) {
    0x00003470 bpl.w 0x3626                                      |         goto label_9;
                                                                 |     }
    0x00003474 ldr r3, [r4, 0x44]                                |     r3 = *((r4 + 0x44));
    0x00003476 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00003478 beq.w 0x368a                                      |         goto label_26;
                                                                 |     }
                                                                 | label_14:
    0x0000347c movs r2, 0xa                                      |     r2 = 0xa;
    0x0000347e movs r1, 0                                        |     r1 = 0;
    0x00003480 adds r0, r5, 1                                    |     r0 = r5 + 1;
    0x00003482 blx 0x21cc                                        |     strtol (r0, r1, r2);
    0x00003486 ldr r3, [r4, 0x48]                                |     r3 = *((r4 + 0x48));
    0x00003488 cmp r3, r0                                        |     
                                                                 |     if (r3 < r0) {
    0x0000348a bls.w 0x3626                                      |         goto label_9;
                                                                 |     }
    0x0000348e ldr r7, [r4, 0x44]                                |     r7 = *((r4 + 0x44));
    0x00003490 add r7, r0                                        |     r7 += r0;
                                                                 | label_2:
    0x00003492 str r7, [r4, 0x58]                                |     *((r4 + 0x58)) = r7;
    0x00003494 ldrb.w r3, [r5, 0x30]                             |     r3 = *((r5 + 0x30));
    0x00003498 cmp r3, 0x20                                      |     
                                                                 |     if (r3 == 0x20) {
    0x0000349a beq.w 0x3626                                      |         goto label_9;
                                                                 |     }
    0x0000349e ldrb r3, [r5, 0x1b]                               |     r3 = *((r5 + 0x1b));
    0x000034a0 add.w r7, r5, 0x10                                |     r7 = r5 + 0x10;
    0x000034a4 cmp r3, 0x20                                      |     
                                                                 |     if (r3 != 0x20) {
    0x000034a6 beq 0x34ba                                        |         
    0x000034a8 ldr r1, [r7, 4]                                   |         r1 = *((r7 + 4));
    0x000034aa add r3, sp, 0x5c                                  |         r3 += var_5ch;
    0x000034ac ldr r2, [r7, 8]                                   |         r2 = *((r7 + 8));
    0x000034ae mov r7, r3                                        |         r7 = r3;
    0x000034b0 ldr r0, [r5, 0x10]                                |         r0 = *((r5 + 0x10));
    0x000034b2 stm r3!, {r0, r1, r2}                             |         *(r3!) = r0;
                                                                 |         *((r3! + 4)) = r1;
                                                                 |         *((r3! + 8)) = r2;
    0x000034b4 movs r3, 0                                        |         r3 = 0;
    0x000034b6 strb.w r3, [sp, 0x68]                             |         var_68h = r3;
                                                                 |     }
    0x000034ba movs r2, 0xa                                      |     r2 = 0xa;
    0x000034bc mov r0, r7                                        |     r0 = r7;
    0x000034be movs r1, 0                                        |     r1 = 0;
    0x000034c0 blx 0x21cc                                        |     strtol (r0, r1, r2);
    0x000034c4 str r0, [r4, 0x5c]                                |     *((r4 + 0x5c)) = r0;
    0x000034c6 add.w r3, r5, 0x1c                                |     r3 = r5 + 0x1c;
    0x000034ca ldrb.w r2, [r5, 0x21]                             |     r2 = *((r5 + 0x21));
    0x000034ce cmp r2, 0x20                                      |     
                                                                 |     if (r2 != 0x20) {
    0x000034d0 beq 0x34e4                                        |         
    0x000034d2 ldr r0, [r5, 0x1c]                                |         r0 = *((r5 + 0x1c));
    0x000034d4 movs r1, 0                                        |         r1 = 0;
    0x000034d6 str r0, [sp, 0x5c]                                |         var_5ch = r0;
    0x000034d8 ldrh r2, [r3, 4]                                  |         r2 = *((r3 + 4));
    0x000034da add r3, sp, 0x5c                                  |         r3 += var_5ch;
    0x000034dc strb.w r1, [sp, 0x62]                             |         var_62h = r1;
    0x000034e0 strh.w r2, [sp, 0x60]                             |         var_60h = r2;
                                                                 |     }
    0x000034e4 movs r2, 0xa                                      |     r2 = 0xa;
    0x000034e6 mov r0, r3                                        |     r0 = r3;
    0x000034e8 movs r1, 0                                        |     r1 = 0;
    0x000034ea blx 0x21cc                                        |     strtol (r0, r1, r2);
    0x000034ee str r0, [r4, 0x60]                                |     *((r4 + 0x60)) = r0;
    0x000034f0 add.w r3, r5, 0x22                                |     r3 = r5 + 0x22;
    0x000034f4 ldrb.w r2, [r5, 0x27]                             |     r2 = *((r5 + 0x27));
    0x000034f8 cmp r2, 0x20                                      |     
                                                                 |     if (r2 != 0x20) {
    0x000034fa beq 0x3510                                        |         
    0x000034fc ldr.w r0, [r5, 0x22]                              |         r0 = *((r5 + 0x22));
    0x00003500 movs r1, 0                                        |         r1 = 0;
    0x00003502 str r0, [sp, 0x5c]                                |         var_5ch = r0;
    0x00003504 ldrh r2, [r3, 4]                                  |         r2 = *((r3 + 4));
    0x00003506 add r3, sp, 0x5c                                  |         r3 += var_5ch;
    0x00003508 strb.w r1, [sp, 0x62]                             |         var_62h = r1;
    0x0000350c strh.w r2, [sp, 0x60]                             |         var_60h = r2;
                                                                 |     }
    0x00003510 mov r0, r3                                        |     r0 = r3;
    0x00003512 movs r2, 0xa                                      |     r2 = 0xa;
    0x00003514 movs r1, 0                                        |     r1 = 0;
    0x00003516 add.w r7, r5, 0x28                                |     r7 = r5 + 0x28;
    0x0000351a blx 0x21cc                                        |     strtol (r0, r1, r2);
    0x0000351e str r0, [r4, 0x64]                                |     *((r4 + 0x64)) = r0;
    0x00003520 ldrb.w r3, [r5, 0x2f]                             |     r3 = *((r5 + 0x2f));
    0x00003524 cmp r3, 0x20                                      |     
                                                                 |     if (r3 != 0x20) {
    0x00003526 beq 0x3538                                        |         
    0x00003528 ldr r1, [r7, 4]                                   |         r1 = *((r7 + 4));
    0x0000352a add r3, sp, 0x5c                                  |         r3 += var_5ch;
    0x0000352c ldr r0, [r5, 0x28]                                |         r0 = *((r5 + 0x28));
    0x0000352e mov r7, r3                                        |         r7 = r3;
    0x00003530 stm r3!, {r0, r1}                                 |         *(r3!) = r0;
                                                                 |         *((r3! + 4)) = r1;
    0x00003532 movs r3, 0                                        |         r3 = 0;
    0x00003534 strb.w r3, [sp, 0x64]                             |         var_64h = r3;
    0x00003536 adds r0, 0x64                                     |         r0 += 0x64;
                                                                 |     }
    0x00003538 movs r2, 0xa                                      |     r2 = 0xa;
    0x0000353a mov r0, r7                                        |     r0 = r7;
    0x0000353c movs r1, 0                                        |     r1 = 0;
    0x0000353e blx 0x21cc                                        |     strtol (r0, r1, r2);
    0x00003542 str r0, [r4, 0x68]                                |     *((r4 + 0x68)) = r0;
    0x00003544 add.w r3, r5, 0x30                                |     r3 = r5 + 0x30;
    0x00003548 ldrb.w r2, [r5, 0x39]                             |     r2 = *((r5 + 0x39));
    0x0000354c cmp r2, 0x20                                      |     
                                                                 |     if (r2 != 0x20) {
    0x0000354e beq 0x3566                                        |         
    0x00003550 ldr r1, [r3, 4]                                   |         r1 = *((r3 + 4));
    0x00003552 ldr r0, [r5, 0x30]                                |         r0 = *((r5 + 0x30));
    0x00003554 add r5, sp, 0x5c                                  |         r5 += var_5ch;
    0x00003556 mov r2, r5                                        |         r2 = r5;
    0x00003558 stm r2!, {r0, r1}                                 |         *(r2!) = r0;
                                                                 |         *((r2! + 4)) = r1;
    0x0000355a ldrh r1, [r3, 8]                                  |         r1 = *((r3 + 8));
    0x0000355c mov r3, r5                                        |         r3 = r5;
    0x0000355e strh r1, [r2]                                     |         *(r2) = r1;
    0x00003560 movs r2, 0                                        |         r2 = 0;
    0x00003562 strb.w r2, [sp, 0x66]                             |         var_66h = r2;
                                                                 |     }
    0x00003566 movs r2, 0xa                                      |     r2 = 0xa;
    0x00003568 movs r1, 0                                        |     r1 = 0;
    0x0000356a mov r0, r3                                        |     r0 = r3;
    0x0000356c blx 0x228c                                        |     fcn_0000228c ();
    0x00003570 cmp r1, 0                                         |     
    0x00003572 strd r0, r1, [r4, 0x70]                           |     __asm ("strd r0, r1, [r4, 0x70]");
                                                                 |     if (r1 < 0) {
    0x00003576 blt 0x3626                                        |         goto label_9;
                                                                 |     }
    0x00003578 ldr r3, [r4, 0x28]                                |     r3 = *((r4 + 0x28));
    0x0000357a ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
    0x0000357c subs r3, 0x3c                                     |     r3 -= 0x3c;
    0x0000357e add r3, r2                                        |     r3 += r2;
    0x00003580 ldr r2, [r4, 0x50]                                |     r2 = *((r4 + 0x50));
    0x00003582 subs r3, r3, r2                                   |     r3 -= r2;
    0x00003584 cmp r3, r0                                        |     
                                                                 |     if (r3 >= r0) {
    0x00003586 bhs.w 0x33d6                                      |         goto label_1;
                                                                 |     }
    0x0000358a movs r2, 0                                        |     r2 = 0;
    0x0000358c strd r3, r2, [r4, 0x70]                           |     __asm ("strd r3, r2, [r4, 0x70]");
    0x00003590 b 0x33d6                                          |     goto label_1;
                                                                 | label_22:
    0x00003592 add.w r7, r4, 0xbc                                |     r7 = r4 + 0xbc;
    0x00003596 movs r3, 0x10                                     |     r3 = 0x10;
    0x00003598 movs r2, 0x2f                                     |     r2 = 0x2f;
    0x0000359a mov r1, r5                                        |     r1 = r5;
    0x0000359c mov r0, r7                                        |     r0 = r7;
    0x0000359e blx 0x21a8                                        |     r0 = memccpy ();
    0x000035a2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000035a4 beq 0x3658                                        |         goto label_27;
                                                                 |     }
    0x000035a6 strb r6, [r0, -0x1]                               |     *((r0 - 0x1)) = r6;
    0x000035aa b 0x3492                                          |     goto label_2;
                                                                 | label_19:
    0x000035ac ldr.w sl, [r0, 0x18]                              |     sl = *((r0 + 0x18));
    0x000035b0 add.w r5, r0, 0x80                                |     r5 = r0 + 0x80;
    0x000035b4 mov.w r8, 0x3c                                    |     r8 = 0x3c;
    0x000035b8 mov fp, r5                                        |     
    0x000035ba mov sb, r6                                        |     sb = r6;
                                                                 | label_5:
    0x000035bc adds r3, r6, r7                                   |     r3 = r6 + r7;
    0x000035be mov r2, r8                                        |     r2 = r8;
    0x000035c0 str r3, [sp]                                      |     *(sp) = r3;
    0x000035c2 mov r1, fp                                        |     r1 = fp;
    0x000035c4 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x000035c6 mov r0, sl                                        |     r0 = sl;
    0x000035c8 adc.w r3, r3, sb                                  |     __asm ("adc.w r3, r3, sb");
    0x000035cc str r3, [sp, 4]                                   |     var_4h = r3;
    0x000035ce blx 0x22a4                                        |     r0 = fcn_000022a4 ();
    0x000035d2 adds r3, r0, 1                                    |     r3 = r0 + 1;
                                                                 |     if (r3 == r0) {
    0x000035d4 beq.w 0x33f8                                      |         goto label_3;
                                                                 |     }
    0x000035d8 cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x000035da ble.w 0x3404                                      |         goto label_4;
                                                                 |     }
    0x000035de add r6, r0                                        |     r6 += r0;
    0x000035e0 cmp r6, 0x3b                                      |     
                                                                 |     if (r6 <= 0x3b) {
    0x000035e2 bgt 0x35f2                                        |         
    0x000035e4 asr.w sb, r6, 0x1f                                |         sb = r6 >> 0x1f;
    0x000035e8 rsb.w r8, r6, 0x3c                                |         r8 = 0x3c - r6;
    0x000035ec add.w fp, r5, r6                                  |         
    0x000035f0 b 0x35bc                                          |         goto label_5;
                                                                 |     }
    0x000035f2 cmp r6, 0x3c                                      |     
                                                                 |     if (r6 == 0x3c) {
    0x000035f4 beq.w 0x33c4                                      |         goto label_6;
                                                                 |     }
    0x000035f8 b 0x3404                                          |     goto label_4;
                                                                 | label_23:
    0x000035fa ldr r1, [pc, 0x2ac]                               |     
    0x000035fc movs r2, 0x10                                     |     r2 = 0x10;
    0x000035fe mov r0, r5                                        |     r0 = r5;
    0x00003600 add r1, pc                                        |     r1 = 0x6eae;
    0x00003602 blx 0x2234                                        |     r0 = fcn_00002234 ();
    0x00003606 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00003608 bne.w 0x3464                                      |         goto label_7;
                                                                 |     }
    0x0000360c ldr r3, [pc, 0x29c]                               |     
    0x0000360e add.w r7, r4, 0xbc                                |     r7 = r4 + 0xbc;
    0x00003612 add r3, pc                                        |     r3 = 0x6ec2;
    0x00003614 ldrh r3, [r3]                                     |     r3 = *(r3);
    0x00003616 strh.w r3, [r4, 0xbc]                             |     *((r4 + 0xbc)) = r3;
    0x0000361a b 0x3492                                          |     goto label_2;
                                                                 | label_11:
    0x0000361c blx 0x2328                                        |     r0 = memset (r0, r1, r2);
    0x00003620 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00003622 cmp r3, 4                                         |     
                                                                 |     if (r3 == 4) {
    0x00003624 beq 0x3722                                        |         goto label_12;
                                                                 |     }
                                                                 | label_9:
    0x00003626 movs r0, 0x10                                     |     r0 = 0x10;
    0x00003628 mov.w r6, -1                                      |     r6 = -1;
    0x0000362c bl 0x259c                                         |     fcn_0000259c (r0);
    0x00003630 b 0x33d6                                          |     goto label_1;
                                                                 | label_24:
    0x00003632 ldr r1, [pc, 0x27c]                               |     
    0x00003634 movs r2, 0x10                                     |     r2 = 0x10;
    0x00003636 mov r0, r5                                        |     r0 = r5;
    0x00003638 add r1, pc                                        |     r1 = 0x6eee;
    0x0000363a blx 0x2234                                        |     r0 = fcn_00002234 ();
    0x0000363e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00003640 bne.w 0x3464                                      |         goto label_7;
                                                                 |     }
    0x00003644 ldr r3, [pc, 0x26c]                               |     
    0x00003646 add.w r7, r4, 0xbc                                |     r7 = r4 + 0xbc;
    0x0000364a add r3, pc                                        |     r3 = 0x6f02;
    0x0000364c ldm r3!, {r0, r1}                                 |     r0 = *(r3!);
                                                                 |     r1 = *((r3! + 4));
    0x0000364e str.w r0, [r4, 0xbc]                              |     __asm ("str.w r0, [r4, 0xbc]");
    0x00003652 str.w r1, [r4, 0xc0]                              |     __asm ("str.w r1, [r4, 0xc0]");
    0x00003656 b 0x3492                                          |     goto label_2;
                                                                 | label_27:
    0x00003658 mov r1, r6                                        |     r1 = r6;
    0x0000365a mov r3, r4                                        |     r3 = r4;
    0x0000365c strb r6, [r3, 0xcb]!                              |     *((r3 += 0xcb)) = r6;
                                                                 | label_8:
    0x00003660 ldrb r2, [r3, -0x1]!                              |     r2 = *((r3 -= 0x1));
    0x00003664 cmp r2, 0x20                                      |     
                                                                 |     if (r2 != 0x20) {
    0x00003666 bne.w 0x3492                                      |         goto label_2;
                                                                 |     }
    0x0000366a cmp r7, r3                                        |     
    0x0000366c strb r1, [r3]                                     |     *(r3) = r1;
                                                                 |     if (r7 != r3) {
    0x0000366e bne 0x3660                                        |         goto label_8;
                                                                 |     }
    0x00003670 b 0x3492                                          |     goto label_2;
                                                                 | label_25:
    0x00003672 ldr r3, [pc, 0x244]                               |     
    0x00003674 add.w r2, r4, 0xbc                                |     r2 = r4 + 0xbc;
    0x00003678 mov r7, r2                                        |     r7 = r2;
    0x0000367a add r3, pc                                        |     r3 = 0x6f38;
    0x0000367c ldrh r1, [r3]                                     |     r1 = *(r3);
    0x0000367e ldrb r3, [r3, 2]                                  |     r3 = *((r3 + 2));
    0x00003680 strh.w r1, [r4, 0xbc]                             |     *((r4 + 0xbc)) = r1;
    0x00003684 strb.w r3, [r4, 0xbe]                             |     *((r4 + 0xbe)) = r3;
    0x00003688 b 0x3492                                          |     goto label_2;
                                                                 | label_26:
    0x0000368a ldr r2, [pc, 0x230]                               |     
    0x0000368c movs r7, 8                                        |     r7 = 8;
    0x0000368e mov sl, r3                                        |     sl = r3;
    0x00003690 strd r5, r6, [sp, 0x18]                           |     __asm ("strd r5, r6, [var_18h]");
    0x00003694 add r2, pc                                        |     r2 = 0x6f56;
    0x00003696 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00003698 add r2, sp, 0x20                                  |     r2 += var_20h;
    0x0000369a str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x0000369c b 0x3704                                          |     goto label_28;
                                                                 | label_10:
    0x0000369e ldr r2, [r4, 0x28]                                |     r2 = *((r4 + 0x28));
    0x000036a0 cmp r7, r2                                        |     
                                                                 |     if (r7 > r2) {
    0x000036a2 bhi 0x3626                                        |         goto label_9;
                                                                 |     }
    0x000036a4 subs r2, r2, r7                                   |     r2 -= r7;
    0x000036a6 sbc.w r1, sl, sl, lsl 1                           |     __asm ("sbc.w r1, sl, sl, lsl 1");
    0x000036aa cmp r2, 0x3c                                      |     
    0x000036ac sbcs r1, r1, 0                                    |     __asm ("sbcs r1, r1, 0");
                                                                 |     if (r2 < 0x3c) {
    0x000036b0 blt 0x3626                                        |         goto label_9;
                                                                 |     }
    0x000036b2 add r5, r7                                        |     r5 += r7;
                                                                 | label_13:
    0x000036b4 ldrb.w r2, [r5, 0x39]                             |     r2 = *((r5 + 0x39));
    0x000036b8 add.w r3, r5, 0x30                                |     r3 = r5 + 0x30;
    0x000036bc cmp r2, 0x20                                      |     
                                                                 |     if (r2 != 0x20) {
    0x000036be beq 0x36d8                                        |         
    0x000036c0 ldr r1, [r3, 4]                                   |         r1 = *((r3 + 4));
    0x000036c2 add r6, sp, 0x5c                                  |         r6 += var_5ch;
    0x000036c4 ldr r0, [r5, 0x30]                                |         r0 = *((r5 + 0x30));
    0x000036c6 mov r2, r6                                        |         r2 = r6;
    0x000036c8 mov.w ip, 0                                       |         
    0x000036cc stm r2!, {r0, r1}                                 |         *(r2!) = r0;
                                                                 |         *((r2! + 4)) = r1;
    0x000036ce ldrh r3, [r3, 8]                                  |         r3 = *((r3 + 8));
    0x000036d0 strh r3, [r2]                                     |         *(r2) = r3;
    0x000036d2 mov r3, r6                                        |         r3 = r6;
    0x000036d4 strb.w ip, [sp, 0x66]                             |         var_66h = ip;
                                                                 |     }
    0x000036d8 movs r2, 0xa                                      |     r2 = 0xa;
    0x000036da movs r1, 0                                        |     r1 = 0;
    0x000036dc mov r0, r3                                        |     r0 = r3;
    0x000036de blx 0x21cc                                        |     strtol (r0, r1, r2);
    0x000036e2 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x000036e4 mov r8, r0                                        |     r8 = r0;
    0x000036e6 movs r2, 0x10                                     |     r2 = 0x10;
    0x000036e8 mov r0, r5                                        |     r0 = r5;
    0x000036ea blx 0x2234                                        |     r0 = fcn_00002234 ();
    0x000036ee cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000036f0 beq 0x3768                                        |         goto label_29;
                                                                 |     }
    0x000036f2 add.w r3, r8, 1                                   |     r3 = r8 + 1;
    0x000036f6 bic r3, r3, 1                                     |     r3 = BIT_MASK (r3, 1);
    0x000036fa adds r3, 0x3c                                     |     r3 += 0x3c;
    0x000036fc adds r3, r3, r7                                   |     r3 += r7;
    0x000036fe mov r7, r3                                        |     r7 = r3;
    0x00003700 adc sl, sl, 0                                     |     __asm ("adc sl, sl, 0");
                                                                 | label_28:
    0x00003704 ldr r5, [r4]                                      |     r5 = *(r4);
    0x00003706 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00003708 bne 0x369e                                        |         goto label_10;
                                                                 |     }
    0x0000370a mov fp, r5                                        |     
    0x0000370c ldr r5, [r4, 0x20]                                |     r5 = *((r4 + 0x20));
    0x0000370e ldr r2, [r4, 0x24]                                |     r2 = *((r4 + 0x24));
    0x00003710 mov.w r8, 0x3c                                    |     r8 = 0x3c;
    0x00003714 ldr.w sb, [r4, 0x18]                              |     sb = *((r4 + 0x18));
    0x00003718 mov r6, fp                                        |     r6 = fp;
    0x0000371a adds r5, r7, r5                                   |     r5 = r7 + r5;
    0x0000371c adc.w r3, sl, r2                                  |     __asm ("adc.w r3, sl, r2");
    0x00003720 str r3, [sp, 0x10]                                |     var_10h = r3;
                                                                 | label_12:
    0x00003722 adds.w r3, fp, r5                                 |     r3 = fp + r5;
    0x00003726 mov r2, r8                                        |     r2 = r8;
    0x00003728 str r3, [sp]                                      |     *(sp) = r3;
    0x0000372a mov r0, sb                                        |     r0 = sb;
    0x0000372c ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0000372e adc.w r3, r3, r6                                  |     __asm ("adc.w r3, r3, r6");
    0x00003732 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00003734 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00003736 add.w r1, r3, fp                                  |     r1 = r3 + fp;
    0x0000373a blx 0x22a4                                        |     r0 = fcn_000022a4 ();
    0x0000373e adds r2, r0, 1                                    |     r2 = r0 + 1;
                                                                 |     if (r2 == r0) {
    0x00003740 beq.w 0x361c                                      |         goto label_11;
                                                                 |     }
    0x00003744 cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x00003746 ble.w 0x3626                                      |         goto label_9;
                                                                 |     }
    0x0000374a add fp, r0                                        |     
    0x0000374c cmp.w fp, 0x3b                                    |     
                                                                 |     if (fp <= 0x3b) {
    0x00003750 bgt 0x375c                                        |         
    0x00003752 asr.w r6, fp, 0x1f                                |         r6 = fp >> 0x1f;
    0x00003756 rsb.w r8, fp, 0x3c                                |         r8 = 0x3c - fp;
    0x0000375a b 0x3722                                          |         goto label_12;
                                                                 |     }
    0x0000375c cmp.w fp, 0x3c                                    |     
                                                                 |     if (fp != 0x3c) {
    0x00003760 bne.w 0x3626                                      |         goto label_9;
                                                                 |     }
    0x00003764 ldr r5, [sp, 0xc]                                 |     r5 = var_ch;
    0x00003766 b 0x36b4                                          |     goto label_13;
                                                                 | label_29:
    0x00003768 ldr.w fp, [r4]                                    |     fp = *(r4);
    0x0000376c mov sb, r0                                        |     sb = r0;
    0x0000376e ldr r5, [sp, 0x18]                                |     r5 = var_18h;
    0x00003770 ldr r6, [sp, 0x1c]                                |     r6 = var_1ch;
    0x00003772 str.w sl, [sp, 0xc]                               |     __asm ("str.w sl, [var_ch]");
    0x00003776 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x0000377a beq 0x37e4                                        |         goto label_30;
                                                                 |     }
    0x0000377c ldr r3, [r4, 0x28]                                |     r3 = *((r4 + 0x28));
    0x0000377e subs r3, r3, r7                                   |     r3 -= r7;
    0x00003780 sbc.w r2, sl, sl, lsl 1                           |     __asm ("sbc.w r2, sl, sl, lsl 1");
    0x00003784 subs r3, 0x3b                                     |     r3 -= 0x3b;
    0x00003786 adc r2, r2, -1                                    |     __asm ("adc r2, r2, -1");
    0x0000378a cmp r8, r3                                        |     
    0x0000378c sbcs.w r2, r0, r2                                 |     __asm ("sbcs.w r2, r0, r2");
                                                                 |     if (r8 >= r3) {
    0x00003790 bge.w 0x3626                                      |         goto label_9;
                                                                 |     }
    0x00003794 mov r0, r8                                        |     r0 = r8;
    0x00003796 blx 0x22c8                                        |     r0 = deflateInit_ ();
    0x0000379a mov sl, r0                                        |     sl = r0;
    0x0000379c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0000379e beq.w 0x3626                                      |         goto label_9;
                                                                 |     }
    0x000037a2 add.w r1, r7, 0x3c                                |     r1 = r7 + 0x3c;
    0x000037a6 mov r2, r8                                        |     r2 = r8;
    0x000037a8 add r1, fp                                        |     r1 += fp;
    0x000037aa blx 0x2210                                        |     fcn_00002210 ();
    0x000037ac invalid                                           |     
                                                                 | label_17:
    0x000037ae strd r0, r8, [r4, 0x44]                           |     __asm ("strd r0, r8, [r4, 0x44]");
    0x000037b2 mov.w sb, 0                                       |     sb = 0;
    0x000037b6 add r8, sl                                        |     r8 += sl;
    0x000037b8 b 0x37c6                                          |     goto label_31;
                                                                 | label_15:
    0x000037ba mov sl, r0                                        |     sl = r0;
    0x000037bc strb sb, [sl], 1                                  |     *(sl) = sb;
                                                                 |     sl++;
    0x000037c0 cmp sl, r8                                        |     
                                                                 |     if (sl >= r8) {
    0x000037c2 bhs.w 0x347c                                      |         goto label_14;
                                                                 |     }
                                                                 | label_31:
    0x000037c6 sub.w r7, r8, sl                                  |     r7 = r8 - sl;
    0x000037ca movs r1, 0x2f                                     |     r1 = 0x2f;
    0x000037cc mov r2, r7                                        |     r2 = r7;
    0x000037ce mov r0, sl                                        |     r0 = sl;
    0x000037d0 blx 0x2364                                        |     r0 = inflateInit_ ();
    0x000037d4 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000037d6 bne 0x37ba                                        |         goto label_15;
                                                                 |     }
    0x000037d8 mov r1, r0                                        |     r1 = r0;
    0x000037da mov r2, r7                                        |     r2 = r7;
    0x000037dc mov r0, sl                                        |     r0 = sl;
    0x000037de blx 0x2334                                        |     pwrite64 ();
    0x000037e2 b 0x347c                                          |     goto label_14;
                                                                 | label_30:
    0x000037e4 mov r0, r8                                        |     r0 = r8;
    0x000037e6 blx 0x22c8                                        |     r0 = deflateInit_ ();
    0x000037ea mov sl, r0                                        |     sl = r0;
    0x000037ec cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000037ee beq.w 0x3626                                      |         goto label_9;
                                                                 |     }
    0x000037f2 ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x000037f4 mov fp, r8                                        |     
    0x000037f6 ldr r2, [r4, 0x24]                                |     r2 = *((r4 + 0x24));
    0x000037f8 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x000037fa adds r3, r7, r3                                   |     r3 = r7 + r3;
    0x000037fc mov r7, sl                                        |     r7 = sl;
    0x000037fe str.w sb, [sp, 0xc]                               |     __asm ("str.w sb, [var_ch]");
    0x00003802 adc.w r2, r1, r2                                  |     __asm ("adc.w r2, r1, r2");
    0x00003806 adds r3, 0x3c                                     |     r3 += 0x3c;
    0x00003808 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0000380a adc r3, r2, 0                                     |     __asm ("adc r3, r2, 0");
    0x0000380e str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00003810 mov r2, r4                                        |     r2 = r4;
    0x00003812 ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x00003814 mov r4, r8                                        |     r4 = r8;
    0x00003816 mov r8, r2                                        |     r8 = r2;
    0x00003818 str r3, [sp, 0x10]                                |     var_10h = r3;
                                                                 |     do {
                                                                 | label_16:
    0x0000381a ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x0000381c mov r1, r7                                        |         r1 = r7;
    0x0000381e ldr r0, [sp, 0x10]                                |         r0 = var_10h;
    0x00003820 adds.w r2, sb, r3                                 |         r2 = sb + r3;
    0x00003824 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00003826 str r2, [sp]                                      |         *(sp) = r2;
    0x00003828 ldr r2, [sp, 0xc]                                 |         r2 = var_ch;
    0x0000382a adc.w r2, r3, r2                                  |         __asm ("adc.w r2, r3, r2");
    0x0000382e str r2, [sp, 4]                                   |         var_4h = r2;
    0x00003830 mov r2, fp                                        |         r2 = fp;
    0x00003832 blx 0x22a4                                        |         r0 = fcn_000022a4 ();
    0x00003836 adds r3, r0, 1                                    |         r3 = r0 + 1;
                                                                 |         if (r3 == r0) {
    0x00003838 beq 0x3854                                        |             goto label_32;
                                                                 |         }
    0x0000383a cmp r0, 0                                         |         
                                                                 |         if (r0 <= 0) {
    0x0000383c ble 0x3884                                        |             goto label_33;
                                                                 |         }
    0x0000383e add sb, r0                                        |         sb += r0;
    0x00003840 cmp r4, sb                                        |         
                                                                 |         if (r4 < sb) {
    0x00003842 bls 0x387a                                        |             goto label_34;
                                                                 |         }
    0x00003844 asr.w r3, sb, 0x1f                                |         r3 = sb >> 0x1f;
    0x00003848 sub.w fp, r4, sb                                  |         
    0x0000384c add.w r7, sl, sb                                  |         r7 = sl + sb;
    0x00003850 str r3, [sp, 0xc]                                 |         var_ch = r3;
    0x00003852 b 0x381a                                          |         
                                                                 |     } while (1);
                                                                 | label_32:
    0x00003854 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x00003856 blx 0x2328                                        |     r0 = memset (r0, r1, r2);
    0x0000385a ldr r0, [r0]                                      |     r0 = *(r0);
    0x0000385c ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x0000385e cmp r0, 4                                         |     
                                                                 |     if (r0 == 4) {
    0x00003860 beq 0x381a                                        |         goto label_16;
                                                                 |     }
    0x00003862 mov r3, r2                                        |     r3 = r2;
    0x00003864 mov r2, r8                                        |     r2 = r8;
    0x00003866 mov r8, r4                                        |     r8 = r4;
    0x00003868 mov r4, r2                                        |     r4 = r2;
                                                                 | label_18:
    0x0000386a cmp r8, r3                                        |     
    0x0000386c mov r0, sl                                        |     r0 = sl;
                                                                 |     if (r8 == r3) {
    0x0000386e beq 0x37ae                                        |         goto label_17;
                                                                 |     }
    0x00003870 blx 0x21f4                                        |     fcn_000021f4 ();
    0x00003874 movs r3, 0                                        |     r3 = 0;
    0x00003876 str r3, [r4, 0x44]                                |     *((r4 + 0x44)) = r3;
    0x00003878 b 0x3626                                          |     goto label_9;
                                                                 | label_34:
    0x0000387a mov r3, r8                                        |     r3 = r8;
    0x0000387c mov r8, r4                                        |     r8 = r4;
    0x0000387e mov r4, r3                                        |     r4 = r3;
    0x00003880 mov r3, sb                                        |     r3 = sb;
    0x00003882 b 0x386a                                          |     goto label_18;
                                                                 | label_33:
    0x00003884 mov r2, r8                                        |     r2 = r8;
    0x00003886 mov r3, r0                                        |     r3 = r0;
    0x00003888 mov r8, r4                                        |     r8 = r4;
    0x0000388a mov r4, r2                                        |     r4 = r2;
                                                                 |     if (r3 != 0) {
    0x0000388c bne 0x386a                                        |         goto label_18;
                                                                 |     }
    0x0000388e mov r3, sb                                        |     r3 = sb;
    0x00003890 b 0x386a                                          |     goto label_18;
                                                                 | label_21:
    0x00003892 blx 0x2250                                        |     sysconf ();
    0x00003896 nop                                               |     
    0x00003898 ldm r3!, {r1, r4, r5, r6}                         |     r1 = *(r3!);
                                                                 |     r4 = *((r3! + 4));
                                                                 |     r5 = *((r3! + 8));
                                                                 |     r6 = *((r3! + 12));
    0x0000389a movs r1, r0                                       |     r1 = r0;
    0x0000389c lsls r4, r7, 3                                    |     r4 = r7 << 3;
    0x0000389e movs r0, r0                                       |     
    0x000038a0 ldm r3!, {r1, r2, r4}                             |     r1 = *(r3!);
                                                                 |     r2 = *((r3! + 4));
                                                                 |     r4 = *((r3! + 8));
    0x000038a2 movs r1, r0                                       |     r1 = r0;
    0x000038a4 add r1, sp, 0x2d0                                 |     r1 += arg_2d0h;
    0x000038a6 movs r0, r0                                       |     
    0x000038a8 adr r7, 0x360                                     |     r7 = 0x360;
    0x000038aa movs r0, r0                                       |     
    0x000038ac adr r7, 0x368                                     |     r7 = 0x368;
    0x000038ae movs r0, r0                                       |     
    0x000038b0 adr r7, 0x2e0                                     |     r7 = 0x2e0;
    0x000038b2 movs r0, r0                                       |     
    0x000038b4 adr r7, 0x2e8                                     |     r7 = 0x2e8;
    0x000038b6 movs r0, r0                                       |     
    0x000038b8 adr r7, 0x298                                     |     r7 = 0x298;
    0x000038ba movs r0, r0                                       |     
    0x000038bc adr r7, 0x1e0                                     |     r7 = 0x1e0;
    0x000038be movs r0, r0                                       |     
                                                                 | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libelf-0.185.so @ 0x9774 */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) fcn.00009774 ()                                  | void fcn_00009774 (int16_t arg_18h, int16_t arg_20h, int16_t arg_24h, int16_t arg_2ch, int16_t arg_38h, int16_t arg_3ch, int16_t arg_40h, int16_t arg_50h, int16_t arg_54h, int16_t arg_a8h, int16_t arg_10a0h, int16_t arg_9000h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                                             |     int16_t var_0h;
                                                             |     int16_t var_4h;
                                                             |     int16_t var_8h_2;
                                                             |     int16_t var_14h;
                                                             |     int16_t var_18h_2;
                                                             |     int16_t var_1ch_2;
                                                             |     int16_t var_20h_2;
                                                             |     int16_t var_24h;
                                                             |     int16_t var_28h;
                                                             |     int16_t var_2ch;
                                                             |     int16_t var_30h;
                                                             |     int16_t var_34h;
                                                             |     int16_t var_38h;
                                                             |     int16_t var_3ch;
                                                             |     int16_t var_40h;
                                                             |     int16_t var_44h;
                                                             |     int16_t var_48h;
                                                             |     int16_t var_4ch_2;
                                                             |     int16_t var_50h;
                                                             |     int16_t var_54h_2;
                                                             |     int16_t var_58h;
                                                             |     int16_t var_5ch;
                                                             |     int16_t var_60h;
                                                             |     int16_t var_64h;
                                                             |     int16_t var_68h;
                                                             |     int16_t var_6ch;
                                                             |     int16_t var_70h;
                                                             |     int16_t var_74h;
                                                             |     int16_t var_78h;
                                                             |     int16_t var_7ch;
                                                             |     int16_t var_c0h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
    0x00009774 svcmi 0xf0e92d                                |     __asm ("svcmi aav.0x000000ff");
    0x00009778 mov fp, r0                                    |     
    0x0000977a ldr.w r4, [pc, 0x75c]                         |     r4 = *(0x00009ed8);
    0x0000977e sub.w sp, sp, 0x9000                          |     
    0x00009782 sub sp, 0xc4                                  |     
    0x00009784 movs r3, 0                                    |     r3 = 0;
    0x00009786 ldr.w r0, [pc, 0x754]                         |     
    0x0000978a add r5, sp, 0xc0                              |     r5 += var_c0h;
    0x0000978c add r4, pc                                    |     r4 += pc;
    0x0000978e str r5, [sp, 0x3c]                            |     var_3ch = r5;
    0x00009790 add.w r6, sp, 0x9000                          |     r6 += arg_9000h;
    0x00009794 ldr r0, [r4, r0]                              |     r0 = *((r4 + r0));
    0x00009796 adds r6, 0xbc                                 |     r6 += 0xbc;
    0x00009798 ldr r0, [r0]                                  |     r0 = *(0x9ede);
    0x0000979a str r0, [r6]                                  |     *(r6) = r0;
    0x0000979c mov.w r0, 0                                   |     r0 = 0;
    0x000097a0 str r3, [r5, -0x40]                           |     *((r5 - 0x40)) = r3;
    0x000097a4 ldr.w r3, [fp, 0x38]                          |     r3 = *(arg_38h);
    0x000097a8 str r2, [sp, 0x50]                            |     var_50h = r2;
    0x000097aa ldr.w r2, [fp, 0x2c]                          |     r2 = *(arg_2ch);
    0x000097ae str r3, [sp, 0x18]                            |     var_18h_2 = r3;
    0x000097b0 ldr.w r3, [fp, 0x50]                          |     r3 = *(arg_50h);
    0x000097b4 str r1, [sp, 0x38]                            |     var_38h = r1;
    0x000097b6 orrs r3, r2                                   |     r3 |= r2;
    0x000097b8 ands r3, r3, 1                                |     r3 &= 1;
    0x000097bc str r3, [sp, 0x40]                            |     var_40h = r3;
                                                             |     if (r3 == r3) {
    0x000097be beq 0x9814                                    |         goto label_29;
                                                             |     }
    0x000097c0 ldr.w r3, [pc, 0x71c]                         |     
    0x000097c4 add r3, pc                                    |     r3 = 0x136a8;
    0x000097c6 ldr r2, [r3, 0xc]                             |     r2 = *(0x136b4);
    0x000097c8 cmp r2, 0x34                                  |     
                                                             |     if (r2 != 0x34) {
    0x000097ca bne.w 0x9ea6                                  |         goto label_30;
                                                             |     }
    0x000097ce ldr r3, [sp, 0x38]                            |     r3 = var_38h;
    0x000097d0 ldr r6, [sp, 0x18]                            |     r6 = var_18h_2;
    0x000097d2 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x000097d4 bne.w 0x9e04                                  |         goto label_31;
                                                             |     }
                                                             | label_25:
    0x000097d8 ldr.w r5, [fp, 0x18]                          |     r5 = *(arg_18h);
    0x000097dc movs r7, 0                                    |     r7 = 0;
    0x000097de mov.w sl, 0x34                                |     sl = 0x34;
    0x000097e2 mov sb, r6                                    |     sb = r6;
    0x000097e4 mov r4, r7                                    |     r4 = r7;
                                                             |     do {
                                                             | label_6:
    0x000097e6 mov r2, sl                                    |         r2 = sl;
    0x000097e8 mov r1, sb                                    |         r1 = sb;
    0x000097ea mov r0, r5                                    |         r0 = r5;
    0x000097ec strd r7, r4, [sp]                             |         __asm ("strd r7, r4, [sp]");
    0x000097f0 blx 0x2340                                    |         r0 = deflateEnd ();
    0x000097f4 adds r2, r0, 1                                |         r2 = r0 + 1;
                                                             |         if (r2 == r0) {
    0x000097f6 beq.w 0x9b28                                  |             goto label_32;
                                                             |         }
    0x000097fa cmp r0, 0                                     |         
                                                             |         if (r0 <= 0) {
    0x000097fc ble.w 0x9b34                                  |             goto label_12;
                                                             |         }
    0x00009800 add r7, r0                                    |         r7 += r0;
    0x00009802 cmp r7, 0x33                                  |         
                                                             |         if (r7 > 0x33) {
    0x00009804 bgt.w 0x9bc6                                  |             goto label_33;
                                                             |         }
    0x00009808 asrs r4, r7, 0x1f                             |         r4 = r7 >> 0x1f;
    0x0000980a rsb.w sl, r7, 0x34                            |         sl = 0x34 - r7;
    0x0000980e add.w sb, r6, r7                              |         sb = r6 + r7;
    0x00009812 b 0x97e6                                      |         
                                                             |     } while (1);
                                                             | label_29:
    0x00009814 ldr r3, [sp, 0x40]                            |     r3 = var_40h;
    0x00009816 str r3, [sp, 0x44]                            |     var_44h = r3;
                                                             | label_13:
    0x00009818 ldr.w r3, [pc, 0x6c8]                         |     
    0x0000981c add r3, pc                                    |     
    0x0000981e ldr r3, [r3, 0x18]                            |     r3 = *(0x1371c);
    0x00009820 cmp r3, 0x20                                  |     
                                                             |     if (r3 != 0x20) {
    0x00009822 bne.w 0x9e90                                  |         goto label_34;
                                                             |     }
    0x00009826 ldr r3, [sp, 0x3c]                            |     r3 = var_3ch;
    0x00009828 mov r0, fp                                    |     r0 = fp;
    0x0000982a sub.w r1, r3, 0x3c                            |     r1 = r3 - 0x3c;
    0x0000982e bl 0xbee8                                     |     fcn_0000bee8 (r0, r1);
    0x00009832 str r0, [sp, 0x40]                            |     var_40h = r0;
    0x00009834 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00009836 bne.w 0x9dd0                                  |         goto label_35;
                                                             |     }
    0x0000983a ldr.w r7, [fp, 0x40]                          |     r7 = *(arg_40h);
    0x0000983e cmp r7, 0                                     |     
                                                             |     if (r7 == 0) {
    0x00009840 beq.w 0x9d56                                  |         goto label_36;
                                                             |     }
    0x00009844 ldr.w r2, [fp, 0x2c]                          |     r2 = *(arg_2ch);
    0x00009848 ldr.w r3, [fp, 0x54]                          |     r3 = *(arg_54h);
    0x0000984c orrs r3, r2                                   |     r3 |= r2;
    0x0000984e ldr r2, [sp, 0x18]                            |     r2 = var_18h_2;
    0x00009850 ands r3, r3, 1                                |     r3 &= 1;
    0x00009854 str r3, [sp, 0x1c]                            |     var_1ch_2 = r3;
    0x00009856 ldr r5, [r2, 0x1c]                            |     r5 = *((r2 + 0x1c));
                                                             |     if (r3 == r3) {
    0x00009858 beq 0x98f2                                    |         goto label_37;
                                                             |     }
    0x0000985a ldrh r2, [r2, 0x28]                           |     r2 = *((r2 + 0x28));
    0x0000985c cmp r2, r5                                    |     
                                                             |     if (r2 <= r5) {
    0x0000985e blo.w 0x9daa                                  |         goto label_38;
                                                             |     }
                                                             | label_22:
    0x00009862 ldr r3, [sp, 0x3c]                            |     r3 = var_3ch;
    0x00009864 ldr r4, [r3, -0x3c]                           |     r4 = *((r3 - 0x3c));
    0x00009868 ldr r3, [sp, 0x38]                            |     r3 = var_38h;
    0x0000986a cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x0000986c bne.w 0x9e2e                                  |         goto label_39;
                                                             |     }
    0x00009870 str r3, [sp, 0x20]                            |     var_20h_2 = r3;
                                                             | label_26:
    0x00009872 ldr r3, [sp, 0x3c]                            |     r3 = var_3ch;
    0x00009874 mov.w sl, 0                                   |     sl = 0;
    0x00009878 ldr.w sb, [fp, 0x18]                          |     sb = *(arg_18h);
    0x0000987c mov r8, r7                                    |     r8 = r7;
    0x0000987e mov r6, sl                                    |     r6 = sl;
    0x00009880 ldr r5, [r3, -0x3c]                           |     r5 = *((r3 - 0x3c));
    0x00009884 ldr r3, [sp, 0x18]                            |     r3 = var_18h_2;
    0x00009886 lsls r5, r5, 5                                |     r5 <<= 5;
    0x00009888 ldr r3, [r3, 0x1c]                            |     r3 = *((r3 + 0x1c));
    0x0000988a mov r4, r5                                    |     r4 = r5;
    0x0000988c str r3, [sp, 0x14]                            |     var_14h = r3;
                                                             |     do {
                                                             | label_8:
    0x0000988e ldr r3, [sp, 0x14]                            |         r3 = var_14h;
    0x00009890 mov r2, r4                                    |         r2 = r4;
    0x00009892 mov r1, r8                                    |         r1 = r8;
    0x00009894 mov r0, sb                                    |         r0 = sb;
    0x00009896 adds.w r3, sl, r3                             |         r3 = sl + r3;
    0x0000989a str r3, [sp]                                  |         *(sp) = r3;
    0x0000989c adc r3, r6, 0                                 |         __asm ("adc r3, r6, 0");
    0x000098a0 str r3, [sp, 4]                               |         var_4h = r3;
    0x000098a2 blx 0x2340                                    |         r0 = deflateEnd ();
    0x000098a6 adds r3, r0, 1                                |         r3 = r0 + 1;
                                                             |         if (r3 == r0) {
    0x000098a8 beq.w 0x9b3c                                  |             goto label_40;
                                                             |         }
    0x000098ac cmp r0, 0                                     |         
                                                             |         if (r0 <= 0) {
    0x000098ae ble 0x98c4                                    |             goto label_41;
                                                             |         }
    0x000098b0 add sl, r0                                    |         sl += r0;
    0x000098b2 cmp r5, sl                                    |         
                                                             |         if (r5 < sl) {
    0x000098b4 bls 0x98c8                                    |             goto label_28;
                                                             |         }
    0x000098b6 asr.w r6, sl, 0x1f                            |         r6 = sl >> 0x1f;
    0x000098ba sub.w r4, r5, sl                              |         r4 = r5 - sl;
    0x000098be add.w r8, r7, sl                              |         r8 = r7 + sl;
    0x000098c2 b 0x988e                                      |         
                                                             |     } while (1);
                                                             |     if (r5 != sl) {
                                                             | label_41:
    0x000098c4 bne.w 0x9e8c                                  |         goto label_42;
                                                             |     }
                                                             | label_28:
    0x000098c8 cmp r5, sl                                    |     
                                                             |     if (r5 != sl) {
    0x000098ca bne.w 0x9b48                                  |         goto label_43;
                                                             |     }
    0x000098ce ldr r0, [sp, 0x20]                            |     r0 = var_20h_2;
    0x000098d0 blx 0x21f4                                    |     fcn_000021f4 ();
    0x000098d4 ldr.w r3, [fp, 0x54]                          |     r3 = *(arg_54h);
    0x000098d8 bic r3, r3, 1                                 |     r3 = BIT_MASK (r3, 1);
    0x000098dc str.w r3, [fp, 0x54]                          |     __asm ("str.w r3, [arg_54h]");
    0x000098e0 ldr.w r3, [fp, 0x40]                          |     r3 = *(arg_40h);
    0x000098e4 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x000098e6 beq.w 0x9d52                                  |         goto label_44;
                                                             |     }
    0x000098ea ldr r3, [sp, 0x18]                            |     r3 = var_18h_2;
    0x000098ec ldr r5, [r3, 0x1c]                            |     r5 = *((r3 + 0x1c));
    0x000098ee movs r3, 1                                    |     r3 = 1;
    0x000098f0 str r3, [sp, 0x44]                            |     var_44h = r3;
                                                             | label_37:
    0x000098f2 ldr r3, [sp, 0x3c]                            |     r3 = var_3ch;
    0x000098f4 movs r7, 0                                    |     r7 = 0;
    0x000098f6 ldr r3, [r3, -0x3c]                           |     r3 = *((r3 - 0x3c));
    0x000098fa add.w r5, r5, r3, lsl 5                       |     r5 += (r3 << 5);
                                                             | label_18:
    0x000098fe ldr r2, [sp, 0x50]                            |     r2 = var_50h;
                                                             |     if (r2 != 0) {
    0x00009900 cbz r2, 0x995c                                |         
    0x00009902 movw r3, 0x745d                               |         
    0x00009906 movt r3, 0x5d1                                |         r3 = 0x5d1745d;
    0x0000990a cmp r2, r3                                    |         
                                                             |         if (r2 > r3) {
    0x0000990c bhi.w 0x9dca                                  |             goto label_45;
                                                             |         }
    0x00009910 ldr r3, [sp, 0x18]                            |         r3 = var_18h_2;
    0x00009912 ldr r3, [r3, 0x20]                            |         r3 = *((r3 + 0x20));
    0x00009914 str r3, [sp, 0x74]                            |         var_74h = r3;
    0x00009916 ldr.w r3, [fp, 0x20]                          |         r3 = *(arg_20h);
    0x0000991a str r3, [sp, 0x78]                            |         var_78h = r3;
    0x0000991c ldr.w r3, [fp, 0x24]                          |         r3 = *(arg_24h);
    0x00009920 str r3, [sp, 0x7c]                            |         var_7ch = r3;
    0x00009922 ldr r3, [sp, 0x38]                            |         r3 = var_38h;
    0x00009924 cmp r3, 0                                     |         
                                                             |         if (r3 != 0) {
    0x00009926 bne 0x9994                                    |             goto label_46;
                                                             |         }
    0x00009928 ldr.w r3, [fp, 0x3c]                          |         r3 = *(arg_3ch);
    0x0000992c str r3, [sp, 0x5c]                            |         var_5ch = r3;
                                                             |         if (r3 == 0) {
    0x0000992e cbz r3, 0x9994                                |             goto label_46;
                                                             |         }
    0x00009930 ldr.w r3, [fp, 0x2c]                          |         r3 = *(arg_2ch);
    0x00009934 lsls r6, r3, 0x1f                             |         r6 = r3 << 0x1f;
    0x00009936 str r3, [sp, 0x48]                            |         var_48h = r3;
                                                             |         if (r6 < r3) {
    0x00009938 bmi 0x9994                                    |             goto label_46;
                                                             |         }
    0x0000993a ldr r3, [sp, 0x50]                            |         r3 = var_50h;
    0x0000993c lsls r3, r3, 2                                |         r3 <<= 2;
    0x0000993e str r3, [sp, 0x64]                            |         var_64h = r3;
    0x00009940 ldr r3, [sp, 0x38]                            |         r3 = var_38h;
    0x00009942 str r3, [sp, 0x68]                            |         var_68h = r3;
    0x00009944 b 0x99b2                                      |         goto label_47;
                                                             | label_3:
    0x00009946 it ne                                         |         
                                                             |         if (r3 == r3) {
    0x00009948 movne r3, r0                                  |             r3 = r0;
                                                             |         }
                                                             | label_4:
    0x0000994a cmp r3, r5                                    |         
                                                             |         if (r3 != r5) {
    0x0000994c bne.w 0x9d3a                                  |             goto label_24;
                                                             |         }
                                                             | label_2:
    0x00009950 ldr r0, [sp, 0x68]                            |         r0 = var_68h;
    0x00009952 blx 0x21f4                                    |         fcn_000021f4 ();
    0x00009956 ldr r0, [sp, 0x60]                            |         r0 = var_60h;
    0x00009958 blx 0x21f4                                    |         fcn_000021f4 ();
                                                             |     }
    0x0000995c ldr.w r3, [fp, 0x2c]                          |     r3 = *(arg_2ch);
    0x00009960 bic r3, r3, 1                                 |     r3 = BIT_MASK (r3, 1);
    0x00009964 str.w r3, [fp, 0x2c]                          |     __asm ("str.w r3, [arg_2ch]");
                                                             | label_7:
    0x00009968 ldr.w r2, [pc, 0x57c]                         |     r2 = *(0x00009ee8);
    0x0000996c add.w r1, sp, 0x9000                          |     r1 += arg_9000h;
    0x00009970 ldr.w r3, [pc, 0x568]                         |     r3 = *(0x9edc);
    0x00009974 adds r1, 0xbc                                 |     r1 += 0xbc;
    0x00009976 add r2, pc                                    |     r2 += pc;
    0x00009978 ldr r3, [r2, r3]                              |     r3 = *((r2 + r3));
    0x0000997a ldr r2, [r3]                                  |     r2 = *(0x9edc);
    0x0000997c ldr r3, [r1]                                  |     r3 = *(r1);
    0x0000997e eors r2, r3                                   |     r2 ^= r3;
    0x00009980 mov.w r3, 0                                   |     r3 = 0;
                                                             |     if (r2 != r3) {
    0x00009984 bne.w 0x9ebc                                  |         goto label_48;
                                                             |     }
    0x00009988 ldr r0, [sp, 0x40]                            |     r0 = var_40h;
    0x0000998a add.w sp, sp, 0x9000                          |     
    0x0000998e add sp, 0xc4                                  |     
    0x00009990 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}    |     
                                                             | label_46:
    0x00009994 ldr r2, [sp, 0x50]                            |     r2 = var_50h;
    0x00009996 lsls r3, r2, 2                                |     r3 = r2 << 2;
    0x00009998 adds r0, r3, r2                               |     r0 = r3 + r2;
    0x0000999a str r3, [sp, 0x64]                            |     var_64h = r3;
    0x0000999c lsls r0, r0, 3                                |     r0 <<= 3;
    0x0000999e blx 0x22c8                                    |     deflateInit_ ();
    0x000099a2 str r0, [sp, 0x5c]                            |     var_5ch = r0;
    0x000099a4 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x000099a6 beq.w 0x9e4e                                  |         goto label_49;
                                                             |     }
    0x000099aa ldr.w r2, [fp, 0x2c]                          |     r2 = *(arg_2ch);
    0x000099ae str r0, [sp, 0x68]                            |     var_68h = r0;
    0x000099b0 str r2, [sp, 0x48]                            |     var_48h = r2;
                                                             | label_47:
    0x000099b2 ldr r0, [sp, 0x64]                            |     r0 = var_64h;
    0x000099b4 add.w r4, fp, 0xa8                            |     r4 += arg_a8h;
    0x000099b8 blx 0x22c8                                    |     deflateInit_ ();
    0x000099bc str r0, [sp, 0x60]                            |     var_60h = r0;
    0x000099be ldr r1, [sp, 0x60]                            |     r1 = var_60h;
    0x000099c0 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x000099c2 beq.w 0x9e1a                                  |         goto label_50;
                                                             |     }
                                                             | label_0:
    0x000099c6 ldr r2, [r4]                                  |     r2 = *(r4);
                                                             |     if (r2 == 0) {
    0x000099c8 cbz r2, 0x99e0                                |         goto label_51;
                                                             |     }
    0x000099ca mov r3, r1                                    |     r3 = r1;
    0x000099cc add.w r1, r1, r2, lsl 2                       |     r1 += (r2 << 2);
    0x000099d0 add.w r2, r4, 0x10                            |     r2 = r4 + 0x10;
                                                             |     do {
    0x000099d4 str r2, [r3], 4                               |         *(r3) = r2;
                                                             |         r3 += 4;
    0x000099d8 cmp r1, r3                                    |         
    0x000099da add.w r2, r2, 0x98                            |         r2 += 0x98;
    0x000099de bne 0x99d4                                    |         
                                                             |     } while (r1 != r3);
                                                             | label_51:
    0x000099e0 ldr r4, [r4, 8]                               |     r4 = *((r4 + 8));
    0x000099e2 cmp r4, 0                                     |     
                                                             |     if (r4 != 0) {
    0x000099e4 bne 0x99c6                                    |         goto label_0;
                                                             |     }
    0x000099e6 ldr.w r2, [pc, 0x504]                         |     r2 = *(0x00009eec);
    0x000099ea mov r6, r5                                    |     r6 = r5;
    0x000099ec ldr r0, [sp, 0x60]                            |     r0 = var_60h;
    0x000099ee ldr r3, [sp, 0x64]                            |     r3 = var_64h;
    0x000099f0 add r2, pc                                    |     r2 += pc;
    0x000099f2 str r2, [sp, 0x70]                            |     var_70h = r2;
    0x000099f4 subs r1, r1, r0                               |     r1 -= r0;
    0x000099f6 adds r3, r0, r3                               |     r3 = r0 + r3;
    0x000099f8 ldr.w r2, [pc, 0x4f4]                         |     r2 = *(0x00009ef0);
    0x000099fc str r3, [sp, 0x54]                            |     var_54h_2 = r3;
    0x000099fe asrs r1, r1, 2                                |     r1 >>= 2;
    0x00009a00 ldr.w r3, [pc, 0x4f0]                         |     r3 = *(0x00009ef4);
    0x00009a04 add r2, pc                                    |     r2 += pc;
    0x00009a06 str r0, [sp, 0x30]                            |     var_30h = r0;
    0x00009a08 str r2, [sp, 0x6c]                            |     var_6ch = r2;
    0x00009a0a movs r2, 4                                    |     r2 = 4;
    0x00009a0c add r3, pc                                    |     r3 += pc;
    0x00009a0e blx 0x23d0                                    |     inflateReset ();
    0x00009a12 str.w fp, [sp, 0x24]                          |     __asm ("str.w fp, [var_24h]");
                                                             | label_1:
    0x00009a16 ldr r3, [sp, 0x30]                            |     r3 = var_30h;
    0x00009a18 ldr r2, [r3], 4                               |     r2 = *(r3);
                                                             |     r3 += 4;
    0x00009a1c str r3, [sp, 0x30]                            |     var_30h = r3;
    0x00009a1e ldr r3, [r2, 0x68]                            |     r3 = *((r2 + 0x68));
    0x00009a20 str r2, [sp, 0x20]                            |     var_20h_2 = r2;
    0x00009a22 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x00009a24 bne.w 0x9b54                                  |         goto label_52;
                                                             |     }
    0x00009a28 ldr r3, [r2, 0x78]                            |     r3 = *((r2 + 0x78));
    0x00009a2a lsls r4, r3, 0x1f                             |     r4 = r3 << 0x1f;
                                                             |     if (r4 < r3) {
    0x00009a2c bmi.w 0x9ec0                                  |         goto label_53;
                                                             |     }
                                                             | label_9:
    0x00009a30 ldr r3, [sp, 0x38]                            |     r3 = var_38h;
    0x00009a32 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x00009a34 bne.w 0x9baa                                  |         goto label_54;
                                                             |     }
                                                             | label_10:
    0x00009a38 ldr r2, [sp, 0x24]                            |     r2 = var_24h;
    0x00009a3a ldr r3, [r2, 0x3c]                            |     r3 = *((r2 + 0x3c));
                                                             |     if (r3 != 0) {
    0x00009a3c cbz r3, 0x9a44                                |         
    0x00009a3e ldr r3, [r2, 0x2c]                            |         r3 = *((r2 + 0x2c));
    0x00009a40 lsls r0, r3, 0x1f                             |         r0 = r3 << 0x1f;
                                                             |         if (r0 >= r3) {
    0x00009a42 bpl 0x9a86                                    |             goto label_11;
                                                             |         }
                                                             |     }
    0x00009a44 ldr r2, [sp, 0x20]                            |     r2 = var_20h_2;
    0x00009a46 ldr r1, [sp, 0x5c]                            |     r1 = var_5ch;
    0x00009a48 ldr r3, [r2, 0x68]                            |     r3 = *((r2 + 0x68));
    0x00009a4a ldr r2, [r2, 0x70]                            |     r2 = *((r2 + 0x70));
    0x00009a4c add.w r3, r3, r3, lsl 2                       |     r3 += (r3 << 2);
    0x00009a50 add.w ip, r2, 0x20                            |     
    0x00009a54 add.w r3, r1, r3, lsl 3                       |     r3 = r1 + (r3 << 3);
                                                             |     do {
    0x00009a58 ldr r5, [r2]                                  |         r5 = *(r2);
    0x00009a5a adds r2, 0x10                                 |         r2 += 0x10;
    0x00009a5c ldr r4, [r2, -0xc]                            |         r4 = *((r2 - 0xc));
    0x00009a60 adds r3, 0x10                                 |         r3 += 0x10;
    0x00009a62 ldr r0, [r2, -0x8]                            |         r0 = *((r2 - 0x8));
    0x00009a66 ldr r1, [r2, -0x4]                            |         r1 = *((r2 - 0x4));
    0x00009a6a cmp r2, ip                                    |         
    0x00009a6c str r5, [r3, -0x10]                           |         *((r3 - 0x10)) = r5;
    0x00009a70 str r4, [r3, -0xc]                            |         *((r3 - 0xc)) = r4;
    0x00009a74 str r0, [r3, -0x8]                            |         *((r3 - 0x8)) = r0;
    0x00009a78 str r1, [r3, -0x4]                            |         *((r3 - 0x4)) = r1;
    0x00009a7c bne 0x9a58                                    |         
                                                             |     } while (r2 != ip);
    0x00009a7e ldr r1, [r2]                                  |     r1 = *(r2);
    0x00009a80 ldr r2, [r2, 4]                               |     r2 = *((r2 + 4));
    0x00009a82 str r1, [r3]                                  |     *(r3) = r1;
    0x00009a84 str r2, [r3, 4]                               |     *((r3 + 4)) = r2;
                                                             | label_11:
    0x00009a86 ldr r2, [sp, 0x20]                            |     r2 = var_20h_2;
    0x00009a88 ldr r1, [sp, 0x48]                            |     r1 = var_48h;
    0x00009a8a ldr r3, [r2, 0x74]                            |     r3 = *((r2 + 0x74));
    0x00009a8c orrs r1, r3                                   |     r1 |= r3;
    0x00009a8e bic r3, r3, 1                                 |     r3 = BIT_MASK (r3, 1);
    0x00009a92 str r3, [r2, 0x74]                            |     *((r2 + 0x74)) = r3;
    0x00009a94 ldr r3, [sp, 0x54]                            |     r3 = var_54h_2;
    0x00009a96 ldr r2, [sp, 0x30]                            |     r2 = var_30h;
    0x00009a98 str r1, [sp, 0x48]                            |     var_48h = r1;
    0x00009a9a cmp r3, r2                                    |     
                                                             |     if (r3 != r2) {
    0x00009a9c bne 0x9a16                                    |         goto label_1;
                                                             |     }
    0x00009a9e ldrd r3, r2, [sp, 0x74]                       |     __asm ("ldrd r3, r2, [var_74h]");
    0x00009aa2 ldr.w fp, [sp, 0x24]                          |     fp = var_24h;
    0x00009aa6 adds r4, r3, r2                               |     r4 = r3 + r2;
    0x00009aa8 ldr r3, [sp, 0x7c]                            |     r3 = var_7ch;
    0x00009aaa adc r3, r3, 0                                 |     __asm ("adc r3, r3, 0");
    0x00009aae cmp r6, r4                                    |     
    0x00009ab0 str r3, [sp, 0x14]                            |     var_14h = r3;
    0x00009ab2 sbcs.w r3, r7, r3                             |     __asm ("sbcs.w r3, r7, r3");
    0x00009ab6 ldr.w r3, [fp, 0x2c]                          |     r3 = *(arg_2ch);
    0x00009aba and r3, r3, 1                                 |     r3 &= 1;
    0x00009abe it ge                                         |     
                                                             |     if (r6 < r4) {
    0x00009ac0 movge r3, 0                                   |         r3 = 0;
                                                             |     }
    0x00009ac2 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x00009ac4 bne.w 0x9e5c                                  |         goto label_55;
                                                             |     }
                                                             | label_27:
    0x00009ac8 ldr r3, [sp, 0x48]                            |     r3 = var_48h;
    0x00009aca lsls r1, r3, 0x1f                             |     r1 = r3 << 0x1f;
                                                             |     if (r1 >= r3) {
    0x00009acc bpl.w 0x9950                                  |         goto label_2;
                                                             |     }
    0x00009ad0 ldr r5, [sp, 0x64]                            |     r5 = var_64h;
    0x00009ad2 mov.w sb, 0                                   |     sb = 0;
    0x00009ad6 ldr r3, [sp, 0x50]                            |     r3 = var_50h;
    0x00009ad8 mov r7, sb                                    |     r7 = sb;
    0x00009ada ldr.w r8, [fp, 0x18]                          |     r8 = *(arg_18h);
    0x00009ade ldr.w sl, [sp, 0x5c]                          |     sl = var_5ch;
    0x00009ae2 add r5, r3                                    |     r5 += r3;
    0x00009ae4 lsls r5, r5, 3                                |     r5 <<= 3;
    0x00009ae6 mov r6, r5                                    |     r6 = r5;
                                                             | label_5:
    0x00009ae8 adds.w r3, sb, r4                             |     r3 = sb + r4;
    0x00009aec mov r2, r6                                    |     r2 = r6;
    0x00009aee str r3, [sp]                                  |     *(sp) = r3;
    0x00009af0 mov r1, sl                                    |     r1 = sl;
    0x00009af2 ldr r3, [sp, 0x14]                            |     r3 = var_14h;
    0x00009af4 mov r0, r8                                    |     r0 = r8;
    0x00009af6 adc.w r3, r3, r7                              |     __asm ("adc.w r3, r3, r7");
    0x00009afa str r3, [sp, 4]                               |     var_4h = r3;
    0x00009afc blx 0x2340                                    |     r0 = deflateEnd ();
    0x00009b00 adds r2, r0, 1                                |     r2 = r0 + 1;
    0x00009b02 mov r3, sb                                    |     r3 = sb;
                                                             |     if (r2 == r0) {
    0x00009b04 beq.w 0x9df8                                  |         goto label_56;
                                                             |     }
    0x00009b08 cmp r0, 0                                     |     
                                                             |     if (r0 <= 0) {
    0x00009b0a ble.w 0x9946                                  |         goto label_3;
                                                             |     }
    0x00009b0e add sb, r0                                    |     sb += r0;
    0x00009b10 cmp r5, sb                                    |     
    0x00009b12 mov r3, sb                                    |     r3 = sb;
                                                             |     if (r5 < sb) {
    0x00009b14 bls.w 0x994a                                  |         goto label_4;
                                                             |     }
    0x00009b16 add r7, sp, 0x64                              |     r7 = sp + 0x64;
    0x00009b18 ldr r3, [sp, 0x5c]                            |     r3 = var_5ch;
    0x00009b1a asr.w r7, sb, 0x1f                            |     r7 = sb >> 0x1f;
    0x00009b1e sub.w r6, r5, sb                              |     r6 = r5 - sb;
    0x00009b22 add.w sl, r3, sb                              |     sl = r3 + sb;
    0x00009b26 b 0x9ae8                                      |     goto label_5;
                                                             | label_32:
    0x00009b28 blx 0x2328                                    |     r0 = memset (r0, r1, r2);
    0x00009b2c ldr r3, [r0]                                  |     r3 = *(r0);
    0x00009b2e cmp r3, 4                                     |     
                                                             |     if (r3 == 4) {
    0x00009b30 beq.w 0x97e6                                  |         goto label_6;
                                                             |     }
                                                             | label_12:
    0x00009b34 movs r0, 0x14                                 |     r0 = 0x14;
    0x00009b36 bl 0x259c                                     |     fcn_0000259c (r0);
    0x00009b3a b 0x9968                                      |     goto label_7;
                                                             | label_40:
    0x00009b3c blx 0x2328                                    |     r0 = memset (r0, r1, r2);
    0x00009b40 ldr r3, [r0]                                  |     r3 = *(r0);
    0x00009b42 cmp r3, 4                                     |     
                                                             |     if (r3 == 4) {
    0x00009b44 beq.w 0x988e                                  |         goto label_8;
                                                             |     }
                                                             | label_43:
    0x00009b48 ldr r3, [sp, 0x1c]                            |     r3 = var_1ch_2;
    0x00009b4a movs r0, 0x14                                 |     r0 = 0x14;
    0x00009b4c str r3, [sp, 0x40]                            |     var_40h = r3;
    0x00009b4e bl 0x259c                                     |     fcn_0000259c (r0);
    0x00009b52 b 0x9968                                      |     goto label_7;
                                                             | label_52:
    0x00009b54 ldr r1, [sp, 0x20]                            |     r1 = var_20h_2;
    0x00009b56 ldr r4, [r1, 0x70]                            |     r4 = *((r1 + 0x70));
    0x00009b58 ldr r3, [r4, 4]                               |     r3 = *((r4 + 4));
    0x00009b5a cmp r3, 8                                     |     
                                                             |     if (r3 == 8) {
    0x00009b5c beq.w 0x9a30                                  |         goto label_9;
                                                             |     }
    0x00009b60 ldr r0, [sp, 0x24]                            |     r0 = var_24h;
    0x00009b62 ldr r3, [r4, 0x10]                            |     r3 = *((r4 + 0x10));
    0x00009b64 ldr r2, [r0, 0x20]                            |     r2 = *((r0 + 0x20));
    0x00009b66 adds r3, r3, r2                               |     r3 += r2;
    0x00009b68 ldr r2, [r0, 0x24]                            |     r2 = *((r0 + 0x24));
    0x00009b6a str r3, [sp, 0x2c]                            |     var_2ch = r3;
    0x00009b6c ldr r3, [r1, 0x30]                            |     r3 = *((r1 + 0x30));
    0x00009b6e adc r2, r2, 0                                 |     __asm ("adc r2, r2, 0");
    0x00009b72 str r2, [sp, 0x34]                            |     var_34h = r2;
    0x00009b74 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x00009b76 bne 0x9be4                                    |         goto label_57;
                                                             |     }
    0x00009b78 ldr r3, [sp, 0x2c]                            |     r3 = var_2ch;
    0x00009b7a cmp r6, r3                                    |     
    0x00009b7c ldr r3, [sp, 0x34]                            |     r3 = var_34h;
    0x00009b7e sbcs.w r3, r7, r3                             |     __asm ("sbcs.w r3, r7, r3");
    0x00009b82 ldr r3, [sp, 0x44]                            |     r3 = var_44h;
    0x00009b84 and r3, r3, 1                                 |     r3 &= 1;
    0x00009b88 it ge                                         |     
                                                             |     if (r6 < r3) {
    0x00009b8a movge r3, 0                                   |         r3 = 0;
                                                             |     }
    0x00009b8c cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x00009b8e bne.w 0x9d84                                  |         goto label_58;
                                                             |     }
                                                             | label_20:
    0x00009b92 ldr r3, [sp, 0x2c]                            |     r3 = var_2ch;
    0x00009b94 ldr r6, [r4, 0x14]                            |     r6 = *((r4 + 0x14));
    0x00009b96 adds r6, r6, r3                               |     r6 += r3;
    0x00009b98 ldr r3, [sp, 0x34]                            |     r3 = var_34h;
    0x00009b9a adc r7, r3, 0                                 |     __asm ("adc r7, r3, 0");
    0x00009b9e movs r3, 0                                    |     r3 = 0;
    0x00009ba0 str r3, [sp, 0x44]                            |     var_44h = r3;
    0x00009ba2 ldr r3, [sp, 0x38]                            |     r3 = var_38h;
    0x00009ba4 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00009ba6 beq.w 0x9a38                                  |         goto label_10;
                                                             |     }
                                                             | label_54:
    0x00009baa ldr r3, [sp, 0x20]                            |     r3 = var_20h_2;
    0x00009bac ldr r2, [sp, 0x5c]                            |     r2 = var_5ch;
    0x00009bae ldr r0, [r3, 0x68]                            |     r0 = *((r3 + 0x68));
    0x00009bb0 ldr r1, [r3, 0x70]                            |     r1 = *((r3 + 0x70));
    0x00009bb2 movs r3, 1                                    |     r3 = 1;
    0x00009bb4 add.w r0, r0, r0, lsl 2                       |     r0 += (r0 << 2);
    0x00009bb8 add.w r0, r2, r0, lsl 3                       |     r0 = r2 + (r0 << 3);
    0x00009bbc ldr r2, [sp, 0x6c]                            |     r2 = var_6ch;
    0x00009bbe ldr r4, [r2, 0x24]                            |     r4 = *((r2 + 0x24));
    0x00009bc0 movs r2, 0x28                                 |     r2 = 0x28;
    0x00009bc2 blx r4                                        |     uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00009bc4 b 0x9a86                                      |     goto label_11;
                                                             | label_33:
    0x00009bc6 cmp r7, 0x34                                  |     
                                                             |     if (r7 != 0x34) {
    0x00009bc8 bne 0x9b34                                    |         goto label_12;
                                                             |     }
    0x00009bca ldr.w r3, [fp, 0x50]                          |     r3 = *(arg_50h);
    0x00009bce bic r3, r3, 1                                 |     r3 = BIT_MASK (r3, 1);
    0x00009bd2 str.w r3, [fp, 0x50]                          |     __asm ("str.w r3, [arg_50h]");
    0x00009bd6 ldr.w r3, [fp, 0x40]                          |     r3 = *(arg_40h);
    0x00009bda clz r3, r3                                    |     r3 &= r3;
    0x00009bde lsrs r3, r3, 5                                |     r3 >>= 5;
    0x00009be0 str r3, [sp, 0x44]                            |     var_44h = r3;
    0x00009be2 b 0x9818                                      |     goto label_13;
                                                             | label_57:
    0x00009be4 add.w r3, sp, 0x10a0                          |     r3 += arg_10a0h;
    0x00009be8 movs r4, 0                                    |     r4 = 0;
    0x00009bea adds r3, 0x1c                                 |     r3 += 0x1c;
    0x00009bec mov r2, r6                                    |     r2 = r6;
    0x00009bee str r3, [sp, 0x58]                            |     var_58h = r3;
    0x00009bf0 mov r3, r7                                    |     r3 = r7;
    0x00009bf2 mov r7, r1                                    |     r7 = r1;
    0x00009bf4 b 0x9c32                                      |     
                                                             |     while (r2 < r5) {
    0x00009bf6 orrs r0, r1                                   |         r0 |= r1;
    0x00009bf8 ldr r0, [sp, 0x44]                            |         r0 = var_44h;
    0x00009bfa and r0, r0, 1                                 |         r0 &= 1;
    0x00009bfe it ne                                         |         
                                                             |         if (r0 == r1) {
    0x00009c00 movne r0, 0                                   |             r0 = 0;
                                                             |         }
    0x00009c02 cmp r0, 0                                     |         
                                                             |         if (r0 != 0) {
    0x00009c04 bne 0x9cf2                                    |             goto label_59;
                                                             |         }
    0x00009c06 ldr r0, [sp, 0x20]                            |         r0 = var_20h_2;
    0x00009c08 ldr r5, [sp, 0x24]                            |         r5 = var_24h;
    0x00009c0a ldr r0, [r0, 0x78]                            |         r0 = *((r0 + 0x78));
    0x00009c0c ldr r5, [r5, 0x2c]                            |         r5 = *((r5 + 0x2c));
    0x00009c0e orrs r0, r5                                   |         r0 |= r5;
    0x00009c10 ldr r5, [r7, 0x2c]                            |         r5 = *((r7 + 0x2c));
    0x00009c12 orrs r0, r5                                   |         r0 |= r5;
    0x00009c14 lsls r0, r0, 0x1f                             |         r0 <<= 0x1f;
                                                             |         if (r0 < r0) {
    0x00009c16 bmi 0x9cf2                                    |             goto label_59;
                                                             |         }
    0x00009c18 ldr r6, [r7, 0xc]                             |         r6 = *((r7 + 0xc));
                                                             | label_14:
    0x00009c1a ldr r3, [sp, 0x14]                            |         r3 = var_14h;
    0x00009c1c bic r5, r5, 1                                 |         r5 = BIT_MASK (r5, 1);
    0x00009c20 str r5, [r7, 0x2c]                            |         *((r7 + 0x2c)) = r5;
    0x00009c22 ldr r7, [r7, 0x28]                            |         r7 = *((r7 + 0x28));
    0x00009c24 adds r2, r6, r3                               |         r2 = r6 + r3;
    0x00009c26 ldr r3, [sp, 0x18]                            |         r3 = var_18h_2;
    0x00009c28 adc r3, r3, 0                                 |         __asm ("adc r3, r3, 0");
    0x00009c2c cmp r7, 0                                     |         
                                                             |         if (r7 == 0) {
    0x00009c2e beq.w 0x9dd8                                  |             goto label_60;
                                                             |         }
    0x00009c32 ldrd r1, r0, [r7, 0x10]                       |         __asm ("ldrd r1, r0, [r7, 0x10]");
    0x00009c36 ldr r5, [sp, 0x2c]                            |         r5 = var_2ch;
    0x00009c38 ldr r6, [sp, 0x34]                            |         r6 = var_34h;
    0x00009c3a adds r5, r1, r5                               |         r5 = r1 + r5;
    0x00009c3c adc.w r6, r0, r6                              |         __asm ("adc.w r6, r0, r6");
    0x00009c40 cmp r2, r5                                    |         
    0x00009c42 str r5, [sp, 0x14]                            |         var_14h = r5;
    0x00009c44 sbcs.w r5, r3, r6                             |         __asm ("sbcs.w r5, r3, r6");
    0x00009c48 str r6, [sp, 0x18]                            |         var_18h_2 = r6;
    0x00009c4a blt 0x9bf6                                    |         
                                                             |     }
                                                             | label_16:
    0x00009c4c ldr r3, [sp, 0x20]                            |     r3 = var_20h_2;
    0x00009c4e ldr r2, [sp, 0x24]                            |     r2 = var_24h;
    0x00009c50 ldr r5, [r7, 0x2c]                            |     r5 = *((r7 + 0x2c));
    0x00009c52 ldr r3, [r3, 0x78]                            |     r3 = *((r3 + 0x78));
    0x00009c54 ldr r2, [r2, 0x2c]                            |     r2 = *((r2 + 0x2c));
    0x00009c56 ldr r6, [r7, 0xc]                             |     r6 = *((r7 + 0xc));
    0x00009c58 orrs r3, r2                                   |     r3 |= r2;
    0x00009c5a orrs r3, r5                                   |     r3 |= r5;
    0x00009c5c lsls r2, r3, 0x1f                             |     r2 = r3 << 0x1f;
                                                             |     if (r2 >= r3) {
    0x00009c5e bpl 0x9c1a                                    |         goto label_14;
                                                             |     }
    0x00009c60 ldr r2, [sp, 0x38]                            |     r2 = var_38h;
    0x00009c62 ldr r3, [r7]                                  |     r3 = *(r7);
    0x00009c64 str r3, [sp, 0x1c]                            |     var_1ch_2 = r3;
    0x00009c66 cmp r2, 0                                     |     
                                                             |     if (r2 != 0) {
    0x00009c68 bne 0x9d60                                    |         goto label_61;
                                                             |     }
    0x00009c6a ldr r2, [sp, 0x58]                            |     r2 = var_58h;
    0x00009c6c subs r3, r3, r2                               |     r3 -= r2;
    0x00009c6e it ne                                         |     
                                                             |     if (r3 == r3) {
    0x00009c70 movne r3, 1                                   |         r3 = 1;
                                                             |     }
    0x00009c72 str r3, [sp, 0x4c]                            |     var_4ch_2 = r3;
                                                             | label_19:
    0x00009c74 ldr r3, [sp, 0x24]                            |     r3 = var_24h;
    0x00009c76 movs r4, 0                                    |     r4 = 0;
    0x00009c78 ldr.w r8, [sp, 0x1c]                          |     r8 = var_1ch_2;
    0x00009c7c mov sl, r6                                    |     sl = r6;
    0x00009c7e str r7, [sp, 0x28]                            |     var_28h = r7;
    0x00009c80 mov sb, r4                                    |     sb = r4;
    0x00009c82 ldr.w fp, [r3, 0x18]                          |     fp = *((r3 + 0x18));
    0x00009c86 mov r7, r8                                    |     r7 = r8;
    0x00009c88 mov r8, r6                                    |     r8 = r6;
                                                             |     do {
                                                             | label_15:
    0x00009c8a ldr r3, [sp, 0x14]                            |         r3 = var_14h;
    0x00009c8c mov r2, sl                                    |         r2 = sl;
    0x00009c8e mov r1, r7                                    |         r1 = r7;
    0x00009c90 mov r0, fp                                    |         r0 = fp;
    0x00009c92 adds r3, r4, r3                               |         r3 = r4 + r3;
    0x00009c94 str r3, [sp]                                  |         *(sp) = r3;
    0x00009c96 ldr r3, [sp, 0x18]                            |         r3 = var_18h_2;
    0x00009c98 adc.w r3, r3, sb                              |         __asm ("adc.w r3, r3, sb");
    0x00009c9c str r3, [sp, 4]                               |         var_4h = r3;
    0x00009c9e blx 0x2340                                    |         r0 = deflateEnd ();
    0x00009ca2 adds r3, r0, 1                                |         r3 = r0 + 1;
    0x00009ca4 mov r5, r0                                    |         r5 = r0;
                                                             |         if (r3 == r0) {
    0x00009ca6 beq 0x9cc0                                    |             goto label_62;
                                                             |         }
    0x00009ca8 cmp r0, 0                                     |         
                                                             |         if (r0 <= 0) {
    0x00009caa ble 0x9d28                                    |             goto label_63;
                                                             |         }
    0x00009cac add r4, r0                                    |         r4 += r0;
    0x00009cae cmp r8, r4                                    |         
                                                             |         if (r8 < r4) {
    0x00009cb0 bls 0x9d22                                    |             goto label_64;
                                                             |         }
    0x00009cb2 ldr r3, [sp, 0x1c]                            |         r3 = var_1ch_2;
    0x00009cb4 asr.w sb, r4, 0x1f                            |         sb = r4 >> 0x1f;
    0x00009cb8 sub.w sl, r8, r4                              |         sl = r8 - r4;
    0x00009cbc adds r7, r3, r4                               |         r7 = r3 + r4;
    0x00009cbe b 0x9c8a                                      |         
                                                             |     } while (1);
                                                             | label_62:
    0x00009cc0 blx 0x2328                                    |     r0 = memset (r0, r1, r2);
    0x00009cc4 ldr r3, [r0]                                  |     r3 = *(r0);
    0x00009cc6 cmp r3, 4                                     |     
                                                             |     if (r3 == 4) {
    0x00009cc8 beq 0x9c8a                                    |         goto label_15;
                                                             |     }
    0x00009cca ldr r7, [sp, 0x28]                            |     r7 = var_28h;
                                                             |     do {
                                                             | label_17:
    0x00009ccc ldr r2, [r7]                                  |         r2 = *(r7);
    0x00009cce ldr r3, [sp, 0x4c]                            |         r3 = var_4ch_2;
    0x00009cd0 ldr r1, [sp, 0x1c]                            |         r1 = var_1ch_2;
    0x00009cd2 ldr r6, [r7, 0xc]                             |         r6 = *((r7 + 0xc));
    0x00009cd4 cmp r2, r1                                    |         
    0x00009cd6 ite eq                                        |         
                                                             |         if (r2 != r1) {
    0x00009cd8 moveq r3, 0                                   |             r3 = 0;
                                                             |         }
                                                             |         if (r2 == r1) {
    0x00009cda andne r3, r3, 1                               |             r3 &= 1;
                                                             |         }
    0x00009cde cmp r6, r5                                    |         
                                                             |         if (r6 != r5) {
    0x00009ce0 bne 0x9d32                                    |             goto label_65;
                                                             |         }
                                                             |         if (r3 != 0) {
    0x00009ce2 cbz r3, 0x9cec                                |             
    0x00009ce4 ldr r0, [sp, 0x1c]                            |             r0 = var_1ch_2;
    0x00009ce6 blx 0x21f4                                    |             fcn_000021f4 ();
    0x00009cea ldr r6, [r7, 0xc]                             |             r6 = *((r7 + 0xc));
                                                             |         }
    0x00009cec ldr r5, [r7, 0x2c]                            |         r5 = *((r7 + 0x2c));
    0x00009cee movs r4, 1                                    |         r4 = 1;
    0x00009cf0 b 0x9c1a                                      |         goto label_14;
                                                             | label_59:
    0x00009cf2 ldr r5, [sp, 0x2c]                            |         r5 = var_2ch;
    0x00009cf4 subs r1, r1, r2                               |         r1 -= r2;
    0x00009cf6 ldr r0, [sp, 0x3c]                            |         r0 = var_3ch;
    0x00009cf8 add r1, r5                                    |         r1 += r5;
    0x00009cfa str r1, [sp]                                  |         *(sp) = r1;
    0x00009cfc sub.w r1, r0, 0x40                            |         r1 = r0 - 0x40;
    0x00009d00 str r1, [sp, 8]                               |         var_8h_2 = r1;
    0x00009d02 subs r1, r0, 4                                |         r1 = r0 - 4;
    0x00009d04 str r1, [sp, 4]                               |         var_4h = r1;
    0x00009d06 ldr r1, [sp, 0x24]                            |         r1 = var_24h;
    0x00009d08 ldr r0, [r1, 0x18]                            |         r0 = *((r1 + 0x18));
    0x00009d0a bl 0x8e68                                     |         r0 = fcn_00008e68 (r0, r1, r2, r3, r4, r5);
                                                             |         if (r0 != 0) {
    0x00009d0e cbnz r0, 0x9d40                               |             goto label_21;
                                                             |         }
    0x00009d10 ldr r3, [r7, 0x10]                            |         r3 = *((r7 + 0x10));
    0x00009d12 ldr r2, [sp, 0x34]                            |         r2 = var_34h;
    0x00009d14 adds r3, r5, r3                               |         r3 = r5 + r3;
    0x00009d16 str r3, [sp, 0x14]                            |         var_14h = r3;
    0x00009d18 ldr r3, [r7, 0x14]                            |         r3 = *((r7 + 0x14));
    0x00009d1a adc.w r3, r2, r3                              |         __asm ("adc.w r3, r2, r3");
    0x00009d1e str r3, [sp, 0x18]                            |         var_18h_2 = r3;
    0x00009d20 b 0x9c4c                                      |         goto label_16;
                                                             | label_64:
    0x00009d22 ldr r7, [sp, 0x28]                            |         r7 = var_28h;
    0x00009d24 mov r5, r4                                    |         r5 = r4;
    0x00009d26 b 0x9ccc                                      |         
                                                             |     } while (1);
                                                             | label_63:
    0x00009d28 mov r5, r4                                    |     r5 = r4;
    0x00009d2a ldr r7, [sp, 0x28]                            |     r7 = var_28h;
    0x00009d2c it ne                                         |     
                                                             |     if (r3 == r5) {
    0x00009d2e movne r5, r0                                  |         r5 = r0;
                                                             |     }
    0x00009d30 b 0x9ccc                                      |     goto label_17;
                                                             |     if (r3 != 0) {
                                                             | label_65:
    0x00009d32 cbz r3, 0x9d3a                                |         
    0x00009d34 mov r0, r1                                    |         r0 = r1;
    0x00009d36 blx 0x21f4                                    |         fcn_000021f4 ();
                                                             |     }
                                                             | label_24:
    0x00009d3a movs r0, 0x14                                 |     r0 = 0x14;
    0x00009d3c bl 0x259c                                     |     fcn_0000259c (r0);
                                                             | label_21:
    0x00009d40 ldr r0, [sp, 0x68]                            |     r0 = var_68h;
    0x00009d42 movs r3, 1                                    |     r3 = 1;
    0x00009d44 str r3, [sp, 0x40]                            |     var_40h = r3;
    0x00009d46 blx 0x21f4                                    |     fcn_000021f4 ();
    0x00009d4a ldr r0, [sp, 0x60]                            |     r0 = var_60h;
    0x00009d4c blx 0x21f4                                    |     fcn_000021f4 ();
    0x00009d50 b 0x9968                                      |     goto label_7;
                                                             | label_44:
    0x00009d52 movs r3, 1                                    |     r3 = 1;
    0x00009d54 str r3, [sp, 0x44]                            |     var_44h = r3;
                                                             | label_36:
    0x00009d56 ldr r3, [pc, 0x1a0]                           |     
    0x00009d58 movs r7, 0                                    |     r7 = 0;
    0x00009d5a add r3, pc                                    |     r3 = 0x13c58;
    0x00009d5c ldr r5, [r3, 0xc]                             |     r5 = *(0x13c64);
    0x00009d5e b 0x98fe                                      |     goto label_18;
                                                             | label_61:
    0x00009d60 cmp.w r6, 0x8000                              |     
                                                             |     if (r6 > 0x8000) {
    0x00009d64 bhi 0x9de0                                    |         goto label_66;
                                                             |     }
    0x00009d66 ldr r5, [sp, 0x58]                            |     r5 = var_58h;
    0x00009d68 movs r3, 0                                    |     r3 = 0;
    0x00009d6a str r3, [sp, 0x4c]                            |     var_4ch_2 = r3;
                                                             | label_23:
    0x00009d6c ldr r3, [r7, 4]                               |     r3 = *((r7 + 4));
    0x00009d6e mov r2, r6                                    |     r2 = r6;
    0x00009d70 ldr r0, [sp, 0x70]                            |     r0 = var_70h;
    0x00009d72 ldr r1, [sp, 0x1c]                            |     r1 = var_1ch_2;
    0x00009d74 ldr.w r4, [r0, r3, lsl 2]                     |     offset_0 = r3 << 2;
                                                             |     r4 = *((r0 + offset_0));
    0x00009d78 movs r3, 1                                    |     r3 = 1;
    0x00009d7a mov r0, r5                                    |     r0 = r5;
    0x00009d7c blx r4                                        |     uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00009d7e ldr r6, [r7, 0xc]                             |     r6 = *((r7 + 0xc));
    0x00009d80 str r5, [sp, 0x1c]                            |     var_1ch_2 = r5;
    0x00009d82 b 0x9c74                                      |     goto label_19;
                                                             | label_58:
    0x00009d84 ldr r1, [sp, 0x3c]                            |     r1 = var_3ch;
    0x00009d86 mov r3, r7                                    |     r3 = r7;
    0x00009d88 sub.w r2, r1, 0x40                            |     r2 = r1 - 0x40;
    0x00009d8c str r2, [sp, 8]                               |     var_8h_2 = r2;
    0x00009d8e subs r2, r1, 4                                |     r2 = r1 - 4;
    0x00009d90 str r2, [sp, 4]                               |     var_4h = r2;
    0x00009d92 ldr r2, [sp, 0x2c]                            |     r2 = var_2ch;
    0x00009d94 ldr r1, [sp, 0x24]                            |     r1 = var_24h;
    0x00009d96 subs r2, r2, r6                               |     r2 -= r6;
    0x00009d98 str r2, [sp]                                  |     *(sp) = r2;
    0x00009d9a mov r2, r6                                    |     r2 = r6;
    0x00009d9c ldr r0, [r1, 0x18]                            |     r0 = *((r1 + 0x18));
    0x00009d9e bl 0x8e68                                     |     r0 = fcn_00008e68 (r0, r1, r2, r3, r4, r5);
    0x00009da2 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00009da4 beq.w 0x9b92                                  |         goto label_20;
                                                             |     }
    0x00009da8 b 0x9d40                                      |     goto label_21;
                                                             | label_38:
    0x00009daa ldr r1, [sp, 0x3c]                            |     r1 = var_3ch;
    0x00009dac subs r5, r5, r2                               |     r5 -= r2;
    0x00009dae str r5, [sp]                                  |     *(sp) = r5;
    0x00009db0 sub.w r3, r1, 0x40                            |     r3 = r1 - 0x40;
    0x00009db4 str r3, [sp, 8]                               |     var_8h_2 = r3;
    0x00009db6 subs r3, r1, 4                                |     r3 = r1 - 4;
    0x00009db8 str r3, [sp, 4]                               |     var_4h = r3;
    0x00009dba ldr r3, [sp, 0x40]                            |     r3 = var_40h;
    0x00009dbc ldr.w r0, [fp, 0x18]                          |     r0 = *(arg_18h);
    0x00009dc0 bl 0x8e68                                     |     r0 = fcn_00008e68 (r0, r1, r2, r3, r4, r5);
    0x00009dc4 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00009dc6 beq.w 0x9862                                  |         goto label_22;
                                                             |     }
                                                             | label_45:
    0x00009dca movs r3, 1                                    |     r3 = 1;
    0x00009dcc str r3, [sp, 0x40]                            |     var_40h = r3;
    0x00009dce b 0x9968                                      |     goto label_7;
                                                             | label_35:
    0x00009dd0 mov.w r3, -1                                  |     r3 = -1;
    0x00009dd4 str r3, [sp, 0x40]                            |     var_40h = r3;
    0x00009dd6 b 0x9968                                      |     goto label_7;
                                                             | label_60:
    0x00009dd8 mov r6, r2                                    |     r6 = r2;
    0x00009dda mov r7, r3                                    |     r7 = r3;
    0x00009ddc str r4, [sp, 0x44]                            |     var_44h = r4;
    0x00009dde b 0x9a30                                      |     goto label_9;
                                                             | label_66:
    0x00009de0 mov r0, r6                                    |     r0 = r6;
    0x00009de2 blx 0x22c8                                    |     r0 = deflateInit_ ();
    0x00009de6 mov r5, r0                                    |     r5 = r0;
                                                             |     if (r0 != 0) {
    0x00009de8 cbz r0, 0x9df0                                |         
    0x00009dea movs r3, 1                                    |         r3 = 1;
    0x00009dec str r3, [sp, 0x4c]                            |         var_4ch_2 = r3;
    0x00009dee b 0x9d6c                                      |         goto label_23;
                                                             |     }
    0x00009df0 movs r0, 8                                    |     r0 = 8;
    0x00009df2 bl 0x259c                                     |     fcn_0000259c (r0);
    0x00009df6 b 0x9d40                                      |     goto label_21;
                                                             | label_56:
    0x00009df8 blx 0x2328                                    |     r0 = memset (r0, r1, r2);
    0x00009dfc ldr r3, [r0]                                  |     r3 = *(r0);
    0x00009dfe cmp r3, 4                                     |     
                                                             |     if (r3 != 4) {
    0x00009e00 bne 0x9d3a                                    |         goto label_24;
                                                             |     }
    0x00009e02 b 0x9ae8                                      |     goto label_5;
                                                             | label_31:
    0x00009e04 ldr r3, [pc, 0xf4]                            |     
    0x00009e06 ldr r1, [sp, 0x18]                            |     r1 = var_18h_2;
    0x00009e08 add r3, pc                                    |     r3 = 0x13d08;
    0x00009e0a ldr r4, [r3, 0xc]                             |     r4 = *(0x13d14);
    0x00009e0c ldr r3, [sp, 0x3c]                            |     r3 = var_3ch;
    0x00009e0e sub.w r6, r3, 0x38                            |     r6 = r3 - 0x38;
    0x00009e12 movs r3, 1                                    |     r3 = 1;
    0x00009e14 mov r0, r6                                    |     r0 = r6;
    0x00009e16 blx r4                                        |     uint32_t (*r4)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00009e18 b 0x97d8                                      |     goto label_25;
                                                             | label_50:
    0x00009e1a ldr r0, [sp, 0x68]                            |     r0 = var_68h;
    0x00009e1c mov.w r3, -1                                  |     r3 = -1;
    0x00009e20 str r3, [sp, 0x40]                            |     var_40h = r3;
    0x00009e22 blx 0x21f4                                    |     fcn_000021f4 ();
    0x00009e26 movs r0, 8                                    |     r0 = 8;
    0x00009e28 bl 0x259c                                     |     fcn_0000259c (r0);
    0x00009e2c b 0x9968                                      |     goto label_7;
                                                             | label_39:
    0x00009e2e lsls r4, r4, 5                                |     r4 <<= 5;
    0x00009e30 mov r0, r4                                    |     r0 = r4;
    0x00009e32 blx 0x22c8                                    |     deflateInit_ ();
    0x00009e36 str r0, [sp, 0x20]                            |     var_20h_2 = r0;
                                                             |     if (r0 == 0) {
    0x00009e38 cbz r0, 0x9e80                                |         goto label_67;
                                                             |     }
    0x00009e3a ldr r3, [pc, 0xc4]                            |     
    0x00009e3c mov r2, r4                                    |     r2 = r4;
    0x00009e3e ldr.w r1, [fp, 0x40]                          |     r1 = *(arg_40h);
    0x00009e42 ldr r7, [sp, 0x20]                            |     r7 = var_20h_2;
    0x00009e44 add r3, pc                                    |     r3 = 0x13d4a;
    0x00009e46 ldr r4, [r3, 0x18]                            |     r4 = *(0x13d62);
    0x00009e48 movs r3, 1                                    |     r3 = 1;
    0x00009e4a blx r4                                        |     uint32_t (*r4)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
    0x00009e4c b 0x9872                                      |     goto label_26;
                                                             | label_49:
    0x00009e4e mov.w r3, -1                                  |     r3 = -1;
    0x00009e52 movs r0, 8                                    |     r0 = 8;
    0x00009e54 str r3, [sp, 0x40]                            |     var_40h = r3;
    0x00009e56 bl 0x259c                                     |     fcn_0000259c (r0);
    0x00009e5a b 0x9968                                      |     goto label_7;
                                                             | label_55:
    0x00009e5c ldr r1, [sp, 0x3c]                            |     r1 = var_3ch;
    0x00009e5e mov r3, r7                                    |     r3 = r7;
    0x00009e60 sub.w r2, r1, 0x40                            |     r2 = r1 - 0x40;
    0x00009e64 str r2, [sp, 8]                               |     var_8h_2 = r2;
    0x00009e66 subs r2, r1, 4                                |     r2 = r1 - 4;
    0x00009e68 str r2, [sp, 4]                               |     var_4h = r2;
    0x00009e6a subs r2, r4, r6                               |     r2 = r4 - r6;
    0x00009e6c str r2, [sp]                                  |     *(sp) = r2;
    0x00009e6e mov r2, r6                                    |     r2 = r6;
    0x00009e70 ldr.w r0, [fp, 0x18]                          |     r0 = *(arg_18h);
    0x00009e74 bl 0x8e68                                     |     r0 = fcn_00008e68 (r0, r1, r2, r3, r4, r5);
    0x00009e78 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00009e7a beq.w 0x9ac8                                  |         goto label_27;
                                                             |     }
    0x00009e7e b 0x9d40                                      |     goto label_21;
                                                             | label_67:
    0x00009e80 ldr r3, [sp, 0x1c]                            |     r3 = var_1ch_2;
    0x00009e82 movs r0, 8                                    |     r0 = 8;
    0x00009e84 str r3, [sp, 0x40]                            |     var_40h = r3;
    0x00009e86 bl 0x259c                                     |     fcn_0000259c (r0);
    0x00009e8a b 0x9968                                      |     goto label_7;
                                                             | label_42:
    0x00009e8c mov sl, r0                                    |     sl = r0;
    0x00009e8e b 0x98c8                                      |     goto label_28;
                                                             | label_34:
    0x00009e90 ldr r3, [pc, 0x70]                            |     
    0x00009e92 movw r2, 0x24a                                |     r2 = 0x24a;
    0x00009e96 ldr r1, [pc, 0x70]                            |     
    0x00009e98 ldr r0, [pc, 0x70]                            |     
    0x00009e9a add r3, pc                                    |     r3 = 0x13da2;
    0x00009e9c add r1, pc                                    |     r1 = 0x13daa;
    0x00009e9e adds r3, 0x14                                 |     r3 += 0x14;
    0x00009ea0 add r0, pc                                    |     r0 = 0x13db0;
    0x00009ea2 blx 0x2424                                    |     fchmod (r0, r1);
                                                             | label_30:
    0x00009ea6 ldr r3, [pc, 0x68]                            |     
    0x00009ea8 mov.w r2, 0x228                               |     r2 = 0x228;
    0x00009eac ldr r1, [pc, 0x64]                            |     
    0x00009eae ldr r0, [pc, 0x68]                            |     
    0x00009eb0 add r3, pc                                    |     r3 = 0x13dc6;
    0x00009eb2 add r1, pc                                    |     r1 = 0x13dca;
    0x00009eb4 adds r3, 0x14                                 |     r3 += 0x14;
    0x00009eb6 add r0, pc                                    |     r0 = 0x13dd4;
    0x00009eb8 blx 0x2424                                    |     r0 = fchmod (r0, r1);
                                                             | label_48:
    0x00009ebc blx 0x2250                                    |     sysconf ();
                                                             | label_53:
    0x00009ec0 ldr r3, [pc, 0x58]                            |     
    0x00009ec2 movw r2, 0x2c3                                |     r2 = 0x2c3;
    0x00009ec6 ldr r1, [pc, 0x58]                            |     
    0x00009ec8 ldr r0, [pc, 0x58]                            |     
    0x00009eca add r3, pc                                    |     r3 = 0x13dea;
    0x00009ecc add r1, pc                                    |     r1 = 0x13df2;
    0x00009ece adds r3, 0x14                                 |     r3 += 0x14;
    0x00009ed0 add r0, pc                                    |     r0 = 0x13df8;
    0x00009ed2 blx 0x2424                                    |     fchmod (r0, r1);
    0x00009ed6 nop                                           |     
    0x00009ed8 str r0, [r5, 0x74]                            |     *((r5 + 0x74)) = r0;
    0x00009eda movs r1, r0                                   |     r1 = r0;
    0x00009edc lsls r4, r7, 3                                |     r4 = r7 << 3;
    0x00009ede movs r0, r0                                   |     
    0x00009ee0 bx r2                                         |     return uint32_t (*r2)() ();
                                                             | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libelf-0.185.so @ 0xa870).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate 
the needed data for the issue.
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libelf-0.185.so @ 0x5cdc */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                                 |                                ((n & 0x0000ff00) <<  8) | \
                                                                 |                                ((n & 0x00ff0000) >>  8) | \
                                                                 |                                ((n & 0xff000000) >> 24)))
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) sym.elf_getarsym ()                                  | void elf_getarsym (int16_t arg_0h, int16_t arg_4h, int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h_2;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     char * base;
                                                                 |     int16_t var_42h;
                                                                 |     int16_t var_4ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     if (? < ?) {
    0x00005cdc strbhs pc, [ip, -0x8df]                           |         *((ip - 0x8df)) = pc;
                                                                 |     }
    0x00005ce0 ldr.w r3, [pc, 0x54c]                             |     
    0x00005ce4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00005ce8 sub sp, 0x54                                      |     
    0x00005cea add r2, pc                                        |     r2 += pc;
    0x00005cec ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00005cee ldr r3, [r3]                                      |     r3 = *(0x6230);
    0x00005cf0 str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x00005cf2 mov.w r3, 0                                       |     r3 = 0;
    0x00005cf6 ldr r3, [r0, 0xc]                                 |     r3 = *(arg_0hxc);
    0x00005cf8 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x00005cfa bne 0x5dee                                        |         goto label_22;
                                                                 |     }
    0x00005cfc mov r4, r0                                        |     r4 = r0;
    0x00005cfe mov r5, r1                                        |     r5 = r1;
                                                                 |     if (r1 != 0) {
    0x00005d00 cbz r1, 0x5d06                                    |         
    0x00005d02 ldr r3, [r0, 0x40]                                |         r3 = *(arg_0hx40);
    0x00005d04 str r3, [r1]                                      |         *(r1) = r3;
                                                                 |     }
    0x00005d06 ldr r6, [r4, 0x3c]                                |     r6 = *((r4 + 0x3c));
    0x00005d08 adds r1, r6, 1                                    |     r1 = r6 + 1;
                                                                 |     if (r1 == r6) {
    0x00005d0a beq.w 0x6072                                      |         goto label_23;
                                                                 |     }
    0x00005d0e cbz r6, 0x5d38                                    |     
                                                                 |     if (r5 != 0) {
                                                                 |         while (1) {
    0x00005d10 cbz r5, 0x5d16                                    |             
    0x00005d12 ldr r3, [r4, 0x40]                                |             r3 = *((r4 + 0x40));
    0x00005d14 str r3, [r5]                                      |             *(r5) = r3;
                                                                 |         }
                                                                 | label_2:
    0x00005d16 ldr.w r2, [pc, 0x51c]                             |         r2 = *(0x00006234);
    0x00005d1a ldr.w r3, [pc, 0x514]                             |         r3 = *(0x6232);
    0x00005d1e add r2, pc                                        |         r2 += pc;
    0x00005d20 ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x00005d22 ldr r2, [r3]                                      |         r2 = *(0x6232);
    0x00005d24 ldr r3, [sp, 0x4c]                                |         r3 = var_4ch;
    0x00005d26 eors r2, r3                                       |         r2 ^= r3;
    0x00005d28 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00005d2c bne.w 0x61f0                                      |             goto label_24;
                                                                 |         }
    0x00005d30 mov r0, r6                                        |         r0 = r6;
    0x00005d32 add sp, 0x54                                      |         
    0x00005d34 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x00005d38 ldr r3, [r4]                                      |         r3 = *(r4);
    0x00005d3a mov r2, r3                                        |         r2 = r3;
    0x00005d3c str r3, [sp, 0xc]                                 |         var_ch = r3;
    0x00005d3e mov.w r3, -1                                      |         r3 = -1;
    0x00005d42 str r3, [r4, 0x3c]                                |         *((r4 + 0x3c)) = r3;
                                                                 |         if (r2 == 0) {
    0x00005d44 cbz r2, 0x5d70                                    |             goto label_25;
                                                                 |         }
    0x00005d46 ldr r3, [r4, 0x28]                                |         r3 = *((r4 + 0x28));
    0x00005d48 cmp r3, 0x43                                      |         
                                                                 |         if (r3 < 0x43) {
    0x00005d4a bls 0x5df8                                        |             goto label_4;
                                                                 |         }
    0x00005d4c ldr r7, [r4, 0x20]                                |         r7 = *((r4 + 0x20));
    0x00005d4e ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x00005d50 adds r7, 8                                        |         r7 += 8;
    0x00005d52 add r3, r7                                        |         r3 += r7;
    0x00005d54 mov r7, r3                                        |         r7 = r3;
                                                                 | label_8:
    0x00005d56 ldrb.w r3, [r7, 0x3a]                             |         r3 = *((r7 + 0x3a));
    0x00005d5a cmp r3, 0x60                                      |         
                                                                 |         if (r3 == 0x60) {
    0x00005d5c beq 0x5e04                                        |             goto label_26;
                                                                 |         }
                                                                 | label_3:
    0x00005d5e movs r3, 0                                        |         r3 = 0;
    0x00005d60 movs r0, 0xf                                      |         r0 = 0xf;
    0x00005d62 str r3, [sp, 0xc]                                 |         var_ch = r3;
    0x00005d64 bl 0x259c                                         |         fcn_0000259c (r0);
                                                                 | label_1:
    0x00005d68 ldr r0, [sp, 0xc]                                 |         r0 = var_ch;
    0x00005d6a blx 0x21f4                                        |         fcn_000021f4 ();
    0x00005d6e b 0x5d10                                          |         
                                                                 |     }
                                                                 | label_25:
    0x00005d70 ldr.w fp, [r4, 0x18]                              |     fp = *((r4 + 0x18));
    0x00005d74 cmp.w fp, -1                                      |     
                                                                 |     if (fp == -1) {
    0x00005d78 beq.w 0x6218                                      |         goto label_27;
                                                                 |     }
    0x00005d7c ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x00005d7e mov.w sb, 0x3c                                    |     sb = 0x3c;
    0x00005d82 add.w r7, r4, 0x80                                |     r7 = r4 + 0x80;
    0x00005d86 mov sl, sb                                        |     sl = sb;
    0x00005d88 mov sb, r7                                        |     sb = r7;
    0x00005d8a adds r3, 8                                        |     r3 += 8;
    0x00005d8c str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00005d8e ldr r3, [r4, 0x24]                                |     r3 = *((r4 + 0x24));
    0x00005d90 adc r3, r3, 0                                     |     __asm ("adc r3, r3, 0");
    0x00005d94 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00005d96 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00005d98 mov r8, r3                                        |     r8 = r3;
    0x00005d9a str r3, [sp, 8]                                   |     var_8h = r3;
                                                                 |     do {
                                                                 | label_0:
    0x00005d9c ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x00005d9e mov r1, sb                                        |         r1 = sb;
    0x00005da0 ldr r2, [sp, 8]                                   |         r2 = var_8h;
    0x00005da2 mov r0, fp                                        |         r0 = fp;
    0x00005da4 adds.w r3, r8, r3                                 |         r3 = r8 + r3;
    0x00005da8 str r3, [sp]                                      |         *(sp) = r3;
    0x00005daa ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00005dac adc.w r3, r3, r2                                  |         __asm ("adc.w r3, r3, r2");
    0x00005db0 mov r2, sl                                        |         r2 = sl;
    0x00005db2 str r3, [sp, 4]                                   |         *(arg_4h) = r3;
    0x00005db4 blx 0x22a4                                        |         r0 = fcn_000022a4 ();
    0x00005db8 adds r2, r0, 1                                    |         r2 = r0 + 1;
                                                                 |         if (r2 == r0) {
    0x00005dba beq 0x5dda                                        |             goto label_28;
                                                                 |         }
    0x00005dbc cmp r0, 0                                         |         
                                                                 |         if (r0 <= 0) {
    0x00005dbe ble 0x5de4                                        |             goto label_9;
                                                                 |         }
    0x00005dc0 add r8, r0                                        |         r8 += r0;
    0x00005dc2 cmp.w r8, 0x3b                                    |         
                                                                 |         if (r8 > 0x3b) {
    0x00005dc6 bgt.w 0x5ff2                                      |             goto label_29;
                                                                 |         }
    0x00005dca asr.w r3, r8, 0x1f                                |         r3 = r8 >> 0x1f;
    0x00005dce rsb.w sl, r8, 0x3c                                |         sl = 0x3c - r8;
    0x00005dd2 add.w sb, r7, r8                                  |         sb = r7 + r8;
    0x00005dd6 str r3, [sp, 8]                                   |         var_8h = r3;
    0x00005dd8 b 0x5d9c                                          |         
                                                                 |     } while (1);
                                                                 | label_28:
    0x00005dda blx 0x2328                                        |     r0 = memset (r0, r1, r2);
    0x00005dde ldr r3, [r0]                                      |     r3 = *(r0);
    0x00005de0 cmp r3, 4                                         |     
                                                                 |     if (r3 == 4) {
    0x00005de2 beq 0x5d9c                                        |         goto label_0;
                                                                 |     }
                                                                 | label_9:
    0x00005de4 movs r0, 0x13                                     |     r0 = 0x13;
    0x00005de6 movs r6, 0                                        |     r6 = 0;
    0x00005de8 bl 0x259c                                         |     fcn_0000259c (r0);
    0x00005dec b 0x5d68                                          |     goto label_1;
                                                                 | label_22:
    0x00005dee movs r0, 0x11                                     |     r0 = 0x11;
    0x00005df0 movs r6, 0                                        |     r6 = 0;
    0x00005df2 bl 0x259c                                         |     fcn_0000259c (r0);
    0x00005df6 b 0x5d16                                          |     goto label_2;
                                                                 | label_4:
    0x00005df8 movs r3, 0                                        |     r3 = 0;
    0x00005dfa movs r0, 0x12                                     |     r0 = 0x12;
    0x00005dfc str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00005dfe bl 0x259c                                         |     fcn_0000259c (r0);
    0x00005e02 b 0x5d68                                          |     goto label_1;
                                                                 | label_26:
    0x00005e04 ldrb.w r3, [r7, 0x3b]                             |     r3 = *((r7 + 0x3b));
    0x00005e08 cmp r3, 0xa                                       |     
                                                                 |     if (r3 != 0xa) {
    0x00005e0a bne 0x5d5e                                        |         goto label_3;
                                                                 |     }
    0x00005e0c ldr.w r1, [pc, 0x428]                             |     
    0x00005e10 movs r3, 0                                        |     r3 = 0;
    0x00005e12 movs r2, 0x10                                     |     r2 = 0x10;
    0x00005e14 mov r0, r7                                        |     r0 = r7;
    0x00005e16 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00005e18 add r1, pc                                        |     r1 = 0xc054;
    0x00005e1a blx 0x2234                                        |     r0 = fcn_00002234 ();
    0x00005e1e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00005e20 beq.w 0x5ffc                                      |         goto label_30;
                                                                 |     }
    0x00005e24 ldr.w r1, [pc, 0x414]                             |     
    0x00005e28 movs r2, 0x10                                     |     r2 = 0x10;
    0x00005e2a mov r0, r7                                        |     r0 = r7;
    0x00005e2c add r1, pc                                        |     r1 = 0xc06c;
    0x00005e2e blx 0x2234                                        |     r0 = fcn_00002234 ();
    0x00005e32 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00005e34 bne 0x5df8                                        |         goto label_4;
                                                                 |     }
    0x00005e36 ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x00005e38 movs r2, 1                                        |     r2 = 1;
    0x00005e3a adds r3, 0x44                                     |     r3 += 0x44;
    0x00005e3c str r3, [sp, 8]                                   |     var_8h = r3;
    0x00005e3e movs r3, 8                                        |     r3 = 8;
    0x00005e40 mov sb, r3                                        |     sb = r3;
    0x00005e42 strd r2, r3, [sp, 0x18]                           |     __asm ("strd r2, r3, [sp, 0x18]");
                                                                 | label_10:
    0x00005e46 ldr r2, [r4]                                      |     r2 = *(r4);
    0x00005e48 str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x00005e4a cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00005e4c beq.w 0x600e                                      |         goto label_31;
                                                                 |     }
    0x00005e50 ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x00005e52 adds r3, r2, r1                                   |     r3 = r2 + r1;
    0x00005e54 ldr r0, [r2, r1]                                  |     r0 = *((r2 + r1));
    0x00005e56 ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x00005e58 add r3, sp, 0x30                                  |     r3 += var_30h;
    0x00005e5a stm r3!, {r0, r1}                                 |     *(r3!) = r0;
                                                                 |     *((r3! + 4)) = r1;
                                                                 | label_12:
    0x00005e5c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00005e5e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00005e60 beq.w 0x5fe6                                      |         goto label_32;
                                                                 |     }
    0x00005e64 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00005e66 rev r3, r3                                        |     r3 = SWAP32 (r3);
    0x00005e68 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00005e6a ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00005e6c rev.w sl, r3                                      |     r3 = SWAP32 (sl);
                                                                 | label_7:
    0x00005e70 ldr r0, [r7, 0x30]                                |     r0 = *((r7 + 0x30));
    0x00005e72 add r2, sp, 0x38                                  |     r2 += base;
    0x00005e74 ldr r1, [r7, 0x34]                                |     r1 = *((r7 + 0x34));
    0x00005e76 mov r3, r2                                        |     r3 = r2;
    0x00005e78 ldrh r7, [r7, 0x38]                               |     r7 = *((r7 + 0x38));
    0x00005e7a stm r3!, {r0, r1}                                 |     *(r3!) = r0;
                                                                 |     *((r3! + 4)) = r1;
    0x00005e7c mov r0, r2                                        |     r0 = r2;
    0x00005e7e strh r7, [r3]                                     |     *(r3) = r7;
    0x00005e80 movs r1, 0                                        |     r1 = 0;
    0x00005e82 movs r2, 0xa                                      |     r2 = 0xa;
    0x00005e84 strb.w r1, [sp, 0x42]                             |     var_42h = r1;
    0x00005e88 blx 0x21cc                                        |     strtol (r0, r1, r2);
    0x00005e8c ldr r3, [r4, 0x28]                                |     r3 = *((r4 + 0x28));
    0x00005e8e mov fp, r0                                        |     
    0x00005e90 cmp r3, r0                                        |     
                                                                 |     if (r3 <= r0) {
    0x00005e92 blo 0x5df8                                        |         goto label_4;
                                                                 |     }
    0x00005e94 movw r2, 0x5555                                   |     
    0x00005e98 subs r3, r3, r0                                   |     r3 -= r0;
    0x00005e9a movt r2, 0x1555                                   |     r2 = 0x15555555;
    0x00005e9e cmp sl, r2                                        |     
    0x00005ea0 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00005ea2 sbcs r2, r2, 0                                    |     __asm ("sbcs r2, r2, 0");
    0x00005ea6 ite hs                                            |     
                                                                 |     if (sl < r2) {
    0x00005ea8 movhs r7, 1                                       |         r7 = 1;
                                                                 |     }
                                                                 |     if (sl >= r2) {
    0x00005eaa movlo r7, 0                                       |         r7 = 0;
                                                                 |     }
    0x00005eac cmp r3, 0x43                                      |     
    0x00005eae it ls                                             |     
                                                                 |     if (r3 > 0x43) {
    0x00005eb0 orrls r7, r7, 1                                   |         r7 |= 1;
                                                                 |     }
    0x00005eb4 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x00005eb6 bne 0x5df8                                        |         goto label_4;
                                                                 |     }
    0x00005eb8 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00005eba bl 0xd2b0                                         |     fcn_0000d2b0 (r0, r1, r2);
    0x00005ebe ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00005ec0 cmp r0, sl                                        |     
    0x00005ec2 sbcs r7, r2                                       |     __asm ("sbcs r7, r2");
                                                                 |     if (r0 <= sl) {
    0x00005ec4 blo 0x5df8                                        |         goto label_4;
                                                                 |     }
    0x00005ec6 adds.w r3, sl, 1                                  |     r3 = sl + 1;
    0x00005eca add.w r1, r3, r3, lsl 1                           |     r1 = r3 + (r3 << 1);
    0x00005ece str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00005ed0 lsls r1, r1, 2                                    |     r1 <<= 2;
    0x00005ed2 mov r0, r1                                        |     r0 = r1;
    0x00005ed4 str r1, [sp, 0xc]                                 |     var_ch = r1;
    0x00005ed6 blx 0x22c8                                        |     deflateInit_ ();
    0x00005eda str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00005edc str r0, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r0;
    0x00005ede cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00005ee0 beq.w 0x6212                                      |         goto label_33;
                                                                 |     }
    0x00005ee4 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00005ee6 ldr r7, [r4]                                      |     r7 = *(r4);
    0x00005ee8 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x00005eea add r3, sb                                        |     r3 += sb;
    0x00005eec mov r8, r3                                        |     r8 = r3;
    0x00005eee ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00005ef0 mul sb, sl, r3                                    |     sb = sl * r3;
    0x00005ef4 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00005ef6 beq.w 0x60ac                                      |         goto label_34;
                                                                 |     }
    0x00005efa add.w r3, r7, r8                                  |     r3 = r7 + r8;
    0x00005efe mov r2, r3                                        |     r2 = r3;
    0x00005f00 mov fp, r3                                        |     
    0x00005f02 rsb.w r3, sl, 0                                   |     r3 = sl - ;
    0x00005f06 ands r3, r2                                       |     r3 &= r2;
    0x00005f08 it eq                                             |     
                                                                 |     if (r3 != r2) {
    0x00005f0a streq r3, [sp, 0xc]                               |         var_ch = r3;
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x00005f0c bne.w 0x607c                                      |         goto label_35;
                                                                 |     }
                                                                 | label_14:
    0x00005f10 add sb, r8                                        |     sb += r8;
    0x00005f12 add r7, sb                                        |     r7 += sb;
                                                                 | label_17:
    0x00005f14 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00005f16 orrs.w r3, sl, r3                                 |     r3 = sl | r3;
                                                                 |     if (r3 == sl) {
    0x00005f1a beq 0x5fbe                                        |         goto label_36;
                                                                 |     }
    0x00005f1c str r6, [sp, 0x1c]                                |     var_1ch = r6;
    0x00005f1e mov.w r8, 0                                       |     r8 = 0;
    0x00005f22 ldr.w sb, [sp, 0x14]                              |     sb = var_14h;
    0x00005f26 mov r0, r7                                        |     r0 = r7;
    0x00005f28 ldr r6, [sp, 0x10]                                |     r6 = var_10h;
    0x00005f2a mov r7, fp                                        |     r7 = fp;
    0x00005f2c str r4, [sp, 8]                                   |     var_8h = r4;
    0x00005f2e ldr r4, [sp, 0x18]                                |     r4 = var_18h;
    0x00005f30 str r5, [sp, 0x18]                                |     var_18h = r5;
    0x00005f32 mov r5, r8                                        |     r5 = r8;
                                                                 | label_5:
    0x00005f34 str.w r0, [sb]                                    |     __asm ("str.w r0, [sb]");
    0x00005f38 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00005f3a beq 0x5fda                                        |         goto label_37;
                                                                 |     }
    0x00005f3c ldr.w r2, [fp, 4]                                 |     r2 = *(arg_4h);
    0x00005f40 ldr.w r1, [fp]                                    |     r1 = *(fp);
    0x00005f44 rev r2, r2                                        |     r2 = SWAP32 (r2);
    0x00005f46 str.w r2, [sb, 4]                                 |     __asm ("str.w r2, [sb, 4]");
    0x00005f4a cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00005f4c bne.w 0x6096                                      |         goto label_38;
                                                                 |     }
                                                                 | label_6:
    0x00005f50 ldrb r2, [r0]                                     |     r2 = *(r0);
                                                                 |     if (r2 == 0) {
    0x00005f52 cbz r2, 0x5f94                                    |         goto label_39;
                                                                 |     }
    0x00005f54 ldrb r1, [r0, 1]                                  |     r1 = *((r0 + 1));
                                                                 |     if (r1 == 0) {
    0x00005f56 cbz r1, 0x5f94                                    |         goto label_39;
                                                                 |     }
    0x00005f58 add.w r2, r1, r2, lsl 4                           |     r2 = r1 + (r2 << 4);
    0x00005f5c ldrb r1, [r0, 2]                                  |     r1 = *((r0 + 2));
                                                                 |     if (r1 == 0) {
    0x00005f5e cbz r1, 0x5f94                                    |         goto label_39;
                                                                 |     }
    0x00005f60 add.w r2, r1, r2, lsl 4                           |     r2 = r1 + (r2 << 4);
    0x00005f64 ldrb r1, [r0, 3]                                  |     r1 = *((r0 + 3));
                                                                 |     if (r1 == 0) {
    0x00005f66 cbz r1, 0x5f94                                    |         goto label_39;
                                                                 |     }
    0x00005f68 add.w r2, r1, r2, lsl 4                           |     r2 = r1 + (r2 << 4);
    0x00005f6c ldrb r1, [r0, 4]                                  |     r1 = *((r0 + 4));
                                                                 |     if (r1 == 0) {
    0x00005f6e cbz r1, 0x5f94                                    |         goto label_39;
                                                                 |     }
    0x00005f70 ldrb r3, [r0, 5]                                  |     r3 = *((r0 + 5));
    0x00005f72 add.w r2, r1, r2, lsl 4                           |     r2 = r1 + (r2 << 4);
    0x00005f76 add.w lr, r0, 5                                   |     lr = r0 + 5;
                                                                 |     if (r3 == 0) {
    0x00005f7a cbz r3, 0x5f90                                    |         goto label_40;
                                                                 |     }
                                                                 |     do {
    0x00005f7c add.w r2, r3, r2, lsl 4                           |         r2 = r3 + (r2 << 4);
    0x00005f80 ldrb r3, [lr, 1]!                                 |         r3 = *((lr += 1));
    0x00005f84 lsrs r1, r2, 0x18                                 |         r1 = r2 >> 0x18;
    0x00005f86 and r1, r1, 0xf0                                  |         r1 &= 0xf0;
    0x00005f8a eors r2, r1                                       |         r2 ^= r1;
    0x00005f8c cmp r3, 0                                         |         
    0x00005f8e bne 0x5f7c                                        |         
                                                                 |     } while (r3 != 0);
                                                                 | label_40:
    0x00005f90 bic r2, r2, 0xf0000000                            |     r2 = BIT_MASK (r2, 0xf0000000);
                                                                 | label_39:
    0x00005f94 str.w r2, [sb, 8]                                 |     __asm ("str.w r2, [sb, 8]");
    0x00005f98 movs r1, 0                                        |     r1 = 0;
    0x00005f9a blx 0x2274                                        |     deflate ();
    0x00005f9e adds.w r8, r8, 1                                  |     r8++;
    0x00005fa2 add.w sb, sb, 0xc                                 |     sb += 0xc;
    0x00005fa6 adc r5, r5, 0                                     |     __asm ("adc r5, r5, 0");
    0x00005faa add.w fp, fp, 8                                   |     
    0x00005fae cmp r6, r5                                        |     
    0x00005fb0 it eq                                             |     
                                                                 |     if (r6 == r5) {
    0x00005fb2 cmpeq sl, r8                                      |         __asm ("cmpeq sl, r8");
                                                                 |     }
    0x00005fb4 add.w r0, r0, 1                                   |     r0++;
                                                                 |     if (r6 != r5) {
    0x00005fb8 bne 0x5f34                                        |         goto label_5;
                                                                 |     }
    0x00005fba ldr r4, [sp, 8]                                   |     r4 = var_8h;
    0x00005fbc ldr r5, [sp, 0x18]                                |     r5 = var_18h;
                                                                 | label_36:
    0x00005fbe add.w r3, sl, sl, lsl 1                           |     r3 = sl + (sl << 1);
    0x00005fc2 ldr r6, [sp, 0x14]                                |     r6 = var_14h;
    0x00005fc4 movs r2, 0                                        |     r2 = 0;
    0x00005fc6 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00005fc8 str r2, [r6, r3]                                  |     *((r6 + r3)) = r2;
    0x00005fca add r3, r6                                        |     r3 += r6;
    0x00005fcc str r2, [r3, 4]                                   |     *((r3 + 4)) = r2;
    0x00005fce mov.w r2, -1                                      |     r2 = -1;
    0x00005fd2 str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x00005fd4 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00005fd6 str r3, [r4, 0x40]                                |     *((r4 + 0x40)) = r3;
    0x00005fd8 b 0x5d68                                          |     goto label_1;
                                                                 | label_37:
    0x00005fda ldr.w r2, [r7, r8, lsl 2]                         |     offset_0 = r8 << 2;
                                                                 |     r2 = *((r7 + offset_0));
    0x00005fde rev r2, r2                                        |     r2 = SWAP32 (r2);
    0x00005fe0 str.w r2, [sb, 4]                                 |     __asm ("str.w r2, [sb, 4]");
    0x00005fe4 b 0x5f50                                          |     goto label_6;
                                                                 | label_32:
    0x00005fe6 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00005fe8 rev.w sl, r3                                      |     r3 = SWAP32 (sl);
    0x00005fec ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00005fee str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00005ff0 b 0x5e70                                          |     goto label_7;
                                                                 | label_29:
    0x00005ff2 cmp.w r8, 0x3c                                    |     
                                                                 |     if (r8 == 0x3c) {
    0x00005ff6 beq.w 0x5d56                                      |         goto label_8;
                                                                 |     }
    0x00005ffa b 0x5de4                                          |     goto label_9;
                                                                 | label_30:
    0x00005ffc ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x00005ffe ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00006000 adds r3, 0x44                                     |     r3 += 0x44;
    0x00006002 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00006004 movs r3, 4                                        |     r3 = 4;
    0x00006006 mov sb, r3                                        |     sb = r3;
    0x00006008 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0000600a str r2, [sp, 0x18]                                |     var_18h = r2;
    0x0000600c b 0x5e46                                          |     goto label_10;
                                                                 | label_31:
    0x0000600e ldr.w sl, [sp, 0xc]                               |     sl = var_ch;
    0x00006012 ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x00006014 mov r8, sl                                        |     r8 = sl;
    0x00006016 mov fp, sl                                        |     
    0x00006018 mov sl, sb                                        |     sl = sb;
    0x0000601a str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0000601c add r3, sp, 0x30                                  |     r3 += var_30h;
    0x0000601e str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 |     do {
                                                                 | label_11:
    0x00006020 ldr r3, [sp, 8]                                   |         r3 = var_8h;
    0x00006022 mov r2, sl                                        |         r2 = sl;
    0x00006024 ldr r0, [sp, 0x10]                                |         r0 = var_10h;
    0x00006026 adds.w r3, r8, r3                                 |         r3 = r8 + r3;
    0x0000602a str r3, [sp]                                      |         *(sp) = r3;
    0x0000602c adc r3, fp, 0                                     |         __asm ("adc r3, arg_0h");
    0x00006030 str r3, [sp, 4]                                   |         *(arg_4h) = r3;
    0x00006032 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00006034 add.w r1, r3, r8                                  |         r1 = r3 + r8;
    0x00006038 blx 0x22a4                                        |         r0 = fcn_000022a4 ();
    0x0000603c adds r3, r0, 1                                    |         r3 = r0 + 1;
                                                                 |         if (r3 == r0) {
    0x0000603e beq 0x6054                                        |             goto label_41;
                                                                 |         }
    0x00006040 cmp r0, 0                                         |         
                                                                 |         if (r0 <= 0) {
    0x00006042 ble 0x6068                                        |             goto label_42;
                                                                 |         }
    0x00006044 add r8, r0                                        |         r8 += r0;
    0x00006046 cmp sb, r8                                        |         
                                                                 |         if (sb < r8) {
    0x00006048 bls 0x606a                                        |             goto label_43;
                                                                 |         }
    0x0000604a asr.w fp, r8, 0x1f                                |         
    0x0000604e sub.w sl, sb, r8                                  |         sl = sb - r8;
    0x00006052 b 0x6020                                          |         
                                                                 |     } while (1);
                                                                 | label_41:
    0x00006054 blx 0x2328                                        |     r0 = memset (r0, r1, r2);
    0x00006058 ldr r3, [r0]                                      |     r3 = *(r0);
    0x0000605a cmp r3, 4                                         |     
                                                                 |     if (r3 == 4) {
    0x0000605c beq 0x6020                                        |         goto label_11;
                                                                 |     }
                                                                 |     do {
                                                                 | label_13:
    0x0000605e movs r0, 0x12                                     |         r0 = 0x12;
    0x00006060 movs r6, 0                                        |         r6 = 0;
    0x00006062 bl 0x259c                                         |         fcn_0000259c (r0);
    0x00006066 b 0x5d68                                          |         goto label_1;
                                                                 | label_42:
    0x00006068 bne 0x605e                                        |         
                                                                 |     } while (r6 != 0);
                                                                 | label_43:
    0x0000606a cmp sb, r8                                        |     
                                                                 |     if (sb == r8) {
    0x0000606c beq.w 0x5e5c                                      |         goto label_12;
                                                                 |     }
    0x00006070 b 0x605e                                          |     goto label_13;
                                                                 | label_23:
    0x00006072 movs r0, 0x12                                     |     r0 = 0x12;
    0x00006074 movs r6, 0                                        |     r6 = 0;
    0x00006076 bl 0x259c                                         |     fcn_0000259c (r0);
    0x0000607a b 0x5d16                                          |     goto label_2;
                                                                 | label_35:
    0x0000607c mov r0, sb                                        |     r0 = sb;
    0x0000607e blx 0x22c8                                        |     deflateInit_ ();
    0x00006082 str r0, [sp, 0xc]                                 |     var_ch = r0;
    0x00006084 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00006086 beq.w 0x61d8                                      |         goto label_44;
                                                                 |     }
    0x0000608a mov r1, fp                                        |     r1 = fp;
    0x0000608c mov r2, sb                                        |     r2 = sb;
    0x0000608e blx 0x2210                                        |     r0 = fcn_00002210 ();
    0x00006092 mov fp, r0                                        |     
    0x00006094 b 0x5f10                                          |     goto label_14;
                                                                 | label_38:
    0x00006096 ldr r4, [sp, 8]                                   |     r4 = var_8h;
    0x00006098 ldr r6, [sp, 0x1c]                                |     r6 = var_1ch;
    0x0000609a ldr r5, [sp, 0x18]                                |     r5 = var_18h;
    0x0000609c ldr r7, [r4]                                      |     r7 = *(r4);
    0x0000609e cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x000060a0 beq.w 0x61ce                                      |         goto label_45;
                                                                 |     }
                                                                 | label_19:
    0x000060a4 movs r0, 0xe                                      |     r0 = 0xe;
    0x000060a6 bl 0x259c                                         |     fcn_0000259c (r0);
    0x000060aa b 0x5d68                                          |     goto label_1;
                                                                 | label_34:
    0x000060ac mov r0, sb                                        |     r0 = sb;
    0x000060ae str r1, [sp, 8]                                   |     var_8h = r1;
    0x000060b0 blx 0x22c8                                        |     deflateInit_ ();
    0x000060b4 ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x000060b6 str r0, [sp, 0xc]                                 |     var_ch = r0;
    0x000060b8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000060ba beq.w 0x61d8                                      |         goto label_44;
                                                                 |     }
    0x000060be sub.w r3, fp, sb                                  |     r3 = fp - sb;
    0x000060c2 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x000060c4 add r1, r3                                        |     r1 += r3;
    0x000060c6 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x000060c8 blx 0x2268                                        |     rawmemchr ();
    0x000060cc str r0, [sp, 0x2c]                                |     var_2ch = r0;
    0x000060ce cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000060d0 beq.w 0x61fe                                      |         goto label_46;
                                                                 |     }
    0x000060d4 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000060d6 mov r2, sb                                        |     r2 = sb;
    0x000060d8 ldr.w fp, [sp, 0xc]                               |     fp = var_ch;
    0x000060dc str r6, [sp, 0x28]                                |     var_28h = r6;
    0x000060de mov r6, sb                                        |     r6 = sb;
    0x000060e0 str r3, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r3;
    0x000060e2 ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x000060e4 mov sb, fp                                        |     sb = fp;
    0x000060e6 mov fp, sl                                        |     
    0x000060e8 mov sl, r2                                        |     sl = r2;
    0x000060ea str r7, [sp, 8]                                   |     var_8h = r7;
    0x000060ec str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 |     do {
                                                                 | label_15:
    0x000060ee ldr r3, [sp, 8]                                   |         r3 = var_8h;
    0x000060f0 adds.w r0, r7, r8                                 |         r0 = r7 + r8;
    0x000060f4 str r0, [sp]                                      |         *(sp) = r0;
    0x000060f6 mov r1, sb                                        |         r1 = sb;
    0x000060f8 mov r2, sl                                        |         r2 = sl;
    0x000060fa adc r0, r3, 0                                     |         __asm ("adc r0, r3, 0");
    0x000060fe str r0, [sp, 4]                                   |         *(arg_4h) = r0;
    0x00006100 ldr r0, [sp, 0x14]                                |         r0 = var_14h;
    0x00006102 blx 0x22a4                                        |         r0 = fcn_000022a4 ();
    0x00006106 adds r1, r0, 1                                    |         r1 = r0 + 1;
                                                                 |         if (r1 == r0) {
    0x00006108 beq 0x6124                                        |             goto label_47;
                                                                 |         }
    0x0000610a cmp r0, 0                                         |         
                                                                 |         if (r0 <= 0) {
    0x0000610c ble 0x61e4                                        |             goto label_48;
                                                                 |         }
    0x0000610e add r7, r0                                        |         r7 += r0;
    0x00006110 cmp r6, r7                                        |         
                                                                 |         if (r6 < r7) {
    0x00006112 bls 0x6140                                        |             goto label_49;
                                                                 |         }
    0x00006114 asrs r3, r7, 0x1f                                 |         r3 = r7 >> 0x1f;
    0x00006116 sub.w sl, r6, r7                                  |         sl = r6 - r7;
    0x0000611a str r3, [sp, 8]                                   |         var_8h = r3;
    0x0000611c ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x0000611e add.w sb, r3, r7                                  |         sb = r3 + r7;
    0x00006122 b 0x60ee                                          |         
                                                                 |     } while (1);
                                                                 | label_47:
    0x00006124 blx 0x2328                                        |     r0 = memset (r0, r1, r2);
    0x00006128 ldr r0, [r0]                                      |     r0 = *(r0);
    0x0000612a cmp r0, 4                                         |     
                                                                 |     if (r0 == 4) {
    0x0000612c beq 0x60ee                                        |         goto label_15;
                                                                 |     }
                                                                 |     do {
    0x0000612e ldr r0, [r4, 0x3c]                                |         r0 = *((r4 + 0x3c));
                                                                 | label_18:
    0x00006130 movs r6, 0                                        |         r6 = 0;
    0x00006132 blx 0x21f4                                        |         fcn_000021f4 ();
    0x00006136 movs r0, 0x12                                     |         r0 = 0x12;
    0x00006138 str r6, [r4, 0x3c]                                |         *((r4 + 0x3c)) = r6;
    0x0000613a bl 0x259c                                         |         fcn_0000259c (r0);
    0x0000613e b 0x5d68                                          |         goto label_1;
                                                                 | label_49:
    0x00006140 mov sb, r6                                        |         sb = r6;
    0x00006142 ldr r6, [sp, 0x28]                                |         r6 = var_28h;
    0x00006144 mov sl, fp                                        |         sl = fp;
                                                                 | label_20:
    0x00006146 cmp sb, r7                                        |         
    0x00006148 bne 0x612e                                        |         
                                                                 |     } while (sb != r7);
    0x0000614a add.w r3, sb, r8                                  |     r3 = sb + r8;
    0x0000614e ldr.w r8, [sp, 0x1c]                              |     r8 = var_1ch;
    0x00006152 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00006154 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00006156 ldr.w sb, [sp, 0x20]                              |     sb = var_20h;
    0x0000615a add.w r7, r3, r3, lsl 1                           |     r7 = r3 + (r3 << 1);
    0x0000615e ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00006160 add.w r7, r3, r7, lsl 2                           |     r7 = r3 + (r7 << 2);
    0x00006164 ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x00006166 mov fp, r7                                        |     
    0x00006168 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0000616a movs r3, 0                                        |     r3 = 0;
    0x0000616c str r3, [sp, 8]                                   |     var_8h = r3;
                                                                 |     do {
                                                                 | label_16:
    0x0000616e ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x00006170 mov r2, r8                                        |         r2 = r8;
    0x00006172 ldr r0, [sp, 0x14]                                |         r0 = var_14h;
    0x00006174 mov r1, fp                                        |         r1 = fp;
    0x00006176 adds.w r3, sb, r3                                 |         r3 = sb + r3;
    0x0000617a str r3, [sp]                                      |         *(sp) = r3;
    0x0000617c ldr r3, [sp, 8]                                   |         r3 = var_8h;
    0x0000617e adc r3, r3, 0                                     |         __asm ("adc r3, r3, 0");
    0x00006182 str r3, [sp, 4]                                   |         *(arg_4h) = r3;
    0x00006184 blx 0x22a4                                        |         r0 = fcn_000022a4 ();
    0x00006188 adds r2, r0, 1                                    |         r2 = r0 + 1;
                                                                 |         if (r2 == r0) {
    0x0000618a beq 0x61a8                                        |             goto label_50;
                                                                 |         }
    0x0000618c cmp r0, 0                                         |         
                                                                 |         if (r0 <= 0) {
    0x0000618e ble 0x61f4                                        |             goto label_51;
                                                                 |         }
    0x00006190 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00006192 add sb, r0                                        |         sb += r0;
    0x00006194 cmp r3, sb                                        |         
                                                                 |         if (r3 < sb) {
    0x00006196 bls 0x61b8                                        |             goto label_21;
                                                                 |         }
    0x00006198 asr.w r2, sb, 0x1f                                |         r2 = sb >> 0x1f;
    0x0000619c sub.w r8, r3, sb                                  |         r8 = r3 - sb;
    0x000061a0 add.w fp, r7, sb                                  |         
    0x000061a4 str r2, [sp, 8]                                   |         var_8h = r2;
    0x000061a6 b 0x616e                                          |         
                                                                 |     } while (1);
                                                                 | label_50:
    0x000061a8 str r0, [sp, 0x20]                                |     var_20h = r0;
    0x000061aa blx 0x2328                                        |     r0 = memset (r0, r1, r2);
    0x000061ae ldr r0, [r0]                                      |     r0 = *(r0);
    0x000061b0 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000061b2 cmp r0, 4                                         |     
                                                                 |     if (r0 == 4) {
    0x000061b4 beq 0x616e                                        |         goto label_16;
                                                                 |     }
    0x000061b6 mov sb, r3                                        |     sb = r3;
                                                                 | label_21:
    0x000061b8 ldr r3, [r4, 0x3c]                                |     r3 = *((r4 + 0x3c));
    0x000061ba mov r0, r3                                        |     r0 = r3;
    0x000061bc str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000061be ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000061c0 cmp r3, sb                                        |     
    0x000061c2 itt eq                                            |     
                                                                 |     if (r3 != sb) {
    0x000061c4 ldreq r3, [sp, 0xc]                               |         r3 = var_ch;
                                                                 |     }
                                                                 |     if (r3 == sb) {
    0x000061c6 moveq fp, r3                                      |         goto label_52;
                                                                 |     }
                                                                 |     if (r3 == sb) {
                                                                 | label_52:
    0x000061c8 beq.w 0x5f14                                      |         goto label_17;
                                                                 |     }
    0x000061cc b 0x6130                                          |     goto label_18;
                                                                 | label_45:
    0x000061ce ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x000061d0 blx 0x21f4                                        |     fcn_000021f4 ();
    0x000061d4 str r7, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r7;
    0x000061d6 b 0x60a4                                          |     goto label_19;
                                                                 | label_44:
    0x000061d8 movs r3, 0                                        |     r3 = 0;
    0x000061da movs r0, 8                                        |     r0 = 8;
    0x000061dc str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x000061de bl 0x259c                                         |     fcn_0000259c (r0);
    0x000061e2 b 0x5d68                                          |     goto label_1;
                                                                 | label_48:
    0x000061e4 mov sb, r6                                        |     sb = r6;
    0x000061e6 mov sl, fp                                        |     sl = fp;
    0x000061e8 ldr r6, [sp, 0x28]                                |     r6 = var_28h;
                                                                 |     if (r0 == 8) {
    0x000061ea beq 0x6146                                        |         goto label_20;
                                                                 |     }
    0x000061ec mov r7, r0                                        |     r7 = r0;
    0x000061ee b 0x6146                                          |     goto label_20;
                                                                 | label_24:
    0x000061f0 blx 0x2250                                        |     sysconf ();
                                                                 | label_51:
    0x000061f4 mov r2, sb                                        |     r2 = sb;
    0x000061f6 mov sb, r0                                        |     sb = r0;
                                                                 |     if (r0 != 8) {
    0x000061f8 bne 0x61b8                                        |         goto label_21;
                                                                 |     }
    0x000061fa mov sb, r2                                        |     sb = r2;
    0x000061fc b 0x61b8                                          |     goto label_21;
                                                                 | label_46:
    0x000061fe ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00006200 blx 0x21f4                                        |     fcn_000021f4 ();
    0x00006204 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00006206 movs r0, 8                                        |     r0 = 8;
    0x00006208 str r3, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r3;
    0x0000620a mov r6, r3                                        |     r6 = r3;
    0x0000620c bl 0x259c                                         |     fcn_0000259c (r0);
    0x00006210 b 0x5d68                                          |     goto label_1;
                                                                 | label_33:
    0x00006212 ldr r6, [sp, 0x14]                                |     r6 = var_14h;
    0x00006214 str r6, [sp, 0xc]                                 |     var_ch = r6;
    0x00006216 b 0x5d68                                          |     goto label_1;
                                                                 | label_27:
    0x00006218 ldr r3, [pc, 0x24]                                |     
    0x0000621a movs r2, 0x72                                     |     r2 = 0x72;
    0x0000621c ldr r1, [pc, 0x24]                                |     
    0x0000621e ldr r0, [pc, 0x28]                                |     
    0x00006220 add r3, pc                                        |     r3 = 0xc464;
    0x00006222 add r1, pc                                        |     r1 = 0xc46a;
    0x00006224 add r0, pc                                        |     r0 = 0xc472;
    0x00006226 blx 0x2424                                        |     fchmod (r0, r1);
    0x0000622a nop                                               |     
    0x0000622c adr r2, 0x28                                      |     r2 = 0x28;
    0x0000622e movs r1, r0                                       |     r1 = r0;
    0x00006230 lsls r4, r7, 3                                    |     r4 = r7 << 3;
    0x00006232 movs r0, r0                                       |     
    0x00006234 adr r1, 0x358                                     |     r1 = 0x358;
    0x00006236 movs r1, r0                                       |     r1 = r0;
    0x00006238 ldrb r0, [r0, 0x1f]                               |     r0 = *((r0 + 0x1f));
    0x0000623a movs r0, r0                                       |     
    0x0000623c ldrb r4, [r0, 0x1f]                               |     r4 = *((r0 + 0x1f));
    0x0000623e movs r0, r0                                       |     
    0x00006240 ldrb r0, [r5, 0x1b]                               |     r0 = *((r5 + 0x1b));
    0x00006242 movs r0, r0                                       |     
    0x00006244 ldrb r6, [r4, 0x1a]                               |     r6 = *((r4 + 0x1a));
    0x00006246 movs r0, r0                                       |     
    0x00006248 ldrb r0, [r2, 0x1b]                               |     r0 = *((r2 + 0x1b));
    0x0000624a movs r0, r0                                       |     
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libelf-0.185.so @ 0xc058 */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                                     |                                ((n & 0x0000ff00) <<  8) | \
                                                                     |                                ((n & 0x00ff0000) >>  8) | \
                                                                     |                                ((n & 0xff000000) >> 24)))
                                                                     |  
    ; (fcn) sym.elf_getshstrndx ()                                   | void elf_getshstrndx (uint32_t arg1, int16_t arg2) {
                                                                     |     int16_t var_0h;
                                                                     |     int16_t var_4h_3;
                                                                     |     int16_t var_8h_3;
                                                                     |     int16_t var_20h;
                                                                     |     int16_t var_30h;
                                                                     |     int16_t var_4ch;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
    0x0000c058 blmi 0x1c1ea1c                                        |     __asm ("blmi 0x1c1ea1c");
    0x0000c05c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0000c060 sub sp, 0x54                                          |     
    0x0000c062 add r2, pc                                            |     r2 += pc;
    0x0000c064 ldr r3, [r2, r3]                                      |     r3 = *((r2 + r3));
    0x0000c066 ldr r3, [r3]                                          |     r3 = *(r3);
    0x0000c068 str r3, [sp, 0x4c]                                    |     var_4ch = r3;
    0x0000c06a mov.w r3, 0                                           |     r3 = 0;
    0x0000c06e cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0000c070 beq 0xc16e                                            |         goto label_6;
                                                                     |     }
    0x0000c072 ldr r3, [r0, 0xc]                                     |     r3 = *((r0 + 0xc));
    0x0000c074 mov r4, r0                                            |     r4 = r0;
    0x0000c076 cmp r3, 3                                             |     
                                                                     |     if (r3 != 3) {
    0x0000c078 bne 0xc0de                                            |         goto label_10;
                                                                     |     }
    0x0000c07a ldr r3, [r0, 0x38]                                    |     r3 = *((r0 + 0x38));
    0x0000c07c cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0000c07e beq 0xc0ea                                            |         goto label_11;
                                                                     |     }
    0x0000c080 ldr r2, [r0, 0x14]                                    |     r2 = *((r0 + 0x14));
    0x0000c082 mov r5, r1                                            |     r5 = r1;
    0x0000c084 cmp r2, 1                                             |     
                                                                     |     if (r2 == 1) {
    0x0000c086 beq 0xc0b2                                            |         goto label_12;
                                                                     |     }
    0x0000c088 ldrh r2, [r3, 0x3e]                                   |     r2 = *((r3 + 0x3e));
    0x0000c08a movw r1, 0xffff                                       |     r1 = 0xffff;
    0x0000c08e cmp r2, r1                                            |     
                                                                     |     if (r2 == r1) {
    0x0000c090 beq 0xc0ce                                            |         goto label_13;
                                                                     |     }
                                                                     |     do {
                                                                     | label_0:
    0x0000c092 movs r0, 0                                            |         r0 = 0;
    0x0000c094 str r2, [r5]                                          |         *(r5) = r2;
                                                                     | label_1:
    0x0000c096 ldr r2, [pc, 0x188]                                   |         
    0x0000c098 ldr r3, [pc, 0x180]                                   |         r3 = *(0xc21c);
    0x0000c09a add r2, pc                                            |         r2 = 0x182c0;
    0x0000c09c ldr r3, [r2, r3]                                      |         r3 = *(0x182c0);
    0x0000c09e ldr r2, [r3]                                          |         r2 = *(0x182c0);
    0x0000c0a0 ldr r3, [sp, 0x4c]                                    |         r3 = var_4ch;
    0x0000c0a2 eors r2, r3                                           |         r2 ^= r3;
    0x0000c0a4 mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x0000c0a8 bne.w 0xc212                                          |             goto label_14;
                                                                     |         }
    0x0000c0ac add sp, 0x54                                          |         
    0x0000c0ae pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_12:
    0x0000c0b2 ldrh r2, [r3, 0x32]                                   |         r2 = *((r3 + 0x32));
    0x0000c0b4 movw r1, 0xffff                                       |         r1 = 0xffff;
    0x0000c0b8 cmp r2, r1                                            |         
    0x0000c0ba bne 0xc092                                            |         
                                                                     |     } while (r2 != r1);
    0x0000c0bc ldr.w r2, [r0, 0xa8]                                  |     r2 = *((r0 + 0xa8));
                                                                     |     if (r2 == 0) {
    0x0000c0c0 cbz r2, 0xc108                                        |         goto label_9;
                                                                     |     }
    0x0000c0c2 ldr.w r2, [r0, 0x128]                                 |     r2 = *((r0 + 0x128));
    0x0000c0c6 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0000c0c8 beq 0xc174                                            |         goto label_15;
                                                                     |     }
                                                                     | label_8:
    0x0000c0ca ldr r2, [r2, 0x18]                                    |     r2 = *((r2 + 0x18));
    0x0000c0cc b 0xc092                                              |     goto label_0;
                                                                     | label_13:
    0x0000c0ce ldr.w r2, [r0, 0xa8]                                  |     r2 = *((r0 + 0xa8));
                                                                     |     if (r2 == 0) {
    0x0000c0d2 cbz r2, 0xc108                                        |         goto label_9;
                                                                     |     }
    0x0000c0d4 ldr.w r2, [r0, 0x128]                                 |     r2 = *((r0 + 0x128));
                                                                     |     if (r2 == 0) {
    0x0000c0d8 cbz r2, 0xc114                                        |         goto label_16;
                                                                     |     }
                                                                     |     do {
    0x0000c0da ldr r2, [r2, 0x28]                                    |         r2 = *((r2 + 0x28));
    0x0000c0dc b 0xc092                                              |         goto label_0;
                                                                     | label_10:
    0x0000c0de movs r0, 4                                            |         r0 = 4;
    0x0000c0e0 bl 0x259c                                             |         fcn_0000259c (r0);
    0x0000c0e4 mov.w r0, -1                                          |         r0 = -1;
    0x0000c0e8 b 0xc096                                              |         goto label_1;
                                                                     | label_11:
    0x0000c0ea movs r0, 0x1a                                         |         r0 = 0x1a;
    0x0000c0ec bl 0x259c                                             |         fcn_0000259c (r0);
    0x0000c0f0 mov.w r0, -1                                          |         r0 = -1;
    0x0000c0f4 b 0xc096                                              |         goto label_1;
                                                                     | label_2:
    0x0000c0f6 ldr r3, [r0, 0x20]                                    |         r3 = *((r0 + 0x20));
    0x0000c0f8 add r3, r7                                            |         r3 += r7;
    0x0000c0fa add r2, r3                                            |         r2 += r3;
    0x0000c0fc lsls r1, r2, 0x1d                                     |         r1 = r2 << 0x1d;
                                                                     |         if (r1 != r2) {
    0x0000c0fe bne 0xc120                                            |             goto label_17;
                                                                     |         }
    0x0000c100 ldr r3, [r0, 0x28]                                    |         r3 = *((r0 + 0x28));
    0x0000c102 subs r3, r3, r7                                       |         r3 -= r7;
    0x0000c104 cmp r3, 0x3f                                          |         
    0x0000c106 bhi 0xc0da                                            |         
                                                                     |     } while (r3 > 0x3f);
                                                                     | label_9:
    0x0000c108 movs r0, 0x20                                         |     r0 = 0x20;
    0x0000c10a bl 0x259c                                             |     fcn_0000259c (r0);
    0x0000c10e mov.w r0, -1                                          |     r0 = -1;
    0x0000c112 b 0xc096                                              |     goto label_1;
                                                                     | label_16:
    0x0000c114 ldr r2, [r0]                                          |     r2 = *(r0);
    0x0000c116 ldr r7, [r3, 0x28]                                    |     r7 = *((r3 + 0x28));
                                                                     |     if (r2 == 0) {
    0x0000c118 cbz r2, 0xc120                                        |         goto label_17;
                                                                     |     }
    0x0000c11a ldrb r3, [r3, 5]                                      |     r3 = *((r3 + 5));
    0x0000c11c cmp r3, 1                                             |     
                                                                     |     if (r3 == 1) {
    0x0000c11e beq 0xc0f6                                            |         goto label_2;
                                                                     |     }
                                                                     | label_17:
    0x0000c120 ldr.w sl, [r4, 0x18]                                  |     sl = *((r4 + 0x18));
    0x0000c124 movs r6, 0                                            |     r6 = 0;
    0x0000c126 add.w sb, sp, 8                                       |     sb += var_8h_3;
    0x0000c12a mov.w fp, 0x40                                        |     
    0x0000c12e mov r8, r6                                            |     r8 = r6;
                                                                     |     do {
                                                                     | label_3:
    0x0000c130 adds r3, r6, r7                                       |         r3 = r6 + r7;
    0x0000c132 mov r2, fp                                            |         r2 = fp;
    0x0000c134 str r3, [sp]                                          |         *(sp) = r3;
    0x0000c136 adc r3, r8, 0                                         |         __asm ("adc r3, r8, 0");
    0x0000c13a str r3, [sp, 4]                                       |         var_4h_3 = r3;
    0x0000c13c add.w r1, sb, r6                                      |         r1 = sb + r6;
    0x0000c140 mov r0, sl                                            |         r0 = sl;
    0x0000c142 blx 0x22a4                                            |         r0 = fcn_000022a4 ();
    0x0000c146 adds r3, r0, 1                                        |         r3 = r0 + 1;
                                                                     |         if (r3 == r0) {
    0x0000c148 beq 0xc15e                                            |             goto label_18;
                                                                     |         }
    0x0000c14a cmp r0, 0                                             |         
                                                                     |         if (r0 <= 0) {
    0x0000c14c ble 0xc1de                                            |             goto label_19;
                                                                     |         }
    0x0000c14e add r6, r0                                            |         r6 += r0;
    0x0000c150 cmp r6, 0x3f                                          |         
                                                                     |         if (r6 > 0x3f) {
    0x0000c152 bgt 0xc1ca                                            |             goto label_20;
                                                                     |         }
    0x0000c154 asr.w r8, r6, 0x1f                                    |         r8 = r6 >> 0x1f;
    0x0000c158 rsb.w fp, r6, 0x40                                    |         
    0x0000c15c b 0xc130                                              |         
                                                                     |     } while (1);
                                                                     | label_18:
    0x0000c15e blx 0x2328                                            |     r0 = memset (r0, r1, r2);
    0x0000c162 ldr r3, [r0]                                          |     r3 = *(r0);
    0x0000c164 cmp r3, 4                                             |     
                                                                     |     if (r3 == 4) {
    0x0000c166 beq 0xc130                                            |         goto label_3;
                                                                     |     }
                                                                     | label_4:
    0x0000c168 movs r0, 9                                            |     r0 = 9;
    0x0000c16a bl 0x259c                                             |     fcn_0000259c (r0);
                                                                     | label_6:
    0x0000c16e mov.w r0, -1                                          |     r0 = -1;
    0x0000c172 b 0xc096                                              |     goto label_1;
                                                                     | label_15:
    0x0000c174 ldr r2, [r0]                                          |     r2 = *(r0);
    0x0000c176 ldr r7, [r3, 0x20]                                    |     r7 = *((r3 + 0x20));
                                                                     |     if (r2 != 0) {
    0x0000c178 cbz r2, 0xc180                                        |         
    0x0000c17a ldrb r3, [r3, 5]                                      |         r3 = *((r3 + 5));
    0x0000c17c cmp r3, 1                                             |         
                                                                     |         if (r3 == 1) {
    0x0000c17e beq 0xc1fc                                            |             goto label_21;
                                                                     |         }
                                                                     |     }
                                                                     | label_7:
    0x0000c180 ldr.w sl, [r4, 0x18]                                  |     sl = *((r4 + 0x18));
    0x0000c184 movs r6, 0                                            |     r6 = 0;
    0x0000c186 mov.w fp, 0x28                                        |     
    0x0000c18a add.w sb, sp, 8                                       |     sb += var_8h_3;
    0x0000c18e mov r8, r6                                            |     r8 = r6;
                                                                     |     do {
                                                                     | label_5:
    0x0000c190 adds r3, r6, r7                                       |         r3 = r6 + r7;
    0x0000c192 mov r2, fp                                            |         r2 = fp;
    0x0000c194 str r3, [sp]                                          |         *(sp) = r3;
    0x0000c196 adc r3, r8, 0                                         |         __asm ("adc r3, r8, 0");
    0x0000c19a str r3, [sp, 4]                                       |         var_4h_3 = r3;
    0x0000c19c add.w r1, sb, r6                                      |         r1 = sb + r6;
    0x0000c1a0 mov r0, sl                                            |         r0 = sl;
    0x0000c1a2 blx 0x22a4                                            |         r0 = fcn_000022a4 ();
    0x0000c1a6 adds r3, r0, 1                                        |         r3 = r0 + 1;
                                                                     |         if (r3 == r0) {
    0x0000c1a8 beq 0xc1be                                            |             goto label_22;
                                                                     |         }
    0x0000c1aa cmp r0, 0                                             |         
                                                                     |         if (r0 <= 0) {
    0x0000c1ac ble 0xc1de                                            |             goto label_19;
                                                                     |         }
    0x0000c1ae add r6, r0                                            |         r6 += r0;
    0x0000c1b0 cmp r6, 0x27                                          |         
                                                                     |         if (r6 > 0x27) {
    0x0000c1b2 bgt 0xc1e8                                            |             goto label_23;
                                                                     |         }
    0x0000c1b4 asr.w r8, r6, 0x1f                                    |         r8 = r6 >> 0x1f;
    0x0000c1b8 rsb.w fp, r6, 0x28                                    |         
    0x0000c1bc b 0xc190                                              |         
                                                                     |     } while (1);
                                                                     | label_22:
    0x0000c1be blx 0x2328                                            |     r0 = memset (r0, r1, r2);
    0x0000c1c2 ldr r3, [r0]                                          |     r3 = *(r0);
    0x0000c1c4 cmp r3, 4                                             |     
                                                                     |     if (r3 != 4) {
    0x0000c1c6 bne 0xc168                                            |         goto label_4;
                                                                     |     }
    0x0000c1c8 b 0xc190                                              |     goto label_5;
                                                                     | label_20:
    0x0000c1ca cmp r6, 0x40                                          |     
                                                                     |     if (r6 != 0x40) {
    0x0000c1cc bne 0xc1e0                                            |         goto label_24;
                                                                     |     }
    0x0000c1ce ldr r3, [r4, 0x38]                                    |     r3 = *((r4 + 0x38));
    0x0000c1d0 ldr r2, [sp, 0x30]                                    |     r2 = var_30h;
    0x0000c1d2 ldrb r3, [r3, 5]                                      |     r3 = *((r3 + 5));
    0x0000c1d4 cmp r3, 1                                             |     
                                                                     |     if (r3 == 1) {
    0x0000c1d6 beq.w 0xc092                                          |         goto label_0;
                                                                     |     }
    0x0000c1da rev r2, r2                                            |     r2 = SWAP32 (r2);
    0x0000c1dc b 0xc092                                              |     goto label_0;
                                                                     |     if (r3 != 1) {
                                                                     | label_19:
    0x0000c1de bne 0xc168                                            |         goto label_4;
                                                                     |     }
                                                                     |     do {
                                                                     | label_24:
    0x0000c1e0 movs r0, 0xa                                          |         r0 = 0xa;
    0x0000c1e2 bl 0x259c                                             |         fcn_0000259c (r0);
    0x0000c1e6 b 0xc16e                                              |         goto label_6;
                                                                     | label_23:
    0x0000c1e8 cmp r6, 0x28                                          |         
    0x0000c1ea bne 0xc1e0                                            |         
                                                                     |     } while (r6 != 0x28);
    0x0000c1ec ldr r3, [r4, 0x38]                                    |     r3 = *((r4 + 0x38));
    0x0000c1ee ldr r2, [sp, 0x20]                                    |     r2 = var_20h;
    0x0000c1f0 ldrb r3, [r3, 5]                                      |     r3 = *((r3 + 5));
    0x0000c1f2 cmp r3, 1                                             |     
                                                                     |     if (r3 == 1) {
    0x0000c1f4 beq.w 0xc092                                          |         goto label_0;
                                                                     |     }
    0x0000c1f8 rev r2, r2                                            |     r2 = SWAP32 (r2);
    0x0000c1fa b 0xc092                                              |     goto label_0;
                                                                     | label_21:
    0x0000c1fc ldr r3, [r0, 0x20]                                    |     r3 = *((r0 + 0x20));
    0x0000c1fe add r3, r7                                            |     r3 += r7;
    0x0000c200 add r2, r3                                            |     r2 += r3;
    0x0000c202 lsls r1, r2, 0x1e                                     |     r1 = r2 << 0x1e;
                                                                     |     if (r1 != r2) {
    0x0000c204 bne 0xc180                                            |         goto label_7;
                                                                     |     }
    0x0000c206 ldr r3, [r0, 0x28]                                    |     r3 = *((r0 + 0x28));
    0x0000c208 subs r3, r3, r7                                       |     r3 -= r7;
    0x0000c20a cmp r3, 0x27                                          |     
                                                                     |     if (r3 > 0x27) {
    0x0000c20c bhi.w 0xc0ca                                          |         goto label_8;
                                                                     |     }
    0x0000c210 b 0xc108                                              |     goto label_9;
                                                                     | label_14:
    0x0000c212 blx 0x2250                                            |     sysconf ();
    0x0000c216 nop                                                   |     
    0x0000c218 subs r6, 0x92                                         |     r6 -= 0x92;
    0x0000c21a movs r1, r0                                           |     r1 = r0;
    0x0000c21c lsls r4, r7, 3                                        |     r4 = r7 << 3;
    0x0000c21e movs r0, r0                                           |     
    0x0000c220 subs r6, 0x5a                                         |     r6 -= 0x5a;
    0x0000c222 movs r1, r0                                           |     r1 = r0;
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libelf-0.185.so @ 0x7d10 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) sym.elf_update ()                                    | void elf_update (int16_t arg_0h, int16_t arg_2ch, int16_t arg_30h, int16_t arg_38h, int16_t arg_40h, int16_t arg_44h, int16_t arg_50h, int16_t arg_60h, int16_t arg_70h, int16_t arg_74h, int16_t arg_a8h, int16_t arg_b0h, int16_t arg_128h, int16_t arg_12ch, int16_t arg_150h, int16_t arg1, uint32_t arg2) {
                                                                 |     int16_t var_4h_2;
                                                                 |     int16_t var_8h_2;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h_2;
                                                                 |     int16_t var_14h_3;
                                                                 |     int16_t var_18h_2;
                                                                 |     int16_t var_1ch_2;
                                                                 |     int16_t var_20h_2;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h_2;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h_2;
                                                                 |     int16_t var_34h_2;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h_2;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h_2;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch_2;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_0h;
                                                                 |     int32_t var_0h_2;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h_3;
                                                                 |     int16_t var_28h_3;
                                                                 |     int16_t var_84h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00007d10 push {sb, sp}                                     |     
    0x00007d14 mvns r0, r6                                       |     r0 = ~r6;
    0x00007d16 cmp r1, r2                                        |     
    0x00007d18 it ne                                             |     
                                                                 |     if (r1 != r2) {
    0x00007d1a cmpne r1, 3                                       |         __asm ("cmpne r1, 3");
                                                                 |     }
    0x00007d1c mov r4, r0                                        |     r4 = r0;
    0x00007d1e ite ne                                            |     
                                                                 |     if (r1 == r2) {
    0x00007d20 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r1 != r2) {
    0x00007d22 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00007d24 ldr r0, [pc, 0x280]                               |     
    0x00007d26 mov r5, r1                                        |     r5 = r1;
    0x00007d28 cmp r1, 0xa                                       |     
    0x00007d2a ite eq                                            |     
                                                                 |     if (r1 != 0xa) {
    0x00007d2c moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r1 == 0xa) {
    0x00007d2e andne r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x00007d32 ldr r1, [pc, 0x278]                               |     r1 = *(0x7fae);
    0x00007d34 sub sp, 0x8c                                      |     
    0x00007d36 add r0, pc                                        |     r0 = 0xfce2;
    0x00007d38 ldr r1, [r0, r1]                                  |     
    0x00007d3a ldr r1, [r1]                                      |     r1 = *(0xfce2);
    0x00007d3c str r1, [sp, 0x84]                                |     var_84h = r1;
    0x00007d3e mov.w r1, 0                                       |     r1 = 0;
    0x00007d42 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00007d44 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00007d46 bne.w 0x7e7a                                      |         goto label_54;
                                                                 |     }
    0x00007d4a cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00007d4c beq 0x7e16                                        |         goto label_3;
                                                                 |     }
    0x00007d4e ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00007d50 cmp r3, 3                                         |     
                                                                 |     if (r3 != 3) {
    0x00007d52 bne.w 0x7f86                                      |         goto label_55;
                                                                 |     }
    0x00007d56 ldr r3, [r4, 0x38]                                |     r3 = *((r4 + 0x38));
    0x00007d58 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00007d5a beq.w 0x7f94                                      |         goto label_56;
                                                                 |     }
    0x00007d5e ldr r3, [r4, 0x44]                                |     r3 = *((r4 + 0x44));
    0x00007d60 ldr.w r8, [r3]                                    |     r8 = *(r3);
    0x00007d64 cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x00007d68 bne 0x7e1e                                        |         goto label_57;
                                                                 |     }
    0x00007d6a ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x00007d6c mov r2, r8                                        |     r2 = r8;
    0x00007d6e add r1, sp, 0x14                                  |     r1 += var_14h;
    0x00007d70 mov r0, r4                                        |     r0 = r4;
    0x00007d72 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x00007d74 beq 0x7e3a                                        |         goto label_58;
                                                                 |     }
                                                                 | label_1:
    0x00007d76 bl 0x8658                                         |     r0 = void (*0x8658)() ();
    0x00007d7a mov r6, r0                                        |     r6 = r0;
    0x00007d7c mov r7, r1                                        |     r7 = r1;
                                                                 | label_2:
    0x00007d7e cmp.w r7, -1                                      |     
    0x00007d82 it eq                                             |     
                                                                 |     if (r7 == -1) {
    0x00007d84 cmpeq r6, -1                                      |         __asm ("cmpeq r6, -1");
                                                                 |     }
                                                                 |     if (r7 == -1) {
    0x00007d88 beq 0x7e16                                        |         goto label_3;
                                                                 |     }
    0x00007d8a cmp r5, 0xa                                       |     
    0x00007d8c it ne                                             |     
                                                                 |     if (r5 != 0xa) {
    0x00007d8e cmpne r5, 3                                       |         __asm ("cmpne r5, 3");
                                                                 |     }
                                                                 |     if (r5 != 0xa) {
    0x00007d90 bne 0x7dee                                        |         goto label_0;
                                                                 |     }
    0x00007d92 ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x00007d94 sub.w r2, r3, 9                                   |     r2 = r3 - 9;
    0x00007d98 subs r3, 2                                        |     r3 -= 2;
    0x00007d9a cmp r2, 1                                         |     
    0x00007d9c it hi                                             |     
                                                                 |     if (r2 > 1) {
    0x00007d9e cmphi r3, 1                                       |         __asm ("cmphi r3, 1");
                                                                 |     }
                                                                 |     if (r2 > 1) {
    0x00007da0 bhi.w 0x7f78                                      |         goto label_59;
                                                                 |     }
    0x00007da4 ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x00007da6 adds r1, r3, 1                                    |     r1 = r3 + 1;
                                                                 |     if (r1 == r3) {
    0x00007da8 beq.w 0x7f1a                                      |         goto label_60;
                                                                 |     }
    0x00007dac mov r0, r3                                        |     r0 = r3;
    0x00007dae add r1, sp, 0x18                                  |     r1 += var_18h_3;
    0x00007db0 ldr.w sb, [sp, 0x14]                              |     sb = var_14h;
    0x00007db4 ldr r5, [r4, 0x14]                                |     r5 = *((r4 + 0x14));
    0x00007db6 blx 0x23e8                                        |     r0 = mremap ();
    0x00007dba cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00007dbc bne.w 0x7f0c                                      |         goto label_10;
                                                                 |     }
    0x00007dc0 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00007dc2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00007dc4 beq 0x7e44                                        |         goto label_61;
                                                                 |     }
    0x00007dc6 ldr r3, [r4]                                      |     r3 = *(r4);
    0x00007dc8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00007dca beq 0x7e60                                        |         goto label_8;
                                                                 |     }
                                                                 | label_6:
    0x00007dcc cmp r5, 1                                         |     
    0x00007dce mov r2, r8                                        |     r2 = r8;
    0x00007dd0 mov r1, sb                                        |     r1 = sb;
    0x00007dd2 mov r0, r4                                        |     r0 = r4;
                                                                 |     if (r5 == 1) {
    0x00007dd4 beq 0x7e0e                                        |         goto label_62;
                                                                 |     }
    0x00007dd6 bl 0xa054                                         |     r0 = fcn_0000a054 (r0, r1, r2, r3, r4, r5, r6);
                                                                 |     if (r0 != 0) {
    0x00007dda cbnz r0, 0x7e16                                   |         goto label_3;
                                                                 |     }
                                                                 |     do {
                                                                 | label_4:
    0x00007ddc ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x00007dde cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00007de0 beq.w 0x7f38                                      |             goto label_63;
                                                                 |         }
    0x00007de4 ldr r1, [sp, 0x28]                                |         r1 = var_28h_3;
    0x00007de6 tst.w r1, 0xc00                                   |         
                                                                 |         if ((r1 & 0xc00) != 0) {
    0x00007dea bne.w 0x7f64                                      |             goto label_64;
                                                                 |         }
                                                                 | label_0:
    0x00007dee ldr r2, [pc, 0x1c0]                               |         
    0x00007df0 ldr r3, [pc, 0x1b8]                               |         r3 = *(0x7fac);
    0x00007df2 add r2, pc                                        |         r2 = 0xfda8;
    0x00007df4 ldr r3, [r2, r3]                                  |         r3 = *(0xfda8);
    0x00007df6 ldr r2, [r3]                                      |         r2 = *(0xfda8);
    0x00007df8 ldr r3, [sp, 0x84]                                |         r3 = var_84h;
    0x00007dfa eors r2, r3                                       |         r2 ^= r3;
    0x00007dfc mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00007e00 bne.w 0x7fa2                                      |             goto label_65;
                                                                 |         }
    0x00007e04 mov r0, r6                                        |         r0 = r6;
    0x00007e06 mov r1, r7                                        |         r1 = r7;
    0x00007e08 add sp, 0x8c                                      |         
    0x00007e0a pop.w {r4, r5, r6, r7, r8, sb, pc}                |         
                                                                 | label_62:
    0x00007e0e bl 0x8f3c                                         |         r0 = fcn_00008f3c (r0, r1, r2, r3, r4, r5, r6);
    0x00007e12 cmp r0, 0                                         |         
    0x00007e14 beq 0x7ddc                                        |         
                                                                 |     } while (r0 == 0);
                                                                 | label_3:
    0x00007e16 mov.w r6, -1                                      |     r6 = -1;
    0x00007e1a mov r7, r6                                        |     r7 = r6;
    0x00007e1c b 0x7dee                                          |     goto label_0;
                                                                 | label_57:
    0x00007e1e add.w r8, r8, -1                                  |     r8 += -1;
    0x00007e22 movs r2, 0x98                                     |     r2 = 0x98;
    0x00007e24 mla r3, r2, r8, r3                                |     __asm ("mla r3, r2, r8, r3");
    0x00007e28 add r1, sp, 0x14                                  |     r1 += var_14h;
    0x00007e2a mov r0, r4                                        |     r0 = r4;
    0x00007e2c ldr r3, [r3, 0x78]                                |     r3 = *((r3 + 0x78));
    0x00007e2e add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x00007e32 ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x00007e34 mov r2, r8                                        |     r2 = r8;
    0x00007e36 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x00007e38 bne 0x7d76                                        |         goto label_1;
                                                                 |     }
                                                                 | label_58:
    0x00007e3a bl 0x7fb4                                         |     r0 = void (*0x7fb4)() ();
    0x00007e3e mov r6, r0                                        |     r6 = r0;
    0x00007e40 mov r7, r1                                        |     r7 = r1;
    0x00007e42 b 0x7d7e                                          |     goto label_2;
                                                                 | label_61:
    0x00007e44 ldr r3, [r4, 0x28]                                |     r3 = *((r4 + 0x28));
    0x00007e46 adds r2, r3, 1                                    |     r2 = r3 + 1;
                                                                 |     if (r2 != r3) {
    0x00007e48 beq 0x7e4e                                        |         
    0x00007e4a cmp r3, r6                                        |         
                                                                 |         if (r3 >= r6) {
    0x00007e4c bhs 0x7efa                                        |             goto label_66;
                                                                 |         }
                                                                 |     }
    0x00007e4e ldr r0, [r4, 0x18]                                |     r0 = *((r4 + 0x18));
    0x00007e50 mov r2, r6                                        |     r2 = r6;
    0x00007e52 mov r3, r7                                        |     r3 = r7;
    0x00007e54 blx 0x2228                                        |     r0 = fcn_00002228 ();
    0x00007e58 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00007e5a bne 0x7f0c                                        |         goto label_10;
                                                                 |     }
    0x00007e5c ldr r3, [r4]                                      |     r3 = *(r4);
                                                                 |     if (r3 != 0) {
    0x00007e5e cbnz r3, 0x7eb8                                   |         goto label_67;
                                                                 |     }
                                                                 | label_8:
    0x00007e60 ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x00007e62 cmp r3, 0xa                                       |     
                                                                 |     if (r3 == 0xa) {
    0x00007e64 beq 0x7e88                                        |         goto label_68;
                                                                 |     }
                                                                 | label_5:
    0x00007e66 cmp r5, 1                                         |     
                                                                 |     if (r5 == 1) {
    0x00007e68 beq 0x7f26                                        |         goto label_69;
                                                                 |     }
    0x00007e6a mov r2, r8                                        |     r2 = r8;
    0x00007e6c mov r1, sb                                        |     r1 = sb;
    0x00007e6e mov r0, r4                                        |     r0 = r4;
    0x00007e70 bl 0xa870                                         |     r0 = fcn_0000a870 (r0, r1, r2, r3, r4, r5, r6);
    0x00007e74 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00007e76 bne 0x7e16                                        |         goto label_3;
                                                                 |     }
    0x00007e78 b 0x7ddc                                          |     goto label_4;
                                                                 | label_54:
    0x00007e7a mov.w r6, -1                                      |     r6 = -1;
    0x00007e7e movs r0, 0xd                                      |     r0 = 0xd;
    0x00007e80 mov r7, r6                                        |     r7 = r6;
    0x00007e82 bl 0x259c                                         |     fcn_0000259c (r0);
    0x00007e86 b 0x7dee                                          |     goto label_0;
                                                                 | label_68:
    0x00007e88 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00007e8c movs r2, 3                                        |     r2 = 3;
    0x00007e8e mov r1, r6                                        |     r1 = r6;
    0x00007e90 movs r0, 0                                        |     r0 = 0;
    0x00007e92 vstr d16, [sp, 8]                                 |     __asm ("vstr d16, [sp, 8]");
    0x00007e96 ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x00007e98 str r3, [sp]                                      |     *(sp) = r3;
    0x00007e9a movs r3, 1                                        |     r3 = 1;
    0x00007e9c blx 0x221c                                        |     r0 = fcn_0000221c ();
    0x00007ea0 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x00007ea2 str r0, [r4]                                      |     *(r4) = r0;
    0x00007ea4 itt eq                                            |     
                                                                 |     if (r3 != r0) {
    0x00007ea6 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 == r0) {
    0x00007ea8 streq r3, [r4]                                    |         *(r4) = r3;
                                                                 |         goto label_70;
                                                                 |     }
                                                                 |     if (r3 == r0) {
                                                                 | label_70:
    0x00007eaa beq 0x7e66                                        |         goto label_5;
                                                                 |     }
    0x00007eac ldr r3, [r4, 0x2c]                                |     r3 = *((r4 + 0x2c));
    0x00007eae orr r3, r3, 0x40                                  |     r3 |= 0x40;
    0x00007eb2 str r3, [r4, 0x2c]                                |     *((r4 + 0x2c)) = r3;
    0x00007eb4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00007eb6 beq 0x7e66                                        |         goto label_5;
                                                                 |     }
                                                                 | label_67:
    0x00007eb8 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00007eba cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00007ebc bne 0x7dcc                                        |         goto label_6;
                                                                 |     }
    0x00007ebe ldr r3, [r4, 0x28]                                |     r3 = *((r4 + 0x28));
                                                                 | label_7:
    0x00007ec0 adds r1, r3, 1                                    |     r1 = r3 + 1;
                                                                 |     if (r1 == r3) {
    0x00007ec2 beq 0x7ec8                                        |         goto label_71;
                                                                 |     }
    0x00007ec4 cmp r3, r6                                        |     
                                                                 |     if (r3 >= r6) {
    0x00007ec6 bhs 0x7dcc                                        |         goto label_6;
                                                                 |     }
                                                                 | label_71:
    0x00007ec8 strd r6, r7, [sp]                                 |     __asm ("strd r6, r7, [sp]");
    0x00007ecc movs r2, 0                                        |     r2 = 0;
    0x00007ece ldr r0, [r4, 0x18]                                |     r0 = *((r4 + 0x18));
    0x00007ed0 movs r3, 0                                        |     r3 = 0;
    0x00007ed2 blx 0x2388                                        |     r0 = fcntl64 ();
                                                                 |     if (r0 != 0) {
    0x00007ed6 cbnz r0, 0x7f02                                   |         goto label_72;
                                                                 |     }
                                                                 | label_9:
    0x00007ed8 ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x00007eda cmp r3, 9                                         |     
                                                                 |     if (r3 != 9) {
    0x00007edc bne.w 0x7dcc                                      |         goto label_6;
                                                                 |     }
    0x00007ee0 ldr r1, [r4, 0x28]                                |     r1 = *((r4 + 0x28));
    0x00007ee2 cmp r6, r1                                        |     
                                                                 |     if (r6 < r1) {
    0x00007ee4 bls.w 0x7dcc                                      |         goto label_6;
                                                                 |     }
    0x00007ee8 ldr r0, [r4]                                      |     r0 = *(r4);
    0x00007eea movs r3, 0                                        |     r3 = 0;
    0x00007eec mov r2, r6                                        |     r2 = r6;
    0x00007eee blx 0x23f4                                        |     tls_get_addr ();
    0x00007ef2 adds r0, 1                                        |     r0++;
                                                                 |     if (r0 == 1) {
    0x00007ef4 beq 0x7f0c                                        |         goto label_10;
                                                                 |     }
    0x00007ef6 str r6, [r4, 0x28]                                |     *((r4 + 0x28)) = r6;
    0x00007ef8 b 0x7dcc                                          |     goto label_6;
                                                                 | label_66:
    0x00007efa ldr r2, [r4]                                      |     r2 = *(r4);
    0x00007efc cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00007efe bne 0x7ec0                                        |         goto label_7;
                                                                 |     }
    0x00007f00 b 0x7e60                                          |     goto label_8;
                                                                 | label_72:
    0x00007f02 blx 0x2328                                        |     r0 = memset (r0, r1, r2);
    0x00007f06 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00007f08 cmp r3, 0x1c                                      |     
                                                                 |     if (r3 != 0x1c) {
    0x00007f0a bne 0x7ed8                                        |         goto label_9;
                                                                 |     }
                                                                 | label_10:
    0x00007f0c mov.w r6, -1                                      |     r6 = -1;
    0x00007f10 movs r0, 0x14                                     |     r0 = 0x14;
    0x00007f12 mov r7, r6                                        |     r7 = r6;
    0x00007f14 bl 0x259c                                         |     fcn_0000259c (r0);
    0x00007f18 b 0x7dee                                          |     goto label_0;
                                                                 | label_60:
    0x00007f1a movs r0, 0x1b                                     |     r0 = 0x1b;
    0x00007f1c mov r6, r3                                        |     r6 = r3;
    0x00007f1e mov r7, r3                                        |     r7 = r3;
    0x00007f20 bl 0x259c                                         |     fcn_0000259c (r0);
    0x00007f24 b 0x7dee                                          |     goto label_0;
                                                                 | label_69:
    0x00007f26 mov r2, r8                                        |     r2 = r8;
    0x00007f28 mov r1, sb                                        |     r1 = sb;
    0x00007f2a mov r0, r4                                        |     r0 = r4;
    0x00007f2c bl 0x9774                                         |     r0 = fcn_00009774 (r0, r1, r2, r3, r4, r5, r6);
    0x00007f30 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00007f32 bne.w 0x7e16                                      |         goto label_3;
                                                                 |     }
    0x00007f36 b 0x7ddc                                          |     goto label_4;
                                                                 | label_63:
    0x00007f38 ldr r3, [r4, 0x28]                                |     r3 = *((r4 + 0x28));
    0x00007f3a adds r2, r3, 1                                    |     r2 = r3 + 1;
                                                                 |     if (r2 != r3) {
    0x00007f3c beq 0x7f42                                        |         
    0x00007f3e cmp r3, r6                                        |         
                                                                 |         if (r3 > r6) {
    0x00007f40 bhi 0x7f4e                                        |             goto label_73;
                                                                 |         }
                                                                 |     }
    0x00007f42 ldr r1, [sp, 0x28]                                |     r1 = var_28h_3;
    0x00007f44 tst.w r1, 0xc00                                   |     
                                                                 |     if ((r1 & 0xc00) != 0) {
    0x00007f48 bne 0x7f64                                        |         goto label_64;
                                                                 |     }
                                                                 | label_11:
    0x00007f4a str r6, [r4, 0x28]                                |     *((r4 + 0x28)) = r6;
    0x00007f4c b 0x7dee                                          |     goto label_0;
                                                                 | label_73:
    0x00007f4e ldr r0, [r4, 0x18]                                |     r0 = *((r4 + 0x18));
    0x00007f50 mov r2, r6                                        |     r2 = r6;
    0x00007f52 mov r3, r7                                        |     r3 = r7;
    0x00007f54 blx 0x2228                                        |     r0 = fcn_00002228 ();
    0x00007f58 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00007f5a bne 0x7f0c                                        |         goto label_10;
                                                                 |     }
    0x00007f5c ldr r1, [sp, 0x28]                                |     r1 = var_28h_3;
    0x00007f5e tst.w r1, 0xc00                                   |     
                                                                 |     if ((r1 & 0xc00) == 0) {
    0x00007f62 beq 0x7f6e                                        |         goto label_74;
                                                                 |     }
                                                                 | label_64:
    0x00007f64 ldr r0, [r4, 0x18]                                |     r0 = *((r4 + 0x18));
    0x00007f66 blx 0x2430                                        |     r0 = fcn_00002430 ();
    0x00007f6a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00007f6c bne 0x7f0c                                        |         goto label_10;
                                                                 |     }
                                                                 | label_74:
    0x00007f6e ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00007f70 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00007f72 bne.w 0x7dee                                      |         goto label_0;
                                                                 |     }
    0x00007f76 b 0x7f4a                                          |     goto label_11;
                                                                 | label_59:
    0x00007f78 mov.w r6, -1                                      |     r6 = -1;
    0x00007f7c movs r0, 0x26                                     |     r0 = 0x26;
    0x00007f7e mov r7, r6                                        |     r7 = r6;
    0x00007f80 bl 0x259c                                         |     fcn_0000259c (r0);
    0x00007f84 b 0x7dee                                          |     goto label_0;
                                                                 | label_55:
    0x00007f86 mov.w r6, -1                                      |     r6 = -1;
    0x00007f8a movs r0, 4                                        |     r0 = 4;
    0x00007f8c mov r7, r6                                        |     r7 = r6;
    0x00007f8e bl 0x259c                                         |     fcn_0000259c (r0);
    0x00007f92 b 0x7dee                                          |     goto label_0;
                                                                 | label_56:
    0x00007f94 mov.w r6, -1                                      |     r6 = -1;
    0x00007f98 movs r0, 0x1a                                     |     r0 = 0x1a;
    0x00007f9a mov r7, r6                                        |     r7 = r6;
    0x00007f9c bl 0x259c                                         |     fcn_0000259c (r0);
    0x00007fa0 b 0x7dee                                          |     goto label_0;
                                                                 | label_65:
    0x00007fa2 blx 0x2250                                        |     sysconf ();
    0x00007fa6 nop                                               |     
    0x00007fa8 strh r6, [r7, 0xc]                                |     *((r7 + 0xc)) = r6;
    0x00007faa movs r1, r0                                       |     r1 = r0;
    0x00007fac lsls r4, r7, 3                                    |     r4 = r7 << 3;
    0x00007fae movs r0, r0                                       |     
    0x00007fb0 strh r2, [r0, 8]                                  |     *((r0 + 8)) = r2;
    0x00007fb2 movs r1, r0                                       |     r1 = r0;
    0x00007fb4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00007fb8 mov r8, r2                                        |     r8 = r2;
    0x00007fba ldr.w r2, [pc, 0x63c]                             |     r2 = *(0x000085f8);
    0x00007fbe sub sp, 0x3c                                      |     
    0x00007fc0 mov fp, r0                                        |     
    0x00007fc2 mov r4, r1                                        |     r4 = r1;
    0x00007fc4 ldr.w r3, [pc, 0x634]                             |     
    0x00007fc8 add r2, pc                                        |     r2 += pc;
    0x00007fca ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00007fcc ldr r3, [r3]                                      |     r3 = *(0x85fc);
    0x00007fce str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00007fd0 mov.w r3, 0                                       |     r3 = 0;
    0x00007fd4 bl 0x4d20                                         |     r0 = fcn_00004d20 (r0);
    0x00007fd8 ldrb r3, [r0]                                     |     r3 = *(r0);
    0x00007fda mov sb, r0                                        |     sb = r0;
    0x00007fdc cmp r3, 0x7f                                      |     
                                                                 |     if (r3 == 0x7f) {
    0x00007fde beq.w 0x8418                                      |         goto label_75;
                                                                 |     }
                                                                 | label_25:
    0x00007fe2 ldr.w r3, [pc, 0x61c]                             |     
    0x00007fe6 add r3, pc                                        |     r3 = 0x105ec;
    0x00007fe8 ldr r0, [r3]                                      |     r0 = *(0x105ec);
    0x00007fea str.w r0, [sb]                                    |     __asm ("str.w r0, [sb]");
    0x00007fee ldr.w r3, [fp, 0x50]                              |     r3 = *(arg_50h);
    0x00007ff2 orr r3, r3, 1                                     |     r3 |= 1;
    0x00007ff6 str.w r3, [fp, 0x50]                              |     __asm ("str.w r3, [arg_50h]");
                                                                 | label_26:
    0x00007ffa ldrb.w r3, [sb, 4]                                |     r3 = *((sb + 4));
    0x00007ffe cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x00008000 beq 0x8014                                        |         
    0x00008002 movs r3, 1                                        |         r3 = 1;
    0x00008004 strb.w r3, [sb, 4]                                |         *((sb + 4)) = r3;
    0x00008008 ldr.w r3, [fp, 0x50]                              |         r3 = *(arg_50h);
    0x0000800c orr r3, r3, 1                                     |         r3 |= 1;
    0x00008010 str.w r3, [fp, 0x50]                              |         __asm ("str.w r3, [arg_50h]");
                                                                 |     }
    0x00008014 ldrb.w r3, [sb, 5]                                |     r3 = *((sb + 5));
    0x00008018 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000801a beq.w 0x84c0                                      |         goto label_76;
                                                                 |     }
    0x0000801e cmp r3, 2                                         |     
                                                                 |     if (r3 > 2) {
    0x00008020 bhi.w 0x84e8                                      |         goto label_77;
                                                                 |     }
    0x00008024 subs r3, 1                                        |     r3--;
    0x00008026 it ne                                             |     
                                                                 |     if (r3 == 1) {
    0x00008028 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0000802a str r3, [r4]                                      |     *(r4) = r3;
                                                                 | label_30:
    0x0000802c ldrb.w r3, [sb, 6]                                |     r3 = *((sb + 6));
    0x00008030 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x00008032 beq 0x8046                                        |         
    0x00008034 movs r3, 1                                        |         r3 = 1;
    0x00008036 strb.w r3, [sb, 6]                                |         *((sb + 6)) = r3;
    0x0000803a ldr.w r3, [fp, 0x50]                              |         r3 = *(arg_50h);
    0x0000803e orr r3, r3, 1                                     |         r3 |= 1;
    0x00008042 str.w r3, [fp, 0x50]                              |         __asm ("str.w r3, [arg_50h]");
                                                                 |     }
    0x00008046 ldr.w r3, [sb, 0x14]                              |     r3 = *((sb + 0x14));
    0x0000804a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000804c beq.w 0x84d4                                      |         goto label_78;
                                                                 |     }
    0x00008050 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x00008052 bne.w 0x840a                                      |         goto label_79;
                                                                 |     }
                                                                 | label_31:
    0x00008056 cmp.w r8, 0xff00                                  |     
    0x0000805a ldrh.w r3, [sb, 0x30]                             |     r3 = *((sb + 0x30));
                                                                 |     if (r8 >= 0xff00) {
    0x0000805e bhs.w 0x84f6                                      |         goto label_80;
                                                                 |     }
    0x00008062 cmp r8, r3                                        |     
    0x00008064 itttt ne                                          |     
                                                                 |     if (r8 != r3) {
    0x00008066 strhne r8, [sb, 0x30]                             |         __asm ("strhne r8, [sb, 0x30]");
                                                                 |     }
                                                                 |     if (r8 == r3) {
    0x0000806a ldrne r3, [fp, 0x50]                              |         r3 = *(arg_50h);
                                                                 |     }
                                                                 |     if (r8 != r3) {
    0x0000806e orr r3, r3, 1                                     |         r3 |= 1;
                                                                 |     }
                                                                 |     if (r8 != r3) {
    0x00008072 str.w r3, [fp, 0x50]                              |         __asm ("str.w r3, [arg_50h]");
                                                                 |     }
                                                                 | label_32:
    0x00008076 ldr.w r3, [pc, 0x58c]                             |     
    0x0000807a ldrh.w r2, [sb, 0x28]                             |     r2 = *((sb + 0x28));
    0x0000807e add r3, pc                                        |     r3 = 0x10688;
    0x00008080 ldr.w sl, [r3, 0xc]                               |     sl = *(0x10694);
    0x00008084 cmp r2, sl                                        |     
    0x00008086 itttt ne                                          |     
                                                                 |     if (r2 != sl) {
    0x00008088 strhne sl, [sb, 0x28]                             |         __asm ("strhne sl, [sb, 0x28]");
                                                                 |     }
                                                                 |     if (r2 == sl) {
    0x0000808c ldrne r3, [fp, 0x50]                              |         r3 = *(arg_50h);
                                                                 |     }
                                                                 |     if (r2 != sl) {
    0x00008090 orr r3, r3, 1                                     |         r3 |= 1;
                                                                 |     }
                                                                 |     if (r2 != sl) {
    0x00008094 str.w r3, [fp, 0x50]                              |         __asm ("str.w r3, [arg_50h]");
                                                                 |     }
    0x00008098 ldrh.w r3, [sb, 0x2c]                             |     r3 = *((sb + 0x2c));
    0x0000809c cmp r3, 0                                         |     
    0x0000809e beq.w 0x81c8                                      |     
                                                                 |     while (r2 == 0) {
    0x000080a2 ldr.w r3, [fp, 0x40]                              |         r3 = *(arg_40h);
    0x000080a6 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x000080a8 beq.w 0x81ec                                      |             goto label_81;
                                                                 |         }
                                                                 | label_12:
    0x000080ac add r1, sp, 0x30                                  |         r1 += var_30h;
    0x000080ae mov r0, fp                                        |         r0 = fp;
    0x000080b0 bl 0xbee8                                         |         fcn_0000bee8 (r0, r1);
    0x000080b4 str r0, [sp, 4]                                   |         var_4h = r0;
    0x000080b6 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x000080b8 bne.w 0x8442                                      |             goto label_33;
                                                                 |         }
    0x000080bc ldr.w r3, [pc, 0x548]                             |         
    0x000080c0 ldr.w r1, [fp, 0x2c]                              |         r1 = *(arg_2ch);
    0x000080c4 ldr r2, [sp, 0x30]                                |         r2 = var_30h;
    0x000080c6 add r3, pc                                        |         
    0x000080c8 ldr r3, [r3, 0x18]                                |         r3 = *(0x106ea);
    0x000080ca lsls r1, r1, 0x1d                                 |         r1 <<= 0x1d;
    0x000080cc mul r3, r2, r3                                    |         r3 = r2 * r3;
    0x000080d0 ldr.w r2, [sb, 0x1c]                              |         r2 = *((sb + 0x1c));
                                                                 |         if (r1 >= r1) {
    0x000080d4 bpl.w 0x8232                                      |             goto label_82;
                                                                 |         }
    0x000080d8 add r2, r3                                        |         r2 += r3;
    0x000080da cmp sl, r2                                        |         
    0x000080dc it lo                                             |         
                                                                 |         if (sl >= r2) {
    0x000080de movlo sl, r2                                      |             sl = r2;
                                                                 |         }
                                                                 | label_14:
    0x000080e0 cmp.w r8, 0                                       |         
                                                                 |         if (r8 == 0) {
    0x000080e4 beq.w 0x8206                                      |             goto label_36;
                                                                 |         }
                                                                 | label_13:
    0x000080e8 ldr.w r3, [fp, 0xa8]                              |         r3 = *(arg_a8h);
    0x000080ec cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x000080ee beq.w 0x85ae                                      |             goto label_83;
                                                                 |         }
    0x000080f2 cmp.w r8, 0xff00                                  |         
                                                                 |         if (r8 > 0xff00) {
    0x000080f6 blo 0x8116                                        |             
    0x000080f8 ldr.w r2, [fp, 0x128]                             |             r2 = *(arg_128h);
    0x000080fc ldr r1, [r2, 0x14]                                |             r1 = *((r2 + 0x14));
    0x000080fe cmp r1, r8                                        |             
                                                                 |             if (r1 == r8) {
    0x00008100 beq 0x8116                                        |                 goto label_84;
                                                                 |             }
    0x00008102 str.w r8, [r2, 0x14]                              |             __asm ("str.w r8, [r2, 0x14]");
    0x00008106 ldr.w r3, [fp, 0x12c]                             |             r3 = *(arg_12ch);
    0x0000810a orr r3, r3, 1                                     |             r3 |= 1;
    0x0000810e str.w r3, [fp, 0x12c]                             |             __asm ("str.w r3, [arg_12ch]");
    0x00008112 ldr.w r3, [fp, 0xa8]                              |             r3 = *(arg_a8h);
                                                                 |         }
                                                                 | label_84:
    0x00008116 cmp r3, 1                                         |         
    0x00008118 add.w r2, fp, 0xa8                                |         r2 += arg_a8h;
    0x0000811c it hi                                             |         
                                                                 |         if (r3 <= 1) {
    0x0000811e addhi r0, fp, 0x150                               |             r0 += arg_150h;
                                                                 |         }
    0x00008122 str r2, [sp, 8]                                   |         var_8h = r2;
                                                                 |         if (r3 < 1) {
    0x00008124 bls.w 0x84b2                                      |             goto label_85;
                                                                 |         }
                                                                 | label_29:
    0x00008128 ldr r3, [r0, 0x70]                                |         r3 = *((r0 + 0x70));
    0x0000812a cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0000812c beq.w 0x8516                                      |             goto label_86;
                                                                 |         }
                                                                 | label_28:
    0x00008130 movw r3, 0xfffa                                   |         
    0x00008134 movs r0, 1                                        |         r0 = 1;
    0x00008136 movt r3, 0x6fff                                   |         r3 = 0x6ffffffa;
    0x0000813a str.w sb, [sp, 0x1c]                              |         __asm ("str.w sb, [var_1ch]");
    0x0000813e str r3, [sp, 0x10]                                |         var_10h = r3;
    0x00008140 movw r3, 0xfffc                                   |         
    0x00008144 movt r3, 0x6fff                                   |         r3 = 0x6ffffffc;
    0x00008148 str.w r8, [sp, 0x28]                              |         __asm ("str.w r8, [var_28h]");
    0x0000814c str r3, [sp, 0x14]                                |         var_14h_2 = r3;
    0x0000814e ldr.w r3, [pc, 0x4bc]                             |         
    0x00008152 add r3, pc                                        |         r3 = 0x10764;
    0x00008154 str r3, [sp, 0x20]                                |         var_20h = r3;
    0x00008156 ldr.w r3, [pc, 0x4b8]                             |         
    0x0000815a add r3, pc                                        |         r3 = 0x10770;
    0x0000815c str r3, [sp, 0x18]                                |         var_18h = r3;
    0x0000815e movs r3, 0                                        |         r3 = 0;
    0x00008160 str r3, [sp, 0xc]                                 |         var_ch = r3;
                                                                 | label_16:
    0x00008162 ldr r2, [sp, 8]                                   |         r2 = var_8h;
    0x00008164 mov sb, r0                                        |         sb = r0;
    0x00008166 ldr r3, [r2]                                      |         r3 = *(r2);
    0x00008168 cmp r0, r3                                        |         
                                                                 |         if (r0 >= r3) {
    0x0000816a bhs.w 0x82ea                                      |             goto label_87;
                                                                 |         }
    0x0000816e movs r4, 0x98                                     |         r4 = 0x98;
    0x00008170 mla r4, r4, r0, r2                                |         __asm ("mla r4, r4, r0, r2");
    0x00008174 adds r4, 0x10                                     |         r4 += 0x10;
                                                                 | label_15:
    0x00008176 ldr r7, [r4, 0x70]                                |         r7 = *((r4 + 0x70));
    0x00008178 cmp r7, 0                                         |         
                                                                 |         if (r7 == 0) {
    0x0000817a beq.w 0x859c                                      |             goto label_88;
                                                                 |         }
    0x0000817e ldr r6, [r7, 0x20]                                |         r6 = *((r7 + 0x20));
    0x00008180 ldr r2, [r7, 0x24]                                |         r2 = *((r7 + 0x24));
    0x00008182 cmp r6, 1                                         |         
    0x00008184 it lo                                             |         
                                                                 |         if (r6 >= 1) {
    0x00008186 movlo r6, 1                                       |             r6 = 1;
                                                                 |         }
    0x00008188 subs r3, r6, 1                                    |         r3 = r6 - 1;
    0x0000818a tst r3, r6                                        |         
                                                                 |         if ((r3 & r6) != 0) {
    0x0000818c bne.w 0x844a                                      |             goto label_89;
                                                                 |         }
    0x0000818e strh r5, [r3, 0xa]                                |         *((r3 + 0xa)) = r5;
    0x00008190 ldr r3, [r7, 4]                                   |         r3 = *((r7 + 4));
    0x00008192 cmp r3, 0x12                                      |         
                                                                 |         if (r3 > 0x12) {
    0x00008194 bhi.w 0x8302                                      |             goto label_90;
                                                                 |         }
    0x00008198 cmp r3, 1                                         |         
                                                                 |         if (r3 < 1) {
    0x0000819a bls 0x8252                                        |             goto label_17;
                                                                 |         }
    0x0000819c subs r3, 2                                        |         r3 -= 2;
    0x0000819e cmp r3, 0x10                                      |         
                                                                 |         if (r3 > 0x10) {
    0x000081a0 bhi 0x8242                                        |             goto label_91;
                                                                 |         }
                                                                 |         /* switch table (18 cases) at 0x81a6 */
    0x000081a2 tbh [pc, r3, lsl 1]                               |         __asm ("tbh [pc, r3, lsl 1]");
    0x000081c8 ldr.w r2, [sb, 0x1c]                              |         r2 = *((sb + 0x1c));
    0x000081cc cmp r2, 0                                         |         
    0x000081ce beq.w 0x80a2                                      |         
                                                                 |     }
    0x000081d2 str.w r3, [sb, 0x1c]                              |     __asm ("str.w r3, [sb, 0x1c]");
    0x000081d6 ldr.w r3, [fp, 0x50]                              |     r3 = *(arg_50h);
    0x000081da orr r3, r3, 1                                     |     r3 |= 1;
    0x000081de str.w r3, [fp, 0x50]                              |     __asm ("str.w r3, [arg_50h]");
    0x000081e2 ldr.w r3, [fp, 0x40]                              |     r3 = *(arg_40h);
    0x000081e6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000081e8 bne.w 0x80ac                                      |         goto label_12;
                                                                 |     }
                                                                 | label_81:
    0x000081ec mov r0, fp                                        |     r0 = fp;
    0x000081ee bl 0x5038                                         |     fcn_00005038 (r0);
    0x000081f2 ldr.w r3, [fp, 0x40]                              |     r3 = *(arg_40h);
    0x000081f6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000081f8 bne.w 0x80ac                                      |         goto label_12;
                                                                 |     }
    0x000081fc str r3, [sp, 4]                                   |     var_4h = r3;
    0x000081fe cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x00008202 bne.w 0x80e8                                      |         goto label_13;
                                                                 |     }
                                                                 | label_36:
    0x00008206 ldr.w r3, [fp, 0x50]                              |     r3 = *(arg_50h);
    0x0000820a mov r0, sl                                        |     r0 = sl;
    0x0000820c ldr r2, [sp, 4]                                   |     r2 = var_4h;
    0x0000820e movs r1, 0                                        |     r1 = 0;
    0x00008210 orrs r3, r2                                       |     r3 |= r2;
    0x00008212 str.w r3, [fp, 0x50]                              |     __asm ("str.w r3, [arg_50h]");
                                                                 | label_24:
    0x00008216 ldr r2, [pc, 0x3fc]                               |     
    0x00008218 ldr r3, [pc, 0x3e0]                               |     r3 = *(0x85fc);
    0x0000821a add r2, pc                                        |     r2 = 0x10834;
    0x0000821c ldr r3, [r2, r3]                                  |     r3 = *(0x10834);
    0x0000821e ldr r2, [r3]                                      |     r2 = *(0x10834);
    0x00008220 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00008222 eors r2, r3                                       |     r2 ^= r3;
    0x00008224 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00008228 bne.w 0x8560                                      |         goto label_92;
                                                                 |     }
    0x0000822c add sp, 0x3c                                      |     
    0x0000822e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_82:
    0x00008232 cmp r2, sl                                        |     
    0x00008234 ittt ne                                           |     
                                                                 |     if (r2 == sl) {
    0x00008236 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r2 == sl) {
    0x00008238 strne sl, [sb, 0x1c]                              |         *((sb + 0x1c)) = sl;
                                                                 |     }
                                                                 |     if (r2 != sl) {
    0x0000823c str r2, [sp, 4]                                   |         var_4h = r2;
                                                                 |     }
    0x0000823e add sl, r3                                        |     sl += r3;
    0x00008240 b 0x80e0                                          |     goto label_14;
                                                                 | label_91:
    0x00008242 mov r3, r2                                        |     r3 = r2;
                                                                 | label_18:
    0x00008244 cmp r3, r2                                        |     
    0x00008246 itttt ne                                          |     
                                                                 |     if (r3 == r2) {
    0x00008248 strne r3, [r7, 0x24]                              |         *((r7 + 0x24)) = r3;
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x0000824a ldrne r3, [r4, 0x74]                              |         r3 = *((r4 + 0x74));
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x0000824c orrne r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x00008250 str r3, [r4, 0x74]                                |         *((r4 + 0x74)) = r3;
                                                                 |     }
                                                                 | label_17:
    0x00008252 ldr r3, [r7, 8]                                   |     r3 = *((r7 + 8));
    0x00008254 lsls r3, r3, 0x14                                 |     r3 <<= 0x14;
                                                                 |     if (r3 < r3) {
    0x00008256 bpl 0x8272                                        |         
    0x00008258 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x0000825a ldrb r6, [r3, 0x19]                               |         r6 = *((r3 + 0x19));
    0x0000825c ldr r3, [r7, 0x20]                                |         r3 = *((r7 + 0x20));
    0x0000825e cmp r6, 1                                         |         
    0x00008260 it lo                                             |         
                                                                 |         if (r6 >= 1) {
    0x00008262 movlo r6, 1                                       |             r6 = 1;
                                                                 |         }
    0x00008264 cmp r3, r6                                        |         
    0x00008266 itttt ne                                          |         
                                                                 |         if (r3 == r6) {
    0x00008268 strne r6, [r7, 0x20]                              |             *((r7 + 0x20)) = r6;
                                                                 |         }
                                                                 |         if (r3 == r6) {
    0x0000826a ldrne r3, [r4, 0x74]                              |             r3 = *((r4 + 0x74));
                                                                 |         }
                                                                 |         if (r3 == r6) {
    0x0000826c orrne r3, r3, 1                                   |             r3 |= 1;
                                                                 |         }
                                                                 |         if (r3 == r6) {
    0x00008270 str r3, [r4, 0x74]                                |             *((r4 + 0x74)) = r3;
                                                                 |             goto label_93;
                                                                 |         }
                                                                 |     }
                                                                 | label_93:
    0x00008272 ldr r3, [r4, 0x60]                                |     r3 = *((r4 + 0x60));
    0x00008274 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00008276 beq.w 0x8436                                      |         goto label_94;
                                                                 |     }
                                                                 | label_27:
    0x0000827a ldr r3, [r4, 0x30]                                |     r3 = *((r4 + 0x30));
    0x0000827c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0000827e bne 0x8318                                        |         goto label_95;
                                                                 |     }
    0x00008280 ldr.w r1, [fp, 0x2c]                              |     r1 = *(arg_2ch);
    0x00008284 ldr r5, [r4, 0x44]                                |     r5 = *((r4 + 0x44));
    0x00008286 and r1, r1, 4                                     |     r1 &= 4;
    0x0000828a cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0000828c beq 0x837c                                        |         goto label_96;
                                                                 |     }
                                                                 | label_19:
    0x0000828e ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x00008290 ldr r2, [r7, 0x14]                                |     r2 = *((r7 + 0x14));
    0x00008292 cmp r3, 8                                         |     
                                                                 |     if (r3 != 8) {
    0x00008294 beq 0x82a0                                        |         
    0x00008296 ldr r3, [r7, 0x10]                                |         r3 = *((r7 + 0x10));
    0x00008298 add r3, r2                                        |         r3 += r2;
    0x0000829a cmp sl, r3                                        |         
    0x0000829c it lo                                             |         
                                                                 |         if (sl < r3) {
    0x0000829e movlo sl, r3                                      |             sl = r3;
                                                                 |             goto label_97;
                                                                 |         }
                                                                 |     }
                                                                 |     if (r2 != 0) {
                                                                 | label_97:
    0x000082a0 cbz r2, 0x82b8                                    |         
    0x000082a2 ldr r3, [r7, 0x20]                                |         r3 = *((r7 + 0x20));
    0x000082a4 subs r2, r3, 1                                    |         r2 = r3 - 1;
    0x000082a6 tst r2, r3                                        |         
                                                                 |         if ((r2 & r3) != 0) {
    0x000082a8 bne.w 0x844a                                      |             goto label_89;
                                                                 |         }
    0x000082ac cmp r3, 1                                         |         
    0x000082ae it lo                                             |         
                                                                 |         if (r3 >= 1) {
    0x000082b0 movlo r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x000082b2 cmp r6, r3                                        |         
                                                                 |         if (r6 > r3) {
    0x000082b4 bhi.w 0x844a                                      |             goto label_89;
                                                                 |         }
                                                                 |     }
                                                                 | label_20:
    0x000082b8 ldr r1, [r7, 0x24]                                |     r1 = *((r7 + 0x24));
    0x000082ba cmp r1, 1                                         |     
                                                                 |     if (r1 >= 1) {
    0x000082bc bls 0x82da                                        |         
    0x000082be ldr.w r3, [fp, 0x2c]                              |         r3 = *(arg_2ch);
    0x000082c2 lsls r5, r3, 0x1c                                 |         r5 = r3 << 0x1c;
                                                                 |         if (r5 < r3) {
    0x000082c4 bmi 0x82da                                        |             goto label_98;
                                                                 |         }
    0x000082c6 ldr r3, [r7, 8]                                   |         r3 = *((r7 + 8));
    0x000082c8 lsls r0, r3, 0x14                                 |         r0 = r3 << 0x14;
                                                                 |         if (r0 < r3) {
    0x000082ca bmi.w 0x8540                                      |             goto label_99;
                                                                 |         }
    0x000082ce ldr r0, [r7, 0x14]                                |         r0 = *((r7 + 0x14));
                                                                 | label_34:
    0x000082d0 bl 0xd50c                                         |         fcn_0000d50c (r0, r1, r2);
    0x000082d4 cmp r1, 0                                         |         
                                                                 |         if (r1 != 0) {
    0x000082d6 bne.w 0x8524                                      |             goto label_100;
                                                                 |         }
                                                                 |     }
                                                                 | label_98:
    0x000082da ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x000082dc add.w sb, sb, 1                                   |     sb++;
    0x000082e0 adds r4, 0x98                                     |     r4 += 0x98;
    0x000082e2 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000082e4 cmp r3, sb                                        |     
                                                                 |     if (r3 > sb) {
    0x000082e6 bhi.w 0x8176                                      |         goto label_15;
                                                                 |     }
                                                                 | label_87:
    0x000082ea ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x000082ec ldr r2, [r1, 8]                                   |     r2 = *((r1 + 8));
    0x000082ee cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000082f0 beq.w 0x8564                                      |         goto label_101;
                                                                 |     }
    0x000082f4 ldr r1, [r1, 4]                                   |     r1 = *((r1 + 4));
    0x000082f6 movs r0, 0                                        |     r0 = 0;
    0x000082f8 cmp r1, r3                                        |     
                                                                 |     if (r1 != r3) {
    0x000082fa bne.w 0x85e2                                      |         goto label_102;
                                                                 |     }
    0x000082fe str r2, [sp, 8]                                   |     var_8h = r2;
    0x00008300 b 0x8162                                          |     goto label_16;
                                                                 | label_90:
    0x00008302 ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x00008304 cmp r3, r1                                        |     
                                                                 |     if (r3 == r1) {
    0x00008306 beq.w 0x8510                                      |         goto label_103;
                                                                 |     }
    0x0000830a ldr r1, [sp, 0x14]                                |     r1 = var_14h_2;
    0x0000830c cmp r3, r1                                        |     
                                                                 |     if (r3 != r1) {
    0x0000830e bne 0x8252                                        |         goto label_17;
                                                                 |     }
    0x00008310 ldr r3, [pc, 0x304]                               |     
    0x00008312 add r3, pc                                        |     
    0x00008314 ldr r3, [r3, 0x50]                                |     r3 = *(0x1097e);
    0x00008316 b 0x8244                                          |     goto label_18;
                                                                 | label_95:
    0x00008318 str.w sl, [sp, 0x2c]                              |     __asm ("str.w sl, [var_2ch_2]");
    0x0000831c mov r0, r4                                        |     r0 = r4;
    0x0000831e mov sl, sb                                        |     sl = sb;
    0x00008320 movs r5, 0                                        |     r5 = 0;
    0x00008322 mov ip, r6                                        |     
    0x00008324 mov lr, r4                                        |     lr = r4;
    0x00008326 mov sb, r7                                        |     sb = r7;
    0x00008328 add.w r3, r4, 0x38                                |     r3 = r4 + 0x38;
    0x0000832c str r3, [sp, 0x24]                                |     var_24h_2 = r3;
                                                                 |     do {
    0x0000832e cmp lr, r0                                        |         
    0x00008330 mov r2, r0                                        |         r2 = r0;
                                                                 |         if (lr == r0) {
    0x00008332 beq 0x83f0                                        |             goto label_104;
                                                                 |         }
                                                                 | label_22:
    0x00008334 ldr r7, [r2, 8]                                   |         r7 = *((r2 + 8));
    0x00008336 cmp r7, 1                                         |         
                                                                 |         if (r7 != 1) {
    0x00008338 bne 0x840a                                        |             goto label_79;
                                                                 |         }
                                                                 | label_23:
    0x0000833a ldr r3, [r2, 0x18]                                |         r3 = *((r2 + 0x18));
    0x0000833c subs r1, r3, 1                                    |         r1 = r3 - 1;
    0x0000833e tst r1, r3                                        |         
                                                                 |         if ((r1 & r3) != 0) {
    0x00008340 bne.w 0x844a                                      |             goto label_89;
                                                                 |         }
    0x00008344 ldr.w r1, [fp, 0x2c]                              |         r1 = *(arg_2ch);
    0x00008348 cmp ip, r3                                        |         
    0x0000834a it lo                                             |         
                                                                 |         if (ip >= r3) {
    0x0000834c movlo ip, r3                                      |             
                                                                 |         }
    0x0000834e ldrd r6, r8, [r2, 0x10]                           |         __asm ("ldrd r6, r8, [r2, 0x10]");
    0x00008352 ldr r4, [r2, 0xc]                                 |         r4 = *((r2 + 0xc));
    0x00008354 ands r1, r1, 4                                    |         r1 &= 4;
                                                                 |         if (r1 == r1) {
    0x00008358 beq 0x83d6                                        |             goto label_105;
                                                                 |         }
    0x0000835a ldr.w r3, [sb, 0x14]                              |         r3 = *((sb + 0x14));
    0x0000835e add r6, r4                                        |         r6 += r4;
    0x00008360 cmp r6, r3                                        |         
                                                                 |         if (r6 > r3) {
    0x00008362 bhi.w 0x851c                                      |             goto label_106;
                                                                 |         }
                                                                 | label_21:
    0x00008366 ldr r0, [r0, 0x28]                                |         r0 = *((r0 + 0x28));
    0x00008368 cmp r0, 0                                         |         
    0x0000836a bne 0x832e                                        |         
                                                                 |     } while (r0 != 0);
    0x0000836c mov r7, sb                                        |     r7 = sb;
    0x0000836e mov r6, ip                                        |     r6 = ip;
    0x00008370 mov sb, sl                                        |     sb = sl;
    0x00008372 mov r4, lr                                        |     r4 = lr;
    0x00008374 ldr.w sl, [sp, 0x2c]                              |     sl = var_2ch_2;
    0x00008378 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0000837a bne 0x828e                                        |         goto label_19;
                                                                 |     }
                                                                 | label_96:
    0x0000837c ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x0000837e cmp r3, r6                                        |     
    0x00008380 itttt ne                                          |     
                                                                 |     if (r3 == r6) {
    0x00008382 strne r6, [r7, 0x20]                              |         *((r7 + 0x20)) = r6;
                                                                 |     }
                                                                 |     if (r3 == r6) {
    0x00008384 ldrne r3, [r4, 0x74]                              |         r3 = *((r4 + 0x74));
                                                                 |     }
                                                                 |     if (r3 == r6) {
    0x00008386 orrne r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
                                                                 |     if (r3 != r6) {
    0x0000838a str r3, [r4, 0x74]                                |         *((r4 + 0x74)) = r3;
                                                                 |     }
    0x0000838c add.w r3, sl, -1                                  |     r3 = sl + -1;
    0x00008390 add r3, r6                                        |     r3 += r6;
    0x00008392 rsbs r6, r6, 0                                    |     r6 -= ;
    0x00008394 and.w sl, r6, r3                                  |     sl = r6 & r3;
    0x00008398 ldr r3, [r7, 0x10]                                |     r3 = *((r7 + 0x10));
    0x0000839a cmp r3, sl                                        |     
                                                                 |     if (r3 != sl) {
    0x0000839c beq 0x83b0                                        |         
    0x0000839e str.w sl, [r7, 0x10]                              |         __asm ("str.w sl, [r7, 0x10]");
    0x000083a2 ldr r1, [r4, 0x30]                                |         r1 = *((r4 + 0x30));
    0x000083a4 cmp r1, 0                                         |         
                                                                 |         if (r1 == 0) {
    0x000083a6 beq.w 0x8552                                      |             goto label_107;
                                                                 |         }
                                                                 | label_35:
    0x000083aa movs r3, 1                                        |         r3 = 1;
    0x000083ac mov r1, r3                                        |         r1 = r3;
    0x000083ae str r3, [sp, 0xc]                                 |         var_ch = r3;
                                                                 |     }
    0x000083b0 ldr r3, [r7, 0x14]                                |     r3 = *((r7 + 0x14));
    0x000083b2 cmp r3, r5                                        |     
    0x000083b4 itttt ne                                          |     
                                                                 |     if (r3 == r5) {
    0x000083b6 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 == r5) {
    0x000083b8 strne r5, [r7, 0x14]                              |         *((r7 + 0x14)) = r5;
                                                                 |     }
                                                                 |     if (r3 == r5) {
    0x000083ba movne r1, r3                                      |         r1 = r3;
                                                                 |     }
                                                                 |     if (r3 == r5) {
    0x000083bc strne r3, [sp, 0xc]                               |         var_ch = r3;
                                                                 |     }
    0x000083be ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x000083c0 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x000083c2 cmp r3, 8                                         |     
    0x000083c4 ldr r3, [r4, 0x74]                                |     r3 = *((r4 + 0x74));
    0x000083c6 it ne                                             |     
                                                                 |     if (r3 == 8) {
    0x000083c8 addne sl, r5                                      |         sl += r5;
                                                                 |     }
    0x000083ca orrs r3, r1                                       |     r3 |= r1;
    0x000083cc str r3, [r4, 0x74]                                |     *((r4 + 0x74)) = r3;
    0x000083ce ldr r3, [r4, 0x78]                                |     r3 = *((r4 + 0x78));
    0x000083d0 orrs r3, r2                                       |     r3 |= r2;
    0x000083d2 str r3, [r4, 0x78]                                |     *((r4 + 0x78)) = r3;
    0x000083d4 b 0x82b8                                          |     goto label_20;
                                                                 | label_105:
    0x000083d6 adds r5, r3, r5                                   |     r5 = r3 + r5;
    0x000083d8 rsbs r3, r3, 0                                    |     r3 -= ;
    0x000083da subs r5, 1                                        |     r5--;
    0x000083dc ands r5, r3                                       |     r5 &= r3;
    0x000083de cmp r8, r1                                        |     
    0x000083e0 it eq                                             |     
                                                                 |     if (r8 == r1) {
    0x000083e2 cmpeq r6, r5                                      |         __asm ("cmpeq r6, r5");
                                                                 |     }
    0x000083e4 itt ne                                            |     
                                                                 |     if (r8 == r1) {
    0x000083e6 strne r7, [sp, 0xc]                               |         var_ch = r7;
                                                                 |     }
                                                                 |     if (r8 != r1) {
    0x000083e8 strdne r5, r1, [r2, 0x10]                         |         __asm ("strdne r5, r1, [r2, 0x10]");
                                                                 |     }
    0x000083ec adds r5, r4, r5                                   |     r5 = r4 + r5;
    0x000083ee b 0x8366                                          |     goto label_21;
                                                                 | label_104:
    0x000083f0 ldr.w r3, [lr]                                    |     r3 = *(lr);
    0x000083f4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000083f6 bne 0x8334                                        |         goto label_22;
                                                                 |     }
    0x000083f8 ldr.w r3, [lr, 0x38]                              |     r3 = *((lr + 0x38));
    0x000083fc ldr r2, [sp, 0x24]                                |     r2 = var_24h_2;
    0x000083fe cmp r3, 0                                         |     
    0x00008400 it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x00008402 moveq r2, lr                                      |         r2 = lr;
                                                                 |     }
    0x00008404 ldr r7, [r2, 8]                                   |     r7 = *((r2 + 8));
    0x00008406 cmp r7, 1                                         |     
                                                                 |     if (r7 == 1) {
    0x00008408 beq 0x833a                                        |         goto label_23;
                                                                 |     }
                                                                 | label_79:
    0x0000840a movs r0, 2                                        |     r0 = 2;
    0x0000840c bl 0x259c                                         |     fcn_0000259c (r0);
    0x00008410 mov.w r0, -1                                      |     r0 = -1;
    0x00008414 mov r1, r0                                        |     r1 = r0;
    0x00008416 b 0x8216                                          |     goto label_24;
                                                                 | label_75:
    0x00008418 ldrb r3, [r0, 1]                                  |     r3 = *((r0 + 1));
    0x0000841a adds r2, r0, 1                                    |     r2 = r0 + 1;
    0x0000841c cmp r3, 0x45                                      |     
                                                                 |     if (r3 != 0x45) {
    0x0000841e bne.w 0x7fe2                                      |         goto label_25;
                                                                 |     }
    0x00008422 ldrb r3, [r2, 1]!                                 |     r3 = *((r2 += 1));
    0x00008426 cmp r3, 0x4c                                      |     
                                                                 |     if (r3 != 0x4c) {
    0x00008428 bne.w 0x7fe2                                      |         goto label_25;
                                                                 |     }
    0x0000842c ldrb r3, [r2, 1]                                  |     r3 = *((r2 + 1));
    0x0000842e cmp r3, 0x46                                      |     
                                                                 |     if (r3 != 0x46) {
    0x00008430 bne.w 0x7fe2                                      |         goto label_25;
                                                                 |     }
    0x00008434 b 0x7ffa                                          |     goto label_26;
                                                                 | label_94:
    0x00008436 mov r0, r4                                        |     r0 = r4;
    0x00008438 bl 0x7330                                         |     r0 = fcn_00007330 (r0, r1);
    0x0000843c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0000843e beq.w 0x827a                                      |         goto label_27;
                                                                 |     }
                                                                 | label_33:
    0x00008442 mov.w r0, -1                                      |     r0 = -1;
    0x00008446 mov r1, r0                                        |     r1 = r0;
    0x00008448 b 0x8216                                          |     goto label_24;
                                                                 | label_89:
    0x0000844a movs r0, 0x24                                     |     r0 = 0x24;
    0x0000844c bl 0x259c                                         |     fcn_0000259c (r0);
    0x00008450 mov.w r0, -1                                      |     r0 = -1;
    0x00008454 mov r1, r0                                        |     r1 = r0;
    0x00008456 b 0x8216                                          |     goto label_24;
    0x00008458 ldr r3, [pc, 0x1c0]                               |     
    0x0000845a add r3, pc                                        |     
    0x0000845c ldr r3, [r3, 0x2c]                                |     r3 = *(0x10aa6);
    0x0000845e b 0x8244                                          |     goto label_18;
    0x00008460 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00008462 ldrh r3, [r3, 0x10]                               |     r3 = *((r3 + 0x10));
    0x00008464 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x00008466 bne 0x8532                                        |         goto label_108;
                                                                 |     }
    0x00008468 ldr r3, [pc, 0x1b4]                               |     
    0x0000846a add r3, pc                                        |     
    0x0000846c ldr r3, [r3, 0x30]                                |     r3 = *(0x10abe);
    0x0000846e b 0x8244                                          |     goto label_18;
    0x00008470 ldr r3, [pc, 0x1b0]                               |     
    0x00008472 add r3, pc                                        |     
    0x00008474 ldr r3, [r3, 0x20]                                |     r3 = *(0x10aba);
    0x00008476 b 0x8244                                          |     goto label_18;
    0x00008478 ldr r3, [pc, 0x1ac]                               |     
    0x0000847a add r3, pc                                        |     
    0x0000847c ldr r3, [r3, 8]                                   |     r3 = *(0x10aae);
    0x0000847e b 0x8244                                          |     goto label_18;
    0x00008480 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00008482 movw r1, 0x9026                                   |     r1 = 0x9026;
    0x00008486 ldrh r3, [r3, 0x12]                               |     r3 = *((r3 + 0x12));
    0x00008488 cmp r3, r1                                        |     
    0x0000848a it eq                                             |     
                                                                 |     if (r3 == r1) {
    0x0000848c moveq r3, 8                                       |         r3 = 8;
                                                                 |         goto label_109;
                                                                 |     }
                                                                 |     if (r3 == r1) {
                                                                 | label_109:
    0x0000848e beq.w 0x8244                                      |         goto label_18;
                                                                 |     }
    0x00008492 cmp r3, 0x16                                      |     
    0x00008494 it ne                                             |     
                                                                 |     if (r3 != 0x16) {
    0x00008496 movne r3, 4                                       |         r3 = 4;
                                                                 |         goto label_110;
                                                                 |     }
                                                                 |     if (r3 != 0x16) {
                                                                 | label_110:
    0x00008498 bne.w 0x8244                                      |         goto label_18;
                                                                 |     }
    0x0000849c ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0000849e ldrb r3, [r3, 4]                                  |     r3 = *((r3 + 4));
    0x000084a0 cmp r3, 2                                         |     
    0x000084a2 ite ne                                            |     
                                                                 |     if (r3 == 2) {
    0x000084a4 movne r3, 4                                       |         r3 = 4;
                                                                 |     }
                                                                 |     if (r3 != 2) {
    0x000084a6 moveq r3, 8                                       |         r3 = 8;
                                                                 |     }
    0x000084a8 b 0x8244                                          |     goto label_18;
    0x000084aa ldr r3, [pc, 0x180]                               |     
    0x000084ac add r3, pc                                        |     
    0x000084ae ldr r3, [r3, 0x1c]                                |     r3 = *(0x10afa);
    0x000084b0 b 0x8244                                          |     goto label_18;
                                                                 | label_85:
    0x000084b2 ldr.w r0, [fp, 0xb0]                              |     r0 = *(arg_b0h);
    0x000084b6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000084b8 beq.w 0x8130                                      |         goto label_28;
                                                                 |     }
    0x000084bc adds r0, 0x10                                     |     r0 += 0x10;
    0x000084be b 0x8128                                          |     goto label_29;
                                                                 | label_76:
    0x000084c0 movs r3, 1                                        |     r3 = 1;
    0x000084c2 strb.w r3, [sb, 5]                                |     *((sb + 5)) = r3;
    0x000084c6 ldr.w r3, [fp, 0x50]                              |     r3 = *(arg_50h);
    0x000084ca orr r3, r3, 1                                     |     r3 |= 1;
    0x000084ce str.w r3, [fp, 0x50]                              |     __asm ("str.w r3, [arg_50h]");
    0x000084d2 b 0x802c                                          |     goto label_30;
                                                                 | label_78:
    0x000084d4 movs r3, 1                                        |     r3 = 1;
    0x000084d6 str.w r3, [sb, 0x14]                              |     __asm ("str.w r3, [sb, 0x14]");
    0x000084da ldr.w r3, [fp, 0x50]                              |     r3 = *(arg_50h);
    0x000084dc adds r0, 0x50                                     |     r0 += 0x50;
    0x000084de orr r3, r3, 1                                     |     r3 |= 1;
    0x000084e2 str.w r3, [fp, 0x50]                              |     __asm ("str.w r3, [arg_50h]");
    0x000084e6 b 0x8056                                          |     goto label_31;
                                                                 | label_77:
    0x000084e8 movs r0, 0x22                                     |     r0 = 0x22;
    0x000084ea bl 0x259c                                         |     fcn_0000259c (r0);
    0x000084ec invalid                                           |     
    0x000084f0 adds r0, 0xff                                     |     r0 += 0xff;
    0x000084f2 mov r1, r0                                        |     r1 = r0;
    0x000084f4 b 0x8216                                          |     goto label_24;
                                                                 | label_80:
    0x000084f6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000084f8 beq.w 0x8076                                      |         goto label_32;
                                                                 |     }
    0x000084fc movs r3, 0                                        |     r3 = 0;
    0x000084fe strh.w r3, [sb, 0x30]                             |     *((sb + 0x30)) = r3;
    0x00008502 ldr.w r3, [fp, 0x50]                              |     r3 = *(arg_50h);
    0x00008506 orr r3, r3, 1                                     |     r3 |= 1;
    0x0000850a str.w r3, [fp, 0x50]                              |     __asm ("str.w r3, [arg_50h]");
    0x0000850e b 0x8076                                          |     goto label_32;
                                                                 | label_103:
    0x00008510 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00008512 ldr r3, [r3, 0x54]                                |     r3 = *((r3 + 0x54));
    0x00008514 b 0x8244                                          |     goto label_18;
                                                                 | label_86:
    0x00008516 bl 0x6ab0                                         |     fcn_00006ab0 (r0);
    0x0000851a b 0x8130                                          |     goto label_28;
                                                                 | label_106:
    0x0000851c movs r0, 0x23                                     |     r0 = 0x23;
    0x0000851e bl 0x259c                                         |     fcn_0000259c (r0);
    0x00008522 b 0x8442                                          |     goto label_33;
                                                                 | label_100:
    0x00008524 movs r0, 0x25                                     |     r0 = 0x25;
    0x00008526 bl 0x259c                                         |     fcn_0000259c (r0);
    0x0000852a mov.w r0, -1                                      |     r0 = -1;
    0x0000852e mov r1, r0                                        |     r1 = r0;
    0x00008530 b 0x8216                                          |     goto label_24;
                                                                 | label_108:
    0x00008532 movs r0, 0x28                                     |     r0 = 0x28;
    0x00008534 bl 0x259c                                         |     fcn_0000259c (r0);
    0x00008536 invalid                                           |     
    0x0000853a adds r0, 0xff                                     |     r0 += 0xff;
    0x0000853c mov r1, r0                                        |     r1 = r0;
    0x0000853e b 0x8216                                          |     goto label_24;
                                                                 | label_99:
    0x00008540 mov r0, r4                                        |     r0 = r4;
    0x00008542 blx 0x2200                                        |     r0 = fcn_00002200 ();
    0x00008546 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00008548 beq.w 0x8442                                      |         goto label_33;
                                                                 |     }
    0x0000854c ldr r0, [r0, 4]                                   |     r0 = *((r0 + 4));
    0x0000854e ldr r1, [r7, 0x24]                                |     r1 = *((r7 + 0x24));
    0x00008550 b 0x82d0                                          |     goto label_34;
                                                                 | label_107:
    0x00008552 mov r0, r4                                        |     r0 = r4;
    0x00008554 bl 0x77c8                                         |     r0 = fcn_000077c8 (r0, r1);
    0x00008558 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0000855a bne.w 0x83aa                                      |         goto label_35;
                                                                 |     }
    0x0000855e b 0x8442                                          |     goto label_33;
                                                                 | label_92:
    0x00008560 blx 0x2250                                        |     sysconf ();
                                                                 | label_101:
    0x00008564 ldr r3, [pc, 0xc8]                                |     
    0x00008566 ldr.w sb, [sp, 0x1c]                              |     sb = var_1ch;
    0x0000856a ldr.w r8, [sp, 0x28]                              |     r8 = var_28h;
    0x0000856e add r3, pc                                        |     
    0x00008570 ldrh.w r2, [sb, 0x2e]                             |     r2 = *((sb + 0x2e));
    0x00008574 ldr r3, [r3, 0x24]                                |     r3 = *(0x10bc6);
    0x00008576 ldr.w r1, [sb, 0x20]                              |     r1 = *((sb + 0x20));
    0x0000857a cmp r2, r3                                        |     
    0x0000857c ittt ne                                           |     
                                                                 |     if (r2 == r3) {
    0x0000857e movne r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r2 != r3) {
    0x00008580 strhne r3, [sb, 0x2e]                             |         __asm ("strhne r3, [sb, 0x2e]");
                                                                 |     }
                                                                 |     if (r2 != r3) {
    0x00008584 str r2, [sp, 4]                                   |         var_4h = r2;
                                                                 |     }
    0x00008586 mul r3, r3, r8                                    |     r3 *= r8;
    0x0000858a ldr.w r2, [fp, 0x2c]                              |     r2 = *(arg_2ch);
    0x0000858e lsls r2, r2, 0x1d                                 |     r2 <<= 0x1d;
                                                                 |     if (r2 < r2) {
    0x00008590 bpl 0x85c0                                        |         
    0x00008592 add r1, r3                                        |         r1 += r3;
    0x00008594 cmp sl, r1                                        |         
    0x00008596 it lo                                             |         
                                                                 |         if (sl >= r1) {
    0x00008598 movlo sl, r1                                      |             sl = r1;
                                                                 |         }
    0x0000859a b 0x8206                                          |         goto label_36;
                                                                 | label_88:
    0x0000859c ldr r3, [pc, 0x94]                                |         
    0x0000859e movs r2, 0xd6                                     |         r2 = 0xd6;
    0x000085a0 ldr r1, [pc, 0x94]                                |         
    0x000085a2 ldr r0, [pc, 0x98]                                |         
    0x000085a4 add r3, pc                                        |         r3 = 0x10bdc;
    0x000085a6 add r1, pc                                        |         r1 = 0x10be2;
    0x000085a8 add r0, pc                                        |         r0 = 0x10bea;
    0x000085aa blx 0x2424                                        |         fchmod (r0, r1);
                                                                 | label_83:
    0x000085ae ldr r3, [pc, 0x90]                                |         
    0x000085b0 movs r2, 0xb4                                     |         r2 = 0xb4;
    0x000085b2 ldr r1, [pc, 0x90]                                |         
    0x000085b4 ldr r0, [pc, 0x90]                                |         
    0x000085b6 add r3, pc                                        |         r3 = 0x10bfc;
    0x000085b8 add r1, pc                                        |         r1 = 0x10c02;
    0x000085ba add r0, pc                                        |         r0 = 0x10c06;
    0x000085bc blx 0x2424                                        |         fchmod (r0, r1);
                                                                 |     }
    0x000085c0 add.w r2, sl, 3                                   |     r2 = sl + 3;
    0x000085c4 bic r2, r2, 3                                     |     r2 = BIT_MASK (r2, 3);
    0x000085c8 cmp r1, r2                                        |     
    0x000085ca add.w sl, r3, r2                                  |     sl = r3 + r2;
    0x000085ce itttt ne                                          |     
                                                                 |     if (r1 == r2) {
    0x000085d0 strne r2, [sb, 0x20]                              |         *((sb + 0x20)) = r2;
                                                                 |     }
                                                                 |     if (r1 == r2) {
    0x000085d4 ldrne r1, [fp, 0x2c]                              |         r1 = *(arg_2ch);
                                                                 |     }
                                                                 |     if (r1 != r2) {
    0x000085d8 orr r1, r1, 1                                     |         r1 |= 1;
                                                                 |     }
                                                                 |     if (r1 != r2) {
    0x000085dc str.w r1, [fp, 0x2c]                              |         __asm ("str.w r1, [arg_2ch]");
                                                                 |     }
    0x000085e0 b 0x8206                                          |     goto label_36;
                                                                 | label_102:
    0x000085e2 ldr r3, [pc, 0x68]                                |     
    0x000085e4 movw r2, 0x1a7                                    |     
    0x000085e8 ldr r1, [pc, 0x64]                                |     
    0x000085ea ldr r0, [pc, 0x68]                                |     
    0x000085ec add r3, pc                                        |     r3 = 0x10c3e;
    0x000085ee add r1, pc                                        |     r1 = 0x10c42;
    0x000085f0 add r0, pc                                        |     r0 = 0x10c4a;
    0x000085f2 blx 0x2424                                        |     fchmod (r0, r1);
    0x000085f6 nop                                               |     
    0x000085f8 ldrb r4, [r5, 0x1c]                               |     r4 = *((r5 + 0x1c));
    0x000085fa movs r1, r0                                       |     r1 = r0;
    0x000085fc lsls r4, r7, 3                                    |     r4 = r7 << 3;
    0x000085fe movs r0, r0                                       |     
    0x00008600 ldrb r6, [r0, r6]                                 |     r6 = *((r0 + r6));
    0x00008602 movs r0, r0                                       |     
    0x00008604 ldrsh r2, [r3, r1]                                |     r2 = *((r3 + r1));
    0x00008606 movs r0, r0                                       |     
    0x00008608 ldrsh r2, [r2, r0]                                |     r2 = *((r2 + r0));
    0x0000860a movs r0, r0                                       |     
    0x0000860c ldrb r6, [r0, r6]                                 |     r6 = *((r0 + r6));
    0x0000860e movs r0, r0                                       |     
    0x00008610 str r2, [r4, 0x20]                                |     *((r4 + 0x20)) = r2;
    0x00008612 movs r0, r0                                       |     
    0x00008614 ldrb r2, [r3, 0x13]                               |     r2 = *((r3 + 0x13));
    0x00008616 movs r1, r0                                       |     r1 = r0;
    0x00008618 ldrh r6, [r0, r7]                                 |     r6 = *((r0 + r7));
    0x0000861a movs r0, r0                                       |     
    0x0000861c ldrh r6, [r7, r1]                                 |     r6 = *((r7 + r1));
    0x0000861e movs r0, r0                                       |     
    0x00008620 ldrh r6, [r5, r1]                                 |     r6 = *((r5 + r1));
    0x00008622 movs r0, r0                                       |     
    0x00008624 ldrh r6, [r4, r1]                                 |     r6 = *((r4 + r1));
    0x00008626 movs r0, r0                                       |     
    0x00008628 ldrh r6, [r3, r1]                                 |     r6 = *((r3 + r1));
    0x0000862a movs r0, r0                                       |     
    0x0000862c ldrh r4, [r5, r0]                                 |     r4 = *((r5 + r0));
    0x0000862e movs r0, r0                                       |     
    0x00008630 ldr r2, [r5, r5]                                  |     r2 = *((r5 + r5));
    0x00008632 movs r0, r0                                       |     
    0x00008634 ldrsh r0, [r1, r4]                                |     r0 = *((r1 + r4));
    0x00008636 movs r0, r0                                       |     
    0x00008638 ldrsh r6, [r4, r1]                                |     r6 = *((r4 + r1));
    0x0000863a movs r0, r0                                       |     
    0x0000863c ldrsh r4, [r0, r3]                                |     r4 = *((r0 + r3));
    0x0000863e movs r0, r0                                       |     
    0x00008640 ldrsh r6, [r6, r3]                                |     r6 = *((r6 + r3));
    0x00008642 movs r0, r0                                       |     
    0x00008644 ldrsh r4, [r2, r1]                                |     r4 = *((r2 + r1));
    0x00008646 movs r0, r0                                       |     
    0x00008648 ldrsh r2, [r0, r2]                                |     r2 = *((r0 + r2));
    0x0000864a movs r0, r0                                       |     
    0x0000864c ldrsh r0, [r0, r3]                                |     r0 = *((r0 + r3));
    0x0000864e movs r0, r0                                       |     
    0x00008650 ldrsh r6, [r3, r0]                                |     r6 = *((r3 + r0));
    0x00008652 movs r0, r0                                       |     
    0x00008654 ldrsh r4, [r1, r2]                                |     r4 = *((r1 + r2));
    0x00008656 movs r0, r0                                       |     
    0x00008658 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0000865c mov fp, r2                                        |     
    0x0000865e ldr.w r2, [pc, 0x768]                             |     r2 = *(0x00008dc8);
    0x00008662 sub sp, 0x44                                      |     
    0x00008664 mov sl, r0                                        |     sl = r0;
    0x00008666 mov r4, r1                                        |     r4 = r1;
    0x00008668 ldr.w r3, [pc, 0x760]                             |     r3 = *(0x8dcc);
    0x0000866c add r2, pc                                        |     r2 = 0x8817;
    0x0000866e ldr r3, [r2, r3]                                  |     
    0x00008670 ldr r3, [r3]                                      |     r3 = *(0x8817);
    0x00008672 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00008674 mov.w r3, 0                                       |     r3 = 0;
    0x00008678 bl 0x4d80                                         |     r0 = fcn_00004d80 (r0);
    0x0000867c ldrb r3, [r0]                                     |     r3 = *(r0);
    0x0000867e mov sb, r0                                        |     sb = r0;
    0x00008680 cmp r3, 0x7f                                      |     
                                                                 |     if (r3 == 0x7f) {
    0x00008682 beq.w 0x8bb4                                      |         goto label_111;
                                                                 |     }
                                                                 | label_45:
    0x00008686 ldr.w r3, [pc, 0x748]                             |     
    0x0000868a add r3, pc                                        |     r3 = 0x11460;
    0x0000868c ldr r0, [r3]                                      |     r0 = *(0x11460);
    0x0000868e str.w r0, [sb]                                    |     __asm ("str.w r0, [sb]");
    0x00008692 ldr.w r3, [sl, 0x50]                              |     r3 = *((sl + 0x50));
    0x00008696 orr r3, r3, 1                                     |     r3 |= 1;
    0x0000869a str.w r3, [sl, 0x50]                              |     __asm ("str.w r3, [sl, 0x50]");
                                                                 | label_46:
    0x0000869e ldrb.w r3, [sb, 4]                                |     r3 = *((sb + 4));
    0x000086a2 cmp r3, 2                                         |     
                                                                 |     if (r3 != 2) {
    0x000086a4 beq 0x86b8                                        |         
    0x000086a6 movs r3, 2                                        |         r3 = 2;
    0x000086a8 strb.w r3, [sb, 4]                                |         *((sb + 4)) = r3;
    0x000086aa adds r0, 4                                        |         r0 += 4;
    0x000086ac ldr.w r3, [sl, 0x50]                              |         r3 = *((sl + 0x50));
    0x000086b0 orr r3, r3, 1                                     |         r3 |= 1;
    0x000086b4 str.w r3, [sl, 0x50]                              |         __asm ("str.w r3, [sl, 0x50]");
                                                                 |     }
    0x000086b8 ldrb.w r3, [sb, 5]                                |     r3 = *((sb + 5));
    0x000086bc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000086be beq.w 0x8c6c                                      |         goto label_112;
                                                                 |     }
    0x000086c0 strh r5, [r2, 0x16]                               |     *((r2 + 0x16)) = r5;
    0x000086c2 cmp r3, 2                                         |     
                                                                 |     if (r3 > 2) {
    0x000086c4 bhi.w 0x8c94                                      |         goto label_113;
                                                                 |     }
    0x000086c8 subs r3, 1                                        |     r3--;
    0x000086ca it ne                                             |     
                                                                 |     if (r3 == 1) {
    0x000086cc movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x000086ce str r3, [r4]                                      |     *(r4) = r3;
                                                                 | label_50:
    0x000086d0 ldrb.w r3, [sb, 6]                                |     r3 = *((sb + 6));
    0x000086d4 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x000086d6 beq 0x86ea                                        |         
    0x000086d8 movs r3, 1                                        |         r3 = 1;
    0x000086da strb.w r3, [sb, 6]                                |         *((sb + 6)) = r3;
    0x000086de ldr.w r3, [sl, 0x50]                              |         r3 = *((sl + 0x50));
    0x000086e2 orr r3, r3, 1                                     |         r3 |= 1;
    0x000086e6 str.w r3, [sl, 0x50]                              |         __asm ("str.w r3, [sl, 0x50]");
                                                                 |     }
    0x000086ea ldr.w r3, [sb, 0x14]                              |     r3 = *((sb + 0x14));
    0x000086ee cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000086f0 beq.w 0x8c80                                      |         goto label_114;
                                                                 |     }
    0x000086f4 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x000086f6 bne.w 0x8ba6                                      |         goto label_115;
                                                                 |     }
                                                                 | label_51:
    0x000086fa cmp.w fp, 0xff00                                  |     
    0x000086fe ldrh.w r3, [sb, 0x3c]                             |     r3 = *((sb + 0x3c));
                                                                 |     if (fp >= 0xff00) {
    0x00008702 bhs.w 0x8ca2                                      |         goto label_116;
                                                                 |     }
    0x00008706 cmp fp, r3                                        |     
    0x00008708 itttt ne                                          |     
                                                                 |     if (fp != r3) {
    0x0000870a strhne fp, [sb, 0x3c]                             |         __asm ("strhne fp, [sb, 0x3c]");
                                                                 |     }
                                                                 |     if (fp == r3) {
    0x0000870e ldrne r3, [sl, 0x50]                              |         r3 = *((sl + 0x50));
                                                                 |     }
                                                                 |     if (fp != r3) {
    0x00008712 orr r3, r3, 1                                     |         r3 |= 1;
                                                                 |     }
                                                                 |     if (fp != r3) {
    0x00008716 str.w r3, [sl, 0x50]                              |         __asm ("str.w r3, [sl, 0x50]");
                                                                 |     }
                                                                 | label_52:
    0x0000871a ldr.w r3, [pc, 0x6b8]                             |     
    0x0000871e ldrh.w r2, [sb, 0x34]                             |     r2 = *((sb + 0x34));
    0x00008722 add r3, pc                                        |     r3 = 0x114fc;
    0x00008724 ldr r4, [r3, 0x78]                                |     r4 = *(0x11574);
    0x00008726 cmp r2, r4                                        |     
    0x00008728 itttt ne                                          |     
                                                                 |     if (r2 != r4) {
    0x0000872a strhne r4, [sb, 0x34]                             |         __asm ("strhne r4, [sb, 0x34]");
                                                                 |     }
                                                                 |     if (r2 == r4) {
    0x0000872e ldrne r3, [sl, 0x50]                              |         r3 = *((sl + 0x50));
                                                                 |     }
                                                                 |     if (r2 != r4) {
    0x00008732 orr r3, r3, 1                                     |         r3 |= 1;
                                                                 |     }
                                                                 |     if (r2 != r4) {
    0x00008736 str.w r3, [sl, 0x50]                              |         __asm ("str.w r3, [sl, 0x50]");
                                                                 |     }
    0x0000873a ldrh.w r3, [sb, 0x38]                             |     r3 = *((sb + 0x38));
    0x0000873e cmp r3, 0                                         |     
    0x00008740 beq.w 0x8894                                      |     
                                                                 |     while (r3 == r2) {
    0x00008744 ldr.w r3, [sl, 0x40]                              |         r3 = *((sl + 0x40));
    0x00008748 movs r5, 0                                        |         r5 = 0;
    0x0000874a strd r5, r4, [sp, 4]                              |         __asm ("strd r5, r4, [var_8h_2]");
    0x0000874e cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00008750 beq.w 0x88c2                                      |             goto label_117;
                                                                 |         }
                                                                 | label_37:
    0x00008754 add r1, sp, 0x38                                  |         r1 += var_38h;
    0x00008756 mov r0, sl                                        |         r0 = sl;
    0x00008758 bl 0xbee8                                         |         fcn_0000bee8 (r0, r1);
    0x0000875c str r0, [sp, 0xc]                                 |         var_ch_2 = r0;
    0x0000875e cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00008760 bne.w 0x8bde                                      |             goto label_118;
                                                                 |         }
    0x00008764 ldr.w r3, [pc, 0x670]                             |         
    0x00008768 ldr r2, [sp, 0x38]                                |         r2 = var_38h;
    0x0000876a ldrd r1, r0, [sb, 0x20]                           |         __asm ("ldrd r1, r0, [sb, 0x20]");
    0x0000876e add r3, pc                                        |         
    0x00008770 ldr r6, [sp, 0xc]                                 |         r6 = var_ch_2;
    0x00008772 ldr.w r3, [r3, 0x84]                              |         r3 = *(0x115ce);
    0x00008776 mul r3, r2, r3                                    |         r3 = r2 * r3;
    0x0000877a ldr.w r2, [sl, 0x2c]                              |         r2 = *((sl + 0x2c));
    0x0000877e lsls r7, r2, 0x1d                                 |         r7 = r2 << 0x1d;
                                                                 |         if (r7 >= r2) {
    0x00008780 bpl.w 0x890e                                      |             goto label_119;
                                                                 |         }
    0x00008784 adds r1, r1, r3                                   |         r1 += r3;
    0x00008786 adc r0, r0, 0                                     |         __asm ("adc r0, r0, 0");
    0x0000878a cmp r4, r1                                        |         
    0x0000878c sbcs r5, r0                                       |         __asm ("sbcs r5, r0");
    0x0000878e it lo                                             |         
                                                                 |         if (r4 < r1) {
    0x00008790 strdlo r0, r1, [sp, 4]                            |             __asm ("strdlo r0, r1, [var_8h_2]");
                                                                 |         }
                                                                 | label_39:
    0x00008794 cmp.w fp, 0                                       |         
                                                                 |         if (fp == 0) {
    0x00008798 beq.w 0x88de                                      |             goto label_53;
                                                                 |         }
                                                                 | label_38:
    0x0000879c ldr.w r3, [sl, 0xa8]                              |         r3 = *((sl + 0xa8));
    0x000087a0 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x000087a2 beq.w 0x8d7a                                      |             goto label_120;
                                                                 |         }
    0x000087a6 cmp.w fp, 0xff00                                  |         
                                                                 |         if (fp > 0xff00) {
    0x000087aa blo 0x87ce                                        |             
    0x000087ac ldr.w r2, [sl, 0x128]                             |             r2 = *((sl + 0x128));
    0x000087b0 movs r4, 0                                        |             r4 = 0;
    0x000087b2 ldrd r0, r1, [r2, 0x20]                           |             __asm ("ldrd r0, r1, [r2, 0x20]");
    0x000087b6 cmp r1, r4                                        |             
    0x000087b8 it eq                                             |             
                                                                 |             if (r1 == r4) {
    0x000087ba cmpeq r0, fp                                      |                 __asm ("cmpeq r0, fp");
                                                                 |             }
    0x000087bc itttt ne                                          |             
                                                                 |             if (r1 != r4) {
    0x000087be strdne fp, r4, [r2, 0x20]                         |                 __asm ("strdne fp, r4, [r2, 0x20]");
                                                                 |             }
                                                                 |             if (r1 == r4) {
    0x000087c2 ldrne r2, [sl, 0x12c]                             |                 r2 = *((sl + 0x12c));
                                                                 |             }
                                                                 |             if (r1 != r4) {
    0x000087c6 orr r2, r2, 1                                     |                 r2 |= 1;
                                                                 |             }
                                                                 |             if (r1 == r4) {
    0x000087ca str.w r2, [sl, 0x12c]                             |                 __asm ("str.w r2, aav.0x000000ff");
                                                                 |                 goto label_121;
                                                                 |             }
                                                                 |         }
                                                                 | label_121:
    0x000087ce cmp r3, 1                                         |         
    0x000087d0 add.w r2, sl, 0xa8                                |         r2 = sl + 0xa8;
    0x000087d4 it ne                                             |         
                                                                 |         if (r3 == 1) {
    0x000087d6 addne r0, sl, 0x150                               |             r0 = sl + 0x150;
                                                                 |         }
    0x000087da str r2, [sp, 0x10]                                |         var_10h_2 = r2;
                                                                 |         if (r3 == 1) {
    0x000087dc beq.w 0x8c5e                                      |             goto label_122;
                                                                 |         }
                                                                 | label_49:
    0x000087e0 ldr r3, [r0, 0x70]                                |         r3 = *((r0 + 0x70));
    0x000087e2 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x000087e4 beq.w 0x8cc6                                      |             goto label_123;
                                                                 |         }
                                                                 | label_48:
    0x000087e8 movw r3, 0xfffa                                   |         
    0x000087ec movs r0, 1                                        |         r0 = 1;
    0x000087ee movt r3, 0x6fff                                   |         r3 = 0x6ffffffa;
    0x000087f2 str.w sb, [sp, 0x28]                              |         __asm ("str.w sb, [var_28h_2]");
    0x000087f6 str r3, [sp, 0x1c]                                |         var_1ch_2 = r3;
    0x000087f8 movw r3, 0xfffc                                   |         
    0x000087fc movt r3, 0x6fff                                   |         r3 = 0x6ffffffc;
    0x00008800 str.w fp, [sp, 0x34]                              |         __asm ("str.w fp, [var_34h_2]");
    0x00008804 str r3, [sp, 0x20]                                |         var_20h_2 = r3;
    0x00008806 ldr.w r3, [pc, 0x5d4]                             |         
    0x0000880a add r3, pc                                        |         r3 = 0x115ec;
    0x0000880c str r3, [sp, 0x2c]                                |         var_2ch = r3;
    0x0000880e ldr.w r3, [pc, 0x5d0]                             |         
    0x00008812 add r3, pc                                        |         r3 = 0x115f8;
    0x00008814 str r3, [sp, 0x24]                                |         var_24h = r3;
    0x00008816 movs r3, 0                                        |         r3 = 0;
    0x00008818 str r3, [sp, 0x14]                                |         var_14h_3 = r3;
                                                                 | label_40:
    0x0000881a ldr r2, [sp, 0x10]                                |         r2 = var_10h_2;
    0x0000881c str r0, [sp, 0x18]                                |         var_18h_2 = r0;
    0x0000881e ldr r3, [r2]                                      |         r3 = *(r2);
    0x00008820 cmp r0, r3                                        |         
                                                                 |         if (r0 >= r3) {
    0x00008822 bhs.w 0x8a28                                      |             goto label_124;
                                                                 |         }
    0x00008826 movs r3, 0x98                                     |         r3 = 0x98;
    0x00008828 mla r3, r3, r0, r2                                |         __asm ("mla r3, r3, r0, r2");
    0x0000882c add.w fp, r3, 0x10                                |         
    0x00008830 ldr.w r5, [fp, 0x70]                              |         r5 = *(arg_70h);
    0x00008834 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x00008836 beq.w 0x8d68                                      |             goto label_125;
                                                                 |         }
    0x0000883a ldrd r6, r7, [r5, 0x30]                           |         __asm ("ldrd r6, r7, [r5, 0x30]");
    0x0000883e ldrd r1, r2, [r5, 0x38]                           |         __asm ("ldrd r1, r2, [r5, 0x38]");
    0x00008842 orrs.w r3, r6, r7                                 |         r3 = r6 | r7;
    0x00008846 itt eq                                            |         
                                                                 |         if (r3 != r6) {
    0x00008848 moveq r6, 1                                       |             r6 = 1;
                                                                 |         }
                                                                 |         if (r3 != r6) {
    0x0000884a moveq r7, 0                                       |             r7 = 0;
                                                                 |         }
    0x0000884c subs r0, r6, 1                                    |         r0 = r6 - 1;
    0x0000884e adc r3, r7, -1                                    |         __asm ("adc r3, r7, -1");
    0x00008852 ands r0, r6                                       |         r0 &= r6;
    0x00008854 ands r3, r7                                       |         r3 &= r7;
    0x00008856 orrs r3, r0                                       |         r3 |= r0;
                                                                 |         if (r3 != r0) {
    0x00008858 bne.w 0x8be6                                      |             goto label_126;
                                                                 |         }
    0x0000885c ldr r3, [r5, 4]                                   |         r3 = *((r5 + 4));
    0x0000885e cmp r3, 0x12                                      |         
                                                                 |         if (r3 > 0x12) {
    0x00008860 bhi.w 0x8a40                                      |             goto label_127;
                                                                 |         }
    0x00008864 cmp r3, 1                                         |         
                                                                 |         if (r3 < 1) {
    0x00008866 bls 0x8946                                        |             goto label_41;
                                                                 |         }
    0x00008868 subs r3, 2                                        |         r3 -= 2;
    0x0000886a cmp r3, 0x10                                      |         
                                                                 |         if (r3 > 0x10) {
    0x0000886c bhi 0x892a                                        |             goto label_128;
                                                                 |         }
                                                                 |         /* switch table (18 cases) at 0x8872 */
    0x0000886e tbh [pc, r3, lsl 1]                               |         __asm ("tbh [pc, r3, lsl 1]");
    0x00008894 ldrd r3, r2, [sb, 0x20]                           |         __asm ("ldrd r3, r2, [sb, 0x20]");
    0x00008898 orrs r3, r2                                       |         r3 |= r2;
    0x0000889a beq.w 0x8744                                      |         
                                                                 |     }
    0x0000889e vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x000088a2 movs r5, 0                                        |     r5 = 0;
    0x000088a4 strd r5, r4, [sp, 4]                              |     __asm ("strd r5, r4, [var_8h_2]");
    0x000088a8 vstr d16, [sb, 0x20]                              |     __asm ("vstr d16, [sb, 0x20]");
    0x000088ac ldr.w r3, [sl, 0x50]                              |     r3 = *((sl + 0x50));
    0x000088b0 orr r3, r3, 1                                     |     r3 |= 1;
    0x000088b4 str.w r3, [sl, 0x50]                              |     __asm ("str.w r3, [sl, 0x50]");
    0x000088b8 ldr.w r3, [sl, 0x40]                              |     r3 = *((sl + 0x40));
    0x000088bc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000088be bne.w 0x8754                                      |         goto label_37;
                                                                 |     }
                                                                 | label_117:
    0x000088c2 mov r0, sl                                        |     r0 = sl;
    0x000088c4 bl 0x52e8                                         |     fcn_000052e8 (r0);
    0x000088c8 ldr.w r3, [sl, 0x40]                              |     r3 = *((sl + 0x40));
    0x000088cc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000088ce bne.w 0x8754                                      |         goto label_37;
                                                                 |     }
    0x000088d2 ldr r3, [sp, 4]                                   |     r3 = var_4h_2;
    0x000088d4 str r3, [sp, 0xc]                                 |     var_ch_2 = r3;
    0x000088d6 cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x000088da bne.w 0x879c                                      |         goto label_38;
                                                                 |     }
                                                                 | label_53:
    0x000088de ldr.w r3, [sl, 0x50]                              |     r3 = *((sl + 0x50));
    0x000088e2 ldr r2, [sp, 0xc]                                 |     r2 = var_ch_2;
    0x000088e4 ldrd r1, r0, [sp, 4]                              |     __asm ("ldrd r1, r0, [var_8h_2]");
    0x000088e8 orrs r3, r2                                       |     r3 |= r2;
    0x000088ea str.w r3, [sl, 0x50]                              |     __asm ("str.w r3, [sl, 0x50]");
                                                                 | label_44:
    0x000088ee ldr.w r2, [pc, 0x4f4]                             |     r2 = *(0x00008de4);
    0x000088f2 ldr.w r3, [pc, 0x4d8]                             |     r3 = *(0x8dce);
    0x000088f6 add r2, pc                                        |     r2 += pc;
    0x000088f8 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x000088fa ldr r2, [r3]                                      |     r2 = *(0x8dce);
    0x000088fc ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x000088fe eors r2, r3                                       |     r2 ^= r3;
    0x00008900 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00008904 bne.w 0x8d1a                                      |         goto label_129;
                                                                 |     }
    0x00008908 add sp, 0x44                                      |     
    0x0000890a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_119:
    0x0000890e cmp r0, r5                                        |     
    0x00008910 it eq                                             |     
                                                                 |     if (r0 == r5) {
    0x00008912 cmpeq r1, r4                                      |         __asm ("cmpeq r1, r4");
                                                                 |     }
    0x00008914 ittt ne                                           |     
                                                                 |     if (r0 == r5) {
    0x00008916 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r0 != r5) {
    0x00008918 strdne r4, r5, [sb, 0x20]                         |         __asm ("strdne r4, r5, [sb, 0x20]");
                                                                 |     }
                                                                 |     if (r0 != r5) {
    0x0000891c str r2, [sp, 0xc]                                 |         var_ch_2 = r2;
                                                                 |     }
    0x0000891e adds r4, r4, r3                                   |     r4 += r3;
    0x00008920 adc r3, r6, 0                                     |     __asm ("adc r3, r6, 0");
    0x00008924 str r4, [sp, 8]                                   |     var_8h_2 = r4;
    0x00008926 str r3, [sp, 4]                                   |     var_4h_2 = r3;
    0x00008928 b 0x8794                                          |     goto label_39;
                                                                 | label_128:
    0x0000892a mov r0, r1                                        |     r0 = r1;
    0x0000892c mov r3, r2                                        |     r3 = r2;
                                                                 | label_42:
    0x0000892e cmp r3, r2                                        |     
    0x00008930 it eq                                             |     
                                                                 |     if (r3 == r2) {
    0x00008932 cmpeq r0, r1                                      |         __asm ("cmpeq r0, r1");
                                                                 |     }
    0x00008934 itttt ne                                          |     
                                                                 |     if (r3 != r2) {
    0x00008936 strdne r0, r3, [r5, 0x38]                         |         __asm ("strdne r0, r3, [r5, 0x38]");
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x0000893a ldrne r3, [fp, 0x74]                              |         r3 = *(arg_74h);
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x0000893e orr r3, r3, 1                                     |         r3 |= 1;
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x00008942 str.w r3, [fp, 0x74]                              |         __asm ("str.w r3, [arg_74h]");
                                                                 |     }
                                                                 | label_41:
    0x00008946 ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x00008948 movs r2, 0                                        |     r2 = 0;
    0x0000894a lsls r4, r3, 0x14                                 |     r4 = r3 << 0x14;
                                                                 |     if (r4 < r3) {
    0x0000894c bpl 0x8978                                        |         
    0x0000894e ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x00008950 mov r7, r2                                        |         r7 = r2;
    0x00008952 ldrb.w r6, [r3, 0x34]                             |         r6 = *((r3 + 0x34));
    0x00008956 ldrd r2, r3, [r5, 0x30]                           |         __asm ("ldrd r2, r3, [r5, 0x30]");
    0x0000895a cmp r6, 1                                         |         
    0x0000895c it lo                                             |         
                                                                 |         if (r6 >= 1) {
    0x0000895e movlo r6, 1                                       |             r6 = 1;
                                                                 |         }
    0x00008960 cmp r3, r7                                        |         
    0x00008962 it eq                                             |         
                                                                 |         if (r3 == r7) {
    0x00008964 cmpeq r2, r6                                      |             __asm ("cmpeq r2, r6");
                                                                 |         }
    0x00008966 itttt ne                                          |         
                                                                 |         if (r3 != r7) {
    0x00008968 strdne r6, r7, [r5, 0x30]                         |             __asm ("strdne r6, r7, [r5, 0x30]");
                                                                 |         }
                                                                 |         if (r3 == r7) {
    0x0000896c ldrne r3, [fp, 0x74]                              |             r3 = *(arg_74h);
                                                                 |         }
                                                                 |         if (r3 != r7) {
    0x00008970 orr r3, r3, 1                                     |             r3 |= 1;
                                                                 |         }
                                                                 |         if (r3 == r7) {
    0x00008974 str.w r3, [fp, 0x74]                              |             __asm ("str.w r3, [arg_74h]");
                                                                 |             goto label_130;
                                                                 |         }
                                                                 |     }
                                                                 | label_130:
    0x00008978 ldr.w r3, [fp, 0x60]                              |     r3 = *(arg_60h);
    0x0000897c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000897e beq.w 0x8bd2                                      |         goto label_131;
                                                                 |     }
                                                                 | label_47:
    0x00008982 ldr.w r3, [fp, 0x30]                              |     r3 = *(arg_30h);
    0x00008986 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00008988 bne 0x8a5c                                        |         goto label_132;
                                                                 |     }
    0x0000898a ldr.w r2, [sl, 0x2c]                              |     r2 = *((sl + 0x2c));
    0x0000898e mov r8, r3                                        |     r8 = r3;
    0x00008990 ldr.w r4, [fp, 0x44]                              |     r4 = *(arg_44h);
    0x00008994 and r2, r2, 4                                     |     r2 &= 4;
    0x00008998 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0000899a beq.w 0x8ac6                                      |         goto label_133;
                                                                 |     }
    0x0000899e ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x000089a0 ldrd r1, r0, [r5, 0x20]                           |     __asm ("ldrd r1, r0, [r5, 0x20]");
    0x000089a4 cmp r3, 8                                         |     
                                                                 |     if (r3 != 8) {
    0x000089a6 beq 0x89c0                                        |         
    0x000089a8 ldr r3, [r5, 0x18]                                |         r3 = *((r5 + 0x18));
    0x000089aa ldr r4, [sp, 8]                                   |         r4 = var_8h_2;
    0x000089ac ldr r2, [r5, 0x1c]                                |         r2 = *((r5 + 0x1c));
    0x000089ae adds r3, r1, r3                                   |         r3 = r1 + r3;
    0x000089b0 adc.w r2, r0, r2                                  |         __asm ("adc.w r2, r0, r2");
    0x000089b4 cmp r4, r3                                        |         
    0x000089b6 ldr r4, [sp, 4]                                   |         r4 = var_4h_2;
    0x000089b8 sbcs r4, r2                                       |         __asm ("sbcs r4, r2");
    0x000089ba it lo                                             |         
                                                                 |         if (r4 >= r3) {
    0x000089bc strdlo r2, r3, [sp, 4]                            |             __asm ("strdlo r2, r3, [var_8h_2]");
                                                                 |             goto label_134;
                                                                 |         }
                                                                 |     }
                                                                 | label_134:
    0x000089c0 orrs r0, r1                                       |     r0 |= r1;
                                                                 |     if (r0 == r1) {
    0x000089c2 beq 0x89ea                                        |         void (*0x89ea)() ();
                                                                 |     }
                                                                 | label_124:
    0x00008a28 ldr r1, [sp, 0x10]                                |     r1 = var_10h_2;
    0x00008a2a ldr r2, [r1, 8]                                   |     r2 = *((r1 + 8));
    0x00008a2c cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00008a2e beq.w 0x8d1e                                      |         goto label_135;
                                                                 |     }
    0x00008a32 ldr r1, [r1, 4]                                   |     r1 = *((r1 + 4));
    0x00008a34 movs r0, 0                                        |     r0 = 0;
    0x00008a36 cmp r1, r3                                        |     
                                                                 |     if (r1 != r3) {
    0x00008a38 bne.w 0x8db4                                      |         goto label_136;
                                                                 |     }
    0x00008a3c str r2, [sp, 0x10]                                |     var_10h_2 = r2;
    0x00008a3e b 0x881a                                          |     goto label_40;
                                                                 | label_127:
    0x00008a40 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch_2;
    0x00008a42 cmp r3, r0                                        |     
                                                                 |     if (r3 == r0) {
    0x00008a44 beq.w 0x8cbc                                      |         goto label_137;
                                                                 |     }
    0x00008a48 ldr r0, [sp, 0x20]                                |     r0 = var_20h_2;
    0x00008a4a cmp r3, r0                                        |     
                                                                 |     if (r3 != r0) {
    0x00008a4c bne.w 0x8946                                      |         goto label_41;
                                                                 |     }
    0x00008a50 ldr r3, [pc, 0x394]                               |     
    0x00008a52 add r3, pc                                        |     r3 = 0x1183e;
    0x00008a54 ldr.w r0, [r3, 0xbc]                              |     r0 = *(0x118fa);
    0x00008a58 movs r3, 0                                        |     r3 = 0;
    0x00008a5a b 0x892e                                          |     goto label_42;
                                                                 | label_132:
    0x00008a5c movs r4, 0                                        |     r4 = 0;
    0x00008a5e mov r0, fp                                        |     r0 = fp;
    0x00008a60 mov sb, r4                                        |     sb = r4;
    0x00008a62 add.w r3, fp, 0x38                                |     r3 += arg_38h;
    0x00008a66 str r3, [sp, 0x30]                                |     var_30h_2 = r3;
    0x00008a68 cmp fp, r0                                        |     
    0x00008a6a mov r1, r0                                        |     r1 = r0;
                                                                 |     if (fp == r0) {
    0x00008a6c beq.w 0x8b88                                      |         goto label_138;
                                                                 |     }
                                                                 | label_43:
    0x00008a70 ldr r3, [r1, 8]                                   |     r3 = *((r1 + 8));
    0x00008a72 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x00008a74 bne.w 0x8ba6                                      |         goto label_115;
                                                                 |     }
                                                                 | label_133:
    0x00008ac6 ldrd r1, r3, [r5, 0x30]                           |     __asm ("ldrd r1, r3, [r5, 0x30]");
    0x00008aca cmp r3, r7                                        |     
    0x00008acc it eq                                             |     
                                                                 |     if (r3 == r7) {
    0x00008ace cmpeq r1, r6                                      |         __asm ("cmpeq r1, r6");
                                                                 |     }
    0x00008ad0 ldr r1, [sp, 4]                                   |     r1 = var_4h_2;
    0x00008ad2 itttt ne                                          |     
                                                                 |     if (r3 != r7) {
    0x00008ad4 strdne r6, r7, [r5, 0x30]                         |         __asm ("strdne r6, r7, [r5, 0x30]");
                                                                 |     }
                                                                 |     if (r3 == r7) {
    0x00008ad8 ldrne r3, [fp, 0x74]                              |         r3 = *(arg_74h);
                                                                 |     }
                                                                 |     if (r3 != r7) {
    0x00008adc orr r3, r3, 1                                     |         r3 |= 1;
                                                                 |     }
                                                                 |     if (r3 != r7) {
    0x00008ae0 str.w r3, [fp, 0x74]                              |         __asm ("str.w r3, [arg_74h]");
                                                                 |     }
    0x00008ae4 ldr r3, [sp, 8]                                   |     r3 = var_8h_2;
    0x00008ae6 subs r3, 1                                        |     r3--;
    0x00008ae8 adc r1, r1, -1                                    |     __asm ("adc r1, r1, -1");
    0x00008aec adds r3, r3, r6                                   |     r3 += r6;
    0x00008aee adc.w r1, r7, r1                                  |     __asm ("adc.w r1, r7, r1");
    0x00008af2 rsbs r6, r6, 0                                    |     r6 -= ;
    0x00008af4 sbc.w r7, r7, r7, lsl 1                           |     __asm ("sbc.w r7, r7, r7, lsl 1");
    0x00008af8 and.w r0, r6, r3                                  |     r0 = r6 & r3;
    0x00008afc str r0, [sp, 8]                                   |     var_8h_2 = r0;
    0x00008afe and.w r6, r7, r1                                  |     r6 = r7 & r1;
    0x00008b02 ldrd r1, r3, [r5, 0x18]                           |     __asm ("ldrd r1, r3, [r5, 0x18]");
    0x00008b06 str r6, [sp, 4]                                   |     var_4h_2 = r6;
    0x00008b08 cmp r3, r6                                        |     
    0x00008b0a it eq                                             |     
                                                                 |     if (r3 == r6) {
    0x00008b0c cmpeq r1, r0                                      |         __asm ("cmpeq r1, r0");
                                                                 |     }
                                                                 |     if (r3 == r6) {
    0x00008b0e beq 0x8b24                                        |         goto label_139;
                                                                 |     }
    0x00008b10 strd r0, r6, [r5, 0x18]                           |     __asm ("strd r0, r6, [r5, 0x18]");
    0x00008b14 ldr.w r1, [fp, 0x30]                              |     r1 = *(arg_30h);
    0x00008b18 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00008b1a beq.w 0x8d0c                                      |         void (*0x8d0c)() ();
                                                                 |     }
                                                                 | label_139:
    0x00008b24 ldrd r1, r3, [r5, 0x20]                           |     __asm ("ldrd r1, r3, [r5, 0x20]");
    0x00008b28 cmp r3, r8                                        |     
    0x00008b2a it eq                                             |     
                                                                 |     if (r3 == r8) {
    0x00008b2c cmpeq r1, r4                                      |         __asm ("cmpeq r1, r4");
                                                                 |     }
    0x00008b2e itttt ne                                          |     
                                                                 |     if (r3 == r8) {
    0x00008b30 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 != r8) {
    0x00008b32 strdne r4, r8, [r5, 0x20]                         |         __asm ("strdne r4, r8, [r5, 0x20]");
                                                                 |     }
                                                                 |     if (r3 == r8) {
    0x00008b36 movne r2, r3                                      |         r2 = r3;
                                                                 |     }
                                                                 |     if (r3 != r8) {
    0x00008b38 str r3, [sp, 0x14]                                |         var_14h_3 = r3;
                                                                 |     }
    0x00008b3a ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x00008b3c cmp r3, 8                                         |     
                                                                 |     if (r3 == 8) {
    0x00008b3e beq 0x8b4e                                        |         void (*0x8b4e)() ();
                                                                 |     }
                                                                 | label_138:
    0x00008b88 ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x00008b8c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00008b8e bne.w 0x8a70                                      |         goto label_43;
                                                                 |     }
    0x00008b92 ldr.w r3, [fp, 0x38]                              |     r3 = *(arg_38h);
    0x00008b96 ldr r1, [sp, 0x30]                                |     r1 = var_30h_2;
    0x00008b98 cmp r3, 0                                         |     
    0x00008b9a it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x00008b9c moveq r1, fp                                      |         r1 = fp;
                                                                 |     }
    0x00008b9e ldr r3, [r1, 8]                                   |     r3 = *((r1 + 8));
    0x00008ba0 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x00008ba2 beq.w 0x8a78                                      |         void (*0x8a78)() ();
                                                                 |     }
                                                                 | label_115:
    0x00008ba6 movs r0, 2                                        |     r0 = 2;
    0x00008ba8 bl 0x259c                                         |     fcn_0000259c (r0);
    0x00008bac mov.w r0, -1                                      |     r0 = -1;
    0x00008bb0 mov r1, r0                                        |     r1 = r0;
    0x00008bb2 b 0x88ee                                          |     goto label_44;
                                                                 | label_111:
    0x00008bb4 ldrb r3, [r0, 1]                                  |     r3 = *((r0 + 1));
    0x00008bb6 adds r2, r0, 1                                    |     r2 = r0 + 1;
    0x00008bb8 cmp r3, 0x45                                      |     
                                                                 |     if (r3 != 0x45) {
    0x00008bba bne.w 0x8686                                      |         goto label_45;
                                                                 |     }
    0x00008bbe ldrb r3, [r2, 1]!                                 |     r3 = *((r2 += 1));
    0x00008bc2 cmp r3, 0x4c                                      |     
                                                                 |     if (r3 != 0x4c) {
    0x00008bc4 bne.w 0x8686                                      |         goto label_45;
                                                                 |     }
    0x00008bc8 ldrb r3, [r2, 1]                                  |     r3 = *((r2 + 1));
    0x00008bca cmp r3, 0x46                                      |     
                                                                 |     if (r3 != 0x46) {
    0x00008bcc bne.w 0x8686                                      |         goto label_45;
                                                                 |     }
    0x00008bd0 b 0x869e                                          |     goto label_46;
                                                                 | label_131:
    0x00008bd2 mov r0, fp                                        |     r0 = fp;
    0x00008bd4 bl 0x7330                                         |     r0 = fcn_00007330 (r0, r1);
    0x00008bd8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00008bda beq.w 0x8982                                      |         goto label_47;
                                                                 |     }
                                                                 | label_118:
    0x00008bde mov.w r0, -1                                      |     r0 = -1;
    0x00008be2 mov r1, r0                                        |     r1 = r0;
    0x00008be4 b 0x88ee                                          |     goto label_44;
                                                                 | label_126:
    0x00008be6 movs r0, 0x24                                     |     r0 = 0x24;
    0x00008be8 bl 0x259c                                         |     fcn_0000259c (r0);
    0x00008bec mov.w r0, -1                                      |     r0 = -1;
    0x00008bf0 mov r1, r0                                        |     r1 = r0;
    0x00008bf2 b 0x88ee                                          |     goto label_44;
    0x00008bf4 ldr r3, [pc, 0x1f4]                               |     
    0x00008bf6 add r3, pc                                        |     r3 = 0x119e6;
    0x00008bf8 ldr.w r0, [r3, 0x98]                              |     r0 = *(0x11a7e);
    0x00008bfc movs r3, 0                                        |     r3 = 0;
    0x00008bfe b 0x892e                                          |     goto label_42;
    0x00008c00 ldr r3, [sp, 0x28]                                |     r3 = var_28h_2;
    0x00008c02 ldrh r3, [r3, 0x10]                               |     r3 = *((r3 + 0x10));
    0x00008c04 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x00008c06 bne 0x8ce8                                        |         goto label_140;
                                                                 |     }
    0x00008c08 ldr r3, [pc, 0x1e4]                               |     
    0x00008c0a add r3, pc                                        |     r3 = 0x119fe;
    0x00008c0c ldr r0, [r3, 0x30]                                |     r0 = *(0x11a2e);
    0x00008c0e movs r3, 0                                        |     r3 = 0;
    0x00008c10 b 0x892e                                          |     goto label_42;
    0x00008c12 ldr r3, [pc, 0x1e0]                               |     
    0x00008c14 add r3, pc                                        |     r3 = 0x11a0e;
    0x00008c16 ldr.w r0, [r3, 0x8c]                              |     r0 = *(0x11a9a);
    0x00008c1a movs r3, 0                                        |     r3 = 0;
    0x00008c1c b 0x892e                                          |     goto label_42;
    0x00008c1e ldr r3, [pc, 0x1d8]                               |     
    0x00008c20 add r3, pc                                        |     r3 = 0x11a1e;
    0x00008c22 ldr r0, [r3, 0x74]                                |     r0 = *(0x11a92);
    0x00008c24 movs r3, 0                                        |     r3 = 0;
    0x00008c26 b 0x892e                                          |     goto label_42;
    0x00008c28 ldr r3, [sp, 0x28]                                |     r3 = var_28h_2;
    0x00008c2a movw r0, 0x9026                                   |     r0 = 0x9026;
    0x00008c2e ldrh r3, [r3, 0x12]                               |     r3 = *((r3 + 0x12));
    0x00008c30 cmp r3, r0                                        |     
                                                                 |     if (r3 == r0) {
    0x00008c32 beq 0x8cd4                                        |         goto label_141;
                                                                 |     }
    0x00008c34 cmp r3, 0x16                                      |     
    0x00008c36 itt ne                                            |     
                                                                 |     if (r3 == 0x16) {
    0x00008c38 movne r0, 4                                       |         r0 = 4;
                                                                 |     }
                                                                 |     if (r3 != 0x16) {
    0x00008c3a movne r3, 0                                       |         r3 = 0;
                                                                 |         goto label_142;
                                                                 |     }
                                                                 |     if (r3 != 0x16) {
                                                                 | label_142:
    0x00008c3c bne.w 0x892e                                      |         goto label_42;
                                                                 |     }
    0x00008c40 ldr r3, [sp, 0x28]                                |     r3 = var_28h_2;
    0x00008c42 ldrb r3, [r3, 4]                                  |     r3 = *((r3 + 4));
    0x00008c44 cmp r3, 2                                         |     
    0x00008c46 mov.w r3, 0                                       |     r3 = 0;
    0x00008c4a ite ne                                            |     
                                                                 |     if (r3 == 2) {
    0x00008c4c movne r0, 4                                       |         r0 = 4;
                                                                 |     }
                                                                 |     if (r3 != 2) {
    0x00008c4e moveq r0, 8                                       |         r0 = 8;
                                                                 |     }
    0x00008c50 b 0x892e                                          |     goto label_42;
    0x00008c52 ldr r3, [pc, 0x1a8]                               |     
    0x00008c54 add r3, pc                                        |     r3 = 0x11a56;
    0x00008c56 ldr.w r0, [r3, 0x88]                              |     r0 = *(0x11ade);
    0x00008c5a movs r3, 0                                        |     r3 = 0;
    0x00008c5c b 0x892e                                          |     goto label_42;
                                                                 | label_122:
    0x00008c5e ldr.w r0, [sl, 0xb0]                              |     r0 = *((sl + 0xb0));
    0x00008c62 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00008c64 beq.w 0x87e8                                      |         goto label_48;
                                                                 |     }
    0x00008c68 adds r0, 0x10                                     |     r0 += 0x10;
    0x00008c6a b 0x87e0                                          |     goto label_49;
                                                                 | label_112:
    0x00008c6c movs r3, 1                                        |     r3 = 1;
    0x00008c6e strb.w r3, [sb, 5]                                |     *((sb + 5)) = r3;
    0x00008c72 ldr.w r3, [sl, 0x50]                              |     r3 = *((sl + 0x50));
    0x00008c76 orr r3, r3, 1                                     |     r3 |= 1;
    0x00008c7a str.w r3, [sl, 0x50]                              |     __asm ("str.w r3, [sl, 0x50]");
    0x00008c7e b 0x86d0                                          |     goto label_50;
                                                                 | label_114:
    0x00008c80 movs r3, 1                                        |     r3 = 1;
    0x00008c82 str.w r3, [sb, 0x14]                              |     __asm ("str.w r3, [sb, 0x14]");
    0x00008c86 ldr.w r3, [sl, 0x50]                              |     r3 = *((sl + 0x50));
    0x00008c8a orr r3, r3, 1                                     |     r3 |= 1;
    0x00008c8e str.w r3, [sl, 0x50]                              |     __asm ("str.w r3, [sl, 0x50]");
    0x00008c92 b 0x86fa                                          |     goto label_51;
                                                                 | label_113:
    0x00008c94 movs r0, 0x22                                     |     r0 = 0x22;
    0x00008c96 bl 0x259c                                         |     fcn_0000259c (r0);
    0x00008c9a mov.w r0, -1                                      |     r0 = -1;
    0x00008c9e mov r1, r0                                        |     r1 = r0;
    0x00008ca0 b 0x88ee                                          |     goto label_44;
                                                                 | label_116:
    0x00008ca2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00008ca4 beq.w 0x871a                                      |         goto label_52;
                                                                 |     }
    0x00008ca8 movs r3, 0                                        |     r3 = 0;
    0x00008caa strh.w r3, [sb, 0x3c]                             |     *((sb + 0x3c)) = r3;
    0x00008cae ldr.w r3, [sl, 0x50]                              |     r3 = *((sl + 0x50));
    0x00008cb2 orr r3, r3, 1                                     |     r3 |= 1;
    0x00008cb6 str.w r3, [sl, 0x50]                              |     __asm ("str.w r3, [sl, 0x50]");
    0x00008cba b 0x871a                                          |     goto label_52;
                                                                 | label_137:
    0x00008cbc ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00008cbe ldr.w r0, [r3, 0xc0]                              |     r0 = *((r3 + 0xc0));
    0x00008cc2 movs r3, 0                                        |     r3 = 0;
    0x00008cc4 b 0x892e                                          |     goto label_42;
                                                                 | label_123:
    0x00008cc6 bl 0x6ef4                                         |     fcn_00006ef4 (r0);
    0x00008cca b 0x87e8                                          |     goto label_48;
                                                                 | label_141:
    0x00008cd4 movs r0, 8                                        |     r0 = 8;
    0x00008cd6 movs r3, 0                                        |     r3 = 0;
    0x00008cd8 b 0x892e                                          |     goto label_42;
                                                                 | label_140:
    0x00008ce8 movs r0, 0x28                                     |     r0 = 0x28;
    0x00008cea bl 0x259c                                         |     fcn_0000259c (r0);
    0x00008cee mov.w r0, -1                                      |     r0 = -1;
    0x00008cf2 mov r1, r0                                        |     r1 = r0;
    0x00008cf4 b 0x88ee                                          |     goto label_44;
                                                                 | label_129:
    0x00008d1a blx 0x2250                                        |     sysconf ();
                                                                 | label_135:
    0x00008d1e ldr r3, [pc, 0xe0]                                |     
    0x00008d20 movs r4, 0                                        |     r4 = 0;
    0x00008d22 ldr.w sb, [sp, 0x28]                              |     sb = var_28h_2;
    0x00008d26 ldr.w r0, [sl, 0x2c]                              |     r0 = *((sl + 0x2c));
    0x00008d2a add r3, pc                                        |     
    0x00008d2c ldr.w fp, [sp, 0x34]                              |     fp = var_34h_2;
    0x00008d30 ldrh.w r2, [sb, 0x3a]                             |     r2 = *((sb + 0x3a));
    0x00008d34 ldr.w r3, [r3, 0x90]                              |     r3 = *(0x11bc0);
    0x00008d38 ldrd r5, r1, [sb, 0x28]                           |     __asm ("ldrd r5, r1, [sb, 0x28]");
    0x00008d3c cmp r2, r3                                        |     
    0x00008d3e ittt ne                                           |     
                                                                 |     if (r2 == r3) {
    0x00008d40 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r2 != r3) {
    0x00008d42 strhne r3, [sb, 0x3a]                             |         __asm ("strhne r3, [sb, 0x3a]");
                                                                 |     }
                                                                 |     if (r2 != r3) {
    0x00008d46 str r2, [sp, 0xc]                                 |         var_ch_2 = r2;
                                                                 |     }
    0x00008d48 lsls r2, r0, 0x1d                                 |     r2 = r0 << 0x1d;
    0x00008d4a mul r3, r3, fp                                    |     r3 *= fp;
                                                                 |     if (r2 >= r0) {
    0x00008d4e bpl 0x8d8c                                        |         goto label_143;
                                                                 |     }
    0x00008d50 ldr r2, [sp, 8]                                   |     r2 = var_8h_2;
    0x00008d52 adds r3, r3, r5                                   |     r3 += r5;
    0x00008d54 adc r1, r1, 0                                     |     __asm ("adc r1, r1, 0");
    0x00008d58 cmp r2, r3                                        |     
    0x00008d5a ldr r2, [sp, 4]                                   |     r2 = var_4h_2;
    0x00008d5c sbcs r2, r1                                       |     __asm ("sbcs r2, r1");
                                                                 |     if (r2 >= r3) {
    0x00008d5e bhs.w 0x88de                                      |         goto label_53;
                                                                 |     }
    0x00008d62 strd r1, r3, [sp, 4]                              |     __asm ("strd r1, r3, [var_8h_2]");
    0x00008d66 b 0x88de                                          |     goto label_53;
                                                                 | label_125:
    0x00008d68 ldr r3, [pc, 0x98]                                |     
    0x00008d6a movs r2, 0xd6                                     |     r2 = 0xd6;
    0x00008d6c ldr r1, [pc, 0x98]                                |     
    0x00008d6e ldr r0, [pc, 0x9c]                                |     
    0x00008d70 add r3, pc                                        |     r3 = 0x11b78;
    0x00008d72 add r1, pc                                        |     r1 = 0x11b7e;
    0x00008d74 add r0, pc                                        |     r0 = 0x11b86;
    0x00008d76 blx 0x2424                                        |     fchmod (r0, r1);
                                                                 | label_120:
    0x00008d7a ldr r3, [pc, 0x94]                                |     
    0x00008d7c movs r2, 0xb4                                     |     r2 = 0xb4;
    0x00008d7e ldr r1, [pc, 0x94]                                |     
    0x00008d80 ldr r0, [pc, 0x94]                                |     
    0x00008d82 add r3, pc                                        |     r3 = 0x11b98;
    0x00008d84 add r1, pc                                        |     r1 = 0x11b9e;
    0x00008d86 add r0, pc                                        |     r0 = 0x11ba2;
    0x00008d88 blx 0x2424                                        |     fchmod (r0, r1);
                                                                 | label_143:
    0x00008d8c ldr r2, [sp, 8]                                   |     r2 = var_8h_2;
    0x00008d8e adds r2, 7                                        |     r2 += 7;
    0x00008d90 bic r2, r2, 7                                     |     r2 = BIT_MASK (r2, 7);
    0x00008d94 cmp r1, r4                                        |     
    0x00008d96 it eq                                             |     
                                                                 |     if (r1 == r4) {
    0x00008d98 cmpeq r5, r2                                      |         __asm ("cmpeq r5, r2");
                                                                 |     }
    0x00008d9a ittt ne                                           |     
                                                                 |     if (r1 == r4) {
    0x00008d9c orrne r0, r0, 1                                   |         r0 |= 1;
                                                                 |     }
                                                                 |     if (r1 != r4) {
    0x00008da0 strdne r2, r4, [sb, 0x28]                         |         __asm ("strdne r2, r4, [sb, 0x28]");
                                                                 |     }
                                                                 |     if (r1 != r4) {
    0x00008da4 str.w r0, [sl, 0x2c]                              |         __asm ("str.w r0, [sl, 0x2c]");
                                                                 |     }
    0x00008da8 adds r3, r3, r2                                   |     r3 += r2;
    0x00008daa str r3, [sp, 8]                                   |     var_8h_2 = r3;
    0x00008dac adc r3, r4, 0                                     |     __asm ("adc r3, r4, 0");
    0x00008db0 str r3, [sp, 4]                                   |     var_4h_2 = r3;
    0x00008db2 b 0x88de                                          |     goto label_53;
                                                                 | label_136:
    0x00008db4 ldr r3, [pc, 0x64]                                |     
    0x00008db6 movw r2, 0x1a7                                    |     r2 = 0x1a7;
    0x00008dba ldr r1, [pc, 0x64]                                |     
    0x00008dbc ldr r0, [pc, 0x64]                                |     
    0x00008dbe add r3, pc                                        |     r3 = 0x11bde;
    0x00008dc0 add r1, pc                                        |     
    0x00008dc2 add r0, pc                                        |     
    0x00008dc4 blx 0x2424                                        |     fchmod (r0, r1);
    0x00008dc8 ldrb r0, [r1, 2]                                  |     r0 = *((r1 + 2));
    0x00008dca movs r1, r0                                       |     r1 = r0;
    0x00008dcc lsls r4, r7, 3                                    |     r4 = r7 << 3;
    0x00008dce movs r0, r0                                       |     
    0x00008dd0 ldrsb r2, [r4, r3]                                |     r2 = *((r4 + r3));
    0x00008dd2 movs r0, r0                                       |     
    0x00008dd4 ldrsb r6, [r6, r6]                                |     r6 = *((r6 + r6));
    0x00008dd6 movs r0, r0                                       |     
    0x00008dd8 ldrsb r2, [r5, r5]                                |     r2 = *((r5 + r5));
    0x00008dda movs r0, r0                                       |     
    0x00008ddc ldrsb r6, [r1, r3]                                |     r6 = *((r1 + r3));
    0x00008dde movs r0, r0                                       |     
    0x00008de0 ldrh r2, [r5, r5]                                 |     r2 = *((r5 + r5));
    0x00008de2 movs r0, r0                                       |     
    0x00008de4 strb r6, [r7, 0x17]                               |     *((r7 + 0x17)) = r6;
    0x00008de6 movs r1, r0                                       |     r1 = r0;
    0x00008de8 strb r6, [r0, r2]                                 |     *((r0 + r2)) = r6;
    0x00008dea movs r0, r0                                       |     
    0x00008dec strh r2, [r4, r3]                                 |     *((r4 + r3)) = r2;
    0x00008dee movs r0, r0                                       |     
    0x00008df0 strh r6, [r1, r3]                                 |     *((r1 + r3)) = r6;
    0x00008df2 movs r0, r0                                       |     
    0x00008df4 strh r4, [r0, r3]                                 |     *((r0 + r3)) = r4;
    0x00008df6 movs r0, r0                                       |     
    0x00008df8 strh r0, [r7, r2]                                 |     *((r7 + r2)) = r0;
    0x00008dfa movs r0, r0                                       |     
    0x00008dfc strh r4, [r0, r2]                                 |     *((r0 + r2)) = r4;
    0x00008dfe movs r0, r0                                       |     
    0x00008e00 str r6, [r5, r6]                                  |     *((r5 + r6)) = r6;
    0x00008e02 movs r0, r0                                       |     
    0x00008e04 ldrsb r0, [r3, r5]                                |     r0 = *((r3 + r5));
    0x00008e06 movs r0, r0                                       |     
    0x00008e08 ldrsb r2, [r3, r2]                                |     r2 = *((r3 + r2));
    0x00008e0a movs r0, r0                                       |     
    0x00008e0c ldrsb r0, [r7, r3]                                |     r0 = *((r7 + r3));
    0x00008e0e movs r0, r0                                       |     
    0x00008e10 ldrsb r6, [r0, r5]                                |     r6 = *((r0 + r5));
    0x00008e12 movs r0, r0                                       |     
    0x00008e14 ldrsb r0, [r1, r2]                                |     r0 = *((r1 + r2));
    0x00008e16 movs r0, r0                                       |     
    0x00008e18 ldrsb r6, [r6, r2]                                |     r6 = *((r6 + r2));
    0x00008e1a movs r0, r0                                       |     
    0x00008e1c ldrsb r2, [r1, r4]                                |     r2 = *((r1 + r4));
    0x00008e1e movs r0, r0                                       |     
    0x00008e20 ldrsb r4, [r1, r1]                                |     r4 = *((r1 + r1));
    0x00008e22 movs r0, r0                                       |     
    0x00008e24 ldrsb r2, [r7, r2]                                |     r2 = *((r7 + r2));
    0x00008e26 movs r0, r0                                       |     
    0x00008e28 ldr r0, [r0]                                      |     r0 = *(0x11bea);
    0x00008e2a ldr r1, [r1]                                      |     r1 = *(0x11be6);
    0x00008e2c push {r4, r5}                                     |     
    0x00008e2e ldr r2, [r0, 0x70]                                |     r2 = *(0x11c5a);
    0x00008e30 ldr r3, [r1, 0x70]                                |     r3 = *(0x11c56);
    0x00008e32 ldr r4, [r2, 0x10]                                |     r4 = *(0x11c6a);
    0x00008e34 ldr r5, [r3, 0x10]                                |     r5 = *(0x11c66);
    0x00008e36 cmp r4, r5                                        |     
                                                                 |     if (r4 > r5) {
    0x00008e38 blo 0x8e58                                        |         
                                                                 |         if (r4 > r5) {
    0x00008e3a bhi 0x8e60                                        |             goto label_144;
                                                                 |         }
    0x00008e3c ldr r2, [r2, 0x14]                                |         r2 = *((r2 + 0x14));
    0x00008e3e ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x00008e40 cmp r2, r3                                        |         
                                                                 |         if (r2 <= r3) {
    0x00008e42 blo 0x8e58                                        |             goto label_145;
                                                                 |         }
                                                                 |         if (r2 > r3) {
    0x00008e44 bhi 0x8e60                                        |             goto label_144;
                                                                 |         }
    0x00008e46 ldr r2, [r0, 0x68]                                |         r2 = *((r0 + 0x68));
    0x00008e48 ldr r3, [r1, 0x68]                                |         r3 = *((r1 + 0x68));
    0x00008e4a cmp r2, r3                                        |         
                                                                 |         if (r2 <= r3) {
    0x00008e4c blo 0x8e58                                        |             goto label_145;
                                                                 |         }
    0x00008e4e ite hi                                            |         
                                                                 |         if (r2 <= r3) {
    0x00008e50 movhi r0, 1                                       |             r0 = 1;
                                                                 |         }
                                                                 |         if (r2 > r3) {
    0x00008e52 movls r0, 0                                       |             r0 = 0;
                                                                 |         }
    0x00008e54 pop {r4, r5}                                      |         
    0x00008e56 bx lr                                             |         return;
                                                                 |     }
                                                                 | label_145:
    0x00008e58 mov.w r0, -1                                      |     r0 = -1;
    0x00008e5c pop {r4, r5}                                      |     
    0x00008e5e bx lr                                             |     return;
                                                                 | label_144:
    0x00008e60 movs r0, 1                                        |     r0 = 1;
    0x00008e62 pop {r4, r5}                                      |     
    0x00008e64 bx lr                                             |     return;
                                                                 | }

[*] Function system used 1 times libelf-0.185.so