#include <metal_stdlib>

using namespace metal;
struct tint_symbol_2 {
  float2 vUV [[user(locn0)]];
};

struct tint_symbol_3 {
  float4 value [[color(0)]];
};

float4 tint_symbol_inner(float2 vUV, texture2d<float, access::sample> tint_symbol_4, sampler tint_symbol_5) {
  float3 const random = tint_symbol_4.sample(tint_symbol_5, vUV).rgb;
  int i = 0;
  while (true) {
    if ((i < 1)) {
    } else {
      break;
    }
    float3 const offset = float3(random[0]);
    if (((((offset[0] < 0.0f) || (offset[1] < 0.0f)) || (offset[0] > 1.0f)) || (offset[1] > 1.0f))) {
      i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)));
      continue;
    }
    float const sampleDepth = 0.0f;
    i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)));
  }
  return float4(1.0f);
}

fragment tint_symbol_3 tint_symbol(texture2d<float, access::sample> tint_symbol_6 [[texture(0)]], sampler tint_symbol_7 [[sampler(0)]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  float4 const inner_result = tint_symbol_inner(tint_symbol_1.vUV, tint_symbol_6, tint_symbol_7);
  tint_symbol_3 wrapper_result = {};
  wrapper_result.value = inner_result;
  return wrapper_result;
}

