diff --git a/README.markdown b/README.markdown
--- a/README.markdown
+++ b/README.markdown
@@ -11,7 +11,7 @@
 can be used to modify replays in order to force everyone into the same car or
 change the map a game was played on.
 
-Rattletrap supports every version of Rocket League up to [1.78][], which was
+Rattletrap supports every version of Rocket League up to [1.84][], which was
 released on 2020-06-16.  If a replay can be played by the Rocket League client,
 it can be parsed by Rattletrap. (If not, that's a bug. Please report it!)
 
@@ -134,7 +134,7 @@
 [Docker build badge]: https://img.shields.io/docker/build/taylorfausak/rattletrap.svg?label=docker&logo=docker&logoColor=white
 [docker build]: https://hub.docker.com/r/taylorfausak/rattletrap
 [Rocket League]: https://www.rocketleague.com
-[1.78]: https://www.rocketleague.com/news/patch-notes-v1-78/
+[1.84]: https://www.rocketleague.com/news/patch-notes-v1-84/
 [Ball Chasing]: https://ballchasing.com
 [Haskell]: https://www.haskell.org
 [C# parser]: https://github.com/jjbott/RocketLeagueReplayParser
diff --git a/rattletrap.cabal b/rattletrap.cabal
--- a/rattletrap.cabal
+++ b/rattletrap.cabal
@@ -1,7 +1,7 @@
 cabal-version: 2.2
 
 name: rattletrap
-version: 9.1.4
+version: 9.2.0
 
 category: Game
 description: Rattletrap parses and generates Rocket League replays.
diff --git a/source/library/Rattletrap/Data.hs b/source/library/Rattletrap/Data.hs
--- a/source/library/Rattletrap/Data.hs
+++ b/source/library/Rattletrap/Data.hs
@@ -105,6 +105,7 @@
   , "TAGame.GameEvent_SoccarPrivate_TA"
   , "TAGame.GameEvent_SoccarSplitscreen_TA"
   , "TAGame.GRI_TA"
+  , "TAGame.MaxTimeWarningData_TA"
   , "TAGame.PRI_TA"
   , "TAGame.SpecialPickup_BallCarSpring_TA"
   , "TAGame.SpecialPickup_BallFreeze_TA"
@@ -208,6 +209,7 @@
   , ("Haunted_TrainStation_P.TheWorld:PersistentLevel.HauntedBallTrapTrigger_TA_1", "TAGame.HauntedBallTrapTrigger_TA")
   , ("ProjectX.Default__NetModeReplicator_X", "ProjectX.NetModeReplicator")
   , ("TAGame.Default__CameraSettingsActor_TA", "TAGame.CameraSettingsActor_TA")
+  , ("TAGame.Default__MaxTimeWarningData_TA", "TAGame.MaxTimeWarningData_TA")
   , ("TAGame.Default__PRI_TA", "TAGame.PRI_TA")
   , ("TheWorld:PersistentLevel.BreakOutActor_Platform_TA", "TAGame.BreakOutActor_Platform_TA")
   , ("TheWorld:PersistentLevel.CrowdActor_TA", "TAGame.CrowdActor_TA")
@@ -240,6 +242,7 @@
   , ("Engine.PlayerReplicationInfo:Score", AttributeTypeInt)
   , ("Engine.PlayerReplicationInfo:Team", AttributeTypeFlaggedInt)
   , ("Engine.PlayerReplicationInfo:UniqueId", AttributeTypeUniqueId)
+  , ("Engine.ReplicatedActor_ORS:ReplicatedOwner", AttributeTypeFlaggedInt)
   , ("Engine.TeamInfo:Score", AttributeTypeInt)
   , ("ProjectX.GRI_X:bGameStarted", AttributeTypeBoolean)
   , ("ProjectX.GRI_X:GameServerID", AttributeTypeQWord)
@@ -278,8 +281,8 @@
   , ("TAGame.Car_TA:AddedCarForceMultiplier", AttributeTypeFloat)
   , ("TAGame.Car_TA:AttachedPickup", AttributeTypeFlaggedInt)
   , ("TAGame.Car_TA:ClubColors", AttributeTypeClubColors)
-  , ("TAGame.Car_TA:ReplicatedDemolish", AttributeTypeDemolish)
   , ("TAGame.Car_TA:ReplicatedDemolish_CustomFX", AttributeTypeCustomDemolish)
+  , ("TAGame.Car_TA:ReplicatedDemolish", AttributeTypeDemolish)
   , ("TAGame.Car_TA:TeamPaint", AttributeTypeTeamPaint)
   , ("TAGame.CarComponent_Boost_TA:bNoBoost", AttributeTypeBoolean)
   , ("TAGame.CarComponent_Boost_TA:BoostModifier", AttributeTypeFloat)
@@ -328,6 +331,8 @@
   , ("TAGame.GameEvent_Team_TA:bForfeit", AttributeTypeBoolean)
   , ("TAGame.GameEvent_Team_TA:MaxTeamSize", AttributeTypeInt)
   , ("TAGame.GRI_TA:NewDedicatedServerIP", AttributeTypeString)
+  , ("TAGame.MaxTimeWarningData_TA:EndGameEpochTime", AttributeTypeInt64)
+  , ("TAGame.MaxTimeWarningData_TA:EndGameWarningEpochTime", AttributeTypeInt64)
   , ("TAGame.PRI_TA:bIsDistracted", AttributeTypeBoolean)
   , ("TAGame.PRI_TA:bIsInSplitScreen", AttributeTypeBoolean)
   , ("TAGame.PRI_TA:bMatchMVP", AttributeTypeBoolean)
@@ -384,6 +389,7 @@
   , ("TAGame.Team_TA:ClubColors", AttributeTypeClubColors)
   , ("TAGame.Team_TA:ClubID", AttributeTypeInt64)
   , ("TAGame.Team_TA:CustomTeamName", AttributeTypeString)
+  , ("TAGame.Team_TA:Difficulty", AttributeTypeInt)
   , ("TAGame.Team_TA:GameEvent", AttributeTypeFlaggedInt)
   , ("TAGame.Team_TA:LogoData", AttributeTypeFlaggedInt)
   , ("TAGame.Vehicle_TA:bDriving", AttributeTypeBoolean)
diff --git a/source/library/Rattletrap/Decode/RemoteId.hs b/source/library/Rattletrap/Decode/RemoteId.hs
--- a/source/library/Rattletrap/Decode/RemoteId.hs
+++ b/source/library/Rattletrap/Decode/RemoteId.hs
@@ -4,6 +4,7 @@
 where
 
 import Rattletrap.Decode.Common
+import Rattletrap.Decode.Str
 import Rattletrap.Decode.Word64le
 import Rattletrap.Type.RemoteId
 import Rattletrap.Type.Word64le
@@ -27,6 +28,7 @@
   7 -> if version >= (868, 24, 10)
     then RemoteIdPsyNet . Left <$> decodeWord64leBits
     else RemoteIdPsyNet . Right <$> getWord256
+  11 -> RemoteIdEpic <$> decodeStrBits
   _ -> fail ("[RT09] unknown system id " <> show systemId)
 
 decodePsName :: DecodeBits Text.Text
diff --git a/source/library/Rattletrap/Encode/RemoteId.hs b/source/library/Rattletrap/Encode/RemoteId.hs
--- a/source/library/Rattletrap/Encode/RemoteId.hs
+++ b/source/library/Rattletrap/Encode/RemoteId.hs
@@ -4,6 +4,7 @@
 where
 
 import Rattletrap.Encode.Common
+import Rattletrap.Encode.Str
 import Rattletrap.Encode.Word64le
 import Rattletrap.Type.RemoteId
 import Rattletrap.Type.Word64le
@@ -25,6 +26,7 @@
   RemoteIdSteam word64 -> putWord64Bits word64
   RemoteIdSwitch a b c d -> putWord256 a b c d
   RemoteIdXbox word64 -> putWord64Bits word64
+  RemoteIdEpic str -> putTextBits str
 
 putWord256
   :: Word64le -> Word64le -> Word64le -> Word64le -> BinaryBits.BitPut ()
diff --git a/source/library/Rattletrap/Type/RemoteId.hs b/source/library/Rattletrap/Type/RemoteId.hs
--- a/source/library/Rattletrap/Type/RemoteId.hs
+++ b/source/library/Rattletrap/Type/RemoteId.hs
@@ -6,6 +6,7 @@
 where
 
 import Rattletrap.Type.Common
+import Rattletrap.Type.Str
 import Rattletrap.Type.Word64le
 
 data RemoteId
@@ -16,6 +17,7 @@
   | RemoteIdSteam Word64le
   | RemoteIdSwitch Word64le Word64le Word64le Word64le
   | RemoteIdXbox Word64le
+  | RemoteIdEpic Str
   deriving (Eq, Ord, Show)
 
 $(deriveJson ''RemoteId)
diff --git a/source/test-suite/Main.hs b/source/test-suite/Main.hs
--- a/source/test-suite/Main.hs
+++ b/source/test-suite/Main.hs
@@ -159,6 +159,7 @@
   , ("a09e", "a tournament")
   , ("a128", "a round count down")
   , ("a184", "max score")
+  , ("a1c0", "epic system id")
   , ("a52f", "some more mutators")
   , ("a558", "extended explosion data")
   , ("a671", "a waiting player")
@@ -176,6 +177,7 @@
   , ("d1d5", "v1.68")
   , ("d236", "rlcs s2")
   , ("d428", "a private hockey match")
+  , ("d44c", "ranked tournament")
   , ("d52e", "psynet system id")
   , ("d7fb", "an explosion attribute")
   , ("d818", "heatseeker")
@@ -192,4 +194,5 @@
   , ("f7b9", "a hockey game event")
   , ("f811", "no frames")
   , ("fdc7", "an MVP")
+  , ("ffb7", "with difficulty")
   ]
