type Arr = [[stride(16)]] array<f32, 2>;

[[block]]
struct buf0 {
  x_GLF_uniform_float_values : Arr;
};

type Arr_1 = [[stride(16)]] array<i32, 3>;

[[block]]
struct buf1 {
  x_GLF_uniform_int_values : Arr_1;
};

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

[[group(0), binding(1)]] var<uniform> x_11 : buf1;

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var a : f32;
  var b : f32;
  var i : i32;
  var i_1 : i32;
  var i_2 : i32;
  var i_3 : i32;
  var i_4 : i32;
  var i_5 : i32;
  var i_6 : i32;
  var i_7 : i32;
  var i_8 : i32;
  var i_9 : i32;
  var i_10 : i32;
  let x_104 : f32 = x_7.x_GLF_uniform_float_values[0];
  a = x_104;
  let x_106 : f32 = x_7.x_GLF_uniform_float_values[1];
  b = x_106;
  let x_24 : i32 = x_11.x_GLF_uniform_int_values[1];
  i = x_24;
  loop {
    let x_25 : i32 = i;
    let x_26 : i32 = x_11.x_GLF_uniform_int_values[0];
    if ((x_25 < x_26)) {
    } else {
      break;
    }
    let x_27 : i32 = x_11.x_GLF_uniform_int_values[1];
    i_1 = x_27;
    loop {
      let x_28 : i32 = i_1;
      let x_29 : i32 = x_11.x_GLF_uniform_int_values[0];
      if ((x_28 < x_29)) {
      } else {
        break;
      }
      let x_30 : i32 = x_11.x_GLF_uniform_int_values[1];
      i_2 = x_30;
      loop {
        let x_31 : i32 = i_2;
        let x_32 : i32 = x_11.x_GLF_uniform_int_values[0];
        if ((x_31 < x_32)) {
        } else {
          break;
        }
        let x_33 : i32 = x_11.x_GLF_uniform_int_values[2];
        i_3 = x_33;
        loop {
          let x_34 : i32 = i_3;
          let x_35 : i32 = x_11.x_GLF_uniform_int_values[0];
          if ((x_34 < x_35)) {
          } else {
            break;
          }
          let x_36 : i32 = x_11.x_GLF_uniform_int_values[2];
          i_4 = x_36;
          loop {
            let x_37 : i32 = i_4;
            let x_38 : i32 = x_11.x_GLF_uniform_int_values[0];
            if ((x_37 < x_38)) {
            } else {
              break;
            }
            let x_39 : i32 = x_11.x_GLF_uniform_int_values[1];
            i_5 = x_39;
            loop {
              let x_40 : i32 = i_5;
              let x_41 : i32 = x_11.x_GLF_uniform_int_values[0];
              if ((x_40 < x_41)) {
              } else {
                break;
              }
              let x_42 : i32 = x_11.x_GLF_uniform_int_values[1];
              i_6 = x_42;
              loop {
                let x_43 : i32 = i_6;
                let x_44 : i32 = x_11.x_GLF_uniform_int_values[0];
                if ((x_43 < x_44)) {
                } else {
                  break;
                }
                let x_45 : i32 = x_11.x_GLF_uniform_int_values[1];
                i_7 = x_45;
                loop {
                  let x_46 : i32 = i_7;
                  let x_47 : i32 = x_11.x_GLF_uniform_int_values[0];
                  if ((x_46 < x_47)) {
                  } else {
                    break;
                  }
                  let x_48 : i32 = x_11.x_GLF_uniform_int_values[1];
                  i_8 = x_48;
                  loop {
                    let x_49 : i32 = i_8;
                    let x_50 : i32 = x_11.x_GLF_uniform_int_values[0];
                    if ((x_49 < x_50)) {
                    } else {
                      break;
                    }
                    let x_51 : i32 = x_11.x_GLF_uniform_int_values[1];
                    i_9 = x_51;
                    loop {
                      let x_52 : i32 = i_9;
                      let x_53 : i32 = x_11.x_GLF_uniform_int_values[0];
                      if ((x_52 < x_53)) {
                      } else {
                        break;
                      }
                      let x_54 : i32 = x_11.x_GLF_uniform_int_values[1];
                      i_10 = x_54;
                      loop {
                        let x_55 : i32 = i_10;
                        let x_56 : i32 = x_11.x_GLF_uniform_int_values[0];
                        if ((x_55 < x_56)) {
                        } else {
                          break;
                        }
                        let x_196 : f32 = x_7.x_GLF_uniform_float_values[1];
                        a = x_196;
                        let x_198 : f32 = gl_FragCoord.y;
                        let x_200 : f32 = x_7.x_GLF_uniform_float_values[1];
                        if ((x_198 > x_200)) {
                          break;
                        }

                        continuing {
                          let x_57 : i32 = i_10;
                          i_10 = (x_57 + 1);
                        }
                      }

                      continuing {
                        let x_59 : i32 = i_9;
                        i_9 = (x_59 + 1);
                      }
                    }

                    continuing {
                      let x_61 : i32 = i_8;
                      i_8 = (x_61 + 1);
                    }
                  }

                  continuing {
                    let x_63 : i32 = i_7;
                    i_7 = (x_63 + 1);
                  }
                }

                continuing {
                  let x_65 : i32 = i_6;
                  i_6 = (x_65 + 1);
                }
              }

              continuing {
                let x_67 : i32 = i_5;
                i_5 = (x_67 + 1);
              }
            }

            continuing {
              let x_69 : i32 = i_4;
              i_4 = (x_69 + 1);
            }
          }

          continuing {
            let x_71 : i32 = i_3;
            i_3 = (x_71 + 1);
          }
        }

        continuing {
          let x_73 : i32 = i_2;
          i_2 = (x_73 + 1);
        }
      }

      continuing {
        let x_75 : i32 = i_1;
        i_1 = (x_75 + 1);
      }
    }
    let x_204 : f32 = b;
    b = (x_204 + 1.0);

    continuing {
      let x_77 : i32 = i;
      i = (x_77 + 1);
    }
  }
  let x_206 : f32 = b;
  let x_207 : f32 = a;
  let x_208 : f32 = a;
  let x_209 : f32 = b;
  x_GLF_color = vec4<f32>(x_206, x_207, x_208, x_209);
  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);
}
