#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ packed_float2 injectionSwitch;
};
struct tint_array_wrapper {
  float arr[3];
};
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_11, thread float4* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6, thread tint_array_wrapper* const tint_symbol_7, thread float4* const tint_symbol_8) {
  int q = 0;
  int i = 0;
  int c = 0;
  q = 0;
  float const x_55 = (*(tint_symbol_5)).x;
  i = (int(x_55) % 3);
  c = 0;
  while (true) {
    int const x_14 = c;
    if ((x_14 < 3)) {
    } else {
      break;
    }
    int const x_15 = c;
    (*(tint_symbol_6)).arr[x_15] = 0.0f;
    int const x_16 = c;
    (*(tint_symbol_7)).arr[x_16] = 0.0f;
    float const x_65 = x_11.injectionSwitch.x;
    int const x_18 = q;
    switch(as_type<int>((as_type<uint>(int(x_65)) + as_type<uint>(x_18)))) {
      case 51: {
        while (true) {
          if (true) {
          } else {
            break;
          }
        }
        int const x_20 = c;
        (*(tint_symbol_6)).arr[x_20] = 1.0f;
        /* fallthrough */
      }
      case 61: {
        (*(tint_symbol_7)).arr[0] = 1.0f;
        int const x_21 = c;
        (*(tint_symbol_7)).arr[x_21] = 1.0f;
        break;
      }
      case 0: {
        q = 61;
        break;
      }
      default: {
        break;
      }
    }
    {
      int const x_22 = c;
      c = as_type<int>((as_type<uint>(x_22) + as_type<uint>(1)));
    }
  }
  int const x_24 = i;
  float const x_79 = (*(tint_symbol_7)).arr[x_24];
  int const x_25 = i;
  float const x_81 = (*(tint_symbol_6)).arr[x_25];
  int const x_26 = i;
  float const x_83 = (*(tint_symbol_6)).arr[x_26];
  *(tint_symbol_8) = float4(x_79, x_81, x_83, 1.0f);
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_11 [[buffer(0)]]) {
  thread float4 tint_symbol_9 = 0.0f;
  thread tint_array_wrapper tint_symbol_10 = {};
  thread tint_array_wrapper tint_symbol_11 = {};
  thread float4 tint_symbol_12 = 0.0f;
  tint_symbol_9 = gl_FragCoord_param;
  main_1(x_11, &(tint_symbol_9), &(tint_symbol_10), &(tint_symbol_11), &(tint_symbol_12));
  main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_12};
  tint_symbol_2 const tint_symbol_4 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
  return tint_symbol_4;
}

