struct S {
  f0 : i32;
  f1 : mat4x3<f32>;
};

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var x_51 : i32;
  var x_12_phi : i32;
  loop {
    var x_45 : S;
    var x_45_phi : S;
    var x_11_phi : i32;
    x_45_phi = S(0, mat4x3<f32>(vec3<f32>(1.0, 0.0, 0.0), vec3<f32>(0.0, 1.0, 0.0), vec3<f32>(0.0, 0.0, 1.0), vec3<f32>(0.0, 0.0, 0.0)));
    x_11_phi = 0;
    loop {
      var x_46 : S;
      var x_9 : i32;
      x_45 = x_45_phi;
      let x_11 : i32 = x_11_phi;
      let x_49 : f32 = gl_FragCoord.x;
      x_51 = select(2, 1, (x_49 == 0.0));
      if ((x_11 < x_51)) {
      } else {
        break;
      }

      continuing {
        x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
        x_46 = x_45;
        x_46.f0 = (x_45.f0 + 1);
        x_9 = (x_11 + 1);
        x_45_phi = x_46;
        x_11_phi = x_9;
      }
    }
    if ((x_45.f0 < 1000)) {
      break;
    }
    break;
  }
  x_12_phi = 0;
  loop {
    var x_6 : i32;
    let x_12 : i32 = x_12_phi;
    if ((x_12 < x_51)) {
    } else {
      break;
    }

    continuing {
      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
      x_6 = (x_12 + 1);
      x_12_phi = x_6;
    }
  }
  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);
}
