pub fn ai_sgd_location_bytes(data: &[u8]) -> Vec<u8> {
    // Assert the data size is relatively small so we are
    // comfortable executing this synchronously / blocking tokio thread.
    assert_eq!(32, data.len(), "only 32 byte hashes supported");

    let hash = blake2b_128(data);
    let mut out = vec![hash[0], hash[1], hash[2], hash[3]];
    for i in (4..16).step_by(4) {
        out[0] ^= hash[i];
        out[1] ^= hash[i + 1];
        out[2] ^= hash[i + 2];
        out[3] ^= hash[i + 3];
    }
    out
}
/// internal compute the ai sgd location u32
internal compute the ai sgd location u32
internal compute the ai sgd location u32
pub fn ai_sgd_location_bytes(data: &[u8]) -> Vec<u8> {
    // Assert the data size is relatively small so we are
    // comfortable executing this synchronously / blocking tokio thread.
    assert_eq!(32, data.len(), "only 32 byte hashes supported");
    let hash = blake2b_128(data);
    let mut out = vec![hash[0], hash[1], hash[2], hash[3]];
    for i in (4..16).step_by(4) {
        out[0] ^= hash[i];
        out[1] ^= hash[i + 1];
        out[2] ^= hash[i + 2];
        out[3] ^= hash[i + 3];
    }
    out
}
pub fn ai_sgd_location_bytes ( data : & [ u8 ] ) -> Vec < u8 > { // Assert the data size is relatively small so we are // comfortable executing this synchronously / blocking tokio thread. assert_eq ! ( 32 data len ( ) " " ) ; let hash = blake2b_128 ( data ) ; let mut out = vec ! [ hash [ 0 ] hash [ 1 ] hash [ 2 ] hash [ 3 ] ] ; for i in ( 4 .. 16 ) . step_by ( 4 ) { out [ 0 ] ^= hash [ i ] ; out [ 1 ] ^= hash [ i + 1 ] ; out [ 2 ] ^= hash [ i + 2 ] ; out [ 3 ] ^= hash [ i + 3 ] ; } out }
internal compute the ai sgd location u32
internal compute the ai sgd location u32
data
&[u8]
data
&[u8]