/// <summary>Deserializes an intermediate XML file into a managed object.</summary>
        /// <param name="input">Intermediate XML file.</param>
        /// <param name="referenceRelocationPath">Final name of the output file used to relative encode external reference filenames.</param>
        public static T Deserialize <T>(XmlReader input, string referenceRelocationPath)
        {
            if (input == null)
            {
                throw new ArgumentNullException("input");
            }
            Uri baseUri = IntermediateSerializer.RelocationPathToUri(referenceRelocationPath);
            IntermediateReader intermediateReader = new IntermediateReader(IntermediateSerializer.SingletonInstance, input, baseUri);
            T result;

            try
            {
                if (!intermediateReader.MoveToElement("XnaContent"))
                {
                    throw intermediateReader.CreateInvalidContentException(Resources.NotIntermediateXml, new object[0]);
                }
                input.ReadStartElement();
                T t = intermediateReader.ReadObject <T>(new ContentSerializerAttribute
                {
                    ElementName = "Asset"
                });
                intermediateReader.ReadSharedResources();
                intermediateReader.ReadExternalReferences();
                input.ReadEndElement();
                result = t;
            }
            catch (XmlException ex)
            {
                throw intermediateReader.CreateInvalidContentException(ex, Resources.XmDeserializelException, new object[]
                {
                    ex.Message
                });
            }
            catch (FormatException ex2)
            {
                throw intermediateReader.CreateInvalidContentException(ex2, Resources.XmDeserializelException, new object[]
                {
                    ex2.Message
                });
            }
            catch (OverflowException ex3)
            {
                throw intermediateReader.CreateInvalidContentException(ex3, Resources.XmDeserializelException, new object[]
                {
                    ex3.Message
                });
            }
            catch (ArgumentException ex4)
            {
                throw intermediateReader.CreateInvalidContentException(ex4, Resources.XmDeserializelException, new object[]
                {
                    ex4.Message
                });
            }
            return(result);
        }