public boolean isEquivalent(PrototypeModel obj) {
		if (getClass() != obj.getClass()) {
			return false;
		}
		if (!name.equals(obj.name)) {
			return false;
		}
		if (extrapop != obj.extrapop || stackshift != obj.stackshift) {
			return false;
		}
		if (hasThis != obj.hasThis || isConstruct != obj.isConstruct) {
			return false;
		}
		if (hasUponEntry != obj.hasUponEntry || hasUponReturn != obj.hasUponReturn) {
			return false;
		}
		if (inputListType != obj.inputListType) {
			return false;
		}
		if (!inputParams.isEquivalent(obj.inputParams)) {
			return false;
		}
		if (!outputParams.isEquivalent(obj.outputParams)) {
			return false;
		}
		if (!SystemUtilities.isArrayEqual(unaffected, obj.unaffected)) {
			return false;
		}
		if (!SystemUtilities.isArrayEqual(killedbycall, obj.killedbycall)) {
			return false;
		}
		if (!SystemUtilities.isArrayEqual(likelytrash, obj.likelytrash)) {
			return false;
		}
		if (!SystemUtilities.isArrayEqual(internalstorage, obj.internalstorage)) {
			return false;
		}
		String compatName = (compatModel != null) ? compatModel.getName() : "";
		String compatNameOp2 = (obj.compatModel != null) ? obj.compatModel.getName() : "";
		if (!compatName.equals(compatNameOp2)) {
			return false;
		}
		if (!SystemUtilities.isEqual(localRange, obj.localRange)) {
			return false;
		}
		if (!SystemUtilities.isEqual(paramRange, obj.paramRange)) {
			return false;
		}
		if (!SystemUtilities.isArrayEqual(returnaddress, obj.returnaddress)) {
			return false;
		}
		return true;
	}
Determine if this PrototypeModel is equivalent to another instance
@param obj is the other instance
@return true if they are equivalent
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PrototypeModel.java