struct main_inputs {
  uint tint_local_index : SV_GroupIndex;
};


ByteAddressBuffer v : register(t0);
RWByteAddressBuffer v_1 : register(u1);
groupshared uint b[64];
void main_inner(uint tint_local_index) {
  {
    uint idx = tint_local_index;
    while(true) {
      uint v_2 = idx;
      if ((v_2 >= 64u)) {
        break;
      }
      b[((v_2 * 4u) / 4u)] = 0u;
      {
        idx = (idx + 1u);
      }
    }
  }
  GroupMemoryBarrierWithGroupSync();
  {
    int i = int(0);
    while(true) {
      if ((i < int(64))) {
      } else {
        break;
      }
      uint v_3 = (min(uint(i), (64u - 1u)) * 4u);
      uint v_4 = 0u;
      v.GetDimensions(v_4);
      uint v_5 = ((v_4 / 4u) - 1u);
      b[(v_3 / 4u)] = v.Load((0u + (min(uint(i), v_5) * 4u)));
      {
        i = asint((asuint(i) + 1u));
      }
    }
  }
  GroupMemoryBarrierWithGroupSync();
  {
    int i = int(0);
    while(true) {
      if ((i < int(64))) {
      } else {
        break;
      }
      uint v_6 = 0u;
      v_1.GetDimensions(v_6);
      uint v_7 = ((v_6 / 4u) - 1u);
      uint v_8 = (min(uint(i), v_7) * 4u);
      uint v_9 = ((min(uint(i), (64u - 1u)) * 4u) / 4u);
      v_1.Store((0u + v_8), b[v_9]);
      {
        i = asint((asuint(i) + 1u));
      }
    }
  }
}

[numthreads(1, 1, 1)]
void main(main_inputs inputs) {
  main_inner(inputs.tint_local_index);
}

