2.2.1.1 Compact Unsigned 64-bit Integer
Inheritance: BaseStructure
        /// <summary>
        /// Parse the bit32StreamObjectHeaderStart structure.
        /// </summary>
        /// <param name="s">An stream containing bit32StreamObjectHeaderStart structure.</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);
            int index = 0;
            int temp = ReadINT32();
            this.A = (byte)GetBits(temp, index, 2);
            index = index + 2;
            this.B = (byte)GetBits(temp, index, 1);
            index = index + 1;
            this.Type = (StreamObjectTypeHeaderStart)GetBits(temp, index, 14);
            index = index + 14;
            this.Length = (byte)GetBits(temp, index, 15);

            if (this.Length == 32767)
            {
                this.LargeLength = new CompactUnsigned64bitInteger();
                this.LargeLength = this.LargeLength.TryParse(s);
            }
        }
 /// <summary>
 /// Parse the CellManifestDataElement structure.
 /// </summary>
 /// <param name="s">An stream containing CellManifestDataElement structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.DataElementStart = new bit16StreamObjectHeaderStart();
     this.DataElementStart.Parse(s);
     this.DataElementExtendedGUID = new ExtendedGUID();
     this.DataElementExtendedGUID = this.DataElementExtendedGUID.TryParse(s);
     this.SerialNumber = new SerialNumber();
     this.SerialNumber = this.SerialNumber.TryParse(s);
     this.DataElementType = new CompactUnsigned64bitInteger();
     this.DataElementType = this.DataElementType.TryParse(s);
     this.CellManifestCurrentRevision = new bit16StreamObjectHeaderStart();
     this.CellManifestCurrentRevision.Parse(s);
     this.CellManifestCurrentRevisionExtendedGUID = new ExtendedGUID();
     this.CellManifestCurrentRevisionExtendedGUID = this.CellManifestCurrentRevisionExtendedGUID.TryParse(s);
     this.DataElementEnd = new bit8StreamObjectHeaderEnd();
     this.DataElementEnd.Parse(s);
 }
        /// <summary>
        /// Parse the WaterlineKnowledgeEntry structure.
        /// </summary>
        /// <param name="s">An stream containing WaterlineKnowledgeEntry structure.</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);
            this.waterlineKnowledgeEntry = new bit16StreamObjectHeaderStart();
            this.waterlineKnowledgeEntry.Parse(s);
            this.CellStorageExtendedGUID = new ExtendedGUID();
            this.CellStorageExtendedGUID = this.CellStorageExtendedGUID.TryParse(s);

            this.Waterline = new CompactUnsigned64bitInteger();
            this.Waterline = this.Waterline.TryParse(s);
            this.Reserved = new CompactUnsigned64bitInteger();
            this.Reserved = this.Reserved.TryParse(s);
        }
 /// <summary>
 /// Parse the AllocateExtendedGUIDRangeRequest structure.
 /// </summary>
 /// <param name="s">An stream containing AllocateExtendedGUIDRangeRequest structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.allocateExtendedGUIDRangeRequest = new bit32StreamObjectHeaderStart();
     this.allocateExtendedGUIDRangeRequest.Parse(s);
     this.RequestIdCount = new CompactUnsigned64bitInteger();
     this.RequestIdCount = this.RequestIdCount.TryParse(s);
     this.Reserved = ReadByte();
 }
        /// <summary>
        /// Parse the StorageIndexDataElement structure.
        /// </summary>
        /// <param name="s">An stream containing StorageIndexDataElement structure.</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);
            this.DataElementStart = new bit16StreamObjectHeaderStart();
            this.DataElementStart.Parse(s);
            this.DataElementExtendedGUID = new ExtendedGUID();
            this.DataElementExtendedGUID = this.DataElementExtendedGUID.TryParse(s);
            this.SerialNumber = new SerialNumber();
            this.SerialNumber = this.SerialNumber.TryParse(s);
            this.DataElementType = new CompactUnsigned64bitInteger();
            this.DataElementType = this.DataElementType.TryParse(s);

            int StorageIndexType = (CurrentByte() >> 3) & 0x3F;
            List<object> DataList = new List<object>();
            while ((CurrentByte() & 0x03) == 0x0 && (StorageIndexType == 0x11 || StorageIndexType == 0x0E || StorageIndexType == 0x0D))
            {
                switch (StorageIndexType)
                {
                    case 0x11:
                        StorageIndexManifestMappingValues ManifestMappingValue = new StorageIndexManifestMappingValues();
                        ManifestMappingValue.Parse(s);
                        DataList.Add(ManifestMappingValue);
                        break;
                    case 0x0E:
                        StorageIndexCellMappingValues CellMappingValue = new StorageIndexCellMappingValues();
                        CellMappingValue.Parse(s);
                        DataList.Add(CellMappingValue);
                        break;
                    case 0x0D:
                        StorageIndexRevisionMappingValues RevisionMappingValue = new StorageIndexRevisionMappingValues();
                        RevisionMappingValue.Parse(s);
                        DataList.Add(RevisionMappingValue);
                        break;
                    default:
                        throw new Exception("The StorageIndexType is not right.");
                }
                StorageIndexType = (CurrentByte() >> 3) & 0x3F;
            }
            this.StorageIndexDataElementData = DataList.ToArray();
            this.DataElementEnd = new bit8StreamObjectHeaderEnd();
            this.DataElementEnd.Parse(s);
        }
 /// <summary>
 /// get Uint feild in StreamObjectHeader structure.
 /// </summary>
 /// <returns>The value of Uint feild</returns>
 public ulong GetUint(CompactUnsigned64bitInteger objectVal)
 {
     if (objectVal is CompactUintZero)
     {
         return (objectVal as CompactUintZero).Uint;
     }
     else if (objectVal is CompactUint7bitvalues)
     {
         return (objectVal as CompactUint7bitvalues).Uint;
     }
     else if (objectVal is CompactUint14bitvalues)
     {
         return (objectVal as CompactUint14bitvalues).Uint;
     }
     else if (objectVal is CompactUint21bitvalues)
     {
         return (objectVal as CompactUint21bitvalues).Uint;
     }
     else if (objectVal is CompactUint28bitvalues)
     {
         return (objectVal as CompactUint28bitvalues).Uint;
     }
     else if (objectVal is CompactUint35bitvalues)
     {
         return (objectVal as CompactUint35bitvalues).Uint;
     }
     else if (objectVal is CompactUint42bitvalues)
     {
         return (objectVal as CompactUint42bitvalues).Uint;
     }
     else if (objectVal is CompactUint49bitvalues)
     {
         return (objectVal as CompactUint49bitvalues).Uint;
     }
     else if (objectVal is CompactUint64bitvalues)
     {
         return (objectVal as CompactUint64bitvalues).Uint;
     }
     else
     {
         throw new Exception("The CompactUnsigned64bitInteger type is not right.");
     }
 }
        /// <summary>
        /// Parse the FragmentKnowledgeEntry structure.
        /// </summary>
        /// <param name="s">An stream containing FragmentKnowledgeEntry structure.</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);
            this.FragmentDescriptor = new bit32StreamObjectHeaderStart();
            this.FragmentDescriptor.Parse(s);
            this.ExtendedGUID = new ExtendedGUID();
            this.ExtendedGUID = this.ExtendedGUID.TryParse(s);

            this.DataElementSize = new CompactUnsigned64bitInteger();
            this.DataElementSize = this.DataElementSize.TryParse(s);
            this.DataElementChunkReference = new FileChunkReference();
            this.DataElementChunkReference.Parse(s);
        }
        /// <summary>
        /// Parse the Filter structure.
        /// </summary>
        /// <param name="s">An stream containing Filter structure.</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);
            this.queryChangesRequest = new bit32StreamObjectHeaderStart();
            this.queryChangesRequest.Parse(s);
            byte tempByte = ReadByte();
            this.A = GetBits(tempByte, 0, 1);
            this.B = GetBits(tempByte, 1, 1);
            this.C = GetBits(tempByte, 2, 1);
            this.D = GetBits(tempByte, 3, 1);
            this.E = GetBits(tempByte, 4, 1);
            this.F = GetBits(tempByte, 5, 1);
            this.G = GetBits(tempByte, 6, 2);
            this.queryChangesRequestArguments = new bit32StreamObjectHeaderStart();
            this.queryChangesRequestArguments.Parse(s);
            byte tempByte2 = ReadByte();
            this.F2 = GetBits(tempByte2, 0, 1);
            this.G2 = GetBits(tempByte2, 1, 1);
            this.H = GetBits(tempByte2, 2, 6);
            this.CellID = new CellID();
            this.CellID.Parse(s);
            if (ContainsStreamObjectHeader(0x059))
            {
                this.QueryChangesDataConstraints = new bit32StreamObjectHeaderStart();
                this.QueryChangesDataConstraints.Parse(s);
            }
            if (this.QueryChangesDataConstraints != null)
            {
                this.MaxDataElements = new CompactUnsigned64bitInteger();
                this.MaxDataElements = this.MaxDataElements.TryParse(s);
            }

            //TODO£ºThe below two fields are newly add in TD, but they have not conatined in the capture data for sharepoint 2013 server
            //this.MajorVersionNumber = new CompactUnsigned64bitInteger();
            //this.MajorVersionNumber = this.MajorVersionNumber.TryParse(s);
            //this.MinorVersionNumber = new CompactUnsigned64bitInteger();
            //this.MinorVersionNumber = this.MinorVersionNumber.TryParse(s);
            List<Filter> FilterList = new List<Filter>();
            while (ContainsStreamObjectHeader(0x47))
            {
                Filter tempFilter = new Filter();
                FilterList.Add(tempFilter);
            }
            this.QueryChangesFilters = FilterList.ToArray();

            if (ContainsStreamObjectHeader(0x10))
            {
                this.Knowledge = new Knowledge();
                this.Knowledge.Parse(s);
            }
        }
 /// <summary>
 /// Parse the DataElementTypeFilter structure.
 /// </summary>
 /// <param name="s">An stream containing DataElementTypeFilter structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.QueryChangesFilterDataElementType = new bit32StreamObjectHeaderStart();
     this.QueryChangesFilterDataElementType.Parse(s);
     this.DataElementType = new CompactUnsigned64bitInteger();
     this.DataElementType = this.DataElementType.TryParse(s);
 }
 /// <summary>
 /// Parse the FileChunkReference structure.
 /// </summary>
 /// <param name="s">An stream containing FileChunkReference structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.Start = new CompactUnsigned64bitInteger();
     this.Start = this.Start.TryParse(s);
     this.Length = new CompactUnsigned64bitInteger();
     this.Length = this.Length.TryParse(s);
 }
 /// <summary>
 /// Parse the DataElementHash structure.
 /// </summary>
 /// <param name="s">An stream containing DataElementHash structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.DataElementHashDeclaration = new StreamObjectHeader();
     this.DataElementHashDeclaration = this.DataElementHashDeclaration.TryParse(s);
     this.DataElementHashScheme = new CompactUnsigned64bitInteger();
     this.DataElementHashScheme = this.DataElementHashScheme.TryParse(s);
     this.DataElementHashData = new BinaryItem();
     this.DataElementHashData.Parse(s);
 }
 /// <summary>
 /// Parse the DataElementFragmentDataElement structure.
 /// </summary>
 /// <param name="s">An stream containing DataElementFragmentDataElement structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.DataElementStart = new bit16StreamObjectHeaderStart();
     this.DataElementStart.Parse(s);
     this.DataElementExtendedGUID = new ExtendedGUID();
     this.DataElementExtendedGUID = this.DataElementExtendedGUID.TryParse(s);
     this.SerialNumber = new SerialNumber();
     this.SerialNumber = this.SerialNumber.TryParse(s);
     this.DataElementType = new CompactUnsigned64bitInteger();
     this.DataElementType = this.DataElementType.TryParse(s);
     this.DataElementFragment = new bit32StreamObjectHeaderStart();
     this.DataElementFragment.Parse(s);
     this.FragmentExtendedGUID = new ExtendedGUID();
     this.FragmentExtendedGUID = this.FragmentExtendedGUID.TryParse(s);
     this.FragmentDataElementSize = new CompactUnsigned64bitInteger();
     this.FragmentDataElementSize = this.FragmentDataElementSize.TryParse(s);
     this.FragmentFileChunkReference = new FileChunkReference();
     this.FragmentFileChunkReference.Parse(s);
     this.FragmentData = new BinaryItem();
     this.FragmentData.Parse(s);
     this.DataElementEnd = new bit8StreamObjectHeaderEnd();
     this.DataElementEnd.Parse(s);
 }
 /// <summary>
 /// Parse the CompactUnsigned64bitInteger structure.
 /// </summary>
 /// <param name="s">An stream containing CompactUnsigned64bitInteger structure.</param>
 public CompactUnsigned64bitInteger TryParse(Stream s)
 {
     base.Parse(s);
     byte temp = ReadByte();
     s.Position -= 1;
     CompactUnsigned64bitInteger compactUint64 = new CompactUnsigned64bitInteger();
     if (temp == 0x0)
     {
         compactUint64 = new CompactUintZero();
         compactUint64.Parse(s);
     }
     else if ((temp & 0x01) == 0x01)
     {
         compactUint64 = new CompactUint7bitvalues();
         compactUint64.Parse(s);
     }
     else if ((temp & 0x03) == 0x02)
     {
         compactUint64 = new CompactUint14bitvalues();
         compactUint64.Parse(s);
     }
     else if ((temp & 0x07) == 0x04)
     {
         compactUint64 = new CompactUint21bitvalues();
         compactUint64.Parse(s);
     }
     else if ((temp & 0x0F) == 0x08)
     {
         compactUint64 = new CompactUint28bitvalues();
         compactUint64.Parse(s);
     }
     else if ((temp & 0x1F) == 0x10)
     {
         compactUint64 = new CompactUint35bitvalues();
         compactUint64.Parse(s);
     }
     else if ((temp & 0x3F) == 0x20)
     {
         compactUint64 = new CompactUint42bitvalues();
         compactUint64.Parse(s);
     }
     else if ((temp & 0x7F) == 0x40)
     {
         compactUint64 = new CompactUint49bitvalues();
         compactUint64.Parse(s);
     }
     else if (temp == 0x80)
     {
         compactUint64 = new CompactUint64bitvalues();
         compactUint64.Parse(s);
     }
     return compactUint64;
 }
        /// <summary>
        /// Parse the ObjectGroupDataElements structure.
        /// </summary>
        /// <param name="s">An stream containing ObjectGroupDataElements structure.</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);
            this.DataElementStart = new bit16StreamObjectHeaderStart();
            this.DataElementStart.Parse(s);
            this.DataElementExtendedGUID = new ExtendedGUID();
            this.DataElementExtendedGUID = this.DataElementExtendedGUID.TryParse(s);
            this.SerialNumber = new SerialNumber();
            this.SerialNumber = this.SerialNumber.TryParse(s);
            this.DataElementType = new CompactUnsigned64bitInteger();
            this.DataElementType = this.DataElementType.TryParse(s);

            if (ContainsStreamObjectHeader(0x06))
            {
                this.DataElementHash = new DataElementHash();
                this.DataElementHash.Parse(s);
            }
            this.ObjectGroupDeclarationsStart = new StreamObjectHeader();
            this.ObjectGroupDeclarationsStart = this.ObjectGroupDeclarationsStart.TryParse(s);

            List<object> DeclarationList = new List<object>();
            while (ContainsStreamObjectHeader(0x18) || ContainsStreamObjectHeader(0x05))
            {
                if (ContainsStreamObjectHeader(0x18))
                {
                    ObjectDeclaration Declaration = new ObjectDeclaration();
                    Declaration.Parse(s);
                    DeclarationList.Add(Declaration);
                }
                else if (ContainsStreamObjectHeader(0x05))
                {
                    ObjectDataBLOBDeclaration DeclarationBLOB = new ObjectDataBLOBDeclaration();
                    DeclarationBLOB.Parse(s);
                    DeclarationList.Add(DeclarationBLOB);
                }
            }
            this.ObjectDeclarationOrObjectDataBLOBDeclaration = DeclarationList.ToArray();
            this.ObjectGroupDeclarationsEnd = new bit8StreamObjectHeaderEnd();
            this.ObjectGroupDeclarationsEnd.Parse(s);

            if (ContainsStreamObjectHeader(0x79))
            {
                this.ObjectMetadataDeclaration = new ObjectMetadataDeclaration();
                this.ObjectMetadataDeclaration.Parse(s);
            }

            this.ObjectGroupDataStart = new StreamObjectHeader();
            this.ObjectGroupDataStart = this.ObjectGroupDataStart.TryParse(s);

            List<object> ObjectDataList = new List<object>();
            while (ContainsStreamObjectHeader(0x16) || ContainsStreamObjectHeader(0x1C))
            {
                if (ContainsStreamObjectHeader(0x16))
                {
                    ObjectData data = new ObjectData();
                    data.Parse(s);
                    ObjectDataList.Add(data);
                }
                else if (ContainsStreamObjectHeader(0x1C))
                {
                    ObjectDataBLOBReference DataBLOB = new ObjectDataBLOBReference();
                    DataBLOB.Parse(s);
                    ObjectDataList.Add(DataBLOB);
                }
            }
            this.ObjectDataOrObjectDataBLOBReference = ObjectDataList.ToArray();

            this.ObjectGroupDataEnd = new bit8StreamObjectHeaderEnd();
            this.ObjectGroupDataEnd.Parse(s);
            this.DataElementEnd = new bit8StreamObjectHeaderEnd();
            this.DataElementEnd.Parse(s);
        }
        /// <summary>
        /// Parse the FsshttpbRequest structure.
        /// </summary>
        /// <param name="s">An stream containing FsshttpbRequest structure.</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);
            this.ProtocolVersion = ReadUshort();
            this.MinimumVersion = ReadUshort();
            this.Signature = ReadUlong();
            this.RequestStart = new bit32StreamObjectHeaderStart();
            this.RequestStart.Parse(s);
            this.UserAgentStart = new bit32StreamObjectHeaderStart();
            this.UserAgentStart.Parse(s);
            if (ContainsStreamObjectHeader(0x055))
            {
                this.UserAgentGUID = new bit32StreamObjectHeaderStart();
                this.UserAgentGUID.Parse(s);
            }
            if (this.UserAgentGUID != null)
            {
                this.GUID = ReadGuid();
            }
            if (ContainsStreamObjectHeader(0x8B))
            {
                this.UserAgentClientAndPlatform = new bit32StreamObjectHeaderStart();
                this.UserAgentClientAndPlatform.Parse(s);
            }

            if (this.UserAgentClientAndPlatform != null)
            {
                this.ClientCount = new CompactUnsigned64bitInteger();
                this.ClientCount = this.ClientCount.TryParse(s);
                this.ClientByteArray = ReadBytes((int)this.ClientCount.GetUint(this.ClientCount));
                this.PlatformCount = new CompactUnsigned64bitInteger();
                this.PlatformCount = this.PlatformCount.TryParse(s);
                this.PlatformByteArray = ReadBytes((int)this.PlatformCount.GetUint(this.PlatformCount));
            }

            this.UserAgentVersion = new bit32StreamObjectHeaderStart();
            this.UserAgentVersion.Parse(s);
            this.Version = ReadUint();
            this.UserAgentEnd = new bit16StreamObjectHeaderEnd();
            this.UserAgentEnd.Parse(s);
            if (ContainsStreamObjectHeader(0x8D))//TODO: This should be 0x88 accroding to TD, but in the capture files of sharepoint server 2013, it is 0x8D.
            {
                this.RequestHashingOptionsDeclaration = new bit32StreamObjectHeaderStart();
                this.RequestHashingOptionsDeclaration.Parse(s);
            }

            if (this.RequestHashingOptionsDeclaration != null)
            {
                // TODO: Missing fields (A B C D E) here, because it's seems these is not containd in capture files of sharepoint server 13.
                this.RequestHasingSchema = new CompactUnsigned64bitInteger();
                this.RequestHasingSchema = this.RequestHasingSchema.TryParse(s);
            }

            if (ContainsStreamObjectHeader(0x042))
            {
                List<FsshttpbSubRequest> tempRequest = new List<FsshttpbSubRequest>();
                do
                {
                    FsshttpbSubRequest subRequest = new FsshttpbSubRequest();
                    subRequest.Parse(s);
                    tempRequest.Add(subRequest);
                    this.SubRequest = tempRequest.ToArray();
                } while (ContainsStreamObjectHeader(0x042));
            }
            if (ContainsStreamObjectHeader(0x15))
            {
                this.DataElementPackage = new DataElementPackage();
                this.DataElementPackage.Parse(s);
            }
            this.RequestEnd = new bit16StreamObjectHeaderEnd();
            this.RequestEnd.Parse(s);
        }
 /// <summary>
 /// Parse the ObjectMetadata structure.
 /// </summary>
 /// <param name="s">An stream containing ObjectMetadata structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.ObjectGroupMetadata = new bit32StreamObjectHeaderStart();
     this.ObjectGroupMetadata.Parse(s);
     this.ObjectChangeFrequency = new CompactUnsigned64bitInteger();
     this.ObjectChangeFrequency = this.ObjectChangeFrequency.TryParse(s);
 }
        /// <summary>
        /// Parse the FsshttpbSubRequests structure.
        /// </summary>
        /// <param name="s">An stream containing FsshttpbSubRequests structure.</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);
            this.SubRequestStart = new bit32StreamObjectHeaderStart();
            this.SubRequestStart.Parse(s);
            this.RequestID = new CompactUnsigned64bitInteger();
            this.RequestID = this.RequestID.TryParse(s);
            this.RequestType = new CompactUnsigned64bitInteger();
            this.RequestType = this.RequestType.TryParse(s);
            this.Priority = new CompactUnsigned64bitInteger();
            this.Priority = this.Priority.TryParse(s);
            if (ContainsStreamObjectHeader(0x83))
            {
                this.TargetPartitionId = new TargetPartitionId();
                this.TargetPartitionId.Parse(s);
            }

            switch (RequestType.GetUint(RequestType))
            {
                case 0x01:
                    this.SubRequestData = new QueryAccessRequest();
                    break;
                case 0x02:
                    this.SubRequestData = new QueryChangesRequest();
                    ((QueryChangesRequest)this.SubRequestData).Parse(s);
                    break;
                case 0x05:
                    this.SubRequestData = new PutChangesRequest();
                    ((PutChangesRequest)this.SubRequestData).Parse(s);
                    break;
                case 0x0B:
                    this.SubRequestData = new AllocateExtendedGUIDRangeRequest();
                    ((AllocateExtendedGUIDRangeRequest)this.SubRequestData).Parse(s);
                    break;
                default:
                    throw new Exception("The RequestType is not right.");
            }
            this.SubRequestEnd = new bit16StreamObjectHeaderEnd();
            this.SubRequestEnd.Parse(s);
        }
        /// <summary>
        /// Parse the RevisionManifestDataElement structure.
        /// </summary>
        /// <param name="s">An stream containing RevisionManifestDataElement structure.</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);
            this.DataElementStart = new bit16StreamObjectHeaderStart();
            this.DataElementStart.Parse(s);
            this.DataElementExtendedGUID = new ExtendedGUID();
            this.DataElementExtendedGUID = this.DataElementExtendedGUID.TryParse(s);
            this.SerialNumber = new SerialNumber();
            this.SerialNumber = this.SerialNumber.TryParse(s);
            this.DataElementType = new CompactUnsigned64bitInteger();
            this.DataElementType = this.DataElementType.TryParse(s);
            this.RevisionManifest = new bit16StreamObjectHeaderStart();
            this.RevisionManifest.Parse(s);
            this.RevisionID = new ExtendedGUID();
            this.RevisionID = this.RevisionID.TryParse(s);
            this.BaseRevisionID = new ExtendedGUID();
            this.BaseRevisionID = this.BaseRevisionID.TryParse(s);

            int RevisionType = (CurrentByte() >> 3) & 0x3F;
            List<object> DataList = new List<object>();
            while ((CurrentByte() & 0x03) == 0x0 && (RevisionType == 0x0A || RevisionType == 0x19))
            {
                switch (RevisionType)
                {
                    case 0x0A:
                        {
                            RevisionManifestRootDeclareValues RootDeclareValue = new RevisionManifestRootDeclareValues();
                            RootDeclareValue.Parse(s);
                            DataList.Add(RootDeclareValue);
                            break;
                        }
                    case 0x19:
                        {
                            RevisionManifestObjectGroupReferencesValues ObjectGroupReferencesValue = new RevisionManifestObjectGroupReferencesValues();
                            ObjectGroupReferencesValue.Parse(s);
                            DataList.Add(ObjectGroupReferencesValue);
                            break;
                        }
                    default:
                        throw new Exception("The RevisionType is not right.");
                }
                RevisionType = (CurrentByte() >> 3) & 0x3F;
            }

            this.RevisionManifestDataElementsData = DataList.ToArray();
            this.DataElementEnd = new bit8StreamObjectHeaderEnd();
            this.DataElementEnd.Parse(s);
        }
        /// <summary>
        /// Parse the FsshttpbSubResponse structure.
        /// </summary>
        /// <param name="s">An stream containing FsshttpbSubResponse structure.</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);
            this.SubResponseStart = new bit32StreamObjectHeaderStart();
            this.SubResponseStart.Parse(s);
            this.RequestID = new CompactUnsigned64bitInteger();
            this.RequestID = RequestID.TryParse(s);
            this.RequestType = new CompactUnsigned64bitInteger();
            this.RequestType = RequestType.TryParse(s);
            byte tempByte = ReadByte();
            this.Status = GetBits(tempByte, 0, 1);
            this.Reserved = GetBits(tempByte, 1, 7);
            if (this.Status == 0x1)
            {
                this.ResponseError = new ResponseError();
                this.ResponseError.Parse(s);
            }
            else
            {
                if (this.RequestType.GetUint(RequestType) == 0x01)
                {
                    this.SubResponseData = new QueryAccessResponse();
                    ((QueryAccessResponse)this.SubResponseData).Parse(s);
                }
                else if (this.RequestType.GetUint(RequestType) == 0x02)
                {
                    this.SubResponseData = new QueryChangesResponse();
                    ((QueryChangesResponse)this.SubResponseData).Parse(s);
                }
                else if (this.RequestType.GetUint(RequestType) == 0x05)
                {
                    this.SubResponseData = new PutChangesResponse();
                    ((PutChangesResponse)this.SubResponseData).Parse(s);
                }
                else if (this.RequestType.GetUint(RequestType) == 0x0B)
                {
                    this.SubResponseData = new AllocateExtendedGUIDRange();
                    ((AllocateExtendedGUIDRange)this.SubResponseData).Parse(s);
                }

            }
            this.SubResponseEnd = new bit16StreamObjectHeaderEnd();
            this.SubResponseEnd.Parse(s);
        }
 /// <summary>
 /// Parse the StorageManifestDataElement structure.
 /// </summary>
 /// <param name="s">An stream containing StorageManifestDataElement structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.DataElementStart = new bit16StreamObjectHeaderStart();
     this.DataElementStart.Parse(s);
     this.DataElementExtendedGUID = new ExtendedGUID();
     this.DataElementExtendedGUID = this.DataElementExtendedGUID.TryParse(s);
     this.SerialNumber = new SerialNumber();
     this.SerialNumber = this.SerialNumber.TryParse(s);
     this.DataElementType = new CompactUnsigned64bitInteger();
     this.DataElementType = this.DataElementType.TryParse(s);
     this.StorageManifestSchemaGUID = new bit16StreamObjectHeaderStart();
     this.StorageManifestSchemaGUID.Parse(s);
     this.GUID = ReadGuid();
     List<StorageManifestRootDeclareValues> StorageManifestRootDeclareList = new List<StorageManifestRootDeclareValues>();
     while ((CurrentByte() & 0x03) == 0x0 && ((CurrentByte() >> 3) & 0x3F) == 0x07)
     {
         StorageManifestRootDeclareValues tempStorageManifestRootDeclare = new StorageManifestRootDeclareValues();
         tempStorageManifestRootDeclare.Parse(s);
         StorageManifestRootDeclareList.Add(tempStorageManifestRootDeclare);
     }
     this.StorageManifestRootDeclare = StorageManifestRootDeclareList.ToArray();
     this.DataElementEnd = new bit8StreamObjectHeaderEnd();
     this.DataElementEnd.Parse(s);
 }
 /// <summary>
 /// Parse the HierarchyFilter structure.
 /// </summary>
 /// <param name="s">An stream containing HierarchyFilter structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.QueryChangesFilterHierarchy = new bit32StreamObjectHeaderStart();
     this.QueryChangesFilterHierarchy.Parse(s);
     this.Depth = (HierarchyFilterDepth)ReadByte();
     this.Count = new CompactUnsigned64bitInteger();
     this.Count = this.Count.TryParse(s);
     this.RootIndexKeyByteArray = ReadBytes((int)this.Count.GetUint(this.Count));
 }
 /// <summary>
 /// Parse the StringItem structure.
 /// </summary>
 /// <param name="s">An stream containing StringItem structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.Count = new CompactUnsigned64bitInteger();
     this.Count = this.Count.TryParse(s);
     this.Content = ReadString(System.Text.Encoding.Unicode, "", (int)Count.GetUint(Count));
 }
        /// <summary>
        /// Parse the ObjectData structure.
        /// </summary>
        /// <param name="s">An stream containing ObjectData structure.</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);
            this.ObjectGroupObjectDataOrExcludedData = new StreamObjectHeader();
            this.ObjectGroupObjectDataOrExcludedData = this.ObjectGroupObjectDataOrExcludedData.TryParse(s);
            this.ObjectExtendedGUIDArray = new ExtendedGUIDArray();
            this.ObjectExtendedGUIDArray.Parse(s);
            this.CellIDArray = new CellIDArray();
            this.CellIDArray.Parse(s);
            this.DataSize = new CompactUnsigned64bitInteger();
            this.DataSize = this.DataSize.TryParse(s);

            if (ContainsStreamObjectHeader(0x20))
            {
                this.Data = new IntermediateNodeObjectData();
                ((IntermediateNodeObjectData)this.Data).Parse(s);

            }
            else if (ContainsStreamObjectHeader(0x1F))
            {
                this.Data = new LeafNodeObjectData();
                ((LeafNodeObjectData)this.Data).Parse(s);
            }
            else
            {
                byte[] dataarray = ReadBytes((int)this.DataSize.GetUint(this.DataSize));
                this.Data = dataarray;
            }
        }
 /// <summary>
 /// Parse the AllocateExtendedGUIDRange structure.
 /// </summary>
 /// <param name="s">An stream containing AllocateExtendedGUIDRange structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.AllocateExtendedGUIDRangeResponse = new bit32StreamObjectHeaderStart();
     this.AllocateExtendedGUIDRangeResponse.Parse(s);
     this.GUIDComponent = ReadGuid();
     this.IntegerRangeMin = new CompactUnsigned64bitInteger();
     this.IntegerRangeMin = this.IntegerRangeMin.TryParse(s);
     this.IntegerRangeMax = new CompactUnsigned64bitInteger();
     this.IntegerRangeMax = this.IntegerRangeMax.TryParse(s);
 }
 /// <summary>
 /// Parse the ObjectDataBLOBDataElements structure.
 /// </summary>
 /// <param name="s">An stream containing ObjectDataBLOBDataElements structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.DataElementStart = new bit16StreamObjectHeaderStart();
     this.DataElementStart.Parse(s);
     this.DataElementExtendedGUID = new ExtendedGUID();
     this.DataElementExtendedGUID = this.DataElementExtendedGUID.TryParse(s);
     this.SerialNumber = new SerialNumber();
     this.SerialNumber = this.SerialNumber.TryParse(s);
     this.DataElementType = new CompactUnsigned64bitInteger();
     this.DataElementType = this.DataElementType.TryParse(s);
     this.ObjectDataBLOB = new StreamObjectHeader();
     this.ObjectDataBLOB = this.ObjectDataBLOB.TryParse(s);
     this.Data = new BinaryItem();
     this.Data.Parse(s);
     this.DataElementEnd = new bit8StreamObjectHeaderEnd();
     this.DataElementEnd.Parse(s);
 }
 /// <summary>
 /// Parse the StringItem structure.
 /// </summary>
 /// <param name="s">An stream containing StringItem structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.Length = new CompactUnsigned64bitInteger();
     this.Length = this.Length.TryParse(s);
     this.Content = ReadBytes((int)Length.GetUint(Length));
 }
 /// <summary>
 /// Parse the ObjectDeclaration structure.
 /// </summary>
 /// <param name="s">An stream containing ObjectDeclaration structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.ObjectGroupObjectDeclaration = new StreamObjectHeader();
     this.ObjectGroupObjectDeclaration = this.ObjectGroupObjectDeclaration.TryParse(s);
     this.ObjectExtendedGUID = new ExtendedGUID();
     this.ObjectExtendedGUID = this.ObjectExtendedGUID.TryParse(s);
     this.ObjectPartitionID = new CompactUnsigned64bitInteger();
     this.ObjectPartitionID = this.ObjectPartitionID.TryParse(s);
     this.ObjectDataSize = new CompactUnsigned64bitInteger();
     this.ObjectDataSize = this.ObjectDataSize.TryParse(s);
     this.ObjectReferencesCount = new CompactUnsigned64bitInteger();
     this.ObjectReferencesCount = this.ObjectReferencesCount.TryParse(s);
     this.CellReferencesCount = new CompactUnsigned64bitInteger();
     this.CellReferencesCount = this.CellReferencesCount.TryParse(s);
 }
 /// <summary>
 /// Parse the CellIDArray structure.
 /// </summary>
 /// <param name="s">An stream containing CellIDArray structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.Count = new CompactUnsigned64bitInteger();
     this.Count = this.Count.TryParse(s);
     List<CellID> tempContent = new List<CellID>();
     if (this.Count.GetUint(Count) > 0)
     {
         ulong tempCount = this.Count.GetUint(Count);
         CellID tempGuid = new CellID();
         do
         {
             tempGuid.Parse(s);
             tempContent.Add(tempGuid);
             tempCount--;
         } while (tempCount > 0);
         this.Content = tempContent.ToArray();
     }
 }
 /// <summary>
 /// Parse the CellKnowledgeRange structure.
 /// </summary>
 /// <param name="s">An stream containing CellKnowledgeRange structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.cellKnowledgeRange = new bit16StreamObjectHeaderStart();
     this.cellKnowledgeRange.Parse(s);
     this.GUID = ReadGuid();
     this.From = new CompactUnsigned64bitInteger();
     this.From = this.From.TryParse(s);
     this.To = new CompactUnsigned64bitInteger();
     this.To = this.To.TryParse(s);
 }