[*] Binary protection state of libgeometry.so

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


[*] Function system tear down of libgeometry.so

    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgeometry.so @ 0x2048 */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) fcn.00002048 ()                                  | void fcn_00002048 (int16_t arg_b0h, int16_t arg_b4h, int16_t arg_b8h, int16_t arg_bch, int16_t arg_c0h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                                             |     int16_t var_2ch_2;
                                                             |     int16_t var_ach;
                                                             |     int16_t var_e0h;
                                                             |     int16_t var_e4h;
                                                             |     int16_t var_0h_2;
                                                             |     int16_t var_4h_2;
                                                             |     int16_t var_8h;
                                                             |     int32_t var_8h_2;
                                                             |     int16_t var_10h_2;
                                                             |     int16_t var_14h;
                                                             |     int32_t var_14h_2;
                                                             |     int16_t var_20h;
                                                             |     int16_t var_24h_2;
                                                             |     int16_t var_28h;
                                                             |     int16_t var_2ch;
                                                             |     int16_t var_30h;
                                                             |     int16_t var_34h;
                                                             |     int16_t var_38h;
                                                             |     int16_t var_3ch;
                                                             |     int16_t var_40h;
                                                             |     int16_t var_44h;
                                                             |     int16_t var_48h;
                                                             |     int16_t var_4ch;
                                                             |     int16_t var_50h;
                                                             |     int16_t var_54h;
                                                             |     int16_t var_58h;
                                                             |     int16_t var_5ch;
                                                             |     int16_t var_60h;
                                                             |     int16_t var_64h;
                                                             |     int16_t var_68h;
                                                             |     int16_t var_6ch;
                                                             |     int16_t var_74h;
                                                             |     int16_t var_7ch;
                                                             |     int16_t var_84h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
    0x00002048 svcmi 0xf0e92d                                |     __asm ("svcmi 0xf0e92d");
    0x0000204c sub sp, 0x8c                                  |     
    0x0000204e mov r6, r1                                    |     r6 = r1;
    0x00002050 str r1, [sp, 0x4c]                            |     var_4ch = r1;
    0x00002052 mov r5, r2                                    |     r5 = r2;
    0x00002054 mov sl, r0                                    |     sl = r0;
    0x00002056 ldr.w r1, [pc, 0x440]                         |     r1 = *(0x00002498);
    0x0000205a str r2, [sp, 0x44]                            |     var_44h = r2;
    0x0000205c ldr.w r2, [pc, 0x43c]                         |     
    0x00002060 add r1, pc                                    |     r1 += pc;
    0x00002062 ldrb.w r0, [sp, 0xbc]                         |     r0 = *(arg_bch);
    0x00002066 ldr r2, [r1, r2]                              |     r2 = *((r1 + r2));
    0x00002068 ldr r2, [r2]                                  |     r2 = *(0x249c);
    0x0000206a str r2, [sp, 0x84]                            |     var_84h = r2;
    0x0000206c mov.w r2, 0                                   |     r2 = 0;
    0x00002070 ldrb.w r2, [sp, 0xb8]                         |     r2 = *(arg_b8h);
    0x00002074 str r0, [sp, 0x58]                            |     var_58h = r0;
    0x00002076 lsls r2, r2, 1                                |     r2 <<= 1;
    0x00002078 orr.w r2, r2, r0, lsl 2                       |     r2 |= (r0 << 2);
    0x0000207c orr r0, r2, 8                                 |     r0 = r2 | 8;
    0x00002080 add.w r2, r5, r5, lsl 2                       |     r2 = r5 + (r5 << 2);
    0x00002084 str r0, [sp, 0x40]                            |     var_40h = r0;
    0x00002086 lsls r4, r2, 3                                |     r4 = r2 << 3;
    0x00002088 ldrd r2, r1, [r6, 0x14]                       |     __asm ("ldrd r2, r1, [r6, 0x14]");
    0x0000208c ldrb.w r6, [sp, 0xc0]                         |     r6 = *(arg_c0h);
    0x00002090 str r4, [sp, 0x54]                            |     var_54h = r4;
    0x00002092 subs r1, 1                                    |     r1--;
    0x00002094 adds r0, r2, r4                               |     r0 = r2 + r4;
    0x00002096 cmp r1, r5                                    |     
    0x00002098 str r6, [sp, 0x50]                            |     var_50h = r6;
    0x0000209a it gt                                         |     
                                                             |     if (r1 <= r5) {
    0x0000209c addgt r1, r4, 0x28                            |         r1 = r4 + 0x28;
                                                             |     }
    0x000020a0 ldrsh.w r6, [r0, 0x24]                        |     r6 = *((r0 + 0x24));
    0x000020a4 it gt                                         |     
                                                             |     if (r1 <= r5) {
    0x000020a6 addgt r2, r2, r1                              |         r2 += r1;
                                                             |     }
    0x000020a8 ldrsh.w r0, [r0, 0x26]                        |     r0 = *((r0 + 0x26));
    0x000020ac ldrsh.w r1, [r2, 0x24]                        |     r1 = *((r2 + 0x24));
    0x000020b0 ldrsh.w r2, [r2, 0x26]                        |     r2 = *((r2 + 0x26));
    0x000020b4 str r6, [sp, 0x20]                            |     var_20h = r6;
    0x000020b6 str r0, [sp, 0x2c]                            |     var_2ch = r0;
    0x000020b8 str r2, [sp, 0x30]                            |     var_30h = r2;
    0x000020ba ldr r2, [sp, 0xb0]                            |     r2 = *(arg_b0h);
    0x000020bc str r1, [sp, 0x28]                            |     var_28h = r1;
    0x000020be cmp r2, 0                                     |     
                                                             |     if (r2 <= 0) {
    0x000020c0 ble 0x2170                                    |         goto label_4;
                                                             |     }
    0x000020c2 subs r3, 4                                    |     r3 -= 4;
    0x000020c4 mov.w fp, 0                                   |     
    0x000020c8 str r3, [sp, 0x24]                            |     var_24h_2 = r3;
    0x000020ca ldr r3, [sp, 0x44]                            |     r3 = var_44h;
    0x000020cc adds r3, 1                                    |     r3++;
    0x000020ce add.w r3, r3, r3, lsl 2                       |     r3 += (r3 << 2);
    0x000020d2 lsls r3, r3, 3                                |     r3 <<= 3;
    0x000020d4 str r3, [sp, 0x5c]                            |     var_5ch = r3;
    0x000020d6 add r3, sp, 0x7c                              |     r3 += var_7ch;
    0x000020d8 str r3, [sp, 0x48]                            |     var_48h = r3;
                                                             |     do {
    0x000020da ldr r2, [sp, 0x24]                            |         r2 = var_24h_2;
    0x000020dc ldr.w r3, [sl, 0x18]                          |         r3 = *((sl + 0x18));
    0x000020e0 ldr r4, [r2, 4]!                              |         r4 = *((r2 += 4));
    0x000020e4 subs r3, 1                                    |         r3--;
    0x000020e6 cmp r3, r4                                    |         
    0x000020e8 str r2, [sp, 0x24]                            |         var_24h_2 = r2;
    0x000020ea it gt                                         |         
                                                             |         if (r3 <= r4) {
    0x000020ec addgt r3, r4, 1                               |             r3 = r4 + 1;
                                                             |         }
    0x000020ee lsl.w r1, r4, 2                               |         r1 = r4 << 2;
    0x000020f2 it gt                                         |         
                                                             |         if (r3 <= r4) {
    0x000020f4 addgt r3, r3, r3, lsl 2                       |             r3 += (r3 << 2);
                                                             |         }
    0x000020f8 ldr.w r2, [sl, 0x14]                          |         r2 = *((sl + 0x14));
    0x000020fc add.w r5, r1, r4                              |         r5 = r1 + r4;
    0x00002100 str r1, [sp, 0x34]                            |         var_34h = r1;
    0x00002102 it gt                                         |         
                                                             |         if (r3 <= r4) {
    0x00002104 lslgt r3, r3, 3                               |             r3 <<= 3;
                                                             |         }
    0x00002106 lsl.w r5, r5, 3                               |         r5 <<= 3;
    0x0000210a it le                                         |         
                                                             |         if (r3 > r4) {
    0x0000210c movle r3, 0                                   |             r3 = 0;
                                                             |         }
    0x0000210e add r3, r2                                    |         r3 += r2;
    0x00002110 add r2, r5                                    |         r2 += r5;
    0x00002112 ldrsh.w r7, [r3, 0x24]                        |         r7 = *((r3 + 0x24));
    0x00002116 ldrsh.w r6, [r2, 0x24]                        |         r6 = *((r2 + 0x24));
    0x0000211a ldrsh.w sb, [r3, 0x26]                        |         sb = *((r3 + 0x26));
    0x0000211e ldrsh.w r8, [r2, 0x26]                        |         r8 = *((r2 + 0x26));
    0x00002122 ldr r3, [sp, 0x20]                            |         r3 = var_20h;
    0x00002124 ldr r2, [sp, 0x28]                            |         r2 = var_28h;
    0x00002126 cmp r3, r2                                    |         
    0x00002128 itt ge                                        |         
                                                             |         if (r3 < r2) {
    0x0000212a movge r3, r2                                  |             r3 = r2;
                                                             |         }
                                                             |         if (r3 < r2) {
    0x0000212c ldrge r2, [sp, 0x20]                          |             r2 = var_20h;
                                                             |         }
    0x0000212e cmp r6, r7                                    |         
                                                             |         if (r6 >= r7) {
    0x00002130 bge 0x218e                                    |             goto label_5;
                                                             |         }
    0x00002132 cmp r3, r7                                    |         
    0x00002134 ite gt                                        |         
                                                             |         if (r3 <= r7) {
    0x00002136 movgt r3, 0                                   |             r3 = 0;
                                                             |         }
                                                             |         if (r3 > r7) {
    0x00002138 movle r3, 1                                   |             r3 = 1;
                                                             |         }
    0x0000213a cmp r2, r6                                    |         
    0x0000213c it lt                                         |         
                                                             |         if (r2 >= r6) {
    0x0000213e movlt r3, 0                                   |             r3 = 0;
                                                             |         }
                                                             |         if (r3 != 0) {
                                                             | label_0:
    0x00002140 cbz r3, 0x2166                                |             
    0x00002142 ldrd r3, r2, [sp, 0x2c]                       |             __asm ("ldrd r3, r2, [var_2ch]");
    0x00002146 strd sb, r8, [sp, 0x38]                       |             __asm ("strd sb, r8, [var_3ch]");
    0x0000214a cmp r3, r2                                    |             
    0x0000214c itt ge                                        |             
                                                             |             if (r3 < r2) {
    0x0000214e movge r3, r2                                  |                 r3 = r2;
                                                             |             }
                                                             |             if (r3 < r2) {
    0x00002150 ldrge r2, [sp, 0x2c]                          |                 r2 = var_2ch;
                                                             |             }
    0x00002152 cmp r8, sb                                    |             
                                                             |             if (r8 >= sb) {
    0x00002154 bge 0x219e                                    |                 goto label_6;
                                                             |             }
    0x00002156 cmp r3, sb                                    |             
    0x00002158 ite gt                                        |             
                                                             |             if (r3 <= sb) {
    0x0000215a movgt r3, 0                                   |                 r3 = 0;
                                                             |             }
                                                             |             if (r3 > sb) {
    0x0000215c movle r3, 1                                   |                 r3 = 1;
                                                             |             }
    0x0000215e cmp r2, r8                                    |             
    0x00002160 it lt                                         |             
                                                             |             if (r2 >= r8) {
    0x00002162 movlt r3, 0                                   |                 r3 = 0;
                                                             |             }
                                                             |             if (r3 != 0) {
    0x00002164 cbnz r3, 0x21b0                               |                 goto label_7;
                                                             |             }
                                                             |         }
                                                             | label_1:
    0x00002166 ldr r3, [sp, 0xb0]                            |         r3 = *(arg_b0h);
    0x00002168 add.w fp, fp, 1                               |         
    0x0000216c cmp r3, fp                                    |         
    0x0000216e bne 0x20da                                    |         
                                                             |     } while (r3 != fp);
                                                             | label_4:
    0x00002170 ldr r2, [pc, 0x32c]                           |     
    0x00002172 ldr r3, [pc, 0x328]                           |     r3 = *(0x249e);
    0x00002174 add r2, pc                                    |     r2 = 0x4618;
    0x00002176 ldr r3, [r2, r3]                              |     r3 = *(0x4618);
    0x00002178 ldr r2, [r3]                                  |     r2 = *(0x4618);
    0x0000217a ldr r3, [sp, 0x84]                            |     r3 = var_84h;
    0x0000217c eors r2, r3                                   |     r2 ^= r3;
    0x0000217e mov.w r3, 0                                   |     r3 = 0;
                                                             |     if (r2 != r3) {
    0x00002182 bne.w 0x2494                                  |         goto label_8;
                                                             |     }
    0x00002186 movs r0, 1                                    |     r0 = 1;
    0x00002188 add sp, 0x8c                                  |     
    0x0000218a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}    |     
                                                             | label_5:
    0x0000218e cmp r3, r6                                    |     
    0x00002190 ite gt                                        |     
                                                             |     if (r3 <= r6) {
    0x00002192 movgt r3, 0                                   |         r3 = 0;
                                                             |     }
                                                             |     if (r3 > r6) {
    0x00002194 movle r3, 1                                   |         r3 = 1;
                                                             |     }
    0x00002196 cmp r2, r7                                    |     
    0x00002198 it lt                                         |     
                                                             |     if (r2 >= r7) {
    0x0000219a movlt r3, 0                                   |         r3 = 0;
                                                             |     }
    0x0000219c b 0x2140                                      |     goto label_0;
                                                             | label_6:
    0x0000219e cmp r3, r8                                    |     
    0x000021a0 ite gt                                        |     
                                                             |     if (r3 <= r8) {
    0x000021a2 movgt r3, 0                                   |         r3 = 0;
                                                             |     }
                                                             |     if (r3 > r8) {
    0x000021a4 movle r3, 1                                   |         r3 = 1;
                                                             |     }
    0x000021a6 cmp r2, sb                                    |     
    0x000021a8 it lt                                         |     
                                                             |     if (r2 >= sb) {
    0x000021aa movlt r3, 0                                   |         r3 = 0;
                                                             |     }
    0x000021ac cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x000021ae beq 0x2166                                    |         goto label_1;
                                                             |     }
                                                             | label_7:
    0x000021b0 ldrd r2, r1, [sp, 0x28]                       |     __asm ("ldrd r2, r1, [var_2ch]");
    0x000021b4 ldr r3, [sp, 0x30]                            |     r3 = var_30h;
    0x000021b6 ldr r0, [sp, 0x20]                            |     r0 = var_20h;
    0x000021b8 strd r7, sb, [sp, 8]                          |     __asm ("strd r7, sb, [var_8h]");
    0x000021bc strd r6, r8, [sp]                             |     __asm ("strd r6, r8, [sp]");
    0x000021c0 blx 0xcfc                                     |     fcn_00000cfc ();
    0x000021c4 ldr r1, [sp, 0x40]                            |     r1 = var_40h;
    0x000021c6 movs r3, 1                                    |     r3 = 1;
    0x000021c8 lsls r3, r0                                   |     r3 <<= r0;
    0x000021ca mov r2, r0                                    |     r2 = r0;
    0x000021cc tst r3, r1                                    |     
                                                             |     if ((r3 & r1) == 0) {
    0x000021ce beq 0x2166                                    |         goto label_1;
                                                             |     }
    0x000021d0 ldr r3, [sp, 0x30]                            |     r3 = var_30h;
    0x000021d2 str r0, [sp, 0x60]                            |     var_60h = r0;
    0x000021d4 add r0, sp, 0x74                              |     r0 += var_74h;
    0x000021d6 ldr r1, [sp, 0x48]                            |     r1 = var_48h;
    0x000021d8 str r3, [sp, 8]                               |     var_8h = r3;
    0x000021da ldr r3, [sp, 0x28]                            |     r3 = var_28h;
    0x000021dc strd r7, sb, [sp, 0x14]                       |     __asm ("strd r7, sb, [var_14h]");
    0x000021e0 strd r6, r8, [sp, 0xc]                        |     __asm ("strd r6, r8, [var_10h_2]");
    0x000021e4 str r3, [sp, 4]                               |     var_4h_2 = r3;
    0x000021e6 ldr r3, [sp, 0x2c]                            |     r3 = var_2ch;
    0x000021e8 str r3, [sp]                                  |     *(sp) = r3;
    0x000021ea ldr r3, [sp, 0x20]                            |     r3 = var_20h;
    0x000021ec blx 0xc8c                                     |     fcn_00000c8c ();
    0x000021f0 ldr r2, [sp, 0x60]                            |     r2 = var_60h;
    0x000021f2 cmp r2, 2                                     |     
                                                             |     if (r2 == 2) {
    0x000021f4 beq 0x2288                                    |         goto label_9;
                                                             |     }
    0x000021f6 cmp r2, 3                                     |     
                                                             |     if (r2 == 3) {
    0x000021f8 beq 0x227a                                    |         goto label_10;
                                                             |     }
    0x000021fa cmp r2, 1                                     |     
                                                             |     if (r2 != 1) {
    0x000021fc bne 0x2166                                    |         goto label_1;
                                                             |     }
    0x000021fe ldr r3, [sp, 0x50]                            |     r3 = var_50h;
                                                             |     if (r3 == 0) {
    0x00002200 cbz r3, 0x220c                                |         goto label_11;
                                                             |     }
    0x00002202 ldr r3, [sp, 0xb4]                            |     r3 = *(arg_b4h);
    0x00002204 cmp r6, r3                                    |     
    0x00002206 it ne                                         |     
                                                             |     if (r6 == r3) {
    0x00002208 cmpne r7, r3                                  |         __asm ("cmpne r7, r3");
                                                             |         goto label_12;
                                                             |     }
                                                             |     if (r6 == r3) {
                                                             | label_12:
    0x0000220a beq 0x2166                                    |         goto label_1;
                                                             |     }
                                                             | label_11:
    0x0000220c ldr r3, [sp, 0x4c]                            |     r3 = var_4ch;
    0x0000220e ldr r7, [sp, 0x7c]                            |     r7 = var_7ch;
    0x00002210 ldr.w r8, [sp, 0x74]                          |     r8 = var_74h;
    0x00002214 ldr r0, [r3, 0xc]                             |     r0 = *((r3 + 0xc));
    0x00002216 blx 0xe50                                     |     fcn_00000e50 ();
    0x0000221a movs r2, 0                                    |     r2 = 0;
    0x0000221c mov r6, r0                                    |     r6 = r0;
    0x0000221e str r2, [r0, 0x18]                            |     *((r0 + 0x18)) = r2;
    0x00002220 movs r0, 0                                    |     r0 = 0;
    0x00002222 str r0, [r6, 0x14]                            |     *((r6 + 0x14)) = r0;
    0x00002224 sxth.w r1, r8                                 |     __asm ("sxth.w r1, r8");
    0x00002228 ldr r0, [sp, 0x44]                            |     r0 = var_44h;
    0x0000222a sxth r2, r7                                   |     __asm ("sxth r2, r7");
    0x0000222c ldr r3, [sp, 0x4c]                            |     r3 = var_4ch;
    0x0000222e movs r7, 0                                    |     r7 = 0;
    0x00002230 bfi r7, r1, 0, 0x10                           |     value_0 = BIT_MASK (0, 0x10);
                                                             |     value_1 = r1 & value_0;
                                                             |     value_0 = ~value_0;
                                                             |     r7 &= value_0;
                                                             |     r7 |= value_1;
    0x00002234 strh r2, [r6, 0x26]                           |     *((r6 + 0x26)) = r2;
    0x00002236 str r0, [r6, 0x20]                            |     *((r6 + 0x20)) = r0;
    0x00002238 bfi r7, r2, 0x10, 0x10                        |     value_2 = BIT_MASK (0x10, 0x10);
                                                             |     value_3 = r2 & value_2;
                                                             |     value_2 = ~value_2;
                                                             |     r7 &= value_2;
                                                             |     r7 |= value_3;
    0x0000223c ldr r3, [r3, 0x14]                            |     r3 = *((r3 + 0x14));
    0x0000223e ldr r0, [sp, 0x54]                            |     r0 = var_54h;
    0x00002240 strh r1, [r6, 0x24]                           |     *((r6 + 0x24)) = r1;
    0x00002242 add r3, r0                                    |     r3 += r0;
    0x00002244 ldr.w r0, [sl, 0xc]                           |     r0 = *((sl + 0xc));
    0x00002248 ldr r2, [r3, 0x10]                            |     r2 = *((r3 + 0x10));
    0x0000224a ldr r1, [r3, 0xc]                             |     r1 = *((r3 + 0xc));
    0x0000224c adds r2, 1                                    |     r2++;
    0x0000224e str r1, [r6, 8]                               |     *((r6 + 8)) = r1;
    0x00002250 strd r6, r2, [r3, 0xc]                        |     __asm ("strd r6, r2, [r3, 0xc]");
    0x00002254 blx 0xe50                                     |     fcn_00000e50 ();
    0x00002258 ldr.w r3, [sl, 0x14]                          |     r3 = *((sl + 0x14));
    0x0000225c strd r4, r7, [r0, 0x20]                       |     __asm ("strd r4, r7, [r0, 0x20]");
    0x00002260 add r3, r5                                    |     r3 += r5;
    0x00002262 ldr r2, [r3, 0x10]                            |     r2 = *((r3 + 0x10));
    0x00002264 ldr r1, [r3, 0xc]                             |     r1 = *((r3 + 0xc));
    0x00002266 adds r2, 1                                    |     r2++;
    0x00002268 str r1, [r0, 8]                               |     *((r0 + 8)) = r1;
    0x0000226a strd r0, r2, [r3, 0xc]                        |     __asm ("strd r0, r2, [r3, 0xc]");
    0x0000226e movs r3, 1                                    |     r3 = 1;
    0x00002270 str r3, [r6, 0x18]                            |     *((r6 + 0x18)) = r3;
    0x00002272 str r3, [r0, 0x18]                            |     *((r0 + 0x18)) = r3;
    0x00002274 str r0, [r6, 0x14]                            |     *((r6 + 0x14)) = r0;
    0x00002276 str r6, [r0, 0x14]                            |     *((r0 + 0x14)) = r6;
    0x00002278 b 0x2166                                      |     goto label_1;
                                                             | label_10:
    0x0000227a cmp r0, 2                                     |     
                                                             |     if (r0 == 2) {
    0x0000227c beq.w 0x2384                                  |         goto label_13;
                                                             |     }
    0x00002280 ldr r3, [sp, 0x58]                            |     r3 = var_58h;
    0x00002282 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00002284 beq.w 0x2166                                  |         goto label_1;
                                                             |     }
                                                             | label_9:
    0x00002288 ldr r3, [sp, 0x74]                            |     r3 = var_74h;
    0x0000228a ldr r2, [sp, 0x20]                            |     r2 = var_20h;
    0x0000228c cmp r3, r2                                    |     
                                                             |     if (r3 != r2) {
    0x0000228e bne.w 0x2166                                  |         goto label_1;
                                                             |     }
    0x00002292 ldr r3, [sp, 0x7c]                            |     r3 = var_7ch;
    0x00002294 ldr r2, [sp, 0x2c]                            |     r2 = var_2ch;
    0x00002296 cmp r3, r2                                    |     
                                                             |     if (r3 != r2) {
    0x00002298 bne.w 0x2166                                  |         goto label_1;
                                                             |     }
    0x0000229c ldr r3, [sp, 0x4c]                            |     r3 = var_4ch;
    0x0000229e ldrd r5, r1, [r3, 0x14]                       |     __asm ("ldrd r5, r1, [r3, 0x14]");
    0x000022a2 ldr r3, [sp, 0x44]                            |     r3 = var_44h;
    0x000022a4 adds r0, r3, r1                               |     r0 = r3 + r1;
    0x000022a6 subs r0, 1                                    |     r0--;
    0x000022a8 bl 0x5bd4                                     |     fcn_00005bd4 (r0, r1);
    0x000022ac ldr r3, [sp, 0x54]                            |     r3 = var_54h;
    0x000022ae add.w r1, r1, r1, lsl 2                       |     r1 += (r1 << 2);
    0x000022b2 ldr r0, [sp, 0x2c]                            |     r0 = var_2ch;
    0x000022b4 add.w r1, r5, r1, lsl 3                       |     r1 = r5 + (r1 << 3);
    0x000022b8 adds r3, r5, r3                               |     r3 = r5 + r3;
    0x000022ba ldr.w r5, [sl, 0x18]                          |     r5 = *((sl + 0x18));
    0x000022be ldr r2, [r3, 0x18]                            |     r2 = *((r3 + 0x18));
    0x000022c0 str r2, [sp, 0x60]                            |     var_60h = r2;
    0x000022c2 ldrsh.w r2, [r1, 0x24]                        |     r2 = *((r1 + 0x24));
    0x000022c6 ldrsh.w r1, [r1, 0x26]                        |     r1 = *((r1 + 0x26));
    0x000022ca str r1, [sp, 0x64]                            |     var_64h = r1;
    0x000022cc ldr r1, [sp, 0x20]                            |     r1 = var_20h;
    0x000022ce cmp r1, r6                                    |     
    0x000022d0 it eq                                         |     
                                                             |     if (r1 == r6) {
    0x000022d2 cmpeq r0, r8                                  |         __asm ("cmpeq r0, r8");
                                                             |     }
    0x000022d4 ite eq                                        |     
                                                             |     if (r1 != r6) {
    0x000022d6 moveq r1, 1                                   |         r1 = 1;
                                                             |     }
                                                             |     if (r1 == r6) {
    0x000022d8 movne r1, 0                                   |         r1 = 0;
                                                             |     }
    0x000022da str r1, [sp, 0x68]                            |     var_68h = r1;
                                                             |     if (r1 == r6) {
    0x000022dc beq 0x23ce                                    |         goto label_14;
                                                             |     }
    0x000022de ldr r1, [sp, 0x20]                            |     r1 = var_20h;
    0x000022e0 cmp r1, r7                                    |     
    0x000022e2 it eq                                         |     
                                                             |     if (r1 == r7) {
    0x000022e4 cmpeq r0, sb                                  |         __asm ("cmpeq r0, sb");
                                                             |     }
                                                             |     if (r1 == r7) {
    0x000022e6 beq.w 0x2460                                  |         goto label_15;
                                                             |     }
    0x000022ea ldr r1, [sp, 0x60]                            |     r1 = var_60h;
                                                             |     if (r1 == 0) {
    0x000022ec cbnz r1, 0x22fa                               |         
    0x000022ee ldr r5, [sp, 0x4c]                            |         r5 = var_4ch;
    0x000022f0 movs r0, 2                                    |         r0 = 2;
    0x000022f2 ldr r1, [r5, 0x1c]                            |         r1 = *((r5 + 0x1c));
    0x000022f4 str r0, [r3, 0x18]                            |         *((r3 + 0x18)) = r0;
    0x000022f6 adds r1, 1                                    |         r1++;
    0x000022f8 str r1, [r5, 0x1c]                            |         *((r5 + 0x1c)) = r1;
                                                             |     }
    0x000022fa ldr r1, [sp, 0x30]                            |     r1 = var_30h;
    0x000022fc ldr r3, [sp, 0x64]                            |     r3 = var_64h;
    0x000022fe ldr r0, [sp, 0x20]                            |     r0 = var_20h;
    0x00002300 str r1, [sp, 0x14]                            |     var_14h = r1;
    0x00002302 ldr r1, [sp, 0x28]                            |     r1 = var_28h;
    0x00002304 strd r2, r3, [sp, 8]                          |     __asm ("strd r2, r3, [var_8h]");
    0x00002308 mov r3, r8                                    |     r3 = r8;
    0x0000230a mov r2, r6                                    |     r2 = r6;
    0x0000230c strd r7, sb, [sp]                             |     __asm ("strd r7, sb, [sp]");
    0x00002310 str r1, [sp, 0x10]                            |     var_10h_2 = r1;
    0x00002312 ldr r1, [sp, 0x2c]                            |     r1 = var_2ch;
    0x00002314 blx 0xd5c                                     |     r0 = fcn_00000d5c ();
    0x00002318 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0000231a beq.w 0x2166                                  |         goto label_1;
                                                             |     }
    0x0000231e ldr r3, [sp, 0x34]                            |     r3 = var_34h;
    0x00002320 mov r5, r4                                    |     r5 = r4;
    0x00002322 add r3, r4                                    |     r3 += r4;
    0x00002324 lsl.w r8, r3, 3                               |     r8 = r3 << 3;
                                                             | label_2:
    0x00002328 ldr r6, [sp, 0x4c]                            |     r6 = var_4ch;
    0x0000232a ldr r0, [r6, 0xc]                             |     r0 = *((r6 + 0xc));
    0x0000232c blx 0xe50                                     |     fcn_00000e50 ();
    0x00002330 movs r2, 0                                    |     r2 = 0;
    0x00002332 ldr r3, [sp, 0x2c]                            |     r3 = var_2ch;
    0x00002334 strd r2, r2, [r0, 0x14]                       |     __asm ("strd r2, r2, [r0, 0x14]");
    0x00002338 mov r4, r0                                    |     r4 = r0;
    0x0000233a ldr r2, [sp, 0x44]                            |     r2 = var_44h;
    0x0000233c strh r3, [r0, 0x26]                           |     *((r0 + 0x26)) = r3;
    0x0000233e ldr r3, [r6, 0x14]                            |     r3 = *((r6 + 0x14));
    0x00002340 str r2, [r0, 0x20]                            |     *((r0 + 0x20)) = r2;
    0x00002342 ldr r2, [sp, 0x54]                            |     r2 = var_54h;
    0x00002344 ldr r7, [sp, 0x20]                            |     r7 = var_20h;
    0x00002346 add r3, r2                                    |     r3 += r2;
    0x00002348 ldr r2, [r3, 0x10]                            |     r2 = *((r3 + 0x10));
    0x0000234a ldr r1, [r3, 0xc]                             |     r1 = *((r3 + 0xc));
    0x0000234c strh r7, [r0, 0x24]                           |     *((r0 + 0x24)) = r7;
    0x0000234e adds r2, 1                                    |     r2++;
    0x00002350 ldr.w r0, [sl, 0xc]                           |     r0 = *((sl + 0xc));
    0x00002354 str r1, [r4, 8]                               |     *((r4 + 8)) = r1;
    0x00002356 strd r4, r2, [r3, 0xc]                        |     __asm ("strd r4, r2, [r3, 0xc]");
    0x0000235a blx 0xe50                                     |     fcn_00000e50 ();
    0x0000235e ldr.w r2, [sl, 0x14]                          |     r2 = *((sl + 0x14));
    0x00002362 ldr r3, [sp, 0x2c]                            |     r3 = var_2ch;
    0x00002364 str r5, [r0, 0x20]                            |     *((r0 + 0x20)) = r5;
    0x00002366 add r2, r8                                    |     r2 += r8;
    0x00002368 strh r7, [r0, 0x24]                           |     *((r0 + 0x24)) = r7;
    0x0000236a ldr r1, [r2, 0x10]                            |     r1 = *((r2 + 0x10));
    0x0000236c strh r3, [r0, 0x26]                           |     *((r0 + 0x26)) = r3;
    0x0000236e ldr r3, [r2, 0xc]                             |     r3 = *((r2 + 0xc));
    0x00002370 adds r1, 1                                    |     r1++;
    0x00002372 str r3, [r0, 8]                               |     *((r0 + 8)) = r3;
    0x00002374 movs r3, 1                                    |     r3 = 1;
    0x00002376 strd r0, r1, [r2, 0xc]                        |     __asm ("strd r0, r1, [r2, 0xc]");
    0x0000237a str r3, [r4, 0x18]                            |     *((r4 + 0x18)) = r3;
    0x0000237c str r3, [r0, 0x18]                            |     *((r0 + 0x18)) = r3;
    0x0000237e str r0, [r4, 0x14]                            |     *((r4 + 0x14)) = r0;
    0x00002380 str r4, [r0, 0x14]                            |     *((r0 + 0x14)) = r4;
    0x00002382 b 0x2166                                      |     goto label_1;
                                                             | label_13:
    0x00002384 ldr r3, [sp, 0x4c]                            |     r3 = var_4ch;
    0x00002386 ldr r2, [sp, 0x44]                            |     r2 = var_44h;
    0x00002388 ldr r0, [sp, 0x5c]                            |     r0 = var_5ch;
    0x0000238a ldr r3, [r3, 0x18]                            |     r3 = *((r3 + 0x18));
    0x0000238c subs r3, 1                                    |     r3--;
    0x0000238e cmp r2, r3                                    |     
    0x00002390 it ge                                         |     
                                                             |     if (r2 < r3) {
    0x00002392 movge r0, 0                                   |         r0 = 0;
                                                             |     }
    0x00002394 ldr.w r3, [sl, 0x18]                          |     r3 = *((sl + 0x18));
    0x00002398 subs r3, 1                                    |     r3--;
    0x0000239a cmp r4, r3                                    |     
    0x0000239c ldr r4, [sp, 0x4c]                            |     r4 = var_4ch;
    0x0000239e ldr r3, [sp, 0x54]                            |     r3 = var_54h;
    0x000023a0 ite lt                                        |     
                                                             |     if (r4 >= r3) {
    0x000023a2 addlt r2, r5, 0x28                            |         r2 = r5 + 0x28;
                                                             |     }
                                                             |     if (r4 >= r3) {
    0x000023a6 movs r2, 0                                    |         r2 = 0;
                                                             |     }
    0x000023a8 ldr r1, [r4, 0x14]                            |     r1 = *((r4 + 0x14));
    0x000023aa add r0, r1                                    |     r0 += r1;
    0x000023ac add r1, r3                                    |     r1 += r3;
    0x000023ae ldr.w r3, [sl, 0x14]                          |     r3 = *((sl + 0x14));
    0x000023b2 add r5, r3                                    |     r5 += r3;
    0x000023b4 add r3, r2                                    |     r3 += r2;
    0x000023b6 movs r2, 3                                    |     r2 = 3;
    0x000023b8 str r2, [r1, 0x18]                            |     *((r1 + 0x18)) = r2;
    0x000023ba mov.w r1, 1                                   |     r1 = 1;
    0x000023bc lsls r1, r0, 4                                |     r1 = r0 << 4;
    0x000023be str r2, [r0, 0x18]                            |     *((r0 + 0x18)) = r2;
    0x000023c0 strb.w r1, [r4, 0x20]                         |     *((r4 + 0x20)) = r1;
    0x000023c4 str r2, [r5, 0x18]                            |     *((r5 + 0x18)) = r2;
    0x000023c6 str r2, [r3, 0x18]                            |     *((r3 + 0x18)) = r2;
    0x000023c8 strb.w r1, [sl, 0x20]                         |     *((sl + 0x20)) = r1;
    0x000023cc b 0x2166                                      |     goto label_1;
                                                             | label_14:
    0x000023ce adds r0, r4, r5                               |     r0 = r4 + r5;
    0x000023d0 mov r1, r5                                    |     r1 = r5;
    0x000023d2 subs r0, 1                                    |     r0--;
    0x000023d4 str r3, [sp, 0x68]                            |     var_68h = r3;
    0x000023d6 str r2, [sp, 0x34]                            |     var_34h = r2;
    0x000023d8 mov r5, r4                                    |     r5 = r4;
    0x000023da bl 0x5bd4                                     |     fcn_00005bd4 (r0, r1);
    0x000023de ldr.w sb, [sl, 0x14]                          |     sb = *((sl + 0x14));
    0x000023e2 add.w r1, r1, r1, lsl 2                       |     r1 += (r1 << 2);
    0x000023e6 ldr r2, [sp, 0x34]                            |     r2 = var_34h;
    0x000023e8 add.w r1, sb, r1, lsl 3                       |     r1 = sb + (r1 << 3);
    0x000023ec ldrsh.w r3, [r1, 0x26]                        |     r3 = *((r1 + 0x26));
    0x000023f0 ldrsh.w r6, [r1, 0x24]                        |     r6 = *((r1 + 0x24));
    0x000023f4 str r3, [sp, 0x3c]                            |     var_3ch = r3;
    0x000023f6 ldr r3, [sp, 0x68]                            |     r3 = var_68h;
                                                             | label_3:
    0x000023f8 ldr r1, [sp, 0x60]                            |     r1 = var_60h;
                                                             |     if (r1 == 0) {
    0x000023fa cbnz r1, 0x240a                               |         
    0x000023fc ldr r1, [sp, 0x4c]                            |         r1 = var_4ch;
    0x000023fe movs r0, 2                                    |         r0 = 2;
    0x00002400 ldr r1, [r1, 0x1c]                            |         r1 = *((r1 + 0x1c));
    0x00002402 str r0, [r3, 0x18]                            |         *((r3 + 0x18)) = r0;
    0x00002404 ldr r3, [sp, 0x4c]                            |         r3 = var_4ch;
    0x00002406 adds r1, 1                                    |         r1++;
    0x00002408 str r1, [r3, 0x1c]                            |         *((r3 + 0x1c)) = r1;
                                                             |     }
    0x0000240a add.w r3, r5, r5, lsl 2                       |     r3 = r5 + (r5 << 2);
    0x0000240e lsl.w r8, r3, 3                               |     r8 = r3 << 3;
    0x00002412 add sb, r8                                    |     sb += r8;
    0x00002414 ldr.w r3, [sb, 0x18]                          |     r3 = *((sb + 0x18));
    0x00002416 adds r0, 0x18                                 |     r0 += 0x18;
                                                             |     if (r3 == 0) {
    0x00002418 cbnz r3, 0x242a                               |         
    0x0000241a ldr.w r3, [sl, 0x1c]                          |         r3 = *((sl + 0x1c));
    0x0000241e movs r1, 2                                    |         r1 = 2;
    0x00002420 str.w r1, [sb, 0x18]                          |         __asm ("str.w r1, [sb, 0x18]");
    0x00002424 adds r3, 1                                    |         r3++;
    0x00002426 str.w r3, [sl, 0x1c]                          |         __asm ("str.w r3, [sl, 0x1c]");
                                                             |     }
    0x0000242a ldr r3, [sp, 0x50]                            |     r3 = var_50h;
    0x0000242c cmp r4, r5                                    |     
    0x0000242e it ne                                         |     
                                                             |     if (r4 == r5) {
    0x00002430 orrne r3, r3, 1                               |         r3 |= 1;
                                                             |     }
    0x00002434 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x00002436 bne.w 0x2166                                  |         goto label_1;
                                                             |     }
    0x0000243a ldr r3, [sp, 0x38]                            |     r3 = var_38h;
    0x0000243c ldr r1, [sp, 0x30]                            |     r1 = var_30h;
    0x0000243e ldr r0, [sp, 0x20]                            |     r0 = var_20h;
    0x00002440 strd r7, r3, [sp, 0x10]                       |     __asm ("strd r7, r3, [var_14h]");
    0x00002444 str r1, [sp, 4]                               |     var_4h_2 = r1;
    0x00002446 ldr r3, [sp, 0x3c]                            |     r3 = var_3ch;
    0x00002448 ldr r1, [sp, 0x28]                            |     r1 = var_28h;
    0x0000244a strd r6, r3, [sp, 8]                          |     __asm ("strd r6, r3, [var_8h]");
    0x0000244e str r1, [sp]                                  |     *(sp) = r1;
    0x00002450 ldr r3, [sp, 0x64]                            |     r3 = var_64h;
    0x00002452 ldr r1, [sp, 0x2c]                            |     r1 = var_2ch;
    0x00002454 blx 0xd44                                     |     r0 = fcn_00000d44 ();
    0x00002458 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0000245a bne.w 0x2328                                  |         goto label_2;
                                                             |     }
    0x0000245e b 0x2166                                      |     goto label_1;
                                                             | label_15:
    0x00002460 ldr.w sb, [sl, 0x14]                          |     sb = *((sl + 0x14));
    0x00002464 mov r1, r5                                    |     r1 = r5;
    0x00002466 adds r0, r4, 2                                |     r0 = r4 + 2;
    0x00002468 str r3, [sp, 0x6c]                            |     var_6ch = r3;
    0x0000246a str r2, [sp, 0x34]                            |     var_34h = r2;
    0x0000246c subs r5, 1                                    |     r5--;
    0x0000246e bl 0x5bd4                                     |     fcn_00005bd4 (r0, r1);
    0x00002472 add.w r1, r1, r1, lsl 2                       |     r1 += (r1 << 2);
    0x00002476 cmp r4, r5                                    |     
    0x00002478 ldr r2, [sp, 0x34]                            |     r2 = var_34h;
    0x0000247a it lt                                         |     
                                                             |     if (r4 >= r5) {
    0x0000247c addlt r5, r4, 1                               |         r5 = r4 + 1;
                                                             |     }
    0x0000247e add.w r1, sb, r1, lsl 3                       |     r1 = sb + (r1 << 3);
    0x00002482 ldrsh.w r3, [r1, 0x26]                        |     r3 = *((r1 + 0x26));
    0x00002486 ldrsh.w r7, [r1, 0x24]                        |     r7 = *((r1 + 0x24));
    0x0000248a str r3, [sp, 0x38]                            |     var_38h = r3;
    0x0000248c ldr r3, [sp, 0x6c]                            |     r3 = var_6ch;
                                                             |     if (r4 < r5) {
    0x0000248e blt 0x23f8                                    |         goto label_3;
                                                             |     }
    0x00002490 ldr r5, [sp, 0x68]                            |     r5 = var_68h;
    0x00002492 b 0x23f8                                      |     goto label_3;
                                                             | label_8:
    0x00002494 blx 0xd08                                     |     fcn_00000d08 ();
    0x00002498 ldr r6, [pc, 0x380]                           |     r6 = *(0x281c);
    0x0000249a movs r1, r0                                   |     r1 = r0;
    0x0000249c lsls r4, r5, 2                                |     r4 = r5 << 2;
    0x0000249e movs r0, r0                                   |     
    0x000024a0 ldr r5, [pc, 0x330]                           |     r5 = *(0x27d4);
    0x000024a2 movs r1, r0                                   |     r1 = r0;
                                                             | }

[*] Function system used 1 times libgeometry.so