struct QuicksortObject {
  numbers : array<i32, 10>;
};

[[block]]
struct buf0 {
  resolution : vec2<f32>;
};

var<private> obj : QuicksortObject;

var<private> gl_FragCoord : vec4<f32>;

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

var<private> x_GLF_color : vec4<f32>;

fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
  var temp : i32;
  let x_932 : i32 = temp;
  temp = 0;
  temp = x_932;
  let x_523 : vec3<f32> = vec3<f32>(vec3<f32>(1.0, 2.0, 3.0).z, vec3<f32>(1.0, 2.0, 3.0).y, vec3<f32>(1.0, 2.0, 3.0).z);
  let x_933 : i32 = *(i);
  *(i) = 0;
  *(i) = x_933;
  let x_28 : i32 = *(i);
  let x_934 : i32 = *(j);
  *(j) = 0;
  *(j) = x_934;
  let x_524 : vec3<f32> = vec3<f32>(x_523.y, x_523.x, x_523.y);
  let x_935 : i32 = temp;
  temp = 0;
  temp = x_935;
  let x_30 : ptr<private, i32> = &(obj.numbers[x_28]);
  let x_936 : i32 = *(x_30);
  *(x_30) = 0;
  *(x_30) = x_936;
  let x_31 : i32 = *(x_30);
  let x_937 : i32 = temp;
  temp = 0;
  temp = x_937;
  temp = x_31;
  let x_938 : i32 = *(j);
  *(j) = 0;
  *(j) = x_938;
  let x_525 : vec3<f32> = vec3<f32>(x_523.z, vec3<f32>(1.0, 2.0, 3.0).x, x_523.y);
  let x_939 : i32 = *(i);
  *(i) = 0;
  *(i) = x_939;
  let x_32 : i32 = *(i);
  let x_940 : i32 = *(x_30);
  *(x_30) = 0;
  *(x_30) = x_940;
  let x_33 : i32 = *(j);
  let x_941 : i32 = *(i);
  *(i) = 0;
  *(i) = x_941;
  let x_526 : vec3<f32> = vec3<f32>(x_525.x, x_525.z, x_525.z);
  let x_942 : i32 = *(x_30);
  *(x_30) = 0;
  *(x_30) = x_942;
  let x_34 : ptr<private, i32> = &(obj.numbers[x_33]);
  let x_35 : i32 = *(x_34);
  let x_943 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_943;
  let x_527 : vec2<f32> = vec2<f32>(x_526.x, x_526.x);
  let x_36 : ptr<private, i32> = &(obj.numbers[x_32]);
  let x_528 : vec3<f32> = vec3<f32>(x_524.x, x_524.z, x_524.x);
  *(x_36) = x_35;
  let x_944 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_944;
  let x_529 : vec3<f32> = vec3<f32>(x_526.y, x_526.z, x_526.x);
  let x_945 : i32 = *(i);
  *(i) = 0;
  *(i) = x_945;
  let x_37 : i32 = *(j);
  let x_946 : i32 = temp;
  temp = 0;
  temp = x_946;
  let x_530 : vec2<f32> = vec2<f32>(x_529.z, x_529.y);
  let x_947 : i32 = *(x_34);
  *(x_34) = 0;
  *(x_34) = x_947;
  let x_38 : i32 = temp;
  let x_948 : i32 = *(j);
  *(j) = 0;
  *(j) = x_948;
  let x_531 : vec3<f32> = vec3<f32>(x_527.x, x_526.y, x_526.x);
  let x_949 : i32 = *(x_36);
  *(x_36) = 0;
  *(x_36) = x_949;
  let x_950 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_950;
  let x_532 : vec3<f32> = vec3<f32>(x_528.x, x_528.y, x_528.x);
  let x_951 : i32 = *(x_34);
  *(x_34) = 0;
  *(x_34) = x_951;
  obj.numbers[x_37] = x_38;
  return;
}

fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
  var param_3 : i32;
  var i_1 : i32;
  var j_1 : i32;
  var param_2 : i32;
  var param_1 : i32;
  var param : i32;
  var pivot : i32;
  var x_537 : vec2<f32>;
  var x_538 : vec3<f32>;
  let x_952 : i32 = *(h);
  *(h) = 0;
  *(h) = x_952;
  let x_41 : i32 = *(h);
  let x_953 : i32 = *(l);
  *(l) = 0;
  *(l) = x_953;
  let x_42 : ptr<private, i32> = &(obj.numbers[x_41]);
  let x_954 : i32 = *(x_42);
  *(x_42) = 0;
  *(x_42) = x_954;
  let x_43 : i32 = *(x_42);
  let x_955 : i32 = param_3;
  param_3 = 0;
  param_3 = x_955;
  let x_534 : vec3<f32> = vec3<f32>(vec3<f32>(1.0, 2.0, 3.0).z, vec3<f32>(1.0, 2.0, 3.0).x, vec3<f32>(1.0, 2.0, 3.0).z);
  let x_956 : i32 = param_1;
  param_1 = 0;
  param_1 = x_956;
  pivot = x_43;
  let x_45 : i32 = *(l);
  let x_957 : i32 = *(h);
  *(h) = 0;
  *(h) = x_957;
  let x_958 : i32 = j_1;
  j_1 = 0;
  j_1 = x_958;
  let x_535 : vec3<f32> = vec3<f32>(x_534.y, x_534.z, x_534.y);
  let x_959 : i32 = *(l);
  *(l) = 0;
  *(l) = x_959;
  i_1 = (x_45 - bitcast<i32>(1u));
  let x_49 : i32 = *(l);
  let x_536 : vec3<f32> = vec3<f32>(x_534.x, x_534.z, x_535.x);
  j_1 = 10;
  let x_960 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_960;
  loop {
    let x_961 : i32 = pivot;
    pivot = 0;
    pivot = x_961;
    let x_962 : i32 = param_1;
    param_1 = 0;
    param_1 = x_962;
    let x_55 : i32 = j_1;
    let x_963 : i32 = pivot;
    pivot = 0;
    pivot = x_963;
    x_537 = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).y, vec3<f32>(1.0, 2.0, 3.0).z);
    let x_964 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_964;
    let x_56 : i32 = *(h);
    let x_965 : i32 = *(h);
    *(h) = 0;
    *(h) = x_965;
    let x_966 : i32 = param;
    param = 0;
    param = x_966;
    let x_967 : i32 = j_1;
    j_1 = 0;
    j_1 = x_967;
    x_538 = vec3<f32>(x_534.x, x_537.y, x_534.z);
    let x_968 : i32 = param;
    param = 0;
    param = x_968;
    if ((x_55 <= (x_56 - bitcast<i32>(1u)))) {
    } else {
      break;
    }
    let x_60 : i32 = j_1;
    let x_969 : i32 = *(x_42);
    *(x_42) = 0;
    *(x_42) = x_969;
    let x_61 : ptr<private, i32> = &(obj.numbers[x_60]);
    let x_970 : i32 = *(h);
    *(h) = 0;
    *(h) = x_970;
    let x_539 : vec3<f32> = vec3<f32>(x_537.x, x_535.z, x_537.x);
    let x_971 : i32 = param_1;
    param_1 = 0;
    param_1 = x_971;
    let x_62 : i32 = *(x_61);
    let x_972 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_972;
    let x_63 : i32 = pivot;
    let x_540 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).y, x_534.z);
    let x_973 : i32 = i_1;
    i_1 = 0;
    i_1 = x_973;
    let x_974 : i32 = *(l);
    *(l) = 0;
    *(l) = x_974;
    let x_541 : vec3<f32> = vec3<f32>(x_534.y, x_534.x, x_534.y);
    let x_975 : i32 = pivot;
    pivot = 0;
    pivot = x_975;
    if ((x_62 <= x_63)) {
      let x_542 : vec3<f32> = vec3<f32>(x_541.z, x_541.x, x_541.x);
      let x_976 : i32 = param_3;
      param_3 = 0;
      param_3 = x_976;
      let x_67 : i32 = i_1;
      let x_977 : i32 = pivot;
      pivot = 0;
      pivot = x_977;
      let x_543 : vec2<f32> = vec2<f32>(x_539.x, x_541.y);
      let x_978 : i32 = i_1;
      i_1 = 0;
      i_1 = x_978;
      let x_979 : i32 = param;
      param = 0;
      param = x_979;
      i_1 = (x_67 + bitcast<i32>(1u));
      let x_980 : i32 = *(l);
      *(l) = 0;
      *(l) = x_980;
      let x_544 : vec3<f32> = vec3<f32>(vec3<f32>(1.0, 2.0, 3.0).z, vec3<f32>(1.0, 2.0, 3.0).y, x_540.x);
      let x_70 : i32 = i_1;
      let x_545 : vec2<f32> = vec2<f32>(x_537.y, x_538.x);
      let x_981 : i32 = param;
      param = 0;
      param = x_981;
      param = x_70;
      let x_982 : i32 = param;
      param = 0;
      param = x_982;
      let x_546 : vec2<f32> = vec2<f32>(x_545.x, x_545.x);
      let x_983 : i32 = i_1;
      i_1 = 0;
      i_1 = x_983;
      let x_72 : i32 = j_1;
      param_1 = x_72;
      let x_984 : i32 = param_3;
      param_3 = 0;
      param_3 = x_984;
      swap_i1_i1_(&(param), &(param_1));
      let x_985 : i32 = param_1;
      param_1 = 0;
      param_1 = x_985;
    }
    let x_986 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_986;

    continuing {
      let x_987 : i32 = *(h);
      *(h) = 0;
      *(h) = x_987;
      let x_74 : i32 = j_1;
      let x_988 : i32 = *(h);
      *(h) = 0;
      *(h) = x_988;
      let x_547 : vec3<f32> = vec3<f32>(x_539.x, x_541.z, x_541.z);
      let x_989 : i32 = *(x_61);
      *(x_61) = 0;
      *(x_61) = x_989;
      let x_990 : i32 = param;
      param = 0;
      param = x_990;
      j_1 = (1 + x_74);
      let x_991 : i32 = param_1;
      param_1 = 0;
      param_1 = x_991;
      let x_548 : vec3<f32> = vec3<f32>(x_541.y, x_541.z, x_541.x);
      let x_992 : i32 = *(x_61);
      *(x_61) = 0;
      *(x_61) = x_992;
    }
  }
  let x_76 : i32 = i_1;
  let x_993 : i32 = *(x_42);
  *(x_42) = 0;
  *(x_42) = x_993;
  let x_549 : vec2<f32> = vec2<f32>(x_534.x, x_534.y);
  let x_994 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_994;
  let x_995 : i32 = *(h);
  *(h) = 0;
  *(h) = x_995;
  i_1 = (1 + x_76);
  let x_996 : i32 = param_1;
  param_1 = 0;
  param_1 = x_996;
  let x_79 : i32 = i_1;
  let x_997 : i32 = j_1;
  j_1 = 0;
  j_1 = x_997;
  let x_550 : vec2<f32> = vec2<f32>(x_534.x, x_534.x);
  let x_998 : i32 = param_1;
  param_1 = 0;
  param_1 = x_998;
  param_2 = x_79;
  let x_551 : vec2<f32> = vec2<f32>(x_534.y, x_536.x);
  let x_999 : i32 = pivot;
  pivot = 0;
  pivot = x_999;
  let x_81 : i32 = *(h);
  let x_552 : vec2<f32> = vec2<f32>(x_550.x, x_549.y);
  let x_1000 : i32 = *(h);
  *(h) = 0;
  *(h) = x_1000;
  param_3 = x_81;
  let x_1001 : i32 = i_1;
  i_1 = 0;
  i_1 = x_1001;
  let x_553 : vec2<f32> = vec2<f32>(x_549.y, x_552.x);
  let x_1002 : i32 = *(h);
  *(h) = 0;
  *(h) = x_1002;
  swap_i1_i1_(&(param_2), &(param_3));
  let x_1003 : i32 = *(l);
  *(l) = 0;
  *(l) = x_1003;
  let x_554 : vec2<f32> = vec2<f32>(x_536.z, vec3<f32>(1.0, 2.0, 3.0).y);
  let x_1004 : i32 = param_1;
  param_1 = 0;
  param_1 = x_1004;
  let x_83 : i32 = i_1;
  let x_1005 : i32 = param;
  param = 0;
  param = x_1005;
  let x_555 : vec2<f32> = vec2<f32>(x_534.y, x_534.x);
  let x_1006 : i32 = j_1;
  j_1 = 0;
  j_1 = x_1006;
  return x_83;
}

fn quicksort_() {
  var param_4 : i32;
  var h_1 : i32;
  var p : i32;
  var l_1 : i32;
  var top : i32;
  var stack : array<i32, 10>;
  var param_5 : i32;
  l_1 = 0;
  let x_1007 : i32 = param_5;
  param_5 = 0;
  param_5 = x_1007;
  h_1 = 9;
  let x_1008 : array<i32, 10> = stack;
  stack = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  stack = x_1008;
  let x_556 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).y, vec3<f32>(1.0, 2.0, 3.0).y);
  let x_1009 : i32 = param_5;
  param_5 = 0;
  param_5 = x_1009;
  top = -1;
  let x_1010 : i32 = p;
  p = 0;
  p = x_1010;
  let x_93 : i32 = top;
  let x_557 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).x, vec3<f32>(1.0, 2.0, 3.0).x);
  let x_1011 : i32 = p;
  p = 0;
  p = x_1011;
  let x_94 : i32 = (x_93 + bitcast<i32>(1u));
  let x_1012 : i32 = top;
  top = 0;
  top = x_1012;
  let x_558 : vec2<f32> = vec2<f32>(x_556.y, x_557.y);
  let x_1013 : i32 = param_4;
  param_4 = 0;
  param_4 = x_1013;
  top = x_94;
  let x_1014 : i32 = h_1;
  h_1 = 0;
  h_1 = x_1014;
  let x_559 : vec3<f32> = vec3<f32>(x_557.y, x_557.x, x_557.x);
  let x_1015 : i32 = param_4;
  param_4 = 0;
  param_4 = x_1015;
  let x_95 : i32 = l_1;
  let x_1016 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_1016;
  let x_560 : vec3<f32> = vec3<f32>(x_559.y, x_559.x, x_557.x);
  let x_96 : ptr<function, i32> = &(stack[x_94]);
  let x_1017 : array<i32, 10> = stack;
  stack = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  stack = x_1017;
  let x_561 : vec3<f32> = vec3<f32>(x_556.y, x_556.y, x_556.y);
  let x_1018 : i32 = l_1;
  l_1 = 0;
  l_1 = 0;
  *(x_96) = x_95;
  let x_1019 : i32 = param_5;
  param_5 = 0;
  param_5 = x_1019;
  let x_97 : i32 = top;
  let x_1020 : i32 = param_4;
  param_4 = 0;
  param_4 = x_1020;
  let x_562 : vec3<f32> = vec3<f32>(vec3<f32>(1.0, 2.0, 3.0).z, x_558.y, vec3<f32>(1.0, 2.0, 3.0).y);
  let x_1021 : i32 = *(x_96);
  *(x_96) = 0;
  *(x_96) = x_1021;
  let x_98 : i32 = (x_97 + 1);
  let x_1022 : i32 = *(x_96);
  *(x_96) = 0;
  *(x_96) = x_1022;
  let x_563 : vec3<f32> = vec3<f32>(x_559.x, x_559.z, x_556.y);
  top = x_98;
  let x_1023 : i32 = param_4;
  param_4 = 0;
  param_4 = x_1023;
  let x_99 : i32 = h_1;
  let x_1024 : i32 = param_4;
  param_4 = 0;
  param_4 = x_1024;
  let x_564 : vec3<f32> = vec3<f32>(x_558.x, x_561.x, x_558.y);
  let x_1025 : i32 = l_1;
  l_1 = 0;
  l_1 = x_1025;
  let x_100 : ptr<function, i32> = &(stack[x_98]);
  let x_1026 : i32 = param_5;
  param_5 = 0;
  param_5 = x_1026;
  let x_565 : vec2<f32> = vec2<f32>(x_564.z, x_564.z);
  let x_1027 : i32 = p;
  p = 0;
  p = x_1027;
  *(x_100) = x_99;
  loop {
    let x_566 : vec3<f32> = vec3<f32>(x_563.x, x_563.x, x_563.x);
    let x_1028 : i32 = h_1;
    h_1 = 0;
    h_1 = x_1028;
    let x_1029 : array<i32, 10> = stack;
    stack = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    stack = x_1029;
    let x_106 : i32 = top;
    let x_1030 : array<i32, 10> = stack;
    stack = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    stack = x_1030;
    let x_567 : vec2<f32> = vec2<f32>(x_558.x, x_564.z);
    let x_1031 : i32 = param_4;
    param_4 = 0;
    param_4 = x_1031;
    if ((x_106 >= bitcast<i32>(0u))) {
    } else {
      break;
    }
    let x_1032 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_1032;
    let x_568 : vec3<f32> = vec3<f32>(x_559.y, x_559.x, x_563.y);
    let x_1033 : i32 = param_4;
    param_4 = 0;
    param_4 = x_1033;
    let x_108 : i32 = top;
    let x_569 : vec3<f32> = vec3<f32>(x_565.x, x_567.y, x_565.x);
    let x_1034 : i32 = h_1;
    h_1 = 0;
    h_1 = x_1034;
    let x_570 : vec2<f32> = vec2<f32>(x_556.x, x_556.x);
    let x_1035 : i32 = p;
    p = 0;
    p = x_1035;
    top = (x_108 - bitcast<i32>(1u));
    let x_1036 : i32 = p;
    p = 0;
    p = x_1036;
    let x_110 : ptr<function, i32> = &(stack[x_108]);
    let x_1037 : i32 = *(x_96);
    *(x_96) = 0;
    *(x_96) = x_1037;
    let x_111 : i32 = *(x_110);
    let x_1038 : array<i32, 10> = stack;
    stack = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    stack = x_1038;
    let x_571 : vec3<f32> = vec3<f32>(x_559.y, x_559.x, x_564.y);
    let x_1039 : i32 = l_1;
    l_1 = 0;
    l_1 = x_1039;
    h_1 = x_111;
    let x_1040 : array<i32, 10> = stack;
    stack = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    stack = x_1040;
    let x_572 : vec2<f32> = vec2<f32>(x_562.y, x_561.y);
    let x_1041 : i32 = p;
    p = 0;
    p = x_1041;
    let x_112 : i32 = top;
    let x_1042 : i32 = param_4;
    param_4 = 0;
    param_4 = x_1042;
    let x_1043 : i32 = *(x_100);
    *(x_100) = 0;
    *(x_100) = x_1043;
    let x_573 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).y, vec3<f32>(1.0, 2.0, 3.0).z);
    top = (x_112 - 1);
    let x_1044 : i32 = param_5;
    param_5 = 0;
    param_5 = x_1044;
    let x_574 : vec3<f32> = vec3<f32>(x_570.y, x_565.x, x_570.y);
    let x_1045 : i32 = h_1;
    h_1 = 0;
    h_1 = x_1045;
    let x_114 : ptr<function, i32> = &(stack[x_112]);
    let x_575 : vec2<f32> = vec2<f32>(x_564.y, x_564.z);
    let x_1046 : i32 = *(x_100);
    *(x_100) = 0;
    *(x_100) = x_1046;
    let x_115 : i32 = *(x_114);
    let x_1047 : i32 = p;
    p = 0;
    p = x_1047;
    let x_576 : vec3<f32> = vec3<f32>(x_573.y, x_573.y, x_565.x);
    let x_1048 : i32 = param_5;
    param_5 = 0;
    param_5 = x_1048;
    l_1 = x_115;
    let x_1049 : i32 = top;
    top = 0;
    top = x_1049;
    let x_118 : i32 = l_1;
    param_4 = x_118;
    let x_1050 : i32 = *(x_110);
    *(x_110) = 0;
    *(x_110) = x_1050;
    let x_577 : vec2<f32> = vec2<f32>(x_569.y, x_569.z);
    let x_120 : i32 = h_1;
    let x_578 : vec2<f32> = vec2<f32>(x_558.x, vec3<f32>(1.0, 2.0, 3.0).y);
    param_5 = x_120;
    let x_1051 : i32 = *(x_100);
    *(x_100) = 0;
    *(x_100) = x_1051;
    let x_121 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
    let x_579 : vec2<f32> = vec2<f32>(x_567.x, x_568.x);
    let x_1052 : i32 = param_5;
    param_5 = 0;
    param_5 = x_1052;
    p = x_121;
    let x_1053 : i32 = param_4;
    param_4 = 0;
    param_4 = x_1053;
    let x_122 : i32 = p;
    let x_1054 : i32 = h_1;
    h_1 = 0;
    h_1 = x_1054;
    let x_580 : vec2<f32> = vec2<f32>(x_568.y, x_568.y);
    let x_1055 : i32 = l_1;
    l_1 = 0;
    l_1 = x_1055;
    let x_1056 : i32 = h_1;
    h_1 = 0;
    h_1 = x_1056;
    let x_124 : i32 = l_1;
    let x_1057 : i32 = *(x_110);
    *(x_110) = 0;
    *(x_110) = x_1057;
    let x_1058 : i32 = h_1;
    h_1 = 0;
    h_1 = x_1058;
    let x_582 : vec2<f32> = vec2<f32>(x_567.y, x_573.x);
    let x_1059 : i32 = *(x_100);
    *(x_100) = 0;
    *(x_100) = x_1059;
    if (((x_122 - bitcast<i32>(1u)) > x_124)) {
      let x_1060 : i32 = param_4;
      param_4 = 0;
      param_4 = x_1060;
      let x_128 : i32 = top;
      let x_583 : vec2<f32> = vec2<f32>(x_571.y, x_556.y);
      let x_1061 : i32 = *(x_100);
      *(x_100) = 0;
      *(x_100) = x_1061;
      let x_1062 : array<i32, 10> = stack;
      stack = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
      stack = x_1062;
      let x_584 : vec2<f32> = vec2<f32>(x_569.z, x_569.y);
      let x_585 : vec3<f32> = vec3<f32>(x_580.y, x_577.x, x_577.x);
      let x_130 : i32 = l_1;
      let x_1063 : i32 = *(x_114);
      *(x_114) = 0;
      *(x_114) = x_1063;
      let x_586 : vec2<f32> = vec2<f32>(x_564.x, x_585.x);
      let x_1064 : i32 = param_5;
      param_5 = 0;
      param_5 = x_1064;
      let x_131 : ptr<function, i32> = &(stack[(1 + x_128)]);
      let x_1065 : i32 = *(x_110);
      *(x_110) = 0;
      *(x_110) = x_1065;
      let x_587 : vec3<f32> = vec3<f32>(x_566.y, x_566.y, x_563.x);
      let x_1066 : i32 = param_5;
      param_5 = 0;
      param_5 = x_1066;
      *(x_131) = x_130;
      let x_132 : i32 = top;
      let x_1067 : i32 = *(x_100);
      *(x_100) = 0;
      *(x_100) = x_1067;
      let x_588 : vec2<f32> = vec2<f32>(x_575.y, x_575.x);
      let x_1068 : i32 = *(x_131);
      *(x_131) = 0;
      *(x_131) = x_1068;
      let x_133 : i32 = bitcast<i32>((1u + bitcast<u32>(x_132)));
      let x_1069 : i32 = *(x_100);
      *(x_100) = 0;
      *(x_100) = x_1069;
      let x_589 : vec3<f32> = vec3<f32>(x_576.z, x_588.y, x_576.z);
      let x_1070 : i32 = h_1;
      h_1 = 0;
      h_1 = x_1070;
      top = x_133;
      let x_1071 : array<i32, 10> = stack;
      stack = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
      stack = x_1071;
      let x_134 : i32 = p;
      let x_590 : vec2<f32> = vec2<f32>(x_576.x, x_573.y);
      let x_1072 : i32 = *(x_114);
      *(x_114) = 0;
      *(x_114) = x_1072;
      let x_136 : ptr<function, i32> = &(stack[x_133]);
      let x_1073 : i32 = *(x_114);
      *(x_114) = 0;
      *(x_114) = x_1073;
      *(x_136) = (x_134 - bitcast<i32>(1u));
      let x_1074 : i32 = *(x_96);
      *(x_96) = 0;
      *(x_96) = x_1074;
      let x_591 : vec2<f32> = vec2<f32>(x_569.z, x_569.y);
      let x_1075 : i32 = *(x_136);
      *(x_136) = 0;
      *(x_136) = x_1075;
    }
    let x_1076 : i32 = *(x_96);
    *(x_96) = 0;
    *(x_96) = x_1076;
    let x_592 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).x, vec3<f32>(1.0, 2.0, 3.0).y);
    let x_1077 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_1077;
    let x_137 : i32 = p;
    let x_1078 : i32 = *(x_114);
    *(x_114) = 0;
    *(x_114) = x_1078;
    let x_593 : vec3<f32> = vec3<f32>(x_571.z, x_556.x, x_556.y);
    let x_1079 : i32 = p;
    p = 0;
    p = x_1079;
    let x_594 : vec3<f32> = vec3<f32>(x_563.z, x_563.x, x_575.x);
    let x_1080 : i32 = *(x_114);
    *(x_114) = 0;
    *(x_114) = x_1080;
    let x_139 : i32 = h_1;
    let x_1081 : i32 = top;
    top = 0;
    top = x_1081;
    let x_595 : vec3<f32> = vec3<f32>(x_560.z, x_568.x, x_560.x);
    let x_1082 : i32 = *(x_100);
    *(x_100) = 0;
    *(x_100) = x_1082;
    let x_1083 : i32 = p;
    p = 0;
    p = x_1083;
    if ((bitcast<i32>((1u + bitcast<u32>(x_137))) < x_139)) {
      let x_1084 : i32 = *(x_114);
      *(x_114) = 0;
      *(x_114) = x_1084;
      let x_596 : vec2<f32> = vec2<f32>(x_592.y, x_582.x);
      let x_1085 : i32 = l_1;
      l_1 = 0;
      l_1 = x_1085;
      let x_143 : i32 = top;
      let x_1086 : i32 = *(x_114);
      *(x_114) = 0;
      *(x_114) = x_1086;
      let x_597 : vec3<f32> = vec3<f32>(x_562.y, x_560.y, x_560.y);
      let x_144 : i32 = (x_143 + 1);
      let x_1087 : i32 = param_5;
      param_5 = 0;
      param_5 = x_1087;
      top = x_144;
      let x_1088 : i32 = *(x_114);
      *(x_114) = 0;
      *(x_114) = x_1088;
      let x_145 : i32 = p;
      let x_1089 : i32 = param_5;
      param_5 = 0;
      param_5 = x_1089;
      let x_599 : vec3<f32> = vec3<f32>(x_560.z, x_560.x, x_568.x);
      let x_1090 : i32 = p;
      p = 0;
      p = x_1090;
      let x_600 : vec3<f32> = vec3<f32>(x_556.x, x_580.x, x_580.x);
      let x_1091 : i32 = *(x_100);
      *(x_100) = 0;
      *(x_100) = x_1091;
      let x_147 : ptr<function, i32> = &(stack[x_144]);
      let x_1092 : i32 = *(x_110);
      *(x_110) = 0;
      *(x_110) = x_1092;
      let x_601 : vec2<f32> = vec2<f32>(x_563.x, x_563.y);
      *(x_147) = bitcast<i32>((1u + bitcast<u32>(x_145)));
      let x_1093 : array<i32, 10> = stack;
      stack = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
      stack = x_1093;
      let x_148 : i32 = top;
      let x_1094 : i32 = *(x_114);
      *(x_114) = 0;
      *(x_114) = x_1094;
      let x_602 : vec2<f32> = vec2<f32>(x_565.y, x_599.y);
      let x_1095 : array<i32, 10> = stack;
      stack = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
      stack = x_1095;
      let x_149 : i32 = (x_148 + bitcast<i32>(1u));
      let x_1096 : i32 = *(x_147);
      *(x_147) = 0;
      *(x_147) = x_1096;
      top = x_149;
      let x_1097 : i32 = param_4;
      param_4 = 0;
      param_4 = x_1097;
      let x_150 : i32 = h_1;
      let x_1098 : i32 = *(x_100);
      *(x_100) = 0;
      *(x_100) = x_1098;
      let x_1099 : i32 = *(x_96);
      *(x_96) = 0;
      *(x_96) = x_1099;
      stack[x_149] = x_150;
      let x_1100 : i32 = *(x_114);
      *(x_114) = 0;
      *(x_114) = x_1100;
      let x_603 : vec3<f32> = vec3<f32>(x_568.y, x_564.x, x_564.x);
      let x_1101 : i32 = l_1;
      l_1 = 0;
      l_1 = x_1101;
    }
    let x_1102 : i32 = *(x_100);
    *(x_100) = 0;
    *(x_100) = x_1102;

    continuing {
      let x_1103 : i32 = l_1;
      l_1 = 0;
      l_1 = x_1103;
      let x_604 : vec2<f32> = vec2<f32>(x_563.z, x_564.x);
      let x_1104 : QuicksortObject = obj;
      obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
      obj = x_1104;
    }
  }
  let x_1105 : i32 = h_1;
  h_1 = 0;
  h_1 = x_1105;
  return;
}

fn main_1() {
  var color : vec3<f32>;
  var i_2 : i32;
  var uv : vec2<f32>;
  let x_717 : vec2<f32> = uv;
  uv = vec2<f32>(0.0, 0.0);
  uv = x_717;
  i_2 = 0;
  let x_721 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_721;
  if (true) {
    let x_722 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_722;
    let x_431 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).x, vec3<f32>(1.0, 2.0, 3.0).x);
    let x_158 : i32 = i_2;
    let x_723 : vec2<f32> = uv;
    uv = vec2<f32>(0.0, 0.0);
    uv = x_723;
    let x_725 : vec3<f32> = color;
    color = vec3<f32>(0.0, 0.0, 0.0);
    color = x_725;
    let x_432 : vec2<f32> = vec2<f32>(x_431.y, x_431.y);
    let x_726 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_726;
  }
  let x_756 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_756;
  let x_446 : vec2<f32> = vec2<f32>(vec2<f32>(0.0, 0.0).x, vec2<f32>(0.0, 0.0).x);
  let x_757 : i32 = i_2;
  i_2 = 0;
  i_2 = x_757;
  quicksort_();
  let x_758 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_758;
  let x_184 : vec4<f32> = gl_FragCoord;
  let x_759 : vec2<f32> = uv;
  uv = vec2<f32>(0.0, 0.0);
  uv = x_759;
  let x_447 : vec2<f32> = vec2<f32>(vec2<f32>(0.0, 0.0).y, vec2<f32>(0.0, 0.0).y);
  let x_760 : vec2<f32> = uv;
  uv = vec2<f32>(0.0, 0.0);
  uv = x_760;
  let x_185 : vec2<f32> = vec2<f32>(x_184.x, x_184.y);
  let x_448 : vec3<f32> = vec3<f32>(x_185.y, x_446.y, x_446.y);
  let x_761 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_761;
  let x_762 : vec2<f32> = uv;
  uv = vec2<f32>(0.0, 0.0);
  uv = x_762;
  let x_191 : vec2<f32> = x_188.resolution;
  let x_763 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_763;
  let x_449 : vec3<f32> = vec3<f32>(x_184.y, vec3<f32>(1.0, 2.0, 3.0).z, x_184.w);
  let x_764 : vec3<f32> = color;
  color = vec3<f32>(0.0, 0.0, 0.0);
  color = x_764;
  let x_192 : vec2<f32> = (x_185 / x_191);
  let x_765 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_765;
  let x_450 : vec2<f32> = vec2<f32>(x_447.x, x_185.y);
  let x_766 : vec3<f32> = color;
  color = vec3<f32>(0.0, 0.0, 0.0);
  let x_767 : vec3<f32> = color;
  color = vec3<f32>(0.0, 0.0, 0.0);
  color = x_767;
  color = x_766;
  uv = x_192;
  color = vec3<f32>(1.0, 2.0, 3.0);
  let x_768 : vec3<f32> = color;
  color = vec3<f32>(0.0, 0.0, 0.0);
  color = x_768;
  let x_451 : vec3<f32> = vec3<f32>(x_185.x, x_185.y, x_446.y);
  let x_769 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_769;
  let x_200 : ptr<private, i32> = &(obj.numbers[0u]);
  let x_770 : i32 = *(x_200);
  *(x_200) = 0;
  *(x_200) = x_770;
  let x_201 : i32 = *(x_200);
  let x_771 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_771;
  let x_205 : ptr<function, f32> = &(color.x);
  let x_772 : i32 = *(x_200);
  *(x_200) = 0;
  *(x_200) = x_772;
  let x_206 : f32 = *(x_205);
  let x_773 : f32 = *(x_205);
  *(x_205) = 0.0;
  *(x_205) = x_773;
  let x_452 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).z, vec3<f32>(1.0, 2.0, 3.0).y);
  let x_774 : i32 = i_2;
  i_2 = 0;
  i_2 = x_774;
  let x_775 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_775;
  let x_208 : ptr<function, f32> = &(color.x);
  let x_453 : vec3<f32> = vec3<f32>(x_451.x, x_450.x, x_450.y);
  *(x_208) = (x_206 + f32(x_201));
  let x_776 : vec2<f32> = uv;
  uv = vec2<f32>(0.0, 0.0);
  uv = x_776;
  let x_209 : ptr<function, f32> = &(uv.x);
  let x_777 : vec2<f32> = uv;
  uv = vec2<f32>(0.0, 0.0);
  uv = x_777;
  let x_454 : vec2<f32> = vec2<f32>(x_184.y, x_184.y);
  let x_210 : f32 = *(x_209);
  let x_455 : vec2<f32> = vec2<f32>(x_192.y, x_192.x);
  let x_778 : f32 = *(x_209);
  *(x_209) = 0.0;
  *(x_209) = x_778;
  let x_779 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_779;
  if ((x_210 > 0.25)) {
    let x_780 : i32 = i_2;
    i_2 = 0;
    i_2 = x_780;
    let x_781 : i32 = *(x_200);
    *(x_200) = 0;
    *(x_200) = x_781;
    let x_456 : vec3<f32> = vec3<f32>(vec2<f32>(0.0, 0.0).y, x_448.y, x_448.y);
    let x_782 : f32 = *(x_209);
    *(x_209) = 0.0;
    *(x_209) = x_782;
    let x_216 : i32 = obj.numbers[1];
    let x_783 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_783;
    let x_457 : vec2<f32> = vec2<f32>(x_454.x, x_454.x);
    let x_784 : vec2<f32> = uv;
    uv = vec2<f32>(0.0, 0.0);
    uv = x_784;
    let x_218 : ptr<function, f32> = &(color[0]);
    let x_785 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_785;
    let x_458 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).z, vec2<f32>(0.0, 0.0).y);
    let x_786 : i32 = i_2;
    i_2 = 0;
    i_2 = x_786;
    let x_219 : f32 = *(x_218);
    let x_787 : f32 = *(x_218);
    *(x_218) = 0.0;
    *(x_218) = x_787;
    let x_788 : vec3<f32> = color;
    color = vec3<f32>(0.0, 0.0, 0.0);
    color = x_788;
    let x_789 : vec3<f32> = color;
    color = vec3<f32>(0.0, 0.0, 0.0);
    color = x_789;
    let x_459 : vec3<f32> = vec3<f32>(x_454.y, x_454.y, x_447.y);
    let x_790 : f32 = *(x_218);
    *(x_218) = 0.0;
    *(x_218) = x_790;
    color.x = (f32(x_216) + x_219);
    let x_791 : i32 = *(x_200);
    *(x_200) = 0;
    *(x_200) = x_791;
  }
  let x_792 : f32 = *(x_209);
  *(x_209) = 0.0;
  *(x_209) = x_792;
  let x_222 : ptr<function, f32> = &(uv.x);
  let x_793 : f32 = *(x_209);
  *(x_209) = 0.0;
  *(x_209) = x_793;
  let x_223 : f32 = *(x_222);
  let x_794 : f32 = *(x_222);
  *(x_222) = 0.0;
  *(x_222) = x_794;
  let x_460 : vec3<f32> = vec3<f32>(x_453.z, x_453.y, x_453.y);
  let x_795 : vec2<f32> = uv;
  uv = vec2<f32>(0.0, 0.0);
  uv = x_795;
  let x_796 : f32 = *(x_222);
  *(x_222) = 0.0;
  *(x_222) = x_796;
  let x_461 : vec2<f32> = vec2<f32>(vec2<f32>(0.0, 0.0).y, vec2<f32>(0.0, 0.0).y);
  let x_797 : f32 = *(x_222);
  *(x_222) = 0.0;
  *(x_222) = x_797;
  if ((x_223 > 0.5)) {
    let x_798 : f32 = *(x_222);
    *(x_222) = 0.0;
    *(x_222) = x_798;
    let x_462 : vec2<f32> = vec2<f32>(x_446.x, x_446.x);
    let x_799 : f32 = *(x_205);
    *(x_205) = 0.0;
    *(x_205) = x_799;
    let x_229 : ptr<private, i32> = &(obj.numbers[2u]);
    let x_800 : f32 = *(x_205);
    *(x_205) = 0.0;
    *(x_205) = x_800;
    let x_463 : vec3<f32> = vec3<f32>(x_453.x, x_453.z, x_461.y);
    let x_801 : f32 = *(x_208);
    *(x_208) = 0.0;
    *(x_208) = x_801;
    let x_230 : i32 = *(x_229);
    let x_802 : f32 = *(x_209);
    *(x_209) = 0.0;
    *(x_209) = x_802;
    let x_803 : f32 = *(x_205);
    *(x_205) = 0.0;
    *(x_205) = x_803;
    let x_233 : ptr<function, f32> = &(color.y);
    let x_804 : i32 = *(x_229);
    *(x_229) = 0;
    *(x_229) = x_804;
    let x_464 : vec2<f32> = vec2<f32>(x_450.y, x_191.x);
    let x_805 : f32 = *(x_233);
    *(x_233) = 0.0;
    *(x_233) = x_805;
    let x_234 : f32 = *(x_233);
    let x_806 : i32 = *(x_229);
    *(x_229) = 0;
    *(x_229) = x_806;
    let x_465 : vec2<f32> = vec2<f32>(x_463.x, x_185.x);
    let x_807 : f32 = *(x_208);
    *(x_208) = 0.0;
    *(x_208) = x_807;
    let x_808 : i32 = i_2;
    i_2 = 0;
    i_2 = x_808;
    let x_466 : vec2<f32> = vec2<f32>(x_455.y, vec2<f32>(0.0, 0.0).y);
    let x_809 : i32 = i_2;
    i_2 = 0;
    i_2 = x_809;
    color.y = (f32(x_230) + x_234);
    let x_810 : f32 = *(x_209);
    *(x_209) = 0.0;
    *(x_209) = x_810;
  }
  let x_237 : ptr<function, f32> = &(uv[0]);
  let x_811 : i32 = i_2;
  i_2 = 0;
  i_2 = x_811;
  let x_467 : vec2<f32> = vec2<f32>(x_191.x, x_191.x);
  let x_812 : f32 = *(x_222);
  *(x_222) = 0.0;
  *(x_222) = x_812;
  let x_238 : f32 = *(x_237);
  let x_813 : vec3<f32> = color;
  color = vec3<f32>(0.0, 0.0, 0.0);
  color = x_813;
  let x_814 : f32 = *(x_208);
  *(x_208) = 0.0;
  *(x_208) = x_814;
  if ((x_238 > 0.75)) {
    let x_815 : f32 = *(x_205);
    *(x_205) = 0.0;
    *(x_205) = x_815;
    let x_245 : i32 = obj.numbers[3];
    let x_816 : f32 = *(x_208);
    *(x_208) = 0.0;
    *(x_208) = x_816;
    let x_817 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_817;
    let x_468 : vec3<f32> = vec3<f32>(x_467.x, x_467.x, x_467.x);
    let x_818 : f32 = *(x_237);
    *(x_237) = 0.0;
    *(x_237) = x_818;
    let x_248 : ptr<function, f32> = &(color.z);
    let x_819 : f32 = *(x_222);
    *(x_222) = 0.0;
    *(x_222) = x_819;
    let x_249 : f32 = *(x_248);
    let x_820 : vec3<f32> = color;
    color = vec3<f32>(0.0, 0.0, 0.0);
    color = x_820;
    let x_469 : vec3<f32> = vec3<f32>(x_467.x, x_191.y, x_467.y);
    let x_821 : f32 = *(x_248);
    *(x_248) = 0.0;
    *(x_248) = x_821;
    let x_822 : i32 = *(x_200);
    *(x_200) = 0;
    *(x_200) = x_822;
    let x_470 : vec2<f32> = vec2<f32>(vec2<f32>(0.0, 0.0).x, vec2<f32>(0.0, 0.0).y);
    let x_823 : f32 = *(x_248);
    *(x_248) = 0.0;
    *(x_248) = x_823;
    color.z = (x_249 + f32(x_245));
    let x_824 : vec2<f32> = uv;
    uv = vec2<f32>(0.0, 0.0);
    uv = x_824;
    let x_471 : vec2<f32> = vec2<f32>(x_470.y, x_470.y);
  }
  let x_825 : f32 = *(x_237);
  *(x_237) = 0.0;
  *(x_237) = x_825;
  let x_472 : vec3<f32> = vec3<f32>(x_454.x, x_454.y, x_454.y);
  let x_253 : ptr<private, i32> = &(obj.numbers[4]);
  let x_254 : i32 = *(x_253);
  let x_826 : f32 = *(x_237);
  *(x_237) = 0.0;
  *(x_237) = x_826;
  let x_827 : vec3<f32> = color;
  color = vec3<f32>(0.0, 0.0, 0.0);
  color = x_827;
  let x_473 : vec3<f32> = vec3<f32>(x_446.y, x_453.x, x_453.x);
  let x_828 : i32 = *(x_253);
  *(x_253) = 0;
  *(x_253) = x_828;
  let x_256 : ptr<function, f32> = &(color.y);
  let x_474 : vec2<f32> = vec2<f32>(x_191.x, x_184.z);
  let x_829 : f32 = *(x_209);
  *(x_209) = 0.0;
  *(x_209) = x_829;
  let x_257 : f32 = *(x_256);
  let x_830 : f32 = *(x_256);
  *(x_256) = 0.0;
  *(x_256) = x_830;
  let x_475 : vec2<f32> = vec2<f32>(x_467.x, x_450.x);
  let x_831 : f32 = *(x_222);
  *(x_222) = 0.0;
  *(x_222) = x_831;
  let x_259 : ptr<function, f32> = &(color.y);
  let x_832 : f32 = *(x_205);
  *(x_205) = 0.0;
  *(x_205) = x_832;
  let x_476 : vec2<f32> = vec2<f32>(x_451.z, x_460.y);
  *(x_259) = (x_257 + f32(x_254));
  let x_477 : vec3<f32> = vec3<f32>(vec2<f32>(0.0, 0.0).x, x_472.x, vec2<f32>(0.0, 0.0).y);
  let x_833 : f32 = *(x_209);
  *(x_209) = 0.0;
  *(x_209) = x_833;
  let x_260 : ptr<function, f32> = &(uv.y);
  let x_834 : f32 = *(x_205);
  *(x_205) = 0.0;
  *(x_205) = x_834;
  let x_478 : vec2<f32> = vec2<f32>(x_472.x, x_472.y);
  let x_835 : f32 = *(x_260);
  *(x_260) = 0.0;
  *(x_260) = x_835;
  let x_261 : f32 = *(x_260);
  let x_836 : i32 = i_2;
  i_2 = 0;
  i_2 = x_836;
  let x_479 : vec3<f32> = vec3<f32>(vec2<f32>(0.0, 0.0).y, x_454.y, vec2<f32>(0.0, 0.0).x);
  let x_837 : i32 = *(x_200);
  *(x_200) = 0;
  *(x_200) = x_837;
  let x_838 : f32 = *(x_259);
  *(x_259) = 0.0;
  *(x_259) = x_838;
  let x_480 : vec3<f32> = vec3<f32>(x_446.x, x_446.x, vec2<f32>(0.0, 0.0).y);
  let x_839 : f32 = *(x_209);
  *(x_209) = 0.0;
  *(x_209) = x_839;
  if ((x_261 > 0.25)) {
    let x_481 : vec2<f32> = vec2<f32>(x_447.x, x_480.z);
    let x_840 : vec3<f32> = color;
    color = vec3<f32>(0.0, 0.0, 0.0);
    color = x_840;
    let x_267 : i32 = obj.numbers[5u];
    let x_841 : f32 = *(x_205);
    *(x_205) = 0.0;
    *(x_205) = x_841;
    let x_842 : i32 = i_2;
    i_2 = 0;
    i_2 = x_842;
    let x_843 : i32 = i_2;
    i_2 = 0;
    i_2 = x_843;
    let x_270 : f32 = color.x;
    let x_844 : f32 = *(x_237);
    *(x_237) = 0.0;
    *(x_237) = x_844;
    let x_482 : vec3<f32> = vec3<f32>(x_455.x, x_475.y, x_455.y);
    let x_845 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_845;
    let x_846 : f32 = *(x_260);
    *(x_260) = 0.0;
    *(x_260) = x_846;
    let x_847 : i32 = i_2;
    i_2 = 0;
    i_2 = x_847;
    let x_483 : vec3<f32> = vec3<f32>(x_184.w, x_184.w, x_192.x);
    let x_848 : f32 = *(x_209);
    *(x_209) = 0.0;
    *(x_209) = x_848;
    color.x = (f32(x_267) + x_270);
    let x_484 : vec3<f32> = vec3<f32>(x_454.y, x_450.x, x_454.y);
    let x_849 : f32 = *(x_209);
    *(x_209) = 0.0;
    *(x_209) = x_849;
  }
  let x_850 : f32 = *(x_205);
  *(x_205) = 0.0;
  *(x_205) = x_850;
  let x_485 : vec3<f32> = vec3<f32>(x_467.x, x_450.y, x_450.x);
  let x_851 : f32 = *(x_260);
  *(x_260) = 0.0;
  *(x_260) = x_851;
  let x_273 : ptr<function, f32> = &(uv.y);
  let x_852 : i32 = *(x_253);
  *(x_253) = 0;
  *(x_253) = x_852;
  let x_274 : f32 = *(x_273);
  let x_853 : i32 = *(x_200);
  *(x_200) = 0;
  *(x_200) = x_853;
  if ((x_274 > 0.5)) {
    let x_854 : f32 = *(x_222);
    *(x_222) = 0.0;
    *(x_222) = x_854;
    let x_486 : vec2<f32> = vec2<f32>(x_480.y, x_455.y);
    let x_279 : ptr<private, i32> = &(obj.numbers[6u]);
    let x_855 : f32 = *(x_256);
    *(x_256) = 0.0;
    *(x_256) = x_855;
    let x_487 : vec2<f32> = vec2<f32>(x_449.z, x_449.y);
    let x_856 : f32 = *(x_273);
    *(x_273) = 0.0;
    *(x_273) = x_856;
    let x_280 : i32 = *(x_279);
    let x_857 : f32 = *(x_260);
    *(x_260) = 0.0;
    *(x_260) = x_857;
    let x_858 : i32 = i_2;
    i_2 = 0;
    i_2 = x_858;
    let x_859 : i32 = *(x_253);
    *(x_253) = 0;
    *(x_253) = x_859;
    let x_488 : vec2<f32> = vec2<f32>(x_473.z, x_473.y);
    let x_283 : f32 = color.y;
    let x_860 : vec2<f32> = uv;
    uv = vec2<f32>(0.0, 0.0);
    uv = x_860;
    let x_861 : f32 = *(x_208);
    *(x_208) = 0.0;
    *(x_208) = x_861;
    let x_489 : vec2<f32> = vec2<f32>(x_475.y, x_475.x);
    let x_862 : i32 = *(x_279);
    *(x_279) = 0;
    *(x_279) = x_862;
    let x_863 : i32 = *(x_279);
    *(x_279) = 0;
    *(x_279) = x_863;
    let x_490 : vec2<f32> = vec2<f32>(x_480.z, x_480.z);
    let x_864 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_864;
    color.y = (f32(x_280) + x_283);
    let x_865 : f32 = *(x_208);
    *(x_208) = 0.0;
    *(x_208) = x_865;
    let x_491 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).y, x_454.x);
    let x_866 : f32 = *(x_259);
    *(x_259) = 0.0;
    *(x_259) = x_866;
  }
  let x_492 : vec2<f32> = vec2<f32>(x_455.y, x_455.y);
  let x_867 : f32 = *(x_205);
  *(x_205) = 0.0;
  *(x_205) = x_867;
  let x_286 : ptr<function, f32> = &(uv.y);
  let x_287 : f32 = *(x_286);
  let x_868 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_868;
  let x_493 : vec2<f32> = vec2<f32>(x_475.x, x_475.y);
  let x_869 : f32 = *(x_237);
  *(x_237) = 0.0;
  *(x_237) = x_869;
  let x_870 : f32 = *(x_259);
  *(x_259) = 0.0;
  *(x_259) = x_870;
  let x_494 : vec3<f32> = vec3<f32>(x_191.x, x_191.y, x_191.y);
  let x_871 : i32 = *(x_253);
  *(x_253) = 0;
  *(x_253) = x_871;
  if ((x_287 > 0.75)) {
    let x_872 : vec3<f32> = color;
    color = vec3<f32>(0.0, 0.0, 0.0);
    color = x_872;
    let x_873 : f32 = *(x_208);
    *(x_208) = 0.0;
    *(x_208) = x_873;
    let x_495 : vec3<f32> = vec3<f32>(x_192.y, x_192.x, x_192.y);
    let x_874 : vec3<f32> = color;
    color = vec3<f32>(0.0, 0.0, 0.0);
    color = x_874;
    let x_293 : i32 = obj.numbers[7];
    let x_875 : f32 = *(x_222);
    *(x_222) = 0.0;
    *(x_222) = x_875;
    let x_496 : vec3<f32> = vec3<f32>(x_475.x, x_467.y, x_467.x);
    let x_876 : f32 = *(x_259);
    *(x_259) = 0.0;
    *(x_259) = x_876;
    let x_497 : vec2<f32> = vec2<f32>(x_477.x, x_461.y);
    let x_877 : i32 = *(x_200);
    *(x_200) = 0;
    *(x_200) = x_877;
    let x_878 : f32 = *(x_259);
    *(x_259) = 0.0;
    *(x_259) = x_878;
    let x_498 : vec3<f32> = vec3<f32>(x_478.x, x_478.y, x_478.x);
    let x_879 : f32 = *(x_205);
    *(x_205) = 0.0;
    *(x_205) = x_879;
    let x_296 : f32 = color.z;
    let x_880 : f32 = *(x_273);
    *(x_273) = 0.0;
    *(x_273) = x_880;
    let x_499 : vec2<f32> = vec2<f32>(x_184.x, x_184.y);
    let x_881 : f32 = *(x_209);
    *(x_209) = 0.0;
    *(x_209) = x_881;
    let x_882 : f32 = *(x_286);
    *(x_286) = 0.0;
    *(x_286) = x_882;
    let x_298 : ptr<function, f32> = &(color.z);
    let x_883 : f32 = *(x_273);
    *(x_273) = 0.0;
    *(x_273) = x_883;
    let x_500 : vec3<f32> = vec3<f32>(x_499.y, x_499.y, x_494.z);
    let x_884 : f32 = *(x_298);
    *(x_298) = 0.0;
    *(x_298) = x_884;
    *(x_298) = (f32(x_293) + x_296);
    let x_885 : f32 = *(x_256);
    *(x_256) = 0.0;
    *(x_256) = x_885;
    let x_501 : vec2<f32> = vec2<f32>(x_453.x, x_453.z);
    let x_886 : f32 = *(x_205);
    *(x_205) = 0.0;
    *(x_205) = x_886;
  }
  let x_887 : i32 = i_2;
  i_2 = 0;
  i_2 = x_887;
  let x_502 : vec2<f32> = vec2<f32>(x_451.y, x_192.y);
  let x_888 : vec2<f32> = uv;
  uv = vec2<f32>(0.0, 0.0);
  uv = x_888;
  let x_300 : ptr<private, i32> = &(obj.numbers[8]);
  let x_301 : i32 = *(x_300);
  let x_889 : i32 = i_2;
  i_2 = 0;
  i_2 = x_889;
  let x_503 : vec2<f32> = vec2<f32>(x_185.x, x_451.z);
  let x_890 : i32 = *(x_300);
  *(x_300) = 0;
  *(x_300) = x_890;
  let x_891 : f32 = *(x_256);
  *(x_256) = 0.0;
  *(x_256) = x_891;
  let x_504 : vec2<f32> = vec2<f32>(x_453.y, vec2<f32>(0.0, 0.0).x);
  let x_892 : f32 = *(x_205);
  *(x_205) = 0.0;
  *(x_205) = x_892;
  let x_303 : ptr<function, f32> = &(color.z);
  let x_505 : vec3<f32> = vec3<f32>(x_504.x, x_504.y, x_504.x);
  let x_893 : f32 = *(x_303);
  *(x_303) = 0.0;
  *(x_303) = x_893;
  let x_304 : f32 = *(x_303);
  let x_894 : f32 = *(x_208);
  *(x_208) = 0.0;
  *(x_208) = x_894;
  let x_506 : vec2<f32> = vec2<f32>(x_493.x, x_492.x);
  let x_895 : i32 = *(x_253);
  *(x_253) = 0;
  *(x_253) = x_895;
  let x_896 : f32 = *(x_286);
  *(x_286) = 0.0;
  *(x_286) = x_896;
  let x_507 : vec2<f32> = vec2<f32>(x_461.x, x_447.x);
  let x_897 : f32 = *(x_259);
  *(x_259) = 0.0;
  *(x_259) = x_897;
  let x_306 : ptr<function, f32> = &(color.z);
  *(x_306) = (x_304 + f32(x_301));
  let x_898 : vec2<f32> = uv;
  uv = vec2<f32>(0.0, 0.0);
  uv = x_898;
  let x_899 : f32 = *(x_222);
  *(x_222) = 0.0;
  *(x_222) = x_899;
  let x_508 : vec3<f32> = vec3<f32>(x_461.y, x_461.x, x_506.y);
  let x_900 : f32 = *(x_222);
  *(x_222) = 0.0;
  *(x_222) = x_900;
  let x_308 : f32 = uv.x;
  let x_901 : f32 = *(x_259);
  *(x_259) = 0.0;
  *(x_259) = x_901;
  let x_309 : ptr<function, f32> = &(uv.y);
  let x_509 : vec3<f32> = vec3<f32>(x_503.y, x_503.x, x_448.z);
  let x_902 : f32 = *(x_260);
  *(x_260) = 0.0;
  *(x_260) = x_902;
  let x_310 : f32 = *(x_309);
  let x_903 : f32 = *(x_260);
  *(x_260) = 0.0;
  *(x_260) = x_903;
  let x_904 : f32 = *(x_306);
  *(x_306) = 0.0;
  *(x_306) = x_904;
  let x_510 : vec3<f32> = vec3<f32>(vec3<f32>(1.0, 2.0, 3.0).y, x_485.y, x_485.z);
  let x_905 : f32 = *(x_306);
  *(x_306) = 0.0;
  *(x_306) = x_905;
  let x_906 : i32 = i_2;
  i_2 = 0;
  i_2 = x_906;
  let x_511 : vec2<f32> = vec2<f32>(x_485.z, x_485.y);
  let x_907 : vec3<f32> = color;
  color = vec3<f32>(0.0, 0.0, 0.0);
  color = x_907;
  let x_908 : f32 = *(x_260);
  *(x_260) = 0.0;
  *(x_260) = x_908;
  let x_512 : vec3<f32> = vec3<f32>(x_455.y, x_455.y, x_455.y);
  let x_909 : i32 = *(x_253);
  *(x_253) = 0;
  *(x_253) = x_909;
  if ((abs((x_308 - x_310)) < 0.25)) {
    let x_910 : f32 = *(x_209);
    *(x_209) = 0.0;
    *(x_209) = x_910;
    let x_911 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_911;
    let x_513 : vec3<f32> = vec3<f32>(x_505.z, x_505.x, x_448.x);
    let x_912 : i32 = *(x_300);
    *(x_300) = 0;
    *(x_300) = x_912;
    let x_317 : i32 = obj.numbers[9u];
    let x_514 : vec3<f32> = vec3<f32>(x_474.y, x_474.y, x_474.y);
    let x_913 : f32 = *(x_260);
    *(x_260) = 0.0;
    *(x_260) = x_913;
    let x_320 : f32 = color.x;
    let x_914 : f32 = *(x_286);
    *(x_286) = 0.0;
    *(x_286) = x_914;
    let x_515 : vec2<f32> = vec2<f32>(x_502.x, x_502.y);
    let x_915 : f32 = *(x_205);
    *(x_205) = 0.0;
    *(x_205) = x_915;
    let x_916 : vec3<f32> = color;
    color = vec3<f32>(0.0, 0.0, 0.0);
    color = x_916;
    let x_516 : vec2<f32> = vec2<f32>(x_452.x, x_452.x);
    let x_917 : vec2<f32> = uv;
    uv = vec2<f32>(0.0, 0.0);
    uv = x_917;
    let x_322 : ptr<function, f32> = &(color.x);
    let x_918 : f32 = *(x_209);
    *(x_209) = 0.0;
    *(x_209) = x_918;
    let x_517 : vec3<f32> = vec3<f32>(vec2<f32>(0.0, 0.0).x, vec2<f32>(0.0, 0.0).x, vec2<f32>(0.0, 0.0).y);
    *(x_322) = (f32(x_317) + x_320);
    let x_919 : f32 = *(x_322);
    *(x_322) = 0.0;
    *(x_322) = x_919;
    let x_518 : vec3<f32> = vec3<f32>(x_480.y, x_508.x, x_480.x);
    let x_920 : f32 = *(x_205);
    *(x_205) = 0.0;
    *(x_205) = x_920;
  }
  let x_921 : f32 = *(x_309);
  *(x_309) = 0.0;
  *(x_309) = x_921;
  let x_325 : vec3<f32> = color;
  let x_922 : f32 = *(x_237);
  *(x_237) = 0.0;
  *(x_237) = x_922;
  let x_519 : vec3<f32> = vec3<f32>(x_447.x, x_446.x, x_446.y);
  let x_326 : vec3<f32> = normalize(x_325);
  let x_923 : f32 = *(x_209);
  *(x_209) = 0.0;
  *(x_209) = x_923;
  let x_924 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_924;
  let x_925 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_925;
  let x_926 : f32 = *(x_259);
  *(x_259) = 0.0;
  *(x_259) = x_926;
  let x_520 : vec2<f32> = vec2<f32>(x_506.y, x_519.y);
  let x_927 : f32 = *(x_259);
  *(x_259) = 0.0;
  *(x_259) = x_927;
  let x_330 : vec4<f32> = vec4<f32>(x_326.x, x_326.y, x_326.z, 1.0);
  let x_928 : f32 = *(x_309);
  *(x_309) = 0.0;
  *(x_309) = x_928;
  let x_521 : vec3<f32> = vec3<f32>(vec3<f32>(1.0, 2.0, 3.0).y, vec3<f32>(1.0, 2.0, 3.0).y, x_520.y);
  let x_929 : f32 = *(x_222);
  *(x_222) = 0.0;
  *(x_222) = x_929;
  x_GLF_color = x_330;
  let x_930 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_930;
  let x_522 : vec3<f32> = vec3<f32>(x_330.w, x_330.y, x_493.x);
  let x_931 : f32 = *(x_208);
  *(x_208) = 0.0;
  *(x_208) = x_931;
  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);
}
