public function clone(?string $foreignKeyValue = null, ?object $pivot = null, ?string $leftPivotKey = null): self 	{ 		$original = $this; 		$cloned = $original->replicate($original->getClonableExceptFields());  		if ($foreignKeyValue && ($parentForeignKey = $cloned->getCloneParentForeignKey())) { 			$cloned->{$parentForeignKey} = $foreignKeyValue; 		}  		if (!$original->isPivot() && $original->shouldClone()) { 			$cloned->beforeCloneIsSaved($original);  			$cloned->save();  			$cloned->afterCloneIsSaved($original);  			$original->recordCloneEvent($cloned); 		}  		$parentId = $original->shouldClone() ? $cloned->getKey() : $original->getKey();  		if ($pivot !== null) { 			$pivot->{$pivot->getCloneForeignKeys()[0]} = $leftPivotKey;  			$pivot->{$pivot->getCloneForeignKeys()[1]} = $parentId;  			$pivot->save(); 		}  		foreach ($original->getClonableRelations() as $relation) { 			$relations = $relation->get();  			foreach ($relations as $singleRelation) { 				if (!($singleRelation instanceof IsClonableContract)) { 					break; 				}  				if ($cloned->isPivot()) { 					$relation->first()?->clone(null, $cloned, $foreignKeyValue); 				} else { 					$singleRelation->clone($parentId); 				} 			} 		}  		return $cloned; 	}