[*] Binary protection state of libpaho-mqtt3a.so.1.3.11

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


[*] Function strcpy tear down of libpaho-mqtt3a.so.1.3.11

    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3a.so.1.3.11 @ 0xf060 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0000f060 ()                                      | void fcn_0000f060 (int16_t arg1, int16_t arg3) {
                                                                 |     int16_t var_0h;
                                                                 |     int32_t var_4h;
                                                                 |     int32_t var_4h_2;
                                                                 |     int16_t var_ch;
                                                                 |     int32_t var_10h;
                                                                 |     int32_t var_10h_2;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int32_t var_0h_2;
                                                                 |     int16_t var_4ch;
                                                                 |     r0 = arg1;
                                                                 |     r2 = arg3;
    0x0000f060 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0000f064 mov r7, r2                                        |     r7 = r2;
    0x0000f066 ldr r2, [pc, 0x1c0]                               |     
    0x0000f068 sub sp, 0x54                                      |     
    0x0000f06a mov r5, r0                                        |     r5 = r0;
    0x0000f06c add r6, sp, 0x38                                  |     r6 += var_38h;
    0x0000f06e ldr r3, [pc, 0x1bc]                               |     r3 = *(0xf22e);
    0x0000f070 mov.w sb, 0                                       |     sb = 0;
    0x0000f074 ldr.w lr, [pc, 0x1b8]                             |     lr = *(0xf230);
    0x0000f078 add r2, pc                                        |     r2 = 0x1e2a6;
    0x0000f07a invalid                                           |     
                                                                 |     if (r0 == 0) {
    0x0000f07c cbz r0, 0xf0ae                                    |         void (*0xf0ae)() ();
                                                                 |     }
    0x0000f07e mov sl, sb                                        |     sl = sb;
    0x0000f080 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x0000f082 mov r4, sb                                        |     r4 = sb;
    0x0000f084 add lr, pc                                        |     lr += pc;
    0x0000f086 mov r8, sb                                        |     r8 = sb;
    0x0000f088 mov ip, lr                                        |     
    0x0000f08a add fp, pc                                        |     
    0x0000f08c ldr r3, [r3]                                      |     r3 = *(r3);
    0x0000f08e str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x0000f090 mov.w r3, 0                                       |     r3 = 0;
    0x0000f092 lsls r0, r0, 0xc                                  |     r0 <<= 0xc;
    0x0000f094 ldm.w ip!, {r0, r1, r2, r3}                       |     r0 = *(ip!);
                                                                 |     r1 = *((ip! + 4));
                                                                 |     r2 = *((ip! + 8));
                                                                 |     r3 = *((ip! + 12));
    0x0000f098 invalid                                           |     
    0x0000f09a ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x0000f09c stm r6!, {r0, r1, r2, r3}                         |     *(r6!) = r0;
                                                                 |     *((r6! + 4)) = r1;
                                                                 |     *((r6! + 8)) = r2;
                                                                 |     *((r6! + 12)) = r3;
    0x0000f09e add.w r0, lr, 0x14                                |     r0 = lr + 0x14;
    0x0000f0a2 ldr.w r3, [ip]                                    |     r3 = *(ip);
    0x0000f0a6 movs r2, 3                                        |     r2 = 3;
    0x0000f0a8 movs r1, 0x3d                                     |     r1 = 0x3d;
    0x0000f0aa str r3, [r6]                                      |     *(r6) = r3;
    0x0000f0ac bl 0xf2e8                                         |     fcn_0000f2e8 (r0, r1, r2);
    0x0000f0b0 mov r2, sb                                        |     r2 = sb;
    0x0000f0b2 movw r3, 0x1f90                                   |     r3 = 0x1f90;
    0x0000f0b6 add r1, sp, 0x20                                  |     r1 += var_20h;
    0x0000f0b8 mov r0, r7                                        |     r0 = r7;
    0x0000f0ba bl 0xac3c                                         |     fcn_0000ac3c (r0, r1, r2, r3);
    0x0000f0be ldr r3, [r5, 0x20]                                |     r3 = *((r5 + 0x20));
    0x0000f0c0 mov r6, r0                                        |     r6 = r0;
    0x0000f0c2 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
                                                                 |     if (r3 == 0) {
    0x0000f0c4 cbz r3, 0xf108                                    |         goto label_3;
                                                                 |     }
                                                                 |     do {
    0x0000f0c6 mov r1, r4                                        |         r1 = r4;
    0x0000f0c8 str r3, [sp, 0x18]                                |         var_18h = r3;
    0x0000f0ca str r2, [sp, 0xc]                                 |         var_ch = r2;
    0x0000f0cc mov.w r3, -1                                      |         r3 = -1;
    0x0000f0d0 movs r2, 1                                        |         r2 = 1;
    0x0000f0d2 mov r0, sl                                        |         r0 = sl;
    0x0000f0d4 strd r6, r7, [sp, 0x10]                           |         __asm ("strd r6, r7, [var_10h]");
    0x0000f0d8 strd r6, r7, [sp, 4]                              |         __asm ("strd r6, r7, [var_4h]");
    0x0000f0dc str.w fp, [sp]                                    |         __asm ("str.w fp, [sp]");
    0x0000f0e0 blx 0x2874                                        |         r0 = fcn_00002874 ();
    0x0000f0e4 mov r4, r0                                        |         r4 = r0;
                                                                 | label_0:
    0x0000f0e6 eor r3, r8, 1                                     |         r3 = r8 ^ 1;
    0x0000f0ea cmp r4, 0                                         |         
    0x0000f0ec ite le                                            |         
                                                                 |         if (r4 > 0) {
    0x0000f0ee movle r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (r4 <= 0) {
    0x0000f0f0 andgt r3, r3, 1                                   |             r3 &= 1;
                                                                 |         }
    0x0000f0f2 lsls r1, r0, 0xc                                  |         r1 = r0 << 0xc;
                                                                 |         if (r3 != 0) {
    0x0000f0f4 cbnz r3, 0xf12a                                   |             goto label_4;
                                                                 |         }
                                                                 | label_1:
    0x0000f0f6 cmp.w r8, 0                                       |         
                                                                 |         if (r8 != 0) {
    0x0000f0fa bne 0xf172                                        |             goto label_5;
                                                                 |         }
    0x0000f0fc ldr r3, [r5, 0x20]                                |         r3 = *((r5 + 0x20));
    0x0000f0fe mov.w r8, 1                                       |         r8 = 1;
    0x0000f102 ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x0000f104 cmp r3, 0                                         |         
    0x0000f106 bne 0xf0c6                                        |         
                                                                 |     } while (r3 != 0);
                                                                 | label_3:
    0x0000f108 ldr r3, [pc, 0x12c]                               |     
    0x0000f10a mov r1, r4                                        |     r1 = r4;
    0x0000f10c str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x0000f10e mov r0, sl                                        |     r0 = sl;
    0x0000f110 movs r2, 1                                        |     r2 = 1;
    0x0000f112 strd r6, r7, [sp, 0x10]                           |     __asm ("strd r6, r7, [var_10h]");
    0x0000f116 add r3, pc                                        |     r3 = 0x1e352;
    0x0000f118 strd r6, r7, [sp, 4]                              |     __asm ("strd r6, r7, [var_4h]");
    0x0000f11c str r3, [sp]                                      |     *(sp) = r3;
    0x0000f11e mov.w r3, -1                                      |     r3 = -1;
    0x0000f120 adds r3, 0xff                                     |     r3 += 0xff;
    0x0000f122 blx 0x2874                                        |     r0 = fcn_00002874 ();
    0x0000f126 mov r4, r0                                        |     r4 = r0;
    0x0000f128 b 0xf0e6                                          |     goto label_0;
                                                                 | label_4:
    0x0000f12a ldr r0, [pc, 0x110]                               |     
    0x0000f12c adds r4, 1                                        |     r4++;
    0x0000f12e mov r2, r4                                        |     r2 = r4;
    0x0000f130 movs r1, 0x68                                     |     r1 = 0x68;
    0x0000f132 add r0, pc                                        |     r0 = 0x1e374;
    0x0000f134 bl 0xf7f0                                         |     r0 = fcn_0000f7f0 (r0, r1, r2);
    0x0000f138 mov sl, r0                                        |     sl = r0;
    0x0000f13a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0000f13c bne 0xf0f6                                        |         goto label_1;
                                                                 |     }
    0x0000f13e add r7, sp, 0x24                                  |     r7 += var_24h;
    0x0000f140 mvn r3, 0x62                                      |     r3 = ~0x62;
    0x0000f144 str r3, [sp, 0x24]                                |     var_24h = r3;
                                                                 | label_2:
    0x0000f146 ldr r0, [pc, 0xf8]                                |     
    0x0000f148 movs r3, 3                                        |     r3 = 3;
    0x0000f14a mov r2, r7                                        |     r2 = r7;
    0x0000f14c movs r1, 0x98                                     |     r1 = 0x98;
    0x0000f14e add r0, pc                                        |     r0 = 0x1e394;
    0x0000f150 adds r0, 0x14                                     |     r0 += 0x14;
    0x0000f152 bl 0xf388                                         |     fcn_0000f388 (r0, r1, r2, r3);
    0x0000f156 ldr r2, [pc, 0xec]                                |     
    0x0000f158 ldr r3, [pc, 0xd0]                                |     r3 = *(0xf22c);
    0x0000f15a ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x0000f15c add r2, pc                                        |     r2 = 0x1e3a6;
    0x0000f15e ldr r3, [r2, r3]                                  |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x0000f160 ldr r2, [r3]                                      |     r2 = imp.__aeabi_unwind_cpp_pr0;
    0x0000f162 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0000f164 eors r2, r3                                       |     r2 ^= r3;
    0x0000f166 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0000f16a bne 0xf222                                        |         goto label_6;
                                                                 |     }
    0x0000f16c add sp, 0x54                                      |     
    0x0000f16e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
    0x0000f170 ldrh r0, [r6, 0x3e]                               |     r0 = *((r6 + 0x3e));
                                                                 | label_5:
    0x0000f172 ldr r2, [pc, 0xd4]                                |     
    0x0000f174 mov r3, sl                                        |     r3 = sl;
    0x0000f176 mov.w r1, -1                                      |     r1 = -1;
    0x0000f17a movs r0, 4                                        |     r0 = 4;
    0x0000f17c movw r8, 0xd090                                   |     
    0x0000f17e lsrs r0, r2, 2                                    |     r0 = r2 >> 2;
    0x0000f180 add r7, sp, 0x24                                  |     r7 += var_24h;
    0x0000f182 add r2, pc                                        |     r2 = 0x1e3d0;
    0x0000f184 movt r8, 3                                        |     r8 = 0x3d090;
    0x0000f188 bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x0000f18c add r3, sp, 0x3c                                  |     r3 += var_3ch;
    0x0000f18e add r6, sp, 0x28                                  |     r6 += var_28h;
    0x0000f190 ldm r3, {r0, r1, r2, r3}                          |     r0 = *(r3);
                                                                 |     r1 = *((r3 + 4));
                                                                 |     r2 = *((r3 + 8));
                                                                 |     r3 = *((r3 + 12));
    0x0000f192 add.w sb, sp, 0x2c                                |     sb += var_2ch;
    0x0000f196 stm.w sp, {r0, r1, r2, r3}                        |     *(sp) = r0;
                                                                 |     *((sp + 4)) = r1;
                                                                 |     *((sp + 8)) = r2;
                                                                 |     *((sp + 12)) = r3;
    0x0000f198 movs r7, r1                                       |     r7 = r1;
    0x0000f19a mov r2, r4                                        |     r2 = r4;
    0x0000f19c ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0000f19e mov r1, sl                                        |     r1 = sl;
    0x0000f1a0 ldr r0, [r5]                                      |     r0 = *(r5);
    0x0000f1a2 bl 0x776c                                         |     fcn_0000776c (r0, r1, r2, r3);
    0x0000f1a6 ldr r0, [pc, 0xa4]                                |     
    0x0000f1a8 mov r2, sl                                        |     r2 = sl;
    0x0000f1aa movs r1, 0x73                                     |     r1 = 0x73;
    0x0000f1ac add r0, pc                                        |     r0 = 0x1e3fe;
    0x0000f1ae bl 0xf910                                         |     fcn_0000f910 (r0, r1, r2);
    0x0000f1b2 add r0, sp, 0x30                                  |     r0 += var_30h;
    0x0000f1b4 blx 0x2410                                        |     fcn_00002410 ();
    0x0000f1b8 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0000f1ba adds r3, 0xa                                      |     r3 += 0xa;
    0x0000f1bc str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0000f1be b 0xf1d4                                          |     
                                                                 |     while (r3 == 0) {
    0x0000f1c0 mov r0, sb                                        |         r0 = sb;
    0x0000f1c2 blx 0x2410                                        |         fcn_00002410 ();
    0x0000f1c6 ldrd r2, r3, [sp, 0x2c]                           |         __asm ("ldrd r2, r3, [var_2ch]");
    0x0000f1ca cmp r2, r3                                        |         
                                                                 |         if (r2 > r3) {
    0x0000f1cc bgt 0xf202                                        |             goto label_7;
                                                                 |         }
    0x0000f1ce mov r0, r8                                        |         r0 = r8;
    0x0000f1d0 blx 0x2504                                        |         strcpy (r0, r1)
    0x0000f1d4 mov r3, r7                                        |         r3 = r7;
    0x0000f1d6 ldr r0, [r5]                                      |         r0 = *(r5);
    0x0000f1d8 mov r2, r6                                        |         r2 = r6;
    0x0000f1da movs r1, 0xc                                      |         r1 = 0xc;
    0x0000f1dc bl 0x7598                                         |         fcn_00007598 (r0, r1, r2, r3);
    0x0000f1e0 ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x0000f1e2 mov r4, r0                                        |         r4 = r0;
    0x0000f1e4 cmp r3, 0                                         |         
    0x0000f1e6 beq 0xf1c0                                        |         
                                                                 |     }
    0x0000f1e8 ldr r1, [pc, 0x64]                                |     
    0x0000f1ea movs r2, 0xc                                      |     r2 = 0xc;
    0x0000f1ec add r1, pc                                        |     r1 = 0x1e440;
    0x0000f1ee blx 0x2814                                        |     r0 = fcn_00002814 ();
                                                                 |     if (r0 != 0) {
    0x0000f1f2 cbz r0, 0xf208                                    |         
    0x0000f1f4 ldr r1, [pc, 0x5c]                                |         
    0x0000f1f6 movs r2, 0xc                                      |         r2 = 0xc;
    0x0000f1f8 mov r0, r4                                        |         r0 = r4;
    0x0000f1fa add r1, pc                                        |         r1 = 0x1e452;
    0x0000f1fc blx 0x2814                                        |         r0 = fcn_00002814 ();
                                                                 |         if (r0 == 0) {
    0x0000f200 cbz r0, 0xf208                                    |             goto label_8;
                                                                 |         }
                                                                 | label_7:
    0x0000f202 mov.w r3, -1                                      |         r3 = -1;
    0x0000f206 str r3, [sp, 0x24]                                |         var_24h = r3;
                                                                 |     }
                                                                 | label_8:
    0x0000f208 add r4, sp, 0x34                                  |     r4 += var_34h;
    0x0000f20a movs r3, 1                                        |     r3 = 1;
    0x0000f20c str r3, [sp, 0x28]                                |     var_28h = r3;
                                                                 |     do {
    0x0000f20e mov r3, r4                                        |         r3 = r4;
    0x0000f210 ldr r0, [r5]                                      |         r0 = *(r5);
    0x0000f212 mov r2, r6                                        |         r2 = r6;
    0x0000f214 movs r1, 1                                        |         r1 = 1;
    0x0000f216 bl 0x7598                                         |         fcn_00007598 (r0, r1, r2, r3);
    0x0000f21a ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x0000f21c cmp r3, 0                                         |         
    0x0000f21e bne 0xf20e                                        |         
                                                                 |     } while (r3 != 0);
    0x0000f220 b 0xf146                                          |     goto label_2;
                                                                 | label_6:
    0x0000f222 blx 0x245c                                        |     pthread_condattr_init ();
    0x0000f226 nop                                               |     
    0x0000f228 ldc p0, c0, [r0, -0]                              |     __asm ("ldc p0, c0, [r0, -0]");
    0x0000f22c lsls r4, r7, 7                                    |     r4 = r7 << 7;
    0x0000f22e movs r0, r0                                       |     
                                                                 |     if (r4 == 0) {
    0x0000f230 cbz r4, 0xf276                                    |         void (*0xf276)() ();
                                                                 |     }
    0x0000f232 movs r0, r0                                       |     
    0x0000f234 sxth r2, r5                                       |     __asm ("sxth r2, r5");
    0x0000f236 movs r0, r0                                       |     
                                                                 |     if (r6 == 0) {
    0x0000f238 cbz r6, 0xf274                                    |         void (*0xf274)() ();
                                                                 |     }
    0x0000f23a movs r0, r0                                       |     
                                                                 |     if (r6 == 0) {
    0x0000f23c cbz r6, 0xf27c                                    |         void (*0xf27c)() ();
                                                                 |     }
    0x0000f23e movs r0, r0                                       |     
    0x0000f240 sxtb r2, r0                                       |     r2 = (int32_t) r0;
    0x0000f242 movs r0, r0                                       |     
    0x0000f244 stc p0, c0, [ip], -0                              |     __asm ("stc p0, c0, [ip], -0");
                                                                 |     if (r2 == 0) {
    0x0000f248 cbz r2, 0xf282                                    |         void (*0xf282)() ();
                                                                 |     }
    0x0000f24a movs r0, r0                                       |     
                                                                 |     if (r4 == 0) {
    0x0000f24c cbz r4, 0xf26e                                    |         void (*0xf26e)() ();
                                                                 |     }
    0x0000f24e movs r0, r0                                       |     
                                                                 |     if (r4 == 0) {
    0x0000f250 cbz r4, 0xf274                                    |         void (*0xf274)() ();
                                                                 |     }
    0x0000f252 movs r0, r0                                       |     
                                                                 |     if (r6 == 0) {
    0x0000f254 cbz r6, 0xf278                                    |         void (*0xf278)() ();
                                                                 |     }
    0x0000f256 movs r0, r0                                       |     
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3a.so.1.3.11 @ 0x12cc0 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00012cc0 ()                                      | void fcn_00012cc0 (void * ptr) {
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h_4;
                                                                 |     int16_t var_ch;
    0x00012cc0 ldr r0, [pc, 0x200]                               |     
    0x00012cc2 movs r2, 3                                        |     r2 = 3;
    0x00012cc4 ldr r3, [pc, 0x200]                               |     r3 = *(0x12ec8);
    0x00012cc6 movs r1, 0xc8                                     |     r1 = 0xc8;
    0x00012cc8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00012ccc sub sp, 0x14                                      |     
    0x00012cce ldr r6, [pc, 0x1fc]                               |     
    0x00012cd0 add r0, pc                                        |     r0 = 0x25b98;
    0x00012cd2 movs r4, 0                                        |     r4 = 0;
    0x00012cd4 ldr r3, [r0, r3]                                  |     
    0x00012cd6 add r6, pc                                        |     r6 = 0x25ba8;
    0x00012cd8 ldr r5, [pc, 0x1f4]                               |     
    0x00012cda add.w r0, r6, 0x90                                |     r0 = r6 + 0x90;
    0x00012cde ldr r3, [r3]                                      |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x00012ce0 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00012ce2 mov.w r3, 0                                       |     r3 = 0;
    0x00012ce6 bl 0xf2e8                                         |     fcn_0000f2e8 (r0, r1, r2);
    0x00012cea movs r2, 3                                        |     r2 = 3;
    0x00012cec movw r1, 0x91e                                    |     r1 = 0x91e;
    0x00012cf0 add.w r0, r6, 0xa4                                |     r0 = r6 + 0xa4;
    0x00012cf4 str r4, [sp, 4]                                   |     var_4h = r4;
    0x00012cf6 bl 0xf2e8                                         |     fcn_0000f2e8 (r0, r1, r2);
    0x00012cfa ldr r2, [pc, 0x1d8]                               |     r2 = *(0x12ed6);
    0x00012cfc add r5, pc                                        |     r5 = 0x25bd0;
    0x00012cfe ldr r3, [pc, 0x1d8]                               |     r3 = *(0x12eda);
    0x00012d00 ldr.w r8, [r5, r2]                                |     r8 = imp.__aeabi_unwind_cpp_pr0;
    0x00012d04 ldr r7, [r5, r3]                                  |     r7 = imp.__aeabi_unwind_cpp_pr0;
    0x00012d06 ldr.w r3, [r8]                                    |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x00012d08 adds r0, 0                                        |     r0 += 0;
    0x00012d0a ldr r2, [r7]                                      |     r2 = imp.__aeabi_unwind_cpp_pr0;
    0x00012d0c orrs r3, r2                                       |     r3 |= r2;
                                                                 |     if (r3 == r2) {
    0x00012d0e beq 0x12d5c                                       |         goto label_3;
                                                                 |     }
    0x00012d10 ldr r3, [pc, 0x1c8]                               |     r3 = *(0x12edc);
    0x00012d12 add r6, sp, 8                                     |     r6 += var_8h_4;
    0x00012d14 str r4, [sp, 8]                                   |     var_8h_4 = r4;
    0x00012d16 ldr.w sb, [r5, r3]                                |     sb = *((r5 + r3));
    0x00012d1a ldr.w r0, [sb]                                    |     r0 = *(sb);
                                                                 |     if (r0 != 0) {
    0x00012d1e cbnz r0, 0x12d28                                  |         goto label_6;
                                                                 |     }
    0x00012d20 b 0x12db0                                         |     goto label_7;
                                                                 |     do {
                                                                 | label_1:
    0x00012d22 adds r4, 1                                        |         r4++;
                                                                 | label_0:
    0x00012d24 ldr.w r0, [sb]                                    |         r0 = *(sb);
                                                                 | label_6:
    0x00012d28 mov r1, r6                                        |         r1 = r6;
    0x00012d2a bl 0xceb0                                         |         fcn_0000ceb0 (r0, r1);
    0x00012d2c str.w fp, [r1, 0x158]                             |         __asm ("str.w fp, aav.0x000000ff");
    0x00012d30 ldr r3, [sp, 8]                                   |         r3 = var_8h_4;
    0x00012d32 ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x00012d34 ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x00012d36 ldrh r3, [r2, 0x10]                               |         r3 = *((r2 + 0x10));
    0x00012d38 sbfx r3, r3, 6, 4                                 |         __asm ("sbfx r3, r3, 6, 4");
    0x00012d3c cmp r3, 0                                         |         
    0x00012d3e bgt 0x12d22                                       |         
                                                                 |     } while (r3 > 0);
    0x00012d40 ldrb r3, [r2, 0x10]                               |     r3 = *((r2 + 0x10));
    0x00012d42 lsls r3, r3, 0x1d                                 |     r3 <<= 0x1d;
                                                                 |     if (r3 >= r3) {
    0x00012d44 bpl 0x12d24                                       |         goto label_0;
                                                                 |     }
    0x00012d46 b 0x12d22                                         |     goto label_1;
    0x00012d48 ldr r2, [pc, 0x194]                               |     
    0x00012d4a mov r3, r4                                        |     r3 = r4;
    0x00012d4c mov.w r1, -1                                      |     r1 = -1;
    0x00012d50 movs r0, 3                                        |     r0 = 3;
    0x00012d52 add r2, pc                                        |     r2 = 0x25c36;
    0x00012d54 bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x00012d58 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00012d5a beq 0x12dc0                                       |         
                                                                 | label_3:
    0x00012d5c ldr r0, [pc, 0x184]                               |         
    0x00012d5e movs r3, 3                                        |         r3 = 3;
    0x00012d60 add r2, sp, 4                                     |         r2 += var_4h;
    0x00012d62 movw r1, 0x941                                    |         r1 = 0x941;
    0x00012d66 add r0, pc                                        |         r0 = 0x25c4e;
    0x00012d68 adds r0, 0xa4                                     |         r0 += 0xa4;
    0x00012d6a bl 0xf388                                         |         fcn_0000f388 (r0, r1, r2, r3);
    0x00012d6e ldr r3, [pc, 0x178]                               |         r3 = *(0x12eea);
    0x00012d70 ldr r4, [r5, r3]                                  |         r4 = *((r5 + r3));
    0x00012d72 ldr r3, [r4]                                      |         r3 = *(r4);
                                                                 |         if (r3 != 0) {
    0x00012d74 cbz r3, 0x12d84                                   |             
    0x00012d76 ldr r3, [pc, 0x174]                               |             
    0x00012d78 ldr r3, [r5, r3]                                  |             r3 = *((r5 + r3));
    0x00012d7a ldr r3, [r3]                                      |             r3 = *(0x12eee);
    0x00012d7c ldr r0, [r3, 4]                                   |             r0 = *(0x12ef2);
    0x00012d7e ldr r3, [r0, 0xc]                                 |             r3 = *(0x12efe);
    0x00012d80 cmp r3, 0                                         |             
                                                                 |             if (r3 == 0) {
    0x00012d82 beq 0x12e74                                       |                 goto label_8;
                                                                 |             }
                                                                 |         }
                                                                 | label_5:
    0x00012d84 ldr r2, [pc, 0x168]                               |         
    0x00012d86 ldr r3, [pc, 0x140]                               |         r3 = *(0x12eca);
    0x00012d88 add r2, pc                                        |         r2 = 0x25c7c;
    0x00012d8a ldr r3, [r2, r3]                                  |         r3 = imp.__aeabi_unwind_cpp_pr0;
    0x00012d8c ldr r2, [r3]                                      |         r2 = imp.__aeabi_unwind_cpp_pr0;
    0x00012d8e ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x00012d90 eors r2, r3                                       |         r2 ^= r3;
    0x00012d92 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00012d96 bne.w 0x12ec0                                     |             goto label_9;
                                                                 |         }
    0x00012d9a ldr r0, [pc, 0x158]                               |         
    0x00012d9c movs r3, 3                                        |         r3 = 3;
    0x00012d9e movs r2, 0                                        |         r2 = 0;
    0x00012da0 movs r1, 0xdc                                     |         r1 = 0xdc;
    0x00012da2 add r0, pc                                        |         r0 = 0x25c9c;
    0x00012da4 adds r0, 0x90                                     |         r0 += 0x90;
    0x00012da6 add sp, 0x14                                      |         
    0x00012da8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |         
    0x00012dac b.w 0xf388                                        |         void (*0xf388)() ();
                                                                 | label_7:
    0x00012db0 ldr r2, [pc, 0x144]                               |         
    0x00012db2 mov r3, r0                                        |         r3 = r0;
    0x00012db4 mov.w r1, -1                                      |         r1 = -1;
    0x00012db8 movs r0, 3                                        |         r0 = 3;
    0x00012dba add r2, pc                                        |         r2 = 0x25cb6;
    0x00012dbc bl 0x8e8c                                         |         fcn_00008e8c (r0, r1);
                                                                 |     }
    0x00012dc0 ldr r3, [pc, 0x138]                               |     r3 = *(0x12efc);
    0x00012dc2 movs r4, 0x64                                     |     r4 = 0x64;
    0x00012dc4 ldr r6, [pc, 0x138]                               |     
    0x00012dc6 movs r2, 1                                        |     r2 = 1;
    0x00012dc8 ldr.w sl, [pc, 0x138]                             |     
    0x00012dcc ldr.w sb, [r5, r3]                                |     sb = *((r5 + r3));
    0x00012dd0 add r6, pc                                        |     r6 = 0x25cd4;
    0x00012dd2 adds r6, 0x80                                     |     r6 += 0x80;
    0x00012dd4 add sl, pc                                        |     sl = 0x25cdc;
    0x00012dd6 str.w r2, [sb]                                    |     __asm ("str.w r2, [sb]");
                                                                 |     do {
    0x00012dda ldr.w r3, [r8]                                    |         r3 = *(r8);
    0x00012dde ldr r2, [r7]                                      |         r2 = *(r7);
    0x00012de0 orrs r3, r2                                       |         r3 |= r2;
                                                                 |         if (r3 == r2) {
    0x00012de2 beq 0x12e56                                       |             goto label_10;
                                                                 |         }
                                                                 | label_2:
    0x00012de4 ldr.w r3, [sb]                                    |         r3 = *(sb);
                                                                 |         if (r3 == 0) {
    0x00012de8 cbz r3, 0x12e56                                   |             goto label_10;
                                                                 |         }
    0x00012dea subs r4, 1                                        |         r4--;
                                                                 |         if (r4 == 1) {
    0x00012dec beq 0x12e56                                       |             goto label_10;
                                                                 |         }
    0x00012dee ldr r3, [pc, 0x118]                               |         r3 = *(0x12f0a);
    0x00012df0 ldr.w fp, [r5, r3]                                |         fp = *((r5 + r3));
    0x00012df4 ldr.w r0, [fp]                                    |         r0 = *(fp);
    0x00012df8 blx 0x270c                                        |         r0 = fcn_0000270c ();
                                                                 |         if (r0 != 0) {
    0x00012dfc cbnz r0, 0x12e62                                  |             goto label_11;
                                                                 |         }
                                                                 | label_4:
    0x00012dfe ldr r2, [pc, 0x10c]                               |         
    0x00012e00 mov.w r1, -1                                      |         r1 = -1;
    0x00012e04 movs r0, 3                                        |         r0 = 3;
    0x00012e06 add r2, pc                                        |         r2 = 0x25d18;
    0x00012e08 bl 0x8e8c                                         |         fcn_00008e8c (r0, r1);
    0x00012e0c movs r2, 3                                        |         r2 = 3;
    0x00012e0e movs r1, 0x69                                     |         r1 = 0x69;
    0x00012e10 mov r0, r6                                        |         r0 = r6;
    0x00012e12 bl 0xf2e8                                         |         fcn_0000f2e8 (r0, r1, r2);
    0x00012e16 movw r0, 0x86a0                                   |         
    0x00012e1a movt r0, 1                                        |         r0 = 0x186a0;
    0x00012e1e blx 0x2504                                        |         strcpy (r0, r1)
    0x00012e22 mov r0, r6                                        |         r0 = r6;
    0x00012e24 movs r3, 3                                        |         r3 = 3;
    0x00012e26 movs r2, 0                                        |         r2 = 0;
    0x00012e28 movs r1, 0x6f                                     |         r1 = 0x6f;
    0x00012e2a bl 0xf388                                         |         fcn_0000f388 (r0, r1, r2, r3);
    0x00012e2e ldr.w r0, [fp]                                    |         r0 = *(fp);
    0x00012e32 blx 0x24d4                                        |         r0 = fwrite (r0, r1, r2, r3);
    0x00012e36 cmp r0, 0                                         |         
    0x00012e38 beq 0x12dda                                       |         
                                                                 |     } while (r0 == 0);
    0x00012e3a blx 0x2588                                        |     localtime (r0);
    0x00012e3e ldr r2, [pc, 0xd0]                                |     
    0x00012e40 mov r3, r0                                        |     r3 = r0;
    0x00012e42 movs r1, 0                                        |     r1 = 0;
    0x00012e44 movs r0, 5                                        |     r0 = 5;
    0x00012e46 add r2, pc                                        |     r2 = 0x25d5c;
    0x00012e48 bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x00012e4c ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x00012e50 ldr r2, [r7]                                      |     r2 = *(r7);
    0x00012e52 orrs r3, r2                                       |     r3 |= r2;
                                                                 |     if (r3 != r2) {
    0x00012e54 bne 0x12de4                                       |         goto label_2;
                                                                 |     }
                                                                 | label_10:
    0x00012e56 movs r2, 1                                        |     r2 = 1;
    0x00012e58 movs r3, 0                                        |     r3 = 0;
    0x00012e5a str r2, [sp, 4]                                   |     var_4h = r2;
    0x00012e5c str.w r3, [sb]                                    |     __asm ("str.w r3, [sb]");
    0x00012e60 b 0x12d5c                                         |     goto label_3;
                                                                 | label_11:
    0x00012e62 blx 0x2588                                        |     localtime (r0);
    0x00012e66 mov r2, sl                                        |     r2 = sl;
    0x00012e68 mov r3, r0                                        |     r3 = r0;
    0x00012e6a movs r1, 0                                        |     r1 = 0;
    0x00012e6c movs r0, 5                                        |     r0 = 5;
    0x00012e6e bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x00012e72 b 0x12dfe                                         |     goto label_4;
                                                                 | label_8:
    0x00012e74 str r3, [sp, 8]                                   |     var_8h_4 = r3;
    0x00012e76 add r6, sp, 8                                     |     r6 += var_8h_4;
    0x00012e78 bl 0xce54                                         |     fcn_0000ce54 (r0);
    0x00012e7c ldr r3, [pc, 0x5c]                                |     r3 = *(0x12edc);
    0x00012e7e ldr.w sb, [r5, r3]                                |     sb = *((r5 + r3));
    0x00012e82 ldr.w r0, [sb]                                    |     r0 = *(sb);
    0x00012e86 bl 0xce54                                         |     fcn_0000ce54 (r0);
    0x00012e8a ldr r3, [pc, 0x88]                                |     r3 = *(0x12f16);
    0x00012e8c ldr r7, [r5, r3]                                  |     r7 = *((r5 + r3));
    0x00012e8e b 0x12e98                                         |     
                                                                 |     while (r0 != 0) {
    0x00012e90 ldr r3, [sp, 8]                                   |         r3 = var_8h_4;
    0x00012e92 ldr r0, [r3, 8]                                   |         r0 = *((r3 + 8));
    0x00012e94 bl 0x123e4                                        |         fcn_000123e4 (r0);
    0x00012e98 ldr r0, [r7]                                      |         r0 = *(r7);
    0x00012e9a mov r1, r6                                        |         r1 = r6;
    0x00012e9c bl 0xceb0                                         |         r0 = fcn_0000ceb0 (r0, r1);
    0x00012ea0 mov r5, r0                                        |         r5 = r0;
    0x00012ea2 cmp r0, 0                                         |         
    0x00012ea4 bne 0x12e90                                       |         
                                                                 |     }
    0x00012ea6 ldr r0, [r7]                                      |     r0 = *(r7);
    0x00012ea8 bl 0xce54                                         |     fcn_0000ce54 (r0);
    0x00012eac str.w r5, [sb]                                    |     __asm ("str.w r5, [sb]");
    0x00012eb0 bl 0xecd4                                         |     fcn_0000ecd4 ();
    0x00012eb4 bl 0xfb10                                         |     fcn_0000fb10 ();
    0x00012eb8 bl 0x8e04                                         |     fcn_00008e04 ();
    0x00012ebc str r5, [r4]                                      |     *(r4) = r5;
    0x00012ebe b 0x12d84                                         |     goto label_5;
                                                                 | label_9:
    0x00012ec0 blx 0x245c                                        |     pthread_condattr_init ();
    0x00012ec4 sub sp, 0xe0                                      |     
    0x00012ec6 movs r0, r0                                       |     
    0x00012ec8 lsls r4, r7, 7                                    |     r4 = r7 << 7;
    0x00012eca movs r0, r0                                       |     
    0x00012ecc ldrh r6, [r5, 0x1a]                               |     r6 = *((r5 + 0x1a));
    0x00012ece movs r0, r0                                       |     
    0x00012ed0 sub sp, 0x30                                      |     
    0x00012ed2 movs r0, r0                                       |     
    0x00012ed4 lsls r4, r4, 9                                    |     r4 <<= 9;
    0x00012ed6 movs r0, r0                                       |     
    0x00012ed8 lsls r4, r1, 9                                    |     r4 = r1 << 9;
    0x00012eda movs r0, r0                                       |     
    0x00012edc lsls r0, r0, 8                                    |     r0 <<= 8;
    0x00012ede movs r0, r0                                       |     
    0x00012ee0 strh r2, [r0, 0xc]                                |     *((r0 + 0xc)) = r2;
    0x00012ee2 movs r0, r0                                       |     
    0x00012ee4 ldrh r6, [r3, 0x16]                               |     r6 = *((r3 + 0x16));
    0x00012ee6 movs r0, r0                                       |     
    0x00012ee8 lsls r0, r5, 8                                    |     r0 = r5 << 8;
    0x00012eea movs r0, r0                                       |     
    0x00012eec lsls r0, r4, 8                                    |     r0 = r4 << 8;
    0x00012eee movs r0, r0                                       |     
    0x00012ef0 add sp, 0                                         |     
    0x00012ef2 movs r0, r0                                       |     
    0x00012ef4 ldrh r2, [r4, 0x14]                               |     r2 = *((r4 + 0x14));
    0x00012ef6 movs r0, r0                                       |     
    0x00012ef8 strh r2, [r3, 8]                                  |     *((r3 + 8)) = r2;
    0x00012efa movs r0, r0                                       |     
    0x00012efc lsls r4, r0, 9                                    |     r4 = r0 << 9;
    0x00012efe movs r0, r0                                       |     
    0x00012f00 ldrh r4, [r6, 0x12]                               |     r4 = *((r6 + 0x12));
    0x00012f02 movs r0, r0                                       |     
    0x00012f04 strh r4, [r4, 6]                                  |     *((r4 + 6)) = r4;
    0x00012f06 movs r0, r0                                       |     
    0x00012f08 lsls r0, r7, 7                                    |     r0 = r7 << 7;
    0x00012f0a movs r0, r0                                       |     
    0x00012f0c strh r2, [r4, 6]                                  |     *((r4 + 6)) = r2;
    0x00012f0e movs r0, r0                                       |     
    0x00012f10 strh r2, [r3, 2]                                  |     *((r3 + 2)) = r2;
    0x00012f12 movs r0, r0                                       |     
    0x00012f14 lsls r4, r7, 8                                    |     r4 = r7 << 8;
    0x00012f16 movs r0, r0                                       |     
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3a.so.1.3.11 @ 0x14664 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00014664 ()                                      | void fcn_00014664 (void * ptr, int16_t arg_210h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_0h_4;
                                                                 |     int16_t var_4h_4;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch_2;
                                                                 |     int16_t var_20h_2;
                                                                 |     int16_t var_24h_3;
                                                                 |     int16_t var_28h_2;
                                                                 |     int16_t var_2ch_2;
                                                                 |     int16_t var_30h_3;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch_2;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_64h_2;
                                                                 |     int16_t var_68h;
                                                                 |     FILE * stream;
                                                                 |     int16_t var_70h;
                                                                 |     int16_t var_74h;
                                                                 |     int16_t var_78h;
                                                                 |     int16_t var_dch;
                                                                 |     int16_t var_4h_5;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h_2;
                                                                 |     int16_t var_30h_2;
                                                                 |     int16_t var_3ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x00014664 push {r1, r2, r3, r4, r5, r6, r8, sb, fp, lr}     |     
    0x00014668 blx lr                                            |     lr ();
    0x0001466a mov r6, r2                                        |     r6 = r2;
    0x0001466c ldr r2, [pc, 0x1f4]                               |     
    0x0001466e mov r4, r0                                        |     r4 = r0;
    0x00014670 add r3, pc                                        |     r3 += pc;
    0x00014672 sub sp, 0x40                                      |     
    0x00014674 ldr r5, [r0, 0xc]                                 |     r5 = *(ptrxc);
    0x00014676 add.w r0, r3, 0x24c                               |     r0 = r3 + 0x24c;
    0x0001467a ldr r3, [pc, 0x1ec]                               |     r3 = *(0x1486a);
    0x0001467c add r2, pc                                        |     r2 = 0x28ee4;
    0x0001467e mov r7, r1                                        |     r7 = r1;
    0x00014680 add.w sb, r4, 0x40                                |     sb = r4 + 0x40;
    0x00014684 movw r1, 0x643                                    |     r1 = 0x643;
    0x00014688 ldr r3, [r2, r3]                                  |     
    0x0001468a movs r2, 3                                        |     r2 = 3;
    0x0001468c ldr r3, [r3]                                      |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x0001468e str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00014690 mov.w r3, 0                                       |     r3 = 0;
    0x00014694 ldrb r3, [r5, 0x10]                               |     r3 = *((r5 + 0x10));
    0x00014696 ubfx r8, r3, 2, 1                                 |     r8 = (r3 >> 2) & ((1 << 1) - 1);
    0x0001469a bl 0xf2e8                                         |     fcn_0000f2e8 (r0, r1, r2);
    0x0001469e mov r1, r4                                        |     r1 = r4;
    0x000146a0 mov r0, sb                                        |     r0 = sb;
    0x000146a2 bl 0x12354                                        |     r0 = fcn_00012354 (r0, r1, r2, r3);
    0x000146a6 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000146a8 bne 0x14730                                       |         goto label_33;
                                                                 |     }
    0x000146aa mov r2, r0                                        |     r2 = r0;
    0x000146ac ldr r0, [r4, 0xc]                                 |     r0 = *((r4 + 0xc));
    0x000146ae mov r1, r2                                        |     r1 = r2;
    0x000146b0 bl 0x144bc                                        |     fcn_000144bc (r0, r1, r2);
                                                                 | label_1:
    0x000146b4 ldr r2, [r4, 0x10]                                |     r2 = *((r4 + 0x10));
    0x000146b6 cmp r2, 0                                         |     
    0x000146b8 ite eq                                            |     
                                                                 |     if (r2 != 0) {
    0x000146ba moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 == 0) {
    0x000146bc andne r3, r8, 1                                   |         r3 = r8 & 1;
                                                                 |     }
    0x000146c0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000146c2 bne.w 0x1483e                                     |         goto label_34;
                                                                 |     }
                                                                 | label_6:
    0x000146c6 ldr r3, [r4, 0x48]                                |     r3 = *((r4 + 0x48));
    0x000146c8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000146ca beq 0x147b6                                       |         goto label_35;
                                                                 |     }
                                                                 | label_2:
    0x000146cc ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x000146ce movs r1, 0                                        |     r1 = 0;
    0x000146d0 ldr r2, [pc, 0x198]                               |     
    0x000146d2 movs r0, 3                                        |     r0 = 3;
    0x000146d4 strd r1, r7, [sp, 4]                              |     __asm ("strd r1, r7, [var_4h_5]");
    0x000146d8 mov.w r1, -1                                      |     r1 = -1;
    0x000146dc ldr r3, [r3]                                      |     r3 = *(r3);
    0x000146de add r2, pc                                        |     r2 = 0x28f4e;
    0x000146e0 str r6, [sp, 0xc]                                 |     var_ch_2 = r6;
    0x000146e2 bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x000146e6 ldr r3, [r4, 0x48]                                |     r3 = *((r4 + 0x48));
    0x000146e8 add r1, sp, 4                                     |     r1 += var_4h_5;
    0x000146ea ldr r0, [r4, 0x58]                                |     r0 = *((r4 + 0x58));
    0x000146ec blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x000146ee vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x000146f2 add.w r3, r4, 0x44                                |     r3 = r4 + 0x44;
    0x000146f6 vst1.32 {d16}, [r3]                               |     __asm ("vst1.32 {d16}, [r3]");
                                                                 | label_3:
    0x000146fa mov r0, r4                                        |     r0 = r4;
    0x000146fc bl 0x12be8                                        |     fcn_00012be8 (r0);
                                                                 |     do {
                                                                 | label_0:
    0x00014700 ldr r2, [pc, 0x16c]                               |         
    0x00014702 ldr r3, [pc, 0x164]                               |         r3 = *(0x1486a);
    0x00014704 add r2, pc                                        |         r2 = 0x28f78;
    0x00014706 ldr r3, [r2, r3]                                  |         r3 = imp.__aeabi_unwind_cpp_pr0;
    0x00014708 ldr r2, [r3]                                      |         r2 = imp.__aeabi_unwind_cpp_pr0;
    0x0001470a ldr r3, [sp, 0x3c]                                |         r3 = var_3ch;
    0x0001470c eors r2, r3                                       |         r2 ^= r3;
    0x0001470e mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00014712 bne.w 0x1485a                                     |             goto label_36;
                                                                 |         }
    0x00014716 ldr r0, [pc, 0x15c]                               |         
    0x00014718 movs r3, 3                                        |         r3 = 3;
    0x0001471a movs r2, 0                                        |         r2 = 0;
    0x0001471c movw r1, 0x68d                                    |         r1 = 0x68d;
    0x00014720 add r0, pc                                        |         
    0x00014722 add.w r0, r0, 0x24c                               |         r0 = 0x291e6;
    0x00014726 add sp, 0x40                                      |         
    0x00014728 pop.w {r4, r5, r6, r7, r8, sb, sl, lr}            |         
    0x0001472c b.w 0xf388                                        |         void (*0xf388)() ();
                                                                 | label_33:
    0x00014730 movs r2, 0                                        |         r2 = 0;
    0x00014732 ldr r0, [r4, 0xc]                                 |         r0 = *((r4 + 0xc));
    0x00014734 mov r1, r2                                        |         r1 = r2;
    0x00014736 bl 0x12a5c                                        |         fcn_00012a5c (r0, r1, r2);
    0x0001473a ldr r2, [r4, 0x10]                                |         r2 = *((r4 + 0x10));
    0x0001473c cmp r2, 0                                         |         
    0x0001473e ite eq                                            |         
                                                                 |         if (r2 != 0) {
    0x00014740 moveq r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (r2 == 0) {
    0x00014742 andne r3, r8, 1                                   |             r3 = r8 & 1;
                                                                 |         }
    0x00014746 mov sl, r3                                        |         sl = r3;
    0x00014748 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0001474a bne 0x1481e                                       |             goto label_37;
                                                                 |         }
                                                                 | label_5:
    0x0001474c ldr r0, [pc, 0x128]                               |         
    0x0001474e movs r2, 0x60                                     |         r2 = 0x60;
    0x00014750 movw r1, 0x652                                    |         r1 = 0x652;
    0x00014754 add r0, pc                                        |         r0 = 0x28fd0;
    0x00014756 bl 0xf7f0                                         |         r0 = fcn_0000f7f0 (r0, r1, r2);
    0x0001475a mov r5, r0                                        |         r5 = r0;
    0x0001475c cmp r0, 0                                         |         
    0x0001475e beq 0x14700                                       |         
                                                                 |     } while (r0 == 0);
    0x00014760 movs r2, 0x60                                     |     r2 = 0x60;
    0x00014762 movs r1, 0                                        |     r1 = 0;
    0x00014764 blx 0x2674                                        |     fcn_00002674 ();
    0x00014768 mov r1, sb                                        |     r1 = sb;
    0x0001476a movs r2, 0x50                                     |     r2 = 0x50;
    0x0001476c mov r0, r5                                        |     r0 = r5;
    0x0001476e str r4, [r5, 0x50]                                |     *((r5 + 0x50)) = r4;
    0x00014770 blx 0x23e0                                        |     fcn_000023e0 ();
    0x00014774 ldr r2, [pc, 0x104]                               |     
    0x00014776 mov.w r1, -1                                      |     r1 = -1;
    0x0001477a movs r0, 3                                        |     r0 = 3;
    0x0001477c add r2, pc                                        |     r2 = 0x28ffc;
    0x0001477e bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x00014782 ldr r3, [r5, 0x50]                                |     r3 = *((r5 + 0x50));
    0x00014784 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00014786 ldr.w r3, [r3, 0x98]                              |     r3 = *((r3 + 0x98));
    0x0001478a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001478c beq 0x1480e                                       |         goto label_38;
                                                                 |     }
    0x0001478e ldr r3, [r5, 0x34]                                |     r3 = *((r5 + 0x34));
    0x00014790 adds r3, 1                                        |     r3++;
    0x00014792 str r3, [r5, 0x34]                                |     *((r5 + 0x34)) = r3;
                                                                 | label_4:
    0x00014794 mov r0, r5                                        |     r0 = r5;
    0x00014796 movs r1, 0x50                                     |     r1 = 0x50;
    0x00014798 bl 0x132bc                                        |     r0 = fcn_000132bc (r0, r1, r2, r3);
    0x0001479c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0001479e beq 0x14700                                       |         goto label_0;
                                                                 |     }
    0x000147a0 movs r2, 0                                        |     r2 = 0;
    0x000147a2 ldr r0, [r4, 0xc]                                 |     r0 = *((r4 + 0xc));
    0x000147a4 mov r1, r2                                        |     r1 = r2;
    0x000147a6 bl 0x144bc                                        |     fcn_000144bc (r0, r1, r2);
    0x000147aa cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x000147ae beq 0x146b4                                       |         goto label_1;
                                                                 |     }
    0x000147b0 ldr r3, [r4, 0x48]                                |     r3 = *((r4 + 0x48));
    0x000147b2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000147b4 bne 0x146cc                                       |         goto label_2;
                                                                 |     }
                                                                 | label_35:
    0x000147b6 ldr r3, [r4, 0x50]                                |     r3 = *((r4 + 0x50));
    0x000147b8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000147ba beq 0x146fa                                       |         goto label_3;
                                                                 |     }
    0x000147bc ldr.w ip, [pc, 0xc0]                              |     
    0x000147c0 add.w lr, sp, 0x10                                |     lr += var_10h_2;
    0x000147c4 ldr r5, [r4, 0xc]                                 |     r5 = *((r4 + 0xc));
    0x000147c6 add ip, pc                                        |     
    0x000147c8 add.w ip, ip, 0x178                               |     ip = 0x291c2;
    0x000147cc ldm.w ip!, {r0, r1, r2, r3}                       |     r0 = *(ip!);
                                                                 |     r1 = *((ip! + 4));
                                                                 |     r2 = *((ip! + 8));
                                                                 |     r3 = *((ip! + 12));
    0x000147d0 stm.w lr!, {r0, r1, r2, r3}                       |     *(lr!) = r0;
                                                                 |     *((lr! + 4)) = r1;
                                                                 |     *((lr! + 8)) = r2;
                                                                 |     *((lr! + 12)) = r3;
    0x000147d4 ldm.w ip!, {r0, r1, r2, r3}                       |     r0 = *(ip!);
                                                                 |     r1 = *((ip! + 4));
                                                                 |     r2 = *((ip! + 8));
                                                                 |     r3 = *((ip! + 12));
    0x000147d8 stm.w lr!, {r0, r1, r2, r3}                       |     *(lr!) = r0;
                                                                 |     *((lr! + 4)) = r1;
                                                                 |     *((lr! + 8)) = r2;
                                                                 |     *((lr! + 12)) = r3;
    0x000147dc ldr r3, [r5]                                      |     r3 = *(r5);
    0x000147de ldm.w ip, {r0, r1, r2}                            |     r0 = *(ip);
                                                                 |     r1 = *((ip + 4));
                                                                 |     r2 = *((ip + 8));
    0x000147e2 stm.w lr, {r0, r1, r2}                            |     *(lr) = r0;
                                                                 |     *((lr + 4)) = r1;
                                                                 |     *((lr + 8)) = r2;
    0x000147e6 mov.w r1, -1                                      |     r1 = -1;
    0x000147ea ldr r2, [pc, 0x98]                                |     
    0x000147ec movs r0, 3                                        |     r0 = 3;
    0x000147ee strd r7, r6, [sp, 0x30]                           |     __asm ("strd r7, r6, [var_30h_2]");
    0x000147f2 add r2, pc                                        |     r2 = 0x2907c;
    0x000147f4 bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x000147f6 invalid                                           |     
    0x000147fa add r1, sp, 0x10                                  |     r1 += var_10h_2;
    0x000147fc ldr r0, [r4, 0x58]                                |     r0 = *((r4 + 0x58));
    0x000147fe blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r1);
    0x00014800 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00014802 movs r0, r2                                       |     r0 = r2;
    0x00014804 add.w r3, r4, 0x4c                                |     r3 = r4 + 0x4c;
    0x00014808 vst1.32 {d16}, [r3]                               |     __asm ("vst1.32 {d16}, [r3]");
    0x0001480c b 0x146fa                                         |     goto label_3;
                                                                 | label_38:
    0x0001480e ldr r2, [r5, 0x38]                                |     r2 = *((r5 + 0x38));
    0x00014810 cmp r2, 3                                         |     
                                                                 |     if (r2 != 3) {
    0x00014812 bne 0x14794                                       |         goto label_4;
                                                                 |     }
    0x00014814 str r3, [r5, 0x38]                                |     *((r5 + 0x38)) = r3;
    0x00014816 ldr r3, [r5, 0x34]                                |     r3 = *((r5 + 0x34));
    0x00014818 adds r3, 1                                        |     r3++;
    0x0001481a str r3, [r5, 0x34]                                |     *((r5 + 0x34)) = r3;
    0x0001481c b 0x14794                                         |     goto label_4;
                                                                 | label_37:
    0x0001481e ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00014820 mov.w r1, -1                                      |     r1 = -1;
    0x00014824 ldr r2, [pc, 0x60]                                |     
    0x00014826 movs r0, 3                                        |     r0 = 3;
    0x00014828 mov.w sl, 1                                       |     sl = 1;
    0x0001482c ldr r3, [r3]                                      |     r3 = *(r3);
    0x0001482e add r2, pc                                        |     r2 = 0x290ba;
    0x00014830 bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x00014834 ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x00014836 movs r1, 0                                        |     r1 = 0;
    0x00014838 ldr r0, [r4, 0x1c]                                |     r0 = *((r4 + 0x1c));
    0x0001483a blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0001483c b 0x1474c                                         |     goto label_5;
                                                                 | label_34:
    0x0001483e ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00014840 mov.w r1, -1                                      |     r1 = -1;
    0x00014844 ldr r2, [pc, 0x44]                                |     
    0x00014846 movs r0, 3                                        |     r0 = 3;
    0x00014848 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0001484a add r2, pc                                        |     r2 = 0x290da;
    0x0001484c bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x00014850 ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x00014852 movs r1, 0                                        |     r1 = 0;
    0x00014854 ldr r0, [r4, 0x1c]                                |     r0 = *((r4 + 0x1c));
    0x00014856 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00014858 b 0x146c6                                         |     goto label_6;
                                                                 | label_36:
    0x0001485a blx 0x245c                                        |     pthread_condattr_init ();
    0x0001485e nop                                               |     
    0x00014860 strb r4, [r2, 7]                                  |     *((r2 + 7)) = r4;
    0x00014862 movs r0, r0                                       |     
    0x00014864 str r7, [sp, 0x30]                                |     var_30h_2 = r7;
    0x00014866 movs r0, r0                                       |     
    0x00014868 lsls r4, r7, 7                                    |     r4 = r7 << 7;
    0x0001486a movs r0, r0                                       |     
    0x0001486c ldr r6, [r1, 0x2c]                                |     r6 = *((r1 + 0x2c));
    0x0001486e movs r0, r0                                       |     
    0x00014870 str r6, [sp, 0x210]                               |     *(arg_210h) = r6;
    0x00014872 movs r0, r0                                       |     
    0x00014874 strb r4, [r4, 4]                                  |     *((r4 + 4)) = r4;
    0x00014876 movs r0, r0                                       |     
    0x00014878 str r4, [r3, 0x6c]                                |     *((r3 + 0x6c)) = r4;
    0x0001487a movs r0, r0                                       |     
    0x0001487c ldr r4, [r2, 0x20]                                |     r4 = *((r2 + 0x20));
    0x0001487e movs r0, r0                                       |     
    0x00014880 strb r6, [r7, 1]                                  |     *((r7 + 1)) = r6;
    0x00014882 movs r0, r0                                       |     
    0x00014884 ldr r2, [r7, 0x18]                                |     r2 = *((r7 + 0x18));
    0x00014886 movs r0, r0                                       |     
    0x00014888 ldr r6, [r1, 0x10]                                |     r6 = *((r1 + 0x10));
    0x0001488a movs r0, r0                                       |     
    0x0001488c ldr r2, [r6, 0xc]                                 |     r2 = *((r6 + 0xc));
    0x0001488e movs r0, r0                                       |     
    0x00014890 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00014894 movs r2, 3                                        |     r2 = 3;
    0x00014896 ldr.w r4, [pc, 0xb74]                             |     
    0x0001489a sub sp, 0xe4                                      |     
    0x0001489c movw r1, 0x7d3                                    |     r1 = 0x7d3;
    0x000148a0 ldr.w r3, [pc, 0xb6c]                             |     r3 = *(0x15410);
    0x000148a4 ldr.w r0, [pc, 0xb6c]                             |     
    0x000148a8 add r4, pc                                        |     r4 = 0x29cba;
    0x000148aa ldr.w sl, [pc, 0xb6c]                             |     
    0x000148ae ldr r3, [r4, r3]                                  |     
    0x000148b0 add r0, pc                                        |     
    0x000148b2 add.w r0, r0, 0x258                               |     r0 = 0x29f20;
    0x000148b6 add sl, pc                                        |     sl = 0x29cd4;
    0x000148b8 ldr r3, [r3]                                      |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x000148ba str r3, [sp, 0xdc]                                |     var_dch = r3;
    0x000148bc mov.w r3, 0                                       |     r3 = 0;
    0x000148c0 bl 0xf2e8                                         |     fcn_0000f2e8 (r0, r1, r2);
    0x000148c4 ldr.w r0, [pc, 0xb54]                             |     
    0x000148c8 add r0, pc                                        |     r0 = 0x29ce8;
    0x000148ca bl 0xa768                                         |     fcn_0000a768 (r0);
    0x000148ce ldr.w r3, [pc, 0xb50]                             |     r3 = *(0x15422);
    0x000148d2 ldr.w fp, [sl, r3]                                |     fp = imp.__aeabi_unwind_cpp_pr0;
    0x000148d6 ldr.w r0, [fp]                                    |     r0 = imp.__aeabi_unwind_cpp_pr0;
    0x000148da blx 0x24d4                                        |     r0 = fwrite (r0, r1, r2, r3);
    0x000148de cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000148e0 bne.w 0x151a0                                     |         goto label_39;
                                                                 |     }
                                                                 | label_25:
    0x000148e4 ldr.w r3, [pc, 0xb3c]                             |     r3 = *(0x15424);
    0x000148e8 movs r2, 2                                        |     r2 = 2;
    0x000148ea ldr.w r6, [sl, r3]                                |     r6 = *((sl + r3));
    0x000148ee str r2, [r6]                                      |     *(r6) = r2;
    0x000148f0 blx 0x2778                                        |     fcn_00002778 ();
    0x000148f4 ldr.w r3, [pc, 0xb30]                             |     r3 = *(0x15428);
    0x000148f8 ldr.w r5, [sl, r3]                                |     r5 = *((sl + r3));
    0x000148fc ldr.w r3, [pc, 0xb2c]                             |     r3 = *(0x1542c);
    0x00014900 str r0, [r5]                                      |     *(r5) = r0;
    0x00014902 ldr.w r8, [sl, r3]                                |     r8 = *((sl + r3));
    0x00014904 strh r3, [r0]                                     |     *(r0) = r3;
    0x00014906 ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x0001490a str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0001490c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001490e bne.w 0x14d3c                                     |         goto label_40;
                                                                 |     }
    0x00014912 ldr.w r3, [pc, 0xb1c]                             |     r3 = *(0x15432);
    0x00014916 add.w sb, sp, 0x78                                |     sb += var_78h;
    0x0001491a ldr.w r2, [pc, 0xb18]                             |     r2 = *(0x00015434);
    0x0001491e movs r7, 0xa                                      |     r7 = 0xa;
    0x00014920 ldr.w r3, [sl, r3]                                |     r3 = *((sl + r3));
    0x00014924 add r2, pc                                        |     r2 += pc;
    0x00014926 str r6, [sp, 0x38]                                |     var_38h = r6;
    0x00014928 adds r2, 0x20                                     |     r2 += 0x20;
    0x0001492a str r5, [sp, 0x3c]                                |     var_3ch_2 = r5;
    0x0001492c str r3, [sp, 0x28]                                |     var_28h_2 = r3;
    0x0001492e ldr.w r3, [pc, 0xb08]                             |     
    0x00014932 str r2, [sp, 0x20]                                |     var_20h_2 = r2;
    0x00014934 add r2, sp, 0x6c                                  |     r2 += stream;
    0x00014936 str r2, [sp, 0x24]                                |     var_24h_3 = r2;
    0x00014938 add r2, sp, 0x64                                  |     r2 += var_64h_2;
    0x0001493a add r3, pc                                        |     
    0x0001493c str r2, [sp, 0x10]                                |     var_10h = r2;
    0x0001493e add.w r2, r3, 0x270                               |     r2 = r3 + 0x270;
    0x00014942 add.w r3, r3, 0x298                               |     r3 = 0x2a010;
    0x00014946 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00014948 mov r3, sb                                        |     r3 = sb;
    0x0001494a mov sb, r8                                        |     sb = r8;
    0x0001494c mov r8, r3                                        |     r8 = r3;
    0x0001494e str r2, [sp, 0x1c]                                |     var_1ch_2 = r2;
                                                                 |     do {
                                                                 | label_7:
    0x00014950 mov.w r3, -1                                      |         r3 = -1;
    0x00014954 ldr.w r0, [fp]                                    |         r0 = *(fp);
    0x00014958 strd r3, r3, [sp, 0x64]                           |         __asm ("strd r3, r3, [var_64h_2]");
    0x0001495c blx 0x270c                                        |         r0 = fcn_0000270c ();
    0x00014960 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00014962 bne.w 0x14cb4                                     |             goto label_41;
                                                                 |         }
                                                                 | label_9:
    0x00014966 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00014968 movs r2, 3                                        |         r2 = 3;
    0x0001496a ldr r0, [sp, 0x1c]                                |         r0 = var_1ch_2;
    0x0001496c movw r1, 0xbab                                    |         r1 = 0xbab;
    0x00014970 str r3, [sp, 0x6c]                                |         stream = r3;
    0x00014972 bl 0xf2e8                                         |         fcn_0000f2e8 (r0, r1, r2);
    0x00014976 ldrd r3, r2, [sp, 0x24]                           |         __asm ("ldrd r3, r2, [var_28h_2]");
    0x0001497a mov r1, r7                                        |         r1 = r7;
    0x0001497c movs r0, 0                                        |         r0 = 0;
    0x0001497e ldr r2, [r2]                                      |         r2 = *(r2);
    0x00014980 bl 0x83bc                                         |         fcn_000083bc (r0, r1, r2, r3);
    0x00014984 ldr r3, [sp, 0x6c]                                |         r3 = stream;
    0x00014986 str r0, [sp, 0x68]                                |         var_68h = r0;
    0x00014988 ldr.w r0, [fp]                                    |         r0 = *(fp);
    0x0001498c str r3, [sp, 0x64]                                |         var_64h_2 = r3;
    0x0001498e blx 0x24d4                                        |         fwrite (r0, r1, r2, r3);
    0x00014990 stc p8, c2, [r2, 0]!                              |         __asm ("stc p8, c2, [r2, 0]!");
                                                                 |         if (r0 != 0) {
    0x00014994 bne.w 0x14cca                                     |             goto label_42;
                                                                 |         }
                                                                 | label_10:
    0x00014998 ldr.w r0, [fp]                                    |         r0 = *(fp);
    0x0001499c ldr.w r5, [sb]                                    |         r5 = *(sb);
    0x000149a0 blx 0x270c                                        |         r0 = fcn_0000270c ();
    0x000149a4 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x000149a6 bne.w 0x14c9e                                     |             goto label_43;
                                                                 |         }
                                                                 | label_8:
    0x000149aa ldr r4, [sp, 0x68]                                |         r4 = var_68h;
    0x000149ac orrs r4, r5                                       |         r4 |= r5;
                                                                 |         if (r4 == r5) {
    0x000149ae bne 0x149da                                       |             
    0x000149b0 ldr.w r5, [pc, 0xa88]                             |             
    0x000149b4 movs r2, 3                                        |             r2 = 3;
    0x000149b6 movs r1, 0x69                                     |             r1 = 0x69;
    0x000149b8 add r5, pc                                        |             r5 = 0x29df8;
    0x000149ba adds r5, 0x80                                     |             r5 += 0x80;
    0x000149bc mov r0, r5                                        |             r0 = r5;
    0x000149be bl 0xf2e8                                         |             fcn_0000f2e8 (r0, r1, r2);
    0x000149c2 movw r0, 0x86a0                                   |             
    0x000149c6 movt r0, 1                                        |             r0 = 0x186a0;
    0x000149ca blx 0x2504                                        |             strcpy (r0, r1)
    0x000149ce mov r2, r4                                        |             r2 = r4;
    0x000149d0 mov r0, r5                                        |             r0 = r5;
    0x000149d2 movs r3, 3                                        |             r3 = 3;
    0x000149d4 movs r1, 0x6f                                     |             r1 = 0x6f;
    0x000149d6 bl 0xf388                                         |             fcn_0000f388 (r0, r1, r2, r3);
                                                                 |         }
    0x000149da ldr.w r0, [fp]                                    |         r0 = *(fp);
    0x000149de blx 0x24d4                                        |         r0 = fwrite (r0, r1, r2, r3);
    0x000149e2 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x000149e4 bne.w 0x14ce0                                     |             goto label_44;
                                                                 |         }
                                                                 | label_11:
    0x000149e8 ldr r3, [sp, 0x68]                                |         r3 = var_68h;
    0x000149ea cmp r3, 0                                         |         
                                                                 |         if (r3 > 0) {
    0x000149ec ble.w 0x14b1e                                     |             
    0x000149f0 ldr r5, [sp, 0x6c]                                |             r5 = stream;
    0x000149f2 cmp r5, 0                                         |             
                                                                 |             if (r5 != 0) {
    0x000149f4 bne.w 0x14b1e                                     |                 goto label_16;
                                                                 |             }
    0x000149f8 ldr.w r3, [pc, 0xa44]                             |             r3 = *(0x15440);
    0x000149fc add r1, sp, 0x68                                  |             r1 += var_68h;
    0x000149fe ldr.w r2, [pc, 0xa44]                             |             r2 = *(0x00015444);
    0x00014a02 ldr.w r4, [sl, r3]                                |             r4 = *((sl + r3));
    0x00014a06 add r2, pc                                        |             r2 += pc;
    0x00014a08 ldr r0, [r4]                                      |             r0 = *(r4);
    0x00014a0a bl 0xcb84                                         |             r0 = fcn_0000cb84 (r0, r1, r2);
    0x00014a0e cmp r0, 0                                         |             
                                                                 |             if (r0 == 0) {
    0x00014a10 beq.w 0x14b1e                                     |                 goto label_16;
                                                                 |             }
    0x00014a14 ldr r3, [r4]                                      |             r3 = *(r4);
    0x00014a16 ldr r3, [r3, 8]                                   |             r3 = *((r3 + 8));
    0x00014a18 ldr r4, [r3, 8]                                   |             r4 = *((r3 + 8));
    0x00014a1a cmp r4, 0                                         |             
                                                                 |             if (r4 == 0) {
    0x00014a1c beq 0x14b1e                                       |                 goto label_16;
                                                                 |             }
    0x00014a1e ldr r3, [r4, 0xc]                                 |             r3 = *((r4 + 0xc));
    0x00014a20 mov.w r1, -1                                      |             r1 = -1;
    0x00014a24 ldr.w r2, [pc, 0xa20]                             |             
    0x00014a28 movs r0, 3                                        |             r0 = 3;
    0x00014a2a ldrh r3, [r3, 0x10]                               |             r3 = *((r3 + 0x10));
    0x00014a2c add r2, pc                                        |             r2 = 0x29e78;
    0x00014a2e sbfx r3, r3, 6, 4                                 |             __asm ("sbfx r3, r3, 6, 4");
    0x00014a32 bl 0x8e8c                                         |             fcn_00008e8c (r0, r1);
    0x00014a36 ldr r1, [r4, 0xc]                                 |             r1 = *((r4 + 0xc));
    0x00014a38 ldrh r3, [r1, 0x10]                               |             r3 = *((r1 + 0x10));
    0x00014a3a and r2, r3, 0x340                                 |             r2 = r3 & 0x340;
    0x00014a3e and r3, r3, 0x3c0                                 |             r3 &= 0x3c0;
    0x00014a42 cmp r3, 0x80                                      |             
    0x00014a44 it ne                                             |             
                                                                 |             if (r3 != 0x80) {
    0x00014a46 cmpne r2, 0x40                                    |                 __asm ("cmpne r2, 0x40");
                                                                 |             }
                                                                 |             if (r3 != 0x80) {
    0x00014a48 bne.w 0x14db6                                     |                 goto label_45;
                                                                 |             }
    0x00014a4c ldr.w r0, [pc, 0x9fc]                             |             
    0x00014a50 mov.w r3, -1                                      |             r3 = -1;
    0x00014a54 movs r2, 3                                        |             r2 = 3;
    0x00014a56 movw r1, 0xadb                                    |             r1 = 0xadb;
    0x00014a5a str r3, [sp, 0x70]                                |             var_70h = r3;
    0x00014a5c add r0, pc                                        |             
    0x00014a5e ldr r6, [r4]                                      |             r6 = *(r4);
    0x00014a60 add.w r0, r0, 0x280                               |             r0 = 0x2a12c;
    0x00014a62 strb r0, [r4]                                     |             *(r4) = r0;
    0x00014a64 bl 0xf2e8                                         |             fcn_0000f2e8 (r0, r1, r2);
    0x00014a68 ldr r2, [r4, 0x78]                                |             r2 = *((r4 + 0x78));
    0x00014a6a mov.w r3, -1                                      |             r3 = -1;
    0x00014a6e cmp r2, 0                                         |             
                                                                 |             if (r2 == 0) {
    0x00014a70 beq.w 0x14ebc                                     |                 goto label_46;
                                                                 |             }
    0x00014a74 ldr r3, [r4, 0xc]                                 |             r3 = *((r4 + 0xc));
    0x00014a76 str r3, [sp, 0x14]                                |             var_14h = r3;
                                                                 | label_20:
    0x00014a78 ldr.w r3, [r4, 0x108]                             |             r3 = *((r4 + 0x108));
    0x00014a7c cmp r3, 0                                         |             
                                                                 |             if (r3 > 0) {
    0x00014a7e ble 0x14aa0                                       |                 
    0x00014a80 ldr r2, [r4, 0x74]                                |                 r2 = *((r4 + 0x74));
    0x00014a82 ldr.w r3, [r4, 0x10c]                             |                 r3 = *((r4 + 0x10c));
    0x00014a86 ldr.w r0, [pc, 0x9c8]                             |                 
    0x00014a8a ldr.w r6, [r3, r2, lsl 2]                         |                 offset_0 = r2 << 2;
                                                                 |                 r6 = *((r3 + offset_0));
    0x00014a8e movs r2, 6                                        |                 r2 = 6;
    0x00014a90 add r0, pc                                        |                 r0 = 0x29ee6;
    0x00014a92 mov r1, r6                                        |                 r1 = r6;
    0x00014a94 blx 0x2814                                        |                 r0 = fcn_00002814 ();
    0x00014a98 cmp r0, 0                                         |                 
                                                                 |                 if (r0 != 0) {
    0x00014a9a bne.w 0x14e5c                                     |                     goto label_47;
                                                                 |                 }
    0x00014a9e adds r6, 6                                        |                 r6 += 6;
                                                                 |             }
                                                                 | label_18:
    0x00014aa0 ldr r3, [sp, 0x14]                                |             r3 = var_14h;
    0x00014aa2 ldrh r3, [r3, 0x10]                               |             r3 = *((r3 + 0x10));
    0x00014aa4 and r3, r3, 0x3c0                                 |             r3 &= 0x3c0;
    0x00014aa8 cmp r3, 0x40                                      |             
                                                                 |             if (r3 == 0x40) {
    0x00014aaa beq.w 0x151b6                                     |                 goto label_48;
                                                                 |             }
    0x00014aae cmp r3, 0xc0                                      |             
                                                                 |             if (r3 == 0xc0) {
    0x00014ab0 beq.w 0x15276                                     |                 goto label_49;
                                                                 |             }
    0x00014ab4 ldr r1, [sp, 0x70]                                |             r1 = var_70h;
    0x00014ab6 adds.w r3, r1, 0x16                               |             r3 = r1 + 0x16;
    0x00014aba it ne                                             |             
                                                                 |             if (r3 == r1) {
    0x00014abc movne r3, 1                                       |                 r3 = 1;
                                                                 |             }
                                                                 | label_26:
    0x00014abe cmp r1, 0                                         |             
    0x00014ac0 ite eq                                            |             
                                                                 |             if (r1 != 0) {
    0x00014ac2 moveq r3, 0                                       |                 r3 = 0;
                                                                 |             }
                                                                 |             if (r1 == 0) {
    0x00014ac4 andne r3, r3, 1                                   |                 r3 &= 1;
                                                                 |             }
                                                                 |             if (r3 != 0) {
    0x00014ac8 cbz r3, 0x14af4                                   |                 
    0x00014aca ldr r3, [r4, 0xc]                                 |                 r3 = *((r4 + 0xc));
    0x00014acc adds r6, r1, 3                                    |                 r6 = r1 + 3;
    0x00014ace ite ne                                            |                 
                                                                 |                 if (r6 == r1) {
    0x00014ad0 movne r1, 0                                       |                     r1 = 0;
                                                                 |                 }
                                                                 |                 if (r6 != r1) {
    0x00014ad2 moveq r1, 1                                       |                     r1 = 1;
                                                                 |                 }
    0x00014ad4 ldrh r3, [r3, 0x10]                               |                 r3 = *((r3 + 0x10));
    0x00014ad6 and r3, r3, 0x380                                 |                 r3 &= 0x380;
    0x00014ada cmp r3, 0x80                                      |                 
    0x00014adc it ne                                             |                 
                                                                 |                 if (r3 == 0x80) {
    0x00014ade orrne r1, r1, 1                                   |                     r1 |= 1;
                                                                 |                 }
                                                                 |                 if (r1 == 0) {
    0x00014ae2 cbz r1, 0x14af4                                   |                     goto label_50;
                                                                 |                 }
    0x00014ae4 ldr.w r2, [pc, 0x96c]                             |                 
    0x00014ae8 mov.w r1, -1                                      |                 r1 = -1;
    0x00014aec mov r0, r4                                        |                 r0 = r4;
    0x00014aee add r2, pc                                        |                 r2 = 0x29f46;
    0x00014af0 bl 0x14664                                        |                 fcn_00014664 (r0, r1, r2, r3, r4);
                                                                 |             }
                                                                 | label_50:
    0x00014af4 ldr.w r0, [pc, 0x960]                             |             
    0x00014af8 movs r3, 3                                        |             r3 = 3;
    0x00014afa add r2, sp, 0x70                                  |             r2 += var_70h;
    0x00014afc movw r1, 0xba1                                    |             r1 = 0xba1;
    0x00014b00 add r0, pc                                        |             
    0x00014b02 add.w r0, r0, 0x280                               |             r0 = 0x2a1dc;
    0x00014b06 bl 0xf388                                         |             fcn_0000f388 (r0, r1, r2, r3);
    0x00014b0a ldr r3, [r4, 0xc]                                 |             r3 = *((r4 + 0xc));
    0x00014b0c ldr r2, [sp, 0x70]                                |             r2 = var_70h;
    0x00014b0e ldrh r3, [r3, 0x10]                               |             r3 = *((r3 + 0x10));
    0x00014b10 str r2, [sp, 0x64]                                |             var_64h_2 = r2;
    0x00014b12 and r3, r3, 0x3c0                                 |             r3 &= 0x3c0;
    0x00014b16 cmp.w r3, 0x100                                   |             
                                                                 |             if (r3 == 0x100) {
    0x00014b1a beq.w 0x14e90                                     |                 goto label_51;
                                                                 |             }
                                                                 |         }
                                                                 | label_16:
    0x00014b1e movs r3, 0                                        |         r3 = 0;
    0x00014b20 str r3, [sp, 0x14]                                |         var_14h = r3;
                                                                 | label_17:
    0x00014b22 movs r2, 3                                        |         r2 = 3;
    0x00014b24 movw r1, 0xac5                                    |         r1 = 0xac5;
    0x00014b28 ldr r0, [sp, 0xc]                                 |         r0 = var_ch;
    0x00014b2a bl 0xf2e8                                         |         fcn_0000f2e8 (r0, r1, r2);
    0x00014b2e mov r0, r8                                        |         r0 = r8;
    0x00014b30 bl 0x29e0                                         |         fcn_000029e0 (r0);
    0x00014b34 ldr r5, [sp, 0x20]                                |         r5 = var_20h_2;
    0x00014b36 ldm.w r8, {r0, r1}                                |         r0 = *(r8);
                                                                 |         r1 = *((r8 + 4));
    0x00014b3a ldm.w r5, {r2, r3}                                |         r2 = *(r5);
                                                                 |         r3 = *((r5 + 4));
    0x00014b3e bl 0x2a44                                         |         fcn_00002a44 (r0);
    0x00014b42 ldr.w r3, [pc, 0x918]                             |         
    0x00014b46 add r3, pc                                        |         
    0x00014b48 ldr r3, [r3]                                      |         r3 = imp.__aeabi_unwind_cpp_pr0;
    0x00014b4a cmp r0, r3                                        |         
    0x00014b4c asr.w r2, r3, 0x1f                                |         r2 = r3 >> 0x1f;
    0x00014b50 sbcs r1, r2                                       |         __asm ("sbcs r1, r2");
                                                                 |         if (r0 < r3) {
    0x00014b52 blt.w 0x14cf6                                     |             goto label_52;
                                                                 |         }
    0x00014b56 add r4, sp, 0x48                                  |         r4 += var_48h;
    0x00014b58 mov r0, r4                                        |         r0 = r4;
    0x00014b5a bl 0x29e0                                         |         r0 = fcn_000029e0 (r0);
    0x00014b5e ldm.w r4, {r0, r1}                                |         r0 = *(r4);
                                                                 |         r1 = *((r4 + 4));
    0x00014b62 stm.w r5, {r0, r1}                                |         *(r5) = r0;
                                                                 |         *((r5 + 4)) = r1;
    0x00014b66 ldm.w r8, {r0, r1}                                |         r0 = *(r8);
                                                                 |         r1 = *((r8 + 4));
    0x00014b6a bl 0x3ca8                                         |         r0 = fcn_00003ca8 ();
    0x00014b6e ldm.w r8, {r0, r1}                                |         r0 = *(r8);
                                                                 |         r1 = *((r8 + 4));
    0x00014b72 movs r3, 0                                        |         r3 = 0;
    0x00014b74 movs r2, 1                                        |         r2 = 1;
    0x00014b76 bl 0x3f14                                         |         fcn_00003f14 (r0, r1, r2, r3);
                                                                 | label_12:
    0x00014b7a ldr r0, [sp, 0xc]                                 |         r0 = var_ch;
    0x00014b7c movs r3, 3                                        |         r3 = 3;
    0x00014b7e movs r2, 0                                        |         r2 = 0;
    0x00014b80 movw r1, 0xacf                                    |         r1 = 0xacf;
    0x00014b84 bl 0xf388                                         |         fcn_0000f388 (r0, r1, r2, r3);
    0x00014b86 invalid                                           |         
    0x00014b8a movs r0, r0                                       |         
    0x00014b8c blx 0x270c                                        |         r0 = fcn_0000270c ();
    0x00014b90 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00014b92 bne.w 0x14d04                                     |             goto label_53;
                                                                 |         }
                                                                 | label_13:
    0x00014b96 ldr.w r0, [pc, 0x8c8]                             |         
    0x00014b9a movs r3, 3                                        |         r3 = 3;
    0x00014b9c ldr r2, [sp, 0x10]                                |         r2 = var_10h;
    0x00014b9e movw r1, 0xc4f                                    |         r1 = 0xc4f;
    0x00014ba2 add r0, pc                                        |         
    0x00014ba4 add.w r0, r0, 0x270                               |         r0 = 0x2a278;
    0x00014ba8 bl 0xf388                                         |         fcn_0000f388 (r0, r1, r2, r3);
    0x00014bac ldr.w r0, [fp]                                    |         r0 = *(fp);
    0x00014bb0 blx 0x24d4                                        |         r0 = fwrite (r0, r1, r2, r3);
    0x00014bb4 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00014bb6 bne.w 0x14d1a                                     |             goto label_54;
                                                                 |         }
    0x00014bba ldr.w r4, [sb]                                    |         r4 = *(sb);
    0x00014bbe cmp r4, 0                                         |         
                                                                 |         if (r4 != 0) {
    0x00014bc0 bne.w 0x14d38                                     |             goto label_55;
                                                                 |         }
                                                                 | label_14:
    0x00014bc4 ldr r3, [sp, 0x68]                                |         r3 = var_68h;
    0x00014bc6 cmp r3, 0                                         |         
    0x00014bc8 beq.w 0x14950                                     |         
                                                                 |     } while (r3 == 0);
    0x00014bcc ldr.w r3, [pc, 0x870]                             |     r3 = *(0x15440);
    0x00014bd0 add r1, sp, 0x68                                  |     r1 += var_68h;
    0x00014bd2 ldr.w r2, [pc, 0x890]                             |     r2 = *(0x00015464);
    0x00014bd6 ldr.w r5, [sl, r3]                                |     r5 = *((sl + r3));
    0x00014bda add r2, pc                                        |     r2 += pc;
    0x00014bdc ldr r0, [r5]                                      |     r0 = *(r5);
    0x00014bde bl 0xcb84                                         |     r0 = fcn_0000cb84 (r0, r1, r2);
    0x00014be2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00014be4 beq.w 0x14fd8                                     |         goto label_56;
                                                                 |     }
    0x00014be8 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00014bea ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00014bec ldr r5, [r3, 8]                                   |     r5 = *((r3 + 8));
    0x00014bee cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00014bf0 beq.w 0x15156                                     |         goto label_57;
                                                                 |     }
    0x00014bf4 ldr r1, [sp, 0x64]                                |     r1 = var_64h_2;
    0x00014bf6 adds r0, r1, 1                                    |     r0 = r1 + 1;
                                                                 |     if (r0 == r1) {
    0x00014bf8 beq.w 0x14d98                                     |         goto label_58;
                                                                 |     }
    0x00014bfc ldr r1, [r5, 0xc]                                 |     r1 = *((r5 + 0xc));
    0x00014bfe ldr r3, [r1, 0x70]                                |     r3 = *((r1 + 0x70));
    0x00014c00 str r1, [sp, 0x30]                                |     var_30h_3 = r1;
    0x00014c02 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00014c04 cmp r2, 0                                         |     
    0x00014c06 str r2, [sp, 0x2c]                                |     var_2ch_2 = r2;
                                                                 |     if (r2 > 0) {
    0x00014c08 ble 0x14c6e                                       |         
    0x00014c0a ldr r0, [r5, 0x14]                                |         r0 = *((r5 + 0x14));
    0x00014c0c cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00014c0e beq 0x14c6e                                       |             goto label_23;
                                                                 |         }
    0x00014c10 ldr r3, [r3]                                      |         r3 = *(r3);
    0x00014c12 ldr r6, [r3, 8]                                   |         r6 = *((r3 + 8));
    0x00014c14 ldrd r7, r3, [r6, 4]                              |         __asm ("ldrd r7, r3, [r6, 4]");
    0x00014c18 mov r0, r7                                        |         r0 = r7;
    0x00014c1a str r3, [sp, 0x34]                                |         var_34h = r3;
    0x00014c1c blx 0x25dc                                        |         srand (r0);
    0x00014c1e ldcl p8, c6, [lr], {0x32}                         |         __asm ("ldcl p8, c6, [lr], {0x32}");
    0x00014c22 ldr r1, [sp, 0x30]                                |         r1 = var_30h_3;
    0x00014c24 ldr r3, [sp, 0x34]                                |         r3 = var_34h;
    0x00014c26 str r2, [sp, 0x30]                                |         var_30h_3 = r2;
    0x00014c28 ldr r2, [sp, 0x2c]                                |         r2 = var_2ch_2;
    0x00014c2a cmp r0, r3                                        |         
    0x00014c2c it ne                                             |         
                                                                 |         if (r0 == r3) {
    0x00014c2e movne r4, r3                                      |             r4 = r3;
                                                                 |         }
    0x00014c30 ldr r3, [r1]                                      |         r3 = *(r1);
    0x00014c32 movs r0, 3                                        |         r0 = 3;
    0x00014c34 mov.w r1, -1                                      |         r1 = -1;
    0x00014c38 str r2, [sp]                                      |         *(sp) = r2;
    0x00014c3a ldr.w r2, [pc, 0x82c]                             |         
    0x00014c3e add r2, pc                                        |         r2 = 0x2a0ac;
    0x00014c40 bl 0x8e8c                                         |         fcn_00008e8c (r0, r1);
    0x00014c44 mov r2, r4                                        |         r2 = r4;
    0x00014c46 ldr r3, [sp, 0x30]                                |         r3 = var_30h_3;
    0x00014c48 ldr r4, [r5, 0x14]                                |         r4 = *((r5 + 0x14));
    0x00014c4a mov r1, r7                                        |         r1 = r7;
    0x00014c4c ldr r0, [r5, 0x20]                                |         r0 = *((r5 + 0x20));
    0x00014c4e blx r4                                            |         r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00014c50 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00014c52 beq.w 0x150f8                                     |             goto label_59;
                                                                 |         }
    0x00014c56 ldr r0, [r5, 0xc]                                 |         r0 = *((r5 + 0xc));
    0x00014c58 ldr.w r3, [r0, 0x80]                              |         r3 = *((r0 + 0x80));
                                                                 |         if (r3 != 0) {
    0x00014c5c cbz r3, 0x14c66                                   |             
    0x00014c5e mov r1, r6                                        |             r1 = r6;
    0x00014c60 bl 0x9ef0                                         |             fcn_00009ef0 (r0, r1);
    0x00014c64 ldr r0, [r5, 0xc]                                 |             r0 = *((r5 + 0xc));
                                                                 |         }
    0x00014c66 ldr r0, [r0, 0x70]                                |         r0 = *((r0 + 0x70));
    0x00014c68 mov r1, r6                                        |         r1 = r6;
    0x00014c6a bl 0xccb4                                         |         fcn_0000ccb4 (r0, r1);
                                                                 |     }
                                                                 | label_23:
    0x00014c6e ldr r3, [sp, 0x14]                                |     r3 = var_14h;
                                                                 |     if (r3 != 0) {
    0x00014c70 cbz r3, 0x14c90                                   |         
    0x00014c72 ldrb r3, [r3]                                     |         r3 = *(r3);
    0x00014c74 and r3, r3, 0xf0                                  |         r3 &= 0xf0;
    0x00014c78 cmp r3, 0x20                                      |         
                                                                 |         if (r3 == 0x20) {
    0x00014c7a beq.w 0x14ff0                                     |             goto label_60;
                                                                 |         }
    0x00014c7e cmp r3, 0x90                                      |         
                                                                 |         if (r3 == 0x90) {
    0x00014c80 beq.w 0x15244                                     |             goto label_61;
                                                                 |         }
    0x00014c84 cmp r3, 0xb0                                      |         
                                                                 |         if (r3 == 0xb0) {
    0x00014c86 beq.w 0x152b8                                     |             goto label_62;
                                                                 |         }
    0x00014c8a cmp r3, 0xe0                                      |         
                                                                 |         if (r3 == 0xe0) {
    0x00014c8c beq.w 0x1510c                                     |             goto label_63;
                                                                 |         }
                                                                 |     }
                                                                 | label_15:
    0x00014c90 ldr.w r3, [sb]                                    |     r3 = *(sb);
                                                                 | label_22:
    0x00014c94 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00014c96 bne 0x14d38                                       |         goto label_55;
                                                                 |     }
    0x00014c98 mov.w r7, 0x3e8                                   |     r7 = 0x3e8;
    0x00014c9c b 0x14950                                         |     goto label_7;
                                                                 | label_43:
    0x00014c9e blx 0x2588                                        |     localtime (r0);
    0x00014ca2 ldr.w r2, [pc, 0x7c8]                             |     
    0x00014ca6 mov r3, r0                                        |     r3 = r0;
    0x00014ca8 movs r1, 0                                        |     r1 = 0;
    0x00014caa movs r0, 5                                        |     r0 = 5;
    0x00014cac add r2, pc                                        |     r2 = 0x2a11e;
    0x00014cae bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x00014cb2 b 0x149aa                                         |     goto label_8;
                                                                 | label_41:
    0x00014cb4 blx 0x2588                                        |     localtime (r0);
    0x00014cb8 ldr.w r2, [pc, 0x7b4]                             |     
    0x00014cbc mov r3, r0                                        |     r3 = r0;
    0x00014cbe movs r1, 0                                        |     r1 = 0;
    0x00014cc0 movs r0, 5                                        |     r0 = 5;
    0x00014cc2 add r2, pc                                        |     r2 = 0x2a136;
    0x00014cc4 bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x00014cc8 b 0x14966                                         |     goto label_9;
                                                                 | label_42:
    0x00014cca blx 0x2588                                        |     localtime (r0);
    0x00014cce ldr.w r2, [pc, 0x7a4]                             |     
    0x00014cd2 mov r3, r0                                        |     r3 = r0;
    0x00014cd4 movs r1, 0                                        |     r1 = 0;
    0x00014cd6 movs r0, 5                                        |     r0 = 5;
    0x00014cd8 add r2, pc                                        |     r2 = 0x2a152;
    0x00014cda bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x00014cde b 0x14998                                         |     goto label_10;
                                                                 | label_44:
    0x00014ce0 blx 0x2588                                        |     localtime (r0);
    0x00014ce4 ldr.w r2, [pc, 0x790]                             |     
    0x00014ce8 mov r3, r0                                        |     r3 = r0;
    0x00014cea movs r1, 0                                        |     r1 = 0;
    0x00014cec movs r0, 5                                        |     r0 = 5;
    0x00014cee add r2, pc                                        |     r2 = 0x2a16a;
    0x00014cf0 bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x00014cf4 b 0x149e8                                         |     goto label_11;
                                                                 | label_52:
    0x00014cf6 movs r3, 0                                        |     r3 = 0;
    0x00014cf8 ldm.w r8, {r0, r1}                                |     r0 = *(r8);
                                                                 |     r1 = *((r8 + 4));
    0x00014cfc mov r2, r3                                        |     r2 = r3;
    0x00014cfe bl 0x3f14                                         |     fcn_00003f14 (r0, r1, r2, r3);
    0x00014d02 b 0x14b7a                                         |     goto label_12;
                                                                 | label_53:
    0x00014d04 blx 0x2588                                        |     localtime (r0);
    0x00014d08 ldr.w r2, [pc, 0x770]                             |     
    0x00014d0c mov r3, r0                                        |     r3 = r0;
    0x00014d0e movs r1, 0                                        |     r1 = 0;
    0x00014d10 movs r0, 5                                        |     r0 = 5;
    0x00014d12 add r2, pc                                        |     r2 = 0x2a192;
    0x00014d14 bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x00014d18 b 0x14b96                                         |     goto label_13;
                                                                 | label_54:
    0x00014d1a blx 0x2588                                        |     localtime (r0);
    0x00014d1e ldr.w r2, [pc, 0x760]                             |     
    0x00014d22 mov r3, r0                                        |     r3 = r0;
    0x00014d24 movs r1, 0                                        |     r1 = 0;
    0x00014d26 movs r0, 5                                        |     r0 = 5;
    0x00014d28 add r2, pc                                        |     r2 = 0x2a1ae;
    0x00014d2a bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x00014d2e ldr.w r4, [sb]                                    |     r4 = *(sb);
    0x00014d32 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00014d34 beq.w 0x14bc4                                     |         goto label_14;
                                                                 |     }
                                                                 | label_55:
    0x00014d38 ldrd r6, r5, [sp, 0x38]                           |     __asm ("ldrd r6, r5, [var_38h]");
                                                                 | label_40:
    0x00014d3c movs r4, 0                                        |     r4 = 0;
    0x00014d3e ldr.w r0, [fp]                                    |     r0 = *(fp);
    0x00014d42 str r4, [r6]                                      |     *(r6) = r4;
    0x00014d44 str r4, [r5]                                      |     *(r5) = r4;
    0x00014d46 blx 0x270c                                        |     r0 = fcn_0000270c ();
    0x00014d4a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00014d4c bne.w 0x15172                                     |         goto label_64;
                                                                 |     }
    0x00014d4e strh r1, [r2, 0x10]                               |     *((r2 + 0x10)) = r1;
    0x00014d50 ldr.w r3, [pc, 0x730]                             |     
    0x00014d54 ldr.w r3, [sl, r3]                                |     r3 = *((sl + r3));
    0x00014d56 adds r0, 3                                        |     r0 += 3;
    0x00014d58 ldr r3, [r3]                                      |     r3 = *(0x15484);
    0x00014d5a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00014d5c bne.w 0x15192                                     |         goto label_65;
                                                                 |     }
                                                                 | label_24:
    0x00014d60 ldr.w r0, [pc, 0x724]                             |     
    0x00014d64 movs r3, 3                                        |     r3 = 3;
    0x00014d66 movs r2, 0                                        |     r2 = 0;
    0x00014d68 mov.w r1, 0x910                                   |     r1 = 0x910;
    0x00014d6c add r0, pc                                        |     
    0x00014d6e add.w r0, r0, 0x258                               |     r0 = 0x2a450;
    0x00014d72 bl 0xf388                                         |     fcn_0000f388 (r0, r1, r2, r3);
    0x00014d76 ldr.w r2, [pc, 0x714]                             |     
    0x00014d7a ldr.w r3, [pc, 0x694]                             |     r3 = *(0x15412);
    0x00014d7e add r2, pc                                        |     r2 = 0x2a210;
    0x00014d80 ldr r3, [r2, r3]                                  |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x00014d82 ldr r2, [r3]                                      |     r2 = imp.__aeabi_unwind_cpp_pr0;
    0x00014d84 ldr r3, [sp, 0xdc]                                |     r3 = var_dch;
    0x00014d86 eors r2, r3                                       |     r2 ^= r3;
    0x00014d88 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00014d8c bne.w 0x15b2a                                     |         goto label_66;
                                                                 |     }
    0x00014d90 movs r0, 0                                        |     r0 = 0;
    0x00014d92 add sp, 0xe4                                      |     
    0x00014d94 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_58:
    0x00014d98 ldr.w r2, [pc, 0x6f4]                             |     
    0x00014d9c movs r0, 3                                        |     r0 = 3;
    0x00014d9e ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x00014da0 add r2, pc                                        |     r2 = 0x2a234;
    0x00014da2 bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x00014da6 ldr.w r2, [pc, 0x6ec]                             |     
    0x00014daa mov r0, r5                                        |     r0 = r5;
    0x00014dac ldr r1, [sp, 0x64]                                |     r1 = var_64h_2;
    0x00014dae add r2, pc                                        |     r2 = 0x2a248;
    0x00014db0 bl 0x14664                                        |     fcn_00014664 (r0, r1, r2, r3, r4);
    0x00014db4 b 0x14c90                                         |     goto label_15;
                                                                 | label_45:
    0x00014db6 ldr.w r0, [r1, 0x98]                              |     r0 = *((r1 + 0x98));
    0x00014dba adds r1, 0x1c                                     |     r1 += 0x1c;
    0x00014dbc ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00014dbe bl 0x5000                                         |     fcn_00005000 (r0, r1, r2, r3, r4);
    0x00014dc2 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00014dc4 str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00014dc6 ldrh r3, [r3, 0x10]                               |     r3 = *((r3 + 0x10));
    0x00014dc8 and r3, r3, 0x3c0                                 |     r3 &= 0x3c0;
    0x00014dcc cmp.w r3, 0x100                                   |     
                                                                 |     if (r3 == 0x100) {
    0x00014dd0 beq 0x14e88                                       |         goto label_67;
                                                                 |     }
                                                                 | label_19:
    0x00014dd2 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00014dd4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00014dd6 beq.w 0x14b1e                                     |         goto label_16;
                                                                 |     }
    0x00014dda ldrb r3, [r3]                                     |     r3 = *(r3);
    0x00014ddc and r6, r3, 0xf0                                  |     r6 = r3 & 0xf0;
    0x00014de0 cmp r6, 0x30                                      |     
                                                                 |     if (r6 == 0x30) {
    0x00014de2 beq.w 0x15238                                     |         goto label_68;
                                                                 |     }
    0x00014de6 cmp r6, 0x60                                      |     
                                                                 |     if (r6 == 0x60) {
    0x00014de8 beq 0x14e50                                       |         goto label_69;
                                                                 |     }
                                                                 |     if (r6 < 0x60) {
    0x00014dea bls 0x14e02                                       |         goto label_70;
                                                                 |     }
    0x00014dec cmp r6, 0x70                                      |     
                                                                 |     if (r6 == 0x70) {
    0x00014dee beq 0x14edc                                       |         goto label_71;
                                                                 |     }
    0x00014df0 cmp r6, 0xd0                                      |     
                                                                 |     if (r6 != 0xd0) {
    0x00014df2 bne.w 0x14b22                                     |         goto label_17;
                                                                 |     }
    0x00014df6 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00014df8 ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x00014dfa bl 0xb050                                         |     fcn_0000b050 (r0);
    0x00014dfe str r0, [sp, 0x64]                                |     var_64h_2 = r0;
    0x00014e00 b 0x14b1e                                         |     goto label_16;
                                                                 | label_70:
    0x00014e02 and r2, r3, 0xe0                                  |     r2 = r3 & 0xe0;
    0x00014e06 cmp r2, 0x40                                      |     
                                                                 |     if (r2 != 0x40) {
    0x00014e08 bne.w 0x14b22                                     |         goto label_17;
                                                                 |     }
    0x00014e0c lsrs r3, r3, 4                                    |     r3 >>= 4;
    0x00014e0e ldr.w lr, [sp, 0x14]                              |     lr = var_14h;
    0x00014e12 str r3, [sp, 0x2c]                                |     var_2ch_2 = r3;
    0x00014e14 movs r3, 0                                        |     r3 = 0;
    0x00014e16 strd r3, r3, [r8]                                 |     __asm ("strd r3, r3, [r8]");
    0x00014e1a strd r3, r3, [r8, 8]                              |     __asm ("strd r3, r3, [r8, 8]");
    0x00014e1e str r3, [sp, 0x70]                                |     var_70h = r3;
    0x00014e20 ldr.w r3, [pc, 0x674]                             |     r3 = *(0x00015498);
    0x00014e22 adds r6, 0x74                                     |     r6 += 0x74;
    0x00014e24 add r3, pc                                        |     r3 += pc;
    0x00014e26 str r3, [sp, 0x30]                                |     var_30h_3 = r3;
    0x00014e28 mov ip, r3                                        |     
    0x00014e2a ldm.w lr!, {r0, r1, r2, r3}                       |     r0 = *(lr!);
                                                                 |     r1 = *((lr! + 4));
                                                                 |     r2 = *((lr! + 8));
                                                                 |     r3 = *((lr! + 12));
    0x00014e2e stm.w ip!, {r0, r1, r2, r3}                       |     *(ip!) = r0;
                                                                 |     *((ip! + 4)) = r1;
                                                                 |     *((ip! + 8)) = r2;
                                                                 |     *((ip! + 12)) = r3;
    0x00014e32 ldr r3, [sp, 0x30]                                |     r3 = var_30h_3;
    0x00014e34 str r1, [sp, 0x34]                                |     var_34h = r1;
    0x00014e36 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00014e38 str r2, [sp, 0x30]                                |     var_30h_3 = r2;
    0x00014e3a ldm.w lr, {r0, r1, r2, r3}                        |     r0 = *(lr);
                                                                 |     r1 = *((lr + 4));
                                                                 |     r2 = *((lr + 8));
                                                                 |     r3 = *((lr + 12));
    0x00014e3e stm.w ip, {r0, r1, r2, r3}                        |     *(ip) = r0;
                                                                 |     *((ip + 4)) = r1;
                                                                 |     *((ip + 8)) = r2;
                                                                 |     *((ip + 12)) = r3;
    0x00014e42 ldr r2, [sp, 0x30]                                |     r2 = var_30h_3;
    0x00014e44 cmp r2, 4                                         |     
                                                                 |     if (r2 > 4) {
    0x00014e46 bgt 0x14f24                                       |         goto label_72;
                                                                 |     }
    0x00014e48 movs r3, 0                                        |     r3 = 0;
    0x00014e4a str r3, [sp, 0x40]                                |     var_40h = r3;
    0x00014e4c str r3, [sp, 0x30]                                |     var_30h_3 = r3;
    0x00014e4e b 0x14f5c                                         |     goto label_73;
                                                                 | label_69:
    0x00014e50 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00014e52 ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x00014e54 bl 0x384c                                         |     fcn_0000384c (r0, r1);
    0x00014e58 str r0, [sp, 0x64]                                |     var_64h_2 = r0;
    0x00014e5a b 0x14b1e                                         |     goto label_16;
                                                                 | label_47:
    0x00014e5c ldr.w r0, [pc, 0x63c]                             |     
    0x00014e60 movs r2, 7                                        |     r2 = 7;
    0x00014e62 mov r1, r6                                        |     r1 = r6;
    0x00014e64 add r0, pc                                        |     r0 = 0x2a304;
    0x00014e66 blx 0x2814                                        |     r0 = fcn_00002814 ();
    0x00014e6a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00014e6c beq.w 0x152ea                                     |         goto label_74;
                                                                 |     }
    0x00014e70 ldr.w r0, [pc, 0x62c]                             |     
    0x00014e74 movs r2, 5                                        |     r2 = 5;
    0x00014e76 mov r1, r6                                        |     r1 = r6;
    0x00014e78 add r0, pc                                        |     r0 = 0x2a31c;
    0x00014e7a blx 0x2814                                        |     r0 = fcn_00002814 ();
    0x00014e7e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00014e80 bne.w 0x14aa0                                     |         goto label_18;
                                                                 |     }
    0x00014e84 adds r6, 5                                        |     r6 += 5;
    0x00014e86 b 0x14aa0                                         |     goto label_18;
                                                                 | label_67:
    0x00014e88 ldr r3, [sp, 0x64]                                |     r3 = var_64h_2;
    0x00014e8a adds r3, 1                                        |     r3++;
                                                                 |     if (r3 != 1) {
    0x00014e8c bne 0x14dd2                                       |         goto label_19;
                                                                 |     }
    0x00014e8e b 0x14e9a                                         |     goto label_75;
                                                                 | label_51:
    0x00014e90 adds r2, 1                                        |     r2++;
                                                                 |     if (r2 != 1) {
    0x00014e92 bne.w 0x14b1e                                     |         goto label_16;
                                                                 |     }
    0x00014e96 movs r3, 0                                        |     r3 = 0;
    0x00014e98 str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 | label_75:
    0x00014e9a ldr.w r2, [pc, 0x608]                             |     
    0x00014e9e mov.w r1, -1                                      |     r1 = -1;
    0x00014ea2 movs r0, 3                                        |     r0 = 3;
    0x00014ea4 add r2, pc                                        |     r2 = 0x2a34e;
    0x00014ea6 bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x00014eaa ldr.w r2, [pc, 0x5fc]                             |     
    0x00014eae mov.w r1, -1                                      |     r1 = -1;
    0x00014eb2 mov r0, r4                                        |     r0 = r4;
    0x00014eb4 add r2, pc                                        |     r2 = 0x2a362;
    0x00014eb6 bl 0x14664                                        |     fcn_00014664 (r0, r1, r2, r3, r4);
    0x00014eba b 0x14dd2                                         |     goto label_19;
                                                                 | label_46:
    0x00014ebc ldr.w r2, [pc, 0x5ec]                             |     
    0x00014ec0 mov r1, r3                                        |     r1 = r3;
    0x00014ec2 movs r0, 5                                        |     r0 = 5;
    0x00014ec4 add r2, pc                                        |     r2 = 0x2a374;
    0x00014ec6 bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x00014eca ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00014ecc str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00014ece ldr.w r3, [r3, 0x98]                              |     r3 = *((r3 + 0x98));
    0x00014ed2 cmp r3, 0                                         |     
    0x00014ed4 it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x00014ed6 moveq r3, 4                                       |         r3 = 4;
                                                                 |     }
    0x00014ed8 str r3, [r4, 0x78]                                |     *((r4 + 0x78)) = r3;
    0x00014eda b 0x14a78                                         |     goto label_20;
                                                                 | label_71:
    0x00014edc lsrs r3, r3, 4                                    |     r3 >>= 4;
    0x00014ede ldr.w ip, [sp, 0x14]                              |     ip = var_14h;
    0x00014ee2 mov.w lr, 0                                       |     lr = 0;
    0x00014ee6 str r3, [sp, 0x2c]                                |     var_2ch_2 = r3;
    0x00014ee8 ldr.w r3, [pc, 0x5c4]                             |     r3 = *(0x000154b0);
    0x00014eea adds r5, 0xc4                                     |     r5 += 0xc4;
    0x00014eec strd lr, lr, [r8]                                 |     __asm ("strd lr, lr, [r8]");
    0x00014ef0 strd lr, lr, [r8, 8]                              |     __asm ("strd lr, lr, [r8, 8]");
    0x00014ef4 add r3, pc                                        |     r3 += pc;
    0x00014ef6 str.w lr, [sp, 0x70]                              |     __asm ("str.w lr, [var_70h]");
    0x00014efa str r3, [sp, 0x30]                                |     var_30h_3 = r3;
    0x00014efc mov r6, r3                                        |     r6 = r3;
    0x00014efe ldm.w ip!, {r0, r1, r2, r3}                       |     r0 = *(ip!);
                                                                 |     r1 = *((ip! + 4));
                                                                 |     r2 = *((ip! + 8));
                                                                 |     r3 = *((ip! + 12));
    0x00014f02 stm r6!, {r0, r1, r2, r3}                         |     *(r6!) = r0;
                                                                 |     *((r6! + 4)) = r1;
                                                                 |     *((r6! + 8)) = r2;
                                                                 |     *((r6! + 12)) = r3;
    0x00014f04 ldr r3, [sp, 0x30]                                |     r3 = var_30h_3;
    0x00014f06 str r1, [sp, 0x34]                                |     var_34h = r1;
    0x00014f08 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00014f0a str r2, [sp, 0x30]                                |     var_30h_3 = r2;
    0x00014f0c ldm.w ip, {r0, r1, r2, r3}                        |     r0 = *(ip);
                                                                 |     r1 = *((ip + 4));
                                                                 |     r2 = *((ip + 8));
                                                                 |     r3 = *((ip + 12));
    0x00014f10 stm.w r6, {r0, r1, r2, r3}                        |     *(r6) = r0;
                                                                 |     *((r6 + 4)) = r1;
                                                                 |     *((r6 + 8)) = r2;
                                                                 |     *((r6 + 12)) = r3;
    0x00014f14 ldr r2, [sp, 0x30]                                |     r2 = var_30h_3;
    0x00014f16 cmp r2, 4                                         |     
    0x00014f18 ittt le                                           |     
                                                                 |     if (r2 > 4) {
    0x00014f1a movle r3, lr                                      |         r3 = lr;
                                                                 |     }
                                                                 |     if (r2 > 4) {
    0x00014f1c strle r3, [sp, 0x40]                              |         var_40h = r3;
                                                                 |     }
                                                                 |     if (r2 > 4) {
    0x00014f1e strle r3, [sp, 0x30]                              |         var_30h_3 = r3;
                                                                 |     }
                                                                 |     if (r2 <= 4) {
    0x00014f20 ble.w 0x1537c                                     |         goto label_76;
                                                                 |     }
                                                                 | label_72:
    0x00014f24 ldr.w r6, [pc, 0x58c]                             |     r6 = *(0x000154b4);
    0x00014f28 add r0, sp, 0x50                                  |     r0 += var_50h;
    0x00014f2a str r0, [sp, 0x44]                                |     var_44h = r0;
    0x00014f2c add r6, pc                                        |     r6 += pc;
    0x00014f2e add.w r1, r6, 0x10                                |     r1 = r6 + 0x10;
    0x00014f32 ldrb r5, [r6, 8]                                  |     r5 = *((r6 + 8));
    0x00014f34 blx 0x2668                                        |     fcn_00002668 ();
    0x00014f38 ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x00014f3a ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x00014f3c cmp r5, 0x7f                                      |     
    0x00014f3e str r3, [sp, 0x40]                                |     var_40h = r3;
    0x00014f40 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00014f42 ldrb r6, [r3]                                     |     r6 = *(r3);
    0x00014f44 ite le                                            |     
                                                                 |     if (r5 > 0x7f) {
    0x00014f46 movle r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r5 <= 0x7f) {
    0x00014f48 movgt r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00014f4a str r3, [sp, 0x30]                                |     var_30h_3 = r3;
    0x00014f4c ldm r0, {r0, r1, r2, r3}                          |     r0 = *(r0);
                                                                 |     r1 = *((r0 + 4));
                                                                 |     r2 = *((r0 + 8));
                                                                 |     r3 = *((r0 + 12));
    0x00014f4e and r6, r6, 0xf0                                  |     r6 &= 0xf0;
    0x00014f52 cmp r6, 0x70                                      |     
    0x00014f54 stm.w r8, {r0, r1, r2, r3}                        |     *(r8) = r0;
                                                                 |     *((r8 + 4)) = r1;
                                                                 |     *((r8 + 8)) = r2;
                                                                 |     *((r8 + 12)) = r3;
                                                                 |     if (r6 == 0x70) {
    0x00014f58 beq.w 0x1537c                                     |         goto label_76;
                                                                 |     }
                                                                 | label_73:
    0x00014f5c cmp r6, 0x50                                      |     
                                                                 |     if (r6 == 0x50) {
    0x00014f5e beq.w 0x15616                                     |         goto label_77;
                                                                 |     }
    0x00014f62 cmp r6, 0x40                                      |     
                                                                 |     if (r6 == 0x40) {
    0x00014f64 beq.w 0x156f2                                     |         goto label_78;
                                                                 |     }
                                                                 | label_29:
    0x00014f68 ldrd r2, r3, [sp, 0x2c]                           |     __asm ("ldrd r2, r3, [var_30h_3]");
    0x00014f6c cmp r2, 5                                         |     
    0x00014f6e it ne                                             |     
                                                                 |     if (r2 == 5) {
    0x00014f70 orrne r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x00014f72 lsls r1, r0, 0xc                                  |     r1 = r0 << 0xc;
                                                                 |     if (r3 == 0) {
    0x00014f74 cbz r3, 0x14fca                                   |         goto label_79;
                                                                 |     }
    0x00014f76 ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x00014f78 movs r2, 0                                        |     r2 = 0;
    0x00014f7a str r2, [sp, 0x74]                                |     var_74h = r2;
                                                                 |     if (r3 != 0) {
    0x00014f7c cbz r3, 0x14f9e                                   |         
    0x00014f7e ldr r3, [r4, 0xc]                                 |         r3 = *((r4 + 0xc));
    0x00014f80 mov.w r1, -1                                      |         r1 = -1;
    0x00014f84 ldr r6, [sp, 0x34]                                |         r6 = var_34h;
    0x00014f86 movs r0, 3                                        |         r0 = 3;
    0x00014f88 ldr.w r2, [pc, 0x52c]                             |         
    0x00014f8c ldr r3, [r3]                                      |         r3 = *(r3);
    0x00014f8e str r6, [sp]                                      |         *(sp) = r6;
    0x00014f90 add r2, pc                                        |         r2 = 0x2a44c;
    0x00014f92 bl 0x8e8c                                         |         fcn_00008e8c (r0, r1);
    0x00014f96 ldr r3, [r4, 0x18]                                |         r3 = *((r4 + 0x18));
    0x00014f98 mov r1, r6                                        |         r1 = r6;
    0x00014f9a ldr r0, [r4, 0x24]                                |         r0 = *((r4 + 0x24));
    0x00014f9c blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
                                                                 |     }
    0x00014f9e add r3, sp, 0x74                                  |     r3 += var_74h;
    0x00014fa0 str r5, [sp, 0x2c]                                |     var_2ch_2 = r5;
    0x00014fa2 ldr r6, [sp, 0x34]                                |     r6 = var_34h;
    0x00014fa4 mov r5, r3                                        |     r5 = r3;
    0x00014fa6 b 0x14fb4                                         |     goto label_80;
                                                                 | label_21:
    0x00014fa8 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x00014faa ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00014fac ldr r2, [r3, 0x14]                                |     r2 = *((r3 + 0x14));
    0x00014fae cmp r2, r6                                        |     
                                                                 |     if (r2 == r6) {
    0x00014fb0 beq.w 0x1538a                                     |         void (*0x1538a)() ();
                                                                 |     }
                                                                 | label_80:
    0x00014fb4 ldr.w r0, [r4, 0xe4]                              |     r0 = *((r4 + 0xe4));
    0x00014fb8 mov r1, r5                                        |     r1 = r5;
    0x00014fba bl 0xceb0                                         |     r0 = fcn_0000ceb0 (r0, r1);
    0x00014fbe cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00014fc0 bne 0x14fa8                                       |         goto label_21;
                                                                 |     }
    0x00014fc2 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00014fc4 cmp r3, 4                                         |     
                                                                 |     if (r3 > 4) {
    0x00014fc6 bgt.w 0x152f0                                     |         void (*0x152f0)() ();
                                                                 |     }
                                                                 | label_79:
    0x00014fca ldr r0, [sp, 0x70]                                |     r0 = var_70h;
    0x00014fcc cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00014fce beq.w 0x14b1e                                     |         goto label_16;
                                                                 |     }
    0x00014fd2 bl 0x3120                                         |     fcn_00003120 (r0);
    0x00014fd6 b 0x14b1e                                         |     goto label_16;
                                                                 | label_56:
    0x00014fd8 ldr.w r2, [pc, 0x4e0]                             |     
    0x00014fdc mov.w r1, -1                                      |     r1 = -1;
    0x00014fe0 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x00014fe2 movs r0, 3                                        |     r0 = 3;
    0x00014fe4 add r2, pc                                        |     r2 = 0x2a4a4;
    0x00014fe6 bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x00014fea ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00014fee b 0x14c94                                         |     goto label_22;
                                                                 | label_60:
    0x00014ff0 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00014ff2 movs r2, 3                                        |     r2 = 3;
    0x00014ff4 ldr.w r0, [pc, 0x4c8]                             |     
    0x00014ff8 mov.w r4, -1                                      |     r4 = -1;
    0x00014ffc movw r1, 0x7a2                                    |     r1 = 0x7a2;
    0x00015000 ldrb r3, [r3, 4]                                  |     r3 = *((r3 + 4));
    0x00015002 add r0, pc                                        |     
    0x00015004 str r4, [sp, 0x70]                                |     var_70h = r4;
    0x00015006 add.w r0, r0, 0x2a8                               |     r0 = 0x2a76e;
    0x0001500a and r7, r3, 1                                     |     r7 = r3 & 1;
    0x0001500e bl 0xf2e8                                         |     fcn_0000f2e8 (r0, r1, r2);
    0x00015012 ldr r2, [r5, 0xc]                                 |     r2 = *((r5 + 0xc));
    0x00015014 ldrh r3, [r2, 0x10]                               |     r3 = *((r2 + 0x10));
    0x00015016 and r3, r3, 0x3c0                                 |     r3 &= 0x3c0;
    0x0001501a cmp.w r3, 0x100                                   |     
                                                                 |     if (r3 == 0x100) {
    0x0001501e beq.w 0x1564c                                     |         goto label_81;
                                                                 |     }
                                                                 | label_30:
    0x00015022 ldr.w r0, [pc, 0x4a0]                             |     
    0x00015026 movw r1, 0x7c9                                    |     r1 = 0x7c9;
    0x0001502a movs r3, 3                                        |     r3 = 3;
    0x0001502c add r2, sp, 0x70                                  |     r2 += var_70h;
    0x0001502e add r0, pc                                        |     
    0x00015030 add.w r0, r0, 0x2a8                               |     r0 = 0x2a7a0;
    0x00015034 bl 0xf388                                         |     fcn_0000f388 (r0, r1, r2, r3);
    0x00015038 ldr r1, [sp, 0x70]                                |     r1 = var_70h;
    0x0001503a str r1, [sp, 0x64]                                |     var_64h_2 = r1;
    0x0001503c cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0001503e bne.w 0x15370                                     |         goto label_82;
                                                                 |     }
    0x00015042 ldr.w r3, [r5, 0x108]                             |     r3 = *((r5 + 0x108));
    0x00015046 cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x00015048 ble 0x15068                                       |         
    0x0001504a ldr r2, [r5, 0x74]                                |         r2 = *((r5 + 0x74));
    0x0001504c cmp r3, r2                                        |         
                                                                 |         if (r3 <= r2) {
    0x0001504e ble 0x15068                                       |             goto label_83;
                                                                 |         }
                                                                 |     }
                                                                 | label_83:
    0x00015068 ldr r1, [r5, 0x44]                                |     r1 = *((r5 + 0x44));
    0x0001506a cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0001506c beq.w 0x152f8                                     |         void (*0x152f8)() ();
                                                                 |     }
                                                                 | label_28:
    0x000150f0 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x000150f2 bl 0x6164                                         |     fcn_00006164 (r0);
    0x000150f6 b 0x14c90                                         |     goto label_15;
                                                                 | label_59:
    0x000150f8 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x000150fa mov.w r1, -1                                      |     r1 = -1;
    0x000150fe ldr r2, [pc, 0x3d8]                               |     
    0x00015100 movs r0, 3                                        |     r0 = 3;
    0x00015102 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00015104 add r2, pc                                        |     r2 = 0x2a5e2;
    0x00015106 bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x0001510a b 0x14c6e                                         |     goto label_23;
                                                                 | label_63:
    0x0001510c ldr r3, [r5, 0x30]                                |     r3 = *((r5 + 0x30));
    0x0001510e ldr r6, [sp, 0x14]                                |     r6 = var_14h;
    0x00015110 ldrb r4, [r6, 8]                                  |     r4 = *((r6 + 8));
                                                                 |     if (r3 != 0) {
    0x00015112 cbz r3, 0x15132                                   |         
    0x00015114 ldr r3, [r5, 0xc]                                 |         r3 = *((r5 + 0xc));
    0x00015116 mov.w r1, -1                                      |         r1 = -1;
    0x0001511a ldr r2, [pc, 0x3c0]                               |         
    0x0001511c movs r0, 3                                        |         r0 = 3;
    0x0001511e ldr r3, [r3]                                      |         r3 = *(r3);
    0x00015120 add r2, pc                                        |         r2 = 0x2a602;
    0x00015122 bl 0x8e8c                                         |         fcn_00008e8c (r0, r1);
    0x00015126 ldr r3, [r5, 0x30]                                |         r3 = *((r5 + 0x30));
    0x00015128 add.w r1, r6, 0x10                                |         r1 = r6 + 0x10;
    0x0001512c ldrb r2, [r6, 8]                                  |         r2 = *((r6 + 8));
    0x0001512e ldr r0, [r5, 0x34]                                |         r0 = *((r5 + 0x34));
    0x00015130 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                 |     }
    0x00015132 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x00015134 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00015136 ldr r1, [r3, 0x1c]                                |     r1 = *((r3 + 0x1c));
    0x00015138 bl 0xb36c                                         |     fcn_0000b36c (r0, r1);
    0x0001513c ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x0001513e mov r1, r4                                        |     r1 = r4;
    0x00015140 ldr r2, [pc, 0x39c]                               |     
    0x00015142 str r0, [sp, 0x64]                                |     var_64h_2 = r0;
    0x00015144 mov r0, r5                                        |     r0 = r5;
    0x00015146 ldrb r4, [r3, 0x10]                               |     r4 = *((r3 + 0x10));
    0x00015148 add r2, pc                                        |     r2 = 0x2a62c;
    0x0001514a bfc r4, 2, 1                                      |     value_1 = BIT_MASK (1, );
                                                                 |     value_1 = ~value_1;
                                                                 |     r4 &= value_1;
    0x0001514e strb r4, [r3, 0x10]                               |     *((r3 + 0x10)) = r4;
    0x00015150 bl 0x14664                                        |     fcn_00014664 (r0, r1, r2, r3, r4);
    0x00015154 b 0x14c90                                         |     goto label_15;
                                                                 | label_57:
    0x00015156 ldr r2, [pc, 0x38c]                               |     
    0x00015158 mov.w r1, -1                                      |     r1 = -1;
    0x0001515c ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x0001515e movs r0, 5                                        |     r0 = 5;
    0x00015160 add r2, pc                                        |     r2 = 0x2a64a;
    0x00015162 bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x00015166 ldr r0, [sp, 0x68]                                |     r0 = var_68h;
    0x00015168 bl 0x7d4c                                         |     fcn_00007d4c (r0);
    0x0001516c ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00015170 b 0x14c94                                         |     goto label_22;
                                                                 | label_64:
    0x00015172 blx 0x2588                                        |     localtime (r0);
    0x00015176 ldr r2, [pc, 0x370]                               |     
    0x00015178 mov r3, r0                                        |     r3 = r0;
    0x0001517a mov r1, r4                                        |     r1 = r4;
    0x0001517c movs r0, 5                                        |     r0 = 5;
    0x0001517e add r2, pc                                        |     r2 = 0x2a66c;
    0x00015180 bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x00015184 ldr r3, [pc, 0x2fc]                               |     
    0x00015186 ldr.w r3, [sl, r3]                                |     r3 = *((sl + r3));
    0x0001518a ldr r3, [r3]                                      |     r3 = *(0x15484);
    0x0001518c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001518e beq.w 0x14d60                                     |         goto label_24;
                                                                 |     }
                                                                 | label_65:
    0x00015192 ldr r3, [pc, 0x358]                               |     r3 = *(0x154ee);
    0x00015194 ldr.w r3, [sl, r3]                                |     r3 = *((sl + r3));
    0x00015198 ldr r0, [r3]                                      |     r0 = *(0x154ee);
    0x0001519a bl 0xaab4                                         |     fcn_0000aab4 (r0);
    0x0001519e b 0x14d60                                         |     goto label_24;
                                                                 | label_39:
    0x000151a0 blx 0x2588                                        |     localtime (r0);
    0x000151a4 ldr r2, [pc, 0x348]                               |     
    0x000151a6 mov r3, r0                                        |     r3 = r0;
    0x000151a8 movs r1, 0                                        |     r1 = 0;
    0x000151aa movs r0, 5                                        |     r0 = 5;
    0x000151ac add r2, pc                                        |     r2 = 0x2a6a0;
    0x000151ae bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x000151b2 b.w 0x148e4                                       |     goto label_25;
                                                                 | label_48:
    0x000151b6 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000151b8 movs r2, 4                                        |     r2 = 4;
    0x000151ba movs r1, 1                                        |     r1 = 1;
    0x000151bc str r2, [sp, 0x78]                                |     var_78h = r2;
    0x000151be ldr r0, [r3, 0x1c]                                |     r0 = *((r3 + 0x1c));
    0x000151c0 add r3, sp, 0x74                                  |     r3 += var_74h;
    0x000151c2 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x000151c6 blx 0x24f8                                        |     r0 = sem_post ();
    0x000151ca mov r1, r0                                        |     r1 = r0;
    0x000151cc str r0, [sp, 0x70]                                |     var_70h = r0;
                                                                 |     if (r0 == 0) {
    0x000151ce cbnz r0, 0x1522e                                  |         
    0x000151d0 ldr r1, [sp, 0x74]                                |         r1 = var_74h;
    0x000151d2 str r1, [sp, 0x70]                                |         var_70h = r1;
                                                                 |         if (r1 != 0) {
    0x000151d4 cbnz r1, 0x1522e                                  |             goto label_27;
                                                                 |         }
    0x000151d6 ldr r3, [r4, 0xc]                                 |         r3 = *((r4 + 0xc));
    0x000151d8 str r1, [sp, 0x14]                                |         var_14h = r1;
    0x000151da ldr r0, [r3, 0x1c]                                |         r0 = *((r3 + 0x1c));
    0x000151dc bl 0x7984                                         |         fcn_00007984 (r0);
    0x000151e0 ldr r0, [r4, 0xc]                                 |         r0 = *((r4 + 0xc));
    0x000151e2 ldr r3, [r0, 0x38]                                |         r3 = *((r0 + 0x38));
                                                                 |         if (r3 != 0) {
    0x000151e4 cbz r3, 0x15206                                   |             
    0x000151e6 ldrh r3, [r0, 0x10]                               |             r3 = *((r0 + 0x10));
    0x000151e8 movs r2, 5                                        |             r2 = 5;
    0x000151ea ldr r1, [sp, 0x14]                                |             r1 = var_14h;
    0x000151ec adds r0, 0x1c                                     |             r0 += 0x1c;
    0x000151ee bfi r3, r2, 6, 4                                  |             value_2 = BIT_MASK (6, 4);
                                                                 |             value_3 = r2 & value_2;
                                                                 |             value_2 = ~value_2;
                                                                 |             r3 &= value_2;
                                                                 |             r3 |= value_3;
    0x000151f2 mov r2, r6                                        |             r2 = r6;
    0x000151f4 strh r3, [r0, -0xc]                               |             *((r0 - 0xc)) = r3;
    0x000151f8 bl 0xf060                                         |             fcn_0000f060 (r0, r1);
    0x000151fc str r0, [sp, 0x70]                                |             var_70h = r0;
    0x000151fe adds r0, 1                                        |             r0++;
                                                                 |             if (r0 == 1) {
    0x00015200 beq.w 0x15754                                     |                 goto label_84;
                                                                 |             }
    0x00015204 ldr r0, [r4, 0xc]                                 |             r0 = *((r4 + 0xc));
                                                                 |         }
    0x00015206 ldr r3, [r4, 8]                                   |         r3 = *((r4 + 8));
    0x00015208 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0001520a beq.w 0x15736                                     |             goto label_85;
                                                                 |         }
    0x0001520e ldrh r3, [r0, 0x10]                               |         r3 = *((r0 + 0x10));
    0x00015210 movs r1, 3                                        |         r1 = 3;
    0x00015212 mov r2, r6                                        |         r2 = r6;
    0x00015214 adds r0, 0x1c                                     |         r0 += 0x1c;
    0x00015216 bfi r3, r1, 6, 4                                  |         value_4 = BIT_MASK (6, 4);
                                                                 |         value_5 = r1 & value_4;
                                                                 |         value_4 = ~value_4;
                                                                 |         r3 &= value_4;
                                                                 |         r3 |= value_5;
    0x0001521a movs r1, 0                                        |         r1 = 0;
    0x0001521c strh r3, [r0, -0xc]                               |         *((r0 - 0xc)) = r3;
    0x00015220 bl 0xe114                                         |         r0 = fcn_0000e114 (r0, r1, r2);
    0x00015224 adds r2, r0, 1                                    |         r2 = r0 + 1;
    0x00015226 mov r1, r0                                        |         r1 = r0;
    0x00015228 str r0, [sp, 0x70]                                |         var_70h = r0;
                                                                 |         if (r2 == r0) {
    0x0001522a beq.w 0x15754                                     |             goto label_84;
                                                                 |         }
                                                                 |     }
                                                                 | label_27:
    0x0001522e adds.w r3, r1, 0x16                               |     r3 = r1 + 0x16;
    0x00015232 it ne                                             |     
                                                                 |     if (r3 == r1) {
    0x00015234 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00015236 b 0x14abe                                         |     goto label_26;
                                                                 | label_68:
    0x00015238 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0001523a ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x0001523c bl 0x31ac                                         |     fcn_000031ac (r0, r1, r2, r3);
    0x00015240 str r0, [sp, 0x64]                                |     var_64h_2 = r0;
    0x00015242 b 0x14b1e                                         |     goto label_16;
                                                                 | label_61:
    0x00015244 movs r3, 0                                        |     r3 = 0;
    0x00015246 ldr r7, [sp, 0x14]                                |     r7 = var_14h;
    0x00015248 add r6, sp, 0x74                                  |     r6 += var_74h;
    0x0001524a str r3, [sp, 0x74]                                |     var_74h = r3;
    0x0001524c b 0x1525c                                         |     
                                                                 |     while (r0 != 0) {
    0x0001524e ldr r3, [sp, 0x74]                                |         r3 = var_74h;
    0x00015250 ldr r4, [r3, 8]                                   |         r4 = *((r3 + 8));
    0x00015252 ldr r3, [r7, 4]                                   |         r3 = *((r7 + 4));
    0x00015254 ldr r2, [r4, 0x14]                                |         r2 = *((r4 + 0x14));
    0x00015256 cmp r2, r3                                        |         
                                                                 |         if (r2 == r3) {
    0x00015258 beq.w 0x15504                                     |             goto label_86;
                                                                 |         }
    0x0001525a strh r4, [r2, 0xa]                                |         *((r2 + 0xa)) = r4;
    0x0001525c ldr.w r0, [r5, 0xe4]                              |         r0 = *((r5 + 0xe4));
    0x00015260 mov r1, r6                                        |         r1 = r6;
    0x00015262 bl 0xceb0                                         |         r0 = fcn_0000ceb0 (r0, r1);
    0x00015266 cmp r0, 0                                         |         
    0x00015268 bne 0x1524e                                       |         
                                                                 |     }
    0x0001526a ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x0001526c ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0001526e ldr r1, [r3, 0x1c]                                |     r1 = *((r3 + 0x1c));
    0x00015270 bl 0xb18c                                         |     fcn_0000b18c (r0, r1);
    0x00015274 b 0x14c90                                         |     goto label_15;
                                                                 | label_49:
    0x00015276 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00015278 adds r0, 0x1c                                     |     r0 += 0x1c;
    0x0001527a bl 0xed9c                                         |     r0 = fcn_0000ed9c (r0, r1);
    0x0001527e adds.w r3, r0, 0x16                               |     r3 = r0 + 0x16;
    0x00015282 mov r1, r0                                        |     r1 = r0;
    0x00015284 it ne                                             |     
                                                                 |     if (r3 == r0) {
    0x00015286 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00015288 str r0, [sp, 0x70]                                |     var_70h = r0;
    0x0001528a cmp.w r0, -1                                      |     
    0x0001528e ite eq                                            |     
                                                                 |     if (r0 != -1) {
    0x00015290 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r0 == -1) {
    0x00015292 andne r2, r3, 1                                   |         r2 = r3 & 1;
                                                                 |     }
    0x00015296 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00015298 beq.w 0x14abe                                     |         goto label_26;
                                                                 |     }
    0x0001529c ldr r0, [r4, 0xc]                                 |     r0 = *((r4 + 0xc));
    0x0001529e movs r2, 4                                        |     r2 = 4;
    0x000152a0 ldrh r3, [r0, 0x10]                               |     r3 = *((r0 + 0x10));
    0x000152a2 bfi r3, r2, 6, 4                                  |     value_6 = BIT_MASK (6, 4);
                                                                 |     value_7 = r2 & value_6;
                                                                 |     value_6 = ~value_6;
                                                                 |     r3 &= value_6;
                                                                 |     r3 |= value_7;
    0x000152a6 strh r3, [r0, 0x10]                               |     *((r0 + 0x10)) = r3;
    0x000152a8 ldr r1, [r4, 0x78]                                |     r1 = *((r4 + 0x78));
    0x000152aa ldrd r2, r3, [r4, 0x12c]                          |     __asm ("ldrd r2, r3, aav.0x000000ff");
    0x000152ae bl 0x5da8                                         |     r0 = fcn_00005da8 (r0, r1, r2, r3);
    0x000152b2 mov r1, r0                                        |     r1 = r0;
    0x000152b4 str r0, [sp, 0x70]                                |     var_70h = r0;
    0x000152b6 b 0x1522e                                         |     goto label_27;
                                                                 | label_62:
    0x000152b8 movs r3, 0                                        |     r3 = 0;
    0x000152ba ldr r7, [sp, 0x14]                                |     r7 = var_14h;
    0x000152bc add r6, sp, 0x74                                  |     r6 += var_74h;
    0x000152be str r3, [sp, 0x74]                                |     var_74h = r3;
    0x000152c0 b 0x152d0                                         |     
                                                                 |     while (r0 != 0) {
    0x000152c2 ldr r3, [sp, 0x74]                                |         r3 = var_74h;
    0x000152c4 ldr r4, [r3, 8]                                   |         r4 = *((r3 + 8));
    0x000152c6 ldr r3, [r7, 4]                                   |         r3 = *((r7 + 4));
    0x000152c8 ldr r2, [r4, 0x14]                                |         r2 = *((r4 + 0x14));
    0x000152ca cmp r2, r3                                        |         
                                                                 |         if (r2 == r3) {
    0x000152cc beq.w 0x155b0                                     |             goto label_87;
                                                                 |         }
    0x000152d0 ldr.w r0, [r5, 0xe4]                              |         r0 = *((r5 + 0xe4));
    0x000152d4 mov r1, r6                                        |         r1 = r6;
    0x000152d6 bl 0xceb0                                         |         r0 = fcn_0000ceb0 (r0, r1);
    0x000152da cmp r0, 0                                         |         
    0x000152dc bne 0x152c2                                       |         
                                                                 |     }
    0x000152de ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x000152e0 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x000152e2 ldr r1, [r3, 0x1c]                                |     r1 = *((r3 + 0x1c));
    0x000152e4 bl 0xb2c0                                         |     fcn_0000b2c0 (r0, r1);
    0x000152e8 b 0x14c90                                         |     goto label_15;
                                                                 | label_74:
    0x000152ea adds r6, 7                                        |     r6 += 7;
    0x000152ec b.w 0x14aa0                                       |     goto label_18;
                                                                 | label_82:
    0x00015370 ldr r2, [pc, 0x184]                               |     
    0x00015372 mov r0, r5                                        |     r0 = r5;
    0x00015374 add r2, pc                                        |     r2 = 0x2a870;
    0x00015376 bl 0x14664                                        |     fcn_00014664 (r0, r1, r2, r3, r4);
    0x0001537a b 0x150f0                                         |     goto label_28;
                                                                 | label_76:
    0x0001537c ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x0001537e add r2, sp, 0x70                                  |     r2 += var_70h;
    0x00015380 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00015382 bl 0x3ab4                                         |     fcn_00003ab4 (r0, r1, r2);
    0x00015386 str r0, [sp, 0x64]                                |     var_64h_2 = r0;
    0x00015388 b 0x14f68                                         |     goto label_29;
                                                                 | label_86:
    0x00015504 ldr.w r0, [r5, 0xe4]                              |     r0 = *((r5 + 0xe4));
    0x00015508 mov r1, r4                                        |     r1 = r4;
    0x0001550a bl 0xcc3c                                         |     r0 = fcn_0000cc3c (r0, r1);
    0x0001550e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00015510 beq.w 0x158e0                                     |         goto label_88;
                                                                 |     }
                                                                 | label_31:
    0x00015514 ldr.w lr, [r5, 0xc]                               |     
    0x00015518 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0001551a ldr.w r1, [lr, 0x98]                              |     r1 = *((lr + 0x98));
    0x0001551e ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x00015520 cmp r1, 4                                         |     
    0x00015522 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
                                                                 |     if (r1 <= 4) {
    0x00015524 ble.w 0x15700                                     |         void (*0x15700)() ();
                                                                 |     }
                                                                 | label_87:
    0x000155b0 ldr.w r0, [r5, 0xe4]                              |     r0 = *((r5 + 0xe4));
    0x000155b4 mov r1, r4                                        |     r1 = r4;
    0x000155b6 bl 0xcc3c                                         |     r0 = fcn_0000cc3c (r0, r1);
    0x000155ba cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000155bc beq.w 0x15900                                     |         void (*0x15900)() ();
                                                                 |     }
                                                                 | label_77:
    0x00015616 ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x00015618 add r2, sp, 0x70                                  |     r2 += var_70h;
    0x0001561a ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0001561c bl 0x360c                                         |     fcn_0000360c (r0, r1, r2);
    0x00015620 str r0, [sp, 0x64]                                |     var_64h_2 = r0;
    0x00015622 b 0x14f68                                         |     goto label_29;
                                                                 | label_81:
    0x0001564c ldr r6, [sp, 0x14]                                |     r6 = var_14h;
    0x0001564e movs r0, 4                                        |     r0 = 4;
    0x00015650 ldr r3, [r2, 0x1c]                                |     r3 = *((r2 + 0x1c));
    0x00015652 ldrb r1, [r6, 8]                                  |     r1 = *((r6 + 8));
    0x00015654 str r1, [sp, 4]                                   |     var_4h_4 = r1;
    0x00015656 movs r1, 1                                        |     r1 = 1;
    0x00015658 ldr r2, [r2]                                      |     r2 = *(r2);
    0x0001565a str r2, [sp]                                      |     *(sp) = r2;
    0x0001565c movs r2, 0                                        |     r2 = 0;
    0x0001565e bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x00015662 ldrb r3, [r6, 8]                                  |     r3 = *((r6 + 8));
    0x00015664 str r3, [sp, 0x70]                                |     var_70h = r3;
    0x00015666 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00015668 bne 0x156dc                                       |         
    0x0001566a ldr r0, [r5, 0xc]                                 |         r0 = *((r5 + 0xc));
    0x0001566c str.w r3, [r5, 0x124]                             |         __asm ("str.w r3, aav.0x000000ff");
    0x00015670 ldrh r3, [r0, 0x10]                               |         r3 = *((r0 + 0x10));
    0x00015672 bic r3, r3, 0x3cc                                 |         r3 = BIT_MASK (r3, 0x3cc);
    0x00015676 orr r3, r3, 0xc                                   |         r3 |= 0xc;
    0x0001567a lsls r1, r3, 0x1e                                 |         r1 = r3 << 0x1e;
    0x0001567c strh r3, [r0, 0x10]                               |         *((r0 + 0x10)) = r3;
                                                                 |         if (r1 != r3) {
    0x0001567e bne.w 0x1591e                                     |             goto label_89;
                                                                 |         }
    0x00015680 strh r6, [r1, 0xa]                                |         *((r1 + 0xa)) = r6;
    0x00015682 ldr.w r3, [r0, 0x98]                              |         r3 = *((r0 + 0x98));
    0x00015686 cmp r3, 3                                         |         
                                                                 |         if (r3 > 3) {
    0x00015688 ble 0x15694                                       |             
    0x0001568a ldr r3, [sp, 0x14]                                |             r3 = var_14h;
    0x0001568c ldrb r3, [r3, 4]                                  |             r3 = *((r3 + 4));
    0x0001568e lsls r2, r3, 0x1f                                 |             r2 = r3 << 0x1f;
                                                                 |             if (r2 >= r3) {
    0x00015690 bpl.w 0x15910                                     |                 goto label_90;
                                                                 |             }
                                                                 |         }
                                                                 | label_32:
    0x00015694 ldr r0, [r0, 0x64]                                |         r0 = *((r0 + 0x64));
    0x00015696 ldr r3, [r0, 0xc]                                 |         r3 = *((r0 + 0xc));
    0x00015698 cmp r3, 0                                         |         
                                                                 |         if (r3 <= 0) {
    0x0001569a ble 0x156dc                                       |             goto label_91;
                                                                 |         }
    0x0001569c vmov.i32 d16, 0                                   |         __asm ("vmov.i32 d16, 0");
    0x000156a0 movs r4, 0                                        |         r4 = 0;
    0x000156a2 add r6, sp, 0x74                                  |         r6 += var_74h;
    0x000156a4 str r4, [sp, 0x74]                                |         var_74h = r4;
    0x000156a6 vstr d16, [sp, 0x78]                              |         __asm ("vstr d16, [sp, 0x78]");
    0x000156aa b 0x156b8                                         |         void (*0x156b8)() ();
                                                                 |     }
                                                                 | label_91:
    0x000156dc ldr.w r3, [pc, 0x464]                             |     r3 = *(0x15b44);
    0x000156e0 movs r2, 0                                        |     r2 = 0;
    0x000156e2 str.w r2, [r5, 0xec]                              |     __asm ("str.w r2, [r5, 0xec]");
    0x000156e6 ldr.w r3, [sl, r3]                                |     r3 = *((sl + r3));
    0x000156ea ldr r0, [r3]                                      |     r0 = *(0x15b44);
    0x000156ec bl 0xaab4                                         |     fcn_0000aab4 (r0);
    0x000156f0 b 0x15022                                         |     goto label_30;
                                                                 | label_78:
    0x000156f2 ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x000156f4 add r2, sp, 0x70                                  |     r2 += var_70h;
    0x000156f6 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x000156f8 bl 0x3468                                         |     fcn_00003468 (r0, r1, r2, r3, r4);
    0x000156fc str r0, [sp, 0x64]                                |     var_64h_2 = r0;
    0x000156fe b 0x14f68                                         |     goto label_29;
                                                                 | label_85:
    0x00015736 ldrh r3, [r0, 0x10]                               |     r3 = *((r0 + 0x10));
    0x00015738 movs r2, 4                                        |     r2 = 4;
    0x0001573a bfi r3, r2, 6, 4                                  |     value_8 = BIT_MASK (6, 4);
                                                                 |     value_9 = r2 & value_8;
                                                                 |     value_8 = ~value_8;
                                                                 |     r3 &= value_8;
                                                                 |     r3 |= value_9;
    0x0001573e strh r3, [r0, 0x10]                               |     *((r0 + 0x10)) = r3;
    0x00015740 ldrd r2, r3, [r4, 0x12c]                          |     __asm ("ldrd r2, r3, aav.0x000000ff");
    0x00015744 ldr r1, [r4, 0x78]                                |     r1 = *((r4 + 0x78));
    0x00015746 bl 0x5da8                                         |     r0 = fcn_00005da8 (r0, r1, r2, r3);
    0x0001574a adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x0001574c mov r1, r0                                        |     r1 = r0;
    0x0001574e str r0, [sp, 0x70]                                |     var_70h = r0;
                                                                 |     if (r3 != r0) {
    0x00015750 bne.w 0x1522e                                     |         goto label_27;
                                                                 |     }
                                                                 | label_84:
    0x00015754 mov.w r1, -1                                      |     r1 = -1;
    0x00015758 b 0x1522e                                         |     goto label_27;
                                                                 | label_88:
    0x000158e0 ldr r2, [pc, 0x27c]                               |     
    0x000158e2 mov.w r1, -1                                      |     r1 = -1;
    0x000158e6 movs r0, 5                                        |     r0 = 5;
    0x000158e8 add r2, pc                                        |     r2 = 0x2b44c;
    0x000158ea bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x000158ee b 0x15514                                         |     goto label_31;
                                                                 | label_90:
    0x00015910 ldr r2, [pc, 0x258]                               |     
    0x00015912 movs r0, 4                                        |     r0 = 4;
    0x00015914 mov r1, r4                                        |     r1 = r4;
    0x00015916 add r2, pc                                        |     r2 = 0x2b486;
    0x00015918 bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
    0x0001591c ldr r0, [r5, 0xc]                                 |     r0 = *((r5 + 0xc));
                                                                 | label_89:
    0x0001591e bl 0x14288                                        |     fcn_00014288 (r0, r1, r2);
    0x00015922 str r0, [sp, 0x70]                                |     var_70h = r0;
    0x00015924 ldr r0, [r5, 0xc]                                 |     r0 = *((r5 + 0xc));
    0x00015926 b 0x15694                                         |     goto label_32;
                                                                 | label_66:
    0x00015b2a blx 0x245c                                        |     pthread_condattr_init ();
    0x00015b2e nop                                               |     
    0x00015b30 ldr r0, [r4, r3]                                  |     r0 = *((r4 + r3));
    0x00015b32 movs r0, r0                                       |     
    0x00015b34 str r4, [r3, 8]                                   |     *((r3 + 8)) = r4;
    0x00015b36 movs r0, r0                                       |     
    0x00015b38 ldr r4, [r2, r2]                                  |     r4 = *((r2 + r2));
    0x00015b3a movs r0, r0                                       |     
    0x00015b3c ldrsh r4, [r3, r7]                                |     r4 = *((r3 + r7));
    0x00015b3e movs r0, r0                                       |     
    0x00015b40 ldr r2, [r4, r0]                                  |     r2 = *((r4 + r0));
    0x00015b42 movs r0, r0                                       |     
    0x00015b44 lsls r4, r4, 8                                    |     r4 <<= 8;
    0x00015b46 movs r0, r0                                       |     
    0x00015b48 ldrsh r4, [r6, r3]                                |     r4 = *((r6 + r3));
    0x00015b4a movs r0, r0                                       |     
    0x00015b4c ldrh r6, [r6, r1]                                 |     r6 = *((r6 + r1));
    0x00015b4e movs r0, r0                                       |     
    0x00015b50 str r0, [r0, 0xc]                                 |     *((r0 + 0xc)) = r0;
    0x00015b52 movs r0, r0                                       |     
    0x00015b54 ldr r2, [r2, r0]                                  |     r2 = *((r2 + r0));
    0x00015b56 movs r0, r0                                       |     
    0x00015b58 ldrsh r2, [r2, r7]                                |     r2 = *((r2 + r7));
    0x00015b5a movs r0, r0                                       |     
    0x00015b5c ldrb r4, [r4, r2]                                 |     r4 = *((r4 + r2));
    0x00015b5e movs r0, r0                                       |     
    0x00015b60 ldrb r4, [r7, r0]                                 |     r4 = *((r7 + r0));
    0x00015b62 movs r0, r0                                       |     
    0x00015b64 ldrh r0, [r2, r0]                                 |     r0 = *((r2 + r0));
    0x00015b66 movs r0, r0                                       |     
    0x00015b68 ldrb r4, [r6, r1]                                 |     r4 = *((r6 + r1));
    0x00015b6a movs r0, r0                                       |     
    0x00015b6c ldrh r2, [r3, r5]                                 |     r2 = *((r3 + r5));
    0x00015b6e movs r0, r0                                       |     
    0x00015b70 strb r6, [r7, r3]                                 |     *((r7 + r3)) = r6;
    0x00015b72 movs r0, r0                                       |     
    0x00015b74 ldrb r2, [r5, r0]                                 |     r2 = *((r5 + r0));
    0x00015b76 movs r0, r0                                       |     
    0x00015b78 strb r4, [r2, r2]                                 |     *((r2 + r2)) = r4;
    0x00015b7a movs r0, r0                                       |     
    0x00015b7c ldrb r6, [r1, r1]                                 |     r6 = *((r1 + r1));
    0x00015b7e movs r0, r0                                       |     
    0x00015b80 strb r4, [r4, r6]                                 |     *((r4 + r6)) = r4;
    0x00015b82 movs r0, r0                                       |     
    0x00015b84 strb r4, [r0, r0]                                 |     *((r0 + r0)) = r4;
    0x00015b86 movs r0, r0                                       |     
    0x00015b88 ldrh r0, [r2, r7]                                 |     r0 = *((r2 + r7));
    0x00015b8a movs r0, r0                                       |     
    0x00015b8c ldrh r4, [r5, r3]                                 |     r4 = *((r5 + r3));
    0x00015b8e movs r0, r0                                       |     
    0x00015b90 ldrh r0, [r3, r5]                                 |     r0 = *((r3 + r5));
    0x00015b92 movs r0, r0                                       |     
    0x00015b94 strh r6, [r3, r5]                                 |     *((r3 + r5)) = r6;
    0x00015b96 movs r0, r0                                       |     
    0x00015b98 ldrh r0, [r1, r4]                                 |     r0 = *((r1 + r4));
    0x00015b9a movs r0, r0                                       |     
    0x00015b9c strh r6, [r1, r4]                                 |     *((r1 + r4)) = r6;
    0x00015b9e movs r0, r0                                       |     
                                                                 | }

[*] Function strcpy used 4 times libpaho-mqtt3a.so.1.3.11