You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: hash.go
    path of file: ./repos/tracee/pkg/utils
    
    the code of the file until where you have to start completion: package utils

import (
	"encoding/binary"
	"unsafe"
)

// MurMurHash 3 x86 32-bit (https://en.wikipedia.org/wiki/MurmurHash): Small (u32), simple (for C
// and Go), high performant, optimized and collision resistant hashing function. This function is
// used to hash a task
    
func Murmur32(key []byte) uint32 {
	data := key
	nblocks := len(data) / 4

	h1 := uint32(murmurSeed)
	c1 := uint32(0xcc9e2d51)
	c2 := uint32(0x1b873593)

	// Body
	blocks := data[:nblocks*4]

	for i := 0; i < nblocks; i++ {
		k1 := *(*uint32)(unsafe.Pointer(&blocks[i*4]))

		k1 *= c1
		k1 = (k1 << 15) | (k1 >> 17)
		k1 *= c2

		h1 ^= k1
		h1 = (h1 << 13) | (h1 >> 19)
		h1 = h1*5 + 0xe6546b64
	}

	// Tail
	tail := data[nblocks*4:]
	k1 := uint32(0)

	switch len(tail) {
	case 3:
		k1 ^= uint32(tail[2]) << 16
		fallthrough
	case 2:
		k1 ^= uint32(tail[1]) << 8
		fallthrough
	case 1:
		k1 ^= uint32(tail[0])
		k1 *= c1
		k1 = (k1 << 15) | (k1 >> 17)
		k1 *= c2
		h1 ^= k1
	}

	// Final
	h1 ^= uint32(len(data))
	h1 ^= h1 >> 16
	h1 *= 0x85ebca6b
	h1 ^= h1 >> 13
	h1 *= 0xc2b2ae35
	h1 ^= h1 >> 16

	return h1
}