struct theSSBO {
  out_data : i32,
}

struct buf1 {
  injectionSwitch : vec2<f32>,
}

@group(0) @binding(0) var<storage, read_write> x_4 : theSSBO;

@group(0) @binding(1) var<uniform> x_6 : buf1;

fn main_1() {
  var i : i32;
  var GLF_live3s : f32;
  var i_1 : i32;
  var z : i32;
  x_4.out_data = 42;
  let x_37 : f32 = x_6.injectionSwitch.x;
  let x_39 : f32 = x_6.injectionSwitch.y;
  if ((x_37 > x_39)) {
    workgroupBarrier();
  }
  let x_44 : f32 = x_6.injectionSwitch.x;
  let x_46 : f32 = x_6.injectionSwitch.y;
  if ((x_44 > x_46)) {
    workgroupBarrier();
  }
  let x_51 : f32 = x_6.injectionSwitch.y;
  i = i32(x_51);
  loop {
    let x_57 : i32 = i;
    if ((x_57 > 0)) {
    } else {
      break;
    }
    workgroupBarrier();

    continuing {
      let x_60 : i32 = i;
      i = (x_60 - 1);
    }
  }
  GLF_live3s = 0.0;
  loop {
    i_1 = 1;
    loop {
      let x_70 : i32 = i_1;
      if ((x_70 < 2)) {
      } else {
        break;
      }
      let x_74 : f32 = x_6.injectionSwitch.x;
      if ((x_74 > 1.0)) {
        workgroupBarrier();
      }
      let x_79 : f32 = x_6.injectionSwitch.x;
      let x_81 : f32 = x_6.injectionSwitch.y;
      if ((x_79 > x_81)) {
        workgroupBarrier();
      }
      let x_86 : f32 = x_6.injectionSwitch.y;
      z = i32(x_86);
      loop {
        let x_92 : i32 = z;
        if ((x_92 > 0)) {
        } else {
          break;
        }
        let x_95 : f32 = GLF_live3s;
        GLF_live3s = (x_95 + 1.0);

        continuing {
          let x_97 : i32 = z;
          z = (x_97 - 1);
        }
      }
      let x_99 : i32 = i_1;
      if ((x_99 >= 1)) {
        let x_104 : f32 = x_6.injectionSwitch.x;
        if ((x_104 > 1.0)) {
          workgroupBarrier();
        }
      }

      continuing {
        let x_108 : i32 = i_1;
        i_1 = (x_108 + 1);
      }
    }

    continuing {
      let x_111 : f32 = x_6.injectionSwitch.x;
      let x_113 : f32 = x_6.injectionSwitch.y;
      if ((x_111 > x_113)) {
      } else {
        break;
      }
    }
  }
  return;
}

@stage(compute) @workgroup_size(1, 1, 1)
fn main() {
  main_1();
}
