#include <metal_stdlib>

using namespace metal;
struct BST {
  int data;
  int leftIndex;
  int rightIndex;
};
struct tint_array_wrapper {
  BST arr[10];
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(thread float4* const tint_symbol_22) {
  tint_array_wrapper tree = {};
  int x_360 = 0;
  int x_62_phi = 0;
  bool x_90_phi = false;
  int x_357_phi = 0;
  int x_360_phi = 0;
  int x_362_phi = 0;
  BST const tint_symbol_2 = {.data=9, .leftIndex=-1, .rightIndex=-1};
  tree.arr[0] = tint_symbol_2;
  switch(0u) {
    default: {
      x_62_phi = 0;
      while (true) {
        int x_88 = 0;
        int x_80 = 0;
        int x_63 = 0;
        int x_63_phi = 0;
        int const x_62 = x_62_phi;
        x_90_phi = false;
        if ((x_62 <= 1)) {
        } else {
          break;
        }
        int const x_69 = tree.arr[x_62].data;
        if ((5 <= x_69)) {
          int const x_82_save = x_62;
          int const x_83 = tree.arr[x_82_save].leftIndex;
          if ((x_83 == -1)) {
            tree.arr[x_82_save].leftIndex = 1;
            BST const tint_symbol_3 = {.data=5, .leftIndex=-1, .rightIndex=-1};
            tree.arr[1] = tint_symbol_3;
            x_90_phi = true;
            break;
          } else {
            x_88 = tree.arr[x_82_save].leftIndex;
            x_63_phi = x_88;
            {
              x_63 = x_63_phi;
              x_62_phi = x_63;
            }
            continue;
          }
          return;
        } else {
          int const x_74_save = x_62;
          int const x_75 = tree.arr[x_74_save].rightIndex;
          if ((x_75 == -1)) {
            tree.arr[x_74_save].rightIndex = 1;
            BST const tint_symbol_4 = {.data=5, .leftIndex=-1, .rightIndex=-1};
            tree.arr[1] = tint_symbol_4;
            x_90_phi = true;
            break;
          } else {
            x_80 = tree.arr[x_74_save].rightIndex;
            x_63_phi = x_80;
            {
              x_63 = x_63_phi;
              x_62_phi = x_63;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_63 = x_63_phi;
          x_62_phi = x_63;
        }
      }
      bool const x_90 = x_90_phi;
      if (x_90) {
        break;
      }
      break;
    }
  }
  int x_95_phi = 0;
  bool x_123_phi = false;
  switch(0u) {
    default: {
      x_95_phi = 0;
      while (true) {
        int x_121 = 0;
        int x_113 = 0;
        int x_96 = 0;
        int x_96_phi = 0;
        int const x_95 = x_95_phi;
        x_123_phi = false;
        if ((x_95 <= 2)) {
        } else {
          break;
        }
        int const x_102 = tree.arr[x_95].data;
        if ((12 <= x_102)) {
          int const x_115_save = x_95;
          int const x_116 = tree.arr[x_115_save].leftIndex;
          if ((x_116 == -1)) {
            tree.arr[x_115_save].leftIndex = 2;
            BST const tint_symbol_5 = {.data=12, .leftIndex=-1, .rightIndex=-1};
            tree.arr[2] = tint_symbol_5;
            x_123_phi = true;
            break;
          } else {
            x_121 = tree.arr[x_115_save].leftIndex;
            x_96_phi = x_121;
            {
              x_96 = x_96_phi;
              x_95_phi = x_96;
            }
            continue;
          }
          return;
        } else {
          int const x_107_save = x_95;
          int const x_108 = tree.arr[x_107_save].rightIndex;
          if ((x_108 == -1)) {
            tree.arr[x_107_save].rightIndex = 2;
            BST const tint_symbol_6 = {.data=12, .leftIndex=-1, .rightIndex=-1};
            tree.arr[2] = tint_symbol_6;
            x_123_phi = true;
            break;
          } else {
            x_113 = tree.arr[x_107_save].rightIndex;
            x_96_phi = x_113;
            {
              x_96 = x_96_phi;
              x_95_phi = x_96;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_96 = x_96_phi;
          x_95_phi = x_96;
        }
      }
      bool const x_123 = x_123_phi;
      if (x_123) {
        break;
      }
      break;
    }
  }
  int x_128_phi = 0;
  bool x_156_phi = false;
  switch(0u) {
    default: {
      x_128_phi = 0;
      while (true) {
        int x_154 = 0;
        int x_146 = 0;
        int x_129 = 0;
        int x_129_phi = 0;
        int const x_128 = x_128_phi;
        x_156_phi = false;
        if ((x_128 <= 3)) {
        } else {
          break;
        }
        int const x_135 = tree.arr[x_128].data;
        if ((15 <= x_135)) {
          int const x_148_save = x_128;
          int const x_149 = tree.arr[x_148_save].leftIndex;
          if ((x_149 == -1)) {
            tree.arr[x_148_save].leftIndex = 3;
            BST const tint_symbol_7 = {.data=15, .leftIndex=-1, .rightIndex=-1};
            tree.arr[3] = tint_symbol_7;
            x_156_phi = true;
            break;
          } else {
            x_154 = tree.arr[x_148_save].leftIndex;
            x_129_phi = x_154;
            {
              x_129 = x_129_phi;
              x_128_phi = x_129;
            }
            continue;
          }
          return;
        } else {
          int const x_140_save = x_128;
          int const x_141 = tree.arr[x_140_save].rightIndex;
          if ((x_141 == -1)) {
            tree.arr[x_140_save].rightIndex = 3;
            BST const tint_symbol_8 = {.data=15, .leftIndex=-1, .rightIndex=-1};
            tree.arr[3] = tint_symbol_8;
            x_156_phi = true;
            break;
          } else {
            x_146 = tree.arr[x_140_save].rightIndex;
            x_129_phi = x_146;
            {
              x_129 = x_129_phi;
              x_128_phi = x_129;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_129 = x_129_phi;
          x_128_phi = x_129;
        }
      }
      bool const x_156 = x_156_phi;
      if (x_156) {
        break;
      }
      break;
    }
  }
  int x_161_phi = 0;
  bool x_189_phi = false;
  switch(0u) {
    default: {
      x_161_phi = 0;
      while (true) {
        int x_187 = 0;
        int x_179 = 0;
        int x_162 = 0;
        int x_162_phi = 0;
        int const x_161 = x_161_phi;
        x_189_phi = false;
        if ((x_161 <= 4)) {
        } else {
          break;
        }
        int const x_168 = tree.arr[x_161].data;
        if ((7 <= x_168)) {
          int const x_181_save = x_161;
          int const x_182 = tree.arr[x_181_save].leftIndex;
          if ((x_182 == -1)) {
            tree.arr[x_181_save].leftIndex = 4;
            BST const tint_symbol_9 = {.data=7, .leftIndex=-1, .rightIndex=-1};
            tree.arr[4] = tint_symbol_9;
            x_189_phi = true;
            break;
          } else {
            x_187 = tree.arr[x_181_save].leftIndex;
            x_162_phi = x_187;
            {
              x_162 = x_162_phi;
              x_161_phi = x_162;
            }
            continue;
          }
          return;
        } else {
          int const x_173_save = x_161;
          int const x_174 = tree.arr[x_173_save].rightIndex;
          if ((x_174 == -1)) {
            tree.arr[x_173_save].rightIndex = 4;
            BST const tint_symbol_10 = {.data=7, .leftIndex=-1, .rightIndex=-1};
            tree.arr[4] = tint_symbol_10;
            x_189_phi = true;
            break;
          } else {
            x_179 = tree.arr[x_173_save].rightIndex;
            x_162_phi = x_179;
            {
              x_162 = x_162_phi;
              x_161_phi = x_162;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_162 = x_162_phi;
          x_161_phi = x_162;
        }
      }
      bool const x_189 = x_189_phi;
      if (x_189) {
        break;
      }
      break;
    }
  }
  int x_194_phi = 0;
  bool x_222_phi = false;
  switch(0u) {
    default: {
      x_194_phi = 0;
      while (true) {
        int x_220 = 0;
        int x_212 = 0;
        int x_195 = 0;
        int x_195_phi = 0;
        int const x_194 = x_194_phi;
        x_222_phi = false;
        if ((x_194 <= 5)) {
        } else {
          break;
        }
        int const x_201 = tree.arr[x_194].data;
        if ((8 <= x_201)) {
          int const x_214_save = x_194;
          int const x_215 = tree.arr[x_214_save].leftIndex;
          if ((x_215 == -1)) {
            tree.arr[x_214_save].leftIndex = 5;
            BST const tint_symbol_11 = {.data=8, .leftIndex=-1, .rightIndex=-1};
            tree.arr[5] = tint_symbol_11;
            x_222_phi = true;
            break;
          } else {
            x_220 = tree.arr[x_214_save].leftIndex;
            x_195_phi = x_220;
            {
              x_195 = x_195_phi;
              x_194_phi = x_195;
            }
            continue;
          }
          return;
        } else {
          int const x_206_save = x_194;
          int const x_207 = tree.arr[x_206_save].rightIndex;
          if ((x_207 == -1)) {
            tree.arr[x_206_save].rightIndex = 5;
            BST const tint_symbol_12 = {.data=8, .leftIndex=-1, .rightIndex=-1};
            tree.arr[5] = tint_symbol_12;
            x_222_phi = true;
            break;
          } else {
            x_212 = tree.arr[x_206_save].rightIndex;
            x_195_phi = x_212;
            {
              x_195 = x_195_phi;
              x_194_phi = x_195;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_195 = x_195_phi;
          x_194_phi = x_195;
        }
      }
      bool const x_222 = x_222_phi;
      if (x_222) {
        break;
      }
      break;
    }
  }
  int x_227_phi = 0;
  bool x_255_phi = false;
  switch(0u) {
    default: {
      x_227_phi = 0;
      while (true) {
        int x_253 = 0;
        int x_245 = 0;
        int x_228 = 0;
        int x_228_phi = 0;
        int const x_227 = x_227_phi;
        x_255_phi = false;
        if ((x_227 <= 6)) {
        } else {
          break;
        }
        int const x_234 = tree.arr[x_227].data;
        if ((2 <= x_234)) {
          int const x_247_save = x_227;
          int const x_248 = tree.arr[x_247_save].leftIndex;
          if ((x_248 == -1)) {
            tree.arr[x_247_save].leftIndex = 6;
            BST const tint_symbol_13 = {.data=2, .leftIndex=-1, .rightIndex=-1};
            tree.arr[6] = tint_symbol_13;
            x_255_phi = true;
            break;
          } else {
            x_253 = tree.arr[x_247_save].leftIndex;
            x_228_phi = x_253;
            {
              x_228 = x_228_phi;
              x_227_phi = x_228;
            }
            continue;
          }
          return;
        } else {
          int const x_239_save = x_227;
          int const x_240 = tree.arr[x_239_save].rightIndex;
          if ((x_240 == -1)) {
            tree.arr[x_239_save].rightIndex = 6;
            BST const tint_symbol_14 = {.data=2, .leftIndex=-1, .rightIndex=-1};
            tree.arr[6] = tint_symbol_14;
            x_255_phi = true;
            break;
          } else {
            x_245 = tree.arr[x_239_save].rightIndex;
            x_228_phi = x_245;
            {
              x_228 = x_228_phi;
              x_227_phi = x_228;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_228 = x_228_phi;
          x_227_phi = x_228;
        }
      }
      bool const x_255 = x_255_phi;
      if (x_255) {
        break;
      }
      break;
    }
  }
  int x_260_phi = 0;
  bool x_288_phi = false;
  switch(0u) {
    default: {
      x_260_phi = 0;
      while (true) {
        int x_286 = 0;
        int x_278 = 0;
        int x_261 = 0;
        int x_261_phi = 0;
        int const x_260 = x_260_phi;
        x_288_phi = false;
        if ((x_260 <= 7)) {
        } else {
          break;
        }
        int const x_267 = tree.arr[x_260].data;
        if ((6 <= x_267)) {
          int const x_280_save = x_260;
          int const x_281 = tree.arr[x_280_save].leftIndex;
          if ((x_281 == -1)) {
            tree.arr[x_280_save].leftIndex = 7;
            BST const tint_symbol_15 = {.data=6, .leftIndex=-1, .rightIndex=-1};
            tree.arr[7] = tint_symbol_15;
            x_288_phi = true;
            break;
          } else {
            x_286 = tree.arr[x_280_save].leftIndex;
            x_261_phi = x_286;
            {
              x_261 = x_261_phi;
              x_260_phi = x_261;
            }
            continue;
          }
          return;
        } else {
          int const x_272_save = x_260;
          int const x_273 = tree.arr[x_272_save].rightIndex;
          if ((x_273 == -1)) {
            tree.arr[x_272_save].rightIndex = 7;
            BST const tint_symbol_16 = {.data=6, .leftIndex=-1, .rightIndex=-1};
            tree.arr[7] = tint_symbol_16;
            x_288_phi = true;
            break;
          } else {
            x_278 = tree.arr[x_272_save].rightIndex;
            x_261_phi = x_278;
            {
              x_261 = x_261_phi;
              x_260_phi = x_261;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_261 = x_261_phi;
          x_260_phi = x_261;
        }
      }
      bool const x_288 = x_288_phi;
      if (x_288) {
        break;
      }
      break;
    }
  }
  int x_293_phi = 0;
  bool x_321_phi = false;
  switch(0u) {
    default: {
      x_293_phi = 0;
      while (true) {
        int x_319 = 0;
        int x_311 = 0;
        int x_294 = 0;
        int x_294_phi = 0;
        int const x_293 = x_293_phi;
        x_321_phi = false;
        if ((x_293 <= 8)) {
        } else {
          break;
        }
        int const x_300 = tree.arr[x_293].data;
        if ((17 <= x_300)) {
          int const x_313_save = x_293;
          int const x_314 = tree.arr[x_313_save].leftIndex;
          if ((x_314 == -1)) {
            tree.arr[x_313_save].leftIndex = 8;
            BST const tint_symbol_17 = {.data=17, .leftIndex=-1, .rightIndex=-1};
            tree.arr[8] = tint_symbol_17;
            x_321_phi = true;
            break;
          } else {
            x_319 = tree.arr[x_313_save].leftIndex;
            x_294_phi = x_319;
            {
              x_294 = x_294_phi;
              x_293_phi = x_294;
            }
            continue;
          }
          return;
        } else {
          int const x_305_save = x_293;
          int const x_306 = tree.arr[x_305_save].rightIndex;
          if ((x_306 == -1)) {
            tree.arr[x_305_save].rightIndex = 8;
            BST const tint_symbol_18 = {.data=17, .leftIndex=-1, .rightIndex=-1};
            tree.arr[8] = tint_symbol_18;
            x_321_phi = true;
            break;
          } else {
            x_311 = tree.arr[x_305_save].rightIndex;
            x_294_phi = x_311;
            {
              x_294 = x_294_phi;
              x_293_phi = x_294;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_294 = x_294_phi;
          x_293_phi = x_294;
        }
      }
      bool const x_321 = x_321_phi;
      if (x_321) {
        break;
      }
      break;
    }
  }
  int x_326_phi = 0;
  bool x_354_phi = false;
  switch(0u) {
    default: {
      x_326_phi = 0;
      while (true) {
        int x_352 = 0;
        int x_344 = 0;
        int x_327 = 0;
        int x_327_phi = 0;
        int const x_326 = x_326_phi;
        x_354_phi = false;
        if ((x_326 <= 9)) {
        } else {
          break;
        }
        int const x_333 = tree.arr[x_326].data;
        if ((13 <= x_333)) {
          int const x_346_save = x_326;
          int const x_347 = tree.arr[x_346_save].leftIndex;
          if ((x_347 == -1)) {
            tree.arr[x_346_save].leftIndex = 9;
            BST const tint_symbol_19 = {.data=13, .leftIndex=-1, .rightIndex=-1};
            tree.arr[9] = tint_symbol_19;
            x_354_phi = true;
            break;
          } else {
            x_352 = tree.arr[x_346_save].leftIndex;
            x_327_phi = x_352;
            {
              x_327 = x_327_phi;
              x_326_phi = x_327;
            }
            continue;
          }
          return;
        } else {
          int const x_338_save = x_326;
          int const x_339 = tree.arr[x_338_save].rightIndex;
          if ((x_339 == -1)) {
            tree.arr[x_338_save].rightIndex = 9;
            BST const tint_symbol_20 = {.data=13, .leftIndex=-1, .rightIndex=-1};
            tree.arr[9] = tint_symbol_20;
            x_354_phi = true;
            break;
          } else {
            x_344 = tree.arr[x_338_save].rightIndex;
            x_327_phi = x_344;
            {
              x_327 = x_327_phi;
              x_326_phi = x_327;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_327 = x_327_phi;
          x_326_phi = x_327;
        }
      }
      bool const x_354 = x_354_phi;
      if (x_354) {
        break;
      }
      break;
    }
  }
  x_357_phi = 0;
  x_360_phi = 0;
  x_362_phi = 0;
  while (true) {
    int x_392 = 0;
    int x_402 = 0;
    int x_407 = 0;
    int x_363 = 0;
    int x_358_phi = 0;
    int x_361_phi = 0;
    int const x_357 = x_357_phi;
    x_360 = x_360_phi;
    int const x_362 = x_362_phi;
    int const x_365 = as_type<int>((as_type<uint>(6) - as_type<uint>(15)));
    if ((x_362 < 20)) {
    } else {
      break;
    }
    int x_374_phi = 0;
    int x_392_phi = 0;
    bool x_393_phi = false;
    switch(0u) {
      default: {
        x_374_phi = 0;
        while (true) {
          int const x_374 = x_374_phi;
          x_392_phi = x_357;
          x_393_phi = false;
          if ((x_374 != -1)) {
          } else {
            break;
          }
          BST const x_381 = tree.arr[x_374];
          int const x_382 = x_381.data;
          int const x_383 = x_381.leftIndex;
          int const x_385 = x_381.rightIndex;
          if ((x_382 == x_362)) {
            x_392_phi = x_362;
            x_393_phi = true;
            break;
          }
          float const x_389 = (*(tint_symbol_22))[select(3u, 3u, (3u <= 3u))];
          {
            x_374_phi = select(x_383, x_385, !((x_362 <= x_382)));
          }
        }
        x_392 = x_392_phi;
        bool const x_393 = x_393_phi;
        x_358_phi = x_392;
        if (x_393) {
          break;
        }
        x_358_phi = -1;
        break;
      }
    }
    int x_358 = 0;
    int x_401 = 0;
    int x_406 = 0;
    int x_402_phi = 0;
    int x_407_phi = 0;
    x_358 = x_358_phi;
    switch(x_362) {
      case 2:
      case 5:
      case 6:
      case 7:
      case 8:
      case 9:
      case 12:
      case 13:
      case 15:
      case 17: {
        x_402_phi = x_360;
        if ((x_358 == as_type<int>(x_362))) {
          x_401 = as_type<int>(as_type<int>((as_type<uint>(x_360) + as_type<uint>(as_type<int>(1)))));
          x_402_phi = x_401;
        }
        x_402 = x_402_phi;
        x_361_phi = x_402;
        break;
      }
      default: {
        x_407_phi = x_360;
        if ((x_358 == as_type<int>(-1))) {
          x_406 = as_type<int>(as_type<int>((as_type<uint>(x_360) + as_type<uint>(as_type<int>(1)))));
          x_407_phi = x_406;
        }
        x_407 = x_407_phi;
        x_361_phi = x_407;
        break;
      }
    }
    int const x_361 = x_361_phi;
    {
      x_363 = as_type<int>((as_type<uint>(x_362) + as_type<uint>(1)));
      x_357_phi = x_358;
      x_360_phi = x_361;
      x_362_phi = x_363;
    }
  }
  if ((x_360 == as_type<int>(20))) {
    *(tint_symbol_22) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    *(tint_symbol_22) = float4(0.0f, 0.0f, 1.0f, 1.0f);
  }
  return;
}

main_out tint_symbol_inner(thread float4* const tint_symbol_23) {
  main_1(tint_symbol_23);
  main_out const tint_symbol_21 = {.x_GLF_color_1=*(tint_symbol_23)};
  return tint_symbol_21;
}

fragment tint_symbol_1 tint_symbol() {
  thread float4 tint_symbol_24 = 0.0f;
  main_out const inner_result = tint_symbol_inner(&(tint_symbol_24));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
  return wrapper_result;
}

