#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ float2 injectionSwitch;
};
struct tint_array_wrapper {
  int arr[10];
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(constant buf0& x_8, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
  tint_array_wrapper temp = {};
  tint_array_wrapper data = {};
  float x_190 = 0.0f;
  float x_262 = 0.0f;
  int x_63_phi = 0;
  int x_103_phi = 0;
  int x_112_phi = 0;
  float x_263_phi = 0.0f;
  float const x_60 = x_8.injectionSwitch.x;
  int const x_61 = int(x_60);
  x_63_phi = x_61;
  while (true) {
    int x_100 = 0;
    int x_98 = 0;
    int x_96 = 0;
    int x_94 = 0;
    int x_92 = 0;
    int x_90 = 0;
    int x_88 = 0;
    int x_86 = 0;
    int x_84 = 0;
    int x_82 = 0;
    int x_64_phi = 0;
    int const x_63 = x_63_phi;
    tint_array_wrapper const x_68 = data;
    tint_array_wrapper const tint_symbol_2 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    data = tint_symbol_2;
    data = x_68;
    int const x_69 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
    x_64_phi = x_69;
    switch(x_63) {
      case 9: {
        data.arr[x_63] = -5;
        x_100 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_100;
        break;
      }
      case 8: {
        data.arr[x_63] = -4;
        x_98 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_98;
        break;
      }
      case 7: {
        data.arr[x_63] = -3;
        x_96 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_96;
        break;
      }
      case 6: {
        data.arr[x_63] = -2;
        x_94 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_94;
        break;
      }
      case 5: {
        data.arr[x_63] = -1;
        x_92 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_92;
        break;
      }
      case 4: {
        data.arr[x_63] = 0;
        x_90 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_90;
        break;
      }
      case 3: {
        data.arr[x_63] = 1;
        x_88 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_88;
        break;
      }
      case 2: {
        data.arr[x_63] = 2;
        x_86 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_86;
        break;
      }
      case 1: {
        data.arr[x_63] = 3;
        x_84 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_84;
        break;
      }
      case 0: {
        data.arr[x_63] = 4;
        x_82 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_82;
        break;
      }
      default: {
        break;
      }
    }
    int const x_64 = x_64_phi;
    {
      x_63_phi = x_64;
      if ((x_64 < 10)) {
      } else {
        break;
      }
    }
  }
  x_103_phi = 0;
  while (true) {
    int x_104 = 0;
    int const x_103 = x_103_phi;
    if ((x_103 < 10)) {
    } else {
      break;
    }
    {
      int const x_109 = data.arr[x_103];
      temp.arr[x_103] = x_109;
      x_104 = as_type<int>((as_type<uint>(x_103) + as_type<uint>(1)));
      x_103_phi = x_104;
    }
  }
  x_112_phi = 1;
  while (true) {
    int x_113 = 0;
    int x_119_phi = 0;
    int const x_112 = x_112_phi;
    if ((x_112 <= 9)) {
    } else {
      break;
    }
    x_119_phi = 0;
    while (true) {
      int x_131 = 0;
      int x_136 = 0;
      int x_131_phi = 0;
      int x_134_phi = 0;
      int x_136_phi = 0;
      int x_158_phi = 0;
      int x_161_phi = 0;
      int x_171_phi = 0;
      int const x_119 = x_119_phi;
      if ((x_119 < 9)) {
      } else {
        break;
      }
      int const x_125 = as_type<int>((as_type<uint>(x_119) + as_type<uint>(x_112)));
      int const x_126 = as_type<int>((as_type<uint>(x_125) - as_type<uint>(1)));
      int const x_120 = as_type<int>((as_type<uint>(x_119) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_112))))));
      int const x_129 = min(as_type<int>((as_type<uint>(x_120) - as_type<uint>(1))), 9);
      x_131_phi = x_119;
      x_134_phi = x_125;
      x_136_phi = x_119;
      while (true) {
        int x_151 = 0;
        int x_154 = 0;
        int x_135_phi = 0;
        int x_137_phi = 0;
        x_131 = x_131_phi;
        int const x_134 = x_134_phi;
        x_136 = x_136_phi;
        if (((x_136 <= x_126) & (x_134 <= x_129))) {
        } else {
          break;
        }
        int const x_143_save = x_136;
        int const x_144 = data.arr[x_143_save];
        int const x_145_save = x_134;
        int const x_146 = data.arr[x_145_save];
        int const x_132 = as_type<int>(as_type<int>((as_type<uint>(x_131) + as_type<uint>(as_type<int>(1)))));
        if ((x_144 < x_146)) {
          x_151 = as_type<int>(as_type<int>((as_type<uint>(x_136) + as_type<uint>(as_type<int>(1)))));
          int const x_152 = data.arr[x_143_save];
          temp.arr[x_131] = x_152;
          x_135_phi = x_134;
          x_137_phi = x_151;
        } else {
          x_154 = as_type<int>((as_type<uint>(x_134) + as_type<uint>(1)));
          int const x_155 = data.arr[x_145_save];
          temp.arr[x_131] = x_155;
          x_135_phi = x_154;
          x_137_phi = x_136;
        }
        int const x_135 = x_135_phi;
        int const x_137 = x_137_phi;
        {
          x_131_phi = x_132;
          x_134_phi = x_135;
          x_136_phi = x_137;
        }
      }
      x_158_phi = x_131;
      x_161_phi = x_136;
      while (true) {
        int x_159 = 0;
        int x_162 = 0;
        int const x_158 = x_158_phi;
        int const x_161 = x_161_phi;
        if (((x_161 < 10) & (x_161 <= x_126))) {
        } else {
          break;
        }
        {
          x_159 = as_type<int>((as_type<uint>(x_158) + as_type<uint>(1)));
          x_162 = as_type<int>((as_type<uint>(x_161) + as_type<uint>(1)));
          int const x_168 = data.arr[x_161];
          temp.arr[x_158] = x_168;
          x_158_phi = x_159;
          x_161_phi = x_162;
        }
      }
      x_171_phi = x_119;
      while (true) {
        int x_172 = 0;
        int const x_171 = x_171_phi;
        if ((x_171 <= x_129)) {
        } else {
          break;
        }
        {
          int const x_177 = temp.arr[x_171];
          data.arr[x_171] = x_177;
          x_172 = as_type<int>((as_type<uint>(x_171) + as_type<uint>(1)));
          x_171_phi = x_172;
        }
      }
      {
        x_119_phi = x_120;
      }
    }
    {
      x_113 = as_type<int>((as_type<uint>(2) * as_type<uint>(x_112)));
      x_112_phi = x_113;
    }
  }
  int x_181 = 0;
  float x_199 = 0.0f;
  float x_261 = 0.0f;
  float x_262_phi = 0.0f;
  float const x_180 = (*(tint_symbol_4)).y;
  x_181 = int(x_180);
  if ((x_181 < 30)) {
    int const x_187 = data.arr[0];
    x_190 = (0.5f + (float(x_187) * 0.100000001f));
    x_263_phi = x_190;
  } else {
    float x_208 = 0.0f;
    float x_260 = 0.0f;
    float x_261_phi = 0.0f;
    if ((x_181 < 60)) {
      int const x_196 = data.arr[1];
      x_199 = (0.5f + (float(x_196) * 0.100000001f));
      x_262_phi = x_199;
    } else {
      float x_217 = 0.0f;
      float x_259 = 0.0f;
      float x_260_phi = 0.0f;
      if ((x_181 < 90)) {
        int const x_205 = data.arr[2];
        x_208 = (0.5f + (float(x_205) * 0.100000001f));
        x_261_phi = x_208;
      } else {
        if ((x_181 < 120)) {
          int const x_214 = data.arr[3];
          x_217 = (0.5f + (float(x_214) * 0.100000001f));
          x_260_phi = x_217;
        } else {
          float x_230 = 0.0f;
          float x_258 = 0.0f;
          float x_259_phi = 0.0f;
          if ((x_181 < 150)) {
            discard_fragment();
          } else {
            float x_239 = 0.0f;
            float x_257 = 0.0f;
            float x_258_phi = 0.0f;
            if ((x_181 < 180)) {
              int const x_227 = data.arr[5];
              x_230 = (0.5f + (float(x_227) * 0.100000001f));
              x_259_phi = x_230;
            } else {
              float x_248 = 0.0f;
              float x_256 = 0.0f;
              float x_257_phi = 0.0f;
              if ((x_181 < 210)) {
                int const x_236 = data.arr[6];
                x_239 = (0.5f + (float(x_236) * 0.100000001f));
                x_258_phi = x_239;
              } else {
                if ((x_181 < 240)) {
                  int const x_245 = data.arr[7];
                  x_248 = (0.5f + (float(x_245) * 0.100000001f));
                  x_257_phi = x_248;
                } else {
                  if ((x_181 < 270)) {
                  } else {
                    discard_fragment();
                  }
                  int const x_253 = data.arr[8];
                  x_256 = (0.5f + (float(x_253) * 0.100000001f));
                  x_257_phi = x_256;
                }
                x_257 = x_257_phi;
                x_258_phi = x_257;
              }
              x_258 = x_258_phi;
              x_259_phi = x_258;
            }
            x_259 = x_259_phi;
          }
          x_260_phi = x_259;
        }
        x_260 = x_260_phi;
        x_261_phi = x_260;
      }
      x_261 = x_261_phi;
      x_262_phi = x_261;
    }
    x_262 = x_262_phi;
    x_263_phi = x_262;
  }
  float const x_263 = x_263_phi;
  *(tint_symbol_5) = float4(x_263, x_263, x_263, 1.0f);
  return;
}

main_out tint_symbol_inner(constant buf0& x_8, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
  *(tint_symbol_6) = gl_FragCoord_param;
  main_1(x_8, tint_symbol_6, tint_symbol_7);
  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
  return tint_symbol_3;
}

fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]]) {
  thread float4 tint_symbol_8 = 0.0f;
  thread float4 tint_symbol_9 = 0.0f;
  main_out const inner_result = tint_symbol_inner(x_8, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
  return wrapper_result;
}

