func MergeIntUint64Ptr(map1, map2 map[*int]*uint64) map[*int]*uint64 {
	if map1 == nil && map2 == nil {
		return map[*int]*uint64{}
	}
	newMap := make(map[*int]*uint64)
	if map1 == nil {
		for k, v := range map2 {
			newMap[k] = v
		}
		return newMap
	}
	if map2 == nil {
		for k, v := range map1 {
			newMap[k] = v
		}
		return newMap
	}
	for k, v := range map1 {
		newMap[k] = v
	}
	for k, v := range map2 {
		newMap[k] = v
	}
	return newMap
}
MergeIntUint64Ptr takes two inputs: map[int]uint64 and map[int]uint64 and merge two maps and returns a new map[int]uint64.
package fp
func MergeIntPtr(map1, map2 map[*int]*int) map[*int]*int {
	if map1 == nil && map2 == nil {
		return map[*int]*int{}
	}
	newMap := make(map[*int]*int)
	if map1 == nil {
		for k, v := range map2 {
			newMap[k] = v
		}
		return newMap
	}
	if map2 == nil {
		for k, v := range map1 {
			newMap[k] = v
		}
		return newMap
	}
	for k, v := range map1 {
		newMap[k] = v
	}
	for k, v := range map2 {
		newMap[k] = v
	}
	return newMap
}
func MergeIntInt64Ptr(map1, map2 map[*int]*int64) map[*int]*int64 {
	if map1 == nil && map2 == nil {
		return map[*int]*int64{}
	}
	newMap := make(map[*int]*int64)
	if map1 == nil {
		for k, v := range map2 {
			newMap[k] = v
		}
		return newMap
	}
	if map2 == nil {
		for k, v := range map1 {
			newMap[k] = v
		}
		return newMap
	}
	for k, v := range map1 {
		newMap[k] = v
	}
	for k, v := range map2 {
		newMap[k] = v
	}
	return newMap
}
func MergeIntInt32Ptr(map1, map2 map[*int]*int32) map[*int]*int32 {
	if map1 == nil && map2 == nil {
		return map[*int]*int32{}
	}
	newMap := make(map[*int]*int32)
	if map1 == nil {
		for k, v := range map2 {
			newMap[k] = v
		}
		return newMap
	}
	if map2 == nil {
		for k, v := range map1 {
			newMap[k] = v
		}
		return newMap
	}
	for k, v := range map1 {
		newMap[k] = v
	}
	for k, v := range map2 {
		newMap[k] = v
	}
	return newMap
}
func MergeIntInt16Ptr(map1, map2 map[*int]*int16) map[*int]*int16 {
	if map1 == nil && map2 == nil {
		return map[*int]*int16{}
	}
	newMap := make(map[*int]*int16)
	if map1 == nil {
		for k, v := range map2 {
			newMap[k] = v
		}
		return newMap
	}
	if map2 == nil {
		for k, v := range map1 {
			newMap[k] = v
		}
		return newMap
	}
	for k, v := range map1 {
		newMap[k] = v
	}
	for k, v := range map2 {
		newMap[k] = v
	}
	return newMap
}
func MergeIntInt8Ptr(map1, map2 map[*int]*int8) map[*int]*int8 {
	if map1 == nil && map2 == nil {
		return map[*int]*int8{}
	}
	newMap := make(map[*int]*int8)
	if map1 == nil {
		for k, v := range map2 {
			newMap[k] = v
		}
		return newMap
	}
	if map2 == nil {
		for k, v := range map1 {
			newMap[k] = v
		}
		return newMap
	}
	for k, v := range map1 {
		newMap[k] = v
	}
	for k, v := range map2 {
		newMap[k] = v
	}
	return newMap
}
func MergeIntUintPtr(map1, map2 map[*int]*uint) map[*int]*uint {
	if map1 == nil && map2 == nil {
		return map[*int]*uint{}
	}
	newMap := make(map[*int]*uint)
	if map1 == nil {
		for k, v := range map2 {
			newMap[k] = v
		}
		return newMap
	}
	if map2 == nil {
		for k, v := range map1 {
			newMap[k] = v
		}
		return newMap
	}
	for k, v := range map1 {
		newMap[k] = v
	}
	for k, v := range map2 {
		newMap[k] = v
	}
	return newMap
}