#include <metal_stdlib>

using namespace metal;
struct tint_padded_array_element {
  /* 0x0000 */ float el;
  /* 0x0004 */ int8_t tint_pad[12];
};
struct tint_array_wrapper {
  /* 0x0000 */ tint_padded_array_element arr[3];
};
struct buf0 {
  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
};
struct tint_padded_array_element_1 {
  /* 0x0000 */ int el;
  /* 0x0004 */ int8_t tint_pad_1[12];
};
struct tint_array_wrapper_1 {
  /* 0x0000 */ tint_padded_array_element_1 arr[4];
};
struct buf1 {
  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(constant buf0& x_7, constant buf1& x_10, thread int* const tint_symbol_4, thread float4* const tint_symbol_5) {
  float f = 0.0f;
  int i = 0;
  int i_1 = 0;
  int i_2 = 0;
  int i_3 = 0;
  int i_4 = 0;
  int i_5 = 0;
  int i_6 = 0;
  int i_7 = 0;
  int i_8 = 0;
  int i_9 = 0;
  int i_10 = 0;
  int i_11 = 0;
  int i_12 = 0;
  int i_13 = 0;
  int i_14 = 0;
  float sum = 0.0f;
  int r = 0;
  *(tint_symbol_4) = 0;
  float const x_53 = x_7.x_GLF_uniform_float_values.arr[1].el;
  f = x_53;
  int const x_55 = x_10.x_GLF_uniform_int_values.arr[1].el;
  i = x_55;
  while (true) {
    int const x_60 = i;
    int const x_62 = x_10.x_GLF_uniform_int_values.arr[0].el;
    if ((x_60 < x_62)) {
    } else {
      break;
    }
    int const x_66 = x_10.x_GLF_uniform_int_values.arr[1].el;
    i_1 = x_66;
    while (true) {
      int const x_71 = i_1;
      int const x_73 = x_10.x_GLF_uniform_int_values.arr[0].el;
      if ((x_71 < x_73)) {
      } else {
        break;
      }
      int const x_77 = x_10.x_GLF_uniform_int_values.arr[1].el;
      i_2 = x_77;
      while (true) {
        int const x_82 = i_2;
        int const x_84 = x_10.x_GLF_uniform_int_values.arr[0].el;
        if ((x_82 < x_84)) {
        } else {
          break;
        }
        int const x_88 = x_10.x_GLF_uniform_int_values.arr[1].el;
        i_3 = x_88;
        while (true) {
          int const x_93 = i_3;
          int const x_95 = x_10.x_GLF_uniform_int_values.arr[0].el;
          if ((x_93 < x_95)) {
          } else {
            break;
          }
          int const x_99 = x_10.x_GLF_uniform_int_values.arr[1].el;
          i_4 = x_99;
          while (true) {
            int const x_104 = i_4;
            int const x_106 = x_10.x_GLF_uniform_int_values.arr[0].el;
            if ((x_104 < x_106)) {
            } else {
              break;
            }
            int const x_110 = x_10.x_GLF_uniform_int_values.arr[1].el;
            i_5 = x_110;
            while (true) {
              int const x_115 = i_5;
              int const x_117 = x_10.x_GLF_uniform_int_values.arr[0].el;
              if ((x_115 < x_117)) {
              } else {
                break;
              }
              int const x_121 = x_10.x_GLF_uniform_int_values.arr[1].el;
              i_6 = x_121;
              while (true) {
                int const x_126 = i_6;
                int const x_128 = x_10.x_GLF_uniform_int_values.arr[0].el;
                if ((x_126 < x_128)) {
                } else {
                  break;
                }
                int const x_132 = x_10.x_GLF_uniform_int_values.arr[1].el;
                i_7 = x_132;
                while (true) {
                  int const x_137 = i_7;
                  int const x_139 = x_10.x_GLF_uniform_int_values.arr[0].el;
                  if ((x_137 < x_139)) {
                  } else {
                    break;
                  }
                  int const x_143 = x_10.x_GLF_uniform_int_values.arr[1].el;
                  i_8 = x_143;
                  while (true) {
                    int const x_148 = i_8;
                    int const x_150 = x_10.x_GLF_uniform_int_values.arr[0].el;
                    if ((x_148 < x_150)) {
                    } else {
                      break;
                    }
                    int const x_154 = x_10.x_GLF_uniform_int_values.arr[1].el;
                    i_9 = x_154;
                    while (true) {
                      int const x_159 = i_9;
                      int const x_161 = x_10.x_GLF_uniform_int_values.arr[0].el;
                      if ((x_159 < x_161)) {
                      } else {
                        break;
                      }
                      int const x_165 = x_10.x_GLF_uniform_int_values.arr[1].el;
                      i_10 = x_165;
                      while (true) {
                        int const x_170 = i_10;
                        int const x_172 = x_10.x_GLF_uniform_int_values.arr[0].el;
                        if ((x_170 < x_172)) {
                        } else {
                          break;
                        }
                        int const x_176 = x_10.x_GLF_uniform_int_values.arr[1].el;
                        i_11 = x_176;
                        while (true) {
                          int const x_181 = i_11;
                          int const x_183 = x_10.x_GLF_uniform_int_values.arr[2].el;
                          if ((x_181 < x_183)) {
                          } else {
                            break;
                          }
                          int const x_187 = x_10.x_GLF_uniform_int_values.arr[1].el;
                          i_12 = x_187;
                          while (true) {
                            int const x_192 = i_12;
                            int const x_194 = x_10.x_GLF_uniform_int_values.arr[0].el;
                            if ((x_192 < x_194)) {
                            } else {
                              break;
                            }
                            int const x_198 = x_10.x_GLF_uniform_int_values.arr[1].el;
                            i_13 = x_198;
                            while (true) {
                              int const x_203 = i_13;
                              int const x_205 = x_10.x_GLF_uniform_int_values.arr[0].el;
                              if ((x_203 < x_205)) {
                              } else {
                                break;
                              }
                              int const x_209 = x_10.x_GLF_uniform_int_values.arr[1].el;
                              i_14 = x_209;
                              while (true) {
                                int const x_214 = i_14;
                                int const x_216 = x_10.x_GLF_uniform_int_values.arr[2].el;
                                if ((x_214 < x_216)) {
                                } else {
                                  break;
                                }
                                while (true) {
                                  int const x_223 = *(tint_symbol_4);
                                  *(tint_symbol_4) = (x_223 + 1);
                                  {
                                    int const x_225 = *(tint_symbol_4);
                                    int const x_227 = x_10.x_GLF_uniform_int_values.arr[3].el;
                                    if ((x_225 < (100 - x_227))) {
                                    } else {
                                      break;
                                    }
                                  }
                                }
                                float const x_231 = x_7.x_GLF_uniform_float_values.arr[0].el;
                                float const x_232 = f;
                                f = (x_232 + x_231);
                                {
                                  int const x_234 = i_14;
                                  i_14 = (x_234 + 1);
                                }
                              }
                              {
                                int const x_236 = i_13;
                                i_13 = (x_236 + 1);
                              }
                            }
                            {
                              int const x_238 = i_12;
                              i_12 = (x_238 + 1);
                            }
                          }
                          {
                            int const x_240 = i_11;
                            i_11 = (x_240 + 1);
                          }
                        }
                        {
                          int const x_242 = i_10;
                          i_10 = (x_242 + 1);
                        }
                      }
                      {
                        int const x_244 = i_9;
                        i_9 = (x_244 + 1);
                      }
                    }
                    {
                      int const x_246 = i_8;
                      i_8 = (x_246 + 1);
                    }
                  }
                  {
                    int const x_248 = i_7;
                    i_7 = (x_248 + 1);
                  }
                }
                {
                  int const x_250 = i_6;
                  i_6 = (x_250 + 1);
                }
              }
              {
                int const x_252 = i_5;
                i_5 = (x_252 + 1);
              }
            }
            {
              int const x_254 = i_4;
              i_4 = (x_254 + 1);
            }
          }
          {
            int const x_256 = i_3;
            i_3 = (x_256 + 1);
          }
        }
        {
          int const x_258 = i_2;
          i_2 = (x_258 + 1);
        }
      }
      {
        int const x_260 = i_1;
        i_1 = (x_260 + 1);
      }
    }
    {
      int const x_262 = i;
      i = (x_262 + 1);
    }
  }
  float const x_265 = x_7.x_GLF_uniform_float_values.arr[1].el;
  sum = x_265;
  int const x_267 = x_10.x_GLF_uniform_int_values.arr[1].el;
  r = x_267;
  while (true) {
    int const x_272 = *(tint_symbol_4);
    if ((x_272 < 100)) {
    } else {
      break;
    }
    int const x_275 = *(tint_symbol_4);
    *(tint_symbol_4) = (x_275 + 1);
    float const x_277 = f;
    float const x_278 = sum;
    sum = (x_278 + x_277);
    {
      int const x_280 = r;
      r = (x_280 + 1);
    }
  }
  float const x_282 = sum;
  float const x_284 = x_7.x_GLF_uniform_float_values.arr[2].el;
  if ((x_282 == x_284)) {
    int const x_290 = x_10.x_GLF_uniform_int_values.arr[0].el;
    int const x_293 = x_10.x_GLF_uniform_int_values.arr[1].el;
    int const x_296 = x_10.x_GLF_uniform_int_values.arr[1].el;
    int const x_299 = x_10.x_GLF_uniform_int_values.arr[0].el;
    *(tint_symbol_5) = float4(float(x_290), float(x_293), float(x_296), float(x_299));
  } else {
    int const x_303 = x_10.x_GLF_uniform_int_values.arr[1].el;
    float const x_304 = float(x_303);
    *(tint_symbol_5) = float4(x_304, x_304, x_304, x_304);
  }
  return;
}

fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
  thread int tint_symbol_6 = 0;
  thread float4 tint_symbol_7 = 0.0f;
  main_1(x_7, x_10, &(tint_symbol_6), &(tint_symbol_7));
  main_out const tint_symbol_2 = {.x_GLF_color_1=tint_symbol_7};
  tint_symbol_1 const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_2.x_GLF_color_1};
  return tint_symbol_3;
}

