IEnumerable<Header> MergeHeaders ()
{
int mesgIndex = 0, bodyIndex = 0;
while (mesgIndex < Headers.Count && bodyIndex < Body.Headers.Count) {
var bodyHeader = Body.Headers[bodyIndex];
if (!bodyHeader.Offset.HasValue)
break;
var mesgHeader = Headers[mesgIndex];
if (mesgHeader.Offset.HasValue && mesgHeader.Offset < bodyHeader.Offset) {
yield return mesgHeader;
mesgIndex++;
} else {
yield return bodyHeader;
bodyIndex++;
}
}
while (mesgIndex < Headers.Count)
yield return Headers[mesgIndex++];
while (bodyIndex < Body.Headers.Count)
yield return Body.Headers[bodyIndex++];
}