func MergeInt64Int16Ptr(map1, map2 map[*int64]*int16) map[*int64]*int16 {
	if map1 == nil && map2 == nil {
		return map[*int64]*int16{}
	}
	newMap := make(map[*int64]*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
}
MergeInt64Int16Ptr takes two inputs: map[int64]int16 and map[int64]int16 and merge two maps and returns a new map[int64]int16.
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
}
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
}
func MergeIntUint32Ptr(map1, map2 map[*int]*uint32) map[*int]*uint32 {
	if map1 == nil && map2 == nil {
		return map[*int]*uint32{}
	}
	newMap := make(map[*int]*uint32)
	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 MergeIntUint16Ptr(map1, map2 map[*int]*uint16) map[*int]*uint16 {
	if map1 == nil && map2 == nil {
		return map[*int]*uint16{}
	}
	newMap := make(map[*int]*uint16)
	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 MergeIntUint8Ptr(map1, map2 map[*int]*uint8) map[*int]*uint8 {
	if map1 == nil && map2 == nil {
		return map[*int]*uint8{}
	}
	newMap := make(map[*int]*uint8)
	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 MergeIntStrPtr(map1, map2 map[*int]*string) map[*int]*string {
	if map1 == nil && map2 == nil {
		return map[*int]*string{}
	}
	newMap := make(map[*int]*string)
	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 MergeIntBoolPtr(map1, map2 map[*int]*bool) map[*int]*bool {
	if map1 == nil && map2 == nil {
		return map[*int]*bool{}
	}
	newMap := make(map[*int]*bool)
	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 MergeIntFloat32Ptr(map1, map2 map[*int]*float32) map[*int]*float32 {
	if map1 == nil && map2 == nil {
		return map[*int]*float32{}
	}
	newMap := make(map[*int]*float32)
	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 MergeIntFloat64Ptr(map1, map2 map[*int]*float64) map[*int]*float64 {
	if map1 == nil && map2 == nil {
		return map[*int]*float64{}
	}
	newMap := make(map[*int]*float64)
	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 MergeInt64IntPtr(map1, map2 map[*int64]*int) map[*int64]*int {
	if map1 == nil && map2 == nil {
		return map[*int64]*int{}
	}
	newMap := make(map[*int64]*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 MergeInt64Ptr(map1, map2 map[*int64]*int64) map[*int64]*int64 {
	if map1 == nil && map2 == nil {
		return map[*int64]*int64{}
	}
	newMap := make(map[*int64]*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 MergeInt64Int32Ptr(map1, map2 map[*int64]*int32) map[*int64]*int32 {
	if map1 == nil && map2 == nil {
		return map[*int64]*int32{}
	}
	newMap := make(map[*int64]*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
}