#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_5, thread tint_array_wrapper* const tint_symbol_6) {
  int k = 0;
  int i = 0;
  int j = 0;
  int i_1 = 0;
  int const x_260 = *(from);
  k = x_260;
  int const x_261 = *(from);
  i = x_261;
  int const x_262 = *(mid);
  j = (x_262 + 1);
  while (true) {
    int const x_268 = i;
    int const x_269 = *(mid);
    int const x_271 = j;
    int const x_272 = *(to);
    if (((x_268 <= x_269) & (x_271 <= x_272))) {
    } else {
      break;
    }
    int const x_276 = i;
    int const x_278 = (*(tint_symbol_5)).arr[x_276];
    int const x_279 = j;
    int const x_281 = (*(tint_symbol_5)).arr[x_279];
    if ((x_278 < x_281)) {
      int const x_286 = k;
      k = (x_286 + 1);
      int const x_288 = i;
      i = (x_288 + 1);
      int const x_291 = (*(tint_symbol_5)).arr[x_288];
      (*(tint_symbol_6)).arr[x_286] = x_291;
    } else {
      int const x_293 = k;
      k = (x_293 + 1);
      int const x_295 = j;
      j = (x_295 + 1);
      int const x_298 = (*(tint_symbol_5)).arr[x_295];
      (*(tint_symbol_6)).arr[x_293] = x_298;
    }
  }
  while (true) {
    int const x_304 = i;
    int const x_306 = i;
    int const x_307 = *(mid);
    if (((x_304 < 10) & (x_306 <= x_307))) {
    } else {
      break;
    }
    int const x_311 = k;
    k = (x_311 + 1);
    int const x_313 = i;
    i = (x_313 + 1);
    int const x_316 = (*(tint_symbol_5)).arr[x_313];
    (*(tint_symbol_6)).arr[x_311] = x_316;
  }
  int const x_318 = *(from);
  i_1 = x_318;
  while (true) {
    int const x_323 = i_1;
    int const x_324 = *(to);
    if ((x_323 <= x_324)) {
    } else {
      break;
    }
    int const x_327 = i_1;
    int const x_328 = i_1;
    int const x_330 = (*(tint_symbol_6)).arr[x_328];
    (*(tint_symbol_5)).arr[x_327] = x_330;
    {
      int const x_332 = i_1;
      i_1 = (x_332 + 1);
    }
  }
  return;
}

int func_i1_i1_(thread int* const m, thread int* const high, thread float4* const tint_symbol_7) {
  int x = 0;
  int x_335 = 0;
  int x_336 = 0;
  float const x_338 = (*(tint_symbol_7)).x;
  if ((x_338 >= 0.0f)) {
    if (false) {
      int const x_346 = *(high);
      x_336 = (x_346 << as_type<uint>(0));
    } else {
      x_336 = 4;
    }
    int const x_348 = x_336;
    x_335 = (1 << as_type<uint>(x_348));
  } else {
    x_335 = 1;
  }
  int const x_350 = x_335;
  x = x_350;
  int const x_351 = x;
  x = (x_351 >> as_type<uint>(4));
  int const x_353 = *(m);
  int const x_355 = *(m);
  int const x_357 = *(m);
  int const x_359 = x;
  return clamp((2 * x_353), (2 * x_355), ((2 * x_357) / x_359));
}

void mergeSort_(thread tint_array_wrapper* const tint_symbol_8, thread tint_array_wrapper* const tint_symbol_9, thread float4* const tint_symbol_10) {
  int low = 0;
  int high_1 = 0;
  int m_1 = 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;
  int param_3 = 0;
  int param_4 = 0;
  low = 0;
  high_1 = 9;
  m_1 = 1;
  while (true) {
    int const x_367 = m_1;
    int const x_368 = high_1;
    if ((x_367 <= x_368)) {
    } else {
      break;
    }
    int const x_371 = low;
    i_2 = x_371;
    while (true) {
      int const x_376 = i_2;
      int const x_377 = high_1;
      if ((x_376 < x_377)) {
      } else {
        break;
      }
      int const x_380 = i_2;
      from_1 = x_380;
      int const x_381 = i_2;
      int const x_382 = m_1;
      mid_1 = ((x_381 + x_382) - 1);
      int const x_385 = i_2;
      int const x_386 = m_1;
      int const x_390 = high_1;
      to_1 = min(((x_385 + (2 * x_386)) - 1), x_390);
      int const x_392 = from_1;
      param = x_392;
      int const x_393 = mid_1;
      param_1 = x_393;
      int const x_394 = to_1;
      param_2 = x_394;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_8, tint_symbol_9);
      {
        int const x_396 = m_1;
        param_3 = x_396;
        int const x_397 = high_1;
        param_4 = x_397;
        int const x_398 = func_i1_i1_(&(param_3), &(param_4), tint_symbol_10);
        int const x_399 = i_2;
        i_2 = (x_399 + x_398);
      }
    }
    {
      int const x_401 = m_1;
      m_1 = (2 * x_401);
    }
  }
  return;
}

void main_1(constant buf0& x_34, thread tint_array_wrapper* const tint_symbol_11, thread tint_array_wrapper* const tint_symbol_12, thread float4* const tint_symbol_13, thread float4* const tint_symbol_14) {
  int i_3 = 0;
  int j_1 = 0;
  float grey = 0.0f;
  float const x_93 = x_34.injectionSwitch.x;
  i_3 = int(x_93);
  while (true) {
    int const x_99 = i_3;
    switch(x_99) {
      case 9: {
        int const x_129 = i_3;
        (*(tint_symbol_11)).arr[x_129] = -5;
        break;
      }
      case 8: {
        int const x_127 = i_3;
        (*(tint_symbol_11)).arr[x_127] = -4;
        break;
      }
      case 7: {
        int const x_125 = i_3;
        (*(tint_symbol_11)).arr[x_125] = -3;
        break;
      }
      case 6: {
        int const x_123 = i_3;
        (*(tint_symbol_11)).arr[x_123] = -2;
        break;
      }
      case 5: {
        int const x_121 = i_3;
        (*(tint_symbol_11)).arr[x_121] = -1;
        break;
      }
      case 4: {
        int const x_119 = i_3;
        (*(tint_symbol_11)).arr[x_119] = 0;
        break;
      }
      case 3: {
        int const x_117 = i_3;
        (*(tint_symbol_11)).arr[x_117] = 1;
        break;
      }
      case 2: {
        int const x_115 = i_3;
        (*(tint_symbol_11)).arr[x_115] = 2;
        break;
      }
      case 1: {
        int const x_113 = i_3;
        (*(tint_symbol_11)).arr[x_113] = 3;
        break;
      }
      case 0: {
        int const x_111 = i_3;
        (*(tint_symbol_11)).arr[x_111] = 4;
        break;
      }
      default: {
        break;
      }
    }
    int const x_131 = i_3;
    i_3 = (x_131 + 1);
    {
      int const x_133 = i_3;
      if ((x_133 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  while (true) {
    int const x_139 = j_1;
    if ((x_139 < 10)) {
    } else {
      break;
    }
    int const x_142 = j_1;
    int const x_143 = j_1;
    int const x_145 = (*(tint_symbol_11)).arr[x_143];
    (*(tint_symbol_12)).arr[x_142] = x_145;
    {
      int const x_147 = j_1;
      j_1 = (x_147 + 1);
    }
  }
  mergeSort_(tint_symbol_11, tint_symbol_12, tint_symbol_13);
  float const x_151 = (*(tint_symbol_13)).y;
  if ((int(x_151) < 30)) {
    int const x_158 = (*(tint_symbol_11)).arr[0];
    grey = (0.5f + (float(x_158) / 10.0f));
  } else {
    float const x_163 = (*(tint_symbol_13)).y;
    if ((int(x_163) < 60)) {
      int const x_170 = (*(tint_symbol_11)).arr[1];
      grey = (0.5f + (float(x_170) / 10.0f));
    } else {
      float const x_175 = (*(tint_symbol_13)).y;
      if ((int(x_175) < 90)) {
        int const x_182 = (*(tint_symbol_11)).arr[2];
        grey = (0.5f + (float(x_182) / 10.0f));
      } else {
        float const x_187 = (*(tint_symbol_13)).y;
        if ((int(x_187) < 120)) {
          int const x_194 = (*(tint_symbol_11)).arr[3];
          grey = (0.5f + (float(x_194) / 10.0f));
        } else {
          float const x_199 = (*(tint_symbol_13)).y;
          if ((int(x_199) < 150)) {
            discard_fragment();
          } else {
            float const x_206 = (*(tint_symbol_13)).y;
            if ((int(x_206) < 180)) {
              int const x_213 = (*(tint_symbol_11)).arr[5];
              grey = (0.5f + (float(x_213) / 10.0f));
            } else {
              float const x_218 = (*(tint_symbol_13)).y;
              if ((int(x_218) < 210)) {
                int const x_225 = (*(tint_symbol_11)).arr[6];
                grey = (0.5f + (float(x_225) / 10.0f));
              } else {
                float const x_230 = (*(tint_symbol_13)).y;
                if ((int(x_230) < 240)) {
                  int const x_237 = (*(tint_symbol_11)).arr[7];
                  grey = (0.5f + (float(x_237) / 10.0f));
                } else {
                  float const x_242 = (*(tint_symbol_13)).y;
                  if ((int(x_242) < 270)) {
                    int const x_249 = (*(tint_symbol_11)).arr[8];
                    grey = (0.5f + (float(x_249) / 10.0f));
                  } else {
                    discard_fragment();
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  float const x_253 = grey;
  float3 const x_254 = float3(x_253, x_253, x_253);
  *(tint_symbol_14) = float4(x_254.x, x_254.y, x_254.z, 1.0f);
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_34 [[buffer(0)]]) {
  thread float4 tint_symbol_15 = 0.0f;
  thread tint_array_wrapper tint_symbol_16 = {};
  thread tint_array_wrapper tint_symbol_17 = {};
  thread float4 tint_symbol_18 = 0.0f;
  tint_symbol_15 = gl_FragCoord_param;
  main_1(x_34, &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_15), &(tint_symbol_18));
  main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_18};
  tint_symbol_2 const tint_symbol_4 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
  return tint_symbol_4;
}

