#[inline]
pub fn murmur_hash2_x64_a(b_string: &[u8], seed: u32) -> u64 {
let m: u64 = 0xc6a4a7935bd1e995;
let r = 47;
let len = b_string.len();
let mut h = (seed as u64) ^ ((len as u64).wrapping_mul(m));
let (blocks, suffix) = b_string.as_chunks::<8>();
for block in blocks {
let mut k = u64::from_le_bytes(*block);
k = k.wrapping_mul(m);
k ^= k >> r;
k = k.wrapping_mul(m);
h ^= k;
h = h.wrapping_mul(m);
}
let cs = suffix.len();
if cs >= 7 {
h ^= (suffix[6] as u64) << 48;
}
if cs >= 6 {
h ^= (suffix[5] as u64) << 40;
}
if cs >= 5 {
h ^= (suffix[4] as u64) << 32;
}
if cs >= 4 {
h ^= (suffix[3] as u64) << 24;
}
if cs >= 3 {
h ^= (suffix[2] as u64) << 16;
}
if cs >= 2 {
h ^= (suffix[1] as u64) << 8;
}
if cs >= 1 {
h ^= suffix[0] as u64;
h = h.wrapping_mul(m);
}
h ^= h >> r;
h = h.wrapping_mul(m);
h ^= h >> r;
h
}