anchor.diff:                          session.ProtocolVersion <- protocol
                           session.ClientVersion   <- client 
                           state.post session.SessionID (LogOnOff (Logon session userId movieId))
  -                    | _ -> failwith "Extract login info failed, expecting a list or a property list."                        
  +                    | _ -> failwith "Extract login info failed, expecting a list or a property list."
                   else
                       if appServer.MinLogLevel = Trace then log Trace "Incoming Message: %A" (prettyPrintMsg msg)
                       let recipients = msg.recipients |>> fun recipient -> (recipient+"@").Split [|'@'|] |>> (function "" -> None | s -> Some s) |> Seq.pairwise |> head
  
positive.code:                 | "S" ->
                      let sessionIds = state.Users |>> fun {Session = s} -> s
                      let anonymous  = appServer.GetAllSessions() |> filter (fun s -> not (exists ((==) s.SessionID) sessionIds))
                      let lines      = anonymous |>> fun s -> sprintf "Session: %s IP: %-15A Start: %A Last: %A" s.SessionID s.RemoteEndPoint.Address s.StartTime s.LastActiveTime
                      let asText     = String.concat nl lines
                      reply (sprintf " -> Sessions pending authentication %s%s" nl asText)
                  | "c" -> 
  
negative.code:                     reply (sprintf " -> Loading and applying blacklist ...")
                      appServer.BlackList <- IO.File.ReadAllLines (path + @"\blacklist.txt")
                      appServer.GetAllSessions() |> filter isInBlackList |> map_ (fun s -> 
                          log Warn "Session %A is Blacklisted, will be disconnected immediately." s
                          s.Close CloseReason.ServerClosing)
                  | "u" -> 
                      let users = state.Users
                      let detailed = users |> sort |>> fun u -> 
                          match appServer.GetSessionByID u.Session with
                          | null -> "Session no longer exists."
                          | s    -> sprintf "Name: %-26s , Movie: %-22s , Session: %A , Groups: %A" u.Name u.Movie s u.Groups
                      let detail = String.concat nl detailed
                      reply (sprintf " -> User Details:%s%s%sUser Count: %i" nl detail nl (length users))
                  | "m" ->
  