public function stop($message = 'Stop', $context = [], $lap = true)
    {
        // Check if method was called only with $context
        if (is_array($message)) {
            $lap     = $context;
            $context = $message;
            $message = 'Stop';
        } elseif (is_bool($message)) {
            $lap     = $message;
            $context = [];
            $message = 'Stop';
        } elseif (is_bool($context)) {
            $lap     = $context;
            $context = [];
        }

        if (!$this->isRunning()) {
            throw new Exception("Profile {$this->getName()} not running.");
        }

        // Skip saving and logging lap for single lap profiles
        if ($lap && count($this->laps) > 1) {
            $this->lap();
        }

        // Stop counter
        $this->stop = $this->timeCurrent();

        // Add total runtime to context
        $context['runtime'] = $this->timeTotal();

        // Log
        $this->note($message, $context);

        return $this;
    }