/*
 * This is a RANDOMLY GENERATED PROGRAM.
 *
 * Generator: csmith 2.2.0
 * Git version: bf42ffd
 * Options:   --no-volatiles --no-packed-struct --no-math64
 * Seed:      3993158628
 */

#include "csmith.h"


static long __undefined;

/* --- Struct/Union Declarations --- */
struct S0 {
   signed f0 : 2;
   signed f1 : 30;
   const unsigned f2 : 2;
   signed f3 : 15;
   unsigned f4 : 13;
   unsigned f5 : 2;
   signed f6 : 6;
   signed f7 : 19;
   signed f8 : 5;
};

union U1 {
   const int8_t  f0;
};

/* --- GLOBAL VARIABLES --- */
static int32_t g_2 = 0xDBC37078L;
static uint32_t g_24 = 1UL;
static int16_t g_36 = 1L;
static int32_t g_52 = 0L;
static int32_t g_53 = 0xB92BB776L;
static int32_t g_55 = 0xD870105CL;
static uint16_t g_72 = 0xB820L;
static int32_t *g_86 = &g_52;
static struct S0 g_109 = {1,-3768,1,145,49,0,-1,-585,0};
static uint8_t g_113 = 0xB8L;
static uint8_t g_114 = 0xE1L;
static int16_t g_126[4][6] = {{0x5BB1L,0x13A7L,0x5786L,0x89D4L,0x5786L,0x13A7L},{0xD5BCL,0x5BB1L,0x5786L,2L,0x8967L,0x89D4L},{0x4E36L,2L,0x13A7L,0x13A7L,2L,0x4E36L},{0x13A7L,2L,0x4E36L,0xF1A0L,0x8967L,0x5786L}};
static uint32_t g_141[2] = {1UL,1UL};
static int8_t g_143 = 1L;
static uint8_t g_144 = 0x18L;
static uint16_t *g_194[1] = {&g_72};
static int32_t g_215 = 3L;
static int32_t *g_214 = &g_215;
static int16_t g_217 = 0x0B9EL;
static int16_t *g_216 = &g_217;
static uint32_t g_234[6][6][7] = {{{4294967295UL,1UL,0xE50A6E4DL,0x7CBB9599L,0x4038AB73L,1UL,0x30275B19L},{0xEF103696L,4294967288UL,0xF9FCF56DL,4294967288UL,0xEF103696L,0UL,4UL},{0x4038AB73L,0x7CBB9599L,0xE50A6E4DL,1UL,4294967295UL,7UL,0xE50A6E4DL},{0UL,0xEF4BBCF4L,0UL,9UL,0UL,0xF9FCF56DL,0xF9FCF56DL},{0x30275B19L,0UL,0x7A5E963CL,0UL,0x30275B19L,0UL,0xE50A6E4DL},{0UL,9UL,0UL,0xEF4BBCF4L,0UL,0xF9FCF56DL,0xF01C7FA8L}},{{0xEEABF480L,0UL,0xB0A03C78L,0x3D45A5B2L,0x30275B19L,7UL,0xD95DDA20L},{0UL,0xEF4BBCF4L,1UL,0xEF4BBCF4L,0UL,0x9CA25930L,0xF01C7FA8L},{0x30275B19L,0x3D45A5B2L,0xB0A03C78L,0UL,0xEEABF480L,7UL,0xE50A6E4DL},{0UL,0xEF4BBCF4L,0UL,9UL,0UL,0xF9FCF56DL,0xF9FCF56DL},{0x30275B19L,0UL,0x7A5E963CL,0UL,0x30275B19L,0UL,0xE50A6E4DL},{0UL,9UL,0UL,0xEF4BBCF4L,0UL,0xF9FCF56DL,0xF01C7FA8L}},{{0xEEABF480L,0UL,0xB0A03C78L,0x3D45A5B2L,0x30275B19L,7UL,0xD95DDA20L},{0UL,0xEF4BBCF4L,1UL,0xEF4BBCF4L,0UL,0x9CA25930L,0xF01C7FA8L},{0x30275B19L,0x3D45A5B2L,0xB0A03C78L,0UL,0xEEABF480L,7UL,0xE50A6E4DL},{0UL,0xEF4BBCF4L,0UL,9UL,0UL,0xF9FCF56DL,0xF9FCF56DL},{0x30275B19L,0UL,0x7A5E963CL,0UL,0x30275B19L,0UL,0xE50A6E4DL},{0UL,9UL,0UL,0xEF4BBCF4L,0UL,0xF9FCF56DL,0xF01C7FA8L}},{{0xEEABF480L,0UL,0xB0A03C78L,0x3D45A5B2L,0x30275B19L,7UL,0xD95DDA20L},{0UL,0xEF4BBCF4L,1UL,0xEF4BBCF4L,0UL,0x9CA25930L,0xF01C7FA8L},{0x30275B19L,0x3D45A5B2L,0xB0A03C78L,0UL,0xEEABF480L,7UL,0xE50A6E4DL},{0UL,0xEF4BBCF4L,0UL,9UL,0UL,0xF9FCF56DL,0xF9FCF56DL},{0x30275B19L,0UL,0x7A5E963CL,0UL,0x30275B19L,0UL,0xE50A6E4DL},{0UL,9UL,0UL,0xEF4BBCF4L,0UL,0xF9FCF56DL,0xF01C7FA8L}},{{0xEEABF480L,0UL,0xB0A03C78L,0x3D45A5B2L,0x30275B19L,7UL,0xD95DDA20L},{0UL,0xEF4BBCF4L,1UL,0xEF4BBCF4L,0UL,0x9CA25930L,0xF01C7FA8L},{0x30275B19L,0x3D45A5B2L,0xB0A03C78L,0UL,0xEEABF480L,7UL,0xE50A6E4DL},{0UL,0xEF4BBCF4L,0UL,9UL,0UL,0xF9FCF56DL,0xF9FCF56DL},{0x30275B19L,0UL,0x7A5E963CL,0UL,0x30275B19L,0UL,0xE50A6E4DL},{0UL,9UL,0UL,0xEF4BBCF4L,0UL,0xF9FCF56DL,0xF01C7FA8L}},{{0x28C0AEB2L,0UL,0xFD89EE91L,0x495489C1L,0xD95DDA20L,0x177A3353L,0x7A5E963CL},{0xF9FCF56DL,4294967294UL,0x3E2A85B4L,4294967294UL,0xF9FCF56DL,4UL,0UL},{0xD95DDA20L,0x495489C1L,0xFD89EE91L,0UL,0x28C0AEB2L,0x177A3353L,0xB0A03C78L},{0x9CA25930L,4294967294UL,1UL,0xEF103696L,0xF9FCF56DL,1UL,1UL},{0xD95DDA20L,0UL,1UL,0UL,0xD95DDA20L,4294967295UL,0xB0A03C78L},{0xF9FCF56DL,0xEF103696L,1UL,4294967294UL,0x9CA25930L,1UL,0UL}}};
static uint32_t *g_252[2][6] = {{&g_141[1],(void*)0,&g_141[1],(void*)0,&g_141[1],(void*)0},{&g_141[1],(void*)0,&g_141[1],(void*)0,&g_141[1],(void*)0}};
static uint32_t g_312[2] = {0x15E444CFL,0x15E444CFL};
static const union U1 g_331 = {-8L};
static struct S0 g_350[9][8] = {{{-1,20557,0,-138,48,0,7,-279,4},{-0,-27047,1,59,12,0,3,510,2},{0,24814,0,172,41,1,5,583,-3},{1,12364,1,154,28,0,-0,-107,1},{0,24814,0,172,41,1,5,583,-3},{-0,-27047,1,59,12,0,3,510,2},{-1,20557,0,-138,48,0,7,-279,4},{-0,19189,1,60,64,1,1,97,2}},{{1,-6931,1,81,81,1,-2,483,0},{-1,-26584,0,-110,24,0,0,-318,3},{1,-10097,1,114,10,1,-4,152,3},{1,12364,1,154,28,0,-0,-107,1},{-1,20557,0,-138,48,0,7,-279,4},{-0,-28474,1,81,7,1,-7,16,2},{-1,32727,1,-65,83,1,4,-198,-0},{1,-10897,1,12,62,1,3,-592,2}},{{0,4827,1,-65,66,1,-3,-196,-3},{1,12364,1,154,28,0,-0,-107,1},{1,23006,1,51,25,1,-4,439,-4},{1,17086,1,-44,2,0,0,411,-4},{-1,20557,0,-138,48,0,7,-279,4},{1,17086,1,-44,2,0,0,411,-4},{1,23006,1,51,25,1,-4,439,-4},{1,12364,1,154,28,0,-0,-107,1}},{{1,-6931,1,81,81,1,-2,483,0},{-0,-27047,1,59,12,0,3,510,2},{0,4827,1,-65,66,1,-3,-196,-3},{1,-10897,1,12,62,1,3,-592,2},{0,24814,0,172,41,1,5,583,-3},{1,17086,1,-44,2,0,0,411,-4},{1,-6931,1,81,81,1,-2,483,0},{-0,19189,1,60,64,1,1,97,2}},{{-1,20557,0,-138,48,0,7,-279,4},{1,12364,1,154,28,0,-0,-107,1},{1,-10097,1,114,10,1,-4,152,3},{-1,-26584,0,-110,24,0,0,-318,3},{1,-6931,1,81,81,1,-2,483,0},{-0,-28474,1,81,7,1,-7,16,2},{1,-6931,1,81,81,1,-2,483,0},{-1,-26584,0,-110,24,0,0,-318,3}},{{0,4827,1,-65,66,1,-3,-196,-3},{-1,-26584,0,-110,24,0,0,-318,3},{0,4827,1,-65,66,1,-3,-196,-3},{1,17086,1,-44,2,0,0,411,-4},{-1,32727,1,-65,83,1,4,-198,-0},{-0,-27047,1,59,12,0,3,510,2},{1,23006,1,51,25,1,-4,439,-4},{-1,-26584,0,-110,24,0,0,-318,3}},{{-1,32727,1,-65,83,1,4,-198,-0},{-0,-27047,1,59,12,0,3,510,2},{1,23006,1,51,25,1,-4,439,-4},{-1,-26584,0,-110,24,0,0,-318,3},{0,24814,0,172,41,1,5,583,-3},{-0,19189,1,60,64,1,1,97,2},{-1,32727,1,-65,83,1,4,-198,-0},{-0,19189,1,60,64,1,1,97,2}},{{-1,32727,1,-65,83,1,4,-198,-0},{1,-10897,1,12,62,1,3,-592,2},{1,-10097,1,114,10,1,-4,152,3},{1,-10897,1,12,62,1,3,-592,2},{-1,32727,1,-65,83,1,4,-198,-0},{-0,-28474,1,81,7,1,-7,16,2},{-1,20557,0,-138,48,0,7,-279,4},{1,12364,1,154,28,0,-0,-107,1}},{{0,4827,1,-65,66,1,-3,-196,-3},{1,-10897,1,12,62,1,3,-592,2},{0,24814,0,172,41,1,5,583,-3},{1,17086,1,-44,2,0,0,411,-4},{1,-6931,1,81,81,1,-2,483,0},{-0,19189,1,60,64,1,1,97,2},{1,23006,1,51,25,1,-4,439,-4},{1,-10897,1,12,62,1,3,-592,2}}};
static uint16_t *g_351 = (void*)0;
static int16_t g_408 = 0x7620L;
static union U1 g_477 = {1L};
static int8_t *g_487 = &g_143;
static int8_t **g_486 = &g_487;
static const int32_t g_493 = 1L;
static int8_t g_543 = (-9L);
static uint8_t *g_555 = &g_144;
static uint8_t **g_554 = &g_555;
static uint16_t g_626 = 65526UL;
static const uint32_t g_664 = 1UL;
static const uint32_t g_666[1][9][4] = {{{4294967295UL,4294967293UL,4294967295UL,4294967293UL},{4294967295UL,4294967293UL,4294967295UL,4294967293UL},{4294967295UL,4294967293UL,4294967295UL,4294967293UL},{4294967295UL,4294967293UL,4294967295UL,4294967293UL},{4294967295UL,4294967293UL,4294967295UL,4294967293UL},{4294967295UL,4294967293UL,4294967295UL,4294967293UL},{4294967295UL,4294967293UL,4294967295UL,4294967293UL},{4294967295UL,4294967293UL,4294967295UL,4294967293UL},{4294967295UL,4294967293UL,4294967295UL,4294967293UL}}};
static uint8_t g_733 = 0UL;
static uint32_t g_776 = 4294967291UL;
static int32_t ** const g_786 = &g_214;
static int32_t ** const *g_785 = &g_786;
static int32_t ** const **g_784[2] = {&g_785,&g_785};
static uint16_t g_807 = 65535UL;
static int32_t *g_808 = (void*)0;
static int32_t g_812 = 0xAE392FB2L;
static union U1 g_824 = {0xC0L};
static int32_t g_825 = (-1L);
static int16_t g_891 = (-1L);
static uint32_t *g_967[10][9] = {{&g_234[2][0][1],&g_234[2][0][1],&g_141[0],&g_141[1],&g_141[0],&g_141[0],&g_141[1],&g_141[0],&g_234[2][0][1]},{&g_141[0],&g_234[4][3][3],&g_141[1],&g_234[3][1][4],&g_24,&g_141[0],&g_141[1],&g_234[2][0][1],&g_141[0]},{&g_24,&g_234[2][0][1],&g_234[2][0][1],&g_234[2][0][1],(void*)0,&g_234[2][0][1],&g_141[0],(void*)0,&g_234[4][3][3]},{&g_776,&g_234[3][1][4],&g_141[0],&g_141[1],&g_24,&g_234[2][0][1],&g_234[2][0][1],&g_234[2][0][1],(void*)0},{&g_234[3][1][4],&g_234[2][0][1],&g_24,&g_234[3][1][1],&g_234[3][1][1],&g_24,&g_234[2][0][1],&g_234[3][1][4],&g_141[0]},{&g_776,&g_24,&g_234[2][0][1],&g_24,&g_234[3][1][1],&g_141[0],&g_141[1],&g_141[1],&g_141[1]},{&g_234[4][3][3],&g_141[0],&g_24,&g_234[3][1][4],&g_24,&g_141[0],&g_234[4][3][3],&g_141[0],&g_141[0]},{&g_141[0],&g_234[2][0][1],&g_234[4][3][3],&g_234[3][1][4],&g_141[1],&g_234[3][1][1],(void*)0,&g_24,(void*)0},{(void*)0,&g_776,&g_24,&g_24,&g_776,(void*)0,&g_141[0],&g_141[0],&g_234[4][3][3]},{&g_24,&g_234[2][0][1],&g_24,&g_234[3][1][1],&g_141[0],&g_141[1],&g_141[1],&g_141[1],&g_141[1]}};
static int32_t * const *g_1021 = &g_214;
static int32_t * const **g_1020 = &g_1021;
static union U1 **g_1028 = (void*)0;
static int8_t g_1058 = 0x12L;
static int32_t ***g_1078 = (void*)0;
static int8_t ** const g_1095 = (void*)0;
static int8_t ** const *g_1094 = &g_1095;
static const union U1 g_1177 = {-3L};
static const int8_t *g_1218 = &g_1177.f0;
static const int8_t **g_1217 = &g_1218;


/* --- FORWARD DECLARATIONS --- */
static int16_t  func_1(void);
static int32_t  func_11(int32_t * p_12, uint32_t  p_13, const int32_t  p_14, int32_t  p_15, int32_t * p_16);
static uint32_t  func_20(uint32_t  p_21);
static const uint8_t  func_31(uint8_t  p_32);
static int32_t * func_40(uint32_t  p_41, int32_t * p_42, int16_t * p_43, int32_t  p_44, uint32_t * p_45);
static union U1  func_46(int8_t  p_47);
static int32_t  func_48(int32_t * p_49);
static uint16_t  func_97(uint32_t  p_98);
static int32_t * func_99(uint32_t * const  p_100, uint8_t  p_101, uint8_t  p_102, const int8_t  p_103);
static uint8_t  func_104(const struct S0  p_105, int16_t  p_106, int32_t  p_107);


/* --- FUNCTIONS --- */
/* ------------------------------------------ */
/* 
 * reads : g_2 g_24 g_36 g_53 g_86 g_52 g_109 g_114 g_72 g_144 g_55 g_126 g_141 g_214 g_216 g_215 g_217 g_234 g_312 g_331 g_350 g_351 g_143 g_408 g_486 g_493 g_487 g_543 g_113 g_554 g_555 g_477 g_626 g_784 g_666 g_824 g_825 g_785 g_786 g_891 g_733 g_967 g_1020 g_1028 g_807 g_1058 g_1078 g_1021
 * writes: g_2 g_24 g_36 g_52 g_53 g_55 g_86 g_113 g_126 g_109.f3 g_114 g_141 g_143 g_144 g_72 g_194 g_215 g_252 g_217 g_312 g_234 g_486 g_350.f8 g_214 g_351 g_626 g_776 g_808 g_408 g_733 g_1020 g_807 g_825 g_1078 g_1094 g_1058 g_967 g_543
 */
static int16_t  func_1(void)
{ /* block id: 0 */
    int32_t l_8 = (-1L);
    int32_t *l_19 = (void*)0;
    uint32_t l_39 = 18446744073709551615UL;
    if (g_2)
    { /* block id: 1 */
        uint8_t l_3 = 0UL;
        int32_t l_22 = 0xB0420410L;
        uint32_t *l_23 = &g_24;
        int16_t *l_35 = &g_36;
        int32_t *l_1232 = &g_52;
        l_3--;
        for (l_3 = 2; (l_3 <= 56); l_3 = safe_add_func_int8_t_s_s(l_3, 1))
        { /* block id: 5 */
            int16_t l_9[2][5][10] = {{{0x4E76L,0xFA83L,0x1F6FL,0xCA36L,0xCA36L,0x1F6FL,0xFA83L,0x4E76L,(-1L),0xC1D1L},{0x2278L,0xF72BL,0L,0xDB82L,8L,0x1F6FL,0xEE5AL,0x2278L,0xDB82L,0xCA36L},{0x4E76L,0x80DBL,0L,8L,0x391CL,0x2278L,2L,0x4E76L,1L,0xCA36L},{0L,0xD2B5L,0x1F6FL,0xC1D1L,8L,0L,2L,0L,8L,0xC1D1L},{0x9F7CL,0x80DBL,0x9F7CL,0xC1D1L,0xCA36L,0L,0xEE5AL,0x9F7CL,1L,(-1L)}},{{0x9F7CL,0xF72BL,0x4E76L,8L,1L,0L,0xFA83L,0x9F7CL,0xDB82L,1L},{0L,0xFA83L,0x9F7CL,0xDB82L,1L,0x2278L,0x80DBL,0L,(-1L),(-1L)},{0x4E76L,0xFA83L,0x1F6FL,0xCA36L,0xCA36L,0x1F6FL,0xFA83L,0x4E76L,(-1L),0xC1D1L},{0x2278L,0xF72BL,0L,0xDB82L,8L,0x1F6FL,0xEE5AL,0x2278L,0xDB82L,0xCA36L},{0x4E76L,0x80DBL,0L,8L,0x391CL,0x2278L,2L,0x4E76L,1L,0xCA36L}}};
            int32_t *l_10 = &g_2;
            int i, j, k;
            (*l_10) |= (l_9[0][1][8] = l_8);
        }
        (*l_1232) = func_11(&l_8, (safe_rshift_func_uint16_t_u_s((((void*)0 == l_19) , (func_20((++(*l_23))) , (safe_rshift_func_uint8_t_u_s(func_31(((safe_rshift_func_uint16_t_u_s((0xFA3CL & g_2), (((!((*l_35) ^= g_24)) <= g_24) || (safe_sub_func_int32_t_s_s((l_22 <= l_39), 0xE948ECA1L))))) , 1UL)), g_109.f2)))), g_666[0][0][3])), l_22, l_22, &l_22);
    }
    else
    { /* block id: 556 */
        int16_t l_1233 = 0x9A09L;
        int8_t *l_1240 = &g_1058;
        const uint8_t l_1241 = 1UL;
        union U1 l_1242 = {9L};
        (*g_214) = ((g_477 , l_1233) ^ (((safe_add_func_int16_t_s_s((safe_sub_func_uint8_t_u_u((((((!((safe_mul_func_int8_t_s_s(((*l_1240) = ((*g_487) = 4L)), ((-1L) & (-7L)))) & ((((l_1241 < (l_1241 | l_1241)) , (((l_1242 , l_1233) < l_1241) & l_39)) > l_1242.f0) | 6UL))) , l_1233) != (*g_86)) == 0x7FL) != (*g_555)), (*g_555))), (-1L))) , l_39) <= (**g_1021)));
        (**g_786) &= 0x557529FFL;
    }
    return (*g_216);
}


/* ------------------------------------------ */
/* 
 * reads : g_216 g_52 g_824 g_555 g_144 g_141 g_825 g_487 g_217 g_785 g_786 g_214 g_331 g_554 g_143 g_234 g_626 g_891 g_733 g_114 g_486 g_312 g_967 g_55 g_477 g_1020 g_1028 g_807 g_1058 g_408 g_1078 g_215 g_350.f6 g_72 g_113
 * writes: g_72 g_52 g_114 g_217 g_808 g_126 g_143 g_214 g_408 g_234 g_144 g_626 g_733 g_351 g_141 g_252 g_113 g_1020 g_807 g_776 g_55 g_24 g_825 g_1078 g_1094 g_1058 g_215 g_2 g_967 g_543
 */
static int32_t  func_11(int32_t * p_12, uint32_t  p_13, const int32_t  p_14, int32_t  p_15, int32_t * p_16)
{ /* block id: 328 */
    int32_t *l_794 = &g_55;
    uint32_t l_821 = 0UL;
    const uint32_t *l_910 = (void*)0;
    const int8_t *l_915 = &g_477.f0;
    uint32_t **l_968 = &g_252[0][5];
    int16_t l_969 = 0L;
    struct S0 l_988[8] = {{-1,2956,0,-52,85,0,1,513,4},{-1,747,0,116,79,1,2,-456,1},{-1,2956,0,-52,85,0,1,513,4},{-1,747,0,116,79,1,2,-456,1},{-1,2956,0,-52,85,0,1,513,4},{-1,747,0,116,79,1,2,-456,1},{-1,2956,0,-52,85,0,1,513,4},{-1,747,0,116,79,1,2,-456,1}};
    uint8_t **l_992[6] = {&g_555,&g_555,&g_555,&g_555,&g_555,&g_555};
    uint32_t l_1018 = 1UL;
    int32_t l_1033[10] = {(-5L),0x05CEC50EL,(-5L),0x05CEC50EL,(-5L),0x05CEC50EL,(-5L),0x05CEC50EL,(-5L),0x05CEC50EL};
    int32_t l_1163[10];
    int32_t l_1220 = 9L;
    int32_t l_1229 = 0x0A906A68L;
    uint32_t l_1230[8][4] = {{0x1199E2CDL,0xCCF4C89AL,5UL,0UL},{0x1199E2CDL,0xE2EEF004L,0UL,0UL},{0xCCF4C89AL,0xCCF4C89AL,0x4DCCF4F6L,0xE2EEF004L},{0xE2EEF004L,0x1199E2CDL,0x4DCCF4F6L,0x1199E2CDL},{0xCCF4C89AL,5UL,0UL,0x4DCCF4F6L},{0x1199E2CDL,5UL,5UL,0x1199E2CDL},{5UL,0x1199E2CDL,0xCCF4C89AL,0xE2EEF004L},{5UL,0xCCF4C89AL,5UL,0UL}};
    uint16_t **l_1231[2];
    int i, j;
    for (i = 0; i < 10; i++)
        l_1163[i] = 0x1BA9B6D4L;
    for (i = 0; i < 2; i++)
        l_1231[i] = &g_194[0];
lbl_1113:
    for (g_72 = (-30); (g_72 < 11); g_72 = safe_add_func_uint16_t_u_u(g_72, 8))
    { /* block id: 331 */
        int32_t *l_793 = &g_52;
        int32_t *l_815 = &g_812;
        uint32_t l_889 = 18446744073709551615UL;
        uint16_t *l_928 = &g_626;
        int32_t l_956 = 0x322A5631L;
        uint32_t l_957 = 0x0E4C1742L;
        for (g_52 = 0; (g_52 == (-15)); --g_52)
        { /* block id: 334 */
            int32_t l_792 = 0x51FDD8C4L;
            (*p_12) &= l_792;
        }
        l_794 = l_793;
        for (g_114 = 0; (g_114 == 36); ++g_114)
        { /* block id: 340 */
            uint16_t * const l_806 = &g_807;
            uint16_t * const *l_805 = &l_806;
            int32_t l_816 = 1L;
            uint32_t **l_831 = &g_252[1][0];
            for (g_52 = (-18); (g_52 == (-27)); g_52 = safe_sub_func_int16_t_s_s(g_52, 7))
            { /* block id: 343 */
                uint16_t **l_803 = &g_351;
                uint16_t * const **l_804 = (void*)0;
                int32_t **l_809 = (void*)0;
                int32_t *l_811 = &g_812;
                int32_t **l_810 = &l_811;
                int32_t *l_814 = &g_812;
                int32_t **l_813[9][9][3] = {{{&l_814,(void*)0,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,(void*)0},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,(void*)0},{&l_814,&l_814,&l_814},{&l_814,&l_814,(void*)0}},{{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{(void*)0,&l_814,&l_814},{(void*)0,&l_814,&l_814},{&l_814,&l_814,&l_814},{(void*)0,(void*)0,&l_814},{(void*)0,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814}},{{&l_814,&l_814,(void*)0},{&l_814,&l_814,&l_814},{&l_814,&l_814,(void*)0},{&l_814,(void*)0,&l_814},{&l_814,&l_814,&l_814},{&l_814,(void*)0,&l_814},{&l_814,&l_814,(void*)0},{(void*)0,&l_814,&l_814},{(void*)0,&l_814,&l_814}},{{&l_814,&l_814,&l_814},{(void*)0,&l_814,&l_814},{(void*)0,(void*)0,(void*)0},{&l_814,&l_814,&l_814},{&l_814,(void*)0,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,(void*)0}},{{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,(void*)0,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,(void*)0},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,(void*)0}},{{&l_814,&l_814,&l_814},{&l_814,&l_814,(void*)0},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{(void*)0,&l_814,&l_814},{(void*)0,&l_814,&l_814},{&l_814,&l_814,&l_814},{(void*)0,(void*)0,&l_814},{(void*)0,(void*)0,&l_814}},{{&l_814,&l_814,&l_814},{(void*)0,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{(void*)0,(void*)0,(void*)0},{&l_814,&l_814,(void*)0}},{{&l_814,(void*)0,&l_814},{&l_814,&l_814,(void*)0},{&l_814,(void*)0,(void*)0},{&l_814,&l_814,&l_814},{(void*)0,(void*)0,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,&l_814,&l_814}},{{&l_814,&l_814,&l_814},{(void*)0,&l_814,&l_814},{&l_814,&l_814,&l_814},{&l_814,(void*)0,(void*)0},{&l_814,&l_814,(void*)0},{&l_814,(void*)0,&l_814},{&l_814,&l_814,(void*)0},{&l_814,&l_814,(void*)0},{&l_814,&l_814,&l_814}}};
                int16_t *l_822 = (void*)0;
                int16_t *l_823[3][4] = {{(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,(void*)0}};
                int32_t l_826[6][10][1] = {{{7L},{0x94DFE73AL},{1L},{(-1L)},{2L},{0x0C09348AL},{2L},{(-1L)},{1L},{0x94DFE73AL}},{{7L},{0xCD063AC6L},{0x9A614DC4L},{0xCD063AC6L},{7L},{0x94DFE73AL},{1L},{(-1L)},{2L},{0x0C09348AL}},{{2L},{(-1L)},{1L},{0x94DFE73AL},{7L},{0xCD063AC6L},{0x9A614DC4L},{0xCD063AC6L},{7L},{0x94DFE73AL}},{{1L},{(-1L)},{2L},{0x0C09348AL},{2L},{(-1L)},{1L},{0x94DFE73AL},{7L},{0xCD063AC6L}},{{0x9A614DC4L},{0xCD063AC6L},{7L},{0x94DFE73AL},{1L},{(-1L)},{2L},{0x0C09348AL},{2L},{(-1L)}},{{1L},{0x94DFE73AL},{7L},{0xCD063AC6L},{0x9A614DC4L},{0xCD063AC6L},{7L},{0x94DFE73AL},{1L},{(-1L)}}};
                int i, j, k;
                (*p_16) &= (((*g_487) = (safe_sub_func_int8_t_s_s((p_15 , (((((safe_add_func_int16_t_s_s(((*g_216) = (l_803 != (l_805 = (void*)0))), ((((g_126[2][2] = ((((!(((l_815 = ((*l_810) = (g_808 = (void*)0))) != (void*)0) == (~1L))) != l_816) | (safe_add_func_int8_t_s_s(((safe_sub_func_int32_t_s_s((((p_15 == 1L) == (*l_793)) >= (*l_793)), l_821)) >= l_816), p_14))) | p_14)) , g_824) , (*g_555)) != (*l_793)))) , 0x04B39DE0L) ^ p_15) ^ g_141[1]) || g_825)), (*l_794)))) > l_826[1][1][0]);
            }
            (*l_793) = (safe_rshift_func_int16_t_s_u((*g_216), (safe_mod_func_uint8_t_u_u(((void*)0 != l_831), ((*l_794) & p_13)))));
            if ((*p_16))
            { /* block id: 354 */
                int32_t **l_832 = (void*)0;
                int32_t **l_833[1][10][2] = {{{&g_86,&g_86},{&l_794,&g_86},{&g_86,&l_794},{&l_793,&l_793},{&l_794,&l_793},{&l_793,&l_794},{&l_793,&l_793},{&l_794,&l_793},{&l_793,&l_794},{&g_86,&g_86}}};
                int i, j, k;
                (*g_786) = (**g_785);
                p_12 = ((**g_785) = &p_15);
            }
            else
            { /* block id: 358 */
                uint32_t l_834 = 0x597229EDL;
                ++l_834;
                (**g_785) = l_793;
                if ((*l_794))
                    continue;
            }
        }
        for (g_143 = 20; (g_143 >= 19); g_143 = safe_sub_func_int8_t_s_s(g_143, 3))
        { /* block id: 366 */
            int8_t *l_858[7] = {&g_543,&g_543,&g_543,&g_543,&g_543,&g_543,&g_543};
            const int32_t l_859 = 0x8F3A324DL;
            int8_t l_860 = 3L;
            union U1 *l_863 = (void*)0;
            int32_t l_868 = 0x4157F9B0L;
            int16_t *l_919[10];
            uint32_t *l_962 = &g_141[1];
            int i;
            for (i = 0; i < 10; i++)
                l_919[i] = &g_126[1][4];
            (**g_785) = (void*)0;
            if (((safe_div_func_int8_t_s_s((safe_mod_func_uint32_t_u_u((((((*g_216) <= (safe_mul_func_uint8_t_u_u(((g_331 , (**g_554)) , (safe_sub_func_int8_t_s_s((safe_unary_minus_func_int8_t_s(((safe_sub_func_uint32_t_u_u((safe_mod_func_uint32_t_u_u((+p_15), ((0L > (safe_sub_func_int8_t_s_s(((*l_793) = (safe_sub_func_uint8_t_u_u((safe_add_func_int16_t_s_s((g_408 = (*g_216)), (&g_808 != &g_808))), p_14))), p_14))) ^ (-1L)))), l_859)) == p_15))), (*g_487)))), p_15))) , 2L) == l_859) >= l_860), p_13)), 0x22L)) & (*g_216)))
            { /* block id: 370 */
                union U1 *l_862 = &g_477;
                union U1 **l_861 = &l_862;
                uint32_t *l_869 = &g_234[2][0][1];
                int32_t l_876 = (-1L);
                uint32_t *l_888[4][6] = {{&g_141[1],&g_141[1],(void*)0,&g_141[1],&g_141[1],(void*)0},{&g_141[1],&g_141[1],(void*)0,&g_141[1],&g_141[1],&g_141[1]},{&g_141[1],&g_141[1],&g_141[1],&g_141[1],&g_141[1],&g_141[1]},{&g_141[1],&g_141[1],&g_141[1],&g_141[1],&g_141[1],&g_141[1]}};
                uint16_t *l_890 = &g_626;
                uint32_t l_896 = 0x1B4D8A09L;
                uint8_t *l_899 = &g_733;
                uint8_t *l_904 = (void*)0;
                uint8_t *l_905 = &g_114;
                const uint32_t *l_909 = &g_666[0][5][1];
                const uint32_t **l_908[2];
                const int8_t **l_916 = &l_915;
                const int8_t *l_918 = &g_477.f0;
                const int8_t **l_917 = &l_918;
                int i, j;
                for (i = 0; i < 2; i++)
                    l_908[i] = &l_909;
                (*l_794) = ((((l_863 = ((*l_861) = (void*)0)) == ((((safe_rshift_func_uint8_t_u_u((((*l_794) || (safe_unary_minus_func_uint8_t_u(((safe_unary_minus_func_int32_t_s((-1L))) <= 0xC8L)))) != (((*l_890) |= ((((++(*l_869)) >= ((safe_div_func_int32_t_s_s((safe_lshift_func_int8_t_s_u((l_876 || (((safe_add_func_uint8_t_u_u((safe_mul_func_uint8_t_u_u(((**g_554) = (*g_555)), (*g_487))), ((safe_mul_func_uint8_t_u_u(((safe_unary_minus_func_uint32_t_u((safe_add_func_uint32_t_u_u((safe_mod_func_uint8_t_u_u(l_876, (((((l_889 = (0xEDF1L != 0xC34DL)) , (void*)0) != (void*)0) >= (*p_16)) , p_14))), p_15)))) , (*l_794)), 0xE3L)) < 0x71L))) ^ l_876) != (*l_793))), (*l_794))), (*p_12))) > 0x7A44L)) > (*g_216)) != 3UL)) , p_13)), 6)) > g_891) , 0x39L) , (void*)0)) , p_15) ^ 65534UL);
                (*p_12) |= (((*l_861) != (((l_868 ^= ((safe_sub_func_uint8_t_u_u(((*g_555) = (l_896 == 0L)), (safe_mul_func_int16_t_s_s((0xC16CF829L != (((*l_899)--) < (safe_div_func_uint16_t_u_u((((((*l_869) = p_14) > (*p_16)) == ((((*g_487) > ((*l_905)--)) , &l_896) != (l_910 = p_16))) && (-1L)), (*g_216))))), (*g_216))))) , p_14)) && p_13) , &g_331)) || 0xAD58L);
                if ((*l_793))
                    break;
                (*p_16) &= ((p_13 >= (safe_mod_func_int32_t_s_s((0xCBE4L >= ((*g_555) , (*g_216))), 1UL))) >= (safe_sub_func_int32_t_s_s((*p_12), ((((((*l_917) = ((*l_916) = l_915)) != (void*)0) , l_919[1]) != l_890) == p_14))));
            }
            else
            { /* block id: 389 */
                uint16_t **l_929 = &g_351;
                int32_t l_930 = 0x94F847F7L;
                struct S0 l_954 = {0,-17641,1,-5,1,1,-0,-701,-1};
                int32_t l_955[6][2] = {{2L,2L},{0xABC97F79L,2L},{2L,0xABC97F79L},{2L,2L},{0xABC97F79L,2L},{2L,0xABC97F79L}};
                int i, j;
                l_868 ^= ((safe_div_func_uint16_t_u_u((((*l_793) = (((-1L) || (safe_rshift_func_uint8_t_u_u((safe_sub_func_int16_t_s_s((safe_div_func_int16_t_s_s((((*l_929) = l_928) == ((((l_930 == ((safe_rshift_func_int16_t_s_s((safe_unary_minus_func_uint16_t_u((safe_mod_func_int8_t_s_s((((*g_216) = ((void*)0 == &g_626)) & ((!((((l_930 >= (safe_add_func_uint16_t_u_u(((safe_sub_func_uint32_t_u_u((safe_mul_func_int8_t_s_s((safe_sub_func_uint8_t_u_u((((*l_794) < ((safe_div_func_uint16_t_u_u(((safe_div_func_uint32_t_u_u((safe_lshift_func_int8_t_s_s((((l_957 |= ((*p_12) |= ((l_954.f6 = (l_956 |= (l_955[5][0] ^= (safe_add_func_int32_t_s_s((safe_mod_func_int32_t_s_s(((l_954 , 65527UL) < 0x3CB0L), l_954.f7)), 0x40492926L))))) | 0x30L))) >= 0x67C755EDL) < (*l_794)), 5)), (*p_16))) , p_13), 0xE718L)) , l_859)) && (*g_555)), 0x15L)), (**g_486))), 0xF838E5DEL)) && 0x0FL), 0xA8E8L))) != 0x32L) == 1UL) & p_14)) == p_14)), (*g_487))))), 6)) ^ (*g_487))) | p_13) < 1L) , &g_72)), 0x370CL)), (-1L))), l_954.f1))) <= l_859)) , p_14), g_312[1])) && 0x4B9B8319L);
                if ((*p_12))
                    continue;
            }
            (*p_12) ^= ((**g_486) || (((safe_mod_func_int32_t_s_s((*p_16), (--(*l_962)))) == ((**g_554) ^ 0xB0L)) == p_14));
            if ((*l_794))
                continue;
        }
    }
    if ((((safe_add_func_int16_t_s_s((((*l_968) = g_967[4][1]) == p_16), (0x5FL >= ((((+(l_969 && (+((**g_486) &= ((*l_794) & (safe_rshift_func_int8_t_s_s((p_13 < (safe_rshift_func_int16_t_s_s(0x58D4L, 9))), 2))))))) > ((-6L) && ((*l_794) , 0x3108L))) < (*l_794)) && 0x9B63F63FL)))) , g_477) , 0xF4F5C698L))
    { /* block id: 408 */
        int32_t l_993[7][4][7] = {{{(-1L),0x669ADB8DL,(-1L),0x768A8FF2L,(-9L),0x5618A3D9L,(-1L)},{(-1L),1L,1L,(-1L),0L,0x0CE0602CL,(-8L)},{0xBDF91091L,(-9L),0L,0L,(-9L),0xBDF91091L,(-1L)},{(-3L),0x65E176B1L,0xD0E18EF1L,(-1L),7L,0xD0E18EF1L,(-1L)}},{{(-9L),(-1L),0x63B56E82L,(-9L),0L,0xA0C6014DL,(-9L)},{0x0CE0602CL,0x65E176B1L,0x8B067229L,0L,(-8L),1L,1L},{5L,(-9L),0x5618A3D9L,(-9L),5L,(-1L),(-1L)},{0x3CB930F8L,1L,0L,7L,(-3L),1L,0x3CB930F8L}},{{0L,0x669ADB8DL,(-1L),0L,(-1L),0xDDF01AC2L,0x6F8CD22DL},{0x3CB930F8L,7L,(-1L),(-8L),0x32492198L,0xD0E18EF1L,0x32492198L},{5L,0x6F8CD22DL,0x6F8CD22DL,5L,0xDDF01AC2L,0L,0x768A8FF2L},{0x0CE0602CL,0x45BD0F4FL,0xBCF91C2CL,(-3L),0x45BD0F4FL,(-8L),1L}},{{(-9L),0xF839E9FAL,0x5618A3D9L,(-1L),0L,0x5618A3D9L,0x768A8FF2L},{(-3L),1L,0x0CE0602CL,0x32492198L,(-3L),(-3L),0x32492198L},{0xBDF91091L,5L,0xBDF91091L,0xDDF01AC2L,0xF839E9FAL,6L,0x6F8CD22DL},{(-1L),(-3L),0xD0E18EF1L,0x45BD0F4FL,0x65E176B1L,(-1L),0x3CB930F8L}},{{(-1L),0x6F8CD22DL,0xA0C6014DL,0L,0L,6L,(-1L)},{0x8B067229L,(-1L),1L,(-3L),0x3CB930F8L,(-3L),1L},{0L,0L,(-1L),0xF839E9FAL,(-1L),0x5618A3D9L,(-9L)},{0x65E176B1L,1L,1L,0x65E176B1L,0L,(-8L),(-1L)}},{{0xBDF91091L,(-1L),0xDDF01AC2L,0L,(-1L),0L,(-1L)},{0x45BD0F4FL,(-8L),0xD0E18EF1L,0x3CB930F8L,0x3CB930F8L,0xD0E18EF1L,(-8L)},{(-9L),(-1L),0L,(-1L),0L,0xDDF01AC2L,(-1L)},{0x0CE0602CL,(-1L),0L,1L,1L,0xD0E18EF1L,1L}},{{(-1L),0L,(-1L),0xDDF01AC2L,0x6F8CD22DL,0x669ADB8DL,0x63B56E82L},{(-8L),1L,0x9EE64B86L,0x8B067229L,0x9EE64B86L,1L,(-8L)},{0L,0xBDF91091L,(-1L),0L,0x63B56E82L,6L,0x2F367A28L},{0x0CE0602CL,0x8B067229L,0x3CB930F8L,1L,(-3L),7L,0L}}};
        int8_t l_1011 = (-1L);
        int32_t l_1019 = 0L;
        int32_t ***l_1023 = (void*)0;
        union U1 *l_1027 = &g_824;
        union U1 ** const l_1026 = &l_1027;
        int i, j, k;
        for (g_113 = 0; (g_113 >= 15); g_113++)
        { /* block id: 411 */
            uint8_t **l_983 = &g_555;
            int32_t l_987 = (-9L);
        }
        (*p_16) = (((safe_rshift_func_uint16_t_u_u(((safe_div_func_int32_t_s_s((*l_794), (((*g_555) = (safe_sub_func_int32_t_s_s(0x9FC66077L, 1UL))) , ((*p_12) = l_1011)))) == ((safe_mul_func_int16_t_s_s((*g_216), (((*l_794) ^ 4294967295UL) & ((**g_486) = (((0xFFF2L == ((l_993[0][1][0] = (safe_mul_func_uint8_t_u_u((safe_lshift_func_int8_t_s_s(l_993[0][1][0], 1)), l_1018))) && (-9L))) > 0UL) , p_14))))) <= p_14)), 13)) < (-8L)) , (*l_794));
        for (l_1011 = 0; (l_1011 <= 1); l_1011 += 1)
        { /* block id: 437 */
            int32_t * const ***l_1022 = &g_1020;
            int i;
            if (l_1019)
                break;
            (*p_16) |= (((*l_794) , l_993[6][1][0]) && (1L || (((*g_555) = ((((*l_1022) = g_1020) == l_1023) ^ (safe_lshift_func_uint16_t_u_u(((((*l_794) , l_1026) != g_1028) ^ p_14), 0)))) < p_15)));
            l_1033[5] = (safe_mod_func_int8_t_s_s((-6L), (++(*g_555))));
            for (g_114 = 0; (g_114 <= 1); g_114 += 1)
            { /* block id: 446 */
                for (l_821 = 0; (l_821 <= 1); l_821 += 1)
                { /* block id: 449 */
                    uint16_t *l_1036 = (void*)0;
                    uint16_t *l_1037 = &g_807;
                    int32_t l_1040[3][4];
                    int i, j;
                    for (i = 0; i < 3; i++)
                    {
                        for (j = 0; j < 4; j++)
                            l_1040[i][j] = 0x5DAFB0C6L;
                    }
                    (*p_16) = ((safe_mul_func_int16_t_s_s(0xA4FBL, (*g_216))) , (((++(*l_1037)) | l_1040[0][1]) , (*p_12)));
                    if ((*p_16))
                        continue;
                }
            }
        }
    }
    else
    { /* block id: 456 */
        int16_t l_1043 = 0x49EFL;
        uint32_t *l_1048 = &g_776;
        uint32_t *l_1057 = &g_24;
        int32_t l_1059 = 0x6FF24338L;
        int32_t l_1068 = 0x5AC0A6A1L;
        int8_t l_1069[9];
        int32_t l_1070[8][1][4] = {{{0x7F392DC0L,0x199421BFL,0xC16261B1L,1L}},{{0xC16261B1L,1L,0xC16261B1L,0x199421BFL}},{{0x7F392DC0L,1L,0xD4EC7BF7L,1L}},{{0x7F392DC0L,0x199421BFL,0xC16261B1L,1L}},{{0xC16261B1L,1L,0xC16261B1L,0x199421BFL}},{{0x7F392DC0L,1L,0xD4EC7BF7L,1L}},{{0x7F392DC0L,0x199421BFL,0xC16261B1L,1L}},{{0xC16261B1L,1L,0xC16261B1L,0x199421BFL}}};
        uint32_t l_1071 = 1UL;
        const union U1 *l_1176 = &g_1177;
        union U1 *l_1179[8][7] = {{&g_824,&g_477,(void*)0,&g_477,&g_824,&g_477,(void*)0},{&g_477,&g_477,(void*)0,&g_824,(void*)0,(void*)0,&g_824},{(void*)0,&g_824,(void*)0,&g_477,(void*)0,&g_824,(void*)0},{&g_477,&g_824,&g_824,&g_477,(void*)0,(void*)0,(void*)0},{&g_824,&g_824,(void*)0,&g_824,&g_824,&g_824,(void*)0},{(void*)0,&g_477,&g_824,&g_824,&g_477,(void*)0,(void*)0},{(void*)0,&g_477,(void*)0,&g_824,(void*)0,&g_477,(void*)0},{(void*)0,&g_824,(void*)0,&g_477,&g_477,(void*)0,&g_824}};
        uint16_t **l_1182 = &g_351;
        uint16_t ***l_1181 = &l_1182;
        struct S0 l_1185 = {-0,1627,0,19,60,1,5,363,-1};
        int i, j, k;
        for (i = 0; i < 9; i++)
            l_1069[i] = (-8L);
        l_1059 |= (((safe_lshift_func_int8_t_s_s((((p_15 ^ ((*g_487) = (l_1043 ^ ((*l_794) = ((p_13 | (*l_794)) || ((*l_1048) = (((*g_555)--) , ((safe_rshift_func_int16_t_s_s((*l_794), 4)) > (*l_794))))))))) ^ (safe_add_func_int32_t_s_s(((*p_16) = l_1033[5]), ((*l_1057) = (!(safe_mul_func_int16_t_s_s(((((safe_sub_func_int16_t_s_s(l_1043, (safe_add_func_int8_t_s_s(p_13, p_14)))) && p_15) > p_14) , (*g_216)), p_14))))))) == l_1043), g_1058)) >= l_1043) & (*g_216));
        for (g_825 = 22; (g_825 > (-1)); g_825 = safe_sub_func_uint8_t_u_u(g_825, 7))
        { /* block id: 466 */
            int32_t *l_1062 = &g_2;
            int32_t *l_1063 = &g_215;
            int32_t l_1064 = 0x85D314CCL;
            int32_t *l_1065 = &g_2;
            int32_t *l_1066 = &l_1059;
            int32_t *l_1067[1][1][1];
            int32_t **l_1087 = &g_214;
            int32_t *** const l_1086 = &l_1087;
            uint32_t l_1170 = 0x1133297AL;
            const union U1 *l_1175 = &g_331;
            int i, j, k;
            for (i = 0; i < 1; i++)
            {
                for (j = 0; j < 1; j++)
                {
                    for (k = 0; k < 1; k++)
                        l_1067[i][j][k] = &g_2;
                }
            }
            --l_1071;
            for (g_408 = 1; (g_408 >= 0); g_408 -= 1)
            { /* block id: 470 */
                const int32_t l_1099 = 0x5235A3F0L;
                int32_t l_1134 = 8L;
                int16_t **l_1153 = &g_216;
                int32_t l_1162[6];
                int32_t l_1164 = 8L;
                int i;
                for (i = 0; i < 6; i++)
                    l_1162[i] = 0x6B185421L;
                if ((safe_mod_func_uint32_t_u_u(1UL, g_141[g_408])))
                { /* block id: 471 */
                    uint16_t l_1096 = 65535UL;
                    for (g_733 = 0; (g_733 <= 1); g_733 += 1)
                    { /* block id: 474 */
                        int32_t ****l_1079 = &g_1078;
                        int8_t ** const *l_1093 = &g_486;
                        int i, j;
                        (*l_1066) = (safe_sub_func_uint8_t_u_u((((*l_1079) = g_1078) != (((safe_mod_func_uint32_t_u_u(4294967292UL, (safe_lshift_func_uint16_t_u_s(p_14, (*l_794))))) > (safe_mod_func_int16_t_s_s((*g_216), 1L))) , l_1086)), ((((safe_rshift_func_int8_t_s_u((safe_unary_minus_func_uint32_t_u(((0x73L <= (safe_rshift_func_uint8_t_u_s(((g_1094 = l_1093) == (void*)0), g_141[g_408]))) , (*l_794)))), p_15)) , (void*)0) == &g_486) , (*g_555))));
                        l_1096 = (*l_794);
                        if ((*l_794))
                            break;
                    }
                    for (p_13 = 0; (p_13 <= 8); p_13 += 1)
                    { /* block id: 483 */
                        uint32_t l_1100 = 0xD370DA3EL;
                        const uint8_t *l_1112 = &g_733;
                        const uint8_t **l_1111 = &l_1112;
                        (*l_1062) = (((*l_1063) ^= (((p_14 | (*g_216)) > ((safe_add_func_uint16_t_u_u(l_1099, l_1100)) ^ p_15)) >= ((**g_486) && (g_733 &= (safe_lshift_func_int8_t_s_s((safe_mod_func_int16_t_s_s((safe_rshift_func_uint16_t_u_s(((safe_lshift_func_int8_t_s_s((safe_mod_func_int8_t_s_s((!(g_1058 &= ((*g_487) = (((g_141[g_408] ^ ((((65535UL ^ (l_1111 != l_992[1])) , 0x1CL) , (*g_216)) == l_1096)) | l_1100) | 0xDDF6L)))), (*g_555))), (*l_794))) | p_14), p_13)), l_1100)), p_15)))))) < 0x24L);
                        if (l_1100)
                            goto lbl_1113;
                        (*l_794) ^= (*l_1066);
                    }
                }
                else
                { /* block id: 492 */
                    int32_t l_1126 = 0xCFC1EBE5L;
                    uint16_t l_1137 = 0x946EL;
                    const int32_t *l_1158 = &g_55;
                    int32_t l_1159 = 3L;
                    int32_t l_1160 = (-1L);
                    int32_t l_1161[2];
                    uint32_t l_1165[10][1] = {{0xE54AEF6EL},{0x293B7BE6L},{0xE54AEF6EL},{0x293B7BE6L},{0xE54AEF6EL},{0x293B7BE6L},{0xE54AEF6EL},{0x293B7BE6L},{0xE54AEF6EL},{0x293B7BE6L}};
                    int i, j;
                    for (i = 0; i < 2; i++)
                        l_1161[i] = 1L;
                    for (g_215 = 2; (g_215 <= 8); g_215 += 1)
                    { /* block id: 495 */
                        uint32_t *l_1129 = &g_234[2][5][1];
                        uint16_t ***l_1144 = (void*)0;
                        uint16_t ****l_1145 = &l_1144;
                        int8_t *l_1148[7][6][4] = {{{(void*)0,&l_1069[3],&l_1069[4],(void*)0},{&l_1069[3],&g_1058,&l_1069[4],&l_1069[5]},{(void*)0,&g_1058,&g_1058,&l_1069[3]},{&l_1069[5],&g_543,&l_1069[3],(void*)0},{&l_1069[3],(void*)0,&l_1069[1],&g_1058},{&g_543,&l_1069[5],&l_1069[5],&g_543}},{{(void*)0,&l_1069[3],&l_1069[5],&g_1058},{&g_543,&l_1069[1],&g_543,&g_543},{&l_1069[3],&g_543,(void*)0,&g_543},{&l_1069[3],&l_1069[1],&l_1069[3],&g_1058},{&l_1069[5],&l_1069[3],&l_1069[3],&g_543},{(void*)0,&l_1069[5],&g_1058,&g_1058}},{{&g_1058,(void*)0,(void*)0,(void*)0},{(void*)0,&g_543,&g_543,&l_1069[3]},{&l_1069[3],&g_1058,&l_1069[3],&l_1069[5]},{&g_1058,&l_1069[5],&l_1069[3],&g_543},{&g_1058,(void*)0,&g_543,&l_1069[5]},{&l_1069[5],&g_543,(void*)0,&g_1058}},{{&g_543,&g_1058,&l_1069[3],&l_1069[4]},{&l_1069[5],&l_1069[3],(void*)0,(void*)0},{&g_1058,&g_1058,&g_1058,&l_1069[3]},{&g_1058,(void*)0,&g_543,&l_1069[3]},{&g_1058,&l_1069[3],&l_1069[3],&g_543},{(void*)0,&l_1069[3],&l_1069[1],&l_1069[3]}},{{&l_1069[3],(void*)0,&l_1069[4],&l_1069[3]},{&l_1069[3],&g_1058,&g_1058,(void*)0},{&l_1069[1],&l_1069[3],&g_543,&l_1069[4]},{(void*)0,&g_1058,(void*)0,&g_1058},{&l_1069[4],&g_543,&l_1069[5],&l_1069[5]},{&l_1069[3],(void*)0,&l_1069[3],&g_543}},{{(void*)0,&l_1069[5],&l_1069[3],&g_1058},{&l_1069[3],&l_1069[3],&l_1069[5],&g_543},{&l_1069[4],&l_1069[3],(void*)0,&l_1069[3]},{(void*)0,&l_1069[3],&g_543,&g_1058},{&l_1069[1],&g_1058,&g_1058,&l_1069[1]},{&l_1069[3],&l_1069[3],&l_1069[4],&l_1069[3]}},{{&l_1069[3],&g_543,&l_1069[1],&l_1069[3]},{(void*)0,(void*)0,&l_1069[3],&l_1069[3]},{&g_1058,&g_543,&g_543,&l_1069[3]},{&g_1058,&l_1069[3],&g_1058,&l_1069[1]},{&g_1058,&g_1058,(void*)0,&g_1058},{&l_1069[5],&l_1069[3],&l_1069[3],&l_1069[3]}}};
                        int8_t *l_1154[2];
                        int8_t *l_1155 = &g_543;
                        const int32_t *l_1157 = &g_493;
                        const int32_t **l_1156[6];
                        int i, j, k;
                        for (i = 0; i < 2; i++)
                            l_1154[i] = &l_1069[3];
                        for (i = 0; i < 6; i++)
                            l_1156[i] = &l_1157;
                        l_1134 &= (safe_mul_func_int16_t_s_s((p_14 & (g_141[g_408] |= (((safe_lshift_func_uint8_t_u_s((safe_mul_func_int8_t_s_s((safe_rshift_func_int8_t_s_u((safe_rshift_func_uint16_t_u_s(p_15, 4)), 3)), ((safe_mul_func_uint16_t_u_u(l_1126, (((*g_555) = (safe_add_func_uint8_t_u_u(((g_967[g_215][g_215] = l_1129) == ((*l_968) = (void*)0)), (*g_555)))) >= (safe_rshift_func_uint16_t_u_s(((0x17L && (g_350[4][2].f6 || (&g_216 == (void*)0))) , 0xABBCL), (*g_216)))))) >= l_1126))), 6)) <= l_1126) ^ l_1069[3]))), (*l_794)));
                        l_1070[0][0][0] = ((((*p_16) = (g_141[g_408] || (((safe_add_func_int32_t_s_s((((**g_486) = l_1137) | p_14), ((safe_lshift_func_uint16_t_u_u((safe_div_func_int16_t_s_s((((((0xB1L < 0xF5L) | ((safe_add_func_uint32_t_u_u((((*l_1145) = l_1144) != (((l_1059 = (safe_mod_func_uint8_t_u_u(1UL, 1L))) || ((safe_add_func_uint8_t_u_u(((((safe_mul_func_int8_t_s_s((g_543 = (-1L)), p_15)) < l_1134) ^ 254UL) , (**g_554)), p_13)) >= p_15)) , (void*)0)), (*p_12))) , p_14)) || l_1137) >= g_141[g_408]) && 0xE81EF0E4L), l_1137)), 14)) == (*l_794)))) && (*p_12)) , p_15))) , 0xF2D2L) | g_141[g_408]);
                        if (l_1137)
                            continue;
                        l_1158 = l_910;
                    }
                    l_1165[3][0]++;
                }
            }
            (**l_1086) = (**g_785);
            for (g_144 = 0; (g_144 == 50); g_144 = safe_add_func_uint8_t_u_u(g_144, 8))
            { /* block id: 518 */
                uint16_t **l_1174[9][1][8] = {{{&g_194[0],&g_351,&g_194[0],&g_194[0],&g_351,&g_194[0],&g_194[0],&g_194[0]}},{{&g_351,&g_194[0],&g_194[0],&g_194[0],&g_351,&g_194[0],&g_194[0],&g_351}},{{&g_194[0],&g_194[0],&g_194[0],&g_194[0],&g_194[0],&g_351,&g_194[0],&g_194[0]}},{{&g_194[0],&g_194[0],&g_194[0],&g_194[0],&g_194[0],&g_194[0],&g_194[0],&g_194[0]}},{{&g_194[0],&g_194[0],&g_194[0],&g_351,&g_351,&g_351,&g_194[0],&g_194[0]}},{{&g_194[0],&g_194[0],&g_194[0],&g_194[0],&g_194[0],&g_194[0],&g_194[0],&g_194[0]}},{{&g_194[0],&g_194[0],&g_194[0],&g_351,&g_194[0],&g_194[0],&g_194[0],&g_194[0]}},{{&g_194[0],&g_351,&g_194[0],&g_194[0],&g_351,&g_194[0],&g_194[0],&g_194[0]}},{{&g_351,&g_194[0],&g_194[0],&g_194[0],&g_351,&g_194[0],&g_194[0],&g_351}}};
                uint16_t ***l_1173[7];
                const union U1 **l_1178[1];
                union U1 **l_1180 = &l_1179[0][0];
                int32_t l_1202 = 6L;
                int i, j, k;
                for (i = 0; i < 7; i++)
                    l_1173[i] = &l_1174[7][0][7];
                for (i = 0; i < 1; i++)
                    l_1178[i] = (void*)0;
                --l_1170;
                if ((l_1173[5] != (((l_1175 = (l_1176 = l_1175)) == ((*l_1180) = l_1179[6][2])) , l_1181)))
                { /* block id: 523 */
                    struct S0 *l_1183 = &l_988[7];
                    struct S0 **l_1184 = &l_1183;
                    (*l_1184) = l_1183;
                }
                else
                { /* block id: 525 */
                    (*p_12) = ((&g_109 != &g_350[7][3]) || 0xC1D9L);
                }
                (*p_16) = (l_1185 , (safe_lshift_func_int8_t_s_s((((safe_unary_minus_func_uint16_t_u((safe_mod_func_uint16_t_u_u((safe_add_func_uint32_t_u_u((0x13L > (safe_add_func_int16_t_s_s((((*p_12) = (safe_sub_func_int32_t_s_s((*l_794), ((safe_unary_minus_func_int32_t_s((*p_16))) && (safe_add_func_int32_t_s_s(((((*g_216) = (safe_add_func_int8_t_s_s((0x3D58L != l_1202), p_13))) ^ ((safe_div_func_int32_t_s_s((((((*l_1065) = (-1L)) ^ 0xEDBC3F46L) < (*p_12)) < l_1202), 0x6FEA2B67L)) ^ (*p_12))) & l_1185.f5), 1UL)))))) >= l_1185.f4), (*l_794)))), p_13)), (*l_794))))) & (*l_1063)) == p_13), p_13)));
                for (l_969 = 29; (l_969 == (-2)); l_969 = safe_sub_func_uint32_t_u_u(l_969, 1))
                { /* block id: 534 */
                }
            }
        }
    }
    (*p_12) = ((((safe_unary_minus_func_uint8_t_u((l_1220 ^ (((safe_sub_func_uint32_t_u_u(((safe_div_func_uint8_t_u_u((safe_mod_func_int8_t_s_s((safe_div_func_uint16_t_u_u(((l_1229 = ((l_988[7] , (((((((-1L) & ((*g_487) |= (*l_794))) >= (*l_794)) , (*l_794)) & p_15) || (-3L)) > (((0x3940D9DAL <= 4294967289UL) == (*l_794)) | (*l_794)))) <= (*l_794))) ^ l_1230[3][0]), 0xDA9EL)), p_13)), (*l_794))) , 0x099334B0L), (*l_794))) > (*l_794)) > 0x30ABL)))) , &g_194[0]) == l_1231[0]) , (*p_12));
    return (*l_794);
}


/* ------------------------------------------ */
/* 
 * reads : g_2
 * writes: g_2
 */
static uint32_t  func_20(uint32_t  p_21)
{ /* block id: 10 */
    const int32_t l_27[8][7][4] = {{{0x213633E7L,1L,(-7L),1L},{0xBFCF419CL,(-3L),(-7L),1L},{0x213633E7L,0xB19D88C8L,0xBFCF419CL,(-3L)},{(-7L),0xB19D88C8L,(-7L),0xE89405DBL},{(-7L),0xE89405DBL,1L,1L},{0xBFCF419CL,0xE89405DBL,9L,0xE89405DBL},{1L,0xB19D88C8L,9L,(-3L)}},{{0xBFCF419CL,1L,1L,(-3L)},{(-7L),0xB19D88C8L,(-7L),0xE89405DBL},{(-7L),0xE89405DBL,1L,1L},{0xBFCF419CL,0xE89405DBL,9L,0xE89405DBL},{1L,0xB19D88C8L,9L,(-3L)},{0xBFCF419CL,1L,1L,(-3L)},{(-7L),0xB19D88C8L,(-7L),0xE89405DBL}},{{(-7L),0xE89405DBL,1L,1L},{0xBFCF419CL,0xE89405DBL,9L,0xE89405DBL},{1L,0xB19D88C8L,9L,(-3L)},{0xBFCF419CL,1L,1L,(-3L)},{(-7L),0xB19D88C8L,(-7L),0xE89405DBL},{(-7L),0xE89405DBL,1L,1L},{0xBFCF419CL,0xE89405DBL,9L,0xE89405DBL}},{{1L,0xB19D88C8L,9L,(-3L)},{0xBFCF419CL,1L,1L,(-3L)},{(-7L),0xB19D88C8L,(-7L),0xE89405DBL},{(-7L),0xE89405DBL,1L,1L},{0xBFCF419CL,0xE89405DBL,9L,0xE89405DBL},{1L,0xB19D88C8L,9L,(-3L)},{0xBFCF419CL,1L,1L,(-3L)}},{{(-7L),0xB19D88C8L,(-7L),0xE89405DBL},{(-7L),0xE89405DBL,1L,1L},{0xBFCF419CL,0xE89405DBL,9L,0xE89405DBL},{1L,0xB19D88C8L,9L,(-3L)},{0xBFCF419CL,1L,1L,(-3L)},{(-7L),0xB19D88C8L,(-7L),0xE89405DBL},{(-7L),0xE89405DBL,1L,1L}},{{0xBFCF419CL,0xE89405DBL,9L,0xE89405DBL},{1L,0xB19D88C8L,9L,(-3L)},{0xBFCF419CL,1L,1L,(-3L)},{(-7L),0xB19D88C8L,(-7L),0xE89405DBL},{(-7L),0xE89405DBL,1L,1L},{0xBFCF419CL,0xE89405DBL,9L,0xE89405DBL},{1L,0xB19D88C8L,9L,(-3L)}},{{0xBFCF419CL,1L,1L,(-3L)},{(-7L),0xB19D88C8L,(-7L),0xE89405DBL},{(-7L),0xE89405DBL,1L,1L},{0xBFCF419CL,0xE89405DBL,9L,0xE89405DBL},{1L,0xB19D88C8L,9L,(-3L)},{0xBFCF419CL,1L,1L,(-3L)},{(-7L),0xB19D88C8L,(-7L),0xE89405DBL}},{{(-7L),0xE89405DBL,1L,1L},{0xBFCF419CL,1L,0x213633E7L,1L},{(-7L),1L,0x213633E7L,0xB19D88C8L},{1L,0xE89405DBL,(-7L),0xB19D88C8L},{9L,1L,9L,1L},{9L,1L,(-7L),(-3L)},{1L,1L,0x213633E7L,1L}}};
    int32_t *l_28 = &g_2;
    int i, j, k;
    (*l_28) &= l_27[0][2][2];
    return p_21;
}


/* ------------------------------------------ */
/* 
 * reads : g_24 g_53 g_2 g_36 g_86 g_52 g_109 g_114 g_72 g_144 g_55 g_126 g_141 g_214 g_216 g_215 g_217 g_234 g_312 g_331 g_350 g_351 g_143 g_408 g_486 g_493 g_487 g_543 g_113 g_554 g_555 g_477 g_626 g_784
 * writes: g_24 g_2 g_36 g_52 g_53 g_55 g_86 g_113 g_126 g_109.f3 g_114 g_141 g_143 g_144 g_72 g_194 g_215 g_252 g_217 g_312 g_234 g_486 g_350.f8 g_214 g_351 g_626 g_776
 */
static const uint8_t  func_31(uint8_t  p_32)
{ /* block id: 14 */
    uint16_t l_213[5][7][7] = {{{0xE217L,65535UL,0x056FL,0xE217L,65532UL,0x5C96L,8UL},{65526UL,0x85C2L,0UL,65532UL,65532UL,0UL,0x85C2L},{65532UL,0x9171L,0x0C94L,1UL,0x056FL,8UL,65533UL},{0x0C94L,65526UL,0x4E03L,0x9171L,0x3561L,65535UL,0x056FL},{0x72F8L,0x85C2L,1UL,1UL,0xA3E3L,0x9D98L,65526UL},{65535UL,0x056FL,0xE217L,65532UL,0x5C96L,8UL,0x72F8L},{0x941BL,1UL,0xE217L,0xE217L,1UL,0x941BL,0UL}},{{0x3561L,1UL,1UL,0xA3E3L,0x85C2L,0x208BL,0xA3E3L},{65532UL,0x7E30L,0x4E03L,65533UL,0UL,0x0C94L,0x72F8L},{0x9171L,1UL,0x0C94L,8UL,0x3561L,0xE217L,0x9171L},{1UL,1UL,0UL,0xA3E3L,65535UL,2UL,65535UL},{1UL,0x056FL,0x056FL,1UL,0x4E03L,0x5C96L,65533UL},{0x9171L,0x85C2L,0x941BL,0x4E03L,65532UL,0x941BL,0x5C96L},{65532UL,65526UL,2UL,1UL,65535UL,1UL,65533UL}},{{0x3561L,0x9171L,0x4E03L,65526UL,0x0C94L,65535UL,65535UL},{0x941BL,0x85C2L,0x9171L,65535UL,0xA3E3L,65535UL,0x9171L},{65535UL,65535UL,65526UL,65532UL,0x85C2L,1UL,0x72F8L},{0x72F8L,65535UL,0xE217L,1UL,65535UL,0x941BL,0xA3E3L},{0x0C94L,1UL,0x9171L,0UL,0x85C2L,0x5C96L,0UL},{65532UL,0x60CBL,0x6E77L,65533UL,0xA3E3L,2UL,0x72F8L},{65526UL,0xE217L,0x0C94L,65533UL,0x0C94L,0xE217L,65526UL}},{{0xE217L,1UL,0x941BL,0UL,65535UL,0x0C94L,0x056FL},{1UL,65535UL,6UL,1UL,65532UL,0x208BL,65533UL},{65526UL,0x5C96L,0x941BL,65532UL,0x4E03L,0x941BL,0x85C2L},{0x9D98L,0x7E30L,0UL,65526UL,8UL,1UL,1UL},{0x941BL,0x7E30L,1UL,0x7E30L,0x941BL,1UL,8UL},{0x4E03L,2UL,65535UL,0xE217L,0x208BL,65526UL,0x7E30L},{1UL,8UL,6UL,0x9D98L,0x0C94L,1UL,0x6E77L}},{{0x4E03L,0xE217L,65535UL,0x056FL,0xE217L,65532UL,0x5C96L},{0x941BL,6UL,65535UL,0x5C96L,2UL,2UL,0x5C96L},{0x9D98L,0UL,0x9D98L,1UL,0x5C96L,0UL,0x6E77L},{0x7E30L,0x056FL,0x72F8L,0x9171L,0x941BL,65535UL,0x7E30L},{0x056FL,65526UL,0x6E77L,0x5C96L,1UL,0UL,8UL},{6UL,8UL,1UL,6UL,65535UL,2UL,1UL},{0x7E30L,0x0C94L,65532UL,65535UL,65535UL,65532UL,0x0C94L}}};
    int32_t l_222[3][10] = {{(-1L),(-1L),(-1L),(-1L),0x2D656744L,5L,0x2D656744L,(-1L),(-1L),(-1L)},{0x2D656744L,(-1L),0x83BE1114L,1L,1L,0x83BE1114L,(-1L),0x2D656744L,(-1L),0x83BE1114L},{5L,(-1L),1L,(-1L),5L,0x83BE1114L,0x83BE1114L,5L,(-1L),1L}};
    uint32_t *l_233[3][2];
    int32_t **l_236 = &g_86;
    int8_t *l_250 = &g_143;
    int16_t l_251 = 0x6775L;
    int32_t *l_253 = (void*)0;
    uint8_t *l_256 = &g_114;
    union U1 l_263 = {0xD8L};
    const int16_t l_288 = 0L;
    int32_t l_289 = 0L;
    uint16_t l_299 = 0xB300L;
    int32_t l_311 = 1L;
    int32_t l_326 = 1L;
    uint32_t l_359 = 0x854B9D9CL;
    struct S0 l_375 = {-0,-610,1,170,32,1,-2,576,1};
    int32_t l_440 = (-1L);
    int32_t l_443 = 0xC3336E55L;
    union U1 *l_476[1];
    int8_t l_522 = 0x0AL;
    uint8_t l_530 = 0xC0L;
    int8_t **l_696 = &g_487;
    int16_t l_724 = 0x0842L;
    uint32_t * const l_775 = &g_776;
    uint32_t * const *l_774 = &l_775;
    int i, j, k;
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 2; j++)
            l_233[i][j] = &g_234[2][0][1];
    }
    for (i = 0; i < 1; i++)
        l_476[i] = &g_477;
    (*l_236) = func_40((func_46(p_32) , l_213[2][6][1]), g_214, g_216, (+(safe_sub_func_int32_t_s_s(((safe_lshift_func_uint8_t_u_u(g_109.f7, 7)) == l_222[0][6]), (safe_mul_func_int16_t_s_s((((safe_lshift_func_uint8_t_u_s(((((l_222[0][7] == (safe_lshift_func_int8_t_s_u((safe_rshift_func_uint8_t_u_s((safe_sub_func_uint32_t_u_u(g_109.f8, (*g_214))), 0)), g_109.f4))) < 0x97C0L) <= p_32) , g_109.f0), p_32)) ^ l_213[3][0][1]) & 0x3BD0L), p_32))))), l_233[2][1]);
lbl_787:
    g_2 |= (((safe_mod_func_int8_t_s_s(((g_252[1][3] = func_99(l_233[1][0], (((((*g_216) , (safe_unary_minus_func_uint16_t_u((safe_lshift_func_int16_t_s_u(6L, (**l_236)))))) < ((*g_214) |= (safe_add_func_int16_t_s_s(((g_109 , ((**l_236) >= (((safe_lshift_func_uint8_t_u_s(((safe_rshift_func_int8_t_s_s((((*l_250) = (g_234[2][0][1] != (p_32 == (((safe_div_func_int16_t_s_s((*g_216), (*g_216))) ^ 1UL) & (**l_236))))) & (**l_236)), 3)) | p_32), 5)) | p_32) ^ g_141[1]))) ^ 0xC824L), 1UL)))) && l_251) & (*g_86)), (**l_236), p_32)) == &g_24), p_32)) != 0x33L) == (*g_86));
    (*g_214) = ((safe_sub_func_int8_t_s_s(0x67L, ((**l_236) , ((*l_256) = (**l_236))))) == ((((**l_236) & (safe_div_func_uint8_t_u_u(((safe_add_func_uint8_t_u_u(((safe_sub_func_uint16_t_u_u(((((*g_216) |= p_32) , ((l_263 , (void*)0) == &l_251)) & ((safe_div_func_int16_t_s_s(p_32, 65527UL)) & 6UL)), 0x9836L)) , g_109.f4), p_32)) < p_32), (**l_236)))) & (**l_236)) == 253UL));
    if (((p_32 ^ ((p_32 ^ (~((((*g_214) |= (safe_sub_func_int16_t_s_s((safe_sub_func_uint8_t_u_u((**l_236), (safe_div_func_uint32_t_u_u((l_289 = (((*g_216) = (0xB485L > ((safe_lshift_func_uint8_t_u_u((safe_sub_func_int16_t_s_s((safe_div_func_int16_t_s_s((safe_mod_func_int32_t_s_s(((((safe_sub_func_uint32_t_u_u((g_109.f8 , ((g_141[0] || ((0x2F8BL || (safe_sub_func_int16_t_s_s((safe_sub_func_int8_t_s_s((p_32 | (p_32 > 0xF1L)), 0xF4L)), p_32))) != 0xDE6FF466L)) || p_32)), (**l_236))) > (-1L)) && g_72) || (**l_236)), p_32)), (**l_236))), 65528UL)), 7)) < l_288))) > (**l_236))), (*g_86))))), p_32))) , p_32) < 0x883BL))) >= 0xB94D1ED4L)) != 0x6E74L))
    { /* block id: 111 */
        struct S0 l_292 = {1,868,0,-167,63,0,6,185,-4};
        int16_t *l_293 = &l_251;
        int16_t **l_294 = &l_293;
        int8_t *l_426 = (void*)0;
        int16_t l_436 = 0L;
        int32_t l_439 = 0x78F69DFEL;
        int32_t l_441 = 6L;
        int32_t l_442 = 0x2B99C833L;
        uint32_t l_454 = 18446744073709551615UL;
        uint32_t l_466 = 1UL;
        union U1 l_471 = {0x2BL};
        int8_t l_490[6];
        int32_t *l_495 = &g_2;
        int16_t l_527 = 0x2489L;
        uint16_t l_542 = 0UL;
        const uint32_t *l_663[9] = {&g_664,&g_664,&g_664,&g_664,&g_664,&g_664,&g_664,&g_664,&g_664};
        const uint32_t **l_662[6] = {&l_663[8],&l_663[4],&l_663[4],&l_663[8],&l_663[4],&l_663[4]};
        const uint32_t *l_665 = &g_666[0][5][1];
        int i;
        for (i = 0; i < 6; i++)
            l_490[i] = 0x8DL;
        if ((safe_lshift_func_int8_t_s_u(g_109.f5, ((l_292 , &l_251) != ((*l_294) = l_293)))))
        { /* block id: 113 */
lbl_399:
            (*l_236) = &g_55;
        }
        else
        { /* block id: 115 */
            int32_t l_300[7][3] = {{0xDEA12953L,0xA39915C5L,0xA39915C5L},{0xDEA12953L,0xA39915C5L,0xA39915C5L},{0xDEA12953L,0xA39915C5L,0xA39915C5L},{0xDEA12953L,0xA39915C5L,0xA39915C5L},{0xDEA12953L,0xA39915C5L,0xA39915C5L},{0xDEA12953L,0xA39915C5L,0xA39915C5L},{0xDEA12953L,0xA39915C5L,0xA39915C5L}};
            int16_t *l_301 = &l_251;
            int32_t l_388 = 0x600FA4EEL;
            uint8_t **l_422 = &l_256;
            int8_t *l_423[2];
            int8_t **l_424 = (void*)0;
            int8_t **l_425 = &l_423[1];
            uint8_t l_427 = 3UL;
            union U1 *l_475 = &l_471;
            uint32_t l_489 = 0UL;
            int32_t **l_496 = &g_214;
            int32_t l_513 = 0xF8A528CBL;
            int32_t l_517 = (-1L);
            uint16_t l_541 = 5UL;
            uint8_t *l_544 = (void*)0;
            uint8_t *l_545 = &g_114;
            uint8_t *l_546 = &g_113;
            int16_t l_589 = (-2L);
            int32_t l_595[3];
            int32_t l_605 = (-10L);
            struct S0 l_606 = {0,19573,1,121,89,0,5,169,-3};
            int16_t l_621 = 1L;
            uint8_t l_623 = 255UL;
            uint8_t l_632 = 248UL;
            int8_t l_633 = (-1L);
            uint8_t l_634 = 1UL;
            uint32_t l_635 = 0x54A42BA3L;
            int32_t l_639 = 0L;
            uint16_t l_645 = 0xDE68L;
            int16_t l_648 = (-1L);
            int8_t l_655 = 0x79L;
            int16_t l_656 = (-1L);
            int32_t *l_657 = &g_215;
            int i, j;
            for (i = 0; i < 2; i++)
                l_423[i] = &g_143;
            for (i = 0; i < 3; i++)
                l_595[i] = (-7L);
            if ((safe_add_func_uint32_t_u_u((safe_mul_func_uint16_t_u_u(((l_292 , ((l_299 >= l_300[4][1]) , l_301)) == ((((safe_rshift_func_int16_t_s_u(l_292.f3, ((g_144 < (l_292.f8 < (((65527UL <= (((((void*)0 != l_301) & (*g_214)) ^ p_32) , l_292.f4)) < g_109.f5) > g_53))) || 0x91L))) ^ l_292.f7) >= l_300[3][2]) , &l_251)), p_32)), (*g_86))))
            { /* block id: 116 */
                int32_t *l_304 = &l_300[5][1];
                int32_t *l_305 = (void*)0;
                int32_t l_306 = (-1L);
                int32_t *l_307 = &l_300[4][1];
                int32_t *l_308 = &g_53;
                int32_t *l_309[2];
                int32_t l_310 = 0x9A6A31B5L;
                int8_t *l_321 = &g_143;
                int i;
                for (i = 0; i < 2; i++)
                    l_309[i] = (void*)0;
                ++g_312[0];
                if (((safe_mul_func_int8_t_s_s((p_32 == ((safe_mul_func_uint8_t_u_u(((**l_236) = 0xC4L), (safe_div_func_int32_t_s_s((((p_32 ^ 0xE6BD7F7FL) , l_321) != &g_143), (safe_rshift_func_uint8_t_u_s(3UL, 5)))))) > ((safe_lshift_func_int16_t_s_u(((((p_32 <= (l_292.f1 = p_32)) , l_326) > p_32) == p_32), p_32)) , 0x79L))), g_109.f2)) == (-1L)))
                { /* block id: 120 */
                    (*l_307) = (safe_lshift_func_int16_t_s_s(4L, 8));
                    (*l_308) |= (*g_214);
                    (*g_86) = (safe_lshift_func_uint16_t_u_u((*l_307), (((g_331 , p_32) , (-5L)) && 0xA58AL)));
                    (*g_86) ^= (safe_div_func_int32_t_s_s((-1L), 0xEDDE48FAL));
                }
                else
                { /* block id: 125 */
                    uint32_t l_353 = 4294967291UL;
                    int32_t l_354 = 0x8D8C0522L;
                    for (g_114 = 0; (g_114 == 45); g_114 = safe_add_func_int32_t_s_s(g_114, 4))
                    { /* block id: 128 */
                        int32_t *l_336 = &g_215;
                        uint16_t *l_345 = &g_72;
                        int32_t l_352 = 0x8A444AF9L;
                        (*l_236) = l_336;
                        (*l_236) = &g_215;
                        l_354 = (safe_rshift_func_uint16_t_u_s((safe_sub_func_uint8_t_u_u(g_109.f6, ((+(safe_div_func_int32_t_s_s(p_32, (safe_add_func_uint8_t_u_u(((((void*)0 == l_345) , (safe_mod_func_uint16_t_u_u((((*l_336) ^= p_32) ^ (l_300[5][0] , (safe_add_func_int32_t_s_s(((((((((g_126[2][2] || (l_263 , ((*l_321) |= (((g_350[4][2] , (-1L)) , &g_72) == g_351)))) & 6L) == p_32) , p_32) > l_352) > g_114) > l_353) , p_32), p_32)))), (*l_307)))) , p_32), 0x31L))))) < (*l_308)))), 14));
                    }
                    if (g_109.f7)
                        goto lbl_494;
                }
                for (g_2 = 25; (g_2 < (-5)); g_2 = safe_sub_func_uint8_t_u_u(g_2, 5))
                { /* block id: 138 */
                    for (g_113 = 0; (g_113 < 55); g_113 = safe_add_func_uint16_t_u_u(g_113, 8))
                    { /* block id: 141 */
                        (*l_236) = (void*)0;
                    }
                    for (l_251 = 2; (l_251 >= 0); l_251 -= 1)
                    { /* block id: 146 */
                        int i, j;
                        return l_300[l_251][l_251];
                    }
                }
                l_359--;
            }
            else
            { /* block id: 151 */
                int16_t l_392 = (-1L);
                int32_t l_393 = 0x4FE45244L;
                int32_t *l_421 = &g_2;
                for (g_217 = (-10); (g_217 == 12); g_217 = safe_add_func_uint32_t_u_u(g_217, 1))
                { /* block id: 154 */
                    int16_t l_370 = (-1L);
                    int16_t l_398 = 0x1CFDL;
                    if (((safe_add_func_uint32_t_u_u(((l_300[4][2] == (safe_lshift_func_int8_t_s_u((g_331 , (safe_div_func_uint8_t_u_u(0xCFL, (-1L)))), l_292.f2))) ^ (g_109 , l_300[4][1])), l_370)) , ((safe_rshift_func_int16_t_s_u((safe_div_func_uint8_t_u_u((&p_32 == &g_113), p_32)), p_32)) <= g_350[4][2].f7)))
                    { /* block id: 155 */
                        int16_t l_381 = (-1L);
                        const int32_t l_391 = 0L;
                        l_381 ^= (l_375 , ((g_215 , (**l_236)) > ((((safe_sub_func_uint16_t_u_u(((((!(**l_236)) & (1L >= p_32)) , ((((safe_unary_minus_func_int8_t_s((**l_236))) < 0x3DA1L) >= (((p_32 ^ (**l_236)) | l_300[4][1]) && (*g_86))) <= p_32)) == l_300[4][1]), l_300[0][2])) | l_292.f4) , (void*)0) == l_250)));
                        l_393 &= (((safe_div_func_int8_t_s_s((safe_lshift_func_int8_t_s_u((((*g_216) & (0x61DE9766L != 0xD43EE1FDL)) , (p_32 < ((!(((((((safe_add_func_uint16_t_u_u(((l_388 == (248UL ^ ((*l_250) |= (safe_div_func_uint8_t_u_u(0x83L, (l_292.f1 && (*g_216))))))) , l_391), l_392)) , l_292.f1) && p_32) , 65532UL) | l_292.f4) , p_32) == p_32)) || 6UL))), g_350[4][2].f3)), g_24)) != p_32) , 0x6C8538B0L);
                    }
                    else
                    { /* block id: 159 */
                        return p_32;
                    }
                    (*g_86) = (safe_lshift_func_int8_t_s_u((0x40C17C14L >= (g_350[4][2].f4 , (safe_lshift_func_uint8_t_u_u(l_398, 0)))), 3));
                }
                if (l_251)
                    goto lbl_399;
                (*g_86) = ((*g_214) & (((l_393 < 5UL) >= (-1L)) || ((**l_236) && (0x29C54269L != 0x3CAA9559L))));
                l_393 = (safe_mul_func_uint16_t_u_u((safe_sub_func_uint16_t_u_u((safe_sub_func_uint32_t_u_u((((safe_rshift_func_uint8_t_u_s(((g_408 && (*g_86)) >= p_32), 1)) , 4294967288UL) & (*g_214)), ((*l_421) = (safe_div_func_int32_t_s_s(0xEC54B450L, ((safe_add_func_uint8_t_u_u((safe_mod_func_int8_t_s_s((safe_sub_func_int32_t_s_s((-7L), (safe_mod_func_uint8_t_u_u(p_32, (safe_mod_func_int32_t_s_s((&g_214 == &l_253), l_392)))))), 0x60L)), g_109.f8)) , l_388)))))), p_32)), l_292.f3));
            }
            if (((g_109.f2 | (((*l_422) = (void*)0) != ((((*l_425) = (l_292 , l_423[1])) != l_426) , (((0x82AE79FEL || (l_427 = p_32)) & ((safe_mul_func_int16_t_s_s((p_32 > (safe_mul_func_int8_t_s_s((safe_div_func_uint32_t_u_u(((l_292.f2 > (-9L)) ^ l_300[5][1]), 0xCB376623L)), 1UL))), 0L)) & p_32)) , &g_113)))) , p_32))
            { /* block id: 172 */
                int32_t *l_434[8][4][6] = {{{&l_311,&g_215,&g_215,&g_215,&l_289,(void*)0},{&g_215,&g_215,&l_388,&l_388,&g_215,&g_215},{&l_388,&g_215,&g_215,(void*)0,&l_289,&g_215},{&g_215,&g_215,&l_311,&g_215,&g_215,&g_215}},{{&g_215,&l_388,&g_215,(void*)0,&l_300[0][1],&l_300[0][1]},{&l_388,&l_289,&l_289,&l_388,&l_311,&l_300[0][1]},{&g_215,&l_300[0][1],&g_215,&g_215,(void*)0,&g_215},{&l_311,&l_388,&l_311,(void*)0,(void*)0,&g_215}},{{&l_388,&g_215,&l_311,&g_215,&g_215,&l_311},{(void*)0,(void*)0,&l_289,&g_215,&g_215,&g_215},{&l_388,&l_289,&g_215,&g_215,&g_215,&l_289},{&g_215,&l_388,&g_215,&l_388,(void*)0,&g_215}},{{&l_311,&l_388,&l_289,&l_289,&l_388,&l_311},{&l_289,&l_388,&l_311,&l_300[0][1],(void*)0,&g_215},{&g_215,&l_388,&g_215,&l_388,&g_215,&l_388},{&g_215,&l_289,&l_388,&l_300[0][1],&g_215,&g_215}},{{&l_289,(void*)0,(void*)0,&l_289,&g_215,&g_215},{&l_311,&g_215,&l_388,&l_388,&l_300[0][1],&l_388},{&g_215,(void*)0,&g_215,&g_215,&l_300[0][1],&g_215},{&l_388,&g_215,&l_311,&g_215,&g_215,&l_311}},{{(void*)0,(void*)0,&l_289,&g_215,&g_215,&g_215},{&l_388,&l_289,&g_215,&g_215,&g_215,&l_289},{&g_215,&l_388,&g_215,&l_388,(void*)0,&g_215},{&l_311,&l_388,&l_289,&l_289,&l_388,&l_311}},{{&l_289,&l_388,&l_311,&l_300[0][1],(void*)0,&g_215},{&g_215,&l_388,&g_215,&l_388,&g_215,&l_388},{&g_215,&l_289,&l_388,&l_300[0][1],&g_215,&g_215},{&l_289,(void*)0,(void*)0,&l_289,&g_215,&g_215}},{{&l_311,&g_215,&l_388,&l_388,&l_300[0][1],&l_388},{&g_215,(void*)0,&g_215,&g_215,&l_300[0][1],&g_215},{&l_388,&g_215,&l_311,&g_215,&g_215,&l_311},{(void*)0,(void*)0,&l_289,&g_215,&g_215,&g_215}}};
                int32_t l_435 = 3L;
                int32_t l_437 = 5L;
                int32_t l_438[2];
                uint32_t l_444 = 0xDB1A413FL;
                uint8_t *l_453 = &g_113;
                struct S0 l_455 = {1,6823,0,-72,14,1,-4,-531,-1};
                const int8_t *l_457 = &l_263.f0;
                const int8_t **l_456 = &l_457;
                int i, j, k;
                for (i = 0; i < 2; i++)
                    l_438[i] = 0L;
                l_444++;
                (*g_214) &= (safe_mod_func_uint32_t_u_u((l_454 = (((safe_lshift_func_int8_t_s_s(((safe_mod_func_int16_t_s_s((l_250 == l_426), p_32)) ^ (((*l_250) = 0xDAL) | (g_331 , p_32))), (((g_2 & ((g_126[1][2] & (l_453 != &g_144)) , g_350[4][2].f3)) , l_292.f3) | p_32))) & 7L) != 6L)), l_439));
                for (l_299 = 0; l_299 < 2; l_299 += 1)
                {
                    for (l_289 = 0; l_289 < 6; l_289 += 1)
                    {
                        g_252[l_299][l_289] = &g_141[0];
                    }
                }
                if (((*g_214) |= (&g_143 == (l_455 , ((*l_456) = l_453)))))
                { /* block id: 180 */
                    int16_t l_462 = 0xFFE7L;
                    int32_t l_464 = 1L;
                    int32_t l_465 = (-8L);
                    uint8_t l_472[4][10][6] = {{{0x44L,0x78L,7UL,1UL,0UL,7UL},{0x09L,0x2AL,0UL,255UL,0UL,0x2AL},{1UL,0x78L,0xF6L,255UL,0x78L,0UL},{0x09L,0UL,0xF6L,1UL,0x2AL,0x2AL},{0x44L,0UL,0UL,0x44L,0x78L,7UL},{0x44L,0x78L,7UL,1UL,0UL,7UL},{0x09L,0x2AL,0UL,255UL,0UL,0x2AL},{1UL,0x78L,0xF6L,255UL,0x7FL,0xE7L},{0UL,0xE7L,0UL,7UL,0xBEL,0xBEL},{0xF6L,0xE7L,0xE7L,0xF6L,0x7FL,0x13L}},{{0xF6L,0x7FL,0x13L,7UL,0xE7L,0x13L},{0UL,0xBEL,0xE7L,0x78L,0xE7L,0xBEL},{7UL,0x7FL,0UL,0x78L,0x7FL,0xE7L},{0UL,0xE7L,0UL,7UL,0xBEL,0xBEL},{0xF6L,0xE7L,0xE7L,0xF6L,0x7FL,0x13L},{0xF6L,0x7FL,0x13L,7UL,0xE7L,0x13L},{0UL,0xBEL,0xE7L,0x78L,0xE7L,0xBEL},{7UL,0x7FL,0UL,0x78L,0x7FL,0xE7L},{0UL,0xE7L,0UL,7UL,0xBEL,0xBEL},{0xF6L,0xE7L,0xE7L,0xF6L,0x7FL,0x13L}},{{0xF6L,0x7FL,0x13L,7UL,0xE7L,0x13L},{0UL,0xBEL,0xE7L,0x78L,0xE7L,0xBEL},{7UL,0x7FL,0UL,0x78L,0x7FL,0xE7L},{0UL,0xE7L,0UL,7UL,0xBEL,0xBEL},{0xF6L,0xE7L,0xE7L,0xF6L,0x7FL,0x13L},{0xF6L,0x7FL,0x13L,7UL,0xE7L,0x13L},{0UL,0xBEL,0xE7L,0x78L,0xE7L,0xBEL},{7UL,0x7FL,0UL,0x78L,0x7FL,0xE7L},{0UL,0xE7L,0UL,7UL,0xBEL,0xBEL},{0xF6L,0xE7L,0xE7L,0xF6L,0x7FL,0x13L}},{{0xF6L,0x7FL,0x13L,7UL,0xE7L,0x13L},{0UL,0xBEL,0xE7L,0x78L,0xE7L,0xBEL},{7UL,0x7FL,0UL,0x78L,0x7FL,0xE7L},{0UL,0xE7L,0UL,7UL,0xBEL,0xBEL},{0xF6L,0xE7L,0xE7L,0xF6L,0x7FL,0x13L},{0xF6L,0x7FL,0x13L,7UL,0xE7L,0x13L},{0UL,0xBEL,0xE7L,0x78L,0xE7L,0xBEL},{7UL,0x7FL,0UL,0x78L,0x7FL,0xE7L},{0UL,0xE7L,0UL,7UL,0xBEL,0xBEL},{0xF6L,0xE7L,0xE7L,0UL,1UL,0xD6L}}};
                    int8_t ***l_488 = &g_486;
                    int i, j, k;
                    for (l_436 = 0; (l_436 == (-20)); l_436--)
                    { /* block id: 183 */
                        int16_t l_460 = 0x8D84L;
                        int32_t l_461 = 0L;
                        int32_t l_463[3][1][7] = {{{5L,0x4FEAE600L,5L,0x2AF12338L,0x70CB83D5L,0x70CB83D5L,0x2AF12338L}},{{5L,0x4FEAE600L,5L,0x2AF12338L,0x70CB83D5L,0x70CB83D5L,0x2AF12338L}},{{5L,0x4FEAE600L,5L,0x2AF12338L,0x70CB83D5L,0x70CB83D5L,0x2AF12338L}}};
                        int i, j, k;
                        l_466--;
                        (*g_214) = (safe_rshift_func_uint8_t_u_u(l_436, 0));
                        (*g_214) = (0UL >= (((p_32 | l_436) , &l_465) != (l_471 , &g_52)));
                        l_472[2][3][2]++;
                    }
                    l_476[0] = l_475;
                    (*g_214) = (safe_mul_func_int16_t_s_s((-1L), (safe_add_func_int16_t_s_s((((*g_214) & ((((safe_div_func_int32_t_s_s((65534UL >= ((!((l_465 &= (((*l_488) = g_486) == &l_457)) != (g_350[4][2].f8 = (*g_214)))) >= l_489)), p_32)) < (0x270A4E95L != 1L)) > l_490[5]) | 1L)) & l_300[3][0]), 0xE47FL))));
                    l_292.f0 |= (&g_216 != (void*)0);
                }
                else
                { /* block id: 195 */
                    for (l_311 = 0; (l_311 > 18); l_311 = safe_add_func_int32_t_s_s(l_311, 1))
                    { /* block id: 198 */
                        return g_493;
                    }
                }
            }
            else
            { /* block id: 202 */
lbl_494:
                (*g_214) ^= 9L;
                for (l_439 = 2; (l_439 >= 0); l_439 -= 1)
                { /* block id: 207 */
                    int32_t ***l_497 = &l_236;
                    uint16_t *l_506 = &l_213[2][2][2];
                    uint32_t l_514 = 0UL;
                    int32_t *l_515 = &l_222[0][4];
                    int32_t *l_516[2];
                    int i;
                    for (i = 0; i < 2; i++)
                        l_516[i] = (void*)0;
                    g_86 = l_495;
                    (*l_497) = l_496;
                }
                if ((l_375 , (((**l_294) = (((safe_add_func_uint32_t_u_u((l_530 |= 4294967295UL), 0xE1E4D1B6L)) & (*g_487)) <= (((*l_546) = (g_143 , ((*l_545) |= ((safe_sub_func_uint8_t_u_u((safe_mod_func_int16_t_s_s(p_32, (safe_sub_func_uint32_t_u_u((safe_div_func_uint32_t_u_u((safe_sub_func_int32_t_s_s((((((*l_495) & ((l_541 &= 0x15239216L) ^ (&g_216 == &g_216))) , 0xD1FAFE0AL) > (**l_496)) , p_32), 0x11CB596BL)), l_542)), g_543)))), (*l_495))) != (*l_495))))) > p_32))) <= (*g_216))))
                { /* block id: 233 */
                    int32_t l_562 = 0L;
                    uint16_t *l_573 = &g_72;
                    uint16_t *l_578 = &l_213[2][6][1];
                    uint16_t *l_579 = &l_542;
                    int32_t l_580[8][1][3] = {{{0L,0L,0L}},{{0xED1E47A8L,0xED1E47A8L,0xED1E47A8L}},{{0L,0L,0L}},{{0xED1E47A8L,0xED1E47A8L,0xED1E47A8L}},{{0L,0L,0L}},{{0xED1E47A8L,0xED1E47A8L,0xED1E47A8L}},{{0L,0L,0L}},{{0xED1E47A8L,0xED1E47A8L,0xED1E47A8L}}};
                    uint8_t l_596 = 246UL;
                    union U1 **l_597 = &l_476[0];
                    union U1 ***l_598 = &l_597;
                    int i, j, k;
                    (*l_495) = ((p_32 ^ (((*l_546) &= p_32) & (safe_sub_func_uint8_t_u_u(((safe_unary_minus_func_uint8_t_u((safe_mul_func_int16_t_s_s((+(((((p_32 != p_32) , (void*)0) == (void*)0) & ((void*)0 == g_554)) > 1L)), 0xE42FL)))) , (*g_555)), (*g_555))))) >= (**l_496));
                    l_517 |= (p_32 ^ ((**l_496) || ((safe_lshift_func_int16_t_s_u((safe_lshift_func_uint8_t_u_s((p_32 > (safe_sub_func_uint16_t_u_u((l_562 & (l_580[2][0][0] |= (safe_sub_func_int32_t_s_s(((*g_214) = (((safe_mul_func_uint16_t_u_u(((*l_579) = (+((safe_add_func_uint32_t_u_u((safe_add_func_int8_t_s_s((-9L), (((((safe_sub_func_int32_t_s_s((*l_495), (((((*l_578) = ((++(*l_573)) , (((safe_div_func_uint8_t_u_u((&l_496 == &l_496), (*g_487))) ^ (*l_495)) != 0UL))) ^ p_32) && 0x6B6A2B71L) != (**g_486)))) , (void*)0) != &g_331) ^ 0x78B73E53L) | 0xD9BBL))), p_32)) , p_32))), (*g_216))) , (*l_495)) , p_32)), 0L)))), p_32))), p_32)), 0)) & p_32)));
                    l_596 |= ((+(p_32 , ((+2UL) != (safe_div_func_uint32_t_u_u(((safe_lshift_func_uint8_t_u_u((l_471 , (safe_mul_func_uint16_t_u_u((safe_sub_func_int16_t_s_s((*l_495), l_589)), (((**l_496) &= (safe_unary_minus_func_int8_t_s((-3L)))) | (safe_mod_func_int16_t_s_s((((*l_495) <= ((safe_div_func_uint32_t_u_u(p_32, 1L)) | 0L)) <= g_408), p_32)))))), 4)) > (*g_487)), 0x8438359BL))))) <= l_595[1]);
                    (*l_598) = l_597;
                }
                else
                { /* block id: 245 */
                    int32_t l_622 = 0xFB315905L;
                    uint16_t *l_627 = (void*)0;
                    uint16_t *l_628 = &l_542;
                    uint8_t l_629[8][8][2] = {{{248UL,248UL},{7UL,255UL},{254UL,0UL},{4UL,0UL},{247UL,4UL},{255UL,0x46L},{255UL,4UL},{247UL,0UL}},{{4UL,0UL},{254UL,255UL},{7UL,248UL},{248UL,6UL},{1UL,0x4EL},{0x5DL,0UL},{6UL,6UL},{0xAAL,254UL}},{{0x8AL,247UL},{6UL,0x5DL},{0x22L,249UL},{0xFBL,2UL},{6UL,0xFEL},{0x4EL,0xFEL},{6UL,2UL},{0xFBL,249UL}},{{0x22L,0x5DL},{6UL,247UL},{0x8AL,254UL},{0xAAL,6UL},{6UL,0UL},{0x5DL,0x4EL},{1UL,6UL},{248UL,248UL}},{{7UL,255UL},{254UL,0UL},{4UL,0UL},{247UL,4UL},{255UL,0x46L},{255UL,4UL},{247UL,0UL},{4UL,0UL}},{{254UL,255UL},{7UL,248UL},{248UL,6UL},{1UL,0x4EL},{0x5DL,0UL},{6UL,6UL},{0xAAL,254UL},{0x8AL,247UL}},{{6UL,0x5DL},{0x22L,249UL},{0xFBL,2UL},{6UL,0xFEL},{0x4EL,0xFEL},{6UL,2UL},{0xFBL,249UL},{0x22L,0x5DL}},{{6UL,247UL},{0x8AL,254UL},{0xAAL,6UL},{6UL,0UL},{0x5DL,0x4EL},{1UL,6UL},{248UL,248UL},{7UL,255UL}}};
                    const int32_t ** const *l_631 = (void*)0;
                    const int32_t ** const **l_630 = &l_631;
                    int32_t l_640 = 7L;
                    int32_t l_641 = (-1L);
                    int8_t l_642 = (-1L);
                    int32_t l_643 = (-1L);
                    int32_t l_644 = 0x8BDF11AEL;
                    int i, j, k;
                    if ((safe_rshift_func_int8_t_s_s(((safe_rshift_func_uint16_t_u_u((((l_605 | p_32) ^ (((l_606 , ((l_375 , ((safe_mul_func_int8_t_s_s((((safe_mul_func_uint16_t_u_u((g_477 , l_632), p_32)) && p_32) ^ p_32), p_32)) & p_32)) < l_633)) || (**g_486)) <= p_32)) < l_634), 9)) , l_635), 2)))
                    { /* block id: 249 */
                        int32_t *l_636 = &l_595[1];
                        int32_t *l_637 = &l_326;
                        int32_t *l_638[10][10] = {{&l_440,&l_300[2][2],&l_440,&l_441,&g_215,&l_595[1],&l_443,&g_53,&g_215,&g_215},{&l_300[2][2],&g_215,(void*)0,&l_595[2],&l_443,&g_53,&g_215,&g_55,&g_55,&g_215},{&l_440,(void*)0,&g_215,&g_215,(void*)0,&l_440,&g_55,&l_388,&l_443,(void*)0},{&l_595[1],&l_622,&g_55,&l_311,&l_388,(void*)0,&g_53,&g_52,&l_326,&l_441},{&l_595[1],&g_215,&l_441,&l_440,&l_300[2][2],&l_440,&l_441,&g_215,&l_595[1],&l_443},{&l_440,&l_441,&g_215,&l_595[1],&l_443,&g_53,&g_215,&g_215,&l_517,&g_52},{&l_311,&g_55,&l_622,&l_595[1],&l_517,&l_595[2],&l_595[2],&l_517,&l_595[1],&l_622},{&g_215,&g_215,(void*)0,&l_440,&g_55,&l_388,&l_443,(void*)0,&l_326,&l_289},{&l_441,(void*)0,&g_215,&l_311,&l_595[2],&l_326,&l_443,&l_440,&l_443,&l_326},{&l_289,&g_215,&l_311,&g_215,&l_289,&g_215,&l_595[2],&l_300[4][1],&g_55,(void*)0}};
                        int i, j;
                        ++l_645;
                    }
                    else
                    { /* block id: 251 */
                        uint16_t **l_649 = &g_351;
                        struct S0 l_652 = {1,-1595,1,-114,32,1,3,-572,3};
                        l_648 &= (*g_214);
                        (*l_496) = (*l_236);
                        l_656 = (p_32 , (((+(*l_495)) <= (((*l_649) = &g_72) != &g_72)) , ((((((--(**l_649)) , (((l_652 , (safe_sub_func_uint32_t_u_u((((*g_351) = (*g_351)) >= p_32), ((*l_495) = p_32)))) != (((*l_475) , (**g_486)) >= (**g_486))) | p_32)) > l_655) >= p_32) >= 3UL) & (*g_216))));
                    }
                }
                (*l_657) |= (*l_495);
            }
            return (**g_554);
        }
        (*g_86) = (safe_add_func_uint32_t_u_u(p_32, (safe_div_func_uint16_t_u_u(0UL, (l_471 , (((**l_236) | ((&g_24 != (l_665 = l_253)) ^ (**l_236))) && (*l_495)))))));
    }
    else
    { /* block id: 267 */
        int32_t *l_667 = &l_311;
        const int8_t **l_779 = (void*)0;
        int32_t ***l_783 = &l_236;
        int32_t ****l_782 = &l_783;
        for (g_52 = 0; (g_52 <= 1); g_52 += 1)
        { /* block id: 270 */
            int32_t *l_674 = &g_2;
            int i;
            if (g_312[g_52])
                break;
            (**l_236) = g_141[g_52];
            l_667 = l_667;
            (*l_674) ^= (!((~((safe_add_func_uint8_t_u_u(((safe_mul_func_uint16_t_u_u(((((*g_214) = ((**l_236) = (safe_sub_func_uint16_t_u_u(((~p_32) >= (*l_667)), (0xFCA0L || (*g_216)))))) < (p_32 || ((!9L) != (0xEAD7L || p_32)))) | 2UL), (*l_667))) | 0xD8E940E8L), 0UL)) < p_32)) | 3UL));
        }
        (*g_86) = (safe_mul_func_int8_t_s_s((((*g_487) = (0xEDL && 2UL)) >= ((void*)0 == &g_486)), p_32));
        for (g_53 = 0; (g_53 <= 0); g_53 += 1)
        { /* block id: 282 */
            union U1 **l_690 = &l_476[0];
            union U1 ***l_689 = &l_690;
            int32_t l_697 = 5L;
            int32_t l_698 = 0x4E770919L;
            uint32_t **l_713[2];
            int16_t l_728 = 0x06BDL;
            struct S0 l_738[4] = {{-1,-28471,1,52,85,1,-3,153,2},{-1,-28471,1,52,85,1,-3,153,2},{-1,-28471,1,52,85,1,-3,153,2},{-1,-28471,1,52,85,1,-3,153,2}};
            int16_t **l_739 = &g_216;
            const int8_t *l_781 = (void*)0;
            const int8_t **l_780 = &l_781;
            int i;
            for (i = 0; i < 2; i++)
                l_713[i] = &l_233[2][1];
            for (g_626 = 0; (g_626 <= 1); g_626 += 1)
            { /* block id: 285 */
                int32_t ***l_686 = &l_236;
                int32_t **** const l_685[1][6][8] = {{{&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686},{&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686},{&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686},{&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686},{&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686},{&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686,&l_686}}};
                int8_t ***l_693 = (void*)0;
                int8_t ***l_694 = (void*)0;
                int8_t ***l_695[1];
                uint32_t **l_715 = &g_252[0][3];
                union U1 *l_722 = &g_477;
                uint32_t * const *l_773 = (void*)0;
                uint32_t * const **l_772[4];
                int i, j, k;
                for (i = 0; i < 1; i++)
                    l_695[i] = (void*)0;
                for (i = 0; i < 4; i++)
                    l_772[i] = &l_773;
            }
            (**l_236) ^= ((safe_sub_func_uint32_t_u_u(((*l_775) = p_32), ((l_738[3] , l_779) == l_780))) , (0xC66D43EFL & ((1L && ((g_350[4][2].f4 , l_782) == g_784[1])) | 65535UL)));
            if (g_55)
                goto lbl_787;
        }
    }
    return p_32;
}


/* ------------------------------------------ */
/* 
 * reads : g_141 g_53 g_2 g_36 g_86 g_52 g_109 g_114 g_72 g_144 g_24 g_55 g_126 g_214 g_215
 * writes: g_24 g_2 g_36 g_52 g_53 g_55 g_86 g_113 g_126 g_109.f3 g_114 g_141 g_143 g_144 g_72 g_194 g_215
 */
static int32_t * func_40(uint32_t  p_41, int32_t * p_42, int16_t * p_43, int32_t  p_44, uint32_t * p_45)
{ /* block id: 97 */
    uint32_t l_235 = 1UL;
    (*g_214) |= ((func_46(g_141[1]) , l_235) , 0xCE81F14CL);
    return p_45;
}


/* ------------------------------------------ */
/* 
 * reads : g_24 g_53 g_2 g_36 g_86 g_52 g_109 g_114 g_72 g_144 g_55 g_126 g_141
 * writes: g_24 g_2 g_36 g_52 g_53 g_55 g_86 g_113 g_126 g_109.f3 g_114 g_141 g_143 g_144 g_72 g_194
 */
static union U1  func_46(int8_t  p_47)
{ /* block id: 15 */
    int32_t *l_50 = &g_2;
    int32_t l_211[7][2][7] = {{{6L,(-5L),6L,(-5L),6L,(-5L),6L},{0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L,0xD1FBBA7CL,0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L}},{{0x225E0FD6L,(-5L),0x225E0FD6L,(-5L),0x225E0FD6L,(-5L),0x225E0FD6L},{0xD1FBBA7CL,0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L,0xD1FBBA7CL,0xD1FBBA7CL,0xBCAAB667L}},{{6L,(-5L),6L,(-5L),6L,(-5L),6L},{0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L,0xD1FBBA7CL,0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L}},{{0x225E0FD6L,(-5L),0x225E0FD6L,(-5L),0x225E0FD6L,(-5L),0x225E0FD6L},{0xD1FBBA7CL,0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L,0xD1FBBA7CL,0xD1FBBA7CL,0xBCAAB667L}},{{6L,(-5L),6L,(-5L),6L,(-5L),6L},{0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L,0xD1FBBA7CL,0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L}},{{0x225E0FD6L,(-5L),0x225E0FD6L,(-5L),0x225E0FD6L,(-5L),0x225E0FD6L},{0xD1FBBA7CL,0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L,0xD1FBBA7CL,0xD1FBBA7CL,0xBCAAB667L}},{{6L,(-5L),6L,(-5L),6L,(-5L),6L},{0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L,0xD1FBBA7CL,0xD1FBBA7CL,0xBCAAB667L,0xBCAAB667L}}};
    union U1 l_212 = {0L};
    int i, j, k;
    l_211[2][1][3] &= func_48(l_50);
    return l_212;
}


/* ------------------------------------------ */
/* 
 * reads : g_24 g_53 g_2 g_36 g_86 g_52 g_109 g_114 g_72 g_144 g_55 g_126 g_141
 * writes: g_24 g_2 g_36 g_52 g_53 g_55 g_86 g_113 g_126 g_109.f3 g_114 g_141 g_143 g_144 g_72 g_194
 */
static int32_t  func_48(int32_t * p_49)
{ /* block id: 16 */
    uint32_t l_51[1];
    uint16_t *l_193 = &g_72;
    int8_t *l_195 = &g_143;
    int16_t *l_207 = (void*)0;
    int16_t *l_208 = &g_36;
    int32_t l_209[7][1];
    int32_t l_210 = 0xA774E767L;
    int i, j;
    for (i = 0; i < 1; i++)
        l_51[i] = 2UL;
    for (i = 0; i < 7; i++)
    {
        for (j = 0; j < 1; j++)
            l_209[i][j] = 9L;
    }
    for (g_24 = 0; (g_24 <= 0); g_24 += 1)
    { /* block id: 19 */
        uint32_t l_57 = 4294967293UL;
        int32_t l_85 = 0L;
        for (g_2 = 0; (g_2 >= 0); g_2 -= 1)
        { /* block id: 22 */
            int32_t l_88[7];
            const uint32_t l_173[9] = {0xBCAD55B1L,0xBCAD55B1L,0xBCAD55B1L,0xBCAD55B1L,0xBCAD55B1L,0xBCAD55B1L,0xBCAD55B1L,0xBCAD55B1L,0xBCAD55B1L};
            int32_t l_183 = 0x181DA4DAL;
            int i;
            for (i = 0; i < 7; i++)
                l_88[i] = 0xFA934127L;
            for (g_36 = 0; (g_36 <= 0); g_36 += 1)
            { /* block id: 25 */
                uint32_t l_67 = 1UL;
                int32_t l_73 = 0xAC9C4BD7L;
                for (g_52 = 0; (g_52 >= 0); g_52 -= 1)
                { /* block id: 28 */
                    uint8_t l_68 = 251UL;
                    for (g_53 = 0; g_53 < 1; g_53 += 1)
                    {
                        l_51[g_53] = 4294967287UL;
                    }
                    for (g_53 = 0; (g_53 >= 0); g_53 -= 1)
                    { /* block id: 32 */
                        int32_t *l_54 = &g_55;
                        int32_t *l_56 = &g_55;
                        int32_t **l_60[5][2][1] = {{{&l_54},{(void*)0}},{{&l_54},{(void*)0}},{{&l_54},{(void*)0}},{{&l_54},{(void*)0}},{{&l_54},{(void*)0}}};
                        uint16_t *l_71[4][9] = {{(void*)0,&g_72,(void*)0,(void*)0,&g_72,(void*)0,(void*)0,&g_72,(void*)0},{(void*)0,&g_72,(void*)0,(void*)0,&g_72,(void*)0,(void*)0,&g_72,(void*)0},{(void*)0,&g_72,(void*)0,(void*)0,&g_72,(void*)0,(void*)0,&g_72,(void*)0},{(void*)0,&g_72,(void*)0,(void*)0,&g_72,(void*)0,(void*)0,&g_72,(void*)0}};
                        int i, j, k;
                        l_57++;
                        if (l_51[g_53])
                            break;
                        p_49 = (void*)0;
                        (*l_54) = (safe_add_func_uint16_t_u_u(((safe_mod_func_uint16_t_u_u(0x021BL, (safe_lshift_func_int8_t_s_s((l_57 <= ((l_67 ^ (l_68 > (safe_lshift_func_uint16_t_u_s((l_73 = g_2), 10)))) == 0UL)), (safe_unary_minus_func_uint8_t_u((!l_67))))))) | l_68), (safe_add_func_uint32_t_u_u((safe_lshift_func_int16_t_s_u(g_36, 7)), 0L))));
                    }
                    l_85 &= (safe_mul_func_uint8_t_u_u((safe_sub_func_uint8_t_u_u((safe_lshift_func_uint8_t_u_u(l_68, 2)), l_67)), g_2));
                    for (g_53 = 0; (g_53 <= 0); g_53 += 1)
                    { /* block id: 42 */
                        return l_51[0];
                    }
                }
                for (l_67 = 0; (l_67 <= 0); l_67 += 1)
                { /* block id: 48 */
                    const int16_t *l_87 = (void*)0;
                    int16_t l_172 = (-1L);
                    int32_t *l_174 = &l_85;
                    uint16_t *l_184[7] = {(void*)0,&g_72,(void*)0,(void*)0,&g_72,(void*)0,(void*)0};
                    int32_t *l_190 = &g_53;
                    int i;
                    g_86 = &g_2;
                    if ((~((&g_36 != l_87) <= (l_88[5] <= (safe_mod_func_int32_t_s_s((*g_86), ((*l_174) &= (((safe_mod_func_int32_t_s_s((safe_div_func_int32_t_s_s((((safe_sub_func_uint16_t_u_u(func_97(g_52), (((safe_mod_func_int16_t_s_s(l_88[3], (safe_mod_func_int16_t_s_s((safe_rshift_func_uint16_t_u_s(g_109.f6, (0L == g_109.f0))), l_51[0])))) , l_88[5]) | l_88[3]))) == l_88[5]) < l_172), (*g_86))), l_173[0])) <= (-1L)) , 1L))))))))
                    { /* block id: 75 */
                        (*l_174) = 0xA3D40197L;
                        return (*g_86);
                    }
                    else
                    { /* block id: 78 */
                        if (l_51[0])
                            break;
                    }
                    (*l_190) &= ((l_51[g_24] = (l_51[0] || ((~(l_51[0] || l_67)) > (safe_mod_func_uint16_t_u_u(0x7F8CL, (safe_div_func_int16_t_s_s((safe_lshift_func_uint16_t_u_u(((((((l_173[0] ^ (safe_mod_func_int16_t_s_s(g_55, (g_72 = l_183)))) || ((+(safe_mul_func_uint16_t_u_u((safe_lshift_func_uint16_t_u_s(l_73, 1)), (((safe_unary_minus_func_uint32_t_u(l_183)) != (-1L)) != l_51[0])))) ^ g_109.f4)) , g_109.f3) , g_126[2][2]) < 0x684FL) , l_51[0]), g_109.f2)), l_51[0]))))))) && (*l_174));
                }
                if (l_51[0])
                    continue;
                return l_173[2];
            }
        }
    }
    l_210 &= (safe_add_func_uint32_t_u_u(((~(((((*l_195) = ((g_194[0] = l_193) == l_193)) >= (safe_sub_func_uint32_t_u_u(((((safe_unary_minus_func_uint16_t_u(((((safe_add_func_uint16_t_u_u((l_195 != ((*g_86) , l_195)), (safe_sub_func_int8_t_s_s((safe_rshift_func_int16_t_s_u((((8L < (l_51[0] > (~(((((safe_mul_func_int16_t_s_s(((*l_208) &= (-1L)), 0xAB67L)) > l_51[0]) != g_126[0][1]) , 0xBED7L) <= l_51[0])))) && (-5L)) & g_141[0]), g_109.f1)), g_126[2][0])))) > g_72) & 0UL) && 0L))) == 0x986FCF50L) > l_209[2][0]) < l_209[5][0]), l_51[0]))) , l_195) == l_195)) > 0x199EL), 0xF422AACBL));
    return l_51[0];
}


/* ------------------------------------------ */
/* 
 * reads : g_109 g_114 g_72 g_53 g_52 g_86 g_2 g_144 g_24 g_36
 * writes: g_113 g_126 g_109.f3 g_52 g_114 g_53 g_141 g_143 g_144 g_55
 */
static uint16_t  func_97(uint32_t  p_98)
{ /* block id: 50 */
    const struct S0 l_108[9][4] = {{{0,-21199,1,135,86,0,1,-402,3},{-1,23252,1,149,26,1,-4,-424,-2},{0,-21199,1,135,86,0,1,-402,3},{-0,-7293,0,111,28,1,7,-518,-3}},{{0,-21199,1,135,86,0,1,-402,3},{-0,-7293,0,111,28,1,7,-518,-3},{-0,-7293,0,111,28,1,7,-518,-3},{0,-21199,1,135,86,0,1,-402,3}},{{1,3929,0,-39,34,0,-6,-396,2},{-0,-7293,0,111,28,1,7,-518,-3},{-0,-26147,1,-163,61,0,7,427,2},{-0,-7293,0,111,28,1,7,-518,-3}},{{-0,-7293,0,111,28,1,7,-518,-3},{-1,23252,1,149,26,1,-4,-424,-2},{-0,-26147,1,-163,61,0,7,427,2},{-0,-26147,1,-163,61,0,7,427,2}},{{1,3929,0,-39,34,0,-6,-396,2},{1,3929,0,-39,34,0,-6,-396,2},{-0,-7293,0,111,28,1,7,-518,-3},{-0,-26147,1,-163,61,0,7,427,2}},{{0,-21199,1,135,86,0,1,-402,3},{-1,23252,1,149,26,1,-4,-424,-2},{0,-21199,1,135,86,0,1,-402,3},{-0,-7293,0,111,28,1,7,-518,-3}},{{0,-21199,1,135,86,0,1,-402,3},{-0,-7293,0,111,28,1,7,-518,-3},{-0,-7293,0,111,28,1,7,-518,-3},{0,-21199,1,135,86,0,1,-402,3}},{{1,3929,0,-39,34,0,-6,-396,2},{-0,-7293,0,111,28,1,7,-518,-3},{-0,-26147,1,-163,61,0,7,427,2},{-0,-7293,0,111,28,1,7,-518,-3}},{{-0,-7293,0,111,28,1,7,-518,-3},{-1,23252,1,149,26,1,-4,-424,-2},{-0,-26147,1,-163,61,0,7,427,2},{-0,-26147,1,-163,61,0,7,427,2}}};
    const union U1 l_110[3][7][3] = {{{{0L},{0L},{0L}},{{0xE3L},{-1L},{-1L}},{{0L},{0L},{0x97L}},{{0xE3L},{7L},{0xE3L}},{{0L},{0L},{0x97L}},{{-9L},{-9L},{-1L}},{{0xB4L},{0L},{0L}}},{{{-1L},{7L},{0x16L}},{{0xB4L},{0L},{0xB4L}},{{-9L},{-1L},{0x16L}},{{0L},{0L},{0L}},{{0xE3L},{-1L},{-1L}},{{0L},{0L},{0x97L}},{{0xE3L},{7L},{0xE3L}}},{{{0L},{0L},{0x97L}},{{-9L},{-9L},{-1L}},{{0x97L},{0xB4L},{0xB4L}},{{0xE3L},{-9L},{7L}},{{0x97L},{0L},{0x97L}},{{-1L},{0xE3L},{7L}},{{0L},{0L},{0xB4L}}}};
    int32_t *l_111 = (void*)0;
    uint8_t *l_112 = &g_113;
    int32_t **l_164 = &l_111;
    uint32_t l_165 = 0xE251D069L;
    int i, j, k;
    (*l_164) = func_99(&g_24, func_104(l_108[1][0], ((l_108[1][0].f4 , g_109) , ((l_110[0][2][1] , (((void*)0 != l_111) <= ((l_110[0][2][1] , ((*l_112) = (p_98 > p_98))) ^ g_109.f5))) | 0x4A07L)), g_114), g_109.f6, g_109.f7);
    return l_165;
}


/* ------------------------------------------ */
/* 
 * reads : g_52 g_109.f1 g_109.f0 g_86 g_2 g_144 g_24 g_36 g_234
 * writes: g_52 g_114 g_53 g_141 g_143 g_144 g_55
 */
static int32_t * func_99(uint32_t * const  p_100, uint8_t  p_101, uint8_t  p_102, const int8_t  p_103)
{ /* block id: 57 */
    uint8_t l_151[6][9][4] = {{{255UL,0x6EL,0x5DL,0xA6L},{1UL,0UL,0UL,1UL},{1UL,0xC0L,0x5DL,0xD0L},{255UL,1UL,0xFCL,0x27L},{0xA6L,6UL,0xA6L,0x27L},{0xFCL,1UL,255UL,0xD0L},{0x5DL,0xC0L,1UL,1UL},{0UL,0UL,1UL,0xA6L},{0x5DL,0x6EL,255UL,0xC0L}},{{0xFCL,255UL,0xA6L,255UL},{0xA6L,255UL,0xFCL,0xC0L},{255UL,0x6EL,0x5DL,0xA6L},{1UL,0UL,0UL,1UL},{1UL,0xC0L,0x5DL,0xD0L},{255UL,1UL,0xFCL,0x27L},{0xA6L,6UL,0xA6L,0x27L},{0xFCL,1UL,255UL,0xD0L},{0x5DL,0xC0L,1UL,1UL}},{{0UL,0UL,1UL,0xA6L},{0x5DL,0x6EL,255UL,0xC0L},{0xFCL,255UL,0xA6L,255UL},{0xA6L,255UL,0xFCL,0xC0L},{255UL,0x6EL,0x5DL,0xA6L},{1UL,0UL,0UL,1UL},{1UL,0xC0L,0x5DL,0xD0L},{255UL,1UL,0xFCL,0x27L},{0xA6L,6UL,0xA6L,0x27L}},{{0xFCL,1UL,255UL,0xD0L},{0x5DL,0xC0L,1UL,1UL},{0UL,0UL,1UL,0xA6L},{0x5DL,0x6EL,255UL,0xC0L},{0xFCL,255UL,0xA6L,255UL},{0xA6L,255UL,0xFCL,0xC0L},{255UL,0x6EL,0x5DL,0xA6L},{1UL,0UL,0UL,1UL},{1UL,0xC0L,0x5DL,0xD0L}},{{255UL,1UL,0xFCL,0x27L},{0xA6L,6UL,0xA6L,0x27L},{0xFCL,1UL,255UL,0xD0L},{0x5DL,0xC0L,1UL,1UL},{0UL,0UL,1UL,0xA6L},{0x5DL,0x6EL,255UL,0xC0L},{0xFCL,255UL,0xA6L,255UL},{0xA6L,255UL,0xFCL,0xC0L},{6UL,0xFCL,0xA6L,0xC0L}},{{0UL,0x27L,0x27L,0UL},{0UL,1UL,0xA6L,0x6EL},{6UL,0UL,0x5DL,255UL},{0xC0L,0xD0L,0xC0L,255UL},{0x5DL,0UL,6UL,0x6EL},{0xA6L,1UL,0UL,0UL},{0x27L,0x27L,0UL,0xC0L},{0xA6L,0xFCL,6UL,1UL},{0x5DL,6UL,0xC0L,6UL}}};
    int32_t *l_155 = &g_55;
    int32_t l_156 = 0x20075B0AL;
    int32_t *l_157 = (void*)0;
    int32_t *l_158 = &g_52;
    int32_t *l_159 = (void*)0;
    uint16_t l_160 = 0xAE7EL;
    int32_t *l_163 = (void*)0;
    int i, j, k;
    for (g_52 = 0; (g_52 < 13); g_52 = safe_add_func_int8_t_s_s(g_52, 1))
    { /* block id: 60 */
        int16_t l_132[8] = {0x8A8DL,0x8A8DL,1L,0x8A8DL,0x8A8DL,1L,0x8A8DL,0x8A8DL};
        uint8_t *l_135[2][9] = {{&g_114,(void*)0,&g_113,&g_113,&g_113,(void*)0,&g_114,&g_114,(void*)0},{&g_113,(void*)0,&g_114,(void*)0,&g_113,(void*)0,(void*)0,&g_113,(void*)0}};
        int32_t *l_136 = &g_53;
        int32_t **l_137 = &l_136;
        uint32_t *l_138 = (void*)0;
        uint32_t *l_139 = (void*)0;
        uint32_t *l_140 = &g_141[1];
        int8_t *l_142 = &g_143;
        int32_t *l_152 = &g_55;
        int32_t **l_153 = (void*)0;
        int32_t **l_154[5][5] = {{&l_152,&l_136,&l_152,&g_86,&g_86},{&l_152,&l_152,&g_86,&l_152,&l_152},{&l_152,&l_152,&l_136,&l_152,&l_136},{&l_136,&l_136,&g_86,&l_152,&l_152},{&l_152,&l_152,&l_152,&l_152,&l_136}};
        int i, j;
        (*l_136) = (l_132[7] | (g_114 = (safe_div_func_int8_t_s_s(l_132[7], g_109.f1))));
        (*l_137) = p_100;
        (*l_152) = (0x47L != ((g_109.f0 >= ((*l_142) = (((*l_140) = ((void*)0 != &g_114)) >= (*g_86)))) > ((0xACL >= (g_144 |= 7L)) | (((safe_rshift_func_int16_t_s_s((((safe_rshift_func_int16_t_s_u(0x722AL, ((safe_add_func_uint8_t_u_u(((*g_86) != (*p_100)), l_151[4][2][3])) || l_151[5][1][2]))) & (*g_86)) == p_102), 6)) , g_36) ^ l_151[4][2][3]))));
        l_155 = p_100;
    }
    l_160++;
    return l_163;
}


/* ------------------------------------------ */
/* 
 * reads : g_72 g_53 g_109.f6 g_52 g_109.f3
 * writes: g_126 g_109.f3
 */
static uint8_t  func_104(const struct S0  p_105, int16_t  p_106, int32_t  p_107)
{ /* block id: 52 */
    uint8_t l_121 = 0xD5L;
    uint32_t l_124[7];
    int16_t *l_125 = &g_126[2][2];
    int32_t *l_127[9][9] = {{&g_53,&g_52,(void*)0,&g_52,&g_53,&g_55,&g_52,(void*)0,(void*)0},{&g_2,&g_2,(void*)0,&g_2,(void*)0,&g_2,&g_2,&g_53,&g_2},{&g_2,&g_53,&g_52,&g_55,&g_52,&g_55,&g_52,&g_53,&g_2},{&g_2,&g_52,(void*)0,&g_53,&g_55,(void*)0,&g_55,&g_53,(void*)0},{&g_52,&g_52,&g_55,(void*)0,&g_53,(void*)0,&g_2,(void*)0,&g_53},{&g_2,&g_55,&g_55,&g_2,&g_2,&g_2,&g_2,(void*)0,&g_2},{&g_2,&g_55,&g_55,&g_55,&g_55,&g_2,&g_52,&g_52,&g_53},{&g_2,&g_2,(void*)0,&g_2,&g_2,(void*)0,&g_2,&g_2,&g_52},{&g_53,&g_55,&g_52,&g_52,&g_53,&g_53,&g_52,&g_52,&g_55}};
    int32_t *l_128[3];
    int16_t l_129 = (-1L);
    int i, j;
    for (i = 0; i < 7; i++)
        l_124[i] = 18446744073709551615UL;
    for (i = 0; i < 3; i++)
        l_128[i] = &g_52;
    g_109.f3 |= (safe_add_func_uint16_t_u_u((((((safe_div_func_uint16_t_u_u((safe_mod_func_int8_t_s_s((((((p_105.f0 <= (l_121 ^ p_106)) > (~(((*l_125) = (p_105.f5 <= (safe_rshift_func_int8_t_s_u(l_124[0], 0)))) > (((l_124[0] && l_124[2]) != ((l_128[2] = l_127[6][6]) == (void*)0)) & p_105.f5)))) >= 0xF23EL) < g_72) | 0L), p_107)), (-8L))) | g_53) , g_109.f6) | p_105.f8) , 0xEFFEL), g_52));
    return l_129;
}




/* ---------------------------------------- */
int main (int argc, char* argv[])
{
    int i, j, k;
    int print_hash_value = 0;
    if (argc == 2 && strcmp(argv[1], "1") == 0) print_hash_value = 1;
    platform_main_begin();
    crc32_gentab();
    func_1();
    transparent_crc(g_2, "g_2", print_hash_value);
    transparent_crc(g_24, "g_24", print_hash_value);
    transparent_crc(g_36, "g_36", print_hash_value);
    transparent_crc(g_52, "g_52", print_hash_value);
    transparent_crc(g_53, "g_53", print_hash_value);
    transparent_crc(g_55, "g_55", print_hash_value);
    transparent_crc(g_72, "g_72", print_hash_value);
    transparent_crc(g_109.f0, "g_109.f0", print_hash_value);
    transparent_crc(g_109.f1, "g_109.f1", print_hash_value);
    transparent_crc(g_109.f2, "g_109.f2", print_hash_value);
    transparent_crc(g_109.f3, "g_109.f3", print_hash_value);
    transparent_crc(g_109.f4, "g_109.f4", print_hash_value);
    transparent_crc(g_109.f5, "g_109.f5", print_hash_value);
    transparent_crc(g_109.f6, "g_109.f6", print_hash_value);
    transparent_crc(g_109.f7, "g_109.f7", print_hash_value);
    transparent_crc(g_109.f8, "g_109.f8", print_hash_value);
    transparent_crc(g_113, "g_113", print_hash_value);
    transparent_crc(g_114, "g_114", print_hash_value);
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 6; j++)
        {
            transparent_crc(g_126[i][j], "g_126[i][j]", print_hash_value);
            if (print_hash_value) printf("index = [%d][%d]\n", i, j);

        }
    }
    for (i = 0; i < 2; i++)
    {
        transparent_crc(g_141[i], "g_141[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_143, "g_143", print_hash_value);
    transparent_crc(g_144, "g_144", print_hash_value);
    transparent_crc(g_215, "g_215", print_hash_value);
    transparent_crc(g_217, "g_217", print_hash_value);
    for (i = 0; i < 6; i++)
    {
        for (j = 0; j < 6; j++)
        {
            for (k = 0; k < 7; k++)
            {
                transparent_crc(g_234[i][j][k], "g_234[i][j][k]", print_hash_value);
                if (print_hash_value) printf("index = [%d][%d][%d]\n", i, j, k);

            }
        }
    }
    for (i = 0; i < 2; i++)
    {
        transparent_crc(g_312[i], "g_312[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_331.f0, "g_331.f0", print_hash_value);
    for (i = 0; i < 9; i++)
    {
        for (j = 0; j < 8; j++)
        {
            transparent_crc(g_350[i][j].f0, "g_350[i][j].f0", print_hash_value);
            transparent_crc(g_350[i][j].f1, "g_350[i][j].f1", print_hash_value);
            transparent_crc(g_350[i][j].f2, "g_350[i][j].f2", print_hash_value);
            transparent_crc(g_350[i][j].f3, "g_350[i][j].f3", print_hash_value);
            transparent_crc(g_350[i][j].f4, "g_350[i][j].f4", print_hash_value);
            transparent_crc(g_350[i][j].f5, "g_350[i][j].f5", print_hash_value);
            transparent_crc(g_350[i][j].f6, "g_350[i][j].f6", print_hash_value);
            transparent_crc(g_350[i][j].f7, "g_350[i][j].f7", print_hash_value);
            transparent_crc(g_350[i][j].f8, "g_350[i][j].f8", print_hash_value);
            if (print_hash_value) printf("index = [%d][%d]\n", i, j);

        }
    }
    transparent_crc(g_408, "g_408", print_hash_value);
    transparent_crc(g_477.f0, "g_477.f0", print_hash_value);
    transparent_crc(g_493, "g_493", print_hash_value);
    transparent_crc(g_543, "g_543", print_hash_value);
    transparent_crc(g_626, "g_626", print_hash_value);
    transparent_crc(g_664, "g_664", print_hash_value);
    for (i = 0; i < 1; i++)
    {
        for (j = 0; j < 9; j++)
        {
            for (k = 0; k < 4; k++)
            {
                transparent_crc(g_666[i][j][k], "g_666[i][j][k]", print_hash_value);
                if (print_hash_value) printf("index = [%d][%d][%d]\n", i, j, k);

            }
        }
    }
    transparent_crc(g_733, "g_733", print_hash_value);
    transparent_crc(g_776, "g_776", print_hash_value);
    transparent_crc(g_807, "g_807", print_hash_value);
    transparent_crc(g_812, "g_812", print_hash_value);
    transparent_crc(g_824.f0, "g_824.f0", print_hash_value);
    transparent_crc(g_825, "g_825", print_hash_value);
    transparent_crc(g_891, "g_891", print_hash_value);
    transparent_crc(g_1058, "g_1058", print_hash_value);
    transparent_crc(g_1177.f0, "g_1177.f0", print_hash_value);
    platform_main_end(crc32_context ^ 0xFFFFFFFFUL, print_hash_value);
    return 0;
}

/************************ statistics *************************
XXX max struct depth: 1
breakdown:
   depth: 0, occurrence: 261
   depth: 1, occurrence: 12
XXX total union variables: 7

XXX non-zero bitfields defined in structs: 9
XXX zero bitfields defined in structs: 0
XXX const bitfields defined in structs: 1
XXX volatile bitfields defined in structs: 0
XXX structs with bitfields in the program: 13
breakdown:
   indirect level: 0, occurrence: 12
   indirect level: 1, occurrence: 1
XXX full-bitfields structs in the program: 12
breakdown:
   indirect level: 0, occurrence: 12
XXX times a bitfields struct's address is taken: 3
XXX times a bitfields struct on LHS: 0
XXX times a bitfields struct on RHS: 25
XXX times a single bitfield on LHS: 5
XXX times a single bitfield on RHS: 59

XXX max expression depth: 51
breakdown:
   depth: 1, occurrence: 185
   depth: 2, occurrence: 44
   depth: 3, occurrence: 2
   depth: 4, occurrence: 3
   depth: 5, occurrence: 5
   depth: 6, occurrence: 3
   depth: 7, occurrence: 3
   depth: 9, occurrence: 1
   depth: 11, occurrence: 1
   depth: 13, occurrence: 4
   depth: 14, occurrence: 1
   depth: 16, occurrence: 1
   depth: 17, occurrence: 2
   depth: 18, occurrence: 7
   depth: 19, occurrence: 1
   depth: 20, occurrence: 4
   depth: 21, occurrence: 2
   depth: 22, occurrence: 4
   depth: 23, occurrence: 4
   depth: 24, occurrence: 2
   depth: 25, occurrence: 2
   depth: 26, occurrence: 3
   depth: 27, occurrence: 1
   depth: 31, occurrence: 2
   depth: 32, occurrence: 1
   depth: 33, occurrence: 2
   depth: 34, occurrence: 1
   depth: 39, occurrence: 1
   depth: 51, occurrence: 1

XXX total number of pointers: 243

XXX times a variable address is taken: 502
XXX times a pointer is dereferenced on RHS: 249
breakdown:
   depth: 1, occurrence: 194
   depth: 2, occurrence: 53
   depth: 3, occurrence: 2
XXX times a pointer is dereferenced on LHS: 190
breakdown:
   depth: 1, occurrence: 170
   depth: 2, occurrence: 19
   depth: 3, occurrence: 1
XXX times a pointer is compared with null: 15
XXX times a pointer is compared with address of another variable: 3
XXX times a pointer is compared with another pointer: 9
XXX times a pointer is qualified to be dereferenced: 3325

XXX max dereference level: 4
breakdown:
   level: 0, occurrence: 0
   level: 1, occurrence: 943
   level: 2, occurrence: 212
   level: 3, occurrence: 39
   level: 4, occurrence: 2
XXX number of pointers point to pointers: 94
XXX number of pointers point to scalars: 139
XXX number of pointers point to structs: 1
XXX percent of pointers has null in alias set: 29.6
XXX average alias set size: 1.43

XXX times a non-volatile is read: 1247
XXX times a non-volatile is write: 551
XXX times a volatile is read: 0
XXX    times read thru a pointer: 0
XXX times a volatile is write: 0
XXX    times written thru a pointer: 0
XXX times a volatile is available for access: 0
XXX percentage of non-volatile access: 100

XXX forward jumps: 1
XXX backward jumps: 3

XXX stmts: 190
XXX max block depth: 5
breakdown:
   depth: 0, occurrence: 27
   depth: 1, occurrence: 24
   depth: 2, occurrence: 29
   depth: 3, occurrence: 38
   depth: 4, occurrence: 37
   depth: 5, occurrence: 35

XXX percentage a fresh-made variable is used: 15.1
XXX percentage an existing variable is used: 84.9
FYI: the random generator makes assumptions about the integer size. See platform.info for more details.
********************* end of statistics **********************/

