[[block]]
struct buf0 {
  one : f32;
};

var<private> gl_FragCoord : vec4<f32>;

[[group(0), binding(0)]] var<uniform> x_7 : buf0;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var m44 : mat4x4<f32>;
  var x_10_phi : i32;
  m44 = mat4x4<f32>(vec4<f32>(1.0, 2.0, 3.0, 4.0), vec4<f32>(5.0, 6.0, 7.0, 8.0), vec4<f32>(9.0, 10.0, 11.0, 12.0), vec4<f32>(13.0, 14.0, 15.0, 16.0));
  x_10_phi = 0;
  loop {
    var x_9 : i32;
    var x_11_phi : i32;
    let x_10 : i32 = x_10_phi;
    if ((x_10 < 4)) {
    } else {
      break;
    }
    let x_63 : f32 = gl_FragCoord.y;
    if ((x_63 < 0.0)) {
      break;
    }
    x_11_phi = 0;
    loop {
      var x_8 : i32;
      let x_11 : i32 = x_11_phi;
      if ((x_11 < 4)) {
      } else {
        break;
      }

      continuing {
        let x_72 : f32 = x_7.one;
        let x_73 : ptr<function, f32> = &(m44[x_10][x_11]);
        let x_74 : f32 = *(x_73);
        *(x_73) = (x_74 + x_72);
        x_8 = (x_11 + 1);
        x_11_phi = x_8;
      }
    }

    continuing {
      x_9 = (x_10 + 1);
      x_10_phi = x_9;
    }
  }
  let x_77 : f32 = m44[1].y;
  var x_79_1 : vec4<f32> = vec4<f32>(0.0, 0.0, 0.0, 0.0);
  x_79_1.x = (x_77 - 6.0);
  let x_79 : vec4<f32> = x_79_1;
  let x_81 : f32 = m44[2].z;
  var x_83_1 : vec4<f32> = x_79;
  x_83_1.w = (x_81 - 11.0);
  let x_83 : vec4<f32> = x_83_1;
  x_GLF_color = x_83;
  return;
}

struct main_out {
  [[location(0)]]
  x_GLF_color_1 : vec4<f32>;
};

[[stage(fragment)]]
fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  return main_out(x_GLF_color);
}
