#include <metal_stdlib>

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

void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_6, thread tint_array_wrapper* const tint_symbol_7) {
  int k = 0;
  int i = 0;
  int j = 0;
  int i_1 = 0;
  int const x_303 = *(from);
  k = x_303;
  int const x_304 = *(from);
  i = x_304;
  int const x_305 = *(mid);
  j = (x_305 + 1);
  while (true) {
    int const x_311 = i;
    int const x_312 = *(mid);
    int const x_314 = j;
    int const x_315 = *(to);
    if (((x_311 <= x_312) & (x_314 <= x_315))) {
    } else {
      break;
    }
    int const x_319 = i;
    int const x_321 = (*(tint_symbol_6)).arr[x_319];
    int const x_322 = j;
    int const x_324 = (*(tint_symbol_6)).arr[x_322];
    if ((x_321 < x_324)) {
      int const x_329 = k;
      k = (x_329 + 1);
      int const x_331 = i;
      i = (x_331 + 1);
      int const x_334 = (*(tint_symbol_6)).arr[x_331];
      (*(tint_symbol_7)).arr[x_329] = x_334;
    } else {
      int const x_336 = k;
      k = (x_336 + 1);
      int const x_338 = j;
      j = (x_338 + 1);
      int const x_341 = (*(tint_symbol_6)).arr[x_338];
      (*(tint_symbol_7)).arr[x_336] = x_341;
    }
  }
  while (true) {
    int const x_347 = i;
    int const x_349 = i;
    int const x_350 = *(mid);
    if (((x_347 < 10) & (x_349 <= x_350))) {
    } else {
      break;
    }
    int const x_354 = k;
    k = (x_354 + 1);
    int const x_356 = i;
    i = (x_356 + 1);
    int const x_359 = (*(tint_symbol_6)).arr[x_356];
    (*(tint_symbol_7)).arr[x_354] = x_359;
  }
  int const x_361 = *(from);
  i_1 = x_361;
  while (true) {
    int const x_366 = i_1;
    int const x_367 = *(to);
    if ((x_366 <= x_367)) {
    } else {
      break;
    }
    int const x_370 = i_1;
    int const x_371 = i_1;
    int const x_373 = (*(tint_symbol_7)).arr[x_371];
    (*(tint_symbol_6)).arr[x_370] = x_373;
    {
      int const x_375 = i_1;
      i_1 = (x_375 + 1);
    }
  }
  return;
}

void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_8, thread tint_array_wrapper* const tint_symbol_9, thread float4* const tint_symbol_10, thread float4* const tint_symbol_11) {
  int x_85 = 0;
  int x_86 = 0;
  int x_87 = 0;
  int x_88 = 0;
  int x_89 = 0;
  int x_90 = 0;
  int x_91 = 0;
  int x_92 = 0;
  int x_93 = 0;
  int x_94 = 0;
  int i_3 = 0;
  int j_1 = 0;
  float grey = 0.0f;
  float const x_96 = x_28.injectionSwitch.x;
  i_3 = int(x_96);
  while (true) {
    int const x_102 = i_3;
    switch(x_102) {
      case 9: {
        int const x_132 = i_3;
        (*(tint_symbol_8)).arr[x_132] = -5;
        break;
      }
      case 8: {
        int const x_130 = i_3;
        (*(tint_symbol_8)).arr[x_130] = -4;
        break;
      }
      case 7: {
        int const x_128 = i_3;
        (*(tint_symbol_8)).arr[x_128] = -3;
        break;
      }
      case 6: {
        int const x_126 = i_3;
        (*(tint_symbol_8)).arr[x_126] = -2;
        break;
      }
      case 5: {
        int const x_124 = i_3;
        (*(tint_symbol_8)).arr[x_124] = -1;
        break;
      }
      case 4: {
        int const x_122 = i_3;
        (*(tint_symbol_8)).arr[x_122] = 0;
        break;
      }
      case 3: {
        int const x_120 = i_3;
        (*(tint_symbol_8)).arr[x_120] = 1;
        break;
      }
      case 2: {
        int const x_118 = i_3;
        (*(tint_symbol_8)).arr[x_118] = 2;
        break;
      }
      case 1: {
        int const x_116 = i_3;
        (*(tint_symbol_8)).arr[x_116] = 3;
        break;
      }
      case 0: {
        int const x_114 = i_3;
        (*(tint_symbol_8)).arr[x_114] = 4;
        break;
      }
      default: {
        break;
      }
    }
    int const x_134 = i_3;
    i_3 = (x_134 + 1);
    {
      int const x_136 = i_3;
      if ((x_136 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  while (true) {
    int const x_142 = j_1;
    if ((x_142 < 10)) {
    } else {
      break;
    }
    int const x_145 = j_1;
    int const x_146 = j_1;
    int const x_148 = (*(tint_symbol_8)).arr[x_146];
    (*(tint_symbol_9)).arr[x_145] = x_148;
    {
      int const x_150 = j_1;
      j_1 = (x_150 + 1);
    }
  }
  x_94 = 0;
  x_93 = 9;
  x_92 = 1;
  while (true) {
    int const x_156 = x_92;
    int const x_157 = x_93;
    if ((x_156 <= x_157)) {
    } else {
      break;
    }
    int const x_160 = x_94;
    x_91 = x_160;
    while (true) {
      int const x_165 = x_91;
      int const x_166 = x_93;
      if ((x_165 < x_166)) {
      } else {
        break;
      }
      int const x_169 = x_91;
      x_90 = x_169;
      int const x_170 = x_91;
      int const x_171 = x_92;
      tint_array_wrapper const x_173 = *(tint_symbol_8);
      tint_array_wrapper const tint_symbol_4 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      *(tint_symbol_8) = tint_symbol_4;
      *(tint_symbol_8) = x_173;
      x_89 = ((x_170 + x_171) - 1);
      int const x_175 = x_91;
      int const x_176 = x_92;
      int const x_180 = x_93;
      x_88 = min(((x_175 + (2 * x_176)) - 1), x_180);
      int const x_182 = x_90;
      x_87 = x_182;
      int const x_183 = x_89;
      x_86 = x_183;
      int const x_184 = x_88;
      x_85 = x_184;
      merge_i1_i1_i1_(&(x_87), &(x_86), &(x_85), tint_symbol_8, tint_symbol_9);
      {
        int const x_186 = x_92;
        int const x_188 = x_91;
        x_91 = (x_188 + (2 * x_186));
      }
    }
    {
      int const x_190 = x_92;
      x_92 = (2 * x_190);
    }
  }
  float const x_194 = (*(tint_symbol_10)).y;
  if ((int(x_194) < 30)) {
    int const x_201 = (*(tint_symbol_8)).arr[0];
    grey = (0.5f + (float(x_201) / 10.0f));
  } else {
    float const x_206 = (*(tint_symbol_10)).y;
    if ((int(x_206) < 60)) {
      int const x_213 = (*(tint_symbol_8)).arr[1];
      grey = (0.5f + (float(x_213) / 10.0f));
    } else {
      float const x_218 = (*(tint_symbol_10)).y;
      if ((int(x_218) < 90)) {
        int const x_225 = (*(tint_symbol_8)).arr[2];
        grey = (0.5f + (float(x_225) / 10.0f));
      } else {
        float const x_230 = (*(tint_symbol_10)).y;
        if ((int(x_230) < 120)) {
          int const x_237 = (*(tint_symbol_8)).arr[3];
          grey = (0.5f + (float(x_237) / 10.0f));
        } else {
          float const x_242 = (*(tint_symbol_10)).y;
          if ((int(x_242) < 150)) {
            discard_fragment();
          } else {
            float const x_249 = (*(tint_symbol_10)).y;
            if ((int(x_249) < 180)) {
              int const x_256 = (*(tint_symbol_8)).arr[5];
              grey = (0.5f + (float(x_256) / 10.0f));
            } else {
              float const x_261 = (*(tint_symbol_10)).y;
              if ((int(x_261) < 210)) {
                int const x_268 = (*(tint_symbol_8)).arr[6];
                grey = (0.5f + (float(x_268) / 10.0f));
              } else {
                float const x_273 = (*(tint_symbol_10)).y;
                if ((int(x_273) < 240)) {
                  int const x_280 = (*(tint_symbol_8)).arr[7];
                  grey = (0.5f + (float(x_280) / 10.0f));
                } else {
                  float const x_285 = (*(tint_symbol_10)).y;
                  if ((int(x_285) < 270)) {
                    int const x_292 = (*(tint_symbol_8)).arr[8];
                    grey = (0.5f + (float(x_292) / 10.0f));
                  } else {
                    discard_fragment();
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  float const x_296 = grey;
  float3 const x_297 = float3(x_296, x_296, x_296);
  *(tint_symbol_11) = float4(x_297.x, x_297.y, x_297.z, 1.0f);
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
  thread float4 tint_symbol_12 = 0.0f;
  thread tint_array_wrapper tint_symbol_13 = {};
  thread tint_array_wrapper tint_symbol_14 = {};
  thread float4 tint_symbol_15 = 0.0f;
  tint_symbol_12 = gl_FragCoord_param;
  main_1(x_28, &(tint_symbol_13), &(tint_symbol_14), &(tint_symbol_12), &(tint_symbol_15));
  main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_15};
  tint_symbol_2 const tint_symbol_5 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
  return tint_symbol_5;
}

void mergeSort_(thread tint_array_wrapper* const tint_symbol_16, thread tint_array_wrapper* const tint_symbol_17) {
  int low = 0;
  int high = 0;
  int m = 0;
  int i_2 = 0;
  int from_1 = 0;
  int mid_1 = 0;
  int to_1 = 0;
  int param = 0;
  int param_1 = 0;
  int param_2 = 0;
  low = 0;
  high = 9;
  m = 1;
  while (true) {
    int const x_382 = m;
    int const x_383 = high;
    if ((x_382 <= x_383)) {
    } else {
      break;
    }
    int const x_386 = low;
    i_2 = x_386;
    while (true) {
      int const x_391 = i_2;
      int const x_392 = high;
      if ((x_391 < x_392)) {
      } else {
        break;
      }
      int const x_395 = i_2;
      from_1 = x_395;
      int const x_396 = i_2;
      int const x_397 = m;
      mid_1 = ((x_396 + x_397) - 1);
      int const x_400 = i_2;
      int const x_401 = m;
      int const x_405 = high;
      to_1 = min(((x_400 + (2 * x_401)) - 1), x_405);
      int const x_407 = from_1;
      param = x_407;
      int const x_408 = mid_1;
      param_1 = x_408;
      int const x_409 = to_1;
      param_2 = x_409;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_16, tint_symbol_17);
      {
        int const x_411 = m;
        int const x_413 = i_2;
        i_2 = (x_413 + (2 * x_411));
      }
    }
    {
      int const x_415 = m;
      m = (2 * x_415);
    }
  }
  return;
}

