public function getStartOperation()
    {
        $id = 0;
        if ($this->hasAuthRequest()) {
            // Step through operations, skipping any at the beginning that can be skipped.
            foreach ($this->operations as $id => $operation) {
                if ($id == count($this->operations) - 1) {
                    // This is the last request so it cannot be skipped.
                    break;
                }

                if (!$this->hasAuthRequest($id)) {
                    // This is not an auth request so it should never be skipped.
                    break;
                }

                if ($this->operationUpdatesContact($operation)) {
                    // This operation should never be skipped because it can update the contact.
                    break;
                }

                $this->determineOperationRequirements();
                if (isset($this->requiredPayloadTokens[$id])) {
                    // This step can be skipped if we have these tokens.
                    $this->loadPreviousPayloadAuthTokens();
                    foreach ($this->requiredPayloadTokens[$id] as $token) {
                        if (!isset($this->previousPayloadAuthTokens[$token])) {
                            // We cannot skip this operation because a required token isn't in the database yet.
                            break;
                        }
                    }
                } else {
                    // This step is indicated as auth, but no tokens from it are used in the following payload.
                    // Assume the client hasn't been fully configured and do not skip this operation.
                    break;
                }
            }
        }

        return $id;
    }