struct BST {
  data : i32;
  leftIndex : i32;
  rightIndex : i32;
};

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

struct Obj {
  odd_numbers : array<f32, 10>;
  even_numbers : array<f32, 10>;
};

var<private> tree_1 : array<BST, 10>;

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

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn makeTreeNode_struct_BST_i1_i1_i11_i1_(tree : ptr<function, BST>, data : ptr<function, i32>) {
  let x_74 : i32 = *(data);
  (*(tree)).data = x_74;
  (*(tree)).leftIndex = -1;
  (*(tree)).rightIndex = -1;
  return;
}

fn insert_i1_i1_(treeIndex : ptr<function, i32>, data_1 : ptr<function, i32>) {
  var baseIndex : i32;
  var param : BST;
  var param_1 : i32;
  var param_2 : BST;
  var param_3 : i32;
  var GLF_live8i : i32;
  var GLF_live8A : array<f32, 50>;
  baseIndex = 0;
  loop {
    let x_75 : i32 = baseIndex;
    let x_76 : i32 = *(treeIndex);
    if ((x_75 <= x_76)) {
    } else {
      break;
    }
    let x_77 : i32 = *(data_1);
    let x_78 : i32 = baseIndex;
    let x_79 : i32 = tree_1[x_78].data;
    if ((x_77 <= x_79)) {
      let x_80 : i32 = baseIndex;
      let x_81 : i32 = tree_1[x_80].leftIndex;
      if ((x_81 == -1)) {
        let x_82 : i32 = baseIndex;
        let x_83 : i32 = *(treeIndex);
        tree_1[x_82].leftIndex = x_83;
        let x_84 : i32 = *(treeIndex);
        let x_350 : BST = tree_1[x_84];
        param = x_350;
        let x_85 : i32 = *(data_1);
        param_1 = x_85;
        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
        let x_352 : BST = param;
        tree_1[x_84] = x_352;
        return;
      } else {
        let x_86 : i32 = baseIndex;
        let x_87 : i32 = tree_1[x_86].leftIndex;
        baseIndex = x_87;
        continue;
      }
    } else {
      let x_88 : i32 = baseIndex;
      let x_89 : i32 = tree_1[x_88].rightIndex;
      if ((x_89 == -1)) {
        let x_90 : i32 = baseIndex;
        let x_91 : i32 = *(treeIndex);
        tree_1[x_90].rightIndex = x_91;
        let x_92 : i32 = *(treeIndex);
        let x_362 : BST = tree_1[x_92];
        param_2 = x_362;
        let x_93 : i32 = *(data_1);
        param_3 = x_93;
        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
        let x_364 : BST = param_2;
        tree_1[x_92] = x_364;
        return;
      } else {
        GLF_live8i = 1;
        let x_94 : i32 = GLF_live8i;
        let x_95 : i32 = GLF_live8i;
        let x_96 : i32 = GLF_live8i;
        let x_369 : i32 = select(0, x_96, ((x_94 >= 0) & (x_95 < 50)));
        let x_371 : f32 = GLF_live8A[0];
        let x_373 : f32 = GLF_live8A[x_369];
        GLF_live8A[x_369] = (x_373 + x_371);
        loop {
          let x_97 : i32 = baseIndex;
          let x_98 : i32 = tree_1[x_97].rightIndex;
          baseIndex = x_98;

          continuing {
            let x_382 : f32 = x_27.injectionSwitch.x;
            let x_384 : f32 = x_27.injectionSwitch.y;
            if ((x_382 > x_384)) {
            } else {
              break;
            }
          }
        }
        continue;
      }
    }
  }
  return;
}

fn search_i1_(target : ptr<function, i32>) -> i32 {
  var index : i32;
  var currentNode : BST;
  var x_387 : i32;
  index = 0;
  loop {
    let x_99 : i32 = index;
    if ((x_99 != -1)) {
    } else {
      break;
    }
    let x_100 : i32 = index;
    let x_395 : BST = tree_1[x_100];
    currentNode = x_395;
    let x_101 : i32 = currentNode.data;
    let x_102 : i32 = *(target);
    if ((x_101 == x_102)) {
      let x_103 : i32 = *(target);
      return x_103;
    }
    let x_104 : i32 = *(target);
    let x_105 : i32 = currentNode.data;
    if ((x_104 > x_105)) {
      let x_106 : i32 = currentNode.rightIndex;
      x_387 = x_106;
    } else {
      let x_107 : i32 = currentNode.leftIndex;
      x_387 = x_107;
    }
    let x_108 : i32 = x_387;
    index = x_108;
  }
  return -1;
}

fn makeFrame_f1_(v : ptr<function, f32>) -> f32 {
  var param_5 : i32;
  var param_6 : i32;
  var param_7 : i32;
  let x_418 : f32 = *(v);
  *(v) = (x_418 * 6.5);
  let x_420 : f32 = *(v);
  if ((x_420 < 1.5)) {
    param_5 = 100;
    let x_110 : i32 = search_i1_(&(param_5));
    return f32(x_110);
  }
  let x_425 : f32 = *(v);
  if ((x_425 < 4.0)) {
    return 0.0;
  }
  let x_429 : f32 = *(v);
  param_6 = 6;
  let x_111 : i32 = search_i1_(&(param_6));
  if ((x_429 < f32(x_111))) {
    return 1.0;
  }
  param_7 = 30;
  let x_112 : i32 = search_i1_(&(param_7));
  return (10.0 + f32(x_112));
}

fn hueColor_f1_(angle : ptr<function, f32>) -> vec3<f32> {
  var nodeData : f32;
  var param_4 : i32;
  param_4 = 15;
  let x_109 : i32 = search_i1_(&(param_4));
  nodeData = f32(x_109);
  let x_409 : f32 = *(angle);
  let x_410 : f32 = nodeData;
  return ((vec3<f32>(30.0, 30.0, 30.0) + (vec3<f32>(1.0, 5.0, x_410) * x_409)) / vec3<f32>(50.0, 50.0, 50.0));
}

fn main_1() {
  var treeIndex_1 : i32;
  var param_8 : BST;
  var param_9 : i32;
  var param_10 : i32;
  var param_11 : i32;
  var GLF_live1_looplimiter2 : i32;
  var GLF_live1i : i32;
  var param_12 : i32;
  var param_13 : i32;
  var param_14 : i32;
  var param_15 : i32;
  var param_16 : i32;
  var param_17 : i32;
  var param_18 : i32;
  var param_19 : i32;
  var param_20 : i32;
  var param_21 : i32;
  var param_22 : i32;
  var param_23 : i32;
  var GLF_live4_looplimiter3 : i32;
  var GLF_live4i : i32;
  var GLF_live4index : i32;
  var GLF_live4obj : Obj;
  var param_24 : i32;
  var param_25 : i32;
  var param_26 : i32;
  var param_27 : i32;
  var z : vec2<f32>;
  var x : f32;
  var param_28 : f32;
  var y : f32;
  var param_29 : f32;
  var sum : i32;
  var target_1 : i32;
  var result : i32;
  var param_30 : i32;
  var a : f32;
  var x_235 : vec3<f32>;
  var param_31 : f32;
  treeIndex_1 = 0;
  let x_237 : BST = tree_1[0];
  param_8 = x_237;
  param_9 = 9;
  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_8), &(param_9));
  let x_239 : BST = param_8;
  tree_1[0] = x_239;
  let x_113 : i32 = treeIndex_1;
  treeIndex_1 = (x_113 + 1);
  let x_115 : i32 = treeIndex_1;
  param_10 = x_115;
  param_11 = 5;
  insert_i1_i1_(&(param_10), &(param_11));
  let x_116 : i32 = treeIndex_1;
  treeIndex_1 = (x_116 + 1);
  GLF_live1_looplimiter2 = 0;
  GLF_live1i = 0;
  loop {
    if (true) {
    } else {
      break;
    }
    let x_118 : i32 = GLF_live1_looplimiter2;
    if ((x_118 >= 7)) {
      break;
    }
    let x_119 : i32 = GLF_live1_looplimiter2;
    GLF_live1_looplimiter2 = (x_119 + 1);

    continuing {
      let x_121 : i32 = GLF_live1i;
      GLF_live1i = (x_121 + 1);
    }
  }
  let x_123 : i32 = treeIndex_1;
  param_12 = x_123;
  param_13 = 12;
  insert_i1_i1_(&(param_12), &(param_13));
  let x_124 : i32 = treeIndex_1;
  treeIndex_1 = (x_124 + 1);
  let x_126 : i32 = treeIndex_1;
  param_14 = x_126;
  param_15 = 15;
  insert_i1_i1_(&(param_14), &(param_15));
  let x_127 : i32 = treeIndex_1;
  treeIndex_1 = (x_127 + 1);
  let x_129 : i32 = treeIndex_1;
  param_16 = x_129;
  param_17 = 7;
  insert_i1_i1_(&(param_16), &(param_17));
  let x_130 : i32 = treeIndex_1;
  treeIndex_1 = (x_130 + 1);
  let x_132 : i32 = treeIndex_1;
  param_18 = x_132;
  param_19 = 8;
  insert_i1_i1_(&(param_18), &(param_19));
  let x_133 : i32 = treeIndex_1;
  treeIndex_1 = (x_133 + 1);
  let x_135 : i32 = treeIndex_1;
  param_20 = x_135;
  param_21 = 2;
  insert_i1_i1_(&(param_20), &(param_21));
  let x_136 : i32 = treeIndex_1;
  treeIndex_1 = (x_136 + 1);
  let x_138 : i32 = treeIndex_1;
  param_22 = x_138;
  param_23 = 6;
  insert_i1_i1_(&(param_22), &(param_23));
  let x_139 : i32 = treeIndex_1;
  treeIndex_1 = (x_139 + 1);
  GLF_live4_looplimiter3 = 0;
  GLF_live4i = 0;
  loop {
    if (true) {
    } else {
      break;
    }
    let x_141 : i32 = GLF_live4_looplimiter3;
    if ((x_141 >= 3)) {
      break;
    }
    let x_142 : i32 = GLF_live4_looplimiter3;
    GLF_live4_looplimiter3 = (x_142 + 1);
    GLF_live4index = 1;
    let x_144 : i32 = GLF_live4index;
    let x_145 : i32 = GLF_live4index;
    let x_146 : i32 = GLF_live4index;
    let x_269 : f32 = GLF_live4obj.even_numbers[1];
    GLF_live4obj.even_numbers[select(0, x_146, ((x_144 >= 0) & (x_145 < 10)))] = x_269;
    let x_147 : i32 = GLF_live4i;
    let x_148 : i32 = GLF_live4i;
    let x_149 : i32 = GLF_live4i;
    GLF_live4obj.even_numbers[select(0, x_149, ((x_147 >= 0) & (x_148 < 10)))] = 1.0;

    continuing {
      let x_150 : i32 = GLF_live4i;
      GLF_live4i = (x_150 + 1);
    }
  }
  let x_152 : i32 = treeIndex_1;
  param_24 = x_152;
  param_25 = 17;
  insert_i1_i1_(&(param_24), &(param_25));
  let x_278 : f32 = x_27.injectionSwitch.x;
  let x_280 : f32 = x_27.injectionSwitch.y;
  if ((x_278 > x_280)) {
    return;
  }
  let x_153 : i32 = treeIndex_1;
  treeIndex_1 = (x_153 + 1);
  let x_155 : i32 = treeIndex_1;
  param_26 = x_155;
  param_27 = 13;
  insert_i1_i1_(&(param_26), &(param_27));
  let x_285 : vec4<f32> = gl_FragCoord;
  z = (vec2<f32>(x_285.y, x_285.x) / vec2<f32>(256.0, 256.0));
  let x_289 : f32 = z.x;
  param_28 = x_289;
  let x_290 : f32 = makeFrame_f1_(&(param_28));
  x = x_290;
  let x_292 : f32 = z.y;
  param_29 = x_292;
  let x_293 : f32 = makeFrame_f1_(&(param_29));
  y = x_293;
  sum = -100;
  target_1 = 0;
  loop {
    let x_156 : i32 = target_1;
    if ((x_156 < 20)) {
    } else {
      break;
    }
    let x_157 : i32 = target_1;
    param_30 = x_157;
    let x_158 : i32 = search_i1_(&(param_30));
    result = x_158;
    let x_159 : i32 = result;
    if ((x_159 > 0)) {
    } else {
      let x_160 : i32 = result;
      switch(x_160) {
        case 0: {
          return;
        }
        case -1: {
          let x_161 : i32 = sum;
          sum = (x_161 + 1);
        }
        default: {
        }
      }
    }

    continuing {
      let x_163 : i32 = target_1;
      target_1 = (x_163 + 1);
    }
  }
  let x_307 : f32 = x;
  let x_308 : f32 = y;
  let x_165 : i32 = sum;
  a = (x_307 + (x_308 * f32(x_165)));
  let x_313 : f32 = x_27.injectionSwitch.x;
  let x_315 : f32 = x_27.injectionSwitch.y;
  if ((x_313 < x_315)) {
    x_235 = vec3<f32>(1.0, 0.0, 0.0);
  } else {
    let x_320 : f32 = a;
    param_31 = x_320;
    let x_321 : vec3<f32> = hueColor_f1_(&(param_31));
    x_235 = x_321;
  }
  let x_322 : vec3<f32> = x_235;
  x_GLF_color = vec4<f32>(x_322.x, x_322.y, x_322.z, 1.0);
  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);
}
