#include <metal_stdlib>

using namespace metal;
struct BST {
  int data;
  int leftIndex;
  int rightIndex;
};
struct buf0 {
  /* 0x0000 */ packed_float2 injectionSwitch;
};
struct tint_array_wrapper {
  BST arr[10];
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_2 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(constant buf0& x_8, thread float4* const tint_symbol_24, thread float4* const tint_symbol_25) {
  tint_array_wrapper tree = {};
  bool x_67 = false;
  bool x_114 = false;
  int x_572 = 0;
  bool x_67_phi = false;
  int x_70_phi = 0;
  bool x_116_phi = false;
  int x_119_phi = 0;
  int x_569_phi = 0;
  int x_572_phi = 0;
  int x_574_phi = 0;
  BST const tint_symbol_4 = {.data=9, .leftIndex=-1, .rightIndex=-1};
  tree.arr[0] = tint_symbol_4;
  switch(0u) {
    default: {
      x_67_phi = false;
      x_70_phi = 0;
      while (true) {
        int x_95 = 0;
        int x_87 = 0;
        bool x_68 = false;
        int x_71 = 0;
        bool x_68_phi = false;
        int x_71_phi = 0;
        x_67 = x_67_phi;
        int const x_70 = x_70_phi;
        x_116_phi = x_67;
        if ((x_70 <= 1)) {
        } else {
          break;
        }
        int const x_76 = tree.arr[x_70].data;
        if ((5 <= x_76)) {
          bool x_114_phi = false;
          int const x_89_save = x_70;
          int const x_90 = tree.arr[x_89_save].leftIndex;
          if ((x_90 == -1)) {
            float const x_97 = x_8.injectionSwitch.y;
            float const x_99 = x_8.injectionSwitch.x;
            if ((x_97 < x_99)) {
              while (true) {
                discard_fragment();
              }
              return;
            }
            tree.arr[x_89_save].leftIndex = 1;
            BST const tint_symbol_5 = {.data=5, .leftIndex=-1, .rightIndex=-1};
            tree.arr[1] = tint_symbol_5;
            while (true) {
              x_114_phi = x_67;
              if ((0 < int(x_97))) {
              } else {
                break;
              }
              x_114_phi = true;
              break;
            }
            x_114 = x_114_phi;
            x_116_phi = x_114;
            if (x_114) {
              break;
            }
          } else {
            x_95 = tree.arr[x_89_save].leftIndex;
            x_68_phi = x_67;
            x_71_phi = x_95;
            {
              x_68 = x_68_phi;
              x_71 = x_71_phi;
              x_67_phi = x_68;
              x_70_phi = x_71;
            }
            continue;
          }
        } else {
          int const x_81_save = x_70;
          int const x_82 = tree.arr[x_81_save].rightIndex;
          if ((x_82 == -1)) {
            tree.arr[x_81_save].rightIndex = 1;
            BST const tint_symbol_6 = {.data=5, .leftIndex=-1, .rightIndex=-1};
            tree.arr[1] = tint_symbol_6;
            x_116_phi = true;
            break;
          } else {
            x_87 = tree.arr[x_81_save].rightIndex;
            x_68_phi = x_67;
            x_71_phi = x_87;
            {
              x_68 = x_68_phi;
              x_71 = x_71_phi;
              x_67_phi = x_68;
              x_70_phi = x_71;
            }
            continue;
          }
          return;
        }
        x_68_phi = x_114;
        x_71_phi = x_70;
        {
          x_68 = x_68_phi;
          x_71 = x_71_phi;
          x_67_phi = x_68;
          x_70_phi = x_71;
        }
      }
      bool const x_116 = x_116_phi;
      if (x_116) {
        break;
      }
      break;
    }
  }
  x_119_phi = 0;
  while (true) {
    bool x_133 = false;
    int x_120 = 0;
    bool x_134_phi = false;
    int const x_119 = x_119_phi;
    float const x_125 = (*(tint_symbol_24)).y;
    bool const x_126 = (x_125 < 0.0f);
    x_134_phi = x_126;
    if (!(x_126)) {
      float const x_131 = x_8.injectionSwitch.y;
      x_133 = (x_119 != int(x_131));
      x_134_phi = x_133;
    }
    bool const x_134 = x_134_phi;
    if (x_134) {
    } else {
      break;
    }
    bool x_139 = false;
    bool x_186 = false;
    bool x_139_phi = false;
    int x_142_phi = 0;
    bool x_188_phi = false;
    switch(0u) {
      default: {
        x_139_phi = false;
        x_142_phi = 0;
        while (true) {
          int x_167 = 0;
          int x_159 = 0;
          bool x_140 = false;
          int x_143 = 0;
          bool x_140_phi = false;
          int x_143_phi = 0;
          x_139 = x_139_phi;
          int const x_142 = x_142_phi;
          x_188_phi = x_139;
          if ((x_142 <= 2)) {
          } else {
            break;
          }
          int const x_148 = tree.arr[x_142].data;
          if ((12 <= x_148)) {
            bool x_186_phi = false;
            int const x_161_save = x_142;
            int const x_162 = tree.arr[x_161_save].leftIndex;
            if ((x_162 == -1)) {
              float const x_169 = x_8.injectionSwitch.y;
              float const x_171 = x_8.injectionSwitch.x;
              if ((x_169 < x_171)) {
                while (true) {
                  discard_fragment();
                }
                return;
              }
              tree.arr[x_161_save].leftIndex = 2;
              BST const tint_symbol_7 = {.data=12, .leftIndex=-1, .rightIndex=-1};
              tree.arr[2] = tint_symbol_7;
              while (true) {
                x_186_phi = x_139;
                if ((0 < int(x_169))) {
                } else {
                  break;
                }
                x_186_phi = true;
                break;
              }
              x_186 = x_186_phi;
              x_188_phi = x_186;
              if (x_186) {
                break;
              }
            } else {
              x_167 = tree.arr[x_161_save].leftIndex;
              x_140_phi = x_139;
              x_143_phi = x_167;
              {
                x_140 = x_140_phi;
                x_143 = x_143_phi;
                x_139_phi = x_140;
                x_142_phi = x_143;
              }
              continue;
            }
          } else {
            int const x_153_save = x_142;
            int const x_154 = tree.arr[x_153_save].rightIndex;
            if ((x_154 == -1)) {
              tree.arr[x_153_save].rightIndex = 2;
              BST const tint_symbol_8 = {.data=12, .leftIndex=-1, .rightIndex=-1};
              tree.arr[2] = tint_symbol_8;
              x_188_phi = true;
              break;
            } else {
              x_159 = tree.arr[x_153_save].rightIndex;
              x_140_phi = x_139;
              x_143_phi = x_159;
              {
                x_140 = x_140_phi;
                x_143 = x_143_phi;
                x_139_phi = x_140;
                x_142_phi = x_143;
              }
              continue;
            }
            return;
          }
          x_140_phi = x_186;
          x_143_phi = x_142;
          {
            x_140 = x_140_phi;
            x_143 = x_143_phi;
            x_139_phi = x_140;
            x_142_phi = x_143;
          }
        }
        bool const x_188 = x_188_phi;
        if (x_188) {
          break;
        }
        break;
      }
    }
    {
      x_120 = as_type<int>((as_type<uint>(x_119) + as_type<uint>(1)));
      x_119_phi = x_120;
    }
  }
  bool x_193 = false;
  bool x_240 = false;
  bool x_193_phi = false;
  int x_196_phi = 0;
  bool x_242_phi = false;
  switch(0u) {
    default: {
      x_193_phi = false;
      x_196_phi = 0;
      while (true) {
        int x_221 = 0;
        int x_213 = 0;
        bool x_194 = false;
        int x_197 = 0;
        bool x_194_phi = false;
        int x_197_phi = 0;
        x_193 = x_193_phi;
        int const x_196 = x_196_phi;
        x_242_phi = x_193;
        if ((x_196 <= 3)) {
        } else {
          break;
        }
        int const x_202 = tree.arr[x_196].data;
        if ((15 <= x_202)) {
          bool x_240_phi = false;
          int const x_215_save = x_196;
          int const x_216 = tree.arr[x_215_save].leftIndex;
          if ((x_216 == -1)) {
            float const x_223 = x_8.injectionSwitch.y;
            float const x_225 = x_8.injectionSwitch.x;
            if ((x_223 < x_225)) {
              while (true) {
                discard_fragment();
              }
              return;
            }
            tree.arr[x_215_save].leftIndex = 3;
            BST const tint_symbol_9 = {.data=15, .leftIndex=-1, .rightIndex=-1};
            tree.arr[3] = tint_symbol_9;
            while (true) {
              x_240_phi = x_193;
              if ((0 < int(x_223))) {
              } else {
                break;
              }
              x_240_phi = true;
              break;
            }
            x_240 = x_240_phi;
            x_242_phi = x_240;
            if (x_240) {
              break;
            }
          } else {
            x_221 = tree.arr[x_215_save].leftIndex;
            x_194_phi = x_193;
            x_197_phi = x_221;
            {
              x_194 = x_194_phi;
              x_197 = x_197_phi;
              x_193_phi = x_194;
              x_196_phi = x_197;
            }
            continue;
          }
        } else {
          int const x_207_save = x_196;
          int const x_208 = tree.arr[x_207_save].rightIndex;
          if ((x_208 == -1)) {
            tree.arr[x_207_save].rightIndex = 3;
            BST const tint_symbol_10 = {.data=15, .leftIndex=-1, .rightIndex=-1};
            tree.arr[3] = tint_symbol_10;
            x_242_phi = true;
            break;
          } else {
            x_213 = tree.arr[x_207_save].rightIndex;
            x_194_phi = x_193;
            x_197_phi = x_213;
            {
              x_194 = x_194_phi;
              x_197 = x_197_phi;
              x_193_phi = x_194;
              x_196_phi = x_197;
            }
            continue;
          }
          return;
        }
        x_194_phi = x_240;
        x_197_phi = x_196;
        {
          x_194 = x_194_phi;
          x_197 = x_197_phi;
          x_193_phi = x_194;
          x_196_phi = x_197;
        }
      }
      bool const x_242 = x_242_phi;
      if (x_242) {
        break;
      }
      break;
    }
  }
  bool x_247 = false;
  bool x_294 = false;
  bool x_247_phi = false;
  int x_250_phi = 0;
  bool x_296_phi = false;
  switch(0u) {
    default: {
      x_247_phi = false;
      x_250_phi = 0;
      while (true) {
        int x_275 = 0;
        int x_267 = 0;
        bool x_248 = false;
        int x_251 = 0;
        bool x_248_phi = false;
        int x_251_phi = 0;
        x_247 = x_247_phi;
        int const x_250 = x_250_phi;
        x_296_phi = x_247;
        if ((x_250 <= 4)) {
        } else {
          break;
        }
        int const x_256 = tree.arr[x_250].data;
        if ((7 <= x_256)) {
          bool x_294_phi = false;
          int const x_269_save = x_250;
          int const x_270 = tree.arr[x_269_save].leftIndex;
          if ((x_270 == -1)) {
            float const x_277 = x_8.injectionSwitch.y;
            float const x_279 = x_8.injectionSwitch.x;
            if ((x_277 < x_279)) {
              while (true) {
                discard_fragment();
              }
              return;
            }
            tree.arr[x_269_save].leftIndex = 4;
            BST const tint_symbol_11 = {.data=7, .leftIndex=-1, .rightIndex=-1};
            tree.arr[4] = tint_symbol_11;
            while (true) {
              x_294_phi = x_247;
              if ((0 < int(x_277))) {
              } else {
                break;
              }
              x_294_phi = true;
              break;
            }
            x_294 = x_294_phi;
            x_296_phi = x_294;
            if (x_294) {
              break;
            }
          } else {
            x_275 = tree.arr[x_269_save].leftIndex;
            x_248_phi = x_247;
            x_251_phi = x_275;
            {
              x_248 = x_248_phi;
              x_251 = x_251_phi;
              x_247_phi = x_248;
              x_250_phi = x_251;
            }
            continue;
          }
        } else {
          int const x_261_save = x_250;
          int const x_262 = tree.arr[x_261_save].rightIndex;
          if ((x_262 == -1)) {
            tree.arr[x_261_save].rightIndex = 4;
            BST const tint_symbol_12 = {.data=7, .leftIndex=-1, .rightIndex=-1};
            tree.arr[4] = tint_symbol_12;
            x_296_phi = true;
            break;
          } else {
            x_267 = tree.arr[x_261_save].rightIndex;
            x_248_phi = x_247;
            x_251_phi = x_267;
            {
              x_248 = x_248_phi;
              x_251 = x_251_phi;
              x_247_phi = x_248;
              x_250_phi = x_251;
            }
            continue;
          }
          return;
        }
        x_248_phi = x_294;
        x_251_phi = x_250;
        {
          x_248 = x_248_phi;
          x_251 = x_251_phi;
          x_247_phi = x_248;
          x_250_phi = x_251;
        }
      }
      bool const x_296 = x_296_phi;
      if (x_296) {
        break;
      }
      break;
    }
  }
  bool x_301 = false;
  bool x_348 = false;
  bool x_301_phi = false;
  int x_304_phi = 0;
  bool x_350_phi = false;
  switch(0u) {
    default: {
      x_301_phi = false;
      x_304_phi = 0;
      while (true) {
        int x_329 = 0;
        int x_321 = 0;
        bool x_302 = false;
        int x_305 = 0;
        bool x_302_phi = false;
        int x_305_phi = 0;
        x_301 = x_301_phi;
        int const x_304 = x_304_phi;
        x_350_phi = x_301;
        if ((x_304 <= 5)) {
        } else {
          break;
        }
        int const x_310 = tree.arr[x_304].data;
        if ((8 <= x_310)) {
          bool x_348_phi = false;
          int const x_323_save = x_304;
          int const x_324 = tree.arr[x_323_save].leftIndex;
          if ((x_324 == -1)) {
            float const x_331 = x_8.injectionSwitch.y;
            float const x_333 = x_8.injectionSwitch.x;
            if ((x_331 < x_333)) {
              while (true) {
                discard_fragment();
              }
              return;
            }
            tree.arr[x_323_save].leftIndex = 5;
            BST const tint_symbol_13 = {.data=8, .leftIndex=-1, .rightIndex=-1};
            tree.arr[5] = tint_symbol_13;
            while (true) {
              x_348_phi = x_301;
              if ((0 < int(x_331))) {
              } else {
                break;
              }
              x_348_phi = true;
              break;
            }
            x_348 = x_348_phi;
            x_350_phi = x_348;
            if (x_348) {
              break;
            }
          } else {
            x_329 = tree.arr[x_323_save].leftIndex;
            x_302_phi = x_301;
            x_305_phi = x_329;
            {
              x_302 = x_302_phi;
              x_305 = x_305_phi;
              x_301_phi = x_302;
              x_304_phi = x_305;
            }
            continue;
          }
        } else {
          int const x_315_save = x_304;
          int const x_316 = tree.arr[x_315_save].rightIndex;
          if ((x_316 == -1)) {
            tree.arr[x_315_save].rightIndex = 5;
            BST const tint_symbol_14 = {.data=8, .leftIndex=-1, .rightIndex=-1};
            tree.arr[5] = tint_symbol_14;
            x_350_phi = true;
            break;
          } else {
            x_321 = tree.arr[x_315_save].rightIndex;
            x_302_phi = x_301;
            x_305_phi = x_321;
            {
              x_302 = x_302_phi;
              x_305 = x_305_phi;
              x_301_phi = x_302;
              x_304_phi = x_305;
            }
            continue;
          }
          return;
        }
        x_302_phi = x_348;
        x_305_phi = x_304;
        {
          x_302 = x_302_phi;
          x_305 = x_305_phi;
          x_301_phi = x_302;
          x_304_phi = x_305;
        }
      }
      bool const x_350 = x_350_phi;
      if (x_350) {
        break;
      }
      break;
    }
  }
  bool x_355 = false;
  bool x_402 = false;
  bool x_355_phi = false;
  int x_358_phi = 0;
  bool x_404_phi = false;
  switch(0u) {
    default: {
      x_355_phi = false;
      x_358_phi = 0;
      while (true) {
        int x_383 = 0;
        int x_375 = 0;
        bool x_356 = false;
        int x_359 = 0;
        bool x_356_phi = false;
        int x_359_phi = 0;
        x_355 = x_355_phi;
        int const x_358 = x_358_phi;
        x_404_phi = x_355;
        if ((x_358 <= 6)) {
        } else {
          break;
        }
        int const x_364 = tree.arr[x_358].data;
        if ((2 <= x_364)) {
          bool x_402_phi = false;
          int const x_377_save = x_358;
          int const x_378 = tree.arr[x_377_save].leftIndex;
          if ((x_378 == -1)) {
            float const x_385 = x_8.injectionSwitch.y;
            float const x_387 = x_8.injectionSwitch.x;
            if ((x_385 < x_387)) {
              while (true) {
                discard_fragment();
              }
              return;
            }
            tree.arr[x_377_save].leftIndex = 6;
            BST const tint_symbol_15 = {.data=2, .leftIndex=-1, .rightIndex=-1};
            tree.arr[6] = tint_symbol_15;
            while (true) {
              x_402_phi = x_355;
              if ((0 < int(x_385))) {
              } else {
                break;
              }
              x_402_phi = true;
              break;
            }
            x_402 = x_402_phi;
            x_404_phi = x_402;
            if (x_402) {
              break;
            }
          } else {
            x_383 = tree.arr[x_377_save].leftIndex;
            x_356_phi = x_355;
            x_359_phi = x_383;
            {
              x_356 = x_356_phi;
              x_359 = x_359_phi;
              x_355_phi = x_356;
              x_358_phi = x_359;
            }
            continue;
          }
        } else {
          int const x_369_save = x_358;
          int const x_370 = tree.arr[x_369_save].rightIndex;
          if ((x_370 == -1)) {
            tree.arr[x_369_save].rightIndex = 6;
            BST const tint_symbol_16 = {.data=2, .leftIndex=-1, .rightIndex=-1};
            tree.arr[6] = tint_symbol_16;
            x_404_phi = true;
            break;
          } else {
            x_375 = tree.arr[x_369_save].rightIndex;
            x_356_phi = x_355;
            x_359_phi = x_375;
            {
              x_356 = x_356_phi;
              x_359 = x_359_phi;
              x_355_phi = x_356;
              x_358_phi = x_359;
            }
            continue;
          }
          return;
        }
        x_356_phi = x_402;
        x_359_phi = x_358;
        {
          x_356 = x_356_phi;
          x_359 = x_359_phi;
          x_355_phi = x_356;
          x_358_phi = x_359;
        }
      }
      bool const x_404 = x_404_phi;
      if (x_404) {
        break;
      }
      break;
    }
  }
  bool x_409 = false;
  bool x_456 = false;
  bool x_409_phi = false;
  int x_412_phi = 0;
  bool x_458_phi = false;
  switch(0u) {
    default: {
      x_409_phi = false;
      x_412_phi = 0;
      while (true) {
        int x_437 = 0;
        int x_429 = 0;
        bool x_410 = false;
        int x_413 = 0;
        bool x_410_phi = false;
        int x_413_phi = 0;
        x_409 = x_409_phi;
        int const x_412 = x_412_phi;
        x_458_phi = x_409;
        if ((x_412 <= 7)) {
        } else {
          break;
        }
        int const x_418 = tree.arr[x_412].data;
        if ((6 <= x_418)) {
          bool x_456_phi = false;
          int const x_431_save = x_412;
          int const x_432 = tree.arr[x_431_save].leftIndex;
          if ((x_432 == -1)) {
            float const x_439 = x_8.injectionSwitch.y;
            float const x_441 = x_8.injectionSwitch.x;
            if ((x_439 < x_441)) {
              while (true) {
                discard_fragment();
              }
              return;
            }
            tree.arr[x_431_save].leftIndex = 7;
            BST const tint_symbol_17 = {.data=6, .leftIndex=-1, .rightIndex=-1};
            tree.arr[7] = tint_symbol_17;
            while (true) {
              x_456_phi = x_409;
              if ((0 < int(x_439))) {
              } else {
                break;
              }
              x_456_phi = true;
              break;
            }
            x_456 = x_456_phi;
            x_458_phi = x_456;
            if (x_456) {
              break;
            }
          } else {
            x_437 = tree.arr[x_431_save].leftIndex;
            x_410_phi = x_409;
            x_413_phi = x_437;
            {
              x_410 = x_410_phi;
              x_413 = x_413_phi;
              x_409_phi = x_410;
              x_412_phi = x_413;
            }
            continue;
          }
        } else {
          int const x_423_save = x_412;
          int const x_424 = tree.arr[x_423_save].rightIndex;
          if ((x_424 == -1)) {
            tree.arr[x_423_save].rightIndex = 7;
            BST const tint_symbol_18 = {.data=6, .leftIndex=-1, .rightIndex=-1};
            tree.arr[7] = tint_symbol_18;
            x_458_phi = true;
            break;
          } else {
            x_429 = tree.arr[x_423_save].rightIndex;
            x_410_phi = x_409;
            x_413_phi = x_429;
            {
              x_410 = x_410_phi;
              x_413 = x_413_phi;
              x_409_phi = x_410;
              x_412_phi = x_413;
            }
            continue;
          }
          return;
        }
        x_410_phi = x_456;
        x_413_phi = x_412;
        {
          x_410 = x_410_phi;
          x_413 = x_413_phi;
          x_409_phi = x_410;
          x_412_phi = x_413;
        }
      }
      bool const x_458 = x_458_phi;
      if (x_458) {
        break;
      }
      break;
    }
  }
  bool x_463 = false;
  bool x_510 = false;
  bool x_463_phi = false;
  int x_466_phi = 0;
  bool x_512_phi = false;
  switch(0u) {
    default: {
      x_463_phi = false;
      x_466_phi = 0;
      while (true) {
        int x_491 = 0;
        int x_483 = 0;
        bool x_464 = false;
        int x_467 = 0;
        bool x_464_phi = false;
        int x_467_phi = 0;
        x_463 = x_463_phi;
        int const x_466 = x_466_phi;
        x_512_phi = x_463;
        if ((x_466 <= 8)) {
        } else {
          break;
        }
        int const x_472 = tree.arr[x_466].data;
        if ((17 <= x_472)) {
          bool x_510_phi = false;
          int const x_485_save = x_466;
          int const x_486 = tree.arr[x_485_save].leftIndex;
          if ((x_486 == -1)) {
            float const x_493 = x_8.injectionSwitch.y;
            float const x_495 = x_8.injectionSwitch.x;
            if ((x_493 < x_495)) {
              while (true) {
                discard_fragment();
              }
              return;
            }
            tree.arr[x_485_save].leftIndex = 8;
            BST const tint_symbol_19 = {.data=17, .leftIndex=-1, .rightIndex=-1};
            tree.arr[8] = tint_symbol_19;
            while (true) {
              x_510_phi = x_463;
              if ((0 < int(x_493))) {
              } else {
                break;
              }
              x_510_phi = true;
              break;
            }
            x_510 = x_510_phi;
            x_512_phi = x_510;
            if (x_510) {
              break;
            }
          } else {
            x_491 = tree.arr[x_485_save].leftIndex;
            x_464_phi = x_463;
            x_467_phi = x_491;
            {
              x_464 = x_464_phi;
              x_467 = x_467_phi;
              x_463_phi = x_464;
              x_466_phi = x_467;
            }
            continue;
          }
        } else {
          int const x_477_save = x_466;
          int const x_478 = tree.arr[x_477_save].rightIndex;
          if ((x_478 == -1)) {
            tree.arr[x_477_save].rightIndex = 8;
            BST const tint_symbol_20 = {.data=17, .leftIndex=-1, .rightIndex=-1};
            tree.arr[8] = tint_symbol_20;
            x_512_phi = true;
            break;
          } else {
            x_483 = tree.arr[x_477_save].rightIndex;
            x_464_phi = x_463;
            x_467_phi = x_483;
            {
              x_464 = x_464_phi;
              x_467 = x_467_phi;
              x_463_phi = x_464;
              x_466_phi = x_467;
            }
            continue;
          }
          return;
        }
        x_464_phi = x_510;
        x_467_phi = x_466;
        {
          x_464 = x_464_phi;
          x_467 = x_467_phi;
          x_463_phi = x_464;
          x_466_phi = x_467;
        }
      }
      bool const x_512 = x_512_phi;
      if (x_512) {
        break;
      }
      break;
    }
  }
  bool x_517 = false;
  bool x_564 = false;
  bool x_517_phi = false;
  int x_520_phi = 0;
  bool x_566_phi = false;
  switch(0u) {
    default: {
      x_517_phi = false;
      x_520_phi = 0;
      while (true) {
        int x_545 = 0;
        int x_537 = 0;
        bool x_518 = false;
        int x_521 = 0;
        bool x_518_phi = false;
        int x_521_phi = 0;
        x_517 = x_517_phi;
        int const x_520 = x_520_phi;
        x_566_phi = x_517;
        if ((x_520 <= 9)) {
        } else {
          break;
        }
        int const x_526 = tree.arr[x_520].data;
        if ((13 <= x_526)) {
          bool x_564_phi = false;
          int const x_539_save = x_520;
          int const x_540 = tree.arr[x_539_save].leftIndex;
          if ((x_540 == -1)) {
            float const x_547 = x_8.injectionSwitch.y;
            float const x_549 = x_8.injectionSwitch.x;
            if ((x_547 < x_549)) {
              while (true) {
                discard_fragment();
              }
              return;
            }
            tree.arr[x_539_save].leftIndex = 9;
            BST const tint_symbol_21 = {.data=13, .leftIndex=-1, .rightIndex=-1};
            tree.arr[9] = tint_symbol_21;
            while (true) {
              x_564_phi = x_517;
              if ((0 < int(x_547))) {
              } else {
                break;
              }
              x_564_phi = true;
              break;
            }
            x_564 = x_564_phi;
            x_566_phi = x_564;
            if (x_564) {
              break;
            }
          } else {
            x_545 = tree.arr[x_539_save].leftIndex;
            x_518_phi = x_517;
            x_521_phi = x_545;
            {
              x_518 = x_518_phi;
              x_521 = x_521_phi;
              x_517_phi = x_518;
              x_520_phi = x_521;
            }
            continue;
          }
        } else {
          int const x_531_save = x_520;
          int const x_532 = tree.arr[x_531_save].rightIndex;
          if ((x_532 == -1)) {
            tree.arr[x_531_save].rightIndex = 9;
            BST const tint_symbol_22 = {.data=13, .leftIndex=-1, .rightIndex=-1};
            tree.arr[9] = tint_symbol_22;
            x_566_phi = true;
            break;
          } else {
            x_537 = tree.arr[x_531_save].rightIndex;
            x_518_phi = x_517;
            x_521_phi = x_537;
            {
              x_518 = x_518_phi;
              x_521 = x_521_phi;
              x_517_phi = x_518;
              x_520_phi = x_521;
            }
            continue;
          }
          return;
        }
        x_518_phi = x_564;
        x_521_phi = x_520;
        {
          x_518 = x_518_phi;
          x_521 = x_521_phi;
          x_517_phi = x_518;
          x_520_phi = x_521;
        }
      }
      bool const x_566 = x_566_phi;
      if (x_566) {
        break;
      }
      break;
    }
  }
  x_569_phi = 0;
  x_572_phi = 0;
  x_574_phi = 0;
  while (true) {
    int x_597 = 0;
    int x_607 = 0;
    int x_612 = 0;
    int x_575 = 0;
    int x_570_phi = 0;
    int x_573_phi = 0;
    int const x_569 = x_569_phi;
    x_572 = x_572_phi;
    int const x_574 = x_574_phi;
    if ((x_574 < 20)) {
    } else {
      break;
    }
    int x_582_phi = 0;
    int x_597_phi = 0;
    bool x_598_phi = false;
    switch(0u) {
      default: {
        x_582_phi = 0;
        while (true) {
          int const x_582 = x_582_phi;
          x_597_phi = x_569;
          x_598_phi = false;
          if ((x_582 != -1)) {
          } else {
            break;
          }
          BST const x_589 = tree.arr[x_582];
          int const x_590 = x_589.data;
          int const x_591 = x_589.leftIndex;
          int const x_592 = x_589.rightIndex;
          if ((x_590 == x_574)) {
            x_597_phi = x_574;
            x_598_phi = true;
            break;
          }
          {
            x_582_phi = select(x_591, x_592, (x_574 > x_590));
          }
        }
        x_597 = x_597_phi;
        bool const x_598 = x_598_phi;
        x_570_phi = x_597;
        if (x_598) {
          break;
        }
        x_570_phi = -1;
        break;
      }
    }
    int x_570 = 0;
    int x_606 = 0;
    int x_611 = 0;
    int x_607_phi = 0;
    int x_612_phi = 0;
    x_570 = x_570_phi;
    switch(x_574) {
      case 2:
      case 5:
      case 6:
      case 7:
      case 8:
      case 9:
      case 12:
      case 13:
      case 15:
      case 17: {
        x_607_phi = x_572;
        if ((x_570 == as_type<int>(x_574))) {
          x_606 = as_type<int>(as_type<int>((as_type<uint>(x_572) + as_type<uint>(as_type<int>(1)))));
          x_607_phi = x_606;
        }
        x_607 = x_607_phi;
        x_573_phi = x_607;
        break;
      }
      default: {
        x_612_phi = x_572;
        if ((x_570 == as_type<int>(-1))) {
          x_611 = as_type<int>(as_type<int>((as_type<uint>(x_572) + as_type<uint>(as_type<int>(1)))));
          x_612_phi = x_611;
        }
        x_612 = x_612_phi;
        x_573_phi = x_612;
        break;
      }
    }
    int const x_573 = x_573_phi;
    {
      x_575 = as_type<int>((as_type<uint>(x_574) + as_type<uint>(1)));
      x_569_phi = x_570;
      x_572_phi = x_573;
      x_574_phi = x_575;
    }
  }
  if ((x_572 == as_type<int>(20))) {
    *(tint_symbol_25) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    *(tint_symbol_25) = float4(0.0f, 0.0f, 1.0f, 1.0f);
  }
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]]) {
  thread float4 tint_symbol_26 = 0.0f;
  thread float4 tint_symbol_27 = 0.0f;
  tint_symbol_26 = gl_FragCoord_param;
  main_1(x_8, &(tint_symbol_26), &(tint_symbol_27));
  main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_27};
  tint_symbol_2 const tint_symbol_23 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
  return tint_symbol_23;
}

