[*] Binary protection state of vftpd

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


[*] Function strcpy tear down of vftpd

    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/bin/vftpd @ 0x37e8 */
                                             | #include <stdint.h>
                                             |  
                                             | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                             |                                ((n & 0x0000ff00) <<  8) | \
                                             |                                ((n & 0x00ff0000) >>  8) | \
                                             |                                ((n & 0xff000000) >> 24)))
                                             |  
    ; (fcn) fcn.000037e8 ()                  | void fcn_000037e8 (int16_t arg_8h, int16_t arg_ch, int16_t arg_10h, int16_t arg_14h, int16_t arg_18h, char * str, int16_t arg_20h, char * s1, int16_t arg_28h, FILE * fildes, int16_t arg_30h, char * dest, int16_t arg_38h, int16_t arg_3ch, int16_t arg_40h, int16_t arg_44h, int16_t arg_48h, int16_t arg_4ch, int16_t arg_5ch, int16_t arg_60h, int16_t arg_64h, int16_t arg_68h, int16_t arg_6ch, int16_t arg_90h, int16_t arg_101h, char * arg_354h, int16_t arg_396h, int16_t arg_397h, int16_t arg_398h, int16_t arg_39ch, char * path, char * s) {
                                             |     int16_t var_0h;
                                             |     int16_t var_4h;
                                             | label_2:
    0x00002142 ldr r3, [sp, 0x3c]            |     r3 = *(arg_3ch);
    0x00002144 ldr r3, [r3]                  |     r3 = *(r3);
    0x00002146 cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x00002148 bne.w 0x24c8                  |         goto label_36;
                                             |     }
    0x0000214c mov sb, r3                    |     sb = r3;
    0x0000214e add.w sl, r4, 1               |     sl = r4 + 1;
    0x00002152 add r7, sp, 0x90              |     r7 += arg_90h;
                                             |     do {
                                             | label_0:
    0x00002154 movs r2, 0x80                 |         r2 = 0x80;
    0x00002156 movs r1, 0                    |         r1 = 0;
    0x00002158 mov r0, r6                    |         r0 = r6;
    0x0000215a mov.w r5, 0x384               |         r5 = 0x384;
    0x0000215e blx 0x1934                    |         memset (r0, r1, r2);
    0x00002162 mov r0, r4                    |         r0 = r4;
    0x00002164 blx 0x1724                    |         fdelt_chk ();
    0x00002168 movs r3, 0                    |         r3 = 0;
    0x0000216a str r7, [sp]                  |         *(sp) = r7;
    0x0000216c ldr r2, [sp, 0x28]            |         r2 = *(arg_28h);
    0x0000216e mov r1, r6                    |         r1 = r6;
    0x00002170 strd r5, r3, [r7]             |         __asm ("strd r5, r3, [r7]");
    0x00002174 ldr.w r3, [r6, r0, lsl 2]     |         offset_0 = r0 << 2;
                                             |         r3 = *((r6 + offset_0));
    0x00002178 orrs r3, r2                   |         r3 |= r2;
    0x0000217a str.w r3, [r6, r0, lsl 2]     |         __asm ("str.w r3, [r6, r0, lsl 2]");
    0x0000217e movs r3, 0                    |         r3 = 0;
    0x00002180 mov r2, r3                    |         r2 = r3;
    0x00002182 mov r0, sl                    |         r0 = sl;
    0x00002184 blx 0x16b8                    |         r0 = select ();
    0x00002188 cmp r0, 0                     |         
                                             |         if (r0 <= 0) {
    0x0000218a ble.w 0x2490                  |             goto label_37;
                                             |         }
    0x0000218e add r5, sp, 0x398             |         r5 += arg_398h;
    0x00002190 rsb.w r2, sb, 0x100           |         r2 = 0x100 - sb;
    0x00002194 add.w r1, r5, sb              |         r1 = r5 + sb;
    0x00002198 mov r0, r4                    |         r0 = r4;
    0x0000219a blx 0x1640                    |         r0 = read (r0, r1, r2);
    0x0000219e cmp r0, 0                     |         
                                             |         if (r0 < 0) {
    0x000021a0 blt.w 0x239e                  |             goto label_38;
                                             |         }
                                             |         if (r0 == 0) {
    0x000021a4 beq.w 0x24c8                  |             goto label_36;
                                             |         }
    0x000021a8 add sb, r0                    |         sb += r0;
    0x000021aa cmp.w sb, 0xff                |         
                                             |         if (sb > 0xff) {
    0x000021ae bgt.w 0x23b8                  |             goto label_39;
                                             |         }
    0x000021b0 strh r3, [r0, 8]              |         *((r0 + 8)) = r3;
                                             | label_1:
    0x000021b2 addw r3, sp, 0x397            |         __asm ("addw r3, arg_397h");
    0x000021b6 ldrb.w r2, [r3, sb]           |         r2 = *((r3 + sb));
    0x000021b8 movs r0, 9                    |         r0 = 9;
    0x000021ba cmp r2, 0xa                   |         
    0x000021bc bne 0x2154                    |         
                                             |     } while (r2 != 0xa);
    0x000021be b 0x23bc                      |     goto label_40;
                                             | label_38:
    0x0000239e blx 0x18d4                    |     r0 = errno_location ();
    0x000023a2 ldr r3, [r0]                  |     r3 = *(r0);
    0x000023a4 cmp r3, 0xb                   |     
                                             |     if (r3 != 0xb) {
    0x000023a6 beq 0x23ae                    |         
    0x000023a8 cmp r3, 4                     |         
                                             |         if (r3 != 4) {
    0x000023aa bne.w 0x24c8                  |             goto label_36;
                                             |         }
                                             |     }
    0x000023ae cmp.w sb, 0                   |     
                                             |     if (sb == 0) {
    0x000023b2 beq.w 0x2154                  |         goto label_0;
                                             |     }
    0x000023b6 b 0x21b2                      |     goto label_1;
                                             | label_39:
    0x000023b8 addw r3, sp, 0x397            |     __asm ("addw r3, arg_397h");
                                             | label_40:
    0x000023bc addw r2, sp, 0x396            |     __asm ("addw r2, arg_396h");
    0x000023c0 ldr.w sl, [pc, 0x414]         |     sl = *(0x000027d8);
    0x000023c4 ldrb.w r2, [r2, sb]           |     r2 = *((r2 + sb));
    0x000023c8 add sl, pc                    |     sl += pc;
    0x000023ca cmp r2, 0xd                   |     
    0x000023cc mov.w r2, 0                   |     r2 = 0;
    0x000023d0 it eq                         |     
                                             |     if (r2 != 0xd) {
    0x000023d2 addeq sb, sb, -1              |         sb += -1;
                                             |     }
    0x000023d6 strb.w r2, [r3, sb]           |     *((r3 + sb)) = r2;
    0x000023da ldr.w sb, [sl, 0x38]          |     sb = *((sl + 0x38));
    0x000023de mov r0, sb                    |     r0 = sb;
    0x000023e0 blx 0x1898                    |     strlen (r0);
    0x000023e4 mov r1, sb                    |     r1 = sb;
    0x000023e6 mov r2, r0                    |     r2 = r0;
    0x000023e8 mov r0, r5                    |     r0 = r5;
    0x000023ea blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
    0x000023ee cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x000023f0 beq 0x24c8                    |         goto label_36;
                                             |     }
    0x000023f2 ldr.w sb, [sl, 0x3c]          |     sb = *((sl + 0x3c));
    0x000023f6 mov r0, sb                    |     r0 = sb;
    0x000023f8 blx 0x1898                    |     strlen (r0);
    0x000023fc mov r1, sb                    |     r1 = sb;
    0x000023fe mov r2, r0                    |     r2 = r0;
    0x00002400 mov r0, r5                    |     r0 = r5;
    0x00002402 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
    0x00002406 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00002408 beq.w 0x3206                  |         goto label_41;
                                             |     }
    0x0000240c ldr.w sb, [sl, 0x48]          |     sb = *((sl + 0x48));
    0x00002410 mov r0, sb                    |     r0 = sb;
    0x00002412 blx 0x1898                    |     strlen (r0);
    0x00002416 mov r1, sb                    |     r1 = sb;
    0x00002418 mov r2, r0                    |     r2 = r0;
    0x0000241a mov r0, r5                    |     r0 = r5;
    0x0000241c blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
    0x00002420 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00002422 beq.w 0x32aa                  |         goto label_42;
                                             |     }
    0x00002426 ldr.w sb, [sl, 0x50]          |     sb = *((sl + 0x50));
    0x0000242a mov r0, sb                    |     r0 = sb;
    0x0000242c blx 0x1898                    |     strlen (r0);
    0x00002430 mov r1, sb                    |     r1 = sb;
    0x00002432 mov r2, r0                    |     r2 = r0;
    0x00002434 mov r0, r5                    |     r0 = r5;
    0x00002436 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
    0x0000243a cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x0000243c beq.w 0x32a2                  |         goto label_43;
                                             |     }
    0x00002440 ldr r3, [sp, 0x18]            |     r3 = *(arg_18h);
    0x00002442 cmp r3, 1                     |     
                                             |     if (r3 == 1) {
    0x00002444 beq.w 0x32b2                  |         goto label_44;
                                             |     }
    0x00002448 cmp r3, 2                     |     
                                             |     if (r3 == 2) {
    0x0000244a beq 0x24cc                    |         goto label_45;
                                             |     }
    0x0000244c cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x0000244e bne.w 0x2142                  |         goto label_2;
                                             |     }
    0x00002452 ldr.w sb, [sl, 0x58]          |     sb = *((sl + 0x58));
    0x00002456 mov r0, sb                    |     r0 = sb;
    0x00002458 blx 0x1898                    |     strlen (r0);
    0x0000245c mov r1, sb                    |     r1 = sb;
    0x0000245e mov r7, r0                    |     r7 = r0;
    0x00002460 mov r2, r0                    |     r2 = r0;
    0x00002462 mov r0, r5                    |     r0 = r5;
    0x00002464 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 == 0) {
    0x00002468 cbnz r0, 0x2478               |         
    0x0000246a mov r0, r5                    |         r0 = r5;
    0x0000246c blx 0x1898                    |         strlen (r0);
    0x00002470 adds r3, r7, 1                |         r3 = r7 + 1;
    0x00002472 cmp r0, r3                    |         
                                             |         if (r0 > r3) {
    0x00002474 bhi.w 0x3230                  |             goto label_46;
                                             |         }
                                             |     }
    0x00002478 ldr r3, [pc, 0x360]           |     
    0x0000247a add r3, pc                    |     r3 = 0x4c5a;
    0x0000247c ldr r5, [r3, 0x60]            |     r5 = *(0x4cba);
                                             | label_3:
    0x0000247e mov r0, r5                    |     r0 = r5;
    0x00002480 blx 0x1898                    |     strlen (r0);
    0x00002484 mov r1, r5                    |     r1 = r5;
    0x00002486 mov r2, r0                    |     r2 = r0;
    0x00002488 mov r0, r4                    |     r0 = r4;
    0x0000248a blx 0x195c                    |     fcn_0000195c ();
    0x0000248e b 0x2142                      |     goto label_2;
                                             | label_37:
    0x00002490 mov fp, r4                    |     
                                             |     if (r0 == r3) {
    0x00002492 beq.w 0x3292                  |         goto label_47;
                                             |     }
                                             |     do {
                                             | label_24:
    0x00002496 ldr r3, [pc, 0x348]           |         
    0x00002498 add r3, pc                    |         r3 = 0x4c7e;
    0x0000249a ldr.w r4, [r3, 0xe8]          |         r4 = *(0x4d66);
    0x0000249e mov r0, r4                    |         r0 = r4;
    0x000024a0 blx 0x1898                    |         strlen (r0);
    0x000024a4 mov r1, r4                    |         r1 = r4;
    0x000024a6 mov r2, r0                    |         r2 = r0;
    0x000024a8 mov r0, fp                    |         r0 = fp;
    0x000024aa blx 0x195c                    |         fcn_0000195c ();
    0x000024ae mov r0, fp                    |         r0 = fp;
    0x000024b0 blx 0x1ab4                    |         fdipc_client_socket ();
    0x000024b4 ldr r2, [pc, 0x32c]           |         
    0x000024b6 movs r1, 1                    |         r1 = 1;
    0x000024b8 ldr r3, [sp, 0x20]            |         r3 = *(arg_20h);
    0x000024ba movs r0, 0x26                 |         r0 = 0x26;
    0x000024bc add r2, pc                    |         r2 = 0x4ca4;
    0x000024be blx 0x19cc                    |         fcn_000019cc ();
                                             | label_32:
    0x000024c2 mov r0, fp                    |         r0 = fp;
    0x000024c4 blx 0x1874                    |         exit (r0);
                                             | label_36:
    0x000024c8 mov fp, r4                    |         
    0x000024ca b 0x2496                      |         
                                             |     } while (1);
                                             | label_45:
    0x000024cc ldr.w r1, [sl, 0x70]          |     r1 = *((sl + 0x70));
    0x000024d0 mov r0, r1                    |     r0 = r1;
    0x000024d2 str r1, [sp, 0x1c]            |     *(str) = r1;
    0x000024d4 blx 0x1898                    |     strlen (r0);
    0x000024d8 ldr r1, [sp, 0x1c]            |     r1 = *(str);
    0x000024da mov sb, r0                    |     sb = r0;
    0x000024dc mov r2, r0                    |     r2 = r0;
    0x000024de mov r0, r5                    |     r0 = r5;
    0x000024e0 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 == 0) {
    0x000024e4 cbnz r0, 0x24f6               |         
    0x000024e6 mov r0, r5                    |         r0 = r5;
    0x000024e8 blx 0x1898                    |         strlen (r0);
    0x000024ec add.w r3, sb, 1               |         r3 = sb + 1;
    0x000024f0 cmp r0, r3                    |         
                                             |         if (r0 > r3) {
    0x000024f2 bhi.w 0x33c2                  |             goto label_48;
                                             |         }
                                             |     }
    0x000024f6 ldr r3, [pc, 0x2f0]           |     
    0x000024f8 add r3, pc                    |     r3 = 0x4ce6;
    0x000024fa ldr.w sb, [r3, 0x78]          |     sb = *(0x4d5e);
    0x000024fe str r3, [sp, 0x1c]            |     *(str) = r3;
    0x00002500 mov r0, sb                    |     r0 = sb;
    0x00002502 blx 0x1898                    |     strlen (r0);
    0x00002506 mov r1, sb                    |     r1 = sb;
    0x00002508 mov r2, r0                    |     r2 = r0;
    0x0000250a mov r0, r5                    |     r0 = r5;
    0x0000250c blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
    0x00002510 cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x00002512 beq 0x25e4                    |         
    0x00002514 ldr r3, [sp, 0x1c]            |         r3 = *(str);
    0x00002516 ldr.w sb, [r3, 0x7c]          |         sb = *((r3 + 0x7c));
    0x0000251a mov r0, sb                    |         r0 = sb;
    0x0000251c blx 0x1898                    |         strlen (r0);
    0x00002520 mov r1, sb                    |         r1 = sb;
    0x00002522 mov r2, r0                    |         r2 = r0;
    0x00002524 mov r0, r5                    |         r0 = r5;
    0x00002526 blx 0x18ec                    |         strncasecmp (r0, r1, r2);
    0x0000252a ldr r3, [sp, 0x1c]            |         r3 = *(str);
    0x0000252c mov sb, r0                    |         sb = r0;
    0x0000252e ldr.w sl, [r3, 0x80]          |         sl = *((r3 + 0x80));
    0x00002532 mov r0, sl                    |         r0 = sl;
    0x00002534 blx 0x1898                    |         strlen (r0);
    0x00002538 mov r1, sl                    |         r1 = sl;
    0x0000253a mov r2, r0                    |         r2 = r0;
    0x0000253c mov r0, r5                    |         r0 = r5;
    0x0000253e blx 0x18ec                    |         r0 = strncasecmp (r0, r1, r2);
    0x00002542 mov sl, r0                    |         sl = r0;
    0x00002544 cmp.w sb, 0                   |         
                                             |         if (sb == 0) {
    0x00002548 beq.w 0x26d2                  |             goto label_49;
                                             |         }
    0x0000254c cmp r0, 0                     |         
                                             |         if (r0 == 0) {
    0x0000254e beq.w 0x26d2                  |             goto label_49;
                                             |         }
    0x00002552 ldr r3, [sp, 0x1c]            |         r3 = *(str);
    0x00002554 ldr.w sl, [r3, 0x84]          |         sl = *((r3 + 0x84));
    0x00002558 mov r0, sl                    |         r0 = sl;
    0x0000255a blx 0x1898                    |         strlen (r0);
    0x0000255e mov r1, sl                    |         r1 = sl;
    0x00002560 mov r2, r0                    |         r2 = r0;
    0x00002562 mov sb, r0                    |         sb = r0;
    0x00002564 mov r0, r5                    |         r0 = r5;
    0x00002566 blx 0x18ec                    |         r0 = strncasecmp (r0, r1, r2);
    0x0000256a mov sl, r0                    |         sl = r0;
                                             |         if (r0 == 0) {
    0x0000256c cbnz r0, 0x257c               |             
    0x0000256e mov r0, r5                    |             r0 = r5;
    0x00002570 blx 0x1898                    |             strlen (r0);
    0x00002574 add.w r3, sb, 1               |             r3 = sb + 1;
    0x00002578 cmp r0, r3                    |             
                                             |             if (r0 > r3) {
    0x0000257a bhi 0x261a                    |                 goto label_50;
                                             |             }
                                             |         }
    0x0000257c ldr r3, [pc, 0x26c]           |         
    0x0000257e add r3, pc                    |         r3 = 0x4d6e;
    0x00002580 ldr.w sl, [r3, 0x8c]          |         sl = *(0x4dfa);
    0x00002584 str r3, [sp, 0x30]            |         *(arg_30h) = r3;
    0x00002586 mov r0, sl                    |         r0 = sl;
    0x00002588 blx 0x1898                    |         strlen (r0);
    0x0000258c mov r1, sl                    |         r1 = sl;
    0x0000258e mov sb, r0                    |         sb = r0;
    0x00002590 mov r2, r0                    |         r2 = r0;
    0x00002592 mov r0, r5                    |         r0 = r5;
    0x00002594 blx 0x18ec                    |         strncasecmp (r0, r1, r2);
    0x00002596 invalid                       |         
    0x0000259a mov r0, r5                    |         r0 = r5;
    0x0000259c blx 0x1898                    |         strlen (r0);
    0x000025a0 add.w r3, sb, 1               |         r3 = sb + 1;
    0x000025a4 cmp r0, r3                    |         
                                             |         if (r0 > r3) {
    0x000025a6 bhi.w 0x2e96                  |             goto label_51;
                                             |         }
    0x000025aa ldr.w sb, [pc, 0x244]         |         sb = *(0x000027f0);
    0x000025ae add sb, pc                    |         sb += pc;
    0x000025b0 ldr.w sl, [sb, 0x9c]          |         sl = *((sb + 0x9c));
    0x000025b4 mov r0, sl                    |         r0 = sl;
    0x000025b6 blx 0x1898                    |         strlen (r0);
    0x000025ba mov r1, sl                    |         r1 = sl;
    0x000025bc mov r2, r0                    |         r2 = r0;
    0x000025be mov r0, r5                    |         r0 = r5;
    0x000025c0 blx 0x18ec                    |         r0 = strncasecmp (r0, r1, r2);
    0x000025c4 cmp r0, 0                     |         
                                             |         if (r0 != 0) {
    0x000025c6 bne.w 0x280c                  |             goto label_52;
                                             |         }
    0x000025ca ldrb r3, [r5, 5]              |         r3 = *((r5 + 5));
    0x000025cc and r2, r3, 0xf7              |         r2 = r3 & 0xf7;
    0x000025d0 cmp r2, 0x41                  |         
                                             |         if (r2 != 0x41) {
    0x000025d2 bne.w 0x26f8                  |             goto label_53;
                                             |         }
    0x000025d6 ldr r2, [pc, 0x21c]           |         
    0x000025d8 ldr.w r5, [sb, 0x54]          |         r5 = *((sb + 0x54));
    0x000025dc add r2, pc                    |         r2 = 0x4dd6;
    0x000025de strb.w r3, [r2, 0x74]         |         *((r2 + 0x74)) = r3;
    0x000025e2 b 0x247e                      |         goto label_3;
                                             |     }
    0x000025e4 ldrb.w sl, [r8, 0xc]          |     sl = *((r8 + 0xc));
    0x000025e8 cmp.w sl, 0                   |     
                                             |     if (sl != 0) {
    0x000025ec bne.w 0x2e6c                  |         goto label_54;
                                             |     }
    0x000025f0 movs r0, 2                    |     r0 = 2;
    0x000025f2 bl 0x3a0c                     |     r0 = fcn_00003a0c (r0);
    0x000025f6 subs r5, r0, 0                |     r5 = r0 - 0;
                                             |     if (r5 < r0) {
    0x000025f8 blt 0x26c2                    |         goto label_55;
                                             |     }
    0x000025fa movs r3, 0x80                 |     r3 = 0x80;
    0x000025fc mov r2, r7                    |     r2 = r7;
    0x000025fe mov r1, r6                    |     r1 = r6;
    0x00002600 mov r0, r4                    |     r0 = r4;
    0x00002602 str r3, [r7]                  |     *(r7) = r3;
    0x00002604 blx 0x1a2c                    |     r0 = fcn_00001a2c ();
    0x00002608 cmp r0, 0                     |     
                                             |     if (r0 < 0) {
    0x0000260a blt 0x2616                    |         goto label_56;
                                             |     }
    0x0000260c ldrh r3, [r6]                 |     r3 = *(r6);
    0x0000260e cmp r3, 2                     |     
                                             |     if (r3 == 2) {
    0x00002610 beq 0x26ca                    |         goto label_57;
                                             |     }
    0x00002612 cmp r3, 0xa                   |     
    0x00002614 beq 0x2688                    |     
                                             |     while (sb != r2) {
                                             | label_56:
    0x00002616 mov sb, sl                    |         sb = sl;
    0x00002618 b 0x26a0                      |         goto label_58;
                                             | label_50:
    0x0000261a addw r0, sp, 0x39d            |         __asm ("addw r0, path");
    0x0000261e bl 0x3b2c                     |         fcn_00003b2c (r0);
    0x00002622 add r3, sp, 0x6c              |         r3 += arg_6ch;
    0x00002624 add r2, sp, 0x68              |         r2 += arg_68h;
    0x00002626 mov r1, sl                    |         r1 = sl;
    0x00002628 strd sl, r4, [sp]             |         __asm ("strd sl, r4, [sp]");
    0x0000262c mov sb, r0                    |         sb = r0;
    0x0000262e bl 0x45cc                     |         r0 = fcn_000045cc (r0, r1, r2, r3, r4, r5, r6);
    0x00002632 mov r5, r0                    |         r5 = r0;
    0x00002634 cmp r0, 0                     |         
                                             |         if (r0 == 0) {
    0x00002636 beq.w 0x2a7c                  |             goto label_59;
                                             |         }
                                             | label_5:
    0x0000263a cmp r5, 0                     |         
                                             |         if (r5 < 0) {
    0x0000263c blt.w 0x299e                  |             goto label_4;
                                             |         }
    0x00002640 ldr.w sb, [pc, 0x1b4]         |         sb = *(0x000027f8);
    0x00002644 add sb, pc                    |         sb += pc;
    0x00002646 ldr.w r7, [sb, 0x1c]          |         r7 = *((sb + 0x1c));
    0x0000264a mov r0, r7                    |         r0 = r7;
    0x0000264c blx 0x1898                    |         strlen (r0);
    0x00002650 mov r1, r7                    |         r1 = r7;
    0x00002652 mov r2, r0                    |         r2 = r0;
    0x00002654 mov r0, r4                    |         r0 = r4;
    0x00002656 blx 0x195c                    |         fcn_0000195c ();
    0x0000265a mov r0, r8                    |         r0 = r8;
    0x0000265c bl 0x3c44                     |         r0 = fcn_00003c44 (r0);
    0x00002660 subs r7, r0, 0                |         r7 = r0 - 0;
                                             |         if (r7 < r0) {
    0x00002662 blt.w 0x2ca4                  |             goto label_60;
                                             |         }
    0x00002666 ldr r3, [pc, 0x194]           |         
    0x00002668 add r3, pc                    |         r3 = 0x4e6a;
    0x0000266a ldrb.w r3, [r3, 0x74]         |         r3 = *((r3 + 0x74));
    0x0000266e cmp r3, 0x49                  |         
                                             |         if (r3 == 0x49) {
    0x00002670 beq.w 0x2c50                  |             goto label_61;
                                             |         }
    0x00002674 cmp r3, 0x41                  |         
                                             |         if (r3 == 0x41) {
    0x00002676 beq.w 0x2da2                  |             goto label_62;
                                             |         }
    0x0000267a ldr r2, [pc, 0x184]           |         
    0x0000267c movs r1, 1                    |         r1 = 1;
    0x0000267e movs r0, 3                    |         r0 = 3;
    0x00002680 add r2, pc                    |         r2 = 0x4e86;
    0x00002682 blx 0x19cc                    |         fcn_000019cc ();
    0x00002686 b 0x2142                      |         goto label_2;
    0x00002688 ldrd r2, r3, [r6, 8]          |         __asm ("ldrd r2, r3, [r6, 8]");
    0x0000268c orrs.w sb, r2, r3             |         sb = r2 | r3;
    0x00002690 bne 0x2616                    |         
                                             |     }
    0x00002692 ldr r3, [r6, 0x10]            |     r3 = *((r6 + 0x10));
    0x00002694 cmn.w r3, 0x10000             |     
                                             |     if (r3 != 0x10000) {
    0x00002698 bne 0x26a0                    |         goto label_58;
                                             |     }
    0x0000269a ldr r3, [r6, 0x14]            |     r3 = *((r6 + 0x14));
    0x0000269c rev.w sb, r3                  |     r3 = SWAP32 (sb);
                                             |     do {
                                             | label_58:
    0x000026a0 mov r2, r7                    |         r2 = r7;
    0x000026a2 mov r1, r6                    |         r1 = r6;
    0x000026a4 mov r0, r5                    |         r0 = r5;
    0x000026a6 blx 0x1a2c                    |         r0 = fcn_00001a2c ();
    0x000026aa cmp r0, 0                     |         
                                             |         if (r0 >= 0) {
    0x000026ac blt 0x26bc                    |             
    0x000026ae ldrh r3, [r6]                 |             r3 = *(r6);
    0x000026b0 cmp r3, 2                     |             
                                             |             if (r3 == 2) {
    0x000026b2 beq.w 0x2d4c                  |                 goto label_63;
                                             |             }
    0x000026b4 strh r3, [r1, 0x1a]           |             *((r1 + 0x1a)) = r3;
    0x000026b6 cmp r3, 0xa                   |             
                                             |             if (r3 == 0xa) {
    0x000026b8 beq.w 0x2d38                  |                 goto label_64;
                                             |             }
                                             |         }
                                             | label_11:
    0x000026bc mov r0, r5                    |         r0 = r5;
    0x000026be blx 0x1ab4                    |         fdipc_client_socket ();
                                             | label_55:
    0x000026c2 ldr r3, [pc, 0x140]           |         
    0x000026c4 add r3, pc                    |         r3 = 0x4ece;
    0x000026c6 ldr r5, [r3, 0x14]            |         r5 = *(0x4ee2);
    0x000026c8 b 0x247e                      |         goto label_3;
                                             | label_57:
    0x000026ca ldr r3, [r6, 4]               |         r3 = *((r6 + 4));
    0x000026cc rev.w sb, r3                  |         r3 = SWAP32 (sb);
    0x000026d0 b 0x26a0                      |         
                                             |     } while (1);
                                             | label_49:
    0x000026d2 mov r0, r5                    |     r0 = r5;
    0x000026d4 blx 0x1898                    |     r0 = strlen (r0);
    0x000026d8 cmp r0, 5                     |     
                                             |     if (r0 >= 5) {
    0x000026da bls 0x26e4                    |         
    0x000026dc ldrb r3, [r5, 5]              |         r3 = *((r5 + 5));
    0x000026de cmp r3, 0x2d                  |         
                                             |         if (r3 != 0x2d) {
    0x000026e0 bne.w 0x31cc                  |             goto label_65;
                                             |         }
                                             |     }
    0x000026e4 ldr r0, [pc, 0x120]           |     
    0x000026e6 clz r3, sl                    |     r3 &= sl;
    0x000026ea lsrs r3, r3, 5                |     r3 >>= 5;
    0x000026ec mov r2, r8                    |     r2 = r8;
    0x000026ee mov r1, r4                    |     r1 = r4;
    0x000026f0 add r0, pc                    |     r0 = 0x4efc;
    0x000026f2 bl 0x3ec0                     |     fcn_00003ec0 (r0, r1, r2, r3);
    0x000026f4 invalid                       |     
                                             | label_53:
    0x000026f8 ldr.w r5, [sb, 0xa0]          |     r5 = *((sb + 0xa0));
    0x000026fc b 0x247e                      |     goto label_3;
                                             | label_52:
    0x0000280c ldr.w r1, [sb, 0xa4]          |     r1 = *((sb + 0xa4));
    0x00002810 mov r0, r1                    |     r0 = r1;
    0x00002812 str r1, [sp, 0x1c]            |     *(str) = r1;
    0x00002814 blx 0x1898                    |     strlen (r0);
    0x00002816 strex sb, sb, [r0, 0x1c]      |     __asm ("strex sb, sb, [r0, 0x1c]");
    0x0000281a mov sl, r0                    |     sl = r0;
    0x0000281c mov r2, r0                    |     r2 = r0;
    0x0000281e mov r0, r5                    |     r0 = r5;
    0x00002820 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 == 0) {
    0x00002824 cbnz r0, 0x2836               |         
    0x00002826 mov r0, r5                    |         r0 = r5;
    0x00002828 blx 0x1898                    |         strlen (r0);
    0x0000282c add.w r3, sl, 1               |         r3 = sl + 1;
    0x00002830 cmp r0, r3                    |         
                                             |         if (r0 > r3) {
    0x00002832 bhi.w 0x29a8                  |             goto label_66;
                                             |         }
                                             |     }
    0x00002836 ldr.w sb, [pc, 0xc40]         |     sb = *(0x00003478);
    0x0000283a add sb, pc                    |     sb += pc;
    0x0000283c ldr.w r1, [sb, 0xa8]          |     r1 = *((sb + 0xa8));
    0x00002840 mov r0, r1                    |     r0 = r1;
    0x00002842 str r1, [sp, 0x1c]            |     *(str) = r1;
    0x00002844 blx 0x1898                    |     strlen (r0);
    0x00002848 ldr r1, [sp, 0x1c]            |     r1 = *(str);
    0x0000284a mov sl, r0                    |     sl = r0;
    0x0000284c mov r2, r0                    |     r2 = r0;
    0x0000284e mov r0, r5                    |     r0 = r5;
    0x00002850 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 == 0) {
    0x00002854 cbnz r0, 0x2866               |         
    0x00002856 mov r0, r5                    |         r0 = r5;
    0x00002858 blx 0x1898                    |         strlen (r0);
    0x0000285c add.w r3, sl, 1               |         r3 = sl + 1;
    0x00002860 cmp r0, r3                    |         
                                             |         if (r0 > r3) {
    0x00002862 bhi.w 0x3742                  |             goto label_67;
                                             |         }
                                             |     }
    0x00002866 ldr.w sb, [pc, 0xc14]         |     sb = *(0x0000347c);
    0x0000286a add sb, pc                    |     sb += pc;
    0x0000286c ldr.w r1, [sb, 0xac]          |     r1 = *((sb + 0xac));
    0x00002870 mov r0, r1                    |     r0 = r1;
    0x00002872 str r1, [sp, 0x1c]            |     *(str) = r1;
    0x00002874 blx 0x1898                    |     strlen (r0);
    0x00002878 ldr r1, [sp, 0x1c]            |     r1 = *(str);
    0x0000287a mov sl, r0                    |     sl = r0;
    0x0000287c mov r2, r0                    |     r2 = r0;
    0x0000287e mov r0, r5                    |     r0 = r5;
    0x00002880 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 == 0) {
    0x00002884 cbnz r0, 0x2896               |         
    0x00002886 mov r0, r5                    |         r0 = r5;
    0x00002888 blx 0x1898                    |         strlen (r0);
    0x0000288c add.w r3, sl, 1               |         r3 = sl + 1;
    0x00002890 cmp r0, r3                    |         
                                             |         if (r0 > r3) {
    0x00002892 bhi.w 0x35a2                  |             goto label_68;
                                             |         }
                                             |     }
    0x00002896 ldr.w sb, [pc, 0xbe8]         |     sb = *(0x00003480);
    0x0000289a add sb, pc                    |     sb += pc;
    0x0000289c ldr.w sl, [sb, 0xb0]          |     sl = *((sb + 0xb0));
    0x000028a0 mov r0, sl                    |     r0 = sl;
    0x000028a2 blx 0x1898                    |     strlen (r0);
    0x000028a6 mov r1, sl                    |     r1 = sl;
    0x000028a8 mov r2, r0                    |     r2 = r0;
    0x000028aa mov r0, r5                    |     r0 = r5;
    0x000028ac blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
    0x000028b0 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x000028b2 beq.w 0x35ca                  |         goto label_69;
                                             |     }
    0x000028b6 ldr.w sl, [sb, 0xb8]          |     sl = *((sb + 0xb8));
    0x000028ba mov r0, sl                    |     r0 = sl;
    0x000028bc blx 0x1898                    |     strlen (r0);
    0x000028c0 mov r1, sl                    |     r1 = sl;
    0x000028c2 mov sb, r0                    |     sb = r0;
    0x000028c4 mov r2, r0                    |     r2 = r0;
    0x000028c6 mov r0, r5                    |     r0 = r5;
    0x000028c8 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 == 0) {
    0x000028cc cbnz r0, 0x28de               |         
    0x000028ce mov r0, r5                    |         r0 = r5;
    0x000028d0 blx 0x1898                    |         strlen (r0);
    0x000028d4 add.w r3, sb, 1               |         r3 = sb + 1;
    0x000028d8 cmp r0, r3                    |         
                                             |         if (r0 > r3) {
    0x000028da bhi.w 0x35b8                  |             goto label_70;
                                             |         }
                                             |     }
    0x000028de ldr.w sb, [pc, 0xba4]         |     sb = *(0x00003484);
    0x000028e2 add sb, pc                    |     sb += pc;
    0x000028e4 ldr.w r1, [sb, 0xbc]          |     r1 = *((sb + 0xbc));
    0x000028e8 mov r0, r1                    |     r0 = r1;
    0x000028ea str r1, [sp, 0x1c]            |     *(str) = r1;
    0x000028ec blx 0x1898                    |     strlen (r0);
    0x000028f0 ldr r1, [sp, 0x1c]            |     r1 = *(str);
    0x000028f2 mov sl, r0                    |     sl = r0;
    0x000028f4 mov r2, r0                    |     r2 = r0;
    0x000028f6 mov r0, r5                    |     r0 = r5;
    0x000028f8 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 == 0) {
    0x000028fc cbnz r0, 0x290e               |         
    0x000028fe mov r0, r5                    |         r0 = r5;
    0x00002900 blx 0x1898                    |         strlen (r0);
    0x00002904 add.w r3, sl, 1               |         r3 = sl + 1;
    0x00002908 cmp r0, r3                    |         
                                             |         if (r0 > r3) {
    0x0000290a bhi.w 0x3612                  |             goto label_71;
                                             |         }
                                             |     }
    0x0000290e ldr.w sb, [pc, 0xb78]         |     sb = *(0x00003488);
    0x00002912 add sb, pc                    |     sb += pc;
    0x00002914 ldr.w sl, [sb, 0xcc]          |     sl = *((sb + 0xcc));
    0x00002916 adr r0, 0x330                 |     r0 = 0x330;
    0x00002918 mov r0, sl                    |     r0 = sl;
    0x0000291a blx 0x1898                    |     strlen (r0);
    0x0000291e mov r1, sl                    |     r1 = sl;
    0x00002920 mov r2, r0                    |     r2 = r0;
    0x00002922 mov r0, r5                    |     r0 = r5;
    0x00002924 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
    0x00002928 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x0000292a beq.w 0x2a6c                  |         goto label_72;
                                             |     }
    0x0000292e ldr.w sl, [sb, 0xd0]          |     sl = *((sb + 0xd0));
    0x00002932 mov r0, sl                    |     r0 = sl;
    0x00002934 blx 0x1898                    |     strlen (r0);
    0x00002938 mov r1, sl                    |     r1 = sl;
    0x0000293a mov r2, r0                    |     r2 = r0;
    0x0000293c str r0, [sp, 0x1c]            |     *(str) = r0;
    0x0000293e mov r0, r5                    |     r0 = r5;
    0x00002940 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
    0x00002944 mov sl, r0                    |     sl = r0;
                                             |     if (r0 == 0) {
    0x00002946 cbnz r0, 0x2958               |         
    0x00002948 mov r0, r5                    |         r0 = r5;
    0x0000294a blx 0x1898                    |         strlen (r0);
    0x0000294e ldr r2, [sp, 0x1c]            |         r2 = *(str);
    0x00002950 adds r3, r2, 1                |         r3 = r2 + 1;
    0x00002952 cmp r0, r3                    |         
                                             |         if (r0 > r3) {
    0x00002954 bhi.w 0x2b8c                  |             goto label_73;
                                             |         }
                                             |     }
    0x00002958 ldr.w sb, [pc, 0xb30]         |     sb = *(0x0000348c);
    0x0000295c add sb, pc                    |     sb += pc;
    0x0000295e ldr.w r1, [sb, 0xd8]          |     r1 = *((sb + 0xd8));
    0x00002962 mov r0, r1                    |     r0 = r1;
    0x00002964 str r1, [sp, 0x1c]            |     *(str) = r1;
    0x00002966 blx 0x1898                    |     strlen (r0);
    0x0000296a ldr r1, [sp, 0x1c]            |     r1 = *(str);
    0x0000296c mov sl, r0                    |     sl = r0;
    0x0000296e mov r2, r0                    |     r2 = r0;
    0x00002970 mov r0, r5                    |     r0 = r5;
    0x00002972 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 != 0) {
    0x00002976 cbnz r0, 0x29c0               |         goto label_74;
                                             |     }
    0x00002978 mov r0, r5                    |     r0 = r5;
    0x0000297a blx 0x1898                    |     strlen (r0);
    0x0000297e add.w r3, sl, 1               |     r3 = sl + 1;
    0x00002982 cmp r0, r3                    |     
                                             |     if (r0 < r3) {
    0x00002984 bls 0x29c0                    |         goto label_74;
                                             |     }
    0x00002986 ldr r5, [sp, 0x34]            |     r5 = *(dest);
    0x00002988 ldrb r3, [r5]                 |     r3 = *(r5);
                                             |     if (r3 == 0) {
    0x0000298a cbz r3, 0x299e                |         goto label_4;
                                             |     }
    0x0000298c addw r0, sp, 0x39d            |     __asm ("addw r0, path");
    0x00002990 bl 0x3b2c                     |     r0 = fcn_00003b2c (r0);
    0x00002994 mov r1, r0                    |     r1 = r0;
    0x00002996 mov r0, r5                    |     r0 = r5;
    0x00002998 blx 0x1850                    |     r0 = rename (r0, r1);
                                             |     if (r0 == 0) {
    0x0000299c cbz r0, 0x29ba                |         goto label_30;
                                             |     }
                                             |     do {
                                             | label_4:
    0x0000299e mov r0, r4                    |         r0 = r4;
    0x000029a0 bl 0x38b0                     |         fcn_000038b0 (r0);
    0x000029a4 b.w 0x2142                    |         goto label_2;
                                             | label_66:
    0x000029a8 add r0, sp, 0x39c             |         r0 += arg_39ch;
    0x000029aa bl 0x3b2c                     |         fcn_00003b2c (r0);
    0x000029ae movw r1, 0x1ed                |         r1 = 0x1ed;
    0x000029b2 blx 0x191c                    |         r0 = mkdir ();
    0x000029b6 cmp r0, 0                     |         
    0x000029b8 bne 0x299e                    |         
                                             |     } while (r0 != 0);
                                             | label_30:
    0x000029ba ldr.w r5, [sb, 0x18]          |     r5 = *((sb + 0x18));
    0x000029be b 0x247e                      |     goto label_3;
                                             | label_74:
    0x000029c0 ldr.w sl, [pc, 0xacc]         |     sl = *(0x00003490);
    0x000029c4 add sl, pc                    |     sl += pc;
    0x000029c6 ldr.w r1, [sl, 0xdc]          |     r1 = *((sl + 0xdc));
    0x000029ca mov r0, r1                    |     r0 = r1;
    0x000029cc str r1, [sp, 0x1c]            |     *(str) = r1;
    0x000029ce blx 0x1898                    |     strlen (r0);
    0x000029d2 ldr r1, [sp, 0x1c]            |     r1 = *(str);
    0x000029d4 mov sb, r0                    |     sb = r0;
    0x000029d6 mov r2, r0                    |     r2 = r0;
    0x000029d8 mov r0, r5                    |     r0 = r5;
    0x000029da blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 == 0) {
    0x000029de cbnz r0, 0x29ee               |         
    0x000029e0 mov r0, r5                    |         r0 = r5;
    0x000029e2 blx 0x1898                    |         strlen (r0);
    0x000029e6 add.w r3, sb, 1               |         r3 = sb + 1;
    0x000029ea cmp r0, r3                    |         
                                             |         if (r0 > r3) {
    0x000029ec bhi 0x2aae                    |             goto label_75;
                                             |         }
                                             |     }
    0x000029ee ldr.w sb, [pc, 0xaa4]         |     sb = *(0x00003494);
    0x000029f2 add sb, pc                    |     sb += pc;
    0x000029f4 ldr.w sl, [sb, 0xe4]          |     sl = *((sb + 0xe4));
    0x000029f8 mov r0, sl                    |     r0 = sl;
    0x000029fa blx 0x1898                    |     strlen (r0);
    0x000029fe mov r1, sl                    |     r1 = sl;
    0x00002a00 mov r2, r0                    |     r2 = r0;
    0x00002a02 str r0, [sp, 0x1c]            |     *(str) = r0;
    0x00002a04 mov r0, r5                    |     r0 = r5;
    0x00002a06 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
    0x00002a0a mov sl, r0                    |     sl = r0;
    0x00002a0c cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x00002a0e bne.w 0x2bfa                  |         goto label_31;
                                             |     }
    0x00002a12 mov r0, r5                    |     r0 = r5;
    0x00002a14 blx 0x1898                    |     strlen (r0);
    0x00002a16 vpmax.s8 d25, d0, d7          |     __asm ("vpmax.s8 d25, d0, d7");
    0x00002a1a adds r3, r2, 1                |     r3 = r2 + 1;
    0x00002a1c cmp r0, r3                    |     
                                             |     if (r0 < r3) {
    0x00002a1e bls.w 0x2bf2                  |         goto label_76;
                                             |     }
    0x00002a22 ldrb r3, [r5, r2]             |     r3 = *((r5 + r2));
    0x00002a24 add r5, r2                    |     r5 += r2;
    0x00002a26 cmp r3, 0x20                  |     
                                             |     if (r3 != 0x20) {
    0x00002a28 bne.w 0x2bfa                  |         goto label_31;
                                             |     }
    0x00002a2c ldr.w r1, [pc, 0xa68]         |     
    0x00002a30 adds r5, 1                    |     r5++;
    0x00002a32 mov r0, r5                    |     r0 = r5;
    0x00002a34 add r1, pc                    |     r1 = 0x5ed0;
    0x00002a36 blx 0x15f8                    |     r0 = strcmp (r0, r1);
    0x00002a3a cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00002a3c beq.w 0x2c00                  |         goto label_77;
                                             |     }
    0x00002a40 mov r1, sl                    |     r1 = sl;
    0x00002a42 mov r0, r5                    |     r0 = r5;
    0x00002a44 movs r2, 0xa                  |     r2 = 0xa;
    0x00002a46 blx 0x1610                    |     r0 = strtol (r0, r1, r2);
    0x00002a4a cmp r0, 1                     |     
    0x00002a4c mov r3, r0                    |     r3 = r0;
                                             |     if (r0 == 1) {
    0x00002a4e beq.w 0x2b58                  |         goto label_78;
                                             |     }
    0x00002a52 cmp r0, 2                     |     
                                             |     if (r0 == 2) {
    0x00002a54 beq.w 0x2bba                  |         goto label_79;
                                             |     }
    0x00002a58 ldr.w r2, [pc, 0xa40]         |     
    0x00002a5c movs r1, 1                    |     r1 = 1;
    0x00002a5e movs r0, 6                    |     r0 = 6;
    0x00002a60 add r2, pc                    |     r2 = 0x5f00;
    0x00002a62 blx 0x19cc                    |     fcn_000019cc ();
    0x00002a66 ldr.w r5, [sb, 0xe0]          |     r5 = *((sb + 0xe0));
    0x00002a6a b 0x247e                      |     goto label_3;
                                             | label_72:
    0x00002a6c ldr.w r1, [pc, 0xa30]         |     
    0x00002a70 mov r0, r4                    |     r0 = r4;
    0x00002a72 add r1, pc                    |     r1 = 0x5f16;
    0x00002a74 bl 0x3c10                     |     fcn_00003c10 (r0, r1);
    0x00002a78 b.w 0x2142                    |     goto label_2;
                                             | label_59:
    0x00002a7c mov r1, r7                    |     r1 = r7;
    0x00002a7e mov r0, sb                    |     r0 = sb;
    0x00002a80 blx 0x1838                    |     r0 = stat ();
    0x00002a84 cmp r0, 0                     |     
                                             |     if (r0 < 0) {
    0x00002a86 blt 0x299e                    |         goto label_4;
                                             |     }
    0x00002a88 ldr r3, [r7, 0x10]            |     r3 = *((r7 + 0x10));
    0x00002a8a and r3, r3, 0xf000            |     r3 &= 0xf000;
    0x00002a8e cmp.w r3, 0x4000              |     
                                             |     if (r3 == 0x4000) {
    0x00002a92 beq 0x2b50                    |         goto label_80;
                                             |     }
    0x00002a94 movs r1, 4                    |     r1 = 4;
    0x00002a96 mov r0, sb                    |     r0 = sb;
    0x00002a98 blx 0x1968                    |     r0 = fcn_00001968 ();
    0x00002a9c cmp r0, 0                     |     
                                             |     if (r0 < 0) {
    0x00002a9e blt.w 0x299e                  |         goto label_4;
                                             |     }
    0x00002aa2 mov r1, r5                    |     r1 = r5;
    0x00002aa4 mov r0, sb                    |     r0 = sb;
    0x00002aa6 blx 0x1844                    |     r0 = open (r0, r1, r2);
    0x00002aaa mov r5, r0                    |     r5 = r0;
    0x00002aac b 0x263a                      |     goto label_5;
                                             | label_75:
    0x00002aae ldrb.w r3, [r8, 0xc]          |     r3 = *((r8 + 0xc));
    0x00002ab2 cmp r3, 0                     |     
                                             |     if (r3 == 0) {
    0x00002ab4 bne 0x2b4a                    |         
    0x00002ab6 ldr.w r1, [pc, 0x9ec]         |         
    0x00002aba movs r2, 5                    |         r2 = 5;
    0x00002abc mov r0, r5                    |         r0 = r5;
    0x00002abe add r1, pc                    |         r1 = 0x5f68;
    0x00002ac0 blx 0x1a98                    |         r0 = fcn_00001a98 ();
    0x00002ac4 mov r7, r0                    |         r7 = r0;
    0x00002ac6 cmp r0, 0                     |         
                                             |         if (r0 == 0) {
    0x00002ac8 bne 0x2b40                    |             
    0x00002aca ldrb r5, [r5, 5]              |             r5 = *((r5 + 5));
    0x00002acc sub.w r3, r5, 0x21            |             r3 = r5 - 0x21;
    0x00002ad0 cmp r3, 0x5d                  |             
                                             |             if (r3 > 0x5d) {
    0x00002ad2 bhi 0x2b40                    |                 goto label_81;
                                             |             }
    0x00002ad4 addw r3, sp, 0x39e            |             __asm ("addw r3, s");
    0x00002ad8 mov r1, r5                    |             r1 = r5;
    0x00002ada mov r0, r3                    |             r0 = r3;
    0x00002adc str r3, [sp, 0x1c]            |             *(str) = r3;
    0x00002ade blx 0x18a4                    |             r0 = strchr (r0, r1);
    0x00002ae2 mov sb, r0                    |             sb = r0;
                                             |             if (r0 == 0) {
    0x00002ae4 cbz r0, 0x2b40                |                 goto label_81;
                                             |             }
    0x00002ae6 ldr r3, [sp, 0x1c]            |             r3 = *(str);
    0x00002ae8 mov r1, r7                    |             r1 = r7;
    0x00002aea strb r7, [sb], 1              |             *(sb) = r7;
                                             |             sb++;
    0x00002aee movs r2, 0xa                  |             r2 = 0xa;
    0x00002af0 mov r0, r3                    |             r0 = r3;
    0x00002af2 blx 0x1610                    |             strtol (r0, r1, r2);
    0x00002af6 mov r1, r5                    |             r1 = r5;
    0x00002af8 str r0, [sp, 0x1c]            |             *(str) = r0;
    0x00002afa mov r0, sb                    |             r0 = sb;
    0x00002afc blx 0x18a4                    |             r0 = strchr (r0, r1);
                                             |             if (r0 == 0) {
    0x00002b00 cbz r0, 0x2b40                |                 goto label_81;
                                             |             }
    0x00002b02 ldr r3, [sp, 0x1c]            |             r3 = *(str);
    0x00002b04 strb r7, [r0]                 |             *(r0) = r7;
    0x00002b06 subs r1, r3, 1                |             r1 = r3 - 1;
    0x00002b08 cmp r1, 1                     |             
                                             |             if (r1 > 1) {
    0x00002b0a bhi 0x2bd0                    |                 goto label_82;
                                             |             }
    0x00002b0c mov r1, sb                    |             r1 = sb;
    0x00002b0e movs r2, 0x3e                 |             r2 = 0x3e;
    0x00002b10 add.w sb, r0, 1               |             sb = r0 + 1;
    0x00002b14 addw r0, sp, 0x101            |             __asm ("addw r0, arg_101h");
    0x00002b16 asrs r1, r0, 0x20             |             r1 = r0 >> 0x20;
    0x00002b18 blx 0x17c0                    |             strcpy_chk ()
    0x00002b1c mov r1, r5                    |             r1 = r5;
    0x00002b1e mov r0, sb                    |             r0 = sb;
    0x00002b20 blx 0x18a4                    |             r0 = strchr (r0, r1);
                                             |             if (r0 == 0) {
    0x00002b24 cbz r0, 0x2b40                |                 goto label_81;
                                             |             }
    0x00002b26 strb r7, [r0]                 |             *(r0) = r7;
    0x00002b28 mov r1, r7                    |             r1 = r7;
    0x00002b2a mov r0, sb                    |             r0 = sb;
    0x00002b2c movs r2, 0xa                  |             r2 = 0xa;
    0x00002b2e blx 0x1610                    |             strtol (r0, r1, r2);
    0x00002b32 str.w r0, [r8, 4]             |             __asm ("str.w r0, [r8, 4]");
    0x00002b36 mov r0, r8                    |             r0 = r8;
    0x00002b38 bl 0x3b50                     |             r0 = fcn_00003b50 (r0);
    0x00002b3c cmp r0, 0                     |             
                                             |             if (r0 == 0) {
    0x00002b3e beq 0x2bbe                    |                 goto label_83;
                                             |             }
                                             |         }
                                             | label_81:
    0x00002b40 ldr.w r3, [pc, 0x964]         |         r3 = *(0x000034a8);
    0x00002b44 add r3, pc                    |         r3 += pc;
    0x00002b46 ldr r5, [r3, 0x14]            |         r5 = *((r3 + 0x14));
    0x00002b48 b 0x247e                      |         goto label_3;
                                             |     }
                                             | label_27:
    0x00002b4a ldr.w r5, [sl, 0x74]          |     r5 = *((sl + 0x74));
    0x00002b4e b 0x247e                      |     goto label_3;
                                             | label_80:
    0x00002b50 ldr r3, [sp, 0x1c]            |     r3 = *(str);
    0x00002b52 ldr.w r5, [r3, 0x88]          |     r5 = *((r3 + 0x88));
    0x00002b56 b 0x247e                      |     goto label_3;
                                             | label_78:
    0x00002b58 movs r0, 2                    |     r0 = 2;
                                             | label_6:
    0x00002b5a bl 0x3a0c                     |     r0 = fcn_00003a0c (r0);
    0x00002b5e subs r5, r0, 0                |     r5 = r0 - 0;
                                             |     if (r5 >= r0) {
    0x00002b60 blt 0x2b82                    |         
    0x00002b62 movs r3, 0x80                 |         r3 = 0x80;
    0x00002b64 mov r2, r7                    |         r2 = r7;
    0x00002b66 mov r1, r6                    |         r1 = r6;
    0x00002b68 str r3, [r7]                  |         *(r7) = r3;
    0x00002b6a blx 0x1a2c                    |         r0 = fcn_00001a2c ();
    0x00002b6e cmp r0, 0                     |         
                                             |         if (r0 >= 0) {
    0x00002b70 blt 0x2b7c                    |             
    0x00002b72 ldrh r3, [r6]                 |             r3 = *(r6);
    0x00002b74 cmp r3, 2                     |             
                                             |             if (r3 == 2) {
    0x00002b76 beq 0x2c0c                    |                 goto label_84;
                                             |             }
    0x00002b78 cmp r3, 0xa                   |             
                                             |             if (r3 == 0xa) {
    0x00002b7a beq 0x2c0c                    |                 goto label_84;
                                             |             }
                                             |         }
                                             | label_7:
    0x00002b7c mov r0, r5                    |         r0 = r5;
    0x00002b7e blx 0x1ab4                    |         fdipc_client_socket ();
                                             |     }
    0x00002b82 ldr.w r3, [pc, 0x928]         |     r3 = *(0x000034ac);
    0x00002b86 add r3, pc                    |     r3 += pc;
    0x00002b88 ldr r5, [r3, 0x14]            |     r5 = *((r3 + 0x14));
    0x00002b8a b 0x247e                      |     goto label_3;
                                             | label_73:
    0x00002b8c addw r0, sp, 0x39d            |     __asm ("addw r0, path");
    0x00002b90 bl 0x3b2c                     |     fcn_00003b2c (r0);
    0x00002b94 ldr r5, [sp, 0x34]            |     r5 = *(dest);
    0x00002b96 mov r1, r0                    |     r1 = r0;
    0x00002b98 mov.w r2, 0x100               |     r2 = 0x100;
    0x00002b9c mov r0, r5                    |     r0 = r5;
    0x00002b9e blx 0x1940                    |     strncpy (r0, r1, r2);
    0x00002ba2 mov r1, sl                    |     r1 = sl;
    0x00002ba4 mov r0, r5                    |     r0 = r5;
    0x00002ba6 strb.w sl, [r5, 0x100]        |     *((r5 + 0x100)) = sl;
    0x00002baa blx 0x1968                    |     r0 = fcn_00001968 ();
    0x00002bae cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x00002bb0 bne.w 0x299e                  |         goto label_4;
                                             |     }
    0x00002bb4 ldr.w r5, [sb, 0xd4]          |     r5 = *((sb + 0xd4));
    0x00002bb8 b 0x247e                      |     goto label_3;
                                             | label_79:
    0x00002bba movs r0, 0xa                  |     r0 = 0xa;
    0x00002bbc b 0x2b5a                      |     goto label_6;
                                             | label_83:
    0x00002bbe ldr.w r0, [r8, 8]             |     r0 = *((r8 + 8));
    0x00002bc2 cmp r0, 0                     |     
    0x00002bc4 bge 0x2be4                    |     
                                             |     while (1) {
    0x00002bc6 ldr.w r3, [pc, 0x8e8]         |         r3 = *(0x000034b0);
    0x00002bca add r3, pc                    |         r3 += pc;
    0x00002bcc ldr r5, [r3, 0x54]            |         r5 = *((r3 + 0x54));
    0x00002bce b 0x247e                      |         goto label_3;
                                             | label_82:
    0x00002bd0 ldr.w r2, [pc, 0x8e0]         |         
    0x00002bd4 movs r1, 1                    |         r1 = 1;
    0x00002bd6 movs r0, 6                    |         r0 = 6;
    0x00002bd8 add r2, pc                    |         r2 = 0x6090;
    0x00002bda blx 0x19cc                    |         fcn_000019cc ();
    0x00002bde ldr.w r5, [sl, 0xe0]          |         r5 = *((sl + 0xe0));
    0x00002be2 b 0x247e                      |         goto label_3;
    0x00002be4 blx 0x1ab4                    |         fdipc_client_socket ();
    0x00002be8 mov.w r3, -1                  |         r3 = -1;
    0x00002bec str.w r3, [r8, 8]             |         __asm ("str.w r3, [r8, 8]");
    0x00002bf0 b 0x2bc6                      |         
                                             |     }
                                             | label_76:
    0x00002bf2 ldr.w r3, [r8]                |     r3 = *(r8);
    0x00002bf6 ldrh r0, [r3]                 |     r0 = *(r3);
    0x00002bf8 b 0x2b5a                      |     goto label_6;
                                             | label_31:
    0x00002bfa ldr.w r5, [sb, 0xb4]          |     r5 = *((sb + 0xb4));
    0x00002bfe b 0x247e                      |     goto label_3;
                                             | label_77:
    0x00002c00 movs r3, 1                    |     r3 = 1;
    0x00002c02 ldr.w r5, [sb, 0x54]          |     r5 = *((sb + 0x54));
    0x00002c06 strb.w r3, [r8, 0xc]          |     *((r8 + 0xc)) = r3;
    0x00002c0a b 0x247e                      |     goto label_3;
                                             | label_84:
    0x00002c0c ldrh r7, [r6, 2]              |     r7 = *((r6 + 2));
    0x00002c0e rev16 r7, r7                  |     __asm ("rev16 r7, r7");
    0x00002c10 uxth r7, r7                   |     r7 = (int16_t) r7;
    0x00002c12 cmp r7, 0                     |     
                                             |     if (r7 == 0) {
    0x00002c14 beq 0x2b7c                    |         goto label_7;
                                             |     }
    0x00002c16 ldr.w r0, [r8, 8]             |     r0 = *((r8 + 8));
    0x00002c1a cmp r0, 0                     |     
                                             |     if (r0 >= 0) {
    0x00002c1c blt 0x2c22                    |         
    0x00002c1e blx 0x1ab4                    |         fdipc_client_socket ();
                                             |     }
    0x00002c22 ldr.w r3, [pc, 0x894]         |     
    0x00002c26 movs r2, 1                    |     r2 = 1;
    0x00002c28 str r7, [sp, 4]               |     var_4h = r7;
    0x00002c2a mov r0, fp                    |     r0 = fp;
    0x00002c2c str.w r5, [r8, 8]             |     __asm ("str.w r5, [r8, 8]");
    0x00002c30 add r3, pc                    |     r3 = 0x60ee;
    0x00002c32 str r3, [sp]                  |     *(sp) = r3;
    0x00002c34 movs r3, 0x50                 |     r3 = 0x50;
    0x00002c36 mov r1, r3                    |     r1 = r3;
    0x00002c38 blx 0x1afc                    |     fcn_00001afc ();
                                             | label_12:
    0x00002c3c mov r0, fp                    |     r0 = fp;
    0x00002c3e blx 0x1898                    |     strlen (r0);
    0x00002c42 mov r1, fp                    |     r1 = fp;
    0x00002c44 mov r2, r0                    |     r2 = r0;
    0x00002c46 mov r0, r4                    |     r0 = r4;
    0x00002c48 blx 0x195c                    |     fcn_0000195c ();
    0x00002c4c b.w 0x2142                    |     goto label_2;
                                             | label_61:
    0x00002c50 movw r0, 0x1ff4               |     r0 = 0x1ff4;
    0x00002c54 blx 0x17f0                    |     r0 = malloc (r0);
    0x00002c58 mov sb, r0                    |     sb = r0;
    0x00002c5a cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00002c5c beq 0x2d28                    |         goto label_85;
                                             |     }
    0x00002c5e blx 0x18d4                    |     errno_location ();
    0x00002c62 str.w r8, [sp, 0x2c]          |     __asm ("str.w r8, [fildes]");
    0x00002c66 mov r8, r6                    |     r8 = r6;
    0x00002c68 mov r6, sl                    |     r6 = sl;
    0x00002c6a movs r3, 0                    |     r3 = 0;
    0x00002c6c str r0, [sp, 0x30]            |     *(arg_30h) = r0;
    0x00002c6e str r3, [r0]                  |     *(r0) = r3;
    0x00002c70 str r4, [sp, 0x1c]            |     *(str) = r4;
                                             | label_8:
    0x00002c72 movw r2, 0x1ff4               |     r2 = 0x1ff4;
    0x00002c76 mov r1, sb                    |     r1 = sb;
    0x00002c78 mov r0, r5                    |     r0 = r5;
    0x00002c7a blx 0x1640                    |     r0 = read (r0, r1, r2);
    0x00002c7e subs r4, r0, 0                |     r4 = r0 - 0;
                                             |     if (r4 <= r0) {
    0x00002c80 ble 0x2d10                    |         goto label_86;
                                             |     }
    0x00002c82 mov sl, r8                    |     sl = r8;
    0x00002c84 add r6, r4                    |     r6 += r4;
    0x00002c86 mov r1, sb                    |     r1 = sb;
    0x00002c88 mov r8, r4                    |     r8 = r4;
                                             |     do {
                                             | label_9:
    0x00002c8a mov r2, r4                    |         r2 = r4;
    0x00002c8c mov r0, r7                    |         r0 = r7;
    0x00002c8e str r1, [sp, 0x38]            |         *(arg_38h) = r1;
    0x00002c90 blx 0x195c                    |         r0 = fcn_0000195c ();
    0x00002c94 cmp r0, 0                     |         
    0x00002c96 ldr r1, [sp, 0x38]            |         r1 = *(arg_38h);
                                             |         if (r0 < 0) {
    0x00002c98 blt 0x2cc2                    |             goto label_87;
                                             |         }
    0x00002c9a subs r4, r4, r0               |         r4 -= r0;
    0x00002c9c add r1, r0                    |         r1 += r0;
    0x00002c9e bne 0x2c8a                    |         
                                             |     } while (r4 != r4);
    0x00002ca0 mov r8, sl                    |     r8 = sl;
    0x00002ca2 b 0x2c72                      |     goto label_8;
                                             | label_60:
    0x00002ca4 ldr.w r7, [sb, 0x20]          |     r7 = *((sb + 0x20));
    0x00002ca8 mov r0, r7                    |     r0 = r7;
    0x00002caa blx 0x1898                    |     strlen (r0);
    0x00002cae mov r1, r7                    |     r1 = r7;
    0x00002cb0 mov r2, r0                    |     r2 = r0;
    0x00002cb2 mov r0, r4                    |     r0 = r4;
    0x00002cb4 blx 0x195c                    |     fcn_0000195c ();
    0x00002cb8 mov r0, r5                    |     r0 = r5;
    0x00002cba blx 0x1ab4                    |     fdipc_client_socket ();
    0x00002cbe b.w 0x2142                    |     goto label_2;
                                             | label_87:
    0x00002cc2 ldr r3, [sp, 0x30]            |     r3 = *(arg_30h);
    0x00002cc4 ldr r3, [r3]                  |     r3 = *(r3);
    0x00002cc6 cmp r3, 4                     |     
                                             |     if (r3 == 4) {
    0x00002cc8 beq 0x2c8a                    |         goto label_9;
                                             |     }
    0x00002cca cmp r3, 0xb                   |     
                                             |     if (r3 == 0xb) {
    0x00002ccc beq 0x2c8a                    |         goto label_9;
                                             |     }
    0x00002cce mov r2, sl                    |     r2 = sl;
    0x00002cd0 mov sl, r6                    |     sl = r6;
    0x00002cd2 mov r6, r2                    |     r6 = r2;
    0x00002cd4 ldr.w r2, [pc, 0x7e4]         |     
    0x00002cd8 mov ip, r3                    |     
    0x00002cda str r0, [sp]                  |     *(sp) = r0;
    0x00002cdc mov r3, r8                    |     r3 = r8;
    0x00002cde movs r1, 1                    |     r1 = 1;
    0x00002ce0 add r2, pc                    |     r2 = 0x61a0;
    0x00002ce2 movs r0, 7                    |     r0 = 7;
    0x00002ce4 strd sl, ip, [sp, 4]          |     __asm ("strd sl, ip, [sp, 4]");
    0x00002ce8 ldr r4, [sp, 0x1c]            |     r4 = *(str);
    0x00002cea ldr.w r8, [sp, 0x2c]          |     r8 = *(fildes);
    0x00002cee blx 0x19cc                    |     fcn_000019cc ();
                                             | label_10:
    0x00002cf2 mov r0, r5                    |     r0 = r5;
    0x00002cf4 blx 0x1ab4                    |     fdipc_client_socket ();
    0x00002cf8 mov r0, r7                    |     r0 = r7;
    0x00002cfa blx 0x1ab4                    |     fdipc_client_socket ();
    0x00002cfe mov r0, sb                    |     r0 = sb;
    0x00002d00 blx 0x1664                    |     free (r0);
    0x00002d04 ldr.w r3, [pc, 0x7b8]         |     r3 = *(0x000034c0);
    0x00002d08 add r3, pc                    |     r3 += pc;
    0x00002d0a ldr r5, [r3, 0x24]            |     r5 = *((r3 + 0x24));
    0x00002d0c b.w 0x247e                    |     goto label_3;
                                             |     if (r0 == 7) {
                                             | label_86:
    0x00002d10 beq 0x2d1e                    |         goto label_88;
                                             |     }
    0x00002d12 ldr r3, [sp, 0x30]            |     r3 = *(arg_30h);
    0x00002d14 ldr r2, [r3]                  |     r2 = *(r3);
    0x00002d16 cmp r2, 4                     |     
                                             |     if (r2 == 4) {
    0x00002d18 beq 0x2c72                    |         goto label_8;
                                             |     }
    0x00002d1a cmp r2, 0xb                   |     
                                             |     if (r2 == 0xb) {
    0x00002d1c beq 0x2c72                    |         goto label_8;
                                             |     }
                                             | label_88:
    0x00002d1e mov r6, r8                    |     r6 = r8;
    0x00002d20 ldr r4, [sp, 0x1c]            |     r4 = *(str);
    0x00002d22 ldr.w r8, [sp, 0x2c]          |     r8 = *(fildes);
    0x00002d26 b 0x2cf2                      |     goto label_10;
                                             | label_85:
    0x00002d28 ldr.w r2, [pc, 0x798]         |     
    0x00002d2c add r2, pc                    |     r2 = 0x61f4;
                                             | label_14:
    0x00002d2e movs r1, 1                    |     r1 = 1;
    0x00002d30 movs r0, 3                    |     r0 = 3;
    0x00002d32 blx 0x19cc                    |     fcn_000019cc ();
    0x00002d36 b 0x299e                      |     goto label_4;
                                             | label_64:
    0x00002d38 ldrd r3, r2, [r6]             |     __asm ("ldrd r3, r2, [r6]");
    0x00002d3c orrs r3, r2                   |     r3 |= r2;
                                             |     if (r3 != r2) {
    0x00002d3e bne.w 0x26bc                  |         goto label_11;
                                             |     }
    0x00002d42 ldr r3, [r6, 8]               |     r3 = *((r6 + 8));
    0x00002d44 cmn.w r3, 0x10000             |     
                                             |     if (r3 != 0x10000) {
    0x00002d48 bne.w 0x26bc                  |         goto label_11;
                                             |     }
                                             | label_63:
    0x00002d4c ldrh r7, [r6, 2]              |     r7 = *((r6 + 2));
    0x00002d4e rev16 r7, r7                  |     __asm ("rev16 r7, r7");
    0x00002d50 uxth r7, r7                   |     r7 = (int16_t) r7;
    0x00002d52 cmp.w sb, 0                   |     
                                             |     if (sb == 0) {
    0x00002d56 beq.w 0x26bc                  |         goto label_11;
                                             |     }
    0x00002d5a cmp r7, 0                     |     
                                             |     if (r7 == 0) {
    0x00002d5c beq.w 0x26bc                  |         goto label_11;
                                             |     }
    0x00002d60 ldr.w r0, [r8, 8]             |     r0 = *((r8 + 8));
    0x00002d64 cmp r0, 0                     |     
                                             |     if (r0 >= 0) {
    0x00002d66 blt 0x2d6c                    |         
    0x00002d68 blx 0x1ab4                    |         fdipc_client_socket ();
                                             |     }
    0x00002d6c uxtb r3, r7                   |     r3 = (int8_t) r7;
    0x00002d6e str.w r5, [r8, 8]             |     __asm ("str.w r5, [r8, 8]");
    0x00002d72 asrs r7, r7, 8                |     r7 >>= 8;
    0x00002d74 movs r2, 0x50                 |     r2 = 0x50;
    0x00002d76 str r3, [sp, 0x14]            |     *(arg_14h) = r3;
    0x00002d78 uxtb.w r3, sb                 |     r3 = (int8_t) sb;
    0x00002d7c movs r1, 1                    |     r1 = 1;
    0x00002d7e str r7, [sp, 0x10]            |     *(arg_10h) = r7;
    0x00002d80 str r3, [sp, 0xc]             |     *(arg_ch) = r3;
    0x00002d82 lsr.w r3, sb, 0x18            |     r3 = sb >> 0x18;
    0x00002d86 mov r0, fp                    |     r0 = fp;
    0x00002d88 str r3, [sp]                  |     *(sp) = r3;
    0x00002d8a ubfx r3, sb, 8, 8             |     r3 = (sb >> 8) & ((1 << 8) - 1);
    0x00002d8e str r3, [sp, 8]               |     *(arg_8h) = r3;
    0x00002d90 ubfx r3, sb, 0x10, 8          |     r3 = (sb >> 0x10) & ((1 << 8) - 1);
    0x00002d94 str r3, [sp, 4]               |     var_4h = r3;
    0x00002d96 ldr.w r3, [pc, 0x730]         |     
    0x00002d9a add r3, pc                    |     r3 = 0x6268;
    0x00002d9c blx 0x18f8                    |     sprintf_chk ();
    0x00002da0 b 0x2c3c                      |     goto label_12;
                                             | label_62:
    0x00002da2 ldr.w r1, [pc, 0x728]         |     
    0x00002da6 mov r0, r5                    |     r0 = r5;
    0x00002da8 add r1, pc                    |     r1 = 0x627a;
    0x00002daa blx 0x15c8                    |     r0 = fdopen ();
    0x00002dae mov sb, r0                    |     sb = r0;
    0x00002db0 movw r0, 0x1ff4               |     r0 = 0x1ff4;
    0x00002db4 blx 0x17f0                    |     r0 = malloc (r0);
    0x00002db8 mov r5, r0                    |     r5 = r0;
    0x00002dba cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00002dbc beq 0x2e64                    |         goto label_89;
                                             |     }
    0x00002dbe mov r0, sb                    |     r0 = sb;
    0x00002dc0 blx 0x1a14                    |     fcn_00001a14 ();
    0x00002dc4 b 0x2e00                      |     
                                             |     while (r0 != 0) {
                                             | label_13:
    0x00002dc6 mov r0, sb                    |         r0 = sb;
    0x00002dc8 blx 0x1688                    |         r0 = ferror (r0);
                                             |         if (r0 != 0) {
    0x00002dcc cbnz r0, 0x2e38               |             goto label_90;
                                             |         }
    0x00002dce mov r0, sb                    |         r0 = sb;
    0x00002dd0 blx 0x1880                    |         r0 = feof (r0);
    0x00002dd4 mov sl, r0                    |         sl = r0;
                                             |         if (r0 == 0) {
    0x00002dd6 cbnz r0, 0x2dfc               |             
    0x00002dd8 mov r0, r5                    |             r0 = r5;
    0x00002dda blx 0x1898                    |             r0 = strlen (r0);
    0x00002dde mov r3, r0                    |             r3 = r0;
                                             |             if (r0 != 0) {
    0x00002de0 cbz r0, 0x2df2                |                 
    0x00002de2 subs r1, r0, 1                |                 r1 = r0 - 1;
    0x00002de4 mov sl, r0                    |                 sl = r0;
    0x00002de6 ldrb.w ip, [r5, r1]           |                 ip = *((r5 + r1));
    0x00002dea adds r0, r5, r1               |                 r0 = r5 + r1;
    0x00002dec cmp.w ip, 0xa                 |                 
                                             |                 if (ip == 0xa) {
    0x00002df0 beq 0x2e74                    |                     goto label_91;
                                             |                 }
                                             |             }
                                             | label_15:
    0x00002df2 mov r2, sl                    |             r2 = sl;
    0x00002df4 mov r1, r5                    |             r1 = r5;
    0x00002df6 mov r0, r7                    |             r0 = r7;
    0x00002df8 bl 0x4034                     |             fcn_00004034 (r0, r1, r2);
                                             |         }
    0x00002dfc movs r3, 0                    |         r3 = 0;
    0x00002dfe strb r3, [r5]                 |         *(r5) = r3;
    0x00002e00 mov r2, sb                    |         r2 = sb;
    0x00002e02 movw r1, 0x1ff3               |         r1 = 0x1ff3;
    0x00002e06 mov r0, r5                    |         r0 = r5;
    0x00002e08 blx 0x167c                    |         r0 = fgets (r0, r1, r2);
    0x00002e0c cmp r0, 0                     |         
    0x00002e0e bne 0x2dc6                    |         
                                             |     }
    0x00002e10 mov r0, sb                    |     r0 = sb;
    0x00002e12 blx 0x1880                    |     r0 = feof (r0);
    0x00002e16 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00002e18 beq 0x2dc6                    |         goto label_13;
                                             |     }
    0x00002e1a mov r0, sb                    |     r0 = sb;
    0x00002e1c blx 0x198c                    |     fcn_0000198c ();
    0x00002e20 mov r0, r7                    |     r0 = r7;
    0x00002e22 blx 0x1ab4                    |     fdipc_client_socket ();
    0x00002e26 mov r0, r5                    |     r0 = r5;
    0x00002e28 blx 0x1664                    |     free (r0);
    0x00002e2c ldr.w r3, [pc, 0x6a0]         |     r3 = *(0x000034d0);
    0x00002e2e adds r6, 0xa0                 |     r6 += 0xa0;
    0x00002e30 add r3, pc                    |     r3 += pc;
    0x00002e32 ldr r5, [r3, 0x24]            |     r5 = *((r3 + 0x24));
    0x00002e34 b.w 0x247e                    |     goto label_3;
                                             | label_90:
    0x00002e38 mov r0, sb                    |     r0 = sb;
    0x00002e3a blx 0x1880                    |     r0 = feof (r0);
    0x00002e3e mov sl, r0                    |     sl = r0;
    0x00002e40 mov r0, sb                    |     r0 = sb;
    0x00002e42 blx 0x1688                    |     ferror (r0);
    0x00002e46 str r0, [sp, 0x1c]            |     *(str) = r0;
    0x00002e48 blx 0x18d4                    |     errno_location ();
    0x00002e4c ldr r2, [sp, 0x1c]            |     r2 = *(str);
    0x00002e4e mov r3, sl                    |     r3 = sl;
    0x00002e50 str r5, [sp, 8]               |     *(arg_8h) = r5;
    0x00002e52 ldr r1, [r0]                  |     r1 = *(r0);
    0x00002e54 movs r0, 6                    |     r0 = 6;
    0x00002e56 strd r2, r1, [sp]             |     __asm ("strd r2, r1, [sp]");
    0x00002e5a movs r1, 1                    |     r1 = 1;
    0x00002e5c ldr r2, [sp, 0x48]            |     r2 = *(arg_48h);
    0x00002e5e blx 0x19cc                    |     fcn_000019cc ();
    0x00002e60 ldc p7, c14, [r6, 0x2d0]!     |     __asm ("ldc p7, c14, [r6, 0x2d0]!");
                                             | label_89:
    0x00002e64 ldr.w r2, [pc, 0x66c]         |     
    0x00002e68 add r2, pc                    |     r2 = 0x6340;
    0x00002e6a b 0x2d2e                      |     goto label_14;
                                             | label_54:
    0x00002e6c ldr r3, [sp, 0x1c]            |     r3 = *(str);
    0x00002e6e ldr r5, [r3, 0x74]            |     r5 = *((r3 + 0x74));
    0x00002e70 b.w 0x247e                    |     goto label_3;
                                             | label_91:
    0x00002e74 cmp r3, 1                     |     
                                             |     if (r3 == 1) {
    0x00002e76 beq 0x2e86                    |         goto label_92;
                                             |     }
    0x00002e78 add.w ip, r5, r3              |     
    0x00002e7c ldrb ip, [ip, -0x2]           |     ip = *((ip - 0x2));
    0x00002e80 cmp.w ip, 0xd                 |     
                                             |     if (ip == 0xd) {
    0x00002e84 beq 0x2df2                    |         goto label_15;
                                             |     }
                                             | label_92:
    0x00002e86 ldr r2, [sp, 0x4c]            |     r2 = *(arg_4ch);
    0x00002e88 add.w sl, r3, 1               |     sl = r3 + 1;
    0x00002e8c ldrh r3, [r2]                 |     r3 = *(r2);
    0x00002e8e strh r3, [r5, r1]             |     *((r5 + r1)) = r3;
    0x00002e90 ldrb r3, [r2, 2]              |     r3 = *((r2 + 2));
    0x00002e92 strb r3, [r0, 2]              |     *((r0 + 2)) = r3;
    0x00002e94 b 0x2df2                      |     goto label_15;
                                             | label_51:
    0x00002e96 addw r0, sp, 0x39d            |     __asm ("addw r0, path");
    0x00002e9a add.w sl, sp, 0x6c            |     sl += arg_6ch;
    0x00002e9e bl 0x3b2c                     |     fcn_00003b2c (r0);
    0x00002ea2 add r3, sp, 0x68              |     r3 += arg_68h;
    0x00002ea4 add r2, sp, 0x64              |     r2 += arg_64h;
    0x00002ea6 str r3, [sp, 0x2c]            |     *(fildes) = r3;
    0x00002ea8 movs r1, 1                    |     r1 = 1;
    0x00002eaa str r3, [sp]                  |     *(sp) = r3;
    0x00002eac mov r3, sl                    |     r3 = sl;
    0x00002eae str r4, [sp, 4]               |     var_4h = r4;
    0x00002eb0 mov sb, r0                    |     sb = r0;
    0x00002eb2 str r2, [sp, 0x1c]            |     *(str) = r2;
    0x00002eb4 bl 0x45cc                     |     r0 = fcn_000045cc (r0, r1, r2, r3, r4, r5, r6);
    0x00002eb8 mov r5, r0                    |     r5 = r0;
    0x00002eba cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00002ebc beq.w 0x3196                  |         goto label_93;
                                             |     }
                                             | label_22:
    0x00002ec0 cmp r5, 0                     |     
                                             |     if (r5 <= 0) {
    0x00002ec2 ble.w 0x299e                  |         goto label_4;
                                             |     }
    0x00002ec6 ldr r3, [sp, 0x1c]            |     r3 = *(str);
    0x00002ec8 ldr r3, [r3]                  |     r3 = *(r3);
    0x00002eca cmp r3, 2                     |     
                                             |     if (r3 == 2) {
    0x00002ecc beq.w 0x3150                  |         goto label_94;
                                             |     }
                                             | label_34:
    0x00002ed0 movw r0, 0x1ff4               |     r0 = 0x1ff4;
    0x00002ed4 blx 0x17f0                    |     r0 = malloc (r0);
    0x00002ed8 mov r7, r0                    |     r7 = r0;
    0x00002eda cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00002edc beq.w 0x3134                  |         goto label_95;
                                             |     }
    0x00002ee0 ldr.w r3, [pc, 0x5f4]         |     r3 = *(0x000034d8);
    0x00002ee4 add r3, pc                    |     r3 += pc;
    0x00002ee6 ldr r1, [r3, 0x1c]            |     r1 = *((r3 + 0x1c));
    0x00002ee8 str r3, [sp, 0x30]            |     *(arg_30h) = r3;
    0x00002eea mov r0, r1                    |     r0 = r1;
    0x00002eec str r1, [sp, 0x2c]            |     *(fildes) = r1;
    0x00002eee blx 0x1898                    |     strlen (r0);
    0x00002ef2 ldr r1, [sp, 0x2c]            |     r1 = *(fildes);
    0x00002ef4 mov r2, r0                    |     r2 = r0;
    0x00002ef6 mov r0, r4                    |     r0 = r4;
    0x00002ef8 blx 0x195c                    |     fcn_0000195c ();
    0x00002efc mov r0, r8                    |     r0 = r8;
    0x00002efe bl 0x3c44                     |     r0 = fcn_00003c44 (r0);
    0x00002f02 subs r3, r0, 0                |     r3 = r0 - 0;
    0x00002f04 str r3, [sp, 0x2c]            |     *(fildes) = r3;
    0x00002f06 ldr r3, [sp, 0x30]            |     r3 = *(arg_30h);
                                             |     if (r3 < r0) {
    0x00002f08 blt.w 0x3118                  |         goto label_96;
                                             |     }
    0x00002f0c ldr r2, [sp, 0x1c]            |     r2 = *(str);
    0x00002f0e ldr r2, [r2]                  |     r2 = *(r2);
    0x00002f10 cmp r2, 2                     |     
                                             |     if (r2 == 2) {
    0x00002f12 beq.w 0x3100                  |         goto label_97;
                                             |     }
                                             | label_20:
    0x00002f16 ldr.w r3, [pc, 0x5c4]         |     r3 = *(0x000034dc);
    0x00002f1a add r3, pc                    |     r3 += pc;
    0x00002f1c ldrb.w r3, [r3, 0x74]         |     r3 = *((r3 + 0x74));
    0x00002f20 cmp r3, 0x49                  |     
                                             |     if (r3 == 0x49) {
    0x00002f22 beq.w 0x302a                  |         goto label_98;
                                             |     }
    0x00002f26 cmp r3, 0x41                  |     
                                             |     if (r3 != 0x41) {
    0x00002f28 bne 0x3018                    |         goto label_99;
                                             |     }
    0x00002f2a ldr.w r2, [pc, 0x5b4]         |     
    0x00002f2e mov r3, sb                    |     r3 = sb;
    0x00002f30 movs r1, 1                    |     r1 = 1;
    0x00002f32 movs r0, 7                    |     r0 = 7;
    0x00002f34 add r2, pc                    |     r2 = 0x641a;
    0x00002f36 blx 0x19cc                    |     fcn_000019cc ();
    0x00002f3a ldr.w r1, [pc, 0x5a8]         |     
    0x00002f3e ldr r0, [sp, 0x2c]            |     r0 = *(fildes);
    0x00002f40 add r1, pc                    |     r1 = 0x642a;
    0x00002f42 blx 0x15c8                    |     fdopen ();
    0x00002f46 ldr.w r1, [pc, 0x5a0]         |     
    0x00002f4a str r0, [sp, 0x2c]            |     *(fildes) = r0;
    0x00002f4c mov r0, r5                    |     r0 = r5;
    0x00002f4e add r1, pc                    |     r1 = 0x643c;
    0x00002f50 blx 0x15c8                    |     fdopen ();
    0x00002f54 str r0, [sp, 0x30]            |     *(arg_30h) = r0;
                                             |     do {
    0x00002f56 ldr r2, [sp, 0x2c]            |         r2 = *(fildes);
    0x00002f58 movw r1, 0x1ff3               |         r1 = 0x1ff3;
    0x00002f5c mov r0, r7                    |         r0 = r7;
    0x00002f5e blx 0x167c                    |         r0 = fgets (r0, r1, r2);
    0x00002f62 cmp r0, 0                     |         
                                             |         if (r0 == 0) {
    0x00002f64 beq 0x2fd0                    |             goto label_100;
                                             |         }
    0x00002f66 mov r0, r7                    |         r0 = r7;
    0x00002f68 blx 0x1898                    |         r0 = strlen (r0);
    0x00002f6c cmp r0, 1                     |         
                                             |         if (r0 >= 1) {
    0x00002f6e bls 0x2f86                    |             
    0x00002f70 subs r2, r0, 2                |             r2 = r0 - 2;
    0x00002f72 ldrb r1, [r7, r2]             |             r1 = *((r7 + r2));
    0x00002f74 cmp r1, 0xd                   |             
                                             |             if (r1 != 0xd) {
    0x00002f76 bne 0x2f86                    |                 goto label_101;
                                             |             }
    0x00002f78 subs r3, r0, 1                |             r3 = r0 - 1;
    0x00002f7a ldrb r1, [r7, r3]             |             r1 = *((r7 + r3));
    0x00002f7c cmp r1, 0xa                   |             
    0x00002f7e ittt eq                       |             
                                             |             if (r1 != 0xa) {
    0x00002f80 strbeq r1, [r7, r2]           |                 *((r7 + r2)) = r1;
                                             |             }
                                             |             if (r1 != 0xa) {
    0x00002f82 moveq r2, 0                   |                 r2 = 0;
                                             |             }
                                             |             if (r1 == 0xa) {
    0x00002f84 strbeq r2, [r7, r3]           |                 *((r7 + r3)) = r2;
                                             |                 goto label_101;
                                             |             }
                                             |         }
                                             | label_101:
    0x00002f86 ldr r1, [sp, 0x30]            |         r1 = *(arg_30h);
    0x00002f88 mov r0, r7                    |         r0 = r7;
    0x00002f8a blx 0x1a8c                    |         fcn_00001a8c ();
    0x00002f8e adds r0, 1                    |         r0++;
    0x00002f90 bne 0x2f56                    |         
                                             |     } while (r0 != 1);
    0x00002f92 ldr.w r3, [pc, 0x558]         |     r3 = *(0x000034ec);
    0x00002f96 add r3, pc                    |     r3 += pc;
    0x00002f98 ldr r1, [r3, 0x10]            |     r1 = *((r3 + 0x10));
    0x00002f9a mov r0, r1                    |     r0 = r1;
    0x00002f9c str r1, [sp, 0x38]            |     *(arg_38h) = r1;
    0x00002f9e blx 0x1898                    |     strlen (r0);
    0x00002fa2 ldr r1, [sp, 0x38]            |     r1 = *(arg_38h);
    0x00002fa4 mov r2, r0                    |     r2 = r0;
    0x00002fa6 mov r0, r4                    |     r0 = r4;
    0x00002fa8 blx 0x195c                    |     fcn_0000195c ();
    0x00002fac mov r0, r5                    |     r0 = r5;
    0x00002fae movs r1, 0                    |     r1 = 0;
    0x00002fb0 blx 0x1980                    |     r0 = fcn_00001980 ();
    0x00002fb4 cmp r0, 0                     |     
                                             |     if (r0 < 0) {
    0x00002fb6 bge 0x2fd0                    |         
    0x00002fb8 blx 0x18d4                    |         errno_location ();
    0x00002fbc ldr.w r2, [pc, 0x530]         |         
    0x00002fc0 movs r1, 1                    |         r1 = 1;
    0x00002fc2 ldr r3, [r0]                  |         r3 = *(r0);
    0x00002fc4 movs r0, 3                    |         r0 = 3;
    0x00002fc6 add r2, pc                    |         r2 = 0x64ba;
    0x00002fc8 str r3, [sp]                  |         *(sp) = r3;
    0x00002fca mov r3, sb                    |         r3 = sb;
    0x00002fcc blx 0x19cc                    |         fcn_000019cc ();
                                             |     }
                                             | label_100:
    0x00002fd0 ldr r0, [sp, 0x2c]            |     r0 = *(fildes);
    0x00002fd2 blx 0x198c                    |     fcn_0000198c ();
    0x00002fd6 ldr r0, [sp, 0x30]            |     r0 = *(arg_30h);
    0x00002fd8 blx 0x198c                    |     fcn_0000198c ();
    0x00002fdc mov r0, r7                    |     r0 = r7;
    0x00002fde blx 0x1664                    |     free (r0);
                                             | label_18:
    0x00002fe2 ldr r3, [sp, 0x1c]            |     r3 = *(str);
    0x00002fe4 ldr r3, [r3]                  |     r3 = *(r3);
    0x00002fe6 cmp r3, 2                     |     
                                             |     if (r3 == 2) {
    0x00002fe8 beq 0x2ff6                    |         goto label_102;
                                             |     }
    0x00002fea ldr.w r3, [pc, 0x508]         |     r3 = *(0x000034f4);
    0x00002fee add r3, pc                    |     r3 += pc;
    0x00002ff0 ldr r5, [r3, 0x24]            |     r5 = *((r3 + 0x24));
    0x00002ff2 b.w 0x247e                    |     goto label_3;
                                             |     do {
                                             | label_102:
    0x00002ff6 movs r2, 0                    |         r2 = 0;
    0x00002ff8 ldr.w r0, [sl]                |         r0 = *(sl);
    0x00002ffc mov r1, r2                    |         r1 = r2;
    0x00002ffe blx 0x17b4                    |         waitpid ();
    0x00003002 ldr.w r3, [sl]                |         r3 = *(sl);
    0x00003006 cmp r0, r3                    |         
    0x00003008 beq 0x2ff6                    |         
                                             |     } while (r0 == r3);
    0x0000300a ldr.w r3, [pc, 0x4ec]         |     r3 = *(0x000034f8);
    0x0000300e add r3, pc                    |     r3 += pc;
    0x00003010 ldr.w r5, [r3, 0x98]          |     r5 = *((r3 + 0x98));
    0x00003014 b.w 0x247e                    |     goto label_3;
    0x00003016 rev r3, r6                    |     r6 = SWAP32 (r3);
                                             | label_99:
    0x00003018 ldr.w r2, [pc, 0x4e0]         |     
    0x0000301c movs r1, 1                    |     r1 = 1;
    0x0000301e movs r0, 3                    |     r0 = 3;
    0x00003020 add r2, pc                    |     r2 = 0x6520;
    0x00003022 blx 0x19cc                    |     fcn_000019cc ();
    0x00003026 b.w 0x2142                    |     goto label_2;
                                             | label_98:
    0x0000302a ldr.w r2, [pc, 0x4d4]         |     
    0x0000302e mov r3, sb                    |     r3 = sb;
    0x00003030 movs r1, 1                    |     r1 = 1;
    0x00003032 movs r0, 7                    |     r0 = 7;
    0x00003034 add r2, pc                    |     r2 = 0x653a;
    0x00003036 blx 0x19cc                    |     fcn_000019cc ();
    0x0000303a blx 0x18d4                    |     errno_location ();
    0x0000303e str r4, [sp, 0x30]            |     *(arg_30h) = r4;
    0x00003040 mov r4, r0                    |     r4 = r0;
    0x00003042 movs r2, 0                    |     r2 = 0;
    0x00003044 str r2, [r0]                  |     *(r0) = r2;
                                             | label_16:
    0x00003046 movw r2, 0x1ff4               |     r2 = 0x1ff4;
    0x0000304a ldr r0, [sp, 0x2c]            |     r0 = *(fildes);
    0x0000304c mov r1, r7                    |     r1 = r7;
    0x0000304e blx 0x1640                    |     r0 = read (r0, r1, r2);
    0x00003052 subs r2, r0, 0                |     r2 = r0 - 0;
                                             |     if (r2 <= r0) {
    0x00003054 ble 0x30b0                    |         goto label_103;
                                             |     }
    0x00003056 str.w r8, [sp, 0x38]          |     __asm ("str.w r8, [arg_38h]");
    0x0000305a mov r1, r7                    |     r1 = r7;
    0x0000305c mov r8, r6                    |     r8 = r6;
    0x0000305e mov r6, r4                    |     r6 = r4;
    0x00003060 mov r4, r2                    |     r4 = r2;
                                             |     do {
                                             | label_17:
    0x00003062 mov r2, r4                    |         r2 = r4;
    0x00003064 mov r0, r5                    |         r0 = r5;
    0x00003066 str r1, [sp, 0x40]            |         *(arg_40h) = r1;
    0x00003068 blx 0x195c                    |         r0 = fcn_0000195c ();
    0x0000306c subs r2, r0, 0                |         r2 = r0 - 0;
    0x0000306e ldr r1, [sp, 0x40]            |         r1 = *(arg_40h);
                                             |         if (r2 < r0) {
    0x00003070 blt 0x3084                    |             goto label_104;
                                             |         }
    0x00003072 subs r4, r4, r2               |         r4 -= r2;
    0x00003074 add r1, r2                    |         r1 += r2;
    0x00003076 cmp r4, 0                     |         
    0x00003078 bgt 0x3062                    |         
                                             |     } while (r4 > 0);
    0x0000307a mov r4, r6                    |     r4 = r6;
    0x0000307c mov r6, r8                    |     r6 = r8;
    0x0000307e ldr.w r8, [sp, 0x38]          |     r8 = *(arg_38h);
    0x00003082 b 0x3046                      |     goto label_16;
                                             | label_104:
    0x00003084 ldr r0, [r6]                  |     r0 = *(r6);
    0x00003086 cmp r0, 4                     |     
                                             |     if (r0 == 4) {
    0x00003088 beq 0x3062                    |         goto label_17;
                                             |     }
    0x0000308a cmp r0, 0xb                   |     
                                             |     if (r0 == 0xb) {
    0x0000308c beq 0x3062                    |         goto label_17;
                                             |     }
    0x0000308e cmp r0, 0x1c                  |     
    0x00003090 mov r3, r6                    |     r3 = r6;
    0x00003092 ldr r4, [sp, 0x30]            |     r4 = *(arg_30h);
    0x00003094 mov r6, r8                    |     r6 = r8;
    0x00003096 ldr.w r8, [sp, 0x38]          |     r8 = *(arg_38h);
                                             |     if (r0 == 0x1c) {
    0x0000309a beq 0x30c0                    |         goto label_105;
                                             |     }
                                             | label_19:
    0x0000309c ldr r0, [sp, 0x2c]            |     r0 = *(fildes);
    0x0000309e blx 0x1ab4                    |     fdipc_client_socket ();
    0x000030a2 mov r0, r5                    |     r0 = r5;
    0x000030a4 blx 0x1ab4                    |     fdipc_client_socket ();
    0x000030a8 mov r0, r7                    |     r0 = r7;
    0x000030aa blx 0x1664                    |     free (r0);
    0x000030ae b 0x2fe2                      |     goto label_18;
                                             |     if (r0 == 0x1c) {
                                             | label_103:
    0x000030b0 beq 0x30bc                    |         goto label_106;
                                             |     }
    0x000030b2 ldr r2, [r4]                  |     r2 = *(r4);
    0x000030b4 cmp r2, 4                     |     
                                             |     if (r2 == 4) {
    0x000030b6 beq 0x3046                    |         goto label_16;
                                             |     }
    0x000030b8 cmp r2, 0xb                   |     
                                             |     if (r2 == 0xb) {
    0x000030ba beq 0x3046                    |         goto label_16;
                                             |     }
                                             | label_106:
    0x000030bc ldr r4, [sp, 0x30]            |     r4 = *(arg_30h);
    0x000030be b 0x309c                      |     goto label_19;
                                             | label_105:
    0x000030c0 ldr.w r2, [pc, 0x440]         |     r2 = *(0x00003504);
    0x000030c4 str r3, [sp, 0x38]            |     *(arg_38h) = r3;
    0x000030c6 add r2, pc                    |     r2 += pc;
    0x000030c8 ldr r1, [r2, 0x10]            |     r1 = *((r2 + 0x10));
    0x000030ca mov r0, r1                    |     r0 = r1;
    0x000030cc str r1, [sp, 0x30]            |     *(arg_30h) = r1;
    0x000030ce blx 0x1898                    |     strlen (r0);
    0x000030d2 ldr r1, [sp, 0x30]            |     r1 = *(arg_30h);
    0x000030d4 mov r2, r0                    |     r2 = r0;
    0x000030d6 mov r0, r4                    |     r0 = r4;
    0x000030d8 blx 0x195c                    |     fcn_0000195c ();
    0x000030dc movs r1, 0                    |     r1 = 0;
    0x000030de mov r0, r5                    |     r0 = r5;
    0x000030e0 blx 0x1980                    |     r0 = fcn_00001980 ();
    0x000030e4 cmp r0, 0                     |     
    0x000030e6 ldr r3, [sp, 0x38]            |     r3 = *(arg_38h);
                                             |     if (r0 >= 0) {
    0x000030e8 bge 0x309c                    |         goto label_19;
                                             |     }
    0x000030ea ldr r3, [r3]                  |     r3 = *(r3);
    0x000030ec movs r1, 1                    |     r1 = 1;
    0x000030ee ldr.w r2, [pc, 0x418]         |     
    0x000030f2 movs r0, 3                    |     r0 = 3;
    0x000030f4 str r3, [sp]                  |     *(sp) = r3;
    0x000030f6 mov r3, sb                    |     r3 = sb;
    0x000030f8 add r2, pc                    |     r2 = 0x6606;
    0x000030fa blx 0x19cc                    |     fcn_000019cc ();
    0x000030fe b 0x309c                      |     goto label_19;
                                             | label_97:
    0x00003100 ldr.w r1, [r3, 0x94]          |     r1 = *((r3 + 0x94));
    0x00003104 mov r0, r1                    |     r0 = r1;
    0x00003106 str r1, [sp, 0x30]            |     *(arg_30h) = r1;
    0x00003108 blx 0x1898                    |     strlen (r0);
    0x0000310c ldr r1, [sp, 0x30]            |     r1 = *(arg_30h);
    0x0000310e mov r2, r0                    |     r2 = r0;
    0x00003110 mov r0, r4                    |     r0 = r4;
    0x00003112 blx 0x195c                    |     fcn_0000195c ();
    0x00003116 b 0x2f16                      |     goto label_20;
                                             | label_96:
    0x00003118 ldr r5, [r3, 0x20]            |     r5 = *((r3 + 0x20));
    0x0000311a mov r0, r5                    |     r0 = r5;
    0x0000311c blx 0x1898                    |     strlen (r0);
    0x00003120 mov r1, r5                    |     r1 = r5;
    0x00003122 mov r2, r0                    |     r2 = r0;
    0x00003124 mov r0, r4                    |     r0 = r4;
    0x00003126 blx 0x195c                    |     fcn_0000195c ();
    0x0000312a mov r0, r7                    |     r0 = r7;
    0x0000312c blx 0x1664                    |     free (r0);
    0x00003130 b.w 0x2142                    |     goto label_2;
                                             | label_95:
    0x00003134 ldr r2, [pc, 0x3d4]           |     
    0x00003136 movs r1, 1                    |     r1 = 1;
    0x00003138 movs r0, 3                    |     r0 = 3;
    0x0000313a add r2, pc                    |     r2 = 0x664a;
    0x0000313c blx 0x19cc                    |     fcn_000019cc ();
    0x00003140 mov r0, r4                    |     r0 = r4;
    0x00003142 bl 0x38b0                     |     fcn_000038b0 (r0);
    0x00003146 mov r0, r5                    |     r0 = r5;
    0x00003148 blx 0x1ab4                    |     fdipc_client_socket ();
    0x0000314c b.w 0x2142                    |     goto label_2;
                                             | label_94:
    0x00003150 ldr r3, [pc, 0x3bc]           |     
    0x00003152 add r3, pc                    |     r3 = 0x6666;
    0x00003154 ldr.w r7, [r3, 0x90]          |     r7 = *(0x66f6);
    0x00003158 mov r0, r7                    |     r0 = r7;
    0x0000315a blx 0x1898                    |     strlen (r0);
    0x0000315e mov r1, r7                    |     r1 = r7;
    0x00003160 mov r2, r0                    |     r2 = r0;
    0x00003162 mov r0, r4                    |     r0 = r4;
    0x00003164 blx 0x195c                    |     fcn_0000195c ();
    0x00003168 str r5, [sp, 0x30]            |     *(arg_30h) = r5;
                                             | label_21:
    0x0000316a ldr r3, [sp, 0x2c]            |     r3 = *(fildes);
    0x0000316c movs r2, 0x51                 |     r2 = 0x51;
    0x0000316e mov r1, fp                    |     r1 = fp;
    0x00003170 ldr r0, [r3]                  |     r0 = *(r3);
    0x00003172 blx 0x1640                    |     r0 = read (r0, r1, r2);
    0x00003176 subs r7, r0, 0                |     r7 = r0 - 0;
                                             |     if (r7 <= r0) {
    0x00003178 ble.w 0x373c                  |         goto label_107;
                                             |     }
    0x0000317c mov r5, fp                    |     r5 = fp;
                                             |     do {
                                             | label_33:
    0x0000317e mov r2, r7                    |         r2 = r7;
    0x00003180 mov r1, r5                    |         r1 = r5;
    0x00003182 mov r0, r4                    |         r0 = r4;
    0x00003184 blx 0x195c                    |         r0 = fcn_0000195c ();
    0x00003188 subs r3, r0, 0                |         r3 = r0 - 0;
                                             |         if (r3 < r0) {
    0x0000318a blt.w 0x3718                  |             goto label_108;
                                             |         }
    0x0000318e subs r7, r7, r3               |         r7 -= r3;
    0x00003190 add r5, r3                    |         r5 += r3;
    0x00003192 bne 0x317e                    |         
                                             |     } while (r7 != r7);
    0x00003194 b 0x316a                      |     goto label_21;
                                             | label_93:
    0x00003196 mov r1, r7                    |     r1 = r7;
    0x00003198 mov r0, sb                    |     r0 = sb;
    0x0000319a blx 0x1838                    |     r0 = stat ();
                                             |     if (r0 != 0) {
    0x0000319e cbnz r0, 0x3200               |         goto label_109;
                                             |     }
    0x000031a0 ldr r5, [r7, 0x10]            |     r5 = *((r7 + 0x10));
    0x000031a2 and r3, r5, 0xf000            |     r3 = r5 & 0xf000;
    0x000031a6 cmp.w r3, 0x4000              |     
                                             |     if (r3 == 0x4000) {
    0x000031aa beq 0x31f6                    |         goto label_110;
                                             |     }
    0x000031ac movs r1, 2                    |     r1 = 2;
    0x000031ae mov r0, sb                    |     r0 = sb;
    0x000031b0 blx 0x1968                    |     r0 = fcn_00001968 ();
    0x000031b4 cmp r0, 0                     |     
                                             |     if (r0 < 0) {
    0x000031b6 blt.w 0x299e                  |         goto label_4;
                                             |     }
    0x000031ba ubfx r2, r5, 0, 9             |     r2 = (r5 >> 0) & ((1 << 9) - 1);
                                             | label_23:
    0x000031be movw r1, 0x241                |     r1 = 0x241;
    0x000031c2 mov r0, sb                    |     r0 = sb;
    0x000031c4 blx 0x1844                    |     r0 = open (r0, r1, r2);
    0x000031c8 mov r5, r0                    |     r5 = r0;
    0x000031ca b 0x2ec0                      |     goto label_22;
                                             | label_65:
    0x000031cc blx 0x185c                    |     r0 = ctype_b_loc ();
    0x000031d0 ldr r3, [r0]                  |     r3 = *(r0);
    0x000031d2 addw r2, sp, 0x39d            |     __asm ("addw r2, path");
                                             |     do {
    0x000031d6 mov r0, r2                    |         r0 = r2;
    0x000031d8 adds r2, 1                    |         r2++;
    0x000031da ldrb r1, [r0]                 |         r1 = *(r0);
    0x000031dc ldrh.w r1, [r3, r1, lsl 1]    |         offset_1 = r1 << 1;
                                             |         r1 = *((r3 + offset_1));
    0x000031e0 lsls r1, r1, 0x12             |         r1 <<= 0x12;
    0x000031e2 bmi 0x31d6                    |         
                                             |     } while (r1 < r1);
    0x000031e4 clz r3, sl                    |     r3 &= sl;
    0x000031e8 mov r2, r8                    |     r2 = r8;
    0x000031ea lsrs r3, r3, 5                |     r3 >>= 5;
    0x000031ec mov r1, r4                    |     r1 = r4;
    0x000031ee bl 0x3ec0                     |     fcn_00003ec0 (r0, r1, r2, r3);
    0x000031f2 b.w 0x2142                    |     goto label_2;
                                             | label_110:
    0x000031f6 ldr r3, [sp, 0x30]            |     r3 = *(arg_30h);
    0x000031f8 ldr.w r5, [r3, 0x88]          |     r5 = *((r3 + 0x88));
    0x000031fc b.w 0x247e                    |     goto label_3;
                                             | label_109:
    0x00003200 mov.w r2, 0x1a4               |     r2 = 0x1a4;
    0x00003204 b 0x31be                      |     goto label_23;
                                             | label_41:
    0x00003206 add r7, sp, 0x39c             |     r7 += arg_39ch;
    0x00003208 b 0x3218                      |     
                                             |     while (sb != 0) {
    0x0000320a blx 0x185c                    |         r0 = ctype_b_loc ();
    0x0000320e ldr r3, [r0]                  |         r3 = *(r0);
    0x00003210 ldrh.w r3, [r3, sb, lsl 1]    |         offset_2 = sb << 1;
                                             |         r3 = *((r3 + offset_2));
    0x00003214 lsls r0, r3, 0x12             |         r0 = r3 << 0x12;
                                             |         if (r0 >= r3) {
    0x00003216 bpl 0x3250                    |             goto label_111;
                                             |         }
    0x00003218 mov r5, r7                    |         r5 = r7;
    0x0000321a ldrb sb, [r7], 1              |         sb = *(r7);
                                             |         r7++;
    0x0000321e cmp.w sb, 0                   |         
    0x00003222 bne 0x320a                    |         
                                             |     }
    0x00003224 ldr r3, [pc, 0x2ec]           |     
    0x00003226 add r3, pc                    |     r3 = 0x673e;
    0x00003228 ldr.w r5, [r3, 0xec]          |     r5 = *(0x682a);
    0x0000322c b.w 0x247e                    |     goto label_3;
                                             | label_46:
    0x00003230 ldr r5, [sp, 0x24]            |     r5 = *(s1);
    0x00003232 movs r2, 0x40                 |     r2 = 0x40;
    0x00003234 addw r1, sp, 0x39d            |     __asm ("addw r1, path");
    0x00003238 mov r0, r5                    |     r0 = r5;
    0x0000323a blx 0x1940                    |     strncpy (r0, r1, r2);
    0x0000323e ldr r2, [sp, 0x18]            |     r2 = *(arg_18h);
    0x00003240 movs r3, 1                    |     r3 = 1;
    0x00003242 str r3, [sp, 0x18]            |     *(arg_18h) = r3;
    0x00003244 strb.w r2, [r5, 0x40]         |     *((r5 + 0x40)) = r2;
    0x00003248 ldr.w r5, [sl, 0x5c]          |     r5 = *((sl + 0x5c));
    0x0000324a str r4, [r3, r1]              |     *((r3 + r1)) = r4;
    0x0000324c b.w 0x247e                    |     goto label_3;
                                             | label_111:
    0x00003250 ldr r7, [pc, 0x2c4]           |     
    0x00003252 add r7, pc                    |     r7 = 0x676e;
    0x00003254 ldr.w sb, [r7, 0xbc]          |     sb = *(0x682a);
    0x00003258 mov r0, sb                    |     r0 = sb;
    0x0000325a blx 0x1898                    |     strlen (r0);
    0x0000325e mov r1, sb                    |     r1 = sb;
    0x00003260 mov r2, r0                    |     r2 = r0;
    0x00003262 mov r0, r5                    |     r0 = r5;
    0x00003264 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 == 0) {
    0x00003268 cbnz r0, 0x3270               |         
    0x0000326a ldr r5, [r7, 0x40]            |         r5 = *((r7 + 0x40));
    0x0000326c b.w 0x247e                    |         goto label_3;
                                             |     }
    0x00003270 ldr r5, [r7, 0x44]            |     r5 = *((r7 + 0x44));
    0x00003272 b.w 0x247e                    |     goto label_3;
                                             | label_47:
    0x00003292 ldr r2, [pc, 0x28c]           |     
    0x00003294 movs r1, 1                    |     r1 = 1;
    0x00003296 movs r0, 6                    |     r0 = 6;
    0x00003298 add r2, pc                    |     r2 = 0x67be;
    0x0000329a blx 0x19cc                    |     fcn_000019cc ();
    0x0000329e b.w 0x2496                    |     goto label_24;
                                             | label_43:
    0x000032a2 ldr.w r5, [sl, 0x54]          |     r5 = *((sl + 0x54));
    0x000032a6 b.w 0x247e                    |     goto label_3;
                                             | label_42:
    0x000032aa ldr.w r5, [sl, 0x4c]          |     r5 = *((sl + 0x4c));
    0x000032ae b.w 0x247e                    |     goto label_3;
                                             | label_44:
    0x000032b2 ldr.w sb, [sl, 0x64]          |     sb = *((sl + 0x64));
    0x000032b6 mov r0, sb                    |     r0 = sb;
    0x000032b8 blx 0x1898                    |     strlen (r0);
    0x000032bc mov r1, sb                    |     r1 = sb;
    0x000032be mov r2, r0                    |     r2 = r0;
    0x000032c0 mov r0, r5                    |     r0 = r5;
    0x000032c2 blx 0x18ec                    |     strncasecmp (r0, r1, r2);
    0x000032c6 str r0, [sp, 0x18]            |     *(arg_18h) = r0;
    0x000032c8 cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x000032ca bne.w 0x342e                  |         goto label_112;
                                             |     }
    0x000032ce ldr r3, [pc, 0x254]           |     
    0x000032d0 add r3, pc                    |     
    0x000032d2 ldr r3, [r3, 0x64]            |     r3 = *(0x685e);
    0x000032d4 cmp r3, 0                     |     
                                             |     if (r3 > 0) {
    0x000032d6 ble 0x32e8                    |         
    0x000032d8 ldr r1, [pc, 0x24c]           |         
    0x000032da ldr r0, [sp, 0x24]            |         r0 = *(s1);
    0x000032dc add r1, pc                    |         r1 = 0x6808;
    0x000032de blx 0x15f8                    |         r0 = strcmp (r0, r1);
    0x000032e2 cmp r0, 0                     |         
                                             |         if (r0 != 0) {
    0x000032e4 bne.w 0x3452                  |             goto label_113;
                                             |         }
                                             |     }
    0x000032e8 add r5, sp, 0x354             |     r5 += arg_354h;
    0x000032ea movs r2, 0x40                 |     r2 = 0x40;
    0x000032ec addw r1, sp, 0x39d            |     __asm ("addw r1, path");
    0x000032f0 mov r0, r5                    |     r0 = r5;
    0x000032f2 blx 0x1940                    |     strncpy (r0, r1, r2);
    0x000032f6 movs r3, 0                    |     r3 = 0;
    0x000032f8 ldr r0, [sp, 0x24]            |     r0 = *(s1);
    0x000032fa strb.w r3, [r5, 0x40]         |     *((r5 + 0x40)) = r3;
    0x000032fe blx 0x15d4                    |     r0 = getpwnam ();
    0x00003302 mov sb, r0                    |     sb = r0;
    0x00003304 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00003306 beq 0x3394                    |         goto label_114;
                                             |     }
    0x00003308 blx 0x173c                    |     r0 = geteuid ();
    0x0000330c cmp r0, 0                     |     
    0x0000330e beq 0x337e                    |     
                                             |     while (r0 == 0) {
                                             | label_26:
    0x00003310 ldr.w sl, [sb, 4]             |         sl = *((sb + 4));
                                             | label_25:
    0x00003314 mov r0, r5                    |         r0 = r5;
    0x00003316 mov r1, sl                    |         r1 = sl;
    0x00003318 blx 0x1a80                    |         r0 = fcn_00001a80 ();
    0x0000331c cmp r0, 0                     |         
                                             |         if (r0 == 0) {
    0x0000331e beq 0x3394                    |             goto label_114;
                                             |         }
    0x00003320 mov r1, sl                    |         r1 = sl;
    0x00003322 blx 0x15f8                    |         r0 = strcmp (r0, r1);
    0x00003326 cmp r0, 0                     |         
                                             |         if (r0 != 0) {
    0x00003328 bne 0x3394                    |             goto label_114;
                                             |         }
    0x0000332a ldr r3, [pc, 0x200]           |         r3 = *(0x352e);
                                             | label_35:
    0x0000332c ldrd r5, sb, [sb, 8]          |         __asm ("ldrd r5, sb, [sb, 8]");
    0x00003330 add r3, pc                    |         r3 += pc;
    0x00003332 ldr.w sl, [r3, 0x6c]          |         sl = *((r3 + 0x6c));
    0x00003334 adr r0, 0x1b0                 |         r0 = 0x1b0;
    0x00003336 mov r0, sl                    |         r0 = sl;
    0x00003338 blx 0x1898                    |         strlen (r0);
    0x0000333c mov r1, sl                    |         r1 = sl;
    0x0000333e mov r2, r0                    |         r2 = r0;
    0x00003340 mov r0, r4                    |         r0 = r4;
    0x00003342 blx 0x195c                    |         fcn_0000195c ();
    0x00003346 ldr r2, [pc, 0x1e8]           |         
    0x00003348 movs r0, 0x26                 |         r0 = 0x26;
    0x0000334a ldr r3, [sp, 0x24]            |         r3 = *(s1);
    0x0000334c movs r1, 1                    |         r1 = 1;
    0x0000334e add r2, pc                    |         r2 = 0x6884;
    0x00003350 blx 0x19cc                    |         fcn_000019cc ();
    0x00003354 mov r0, r5                    |         r0 = r5;
    0x00003356 blx 0x161c                    |         r0 = getpwuid ();
                                             |         if (r0 != 0) {
    0x0000335a cbz r0, 0x336a                |             
    0x0000335c ldr r1, [pc, 0x1d4]           |             
    0x0000335e ldr r0, [r0]                  |             r0 = *(r0);
    0x00003360 add r1, pc                    |             r1 = 0x6898;
    0x00003362 blx 0x15f8                    |             r0 = strcmp (r0, r1);
    0x00003366 cmp r0, 0                     |             
                                             |             if (r0 == 0) {
    0x00003368 beq 0x343a                    |                 goto label_115;
                                             |             }
                                             |         }
                                             | label_28:
    0x0000336a mov r0, sb                    |         r0 = sb;
    0x0000336c blx 0x1974                    |         fcn_00001974 ();
    0x00003370 mov r0, r5                    |         r0 = r5;
    0x00003372 blx 0x1760                    |         seteuid ();
    0x00003376 movs r3, 2                    |         r3 = 2;
    0x00003378 str r3, [sp, 0x18]            |         *(arg_18h) = r3;
    0x0000337a b.w 0x2142                    |         goto label_2;
    0x0000337e ldr r0, [sp, 0x24]            |         r0 = *(s1);
    0x00003380 blx 0x1658                    |         r0 = getspnam ();
    0x00003384 cmp r0, 0                     |         
    0x00003386 beq 0x3310                    |         
                                             |     }
    0x00003388 ldr.w sl, [r0, 4]             |     sl = *((r0 + 4));
    0x0000338c cmp.w sl, 0                   |     
                                             |     if (sl != 0) {
    0x00003390 bne 0x3314                    |         goto label_25;
                                             |     }
    0x00003392 b 0x3310                      |     goto label_26;
                                             | label_114:
    0x00003394 ldr r0, [sp, 0x44]            |     r0 = *(arg_44h);
    0x00003396 blx 0x17a8                    |     usleep (r0);
    0x0000339a ldr r3, [pc, 0x19c]           |     
    0x0000339c add r3, pc                    |     r3 = 0x68da;
    0x0000339e ldr r5, [r3, 0x68]            |     r5 = *(0x6942);
    0x000033a0 mov r0, r5                    |     r0 = r5;
    0x000033a2 blx 0x1898                    |     strlen (r0);
    0x000033a6 mov r1, r5                    |     r1 = r5;
    0x000033a8 mov r2, r0                    |     r2 = r0;
    0x000033aa mov r0, r4                    |     r0 = r4;
    0x000033ac blx 0x195c                    |     fcn_0000195c ();
    0x000033b0 ldr r2, [pc, 0x188]           |     
    0x000033b2 movs r1, 1                    |     r1 = 1;
    0x000033b4 ldr r3, [sp, 0x20]            |     r3 = *(arg_20h);
    0x000033b6 movs r0, 0x26                 |     r0 = 0x26;
    0x000033b8 add r2, pc                    |     r2 = 0x68f8;
    0x000033ba blx 0x19cc                    |     fcn_000019cc ();
    0x000033be b.w 0x2142                    |     goto label_2;
                                             | label_48:
    0x000033c2 ldrb.w r3, [r8, 0xc]          |     r3 = *((r8 + 0xc));
    0x000033c6 cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x000033c8 bne.w 0x2b4a                  |         goto label_27;
                                             |     }
    0x000033cc ldr r1, [pc, 0x170]           |     
    0x000033ce add r3, sp, 0x68              |     r3 += arg_68h;
    0x000033d0 add r2, sp, 0x64              |     r2 += arg_64h;
    0x000033d2 mov r0, r5                    |     r0 = r5;
    0x000033d4 add.w sb, sp, 0x5c            |     sb += arg_5ch;
    0x000033d8 add r5, sp, 0x60              |     r5 += arg_60h;
    0x000033da add.w sl, sp, 0x6c            |     sl += arg_6ch;
    0x000033de str r3, [sp, 0x2c]            |     *(fildes) = r3;
    0x000033e0 str r3, [sp, 4]               |     var_4h = r3;
    0x000033e2 add r1, pc                    |     r1 = 0x6926;
    0x000033e4 str r2, [sp, 0x1c]            |     *(str) = r2;
    0x000033e6 mov r3, r5                    |     r3 = r5;
    0x000033e8 str r2, [sp]                  |     *(sp) = r2;
    0x000033ea mov r2, sb                    |     r2 = sb;
    0x000033ec str r7, [sp, 0xc]             |     *(arg_ch) = r7;
    0x000033ee str.w sl, [sp, 8]             |     __asm ("str.w sl, [arg_8h]");
    0x000033f2 blx 0x1910                    |     r0 = isoc99_sscanf ();
    0x000033f6 cmp r0, 6                     |     
                                             |     if (r0 == 6) {
    0x000033f8 bne 0x3424                    |         
    0x000033fa ldr r3, [sp, 0x5c]            |         r3 = *(arg_5ch);
    0x000033fc cmp r3, 0xff                  |         
                                             |         if (r3 > 0xff) {
    0x000033fe bgt 0x3424                    |             goto label_29;
                                             |         }
    0x00003400 ldr r2, [sp, 0x60]            |         r2 = *(arg_60h);
    0x00003402 cmp r2, 0xff                  |         
                                             |         if (r2 > 0xff) {
    0x00003404 bgt 0x3424                    |             goto label_29;
                                             |         }
    0x00003406 ldr r1, [sp, 0x1c]            |         r1 = *(str);
    0x00003408 ldr r1, [r1]                  |         r1 = *(r1);
    0x0000340a cmp r1, 0xff                  |         
                                             |         if (r1 > 0xff) {
    0x0000340c bgt 0x3424                    |             goto label_29;
                                             |         }
    0x0000340e ldr r0, [sp, 0x2c]            |         r0 = *(fildes);
    0x00003410 ldr r5, [r0]                  |         r5 = *(r0);
    0x00003412 cmp r5, 0xff                  |         
                                             |         if (r5 > 0xff) {
    0x00003414 bgt 0x3424                    |             goto label_29;
                                             |         }
    0x00003416 ldr r0, [sp, 0x6c]            |         r0 = *(arg_6ch);
    0x00003418 cmp r0, 0xff                  |         
                                             |         if (r0 > 0xff) {
    0x0000341a bgt 0x3424                    |             goto label_29;
                                             |         }
    0x0000341c ldr r0, [r7]                  |         r0 = *(r7);
    0x0000341e cmp r0, 0xff                  |         
                                             |         if (r0 <= 0xff) {
    0x00003420 ble.w 0x3554                  |             goto label_116;
                                             |         }
                                             |     }
                                             | label_29:
    0x00003424 ldr r3, [pc, 0x11c]           |     
    0x00003426 add r3, pc                    |     r3 = 0x696e;
    0x00003428 ldr r5, [r3, 0x14]            |     r5 = *(0x6982);
    0x0000342a b.w 0x247e                    |     goto label_3;
                                             | label_112:
    0x0000342e movs r3, 0                    |     r3 = 0;
    0x00003430 ldr.w r5, [sl, 0x60]          |     r5 = *((sl + 0x60));
    0x00003434 str r3, [sp, 0x18]            |     *(arg_18h) = r3;
    0x00003436 b.w 0x247e                    |     goto label_3;
                                             | label_115:
    0x0000343a ldr r0, [pc, 0x10c]           |     
    0x0000343c mov r1, r7                    |     r1 = r7;
    0x0000343e add r0, pc                    |     r0 = 0x698c;
    0x00003440 blx 0x1838                    |     r0 = stat ();
    0x00003444 cmp r0, 0                     |     
                                             |     if (r0 < 0) {
    0x00003446 blt 0x336a                    |         goto label_28;
                                             |     }
    0x00003448 ldr r0, [pc, 0x100]           |     
    0x0000344a add r0, pc                    |     r0 = 0x699a;
    0x0000344c blx 0x1814                    |     system (r0);
    0x00003450 b 0x336a                      |     goto label_28;
                                             | label_113:
    0x00003452 ldr.w r5, [sl, 0x68]          |     r5 = *((sl + 0x68));
    0x00003456 mov r0, r5                    |     r0 = r5;
    0x00003458 blx 0x1898                    |     strlen (r0);
    0x0000345c mov r1, r5                    |     r1 = r5;
    0x0000345e mov r2, r0                    |     r2 = r0;
    0x00003460 mov r0, r4                    |     r0 = r4;
    0x00003462 blx 0x195c                    |     fcn_0000195c ();
    0x00003466 ldr r2, [pc, 0xe8]            |     
    0x00003468 movs r1, 1                    |     r1 = 1;
    0x0000346a ldr r3, [sp, 0x20]            |     r3 = *(arg_20h);
    0x0000346c movs r0, 0x26                 |     r0 = 0x26;
    0x0000346e add r2, pc                    |     r2 = 0x69c4;
    0x00003470 blx 0x19cc                    |     fcn_000019cc ();
    0x00003474 b.w 0x2142                    |     goto label_2;
                                             | label_116:
    0x00003554 strd r3, r2, [sp]             |     __asm ("strd r3, r2, [sp]");
    0x00003558 addw r0, sp, 0x101            |     __asm ("addw r0, arg_101h");
    0x0000355c ldr r3, [pc, 0x228]           |     
    0x0000355e movs r2, 0x3e                 |     r2 = 0x3e;
    0x00003560 strd r1, r5, [sp, 8]          |     __asm ("strd r1, r5, [sp, 8]");
    0x00003564 movs r1, 1                    |     r1 = 1;
    0x00003566 add r3, pc                    |     r3 = 0x6cf2;
    0x00003568 blx 0x18f8                    |     sprintf_chk ();
    0x0000356c ldr r2, [sp, 0x6c]            |     r2 = *(arg_6ch);
    0x0000356e mov r0, r8                    |     r0 = r8;
    0x00003570 ldr r3, [r7]                  |     r3 = *(r7);
    0x00003572 add.w r3, r3, r2, lsl 8       |     r3 += (r2 << 8);
    0x00003576 str.w r3, [r8, 4]             |     __asm ("str.w r3, [r8, 4]");
    0x0000357a bl 0x3b50                     |     r0 = fcn_00003b50 (r0);
    0x0000357e cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x00003580 bne.w 0x3424                  |         goto label_29;
                                             |     }
    0x00003584 ldr.w r0, [r8, 8]             |     r0 = *((r8 + 8));
    0x00003588 cmp r0, 0                     |     
                                             |     if (r0 >= 0) {
    0x0000358a blt 0x3598                    |         
    0x0000358c blx 0x1ab4                    |         fdipc_client_socket ();
    0x00003590 mov.w r3, -1                  |         r3 = -1;
    0x00003594 str.w r3, [r8, 8]             |         __asm ("str.w r3, [r8, 8]");
                                             |     }
    0x00003598 ldr r3, [pc, 0x1f0]           |     
    0x0000359a add r3, pc                    |     r3 = 0x6d2a;
    0x0000359c ldr r5, [r3, 0x54]            |     r5 = *(0x6d7e);
    0x0000359e b.w 0x247e                    |     goto label_3;
                                             | label_68:
    0x000035a2 addw r0, sp, 0x39d            |     __asm ("addw r0, path");
    0x000035a6 bl 0x3b2c                     |     r0 = fcn_00003b2c (r0);
    0x000035aa blx 0x1700                    |     r0 = unlink (r0);
    0x000035ae cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x000035b0 bne.w 0x299e                  |         goto label_4;
                                             |     }
    0x000035b4 b.w 0x29ba                    |     goto label_30;
                                             | label_70:
    0x000035b8 add r0, sp, 0x39c             |     r0 += arg_39ch;
    0x000035ba bl 0x3b2c                     |     r0 = fcn_00003b2c (r0);
    0x000035be mov r1, r0                    |     r1 = r0;
    0x000035c0 mov r0, r4                    |     r0 = r4;
    0x000035c2 bl 0x3c10                     |     fcn_00003c10 (r0, r1);
    0x000035c6 b.w 0x2142                    |     goto label_2;
                                             | label_69:
    0x000035ca movs r1, 0xc8                 |     r1 = 0xc8;
    0x000035cc mov r0, fp                    |     r0 = fp;
    0x000035ce blx 0x1868                    |     r0 = getcwd ();
    0x000035d2 mov r5, r0                    |     r5 = r0;
    0x000035d4 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x000035d6 beq.w 0x2bfa                  |         goto label_31;
                                             |     }
    0x000035da ldr r1, [pc, 0x1b4]           |     
    0x000035dc movs r2, 5                    |     r2 = 5;
    0x000035de mov r0, r4                    |     r0 = r4;
    0x000035e0 add r1, pc                    |     r1 = 0x6d76;
    0x000035e2 bl 0x4034                     |     r0 = fcn_00004034 (r0, r1, r2);
                                             |     if (r0 != 0) {
    0x000035e6 cbnz r0, 0x360c               |         goto label_117;
                                             |     }
    0x000035e8 mov r0, r5                    |     r0 = r5;
    0x000035ea blx 0x1898                    |     strlen (r0);
    0x000035ee mov r1, r5                    |     r1 = r5;
    0x000035f0 mov r2, r0                    |     r2 = r0;
    0x000035f2 mov r0, r4                    |     r0 = r4;
    0x000035f4 bl 0x4034                     |     r0 = fcn_00004034 (r0, r1, r2);
                                             |     if (r0 != 0) {
    0x000035f8 cbnz r0, 0x360c               |         goto label_117;
                                             |     }
    0x000035fa ldr r1, [pc, 0x198]           |     
    0x000035fc movs r2, 0x19                 |     r2 = 0x19;
    0x000035fe mov r0, r4                    |     r0 = r4;
    0x00003600 add r1, pc                    |     r1 = 0x6d9a;
    0x00003602 bl 0x4034                     |     r0 = fcn_00004034 (r0, r1, r2);
    0x00003606 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00003608 beq.w 0x2142                  |         goto label_2;
                                             |     }
                                             | label_117:
    0x0000360c mov fp, r4                    |     
    0x0000360e b.w 0x24c2                    |     goto label_32;
                                             | label_71:
    0x00003612 addw r0, sp, 0x39d            |     __asm ("addw r0, path");
    0x00003616 bl 0x3b2c                     |     fcn_00003b2c (r0);
    0x0000361a ldr.w sl, [sb, 0xc0]          |     sl = *((sb + 0xc0));
    0x0000361e mov r5, r0                    |     r5 = r0;
    0x00003620 str r0, [r7]                  |     *(r7) = r0;
    0x00003622 mov r0, sl                    |     r0 = sl;
    0x00003624 blx 0x1898                    |     strlen (r0);
    0x00003628 mov r1, sl                    |     r1 = sl;
    0x0000362a mov r2, r0                    |     r2 = r0;
    0x0000362c mov r0, r5                    |     r0 = r5;
    0x0000362e blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 != 0) {
    0x00003632 cbz r0, 0x367a                |         
    0x00003634 ldr.w r7, [sb, 0xc4]          |         r7 = *((sb + 0xc4));
    0x00003638 mov r0, r7                    |         r0 = r7;
    0x0000363a blx 0x1898                    |         strlen (r0);
    0x0000363e mov r1, r7                    |         r1 = r7;
    0x00003640 mov r2, r0                    |         r2 = r0;
    0x00003642 mov r0, r5                    |         r0 = r5;
    0x00003644 blx 0x18ec                    |         r0 = strncasecmp (r0, r1, r2);
                                             |         if (r0 == 0) {
    0x00003648 cbnz r0, 0x3672               |             
    0x0000364a ldr r0, [pc, 0x14c]           |             
    0x0000364c add r0, pc                    |             r0 = 0x6dea;
    0x0000364e blx 0x1814                    |             r0 = system (r0);
    0x00003652 cmp r0, 0                     |             
                                             |             if (r0 >= 0) {
    0x00003654 blt 0x366a                    |                 
    0x00003656 ldr r2, [pc, 0x144]           |                 
    0x00003658 movs r1, 1                    |                 r1 = 1;
    0x0000365a movs r0, 6                    |                 r0 = 6;
    0x0000365c add r2, pc                    |                 r2 = 0x6dfe;
    0x0000365e blx 0x19cc                    |                 fcn_000019cc ();
    0x00003662 ldr.w r5, [sb, 0x54]          |                 r5 = *((sb + 0x54));
    0x00003666 b.w 0x247e                    |                 goto label_3;
                                             |             }
    0x0000366a ldr r2, [pc, 0x134]           |             
    0x0000366c add r2, pc                    |             r2 = 0x6e12;
    0x0000366e b.w 0x2d2e                    |             goto label_14;
                                             |         }
    0x00003672 ldr.w r5, [sb, 0xc8]          |         r5 = *((sb + 0xc8));
    0x00003676 b.w 0x247e                    |         goto label_3;
                                             |     }
    0x0000367a adds r0, r5, 5                |     r0 = r5 + 5;
    0x0000367c mov r1, r7                    |     r1 = r7;
    0x0000367e str r0, [r7]                  |     *(r7) = r0;
    0x00003680 movs r2, 8                    |     r2 = 8;
    0x00003682 blx 0x1610                    |     strtol (r0, r1, r2);
    0x00003686 ldr.w sl, [r7]                |     sl = *(r7);
    0x0000368a mov sb, r0                    |     sb = r0;
    0x0000368c str.w r8, [sp, 0x1c]          |     __asm ("str.w r8, [str]");
    0x00003690 mov r8, r7                    |     r8 = r7;
    0x00003692 mov r7, r6                    |     r7 = r6;
    0x00003694 mov r6, r4                    |     r6 = r4;
    0x00003696 b 0x36a6                      |     
                                             |     while (r4 != 0) {
    0x00003698 blx 0x185c                    |         r0 = ctype_b_loc ();
    0x0000369c ldr r3, [r0]                  |         r3 = *(r0);
    0x0000369e ldrh.w r3, [r3, r4, lsl 1]    |         offset_3 = r4 << 1;
                                             |         r3 = *((r3 + offset_3));
    0x000036a2 lsls r3, r3, 0x12             |         r3 <<= 0x12;
                                             |         if (r3 >= r3) {
    0x000036a4 bpl 0x36b0                    |             goto label_118;
                                             |         }
    0x000036a6 mov r5, sl                    |         r5 = sl;
    0x000036a8 ldrb r4, [sl], 1              |         r4 = *(sl);
                                             |         sl++;
    0x000036ac cmp r4, 0                     |         
    0x000036ae bne 0x3698                    |         
                                             |     }
                                             | label_118:
    0x000036b0 mov r4, r6                    |     r4 = r6;
    0x000036b2 mov r6, r7                    |     r6 = r7;
    0x000036b4 mov r7, r8                    |     r7 = r8;
    0x000036b6 movs r1, 0xc0                 |     r1 = 0xc0;
    0x000036b8 mov r0, fp                    |     r0 = fp;
    0x000036ba str r5, [r7]                  |     *(r7) = r5;
    0x000036bc ldr.w r8, [sp, 0x1c]          |     r8 = *(str);
    0x000036c0 blx 0x1868                    |     r0 = getcwd ();
    0x000036c4 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x000036c6 beq 0x3756                    |         goto label_119;
                                             |     }
    0x000036c8 mov r0, fp                    |     r0 = fp;
    0x000036ca blx 0x1898                    |     r0 = strlen (r0);
    0x000036ce mov r7, r0                    |     r7 = r0;
    0x000036d0 mov r0, r5                    |     r0 = r5;
    0x000036d2 blx 0x1898                    |     r0 = strlen (r0);
    0x000036d6 adds r3, r7, r0               |     r3 = r7 + r0;
    0x000036d8 adds r3, 1                    |     r3++;
    0x000036da cmp.w r3, 0x100               |     
                                             |     if (r3 > 0x100) {
    0x000036de bhi 0x3756                    |         goto label_119;
                                             |     }
    0x000036e0 ldr r1, [pc, 0xc0]            |     
    0x000036e2 rsb.w r3, r7, 0x100           |     r3 = 0x100 - r7;
    0x000036e6 adds r3, 1                    |     r3++;
    0x000036e8 movs r2, 1                    |     r2 = 1;
    0x000036ea add.w r0, fp, r7              |     r0 = fp + r7;
    0x000036ee add r1, pc                    |     r1 = 0x6e96;
    0x000036f0 blx 0x1790                    |     memcpy_chk ();
    0x000036f4 adds r0, r7, 1                |     r0 = r7 + 1;
    0x000036f6 rsb.w r2, r7, 0x100           |     r2 = 0x100 - r7;
    0x000036fa mov r1, r5                    |     r1 = r5;
    0x000036fc add r0, fp                    |     r0 += fp;
    0x000036fe blx 0x17c0                    |     strcpy_chk ()
    0x00003702 mov r1, sb                    |     r1 = sb;
    0x00003704 mov r0, r5                    |     r0 = r5;
    0x00003706 blx 0x1a74                    |     r0 = fcn_00001a74 ();
    0x0000370a cmp r0, 0                     |     
                                             |     if (r0 < 0) {
    0x0000370c blt 0x3762                    |         goto label_120;
                                             |     }
    0x0000370e ldr r3, [pc, 0x98]            |     
    0x00003710 add r3, pc                    |     r3 = 0x6ebe;
    0x00003712 ldr r5, [r3, 0x54]            |     r5 = *(0x6f12);
    0x00003714 b.w 0x247e                    |     goto label_3;
    0x00003716 bkpt 0xb3                     |     __asm ("bkpt 0xb3");
                                             | label_108:
    0x00003718 blx 0x18d4                    |     r0 = errno_location ();
    0x0000371c ldr r3, [r0]                  |     r3 = *(r0);
    0x0000371e cmp r3, 4                     |     
                                             |     if (r3 == 4) {
    0x00003720 beq.w 0x317e                  |         goto label_33;
                                             |     }
    0x00003724 cmp r3, 0xb                   |     
                                             |     if (r3 == 0xb) {
    0x00003726 beq.w 0x317e                  |         goto label_33;
                                             |     }
    0x0000372a ldr r5, [sp, 0x30]            |     r5 = *(arg_30h);
    0x0000372c mov r0, r4                    |     r0 = r4;
    0x0000372e bl 0x38b0                     |     fcn_000038b0 (r0);
    0x00003732 mov r0, r5                    |     r0 = r5;
    0x00003734 blx 0x1ab4                    |     fdipc_client_socket ();
    0x00003738 b.w 0x2142                    |     goto label_2;
                                             | label_107:
    0x0000373c ldr r5, [sp, 0x30]            |     r5 = *(arg_30h);
    0x0000373e b.w 0x2ed0                    |     goto label_34;
                                             | label_67:
    0x00003742 add r0, sp, 0x39c             |     r0 += arg_39ch;
    0x00003744 bl 0x3b2c                     |     r0 = fcn_00003b2c (r0);
    0x00003748 blx 0x16ac                    |     r0 = rmdir ();
    0x0000374c cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x0000374e bne.w 0x299e                  |         goto label_4;
                                             |     }
    0x00003752 b.w 0x29ba                    |     goto label_30;
                                             | label_119:
    0x00003756 ldr r3, [pc, 0x54]            |     
    0x00003758 add r3, pc                    |     r3 = 0x6f0a;
    0x0000375a ldr.w r5, [r3, 0x88]          |     r5 = *(0x6f92);
    0x0000375e b.w 0x247e                    |     goto label_3;
                                             | label_120:
    0x00003762 blx 0x18d4                    |     r0 = errno_location ();
    0x00003766 ldr r0, [r0]                  |     r0 = *(r0);
    0x00003768 blx 0x1808                    |     strerror (r0);
    0x0000376c ldr r2, [pc, 0x40]            |     
    0x0000376e mov r3, r5                    |     r3 = r5;
    0x00003770 str r0, [sp]                  |     *(sp) = r0;
    0x00003772 movs r1, 1                    |     r1 = 1;
    0x00003774 movs r0, 3                    |     r0 = 3;
    0x00003776 add r2, pc                    |     r2 = 0x6f2a;
    0x00003778 blx 0x19cc                    |     fcn_000019cc ();
    0x0000377c mov r0, r4                    |     r0 = r4;
    0x0000377e bl 0x38b0                     |     fcn_000038b0 (r0);
    0x00003782 b.w 0x2142                    |     goto label_2;
    0x000037e8 adds r0, 0x14                 |     r0 += 0x14;
    0x000037ea b 0x332c                      |     goto label_35;
                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/bin/vftpd @ 0x45cc */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000045cc ()                                      | void fcn_000045cc (int16_t arg_1h, int16_t arg_a8h, int16_t arg_ach, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h_2;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h_2;
                                                                 |     int16_t var_14h_2;
                                                                 |     int16_t var_18h_2;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_28h_2;
                                                                 |     int16_t var_2ch_2;
                                                                 |     int16_t var_30h_2;
                                                                 |     int16_t var_3ch_2;
                                                                 |     int16_t var_23ch;
                                                                 |     int16_t var_244h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_28h;
                                                                 |     int32_t var_4h;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     char * s;
                                                                 |     int16_t var_24h_2;
                                                                 |     int16_t var_84h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
                                                                 | label_7:
    0x00004204 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00004208 sub.w sp, sp, 0x294                               |     
    0x0000420c str r2, [sp, 0x18]                                |     var_18h_2 = r2;
    0x0000420e add.w sl, sp, 0x30                                |     sl += var_30h_2;
    0x00004212 movs r6, 0                                        |     r6 = 0;
    0x00004214 ldr r2, [pc, 0x2f4]                               |     
    0x00004216 str r3, [sp, 0x10]                                |     var_10h_2 = r3;
    0x00004218 ldr r3, [pc, 0x2f4]                               |     r3 = *(0x4510);
    0x0000421a add r2, pc                                        |     r2 = 0x872a;
    0x0000421c str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x0000421e str r1, [sp, 0xc]                                 |     var_ch_2 = r1;
    0x00004220 ldr r3, [r2, r3]                                  |     
    0x00004222 ldr r4, [r0, 0xc]                                 |     r4 = *((r0 + 0xc));
    0x00004224 ldr r3, [r3]                                      |     r3 = *(0x872a);
    0x00004226 str r3, [sp, 0x28c]                               |     var_18h = r3;
    0x00004228 mov.w r3, 0                                       |     r3 = 0;
    0x0000422c strd r6, r6, [sl]                                 |     __asm ("strd r6, r6, [sl]");
    0x00004230 str.w r6, [sl, 8]                                 |     __asm ("str.w r6, [sl, 8]");
    0x00004234 ldrb r3, [r4]                                     |     r3 = *(r4);
    0x00004236 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00004238 beq.w 0x4496                                      |         goto label_10;
                                                                 |     }
    0x0000423c add r3, sp, 0x3c                                  |     r3 += var_3ch_2;
    0x0000423e mov r8, r6                                        |     r8 = r6;
    0x00004240 mov sb, r3                                        |     sb = r3;
    0x00004242 str r3, [sp, 0x14]                                |     var_14h_2 = r3;
                                                                 | label_0:
    0x00004244 movs r1, 0x20                                     |     r1 = 0x20;
    0x00004246 mov r0, r4                                        |     r0 = r4;
    0x00004248 blx 0x18a4                                        |     r0 = strchr (r0, r1);
    0x0000424c mov r5, r0                                        |     r5 = r0;
    0x0000424e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00004250 beq.w 0x4356                                      |         goto label_11;
                                                                 |     }
    0x00004254 sub.w fp, r5, r4                                  |     
    0x00004258 add.w r0, fp, 1                                   |     r0 += arg_1h;
    0x0000425c cmp.w r0, 0x400                                   |     
                                                                 |     if (r0 > 0x400) {
    0x00004260 bgt.w 0x436e                                      |         goto label_12;
                                                                 |     }
                                                                 | label_1:
    0x00004264 blx 0x17f0                                        |     r0 = malloc (r0);
    0x00004268 mov r7, r0                                        |     r7 = r0;
    0x0000426a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0000426c beq.w 0x44fa                                      |         goto label_13;
                                                                 |     }
    0x00004270 mov r1, r4                                        |     r1 = r4;
    0x00004272 mov r2, fp                                        |     r2 = fp;
    0x00004274 blx 0x1940                                        |     strncpy (r0, r1, r2);
    0x00004278 strb.w r8, [r7, fp]                               |     *((r7 + fp)) = r8;
    0x0000427c adds r6, 1                                        |     r6++;
    0x0000427e str r7, [sb], 4                                   |     *(sb) = r7;
                                                                 |     sb += 4;
    0x00004282 mov r4, r5                                        |     r4 = r5;
    0x00004284 ldrb r3, [r5]                                     |     r3 = *(r5);
    0x00004286 cmp r3, 0x20                                      |     
                                                                 |     if (r3 != 0x20) {
    0x00004288 bne 0x4292                                        |         goto label_14;
                                                                 |     }
                                                                 |     do {
    0x0000428a ldrb r3, [r4, 1]!                                 |         r3 = *((r4 += 1));
    0x0000428e cmp r3, 0x20                                      |         
    0x00004290 beq 0x428a                                        |         
                                                                 |     } while (r3 == 0x20);
                                                                 | label_14:
    0x00004292 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00004294 bne 0x4244                                        |         goto label_0;
                                                                 |     }
    0x00004296 ldr r3, [sp, 0x14]                                |     r3 = var_14h_2;
    0x00004298 add.w r6, r3, r6, lsl 2                           |     r6 = r3 + (r6 << 2);
                                                                 | label_6:
    0x0000429c movs r3, 0                                        |     r3 = 0;
    0x0000429e str r3, [r6]                                      |     *(r6) = r3;
    0x000042a0 ldr r3, [sp, 0x14]                                |     r3 = var_14h_2;
    0x000042a2 ldr r5, [r3]                                      |     r5 = *(r3);
    0x000042a4 blx 0x173c                                        |     r0 = geteuid ();
    0x000042a8 mov r4, r0                                        |     r4 = r0;
    0x000042aa blx 0x1778                                        |     getegid ();
    0x000042ae mov r1, r4                                        |     r1 = r4;
    0x000042b0 mov r6, r0                                        |     r6 = r0;
    0x000042b2 mov r0, r4                                        |     r0 = r4;
    0x000042b4 blx 0x18bc                                        |     setreuid ();
    0x000042b8 mov r1, r6                                        |     r1 = r6;
    0x000042ba mov r4, r0                                        |     r4 = r0;
    0x000042bc mov r0, r6                                        |     r0 = r6;
    0x000042be blx 0x19bc                                        |     r0 = fcn_000019bc ();
    0x000042c2 cmp r0, 0                                         |     
                                                                 |     if (r0 < 0) {
    0x000042c4 blt.w 0x43d4                                      |         goto label_15;
                                                                 |     }
    0x000042c8 mov r0, r5                                        |     r0 = r5;
    0x000042ca movs r1, 5                                        |     r1 = 5;
    0x000042cc blx 0x1968                                        |     fcn_00001968 ();
    0x000042d0 orrs r0, r4                                       |     r0 |= r4;
                                                                 |     if (r0 < r4) {
    0x000042d2 bmi.w 0x44b0                                      |         goto label_16;
                                                                 |     }
    0x000042d6 add r4, sp, 0x20                                  |     r4 += var_20h;
    0x000042d8 mov r0, r4                                        |     r0 = r4;
    0x000042da blx 0x1998                                        |     r0 = fcn_00001998 ();
    0x000042de cmp r0, 0                                         |     
                                                                 |     if (r0 < 0) {
    0x000042e0 blt.w 0x43e8                                      |         goto label_17;
                                                                 |     }
                                                                 | label_4:
    0x000042e4 ldr r3, [sp, 0x10]                                |     r3 = var_10h_2;
                                                                 |     if (r3 != 0) {
    0x000042e6 cbz r3, 0x42f4                                    |         
    0x000042e8 add r0, sp, 0x28                                  |         r0 += var_28h_2;
    0x000042ea blx 0x1998                                        |         r0 = fcn_00001998 ();
    0x000042ee cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x000042f0 bne.w 0x442a                                      |             goto label_18;
                                                                 |         }
                                                                 |     }
                                                                 | label_5:
    0x000042f4 ldr r3, [sp, 0xc]                                 |     r3 = var_ch_2;
    0x000042f6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000042f8 beq 0x43e2                                        |         goto label_19;
                                                                 |     }
    0x000042fa cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x000042fc bne.w 0x449e                                      |         goto label_20;
                                                                 |     }
    0x00004300 ldr r5, [pc, 0x210]                               |     
    0x00004302 add r5, pc                                        |     r5 = 0x881a;
    0x00004304 adds r5, 0x10                                     |     r5 += 0x10;
                                                                 | label_3:
    0x00004306 blx 0x19e4                                        |     fcn_000019e4 ();
    0x0000430a ldr r3, [sp, 0x18]                                |     r3 = var_18h_2;
    0x0000430c cmp r0, 0                                         |     
    0x0000430e mov r8, r0                                        |     r8 = r0;
    0x00004310 str r0, [r3]                                      |     *(r3) = r0;
                                                                 |     if (r0 < 0) {
    0x00004312 blt.w 0x44e2                                      |         goto label_21;
                                                                 |     }
                                                                 |     if (r0 == 0) {
    0x00004316 beq 0x4380                                        |         goto label_22;
                                                                 |     }
    0x00004318 ldr r3, [sp, 0xc]                                 |     r3 = var_ch_2;
    0x0000431a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000431c beq.w 0x4438                                      |         goto label_23;
                                                                 |     }
    0x00004320 ldr r1, [sp, 0x10]                                |     r1 = var_10h_2;
                                                                 |     if (r1 != 0) {
    0x00004322 cbz r1, 0x432e                                    |         
    0x00004324 ldrd r2, r0, [sp, 0x28]                           |         __asm ("ldrd r2, r0, [var_28h_2]");
    0x00004328 str r2, [r1]                                      |         *(r1) = r2;
    0x0000432a blx 0x1ab4                                        |         fdipc_client_socket ();
                                                                 |     }
    0x0000432e ldrd r0, r4, [r4]                                 |     __asm ("ldrd r0, r4, [r4]");
    0x00004332 blx 0x1ab4                                        |     fdipc_client_socket ();
                                                                 | label_2:
    0x00004336 ldr r2, [pc, 0x1e0]                               |     
    0x00004338 ldr r3, [pc, 0x1d4]                               |     r3 = *(0x4510);
    0x0000433a add r2, pc                                        |     r2 = 0x8858;
    0x0000433c ldr r3, [r2, r3]                                  |     r3 = *(0x8858);
    0x0000433e ldr r2, [r3]                                      |     r2 = *(0x8858);
    0x00004340 ldr r3, [sp, 0x28c]                               |     r3 = var_18h;
    0x00004342 eors r2, r3                                       |     r2 ^= r3;
    0x00004344 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00004348 bne.w 0x44ca                                      |         goto label_24;
                                                                 |     }
    0x0000434c mov r0, r4                                        |     r0 = r4;
    0x0000434e add.w sp, sp, 0x294                               |     
    0x00004352 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_11:
    0x00004356 mov r0, r4                                        |     r0 = r4;
    0x00004358 blx 0x1898                                        |     r0 = strlen (r0);
    0x0000435c adds r5, r4, r0                                   |     r5 = r4 + r0;
    0x0000435e sub.w fp, r5, r4                                  |     
    0x00004362 add.w r0, fp, 1                                   |     r0 += arg_1h;
    0x00004366 cmp.w r0, 0x400                                   |     
                                                                 |     if (r0 <= 0x400) {
    0x0000436a ble.w 0x4264                                      |         goto label_1;
                                                                 |     }
                                                                 | label_12:
    0x0000436e ldr r2, [pc, 0x1ac]                               |     
    0x00004370 movs r1, 1                                        |     r1 = 1;
    0x00004372 movs r0, 3                                        |     r0 = 3;
    0x00004374 mov.w r4, -1                                      |     r4 = -1;
    0x00004378 add r2, pc                                        |     r2 = 0x889a;
    0x0000437a blx 0x19cc                                        |     fcn_000019cc ();
    0x0000437e b 0x4336                                          |     goto label_2;
                                                                 | label_22:
    0x00004380 blx 0x18d4                                        |     errno_location ();
    0x00004384 ldr r3, [sp, 0xc]                                 |     r3 = var_ch_2;
    0x00004386 mov r6, r0                                        |     r6 = r0;
    0x00004388 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0000438a bne 0x43f6                                        |         goto label_25;
                                                                 |     }
    0x0000438c ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x0000438e movs r1, 1                                        |     r1 = 1;
    0x00004390 blx 0x170c                                        |     r0 = dup2 ();
    0x00004394 cmp r0, 1                                         |     
                                                                 |     if (r0 != 1) {
    0x00004396 bne.w 0x44ce                                      |         goto label_26;
                                                                 |     }
    0x0000439a ldr r0, [sp, 0xc]                                 |     r0 = var_ch_2;
    0x0000439c blx 0x1ab4                                        |     fdipc_client_socket ();
                                                                 |     do {
    0x000043a0 ldr r0, [r4]                                      |         r0 = *(r4);
    0x000043a2 blx 0x1ab4                                        |         fdipc_client_socket ();
    0x000043a6 ldr r0, [r4, 4]                                   |         r0 = *((r4 + 4));
    0x000043a8 blx 0x1ab4                                        |         fdipc_client_socket ();
    0x000043ac ldr r3, [sp, 0x10]                                |         r3 = var_10h_2;
    0x000043ae cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x000043b0 beq 0x444e                                        |             goto label_27;
                                                                 |         }
    0x000043b2 movs r1, 3                                        |         r1 = 3;
    0x000043b4 ldr r0, [sp, 0x2c]                                |         r0 = var_2ch_2;
    0x000043b6 blx 0x170c                                        |         r0 = dup2 ();
    0x000043ba cmp r0, 3                                         |         
    0x000043bc add r4, sp, 0x28                                  |         r4 += var_28h_2;
                                                                 |         if (r0 == 3) {
    0x000043be beq 0x4442                                        |             goto label_28;
                                                                 |         }
    0x000043c0 ldr r2, [pc, 0x15c]                               |         
    0x000043c2 movs r1, 1                                        |         r1 = 1;
    0x000043c4 ldr r3, [r6]                                      |         r3 = *(r6);
    0x000043c6 movs r0, 3                                        |         r0 = 3;
    0x000043c8 mov.w r4, -1                                      |         r4 = -1;
    0x000043cc add r2, pc                                        |         r2 = 0x88f0;
    0x000043ce blx 0x19cc                                        |         fcn_000019cc ();
    0x000043d2 b 0x4336                                          |         goto label_2;
                                                                 | label_15:
    0x000043d4 movs r1, 5                                        |         r1 = 5;
    0x000043d6 mov r0, r5                                        |         r0 = r5;
    0x000043d8 mov.w r4, -1                                      |         r4 = -1;
    0x000043dc blx 0x1968                                        |         fcn_00001968 ();
    0x000043e0 b 0x4336                                          |         goto label_2;
                                                                 | label_19:
    0x000043e2 ldr r5, [pc, 0x140]                               |         
    0x000043e4 add r5, pc                                        |         r5 = 0x890e;
    0x000043e6 b 0x4306                                          |         goto label_3;
                                                                 | label_17:
    0x000043e8 ldr r2, [pc, 0x13c]                               |         
    0x000043ea movs r1, 1                                        |         r1 = 1;
    0x000043ec movs r0, 3                                        |         r0 = 3;
    0x000043ee add r2, pc                                        |         r2 = 0x891a;
    0x000043f0 blx 0x19cc                                        |         fcn_000019cc ();
    0x000043f4 b 0x42e4                                          |         goto label_4;
                                                                 | label_25:
    0x000043f6 ldr r0, [sp, 0x2b8]                               |         r0 = s;
    0x000043f8 movs r1, 1                                        |         r1 = 1;
    0x000043fa blx 0x170c                                        |         r0 = dup2 ();
    0x000043fe cmp r0, 1                                         |         
    0x00004400 mov r7, r0                                        |         r7 = r0;
                                                                 |         if (r0 != 1) {
    0x00004402 bne 0x44b6                                        |             goto label_29;
                                                                 |         }
    0x00004404 ldr r0, [sp, 0x2b8]                               |         r0 = s;
    0x00004406 blx 0x1ab4                                        |         fdipc_client_socket ();
    0x0000440a ldr r0, [r4]                                      |         r0 = *(r4);
    0x0000440c mov r1, r8                                        |         r1 = r8;
    0x0000440e blx 0x170c                                        |         r0 = dup2 ();
    0x00004412 cmp r0, 0                                         |         
    0x00004414 beq 0x43a0                                        |         
                                                                 |     } while (r0 == 0);
    0x00004416 ldr r2, [pc, 0x114]                               |     
    0x00004418 mov r1, r7                                        |     r1 = r7;
    0x0000441a ldr r3, [r6]                                      |     r3 = *(r6);
    0x0000441c movs r0, 3                                        |     r0 = 3;
    0x0000441e mov.w r4, -1                                      |     r4 = -1;
    0x00004422 add r2, pc                                        |     r2 = 0x8954;
    0x00004424 blx 0x19cc                                        |     fcn_000019cc ();
    0x00004428 b 0x4336                                          |     goto label_2;
                                                                 | label_18:
    0x0000442a ldr r2, [pc, 0x104]                               |     
    0x0000442c movs r1, 1                                        |     r1 = 1;
    0x0000442e movs r0, 3                                        |     r0 = 3;
    0x00004430 add r2, pc                                        |     r2 = 0x8966;
    0x00004432 blx 0x19cc                                        |     fcn_000019cc ();
    0x00004436 b 0x42f4                                          |     goto label_5;
                                                                 | label_23:
    0x00004438 ldrd r4, r0, [r4]                                 |     __asm ("ldrd r4, r0, [r4]");
    0x0000443c blx 0x1ab4                                        |     fdipc_client_socket ();
    0x00004440 b 0x4336                                          |     goto label_2;
                                                                 | label_28:
    0x00004442 ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x00004444 blx 0x1ab4                                        |     fdipc_client_socket ();
    0x00004448 ldr r0, [r4]                                      |     r0 = *(r4);
    0x0000444a blx 0x1ab4                                        |     fdipc_client_socket ();
                                                                 | label_27:
    0x0000444e ldr r2, [pc, 0xe4]                                |     
    0x00004450 add r7, sp, 0x23c                                 |     r7 += var_23ch;
    0x00004452 mov r3, r7                                        |     r3 = r7;
    0x00004454 mov.w r4, -1                                      |     r4 = -1;
    0x00004458 add r2, pc                                        |     r2 = 0x8992;
    0x0000445a ldm r2, {r0, r1, r2}                              |     r0 = *(r2);
                                                                 |     r1 = *((r2 + 4));
                                                                 |     r2 = *((r2 + 8));
    0x0000445c stm r3!, {r0, r1}                                 |     *(r3!) = r0;
                                                                 |     *((r3! + 4)) = r1;
    0x0000445e add r0, sp, 0x244                                 |     r0 += var_244h;
    0x00004460 strb r2, [r3]                                     |     *(r3) = r2;
    0x00004462 movs r2, 0x48                                     |     r2 = 0x48;
    0x00004464 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00004466 ldr r1, [r3, 8]                                   |     r1 = *((r3 + 8));
    0x00004468 blx 0x17c0                                        |     strcpy_chk ()
    0x0000446c ldr r1, [sp, 0x14]                                |     r1 = var_14h_2;
    0x0000446e mov r2, sl                                        |     r2 = sl;
    0x00004470 strd r7, r5, [sl]                                 |     __asm ("strd r7, r5, [sl]");
    0x00004474 ldr r0, [r1]                                      |     r0 = *(r1);
    0x00004476 blx 0x18b0                                        |     execve ();
    0x0000447a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0000447c ldr r0, [r6]                                      |     r0 = *(r6);
    0x0000447e ldr r5, [r3, 0xc]                                 |     r5 = *((r3 + 0xc));
    0x00004480 blx 0x1808                                        |     strerror (r0);
    0x00004484 ldr r2, [pc, 0xb0]                                |     
    0x00004486 movs r1, 1                                        |     r1 = 1;
    0x00004488 str r0, [sp]                                      |     *(sp) = r0;
    0x0000448a mov r3, r5                                        |     r3 = r5;
    0x0000448c movs r0, 3                                        |     r0 = 3;
    0x0000448e add r2, pc                                        |     r2 = 0x89ca;
    0x00004490 blx 0x19cc                                        |     fcn_000019cc ();
    0x00004494 b 0x4336                                          |     goto label_2;
                                                                 | label_10:
    0x00004496 add r3, sp, 0x3c                                  |     r3 += var_3ch_2;
    0x00004498 mov r6, r3                                        |     r6 = r3;
    0x0000449a str r3, [sp, 0x14]                                |     var_14h_2 = r3;
    0x0000449c b 0x429c                                          |     goto label_6;
                                                                 | label_20:
    0x0000449e ldr r2, [pc, 0x9c]                                |     
    0x000044a0 movs r1, 1                                        |     r1 = 1;
    0x000044a2 movs r0, 3                                        |     r0 = 3;
    0x000044a4 mov.w r4, -1                                      |     r4 = -1;
    0x000044a8 add r2, pc                                        |     r2 = 0x89ea;
    0x000044aa blx 0x19cc                                        |     fcn_000019cc ();
    0x000044ae b 0x4336                                          |     goto label_2;
                                                                 | label_16:
    0x000044b0 mov.w r4, -1                                      |     r4 = -1;
    0x000044b4 b 0x4336                                          |     goto label_2;
                                                                 | label_29:
    0x000044b6 ldr r2, [pc, 0x88]                                |     
    0x000044b8 movs r1, 1                                        |     r1 = 1;
    0x000044ba ldr r3, [r6]                                      |     r3 = *(r6);
    0x000044bc movs r0, 3                                        |     r0 = 3;
    0x000044be mov.w r4, -1                                      |     r4 = -1;
    0x000044c2 add r2, pc                                        |     r2 = 0x8a08;
    0x000044c4 blx 0x19cc                                        |     fcn_000019cc ();
    0x000044c8 b 0x4336                                          |     goto label_2;
                                                                 | label_24:
    0x000044ca blx 0x16f4                                        |     stack_chk_fail ();
                                                                 | label_26:
    0x000044ce ldr r2, [pc, 0x74]                                |     
    0x000044d0 movs r1, 1                                        |     r1 = 1;
    0x000044d2 ldr r3, [r6]                                      |     r3 = *(r6);
    0x000044d4 movs r0, 3                                        |     r0 = 3;
    0x000044d6 mov.w r4, -1                                      |     r4 = -1;
    0x000044da add r2, pc                                        |     r2 = 0x8a24;
    0x000044dc blx 0x19cc                                        |     fcn_000019cc ();
    0x000044e0 b 0x4336                                          |     goto label_2;
                                                                 | label_21:
    0x000044e2 blx 0x18d4                                        |     errno_location ();
    0x000044e6 ldr r2, [pc, 0x60]                                |     
    0x000044e8 movs r1, 1                                        |     r1 = 1;
    0x000044ea ldr r3, [r0]                                      |     r3 = *(r0);
    0x000044ec movs r0, 3                                        |     r0 = 3;
    0x000044ee mov.w r4, -1                                      |     r4 = -1;
    0x000044f2 add r2, pc                                        |     r2 = 0x8a40;
    0x000044f4 blx 0x19cc                                        |     fcn_000019cc ();
    0x000044f8 b 0x4336                                          |     goto label_2;
                                                                 | label_13:
    0x000044fa ldr r2, [pc, 0x50]                                |     
    0x000044fc movs r1, 1                                        |     r1 = 1;
    0x000044fe movs r0, 3                                        |     r0 = 3;
    0x00004500 mov.w r4, -1                                      |     r4 = -1;
    0x00004504 add r2, pc                                        |     r2 = 0x8a56;
    0x00004506 blx 0x19cc                                        |     fcn_000019cc ();
    0x0000450a b 0x4336                                          |     goto label_2;
    0x000045cc push.w {r4, r5, r6, r7, r8, sb, sl, lr}           |     
    0x000045d0 mov r5, r0                                        |     r5 = r0;
    0x000045d2 ldr r4, [pc, 0x1bc]                               |     
    0x000045d4 mov r7, r3                                        |     r7 = r3;
    0x000045d6 sub sp, 0x88                                      |     
    0x000045d8 mov r8, r1                                        |     r8 = r1;
    0x000045da ldr r0, [pc, 0x1b8]                               |     r0 = *(0x4796);
    0x000045dc mov r6, r2                                        |     r6 = r2;
    0x000045de ldrb r3, [r5]                                     |     r3 = *(r5);
    0x000045e0 add r4, pc                                        |     r4 = 0x8d76;
    0x000045e2 ldr.w sb, [sp, 0xa8]                              |     sb = *(arg_a8h);
    0x000045e6 ldr r0, [r4, r0]                                  |     
    0x000045e8 cmp r3, 0x2f                                      |     
    0x000045ea ldr.w sl, [sp, 0xac]                              |     sl = *(arg_ach);
    0x000045ee ldr r0, [r0]                                      |     r0 = *(0x8d76);
    0x000045f0 str r0, [sp, 0x84]                                |     var_84h = r0;
    0x000045f2 mov.w r0, 0                                       |     r0 = 0;
                                                                 |     if (r3 != 0x2f) {
    0x000045f6 bne 0x464e                                        |         goto label_30;
                                                                 |     }
                                                                 | label_8:
    0x000045f8 ldr r3, [pc, 0x19c]                               |     
    0x000045fa add r3, pc                                        |     r3 = 0x8d96;
    0x000045fc ldr r4, [r3]                                      |     r4 = *(0x8d96);
                                                                 |     if (r4 != 0) {
    0x000045fe cbnz r4, 0x460a                                   |         goto label_31;
                                                                 |     }
    0x00004600 b 0x4742                                          |     goto label_32;
                                                                 |     do {
    0x00004602 ldr r4, [r4]                                      |         r4 = *(r4);
    0x00004604 cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x00004606 beq.w 0x4742                                      |             goto label_32;
                                                                 |         }
                                                                 | label_31:
    0x0000460a ldr r0, [r4, 8]                                   |         r0 = *((r4 + 8));
    0x0000460c mov r1, r5                                        |         r1 = r5;
    0x0000460e blx 0x15f8                                        |         r0 = strcmp (r0, r1);
    0x00004612 cmp r0, 0                                         |         
    0x00004614 bne 0x4602                                        |         
                                                                 |     } while (r0 != 0);
    0x00004616 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00004618 cmp r3, 1                                         |     
    0x0000461a str r3, [r6]                                      |     *(r6) = r3;
                                                                 |     if (r3 != 1) {
    0x0000461c beq 0x4698                                        |         
    0x0000461e cmp r3, 2                                         |         
                                                                 |         if (r3 != 2) {
    0x00004620 bne.w 0x474a                                      |             goto label_33;
                                                                 |         }
    0x00004624 ldr r2, [pc, 0x174]                               |         
    0x00004626 ldr r3, [pc, 0x16c]                               |         r3 = *(0x4796);
    0x00004628 add r2, pc                                        |         r2 = 0x8dc8;
    0x0000462a ldr r3, [r2, r3]                                  |         r3 = *(0x8dc8);
    0x0000462c ldr r2, [r3]                                      |         r2 = *(0x8dc8);
    0x0000462e ldr r3, [sp, 0x84]                                |         r3 = var_84h;
    0x00004630 eors r2, r3                                       |         r2 ^= r3;
    0x00004632 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00004636 bne.w 0x478a                                      |             goto label_34;
                                                                 |         }
    0x0000463a mov r3, sb                                        |         r3 = sb;
    0x0000463c mov r2, r7                                        |         r2 = r7;
    0x0000463e mov r1, r8                                        |         r1 = r8;
    0x00004640 mov r0, r4                                        |         r0 = r4;
    0x00004642 str.w sl, [sp, 0xa8]                              |         __asm ("str.w sl, [arg_a8h]");
    0x00004646 add sp, 0x88                                      |         
    0x00004648 pop.w {r4, r5, r6, r7, r8, sb, sl, lr}            |         
    0x0000464c b 0x4204                                          |         goto label_7;
                                                                 | label_30:
    0x0000464e ldr r4, [pc, 0x150]                               |         
    0x00004650 movs r1, 0x96                                     |         r1 = 0x96;
    0x00004652 add r4, pc                                        |         r4 = 0x8df8;
    0x00004654 adds r4, 4                                        |         r4 += 4;
    0x00004656 mov r0, r4                                        |         r0 = r4;
    0x00004658 blx 0x1868                                        |         r0 = getcwd ();
    0x0000465c cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x0000465e beq 0x4742                                        |             goto label_32;
                                                                 |         }
    0x00004660 mov r0, r4                                        |         r0 = r4;
    0x00004662 blx 0x1898                                        |         r0 = strlen (r0);
    0x00004666 cmp r0, 1                                         |         
    0x00004668 mov r3, r0                                        |         r3 = r0;
                                                                 |         if (r0 >= 1) {
    0x0000466a bls 0x467c                                        |             
    0x0000466c ldr r1, [pc, 0x134]                               |             
    0x0000466e adds r0, r4, r0                                   |             r0 = r4 + r0;
    0x00004670 rsb.w r3, r3, 0xfa                                |             r3 = 0xfa - r3;
    0x00004674 movs r2, 2                                        |             r2 = 2;
    0x00004676 add r1, pc                                        |             r1 = 0x8e1e;
    0x00004678 blx 0x1790                                        |             memcpy_chk ();
                                                                 |         }
    0x0000467c mov r0, r5                                        |         r0 = r5;
    0x0000467e blx 0x1898                                        |         r0 = strlen (r0);
    0x00004682 cmp r0, 0x63                                      |         
                                                                 |         if (r0 > 0x63) {
    0x00004684 bhi 0x4736                                        |             goto label_35;
                                                                 |         }
    0x00004686 ldr r0, [pc, 0x120]                               |         
    0x00004688 mov r1, r5                                        |         r1 = r5;
    0x0000468a movs r2, 0xfa                                     |         r2 = 0xfa;
    0x0000468c add r0, pc                                        |         r0 = 0x8e3a;
    0x0000468e adds r0, 4                                        |         r0 += 4;
    0x00004690 mov r5, r0                                        |         r5 = r0;
    0x00004692 blx 0x18e0                                        |         strcat_chk ();
    0x00004696 b 0x45f8                                          |         goto label_8;
                                                                 |     }
    0x00004698 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x0000469c beq 0x46a6                                        |         
    0x0000469e mov.w r3, -1                                      |         r3 = -1;
    0x000046a2 str.w r3, [sb]                                    |         __asm ("str.w r3, [sb]");
                                                                 |     }
    0x000046a6 movs r1, 1                                        |     r1 = 1;
    0x000046a8 mov.w r6, -1                                      |     r6 = -1;
    0x000046ac add r3, sp, 4                                     |     r3 += var_28h;
    0x000046ae movs r2, 0                                        |     r2 = 0;
    0x000046b0 mov r0, r1                                        |     r0 = r1;
    0x000046b2 str r6, [r7]                                      |     *(r7) = r6;
    0x000046b4 blx 0x1718                                        |     r0 = socketpair ();
    0x000046b8 cmp r0, 0                                         |     
                                                                 |     if (r0 < 0) {
    0x000046ba blt 0x4772                                        |         goto label_36;
                                                                 |     }
    0x000046bc ldr r0, [r4, 0xc]                                 |     r0 = *((r4 + 0xc));
    0x000046be ldrd r7, r8, [sp, 4]                              |     __asm ("ldrd r7, r8, [var_28h]");
    0x000046c2 blx 0x1ac0                                        |     r0 = globfree ();
    0x000046c6 subs r5, r0, 0                                    |     r5 = r0 - 0;
                                                                 |     if (r5 < r0) {
    0x000046c8 blt 0x476e                                        |         goto label_37;
                                                                 |     }
    0x000046ca ldr r1, [pc, 0xe0]                                |     
    0x000046cc movs r0, 0                                        |     r0 = 0;
    0x000046ce strb.w r0, [sp, 0x1c]                             |     var_40h = r0;
    0x000046d2 movs r3, 0x64                                     |     r3 = 0x64;
    0x000046d4 movs r2, 0x5f                                     |     r2 = 0x5f;
    0x000046d6 add r1, pc                                        |     r1 = 0x8e88;
    0x000046d8 ldm r1, {r0, r1}                                  |     r0 = *(r1);
                                                                 |     r1 = *((r1 + 4));
    0x000046da strh.w r1, [sp, 0x24]                             |     var_24h_2 = r1;
    0x000046de ldr r1, [r4, 8]                                   |     r1 = *((r4 + 8));
    0x000046e0 add r4, sp, 0x20                                  |     r4 += s;
    0x000046e2 str r0, [sp, 0x20]                                |     s = r0;
    0x000046e4 mov r0, r4                                        |     r0 = r4;
    0x000046e6 blx 0x15e0                                        |     strncat_chk ();
    0x000046ea mov r0, r4                                        |     r0 = r4;
    0x000046ec str r4, [sp, 0xc]                                 |     var_30h = r4;
    0x000046ee blx 0x1898                                        |     strlen (r0);
    0x000046f2 add r3, sp, 0x1c                                  |     r3 += var_40h;
    0x000046f4 adds r0, 1                                        |     r0++;
    0x000046f6 str r3, [sp, 0x14]                                |     var_38h = r3;
    0x000046f8 movs r3, 1                                        |     r3 = 1;
    0x000046fa str r0, [sp, 0x10]                                |     var_34h = r0;
    0x000046fc movs r2, 2                                        |     r2 = 2;
    0x000046fe str r3, [sp, 0x18]                                |     var_3ch = r3;
    0x00004700 add r1, sp, 0xc                                   |     r1 += var_30h;
    0x00004702 mov r3, r7                                        |     r3 = r7;
    0x00004704 mov r0, r5                                        |     r0 = r5;
    0x00004706 blx 0x1a38                                        |     r0 = fcn_00001a38 ();
    0x0000470a cmp r0, 0                                         |     
    0x0000470c mov r0, r5                                        |     r0 = r5;
                                                                 |     if (r0 < 0) {
    0x0000470e blt 0x4782                                        |         goto label_38;
                                                                 |     }
    0x00004710 blx 0x1ab4                                        |     fdipc_client_socket ();
    0x00004714 mov r0, r7                                        |     r0 = r7;
    0x00004716 blx 0x1ab4                                        |     fdipc_client_socket ();
                                                                 |     do {
                                                                 | label_9:
    0x0000471a ldr r2, [pc, 0x94]                                |         
    0x0000471c ldr r3, [pc, 0x74]                                |         r3 = *(0x4794);
    0x0000471e add r2, pc                                        |         r2 = 0x8ed4;
    0x00004720 ldr r3, [r2, r3]                                  |         r3 = *(0x8ed4);
    0x00004722 ldr r2, [r3]                                      |         r2 = *(0x8ed4);
    0x00004724 ldr r3, [sp, 0x84]                                |         r3 = var_84h;
    0x00004726 eors r2, r3                                       |         r2 ^= r3;
    0x00004728 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0000472c bne 0x478a                                        |             goto label_34;
                                                                 |         }
    0x0000472e mov r0, r8                                        |         r0 = r8;
    0x00004730 add sp, 0x88                                      |         
    0x00004732 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}            |         
                                                                 | label_35:
    0x00004736 ldr r2, [pc, 0x7c]                                |         
    0x00004738 movs r1, 1                                        |         r1 = 1;
    0x0000473a movs r0, 3                                        |         r0 = 3;
    0x0000473c add r2, pc                                        |         r2 = 0x8ef6;
    0x0000473e blx 0x19cc                                        |         fcn_000019cc ();
                                                                 | label_32:
    0x00004742 movs r3, 0                                        |         r3 = 0;
    0x00004744 mov r8, r3                                        |         r8 = r3;
    0x00004746 str r3, [r6]                                      |         *(r6) = r3;
    0x00004748 b 0x471a                                          |         
                                                                 |     } while (1);
                                                                 | label_33:
    0x0000474a ldr r2, [pc, 0x6c]                                |     
    0x0000474c movs r1, 1                                        |     r1 = 1;
    0x0000474e movs r0, 3                                        |     r0 = 3;
    0x00004750 add r2, pc                                        |     r2 = 0x8f0e;
    0x00004752 blx 0x19cc                                        |     fcn_000019cc ();
    0x00004756 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x0000475a beq 0x4764                                        |         
    0x0000475c mov.w r3, -1                                      |         r3 = -1;
    0x00004760 str.w r3, [sb]                                    |         __asm ("str.w r3, [sb]");
                                                                 |     }
    0x00004764 mov.w r3, -1                                      |     r3 = -1;
    0x00004768 mov r8, r3                                        |     r8 = r3;
    0x0000476a str r3, [r7]                                      |     *(r7) = r3;
    0x0000476c b 0x471a                                          |     goto label_9;
                                                                 | label_37:
    0x0000476e mov r8, r6                                        |     r8 = r6;
    0x00004770 b 0x471a                                          |     goto label_9;
                                                                 | label_36:
    0x00004772 ldr r2, [pc, 0x48]                                |     
    0x00004774 movs r1, 1                                        |     r1 = 1;
    0x00004776 movs r0, 3                                        |     r0 = 3;
    0x00004778 mov r8, r6                                        |     r8 = r6;
    0x0000477a add r2, pc                                        |     r2 = 0x8f3c;
    0x0000477c blx 0x19cc                                        |     fcn_000019cc ();
    0x00004780 b 0x471a                                          |     goto label_9;
                                                                 | label_38:
    0x00004782 mov r8, r6                                        |     r8 = r6;
    0x00004784 blx 0x1ab4                                        |     fdipc_client_socket ();
    0x00004788 b 0x471a                                          |     goto label_9;
                                                                 | label_34:
    0x0000478a blx 0x16f4                                        |     stack_chk_fail ();
    0x0000478e nop                                               |     
    0x00004790 cmp r0, 0x28                                      |     
    0x00004792 movs r1, r0                                       |     r1 = r0;
    0x00004794 lsls r0, r3, 7                                    |     r0 = r3 << 7;
    0x00004796 movs r0, r0                                       |     
    0x00004798 cmp r3, 0x82                                      |     
    0x0000479a movs r1, r0                                       |     r1 = r0;
    0x0000479c movs r7, 0xe0                                     |     r7 = 0xe0;
    0x0000479e movs r1, r0                                       |     r1 = r0;
    0x000047a0 cmp r3, 0x2a                                      |     
    0x000047a2 movs r1, r0                                       |     r1 = r0;
    0x000047a4 asrs r6, r1, 0x18                                 |     r6 = r1 >> 0x18;
    0x000047a6 movs r0, r0                                       |     
    0x000047a8 cmp r2, 0xf0                                      |     
    0x000047aa movs r1, r0                                       |     r1 = r0;
    0x000047ac asrs r2, r5, 0x16                                 |     r2 = r5 >> 0x16;
    0x000047ae movs r0, r0                                       |     
    0x000047b0 movs r6, 0xea                                     |     r6 = 0xea;
    0x000047b2 movs r1, r0                                       |     r1 = r0;
    0x000047b4 asrs r4, r6, 0x13                                 |     r4 = r6 >> 0x13;
    0x000047b6 movs r0, r0                                       |     
    0x000047b8 asrs r0, r7, 0x14                                 |     r0 = r7 >> 0x14;
    0x000047ba movs r0, r0                                       |     
    0x000047bc asrs r2, r2, 0x13                                 |     r2 >>= 0x13;
    0x000047be 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/bin/vftpd @ 0x47c0 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.000047c0 ()                                  | void fcn_000047c0 (int16_t arg_100h, int16_t arg_10ch, void * arg_30ch, int16_t arg_50ch, char * arg1, int16_t arg2, int16_t arg3) {
                                                             |     int16_t var_0h;
                                                             |     int16_t var_4h;
                                                             |     int16_t var_8h;
                                                             |     int16_t var_ch;
                                                             |     int16_t var_10h;
                                                             |     int16_t var_14h;
                                                             |     int16_t var_18h;
                                                             |     int16_t var_24h;
                                                             |     char * var_28h;
                                                             |     char * src;
                                                             |     int16_t var_30h;
                                                             |     int16_t var_34h;
                                                             |     int16_t var_38h;
                                                             |     char * s;
                                                             |     int16_t var_40h;
                                                             |     int16_t var_44h;
                                                             |     int16_t var_4ch;
                                                             |     int16_t var_50h;
                                                             |     time_t * timer;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
    0x000047c0 svcmi 0xf0e92d                                |     __asm ("svcmi 0xf0e92d");
    0x000047c4 subw sp, sp, 0x514                            |     __asm ("subw sp, sp, 0x514");
    0x000047c8 str r1, [sp, 0x30]                            |     var_30h = r1;
    0x000047ca mov fp, r2                                    |     
    0x000047cc ldr.w r1, [pc, 0x498]                         |     r1 = *(0x00004c68);
    0x000047d0 ldr.w r2, [pc, 0x498]                         |     
    0x000047d4 ldrb r3, [r0]                                 |     r3 = *(r0);
    0x000047d6 add r1, pc                                    |     r1 += pc;
    0x000047d8 str r0, [sp, 0x28]                            |     var_28h = r0;
    0x000047da ldr r2, [r1, r2]                              |     r2 = *((r1 + r2));
    0x000047dc ldr r2, [r2]                                  |     r2 = *(0x4c6c);
    0x000047de str.w r2, [sp, 0x50c]                         |     __asm ("str.w r2, [arg_50ch]");
    0x000047e2 mov.w r2, 0                                   |     r2 = 0;
    0x000047e6 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x000047e8 beq.w 0x4c52                                  |         goto label_7;
                                                             |     }
    0x000047ec mov r4, r0                                    |     r4 = r0;
    0x000047ee blx 0x1898                                    |     strlen (r0);
    0x000047f2 add r0, r4                                    |     r0 += r4;
    0x000047f4 ldrb r3, [r0, -0x1]                           |     r3 = *((r0 - 0x1));
    0x000047f8 sub.w r3, r3, 0x2f                            |     r3 -= 0x2f;
    0x000047fc clz r3, r3                                    |     r3 &= r3;
    0x00004800 lsrs r3, r3, 5                                |     r3 >>= 5;
    0x00004802 str r3, [sp, 0x34]                            |     var_34h = r3;
                                                             | label_6:
    0x00004804 ldr.w r3, [pc, 0x468]                         |     
    0x00004808 add r3, pc                                    |     
    0x0000480a str r3, [sp, 0x40]                            |     var_40h = r3;
    0x0000480c ldr.w r3, [pc, 0x464]                         |     r3 = *(0x00004c74);
    0x00004810 add r3, pc                                    |     
    0x00004812 adds r3, 8                                    |     r3 += 8;
    0x00004814 str r3, [sp, 0x44]                            |     var_44h = r3;
    0x00004816 ldr.w r3, [pc, 0x460]                         |     r3 = *(0x00004c78);
    0x0000481a add r3, pc                                    |     r3 = 0x124ae;
    0x0000481c adds r3, 8                                    |     r3 += 8;
    0x0000481e str r3, [sp, 0x3c]                            |     s = r3;
    0x00004820 movw r3, 0xcc80                               |     
    0x00004824 movt r3, 0xfe1e                               |     r3 = 0xfe1ecc80;
    0x00004828 str r3, [sp, 0x38]                            |     var_38h = r3;
    0x0000482a b 0x4a58                                      |     
                                                             |     while (r3 == 0x2000) {
    0x0000482c ldrd r3, r1, [r4, 0x20]                       |         __asm ("ldrd r3, r1, [r4, 0x20]");
    0x00004830 add.w sl, sp, 0x100                           |         sl += arg_100h;
    0x00004834 ldr.w r2, [pc, 0x444]                         |         
    0x00004838 mov r0, sl                                    |         r0 = sl;
    0x0000483a add r2, pc                                    |         r2 = 0x94ba;
    0x0000483c str r2, [sp]                                  |         *(sp) = r2;
    0x0000483e lsrs r2, r3, 8                                |         r2 = r3 >> 8;
    0x00004840 uxtb r3, r3                                   |         r3 = (int8_t) r3;
    0x00004842 orr.w r2, r2, r1, lsl 24                      |         r2 |= (r1 << 24);
    0x00004846 str r3, [sp, 8]                               |         var_8h = r3;
    0x00004848 movs r3, 0xb                                  |         r3 = 0xb;
    0x0000484a str r2, [sp, 4]                               |         var_4h = r2;
    0x0000484c mov r1, r3                                    |         r1 = r3;
    0x0000484e movs r2, 1                                    |         r2 = 1;
    0x00004850 blx 0x1afc                                    |         fcn_00001afc ();
                                                             | label_0:
    0x00004854 ldr.w r2, [pc, 0x428]                         |         
    0x00004858 ldr.w ip, [pc, 0x428]                         |         ip = *(0x00004c84);
    0x0000485c ldr r3, [r4, 0x10]                            |         r3 = *((r4 + 0x10));
    0x0000485e add r2, pc                                    |         r2 = 0x94e2;
    0x00004860 ldm r2, {r0, r1, r2}                          |         r0 = *(r2);
                                                             |         r1 = *((r2 + 4));
                                                             |         r2 = *((r2 + 8));
    0x00004862 add ip, pc                                    |         
    0x00004864 add.w r7, ip, 0x58                            |         r7 = ip + 0x58;
    0x00004868 and lr, r3, 0xf000                            |         lr = r3 & 0xf000;
    0x0000486c cmp.w lr, 0x4000                              |         
    0x00004870 stm r7!, {r0, r1}                             |         *(r7!) = r0;
                                                             |         *((r7! + 4)) = r1;
    0x00004872 strh r2, [r7], 2                              |         *(r7) = r2;
                                                             |         r7 += 2;
    0x00004876 lsr.w r2, r2, 0x10                            |         r2 >>= 0x10;
    0x0000487a strb r2, [r7]                                 |         *(r7) = r2;
    0x0000487c itt eq                                        |         
                                                             |         if (lr != 0x4000) {
    0x0000487e moveq r2, 0x64                                |             r2 = 0x64;
                                                             |         }
                                                             |         if (lr != 0x4000) {
    0x00004880 strbeq r2, [ip, 0x58]                         |             *((ip + 0x58)) = r2;
                                                             |         }
                                                             |         if (lr != 0x4000) {
    0x00004884 beq 0x48a4                                    |             
    0x00004886 cmp.w lr, 0x2000                              |             
    0x0000488a itt eq                                        |             
                                                             |             if (lr != 0x2000) {
    0x0000488c moveq r2, 0x63                                |                 r2 = 0x63;
                                                             |             }
                                                             |             if (lr != 0x2000) {
    0x0000488e strbeq r2, [ip, 0x58]                         |                 *((ip + 0x58)) = r2;
                                                             |             }
                                                             |             if (lr == 0x2000) {
    0x00004892 beq 0x48a4                                    |                 goto label_1;
                                                             |             }
    0x00004894 cmp.w lr, 0x6000                              |             
    0x00004898 itt eq                                        |             
                                                             |             if (lr != 0x6000) {
    0x0000489a moveq r2, 0x62                                |                 r2 = 0x62;
                                                             |             }
                                                             |             if (lr != 0x6000) {
    0x0000489c strbeq r2, [ip, 0x58]                         |                 *((ip + 0x58)) = r2;
                                                             |             }
                                                             |             if (lr != 0x6000) {
    0x000048a0 bne.w 0x4b46                                  |                 goto label_8;
                                                             |             }
                                                             |         }
                                                             | label_1:
    0x000048a4 lsls r7, r3, 0x17                             |         r7 = r3 << 0x17;
                                                             |         if (r7 < r3) {
    0x000048a6 bpl 0x48b2                                    |             
    0x000048a8 ldr r2, [pc, 0x3dc]                           |             
    0x000048aa movs r1, 0x72                                 |             r1 = 0x72;
    0x000048ac add r2, pc                                    |             r2 = 0x9538;
    0x000048ae strb.w r1, [r2, 0x59]                         |             *((r2 + 0x59)) = r1;
                                                             |         }
    0x000048b2 lsls r0, r3, 0x18                             |         r0 = r3 << 0x18;
                                                             |         if (r0 < r3) {
    0x000048b4 bpl 0x48c0                                    |             
    0x000048b6 ldr r2, [pc, 0x3d4]                           |             
    0x000048b8 movs r1, 0x77                                 |             r1 = 0x77;
    0x000048ba add r2, pc                                    |             r2 = 0x954c;
    0x000048bc strb.w r1, [r2, 0x5a]                         |             *((r2 + 0x5a)) = r1;
                                                             |         }
    0x000048c0 ands r7, r3, 0x40                             |         r7 = r3 & 0x40;
                                                             |         if (r7 != r3) {
    0x000048c4 beq 0x48d0                                    |             
    0x000048c6 ldr r2, [pc, 0x3c8]                           |             
    0x000048c8 movs r1, 0x78                                 |             r1 = 0x78;
    0x000048ca add r2, pc                                    |             r2 = 0x9560;
    0x000048cc strb.w r1, [r2, 0x5b]                         |             *((r2 + 0x5b)) = r1;
                                                             |         }
    0x000048d0 lsls r1, r3, 0x1a                             |         r1 = r3 << 0x1a;
                                                             |         if (r1 < r3) {
    0x000048d2 bpl 0x48de                                    |             
    0x000048d4 ldr r2, [pc, 0x3bc]                           |             
    0x000048d6 movs r1, 0x72                                 |             r1 = 0x72;
    0x000048d8 add r2, pc                                    |             r2 = 0x9570;
    0x000048da strb.w r1, [r2, 0x5c]                         |             *((r2 + 0x5c)) = r1;
                                                             |         }
    0x000048de lsls r0, r3, 0x1b                             |         r0 = r3 << 0x1b;
                                                             |         if (r0 < r3) {
    0x000048e0 bpl 0x48ec                                    |             
    0x000048e2 ldr r2, [pc, 0x3b4]                           |             
    0x000048e4 movs r1, 0x77                                 |             r1 = 0x77;
    0x000048e6 add r2, pc                                    |             r2 = 0x9584;
    0x000048e8 strb.w r1, [r2, 0x5d]                         |             *((r2 + 0x5d)) = r1;
                                                             |         }
    0x000048ec ands r0, r3, 8                                |         r0 = r3 & 8;
                                                             |         if (r0 != r3) {
    0x000048f0 beq 0x48fc                                    |             
    0x000048f2 ldr r2, [pc, 0x3a8]                           |             
    0x000048f4 movs r1, 0x78                                 |             r1 = 0x78;
    0x000048f6 add r2, pc                                    |             r2 = 0x9598;
    0x000048f8 strb.w r1, [r2, 0x5e]                         |             *((r2 + 0x5e)) = r1;
                                                             |         }
    0x000048fc lsls r1, r3, 0x1d                             |         r1 = r3 << 0x1d;
                                                             |         if (r1 < r3) {
    0x000048fe bpl 0x490a                                    |             
    0x00004900 ldr r2, [pc, 0x39c]                           |             
    0x00004902 movs r1, 0x72                                 |             r1 = 0x72;
    0x00004904 add r2, pc                                    |             r2 = 0x95a8;
    0x00004906 strb.w r1, [r2, 0x5f]                         |             *((r2 + 0x5f)) = r1;
                                                             |         }
    0x0000490a lsls r1, r3, 0x1e                             |         r1 = r3 << 0x1e;
                                                             |         if (r1 < r3) {
    0x0000490c bpl 0x4918                                    |             
    0x0000490e ldr r2, [pc, 0x394]                           |             
    0x00004910 movs r1, 0x77                                 |             r1 = 0x77;
    0x00004912 add r2, pc                                    |             r2 = 0x95bc;
    0x00004914 strb.w r1, [r2, 0x60]                         |             *((r2 + 0x60)) = r1;
    0x00004916 asrs r0, r4, 1                                |             r0 = r4 >> 1;
                                                             |         }
    0x00004918 ands r1, r3, 1                                |         r1 = r3 & 1;
                                                             |         if (r1 != r3) {
    0x0000491c beq 0x492a                                    |             
    0x0000491e ldr r2, [pc, 0x388]                           |             
    0x00004920 mov.w ip, 0x78                                |             
    0x00004924 add r2, pc                                    |             r2 = 0x95d2;
    0x00004926 strb.w ip, [r2, 0x61]                         |             *((r2 + 0x61)) = ip;
                                                             |         }
    0x0000492a tst.w r3, 0x800                               |         
                                                             |         if ((r3 & 0x800) != 0) {
    0x0000492e beq 0x4940                                    |             
    0x00004930 ldr r2, [pc, 0x378]                           |             
    0x00004932 cmp r7, 0                                     |             
    0x00004934 ite ne                                        |             
                                                             |             if (r7 == 0) {
    0x00004936 movne r7, 0x73                                |                 r7 = 0x73;
                                                             |             }
                                                             |             if (r7 != 0) {
    0x00004938 moveq r7, 0x53                                |                 r7 = 0x53;
                                                             |             }
    0x0000493a add r2, pc                                    |             r2 = 0x95ea;
    0x0000493c strb.w r7, [r2, 0x5b]                         |             *((r2 + 0x5b)) = r7;
                                                             |         }
    0x00004940 lsls r7, r3, 0x15                             |         r7 = r3 << 0x15;
                                                             |         if (r7 < r3) {
    0x00004942 bpl 0x4954                                    |             
    0x00004944 ldr r2, [pc, 0x368]                           |             
    0x00004946 cmp r0, 0                                     |             
    0x00004948 ite ne                                        |             
                                                             |             if (r0 == 0) {
    0x0000494a movne r0, 0x73                                |                 r0 = 0x73;
                                                             |             }
                                                             |             if (r0 != 0) {
    0x0000494c moveq r0, 0x53                                |                 r0 = 0x53;
                                                             |             }
    0x0000494e add r2, pc                                    |             r2 = 0x9602;
    0x00004950 strb.w r0, [r2, 0x5e]                         |             *((r2 + 0x5e)) = r0;
                                                             |         }
    0x00004954 lsls r3, r3, 0x16                             |         r3 <<= 0x16;
                                                             |         if (r3 < r3) {
    0x00004956 bpl 0x4968                                    |             
    0x00004958 ldr r3, [pc, 0x358]                           |             
    0x0000495a cmp r1, 0                                     |             
    0x0000495c ite ne                                        |             
                                                             |             if (r1 == 0) {
    0x0000495e movne r2, 0x74                                |                 r2 = 0x74;
                                                             |             }
                                                             |             if (r1 != 0) {
    0x00004960 moveq r2, 0x54                                |                 r2 = 0x54;
                                                             |             }
    0x00004962 add r3, pc                                    |             r3 = 0x961a;
    0x00004964 strb.w r2, [r3, 0x61]                         |             *((r3 + 0x61)) = r2;
                                                             |         }
    0x00004968 ldr r3, [r4, 0x14]                            |         r3 = *((r4 + 0x14));
    0x0000496a add.w sb, sp, 0xa8                            |         sb += timer;
    0x0000496e ldr r2, [r4, 0x40]                            |         r2 = *((r4 + 0x40));
    0x00004970 add r7, sp, 0x4c                              |         r7 += var_4ch;
    0x00004972 ldr.w r8, [pc, 0x344]                         |         r8 = *(0x00004cb8);
    0x00004976 mov r0, sb                                    |         r0 = sb;
    0x00004978 str r3, [sp, 0x24]                            |         var_24h = r3;
    0x0000497a str r2, [r7]                                  |         *(r7) = r2;
    0x0000497c add r8, pc                                    |         r8 += pc;
    0x0000497e blx 0x16a0                                    |         time (r0);
    0x00004982 mov r0, r7                                    |         r0 = r7;
    0x00004984 blx 0x16d0                                    |         ctime (r0);
    0x00004988 movs r2, 0x1a                                 |         r2 = 0x1a;
    0x0000498a adds r1, r0, 4                                |         r1 = r0 + 4;
    0x0000498c str r0, [sp, 0x2c]                            |         src = r0;
    0x0000498e add.w r0, r8, 0x64                            |         r0 = r8 + 0x64;
    0x00004992 blx 0x17c0                                    |         strcpy_chk ()
    0x00004996 ldrb.w r2, [r8, 0x68]                         |         r2 = *((r8 + 0x68));
    0x0000499a movs r1, 0                                    |         r1 = 0;
    0x0000499c ldr.w r3, [sb]                                |         r3 = *(sb);
    0x000049a0 strb.w r1, [r8, 0x70]                         |         *((r8 + 0x70)) = r1;
    0x000049a4 cmp r2, 0x30                                  |         
    0x000049a6 itt eq                                        |         
                                                             |         if (r2 != 0x30) {
    0x000049a8 moveq r2, 0x20                                |             r2 = 0x20;
                                                             |         }
                                                             |         if (r2 != 0x30) {
    0x000049aa strbeq r2, [r8, 0x68]                         |             *((r8 + 0x68)) = r2;
                                                             |         }
    0x000049ae ldr r2, [r7]                                  |         r2 = *(r7);
    0x000049b0 cmp r2, r3                                    |         
                                                             |         if (r2 <= r3) {
    0x000049b2 bgt 0x49bc                                    |             
    0x000049b4 ldr r1, [sp, 0x38]                            |             r1 = var_38h;
    0x000049b6 add r3, r1                                    |             r3 += r1;
    0x000049b8 cmp r2, r3                                    |             
                                                             |             if (r2 >= r3) {
    0x000049ba bge 0x49d2                                    |                 goto label_9;
                                                             |             }
                                                             |         }
    0x000049bc ldr r0, [pc, 0x2fc]                           |         
    0x000049be movs r3, 0x20                                 |         r3 = 0x20;
    0x000049c0 ldr r1, [sp, 0x2c]                            |         r1 = src;
    0x000049c2 movs r2, 4                                    |         r2 = 4;
    0x000049c4 add r0, pc                                    |         r0 = 0x9684;
    0x000049c6 strb.w r3, [r0, 0x6b]                         |         *((r0 + 0x6b)) = r3;
    0x000049ca adds r1, 0x14                                 |         r1 += 0x14;
    0x000049cc adds r0, 0x6c                                 |         r0 += 0x6c;
    0x000049ce blx 0x1940                                    |         strncpy (r0, r1, r2);
                                                             | label_9:
    0x000049d2 ldr r3, [sp, 0x24]                            |         r3 = var_24h;
    0x000049d4 ldr r2, [pc, 0x2e8]                           |         
    0x000049d6 str.w sl, [sp, 0x14]                          |         __asm ("str.w sl, [var_14h]");
    0x000049da str r3, [sp, 8]                               |         var_8h = r3;
    0x000049dc ldr r3, [pc, 0x2e4]                           |         
    0x000049de add r2, pc                                    |         r2 = 0x96a2;
    0x000049e0 add.w r1, r2, 0x64                            |         r1 = r2 + 0x64;
    0x000049e4 add.w r7, r2, 0x80                            |         r7 = r2 + 0x80;
    0x000049e8 str r1, [sp, 0x18]                            |         var_18h = r1;
    0x000049ea add.w r1, r2, 0x34                            |         r1 = r2 + 0x34;
    0x000049ee add r3, pc                                    |         r3 = 0x96b6;
    0x000049f0 str r1, [sp, 0x10]                            |         var_10h = r1;
    0x000049f2 str r3, [sp]                                  |         *(sp) = r3;
    0x000049f4 add.w r1, r2, 8                               |         r1 = r2 + 8;
    0x000049f8 mov.w r3, 0x200                               |         r3 = 0x200;
    0x000049fc adds r2, 0x58                                 |         r2 += 0x58;
    0x000049fe str r1, [sp, 0xc]                             |         var_ch = r1;
    0x00004a00 mov r0, r7                                    |         r0 = r7;
    0x00004a02 mov r1, r3                                    |         r1 = r3;
    0x00004a04 str r2, [sp, 4]                               |         var_4h = r2;
    0x00004a06 movs r2, 1                                    |         r2 = 1;
    0x00004a08 blx 0x1afc                                    |         fcn_00001afc ();
    0x00004a0c mov r0, r7                                    |         r0 = r7;
    0x00004a0e blx 0x1898                                    |         strlen (r0);
    0x00004a12 mov r1, r7                                    |         r1 = r7;
    0x00004a14 mov r2, r0                                    |         r2 = r0;
    0x00004a16 mov r0, fp                                    |         r0 = fp;
    0x00004a18 bl 0x4034                                     |         r0 = fcn_00004034 (r0, r1, r2);
    0x00004a1c cmp r0, 0                                     |         
                                                             |         if (r0 < 0) {
    0x00004a1e blt.w 0x4bee                                  |             goto label_10;
                                                             |         }
    0x00004a22 mov r0, r5                                    |         r0 = r5;
    0x00004a24 blx 0x1898                                    |         strlen (r0);
    0x00004a28 mov r1, r5                                    |         r1 = r5;
    0x00004a2a mov r2, r0                                    |         r2 = r0;
    0x00004a2c mov r0, fp                                    |         r0 = fp;
    0x00004a2e bl 0x4034                                     |         r0 = fcn_00004034 (r0, r1, r2);
    0x00004a32 cmp r0, 0                                     |         
                                                             |         if (r0 < 0) {
    0x00004a34 blt.w 0x4bee                                  |             goto label_10;
                                                             |         }
    0x00004a38 ldr r3, [r4, 0x10]                            |         r3 = *((r4 + 0x10));
    0x00004a3a and r3, r3, 0xf000                            |         r3 &= 0xf000;
    0x00004a3e cmp.w r3, 0xa000                              |         
                                                             |         if (r3 == 0xa000) {
    0x00004a42 beq.w 0x4b74                                  |             goto label_11;
                                                             |         }
                                                             | label_2:
    0x00004a46 ldr r1, [pc, 0x280]                           |         
    0x00004a48 movs r2, 2                                    |         r2 = 2;
    0x00004a4a mov r0, fp                                    |         r0 = fp;
    0x00004a4c add r1, pc                                    |         r1 = 0x971a;
    0x00004a4e bl 0x4034                                     |         r0 = fcn_00004034 (r0, r1, r2);
    0x00004a52 cmp r0, 0                                     |         
                                                             |         if (r0 < 0) {
    0x00004a54 blt.w 0x4bee                                  |             goto label_10;
                                                             |         }
    0x00004a58 ldr r0, [sp, 0x30]                            |         r0 = var_30h;
    0x00004a5a blx 0x19fc                                    |         r0 = fcn_000019fc ();
    0x00004a5e mov r5, r0                                    |         r5 = r0;
    0x00004a60 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00004a62 beq.w 0x4bf2                                  |             goto label_12;
                                                             |         }
    0x00004a66 ldr r1, [sp, 0x28]                            |         r1 = var_28h;
    0x00004a68 add r6, sp, 0x10c                             |         r6 += arg_10ch;
    0x00004a6a movs r2, 0                                    |         r2 = 0;
    0x00004a6c strb r2, [r6]                                 |         *(r6) = r2;
    0x00004a6e ldrb r3, [r1]                                 |         r3 = *(r1);
    0x00004a70 cmp r3, 0x2e                                  |         
                                                             |         if (r3 == 0x2e) {
    0x00004a72 bne 0x4a78                                    |             
    0x00004a74 ldrb r3, [r1, 1]                              |             r3 = *((r1 + 1));
                                                             |             if (r3 == 0) {
    0x00004a76 cbz r3, 0x4a92                                |                 goto label_3;
                                                             |             }
                                                             |         }
    0x00004a78 ldr r1, [sp, 0x28]                            |         r1 = var_28h;
    0x00004a7a movw r2, 0x1ff                                |         r2 = 0x1ff;
    0x00004a7e mov r0, r6                                    |         r0 = r6;
    0x00004a80 blx 0x1940                                    |         strncpy (r0, r1, r2);
    0x00004a84 movs r3, 0                                    |         r3 = 0;
    0x00004a86 strb.w r3, [r6, 0x1ff]                        |         *((r6 + 0x1ff)) = r3;
    0x00004a8a ldr r3, [sp, 0x34]                            |         r3 = var_34h;
    0x00004a8c cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x00004a8e beq.w 0x4c10                                  |             goto label_13;
                                                             |         }
                                                             | label_3:
    0x00004a92 adds r5, 0xb                                  |         r5 += 0xb;
    0x00004a94 mov.w r2, 0x200                               |         r2 = 0x200;
    0x00004a98 mov r1, r5                                    |         r1 = r5;
    0x00004a9a mov r0, r6                                    |         r0 = r6;
    0x00004a9c add r4, sp, 0x50                              |         r4 += var_50h;
    0x00004a9e blx 0x18e0                                    |         strcat_chk ();
    0x00004aa2 mov r1, r4                                    |         r1 = r4;
    0x00004aa4 mov r0, r6                                    |         r0 = r6;
    0x00004aa6 blx 0x17d8                                    |         r0 = lstat (r0, r1);
    0x00004aaa cmp r0, 0                                     |         
                                                             |         if (r0 < 0) {
    0x00004aac blt.w 0x4c56                                  |             goto label_14;
                                                             |         }
    0x00004ab0 ldr r3, [pc, 0x218]                           |         
    0x00004ab2 ldr r0, [r4, 0x18]                            |         r0 = *((r4 + 0x18));
    0x00004ab4 add r3, pc                                    |         r3 = 0x9784;
    0x00004ab6 ldr r2, [r3]                                  |         r2 = *(0x9784);
                                                             |         if (r2 != 0) {
    0x00004ab8 cbz r2, 0x4ac0                                |             
    0x00004aba ldr r3, [r3, 4]                               |             r3 = *((r3 + 4));
    0x00004abc cmp r3, r0                                    |             
                                                             |             if (r3 == r0) {
    0x00004abe beq 0x4ae4                                    |                 goto label_15;
                                                             |             }
                                                             |         }
    0x00004ac0 blx 0x161c                                    |         r0 = getpwuid ();
    0x00004ac4 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00004ac6 beq.w 0x4c3a                                  |             goto label_16;
                                                             |         }
    0x00004aca ldr r2, [pc, 0x204]                           |         
    0x00004acc movs r1, 0x21                                 |         r1 = 0x21;
    0x00004ace ldr r3, [r0]                                  |         r3 = *(r0);
    0x00004ad0 ldr r0, [sp, 0x3c]                            |         r0 = s;
    0x00004ad2 add r2, pc                                    |         r2 = 0x97a8;
    0x00004ad4 blx 0x1904                                    |         snprintf (r0, r1, r2, r3);
                                                             | label_5:
    0x00004ad8 ldr r3, [pc, 0x1f8]                           |         
    0x00004ada ldr r2, [r4, 0x18]                            |         r2 = *((r4 + 0x18));
    0x00004adc add r3, pc                                    |         r3 = 0x97b4;
    0x00004ade str r2, [r3, 4]                               |         *((r3 + 4)) = r2;
    0x00004ae0 movs r2, 1                                    |         r2 = 1;
    0x00004ae2 str r2, [r3]                                  |         *(r3) = r2;
                                                             | label_15:
    0x00004ae4 ldr r3, [pc, 0x1f0]                           |         
    0x00004ae6 ldr r0, [r4, 0x1c]                            |         r0 = *((r4 + 0x1c));
    0x00004ae8 add r3, pc                                    |         r3 = 0x97c4;
    0x00004aea ldr r2, [r3, 0x2c]                            |         r2 = *(0x97f0);
                                                             |         if (r2 != 0) {
    0x00004aec cbz r2, 0x4af4                                |             
    0x00004aee ldr r3, [r3, 0x30]                            |             r3 = *((r3 + 0x30));
    0x00004af0 cmp r3, r0                                    |             
                                                             |             if (r3 == r0) {
    0x00004af2 beq 0x4b1c                                    |                 goto label_17;
                                                             |             }
                                                             |         }
    0x00004af4 blx 0x1af0                                    |         r0 = snprintf_chk ();
    0x00004af8 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00004afa beq.w 0x4c1e                                  |             goto label_18;
                                                             |         }
    0x00004afe ldr r3, [r0]                                  |         r3 = *(r0);
    0x00004b00 movs r1, 0x21                                 |         r1 = 0x21;
    0x00004b02 ldr r0, [pc, 0x1d8]                           |         
    0x00004b04 ldr r2, [pc, 0x1d8]                           |         
    0x00004b06 add r0, pc                                    |         r0 = 0x97e8;
    0x00004b08 adds r0, 0x34                                 |         r0 += 0x34;
    0x00004b0a add r2, pc                                    |         r2 = 0x97ee;
    0x00004b0c blx 0x1904                                    |         snprintf (r0, r1, r2, r3);
                                                             | label_4:
    0x00004b10 ldr r3, [pc, 0x1d0]                           |         
    0x00004b12 ldr r2, [r4, 0x1c]                            |         r2 = *((r4 + 0x1c));
    0x00004b14 add r3, pc                                    |         r3 = 0x97fc;
    0x00004b16 str r2, [r3, 0x30]                            |         *((r3 + 0x30)) = r2;
    0x00004b18 movs r2, 1                                    |         r2 = 1;
    0x00004b1a str r2, [r3, 0x2c]                            |         *((r3 + 0x2c)) = r2;
                                                             | label_17:
    0x00004b1c ldr r3, [r4, 0x10]                            |         r3 = *((r4 + 0x10));
    0x00004b1e and r3, r3, 0xb000                            |         r3 &= 0xb000;
    0x00004b22 cmp.w r3, 0x2000                              |         
    0x00004b26 beq.w 0x482c                                  |         
                                                             |     }
    0x00004b2a ldr r3, [r4, 0x2c]                            |     r3 = *((r4 + 0x2c));
    0x00004b2c add.w sl, sp, 0x100                           |     sl += arg_100h;
    0x00004b30 movs r2, 1                                    |     r2 = 1;
    0x00004b32 mov r0, sl                                    |     r0 = sl;
    0x00004b34 str r3, [sp, 4]                               |     var_4h = r3;
    0x00004b36 ldr r3, [pc, 0x1b0]                           |     
    0x00004b38 add r3, pc                                    |     r3 = 0x9826;
    0x00004b3a str r3, [sp]                                  |     *(sp) = r3;
    0x00004b3c movs r3, 0xb                                  |     r3 = 0xb;
    0x00004b3e mov r1, r3                                    |     r1 = r3;
    0x00004b40 blx 0x1afc                                    |     fcn_00001afc ();
    0x00004b44 b 0x4854                                      |     goto label_0;
                                                             | label_8:
    0x00004b46 cmp.w lr, 0x1000                              |     
    0x00004b4a itt eq                                        |     
                                                             |     if (lr != 0x1000) {
    0x00004b4c moveq r2, 0x70                                |         r2 = 0x70;
                                                             |     }
                                                             |     if (lr == 0x1000) {
    0x00004b4e strbeq r2, [ip, 0x58]                         |         *((ip + 0x58)) = r2;
                                                             |         goto label_19;
                                                             |     }
                                                             |     if (lr == 0x1000) {
                                                             | label_19:
    0x00004b52 beq.w 0x48a4                                  |         goto label_1;
                                                             |     }
    0x00004b56 cmp.w lr, 0xa000                              |     
    0x00004b5a itt eq                                        |     
                                                             |     if (lr != 0xa000) {
    0x00004b5c moveq r2, 0x6c                                |         r2 = 0x6c;
                                                             |     }
                                                             |     if (lr == 0xa000) {
    0x00004b5e strbeq r2, [ip, 0x58]                         |         *((ip + 0x58)) = r2;
                                                             |         goto label_20;
                                                             |     }
                                                             |     if (lr == 0xa000) {
                                                             | label_20:
    0x00004b62 beq.w 0x48a4                                  |         goto label_1;
                                                             |     }
    0x00004b66 cmp.w lr, 0xc000                              |     
    0x00004b6a itt eq                                        |     
                                                             |     if (lr != 0xc000) {
    0x00004b6c moveq r2, 0x73                                |         r2 = 0x73;
                                                             |     }
                                                             |     if (lr != 0xc000) {
    0x00004b6e strbeq r2, [ip, 0x58]                         |         *((ip + 0x58)) = r2;
                                                             |     }
    0x00004b72 b 0x48a4                                      |     goto label_1;
                                                             | label_11:
    0x00004b74 add r4, sp, 0x30c                             |     r4 += arg_30ch;
    0x00004b76 mov.w r2, 0x200                               |     r2 = 0x200;
    0x00004b7a movs r1, 0                                    |     r1 = 0;
    0x00004b7c mov r0, r4                                    |     r0 = r4;
    0x00004b7e blx 0x1934                                    |     memset (r0, r1, r2);
    0x00004b82 ldr r1, [pc, 0x168]                           |     
    0x00004b84 movs r2, 4                                    |     r2 = 4;
    0x00004b86 mov r0, fp                                    |     r0 = fp;
    0x00004b88 add r1, pc                                    |     r1 = 0x987a;
    0x00004b8a bl 0x4034                                     |     r0 = fcn_00004034 (r0, r1, r2);
    0x00004b8e cmp r0, 0                                     |     
                                                             |     if (r0 < 0) {
    0x00004b90 blt 0x4bee                                    |         goto label_10;
                                                             |     }
    0x00004b92 mov r0, r6                                    |     r0 = r6;
    0x00004b94 mov.w r2, 0x200                               |     r2 = 0x200;
    0x00004b98 mov r1, r4                                    |     r1 = r4;
    0x00004b9a blx 0x176c                                    |     r0 = readlink ();
    0x00004b9e subs r5, r0, 0                                |     r5 = r0 - 0;
                                                             |     if (r5 < r0) {
    0x00004ba0 blt.w 0x4a46                                  |         goto label_2;
                                                             |     }
    0x00004ba4 mov r2, r5                                    |     r2 = r5;
    0x00004ba6 mov r1, r4                                    |     r1 = r4;
    0x00004ba8 mov r0, fp                                    |     r0 = fp;
    0x00004baa bl 0x4034                                     |     r0 = fcn_00004034 (r0, r1, r2);
    0x00004bae cmp r0, 0                                     |     
                                                             |     if (r0 < 0) {
    0x00004bb0 blt 0x4bee                                    |         goto label_10;
                                                             |     }
    0x00004bb2 mov r1, sb                                    |     r1 = sb;
    0x00004bb4 mov r0, r4                                    |     r0 = r4;
    0x00004bb6 blx 0x17d8                                    |     r0 = lstat (r0, r1);
    0x00004bba cmp r0, 0                                     |     
                                                             |     if (r0 < 0) {
    0x00004bbc blt.w 0x4a46                                  |         goto label_2;
                                                             |     }
    0x00004bc0 ldr.w r3, [sb, 0x10]                          |     r3 = *((sb + 0x10));
    0x00004bc4 and r3, r3, 0xf000                            |     r3 &= 0xf000;
    0x00004bc8 cmp.w r3, 0x4000                              |     
                                                             |     if (r3 != 0x4000) {
    0x00004bcc bne.w 0x4a46                                  |         goto label_2;
                                                             |     }
    0x00004bd0 add r4, r5                                    |     r4 += r5;
    0x00004bd2 ldrb r3, [r4, -0x1]                           |     r3 = *((r4 - 0x1));
    0x00004bd6 cmp r3, 0x2f                                  |     
                                                             |     if (r3 == 0x2f) {
    0x00004bd8 beq.w 0x4a46                                  |         goto label_2;
                                                             |     }
    0x00004bdc ldr r1, [pc, 0x110]                           |     
    0x00004bde movs r2, 1                                    |     r2 = 1;
    0x00004be0 mov r0, fp                                    |     r0 = fp;
    0x00004be2 add r1, pc                                    |     r1 = 0x98d6;
    0x00004be4 bl 0x4034                                     |     r0 = fcn_00004034 (r0, r1, r2);
    0x00004be8 cmp r0, 0                                     |     
                                                             |     if (r0 >= 0) {
    0x00004bea bge.w 0x4a46                                  |         goto label_2;
                                                             |     }
                                                             | label_10:
    0x00004bee mov.w r0, -1                                  |     r0 = -1;
                                                             |     do {
                                                             | label_12:
    0x00004bf2 ldr r2, [pc, 0x100]                           |         
    0x00004bf4 ldr r3, [pc, 0x74]                            |         r3 = *(0x4c6c);
    0x00004bf6 add r2, pc                                    |         r2 = 0x98f0;
    0x00004bf8 ldr r3, [r2, r3]                              |         r3 = *(0x98f0);
    0x00004bfa ldr r2, [r3]                                  |         r2 = *(0x98f0);
    0x00004bfc ldr.w r3, [sp, 0x50c]                         |         r3 = *(arg_50ch);
    0x00004c00 eors r2, r3                                   |         r2 ^= r3;
    0x00004c02 mov.w r3, 0                                   |         r3 = 0;
                                                             |         if (r2 != r3) {
    0x00004c06 bne 0x4c62                                    |             goto label_21;
                                                             |         }
    0x00004c08 addw sp, sp, 0x514                            |         __asm ("addw sp, sp, 0x514");
    0x00004c0c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}    |         
                                                             | label_13:
    0x00004c10 ldr r1, [sp, 0x40]                            |         r1 = var_40h;
    0x00004c12 mov.w r2, 0x200                               |         r2 = 0x200;
    0x00004c16 mov r0, r6                                    |         r0 = r6;
    0x00004c18 blx 0x18e0                                    |         strcat_chk ();
    0x00004c1c b 0x4a92                                      |         goto label_3;
                                                             | label_18:
    0x00004c1e ldr r3, [r4, 0x1c]                            |         r3 = *((r4 + 0x1c));
    0x00004c20 movs r2, 1                                    |         r2 = 1;
    0x00004c22 ldr r0, [pc, 0xd4]                            |         
    0x00004c24 str r3, [sp, 4]                               |         var_4h = r3;
    0x00004c26 ldr r3, [pc, 0xd4]                            |         
    0x00004c28 add r0, pc                                    |         r0 = 0x9926;
    0x00004c2a adds r0, 0x34                                 |         r0 += 0x34;
    0x00004c2c add r3, pc                                    |         r3 = 0x992e;
    0x00004c2e str r3, [sp]                                  |         *(sp) = r3;
    0x00004c30 movs r3, 0x21                                 |         r3 = 0x21;
    0x00004c32 mov r1, r3                                    |         r1 = r3;
    0x00004c34 blx 0x1afc                                    |         fcn_00001afc ();
    0x00004c38 b 0x4b10                                      |         goto label_4;
                                                             | label_16:
    0x00004c3a ldr r3, [r4, 0x18]                            |         r3 = *((r4 + 0x18));
    0x00004c3c movs r2, 1                                    |         r2 = 1;
    0x00004c3e ldr r0, [sp, 0x44]                            |         r0 = var_44h;
    0x00004c40 str r3, [sp, 4]                               |         var_4h = r3;
    0x00004c42 ldr r3, [pc, 0xbc]                            |         
    0x00004c44 add r3, pc                                    |         r3 = 0x994a;
    0x00004c46 str r3, [sp]                                  |         *(sp) = r3;
    0x00004c48 movs r3, 0x21                                 |         r3 = 0x21;
    0x00004c4a mov r1, r3                                    |         r1 = r3;
    0x00004c4c blx 0x1afc                                    |         fcn_00001afc ();
    0x00004c50 b 0x4ad8                                      |         goto label_5;
                                                             | label_7:
    0x00004c52 str r3, [sp, 0x34]                            |         var_34h = r3;
    0x00004c54 b 0x4804                                      |         goto label_6;
                                                             | label_14:
    0x00004c56 mov r0, r6                                    |         r0 = r6;
    0x00004c58 blx 0x1748                                    |         perror (r0);
    0x00004c5c mov.w r0, -1                                  |         r0 = -1;
    0x00004c60 b 0x4bf2                                      |         
                                                             |     } while (1);
                                                             | label_21:
    0x00004c62 blx 0x16f4                                    |     stack_chk_fail ();
    0x00004c66 nop                                           |     
    0x00004c68 movs r6, 0x32                                 |     r6 = 0x32;
    0x00004c6a movs r1, r0                                   |     r1 = r0;
    0x00004c6c lsls r0, r3, 7                                |     r0 = r3 << 7;
    0x00004c6e movs r0, r0                                   |     
    0x00004c70 asrs r4, r7, 0x11                             |     r4 = r7 >> 0x11;
    0x00004c72 movs r0, r0                                   |     
    0x00004c74 cmp r2, 0x6c                                  |     
    0x00004c76 movs r1, r0                                   |     r1 = r0;
    0x00004c78 cmp r2, 0x62                                  |     
    0x00004c7a movs r1, r0                                   |     r1 = r0;
    0x00004c7c asrs r2, r3, 0x12                             |     r2 = r3 >> 0x12;
    0x00004c7e movs r0, r0                                   |     
    0x00004c80 asrs r6, r7, 0x11                             |     r6 = r7 >> 0x11;
    0x00004c82 movs r0, r0                                   |     
    0x00004c84 cmp r2, 0x1a                                  |     
    0x00004c86 movs r1, r0                                   |     r1 = r0;
    0x00004c88 cmp r1, 0xd0                                  |     
    0x00004c8a movs r1, r0                                   |     r1 = r0;
    0x00004c8c cmp r1, 0xc2                                  |     
    0x00004c8e movs r1, r0                                   |     r1 = r0;
    0x00004c90 cmp r1, 0xb2                                  |     
    0x00004c92 movs r1, r0                                   |     r1 = r0;
    0x00004c94 cmp r1, 0xa4                                  |     
    0x00004c96 movs r1, r0                                   |     r1 = r0;
    0x00004c98 cmp r1, 0x96                                  |     
    0x00004c9a movs r1, r0                                   |     r1 = r0;
    0x00004c9c cmp r1, 0x86                                  |     
    0x00004c9e movs r1, r0                                   |     r1 = r0;
    0x00004ca0 cmp r1, 0x78                                  |     
    0x00004ca2 movs r1, r0                                   |     r1 = r0;
    0x00004ca4 cmp r1, 0x6a                                  |     
    0x00004ca6 movs r1, r0                                   |     r1 = r0;
    0x00004ca8 cmp r1, 0x58                                  |     
    0x00004caa movs r1, r0                                   |     r1 = r0;
    0x00004cac cmp r1, 0x42                                  |     
    0x00004cae movs r1, r0                                   |     r1 = r0;
    0x00004cb0 cmp r1, 0x2e                                  |     
    0x00004cb2 movs r1, r0                                   |     r1 = r0;
    0x00004cb4 cmp r1, 0x1a                                  |     
    0x00004cb6 movs r1, r0                                   |     r1 = r0;
    0x00004cb8 cmp r1, 0                                     |     
    0x00004cba movs r1, r0                                   |     r1 = r0;
    0x00004cbc cmp r0, 0xb8                                  |     
    0x00004cbe movs r1, r0                                   |     r1 = r0;
    0x00004cc0 cmp r0, 0x9e                                  |     
    0x00004cc2 movs r1, r0                                   |     r1 = r0;
    0x00004cc4 asrs r2, r7, 0xb                              |     r2 = r7 >> 0xb;
    0x00004cc6 movs r0, r0                                   |     
    0x00004cc8 lsrs r0, r2, 7                                |     r0 = r2 >> 7;
    0x00004cca movs r0, r0                                   |     
    0x00004ccc movs r7, 0xc8                                 |     r7 = 0xc8;
    0x00004cce movs r1, r0                                   |     r1 = r0;
    0x00004cd0 lsls r6, r6, 0x1e                             |     r6 <<= 0x1e;
    0x00004cd2 movs r0, r0                                   |     
    0x00004cd4 movs r7, 0xa0                                 |     r7 = 0xa0;
    0x00004cd6 movs r1, r0                                   |     r1 = r0;
    0x00004cd8 movs r7, 0x94                                 |     r7 = 0x94;
    0x00004cda movs r1, r0                                   |     r1 = r0;
    0x00004cdc movs r7, 0x76                                 |     r7 = 0x76;
    0x00004cde movs r1, r0                                   |     r1 = r0;
    0x00004ce0 lsls r6, r7, 0x1d                             |     r6 = r7 << 0x1d;
    0x00004ce2 movs r0, r0                                   |     
    0x00004ce4 movs r7, 0x68                                 |     r7 = 0x68;
    0x00004ce6 movs r1, r0                                   |     r1 = r0;
    0x00004ce8 asrs r0, r4, 6                                |     r0 = r4 >> 6;
    0x00004cea movs r0, r0                                   |     
    0x00004cec asrs r0, r0, 6                                |     r0 >>= 6;
    0x00004cee movs r0, r0                                   |     
    0x00004cf0 asrs r2, r4, 2                                |     r2 = r4 >> 2;
    0x00004cf2 movs r0, r0                                   |     
    0x00004cf4 movs r2, 0x12                                 |     r2 = 0x12;
    0x00004cf6 movs r1, r0                                   |     r1 = r0;
    0x00004cf8 movs r6, 0x54                                 |     r6 = 0x54;
    0x00004cfa movs r1, r0                                   |     r1 = r0;
    0x00004cfc asrs r4, r5, 2                                |     r4 = r5 >> 2;
    0x00004cfe movs r0, r0                                   |     
    0x00004d00 asrs r4, r2, 2                                |     r4 = r2 >> 2;
    0x00004d02 movs r0, r0                                   |     
                                                             |     /* [14] -r-x section size 8 named .fini */
    0x00004d04 ands r0, r1                                   |     r0 &= r1;
    0x00004d06 invalid                                       |     
                                                             | }

[*] Function strcpy used 5 times vftpd