#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ int injected;
};
struct tint_array_wrapper {
  float arr[9];
};
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_9, thread float4* const tint_symbol_4) {
  int idx = 0;
  float4x3 m43 = float4x3(0.0f);
  int ll_1 = 0;
  int GLF_live6rows = 0;
  int z = 0;
  int ll_2 = 0;
  int ctr = 0;
  float4x3 tempm43 = float4x3(0.0f);
  int ll_3 = 0;
  int c = 0;
  int d = 0;
  tint_array_wrapper GLF_live6sums = {};
  idx = 0;
  m43 = float4x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f), float3(0.0f, 0.0f, 0.0f));
  ll_1 = 0;
  GLF_live6rows = 2;
  while (true) {
    int const x_18 = ll_1;
    int const x_19 = x_9.injected;
    if ((x_18 >= x_19)) {
      *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
      break;
    }
    int const x_20 = ll_1;
    ll_1 = as_type<int>((as_type<uint>(x_20) + as_type<uint>(1)));
    int const x_22 = x_9.injected;
    z = x_22;
    ll_2 = 0;
    ctr = 0;
    while (true) {
      int const x_23 = ctr;
      if ((x_23 < 1)) {
      } else {
        break;
      }
      int const x_24 = ll_2;
      int const x_25 = x_9.injected;
      if ((x_24 >= x_25)) {
        break;
      }
      int const x_26 = ll_2;
      ll_2 = as_type<int>((as_type<uint>(x_26) + as_type<uint>(1)));
      float4x3 const x_98 = m43;
      tempm43 = x_98;
      ll_3 = 0;
      c = 0;
      while (true) {
        int const x_28 = z;
        if ((1 < x_28)) {
        } else {
          break;
        }
        d = 0;
        int const x_29 = c;
        int const x_30 = c;
        int const x_31 = c;
        int const x_32 = d;
        int const x_33 = d;
        int const x_34 = d;
        tempm43[select(0, x_31, ((x_29 >= 0) & (x_30 < 4)))][select(0, x_34, ((x_32 >= 0) & (x_33 < 3)))] = 1.0f;
        {
          int const x_35 = c;
          c = as_type<int>((as_type<uint>(x_35) + as_type<uint>(1)));
        }
      }
      int const x_37 = idx;
      int const x_38 = idx;
      int const x_39 = idx;
      int const x_117 = select(0, x_39, ((x_37 >= 0) & (x_38 < 9)));
      int const x_40 = ctr;
      float const x_119 = m43[x_40].y;
      float const x_121 = GLF_live6sums.arr[x_117];
      GLF_live6sums.arr[x_117] = (x_121 + x_119);
      {
        int const x_41 = ctr;
        ctr = as_type<int>((as_type<uint>(x_41) + as_type<uint>(1)));
      }
    }
    int const x_43 = idx;
    idx = as_type<int>((as_type<uint>(x_43) + as_type<uint>(1)));
  }
  return;
}

fragment tint_symbol_1 tint_symbol(constant buf0& x_9 [[buffer(0)]]) {
  thread float4 tint_symbol_5 = 0.0f;
  main_1(x_9, &(tint_symbol_5));
  main_out const tint_symbol_2 = {.x_GLF_color_1=tint_symbol_5};
  tint_symbol_1 const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_2.x_GLF_color_1};
  return tint_symbol_3;
}

