public static TEvent Reassemble <TEvent>(MemoryStream stream, IEventFragment lastFragment) where TEvent : Event
 {
     stream.Write(lastFragment.Bytes, 0, lastFragment.Bytes.Length);
     stream.Seek(0, SeekOrigin.Begin);
     Packet.Deserialize(stream, out TEvent evt, null);
     stream.Dispose();
     return(evt);
 }
 public static TEvent Reassemble <TEvent>(IEnumerable <IEventFragment> earlierFragments, IEventFragment lastFragment) where TEvent : Event
 {
     using (var stream = new MemoryStream())
     {
         foreach (var x in earlierFragments)
         {
             stream.Write(x.Bytes, 0, x.Bytes.Length);
         }
         stream.Write(lastFragment.Bytes, 0, lastFragment.Bytes.Length);
         stream.Seek(0, SeekOrigin.Begin);
         Packet.Deserialize(stream, out TEvent evt, null);
         return(evt);
     }
 }