anchor.diff:          (bt:make-thread
            (lambda () (ws:run-resource-listener (ws:find-global-resource "/chat")))
            :name "chat resource listener"))
  -  (setf *users* nil
  -        *session-removal-hook* #'session-cleanup)
  +  (setf *session-removal-hook* #'session-cleanup)
     (start (setf *server* (make-instance 'acceptor :port *web-server-port*)))
     (setf *catch-errors-p* nil)
     t)
  
positive.code: 
  (define-easy-handler (logout-page :uri "/logout") ()
    (when (and *session* (session-value 'username))
      (logout *session*)
      (setf (session-value 'username) nil))
    (redirect "/login"))
  
  (define-easy-handler (ajax-ping :uri "/pingme") ()
  
negative.code:   (let ((username (session-value 'username session))
          (websocket-client (session-value 'websocket-client session)))
      (when username
        (setf (session-value 'username session) nil)
        (format t "~&~A logged out.~%" username))
      (when websocket-client
        (disconnect-client websocket-client))))
  
  (defun active-account-sessions (username)
    "Finds all sessions that are logged in as USERNAME."
    (loop for (nil . session) in (session-db *server*)
       for session-user = (session-value 'username session)
       when (and session-user (string-equal session-user username))
       collect session))
  
  (defun render-login-component ()
    (<:form :name "login" :action "/login"
  