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

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

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

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

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

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var v0 : vec4<f32>;
  var v1 : vec4<f32>;
  var a : i32;
  var c : i32;
  let x_41 : f32 = x_6.x_GLF_uniform_float_values[1];
  v0 = vec4<f32>(x_41, x_41, x_41, x_41);
  let x_44 : f32 = x_6.x_GLF_uniform_float_values[0];
  v1 = vec4<f32>(x_44, x_44, x_44, x_44);
  let x_47 : i32 = x_10.x_GLF_uniform_int_values[1];
  a = x_47;
  loop {
    let x_52 : i32 = a;
    let x_54 : i32 = x_10.x_GLF_uniform_int_values[0];
    if ((x_52 < x_54)) {
    } else {
      break;
    }
    let x_58 : i32 = x_10.x_GLF_uniform_int_values[3];
    c = x_58;
    loop {
      let x_63 : i32 = c;
      let x_65 : i32 = x_10.x_GLF_uniform_int_values[2];
      if ((x_63 < x_65)) {
      } else {
        break;
      }
      let x_68 : i32 = c;
      let x_69 : i32 = clamp(x_68, 0, 3);
      let x_71 : f32 = x_6.x_GLF_uniform_float_values[1];
      let x_73 : f32 = v0[x_69];
      v0[x_69] = (x_73 - x_71);
      let x_77 : i32 = x_10.x_GLF_uniform_int_values[1];
      let x_79 : i32 = x_10.x_GLF_uniform_int_values[3];
      if ((x_77 == x_79)) {
        let x_83 : i32 = a;
        let x_85 : f32 = x_6.x_GLF_uniform_float_values[1];
        let x_87 : f32 = x_6.x_GLF_uniform_float_values[1];
        let x_89 : f32 = x_6.x_GLF_uniform_float_values[1];
        let x_91 : vec4<f32> = v0;
        let x_93 : i32 = a;
        v1[x_83] = smoothStep(vec4<f32>(x_85, x_87, x_89, 3.0), vec4<f32>(1.0, 1.0, 1.0, 1.0), x_91)[x_93];
      }

      continuing {
        let x_96 : i32 = c;
        c = (x_96 + 1);
      }
    }

    continuing {
      let x_98 : i32 = a;
      a = (x_98 + 1);
    }
  }
  let x_101 : f32 = v1.x;
  let x_103 : f32 = x_6.x_GLF_uniform_float_values[0];
  if ((x_101 == x_103)) {
    let x_109 : i32 = x_10.x_GLF_uniform_int_values[1];
    let x_112 : i32 = x_10.x_GLF_uniform_int_values[3];
    let x_115 : i32 = x_10.x_GLF_uniform_int_values[3];
    let x_118 : i32 = x_10.x_GLF_uniform_int_values[1];
    x_GLF_color = vec4<f32>(f32(x_109), f32(x_112), f32(x_115), f32(x_118));
  } else {
    let x_122 : i32 = x_10.x_GLF_uniform_int_values[3];
    let x_123 : f32 = f32(x_122);
    x_GLF_color = vec4<f32>(x_123, x_123, x_123, x_123);
  }
  return;
}

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

[[stage(fragment)]]
fn main() -> main_out {
  main_1();
  return main_out(x_GLF_color);
}
