Decompiled source of MirageCore v1.0.3

FSharp.Core/FSharp.Core.dll

Decompiled 2 weeks ago
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Net;
using System.Numerics;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.ExceptionServices;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Security;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using <StartupCode$FSharp-Core>;
using Microsoft.FSharp.Collections;
using Microsoft.FSharp.Control;
using Microsoft.FSharp.Core;
using Microsoft.FSharp.Core.CompilerServices;
using Microsoft.FSharp.Linq;
using Microsoft.FSharp.Linq.RuntimeHelpers;
using Microsoft.FSharp.Primitives.Basics;
using Microsoft.FSharp.Quotations;
using Microsoft.FSharp.Reflection;
using Microsoft.FSharp.Text.StructuredPrintfImpl;

[assembly: FSharpInterfaceDataVersion(2, 0, 0)]
[assembly: AssemblyCompany("Microsoft Corporation")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("© Microsoft Corporation. All rights reserved.")]
[assembly: AssemblyFileVersion("9.1.24.52202")]
[assembly: AssemblyInformationalVersion("9.0.100-beta.24522.2+f07a91420bec3f657153e16c9f047cf151c1179f")]
[assembly: AssemblyProduct("FSharp.Core")]
[assembly: AssemblyTitle("FSharp.Core")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/dotnet/fsharp")]
[assembly: NeutralResourcesLanguage("en-US")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: ComVisible(false)]
[assembly: CLSCompliant(true)]
[assembly: SecurityTransparent]
[assembly: AutoOpen("Microsoft.FSharp")]
[assembly: AutoOpen("Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators")]
[assembly: AutoOpen("Microsoft.FSharp.Core")]
[assembly: AutoOpen("Microsoft.FSharp.Collections")]
[assembly: AutoOpen("Microsoft.FSharp.Control")]
[assembly: AutoOpen("Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority")]
[assembly: AutoOpen("Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority")]
[assembly: AutoOpen("Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority")]
[assembly: AutoOpen("Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority")]
[assembly: AutoOpen("Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority")]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("9.0.0.0")]
[assembly: TypeForwardedTo(typeof(AggregateException))]
[assembly: TypeForwardedTo(typeof(IStructuralComparable))]
[assembly: TypeForwardedTo(typeof(IStructuralEquatable))]
[assembly: TypeForwardedTo(typeof(IObservable<>))]
[assembly: TypeForwardedTo(typeof(IObserver<>))]
[assembly: TypeForwardedTo(typeof(Lazy<>))]
[assembly: TypeForwardedTo(typeof(BigInteger))]
[assembly: TypeForwardedTo(typeof(CancellationToken))]
[assembly: TypeForwardedTo(typeof(CancellationTokenRegistration))]
[assembly: TypeForwardedTo(typeof(CancellationTokenSource))]
[assembly: TypeForwardedTo(typeof(Tuple))]
[assembly: TypeForwardedTo(typeof(Tuple<>))]
[assembly: TypeForwardedTo(typeof(Tuple<, >))]
[assembly: TypeForwardedTo(typeof(Tuple<, , >))]
[assembly: TypeForwardedTo(typeof(Tuple<, , , >))]
[assembly: TypeForwardedTo(typeof(Tuple<, , , , >))]
[assembly: TypeForwardedTo(typeof(Tuple<, , , , , >))]
[assembly: TypeForwardedTo(typeof(Tuple<, , , , , , >))]
[assembly: TypeForwardedTo(typeof(Tuple<, , , , , , , >))]
namespace Microsoft.FSharp.Core
{
	[Serializable]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class Unit : IComparable
	{
		internal Unit()
		{
		}

		public override int GetHashCode()
		{
			return 0;
		}

		public override bool Equals(object obj)
		{
			if (obj != null)
			{
				if (LanguagePrimitives.IntrinsicFunctions.TypeTestGeneric<Unit>(obj))
				{
					return true;
				}
				return false;
			}
			return true;
		}

		virtual int IComparable.CompareTo(object _obj)
		{
			return 0;
		}
	}
	[Serializable]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public enum SourceConstructFlags
	{
		None = 0,
		SumType = 1,
		RecordType = 2,
		ObjectType = 3,
		Field = 4,
		Exception = 5,
		Closure = 6,
		Module = 7,
		UnionCase = 8,
		Value = 9,
		KindMask = 31,
		NonPublicRepresentation = 32
	}
	[Serializable]
	[Flags]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public enum CompilationRepresentationFlags
	{
		None = 0,
		Static = 1,
		Instance = 2,
		ModuleSuffix = 4,
		UseNullAsTrueValue = 8,
		Event = 0x10
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class SealedAttribute : Attribute
	{
		internal bool value;

		public bool Value => value;

		public SealedAttribute(bool value)
		{
			this.value = value;
		}

		public SealedAttribute()
			: this(value: true)
		{
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class AbstractClassAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.GenericParameter, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class EqualityConditionalOnAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.GenericParameter, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class ComparisonConditionalOnAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class AllowNullLiteralAttribute : Attribute
	{
		internal bool value;

		public bool Value => value;

		public AllowNullLiteralAttribute(bool value)
		{
			this.value = value;
		}

		public AllowNullLiteralAttribute()
			: this(value: true)
		{
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Field, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class VolatileFieldAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class DefaultAugmentationAttribute : Attribute
	{
		internal bool value;

		public bool Value => value;

		public DefaultAugmentationAttribute(bool value)
		{
			this.value = value;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CLIEventAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CLIMutableAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class AutoSerializableAttribute : Attribute
	{
		internal bool value;

		public bool Value => value;

		public AutoSerializableAttribute(bool value)
		{
			this.value = value;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Field, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class DefaultValueAttribute : Attribute
	{
		internal bool check;

		public bool Check => check;

		public DefaultValueAttribute(bool check)
		{
			this.check = check;
		}

		public DefaultValueAttribute()
			: this(check: true)
		{
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class EntryPointAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class ReferenceEqualityAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class StructuralComparisonAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class StructuralEqualityAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class NoEqualityAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CustomEqualityAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CustomComparisonAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class NoComparisonAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Parameter | AttributeTargets.Delegate, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class ReflectedDefinitionAttribute : Attribute
	{
		internal bool includeValue;

		public bool IncludeValue => includeValue;

		public ReflectedDefinitionAttribute(bool includeValue)
		{
			this.includeValue = includeValue;
		}

		public ReflectedDefinitionAttribute()
			: this(includeValue: false)
		{
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CompiledNameAttribute : Attribute
	{
		internal string compiledName;

		public string CompiledName => compiledName;

		public CompiledNameAttribute(string compiledName)
		{
			this.compiledName = compiledName;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.ReturnValue, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class StructAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.GenericParameter, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class MeasureAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class MeasureAnnotatedAbbreviationAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Interface, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class InterfaceAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class ClassAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Field, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class LiteralAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class FSharpInterfaceDataVersionAttribute : Attribute
	{
		internal int release;

		internal int minor;

		internal int major;

		public int Major => major;

		public int Minor => minor;

		public int Release => release;

		public FSharpInterfaceDataVersionAttribute(int major, int minor, int release)
		{
			this.major = major;
			this.minor = minor;
			this.release = release;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CompilationMappingAttribute : Attribute
	{
		internal int variantNumber;

		internal Type[] typeDefinitions;

		internal SourceConstructFlags sourceConstructFlags;

		internal int sequenceNumber;

		internal string resourceName;

		public SourceConstructFlags SourceConstructFlags => sourceConstructFlags;

		public int SequenceNumber => sequenceNumber;

		public int VariantNumber => variantNumber;

		public Type[] TypeDefinitions => typeDefinitions;

		public string ResourceName => resourceName;

		internal CompilationMappingAttribute(SourceConstructFlags sourceConstructFlags, int variantNumber, int sequenceNumber, string resourceName, Type[] typeDefinitions)
		{
			this.sourceConstructFlags = sourceConstructFlags;
			this.variantNumber = variantNumber;
			this.sequenceNumber = sequenceNumber;
			this.resourceName = resourceName;
			this.typeDefinitions = typeDefinitions;
		}

		public CompilationMappingAttribute(SourceConstructFlags sourceConstructFlags)
			: this(sourceConstructFlags, 0, 0)
		{
		}

		public CompilationMappingAttribute(SourceConstructFlags sourceConstructFlags, int sequenceNumber)
			: this(sourceConstructFlags, 0, sequenceNumber)
		{
		}

		public CompilationMappingAttribute(SourceConstructFlags sourceConstructFlags, int variantNumber, int sequenceNumber)
			: this(sourceConstructFlags, variantNumber, sequenceNumber, null, null)
		{
		}

		public CompilationMappingAttribute(string resourceName, Type[] typeDefinitions)
			: this(SourceConstructFlags.None, 0, 0, resourceName, typeDefinitions)
		{
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CompilationSourceNameAttribute : Attribute
	{
		internal string sourceName;

		public string SourceName => sourceName;

		public CompilationSourceNameAttribute(string sourceName)
		{
			this.sourceName = sourceName;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CompilationRepresentationAttribute : Attribute
	{
		internal CompilationRepresentationFlags flags;

		public CompilationRepresentationFlags Flags => flags;

		public CompilationRepresentationAttribute(CompilationRepresentationFlags flags)
		{
			this.flags = flags;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class ExperimentalAttribute : Attribute
	{
		internal string message;

		public string Message => message;

		public ExperimentalAttribute(string message)
		{
			this.message = message;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class InlineIfLambdaAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CompilationArgumentCountsAttribute : Attribute
	{
		internal int[] counts;

		public IEnumerable<int> Counts => (IEnumerable<int>)counts.Clone();

		public CompilationArgumentCountsAttribute(int[] counts)
		{
			this.counts = counts;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CustomOperationAttribute : Attribute
	{
		internal string name;

		internal bool isBinary;

		internal bool allowInto;

		internal bool isJoin;

		internal bool isGroupJoin;

		internal bool maintainsVarSpace;

		internal bool maintainsVarSpaceWithBind;

		internal string joinOnWord;

		public string Name => name;

		public bool AllowIntoPattern
		{
			get
			{
				return allowInto;
			}
			set
			{
				allowInto = value;
			}
		}

		public bool IsLikeZip
		{
			get
			{
				return isBinary;
			}
			set
			{
				isBinary = value;
			}
		}

		public bool IsLikeJoin
		{
			get
			{
				return isJoin;
			}
			set
			{
				isJoin = value;
			}
		}

		public bool IsLikeGroupJoin
		{
			get
			{
				return isGroupJoin;
			}
			set
			{
				isGroupJoin = value;
			}
		}

		public string JoinConditionWord
		{
			get
			{
				return joinOnWord;
			}
			set
			{
				joinOnWord = value;
			}
		}

		public bool MaintainsVariableSpace
		{
			get
			{
				return maintainsVarSpace;
			}
			set
			{
				maintainsVarSpace = value;
			}
		}

		public bool MaintainsVariableSpaceUsingBind
		{
			get
			{
				return maintainsVarSpaceWithBind;
			}
			set
			{
				maintainsVarSpaceWithBind = value;
			}
		}

		public CustomOperationAttribute(string name)
		{
			this.name = name;
			isBinary = false;
			allowInto = false;
			isJoin = false;
			isGroupJoin = false;
			maintainsVarSpace = false;
			maintainsVarSpaceWithBind = false;
			joinOnWord = "";
		}

		public CustomOperationAttribute()
			: this("")
		{
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class ProjectionParameterAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class StructuredFormatDisplayAttribute : Attribute
	{
		internal string value;

		public string Value => value;

		public StructuredFormatDisplayAttribute(string value)
		{
			this.value = value;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CompilerMessageAttribute : Attribute
	{
		internal int messageNumber;

		internal string message;

		internal bool isError;

		internal bool isHidden;

		public string Message => message;

		public int MessageNumber => messageNumber;

		public bool IsError
		{
			get
			{
				return isError;
			}
			set
			{
				isError = value;
			}
		}

		public bool IsHidden
		{
			get
			{
				return isHidden;
			}
			set
			{
				isHidden = value;
			}
		}

		public CompilerMessageAttribute(string message, int messageNumber)
		{
			this.message = message;
			this.messageNumber = messageNumber;
			isError = false;
			isHidden = false;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class UnverifiableAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class NoDynamicInvocationAttribute : Attribute
	{
		internal bool isLegacy;

		internal bool IsLegacy => isLegacy;

		internal NoDynamicInvocationAttribute(bool isLegacy)
		{
			this.isLegacy = isLegacy;
		}

		public NoDynamicInvocationAttribute()
			: this(isLegacy: false)
		{
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class OptionalArgumentAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class GeneralizableValueAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class RequiresExplicitTypeArgumentsAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class RequireQualifiedAccessAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = true)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class AutoOpenAttribute : Attribute
	{
		internal string path;

		public string Path => path;

		public AutoOpenAttribute(string path)
		{
			this.path = path;
		}

		public AutoOpenAttribute()
			: this("")
		{
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	internal sealed class ValueAsStaticPropertyAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class NoCompilerInliningAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class WarnOnWithoutNullArgumentAttribute : Attribute
	{
		internal string warningMessage;

		internal bool Localize@;

		public string WarningMessage => warningMessage;

		internal bool Localize
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Localize@;
			}
			[CompilerGenerated]
			[DebuggerNonUserCode]
			set
			{
				Localize@ = value;
			}
		}

		public WarnOnWithoutNullArgumentAttribute(string warningMessage)
		{
			this.warningMessage = warningMessage;
			Localize@ = false;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class TailCallAttribute : Attribute
	{
	}
}
namespace System.Diagnostics.CodeAnalysis
{
	[Serializable]
	[Flags]
	[RequireQualifiedAccess]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	internal enum DynamicallyAccessedMemberTypes
	{
		None = 0,
		PublicParameterlessConstructor = 1,
		PublicConstructors = 3,
		NonPublicConstructors = 4,
		PublicMethods = 8,
		NonPublicMethods = 0x10,
		PublicFields = 0x20,
		NonPublicFields = 0x40,
		PublicNestedTypes = 0x80,
		NonPublicNestedTypes = 0x100,
		PublicProperties = 0x200,
		NonPublicProperties = 0x400,
		PublicEvents = 0x800,
		NonPublicEvents = 0x1000,
		Interfaces = 0x2000,
		All = -1
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, Inherited = false)]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	internal class DynamicallyAccessedMembersAttribute : Attribute
	{
		internal DynamicallyAccessedMemberTypes MemberTypes@;

		internal DynamicallyAccessedMemberTypes MemberTypes
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return MemberTypes@;
			}
			[CompilerGenerated]
			[DebuggerNonUserCode]
			set
			{
				MemberTypes@ = value;
			}
		}

		public DynamicallyAccessedMembersAttribute(DynamicallyAccessedMemberTypes memberTypes)
		{
			MemberTypes@ = memberTypes;
		}

		internal void DynamicallyAccessedMembersAttribute(DynamicallyAccessedMemberTypes memberTypes)
		{
			MemberTypes@ = memberTypes;
		}
	}
}
namespace Microsoft.FSharp.Core
{
	[Serializable]
	[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
	[StructuralEquality]
	[StructuralComparison]
	[CompiledName("FSharpChoice`2")]
	[CompilationMapping(SourceConstructFlags.SumType)]
	public abstract class FSharpChoice<T1, T2> : IEquatable<FSharpChoice<T1, T2>>, IStructuralEquatable, IComparable<FSharpChoice<T1, T2>>, IComparable, IStructuralComparable
	{
		public static class Tags
		{
			public const int Choice1Of2 = 0;

			public const int Choice2Of2 = 1;
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, >.Choice1Of2@DebugTypeProxy))]
		public class Choice1Of2 : FSharpChoice<T1, T2>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T1 item;

			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice1Of2(T1 item)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, >.Choice2Of2@DebugTypeProxy))]
		public class Choice2Of2 : FSharpChoice<T1, T2>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T2 item;

			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice2Of2(T2 item)
			{
				this.item = item;
			}
		}

		[SpecialName]
		internal class Choice1Of2@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice1Of2@DebugTypeProxy(Choice1Of2 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice2Of2@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice2Of2@DebugTypeProxy(Choice2Of2 obj)
			{
				_obj = obj;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public int Tag
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return (this is Choice2Of2) ? 1 : 0;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice1Of2
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is Choice1Of2;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice2Of2
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is Choice2Of2;
			}
		}

		[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, >))]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal FSharpChoice()
		{
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 0)]
		public static FSharpChoice<T1, T2> NewChoice1Of2(T1 item)
		{
			return new Choice1Of2(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 1)]
		public static FSharpChoice<T1, T2> NewChoice2Of2(T2 item)
		{
			return new Choice2Of2(item);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(FSharpChoice<T1, T2> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int num = ((this is Choice2Of2) ? 1 : 0);
					int num2 = ((obj is Choice2Of2) ? 1 : 0);
					if (num == num2)
					{
						IComparer genericComparer;
						if (this is Choice1Of2)
						{
							Choice1Of2 choice1Of = (Choice1Of2)this;
							Choice1Of2 choice1Of2 = (Choice1Of2)obj;
							genericComparer = LanguagePrimitives.GenericComparer;
							T1 item = choice1Of.item;
							T1 item2 = choice1Of2.item;
							return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(genericComparer, item, item2);
						}
						Choice2Of2 choice2Of = (Choice2Of2)this;
						Choice2Of2 choice2Of2 = (Choice2Of2)obj;
						genericComparer = LanguagePrimitives.GenericComparer;
						T2 item3 = choice2Of.item;
						T2 item4 = choice2Of2.item;
						return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(genericComparer, item3, item4);
					}
					return num - num2;
				}
				return 1;
			}
			if (obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj)
		{
			return CompareTo((FSharpChoice<T1, T2>)obj);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj, IComparer comp)
		{
			FSharpChoice<T1, T2> fSharpChoice = (FSharpChoice<T1, T2>)obj;
			if (this != null)
			{
				if ((FSharpChoice<T1, T2>)obj != null)
				{
					int num = ((this is Choice2Of2) ? 1 : 0);
					FSharpChoice<T1, T2> fSharpChoice2 = fSharpChoice;
					int num2 = ((fSharpChoice2 is Choice2Of2) ? 1 : 0);
					if (num == num2)
					{
						if (this is Choice1Of2)
						{
							Choice1Of2 choice1Of = (Choice1Of2)this;
							Choice1Of2 choice1Of2 = (Choice1Of2)fSharpChoice;
							T1 item = choice1Of.item;
							T1 item2 = choice1Of2.item;
							return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(comp, item, item2);
						}
						Choice2Of2 choice2Of = (Choice2Of2)this;
						Choice2Of2 choice2Of2 = (Choice2Of2)fSharpChoice;
						T2 item3 = choice2Of.item;
						T2 item4 = choice2Of2.item;
						return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(comp, item3, item4);
					}
					return num - num2;
				}
				return 1;
			}
			if ((FSharpChoice<T1, T2>)obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int GetHashCode(IEqualityComparer comp)
		{
			if (this != null)
			{
				int num = 0;
				if (this is Choice1Of2)
				{
					Choice1Of2 choice1Of = (Choice1Of2)this;
					num = 0;
					T1 item = choice1Of.item;
					return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashWithComparerIntrinsic(comp, item) + ((num << 6) + (num >> 2)));
				}
				Choice2Of2 choice2Of = (Choice2Of2)this;
				num = 1;
				T2 item2 = choice2Of.item;
				return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashWithComparerIntrinsic(comp, item2) + ((num << 6) + (num >> 2)));
			}
			return 0;
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public bool Equals(FSharpChoice<T1, T2> obj, IEqualityComparer comp)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int num = ((this is Choice2Of2) ? 1 : 0);
					int num2 = ((obj is Choice2Of2) ? 1 : 0);
					if (num == num2)
					{
						if (this is Choice1Of2)
						{
							Choice1Of2 choice1Of = (Choice1Of2)this;
							Choice1Of2 choice1Of2 = (Choice1Of2)obj;
							T1 item = choice1Of.item;
							T1 item2 = choice1Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityWithComparerIntrinsic(comp, item, item2);
						}
						Choice2Of2 choice2Of = (Choice2Of2)this;
						Choice2Of2 choice2Of2 = (Choice2Of2)obj;
						T2 item3 = choice2Of.item;
						T2 item4 = choice2Of2.item;
						return LanguagePrimitives.HashCompare.GenericEqualityWithComparerIntrinsic(comp, item3, item4);
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (obj is FSharpChoice<T1, T2> obj2)
			{
				return Equals(obj2, comp);
			}
			return false;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(FSharpChoice<T1, T2> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int num = ((this is Choice2Of2) ? 1 : 0);
					int num2 = ((obj is Choice2Of2) ? 1 : 0);
					if (num == num2)
					{
						if (this is Choice1Of2)
						{
							Choice1Of2 choice1Of = (Choice1Of2)this;
							Choice1Of2 choice1Of2 = (Choice1Of2)obj;
							T1 item = choice1Of.item;
							T1 item2 = choice1Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item, item2);
						}
						Choice2Of2 choice2Of = (Choice2Of2)this;
						Choice2Of2 choice2Of2 = (Choice2Of2)obj;
						T2 item3 = choice2Of.item;
						T2 item4 = choice2Of2.item;
						return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item3, item4);
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is FSharpChoice<T1, T2> obj2)
			{
				return Equals(obj2);
			}
			return false;
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
	[StructuralEquality]
	[StructuralComparison]
	[CompiledName("FSharpChoice`3")]
	[CompilationMapping(SourceConstructFlags.SumType)]
	public abstract class FSharpChoice<T1, T2, T3> : IEquatable<FSharpChoice<T1, T2, T3>>, IStructuralEquatable, IComparable<FSharpChoice<T1, T2, T3>>, IComparable, IStructuralComparable
	{
		public static class Tags
		{
			public const int Choice1Of3 = 0;

			public const int Choice2Of3 = 1;

			public const int Choice3Of3 = 2;
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , >.Choice1Of3@DebugTypeProxy))]
		public class Choice1Of3 : FSharpChoice<T1, T2, T3>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T1 item;

			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice1Of3(T1 item)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , >.Choice2Of3@DebugTypeProxy))]
		public class Choice2Of3 : FSharpChoice<T1, T2, T3>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T2 item;

			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice2Of3(T2 item)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , >.Choice3Of3@DebugTypeProxy))]
		public class Choice3Of3 : FSharpChoice<T1, T2, T3>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T3 item;

			[CompilationMapping(SourceConstructFlags.Field, 2, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T3 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice3Of3(T3 item)
			{
				this.item = item;
			}
		}

		[SpecialName]
		internal class Choice1Of3@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice1Of3@DebugTypeProxy(Choice1Of3 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice2Of3@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice2Of3@DebugTypeProxy(Choice2Of3 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice3Of3@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 2, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T3 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice3Of3@DebugTypeProxy(Choice3Of3 obj)
			{
				_obj = obj;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public int Tag
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return (this is Choice3Of3) ? 2 : ((this is Choice2Of3) ? 1 : 0);
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice1Of3
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is Choice1Of3;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice2Of3
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is Choice2Of3;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice3Of3
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is Choice3Of3;
			}
		}

		[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , >))]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal FSharpChoice()
		{
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 0)]
		public static FSharpChoice<T1, T2, T3> NewChoice1Of3(T1 item)
		{
			return new Choice1Of3(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 1)]
		public static FSharpChoice<T1, T2, T3> NewChoice2Of3(T2 item)
		{
			return new Choice2Of3(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 2)]
		public static FSharpChoice<T1, T2, T3> NewChoice3Of3(T3 item)
		{
			return new Choice3Of3(item);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(FSharpChoice<T1, T2, T3> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int num = ((this is Choice3Of3) ? 2 : ((this is Choice2Of3) ? 1 : 0));
					int num2 = ((obj is Choice3Of3) ? 2 : ((obj is Choice2Of3) ? 1 : 0));
					if (num == num2)
					{
						IComparer genericComparer;
						if (!(this is Choice1Of3))
						{
							if (this is Choice2Of3)
							{
								Choice2Of3 choice2Of = (Choice2Of3)this;
								Choice2Of3 choice2Of2 = (Choice2Of3)obj;
								genericComparer = LanguagePrimitives.GenericComparer;
								T2 item = choice2Of.item;
								T2 item2 = choice2Of2.item;
								return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(genericComparer, item, item2);
							}
							if (this is Choice3Of3)
							{
								Choice3Of3 choice3Of = (Choice3Of3)this;
								Choice3Of3 choice3Of2 = (Choice3Of3)obj;
								genericComparer = LanguagePrimitives.GenericComparer;
								T3 item3 = choice3Of.item;
								T3 item4 = choice3Of2.item;
								return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(genericComparer, item3, item4);
							}
						}
						Choice1Of3 choice1Of = (Choice1Of3)this;
						Choice1Of3 choice1Of2 = (Choice1Of3)obj;
						genericComparer = LanguagePrimitives.GenericComparer;
						T1 item5 = choice1Of.item;
						T1 item6 = choice1Of2.item;
						return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(genericComparer, item5, item6);
					}
					return num - num2;
				}
				return 1;
			}
			if (obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj)
		{
			return CompareTo((FSharpChoice<T1, T2, T3>)obj);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj, IComparer comp)
		{
			FSharpChoice<T1, T2, T3> fSharpChoice = (FSharpChoice<T1, T2, T3>)obj;
			if (this != null)
			{
				if ((FSharpChoice<T1, T2, T3>)obj != null)
				{
					int num = ((this is Choice3Of3) ? 2 : ((this is Choice2Of3) ? 1 : 0));
					FSharpChoice<T1, T2, T3> fSharpChoice2 = fSharpChoice;
					int num2 = ((fSharpChoice2 is Choice3Of3) ? 2 : ((fSharpChoice2 is Choice2Of3) ? 1 : 0));
					if (num == num2)
					{
						if (!(this is Choice1Of3))
						{
							if (this is Choice2Of3)
							{
								Choice2Of3 choice2Of = (Choice2Of3)this;
								Choice2Of3 choice2Of2 = (Choice2Of3)fSharpChoice;
								T2 item = choice2Of.item;
								T2 item2 = choice2Of2.item;
								return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(comp, item, item2);
							}
							if (this is Choice3Of3)
							{
								Choice3Of3 choice3Of = (Choice3Of3)this;
								Choice3Of3 choice3Of2 = (Choice3Of3)fSharpChoice;
								T3 item3 = choice3Of.item;
								T3 item4 = choice3Of2.item;
								return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(comp, item3, item4);
							}
						}
						Choice1Of3 choice1Of = (Choice1Of3)this;
						Choice1Of3 choice1Of2 = (Choice1Of3)fSharpChoice;
						T1 item5 = choice1Of.item;
						T1 item6 = choice1Of2.item;
						return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(comp, item5, item6);
					}
					return num - num2;
				}
				return 1;
			}
			if ((FSharpChoice<T1, T2, T3>)obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int GetHashCode(IEqualityComparer comp)
		{
			if (this != null)
			{
				int num = 0;
				if (!(this is Choice1Of3))
				{
					if (this is Choice2Of3)
					{
						Choice2Of3 choice2Of = (Choice2Of3)this;
						num = 1;
						T2 item = choice2Of.item;
						return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashWithComparerIntrinsic(comp, item) + ((num << 6) + (num >> 2)));
					}
					if (this is Choice3Of3)
					{
						Choice3Of3 choice3Of = (Choice3Of3)this;
						num = 2;
						T3 item2 = choice3Of.item;
						return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashWithComparerIntrinsic(comp, item2) + ((num << 6) + (num >> 2)));
					}
				}
				Choice1Of3 choice1Of = (Choice1Of3)this;
				num = 0;
				T1 item3 = choice1Of.item;
				return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashWithComparerIntrinsic(comp, item3) + ((num << 6) + (num >> 2)));
			}
			return 0;
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public bool Equals(FSharpChoice<T1, T2, T3> obj, IEqualityComparer comp)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int num = ((this is Choice3Of3) ? 2 : ((this is Choice2Of3) ? 1 : 0));
					int num2 = ((obj is Choice3Of3) ? 2 : ((obj is Choice2Of3) ? 1 : 0));
					if (num == num2)
					{
						if (!(this is Choice1Of3))
						{
							if (this is Choice2Of3)
							{
								Choice2Of3 choice2Of = (Choice2Of3)this;
								Choice2Of3 choice2Of2 = (Choice2Of3)obj;
								T2 item = choice2Of.item;
								T2 item2 = choice2Of2.item;
								return LanguagePrimitives.HashCompare.GenericEqualityWithComparerIntrinsic(comp, item, item2);
							}
							if (this is Choice3Of3)
							{
								Choice3Of3 choice3Of = (Choice3Of3)this;
								Choice3Of3 choice3Of2 = (Choice3Of3)obj;
								T3 item3 = choice3Of.item;
								T3 item4 = choice3Of2.item;
								return LanguagePrimitives.HashCompare.GenericEqualityWithComparerIntrinsic(comp, item3, item4);
							}
						}
						Choice1Of3 choice1Of = (Choice1Of3)this;
						Choice1Of3 choice1Of2 = (Choice1Of3)obj;
						T1 item5 = choice1Of.item;
						T1 item6 = choice1Of2.item;
						return LanguagePrimitives.HashCompare.GenericEqualityWithComparerIntrinsic(comp, item5, item6);
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (obj is FSharpChoice<T1, T2, T3> obj2)
			{
				return Equals(obj2, comp);
			}
			return false;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(FSharpChoice<T1, T2, T3> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int num = ((this is Choice3Of3) ? 2 : ((this is Choice2Of3) ? 1 : 0));
					int num2 = ((obj is Choice3Of3) ? 2 : ((obj is Choice2Of3) ? 1 : 0));
					if (num == num2)
					{
						if (!(this is Choice1Of3))
						{
							if (this is Choice2Of3)
							{
								Choice2Of3 choice2Of = (Choice2Of3)this;
								Choice2Of3 choice2Of2 = (Choice2Of3)obj;
								T2 item = choice2Of.item;
								T2 item2 = choice2Of2.item;
								return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item, item2);
							}
							if (this is Choice3Of3)
							{
								Choice3Of3 choice3Of = (Choice3Of3)this;
								Choice3Of3 choice3Of2 = (Choice3Of3)obj;
								T3 item3 = choice3Of.item;
								T3 item4 = choice3Of2.item;
								return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item3, item4);
							}
						}
						Choice1Of3 choice1Of = (Choice1Of3)this;
						Choice1Of3 choice1Of2 = (Choice1Of3)obj;
						T1 item5 = choice1Of.item;
						T1 item6 = choice1Of2.item;
						return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item5, item6);
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is FSharpChoice<T1, T2, T3> obj2)
			{
				return Equals(obj2);
			}
			return false;
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
	[StructuralEquality]
	[StructuralComparison]
	[CompiledName("FSharpChoice`4")]
	[CompilationMapping(SourceConstructFlags.SumType)]
	public abstract class FSharpChoice<T1, T2, T3, T4> : IEquatable<FSharpChoice<T1, T2, T3, T4>>, IStructuralEquatable, IComparable<FSharpChoice<T1, T2, T3, T4>>, IComparable, IStructuralComparable
	{
		public static class Tags
		{
			public const int Choice1Of4 = 0;

			public const int Choice2Of4 = 1;

			public const int Choice3Of4 = 2;

			public const int Choice4Of4 = 3;
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , >.Choice1Of4@DebugTypeProxy))]
		public class Choice1Of4 : FSharpChoice<T1, T2, T3, T4>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T1 item;

			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice1Of4(T1 item)
				: base(0)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , >.Choice2Of4@DebugTypeProxy))]
		public class Choice2Of4 : FSharpChoice<T1, T2, T3, T4>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T2 item;

			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice2Of4(T2 item)
				: base(1)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , >.Choice3Of4@DebugTypeProxy))]
		public class Choice3Of4 : FSharpChoice<T1, T2, T3, T4>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T3 item;

			[CompilationMapping(SourceConstructFlags.Field, 2, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T3 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice3Of4(T3 item)
				: base(2)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , >.Choice4Of4@DebugTypeProxy))]
		public class Choice4Of4 : FSharpChoice<T1, T2, T3, T4>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T4 item;

			[CompilationMapping(SourceConstructFlags.Field, 3, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T4 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice4Of4(T4 item)
				: base(3)
			{
				this.item = item;
			}
		}

		[SpecialName]
		internal class Choice1Of4@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice1Of4@DebugTypeProxy(Choice1Of4 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice2Of4@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice2Of4@DebugTypeProxy(Choice2Of4 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice3Of4@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 2, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T3 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice3Of4@DebugTypeProxy(Choice3Of4 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice4Of4@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 3, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T4 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice4Of4@DebugTypeProxy(Choice4Of4 obj)
			{
				_obj = obj;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public int Tag
		{
			[DebuggerNonUserCode]
			get;
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice1Of4
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 0;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice2Of4
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 1;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice3Of4
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 2;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice4Of4
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 3;
			}
		}

		[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , >))]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal FSharpChoice(int _tag)
		{
			this._tag = _tag;
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 0)]
		public static FSharpChoice<T1, T2, T3, T4> NewChoice1Of4(T1 item)
		{
			return new Choice1Of4(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 1)]
		public static FSharpChoice<T1, T2, T3, T4> NewChoice2Of4(T2 item)
		{
			return new Choice2Of4(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 2)]
		public static FSharpChoice<T1, T2, T3, T4> NewChoice3Of4(T3 item)
		{
			return new Choice3Of4(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 3)]
		public static FSharpChoice<T1, T2, T3, T4> NewChoice4Of4(T4 item)
		{
			return new Choice4Of4(item);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(FSharpChoice<T1, T2, T3, T4> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int tag = _tag;
					int tag2 = obj._tag;
					if (tag == tag2)
					{
						switch (Tag)
						{
						default:
						{
							Choice1Of4 choice1Of = (Choice1Of4)this;
							Choice1Of4 choice1Of2 = (Choice1Of4)obj;
							IComparer genericComparer = LanguagePrimitives.GenericComparer;
							T1 item7 = choice1Of.item;
							T1 item8 = choice1Of2.item;
							return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(genericComparer, item7, item8);
						}
						case 1:
						{
							Choice2Of4 choice2Of = (Choice2Of4)this;
							Choice2Of4 choice2Of2 = (Choice2Of4)obj;
							IComparer genericComparer = LanguagePrimitives.GenericComparer;
							T2 item5 = choice2Of.item;
							T2 item6 = choice2Of2.item;
							return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(genericComparer, item5, item6);
						}
						case 2:
						{
							Choice3Of4 choice3Of = (Choice3Of4)this;
							Choice3Of4 choice3Of2 = (Choice3Of4)obj;
							IComparer genericComparer = LanguagePrimitives.GenericComparer;
							T3 item3 = choice3Of.item;
							T3 item4 = choice3Of2.item;
							return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(genericComparer, item3, item4);
						}
						case 3:
						{
							Choice4Of4 choice4Of = (Choice4Of4)this;
							Choice4Of4 choice4Of2 = (Choice4Of4)obj;
							IComparer genericComparer = LanguagePrimitives.GenericComparer;
							T4 item = choice4Of.item;
							T4 item2 = choice4Of2.item;
							return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(genericComparer, item, item2);
						}
						}
					}
					return tag - tag2;
				}
				return 1;
			}
			if (obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj)
		{
			return CompareTo((FSharpChoice<T1, T2, T3, T4>)obj);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj, IComparer comp)
		{
			FSharpChoice<T1, T2, T3, T4> fSharpChoice = (FSharpChoice<T1, T2, T3, T4>)obj;
			if (this != null)
			{
				if ((FSharpChoice<T1, T2, T3, T4>)obj != null)
				{
					int tag = _tag;
					int tag2 = fSharpChoice._tag;
					if (tag == tag2)
					{
						switch (Tag)
						{
						default:
						{
							Choice1Of4 choice1Of = (Choice1Of4)this;
							Choice1Of4 choice1Of2 = (Choice1Of4)fSharpChoice;
							T1 item7 = choice1Of.item;
							T1 item8 = choice1Of2.item;
							return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(comp, item7, item8);
						}
						case 1:
						{
							Choice2Of4 choice2Of = (Choice2Of4)this;
							Choice2Of4 choice2Of2 = (Choice2Of4)fSharpChoice;
							T2 item5 = choice2Of.item;
							T2 item6 = choice2Of2.item;
							return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(comp, item5, item6);
						}
						case 2:
						{
							Choice3Of4 choice3Of = (Choice3Of4)this;
							Choice3Of4 choice3Of2 = (Choice3Of4)fSharpChoice;
							T3 item3 = choice3Of.item;
							T3 item4 = choice3Of2.item;
							return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(comp, item3, item4);
						}
						case 3:
						{
							Choice4Of4 choice4Of = (Choice4Of4)this;
							Choice4Of4 choice4Of2 = (Choice4Of4)fSharpChoice;
							T4 item = choice4Of.item;
							T4 item2 = choice4Of2.item;
							return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(comp, item, item2);
						}
						}
					}
					return tag - tag2;
				}
				return 1;
			}
			if ((FSharpChoice<T1, T2, T3, T4>)obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int GetHashCode(IEqualityComparer comp)
		{
			if (this != null)
			{
				int num = 0;
				switch (Tag)
				{
				default:
				{
					Choice1Of4 choice1Of = (Choice1Of4)this;
					num = 0;
					T1 item4 = choice1Of.item;
					return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashWithComparerIntrinsic(comp, item4) + ((num << 6) + (num >> 2)));
				}
				case 1:
				{
					Choice2Of4 choice2Of = (Choice2Of4)this;
					num = 1;
					T2 item3 = choice2Of.item;
					return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashWithComparerIntrinsic(comp, item3) + ((num << 6) + (num >> 2)));
				}
				case 2:
				{
					Choice3Of4 choice3Of = (Choice3Of4)this;
					num = 2;
					T3 item2 = choice3Of.item;
					return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashWithComparerIntrinsic(comp, item2) + ((num << 6) + (num >> 2)));
				}
				case 3:
				{
					Choice4Of4 choice4Of = (Choice4Of4)this;
					num = 3;
					T4 item = choice4Of.item;
					return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashWithComparerIntrinsic(comp, item) + ((num << 6) + (num >> 2)));
				}
				}
			}
			return 0;
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public bool Equals(FSharpChoice<T1, T2, T3, T4> obj, IEqualityComparer comp)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int tag = _tag;
					int tag2 = obj._tag;
					if (tag == tag2)
					{
						switch (Tag)
						{
						default:
						{
							Choice1Of4 choice1Of = (Choice1Of4)this;
							Choice1Of4 choice1Of2 = (Choice1Of4)obj;
							T1 item7 = choice1Of.item;
							T1 item8 = choice1Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityWithComparerIntrinsic(comp, item7, item8);
						}
						case 1:
						{
							Choice2Of4 choice2Of = (Choice2Of4)this;
							Choice2Of4 choice2Of2 = (Choice2Of4)obj;
							T2 item5 = choice2Of.item;
							T2 item6 = choice2Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityWithComparerIntrinsic(comp, item5, item6);
						}
						case 2:
						{
							Choice3Of4 choice3Of = (Choice3Of4)this;
							Choice3Of4 choice3Of2 = (Choice3Of4)obj;
							T3 item3 = choice3Of.item;
							T3 item4 = choice3Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityWithComparerIntrinsic(comp, item3, item4);
						}
						case 3:
						{
							Choice4Of4 choice4Of = (Choice4Of4)this;
							Choice4Of4 choice4Of2 = (Choice4Of4)obj;
							T4 item = choice4Of.item;
							T4 item2 = choice4Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityWithComparerIntrinsic(comp, item, item2);
						}
						}
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (obj is FSharpChoice<T1, T2, T3, T4> obj2)
			{
				return Equals(obj2, comp);
			}
			return false;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(FSharpChoice<T1, T2, T3, T4> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int tag = _tag;
					int tag2 = obj._tag;
					if (tag == tag2)
					{
						switch (Tag)
						{
						default:
						{
							Choice1Of4 choice1Of = (Choice1Of4)this;
							Choice1Of4 choice1Of2 = (Choice1Of4)obj;
							T1 item7 = choice1Of.item;
							T1 item8 = choice1Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item7, item8);
						}
						case 1:
						{
							Choice2Of4 choice2Of = (Choice2Of4)this;
							Choice2Of4 choice2Of2 = (Choice2Of4)obj;
							T2 item5 = choice2Of.item;
							T2 item6 = choice2Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item5, item6);
						}
						case 2:
						{
							Choice3Of4 choice3Of = (Choice3Of4)this;
							Choice3Of4 choice3Of2 = (Choice3Of4)obj;
							T3 item3 = choice3Of.item;
							T3 item4 = choice3Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item3, item4);
						}
						case 3:
						{
							Choice4Of4 choice4Of = (Choice4Of4)this;
							Choice4Of4 choice4Of2 = (Choice4Of4)obj;
							T4 item = choice4Of.item;
							T4 item2 = choice4Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item, item2);
						}
						}
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is FSharpChoice<T1, T2, T3, T4> obj2)
			{
				return Equals(obj2);
			}
			return false;
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
	[StructuralEquality]
	[StructuralComparison]
	[CompiledName("FSharpChoice`5")]
	[CompilationMapping(SourceConstructFlags.SumType)]
	public abstract class FSharpChoice<T1, T2, T3, T4, T5> : IEquatable<FSharpChoice<T1, T2, T3, T4, T5>>, IStructuralEquatable, IComparable<FSharpChoice<T1, T2, T3, T4, T5>>, IComparable, IStructuralComparable
	{
		public static class Tags
		{
			public const int Choice1Of5 = 0;

			public const int Choice2Of5 = 1;

			public const int Choice3Of5 = 2;

			public const int Choice4Of5 = 3;

			public const int Choice5Of5 = 4;
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , >.Choice1Of5@DebugTypeProxy))]
		public class Choice1Of5 : FSharpChoice<T1, T2, T3, T4, T5>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T1 item;

			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice1Of5(T1 item)
				: base(0)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , >.Choice2Of5@DebugTypeProxy))]
		public class Choice2Of5 : FSharpChoice<T1, T2, T3, T4, T5>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T2 item;

			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice2Of5(T2 item)
				: base(1)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , >.Choice3Of5@DebugTypeProxy))]
		public class Choice3Of5 : FSharpChoice<T1, T2, T3, T4, T5>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T3 item;

			[CompilationMapping(SourceConstructFlags.Field, 2, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T3 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice3Of5(T3 item)
				: base(2)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , >.Choice4Of5@DebugTypeProxy))]
		public class Choice4Of5 : FSharpChoice<T1, T2, T3, T4, T5>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T4 item;

			[CompilationMapping(SourceConstructFlags.Field, 3, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T4 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice4Of5(T4 item)
				: base(3)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , >.Choice5Of5@DebugTypeProxy))]
		public class Choice5Of5 : FSharpChoice<T1, T2, T3, T4, T5>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T5 item;

			[CompilationMapping(SourceConstructFlags.Field, 4, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T5 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice5Of5(T5 item)
				: base(4)
			{
				this.item = item;
			}
		}

		[SpecialName]
		internal class Choice1Of5@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice1Of5@DebugTypeProxy(Choice1Of5 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice2Of5@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice2Of5@DebugTypeProxy(Choice2Of5 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice3Of5@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 2, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T3 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice3Of5@DebugTypeProxy(Choice3Of5 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice4Of5@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 3, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T4 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice4Of5@DebugTypeProxy(Choice4Of5 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice5Of5@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 4, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T5 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice5Of5@DebugTypeProxy(Choice5Of5 obj)
			{
				_obj = obj;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public int Tag
		{
			[DebuggerNonUserCode]
			get;
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice1Of5
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 0;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice2Of5
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 1;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice3Of5
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 2;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice4Of5
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 3;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice5Of5
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 4;
			}
		}

		[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal FSharpChoice(int _tag)
		{
			this._tag = _tag;
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 0)]
		public static FSharpChoice<T1, T2, T3, T4, T5> NewChoice1Of5(T1 item)
		{
			return new Choice1Of5(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 1)]
		public static FSharpChoice<T1, T2, T3, T4, T5> NewChoice2Of5(T2 item)
		{
			return new Choice2Of5(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 2)]
		public static FSharpChoice<T1, T2, T3, T4, T5> NewChoice3Of5(T3 item)
		{
			return new Choice3Of5(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 3)]
		public static FSharpChoice<T1, T2, T3, T4, T5> NewChoice4Of5(T4 item)
		{
			return new Choice4Of5(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 4)]
		public static FSharpChoice<T1, T2, T3, T4, T5> NewChoice5Of5(T5 item)
		{
			return new Choice5Of5(item);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(FSharpChoice<T1, T2, T3, T4, T5> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					return $Prim-types.CompareTo$cont@3723(this, obj, null);
				}
				return 1;
			}
			if (obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj)
		{
			return CompareTo((FSharpChoice<T1, T2, T3, T4, T5>)obj);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj, IComparer comp)
		{
			FSharpChoice<T1, T2, T3, T4, T5> objTemp = (FSharpChoice<T1, T2, T3, T4, T5>)obj;
			if (this != null)
			{
				return $Prim-types.CompareTo$cont@3723-1(comp, this, obj, objTemp, null);
			}
			if ((FSharpChoice<T1, T2, T3, T4, T5>)obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int GetHashCode(IEqualityComparer comp)
		{
			if (this != null)
			{
				int num = 0;
				switch (Tag)
				{
				default:
				{
					Choice1Of5 choice1Of = (Choice1Of5)this;
					num = 0;
					T1 item5 = choice1Of.item;
					return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashWithComparerIntrinsic(comp, item5) + ((num << 6) + (num >> 2)));
				}
				case 1:
				{
					Choice2Of5 choice2Of = (Choice2Of5)this;
					num = 1;
					T2 item4 = choice2Of.item;
					return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashWithComparerIntrinsic(comp, item4) + ((num << 6) + (num >> 2)));
				}
				case 2:
				{
					Choice3Of5 choice3Of = (Choice3Of5)this;
					num = 2;
					T3 item3 = choice3Of.item;
					return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashWithComparerIntrinsic(comp, item3) + ((num << 6) + (num >> 2)));
				}
				case 3:
				{
					Choice4Of5 choice4Of = (Choice4Of5)this;
					num = 3;
					T4 item2 = choice4Of.item;
					return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashWithComparerIntrinsic(comp, item2) + ((num << 6) + (num >> 2)));
				}
				case 4:
				{
					Choice5Of5 choice5Of = (Choice5Of5)this;
					num = 4;
					T5 item = choice5Of.item;
					return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashWithComparerIntrinsic(comp, item) + ((num << 6) + (num >> 2)));
				}
				}
			}
			return 0;
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public bool Equals(FSharpChoice<T1, T2, T3, T4, T5> obj, IEqualityComparer comp)
		{
			if (this != null)
			{
				return $Prim-types.Equals$cont@3723(this, obj, comp, null);
			}
			return obj == null;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (obj is FSharpChoice<T1, T2, T3, T4, T5> obj2)
			{
				return Equals(obj2, comp);
			}
			return false;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(FSharpChoice<T1, T2, T3, T4, T5> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int tag = _tag;
					int tag2 = obj._tag;
					if (tag == tag2)
					{
						switch (Tag)
						{
						default:
						{
							Choice1Of5 choice1Of = (Choice1Of5)this;
							Choice1Of5 choice1Of2 = (Choice1Of5)obj;
							T1 item9 = choice1Of.item;
							T1 item10 = choice1Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item9, item10);
						}
						case 1:
						{
							Choice2Of5 choice2Of = (Choice2Of5)this;
							Choice2Of5 choice2Of2 = (Choice2Of5)obj;
							T2 item7 = choice2Of.item;
							T2 item8 = choice2Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item7, item8);
						}
						case 2:
						{
							Choice3Of5 choice3Of = (Choice3Of5)this;
							Choice3Of5 choice3Of2 = (Choice3Of5)obj;
							T3 item5 = choice3Of.item;
							T3 item6 = choice3Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item5, item6);
						}
						case 3:
						{
							Choice4Of5 choice4Of = (Choice4Of5)this;
							Choice4Of5 choice4Of2 = (Choice4Of5)obj;
							T4 item3 = choice4Of.item;
							T4 item4 = choice4Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item3, item4);
						}
						case 4:
						{
							Choice5Of5 choice5Of = (Choice5Of5)this;
							Choice5Of5 choice5Of2 = (Choice5Of5)obj;
							T5 item = choice5Of.item;
							T5 item2 = choice5Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item, item2);
						}
						}
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is FSharpChoice<T1, T2, T3, T4, T5> obj2)
			{
				return Equals(obj2);
			}
			return false;
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
	[StructuralEquality]
	[StructuralComparison]
	[CompiledName("FSharpChoice`6")]
	[CompilationMapping(SourceConstructFlags.SumType)]
	public abstract class FSharpChoice<T1, T2, T3, T4, T5, T6> : IEquatable<FSharpChoice<T1, T2, T3, T4, T5, T6>>, IStructuralEquatable, IComparable<FSharpChoice<T1, T2, T3, T4, T5, T6>>, IComparable, IStructuralComparable
	{
		public static class Tags
		{
			public const int Choice1Of6 = 0;

			public const int Choice2Of6 = 1;

			public const int Choice3Of6 = 2;

			public const int Choice4Of6 = 3;

			public const int Choice5Of6 = 4;

			public const int Choice6Of6 = 5;
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , , >.Choice1Of6@DebugTypeProxy))]
		public class Choice1Of6 : FSharpChoice<T1, T2, T3, T4, T5, T6>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T1 item;

			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice1Of6(T1 item)
				: base(0)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , , >.Choice2Of6@DebugTypeProxy))]
		public class Choice2Of6 : FSharpChoice<T1, T2, T3, T4, T5, T6>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T2 item;

			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice2Of6(T2 item)
				: base(1)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , , >.Choice3Of6@DebugTypeProxy))]
		public class Choice3Of6 : FSharpChoice<T1, T2, T3, T4, T5, T6>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T3 item;

			[CompilationMapping(SourceConstructFlags.Field, 2, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T3 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice3Of6(T3 item)
				: base(2)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , , >.Choice4Of6@DebugTypeProxy))]
		public class Choice4Of6 : FSharpChoice<T1, T2, T3, T4, T5, T6>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T4 item;

			[CompilationMapping(SourceConstructFlags.Field, 3, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T4 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice4Of6(T4 item)
				: base(3)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , , >.Choice5Of6@DebugTypeProxy))]
		public class Choice5Of6 : FSharpChoice<T1, T2, T3, T4, T5, T6>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T5 item;

			[CompilationMapping(SourceConstructFlags.Field, 4, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T5 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice5Of6(T5 item)
				: base(4)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , , >.Choice6Of6@DebugTypeProxy))]
		public class Choice6Of6 : FSharpChoice<T1, T2, T3, T4, T5, T6>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T6 item;

			[CompilationMapping(SourceConstructFlags.Field, 5, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T6 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice6Of6(T6 item)
				: base(5)
			{
				this.item = item;
			}
		}

		[SpecialName]
		internal class Choice1Of6@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice1Of6@DebugTypeProxy(Choice1Of6 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice2Of6@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice2Of6@DebugTypeProxy(Choice2Of6 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice3Of6@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 2, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T3 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice3Of6@DebugTypeProxy(Choice3Of6 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice4Of6@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 3, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T4 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice4Of6@DebugTypeProxy(Choice4Of6 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice5Of6@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 4, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T5 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice5Of6@DebugTypeProxy(Choice5Of6 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice6Of6@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 5, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T6 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice6Of6@DebugTypeProxy(Choice6Of6 obj)
			{
				_obj = obj;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public int Tag
		{
			[DebuggerNonUserCode]
			get;
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice1Of6
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 0;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice2Of6
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 1;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice3Of6
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 2;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice4Of6
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 3;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice5Of6
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 4;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice6Of6
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 5;
			}
		}

		[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal FSharpChoice(int _tag)
		{
			this._tag = _tag;
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 0)]
		public static FSharpChoice<T1, T2, T3, T4, T5, T6> NewChoice1Of6(T1 item)
		{
			return new Choice1Of6(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 1)]
		public static FSharpChoice<T1, T2, T3, T4, T5, T6> NewChoice2Of6(T2 item)
		{
			return new Choice2Of6(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 2)]
		public static FSharpChoice<T1, T2, T3, T4, T5, T6> NewChoice3Of6(T3 item)
		{
			return new Choice3Of6(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 3)]
		public static FSharpChoice<T1, T2, T3, T4, T5, T6> NewChoice4Of6(T4 item)
		{
			return new Choice4Of6(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 4)]
		public static FSharpChoice<T1, T2, T3, T4, T5, T6> NewChoice5Of6(T5 item)
		{
			return new Choice5Of6(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 5)]
		public static FSharpChoice<T1, T2, T3, T4, T5, T6> NewChoice6Of6(T6 item)
		{
			return new Choice6Of6(item);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(FSharpChoice<T1, T2, T3, T4, T5, T6> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int tag = _tag;
					int tag2 = obj._tag;
					if (tag == tag2)
					{
						return $Prim-types.CompareTo$cont@3732-2(this, obj, null);
					}
					return tag - tag2;
				}
				return 1;
			}
			if (obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj)
		{
			return CompareTo((FSharpChoice<T1, T2, T3, T4, T5, T6>)obj);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj, IComparer comp)
		{
			FSharpChoice<T1, T2, T3, T4, T5, T6> objTemp = (FSharpChoice<T1, T2, T3, T4, T5, T6>)obj;
			if (this != null)
			{
				if ((FSharpChoice<T1, T2, T3, T4, T5, T6>)obj != null)
				{
					return $Prim-types.CompareTo$cont@3732-3(comp, this, objTemp, null);
				}
				return 1;
			}
			if ((FSharpChoice<T1, T2, T3, T4, T5, T6>)obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int GetHashCode(IEqualityComparer comp)
		{
			if (this != null)
			{
				return $Prim-types.GetHashCode$cont@3732(comp, this, null);
			}
			return 0;
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public bool Equals(FSharpChoice<T1, T2, T3, T4, T5, T6> obj, IEqualityComparer comp)
		{
			if (this != null)
			{
				if (obj != null)
				{
					return $Prim-types.Equals$cont@3732-1(this, obj, comp, null);
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (obj is FSharpChoice<T1, T2, T3, T4, T5, T6> obj2)
			{
				return Equals(obj2, comp);
			}
			return false;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(FSharpChoice<T1, T2, T3, T4, T5, T6> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					return $Prim-types.Equals$cont@3732-2(this, obj, null);
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is FSharpChoice<T1, T2, T3, T4, T5, T6> obj2)
			{
				return Equals(obj2);
			}
			return false;
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
	[StructuralEquality]
	[StructuralComparison]
	[CompiledName("FSharpChoice`7")]
	[CompilationMapping(SourceConstructFlags.SumType)]
	public abstract class FSharpChoice<T1, T2, T3, T4, T5, T6, T7> : IEquatable<FSharpChoice<T1, T2, T3, T4, T5, T6, T7>>, IStructuralEquatable, IComparable<FSharpChoice<T1, T2, T3, T4, T5, T6, T7>>, IComparable, IStructuralComparable
	{
		public static class Tags
		{
			public const int Choice1Of7 = 0;

			public const int Choice2Of7 = 1;

			public const int Choice3Of7 = 2;

			public const int Choice4Of7 = 3;

			public const int Choice5Of7 = 4;

			public const int Choice6Of7 = 5;

			public const int Choice7Of7 = 6;
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , , , >.Choice1Of7@DebugTypeProxy))]
		public class Choice1Of7 : FSharpChoice<T1, T2, T3, T4, T5, T6, T7>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T1 item;

			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice1Of7(T1 item)
				: base(0)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , , , >.Choice2Of7@DebugTypeProxy))]
		public class Choice2Of7 : FSharpChoice<T1, T2, T3, T4, T5, T6, T7>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T2 item;

			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice2Of7(T2 item)
				: base(1)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , , , >.Choice3Of7@DebugTypeProxy))]
		public class Choice3Of7 : FSharpChoice<T1, T2, T3, T4, T5, T6, T7>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T3 item;

			[CompilationMapping(SourceConstructFlags.Field, 2, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T3 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberT

Collections.Pooled/Collections.Pooled.dll

Decompiled 2 weeks ago
using System;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Threading;
using Microsoft.CodeAnalysis;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: InternalsVisibleTo("Collections.Pooled.Tests")]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("Joel Mueller")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("Copyright (c) 2018, 2019 Joel Mueller, Dzmitry Lahoda, based on code from the .NET Foundation")]
[assembly: AssemblyDescription("Includes PooledList, PooledDictionary, PooledSet, PooledStack, and PooledQueue: based on the corresponding collections in System.Collections.Generic, but using ArrayPool internally to reduce allocations, and with some API changes that allow for better compatibility with Span.")]
[assembly: AssemblyFileVersion("1.0.82")]
[assembly: AssemblyInformationalVersion("1.0.82")]
[assembly: AssemblyProduct("Collections.Pooled")]
[assembly: AssemblyTitle("Collections.Pooled")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.82.0")]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class IsReadOnlyAttribute : Attribute
	{
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class IsByRefLikeAttribute : Attribute
	{
	}
}
namespace Collections.Pooled
{
	internal ref struct BitHelper
	{
		private const int IntSize = 32;

		private readonly Span<int> _span;

		internal BitHelper(Span<int> span, bool clear)
		{
			if (clear)
			{
				span.Clear();
			}
			_span = span;
		}

		internal void MarkBit(int bitPosition)
		{
			int num = bitPosition / 32;
			if ((uint)num < (uint)_span.Length)
			{
				_span[num] |= 1 << bitPosition % 32;
			}
		}

		internal bool IsMarked(int bitPosition)
		{
			int num = bitPosition / 32;
			if ((uint)num < (uint)_span.Length)
			{
				return (_span[num] & (1 << bitPosition % 32)) != 0;
			}
			return false;
		}

		internal int FindFirstUnmarked(int startPosition = 0)
		{
			int num = startPosition;
			int num2 = num / 32;
			while ((uint)num2 < (uint)_span.Length)
			{
				if ((_span[num2] & (1 << num % 32)) == 0)
				{
					return num;
				}
				num2 = ++num / 32;
			}
			return -1;
		}

		internal int FindFirstMarked(int startPosition = 0)
		{
			int num = startPosition;
			int num2 = num / 32;
			while ((uint)num2 < (uint)_span.Length)
			{
				if ((_span[num2] & (1 << num % 32)) != 0)
				{
					return num;
				}
				num2 = ++num / 32;
			}
			return -1;
		}

		internal static int ToIntArrayLength(int n)
		{
			if (n <= 0)
			{
				return 0;
			}
			return (n - 1) / 32 + 1;
		}
	}
	public enum ClearMode
	{
		Auto,
		Always,
		Never
	}
	internal static class HashHelpers
	{
		public const int HashCollisionThreshold = 100;

		public const int MaxPrimeArrayLength = 2146435069;

		public const int HashPrime = 101;

		public static readonly int[] primes = new int[72]
		{
			3, 7, 11, 17, 23, 29, 37, 47, 59, 71,
			89, 107, 131, 163, 197, 239, 293, 353, 431, 521,
			631, 761, 919, 1103, 1327, 1597, 1931, 2333, 2801, 3371,
			4049, 4861, 5839, 7013, 8419, 10103, 12143, 14591, 17519, 21023,
			25229, 30293, 36353, 43627, 52361, 62851, 75431, 90523, 108631, 130363,
			156437, 187751, 225307, 270371, 324449, 389357, 467237, 560689, 672827, 807403,
			968897, 1162687, 1395263, 1674319, 2009191, 2411033, 2893249, 3471899, 4166287, 4999559,
			5999471, 7199369
		};

		private static ConditionalWeakTable<object, SerializationInfo> s_serializationInfoTable;

		public static ConditionalWeakTable<object, SerializationInfo> SerializationInfoTable
		{
			get
			{
				if (s_serializationInfoTable == null)
				{
					Interlocked.CompareExchange(ref s_serializationInfoTable, new ConditionalWeakTable<object, SerializationInfo>(), null);
				}
				return s_serializationInfoTable;
			}
		}

		public static bool IsPrime(int candidate)
		{
			if (((uint)candidate & (true ? 1u : 0u)) != 0)
			{
				int num = (int)Math.Sqrt(candidate);
				for (int i = 3; i <= num; i += 2)
				{
					if (candidate % i == 0)
					{
						return false;
					}
				}
				return true;
			}
			return candidate == 2;
		}

		public static int GetPrime(int min)
		{
			if (min < 0)
			{
				throw new ArgumentException("Cannot get the next prime from a negative number.");
			}
			for (int i = 0; i < primes.Length; i++)
			{
				int num = primes[i];
				if (num >= min)
				{
					return num;
				}
			}
			for (int j = min | 1; j < int.MaxValue; j += 2)
			{
				if (IsPrime(j) && (j - 1) % 101 != 0)
				{
					return j;
				}
			}
			return min;
		}

		public static int ExpandPrime(int oldSize)
		{
			int num = 2 * oldSize;
			if ((uint)num > 2146435069u && 2146435069 > oldSize)
			{
				return 2146435069;
			}
			return GetPrime(num);
		}
	}
	internal sealed class ICollectionDebugView<T>
	{
		private readonly ICollection<T> _collection;

		[DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
		public T[] Items
		{
			get
			{
				T[] array = new T[_collection.Count];
				_collection.CopyTo(array, 0);
				return array;
			}
		}

		public ICollectionDebugView(ICollection<T> collection)
		{
			_collection = collection ?? throw new ArgumentNullException("collection");
		}
	}
	internal sealed class IDictionaryDebugView<K, V>
	{
		private readonly IDictionary<K, V> _dict;

		[DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
		public KeyValuePair<K, V>[] Items
		{
			get
			{
				KeyValuePair<K, V>[] array = new KeyValuePair<K, V>[_dict.Count];
				_dict.CopyTo(array, 0);
				return array;
			}
		}

		public IDictionaryDebugView(IDictionary<K, V> dictionary)
		{
			_dict = dictionary ?? throw new ArgumentNullException("dictionary");
		}
	}
	internal sealed class DictionaryKeyCollectionDebugView<TKey, TValue>
	{
		private readonly ICollection<TKey> _collection;

		[DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
		public TKey[] Items
		{
			get
			{
				TKey[] array = new TKey[_collection.Count];
				_collection.CopyTo(array, 0);
				return array;
			}
		}

		public DictionaryKeyCollectionDebugView(ICollection<TKey> collection)
		{
			_collection = collection ?? throw new ArgumentNullException("collection");
		}
	}
	internal sealed class DictionaryValueCollectionDebugView<TKey, TValue>
	{
		private readonly ICollection<TValue> _collection;

		[DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
		public TValue[] Items
		{
			get
			{
				TValue[] array = new TValue[_collection.Count];
				_collection.CopyTo(array, 0);
				return array;
			}
		}

		public DictionaryValueCollectionDebugView(ICollection<TValue> collection)
		{
			_collection = collection ?? throw new ArgumentNullException("collection");
		}
	}
	public interface IReadOnlyPooledList<T> : IReadOnlyList<T>, IEnumerable<T>, IEnumerable, IReadOnlyCollection<T>
	{
		ReadOnlySpan<T> Span { get; }
	}
	[Serializable]
	public sealed class NonRandomizedStringEqualityComparer : EqualityComparer<string>, ISerializable
	{
		private static readonly int s_empyStringHashCode = string.Empty.GetHashCode();

		internal new static IEqualityComparer<string> Default { get; } = new NonRandomizedStringEqualityComparer();


		private NonRandomizedStringEqualityComparer()
		{
		}

		private NonRandomizedStringEqualityComparer(SerializationInfo information, StreamingContext context)
		{
		}

		public sealed override bool Equals(string x, string y)
		{
			return string.Equals(x, y);
		}

		public sealed override int GetHashCode(string str)
		{
			if (str != null)
			{
				if (str.Length != 0)
				{
					return GetNonRandomizedHashCode(str);
				}
				return s_empyStringHashCode;
			}
			return 0;
		}

		void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
		{
			info.SetType(typeof(NonRandomizedStringEqualityComparer));
		}

		private unsafe static int GetNonRandomizedHashCode(string str)
		{
			ReadOnlySpan<char> readOnlySpan = str.AsSpan();
			fixed (char* ptr = readOnlySpan)
			{
				uint num = 352654597u;
				uint num2 = num;
				uint* ptr2 = (uint*)ptr;
				int num3 = readOnlySpan.Length;
				while (num3 > 2)
				{
					num3 -= 4;
					num = (((num << 5) | (num >> 27)) + num) ^ *ptr2;
					num2 = (((num2 << 5) | (num2 >> 27)) + num2) ^ ptr2[1];
					ptr2 += 2;
				}
				if (num3 > 0)
				{
					num2 = (((num2 << 5) | (num2 >> 27)) + num2) ^ *ptr2;
				}
				return (int)(num + num2 * 1566083941);
			}
		}
	}
	internal enum InsertionBehavior : byte
	{
		None,
		OverwriteExisting,
		ThrowOnExisting
	}
	[Serializable]
	[DebuggerTypeProxy(typeof(IDictionaryDebugView<, >))]
	[DebuggerDisplay("Count = {Count}")]
	public class PooledDictionary<TKey, TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable, IDictionary, ICollection, IReadOnlyDictionary<TKey, TValue>, IReadOnlyCollection<KeyValuePair<TKey, TValue>>, ISerializable, IDeserializationCallback, IDisposable
	{
		private struct Entry
		{
			public int hashCode;

			public int next;

			public TKey key;

			public TValue value;
		}

		public struct Enumerator : IEnumerator<KeyValuePair<TKey, TValue>>, IEnumerator, IDisposable, IDictionaryEnumerator
		{
			private readonly PooledDictionary<TKey, TValue> _dictionary;

			private readonly int _version;

			private int _index;

			private KeyValuePair<TKey, TValue> _current;

			private readonly int _getEnumeratorRetType;

			internal const int DictEntry = 1;

			internal const int KeyValuePair = 2;

			public KeyValuePair<TKey, TValue> Current => _current;

			object IEnumerator.Current
			{
				get
				{
					if (_index == 0 || _index == _dictionary._count + 1)
					{
						ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumOpCantHappen();
					}
					if (_getEnumeratorRetType == 1)
					{
						return new DictionaryEntry(_current.Key, _current.Value);
					}
					return new KeyValuePair<TKey, TValue>(_current.Key, _current.Value);
				}
			}

			DictionaryEntry IDictionaryEnumerator.Entry
			{
				get
				{
					if (_index == 0 || _index == _dictionary._count + 1)
					{
						ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumOpCantHappen();
					}
					return new DictionaryEntry(_current.Key, _current.Value);
				}
			}

			object IDictionaryEnumerator.Key
			{
				get
				{
					if (_index == 0 || _index == _dictionary._count + 1)
					{
						ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumOpCantHappen();
					}
					return _current.Key;
				}
			}

			object IDictionaryEnumerator.Value
			{
				get
				{
					if (_index == 0 || _index == _dictionary._count + 1)
					{
						ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumOpCantHappen();
					}
					return _current.Value;
				}
			}

			internal Enumerator(PooledDictionary<TKey, TValue> dictionary, int getEnumeratorRetType)
			{
				_dictionary = dictionary;
				_version = dictionary._version;
				_index = 0;
				_getEnumeratorRetType = getEnumeratorRetType;
				_current = default(KeyValuePair<TKey, TValue>);
			}

			public bool MoveNext()
			{
				if (_version != _dictionary._version)
				{
					ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion();
				}
				while ((uint)_index < (uint)_dictionary._count)
				{
					ref Entry reference = ref _dictionary._entries[_index++];
					if (reference.hashCode >= 0)
					{
						_current = new KeyValuePair<TKey, TValue>(reference.key, reference.value);
						return true;
					}
				}
				_index = _dictionary._count + 1;
				_current = default(KeyValuePair<TKey, TValue>);
				return false;
			}

			public void Dispose()
			{
			}

			void IEnumerator.Reset()
			{
				if (_version != _dictionary._version)
				{
					ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion();
				}
				_index = 0;
				_current = default(KeyValuePair<TKey, TValue>);
			}
		}

		[DebuggerTypeProxy(typeof(DictionaryKeyCollectionDebugView<, >))]
		[DebuggerDisplay("Count = {Count}")]
		public sealed class KeyCollection : ICollection<TKey>, IEnumerable<TKey>, IEnumerable, ICollection, IReadOnlyCollection<TKey>
		{
			public struct Enumerator : IEnumerator<TKey>, IEnumerator, IDisposable
			{
				private readonly PooledDictionary<TKey, TValue> _dictionary;

				private int _index;

				private readonly int _version;

				private TKey _currentKey;

				public TKey Current => _currentKey;

				object IEnumerator.Current
				{
					get
					{
						if (_index == 0 || _index == _dictionary._count + 1)
						{
							ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumOpCantHappen();
						}
						return _currentKey;
					}
				}

				internal Enumerator(PooledDictionary<TKey, TValue> dictionary)
				{
					_dictionary = dictionary;
					_version = dictionary._version;
					_index = 0;
					_currentKey = default(TKey);
				}

				public void Dispose()
				{
				}

				public bool MoveNext()
				{
					if (_version != _dictionary._version)
					{
						ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion();
					}
					while ((uint)_index < (uint)_dictionary._count)
					{
						ref Entry reference = ref _dictionary._entries[_index++];
						if (reference.hashCode >= 0)
						{
							_currentKey = reference.key;
							return true;
						}
					}
					_index = _dictionary._count + 1;
					_currentKey = default(TKey);
					return false;
				}

				void IEnumerator.Reset()
				{
					if (_version != _dictionary._version)
					{
						ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion();
					}
					_index = 0;
					_currentKey = default(TKey);
				}
			}

			private readonly PooledDictionary<TKey, TValue> _dictionary;

			public int Count => _dictionary.Count;

			bool ICollection<TKey>.IsReadOnly => true;

			bool ICollection.IsSynchronized => false;

			object ICollection.SyncRoot => ((ICollection)_dictionary).SyncRoot;

			public KeyCollection(PooledDictionary<TKey, TValue> dictionary)
			{
				_dictionary = dictionary ?? throw new ArgumentNullException("dictionary");
			}

			public Enumerator GetEnumerator()
			{
				return new Enumerator(_dictionary);
			}

			public void CopyTo(TKey[] array, int index)
			{
				if (array == null)
				{
					ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
				}
				if (index < 0 || index > array.Length)
				{
					ThrowHelper.ThrowIndexArgumentOutOfRange_NeedNonNegNumException();
				}
				if (array.Length - index < _dictionary.Count)
				{
					ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_ArrayPlusOffTooSmall);
				}
				int count = _dictionary._count;
				Entry[] entries = _dictionary._entries;
				for (int i = 0; i < count; i++)
				{
					if (entries[i].hashCode >= 0)
					{
						array[index++] = entries[i].key;
					}
				}
			}

			void ICollection<TKey>.Add(TKey item)
			{
				ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_KeyCollectionSet);
			}

			void ICollection<TKey>.Clear()
			{
				ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_KeyCollectionSet);
			}

			bool ICollection<TKey>.Contains(TKey item)
			{
				return _dictionary.ContainsKey(item);
			}

			bool ICollection<TKey>.Remove(TKey item)
			{
				ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_KeyCollectionSet);
				return false;
			}

			IEnumerator<TKey> IEnumerable<TKey>.GetEnumerator()
			{
				return new Enumerator(_dictionary);
			}

			IEnumerator IEnumerable.GetEnumerator()
			{
				return new Enumerator(_dictionary);
			}

			void ICollection.CopyTo(Array array, int index)
			{
				if (array == null)
				{
					ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
				}
				if (array.Rank != 1)
				{
					ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_RankMultiDimNotSupported);
				}
				if (array.GetLowerBound(0) != 0)
				{
					ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_NonZeroLowerBound);
				}
				if ((uint)index > (uint)array.Length)
				{
					ThrowHelper.ThrowIndexArgumentOutOfRange_NeedNonNegNumException();
				}
				if (array.Length - index < _dictionary.Count)
				{
					ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_ArrayPlusOffTooSmall);
				}
				if (array is TKey[] array2)
				{
					CopyTo(array2, index);
					return;
				}
				object[] array3 = array as object[];
				if (array3 == null)
				{
					ThrowHelper.ThrowArgumentException_Argument_InvalidArrayType();
				}
				int count = _dictionary._count;
				Entry[] entries = _dictionary._entries;
				try
				{
					for (int i = 0; i < count; i++)
					{
						if (entries[i].hashCode >= 0)
						{
							array3[index++] = entries[i].key;
						}
					}
				}
				catch (ArrayTypeMismatchException)
				{
					ThrowHelper.ThrowArgumentException_Argument_InvalidArrayType();
				}
			}
		}

		[DebuggerTypeProxy(typeof(DictionaryValueCollectionDebugView<, >))]
		[DebuggerDisplay("Count = {Count}")]
		public sealed class ValueCollection : ICollection<TValue>, IEnumerable<TValue>, IEnumerable, ICollection, IReadOnlyCollection<TValue>
		{
			public struct Enumerator : IEnumerator<TValue>, IEnumerator, IDisposable
			{
				private readonly PooledDictionary<TKey, TValue> _dictionary;

				private int _index;

				private readonly int _version;

				private TValue _currentValue;

				public TValue Current => _currentValue;

				object IEnumerator.Current
				{
					get
					{
						if (_index == 0 || _index == _dictionary._count + 1)
						{
							ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumOpCantHappen();
						}
						return _currentValue;
					}
				}

				internal Enumerator(PooledDictionary<TKey, TValue> dictionary)
				{
					_dictionary = dictionary;
					_version = dictionary._version;
					_index = 0;
					_currentValue = default(TValue);
				}

				public void Dispose()
				{
				}

				public bool MoveNext()
				{
					if (_version != _dictionary._version)
					{
						ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion();
					}
					while ((uint)_index < (uint)_dictionary._count)
					{
						ref Entry reference = ref _dictionary._entries[_index++];
						if (reference.hashCode >= 0)
						{
							_currentValue = reference.value;
							return true;
						}
					}
					_index = _dictionary._count + 1;
					_currentValue = default(TValue);
					return false;
				}

				void IEnumerator.Reset()
				{
					if (_version != _dictionary._version)
					{
						ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion();
					}
					_index = 0;
					_currentValue = default(TValue);
				}
			}

			private readonly PooledDictionary<TKey, TValue> _dictionary;

			public int Count => _dictionary.Count;

			bool ICollection<TValue>.IsReadOnly => true;

			bool ICollection.IsSynchronized => false;

			object ICollection.SyncRoot => ((ICollection)_dictionary).SyncRoot;

			public ValueCollection(PooledDictionary<TKey, TValue> dictionary)
			{
				if (dictionary == null)
				{
					ThrowHelper.ThrowArgumentNullException(ExceptionArgument.dictionary);
				}
				_dictionary = dictionary;
			}

			public Enumerator GetEnumerator()
			{
				return new Enumerator(_dictionary);
			}

			public void CopyTo(TValue[] array, int index)
			{
				if (array == null)
				{
					ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
				}
				if (index < 0 || index > array.Length)
				{
					ThrowHelper.ThrowIndexArgumentOutOfRange_NeedNonNegNumException();
				}
				if (array.Length - index < _dictionary.Count)
				{
					ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_ArrayPlusOffTooSmall);
				}
				int count = _dictionary._count;
				Entry[] entries = _dictionary._entries;
				for (int i = 0; i < count; i++)
				{
					if (entries[i].hashCode >= 0)
					{
						array[index++] = entries[i].value;
					}
				}
			}

			void ICollection<TValue>.Add(TValue item)
			{
				ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ValueCollectionSet);
			}

			bool ICollection<TValue>.Remove(TValue item)
			{
				ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ValueCollectionSet);
				return false;
			}

			void ICollection<TValue>.Clear()
			{
				ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ValueCollectionSet);
			}

			bool ICollection<TValue>.Contains(TValue item)
			{
				return _dictionary.ContainsValue(item);
			}

			IEnumerator<TValue> IEnumerable<TValue>.GetEnumerator()
			{
				return new Enumerator(_dictionary);
			}

			IEnumerator IEnumerable.GetEnumerator()
			{
				return new Enumerator(_dictionary);
			}

			void ICollection.CopyTo(Array array, int index)
			{
				if (array == null)
				{
					ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
				}
				if (array.Rank != 1)
				{
					ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_RankMultiDimNotSupported);
				}
				if (array.GetLowerBound(0) != 0)
				{
					ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_NonZeroLowerBound);
				}
				if ((uint)index > (uint)array.Length)
				{
					ThrowHelper.ThrowIndexArgumentOutOfRange_NeedNonNegNumException();
				}
				if (array.Length - index < _dictionary.Count)
				{
					ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_ArrayPlusOffTooSmall);
				}
				if (array is TValue[] array2)
				{
					CopyTo(array2, index);
					return;
				}
				if (array is object[] array3)
				{
					int count = _dictionary._count;
					Entry[] entries = _dictionary._entries;
					try
					{
						for (int i = 0; i < count; i++)
						{
							if (entries[i].hashCode >= 0)
							{
								array3[index++] = entries[i].value;
							}
						}
						return;
					}
					catch (ArrayTypeMismatchException)
					{
						ThrowHelper.ThrowArgumentException_Argument_InvalidArrayType();
						return;
					}
				}
				ThrowHelper.ThrowArgumentException_Argument_InvalidArrayType();
			}
		}

		private const int Lower31BitMask = int.MaxValue;

		private const string VersionName = "Version";

		private const string HashSizeName = "HashSize";

		private const string KeyValuePairsName = "KeyValuePairs";

		private const string ComparerName = "Comparer";

		private const string ClearKeyName = "CK";

		private const string ClearValueName = "CV";

		private static readonly ArrayPool<int> s_bucketPool = ArrayPool<int>.Shared;

		private static readonly ArrayPool<Entry> s_entryPool = ArrayPool<Entry>.Shared;

		private int[] _buckets;

		private Entry[] _entries;

		private int _size;

		private int _count;

		private int _freeList;

		private int _freeCount;

		private int _version;

		private IEqualityComparer<TKey> _comparer;

		private KeyCollection _keys;

		private ValueCollection _values;

		private object _syncRoot;

		private readonly bool _clearKeyOnFree;

		private readonly bool _clearValueOnFree;

		public IEqualityComparer<TKey> Comparer
		{
			get
			{
				if (_comparer != null && !(_comparer is NonRandomizedStringEqualityComparer))
				{
					return _comparer;
				}
				return EqualityComparer<TKey>.Default;
			}
		}

		public int Count => _count - _freeCount;

		public ClearMode KeyClearMode
		{
			get
			{
				if (!_clearKeyOnFree)
				{
					return ClearMode.Never;
				}
				return ClearMode.Always;
			}
		}

		public ClearMode ValueClearMode
		{
			get
			{
				if (!_clearValueOnFree)
				{
					return ClearMode.Never;
				}
				return ClearMode.Always;
			}
		}

		public KeyCollection Keys
		{
			get
			{
				if (_keys == null)
				{
					_keys = new KeyCollection(this);
				}
				return _keys;
			}
		}

		ICollection<TKey> IDictionary<TKey, TValue>.Keys
		{
			get
			{
				if (_keys == null)
				{
					_keys = new KeyCollection(this);
				}
				return _keys;
			}
		}

		IEnumerable<TKey> IReadOnlyDictionary<TKey, TValue>.Keys
		{
			get
			{
				if (_keys == null)
				{
					_keys = new KeyCollection(this);
				}
				return _keys;
			}
		}

		public ValueCollection Values
		{
			get
			{
				if (_values == null)
				{
					_values = new ValueCollection(this);
				}
				return _values;
			}
		}

		ICollection<TValue> IDictionary<TKey, TValue>.Values
		{
			get
			{
				if (_values == null)
				{
					_values = new ValueCollection(this);
				}
				return _values;
			}
		}

		IEnumerable<TValue> IReadOnlyDictionary<TKey, TValue>.Values
		{
			get
			{
				if (_values == null)
				{
					_values = new ValueCollection(this);
				}
				return _values;
			}
		}

		public TValue this[TKey key]
		{
			get
			{
				int num = FindEntry(key);
				if (num >= 0)
				{
					return _entries[num].value;
				}
				ThrowHelper.ThrowKeyNotFoundException(key);
				return default(TValue);
			}
			set
			{
				TryInsert(key, value, InsertionBehavior.OverwriteExisting);
			}
		}

		bool ICollection<KeyValuePair<TKey, TValue>>.IsReadOnly => false;

		bool ICollection.IsSynchronized => false;

		object ICollection.SyncRoot
		{
			get
			{
				if (_syncRoot == null)
				{
					Interlocked.CompareExchange<object>(ref _syncRoot, new object(), (object)null);
				}
				return _syncRoot;
			}
		}

		bool IDictionary.IsFixedSize => false;

		bool IDictionary.IsReadOnly => false;

		ICollection IDictionary.Keys => Keys;

		ICollection IDictionary.Values => Values;

		object IDictionary.this[object key]
		{
			get
			{
				if (IsCompatibleKey(key))
				{
					int num = FindEntry((TKey)key);
					if (num >= 0)
					{
						return _entries[num].value;
					}
				}
				return null;
			}
			set
			{
				if (key == null)
				{
					ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
				}
				ThrowHelper.IfNullAndNullsAreIllegalThenThrow<TValue>(value, ExceptionArgument.value);
				try
				{
					TKey key2 = (TKey)key;
					try
					{
						this[key2] = (TValue)value;
					}
					catch (InvalidCastException)
					{
						ThrowHelper.ThrowWrongValueTypeArgumentException(value, typeof(TValue));
					}
				}
				catch (InvalidCastException)
				{
					ThrowHelper.ThrowWrongKeyTypeArgumentException(key, typeof(TKey));
				}
			}
		}

		public PooledDictionary()
			: this(0, ClearMode.Auto, (IEqualityComparer<TKey>)null)
		{
		}

		public PooledDictionary(ClearMode clearMode)
			: this(0, clearMode, (IEqualityComparer<TKey>)null)
		{
		}

		public PooledDictionary(int capacity)
			: this(capacity, ClearMode.Auto, (IEqualityComparer<TKey>)null)
		{
		}

		public PooledDictionary(int capacity, ClearMode clearMode)
			: this(capacity, clearMode, (IEqualityComparer<TKey>)null)
		{
		}

		public PooledDictionary(IEqualityComparer<TKey> comparer)
			: this(0, ClearMode.Auto, comparer)
		{
		}

		public PooledDictionary(int capacity, IEqualityComparer<TKey> comparer)
			: this(capacity, ClearMode.Auto, comparer)
		{
		}

		public PooledDictionary(ClearMode clearMode, IEqualityComparer<TKey> comparer)
			: this(0, clearMode, comparer)
		{
		}

		public PooledDictionary(int capacity, ClearMode clearMode, IEqualityComparer<TKey> comparer)
		{
			if (capacity < 0)
			{
				ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.capacity);
			}
			if (capacity > 0)
			{
				Initialize(capacity);
			}
			if (comparer != EqualityComparer<TKey>.Default)
			{
				_comparer = comparer;
			}
			_clearKeyOnFree = ShouldClearKey(clearMode);
			_clearValueOnFree = ShouldClearValue(clearMode);
			if (typeof(TKey) == typeof(string) && _comparer == null)
			{
				_comparer = (IEqualityComparer<TKey>)NonRandomizedStringEqualityComparer.Default;
			}
		}

		public PooledDictionary(IDictionary<TKey, TValue> dictionary)
			: this(dictionary, ClearMode.Auto, (IEqualityComparer<TKey>)null)
		{
		}

		public PooledDictionary(IDictionary<TKey, TValue> dictionary, ClearMode clearMode)
			: this(dictionary, clearMode, (IEqualityComparer<TKey>)null)
		{
		}

		public PooledDictionary(IDictionary<TKey, TValue> dictionary, IEqualityComparer<TKey> comparer)
			: this(dictionary, ClearMode.Auto, comparer)
		{
		}

		public PooledDictionary(IDictionary<TKey, TValue> dictionary, ClearMode clearMode, IEqualityComparer<TKey> comparer)
			: this(dictionary?.Count ?? 0, clearMode, comparer)
		{
			if (dictionary == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.dictionary);
			}
			if (dictionary is PooledDictionary<TKey, TValue> pooledDictionary)
			{
				int count = pooledDictionary._count;
				Entry[] entries = pooledDictionary._entries;
				for (int i = 0; i < count; i++)
				{
					if (entries[i].hashCode >= 0)
					{
						TryInsert(entries[i].key, entries[i].value, InsertionBehavior.ThrowOnExisting);
					}
				}
				return;
			}
			foreach (KeyValuePair<TKey, TValue> item in dictionary)
			{
				TryInsert(item.Key, item.Value, InsertionBehavior.ThrowOnExisting);
			}
		}

		public PooledDictionary(IEnumerable<KeyValuePair<TKey, TValue>> collection)
			: this(collection, ClearMode.Auto, (IEqualityComparer<TKey>)null)
		{
		}

		public PooledDictionary(IEnumerable<KeyValuePair<TKey, TValue>> collection, ClearMode clearMode)
			: this(collection, clearMode, (IEqualityComparer<TKey>)null)
		{
		}

		public PooledDictionary(IEnumerable<KeyValuePair<TKey, TValue>> collection, IEqualityComparer<TKey> comparer)
			: this(collection, ClearMode.Auto, comparer)
		{
		}

		public PooledDictionary(IEnumerable<KeyValuePair<TKey, TValue>> collection, ClearMode clearMode, IEqualityComparer<TKey> comparer)
			: this((collection as ICollection<KeyValuePair<TKey, TValue>>)?.Count ?? 0, clearMode, comparer)
		{
			if (collection == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.collection);
			}
			foreach (KeyValuePair<TKey, TValue> item in collection)
			{
				TryInsert(item.Key, item.Value, InsertionBehavior.ThrowOnExisting);
			}
		}

		public PooledDictionary(IEnumerable<(TKey key, TValue value)> collection)
			: this(collection, ClearMode.Auto, (IEqualityComparer<TKey>)null)
		{
		}

		public PooledDictionary(IEnumerable<(TKey key, TValue value)> collection, ClearMode clearMode)
			: this(collection, clearMode, (IEqualityComparer<TKey>)null)
		{
		}

		public PooledDictionary(IEnumerable<(TKey key, TValue value)> collection, IEqualityComparer<TKey> comparer)
			: this(collection, ClearMode.Auto, comparer)
		{
		}

		public PooledDictionary(IEnumerable<(TKey key, TValue value)> collection, ClearMode clearMode, IEqualityComparer<TKey> comparer)
			: this((collection as ICollection<(TKey, TValue)>)?.Count ?? 0, clearMode, comparer)
		{
			if (collection == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.collection);
			}
			foreach (var (key, value) in collection)
			{
				TryInsert(key, value, InsertionBehavior.ThrowOnExisting);
			}
		}

		public PooledDictionary((TKey key, TValue value)[] array)
			: this((ReadOnlySpan<(TKey, TValue)>)array.AsSpan(), ClearMode.Auto, (IEqualityComparer<TKey>)null)
		{
		}

		public PooledDictionary((TKey key, TValue value)[] array, ClearMode clearMode)
			: this((ReadOnlySpan<(TKey, TValue)>)array.AsSpan(), clearMode, (IEqualityComparer<TKey>)null)
		{
		}

		public PooledDictionary((TKey key, TValue value)[] array, IEqualityComparer<TKey> comparer)
			: this((ReadOnlySpan<(TKey, TValue)>)array.AsSpan(), ClearMode.Auto, comparer)
		{
		}

		public PooledDictionary((TKey key, TValue value)[] array, ClearMode clearMode, IEqualityComparer<TKey> comparer)
			: this((ReadOnlySpan<(TKey, TValue)>)array.AsSpan(), clearMode, comparer)
		{
		}

		public PooledDictionary(ReadOnlySpan<(TKey key, TValue value)> span)
			: this(span, ClearMode.Auto, (IEqualityComparer<TKey>)null)
		{
		}

		public PooledDictionary(ReadOnlySpan<(TKey key, TValue value)> span, ClearMode clearMode)
			: this(span, clearMode, (IEqualityComparer<TKey>)null)
		{
		}

		public PooledDictionary(ReadOnlySpan<(TKey key, TValue value)> span, IEqualityComparer<TKey> comparer)
			: this(span, ClearMode.Auto, comparer)
		{
		}

		public PooledDictionary(ReadOnlySpan<(TKey key, TValue value)> span, ClearMode clearMode, IEqualityComparer<TKey> comparer)
			: this(span.Length, clearMode, comparer)
		{
			ReadOnlySpan<(TKey, TValue)> readOnlySpan = span;
			for (int i = 0; i < readOnlySpan.Length; i++)
			{
				var (key, value) = readOnlySpan[i];
				TryInsert(key, value, InsertionBehavior.ThrowOnExisting);
			}
		}

		protected PooledDictionary(SerializationInfo info, StreamingContext context)
		{
			_clearKeyOnFree = ((bool?)info.GetValue("CK", typeof(bool))) ?? ShouldClearKey(ClearMode.Auto);
			_clearValueOnFree = ((bool?)info.GetValue("CV", typeof(bool))) ?? ShouldClearValue(ClearMode.Auto);
			HashHelpers.SerializationInfoTable.Add(this, info);
		}

		public void Add(TKey key, TValue value)
		{
			TryInsert(key, value, InsertionBehavior.ThrowOnExisting);
		}

		public void AddRange(IEnumerable<KeyValuePair<TKey, TValue>> enumerable)
		{
			if (enumerable == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.enumerable);
			}
			if (enumerable is ICollection<KeyValuePair<TKey, TValue>> collection)
			{
				EnsureCapacity(_count + collection.Count);
			}
			foreach (KeyValuePair<TKey, TValue> item in enumerable)
			{
				TryInsert(item.Key, item.Value, InsertionBehavior.ThrowOnExisting);
			}
		}

		public void AddRange(IEnumerable<(TKey key, TValue value)> enumerable)
		{
			if (enumerable == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.enumerable);
			}
			if (enumerable is ICollection<KeyValuePair<TKey, TValue>> collection)
			{
				EnsureCapacity(_count + collection.Count);
			}
			foreach (var (key, value) in enumerable)
			{
				TryInsert(key, value, InsertionBehavior.ThrowOnExisting);
			}
		}

		public void AddRange(ReadOnlySpan<(TKey key, TValue value)> span)
		{
			EnsureCapacity(_count + span.Length);
			ReadOnlySpan<(TKey, TValue)> readOnlySpan = span;
			for (int i = 0; i < readOnlySpan.Length; i++)
			{
				var (key, value) = readOnlySpan[i];
				TryInsert(key, value, InsertionBehavior.ThrowOnExisting);
			}
		}

		public void AddRange((TKey key, TValue value)[] array)
		{
			AddRange(array.AsSpan());
		}

		public void AddOrUpdate(TKey key, TValue addValue, Func<TKey, TValue, TValue> updater)
		{
			if (TryGetValue(key, out var value))
			{
				TValue value2 = updater(key, value);
				TryInsert(key, value2, InsertionBehavior.OverwriteExisting);
			}
			else
			{
				TryInsert(key, addValue, InsertionBehavior.ThrowOnExisting);
			}
		}

		public void AddOrUpdate(TKey key, Func<TKey, TValue> addValueFactory, Func<TKey, TValue, TValue> updater)
		{
			if (TryGetValue(key, out var value))
			{
				TValue value2 = updater(key, value);
				TryInsert(key, value2, InsertionBehavior.OverwriteExisting);
			}
			else
			{
				TValue value3 = addValueFactory(key);
				TryInsert(key, value3, InsertionBehavior.ThrowOnExisting);
			}
		}

		void ICollection<KeyValuePair<TKey, TValue>>.Add(KeyValuePair<TKey, TValue> keyValuePair)
		{
			Add(keyValuePair.Key, keyValuePair.Value);
		}

		bool ICollection<KeyValuePair<TKey, TValue>>.Contains(KeyValuePair<TKey, TValue> keyValuePair)
		{
			int num = FindEntry(keyValuePair.Key);
			if (num >= 0 && EqualityComparer<TValue>.Default.Equals(_entries[num].value, keyValuePair.Value))
			{
				return true;
			}
			return false;
		}

		bool ICollection<KeyValuePair<TKey, TValue>>.Remove(KeyValuePair<TKey, TValue> keyValuePair)
		{
			int num = FindEntry(keyValuePair.Key);
			if (num >= 0 && EqualityComparer<TValue>.Default.Equals(_entries[num].value, keyValuePair.Value))
			{
				Remove(keyValuePair.Key);
				return true;
			}
			return false;
		}

		public void Clear()
		{
			int count = _count;
			if (count > 0)
			{
				Array.Clear(_buckets, 0, _size);
				_count = 0;
				_freeList = -1;
				_freeCount = 0;
				_size = 0;
				Array.Clear(_entries, 0, count);
				_version++;
			}
		}

		public bool ContainsKey(TKey key)
		{
			return FindEntry(key) >= 0;
		}

		public bool ContainsValue(TValue value)
		{
			Entry[] entries = _entries;
			if (value == null)
			{
				for (int i = 0; i < _count; i++)
				{
					if (entries[i].hashCode >= 0 && entries[i].value == null)
					{
						return true;
					}
				}
			}
			else if (default(TValue) != null)
			{
				for (int j = 0; j < _count; j++)
				{
					if (entries[j].hashCode >= 0 && EqualityComparer<TValue>.Default.Equals(entries[j].value, value))
					{
						return true;
					}
				}
			}
			else
			{
				EqualityComparer<TValue> @default = EqualityComparer<TValue>.Default;
				for (int k = 0; k < _count; k++)
				{
					if (entries[k].hashCode >= 0 && @default.Equals(entries[k].value, value))
					{
						return true;
					}
				}
			}
			return false;
		}

		private void CopyTo(KeyValuePair<TKey, TValue>[] array, int index)
		{
			if (array == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
			}
			if ((uint)index > (uint)array.Length)
			{
				ThrowHelper.ThrowIndexArgumentOutOfRange_NeedNonNegNumException();
			}
			if (array.Length - index < Count)
			{
				ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_ArrayPlusOffTooSmall);
			}
			int count = _count;
			Entry[] entries = _entries;
			for (int i = 0; i < count; i++)
			{
				if (entries[i].hashCode >= 0)
				{
					array[index++] = new KeyValuePair<TKey, TValue>(entries[i].key, entries[i].value);
				}
			}
		}

		public Enumerator GetEnumerator()
		{
			return new Enumerator(this, 2);
		}

		IEnumerator<KeyValuePair<TKey, TValue>> IEnumerable<KeyValuePair<TKey, TValue>>.GetEnumerator()
		{
			return new Enumerator(this, 2);
		}

		void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
		{
			GetObjectData(info, context);
		}

		protected virtual void GetObjectData(SerializationInfo info, StreamingContext context)
		{
			if (info == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.info);
			}
			info.AddValue("Version", _version);
			info.AddValue("Comparer", _comparer ?? EqualityComparer<TKey>.Default, typeof(IEqualityComparer<TKey>));
			info.AddValue("HashSize", _size);
			info.AddValue("CK", _clearKeyOnFree);
			info.AddValue("CV", _clearValueOnFree);
			if (_buckets != null)
			{
				KeyValuePair<TKey, TValue>[] array = new KeyValuePair<TKey, TValue>[Count];
				CopyTo(array, 0);
				info.AddValue("KeyValuePairs", array, typeof(KeyValuePair<TKey, TValue>[]));
			}
		}

		private int FindEntry(TKey key)
		{
			if (key == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
			}
			int result = -1;
			int size = _size;
			if (size <= 0)
			{
				return result;
			}
			int[] buckets = _buckets;
			Entry[] entries = _entries;
			int num = 0;
			IEqualityComparer<TKey> comparer = _comparer;
			if (comparer == null)
			{
				int num2 = key.GetHashCode() & 0x7FFFFFFF;
				result = buckets[num2 % size] - 1;
				if (default(TKey) != null)
				{
					while ((uint)result < (uint)size && (entries[result].hashCode != num2 || !EqualityComparer<TKey>.Default.Equals(entries[result].key, key)))
					{
						result = entries[result].next;
						if (num >= size)
						{
							ThrowHelper.ThrowInvalidOperationException_ConcurrentOperationsNotSupported();
						}
						num++;
					}
				}
				else
				{
					EqualityComparer<TKey> @default = EqualityComparer<TKey>.Default;
					while ((uint)result < (uint)size && (entries[result].hashCode != num2 || !@default.Equals(entries[result].key, key)))
					{
						result = entries[result].next;
						if (num >= size)
						{
							ThrowHelper.ThrowInvalidOperationException_ConcurrentOperationsNotSupported();
						}
						num++;
					}
				}
			}
			else
			{
				int num3 = comparer.GetHashCode(key) & 0x7FFFFFFF;
				result = buckets[num3 % size] - 1;
				while ((uint)result < (uint)size && (entries[result].hashCode != num3 || !comparer.Equals(entries[result].key, key)))
				{
					result = entries[result].next;
					if (num >= size)
					{
						ThrowHelper.ThrowInvalidOperationException_ConcurrentOperationsNotSupported();
					}
					num++;
				}
			}
			return result;
		}

		private int Initialize(int capacity)
		{
			_size = HashHelpers.GetPrime(capacity);
			_freeList = -1;
			_buckets = s_bucketPool.Rent(_size);
			Array.Clear(_buckets, 0, _buckets.Length);
			_entries = s_entryPool.Rent(_size);
			return _size;
		}

		private bool TryInsert(TKey key, TValue value, InsertionBehavior behavior)
		{
			if (key == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
			}
			if (_buckets == null || _size == 0)
			{
				Initialize(0);
			}
			Entry[] entries = _entries;
			IEqualityComparer<TKey> comparer = _comparer;
			int size = _size;
			int num = (comparer?.GetHashCode(key) ?? key.GetHashCode()) & 0x7FFFFFFF;
			int num2 = 0;
			ref int reference = ref _buckets[num % size];
			int num3 = reference - 1;
			if (comparer == null)
			{
				if (default(TKey) != null)
				{
					while ((uint)num3 < (uint)size)
					{
						if (entries[num3].hashCode == num && EqualityComparer<TKey>.Default.Equals(entries[num3].key, key))
						{
							switch (behavior)
							{
							case InsertionBehavior.OverwriteExisting:
								entries[num3].value = value;
								_version++;
								return true;
							case InsertionBehavior.ThrowOnExisting:
								ThrowHelper.ThrowAddingDuplicateWithKeyArgumentException(key);
								break;
							}
							return false;
						}
						num3 = entries[num3].next;
						if (num2 >= size)
						{
							ThrowHelper.ThrowInvalidOperationException_ConcurrentOperationsNotSupported();
						}
						num2++;
					}
				}
				else
				{
					EqualityComparer<TKey> @default = EqualityComparer<TKey>.Default;
					while ((uint)num3 < (uint)size)
					{
						if (entries[num3].hashCode == num && @default.Equals(entries[num3].key, key))
						{
							switch (behavior)
							{
							case InsertionBehavior.OverwriteExisting:
								entries[num3].value = value;
								_version++;
								return true;
							case InsertionBehavior.ThrowOnExisting:
								ThrowHelper.ThrowAddingDuplicateWithKeyArgumentException(key);
								break;
							}
							return false;
						}
						num3 = entries[num3].next;
						if (num2 >= size)
						{
							ThrowHelper.ThrowInvalidOperationException_ConcurrentOperationsNotSupported();
						}
						num2++;
					}
				}
			}
			else
			{
				while ((uint)num3 < (uint)size)
				{
					if (entries[num3].hashCode == num && comparer.Equals(entries[num3].key, key))
					{
						switch (behavior)
						{
						case InsertionBehavior.OverwriteExisting:
							entries[num3].value = value;
							_version++;
							return true;
						case InsertionBehavior.ThrowOnExisting:
							ThrowHelper.ThrowAddingDuplicateWithKeyArgumentException(key);
							break;
						}
						return false;
					}
					num3 = entries[num3].next;
					if (num2 >= size)
					{
						ThrowHelper.ThrowInvalidOperationException_ConcurrentOperationsNotSupported();
					}
					num2++;
				}
			}
			bool flag = false;
			int num4;
			if (_freeCount > 0)
			{
				num4 = _freeList;
				flag = true;
				_freeCount--;
			}
			else
			{
				int count = _count;
				if (count == size)
				{
					Resize();
					size = _size;
					reference = ref _buckets[num % size];
				}
				num4 = count;
				_count = count + 1;
				entries = _entries;
			}
			ref Entry reference2 = ref entries[num4];
			if (flag)
			{
				_freeList = reference2.next;
			}
			reference2.hashCode = num;
			reference2.next = reference - 1;
			reference2.key = key;
			reference2.value = value;
			reference = num4 + 1;
			_version++;
			if (default(TKey) == null && num2 > 100 && comparer is NonRandomizedStringEqualityComparer)
			{
				_comparer = null;
				Resize(size, forceNewHashCodes: true);
			}
			return true;
		}

		public virtual void OnDeserialization(object sender)
		{
			HashHelpers.SerializationInfoTable.TryGetValue(this, out var value);
			if (value == null)
			{
				return;
			}
			int @int = value.GetInt32("Version");
			int int2 = value.GetInt32("HashSize");
			_comparer = (IEqualityComparer<TKey>)value.GetValue("Comparer", typeof(IEqualityComparer<TKey>));
			if (int2 != 0)
			{
				Initialize(int2);
				KeyValuePair<TKey, TValue>[] array = (KeyValuePair<TKey, TValue>[])value.GetValue("KeyValuePairs", typeof(KeyValuePair<TKey, TValue>[]));
				if (array == null)
				{
					throw new SerializationException("Serialized PooledDictionary missing data.");
				}
				for (int i = 0; i < array.Length; i++)
				{
					if (array[i].Key == null)
					{
						throw new SerializationException("Serialized PooledDictionary had null key.");
					}
					Add(array[i].Key, array[i].Value);
				}
			}
			else
			{
				_buckets = null;
			}
			_version = @int;
			HashHelpers.SerializationInfoTable.Remove(this);
		}

		private void Resize()
		{
			Resize(HashHelpers.ExpandPrime(_count), forceNewHashCodes: false);
		}

		private void Resize(int newSize, bool forceNewHashCodes)
		{
			int count = _count;
			int[] array;
			Entry[] array2;
			bool flag;
			if (_buckets.Length >= newSize && _entries.Length >= newSize)
			{
				Array.Clear(_buckets, 0, _buckets.Length);
				Array.Clear(_entries, _size, newSize - _size);
				array = _buckets;
				array2 = _entries;
				flag = false;
			}
			else
			{
				array = s_bucketPool.Rent(newSize);
				array2 = s_entryPool.Rent(newSize);
				Array.Clear(array, 0, array.Length);
				Array.Copy(_entries, 0, array2, 0, count);
				flag = true;
			}
			if (default(TKey) == null && forceNewHashCodes)
			{
				for (int i = 0; i < count; i++)
				{
					if (array2[i].hashCode >= 0)
					{
						array2[i].hashCode = array2[i].key.GetHashCode() & 0x7FFFFFFF;
					}
				}
			}
			for (int j = 0; j < count; j++)
			{
				if (array2[j].hashCode >= 0)
				{
					int num = array2[j].hashCode % newSize;
					array2[j].next = array[num] - 1;
					array[num] = j + 1;
				}
			}
			if (flag)
			{
				ReturnArrays();
				_buckets = array;
				_entries = array2;
			}
			_size = newSize;
		}

		public bool Remove(TKey key)
		{
			if (key == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
			}
			int[] buckets = _buckets;
			Entry[] entries = _entries;
			int num = 0;
			if (_size > 0)
			{
				int num2 = (_comparer?.GetHashCode(key) ?? key.GetHashCode()) & 0x7FFFFFFF;
				int num3 = num2 % _size;
				int num4 = -1;
				int num5 = buckets[num3] - 1;
				while (num5 >= 0)
				{
					ref Entry reference = ref entries[num5];
					if (reference.hashCode == num2 && (_comparer?.Equals(reference.key, key) ?? EqualityComparer<TKey>.Default.Equals(reference.key, key)))
					{
						if (num4 < 0)
						{
							buckets[num3] = reference.next + 1;
						}
						else
						{
							entries[num4].next = reference.next;
						}
						reference.hashCode = -1;
						reference.next = _freeList;
						if (_clearKeyOnFree)
						{
							reference.key = default(TKey);
						}
						if (_clearValueOnFree)
						{
							reference.value = default(TValue);
						}
						_freeList = num5;
						_freeCount++;
						_version++;
						return true;
					}
					num4 = num5;
					num5 = reference.next;
					if (num >= _size)
					{
						ThrowHelper.ThrowInvalidOperationException_ConcurrentOperationsNotSupported();
					}
					num++;
				}
			}
			return false;
		}

		public bool Remove(TKey key, out TValue value)
		{
			if (key == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
			}
			int[] buckets = _buckets;
			Entry[] entries = _entries;
			int num = 0;
			int num2 = (_comparer?.GetHashCode(key) ?? key.GetHashCode()) & 0x7FFFFFFF;
			int num3 = num2 % _size;
			int num4 = -1;
			int num5 = buckets[num3] - 1;
			while (num5 >= 0)
			{
				ref Entry reference = ref entries[num5];
				if (reference.hashCode == num2 && (_comparer?.Equals(reference.key, key) ?? EqualityComparer<TKey>.Default.Equals(reference.key, key)))
				{
					if (num4 < 0)
					{
						buckets[num3] = reference.next + 1;
					}
					else
					{
						entries[num4].next = reference.next;
					}
					value = reference.value;
					reference.hashCode = -1;
					reference.next = _freeList;
					if (_clearKeyOnFree)
					{
						reference.key = default(TKey);
					}
					if (_clearValueOnFree)
					{
						reference.value = default(TValue);
					}
					_freeList = num5;
					_freeCount++;
					return true;
				}
				num4 = num5;
				num5 = reference.next;
				if (num >= _size)
				{
					ThrowHelper.ThrowInvalidOperationException_ConcurrentOperationsNotSupported();
				}
				num++;
			}
			value = default(TValue);
			return false;
		}

		public bool TryGetValue(TKey key, out TValue value)
		{
			int num = FindEntry(key);
			if (num >= 0)
			{
				value = _entries[num].value;
				return true;
			}
			value = default(TValue);
			return false;
		}

		public bool TryAdd(TKey key, TValue value)
		{
			return TryInsert(key, value, InsertionBehavior.None);
		}

		public TValue GetOrAdd(TKey key, TValue addValue)
		{
			if (TryGetValue(key, out var value))
			{
				return value;
			}
			Add(key, addValue);
			return addValue;
		}

		public TValue GetOrAdd(TKey key, Func<TKey, TValue> valueFactory)
		{
			if (TryGetValue(key, out var value))
			{
				return value;
			}
			TValue val = valueFactory(key);
			Add(key, val);
			return val;
		}

		void ICollection<KeyValuePair<TKey, TValue>>.CopyTo(KeyValuePair<TKey, TValue>[] array, int index)
		{
			CopyTo(array, index);
		}

		void ICollection.CopyTo(Array array, int index)
		{
			if (array == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
			}
			if (array.Rank != 1)
			{
				ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_RankMultiDimNotSupported);
			}
			if (array.GetLowerBound(0) != 0)
			{
				ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_NonZeroLowerBound);
			}
			if ((uint)index > (uint)array.Length)
			{
				ThrowHelper.ThrowIndexArgumentOutOfRange_NeedNonNegNumException();
			}
			if (array.Length - index < Count)
			{
				ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_ArrayPlusOffTooSmall);
			}
			if (array is KeyValuePair<TKey, TValue>[] array2)
			{
				CopyTo(array2, index);
				return;
			}
			if (array is DictionaryEntry[] array3)
			{
				Entry[] entries = _entries;
				for (int i = 0; i < _count; i++)
				{
					if (entries[i].hashCode >= 0)
					{
						array3[index++] = new DictionaryEntry(entries[i].key, entries[i].value);
					}
				}
				return;
			}
			if (array is object[] array4)
			{
				try
				{
					int count = _count;
					Entry[] entries2 = _entries;
					for (int j = 0; j < count; j++)
					{
						if (entries2[j].hashCode >= 0)
						{
							array4[index++] = new KeyValuePair<TKey, TValue>(entries2[j].key, entries2[j].value);
						}
					}
					return;
				}
				catch (ArrayTypeMismatchException)
				{
					ThrowHelper.ThrowArgumentException_Argument_InvalidArrayType();
					return;
				}
			}
			ThrowHelper.ThrowArgumentException_Argument_InvalidArrayType();
		}

		IEnumerator IEnumerable.GetEnumerator()
		{
			return new Enumerator(this, 2);
		}

		public int EnsureCapacity(int capacity)
		{
			if (capacity < 0)
			{
				ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.capacity);
			}
			int size = _size;
			if (size >= capacity)
			{
				return size;
			}
			_version++;
			if (_buckets == null || _size == 0)
			{
				return Initialize(capacity);
			}
			int prime = HashHelpers.GetPrime(capacity);
			Resize(prime, forceNewHashCodes: false);
			return prime;
		}

		public void TrimExcess()
		{
			TrimExcess(Count);
		}

		public void TrimExcess(int capacity)
		{
			if (capacity < Count)
			{
				throw new ArgumentOutOfRangeException("capacity");
			}
			int prime = HashHelpers.GetPrime(capacity);
			Entry[] entries = _entries;
			int[] buckets = _buckets;
			int num = ((entries != null) ? entries.Length : 0);
			if (prime >= num)
			{
				return;
			}
			int count = _count;
			_version++;
			Initialize(prime);
			Entry[] entries2 = _entries;
			int[] buckets2 = _buckets;
			int num2 = 0;
			for (int i = 0; i < count; i++)
			{
				int hashCode = entries[i].hashCode;
				if (hashCode >= 0)
				{
					ref Entry reference = ref entries2[num2];
					reference = entries[i];
					int num3 = hashCode % prime;
					reference.next = buckets2[num3] - 1;
					buckets2[num3] = num2 + 1;
					num2++;
				}
			}
			_count = num2;
			_size = prime;
			_freeCount = 0;
			s_bucketPool.Return(buckets);
			s_entryPool.Return(entries2, _clearKeyOnFree || _clearValueOnFree);
		}

		private void ReturnArrays()
		{
			Entry[] entries = _entries;
			if (entries != null && entries.Length != 0)
			{
				try
				{
					s_entryPool.Return(_entries, _clearKeyOnFree || _clearValueOnFree);
				}
				catch (ArgumentException)
				{
				}
			}
			int[] buckets = _buckets;
			if (buckets != null && buckets.Length != 0)
			{
				try
				{
					s_bucketPool.Return(_buckets);
				}
				catch (ArgumentException)
				{
				}
			}
			_entries = null;
			_buckets = null;
		}

		private static bool ShouldClearKey(ClearMode mode)
		{
			return mode != ClearMode.Never;
		}

		private static bool ShouldClearValue(ClearMode mode)
		{
			return mode != ClearMode.Never;
		}

		private static bool IsCompatibleKey(object key)
		{
			if (key == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
			}
			return key is TKey;
		}

		void IDictionary.Add(object key, object value)
		{
			if (key == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
			}
			ThrowHelper.IfNullAndNullsAreIllegalThenThrow<TValue>(value, ExceptionArgument.value);
			try
			{
				TKey key2 = (TKey)key;
				try
				{
					Add(key2, (TValue)value);
				}
				catch (InvalidCastException)
				{
					ThrowHelper.ThrowWrongValueTypeArgumentException(value, typeof(TValue));
				}
			}
			catch (InvalidCastException)
			{
				ThrowHelper.ThrowWrongKeyTypeArgumentException(key, typeof(TKey));
			}
		}

		bool IDictionary.Contains(object key)
		{
			if (IsCompatibleKey(key))
			{
				return ContainsKey((TKey)key);
			}
			return false;
		}

		IDictionaryEnumerator IDictionary.GetEnumerator()
		{
			return new Enumerator(this, 1);
		}

		void IDictionary.Remove(object key)
		{
			if (IsCompatibleKey(key))
			{
				Remove((TKey)key);
			}
		}

		public void Dispose()
		{
			ReturnArrays();
			_count = 0;
			_size = 0;
			_freeList = -1;
			_freeCount = 0;
		}
	}
	public static class PooledExtensions
	{
		public static PooledList<T> ToPooledList<T>(this IEnumerable<T> items)
		{
			return new PooledList<T>(items);
		}

		public static PooledList<T> ToPooledList<T>(this T[] array)
		{
			return new PooledList<T>(array.AsSpan());
		}

		public static PooledList<T> ToPooledList<T>(this ReadOnlySpan<T> span)
		{
			return new PooledList<T>(span);
		}

		public static PooledList<T> ToPooledList<T>(this Span<T> span)
		{
			return new PooledList<T>(span);
		}

		public static PooledList<T> ToPooledList<T>(this ReadOnlyMemory<T> memory)
		{
			return new PooledList<T>(memory.Span);
		}

		public static PooledList<T> ToPooledList<T>(this Memory<T> memory)
		{
			return new PooledList<T>(memory.Span);
		}

		public static PooledDictionary<TKey, TValue> ToPooledDictionary<TSource, TKey, TValue>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TValue> valueSelector, IEqualityComparer<TKey> comparer = null)
		{
			if (source == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.source);
			}
			PooledDictionary<TKey, TValue> pooledDictionary = new PooledDictionary<TKey, TValue>((source as ICollection<TSource>)?.Count ?? 0, comparer);
			foreach (TSource item in source)
			{
				pooledDictionary.Add(keySelector(item), valueSelector(item));
			}
			return pooledDictionary;
		}

		public static PooledDictionary<TKey, TValue> ToPooledDictionary<TSource, TKey, TValue>(this ReadOnlySpan<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TValue> valueSelector, IEqualityComparer<TKey> comparer = null)
		{
			PooledDictionary<TKey, TValue> pooledDictionary = new PooledDictionary<TKey, TValue>(source.Length, comparer);
			ReadOnlySpan<TSource> readOnlySpan = source;
			for (int i = 0; i < readOnlySpan.Length; i++)
			{
				TSource arg = readOnlySpan[i];
				pooledDictionary.Add(keySelector(arg), valueSelector(arg));
			}
			return pooledDictionary;
		}

		public static PooledDictionary<TKey, TValue> ToPooledDictionary<TSource, TKey, TValue>(this Span<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TValue> valueSelector, IEqualityComparer<TKey> comparer)
		{
			return ((ReadOnlySpan<TSource>)source).ToPooledDictionary(keySelector, valueSelector, comparer);
		}

		public static PooledDictionary<TKey, TValue> ToPooledDictionary<TSource, TKey, TValue>(this ReadOnlyMemory<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TValue> valueSelector, IEqualityComparer<TKey> comparer)
		{
			return source.Span.ToPooledDictionary(keySelector, valueSelector, comparer);
		}

		public static PooledDictionary<TKey, TValue> ToPooledDictionary<TSource, TKey, TValue>(this Memory<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TValue> valueSelector, IEqualityComparer<TKey> comparer)
		{
			return source.Span.ToPooledDictionary(keySelector, valueSelector, comparer);
		}

		public static PooledDictionary<TKey, TSource> ToPooledDictionary<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer = null)
		{
			if (source == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.source);
			}
			PooledDictionary<TKey, TSource> pooledDictionary = new PooledDictionary<TKey, TSource>((source as ICollection<TSource>)?.Count ?? 0, comparer);
			foreach (TSource item in source)
			{
				pooledDictionary.Add(keySelector(item), item);
			}
			return pooledDictionary;
		}

		public static PooledDictionary<TKey, TSource> ToPooledDictionary<TSource, TKey>(this ReadOnlySpan<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer = null)
		{
			PooledDictionary<TKey, TSource> pooledDictionary = new PooledDictionary<TKey, TSource>(source.Length, comparer);
			ReadOnlySpan<TSource> readOnlySpan = source;
			for (int i = 0; i < readOnlySpan.Length; i++)
			{
				TSource val = readOnlySpan[i];
				pooledDictionary.Add(keySelector(val), val);
			}
			return pooledDictionary;
		}

		public static PooledDictionary<TKey, TSource> ToPooledDictionary<TSource, TKey>(this Span<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer = null)
		{
			return ((ReadOnlySpan<TSource>)source).ToPooledDictionary(keySelector, comparer);
		}

		public static PooledDictionary<TKey, TSource> ToPooledDictionary<TSource, TKey>(this ReadOnlyMemory<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer = null)
		{
			return source.Span.ToPooledDictionary(keySelector, comparer);
		}

		public static PooledDictionary<TKey, TSource> ToPooledDictionary<TSource, TKey>(this Memory<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer = null)
		{
			return source.Span.ToPooledDictionary(keySelector, comparer);
		}

		public static PooledDictionary<TKey, TValue> ToPooledDictionary<TKey, TValue>(this IEnumerable<(TKey, TValue)> source, IEqualityComparer<TKey> comparer = null)
		{
			return new PooledDictionary<TKey, TValue>(source, comparer);
		}

		public static PooledDictionary<TKey, TValue> ToPooledDictionary<TKey, TValue>(this IEnumerable<KeyValuePair<TKey, TValue>> source, IEqualityComparer<TKey> comparer = null)
		{
			return new PooledDictionary<TKey, TValue>(source, comparer);
		}

		public static PooledDictionary<TKey, TValue> ToPooledDictionary<TKey, TValue>(this IEnumerable<Tuple<TKey, TValue>> source, IEqualityComparer<TKey> comparer = null)
		{
			if (source == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.source);
			}
			PooledDictionary<TKey, TValue> pooledDictionary = new PooledDictionary<TKey, TValue>((source as ICollection<Tuple<TKey, TValue>>)?.Count ?? 0, comparer);
			foreach (Tuple<TKey, TValue> item in source)
			{
				pooledDictionary.Add(item.Item1, item.Item2);
			}
			return pooledDictionary;
		}

		public static PooledDictionary<TKey, TValue> ToPooledDictionary<TKey, TValue>(this ReadOnlySpan<(TKey, TValue)> source, IEqualityComparer<TKey> comparer = null)
		{
			return new PooledDictionary<TKey, TValue>(source, comparer);
		}

		public static PooledDictionary<TKey, TValue> ToPooledDictionary<TKey, TValue>(this Span<(TKey, TValue)> source, IEqualityComparer<TKey> comparer = null)
		{
			return new PooledDictionary<TKey, TValue>(source, comparer);
		}

		public static PooledSet<T> ToPooledSet<T>(this IEnumerable<T> source, IEqualityComparer<T> comparer = null)
		{
			return new PooledSet<T>(source, comparer);
		}

		public static PooledSet<T> ToPooledSet<T>(this Span<T> source, IEqualityComparer<T> comparer = null)
		{
			return new PooledSet<T>(source, comparer);
		}

		public static PooledSet<T> ToPooledSet<T>(this ReadOnlySpan<T> source, IEqualityComparer<T> comparer = null)
		{
			return new PooledSet<T>(source, comparer);
		}

		public static PooledSet<T> ToPooledSet<T>(this Memory<T> source, IEqualityComparer<T> comparer = null)
		{
			return new PooledSet<T>(source.Span, comparer);
		}

		public static PooledSet<T> ToPooledSet<T>(this ReadOnlyMemory<T> source, IEqualityComparer<T> comparer = null)
		{
			return new PooledSet<T>(source.Span, comparer);
		}

		public static PooledStack<T> ToPooledStack<T>(this IEnumerable<T> items)
		{
			return new PooledStack<T>(items);
		}

		public static PooledStack<T> ToPooledStack<T>(this T[] array)
		{
			return new PooledStack<T>(array.AsSpan());
		}

		public static PooledStack<T> ToPooledStack<T>(this ReadOnlySpan<T> span)
		{
			return new PooledStack<T>(span);
		}

		public static PooledStack<T> ToPooledStack<T>(this Span<T> span)
		{
			return new PooledStack<T>(span);
		}

		public static PooledStack<T> ToPooledStack<T>(this ReadOnlyMemory<T> memory)
		{
			return new PooledStack<T>(memory.Span);
		}

		public static PooledStack<T> ToPooledStack<T>(this Memory<T> memory)
		{
			return new PooledStack<T>(memory.Span);
		}

		public static PooledQueue<T> ToPooledQueue<T>(this IEnumerable<T> items)
		{
			return new PooledQueue<T>(items);
		}

		public static PooledQueue<T> ToPooledQueue<T>(this ReadOnlySpan<T> span)
		{
			return new PooledQueue<T>(span);
		}

		public static PooledQueue<T> ToPooledQueue<T>(this Span<T> span)
		{
			return new PooledQueue<T>(span);
		}

		public static PooledQueue<T> ToPooledQueue<T>(this ReadOnlyMemory<T> memory)
		{
			return new PooledQueue<T>(memory.Span);
		}

		public static PooledQueue<T> ToPooledQueue<T>(this Memory<T> memory)
		{
			return new PooledQueue<T>(memory.Span);
		}

		public static PooledQueue<T> ToPooledQueue<T>(this T[] array)
		{
			return new PooledQueue<T>(array.AsSpan());
		}
	}
	[Serializable]
	[DebuggerDisplay("Count = {Count}")]
	[DebuggerTypeProxy(typeof(ICollectionDebugView<>))]
	public class PooledList<T> : IList<T>, ICollection<T>, IEnumerable<T>, IEnumerable, IReadOnlyPooledList<T>, IReadOnlyList<T>, IReadOnlyCollection<T>, IList, ICollection, IDisposable, IDeserializationCallback
	{
		public struct Enumerator : IEnumerator<T>, IEnumerator, IDisposable
		{
			private readonly PooledList<T> _list;

			private int _index;

			private readonly int _version;

			private T _current;

			public T Current => _current;

			object IEnumerator.Current
			{
				get
				{
					if (_index == 0 || _index == _list._size + 1)
					{
						ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumOpCantHappen();
					}
					return Current;
				}
			}

			internal Enumerator(PooledList<T> list)
			{
				_list = list;
				_index = 0;
				_version = list._version;
				_current = default(T);
			}

			public void Dispose()
			{
			}

			public bool MoveNext()
			{
				PooledList<T> list = _list;
				if (_version == list._version && (uint)_index < (uint)list._size)
				{
					_current = list._items[_index];
					_index++;
					return true;
				}
				return MoveNextRare();
			}

			private bool MoveNextRare()
			{
				if (_version != _list._version)
				{
					ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion();
				}
				_index = _list._size + 1;
				_current = default(T);
				return false;
			}

			void IEnumerator.Reset()
			{
				if (_version != _list._version)
				{
					ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion();
				}
				_index = 0;
				_current = default(T);
			}
		}

		private readonly struct Comparer : IComparer<T>
		{
			private readonly Func<T, T, int> _comparison;

			public Comparer(Func<T, T, int> comparison)
			{
				_comparison = comparison;
			}

			public int Compare(T x, T y)
			{
				return _comparison(x, y);
			}
		}

		private const int MaxArrayLength = 2146435071;

		private const int DefaultCapacity = 4;

		private static readonly T[] s_emptyArray = Array.Empty<T>();

		[NonSerialized]
		private ArrayPool<T> _pool;

		[NonSerialized]
		private object _syncRoot;

		private T[] _items;

		private int _size;

		private int _version;

		private readonly bool _clearOnFree;

		public Span<T> Span => _items.AsSpan(0, _size);

		ReadOnlySpan<T> IReadOnlyPooledList<T>.Span => Span;

		public int Capacity
		{
			get
			{
				return _items.Length;
			}
			set
			{
				if (value < _size)
				{
					ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.value, ExceptionResource.ArgumentOutOfRange_SmallCapacity);
				}
				if (value == _items.Length)
				{
					return;
				}
				if (value > 0)
				{
					T[] array = _pool.Rent(value);
					if (_size > 0)
					{
						Array.Copy(_items, array, _size);
					}
					ReturnArray();
					_items = array;
				}
				else
				{
					ReturnArray();
					_size = 0;
				}
			}
		}

		public int Count => _size;

		public ClearMode ClearMode
		{
			get
			{
				if (!_clearOnFree)
				{
					return ClearMode.Never;
				}
				return ClearMode.Always;
			}
		}

		bool IList.IsFixedSize => false;

		bool ICollection<T>.IsReadOnly => false;

		bool IList.IsReadOnly => false;

		int ICollection.Count => _size;

		bool ICollection.IsSynchronized => false;

		object ICollection.SyncRoot
		{
			get
			{
				if (_syncRoot == null)
				{
					Interlocked.CompareExchange<object>(ref _syncRoot, new object(), (object)null);
				}
				return _syncRoot;
			}
		}

		public T this[int index]
		{
			get
			{
				if ((uint)index >= (uint)_size)
				{
					ThrowHelper.ThrowArgumentOutOfRange_IndexException();
				}
				return _items[index];
			}
			set
			{
				if ((uint)index >= (uint)_size)
				{
					ThrowHelper.ThrowArgumentOutOfRange_IndexException();
				}
				_items[index] = value;
				_version++;
			}
		}

		object IList.this[int index]
		{
			get
			{
				return this[index];
			}
			set
			{
				ThrowHelper.IfNullAndNullsAreIllegalThenThrow<T>(value, ExceptionArgument.value);
				try
				{
					this[index] = (T)value;
				}
				catch (InvalidCastException)
				{
					ThrowHelper.ThrowWrongValueTypeArgumentException(value, typeof(T));
				}
			}
		}

		public PooledList()
			: this(ClearMode.Auto, ArrayPool<T>.Shared)
		{
		}

		public PooledList(ClearMode clearMode)
			: this(clearMode, ArrayPool<T>.Shared)
		{
		}

		public PooledList(ArrayPool<T> customPool)
			: this(ClearMode.Auto, customPool)
		{
		}

		public PooledList(ClearMode clearMode, ArrayPool<T> customPool)
		{
			_items = s_emptyArray;
			_pool = customPool ?? ArrayPool<T>.Shared;
			_clearOnFree = ShouldClear(clearMode);
		}

		public PooledList(int capacity)
			: this(capacity, ClearMode.Auto, ArrayPool<T>.Shared)
		{
		}

		public PooledList(int capacity, bool sizeToCapacity)
			: this(capacity, ClearMode.Auto, ArrayPool<T>.Shared, sizeToCapacity)
		{
		}

		public PooledList(int capacity, ClearMode clearMode)
			: this(capacity, clearMode, ArrayPool<T>.Shared)
		{
		}

		public PooledList(int capacity, ClearMode clearMode, bool sizeToCapacity)
			: this(capacity, clearMode, ArrayPool<T>.Shared, sizeToCapacity)
		{
		}

		public PooledList(int capacity, ArrayPool<T> customPool)
			: this(capacity, ClearMode.Auto, customPool)
		{
		}

		public PooledList(int capacity, ArrayPool<T> customPool, bool sizeToCapacity)
			: this(capacity, ClearMode.Auto, customPool, sizeToCapacity)
		{
		}

		public PooledList(int capacity, ClearMode clearMode, ArrayPool<T> customPool)
			: this(capacity, clearMode, customPool, sizeToCapacity: false)
		{
		}

		public PooledList(int capacity, ClearMode clearMode, ArrayPool<T> customPool, bool sizeToCapacity)
		{
			if (capacity < 0)
			{
				ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.capacity, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum);
			}
			_pool = customPool ?? ArrayPool<T>.Shared;
			_clearOnFree = ShouldClear(clearMode);
			if (capacity == 0)
			{
				_items = s_emptyArray;
			}
			else
			{
				_items = _pool.Rent(capacity);
			}
			if (sizeToCapacity)
			{
				_size = capacity;
				if (clearMode != ClearMode.Never)
				{
					Array.Clear(_items, 0, _size);
				}
			}
		}

		public PooledList(T[] array)
			: this((ReadOnlySpan<T>)array.AsSpan(), ClearMode.Auto, ArrayPool<T>.Shared)
		{
		}

		public PooledList(T[] array, ClearMode clearMode)
			: this((ReadOnlySpan<T>)array.AsSpan(), clearMode, ArrayPool<T>.Shared)
		{
		}

		public PooledList(T[] array, ArrayPool<T> customPool)
			: this((ReadOnlySpan<T>)array.AsSpan(), ClearMode.Auto, customPool)
		{
		}

		public PooledList(T[] array, ClearMode clearMode, ArrayPool<T> customPool)
			: this((ReadOnlySpan<T>)array.AsSpan(), clearMode, customPool)
		{
		}

		public PooledList(ReadOnlySpan<T> span)
			: this(span, ClearMode.Auto, ArrayPool<T>.Shared)
		{
		}

		public PooledList(ReadOnlySpan<T> span, ClearMode clearMode)
			: this(span, clearMode, ArrayPool<T>.Shared)
		{
		}

		public PooledList(ReadOnlySpan<T> span, ArrayPool<T> customPool)
			: this(span, ClearMode.Auto, customPool)
		{
		}

		public PooledList(ReadOnlySpan<T> span, ClearMode clearMode, ArrayPool<T> customPool)
		{
			_pool = customPool ?? ArrayPool<T>.Shared;
			_clearOnFree = ShouldClear(clearMode);
			int length = span.Length;
			if (length == 0)
			{
				_items = s_emptyArray;
				return;
			}
			_items = _pool.Rent(length);
			span.CopyTo(_items);
			_size = length;
		}

		public PooledList(IEnumerable<T> collection)
			: this(collection, ClearMode.Auto, ArrayPool<T>.Shared)
		{
		}

		public PooledList(IEnumerable<T> collection, ClearMode clearMode)
			: this(collection, clearMode, ArrayPool<T>.Shared)
		{
		}

		public PooledList(IEnumerable<T> collection, ArrayPool<T> customPool)
			: this(collection, ClearMode.Auto, customPool)
		{
		}

		public PooledList(IEnumerable<T> collection, ClearMode clearMode, ArrayPool<T> customPool)
		{
			_pool = customPool ?? ArrayPool<T>.Shared;
			_clearOnFree = ShouldClear(clearMode);
			if (collection != null)
			{
				if (!(collection is ICollection<T> collection2))
				{
					_size = 0;
					_items = s_emptyArray;
					{
						foreach (T item in collection)
						{
							Add(item);
						}
						return;
					}
				}
				ICollection<T> collection3 = collection2;
				int count = collection3.Count;
				if (count == 0)
				{
					_items = s_emptyArray;
					return;
				}
				_items = _pool.Rent(count);
				collection3.CopyTo(_items, 0);
				_size = count;
			}
			else
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.collection);
			}
		}

		private static bool IsCompatibleObject(object value)
		{
			if (!(value is T))
			{
				if (value == null)
				{
					return default(T) == null;
				}
				return false;
			}
			return true;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public void Add(T item)
		{
			_version++;
			int size = _size;
			if ((uint)size < (uint)_items.Length)
			{
				_size = size + 1;
				_items[size] = item;
			}
			else
			{
				AddWithResize(item);
			}
		}

		[MethodImpl(MethodImplOptions.NoInlining)]
		private void AddWithResize(T item)
		{
			int size = _size;
			EnsureCapacity(size + 1);
			_size = size + 1;
			_items[size] = item;
		}

		int IList.Add(object item)
		{
			ThrowHelper.IfNullAndNullsAreIllegalThenThrow<T>(item, ExceptionArgument.item);
			try
			{
				Add((T)item);
			}
			catch (InvalidCastException)
			{
				ThrowHelper.ThrowWrongValueTypeArgumentException(item, typeof(T));
			}
			return Count - 1;
		}

		public void AddRange(IEnumerable<T> collection)
		{
			InsertRange(_size, collection);
		}

		public void AddRange(T[] array)
		{
			AddRange(array.AsSpan());
		}

		public void AddRange(ReadOnlySpan<T> span)
		{
			Span<T> destination = InsertSpan(_size, span.Length, clearOutput: false);
			span.CopyTo(destination);
		}

		public Span<T> AddSpan(int count)
		{
			return InsertSpan(_size, count);
		}

		public ReadOnlyCollection<T> AsReadOnly()
		{
			return new ReadOnlyCollection<T>(this);
		}

		public int BinarySearch(int index, int count, T item, IComparer<T> comparer)
		{
			if (index < 0)
			{
				ThrowHelper.ThrowIndexArgumentOutOfRange_NeedNonNegNumException();
			}
			if (count < 0)
			{
				ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.count, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum);
			}
			if (_size - index < count)
			{
				ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidOffLen);
			}
			return Array.BinarySearch(_items, index, count, item, comparer);
		}

		public int BinarySearch(T item)
		{
			return BinarySearch(0, Count, item, null);
		}

		public int BinarySearch(T item, IComparer<T> comparer)
		{
			return BinarySearch(0, Count, item, comparer);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public void Clear()
		{
			_version++;
			int size = _size;
			_size = 0;
			if (size > 0 && _clearOnFree)
			{
				Array.Clear(_items, 0, _size);
			}
		}

		public bool Contains(T item)
		{
			if (_size != 0)
			{
				return IndexOf(item) != -1;
			}
			return false;
		}

		bool IList.Contains(object item)
		{
			if (IsCompatibleObject(item))
			{
				return Contains((T)item);
			}
			return false;
		}

		public PooledList<TOutput> ConvertAll<TOutput>(Func<T, TOutput> converter)
		{
			if (converter == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.converter);
			}
			PooledList<TOutput> pooledList = new PooledList<TOutput>(_size);
			for (int i = 0; i < _size; i++)
			{
				pooledList._items[i] = converter(_items[i]);
			}
			pooledList._size = _size;
			return pooledList;
		}

		public void CopyTo(Span<T> span)
		{
			if (span.Length < Count)
			{
				throw new ArgumentException("Destination span is shorter than the list to be copied.");
			}
			Span.CopyTo(span);
		}

		void ICollection<T>.CopyTo(T[] array, int arrayIndex)
		{
			Array.Copy(_items, 0, array, arrayIndex, _size);
		}

		void ICollection.CopyTo(Array array, int arrayIndex)
		{
			if (array != null && array.Rank != 1)
			{
				ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_RankMultiDimNotSupported);
			}
			try
			{
				Array.Copy(_items, 0, array, arrayIndex, _size);
			}
			catch (ArrayTypeMismatchException)
			{
				ThrowHelper.ThrowArgumentException_Argument_InvalidArrayType();
			}
		}

		private void EnsureCapacity(int min)
		{
			if (_items.Length < min)
			{
				int num = ((_items.Length == 0) ? 4 : (_items.Length * 2));
				if ((uint)num > 2146435071u)
				{
					num = 2146435071;
				}
				if (num < min)
				{
					num = min;
				}
				Capacity = num;
			}
		}

		public bool Exists(Func<T, bool> match)
		{
			return FindIndex(match) != -1;
		}

		public bool TryFind(Func<T, bool> match, out T result)
		{
			if (match == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match);
			}
			for (int i = 0; i < _size; i++)
			{
				if (match(_items[i]))
				{
					result = _items[i];
					return true;
				}
			}
			result = default(T);
			return false;
		}

		public PooledList<T> FindAll(Func<T, bool> match)
		{
			if (match == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match);
			}
			PooledList<T> pooledList = new PooledList<T>();
			for (int i = 0; i < _size; i++)
			{
				if (match(_items[i]))
				{
					pooledList.Add(_items[i]);
				}
			}
			return pooledList;
		}

		public int FindIndex(Func<T, bool> match)
		{
			return FindIndex(0, _size, match);
		}

		public int FindIndex(int startIndex, Func<T, bool> match)
		{
			return FindIndex(startIndex, _size - startIndex, match);
		}

		public int FindIndex(int startIndex, int count, Func<T, bool> match)
		{
			if ((uint)startIndex > (uint)_size)
			{
				ThrowHelper.ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_Index();
			}
			if (count < 0 || startIndex > _size - count)
			{
				ThrowHelper.ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count();
			}
			if (match == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match);
			}
			int num = startIndex + count;
			for (int i = startIndex; i < num; i++)
			{
				if (match(_items[i]))
				{
					return i;
				}
			}
			return -1;
		}

		public bool TryFindLast(Func<T, bool> match, out T result)
		{
			if (match == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match);
			}
			for (int num = _size - 1; num >= 0; num--)
			{
				if (match(_items[num]))
				{
					result = _items[num];
					return true;
				}
			}
			result = default(T);
			return false;
		}

		public int FindLastIndex(Func<T, bool> match)
		{
			return FindLastIndex(_size - 1, _size, match);
		}

		public int FindLastIndex(int startIndex, Func<T, bool> match)
		{
			return FindLastIndex(startIndex, startIndex + 1, match);
		}

		public int FindLastIndex(int startIndex, int count, Func<T, bool> match)
		{
			if (match == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match);
			}
			if (_size == 0)
			{
				if (startIndex != -1)
				{
					ThrowHelper.ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_Index();
				}
			}
			else if ((uint)startIndex >= (uint)_size)
			{
				ThrowHelper.ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_Index();
			}
			if (count < 0 || startIndex - count + 1 < 0)
			{
				ThrowHelper.ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count();
			}
			int num = startIndex - count;
			for (int num2 = startIndex; num2 > num; num2--)
			{
				if (match(_items[num2]))
				{
					return num2;
				}
			}
			return -1;
		}

		public void ForEach(Action<T> action)
		{
			if (action == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.action);
			}
			int version = _version;
			for (int i = 0; i < _size; i++)
			{
				if (version != _version)
				{
					break;
				}
				action(_items[i]);
			}
			if (version != _version)
			{
				ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion();
			}
		}

		public Enumerator GetEnumerator()
		{
			return new Enumerator(this);
		}

		IEnumerator<T> IEnumerable<T>.GetEnumerator()
		{
			return new Enumerator(this);
		}

		IEnumerator IEnumerable.GetEnumerator()
		{
			return new Enumerator(this);
		}

		public Span<T> GetRange(int index, int count)
		{
			if (index < 0)
			{
				ThrowHelper.ThrowIndexArgumentOutOfRange_NeedNonNegNumException();
			}
			if (count < 0)
			{
				ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.count, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum);
			}
			if (_size - index < count)
			{
				ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidOffLen);
			}
			return Span.Slice(index, count);
		}

		public int IndexOf(T item)
		{
			return Array.IndexOf(_items, item, 0, _size);
		}

		int IList.IndexOf(object item)
		{
			if (IsCompatibleObject(item))
			{
				return IndexOf((T)item);
			}
			return -1;
		}

		public int IndexOf(T item, int index)
		{
			if (index > _size)
			{
				ThrowHelper.ThrowArgumentOutOfRange_IndexException();
			}
			return Array.IndexOf(_items, item, index, _size - index);
		}

		public int IndexOf(T item, int index, int count)
		{
			if (index > _size)
			{
				ThrowHelper.ThrowArgumentOutOfRange_IndexException();
			}
			if (count < 0 || index > _size - count)
			{
				ThrowHelper.ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count();
			}
			return Array.IndexOf(_items, item, index, count);
		}

		public void Insert(int index, T item)
		{
			if ((uint)index > (uint)_size)
			{
				ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.index, ExceptionResource.ArgumentOutOfRange_ListInsert);
			}
			if (_size == _items.Length)
			{
				EnsureCapacity(_size + 1);
			}
			if (index < _size)
			{
				Array.Copy(_items, index, _items, index + 1, _size - index);
			}
			_items[index] = item;
			_size++;
			_version++;
		}

		void IList.Insert(int index, object item)
		{
			ThrowHelper.IfNullAndNullsAreIllegalThenThrow<T>(item, ExceptionArgument.item);
			try
			{
				Insert(index, (T)item);
			}
			catch (InvalidCastException)
			{
				ThrowHelper.ThrowWrongValueTypeArgumentException(item, typeof(T));
			}
		}

		public void InsertRange(int index, IEnumerable<T> collection)
		{
			if ((uint)index > (uint)_size)
			{
				ThrowHelper.ThrowArgumentOutOfRange_IndexException();
			}
			if (collection != null)
			{
				if (collection is ICollection<T> collection2)
				{
					ICollection<T> collection3 = collection2;
					int count = collection3.Count;
					if (count > 0)
					{
						EnsureCapacity(_size + count);
						if (index < _size)
						{
							Array.Copy(_items, index, _items, index + count, _size - index);
						}
						if (this == collection3)
						{
							Array.Copy(_items, 0, _items, index, index);
							Array.Copy(_items, index + count, _items, index * 2, _size - index);
						}
						else
						{
							collection3.CopyTo(_items, index);
						}
						_size += count;
					}
				}
				else
				{
					using IEnumerator<T> enumerator = collection.GetEnumerator();
					while (enumerator.MoveNext())
					{
						Insert(index++, enumerator.Current);
					}
				}
			}
			else
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.collection);
			}
			_version++;
		}

		public void InsertRange(int index, ReadOnlySpan<T> span)
		{
			Span<T> destination = InsertSpan(index, span.Length, clearOutput: false);
			span.CopyTo(destination);
		}

		public void InsertRange(int index, T[] array)
		{
			if (array == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
			}
			InsertRange(index, array.AsSpan());
		}

		public Span<T> InsertSpan(int index, int count)
		{
			return InsertSpan(index, count, clearOutput: true);
		}

		private Span<T> InsertSpan(int index, int count, bool clearOutput)
		{
			EnsureCapacity(_size + count);
			if (index < _size)
			{
				Array.Copy(_items, index, _items, index + count, _size - index);
			}
			_size += count;
			_version++;
			Span<T> result = _items.AsSpan(index, count);
			if (clearOutput && _clearOnFree)
			{
				result.Clear();
			}
			return result;
		}

		public int LastIndexOf(T item)
		{
			if (_size == 0)
			{
				return -1;
			}
			return LastIndexOf(item, _size - 1, _size);
		}

		public int LastIndexOf(T item, int index)
		{
			if (index >= _size)
			{
				ThrowHelper.ThrowArgumentOutOfRange_IndexException();
			}
			return LastIndexOf(item, index, index + 1);
		}

		public int LastIndexOf(T item, int index, int count)
		{
			if (Count != 0 && index < 0)
			{
				ThrowHelper.ThrowIndexArgumentOutOfRange_NeedNonNegNumException();
			}
			if (Count != 0 && count < 0)
			{
				ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.count, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum);
			}
			if (_size == 0)
			{
				return -1;
			}
			if (index >= _size)
			{
				ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.index, ExceptionResource.ArgumentOutOfRange_BiggerThanCollection);
			}
			if (count > index + 1)
			{
				ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.count, ExceptionResource.ArgumentOutOfRange_BiggerThanCollection);
			}
			return Array.LastIndexOf(_items, item, index, count);
		}

		public bool Remove(T item)
		{
			int num = IndexOf(item);
			if (num >= 0)
			{
				RemoveAt(num);
				return true;
			}
			return false;
		}

		void IList.Remove(object item)
		{
			if (IsCompatibleObject(item))
			{
				Remove((T)item);
			}
		}

		public int RemoveAll(Func<T, bool> match)
		{
			if (match == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match);
			}
			int i;
			for (i = 0; i < _size && !match(_items[i]); i++)
			{
			}
			if (i >= _size)
			{
				return 0;
			}
			int j = i + 1;
			while (j < _size)
			{
				for (; j < _size && match(_items[j]); j++)
				{
				}
				if (j < _size)
				{
					_items[i++] = _items[j++];
				}
			}
			if (_clearOnFree)
			{
				Array.Clear(_items, i, _size - i);
			}
			int result = _size - i;
			_size = i;
			_version++;
			return result;
		}

		public void RemoveAt(int index)
		{
			if ((uint)index >= (uint)_size)
			{
				ThrowHelper.ThrowArgumentOutOfRange_IndexException();
			}
			_size--;
			if (index < _size)
			{
				Array.Copy(_items, index + 1, _items, index, _size - index);
			}
			_version++;
			if (_clearOnFree)
			{
				_items[_size] = default(T);
			}
		}

		public void RemoveRange(int index, int count)
		{
			if (index < 0)
			{
				ThrowHelper.ThrowIndexArgumentOutOfRange_NeedNonNegNumException();
			}
			if (count < 0)
			{
				ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.count, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum);
			}
			if (_size - index < count)
			{
				ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidOffLen);
			}
			if (count > 0)
			{
				_size -= count;
				if (index < _size)
				{
					Array.Copy(_items, index + count, _items, index, _size - index);
				}
				_version++;
				if (_clearOnFree)
				{
					Array.Clear(_items, _size, count);
				}
			}
		}

		public void Reverse()
		{
			Reverse(0, _size);
		}

		public void Reverse(int index, int count)
		{
			if (index < 0)
			{
				ThrowHelper.ThrowIndexArgumentOutOfRange_NeedNonNegNumException();
			}
			if (count < 0)
			{
				ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.count, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum);
			}
			if (_size - index < count)
			{
				ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidOffLen);
			}
			if (count > 1)
			{
				Array.Reverse((Array)_items, index, count);
			}
			_version++;
		}

		public void Sort()
		{
			Sort(0, Count, null);
		}

		public void Sort(IComparer<T> comparer)
		{
			Sort(0, Count, comparer);
		}

		public void Sort(int index, int count, IComparer<T> comparer)
		{
			if (index < 0)
			{
				ThrowHelper.ThrowIndexArgumentOutOfRange_NeedNonNegNumException();
			}
			if (count < 0)
			{
				ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.count, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum);
			}
			if (_size - index < count)
			{
				ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidOffLen);
			}
			if (count > 1)
			{
				Array.Sort(_items, index, count, comparer);
			}
			_version++;
		}

		public void Sort(Func<T, T, int> comparison)
		{
			if (comparison == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.comparison);
			}
			if (_size > 1)
			{
				Array.Sort(_items, 0, _size, new Comparer(comparison));
			}
			_version++;
		}

		public T[] ToArray()
		{
			if (_size == 0)
			{
				return s_emptyArray;
			}
			return Span.ToArray();
		}

		public void TrimExcess()
		{
			int num = (int)((double)_items.Length * 0.9);
			if (_size < num)
			{
				Capacity = _size;
			}
		}

		public bool TrueForAll(Func<T, bool> match)
		{
			if (match == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match);
			}
			for (int i = 0; i < _size; i++)
			{
				if (!match(_items[i]))
				{
					return false;
				}
			}
			return true;
		}

		private void ReturnArray()
		{
			if (_items.Length != 0)
			{
				try
				{
					_pool.Return(_items, _clearOnFree);
				}
				catch (ArgumentException)
				{
				}
				_items = s_emptyArray;
			}
		}

		private static bool ShouldClear(ClearMode mode)
		{
			return mode != ClearMode.Never;
		}

		public void Dispose()
		{
			ReturnArray();
			_size = 0;
			_version++;
		}

		void IDeserializationCallback.OnDeserialization(object sender)
		{
			_pool = ArrayPool<T>.Shared;
		}
	}
	[Serializable]
	[DebuggerTypeProxy(typeof(QueueDebugView<>))]
	[DebuggerDisplay("Count = {Count}")]
	public class PooledQueue<T> : IEnumerable<T>, IEnumerable, ICollection, IReadOnlyCollection<T>, IDisposable, IDeserializationCallback
	{
		public struct Enumerator : IEnumerator<T>, IEnumerator, IDisposable
		{
			private readonly PooledQueue<T> _q;

			private readonly int _version;

			private int _index;

			private T _currentElement;

			public T Current
			{
				get
				{
					if (_index < 0)
					{
						ThrowEnumerationNotStartedOrEnded();
					}
					return _currentElement;
				}
			}

			object IEnumerator.Current => Current;

			internal Enumerator(PooledQueue<T> q)
			{
				_q = q;
				_version = q._version;
				_index = -1;
				_currentElement = default(T);
			}

			public void Dispose()
			{
				_index = -2;
				_currentElement = default(T);
			}

			public bool MoveNext()
			{
				if (_version != _q._version)
				{
					ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion();
				}
				if (_index == -2)
				{
					return false;
				}
				_index++;
				if (_index == _q._size)
				{
					_index = -2;
					_currentElement = default(T);
					return false;
				}
				T[] array = _q._array;
				int num = array.Length;
				int num2 = _q._head + _index;
				if (num2 >= num)
				{
					num2 -= num;
				}
				_currentElement = array[num2];
				return true;
			}

			private void ThrowEnumerationNotStartedOrEnded()
			{
				if (_index == -1)
				{
					ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumNotStarted();
				}
				else
				{
					ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumEnded();
				}
			}

			void IEnumerator.Reset()
			{
				if (_version != _q._version)
				{
					ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion();
				}
				_index = -1;
				_currentElement = default(T);
			}
		}

		private const int MinimumGrow = 4;

		private const int GrowFactor = 200;

		[NonSerialized]
		private ArrayPool<T> _pool;

		[NonSerialized]
		private object _syncRoot;

		private T[] _array;

		private int _head;

		private int _tail;

		private int _size;

		private int _version;

		private readonly bool _clearOnFree;

		public int Count => _size;

		public ClearMode ClearMode
		{
			get
			{
				if (!_clearOnFree)
				{
					return ClearMode.Never;
				}
				return ClearMode.Always;
			}
		}

		bool ICollection.IsSynchronized => false;

		object ICollection.SyncRoot
		{
			get
			{
				if (_syncRoot == null)
				{
					Interlocked.CompareExchange<object>(ref _syncRoot, new object(), (object)null);
				}
				return _syncRoot;
			}
		}

		public PooledQueue()
			: this(ClearMode.Auto, ArrayPool<T>.Shared)
		{
		}

		public PooledQueue(ClearMode clearMode)
			: this(clearMode, ArrayPool<T>.Shared)
		{
		}

		public PooledQueue(ArrayPool<T> customPool)
			: this(ClearMode.Auto, customPool)
		{
		}

		public PooledQueue(ClearMode clearMode, ArrayPool<T> customPool)
		{
			_pool = customPool ?? ArrayPool<T>.Shared;
			_array = Array.Empty<T>();
			_clearOnFree = ShouldClear(clearMode);
		}

		public PooledQueue(int capacity)
			: this(capacity, ClearMode.Auto, ArrayPool<T>.Shared)
		{
		}

		public PooledQueue(int capacity, ClearMode clearMode)
			: this(capacity, clearMode, ArrayPool<T>.Shared)
		{
		}

		public PooledQueue(int capacity, ArrayPool<T> customPool)
			: this(capacity, ClearMode.Auto, customPool)
		{
		}

		public PooledQueue(int capacity, ClearMode clearMode, ArrayPool<T> customPool)
		{
			if (capacity < 0)
			{
				ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.capacity, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum);
			}
			_pool = customPool ?? ArrayPool<T>.Shared;
			_array = _pool.Rent(capacity);
			_clearOnFree = ShouldClear(clearMode);
		}

		public PooledQueue(IEnumerable<T> enumerable)
			: this(enumerable, ClearMode.Auto, ArrayPool<T>.Shared)
		{
		}

		public PooledQueue(IEnumerable<T> enumerable, ClearMode clearMode)
			: this(enumerable, clearMode, ArrayPool<T>.Shared)
		{
		}

		public PooledQueue(IEnumerable<T> enumerable, ArrayPool<T> customPool)
			: this(enumerable, ClearMode.Auto, customPool)
		{
		}

		public PooledQueue(IEnumerable<T> enumerable, ClearMode clearMode, ArrayPool<T> customPool)
		{
			_pool = customPool ?? ArrayPool<T>.Shared;
			_clearOnFree = ShouldClear(clearMode);
			if (enumerable != null)
			{
				if (!(enumerable is ICollection<T> collection))
				{
					using (PooledList<T> pooledList = new PooledList<T>(enumerable))
					{
						_array = _pool.Rent(pooledList.Count);
						pooledList.Span.CopyTo(_array);
						_size = pooledList.Count;
						if (_size != _array.Length)
						{
							_tail = _size;
						}
						return;
					}
				}
				ICollection<T> collection2 = collection;
				if (collection2.Count == 0)
				{
					_array = Array.Empty<T>();
					return;
				}
				_array = _pool.Rent(collection2.Count);
				collection2.CopyTo(_array, 0);
				_size = collection2.Count;
				if (_size != _array.Length)
				{
					_tail = _size;
				}
			}
			else
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.enumerable);
			}
		}

		public PooledQueue(T[] array)
			: this((ReadOnlySpan<T>)array.AsSpan(), ClearMode.Auto, ArrayPool<T>.Shared)
		{
		}

		public PooledQueue(T[] array, ClearMode clearMode)
			: this((ReadOnlySpan<T>)array.AsSpan(), clearMode, ArrayPool<T>.Shared)
		{
		}

		public PooledQueue(T[] array, ArrayPool<T> customPool)
			: this((ReadOnlySpan<T>)array.AsSpan(), ClearMode.Auto, customPool)
		{
		}

		public PooledQueue(T[] array, ClearMode clearMode, ArrayPool<T> customPool)
			: this((ReadOnlySpan<T>)array.AsSpan(), clearMode, customPool)
		{
		}

		public PooledQueue(ReadOnlySpan<T> span)
			: this(span, ClearMode.Auto, ArrayPool<T>.Shared)
		{
		}

		public PooledQueue(ReadOnlySpan<T> span, ClearMode clearMode)
			: this(span, clearMode, ArrayPool<T>.Shared)
		{
		}

		public PooledQueue(ReadOnlySpan<T> span, ArrayPool<T> customPool)
			: this(span, ClearMode.Auto, customPool)
		{
		}

		public PooledQueue(ReadOnlySpan<T> span, ClearMode clearMode, ArrayPool<T> customPool)
		{
			_pool = customPool ?? ArrayPool<T>.Shared;
			_clearOnFree = ShouldClear(clearMode);
			_array = _pool.Rent(span.Length);
			span.CopyTo(_array);
			_size = span.Length;
			if (_size != _array.Length)
			{
				_tail = _size;
			}
		}

		public void Clear()
		{
			if (_size != 0)
			{
				if (_clearOnFree)
				{
					if (_head < _tail)
					{
						Array.Clear(_array, _head, _size);
					}
					else
					{
						Array.Clear(_array, _head, _array.Length - _head);
						Array.Clear(_array, 0, _tail);
					}
				}
				_size = 0;
			}
			_head = 0;
			_tail = 0;
			_version++;
		}

		public void CopyTo(T[] array, int arrayIndex)
		{
			if (array == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
			}
			if ((uint)arrayIndex > (uint)array.Length)
			{
				ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.arrayIndex, ExceptionResource.ArgumentOutOfRange_Index);
			}
			if (array.Length - arrayIndex < _size)
			{
				ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidOffLen);
			}
			int size = _size;
			if (size != 0)
			{
				int num = Math.Min(_array.Length - _head, size);
				Array.Copy(_array, _head, array, arrayIndex, num);
				size -= num;
				if (size > 0)
				{
					Array.Copy(_array, 0, array, arrayIndex + _array.Length - _head, size);
				}
			}
		}

		void ICollection.CopyTo(Array array, int index)
		{
			if (array == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
			}
			if (array.Rank != 1)
			{
				ThrowHelper.ThrowArgumentException(ExceptionResource.Rank_MultiDimNotSupported, ExceptionArgument.array);
			}
			if (array.GetLowerBound(0) != 0)
			{
				ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_NonZeroLowerBound, ExceptionArgument.array);
			}
			int length = array.Length;
			if ((uint)index > (uint)length)
			{
				ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.index, ExceptionResource.ArgumentOutOfRange_Index);
			}
			if (length - index < _size)
			{
				ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidOffLen);
			}
			int size = _size;
			if (size == 0)
			{
				return;
			}
			try
			{
				int num = ((_array.Length - _head < size) ? (_array.Length - _head) : size);
				Array.Copy(_array, _head, array, index, num);
				size -= num;
				if (size > 0)
				{
					Array.Copy(_array, 0, array, index + _array.Length - _head, size);
				}
			}
			catch (ArrayTypeMismatchException)
			{
				ThrowHelper.ThrowArgumentException_Argument_InvalidArrayType();
			}
		}

		public void Enqueue(T item)
		{
			if (_size == _array.Length)
			{
				int num = (int)((long)_array.Length * 200L / 100);
				if (num < _array.Length + 4)
				{
					num = _array.Length + 4;
				}
				SetCapacity(num);
			}
			_array[_tail] = item;
			MoveNext(ref _tail);
			_size++;
			_version++;
		}

		public Enumerator GetEnumerator()
		{
			return new Enumerator(this);
		}

		IEnumerator<T> IEnumerable<T>.GetEnumerator()
		{
			return new Enumerator(this);
		}

		IEnumerator IEnumerable.GetEnumerator()
		{
			return new Enumerator(this);
		}

		public T Dequeue()
		{
			int head = _head;
			T[] array = _array;
			if (_size == 0)
			{
				ThrowForEmptyQueue();
			}
			T result = array[head];
			if (_clearOnFree)
			{
				array[head] = default(T);
			}
			MoveNext(ref _head);
			_size--;
			_version++;
			return result;
		}

		public bool TryDequeue(out T result)
		{
			int head = _head;
			T[] array = _array;
			if (_size == 0)
			{
				result = default(T);
				return false;
			}
			result = array[head];
			if (_clearOnFree)
			{
				array[head] = default(T);
			}
			MoveNext(ref _head);
			_size--;
			_version++;
			return true;
		}

		public T Peek()
		{
			if (_size == 0)
			{
				ThrowForEmptyQueue();
			}
			return _array[_head];
		}

		public bool TryPeek(out T result)
		{
			if (_size == 0)
			{
				result = default(T);
				return false;
			}
			result = _array[_head];
			return true;
		}

		public bool Contains(T item)
		{
			if (_size == 0)
			{
				return false;
			}
			if (_head < _tail)
			{
				return Array.IndexOf(_array, item, _head, _size) >= 0;
			}
			if (Array.IndexOf(_array, item, _head, _array.Length - _head) < 0)
			{
				return Array.IndexOf(_array, item, 0, _tail) >= 0;
			}
			return true;
		}

		public int RemoveWhere(Func<T, bool> match)
		{
			if (match == null)
			{
				ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match);
			}
			if (_size == 0)
			{
				return 0;
			}
			T[] array = _pool.Rent(_size);
			int num = 0;
			if (_head < _tail)
			{
				int num2 = 0;
				for (int i = _head; i < _size; i++)
				{
					if (match(_array[i]))
					{
						num++;
					}
					else
					{
						array[num2++] = _array[i];
					}
				}
			}
			else
			{
				int num3 = 0;
				for (int j = _head; j < _array.Length - _head; j++)
				{
					if (match(_array[j]))
					{
						num++;
					}
					else
					{
						array[num3++] = _array[j];
					}
				}
				for (int k = 0; k < _tail; k++)
				{
					if (match(_array[k]))
					{
						num++;
					}
					else
					{
						array[num3++] = _array[k];
					}
				}
			}
			ReturnArray(array);
			_size -= num;
			_head = (_tail = 0);
			if (_size != _array.Length)
			{
				_tail = _size;
			}
			_version++;
			return num;
		}

		public T[] ToArray()
		{
			if (_size == 0)
			{
				return Array.Empty<T>();
			}
			T[] array = new T[_size];
			if (_head < _tail)
			{
				Array.Copy(_array, _head, array, 0, _size);
			}
			else
			{
				Array.Copy(_array, _head, array, 0, _array.Length - _head);
				Array.Copy(_array, 0, array, _array.Length - _head, _tail);
			}
			return array;
		}

		private void SetCapacity(int capacity)
		{
			T[] array = _pool.Rent(capacity);
			if (_size > 0)
			{
				if (_head < _tail)
				{
					Array.Copy(_array, _head, array, 0, _size);
				}
				else
				{
					Array.Copy(_array, _head, array, 0, _array.Length - _head);
					Array.Copy(_array, 0, array, _array.Length - _head, _tail);
				}
			}
			ReturnArray(array);
			_head = 0;
			_tail = ((_size != array.Length) ? _size : 0);
			_version++;
		}

		private void MoveNext(ref int index)
		{
			int num = index + 1;
			if (num == _array.Length)
			{
				num = 0;
			}
			index = num;
		}

		private void ThrowForEmptyQueue()
		{
			throw new InvalidOperationException("Queue is empty.");
		}

		public void TrimExcess()
		{
			int num = (int)((double)_array.Length * 0.9);
			if (_size < num)
			{
				SetCapacity(_size);
			}
		}

		private void ReturnArray(T[] replaceWith)
		{
			if (_array.Length != 0)
			{
				try
				{
					_pool.Return(_array, _clearOnFree);
				}
				catch (ArgumentException)
				{
				}
			}
			_array = replaceWith;
		}

		private static bool ShouldClear(C

IcedTasks/IcedTasks.dll

Decompiled 2 weeks ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Threading;
using System.Threading.Tasks;
using <StartupCode$IcedTasks>;
using IcedTasks;
using IcedTasks.Polyfill.Task;
using Microsoft.FSharp.Collections;
using Microsoft.FSharp.Control;
using Microsoft.FSharp.Control.TaskBuilderExtensions;
using Microsoft.FSharp.Core;
using Microsoft.FSharp.Core.CompilerServices;

[assembly: FSharpInterfaceDataVersion(2, 0, 0)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyTitle("IcedTasks")]
[assembly: AssemblyProduct("IcedTasks")]
[assembly: AssemblyMetadata("ReleaseDate", "2024-07-10T00:00:00.0000000")]
[assembly: AssemblyFileVersion("0.11.7")]
[assembly: AssemblyInformationalVersion("0.11.7")]
[assembly: AssemblyMetadata("ReleaseChannel", "release")]
[assembly: AssemblyMetadata("GitHash", "db0b55bd89f769e17744319bfc510486a5b1fc5f")]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.11.7.0")]
namespace IcedTasks
{
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Awaiter
	{
		public static bool IsCompleted<Awaiter, TResult>(Awaiter awaiter) where Awaiter : ICriticalNotifyCompletion
		{
			throw new NotSupportedException("Dynamic invocation of get_IsCompleted is not supported");
		}

		public static bool IsCompleted$W<Awaiter, TResult>(FSharpFunc<Awaiter, TResult> getResult, FSharpFunc<Awaiter, bool> get_IsCompleted, Awaiter awaiter) where Awaiter : ICriticalNotifyCompletion
		{
			return get_IsCompleted.Invoke(awaiter);
		}

		public static TResult GetResult<Awaiter, TResult>(Awaiter awaiter) where Awaiter : ICriticalNotifyCompletion
		{
			throw new NotSupportedException("Dynamic invocation of GetResult is not supported");
		}

		public static TResult GetResult$W<Awaiter, TResult>(FSharpFunc<Awaiter, TResult> getResult, FSharpFunc<Awaiter, bool> get_IsCompleted, Awaiter awaiter) where Awaiter : ICriticalNotifyCompletion
		{
			return getResult.Invoke(awaiter);
		}

		public static void OnCompleted<Awaiter, TResult, Continuation>(Awaiter awaiter, Action continuation) where Awaiter : ICriticalNotifyCompletion
		{
			Awaiter val = awaiter;
			val.OnCompleted(continuation);
		}

		public static void OnCompleted$W<Awaiter, TResult, Continuation>(FSharpFunc<Awaiter, TResult> getResult, FSharpFunc<Awaiter, bool> get_IsCompleted, Awaiter awaiter, Action continuation) where Awaiter : ICriticalNotifyCompletion
		{
			Awaiter val = awaiter;
			val.OnCompleted(continuation);
		}

		public static void UnsafeOnCompleted<Awaiter, TResult, Continuation>(Awaiter awaiter, Action continuation) where Awaiter : ICriticalNotifyCompletion
		{
			Awaiter val = awaiter;
			val.UnsafeOnCompleted(continuation);
		}

		public static void UnsafeOnCompleted$W<Awaiter, TResult, Continuation>(FSharpFunc<Awaiter, TResult> getResult, FSharpFunc<Awaiter, bool> get_IsCompleted, Awaiter awaiter, Action continuation) where Awaiter : ICriticalNotifyCompletion
		{
			Awaiter val = awaiter;
			val.UnsafeOnCompleted(continuation);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Awaitable
	{
		public static Awaiter GetAwaiter<Awaitable, Awaiter, TResult>(Awaitable awaitable) where Awaiter : ICriticalNotifyCompletion
		{
			throw new NotSupportedException("Dynamic invocation of GetAwaiter is not supported");
		}

		public static Awaiter GetAwaiter$W<Awaitable, Awaiter, TResult>(FSharpFunc<Awaitable, Awaiter> getAwaiter, FSharpFunc<Awaiter, TResult> getResult, FSharpFunc<Awaiter, bool> get_IsCompleted, Awaitable awaitable) where Awaiter : ICriticalNotifyCompletion
		{
			return getAwaiter.Invoke(awaitable);
		}

		public static TaskAwaiter<T> GetTaskAwaiter<T>(Task<T> t)
		{
			return t.GetAwaiter();
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class MethodBuilder
	{
		public static void SetResult<Builder, TResult>(ref Builder builder)
		{
			throw new NotSupportedException("Dynamic invocation of SetResult is not supported");
		}

		public static void SetResult$W<Builder, TResult>(FSharpFunc<Builder, Unit> setResult, ref Builder builder)
		{
			setResult.Invoke(builder);
		}

		public static void SetResult<Builder, TResult>(ref Builder builder, TResult result)
		{
			throw new NotSupportedException("Dynamic invocation of SetResult is not supported");
		}

		public static void SetResult$W<Builder, TResult>(FSharpFunc<Builder, FSharpFunc<TResult, Unit>> setResult, ref Builder builder, TResult result)
		{
			FSharpFunc<Unit, ?>.InvokeFast<Unit>((FSharpFunc<Unit, FSharpFunc<?, Unit>>)(object)setResult, (Unit)builder, result);
		}

		public static void SetException<Builder>(ref Builder builder, Exception ex)
		{
			throw new NotSupportedException("Dynamic invocation of SetException is not supported");
		}

		public static void SetException$W<Builder>(FSharpFunc<Builder, FSharpFunc<Exception, Unit>> setException, ref Builder builder, Exception ex)
		{
			FSharpFunc<Unit, Exception>.InvokeFast<Unit>((FSharpFunc<Unit, FSharpFunc<Exception, Unit>>)(object)setException, (Unit)builder, ex);
		}

		public static void SetStateMachine<Builder, TStateMachine>(ref Builder builder, TStateMachine stateMachine)
		{
			throw new NotSupportedException("Dynamic invocation of SetStateMachine is not supported");
		}

		public static void SetStateMachine$W<Builder, TStateMachine>(FSharpFunc<Builder, FSharpFunc<TStateMachine, Unit>> setStateMachine, ref Builder builder, TStateMachine stateMachine)
		{
			FSharpFunc<Unit, ?>.InvokeFast<Unit>((FSharpFunc<Unit, FSharpFunc<?, Unit>>)(object)setStateMachine, (Unit)builder, stateMachine);
		}

		public static void Start<Builder, TStateMachine>(ref Builder builder, ref TStateMachine stateMachine)
		{
			throw new NotSupportedException("Dynamic invocation of Start is not supported");
		}

		public static void Start$W<Builder, TStateMachine>(FSharpFunc<Builder, FSharpFunc<ref TStateMachine, Unit>> start, ref Builder builder, ref TStateMachine stateMachine)
		{
			FSharpFunc<Unit, ref ?>.InvokeFast<Unit>((FSharpFunc<Unit, FSharpFunc<ref ?, Unit>>)(object)start, (Unit)builder, ref Unsafe.As<TStateMachine, ?>(ref stateMachine));
		}

		public static TResult get_Task<Builder, TResult>(ref Builder builder)
		{
			throw new NotSupportedException("Dynamic invocation of get_Task is not supported");
		}

		public static TResult get_Task$W<Builder, TResult>(FSharpFunc<Builder, TResult> get_Task, ref Builder builder)
		{
			return get_Task.Invoke(builder);
		}

		public static void AwaitUnsafeOnCompleted<Builder, TAwaiter, TStateMachine>(ref Builder builder, ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : ICriticalNotifyCompletion where TStateMachine : IAsyncStateMachine
		{
			throw new NotSupportedException("Dynamic invocation of AwaitUnsafeOnCompleted is not supported");
		}

		public unsafe static void AwaitUnsafeOnCompleted$W<Builder, TAwaiter, TStateMachine>(FSharpFunc<Builder, FSharpFunc<ref TAwaiter, FSharpFunc<ref TStateMachine, Unit>>> awaitUnsafeOnCompleted, ref Builder builder, ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : ICriticalNotifyCompletion where TStateMachine : IAsyncStateMachine
		{
			FSharpFunc<ref TStateMachine, ref Unit>.InvokeFast<ref TStateMachine, Unit>((FSharpFunc<ref TStateMachine, FSharpFunc<ref Unit, FSharpFunc<ref TStateMachine, Unit>>>)(object)awaitUnsafeOnCompleted, ref *(TStateMachine*)builder, ref Unsafe.As<TAwaiter, Unit>(ref awaiter), ref stateMachine);
		}

		public static void AwaitOnCompleted<Builder, TAwaiter, TStateMachine>(ref Builder builder, ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : INotifyCompletion where TStateMachine : IAsyncStateMachine
		{
			throw new NotSupportedException("Dynamic invocation of AwaitOnCompleted is not supported");
		}

		public unsafe static void AwaitOnCompleted$W<Builder, TAwaiter, TStateMachine>(FSharpFunc<Builder, FSharpFunc<ref TAwaiter, FSharpFunc<ref TStateMachine, Unit>>> awaitOnCompleted, ref Builder builder, ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : INotifyCompletion where TStateMachine : IAsyncStateMachine
		{
			FSharpFunc<ref TStateMachine, ref Unit>.InvokeFast<ref TStateMachine, Unit>((FSharpFunc<ref TStateMachine, FSharpFunc<ref Unit, FSharpFunc<ref TStateMachine, Unit>>>)(object)awaitOnCompleted, ref *(TStateMachine*)builder, ref Unsafe.As<TAwaiter, Unit>(ref awaiter), ref stateMachine);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	internal class Async
	{
		[CompilationArgumentCounts(new int[] { 1, 1 })]
		internal static FSharpAsync<b> map<a, b>(FSharpFunc<a, b> f, FSharpAsync<a> x)
		{
			FSharpFunc<a, FSharpAsync<b>> binder = new $AsyncEx.map@11-1<a, b>(f);
			return AsyncPrimitives.MakeAsync<b>((FSharpFunc<AsyncActivation<b>, AsyncReturn>)new $AsyncEx.map@11-3<a, b>(x, binder));
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class AsyncEx
	{
		public static FSharpAsync<a> AwaitAwaiter<Awaiter, a>(Awaiter awaiter) where Awaiter : ICriticalNotifyCompletion
		{
			return FSharpAsync.FromContinuations<a>((FSharpFunc<Tuple<FSharpFunc<a, Unit>, FSharpFunc<Exception, Unit>, FSharpFunc<OperationCanceledException, Unit>>, Unit>)new $AsyncEx.AwaitAwaiter@42<Awaiter, a>(awaiter));
		}

		public static FSharpAsync<a> AwaitAwaiter$W<Awaiter, a>(FSharpFunc<Awaiter, a> getResult, FSharpFunc<Awaiter, bool> get_IsCompleted, Awaiter awaiter) where Awaiter : ICriticalNotifyCompletion
		{
			return FSharpAsync.FromContinuations<a>((FSharpFunc<Tuple<FSharpFunc<a, Unit>, FSharpFunc<Exception, Unit>, FSharpFunc<OperationCanceledException, Unit>>, Unit>)new $AsyncEx.AwaitAwaiter@42-2<Awaiter, a>(getResult, get_IsCompleted, awaiter));
		}

		public static FSharpAsync<b> AwaitAwaitable<Awaitable, a, b>(Awaitable awaitable) where a : ICriticalNotifyCompletion
		{
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of GetAwaiter is not supported");
			}
			a awaiter = (a)(object)null;
			return FSharpAsync.FromContinuations<b>((FSharpFunc<Tuple<FSharpFunc<b, Unit>, FSharpFunc<Exception, Unit>, FSharpFunc<OperationCanceledException, Unit>>, Unit>)new $AsyncEx.AwaitAwaitable@62<a, b>(awaiter));
		}

		public static FSharpAsync<b> AwaitAwaitable$W<Awaitable, a, b>(FSharpFunc<Awaitable, a> getAwaiter, FSharpFunc<a, b> getResult, FSharpFunc<a, bool> get_IsCompleted, Awaitable awaitable) where a : ICriticalNotifyCompletion
		{
			a awaiter = getAwaiter.Invoke(awaitable);
			return FSharpAsync.FromContinuations<b>((FSharpFunc<Tuple<FSharpFunc<b, Unit>, FSharpFunc<Exception, Unit>, FSharpFunc<OperationCanceledException, Unit>>, Unit>)new $AsyncEx.AwaitAwaitable@62-2<a, b>(getResult, get_IsCompleted, awaiter));
		}

		public static FSharpAsync<Unit> AwaitTask(Task task)
		{
			TaskAwaiter awaiter = task.GetAwaiter();
			return FSharpAsync.FromContinuations<Unit>((FSharpFunc<Tuple<FSharpFunc<Unit, Unit>, FSharpFunc<Exception, Unit>, FSharpFunc<OperationCanceledException, Unit>>, Unit>)new $AsyncEx.AwaitTask@73(awaiter));
		}

		public static FSharpAsync<T> AwaitTask<T>(Task<T> task)
		{
			TaskAwaiter<T> awaiter = task.GetAwaiter();
			return FSharpAsync.FromContinuations<T>((FSharpFunc<Tuple<FSharpFunc<T, Unit>, FSharpFunc<Exception, Unit>, FSharpFunc<OperationCanceledException, Unit>>, Unit>)new $AsyncEx.AwaitTask@85-2<T>(awaiter));
		}

		public static FSharpAsync<a> AwaitValueTask<a>(ValueTask<a> vTask)
		{
			if (vTask.IsCompletedSuccessfully)
			{
				a result = vTask.Result;
				return AsyncPrimitives.MakeAsync<a>((FSharpFunc<AsyncActivation<a>, AsyncReturn>)new $AsyncEx.AwaitValueTask@100<a>(result));
			}
			return AwaitTask(vTask.AsTask());
		}

		public static FSharpAsync<Unit> AwaitValueTask(ValueTask vTask)
		{
			if (vTask.IsCompletedSuccessfully)
			{
				return AsyncPrimitives.MakeAsync<Unit>((FSharpFunc<AsyncActivation<Unit>, AsyncReturn>)$AsyncEx.AwaitValueTask@117-1.@_instance);
			}
			return AwaitTask(vTask.AsTask());
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class AsyncExBuilder
	{
		public FSharpAsync<Unit> Zero()
		{
			return ExtraTopLevelOperators.DefaultAsyncBuilder.Zero();
		}

		public FSharpAsync<j> Delay<j>([InlineIfLambda] FSharpFunc<Unit, FSharpAsync<j>> generator)
		{
			return ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<j>(generator);
		}

		public FSharpAsync<i> Return<i>(i value)
		{
			return AsyncPrimitives.MakeAsync<i>((FSharpFunc<AsyncActivation<i>, AsyncReturn>)new $AsyncEx.Return@196-1<i>(value));
		}

		public FSharpAsync<c> ReturnFrom<c>(FSharpAsync<c> computation)
		{
			return computation;
		}

		public FSharpAsync<f0> Bind<f, f0>(FSharpAsync<f> computation, [InlineIfLambda] FSharpFunc<f, FSharpAsync<f0>> binder)
		{
			return AsyncPrimitives.MakeAsync<f0>((FSharpFunc<AsyncActivation<f0>, AsyncReturn>)new $AsyncEx.Bind@201-4<f, f0>(computation, binder));
		}

		public FSharpAsync<ok> TryFinallyAsync<ok>(FSharpAsync<ok> computation, [InlineIfLambda] FSharpFunc<Unit, ValueTask> compensation)
		{
			FSharpAsync<Unit> compensation2 = ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<Unit>((FSharpFunc<Unit, FSharpAsync<Unit>>)new $AsyncEx.compensation@209(compensation));
			object @_instance;
			@_instance = $AsyncEx.finish@142-2.@_instance;
			object startDeferred@156- = new $AsyncEx.startDeferred@156-5(compensation2, @_instance);
			FSharpFunc<CancellationToken, FSharpFunc<Tuple<FSharpFunc<ok, Unit>, FSharpFunc<Exception, Unit>, FSharpFunc<OperationCanceledException, Unit>>, Unit>> startComp = (FSharpFunc<CancellationToken, FSharpFunc<Tuple<FSharpFunc<ok, Unit>, FSharpFunc<Exception, Unit>, FSharpFunc<OperationCanceledException, Unit>>, Unit>>)(object)new $AsyncEx.TryFinallyAsync@211-12<ok>(computation, startDeferred@156-);
			return ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<ok>((FSharpFunc<Unit, FSharpAsync<ok>>)new $AsyncEx.TryFinallyAsync@211-16<ok>(startComp));
		}

		public FSharpAsync<ok> Using<b, ok>(b resource, [InlineIfLambda] FSharpFunc<b, FSharpAsync<ok>> binder) where b : IAsyncDisposable
		{
			FSharpAsync<ok> computation = binder.Invoke(resource);
			FSharpAsync<Unit> compensation = ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<Unit>((FSharpFunc<Unit, FSharpAsync<Unit>>)new $AsyncEx.Using@218-14<b>(resource));
			object @_instance;
			@_instance = $AsyncEx.finish@142-4.@_instance;
			object startDeferred@156- = new $AsyncEx.startDeferred@156-10(compensation, @_instance);
			FSharpFunc<CancellationToken, FSharpFunc<Tuple<FSharpFunc<ok, Unit>, FSharpFunc<Exception, Unit>, FSharpFunc<OperationCanceledException, Unit>>, Unit>> startComp = (FSharpFunc<CancellationToken, FSharpFunc<Tuple<FSharpFunc<ok, Unit>, FSharpFunc<Exception, Unit>, FSharpFunc<OperationCanceledException, Unit>>, Unit>>)(object)new $AsyncEx.Using@218-16<ok>(computation, startDeferred@156-);
			return ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<ok>((FSharpFunc<Unit, FSharpAsync<ok>>)new $AsyncEx.Using@218-20<ok>(startComp));
		}

		internal FSharpAsync<Unit> WhileAsync(FSharpAsync<bool> guard, FSharpAsync<Unit> computation)
		{
			return ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<Unit>((FSharpFunc<Unit, FSharpAsync<Unit>>)new $AsyncEx.WhileAsync@231-14(guard, computation));
		}

		public FSharpAsync<Unit> For<e>(IAsyncEnumerable<e> sequence, [InlineIfLambda] FSharpFunc<e, FSharpAsync<Unit>> body)
		{
			FSharpAsync<CancellationToken> cancellationToken = FSharpAsync.CancellationToken;
			return AsyncPrimitives.MakeAsync<Unit>((FSharpFunc<AsyncActivation<Unit>, AsyncReturn>)new $AsyncEx.For@243-40<e>(sequence, body, cancellationToken));
		}

		public FSharpAsync<Unit> While([InlineIfLambda] FSharpFunc<Unit, bool> guard, FSharpAsync<Unit> computation)
		{
			return ExtraTopLevelOperators.DefaultAsyncBuilder.While(guard, computation);
		}

		public FSharpAsync<Unit> For<e>(IEnumerable<e> sequence, [InlineIfLambda] FSharpFunc<e, FSharpAsync<Unit>> body)
		{
			return ExtraTopLevelOperators.DefaultAsyncBuilder.For<e>(sequence, body);
		}

		public FSharpAsync<a> Combine<a>(FSharpAsync<Unit> computation1, FSharpAsync<a> computation2)
		{
			FSharpFunc<Unit, FSharpAsync<a>> part = new $AsyncEx.Combine@269-1<a>(computation2);
			return AsyncPrimitives.MakeAsync<a>((FSharpFunc<AsyncActivation<a>, AsyncReturn>)new $AsyncEx.Combine@269-2<a>(computation1, part));
		}

		public FSharpAsync<a> TryFinally<a>(FSharpAsync<a> computation, [InlineIfLambda] FSharpFunc<Unit, Unit> compensation)
		{
			return AsyncPrimitives.MakeAsync<a>((FSharpFunc<AsyncActivation<a>, AsyncReturn>)new $AsyncEx.TryFinally@276-3<a>(computation, compensation));
		}

		public FSharpAsync<a> TryWith<a>(FSharpAsync<a> computation, [InlineIfLambda] FSharpFunc<Exception, FSharpAsync<a>> catchHandler)
		{
			return AsyncPrimitives.MakeAsync<a>((FSharpFunc<AsyncActivation<a>, AsyncReturn>)new $AsyncEx.TryWith@283-1<a>(computation, catchHandler));
		}

		public FSharpAsync<a> Source<a>(FSharpAsync<a> async)
		{
			return async;
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class ParallelAsync
	{
		[CompilationArgumentCounts(new int[] { 1, 1 })]
		public static FSharpAsync<Tuple<left, right>> zipWithStartChild<left, right>(FSharpAsync<left> a1, FSharpAsync<right> a2)
		{
			FSharpAsync<FSharpAsync<left>> computation = FSharpAsync.StartChild<left>(a1, (FSharpOption<int>)null);
			FSharpFunc<FSharpAsync<left>, FSharpAsync<Tuple<left, right>>> binder = new $ParallelAsync.zipWithStartChild@26<left, right>(a2);
			return AsyncPrimitives.MakeAsync<Tuple<left, right>>((FSharpFunc<AsyncActivation<Tuple<left, right>>, AsyncReturn>)new $ParallelAsync.zipWithStartChild@24-8<left, right>(computation, binder));
		}

		[CompilationArgumentCounts(new int[] { 1, 1 })]
		public static FSharpAsync<Tuple<left, right>> zipUsingStartImmediateAsTask<left, right>(FSharpAsync<left> a1, FSharpAsync<right> a2)
		{
			FSharpAsync<CancellationToken> cancellationToken = FSharpAsync.CancellationToken;
			FSharpFunc<CancellationToken, FSharpAsync<Tuple<left, right>>> binder = new $ParallelAsync.zipUsingStartImmediateAsTask@56<left, right>(a1, a2);
			return AsyncPrimitives.MakeAsync<Tuple<left, right>>((FSharpFunc<AsyncActivation<Tuple<left, right>>, AsyncReturn>)new $ParallelAsync.zipUsingStartImmediateAsTask@54-6<left, right>(cancellationToken, binder));
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class ParallelAsyncBuilderBase
	{
		public FSharpAsync<Unit> Zero()
		{
			return ExtraTopLevelOperators.DefaultAsyncBuilder.Zero();
		}

		public FSharpAsync<l> Delay<l>(FSharpFunc<Unit, FSharpAsync<l>> generator)
		{
			return ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<l>(generator);
		}

		public FSharpAsync<k> Return<k>(k value)
		{
			return AsyncPrimitives.MakeAsync<k>((FSharpFunc<AsyncActivation<k>, AsyncReturn>)new $ParallelAsync.Return@73-2<k>(value));
		}

		public FSharpAsync<j> ReturnFrom<j>(FSharpAsync<j> computation)
		{
			return computation;
		}

		public FSharpAsync<i> Bind<h, i>(FSharpAsync<h> computation, FSharpFunc<h, FSharpAsync<i>> binder)
		{
			return AsyncPrimitives.MakeAsync<i>((FSharpFunc<AsyncActivation<i>, AsyncReturn>)new $ParallelAsync.Bind@77-5<h, i>(computation, binder));
		}

		public FSharpAsync<g> Using<f, g>(f resource, FSharpFunc<f, FSharpAsync<g>> binder) where f : IDisposable
		{
			return ExtraTopLevelOperators.DefaultAsyncBuilder.Using<f, g>(resource, binder);
		}

		public FSharpAsync<Unit> While(FSharpFunc<Unit, bool> guard, FSharpAsync<Unit> computation)
		{
			return ExtraTopLevelOperators.DefaultAsyncBuilder.While(guard, computation);
		}

		public FSharpAsync<Unit> For<e>(IEnumerable<e> sequence, FSharpFunc<e, FSharpAsync<Unit>> body)
		{
			return ExtraTopLevelOperators.DefaultAsyncBuilder.For<e>(sequence, body);
		}

		public FSharpAsync<d> Combine<d>(FSharpAsync<Unit> computation1, FSharpAsync<d> computation2)
		{
			FSharpFunc<Unit, FSharpAsync<d>> part = new $ParallelAsync.Combine@86-3<d>(computation2);
			return AsyncPrimitives.MakeAsync<d>((FSharpFunc<AsyncActivation<d>, AsyncReturn>)new $ParallelAsync.Combine@86-4<d>(computation1, part));
		}

		public FSharpAsync<c> TryFinally<c>(FSharpAsync<c> computation, FSharpFunc<Unit, Unit> compensation)
		{
			return AsyncPrimitives.MakeAsync<c>((FSharpFunc<AsyncActivation<c>, AsyncReturn>)new $ParallelAsync.TryFinally@89-4<c>(computation, compensation));
		}

		public FSharpAsync<b> TryWith<b>(FSharpAsync<b> computation, FSharpFunc<Exception, FSharpAsync<b>> catchHandler)
		{
			return AsyncPrimitives.MakeAsync<b>((FSharpFunc<AsyncActivation<b>, AsyncReturn>)new $ParallelAsync.TryWith@92-3<b>(computation, catchHandler));
		}

		public FSharpAsync<a> BindReturn<T, a>(FSharpAsync<T> x, FSharpFunc<T, a> f)
		{
			FSharpFunc<T, FSharpAsync<a>> binder = new $ParallelAsync.BindReturn@94-8<T, a>(f);
			return AsyncPrimitives.MakeAsync<a>((FSharpFunc<AsyncActivation<a>, AsyncReturn>)new $ParallelAsync.BindReturn@94-10<T, a>(x, binder));
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class ParallelAsyncBuilderUsingStartChild : ParallelAsyncBuilderBase
	{
		public FSharpAsync<Tuple<T, T1>> MergeSources<T, T1>(FSharpAsync<T> t1, FSharpAsync<T1> t2)
		{
			return ParallelAsync.zipWithStartChild<T, T1>(t1, t2);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class ParallelAsyncBuilderUsingStartImmediateAsTask : ParallelAsyncBuilderBase
	{
		public FSharpAsync<Tuple<T, T1>> MergeSources<T, T1>(FSharpAsync<T> t1, FSharpAsync<T1> t2)
		{
			FSharpAsync<CancellationToken> cancellationToken = FSharpAsync.CancellationToken;
			FSharpFunc<CancellationToken, FSharpAsync<Tuple<T, T1>>> binder = new $ParallelAsync.MergeSources@114-16<T, T1>(t1, t2);
			return AsyncPrimitives.MakeAsync<Tuple<T, T1>>((FSharpFunc<AsyncActivation<Tuple<T, T1>>, AsyncReturn>)new $ParallelAsync.MergeSources@114-22<T, T1>(cancellationToken, binder));
		}
	}
	[AutoOpen]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public static class CancellableTasks
	{
		[Serializable]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public class CancellableTaskBuilder : CancellableTaskBase.CancellableTaskBuilderBase
		{
			public static FSharpFunc<CancellationToken, Task<T>> RunDynamic<T>(ResumableCode<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, T> code)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Unknown result type (might be due to invalid IL or missing references)
				FSharpRef<ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>> sm = new FSharpRef<ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>(default(ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>));
				ResumptionFunc<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>> initialResumptionFunc = new initialResumptionFunc@55-6<T>(code).Invoke;
				ResumptionDynamicInfo<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>> resumptionInfo = new resumptionInfo@58-6<T>(initialResumptionFunc);
				return new RunDynamic@92-19<T>(sm, resumptionInfo);
			}

			public FSharpFunc<CancellationToken, Task<T>> Run<T>(ResumableCode<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, T> code)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Unknown result type (might be due to invalid IL or missing references)
				FSharpRef<ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>> sm = new FSharpRef<ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>(default(ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>));
				ResumptionFunc<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>> initialResumptionFunc = new Run@142-31<T>(code).Invoke;
				ResumptionDynamicInfo<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>> resumptionInfo = new Run@142-32<T>(initialResumptionFunc);
				return new Run@142-33<T>(sm, resumptionInfo);
			}

			public FSharpFunc<CancellationToken, TaskAwaiter<i>> Source<i>([InlineIfLambda] FSharpFunc<CancellationToken, Task<i>> x)
			{
				return new Source@148-1<i>(x);
			}

			[NoEagerConstraintApplication]
			public FSharpFunc<CancellationToken, TaskAwaiter<(g, h)>> MergeSources<Awaiter1, g, Awaiter2, h>([InlineIfLambda] FSharpFunc<CancellationToken, Awaiter1> left, [InlineIfLambda] FSharpFunc<CancellationToken, Awaiter2> right) where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
			{
				MergeSources@157-47<Awaiter1, g, Awaiter2, h> mergeSources@157- = default(MergeSources@157-47<Awaiter1, g, Awaiter2, h>);
				mergeSources@157-.left = left;
				mergeSources@157-.right = right;
				mergeSources@157- = mergeSources@157-;
				FSharpFunc<CancellationToken, Task<(g, h)>> x = new MergeSources@157-48<Awaiter1, g, Awaiter2, h>(mergeSources@157-);
				return new MergeSources@156-49<g, h>(x);
			}

			[NoEagerConstraintApplication]
			public FSharpFunc<CancellationToken, TaskAwaiter<(g, h)>> MergeSources$W<Awaiter1, g, Awaiter2, h>(FSharpFunc<Awaiter1, g> getResult, FSharpFunc<Awaiter2, h> getResult1, FSharpFunc<Awaiter1, bool> get_IsCompleted, FSharpFunc<Awaiter2, bool> get_IsCompleted3, [InlineIfLambda] FSharpFunc<CancellationToken, Awaiter1> left, [InlineIfLambda] FSharpFunc<CancellationToken, Awaiter2> right) where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
			{
				MergeSources@157-50<Awaiter1, g, Awaiter2, h> mergeSources@157- = default(MergeSources@157-50<Awaiter1, g, Awaiter2, h>);
				mergeSources@157-.getResult = (FSharpFunc<Awaiter1, g>)(object)left;
				mergeSources@157-.getResult0 = (FSharpFunc<Awaiter2, h>)(object)right;
				mergeSources@157- = mergeSources@157-;
				FSharpFunc<CancellationToken, Task<(g, h)>> x = new MergeSources@157-51<Awaiter1, g, Awaiter2, h>(getResult, getResult1, get_IsCompleted, get_IsCompleted3, mergeSources@157-);
				return new MergeSources@156-52<g, h>(x);
			}

			[NoEagerConstraintApplication]
			public FSharpFunc<CancellationToken, TaskAwaiter<(e, f)>> MergeSources<Awaiter1, e, Awaiter2, f>(Awaiter1 left, [InlineIfLambda] FSharpFunc<CancellationToken, Awaiter2> right) where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
			{
				MergeSources@180-53<Awaiter1, e, Awaiter2, f> mergeSources@180- = default(MergeSources@180-53<Awaiter1, e, Awaiter2, f>);
				mergeSources@180-.left = left;
				mergeSources@180-.right = right;
				mergeSources@180- = mergeSources@180-;
				FSharpFunc<CancellationToken, Task<(e, f)>> x = new MergeSources@180-54<Awaiter1, e, Awaiter2, f>(mergeSources@180-);
				return new MergeSources@179-55<e, f>(x);
			}

			[NoEagerConstraintApplication]
			public FSharpFunc<CancellationToken, TaskAwaiter<(e, f)>> MergeSources$W<Awaiter1, e, Awaiter2, f>(FSharpFunc<Awaiter1, e> getResult, FSharpFunc<Awaiter2, f> getResult1, FSharpFunc<Awaiter1, bool> get_IsCompleted, FSharpFunc<Awaiter2, bool> get_IsCompleted3, Awaiter1 left, [InlineIfLambda] FSharpFunc<CancellationToken, Awaiter2> right) where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
			{
				MergeSources@180-56<Awaiter1, e, Awaiter2, f> mergeSources@180- = default(MergeSources@180-56<Awaiter1, e, Awaiter2, f>);
				mergeSources@180-.getResult = (FSharpFunc<Awaiter1, e>)left;
				mergeSources@180-.getResult0 = (FSharpFunc<Awaiter2, f>)(object)right;
				mergeSources@180- = mergeSources@180-;
				FSharpFunc<CancellationToken, Task<(e, f)>> x = new MergeSources@180-57<Awaiter1, e, Awaiter2, f>(getResult, getResult1, get_IsCompleted, get_IsCompleted3, mergeSources@180-);
				return new MergeSources@179-58<e, f>(x);
			}

			[NoEagerConstraintApplication]
			public FSharpFunc<CancellationToken, TaskAwaiter<(c, d)>> MergeSources<Awaiter1, c, Awaiter2, d>([InlineIfLambda] FSharpFunc<CancellationToken, Awaiter1> left, Awaiter2 right) where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
			{
				MergeSources@203-59<Awaiter1, c, Awaiter2, d> mergeSources@203- = default(MergeSources@203-59<Awaiter1, c, Awaiter2, d>);
				mergeSources@203-.left = left;
				mergeSources@203-.right = right;
				mergeSources@203- = mergeSources@203-;
				FSharpFunc<CancellationToken, Task<(c, d)>> x = new MergeSources@203-60<Awaiter1, c, Awaiter2, d>(mergeSources@203-);
				return new MergeSources@202-61<c, d>(x);
			}

			[NoEagerConstraintApplication]
			public FSharpFunc<CancellationToken, TaskAwaiter<(c, d)>> MergeSources$W<Awaiter1, c, Awaiter2, d>(FSharpFunc<Awaiter1, c> getResult, FSharpFunc<Awaiter2, d> getResult1, FSharpFunc<Awaiter1, bool> get_IsCompleted, FSharpFunc<Awaiter2, bool> get_IsCompleted3, [InlineIfLambda] FSharpFunc<CancellationToken, Awaiter1> left, Awaiter2 right) where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
			{
				MergeSources@203-62<Awaiter1, c, Awaiter2, d> mergeSources@203- = default(MergeSources@203-62<Awaiter1, c, Awaiter2, d>);
				mergeSources@203-.getResult = (FSharpFunc<Awaiter1, c>)(object)left;
				mergeSources@203-.getResult0 = (FSharpFunc<Awaiter2, d>)right;
				mergeSources@203- = mergeSources@203-;
				FSharpFunc<CancellationToken, Task<(c, d)>> x = new MergeSources@203-63<Awaiter1, c, Awaiter2, d>(getResult, getResult1, get_IsCompleted, get_IsCompleted3, mergeSources@203-);
				return new MergeSources@202-64<c, d>(x);
			}

			[NoEagerConstraintApplication]
			public FSharpFunc<CancellationToken, TaskAwaiter<(a, b)>> MergeSources<Awaiter1, a, Awaiter2, b>(Awaiter1 left, Awaiter2 right) where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
			{
				MergeSources@221-65<Awaiter1, a, Awaiter2, b> mergeSources@221- = default(MergeSources@221-65<Awaiter1, a, Awaiter2, b>);
				mergeSources@221-.left = left;
				mergeSources@221-.right = right;
				mergeSources@221- = mergeSources@221-;
				FSharpFunc<CancellationToken, Task<(a, b)>> x = new MergeSources@221-66<Awaiter1, a, Awaiter2, b>(mergeSources@221-);
				return new MergeSources@220-67<a, b>(x);
			}

			[NoEagerConstraintApplication]
			public FSharpFunc<CancellationToken, TaskAwaiter<(a, b)>> MergeSources$W<Awaiter1, a, Awaiter2, b>(FSharpFunc<Awaiter1, a> getResult, FSharpFunc<Awaiter2, b> getResult1, FSharpFunc<Awaiter1, bool> get_IsCompleted, FSharpFunc<Awaiter2, bool> get_IsCompleted3, Awaiter1 left, Awaiter2 right) where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
			{
				MergeSources@221-68<Awaiter1, a, Awaiter2, b> mergeSources@221- = default(MergeSources@221-68<Awaiter1, a, Awaiter2, b>);
				mergeSources@221-.getResult = (FSharpFunc<Awaiter1, a>)left;
				mergeSources@221-.getResult0 = (FSharpFunc<Awaiter2, b>)right;
				mergeSources@221- = mergeSources@221-;
				FSharpFunc<CancellationToken, Task<(a, b)>> x = new MergeSources@221-69<Awaiter1, a, Awaiter2, b>(getResult, getResult1, get_IsCompleted, get_IsCompleted3, mergeSources@221-);
				return new MergeSources@220-70<a, b>(x);
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class initialResumptionFunc@55-6<T>
		{
			public ResumableCode<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, T> code;

			public initialResumptionFunc@55-6(ResumableCode<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, T> code)
			{
				this.code = code;
				base..ctor();
			}

			internal bool Invoke(ref ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>> sm)
			{
				return ((ResumableCode<CancellableTaskBase.CancellableTaskBaseStateMachineData<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, AsyncTaskMethodBuilder<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>, CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>)(object)code).Invoke(ref Unsafe.As<ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>, ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, AsyncTaskMethodBuilder<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>>>(ref sm));
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class resumptionInfo@58-6<T> : ResumptionDynamicInfo<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>
		{
			public ResumptionFunc<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>> initialResumptionFunc;

			public resumptionInfo@58-6(ResumptionFunc<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>> initialResumptionFunc)
			{
				this.initialResumptionFunc = initialResumptionFunc;
				((ResumptionDynamicInfo<CancellableTaskBase.CancellableTaskBaseStateMachineData<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, AsyncTaskMethodBuilder<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>>)(object)this)..ctor((ResumptionFunc<CancellableTaskBase.CancellableTaskBaseStateMachineData<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, AsyncTaskMethodBuilder<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>>)(object)this.initialResumptionFunc);
			}

			public override void MoveNext(ref ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>> sm)
			{
				Exception ex = null;
				Exception ex2;
				try
				{
					((ResumptionDynamicInfo<CancellableTaskBase.CancellableTaskBaseStateMachineData<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, AsyncTaskMethodBuilder<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>>)(object)sm.ResumptionDynamicInfo).ResumptionData = null;
					if (((ResumptionFunc<CancellableTaskBase.CancellableTaskBaseStateMachineData<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, AsyncTaskMethodBuilder<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>>)(object)((ResumptionDynamicInfo<CancellableTaskBase.CancellableTaskBaseStateMachineData<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, AsyncTaskMethodBuilder<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>>)(object)this).ResumptionFunc).Invoke(ref Unsafe.As<ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>, ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, AsyncTaskMethodBuilder<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>>>(ref sm)))
					{
						sm.Data.MethodBuilder.SetResult(sm.Data.Result);
					}
					else
					{
						ICriticalNotifyCompletion awaiter = (ICriticalNotifyCompletion)((ResumptionDynamicInfo<CancellableTaskBase.CancellableTaskBaseStateMachineData<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, AsyncTaskMethodBuilder<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>>)(object)sm.ResumptionDynamicInfo).ResumptionData;
						sm.Data.MethodBuilder.AwaitUnsafeOnCompleted<ICriticalNotifyCompletion, ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>(ref awaiter, ref sm);
					}
				}
				catch (object obj)
				{
					ex2 = (Exception)obj;
					ex = ex2;
				}
				ex2 = ex;
				if (ex2 != null)
				{
					sm.Data.MethodBuilder.SetException(ex2);
				}
			}

			public override void SetStateMachine(ref ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>> sm, IAsyncStateMachine state)
			{
				sm.Data.MethodBuilder.SetStateMachine(state);
			}
		}

		[Serializable]
		internal sealed class RunDynamic@92-19<T> : FSharpFunc<CancellationToken, Task<T>>
		{
			public FSharpRef<ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>> sm;

			public ResumptionDynamicInfo<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>> resumptionInfo;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal RunDynamic@92-19(FSharpRef<ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>> sm, ResumptionDynamicInfo<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>> resumptionInfo)
			{
				((FSharpFunc<CancellationToken, Task<CancellationToken>>)(object)this)..ctor();
				this.sm = sm;
				this.resumptionInfo = resumptionInfo;
			}

			public override Task<T> Invoke(CancellationToken ct)
			{
				if (ct.IsCancellationRequested)
				{
					return Task.FromCanceled<T>(ct);
				}
				sm.contents@.Data.CancellationToken = ct;
				sm.contents@.ResumptionDynamicInfo = resumptionInfo;
				sm.contents@.Data.MethodBuilder = AsyncTaskMethodBuilder<T>.Create();
				sm.contents@.Data.MethodBuilder.Start<ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>(ref sm.contents@);
				return sm.contents@.Data.MethodBuilder.Task;
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class Run@142-31<T>
		{
			public ResumableCode<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, T> code;

			public Run@142-31(ResumableCode<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, T> code)
			{
				this.code = code;
				base..ctor();
			}

			internal bool Invoke(ref ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>> sm)
			{
				return ((ResumableCode<CancellableTaskBase.CancellableTaskBaseStateMachineData<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, AsyncTaskMethodBuilder<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>, CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>)(object)code).Invoke(ref Unsafe.As<ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>, ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, AsyncTaskMethodBuilder<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>>>(ref sm));
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class Run@142-32<T> : ResumptionDynamicInfo<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public ResumptionFunc<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>> initialResumptionFunc;

			public Run@142-32(ResumptionFunc<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>> initialResumptionFunc)
			{
				this.initialResumptionFunc = initialResumptionFunc;
				((ResumptionDynamicInfo<CancellableTaskBase.CancellableTaskBaseStateMachineData<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, AsyncTaskMethodBuilder<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>>)(object)this)..ctor((ResumptionFunc<CancellableTaskBase.CancellableTaskBaseStateMachineData<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, AsyncTaskMethodBuilder<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>>)(object)this.initialResumptionFunc);
			}

			public override void MoveNext(ref ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>> sm)
			{
				Exception ex = null;
				Exception ex2;
				try
				{
					((ResumptionDynamicInfo<CancellableTaskBase.CancellableTaskBaseStateMachineData<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, AsyncTaskMethodBuilder<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>>)(object)sm.ResumptionDynamicInfo).ResumptionData = null;
					if (((ResumptionFunc<CancellableTaskBase.CancellableTaskBaseStateMachineData<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, AsyncTaskMethodBuilder<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>>)(object)((ResumptionDynamicInfo<CancellableTaskBase.CancellableTaskBaseStateMachineData<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, AsyncTaskMethodBuilder<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>>)(object)this).ResumptionFunc).Invoke(ref Unsafe.As<ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>, ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, AsyncTaskMethodBuilder<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>>>(ref sm)))
					{
						sm.Data.MethodBuilder.SetResult(sm.Data.Result);
					}
					else
					{
						ICriticalNotifyCompletion awaiter = (ICriticalNotifyCompletion)((ResumptionDynamicInfo<CancellableTaskBase.CancellableTaskBaseStateMachineData<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>, AsyncTaskMethodBuilder<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>>)(object)sm.ResumptionDynamicInfo).ResumptionData;
						sm.Data.MethodBuilder.AwaitUnsafeOnCompleted<ICriticalNotifyCompletion, ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>(ref awaiter, ref sm);
					}
				}
				catch (object obj)
				{
					ex2 = (Exception)obj;
					ex = ex2;
				}
				ex2 = ex;
				if (ex2 != null)
				{
					sm.Data.MethodBuilder.SetException(ex2);
				}
			}

			public override void SetStateMachine(ref ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>> sm, IAsyncStateMachine state)
			{
				sm.Data.MethodBuilder.SetStateMachine(state);
			}
		}

		[Serializable]
		internal sealed class Run@142-33<T> : FSharpFunc<CancellationToken, Task<T>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpRef<ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>> sm;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public ResumptionDynamicInfo<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>> resumptionInfo;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Run@142-33(FSharpRef<ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>> sm, ResumptionDynamicInfo<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>> resumptionInfo)
			{
				((FSharpFunc<CancellationToken, Task<CancellationToken>>)(object)this)..ctor();
				this.sm = sm;
				this.resumptionInfo = resumptionInfo;
			}

			public override Task<T> Invoke(CancellationToken ct)
			{
				if (ct.IsCancellationRequested)
				{
					return Task.FromCanceled<T>(ct);
				}
				sm.contents@.Data.CancellationToken = ct;
				sm.contents@.ResumptionDynamicInfo = resumptionInfo;
				sm.contents@.Data.MethodBuilder = AsyncTaskMethodBuilder<T>.Create();
				sm.contents@.Data.MethodBuilder.Start<ResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<T, AsyncTaskMethodBuilder<T>>>>(ref sm.contents@);
				return sm.contents@.Data.MethodBuilder.Task;
			}
		}

		[Serializable]
		internal sealed class Source@148-1<i> : FSharpFunc<CancellationToken, TaskAwaiter<i>>
		{
			public FSharpFunc<CancellationToken, Task<i>> x;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Source@148-1(FSharpFunc<CancellationToken, Task<i>> x)
			{
				((FSharpFunc<CancellationToken, TaskAwaiter<CancellationToken>>)(object)this)..ctor();
				this.x = x;
			}

			public override TaskAwaiter<i> Invoke(CancellationToken ct)
			{
				return ((FSharpFunc<CancellationToken, Task<CancellationToken>>)(object)x).Invoke(ct).GetAwaiter();
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct MergeSources@157-47<Awaiter1, g, Awaiter2, h> : IAsyncStateMachine, IResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<(g, h), AsyncTaskMethodBuilder<(g, h)>>> where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
		{
			public CancellableTaskBase.CancellableTaskBaseStateMachineData<(g, h), AsyncTaskMethodBuilder<(g, h)>> Data;

			public int ResumptionPoint;

			public FSharpFunc<CancellationToken, Awaiter1> left;

			public FSharpFunc<CancellationToken, Awaiter2> right;

			public Awaiter2 right0;

			public g leftR;

			public Awaiter2 awaiter;

			public Awaiter1 awaiter0;

			public ValueTaskAwaiter<CancellationToken> awaiter1;

			public override void MoveNext()
			{
				int resumptionPoint = ResumptionPoint;
				Exception ex = default(Exception);
				switch (resumptionPoint)
				{
				default:
					ex = null;
					break;
				case 1:
				case 2:
				case 3:
					break;
				}
				Exception ex2;
				try
				{
					bool flag;
					int num;
					int num2;
					int num3;
					bool flag2;
					int num4;
					bool flag3;
					int num5;
					bool flag4;
					int num6;
					ICriticalNotifyCompletion criticalNotifyCompletion;
					switch (resumptionPoint)
					{
					default:
					{
						Data.CancellationToken.ThrowIfCancellationRequested();
						CancellationToken cancellationToken = Data.CancellationToken;
						awaiter1 = new ValueTask<CancellationToken>(cancellationToken).GetAwaiter();
						flag = true;
						if (awaiter1.IsCompleted)
						{
							goto IL_00ac;
						}
						if (false)
						{
							goto case 1;
						}
						ResumptionPoint = 1;
						num = 0;
						goto IL_00a2;
					}
					case 1:
						num = 1;
						goto IL_00a2;
					case 2:
						num2 = 1;
						goto IL_0129;
					case 3:
						{
							num3 = 1;
							goto IL_01a3;
						}
						IL_0129:
						flag2 = (byte)num2 != 0;
						flag3 = flag2;
						goto IL_0133;
						IL_0133:
						if (flag3)
						{
							if (0 == 0)
							{
								throw new NotSupportedException("Dynamic invocation of GetResult is not supported");
							}
							g val = (g)(object)null;
							leftR = val;
							Data.CancellationToken.ThrowIfCancellationRequested();
							awaiter = right0;
							flag2 = true;
							if (0 == 0)
							{
								throw new NotSupportedException("Dynamic invocation of get_IsCompleted is not supported");
							}
							if ((bool)(object)null)
							{
								goto IL_01ad;
							}
							if (false)
							{
								goto case 3;
							}
							ResumptionPoint = 3;
							num3 = 0;
							goto IL_01a3;
						}
						criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter0;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num4 = 0;
						goto IL_026d;
						IL_00a2:
						flag3 = (byte)num != 0;
						flag = flag3;
						goto IL_00ac;
						IL_00ac:
						if (flag)
						{
							CancellationToken cancellationToken = awaiter1.GetResult();
							CancellationToken cancellationToken2 = cancellationToken;
							Awaiter1 val2 = ((FSharpFunc<CancellationToken, CancellationToken>)(object)left).Invoke(cancellationToken2);
							right0 = ((FSharpFunc<CancellationToken, ?>)(object)right).Invoke(cancellationToken2);
							Data.CancellationToken.ThrowIfCancellationRequested();
							awaiter0 = val2;
							flag3 = true;
							if (0 == 0)
							{
								throw new NotSupportedException("Dynamic invocation of get_IsCompleted is not supported");
							}
							if ((bool)(object)null)
							{
								goto IL_0133;
							}
							if (false)
							{
								goto case 2;
							}
							ResumptionPoint = 2;
							num2 = 0;
							goto IL_0129;
						}
						criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter1;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num5 = 0;
						break;
						IL_01a3:
						flag4 = (byte)num3 != 0;
						flag2 = flag4;
						goto IL_01ad;
						IL_026d:
						if (num4 != 0)
						{
							awaiter0 = default(Awaiter1);
							if (true)
							{
								right0 = default(Awaiter2);
								num5 = 1;
								break;
							}
						}
						goto end_IL_0029;
						IL_01ad:
						if (flag2)
						{
							if (0 == 0)
							{
								throw new NotSupportedException("Dynamic invocation of GetResult is not supported");
							}
							h val3 = (h)(object)null;
							h item = val3;
							(g, h) result = (leftR, item);
							Data.Result = result;
							num6 = 1;
						}
						else
						{
							criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
							Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
							num6 = 0;
						}
						if (num6 != 0)
						{
							awaiter = default(Awaiter2);
							if (true)
							{
								leftR = default(g);
								num4 = 1;
								goto IL_026d;
							}
						}
						goto end_IL_0029;
					}
					if (num5 != 0)
					{
						awaiter1 = default(ValueTaskAwaiter<CancellationToken>);
						if (true)
						{
							Data.MethodBuilder.SetResult(Data.Result);
						}
					}
					end_IL_0029:;
				}
				catch (object obj)
				{
					ex2 = (Exception)obj;
					ex = ex2;
				}
				ex2 = ex;
				if (ex2 != null)
				{
					Data.MethodBuilder.SetException(ex2);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override CancellableTaskBase.CancellableTaskBaseStateMachineData<(g, h), AsyncTaskMethodBuilder<(g, h)>> get_Data()
			{
				return Data;
			}

			public override void set_Data(CancellableTaskBase.CancellableTaskBaseStateMachineData<(g, h), AsyncTaskMethodBuilder<(g, h)>> value)
			{
				Data = value;
			}
		}

		[Serializable]
		internal sealed class MergeSources@157-48<Awaiter1, g, Awaiter2, h> : FSharpFunc<CancellationToken, Task<(g, h)>> where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public MergeSources@157-47<Awaiter1, g, Awaiter2, h> sm;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal MergeSources@157-48(MergeSources@157-47<Awaiter1, g, Awaiter2, h> sm)
			{
				((FSharpFunc<CancellationToken, Task<(Task<(g, h)>, ?)>>)(object)this)..ctor();
				this.sm = sm;
			}

			public override Task<(g, h)> Invoke(CancellationToken ct)
			{
				if (ct.IsCancellationRequested)
				{
					return Task.FromCanceled<(g, h)>(ct);
				}
				MergeSources@157-47<Awaiter1, g, Awaiter2, h> stateMachine = sm;
				stateMachine.Data.CancellationToken = ct;
				stateMachine.Data.MethodBuilder = AsyncTaskMethodBuilder<(g, h)>.Create();
				stateMachine.Data.MethodBuilder.Start(ref stateMachine);
				return stateMachine.Data.MethodBuilder.Task;
			}
		}

		[Serializable]
		internal sealed class MergeSources@156-49<g, h> : FSharpFunc<CancellationToken, TaskAwaiter<(g, h)>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<CancellationToken, Task<(g, h)>> x;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal MergeSources@156-49(FSharpFunc<CancellationToken, Task<(g, h)>> x)
			{
				((FSharpFunc<CancellationToken, TaskAwaiter<(CancellationToken, TaskAwaiter<(g, h)>)>>)(object)this)..ctor();
				this.x = x;
			}

			public override TaskAwaiter<(g, h)> Invoke(CancellationToken ct)
			{
				return ((FSharpFunc<CancellationToken, Task<(CancellationToken, Task<(g, h)>)>>)(object)x).Invoke(ct).GetAwaiter();
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct MergeSources@157-50<Awaiter1, g, Awaiter2, h> : IAsyncStateMachine, IResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<(g, h), AsyncTaskMethodBuilder<(g, h)>>> where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
		{
			public CancellableTaskBase.CancellableTaskBaseStateMachineData<(g, h), AsyncTaskMethodBuilder<(g, h)>> Data;

			public int ResumptionPoint;

			public FSharpFunc<Awaiter1, g> getResult;

			public FSharpFunc<Awaiter2, h> getResult0;

			public FSharpFunc<Awaiter1, bool> get_IsCompleted;

			public FSharpFunc<Awaiter2, bool> get_IsCompleted0;

			public FSharpFunc<CancellationToken, Awaiter1> left;

			public FSharpFunc<CancellationToken, Awaiter2> right;

			public Awaiter2 right0;

			public g leftR;

			public Awaiter2 awaiter;

			public Awaiter1 awaiter0;

			public ValueTaskAwaiter<CancellationToken> awaiter1;

			public override void MoveNext()
			{
				int resumptionPoint = ResumptionPoint;
				Exception ex = default(Exception);
				switch (resumptionPoint)
				{
				default:
					ex = null;
					break;
				case 1:
				case 2:
				case 3:
					break;
				}
				Exception ex2;
				try
				{
					bool flag;
					int num;
					int num5;
					int num2;
					int num3;
					int num4;
					bool flag2;
					ICriticalNotifyCompletion criticalNotifyCompletion;
					int num6;
					bool flag4;
					bool flag3;
					switch (resumptionPoint)
					{
					default:
					{
						Data.CancellationToken.ThrowIfCancellationRequested();
						CancellationToken cancellationToken = Data.CancellationToken;
						awaiter1 = new ValueTask<CancellationToken>(cancellationToken).GetAwaiter();
						flag = true;
						if (awaiter1.IsCompleted)
						{
							goto IL_00ac;
						}
						if (false)
						{
							goto case 1;
						}
						ResumptionPoint = 1;
						num = 0;
						goto IL_00a2;
					}
					case 1:
						num = 1;
						goto IL_00a2;
					case 2:
						num5 = 1;
						goto IL_0124;
					case 3:
						{
							num2 = 1;
							goto IL_0194;
						}
						IL_012e:
						if (flag2)
						{
							g val = getResult.Invoke(awaiter0);
							leftR = val;
							Data.CancellationToken.ThrowIfCancellationRequested();
							awaiter = right0;
							flag3 = true;
							if (((FSharpFunc<?, bool>)(object)get_IsCompleted0).Invoke(awaiter))
							{
								goto IL_019e;
							}
							if (false)
							{
								goto case 3;
							}
							ResumptionPoint = 3;
							num2 = 0;
							goto IL_0194;
						}
						criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter0;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num3 = 0;
						goto IL_0259;
						IL_019e:
						if (flag3)
						{
							h val2 = ((FSharpFunc<?, ?>)(object)getResult0).Invoke(awaiter);
							h item = val2;
							(g, h) result = (leftR, item);
							Data.Result = result;
							num4 = 1;
						}
						else
						{
							criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
							Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
							num4 = 0;
						}
						if (num4 != 0)
						{
							awaiter = default(Awaiter2);
							if (true)
							{
								leftR = default(g);
								num3 = 1;
								goto IL_0259;
							}
						}
						goto end_IL_0029;
						IL_00a2:
						flag2 = (byte)num != 0;
						flag = flag2;
						goto IL_00ac;
						IL_00ac:
						if (flag)
						{
							CancellationToken cancellationToken = awaiter1.GetResult();
							CancellationToken cancellationToken2 = cancellationToken;
							Awaiter1 val3 = ((FSharpFunc<CancellationToken, CancellationToken>)(object)left).Invoke(cancellationToken2);
							right0 = ((FSharpFunc<CancellationToken, ?>)(object)right).Invoke(cancellationToken2);
							Data.CancellationToken.ThrowIfCancellationRequested();
							awaiter0 = val3;
							flag2 = true;
							if (get_IsCompleted.Invoke(awaiter0))
							{
								goto IL_012e;
							}
							if (false)
							{
								goto case 2;
							}
							ResumptionPoint = 2;
							num5 = 0;
							goto IL_0124;
						}
						criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter1;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num6 = 0;
						break;
						IL_0259:
						if (num3 != 0)
						{
							awaiter0 = default(Awaiter1);
							if (true)
							{
								right0 = default(Awaiter2);
								num6 = 1;
								break;
							}
						}
						goto end_IL_0029;
						IL_0194:
						flag4 = (byte)num2 != 0;
						flag3 = flag4;
						goto IL_019e;
						IL_0124:
						flag3 = (byte)num5 != 0;
						flag2 = flag3;
						goto IL_012e;
					}
					if (num6 != 0)
					{
						awaiter1 = default(ValueTaskAwaiter<CancellationToken>);
						if (true)
						{
							Data.MethodBuilder.SetResult(Data.Result);
						}
					}
					end_IL_0029:;
				}
				catch (object obj)
				{
					ex2 = (Exception)obj;
					ex = ex2;
				}
				ex2 = ex;
				if (ex2 != null)
				{
					Data.MethodBuilder.SetException(ex2);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override CancellableTaskBase.CancellableTaskBaseStateMachineData<(g, h), AsyncTaskMethodBuilder<(g, h)>> get_Data()
			{
				return Data;
			}

			public override void set_Data(CancellableTaskBase.CancellableTaskBaseStateMachineData<(g, h), AsyncTaskMethodBuilder<(g, h)>> value)
			{
				Data = value;
			}
		}

		[Serializable]
		internal sealed class MergeSources@157-51<Awaiter1, g, Awaiter2, h> : FSharpFunc<CancellationToken, Task<(g, h)>> where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Awaiter1, g> getResult;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Awaiter2, h> getResult0;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Awaiter1, bool> get_IsCompleted;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Awaiter2, bool> get_IsCompleted0;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public MergeSources@157-50<Awaiter1, g, Awaiter2, h> sm;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal MergeSources@157-51(FSharpFunc<Awaiter1, g> getResult, FSharpFunc<Awaiter2, h> getResult0, FSharpFunc<Awaiter1, bool> get_IsCompleted, FSharpFunc<Awaiter2, bool> get_IsCompleted0, MergeSources@157-50<Awaiter1, g, Awaiter2, h> sm)
			{
				((FSharpFunc<CancellationToken, Task<(Task<(g, h)>, ?)>>)(object)this)..ctor();
				this.getResult = getResult;
				this.getResult0 = getResult0;
				this.get_IsCompleted = get_IsCompleted;
				this.get_IsCompleted0 = get_IsCompleted0;
				this.sm = sm;
			}

			public override Task<(g, h)> Invoke(CancellationToken ct)
			{
				if (ct.IsCancellationRequested)
				{
					return Task.FromCanceled<(g, h)>(ct);
				}
				MergeSources@157-50<Awaiter1, g, Awaiter2, h> stateMachine = sm;
				stateMachine.Data.CancellationToken = ct;
				stateMachine.Data.MethodBuilder = AsyncTaskMethodBuilder<(g, h)>.Create();
				stateMachine.Data.MethodBuilder.Start(ref stateMachine);
				return stateMachine.Data.MethodBuilder.Task;
			}
		}

		[Serializable]
		internal sealed class MergeSources@156-52<g, h> : FSharpFunc<CancellationToken, TaskAwaiter<(g, h)>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<CancellationToken, Task<(g, h)>> x;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal MergeSources@156-52(FSharpFunc<CancellationToken, Task<(g, h)>> x)
			{
				((FSharpFunc<CancellationToken, TaskAwaiter<(CancellationToken, TaskAwaiter<(g, h)>)>>)(object)this)..ctor();
				this.x = x;
			}

			public override TaskAwaiter<(g, h)> Invoke(CancellationToken ct)
			{
				return ((FSharpFunc<CancellationToken, Task<(CancellationToken, Task<(g, h)>)>>)(object)x).Invoke(ct).GetAwaiter();
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct MergeSources@180-53<Awaiter1, e, Awaiter2, f> : IAsyncStateMachine, IResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<(e, f), AsyncTaskMethodBuilder<(e, f)>>> where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
		{
			public CancellableTaskBase.CancellableTaskBaseStateMachineData<(e, f), AsyncTaskMethodBuilder<(e, f)>> Data;

			public int ResumptionPoint;

			public Awaiter1 left;

			public FSharpFunc<CancellationToken, Awaiter2> right;

			public Awaiter2 right0;

			public e leftR;

			public Awaiter2 awaiter;

			public Awaiter1 awaiter0;

			public ValueTaskAwaiter<CancellationToken> awaiter1;

			public override void MoveNext()
			{
				int resumptionPoint = ResumptionPoint;
				Exception ex = default(Exception);
				switch (resumptionPoint)
				{
				default:
					ex = null;
					break;
				case 1:
				case 2:
				case 3:
					break;
				}
				Exception ex2;
				try
				{
					bool flag;
					int num;
					int num2;
					int num3;
					bool flag2;
					int num4;
					bool flag3;
					int num5;
					bool flag4;
					int num6;
					ICriticalNotifyCompletion criticalNotifyCompletion;
					switch (resumptionPoint)
					{
					default:
					{
						Data.CancellationToken.ThrowIfCancellationRequested();
						CancellationToken cancellationToken = Data.CancellationToken;
						awaiter1 = new ValueTask<CancellationToken>(cancellationToken).GetAwaiter();
						flag = true;
						if (awaiter1.IsCompleted)
						{
							goto IL_00ac;
						}
						if (false)
						{
							goto case 1;
						}
						ResumptionPoint = 1;
						num = 0;
						goto IL_00a2;
					}
					case 1:
						num = 1;
						goto IL_00a2;
					case 2:
						num2 = 1;
						goto IL_011e;
					case 3:
						{
							num3 = 1;
							goto IL_0198;
						}
						IL_011e:
						flag2 = (byte)num2 != 0;
						flag3 = flag2;
						goto IL_0128;
						IL_0128:
						if (flag3)
						{
							if (0 == 0)
							{
								throw new NotSupportedException("Dynamic invocation of GetResult is not supported");
							}
							e val = (e)(object)null;
							leftR = val;
							Data.CancellationToken.ThrowIfCancellationRequested();
							awaiter = right0;
							flag2 = true;
							if (0 == 0)
							{
								throw new NotSupportedException("Dynamic invocation of get_IsCompleted is not supported");
							}
							if ((bool)(object)null)
							{
								goto IL_01a2;
							}
							if (false)
							{
								goto case 3;
							}
							ResumptionPoint = 3;
							num3 = 0;
							goto IL_0198;
						}
						criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter0;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num4 = 0;
						goto IL_0262;
						IL_00a2:
						flag3 = (byte)num != 0;
						flag = flag3;
						goto IL_00ac;
						IL_00ac:
						if (flag)
						{
							CancellationToken cancellationToken = awaiter1.GetResult();
							CancellationToken cancellationToken2 = cancellationToken;
							right0 = ((FSharpFunc<CancellationToken, ?>)(object)right).Invoke(cancellationToken2);
							Data.CancellationToken.ThrowIfCancellationRequested();
							awaiter0 = left;
							flag3 = true;
							if (0 == 0)
							{
								throw new NotSupportedException("Dynamic invocation of get_IsCompleted is not supported");
							}
							if ((bool)(object)null)
							{
								goto IL_0128;
							}
							if (false)
							{
								goto case 2;
							}
							ResumptionPoint = 2;
							num2 = 0;
							goto IL_011e;
						}
						criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter1;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num5 = 0;
						break;
						IL_0198:
						flag4 = (byte)num3 != 0;
						flag2 = flag4;
						goto IL_01a2;
						IL_0262:
						if (num4 != 0)
						{
							awaiter0 = default(Awaiter1);
							if (true)
							{
								right0 = default(Awaiter2);
								num5 = 1;
								break;
							}
						}
						goto end_IL_0029;
						IL_01a2:
						if (flag2)
						{
							if (0 == 0)
							{
								throw new NotSupportedException("Dynamic invocation of GetResult is not supported");
							}
							f val2 = (f)(object)null;
							f item = val2;
							(e, f) result = (leftR, item);
							Data.Result = result;
							num6 = 1;
						}
						else
						{
							criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
							Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
							num6 = 0;
						}
						if (num6 != 0)
						{
							awaiter = default(Awaiter2);
							if (true)
							{
								leftR = default(e);
								num4 = 1;
								goto IL_0262;
							}
						}
						goto end_IL_0029;
					}
					if (num5 != 0)
					{
						awaiter1 = default(ValueTaskAwaiter<CancellationToken>);
						if (true)
						{
							Data.MethodBuilder.SetResult(Data.Result);
						}
					}
					end_IL_0029:;
				}
				catch (object obj)
				{
					ex2 = (Exception)obj;
					ex = ex2;
				}
				ex2 = ex;
				if (ex2 != null)
				{
					Data.MethodBuilder.SetException(ex2);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override CancellableTaskBase.CancellableTaskBaseStateMachineData<(e, f), AsyncTaskMethodBuilder<(e, f)>> get_Data()
			{
				return Data;
			}

			public override void set_Data(CancellableTaskBase.CancellableTaskBaseStateMachineData<(e, f), AsyncTaskMethodBuilder<(e, f)>> value)
			{
				Data = value;
			}
		}

		[Serializable]
		internal sealed class MergeSources@180-54<Awaiter1, e, Awaiter2, f> : FSharpFunc<CancellationToken, Task<(e, f)>> where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public MergeSources@180-53<Awaiter1, e, Awaiter2, f> sm;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal MergeSources@180-54(MergeSources@180-53<Awaiter1, e, Awaiter2, f> sm)
			{
				((FSharpFunc<CancellationToken, Task<(Task<(e, f)>, ?)>>)(object)this)..ctor();
				this.sm = sm;
			}

			public override Task<(e, f)> Invoke(CancellationToken ct)
			{
				if (ct.IsCancellationRequested)
				{
					return Task.FromCanceled<(e, f)>(ct);
				}
				MergeSources@180-53<Awaiter1, e, Awaiter2, f> stateMachine = sm;
				stateMachine.Data.CancellationToken = ct;
				stateMachine.Data.MethodBuilder = AsyncTaskMethodBuilder<(e, f)>.Create();
				stateMachine.Data.MethodBuilder.Start(ref stateMachine);
				return stateMachine.Data.MethodBuilder.Task;
			}
		}

		[Serializable]
		internal sealed class MergeSources@179-55<e, f> : FSharpFunc<CancellationToken, TaskAwaiter<(e, f)>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<CancellationToken, Task<(e, f)>> x;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal MergeSources@179-55(FSharpFunc<CancellationToken, Task<(e, f)>> x)
			{
				((FSharpFunc<CancellationToken, TaskAwaiter<(CancellationToken, TaskAwaiter<(e, f)>)>>)(object)this)..ctor();
				this.x = x;
			}

			public override TaskAwaiter<(e, f)> Invoke(CancellationToken ct)
			{
				return ((FSharpFunc<CancellationToken, Task<(CancellationToken, Task<(e, f)>)>>)(object)x).Invoke(ct).GetAwaiter();
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct MergeSources@180-56<Awaiter1, e, Awaiter2, f> : IAsyncStateMachine, IResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<(e, f), AsyncTaskMethodBuilder<(e, f)>>> where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
		{
			public CancellableTaskBase.CancellableTaskBaseStateMachineData<(e, f), AsyncTaskMethodBuilder<(e, f)>> Data;

			public int ResumptionPoint;

			public FSharpFunc<Awaiter1, e> getResult;

			public FSharpFunc<Awaiter2, f> getResult0;

			public FSharpFunc<Awaiter1, bool> get_IsCompleted;

			public FSharpFunc<Awaiter2, bool> get_IsCompleted0;

			public Awaiter1 left;

			public FSharpFunc<CancellationToken, Awaiter2> right;

			public Awaiter2 right0;

			public e leftR;

			public Awaiter2 awaiter;

			public Awaiter1 awaiter0;

			public ValueTaskAwaiter<CancellationToken> awaiter1;

			public override void MoveNext()
			{
				int resumptionPoint = ResumptionPoint;
				Exception ex = default(Exception);
				switch (resumptionPoint)
				{
				default:
					ex = null;
					break;
				case 1:
				case 2:
				case 3:
					break;
				}
				Exception ex2;
				try
				{
					bool flag;
					int num;
					int num5;
					int num2;
					int num3;
					int num4;
					bool flag2;
					ICriticalNotifyCompletion criticalNotifyCompletion;
					int num6;
					bool flag4;
					bool flag3;
					switch (resumptionPoint)
					{
					default:
					{
						Data.CancellationToken.ThrowIfCancellationRequested();
						CancellationToken cancellationToken = Data.CancellationToken;
						awaiter1 = new ValueTask<CancellationToken>(cancellationToken).GetAwaiter();
						flag = true;
						if (awaiter1.IsCompleted)
						{
							goto IL_00ac;
						}
						if (false)
						{
							goto case 1;
						}
						ResumptionPoint = 1;
						num = 0;
						goto IL_00a2;
					}
					case 1:
						num = 1;
						goto IL_00a2;
					case 2:
						num5 = 1;
						goto IL_0119;
					case 3:
						{
							num2 = 1;
							goto IL_0189;
						}
						IL_0123:
						if (flag2)
						{
							e val = getResult.Invoke(awaiter0);
							leftR = val;
							Data.CancellationToken.ThrowIfCancellationRequested();
							awaiter = right0;
							flag3 = true;
							if (((FSharpFunc<?, bool>)(object)get_IsCompleted0).Invoke(awaiter))
							{
								goto IL_0193;
							}
							if (false)
							{
								goto case 3;
							}
							ResumptionPoint = 3;
							num2 = 0;
							goto IL_0189;
						}
						criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter0;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num3 = 0;
						goto IL_024e;
						IL_0193:
						if (flag3)
						{
							f val2 = ((FSharpFunc<?, ?>)(object)getResult0).Invoke(awaiter);
							f item = val2;
							(e, f) result = (leftR, item);
							Data.Result = result;
							num4 = 1;
						}
						else
						{
							criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
							Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
							num4 = 0;
						}
						if (num4 != 0)
						{
							awaiter = default(Awaiter2);
							if (true)
							{
								leftR = default(e);
								num3 = 1;
								goto IL_024e;
							}
						}
						goto end_IL_0029;
						IL_00a2:
						flag2 = (byte)num != 0;
						flag = flag2;
						goto IL_00ac;
						IL_00ac:
						if (flag)
						{
							CancellationToken cancellationToken = awaiter1.GetResult();
							CancellationToken cancellationToken2 = cancellationToken;
							right0 = ((FSharpFunc<CancellationToken, ?>)(object)right).Invoke(cancellationToken2);
							Data.CancellationToken.ThrowIfCancellationRequested();
							awaiter0 = left;
							flag2 = true;
							if (get_IsCompleted.Invoke(awaiter0))
							{
								goto IL_0123;
							}
							if (false)
							{
								goto case 2;
							}
							ResumptionPoint = 2;
							num5 = 0;
							goto IL_0119;
						}
						criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter1;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num6 = 0;
						break;
						IL_024e:
						if (num3 != 0)
						{
							awaiter0 = default(Awaiter1);
							if (true)
							{
								right0 = default(Awaiter2);
								num6 = 1;
								break;
							}
						}
						goto end_IL_0029;
						IL_0189:
						flag4 = (byte)num2 != 0;
						flag3 = flag4;
						goto IL_0193;
						IL_0119:
						flag3 = (byte)num5 != 0;
						flag2 = flag3;
						goto IL_0123;
					}
					if (num6 != 0)
					{
						awaiter1 = default(ValueTaskAwaiter<CancellationToken>);
						if (true)
						{
							Data.MethodBuilder.SetResult(Data.Result);
						}
					}
					end_IL_0029:;
				}
				catch (object obj)
				{
					ex2 = (Exception)obj;
					ex = ex2;
				}
				ex2 = ex;
				if (ex2 != null)
				{
					Data.MethodBuilder.SetException(ex2);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override CancellableTaskBase.CancellableTaskBaseStateMachineData<(e, f), AsyncTaskMethodBuilder<(e, f)>> get_Data()
			{
				return Data;
			}

			public override void set_Data(CancellableTaskBase.CancellableTaskBaseStateMachineData<(e, f), AsyncTaskMethodBuilder<(e, f)>> value)
			{
				Data = value;
			}
		}

		[Serializable]
		internal sealed class MergeSources@180-57<Awaiter1, e, Awaiter2, f> : FSharpFunc<CancellationToken, Task<(e, f)>> where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Awaiter1, e> getResult;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Awaiter2, f> getResult0;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Awaiter1, bool> get_IsCompleted;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Awaiter2, bool> get_IsCompleted0;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public MergeSources@180-56<Awaiter1, e, Awaiter2, f> sm;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal MergeSources@180-57(FSharpFunc<Awaiter1, e> getResult, FSharpFunc<Awaiter2, f> getResult0, FSharpFunc<Awaiter1, bool> get_IsCompleted, FSharpFunc<Awaiter2, bool> get_IsCompleted0, MergeSources@180-56<Awaiter1, e, Awaiter2, f> sm)
			{
				((FSharpFunc<CancellationToken, Task<(Task<(e, f)>, ?)>>)(object)this)..ctor();
				this.getResult = getResult;
				this.getResult0 = getResult0;
				this.get_IsCompleted = get_IsCompleted;
				this.get_IsCompleted0 = get_IsCompleted0;
				this.sm = sm;
			}

			public override Task<(e, f)> Invoke(CancellationToken ct)
			{
				if (ct.IsCancellationRequested)
				{
					return Task.FromCanceled<(e, f)>(ct);
				}
				MergeSources@180-56<Awaiter1, e, Awaiter2, f> stateMachine = sm;
				stateMachine.Data.CancellationToken = ct;
				stateMachine.Data.MethodBuilder = AsyncTaskMethodBuilder<(e, f)>.Create();
				stateMachine.Data.MethodBuilder.Start(ref stateMachine);
				return stateMachine.Data.MethodBuilder.Task;
			}
		}

		[Serializable]
		internal sealed class MergeSources@179-58<e, f> : FSharpFunc<CancellationToken, TaskAwaiter<(e, f)>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<CancellationToken, Task<(e, f)>> x;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal MergeSources@179-58(FSharpFunc<CancellationToken, Task<(e, f)>> x)
			{
				((FSharpFunc<CancellationToken, TaskAwaiter<(CancellationToken, TaskAwaiter<(e, f)>)>>)(object)this)..ctor();
				this.x = x;
			}

			public override TaskAwaiter<(e, f)> Invoke(CancellationToken ct)
			{
				return ((FSharpFunc<CancellationToken, Task<(CancellationToken, Task<(e, f)>)>>)(object)x).Invoke(ct).GetAwaiter();
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct MergeSources@203-59<Awaiter1, c, Awaiter2, d> : IAsyncStateMachine, IResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<(c, d), AsyncTaskMethodBuilder<(c, d)>>> where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
		{
			public CancellableTaskBase.CancellableTaskBaseStateMachineData<(c, d), AsyncTaskMethodBuilder<(c, d)>> Data;

			public int ResumptionPoint;

			public FSharpFunc<CancellationToken, Awaiter1> left;

			public Awaiter2 right;

			public c leftR;

			public Awaiter2 awaiter;

			public Awaiter1 awaiter0;

			public ValueTaskAwaiter<CancellationToken> awaiter1;

			public override void MoveNext()
			{
				int resumptionPoint = ResumptionPoint;
				Exception ex = default(Exception);
				switch (resumptionPoint)
				{
				default:
					ex = null;
					break;
				case 1:
				case 2:
				case 3:
					break;
				}
				Exception ex2;
				try
				{
					bool flag;
					int num;
					int num2;
					int num3;
					bool flag2;
					int num4;
					bool flag3;
					int num5;
					bool flag4;
					int num6;
					ICriticalNotifyCompletion criticalNotifyCompletion;
					switch (resumptionPoint)
					{
					default:
					{
						Data.CancellationToken.ThrowIfCancellationRequested();
						CancellationToken cancellationToken = Data.CancellationToken;
						awaiter1 = new ValueTask<CancellationToken>(cancellationToken).GetAwaiter();
						flag = true;
						if (awaiter1.IsCompleted)
						{
							goto IL_00ac;
						}
						if (false)
						{
							goto case 1;
						}
						ResumptionPoint = 1;
						num = 0;
						goto IL_00a2;
					}
					case 1:
						num = 1;
						goto IL_00a2;
					case 2:
						num2 = 1;
						goto IL_0116;
					case 3:
						{
							num3 = 1;
							goto IL_0190;
						}
						IL_0116:
						flag2 = (byte)num2 != 0;
						flag3 = flag2;
						goto IL_0120;
						IL_0120:
						if (flag3)
						{
							if (0 == 0)
							{
								throw new NotSupportedException("Dynamic invocation of GetResult is not supported");
							}
							c val = (c)(object)null;
							leftR = val;
							Data.CancellationToken.ThrowIfCancellationRequested();
							awaiter = right;
							flag2 = true;
							if (0 == 0)
							{
								throw new NotSupportedException("Dynamic invocation of get_IsCompleted is not supported");
							}
							if ((bool)(object)null)
							{
								goto IL_019a;
							}
							if (false)
							{
								goto case 3;
							}
							ResumptionPoint = 3;
							num3 = 0;
							goto IL_0190;
						}
						criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter0;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num4 = 0;
						goto IL_025a;
						IL_00a2:
						flag3 = (byte)num != 0;
						flag = flag3;
						goto IL_00ac;
						IL_00ac:
						if (flag)
						{
							CancellationToken cancellationToken = awaiter1.GetResult();
							CancellationToken cancellationToken2 = cancellationToken;
							Awaiter1 val2 = ((FSharpFunc<CancellationToken, CancellationToken>)(object)left).Invoke(cancellationToken2);
							Data.CancellationToken.ThrowIfCancellationRequested();
							awaiter0 = val2;
							flag3 = true;
							if (0 == 0)
							{
								throw new NotSupportedException("Dynamic invocation of get_IsCompleted is not supported");
							}
							if ((bool)(object)null)
							{
								goto IL_0120;
							}
							if (false)
							{
								goto case 2;
							}
							ResumptionPoint = 2;
							num2 = 0;
							goto IL_0116;
						}
						criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter1;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num5 = 0;
						break;
						IL_0190:
						flag4 = (byte)num3 != 0;
						flag2 = flag4;
						goto IL_019a;
						IL_025a:
						if (num4 != 0)
						{
							awaiter0 = default(Awaiter1);
							num5 = 1;
							break;
						}
						goto end_IL_0029;
						IL_019a:
						if (flag2)
						{
							if (0 == 0)
							{
								throw new NotSupportedException("Dynamic invocation of GetResult is not supported");
							}
							d val3 = (d)(object)null;
							d item = val3;
							(c, d) result = (leftR, item);
							Data.Result = result;
							num6 = 1;
						}
						else
						{
							criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
							Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
							num6 = 0;
						}
						if (num6 != 0)
						{
							awaiter = default(Awaiter2);
							if (true)
							{
								leftR = default(c);
								num4 = 1;
								goto IL_025a;
							}
						}
						goto end_IL_0029;
					}
					if (num5 != 0)
					{
						awaiter1 = default(ValueTaskAwaiter<CancellationToken>);
						if (true)
						{
							Data.MethodBuilder.SetResult(Data.Result);
						}
					}
					end_IL_0029:;
				}
				catch (object obj)
				{
					ex2 = (Exception)obj;
					ex = ex2;
				}
				ex2 = ex;
				if (ex2 != null)
				{
					Data.MethodBuilder.SetException(ex2);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override CancellableTaskBase.CancellableTaskBaseStateMachineData<(c, d), AsyncTaskMethodBuilder<(c, d)>> get_Data()
			{
				return Data;
			}

			public override void set_Data(CancellableTaskBase.CancellableTaskBaseStateMachineData<(c, d), AsyncTaskMethodBuilder<(c, d)>> value)
			{
				Data = value;
			}
		}

		[Serializable]
		internal sealed class MergeSources@203-60<Awaiter1, c, Awaiter2, d> : FSharpFunc<CancellationToken, Task<(c, d)>> where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public MergeSources@203-59<Awaiter1, c, Awaiter2, d> sm;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal MergeSources@203-60(MergeSources@203-59<Awaiter1, c, Awaiter2, d> sm)
			{
				((FSharpFunc<CancellationToken, Task<(Task<(c, d)>, ?)>>)(object)this)..ctor();
				this.sm = sm;
			}

			public override Task<(c, d)> Invoke(CancellationToken ct)
			{
				if (ct.IsCancellationRequested)
				{
					return Task.FromCanceled<(c, d)>(ct);
				}
				MergeSources@203-59<Awaiter1, c, Awaiter2, d> stateMachine = sm;
				stateMachine.Data.CancellationToken = ct;
				stateMachine.Data.MethodBuilder = AsyncTaskMethodBuilder<(c, d)>.Create();
				stateMachine.Data.MethodBuilder.Start(ref stateMachine);
				return stateMachine.Data.MethodBuilder.Task;
			}
		}

		[Serializable]
		internal sealed class MergeSources@202-61<c, d> : FSharpFunc<CancellationToken, TaskAwaiter<(c, d)>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<CancellationToken, Task<(c, d)>> x;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal MergeSources@202-61(FSharpFunc<CancellationToken, Task<(c, d)>> x)
			{
				((FSharpFunc<CancellationToken, TaskAwaiter<(CancellationToken, TaskAwaiter<(c, d)>)>>)(object)this)..ctor();
				this.x = x;
			}

			public override TaskAwaiter<(c, d)> Invoke(CancellationToken ct)
			{
				return ((FSharpFunc<CancellationToken, Task<(CancellationToken, Task<(c, d)>)>>)(object)x).Invoke(ct).GetAwaiter();
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct MergeSources@203-62<Awaiter1, c, Awaiter2, d> : IAsyncStateMachine, IResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<(c, d), AsyncTaskMethodBuilder<(c, d)>>> where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
		{
			public CancellableTaskBase.CancellableTaskBaseStateMachineData<(c, d), AsyncTaskMethodBuilder<(c, d)>> Data;

			public int ResumptionPoint;

			public FSharpFunc<Awaiter1, c> getResult;

			public FSharpFunc<Awaiter2, d> getResult0;

			public FSharpFunc<Awaiter1, bool> get_IsCompleted;

			public FSharpFunc<Awaiter2, bool> get_IsCompleted0;

			public FSharpFunc<CancellationToken, Awaiter1> left;

			public Awaiter2 right;

			public c leftR;

			public Awaiter2 awaiter;

			public Awaiter1 awaiter0;

			public ValueTaskAwaiter<CancellationToken> awaiter1;

			public override void MoveNext()
			{
				int resumptionPoint = ResumptionPoint;
				Exception ex = default(Exception);
				switch (resumptionPoint)
				{
				default:
					ex = null;
					break;
				case 1:
				case 2:
				case 3:
					break;
				}
				Exception ex2;
				try
				{
					bool flag;
					int num;
					int num5;
					int num2;
					int num3;
					int num4;
					bool flag2;
					ICriticalNotifyCompletion criticalNotifyCompletion;
					int num6;
					bool flag4;
					bool flag3;
					switch (resumptionPoint)
					{
					default:
					{
						Data.CancellationToken.ThrowIfCancellationRequested();
						CancellationToken cancellationToken = Data.CancellationToken;
						awaiter1 = new ValueTask<CancellationToken>(cancellationToken).GetAwaiter();
						flag = true;
						if (awaiter1.IsCompleted)
						{
							goto IL_00ac;
						}
						if (false)
						{
							goto case 1;
						}
						ResumptionPoint = 1;
						num = 0;
						goto IL_00a2;
					}
					case 1:
						num = 1;
						goto IL_00a2;
					case 2:
						num5 = 1;
						goto IL_0111;
					case 3:
						{
							num2 = 1;
							goto IL_0181;
						}
						IL_011b:
						if (flag2)
						{
							c val = getResult.Invoke(awaiter0);
							leftR = val;
							Data.CancellationToken.ThrowIfCancellationRequested();
							awaiter = right;
							flag3 = true;
							if (((FSharpFunc<?, bool>)(object)get_IsCompleted0).Invoke(awaiter))
							{
								goto IL_018b;
							}
							if (false)
							{
								goto case 3;
							}
							ResumptionPoint = 3;
							num2 = 0;
							goto IL_0181;
						}
						criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter0;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num3 = 0;
						goto IL_0246;
						IL_018b:
						if (flag3)
						{
							d val2 = ((FSharpFunc<?, ?>)(object)getResult0).Invoke(awaiter);
							d item = val2;
							(c, d) result = (leftR, item);
							Data.Result = result;
							num4 = 1;
						}
						else
						{
							criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
							Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
							num4 = 0;
						}
						if (num4 != 0)
						{
							awaiter = default(Awaiter2);
							if (true)
							{
								leftR = default(c);
								num3 = 1;
								goto IL_0246;
							}
						}
						goto end_IL_0029;
						IL_00a2:
						flag2 = (byte)num != 0;
						flag = flag2;
						goto IL_00ac;
						IL_00ac:
						if (flag)
						{
							CancellationToken cancellationToken = awaiter1.GetResult();
							CancellationToken cancellationToken2 = cancellationToken;
							Awaiter1 val3 = ((FSharpFunc<CancellationToken, CancellationToken>)(object)left).Invoke(cancellationToken2);
							Data.CancellationToken.ThrowIfCancellationRequested();
							awaiter0 = val3;
							flag2 = true;
							if (get_IsCompleted.Invoke(awaiter0))
							{
								goto IL_011b;
							}
							if (false)
							{
								goto case 2;
							}
							ResumptionPoint = 2;
							num5 = 0;
							goto IL_0111;
						}
						criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter1;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num6 = 0;
						break;
						IL_0246:
						if (num3 != 0)
						{
							awaiter0 = default(Awaiter1);
							num6 = 1;
							break;
						}
						goto end_IL_0029;
						IL_0181:
						flag4 = (byte)num2 != 0;
						flag3 = flag4;
						goto IL_018b;
						IL_0111:
						flag3 = (byte)num5 != 0;
						flag2 = flag3;
						goto IL_011b;
					}
					if (num6 != 0)
					{
						awaiter1 = default(ValueTaskAwaiter<CancellationToken>);
						if (true)
						{
							Data.MethodBuilder.SetResult(Data.Result);
						}
					}
					end_IL_0029:;
				}
				catch (object obj)
				{
					ex2 = (Exception)obj;
					ex = ex2;
				}
				ex2 = ex;
				if (ex2 != null)
				{
					Data.MethodBuilder.SetException(ex2);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override CancellableTaskBase.CancellableTaskBaseStateMachineData<(c, d), AsyncTaskMethodBuilder<(c, d)>> get_Data()
			{
				return Data;
			}

			public override void set_Data(CancellableTaskBase.CancellableTaskBaseStateMachineData<(c, d), AsyncTaskMethodBuilder<(c, d)>> value)
			{
				Data = value;
			}
		}

		[Serializable]
		internal sealed class MergeSources@203-63<Awaiter1, c, Awaiter2, d> : FSharpFunc<CancellationToken, Task<(c, d)>> where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Awaiter1, c> getResult;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Awaiter2, d> getResult0;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Awaiter1, bool> get_IsCompleted;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Awaiter2, bool> get_IsCompleted0;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public MergeSources@203-62<Awaiter1, c, Awaiter2, d> sm;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal MergeSources@203-63(FSharpFunc<Awaiter1, c> getResult, FSharpFunc<Awaiter2, d> getResult0, FSharpFunc<Awaiter1, bool> get_IsCompleted, FSharpFunc<Awaiter2, bool> get_IsCompleted0, MergeSources@203-62<Awaiter1, c, Awaiter2, d> sm)
			{
				((FSharpFunc<CancellationToken, Task<(Task<(c, d)>, ?)>>)(object)this)..ctor();
				this.getResult = getResult;
				this.getResult0 = getResult0;
				this.get_IsCompleted = get_IsCompleted;
				this.get_IsCompleted0 = get_IsCompleted0;
				this.sm = sm;
			}

			public override Task<(c, d)> Invoke(CancellationToken ct)
			{
				if (ct.IsCancellationRequested)
				{
					return Task.FromCanceled<(c, d)>(ct);
				}
				MergeSources@203-62<Awaiter1, c, Awaiter2, d> stateMachine = sm;
				stateMachine.Data.CancellationToken = ct;
				stateMachine.Data.MethodBuilder = AsyncTaskMethodBuilder<(c, d)>.Create();
				stateMachine.Data.MethodBuilder.Start(ref stateMachine);
				return stateMachine.Data.MethodBuilder.Task;
			}
		}

		[Serializable]
		internal sealed class MergeSources@202-64<c, d> : FSharpFunc<CancellationToken, TaskAwaiter<(c, d)>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<CancellationToken, Task<(c, d)>> x;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal MergeSources@202-64(FSharpFunc<CancellationToken, Task<(c, d)>> x)
			{
				((FSharpFunc<CancellationToken, TaskAwaiter<(CancellationToken, TaskAwaiter<(c, d)>)>>)(object)this)..ctor();
				this.x = x;
			}

			public override TaskAwaiter<(c, d)> Invoke(CancellationToken ct)
			{
				return ((FSharpFunc<CancellationToken, Task<(CancellationToken, Task<(c, d)>)>>)(object)x).Invoke(ct).GetAwaiter();
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct MergeSources@221-65<Awaiter1, a, Awaiter2, b> : IAsyncStateMachine, IResumableStateMachine<CancellableTaskBase.CancellableTaskBaseStateMachineData<(a, b), AsyncTaskMethodBuilder<(a, b)>>> where Awaiter1 : ICriticalNotifyCompletion where Awaiter2 : ICriticalNotifyCompletion
		{
			public CancellableTaskBase.CancellableTaskBaseStateMachineData<(a, b), AsyncTaskMethodBuilder<(a, b)>> Data;

			public int ResumptionPoint;

			public Awaiter1 left;

			public Awaiter2 right;

			public a leftR;

			public Awaiter2 awaiter;

			public Awaiter1 awaiter0;

			public override void MoveNext()
			{
				int resumptionPoint = ResumptionPoint;
				Exception ex = default(Exception);
				switch (resumptionPoint)
				{
				default:
					ex = null;
					break;
				case 1:
				case 2:
					break;
				}
				Exception ex2;
				try
				{
					bool flag;
					int num;
					int num2;
					bool flag2;
					int num3;
					int num4;
					bool flag3;
					ICriticalNotifyCompletion criticalNotifyCompletion;
					switch (resumptionPoint)
					{
					default:
						Data.CancellationToken.ThrowIfCancellationRequested();
						awaiter0 = left;
						flag = true;
						if (0 == 0)
						{
							throw new NotSupportedException("Dynamic invocation of get_IsCompleted is not supported");
						}
						if ((bool)(object)null)
						{
							goto IL_008f;
						}
						if (false)
						{
							goto case 1;
						}
						ResumptionPoint = 1;
						num = 0;
						goto IL_0086;
					case 1:
						num = 1;
						goto IL_0086;
					case 2:
						{
							num2 = 1;
							goto IL_00fe;
						}
						IL_00fe:
						flag2 = (byte)num2 != 0;
						flag3 = flag2;
						goto IL_0108;
						IL_0108:
						if (flag3)
						{
							if (0 == 0)
							{
								throw new NotSupportedException("Dynamic invocation of GetResult is not supported");
							}
							b val = (b)(object)null;
							b item = val;
							(a, b) result = (leftR, item);
							Data.Result = result;
							num3 = 1;
						}
						else
						{
							criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
							Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
							num3 = 0;
						}
						if (num3 != 0)
						{
							awaiter = default(Awaiter2);
							if (true)
							{
								leftR = default(a);
								num4 = 1;
								break;
							}
						}
						goto end_IL_0022;
						IL_0086:
						flag3 = (byte)num != 0;
						flag = flag3;
						goto IL_008f;
						IL_008f:
						if (flag)
						{
							if (0 == 0)
							{
								throw new NotSupportedException("Dynamic invocation of GetResult is not supported");
							}
							a val2 = (a)(object)null;
							leftR = val2;
							Data.CancellationToken.ThrowIfCancellationRequested();
							awaiter = right;
							flag3 = true;
							if (0 == 0)
							{
								throw new NotSupportedException("Dynamic invocation of get_IsCompleted is not supported");
							}
							if ((bool)(object)null)
							{
								goto IL_0108;
							}
							if (false)
							{
								goto case 2;
							}
							ResumptionPoint = 2;
							num2 = 0;
							goto IL_00fe;
						}
						criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter0;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num4 = 0;
						break;
					}
					if (num4 != 0)
					{
						awaiter0 = default(Awaiter1);
						if (true)
						{
							Data.MethodBuilder.SetResult(Data.Result);
						}
					}
					end_IL_0022:;
				}
				catch (object obj)
				{
					ex2 = (Exception)obj;
					ex = ex2;
				}
				ex2 = ex;
				if (ex2 != null)
				{
					Data.MethodBuilder.SetException(ex2);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override CancellableTaskBase.CancellableTaskBaseStateMachineData<(a, b), AsyncTaskMethodBuilder<(a, b)>> get_Data()
			{
				return Data;
			}

			public override void set_Data(CancellableTaskBase

SileroVAD/SileroVAD.dll

Decompiled 2 weeks ago
using System;
using System.Collections;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using Microsoft.FSharp.Core;

[assembly: FSharpInterfaceDataVersion(2, 0, 0)]
[assembly: AssemblyCompany("SileroVAD")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+f92be8fcbe66fd762d0c1c2edddcef0d8b265fbf")]
[assembly: AssemblyProduct("SileroVAD")]
[assembly: AssemblyTitle("SileroVAD")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Silero
{
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public static class API
	{
		[Serializable]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public sealed class SileroVAD : IEquatable<SileroVAD>, IStructuralEquatable, IComparable<SileroVAD>, IComparable, IStructuralComparable
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly IntPtr item;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal int Tag
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return 0;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal IntPtr Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal static SileroVAD NewSileroVAD(IntPtr item)
			{
				return new SileroVAD(item);
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(SileroVAD))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal SileroVAD(IntPtr item)
			{
				this.item = item;
			}

			[SpecialName]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal object __DebugDisplay()
			{
				return ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<SileroVAD, string>>((PrintfFormat<FSharpFunc<SileroVAD, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<SileroVAD, string>, Unit, string, string, string>("%+0.8A")).Invoke(this);
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<SileroVAD, string>>((PrintfFormat<FSharpFunc<SileroVAD, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<SileroVAD, string>, Unit, string, string, SileroVAD>("%+A")).Invoke(this);
			}

			[CompilerGenerated]
			public sealed int CompareTo(SileroVAD obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						IComparer genericComparer = LanguagePrimitives.GenericComparer;
						IntPtr intPtr = item;
						IntPtr intPtr2 = obj.item;
						return (((nint)intPtr > (nint)intPtr2) ? 1 : 0) - (((nint)intPtr < (nint)intPtr2) ? 1 : 0);
					}
					return 1;
				}
				if (obj != null)
				{
					return -1;
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj)
			{
				return CompareTo((SileroVAD)obj);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj, IComparer comp)
			{
				SileroVAD sileroVAD = (SileroVAD)obj;
				if (this != null)
				{
					if ((SileroVAD)obj != null)
					{
						SileroVAD sileroVAD2 = sileroVAD;
						IntPtr intPtr = item;
						IntPtr intPtr2 = sileroVAD2.item;
						return (((nint)intPtr > (nint)intPtr2) ? 1 : 0) - (((nint)intPtr < (nint)intPtr2) ? 1 : 0);
					}
					return 1;
				}
				if ((SileroVAD)obj != null)
				{
					return -1;
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				if (this != null)
				{
					int num = 0;
					num = 0;
					IntPtr intPtr = item;
					return -1640531527 + ((int)(nuint)(nint)intPtr + ((num << 6) + (num >> 2)));
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed override int GetHashCode()
			{
				return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
			}

			[CompilerGenerated]
			public bool Equals(SileroVAD obj, IEqualityComparer comp)
			{
				if (this != null)
				{
					if (obj != null)
					{
						return item == obj.item;
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public sealed bool Equals(object obj, IEqualityComparer comp)
			{
				if (obj is SileroVAD obj2)
				{
					return Equals(obj2, comp);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(SileroVAD obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						return item == obj.item;
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public sealed override bool Equals(object obj)
			{
				if (obj is SileroVAD obj2)
				{
					return Equals(obj2);
				}
				return false;
			}
		}

		[Serializable]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public enum LogLevel
		{
			Verbose,
			Info,
			Warning,
			Error,
			Fatal
		}

		public static SileroVAD SileroVAD(int windowSize)
		{
			string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
			return API.SileroVAD.NewSileroVAD(Foreign.init_silero(new Foreign.SileroInitParams(Path.Combine(directoryName, "onnxruntime.dll"), Path.Combine(directoryName, "silero_vad.onnx"), 3, 1, 1, windowSize)));
		}

		public static void releaseSilero(SileroVAD _arg1)
		{
			Foreign.release_silero(_arg1.item);
		}

		[CompilationArgumentCounts(new int[] { 1, 1, 1 })]
		public static float detectSpeech(SileroVAD _arg1, float[] pcmData, int pcmLength)
		{
			IntPtr item = _arg1.item;
			return Foreign.detect_speech(item, pcmData, pcmLength);
		}
	}
}
namespace <StartupCode$SileroVAD>.$Silero
{
	internal static class API
	{
	}
}
namespace Silero
{
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public static class Foreign
	{
		[Serializable]
		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
		[Struct]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct SileroInitParams : IEquatable<SileroInitParams>, IStructuralEquatable, IComparable<SileroInitParams>, IComparable, IStructuralComparable
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal string onnxruntime_path@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal string model_path@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal int log_level@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal int inter_threads@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal int intra_threads@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal int window_size@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal readonly string onnxruntime_path
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return onnxruntime_path@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal readonly string model_path
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return model_path@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal readonly int log_level
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return log_level@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal readonly int inter_threads
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return inter_threads@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal readonly int intra_threads
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return intra_threads@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal readonly int window_size
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return window_size@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(SileroInitParams))]
			internal SileroInitParams(string onnxruntime_path, string model_path, int log_level, int inter_threads, int intra_threads, int window_size)
			{
				onnxruntime_path@ = onnxruntime_path;
				model_path@ = model_path;
				log_level@ = log_level;
				inter_threads@ = inter_threads;
				intra_threads@ = intra_threads;
				window_size@ = window_size;
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<SileroInitParams, string>>((PrintfFormat<FSharpFunc<SileroInitParams, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<SileroInitParams, string>, Unit, string, string, SileroInitParams>("%+A")).Invoke(this);
			}

			[CompilerGenerated]
			public sealed int CompareTo(SileroInitParams obj)
			{
				IComparer genericComparer = LanguagePrimitives.GenericComparer;
				int num = string.CompareOrdinal(onnxruntime_path@, obj.onnxruntime_path@);
				if (num < 0)
				{
					return num;
				}
				if (num > 0)
				{
					return num;
				}
				genericComparer = LanguagePrimitives.GenericComparer;
				int num2 = string.CompareOrdinal(model_path@, obj.model_path@);
				if (num2 < 0)
				{
					return num2;
				}
				if (num2 > 0)
				{
					return num2;
				}
				genericComparer = LanguagePrimitives.GenericComparer;
				int num3 = log_level@;
				int num4 = obj.log_level@;
				int num5 = ((num3 > num4) ? 1 : 0) - ((num3 < num4) ? 1 : 0);
				if (num5 < 0)
				{
					return num5;
				}
				if (num5 > 0)
				{
					return num5;
				}
				genericComparer = LanguagePrimitives.GenericComparer;
				num4 = inter_threads@;
				int num6 = obj.inter_threads@;
				num3 = ((num4 > num6) ? 1 : 0) - ((num4 < num6) ? 1 : 0);
				if (num3 < 0)
				{
					return num3;
				}
				if (num3 > 0)
				{
					return num3;
				}
				genericComparer = LanguagePrimitives.GenericComparer;
				num6 = intra_threads@;
				int num7 = obj.intra_threads@;
				num4 = ((num6 > num7) ? 1 : 0) - ((num6 < num7) ? 1 : 0);
				if (num4 < 0)
				{
					return num4;
				}
				if (num4 > 0)
				{
					return num4;
				}
				genericComparer = LanguagePrimitives.GenericComparer;
				num6 = window_size@;
				num7 = obj.window_size@;
				return ((num6 > num7) ? 1 : 0) - ((num6 < num7) ? 1 : 0);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj)
			{
				return CompareTo((SileroInitParams)obj);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj, IComparer comp)
			{
				SileroInitParams sileroInitParams = (SileroInitParams)obj;
				int num = string.CompareOrdinal(onnxruntime_path@, sileroInitParams.onnxruntime_path@);
				if (num < 0)
				{
					return num;
				}
				if (num > 0)
				{
					return num;
				}
				int num2 = string.CompareOrdinal(model_path@, sileroInitParams.model_path@);
				if (num2 < 0)
				{
					return num2;
				}
				if (num2 > 0)
				{
					return num2;
				}
				int num3 = log_level@;
				int num4 = sileroInitParams.log_level@;
				int num5 = ((num3 > num4) ? 1 : 0) - ((num3 < num4) ? 1 : 0);
				if (num5 < 0)
				{
					return num5;
				}
				if (num5 > 0)
				{
					return num5;
				}
				num4 = inter_threads@;
				int num6 = sileroInitParams.inter_threads@;
				num3 = ((num4 > num6) ? 1 : 0) - ((num4 < num6) ? 1 : 0);
				if (num3 < 0)
				{
					return num3;
				}
				if (num3 > 0)
				{
					return num3;
				}
				num6 = intra_threads@;
				int num7 = sileroInitParams.intra_threads@;
				num4 = ((num6 > num7) ? 1 : 0) - ((num6 < num7) ? 1 : 0);
				if (num4 < 0)
				{
					return num4;
				}
				if (num4 > 0)
				{
					return num4;
				}
				num6 = window_size@;
				num7 = sileroInitParams.window_size@;
				return ((num6 > num7) ? 1 : 0) - ((num6 < num7) ? 1 : 0);
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				int num = 0;
				num = -1640531527 + (window_size@ + ((num << 6) + (num >> 2)));
				num = -1640531527 + (intra_threads@ + ((num << 6) + (num >> 2)));
				num = -1640531527 + (inter_threads@ + ((num << 6) + (num >> 2)));
				num = -1640531527 + (log_level@ + ((num << 6) + (num >> 2)));
				num = -1640531527 + ((model_path@?.GetHashCode() ?? 0) + ((num << 6) + (num >> 2)));
				return -1640531527 + ((onnxruntime_path@?.GetHashCode() ?? 0) + ((num << 6) + (num >> 2)));
			}

			[CompilerGenerated]
			public sealed override int GetHashCode()
			{
				return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
			}

			[CompilerGenerated]
			internal bool Equals(SileroInitParams obj, IEqualityComparer comp)
			{
				if (string.Equals(onnxruntime_path@, obj.onnxruntime_path@))
				{
					if (string.Equals(model_path@, obj.model_path@))
					{
						if (log_level@ == obj.log_level@)
						{
							if (inter_threads@ == obj.inter_threads@)
							{
								if (intra_threads@ == obj.intra_threads@)
								{
									return window_size@ == obj.window_size@;
								}
								return false;
							}
							return false;
						}
						return false;
					}
					return false;
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(object obj, IEqualityComparer comp)
			{
				if (obj is SileroInitParams obj2)
				{
					return Equals(obj2, comp);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(SileroInitParams obj)
			{
				if (string.Equals(onnxruntime_path@, obj.onnxruntime_path@))
				{
					if (string.Equals(model_path@, obj.model_path@))
					{
						if (log_level@ == obj.log_level@)
						{
							if (inter_threads@ == obj.inter_threads@)
							{
								if (intra_threads@ == obj.intra_threads@)
								{
									return window_size@ == obj.window_size@;
								}
								return false;
							}
							return false;
						}
						return false;
					}
					return false;
				}
				return false;
			}

			[CompilerGenerated]
			public sealed override bool Equals(object obj)
			{
				if (obj is SileroInitParams)
				{
					return Equals((SileroInitParams)obj);
				}
				return false;
			}
		}

		[Literal]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public const string dll = "SileroVAD.API.dll";

		[DllImport("SileroVAD.API.dll")]
		internal static extern IntPtr init_silero(SileroInitParams _arg1);

		[DllImport("SileroVAD.API.dll")]
		internal static extern void release_silero(IntPtr _arg1);

		[DllImport("SileroVAD.API.dll")]
		internal static extern float detect_speech(IntPtr _arg1, float[] _arg2, long _arg3);
	}
}
namespace <StartupCode$SileroVAD>.$Silero
{
	internal static class Foreign
	{
	}
}
namespace <StartupCode$SileroVAD>.$.NETStandard,Version=v2.1
{
	internal static class AssemblyAttributes
	{
	}
}
namespace <StartupCode$SileroVAD>.$Silero
{
	internal static class AssemblyInfo
	{
	}
}
namespace System.Diagnostics.CodeAnalysis
{
	[Serializable]
	[Flags]
	[CompilerGenerated]
	[DebuggerNonUserCode]
	internal enum DynamicallyAccessedMemberTypes
	{
		All = -1,
		None = 0,
		PublicParameterlessConstructor = 1,
		PublicConstructors = 3,
		NonPublicConstructors = 4,
		PublicMethods = 8,
		NonPublicMethods = 0x10,
		PublicFields = 0x20,
		NonPublicFields = 0x40,
		PublicNestedTypes = 0x80,
		NonPublicNestedTypes = 0x100,
		PublicProperties = 0x200,
		NonPublicProperties = 0x400,
		PublicEvents = 0x800,
		NonPublicEvents = 0x1000,
		Interfaces = 0x2000
	}
	[CompilerGenerated]
	internal class DynamicDependencyAttribute : Attribute
	{
		[CompilerGenerated]
		[DebuggerNonUserCode]
		private DynamicallyAccessedMemberTypes MemberType@;

		[CompilerGenerated]
		[DebuggerNonUserCode]
		private Type Type@;

		[CompilerGenerated]
		[DebuggerNonUserCode]
		public DynamicallyAccessedMemberTypes MemberType
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return MemberType@;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		public Type Type
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Type@;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		public DynamicDependencyAttribute(DynamicallyAccessedMemberTypes MemberType, Type Type)
		{
			MemberType@ = MemberType;
			Type@ = Type;
		}
	}
}

FSharpPlus/FSharpPlus.dll

Decompiled 2 weeks ago
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Numerics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.ExceptionServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using <StartupCode$FSharpPlus>;
using FSharpPlus;
using FSharpPlus.Control;
using FSharpPlus.Data;
using FSharpPlus.Internals;
using Microsoft.FSharp.Collections;
using Microsoft.FSharp.Control;
using Microsoft.FSharp.Core;
using Microsoft.FSharp.Core.CompilerServices;
using Microsoft.FSharp.Quotations;

[assembly: FSharpInterfaceDataVersion(2, 0, 0)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("gusty; wallymathieu")]
[assembly: AssemblyCopyright("2012-2024 Gustavo M. Wild - Oskar Gewalli (and contributors https://github.com/fsprojects/FSharpPlus/graphs/contributors)")]
[assembly: AssemblyInformationalVersion("1.6.1")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/fsprojects/FSharpPlus")]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
namespace FSharpPlus.Internals
{
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Default6
	{
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Default5 : Default6
	{
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Default4 : Default5
	{
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Default3 : Default4
	{
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Default2 : Default3
	{
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Default1 : Default2
	{
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Id<t>
	{
		internal t value;

		public t getValue => value;

		public Id(t v)
		{
			value = v;
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Id0
	{
		internal string value;

		public string getValue => value;

		public Id0(string v)
		{
			value = v;
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
	[DebuggerDisplay("{__DebugDisplay(),nq}")]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public abstract class Either<t, u> : IEquatable<Either<t, u>>, IStructuralEquatable, IComparable<Either<t, u>>, IComparable, IStructuralComparable
	{
		public static class Tags
		{
			public const int Left = 0;

			public const int Right = 1;
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(Either<, >.Left@DebugTypeProxy))]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		public class Left : Either<t, u>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly t item;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public t Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Left(t item)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(Either<, >.Right@DebugTypeProxy))]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		public class Right : Either<t, u>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly u item;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public u Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Right(u item)
			{
				this.item = item;
			}
		}

		[SpecialName]
		internal class Left@DebugTypeProxy
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public t Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Left@DebugTypeProxy(Left obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Right@DebugTypeProxy
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public u Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Right@DebugTypeProxy(Right obj)
			{
				_obj = obj;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public int Tag
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return (this is Right) ? 1 : 0;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsLeft
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is Left;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsRight
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is Right;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal Either()
		{
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public static Either<t, u> NewLeft(t item)
		{
			return new Left(item);
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public static Either<t, u> NewRight(u item)
		{
			return new Right(item);
		}

		[SpecialName]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal object __DebugDisplay()
		{
			return ((FSharpFunc<Either<Either<t, u>, string>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<Either<t, u>, string>>((PrintfFormat<FSharpFunc<Either<t, u>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<Either<FSharpFunc<Either<t, u>, string>, Unit>, string>, Unit, string, string, string>("%+0.8A"))).Invoke((Either<Either<t, u>, string>)(object)this);
		}

		[CompilerGenerated]
		public override string ToString()
		{
			return ((FSharpFunc<Either<Either<t, u>, string>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<Either<t, u>, string>>((PrintfFormat<FSharpFunc<Either<t, u>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<Either<FSharpFunc<Either<t, u>, string>, Unit>, string>, Unit, string, string, Either<FSharpFunc<Either<t, u>, string>, Unit>>("%+A"))).Invoke((Either<Either<t, u>, string>)(object)this);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(Either<t, u> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int num = ((this is Right) ? 1 : 0);
					int num2 = ((obj is Right) ? 1 : 0);
					if (num == num2)
					{
						IComparer genericComparer;
						if (this is Left)
						{
							Left left = (Left)this;
							Left left2 = (Left)obj;
							genericComparer = LanguagePrimitives.GenericComparer;
							t item = left.item;
							t item2 = left2.item;
							return HashCompare.GenericComparisonWithComparerIntrinsic<t>(genericComparer, item, item2);
						}
						Right right = (Right)this;
						Right right2 = (Right)obj;
						genericComparer = LanguagePrimitives.GenericComparer;
						u item3 = right.item;
						u item4 = right2.item;
						return HashCompare.GenericComparisonWithComparerIntrinsic<u>(genericComparer, item3, item4);
					}
					return num - num2;
				}
				return 1;
			}
			if (obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj)
		{
			return CompareTo((Either<t, u>)obj);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj, IComparer comp)
		{
			Either<t, u> either = (Either<t, u>)obj;
			if (this != null)
			{
				if ((Either<t, u>)obj != null)
				{
					int num = ((this is Right) ? 1 : 0);
					Either<t, u> either2 = either;
					int num2 = ((either2 is Right) ? 1 : 0);
					if (num == num2)
					{
						if (this is Left)
						{
							Left left = (Left)this;
							Left left2 = (Left)either;
							t item = left.item;
							t item2 = left2.item;
							return HashCompare.GenericComparisonWithComparerIntrinsic<t>(comp, item, item2);
						}
						Right right = (Right)this;
						Right right2 = (Right)either;
						u item3 = right.item;
						u item4 = right2.item;
						return HashCompare.GenericComparisonWithComparerIntrinsic<u>(comp, item3, item4);
					}
					return num - num2;
				}
				return 1;
			}
			if ((Either<t, u>)obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int GetHashCode(IEqualityComparer comp)
		{
			if (this != null)
			{
				int num = 0;
				if (this is Left)
				{
					Left left = (Left)this;
					num = 0;
					t item = left.item;
					return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<t>(comp, item) + ((num << 6) + (num >> 2)));
				}
				Right right = (Right)this;
				num = 1;
				u item2 = right.item;
				return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<u>(comp, item2) + ((num << 6) + (num >> 2)));
			}
			return 0;
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (this != null)
			{
				if (obj is Either<t, u> either)
				{
					int num = ((this is Right) ? 1 : 0);
					Either<t, u> either2 = either;
					int num2 = ((either2 is Right) ? 1 : 0);
					if (num == num2)
					{
						if (this is Left)
						{
							Left left = (Left)this;
							Left left2 = (Left)either;
							t item = left.item;
							t item2 = left2.item;
							return HashCompare.GenericEqualityWithComparerIntrinsic<t>(comp, item, item2);
						}
						Right right = (Right)this;
						Right right2 = (Right)either;
						u item3 = right.item;
						u item4 = right2.item;
						return HashCompare.GenericEqualityWithComparerIntrinsic<u>(comp, item3, item4);
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(Either<t, u> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int num = ((this is Right) ? 1 : 0);
					int num2 = ((obj is Right) ? 1 : 0);
					if (num == num2)
					{
						if (this is Left)
						{
							Left left = (Left)this;
							Left left2 = (Left)obj;
							t item = left.item;
							t item2 = left2.item;
							return HashCompare.GenericEqualityERIntrinsic<t>(item, item2);
						}
						Right right = (Right)this;
						Right right2 = (Right)obj;
						u item3 = right.item;
						u item4 = right2.item;
						return HashCompare.GenericEqualityERIntrinsic<u>(item3, item4);
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is Either<t, u> obj2)
			{
				return Equals(obj2);
			}
			return false;
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Sequential, Size = 1)]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public struct DmStruct : IEquatable<DmStruct>, IStructuralEquatable, IComparable<DmStruct>, IComparable, IStructuralComparable
	{
		[CompilerGenerated]
		public sealed int CompareTo(DmStruct obj)
		{
			return 0;
		}

		[CompilerGenerated]
		public sealed int CompareTo(object obj)
		{
			DmStruct dmStruct = (DmStruct)obj;
			return 0;
		}

		[CompilerGenerated]
		public sealed int CompareTo(object obj, IComparer comp)
		{
			DmStruct dmStruct = (DmStruct)obj;
			return 0;
		}

		[CompilerGenerated]
		public sealed int GetHashCode(IEqualityComparer comp)
		{
			return 0;
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (obj is DmStruct)
			{
				return true;
			}
			return false;
		}

		[CompilerGenerated]
		public sealed bool Equals(DmStruct obj)
		{
			return true;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is DmStruct)
			{
				return true;
			}
			return false;
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Sequential, Size = 1)]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public struct DmStruct1<T1> : IEquatable<DmStruct1<T1>>, IStructuralEquatable, IComparable<DmStruct1<T1>>, IComparable, IStructuralComparable
	{
		[CompilerGenerated]
		public sealed int CompareTo(DmStruct1<T1> obj)
		{
			return 0;
		}

		[CompilerGenerated]
		public sealed int CompareTo(object obj)
		{
			DmStruct1<T1> dmStruct = (DmStruct1<T1>)obj;
			return 0;
		}

		[CompilerGenerated]
		public sealed int CompareTo(object obj, IComparer comp)
		{
			DmStruct1<T1> dmStruct = (DmStruct1<T1>)obj;
			return 0;
		}

		[CompilerGenerated]
		public sealed int GetHashCode(IEqualityComparer comp)
		{
			return 0;
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (obj is DmStruct1<T1>)
			{
				return true;
			}
			return false;
		}

		[CompilerGenerated]
		public sealed bool Equals(DmStruct1<T1> obj)
		{
			return true;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is DmStruct1<T1>)
			{
				return true;
			}
			return false;
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public struct KeyValuePair2<TKey, TValue> : IEquatable<KeyValuePair2<TKey, TValue>>, IStructuralEquatable, IComparable<KeyValuePair2<TKey, TValue>>, IComparable, IStructuralComparable
	{
		internal TKey Key@;

		internal TValue Value@;

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public TKey Key => Key@;

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public TValue Value => Value@;

		[CompilerGenerated]
		public sealed int CompareTo(KeyValuePair2<TKey, TValue> obj)
		{
			IComparer genericComparer = LanguagePrimitives.GenericComparer;
			TKey key@ = Key@;
			TKey key@2 = obj.Key@;
			int num = HashCompare.GenericComparisonWithComparerIntrinsic<TKey>(genericComparer, key@, key@2);
			if (num < 0)
			{
				return num;
			}
			if (num > 0)
			{
				return num;
			}
			genericComparer = LanguagePrimitives.GenericComparer;
			TValue value@ = Value@;
			TValue value@2 = obj.Value@;
			return HashCompare.GenericComparisonWithComparerIntrinsic<TValue>(genericComparer, value@, value@2);
		}

		[CompilerGenerated]
		public sealed int CompareTo(object obj)
		{
			return CompareTo((KeyValuePair2<TKey, TValue>)obj);
		}

		[CompilerGenerated]
		public sealed int CompareTo(object obj, IComparer comp)
		{
			KeyValuePair2<TKey, TValue> keyValuePair = (KeyValuePair2<TKey, TValue>)obj;
			TKey key@ = Key@;
			TKey key@2 = keyValuePair.Key@;
			int num = HashCompare.GenericComparisonWithComparerIntrinsic<TKey>(comp, key@, key@2);
			if (num < 0)
			{
				return num;
			}
			if (num > 0)
			{
				return num;
			}
			TValue value@ = Value@;
			TValue value@2 = keyValuePair.Value@;
			return HashCompare.GenericComparisonWithComparerIntrinsic<TValue>(comp, value@, value@2);
		}

		[CompilerGenerated]
		public sealed int GetHashCode(IEqualityComparer comp)
		{
			int num = 0;
			TValue value@ = Value@;
			num = -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<TValue>(comp, value@) + ((num << 6) + (num >> 2)));
			TKey key@ = Key@;
			return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<TKey>(comp, key@) + ((num << 6) + (num >> 2)));
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (obj is KeyValuePair2<TKey, TValue> keyValuePair)
			{
				TKey key@ = Key@;
				TKey key@2 = keyValuePair.Key@;
				if (HashCompare.GenericEqualityWithComparerIntrinsic<TKey>(comp, key@, key@2))
				{
					TValue value@ = Value@;
					TValue value@2 = keyValuePair.Value@;
					return HashCompare.GenericEqualityWithComparerIntrinsic<TValue>(comp, value@, value@2);
				}
				return false;
			}
			return false;
		}

		public KeyValuePair2(TKey key, TValue value)
		{
			Key@ = key;
			Value@ = value;
		}

		[CompilerGenerated]
		public sealed bool Equals(KeyValuePair2<TKey, TValue> obj)
		{
			TKey key@ = Key@;
			TKey key@2 = obj.Key@;
			if (HashCompare.GenericEqualityERIntrinsic<TKey>(key@, key@2))
			{
				TValue value@ = Value@;
				TValue value@2 = obj.Value@;
				return HashCompare.GenericEqualityERIntrinsic<TValue>(value@, value@2);
			}
			return false;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is KeyValuePair2<TKey, TValue>)
			{
				return Equals((KeyValuePair2<TKey, TValue>)obj);
			}
			return false;
		}
	}
	[Serializable]
	[Sealed]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public sealed class Set2<T>
	{
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class BitConverter
	{
		public static byte[] GetBytes(bool value)
		{
			return new byte[1] { (byte)(value ? 1 : 0) };
		}

		public static byte[] GetBytes(char value, bool isLittleEndian)
		{
			return GetBytes((short)value, isLittleEndian);
		}

		public unsafe static byte[] GetBytes(short value, bool isLittleEndian)
		{
			//The blocks IL_004a are reachable both inside and outside the pinned region starting at IL_003c. ILSpy has duplicated these blocks in order to place them both within and outside the `fixed` statement.
			if (!isLittleEndian)
			{
				return new byte[2]
				{
					(byte)(short)(value >> 8),
					(byte)value
				};
			}
			byte[] array = ArrayModule.ZeroCreate<byte>(2);
			nint num;
			IntPtr intPtr;
			if (array != null)
			{
				if (ArrayModule.Length<byte>(array) != 0)
				{
					fixed (byte* ptr = &array[0])
					{
						num = (intPtr = (nint)ptr);
						*(short*)intPtr = value;
						return array;
					}
				}
				num = 0;
			}
			else
			{
				num = 0;
			}
			intPtr = num;
			*(short*)intPtr = value;
			return array;
		}

		public unsafe static byte[] GetBytes(int value, bool isLittleEndian)
		{
			//The blocks IL_0061 are reachable both inside and outside the pinned region starting at IL_0053. ILSpy has duplicated these blocks in order to place them both within and outside the `fixed` statement.
			if (!isLittleEndian)
			{
				return new byte[4]
				{
					(byte)(value >> 24),
					(byte)(value >> 16),
					(byte)(value >> 8),
					(byte)value
				};
			}
			byte[] array = ArrayModule.ZeroCreate<byte>(4);
			nint num;
			IntPtr intPtr;
			if (array != null)
			{
				if (ArrayModule.Length<byte>(array) != 0)
				{
					fixed (byte* ptr = &array[0])
					{
						num = (intPtr = (nint)ptr);
						*(int*)intPtr = value;
						return array;
					}
				}
				num = 0;
			}
			else
			{
				num = 0;
			}
			intPtr = num;
			*(int*)intPtr = value;
			return array;
		}

		public unsafe static byte[] GetBytes(long value, bool isLittleEndian)
		{
			//The blocks IL_0091 are reachable both inside and outside the pinned region starting at IL_0083. ILSpy has duplicated these blocks in order to place them both within and outside the `fixed` statement.
			if (!isLittleEndian)
			{
				return new byte[8]
				{
					(byte)(value >> 56),
					(byte)(value >> 48),
					(byte)(value >> 40),
					(byte)(value >> 32),
					(byte)(value >> 24),
					(byte)(value >> 16),
					(byte)(value >> 8),
					(byte)value
				};
			}
			byte[] array = ArrayModule.ZeroCreate<byte>(8);
			nint num;
			IntPtr intPtr;
			if (array != null)
			{
				if (ArrayModule.Length<byte>(array) != 0)
				{
					fixed (byte* ptr = &array[0])
					{
						num = (intPtr = (nint)ptr);
						*(long*)intPtr = value;
						return array;
					}
				}
				num = 0;
			}
			else
			{
				num = 0;
			}
			intPtr = num;
			*(long*)intPtr = value;
			return array;
		}

		public static byte[] GetBytes(ushort value, bool isLittleEndian)
		{
			return GetBytes((short)value, isLittleEndian);
		}

		public static byte[] GetBytes(uint value, bool isLittleEndian)
		{
			return GetBytes((int)value, isLittleEndian);
		}

		public static byte[] GetBytes(ulong value, bool isLittleEndian)
		{
			return GetBytes((long)value, isLittleEndian);
		}

		public unsafe static byte[] GetBytes(float value, bool isLittleEndian)
		{
			float num = value;
			return GetBytes(*(int*)(&num), isLittleEndian);
		}

		public unsafe static byte[] GetBytes(double value, bool isLittleEndian)
		{
			double num = value;
			return GetBytes(*(long*)(&num), isLittleEndian);
		}

		public static byte[] GetBytes(Guid value, bool isLittleEndian)
		{
			byte[] array = value.ToByteArray();
			if (isLittleEndian)
			{
				return array;
			}
			return $Internals.GetBytes$cont@204(array, null);
		}

		public static char ToChar(byte[] value, int startIndex, bool isLittleEndian)
		{
			return (char)ToInt16(value, startIndex, isLittleEndian);
		}

		public unsafe static short ToInt16(byte[] value, int startIndex, bool isLittleEndian)
		{
			if (value == null)
			{
				throw new ArgumentNullException("value");
			}
			if (startIndex >= value.Length)
			{
				ArgumentOutOfRangeException ex = new ArgumentOutOfRangeException("startIndex", "ArgumentOutOfRange_Index");
				throw ex;
			}
			if (startIndex > value.Length - 2)
			{
				ArgumentException ex2 = new ArgumentException("Arg_ArrayPlusOffTooSmall");
				throw ex2;
			}
			fixed (byte* ptr = &value[startIndex])
			{
				nint num = (nint)ptr;
				short num3;
				if (isLittleEndian)
				{
					if (startIndex % 2 == 0)
					{
						return *(short*)num;
					}
					short num2 = *(byte*)(num + (nint)0 * (nint)sizeof(byte));
					num3 = *(byte*)(num + (nint)1 * (nint)sizeof(byte));
					return (short)(num2 | (short)(num3 << 8));
				}
				num3 = *(byte*)(num + (nint)0 * (nint)sizeof(byte));
				return (short)((short)(num3 << 8) | (short)(*(byte*)(num + (nint)1 * (nint)sizeof(byte))));
			}
		}

		public unsafe static int ToInt32(byte[] value, int startIndex, bool isLittleEndian)
		{
			if (value == null)
			{
				throw new ArgumentNullException("value");
			}
			if (startIndex >= value.Length)
			{
				ArgumentOutOfRangeException ex = new ArgumentOutOfRangeException("startIndex", "ArgumentOutOfRange_Index");
				throw ex;
			}
			if (startIndex > value.Length - 4)
			{
				ArgumentException ex2 = new ArgumentException("Arg_ArrayPlusOffTooSmall");
				throw ex2;
			}
			fixed (byte* ptr = &value[startIndex])
			{
				nint num = (nint)ptr;
				if (isLittleEndian)
				{
					if (startIndex % 4 == 0)
					{
						return *(int*)num;
					}
					return *(byte*)(num + (nint)0 * (nint)sizeof(byte)) | (*(byte*)(num + (nint)1 * (nint)sizeof(byte)) << 8) | (*(byte*)(num + (nint)2 * (nint)sizeof(byte)) << 16) | (*(byte*)(num + (nint)3 * (nint)sizeof(byte)) << 24);
				}
				return (*(byte*)(num + (nint)0 * (nint)sizeof(byte)) << 24) | (*(byte*)(num + (nint)1 * (nint)sizeof(byte)) << 16) | (*(byte*)(num + (nint)2 * (nint)sizeof(byte)) << 8) | *(byte*)(num + (nint)3 * (nint)sizeof(byte));
			}
		}

		public unsafe static long ToInt64(byte[] value, int startIndex, bool isLittleEndian)
		{
			if (value == null)
			{
				throw new ArgumentNullException("value");
			}
			if (startIndex >= value.Length)
			{
				ArgumentOutOfRangeException ex = new ArgumentOutOfRangeException("startIndex", "ArgumentOutOfRange_Index");
				throw ex;
			}
			if (startIndex > value.Length - 8)
			{
				ArgumentException ex2 = new ArgumentException("Arg_ArrayPlusOffTooSmall");
				throw ex2;
			}
			fixed (byte* ptr = &value[startIndex])
			{
				nint num = (nint)ptr;
				long num2;
				if (isLittleEndian)
				{
					if (startIndex % 8 == 0)
					{
						return *(long*)num;
					}
					num2 = (long)(*(byte*)(num + (nint)0 * (nint)sizeof(byte)) | ((ulong)(*(byte*)(num + (nint)1 * (nint)sizeof(byte))) << 8) | ((ulong)(*(byte*)(num + (nint)2 * (nint)sizeof(byte))) << 16) | ((ulong)(*(byte*)(num + (nint)3 * (nint)sizeof(byte))) << 24));
					long num3 = (long)(*(byte*)(num + (nint)4 * (nint)sizeof(byte)) | ((ulong)(*(byte*)(num + (nint)5 * (nint)sizeof(byte))) << 8) | ((ulong)(*(byte*)(num + (nint)6 * (nint)sizeof(byte))) << 16) | ((ulong)(*(byte*)(num + (nint)7 * (nint)sizeof(byte))) << 24));
					return num2 | (num3 << 32);
				}
				num2 = (long)(((ulong)(*(byte*)(num + (nint)0 * (nint)sizeof(byte))) << 24) | ((ulong)(*(byte*)(num + (nint)1 * (nint)sizeof(byte))) << 16) | ((ulong)(*(byte*)(num + (nint)2 * (nint)sizeof(byte))) << 8) | *(byte*)(num + (nint)3 * (nint)sizeof(byte)));
				return (long)(((ulong)(*(byte*)(num + (nint)4 * (nint)sizeof(byte))) << 24) | ((ulong)(*(byte*)(num + (nint)5 * (nint)sizeof(byte))) << 16) | ((ulong)(*(byte*)(num + (nint)6 * (nint)sizeof(byte))) << 8) | *(byte*)(num + (nint)7 * (nint)sizeof(byte))) | (num2 << 32);
			}
		}

		public static Guid ToGuid(byte[] value, int startIndex, bool isLittleEndian)
		{
			if (value == null)
			{
				throw new ArgumentNullException("value");
			}
			if (startIndex >= value.Length)
			{
				ArgumentOutOfRangeException ex = new ArgumentOutOfRangeException("startIndex", "ArgumentOutOfRange_Index");
				throw ex;
			}
			if (startIndex > value.Length - 16)
			{
				ArgumentException ex2 = new ArgumentException("Arg_ArrayPlusOffTooSmall");
				throw ex2;
			}
			if (isLittleEndian)
			{
				if (startIndex == 0)
				{
					return new Guid(value);
				}
				int num = startIndex + 15;
				int num2 = value.Length;
				int num3 = ((startIndex >= 0) ? startIndex : 0);
				int num4 = ((num >= 0 + num2) ? (0 + num2 - 1) : num);
				int num5 = num4 - num3 + 1;
				int num6 = ((num5 >= 0) ? num5 : 0);
				byte[] array = new byte[num6];
				int num7 = 0;
				int num8 = num6 - 1;
				if (num8 >= num7)
				{
					do
					{
						array[num7] = value[num3 + num7];
						num7++;
					}
					while (num7 != num8 + 1);
				}
				return new Guid(array);
			}
			return $Internals.ToGuid$cont@264(value, startIndex, null);
		}

		public static ushort ToUInt16(byte[] value, int startIndex, bool isLittleEndian)
		{
			return (ushort)ToInt16(value, startIndex, isLittleEndian);
		}

		public static uint ToUInt32(byte[] value, int startIndex, bool isLittleEndian)
		{
			return (uint)ToInt32(value, startIndex, isLittleEndian);
		}

		public static ulong ToUInt64(byte[] value, int startIndex, bool isLittleEndian)
		{
			return (ulong)ToInt64(value, startIndex, isLittleEndian);
		}

		public unsafe static float ToSingle(byte[] value, int startIndex, bool isLittleEndian)
		{
			int num = ToInt32(value, startIndex, isLittleEndian);
			return *(float*)(&num);
		}

		public unsafe static double ToDouble(byte[] value, int startIndex, bool isLittleEndian)
		{
			long num = ToInt64(value, startIndex, isLittleEndian);
			return *(double*)(&num);
		}

		internal static char GetHexValue(int i)
		{
			char c;
			if (i < 10)
			{
				c = (char)i;
				return (char)(c + 48);
			}
			c = (char)(i - 10);
			return (char)(c + 65);
		}

		public static string ToString(byte[] value, int startIndex, int length)
		{
			if (value == null)
			{
				throw new ArgumentNullException("value");
			}
			int num = value.Length;
			if (startIndex >= value.Length)
			{
				ArgumentOutOfRangeException ex = new ArgumentOutOfRangeException("startIndex", "ArgumentOutOfRange_StartIndex");
				throw ex;
			}
			if (length < 0)
			{
				ArgumentOutOfRangeException ex = new ArgumentOutOfRangeException("length", "ArgumentOutOfRange_GenericPositive");
				throw ex;
			}
			if (startIndex > num - length)
			{
				ArgumentException ex2 = new ArgumentException("Arg_ArrayPlusOffTooSmall");
				throw ex2;
			}
			if (length == 0)
			{
				return string.Empty;
			}
			char[] array = ArrayModule.ZeroCreate<char>(length * 3);
			int num2 = startIndex;
			IEnumerable<int> enumerable = OperatorIntrinsics.RangeInt32(0, 3, 3 * length - 1);
			foreach (int item in enumerable)
			{
				int num3 = value[num2];
				num2++;
				array[item] = GetHexValue(num3 / 16);
				array[item + 1] = GetHexValue(num3 % 16);
				array[item + 2] = '-';
			}
			return new string(array, 0, array.Length - 1);
		}

		public static string ToString(byte[] value)
		{
			if (value == null)
			{
				throw new ArgumentNullException("value");
			}
			return ToString(value, 0, value.Length);
		}

		public static string ToString(byte[] value, int startIndex)
		{
			if (value == null)
			{
				throw new ArgumentNullException("value");
			}
			return ToString(value, startIndex, value.Length - startIndex);
		}
	}
}
namespace FSharpPlus.Data
{
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public interface NonEmptySeq<T> : IEnumerable<T>
	{
		T First { get; }
	}
}
namespace FSharpPlus.Control
{
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Explicit : Default1
	{
		public static FSharpFunc<t, R> Explicit<R, t>(R _arg1, Default1 _arg2)
		{
			return $Converter.Explicit@18<R, t>.@_instance;
		}

		public static FSharpFunc<t, R> Explicit$W<R, t>(FSharpFunc<t, R> op_Explicit, R _arg1, Default1 _arg2)
		{
			return new $Converter.Explicit@18-1<R, t>(op_Explicit);
		}

		public static void Explicit<t>(t _arg3, Default1 _arg4) where t : class
		{
		}

		public static FSharpFunc<a, byte> Explicit<a>(byte _arg5, Explicit _arg6)
		{
			return $Converter.Explicit@21-2<a>.@_instance;
		}

		public static FSharpFunc<a, byte> Explicit$W<a>(FSharpFunc<a, byte> op_Explicit, byte _arg5, Explicit _arg6)
		{
			return new $Converter.Explicit@21-3<a>(op_Explicit);
		}

		public static FSharpFunc<a, sbyte> Explicit<a>(sbyte _arg7, Explicit _arg8)
		{
			return $Converter.Explicit@22-4<a>.@_instance;
		}

		public static FSharpFunc<a, sbyte> Explicit$W<a>(FSharpFunc<a, sbyte> op_Explicit, sbyte _arg7, Explicit _arg8)
		{
			return new $Converter.Explicit@22-5<a>(op_Explicit);
		}

		public static FSharpFunc<a, short> Explicit<a>(short _arg9, Explicit _arg10)
		{
			return $Converter.Explicit@23-6<a>.@_instance;
		}

		public static FSharpFunc<a, short> Explicit$W<a>(FSharpFunc<a, short> op_Explicit, short _arg9, Explicit _arg10)
		{
			return new $Converter.Explicit@23-7<a>(op_Explicit);
		}

		public static FSharpFunc<a, ushort> Explicit<a>(ushort _arg11, Explicit _arg12)
		{
			return $Converter.Explicit@24-8<a>.@_instance;
		}

		public static FSharpFunc<a, ushort> Explicit$W<a>(FSharpFunc<a, ushort> op_Explicit, ushort _arg11, Explicit _arg12)
		{
			return new $Converter.Explicit@24-9<a>(op_Explicit);
		}

		public static FSharpFunc<a, int> Explicit<a>(int _arg13, Explicit _arg14)
		{
			return $Converter.Explicit@25-10<a>.@_instance;
		}

		public static FSharpFunc<a, int> Explicit$W<a>(FSharpFunc<a, int> op_Explicit, int _arg13, Explicit _arg14)
		{
			return new $Converter.Explicit@25-11<a>(op_Explicit);
		}

		public static FSharpFunc<a, uint> Explicit<a>(uint _arg15, Explicit _arg16)
		{
			return $Converter.Explicit@26-12<a>.@_instance;
		}

		public static FSharpFunc<a, uint> Explicit$W<a>(FSharpFunc<a, uint> op_Explicit, uint _arg15, Explicit _arg16)
		{
			return new $Converter.Explicit@26-13<a>(op_Explicit);
		}

		public static FSharpFunc<a, long> Explicit<a>(long _arg17, Explicit _arg18)
		{
			return $Converter.Explicit@27-14<a>.@_instance;
		}

		public static FSharpFunc<a, long> Explicit$W<a>(FSharpFunc<a, long> op_Explicit, long _arg17, Explicit _arg18)
		{
			return new $Converter.Explicit@27-15<a>(op_Explicit);
		}

		public static FSharpFunc<a, ulong> Explicit<a>(ulong _arg19, Explicit _arg20)
		{
			return $Converter.Explicit@28-16<a>.@_instance;
		}

		public static FSharpFunc<a, ulong> Explicit$W<a>(FSharpFunc<a, ulong> op_Explicit, ulong _arg19, Explicit _arg20)
		{
			return new $Converter.Explicit@28-17<a>(op_Explicit);
		}

		public static FSharpFunc<a, IntPtr> Explicit<a>(IntPtr _arg21, Explicit _arg22)
		{
			return $Converter.Explicit@30-18<a>.@_instance;
		}

		public static FSharpFunc<a, IntPtr> Explicit$W<a>(FSharpFunc<a, int> op_Explicit, IntPtr _arg21, Explicit _arg22)
		{
			return new $Converter.Explicit@30-19<a>(op_Explicit);
		}

		public static FSharpFunc<a, UIntPtr> Explicit<a>(UIntPtr _arg23, Explicit _arg24)
		{
			return $Converter.Explicit@31-20<a>.@_instance;
		}

		public static FSharpFunc<a, UIntPtr> Explicit$W<a>(FSharpFunc<a, uint> op_Explicit, UIntPtr _arg23, Explicit _arg24)
		{
			return new $Converter.Explicit@31-21<a>(op_Explicit);
		}

		public static FSharpFunc<a, double> Explicit<a>(double _arg25, Explicit _arg26)
		{
			return $Converter.Explicit@33-22<a>.@_instance;
		}

		public static FSharpFunc<a, double> Explicit$W<a>(FSharpFunc<a, double> op_Explicit, double _arg25, Explicit _arg26)
		{
			return new $Converter.Explicit@33-23<a>(op_Explicit);
		}

		public static FSharpFunc<a, float> Explicit<a>(float _arg27, Explicit _arg28)
		{
			return $Converter.Explicit@34-24<a>.@_instance;
		}

		public static FSharpFunc<a, float> Explicit$W<a>(FSharpFunc<a, float> op_Explicit, float _arg27, Explicit _arg28)
		{
			return new $Converter.Explicit@34-25<a>(op_Explicit);
		}

		public static FSharpFunc<a, decimal> Explicit<a>(decimal _arg29, Explicit _arg30)
		{
			return $Converter.Explicit@35-26<a>.@_instance;
		}

		public static FSharpFunc<a, decimal> Explicit$W<a>(FSharpFunc<a, decimal> op_Explicit, decimal _arg29, Explicit _arg30)
		{
			return new $Converter.Explicit@35-27<a>(op_Explicit);
		}

		public static FSharpFunc<a, char> Explicit<a>(char _arg31, Explicit _arg32)
		{
			return $Converter.Explicit@36-28<a>.@_instance;
		}

		public static FSharpFunc<a, char> Explicit$W<a>(FSharpFunc<a, char> op_Explicit, char _arg31, Explicit _arg32)
		{
			return new $Converter.Explicit@36-29<a>(op_Explicit);
		}

		public static T Invoke<a, T>(a value)
		{
			Explicit item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.Explicit, ?>, T>.InvokeFast<T>((FSharpFunc<Tuple<Explicit, ?>, FSharpFunc<T, T>>)(object)$Converter.Invoke@40<a, T>.@_instance, (Tuple<Explicit, ?>)(object)new Tuple<Explicit, T>(item, default(T)), (T)value);
		}

		public static T Invoke$W<a, T>(FSharpFunc<T, FSharpFunc<Explicit, FSharpFunc<a, T>>> @explicit, a value)
		{
			Explicit item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.Explicit, ?>, T>.InvokeFast<T>((FSharpFunc<Tuple<Explicit, ?>, FSharpFunc<T, T>>)(object)new $Converter.Invoke@40-1<a, T>(@explicit), (Tuple<Explicit, ?>)(object)new Tuple<Explicit, T>(item, default(T)), (T)value);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class OfBytes
	{
		public static FSharpFunc<Tuple<byte[], int, a>, bool> OfBytes<a>(bool _arg1, OfBytes _arg2)
		{
			return $Converter.OfBytes@43<a>.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, bool>, char> OfBytes(char _arg3, OfBytes _arg4)
		{
			return $Converter.OfBytes@45-1.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, bool>, double> OfBytes(double _arg5, OfBytes _arg6)
		{
			return $Converter.OfBytes@46-2.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, bool>, short> OfBytes(short _arg7, OfBytes _arg8)
		{
			return $Converter.OfBytes@47-3.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, bool>, int> OfBytes(int _arg9, OfBytes _arg10)
		{
			return $Converter.OfBytes@48-4.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, bool>, long> OfBytes(long _arg11, OfBytes _arg12)
		{
			return $Converter.OfBytes@49-5.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, bool>, float> OfBytes(float _arg13, OfBytes _arg14)
		{
			return $Converter.OfBytes@50-6.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, b>, string> OfBytes<b>(string _arg15, OfBytes _arg16)
		{
			return $Converter.OfBytes@52-7<b>.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, bool>, Guid> OfBytes(Guid _arg17, OfBytes _arg18)
		{
			return $Converter.OfBytes@53-8.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, bool>, ushort> OfBytes(ushort _arg19, OfBytes _arg20)
		{
			return $Converter.OfBytes@55-9.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, bool>, uint> OfBytes(uint _arg21, OfBytes _arg22)
		{
			return $Converter.OfBytes@56-10.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, bool>, ulong> OfBytes(ulong _arg23, OfBytes _arg24)
		{
			return $Converter.OfBytes@57-11.@_instance;
		}

		[CompilationArgumentCounts(new int[] { 1, 1, 1 })]
		public static a Invoke<a>(bool isLtEndian, int startIndex, byte[] value)
		{
			OfBytes item = null;
			Tuple<byte[], int, bool> tuple = new Tuple<byte[], int, bool>(value, startIndex, isLtEndian);
			return FSharpFunc<Tuple<FSharpPlus.Control.OfBytes, a>, Tuple<byte[], int, bool>>.InvokeFast<a>((FSharpFunc<Tuple<OfBytes, a>, FSharpFunc<Tuple<byte[], int, bool>, a>>)$Converter.Invoke@62-2<a>.@_instance, new Tuple<OfBytes, a>(item, default(a)), tuple);
		}

		[CompilationArgumentCounts(new int[] { 1, 1, 1 })]
		public static a Invoke$W<a>(FSharpFunc<a, FSharpFunc<OfBytes, FSharpFunc<Tuple<byte[], int, bool>, a>>> ofBytes, bool isLtEndian, int startIndex, byte[] value)
		{
			OfBytes item = null;
			Tuple<byte[], int, bool> tuple = new Tuple<byte[], int, bool>(value, startIndex, isLtEndian);
			return FSharpFunc<Tuple<FSharpPlus.Control.OfBytes, a>, Tuple<byte[], int, bool>>.InvokeFast<a>((FSharpFunc<Tuple<OfBytes, a>, FSharpFunc<Tuple<byte[], int, bool>, a>>)new $Converter.Invoke@62-3<a>(ofBytes), new Tuple<OfBytes, a>(item, default(a)), tuple);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class ToBytes
	{
		public static byte[] ToBytes<a>(bool x, a _arg1, ToBytes _arg2)
		{
			return new byte[1] { (byte)(x ? 1 : 0) };
		}

		public static byte[] ToBytes(char x, bool e, ToBytes _arg3)
		{
			bool isLittleEndian = System.BitConverter.IsLittleEndian == e;
			return FSharpPlus.Internals.BitConverter.GetBytes((short)x, isLittleEndian);
		}

		public unsafe static byte[] ToBytes(double x, bool e, ToBytes _arg4)
		{
			bool isLittleEndian = System.BitConverter.IsLittleEndian == e;
			double num = x;
			return FSharpPlus.Internals.BitConverter.GetBytes(*(long*)(&num), isLittleEndian);
		}

		public static byte[] ToBytes(short x, bool e, ToBytes _arg5)
		{
			return FSharpPlus.Internals.BitConverter.GetBytes(x, System.BitConverter.IsLittleEndian == e);
		}

		public static byte[] ToBytes(int x, bool e, ToBytes _arg6)
		{
			return FSharpPlus.Internals.BitConverter.GetBytes(x, System.BitConverter.IsLittleEndian == e);
		}

		public static byte[] ToBytes(long x, bool e, ToBytes _arg7)
		{
			return FSharpPlus.Internals.BitConverter.GetBytes(x, System.BitConverter.IsLittleEndian == e);
		}

		public unsafe static byte[] ToBytes(float x, bool e, ToBytes _arg8)
		{
			bool isLittleEndian = System.BitConverter.IsLittleEndian == e;
			float num = x;
			return FSharpPlus.Internals.BitConverter.GetBytes(*(int*)(&num), isLittleEndian);
		}

		public static byte[] ToBytes<b>(string x, b _arg9, ToBytes _arg10)
		{
			char[] array = x.ToCharArray();
			if (array == null)
			{
				throw new ArgumentNullException("array");
			}
			byte[] array2 = new byte[array.Length];
			for (int i = 0; i < array2.Length; i++)
			{
				array2[i] = (byte)array[i];
			}
			return array2;
		}

		public static byte[] ToBytes(Guid x, bool e, ToBytes _arg11)
		{
			return FSharpPlus.Internals.BitConverter.GetBytes(x, System.BitConverter.IsLittleEndian == e);
		}

		public static byte[] ToBytes(ushort x, bool e, ToBytes _arg12)
		{
			bool isLittleEndian = System.BitConverter.IsLittleEndian == e;
			return FSharpPlus.Internals.BitConverter.GetBytes((short)x, isLittleEndian);
		}

		public static byte[] ToBytes(uint x, bool e, ToBytes _arg13)
		{
			bool isLittleEndian = System.BitConverter.IsLittleEndian == e;
			return FSharpPlus.Internals.BitConverter.GetBytes((int)x, isLittleEndian);
		}

		public static byte[] ToBytes(ulong x, bool e, ToBytes _arg14)
		{
			bool isLittleEndian = System.BitConverter.IsLittleEndian == e;
			return FSharpPlus.Internals.BitConverter.GetBytes((long)x, isLittleEndian);
		}

		[CompilationArgumentCounts(new int[] { 1, 1 })]
		public static byte[] Invoke<a>(bool isLittleEndian, a value)
		{
			throw new NotSupportedException("Dynamic invocation of ToBytes is not supported");
		}

		[CompilationArgumentCounts(new int[] { 1, 1 })]
		public static byte[] Invoke$W<a>(FSharpFunc<a, FSharpFunc<bool, FSharpFunc<ToBytes, byte[]>>> toBytes, bool isLittleEndian, a value)
		{
			return FSharpFunc<FSharpPlus.Control.ToBytes, bool>.InvokeFast<ToBytes, byte[]>((FSharpFunc<ToBytes, FSharpFunc<bool, FSharpFunc<ToBytes, byte[]>>>)(object)toBytes, (ToBytes)value, isLittleEndian, (ToBytes)null);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class TryParse : Default1
	{
		public static FSharpFunc<string, FSharpOption<decimal>> TryParse(decimal _arg1, TryParse _arg2)
		{
			return $Converter.TryParse@90.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<float>> TryParse(float _arg3, TryParse _arg4)
		{
			return $Converter.TryParse@91-1.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<double>> TryParse(double _arg5, TryParse _arg6)
		{
			return $Converter.TryParse@92-2.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<ushort>> TryParse(ushort _arg7, TryParse _arg8)
		{
			return $Converter.TryParse@93-3.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<uint>> TryParse(uint _arg9, TryParse _arg10)
		{
			return $Converter.TryParse@94-4.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<ulong>> TryParse(ulong _arg11, TryParse _arg12)
		{
			return $Converter.TryParse@95-5.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<short>> TryParse(short _arg13, TryParse _arg14)
		{
			return $Converter.TryParse@96-6.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<int>> TryParse(int _arg15, TryParse _arg16)
		{
			return $Converter.TryParse@97-7.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<long>> TryParse(long _arg17, TryParse _arg18)
		{
			return $Converter.TryParse@98-8.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<string>> TryParse(string _arg19, TryParse _arg20)
		{
			return $Converter.TryParse@111-9.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<StringBuilder>> TryParse(StringBuilder _arg21, TryParse _arg22)
		{
			return $Converter.TryParse@112-10.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<DateTime>> TryParse(DateTime _arg23, TryParse _arg24)
		{
			return $Converter.TryParse@115-11.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<DateTimeOffset>> TryParse(DateTimeOffset _arg25, TryParse _arg26)
		{
			return $Converter.TryParse@123-12.@_instance;
		}

		public static FSharpOption<b> Invoke<b>(string value)
		{
			TryParse item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.TryParse, FSharpOption<b>>, string>.InvokeFast<FSharpOption<b>>((FSharpFunc<Tuple<TryParse, FSharpOption<b>>, FSharpFunc<string, FSharpOption<b>>>)(object)$Converter.Invoke@135-4<b>.@_instance, (Tuple<TryParse, FSharpOption<b>>)(object)new Tuple<TryParse, b>(item, default(b)), value);
		}

		public static FSharpOption<b> Invoke$W<b>(FSharpFunc<b, FSharpFunc<TryParse, FSharpFunc<string, FSharpOption<b>>>> tryParse, string value)
		{
			TryParse item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.TryParse, FSharpOption<b>>, string>.InvokeFast<FSharpOption<b>>((FSharpFunc<Tuple<TryParse, FSharpOption<b>>, FSharpFunc<string, FSharpOption<b>>>)(object)new $Converter.Invoke@135-5<b>(tryParse), (Tuple<TryParse, FSharpOption<b>>)(object)new Tuple<TryParse, b>(item, default(b)), value);
		}

		public static FSharpOption<R> InvokeOnInstance<R>(string value)
		{
			throw new NotSupportedException("Dynamic invocation of TryParse is not supported");
		}

		public static FSharpOption<R> InvokeOnInstance$W<R>(FSharpFunc<string, FSharpOption<R>> tryParse, string value)
		{
			return tryParse.Invoke(value);
		}

		public static FSharpOption<R> InvokeOnConvention<R, a>(string value)
		{
			R val = default(R);
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of TryParse is not supported");
			}
			if ((bool)(object)null)
			{
				return FSharpOption<R>.Some(val);
			}
			return null;
		}

		public unsafe static FSharpOption<R> InvokeOnConvention$W<R, a>(FSharpFunc<string, FSharpFunc<ref R, bool>> tryParse, string value)
		{
			R val = default(R);
			if (FSharpFunc<string, ref bool>.InvokeFast<bool>((FSharpFunc<string, FSharpFunc<ref bool, bool>>)(object)tryParse, value, ref *(bool*)(&val)))
			{
				return FSharpOption<R>.Some(val);
			}
			return null;
		}

		public static FSharpFunc<string, FSharpOption<R>> TryParse<R>(R _arg1, Default4 _arg2)
		{
			return $Converter.TryParse@211-13<R>.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<R>> TryParse$W<R>(FSharpFunc<string, R> parse, R _arg1, Default4 _arg2)
		{
			return new $Converter.TryParse@211-14<R>(parse);
		}

		public static FSharpFunc<string, FSharpOption<R>> TryParse<R, a>(R _arg3, Default3 _arg4)
		{
			return $Converter.TryParse@216-15<R, a>.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<R>> TryParse$W<R, a>(FSharpFunc<string, FSharpFunc<ref R, bool>> tryParse, R _arg3, Default3 _arg4)
		{
			return new $Converter.TryParse@216-16<R, a>(tryParse);
		}

		public static FSharpFunc<string, FSharpOption<R>> TryParse<R>(R _arg5, Default2 _arg6)
		{
			return $Converter.TryParse@218-17<R>.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<R>> TryParse$W<R>(FSharpFunc<string, FSharpOption<R>> tryParse, R _arg5, Default2 _arg6)
		{
			return new $Converter.TryParse@218-18<R>(tryParse);
		}

		public static FSharpFunc<a, a> TryParse<t, a>(t _arg7, Default2 _arg8) where t : class
		{
			return $Converter.TryParse@224-19<a>.@_instance;
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Parse : Default1
	{
		public static FSharpFunc<string, R> Parse<R>(R _arg1, Parse _arg2)
		{
			return $Converter.Parse@155<R>.@_instance;
		}

		public static FSharpFunc<string, R> Parse$W<R>(FSharpFunc<string, FSharpFunc<CultureInfo, R>> parse, R _arg1, Parse _arg2)
		{
			return new $Converter.Parse@155-1<R>(parse);
		}

		public static FSharpFunc<string, @enum> Parse<T, a, @enum>(T _arg3, Parse _arg4) where @enum : struct
		{
			return $Converter.Parse@157-2<@enum>.@_instance;
		}

		public static FSharpFunc<string, DateTime> Parse(DateTime _arg5, Parse _arg6)
		{
			return $Converter.Parse@164-3.@_instance;
		}

		public static FSharpFunc<string, DateTimeOffset> Parse(DateTimeOffset _arg7, Parse _arg8)
		{
			return $Converter.Parse@169-4.@_instance;
		}

		public static FSharpFunc<string, bool> Parse(bool _arg9, Parse _arg10)
		{
			return $Converter.Parse@174-5.@_instance;
		}

		public static FSharpFunc<string, char> Parse(char _arg11, Parse _arg12)
		{
			return $Converter.Parse@176-6.@_instance;
		}

		public static FSharpFunc<string, string> Parse(string _arg13, Parse _arg14)
		{
			return $Converter.Parse@177-7.@_instance;
		}

		public static FSharpFunc<string, StringBuilder> Parse(StringBuilder _arg15, Parse _arg16)
		{
			return $Converter.Parse@178-8.@_instance;
		}

		public static a Invoke<a>(string value)
		{
			Parse item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.Parse, a>, string>.InvokeFast<a>((FSharpFunc<Tuple<Parse, a>, FSharpFunc<string, a>>)$Converter.Invoke@183-6<a>.@_instance, new Tuple<Parse, a>(item, default(a)), value);
		}

		public static a Invoke$W<a>(FSharpFunc<a, FSharpFunc<Parse, FSharpFunc<string, a>>> parse, string value)
		{
			Parse item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.Parse, a>, string>.InvokeFast<a>((FSharpFunc<Tuple<Parse, a>, FSharpFunc<string, a>>)new $Converter.Invoke@183-7<a>(parse), new Tuple<Parse, a>(item, default(a)), value);
		}

		public static R InvokeOnInstance<R>(string value)
		{
			throw new NotSupportedException("Dynamic invocation of Parse is not supported");
		}

		public static R InvokeOnInstance$W<R>(FSharpFunc<string, R> parse, string value)
		{
			return parse.Invoke(value);
		}

		public static FSharpFunc<string, R> Parse<R, a>(R _arg1, Default4 _arg2)
		{
			return $Converter.Parse@190-9<R, a>.@_instance;
		}

		public static FSharpFunc<string, R> Parse$W<R, a>(FSharpFunc<string, FSharpFunc<ref R, bool>> tryParse, R _arg1, Default4 _arg2)
		{
			return new $Converter.Parse@190-10<R, a>(tryParse);
		}

		public static FSharpFunc<string, R> Parse<R>(R _arg3, Default3 _arg4)
		{
			return $Converter.Parse@195-11<R>.@_instance;
		}

		public static FSharpFunc<string, R> Parse$W<R>(FSharpFunc<string, FSharpOption<R>> tryParse, R _arg3, Default3 _arg4)
		{
			return new $Converter.Parse@195-12<R>(tryParse);
		}

		public static FSharpFunc<string, R> Parse<R>(R _arg5, Default2 _arg6)
		{
			return $Converter.Parse@200-13<R>.@_instance;
		}

		public static FSharpFunc<string, R> Parse$W<R>(FSharpFunc<string, R> parse, R _arg5, Default2 _arg6)
		{
			return new $Converter.Parse@200-14<R>(parse);
		}

		public static FSharpFunc<a, a> Parse<t, a>(t _arg7, Default2 _arg8) where t : class
		{
			return $Converter.Parse@206-15<a>.@_instance;
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class FromBigInt : Default1
	{
		public static FSharpFunc<System.Numerics.BigInteger, R> FromBigInt<R>(R _arg1, Default4 _arg2)
		{
			return $Numeric.FromBigInt@19<R>.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, R> FromBigInt$W<R>(FSharpFunc<R, FSharpFunc<Explicit, FSharpFunc<System.Numerics.BigInteger, R>>> @explicit, R _arg1, Default4 _arg2)
		{
			return new $Numeric.FromBigInt@19-2<R>(@explicit);
		}

		public static FSharpFunc<System.Numerics.BigInteger, R> FromBigInt<R>(R _arg3, Default3 _arg4)
		{
			return $Numeric.FromBigInt@20-4<R>.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, R> FromBigInt$W<R>(FSharpFunc<long, R> op_Implicit, R _arg3, Default3 _arg4)
		{
			return new $Numeric.FromBigInt@20-5<R>(op_Implicit);
		}

		public static FSharpFunc<System.Numerics.BigInteger, R> FromBigInt<R>(R _arg5, Default2 _arg6)
		{
			return $Numeric.FromBigInt@21-6<R>.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, R> FromBigInt$W<R>(FSharpFunc<System.Numerics.BigInteger, R> op_Implicit, R _arg5, Default2 _arg6)
		{
			return new $Numeric.FromBigInt@21-7<R>(op_Implicit);
		}

		public static FSharpFunc<System.Numerics.BigInteger, R> FromBigInt<R>(R _arg7, Default1 _arg8)
		{
			return $Numeric.FromBigInt@22-8<R>.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, R> FromBigInt$W<R>(FSharpFunc<System.Numerics.BigInteger, R> fromBigInt, R _arg7, Default1 _arg8)
		{
			return new $Numeric.FromBigInt@22-9<R>(fromBigInt);
		}

		public static FSharpFunc<System.Numerics.BigInteger, R> FromBigInt<R>(Default1 _arg9, Default1 _arg10)
		{
			return $Numeric.FromBigInt@23-10<R>.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, R> FromBigInt$W<R>(FSharpFunc<System.Numerics.BigInteger, R> fromBigInt, Default1 _arg9, Default1 _arg10)
		{
			return new $Numeric.FromBigInt@23-11<R>(fromBigInt);
		}

		public static FSharpFunc<System.Numerics.BigInteger, int> FromBigInt(int _arg11, FromBigInt _arg12)
		{
			return $Numeric.FromBigInt@24-12.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, long> FromBigInt(long _arg13, FromBigInt _arg14)
		{
			return $Numeric.FromBigInt@25-13.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, IntPtr> FromBigInt(IntPtr _arg15, FromBigInt _arg16)
		{
			return $Numeric.FromBigInt@26-14.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, UIntPtr> FromBigInt(UIntPtr _arg17, FromBigInt _arg18)
		{
			return $Numeric.FromBigInt@27-15.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, System.Numerics.BigInteger> FromBigInt(System.Numerics.BigInteger _arg19, FromBigInt _arg20)
		{
			return $Numeric.FromBigInt@28-16.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, double> FromBigInt(double _arg21, FromBigInt _arg22)
		{
			return $Numeric.FromBigInt@29-17.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, sbyte> FromBigInt(sbyte _arg23, FromBigInt _arg24)
		{
			return $Numeric.FromBigInt@30-18.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, short> FromBigInt(short _arg25, FromBigInt _arg26)
		{
			return $Numeric.FromBigInt@31-19.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, byte> FromBigInt(byte _arg27, FromBigInt _arg28)
		{
			return $Numeric.FromBigInt@32-20.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, ushort> FromBigInt(ushort _arg29, FromBigInt _arg30)
		{
			return $Numeric.FromBigInt@33-21.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, uint> FromBigInt(uint _arg31, FromBigInt _arg32)
		{
			return $Numeric.FromBigInt@34-22.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, ulong> FromBigInt(ulong _arg33, FromBigInt _arg34)
		{
			return $Numeric.FromBigInt@35-23.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, float> FromBigInt(float _arg35, FromBigInt _arg36)
		{
			return $Numeric.FromBigInt@36-24.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, decimal> FromBigInt(decimal _arg37, FromBigInt _arg38)
		{
			return $Numeric.FromBigInt@37-25.@_instance;
		}

		public static Num Invoke<Num>(System.Numerics.BigInteger x)
		{
			FromBigInt item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.FromBigInt, Num>, System.Numerics.BigInteger>.InvokeFast<Num>((FSharpFunc<Tuple<FromBigInt, Num>, FSharpFunc<System.Numerics.BigInteger, Num>>)$Numeric.Invoke@42-8<Num>.@_instance, new Tuple<FromBigInt, Num>(item, default(Num)), x);
		}

		public static Num Invoke$W<Num>(FSharpFunc<Num, FSharpFunc<FromBigInt, FSharpFunc<System.Numerics.BigInteger, Num>>> fromBigInt, System.Numerics.BigInteger x)
		{
			FromBigInt item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.FromBigInt, Num>, System.Numerics.BigInteger>.InvokeFast<Num>((FSharpFunc<Tuple<FromBigInt, Num>, FSharpFunc<System.Numerics.BigInteger, Num>>)new $Numeric.Invoke@42-9<Num>(fromBigInt), new Tuple<FromBigInt, Num>(item, default(Num)), x);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class FromInt64 : Default1
	{
		public static FSharpFunc<long, R> FromInt64<R>(R _arg1, Default4 _arg2)
		{
			return $Numeric.FromInt64@49<R>.@_instance;
		}

		public static FSharpFunc<long, R> FromInt64$W<R>(FSharpFunc<R, FSharpFunc<Explicit, FSharpFunc<long, R>>> @explicit, R _arg1, Default4 _arg2)
		{
			return new $Numeric.FromInt64@49-2<R>(@explicit);
		}

		public static FSharpFunc<long, R> FromInt64<R>(R _arg3, Default3 _arg4)
		{
			return $Numeric.FromInt64@51-4<R>.@_instance;
		}

		public static FSharpFunc<long, R> FromInt64$W<R>(FSharpFunc<R, FSharpFunc<FromBigInt, FSharpFunc<System.Numerics.BigInteger, R>>> fromBigInt, R _arg3, Default3 _arg4)
		{
			return new $Numeric.FromInt64@51-6<R>(fromBigInt);
		}

		public static FSharpFunc<long, R> FromInt64<R>(R _arg5, Default2 _arg6)
		{
			return $Numeric.FromInt64@53-8<R>.@_instance;
		}

		public static FSharpFunc<long, R> FromInt64$W<R>(FSharpFunc<long, R> op_Implicit, R _arg5, Default2 _arg6)
		{
			return new $Numeric.FromInt64@53-9<R>(op_Implicit);
		}

		public static FSharpFunc<long, R> FromInt64<R>(R _arg7, Default1 _arg8)
		{
			return $Numeric.FromInt64@54-10<R>.@_instance;
		}

		public static FSharpFunc<long, R> FromInt64$W<R>(FSharpFunc<long, R> fromInt64, R _arg7, Default1 _arg8)
		{
			return new $Numeric.FromInt64@54-11<R>(fromInt64);
		}

		public static FSharpFunc<long, R> FromInt64<R>(Default1 _arg9, Default1 _arg10)
		{
			return $Numeric.FromInt64@55-12<R>.@_instance;
		}

		public static FSharpFunc<long, R> FromInt64$W<R>(FSharpFunc<long, R> fromInt64, Default1 _arg9, Default1 _arg10)
		{
			return new $Numeric.FromInt64@55-13<R>(fromInt64);
		}

		public static FSharpFunc<long, int> FromInt64(int _arg11, FromInt64 _arg12)
		{
			return $Numeric.FromInt64@56-14.@_instance;
		}

		public static FSharpFunc<long, long> FromInt64(long _arg13, FromInt64 _arg14)
		{
			return $Numeric.FromInt64@57-15.@_instance;
		}

		public static FSharpFunc<long, IntPtr> FromInt64(IntPtr _arg15, FromInt64 _arg16)
		{
			return $Numeric.FromInt64@59-16.@_instance;
		}

		public static FSharpFunc<long, UIntPtr> FromInt64(UIntPtr _arg17, FromInt64 _arg18)
		{
			return $Numeric.FromInt64@60-17.@_instance;
		}

		public static FSharpFunc<long, System.Numerics.BigInteger> FromInt64(System.Numerics.BigInteger _arg19, FromInt64 _arg20)
		{
			return $Numeric.FromInt64@61-18.@_instance;
		}

		public static FSharpFunc<long, double> FromInt64(double _arg21, FromInt64 _arg22)
		{
			return $Numeric.FromInt64@63-19.@_instance;
		}

		public static FSharpFunc<long, float> FromInt64(float _arg23, FromInt64 _arg24)
		{
			return $Numeric.FromInt64@64-20.@_instance;
		}

		public static FSharpFunc<long, decimal> FromInt64(decimal _arg25, FromInt64 _arg26)
		{
			return $Numeric.FromInt64@65-21.@_instance;
		}

		public static FSharpFunc<long, sbyte> FromInt64(sbyte _arg27, FromInt64 _arg28)
		{
			return $Numeric.FromInt64@66-22.@_instance;
		}

		public static FSharpFunc<long, short> FromInt64(short _arg29, FromInt64 _arg30)
		{
			return $Numeric.FromInt64@67-23.@_instance;
		}

		public static FSharpFunc<long, byte> FromInt64(byte _arg31, FromInt64 _arg32)
		{
			return $Numeric.FromInt64@68-24.@_instance;
		}

		public static FSharpFunc<long, ushort> FromInt64(ushort _arg33, FromInt64 _arg34)
		{
			return $Numeric.FromInt64@69-25.@_instance;
		}

		public static FSharpFunc<long, uint> FromInt64(uint _arg35, FromInt64 _arg36)
		{
			return $Numeric.FromInt64@70-26.@_instance;
		}

		public static FSharpFunc<long, ulong> FromInt64(ulong _arg37, FromInt64 _arg38)
		{
			return $Numeric.FromInt64@71-27.@_instance;
		}

		public static Num Invoke<Num>(long x)
		{
			FromInt64 item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.FromInt64, Num>, long>.InvokeFast<Num>((FSharpFunc<Tuple<FromInt64, Num>, FSharpFunc<long, Num>>)$Numeric.Invoke@76-10<Num>.@_instance, new Tuple<FromInt64, Num>(item, default(Num)), x);
		}

		public static Num Invoke$W<Num>(FSharpFunc<Num, FSharpFunc<FromInt64, FSharpFunc<long, Num>>> fromInt64, long x)
		{
			FromInt64 item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.FromInt64, Num>, long>.InvokeFast<Num>((FSharpFunc<Tuple<FromInt64, Num>, FSharpFunc<long, Num>>)new $Numeric.Invoke@76-11<Num>(fromInt64), new Tuple<FromInt64, Num>(item, default(Num)), x);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class FromInt32 : Default1
	{
		public static FSharpFunc<int, R> FromInt32<R>(R _arg1, Default4 _arg2)
		{
			return $Numeric.FromInt32@81<R>.@_instance;
		}

		public static FSharpFunc<int, R> FromInt32$W<R>(FSharpFunc<R, FSharpFunc<Explicit, FSharpFunc<int, R>>> @explicit, R _arg1, Default4 _arg2)
		{
			return new $Numeric.FromInt32@81-2<R>(@explicit);
		}

		public static FSharpFunc<int, R> FromInt32<R>(R _arg3, Default3 _arg4)
		{
			return $Numeric.FromInt32@82-4<R>.@_instance;
		}

		public static FSharpFunc<int, R> FromInt32$W<R>(FSharpFunc<R, FSharpFunc<FromInt64, FSharpFunc<long, R>>> fromInt64, R _arg3, Default3 _arg4)
		{
			return new $Numeric.FromInt32@82-6<R>(fromInt64);
		}

		public static FSharpFunc<int, R> FromInt32<R>(R _arg5, Default2 _arg6)
		{
			return $Numeric.FromInt32@83-8<R>.@_instance;
		}

		public static FSharpFunc<int, R> FromInt32$W<R>(FSharpFunc<int, R> op_Implicit, R _arg5, Default2 _arg6)
		{
			return new $Numeric.FromInt32@83-9<R>(op_Implicit);
		}

		public static FSharpFunc<int, R> FromInt32<R>(R _arg7, Default1 _arg8)
		{
			return $Numeric.FromInt32@84-10<R>.@_instance;
		}

		public static FSharpFunc<int, R> FromInt32$W<R>(FSharpFunc<int, R> fromInt32, R _arg7, Default1 _arg8)
		{
			return new $Numeric.FromInt32@84-11<R>(fromInt32);
		}

		public static FSharpFunc<int, R> FromInt32<R>(Default1 _arg9, Default1 _arg10)
		{
			return $Numeric.FromInt32@85-12<R>.@_instance;
		}

		public static FSharpFunc<int, R> FromInt32$W<R>(FSharpFunc<int, R> fromInt32, Default1 _arg9, Default1 _arg10)
		{
			return new $Numeric.FromInt32@85-13<R>(fromInt32);
		}

		public static FSharpFunc<int, int> FromInt32(int _arg11, FromInt32 _arg12)
		{
			return $Numeric.FromInt32@86-14.@_instance;
		}

		public static FSharpFunc<int, long> FromInt32(long _arg13, FromInt32 _arg14)
		{
			return $Numeric.FromInt32@87-15.@_instance;
		}

		public static FSharpFunc<int, IntPtr> FromInt32(IntPtr _arg15, FromInt32 _arg16)
		{
			return $Numeric.FromInt32@89-16.@_instance;
		}

		public static FSharpFunc<int, UIntPtr> FromInt32(UIntPtr _arg17, FromInt32 _arg18)
		{
			return $Numeric.FromInt32@90-17.@_instance;
		}

		public static FSharpFunc<int, System.Numerics.BigInteger> FromInt32(System.Numerics.BigInteger _arg19, FromInt32 _arg20)
		{
			return $Numeric.FromInt32@91-18.@_instance;
		}

		public static FSharpFunc<int, double> FromInt32(double _arg21, FromInt32 _arg22)
		{
			return $Numeric.FromInt32@93-19.@_instance;
		}

		public static FSharpFunc<int, sbyte> FromInt32(sbyte _arg23, FromInt32 _arg24)
		{
			return $Numeric.FromInt32@94-20.@_instance;
		}

		public static FSharpFunc<int, short> FromInt32(short _arg25, FromInt32 _arg26)
		{
			return $Numeric.FromInt32@95-21.@_instance;
		}

		public static FSharpFunc<int, byte> FromInt32(byte _arg27, FromInt32 _arg28)
		{
			return $Numeric.FromInt32@96-22.@_instance;
		}

		public static FSharpFunc<int, ushort> FromInt32(ushort _arg29, FromInt32 _arg30)
		{
			return $Numeric.FromInt32@97-23.@_instance;
		}

		public static FSharpFunc<int, uint> FromInt32(uint _arg31, FromInt32 _arg32)
		{
			return $Numeric.FromInt32@98-24.@_instance;
		}

		public static FSharpFunc<int, ulong> FromInt32(ulong _arg33, FromInt32 _arg34)
		{
			return $Numeric.FromInt32@99-25.@_instance;
		}

		public static FSharpFunc<int, float> FromInt32(float _arg35, FromInt32 _arg36)
		{
			return $Numeric.FromInt32@100-26.@_instance;
		}

		public static FSharpFunc<int, decimal> FromInt32(decimal _arg37, FromInt32 _arg38)
		{
			return $Numeric.FromInt32@101-27.@_instance;
		}

		public static Num Invoke<Num>(int x)
		{
			FromInt32 item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.FromInt32, Num>, int>.InvokeFast<Num>((FSharpFunc<Tuple<FromInt32, Num>, FSharpFunc<int, Num>>)$Numeric.Invoke@106-12<Num>.@_instance, new Tuple<FromInt32, Num>(item, default(Num)), x);
		}

		public static Num Invoke$W<Num>(FSharpFunc<Num, FSharpFunc<FromInt32, FSharpFunc<int, Num>>> fromInt32, int x)
		{
			FromInt32 item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.FromInt32, Num>, int>.InvokeFast<Num>((FSharpFunc<Tuple<FromInt32, Num>, FSharpFunc<int, Num>>)new $Numeric.Invoke@106-13<Num>(fromInt32), new Tuple<FromInt32, Num>(item, default(Num)), x);
		}

		public static Num InvokeOnInstance<Num>(int x)
		{
			throw new NotSupportedException("Dynamic invocation of FromInt32 is not supported");
		}

		public static Num InvokeOnInstance$W<Num>(FSharpFunc<int, Num> fromInt32, int x)
		{
			return fromInt32.Invoke(x);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class One : Default1
	{
		public static t One<t>(t _arg1, Default1 _arg2)
		{
			FromInt32 item = null;
			return FSharpFunc<Tuple<FromInt32, t>, int>.InvokeFast<t>((FSharpFunc<Tuple<FromInt32, t>, FSharpFunc<int, t>>)$Numeric.One@115<t>.@_instance, new Tuple<FromInt32, t>(item, default(t)), 1);
		}

		public static t One$W<t>(FSharpFunc<t, FSharpFunc<FromInt32, FSharpFunc<int, t>>> fromInt32, t _arg1, Default1 _arg2)
		{
			FromInt32 item = null;
			return FSharpFunc<Tuple<FromInt32, t>, int>.InvokeFast<t>((FSharpFunc<Tuple<FromInt32, t>, FSharpFunc<int, t>>)new $Numeric.One@115-1<t>(fromInt32), new Tuple<FromInt32, t>(item, default(t)), 1);
		}

		public static t One<t>(t _arg3, One _arg4)
		{
			return LanguagePrimitives.GenericOneDynamic<t>();
		}

		public static t One$W<t>(FSharpFunc<Unit, t> get_One, t _arg3, One _arg4)
		{
			return get_One.Invoke((Unit)null);
		}

		public static FSharpFunc<a, a> One<t, a>(t _arg5, One _arg6) where t : class
		{
			return $Numeric.One@117-2<a>.@_instance;
		}

		public static Num Invoke<Num>()
		{
			One one = null;
			throw new NotSupportedException("Dynamic invocation of One is not supported");
		}

		public static Num Invoke$W<Num>(FSharpFunc<Num, FSharpFunc<One, Num>> one)
		{
			One one2 = null;
			return FSharpFunc<Num, FSharpPlus.Control.One>.InvokeFast<Num>(one, default(Num), one2);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Zero : Default1
	{
		public static TimeSpan Zero(TimeSpan _arg1, Zero _arg2)
		{
			return default(TimeSpan);
		}

		public static DmStruct Zero(DmStruct _arg3, Zero _arg4)
		{
			return default(DmStruct);
		}

		public static FSharpList<a> Zero<a>(FSharpList<a> _arg5, Zero _arg6)
		{
			return FSharpList<a>.Empty;
		}

		public static FSharpOption<a> Zero<a>(FSharpOption<a> _arg7, Zero _arg8)
		{
			return null;
		}

		public static FSharpValueOption<a> Zero<a>(FSharpValueOption<a> _arg9, Zero _arg10)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			return FSharpValueOption<a>.ValueNone;
		}

		public static a[] Zero<a>(a[] _arg11, Zero _arg12)
		{
			return System.Array.Empty<a>();
		}

		public static string Zero(string _arg13, Zero _arg14)
		{
			return "";
		}

		public static StringBuilder Zero(StringBuilder _arg15, Zero _arg16)
		{
			return new StringBuilder();
		}

		public static void Zero(Unit _arg17, Zero _arg18)
		{
		}

		public static bool Zero(bool _arg19, Zero _arg20)
		{
			return false;
		}

		public static FSharpSet<a> Zero<a>(FSharpSet<a> _arg21, Zero _arg22)
		{
			return SetModule.Empty<a>();
		}

		public static FSharpMap<a, b> Zero<a, b>(FSharpMap<a, b> _arg23, Zero _arg24)
		{
			return MapModule.Empty<a, b>();
		}

		public static a Invoke<a>()
		{
			Zero zero = null;
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static a Invoke$W<a>(FSharpFunc<a, FSharpFunc<Zero, a>> zero)
		{
			Zero zero2 = null;
			return FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero2);
		}

		public static t Zero<t, t1, t2, t3, t4, t5, t6, t7, tr>(t t, Zero _arg1)
		{
			Zero zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			tr rest = (tr)(object)null;
			zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			t7 item = (t7)(object)null;
			zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			t6 item2 = (t6)(object)null;
			zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			t5 item3 = (t5)(object)null;
			zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			t4 item4 = (t4)(object)null;
			zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			t3 item5 = (t3)(object)null;
			zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			t2 item6 = (t2)(object)null;
			zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			t1 item7 = (t1)(object)null;
			return (t)new Tuple<t1, t2, t3, t4, t5, t6, t7, tr>(item7, item6, item5, item4, item3, item2, item, rest);
		}

		public static t Zero$W<t, t1, t2, t3, t4, t5, t6, t7, tr>(FSharpFunc<t1, FSharpFunc<Zero, t1>> zero, FSharpFunc<t2, FSharpFunc<Zero, t2>> zero1, FSharpFunc<t3, FSharpFunc<Zero, t3>> zero2, FSharpFunc<t4, FSharpFunc<Zero, t4>> zero3, FSharpFunc<t5, FSharpFunc<Zero, t5>> zero4, FSharpFunc<t6, FSharpFunc<Zero, t6>> zero5, FSharpFunc<t7, FSharpFunc<Zero, t7>> zero6, FSharpFunc<tr, FSharpFunc<Zero, tr>> zero7, FSharpFunc<t, t1> get_Item1, FSharpFunc<t, t2> get_Item2, FSharpFunc<t, t3> get_Item3, FSharpFunc<t, t4> get_Item4, FSharpFunc<t, t5> get_Item5, FSharpFunc<t, t6> get_Item6, FSharpFunc<t, t7> get_Item7, FSharpFunc<t, tr> get_Rest, t t, Zero _arg1)
		{
			Zero zero8 = null;
			tr rest = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<tr>((FSharpFunc<?, FSharpFunc<Zero, tr>>)(object)zero7, default(tr), zero8);
			zero8 = null;
			t7 item = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<t7>((FSharpFunc<?, FSharpFunc<Zero, t7>>)(object)zero6, default(t7), zero8);
			zero8 = null;
			t6 item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<t6>((FSharpFunc<?, FSharpFunc<Zero, t6>>)(object)zero5, default(t6), zero8);
			zero8 = null;
			t5 item3 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<t5>((FSharpFunc<?, FSharpFunc<Zero, t5>>)(object)zero4, default(t5), zero8);
			zero8 = null;
			t4 item4 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<t4>((FSharpFunc<?, FSharpFunc<Zero, t4>>)(object)zero3, default(t4), zero8);
			zero8 = null;
			t3 item5 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<t3>((FSharpFunc<?, FSharpFunc<Zero, t3>>)(object)zero2, default(t3), zero8);
			zero8 = null;
			t2 item6 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<t2>((FSharpFunc<?, FSharpFunc<Zero, t2>>)(object)zero1, default(t2), zero8);
			zero8 = null;
			t1 item7 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<t1>((FSharpFunc<?, FSharpFunc<Zero, t1>>)(object)zero, default(t1), zero8);
			return (t)new Tuple<t1, t2, t3, t4, t5, t6, t7, tr>(item7, item6, item5, item4, item3, item2, item, rest);
		}

		public static Tuple<a> Zero<a>(Tuple<a> _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			return new Tuple<a>((a)(object)null);
		}

		public static Tuple<a> Zero$W<a>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, Tuple<a> _arg1, Zero _arg2)
		{
			Zero zero2 = null;
			return new Tuple<a>(FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero2));
		}

		public static Id<a> Zero<a, a>(Id<a> _arg3, Zero _arg4)
		{
			Zero zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			return new Id<a>((a)(object)null);
		}

		public static Id<a> Zero$W<a, a>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, Id<a> _arg3, Zero _arg4)
		{
			Zero zero2 = null;
			return new Id<a>(FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<a>((FSharpFunc<?, FSharpFunc<Zero, a>>)(object)zero, default(a), zero2));
		}

		public static ValueTuple<a> Zero<a>(ValueTuple<a> _arg5, Zero _arg6)
		{
			Zero zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			return new ValueTuple<a>((a)(object)null);
		}

		public static ValueTuple<a> Zero$W<a>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, ValueTuple<a> _arg5, Zero _arg6)
		{
			Zero zero2 = null;
			return new ValueTuple<a>(FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero2));
		}

		public static Tuple<a, b> Zero<a, b>(Tuple<a, b> _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (0 == 0)
				{
					throw new NotSupportedException("Dynamic invocation of Zero is not supported");
				}
				return new Tuple<a, b>(item, (b)(object)null);
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static Tuple<a, b> Zero$W<a, b>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, Tuple<a, b> _arg1, Zero _arg2)
		{
			Zero zero2 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero2);
			zero2 = null;
			return new Tuple<a, b>(item, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero2));
		}

		public static Tuple<a, b, c> Zero<a, b, c>(Tuple<a, b, c> _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (false)
				{
					b item2 = (b)(object)null;
					zero = null;
					if (0 == 0)
					{
						throw new NotSupportedException("Dynamic invocation of Zero is not supported");
					}
					return new Tuple<a, b, c>(item, item2, (c)(object)null);
				}
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static Tuple<a, b, c> Zero$W<a, b, c>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, FSharpFunc<c, FSharpFunc<Zero, c>> zero2, Tuple<a, b, c> _arg1, Zero _arg2)
		{
			Zero zero3 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero3);
			zero3 = null;
			b item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero3);
			zero3 = null;
			return new Tuple<a, b, c>(item, item2, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<c>((FSharpFunc<?, FSharpFunc<Zero, c>>)(object)zero2, default(c), zero3));
		}

		public static Tuple<a, b, c, d> Zero<a, b, c, d>(Tuple<a, b, c, d> _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (false)
				{
					b item2 = (b)(object)null;
					zero = null;
					if (false)
					{
						c item3 = (c)(object)null;
						zero = null;
						if (0 == 0)
						{
							throw new NotSupportedException("Dynamic invocation of Zero is not supported");
						}
						return new Tuple<a, b, c, d>(item, item2, item3, (d)(object)null);
					}
					throw new NotSupportedException("Dynamic invocation of Zero is not supported");
				}
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static Tuple<a, b, c, d> Zero$W<a, b, c, d>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, FSharpFunc<c, FSharpFunc<Zero, c>> zero2, FSharpFunc<d, FSharpFunc<Zero, d>> zero3, Tuple<a, b, c, d> _arg1, Zero _arg2)
		{
			Zero zero4 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero4);
			zero4 = null;
			b item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero4);
			zero4 = null;
			c item3 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<c>((FSharpFunc<?, FSharpFunc<Zero, c>>)(object)zero2, default(c), zero4);
			zero4 = null;
			return new Tuple<a, b, c, d>(item, item2, item3, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<d>((FSharpFunc<?, FSharpFunc<Zero, d>>)(object)zero3, default(d), zero4));
		}

		public static Tuple<a, b, c, d, e> Zero<a, b, c, d, e>(Tuple<a, b, c, d, e> _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (false)
				{
					b item2 = (b)(object)null;
					zero = null;
					if (false)
					{
						c item3 = (c)(object)null;
						zero = null;
						if (false)
						{
							d item4 = (d)(object)null;
							zero = null;
							if (0 == 0)
							{
								throw new NotSupportedException("Dynamic invocation of Zero is not supported");
							}
							return new Tuple<a, b, c, d, e>(item, item2, item3, item4, (e)(object)null);
						}
						throw new NotSupportedException("Dynamic invocation of Zero is not supported");
					}
					throw new NotSupportedException("Dynamic invocation of Zero is not supported");
				}
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static Tuple<a, b, c, d, e> Zero$W<a, b, c, d, e>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, FSharpFunc<c, FSharpFunc<Zero, c>> zero2, FSharpFunc<d, FSharpFunc<Zero, d>> zero3, FSharpFunc<e, FSharpFunc<Zero, e>> zero4, Tuple<a, b, c, d, e> _arg1, Zero _arg2)
		{
			Zero zero5 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero5);
			zero5 = null;
			b item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero5);
			zero5 = null;
			c item3 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<c>((FSharpFunc<?, FSharpFunc<Zero, c>>)(object)zero2, default(c), zero5);
			zero5 = null;
			d item4 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<d>((FSharpFunc<?, FSharpFunc<Zero, d>>)(object)zero3, default(d), zero5);
			zero5 = null;
			return new Tuple<a, b, c, d, e>(item, item2, item3, item4, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<e>((FSharpFunc<?, FSharpFunc<Zero, e>>)(object)zero4, default(e), zero5));
		}

		public static Tuple<a, b, c, d, e, f> Zero<a, b, c, d, e, f>(Tuple<a, b, c, d, e, f> _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (false)
				{
					b item2 = (b)(object)null;
					zero = null;
					if (false)
					{
						c item3 = (c)(object)null;
						zero = null;
						if (false)
						{
							d item4 = (d)(object)null;
							zero = null;
							if (false)
							{
								e item5 = (e)(object)null;
								zero = null;
								if (0 == 0)
								{
									throw new NotSupportedException("Dynamic invocation of Zero is not supported");
								}
								return new Tuple<a, b, c, d, e, f>(item, item2, item3, item4, item5, (f)(object)null);
							}
							throw new NotSupportedException("Dynamic invocation of Zero is not supported");
						}
						throw new NotSupportedException("Dynamic invocation of Zero is not supported");
					}
					throw new NotSupportedException("Dynamic invocation of Zero is not supported");
				}
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static Tuple<a, b, c, d, e, f> Zero$W<a, b, c, d, e, f>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, FSharpFunc<c, FSharpFunc<Zero, c>> zero2, FSharpFunc<d, FSharpFunc<Zero, d>> zero3, FSharpFunc<e, FSharpFunc<Zero, e>> zero4, FSharpFunc<f, FSharpFunc<Zero, f>> zero5, Tuple<a, b, c, d, e, f> _arg1, Zero _arg2)
		{
			Zero zero6 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero6);
			zero6 = null;
			b item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero6);
			zero6 = null;
			c item3 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<c>((FSharpFunc<?, FSharpFunc<Zero, c>>)(object)zero2, default(c), zero6);
			zero6 = null;
			d item4 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<d>((FSharpFunc<?, FSharpFunc<Zero, d>>)(object)zero3, default(d), zero6);
			zero6 = null;
			e item5 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<e>((FSharpFunc<?, FSharpFunc<Zero, e>>)(object)zero4, default(e), zero6);
			zero6 = null;
			return new Tuple<a, b, c, d, e, f>(item, item2, item3, item4, item5, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<f>((FSharpFunc<?, FSharpFunc<Zero, f>>)(object)zero5, default(f), zero6));
		}

		public static Tuple<a, b, c, d, e, f, g> Zero<a, b, c, d, e, f, g>(Tuple<a, b, c, d, e, f, g> _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (false)
				{
					b item2 = (b)(object)null;
					zero = null;
					if (false)
					{
						c item3 = (c)(object)null;
						zero = null;
						if (false)
						{
							d item4 = (d)(object)null;
							zero = null;
							if (false)
							{
								e item5 = (e)(object)null;
								zero = null;
								if (false)
								{
									f item6 = (f)(object)null;
									zero = null;
									if (0 == 0)
									{
										throw new NotSupportedException("Dynamic invocation of Zero is not supported");
									}
									return new Tuple<a, b, c, d, e, f, g>(item, item2, item3, item4, item5, item6, (g)(object)null);
								}
								throw new NotSupportedException("Dynamic invocation of Zero is not supported");
							}
							throw new NotSupportedException("Dynamic invocation of Zero is not supported");
						}
						throw new NotSupportedException("Dynamic invocation of Zero is not supported");
					}
					throw new NotSupportedException("Dynamic invocation of Zero is not supported");
				}
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static Tuple<a, b, c, d, e, f, g> Zero$W<a, b, c, d, e, f, g>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, FSharpFunc<c, FSharpFunc<Zero, c>> zero2, FSharpFunc<d, FSharpFunc<Zero, d>> zero3, FSharpFunc<e, FSharpFunc<Zero, e>> zero4, FSharpFunc<f, FSharpFunc<Zero, f>> zero5, FSharpFunc<g, FSharpFunc<Zero, g>> zero6, Tuple<a, b, c, d, e, f, g> _arg1, Zero _arg2)
		{
			Zero zero7 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero7);
			zero7 = null;
			b item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero7);
			zero7 = null;
			c item3 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<c>((FSharpFunc<?, FSharpFunc<Zero, c>>)(object)zero2, default(c), zero7);
			zero7 = null;
			d item4 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<d>((FSharpFunc<?, FSharpFunc<Zero, d>>)(object)zero3, default(d), zero7);
			zero7 = null;
			e item5 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<e>((FSharpFunc<?, FSharpFunc<Zero, e>>)(object)zero4, default(e), zero7);
			zero7 = null;
			f item6 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<f>((FSharpFunc<?, FSharpFunc<Zero, f>>)(object)zero5, default(f), zero7);
			zero7 = null;
			return new Tuple<a, b, c, d, e, f, g>(item, item2, item3, item4, item5, item6, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<g>((FSharpFunc<?, FSharpFunc<Zero, g>>)(object)zero6, default(g), zero7));
		}

		public static (a, b) Zero<a, b>((a, b) _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (0 == 0)
				{
					throw new NotSupportedException("Dynamic invocation of Zero is not supported");
				}
				return ValueTuple.Create(item, (b)(object)null);
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static (a, b) Zero$W<a, b>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, (a, b) _arg1, Zero _arg2)
		{
			Zero zero2 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero2);
			zero2 = null;
			return ValueTuple.Create(item, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero2));
		}

		public static (a, b, c) Zero<a, b, c>((a, b, c) _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (false)
				{
					b item2 = (b)(object)null;
					zero = null;
					if (0 == 0)
					{
						throw new NotSupportedException("Dynamic invocation of Zero is not supported");
					}
					return ValueTuple.Create(item, item2, (c)(object)null);
				}
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static (a, b, c) Zero$W<a, b, c>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, FSharpFunc<c, FSharpFunc<Zero, c>> zero2, (a, b, c) _arg1, Zero _arg2)
		{
			Zero zero3 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero3);
			zero3 = null;
			b item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero3);
			zero3 = null;
			return ValueTuple.Create(item, item2, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<c>((FSharpFunc<?, FSharpFunc<Zero, c>>)(object)zero2, default(c), zero3));
		}

		public static (a, b, c, d) Zero<a, b, c, d>((a, b, c, d) _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (false)
				{
					b item2 = (b)(object)null;
					zero = null;
					if (false)
					{
						c item3 = (c)(object)null;
						zero = null;
						if (0 == 0)
						{
							throw new NotSupportedException("Dynamic invocation of Zero is not supported");
						}
						return ValueTuple.Create(item, item2, item3, (d)(object)null);
					}
					throw new NotSupportedException("Dynamic invocation of Zero is not supported");
				}
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static (a, b, c, d) Zero$W<a, b, c, d>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, FSharpFunc<c, FSharpFunc<Zero, c>> zero2, FSharpFunc<d, FSharpFunc<Zero, d>> zero3, (a, b, c, d) _arg1, Zero _arg2)
		{
			Zero zero4 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero4);
			zero4 = null;
			b item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero4);
			zero4 = null;
			c item3 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<c>((FSharpFunc<?, FSharpFunc<Zero, c>>)(object)zero2, default(c), zero4);
			zero4 = null;
			return ValueTuple.Create(item, item2, item3, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<d>((FSharpFunc<?, FSharpFunc<Zero, d>>)(object)zero3, default(d), zero4));
		}

		public static (a, b, c, d, e) Zero<a, b, c, d, e>((a, b, c, d, e) _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (false)
				{
					b item2 = (b)(object)null;
					zero = null;
					if (false)
					{
						c item3 = (c)(object)null;
						zero = null;
						if (false)
						{
							d item4 = (d)(object)null;
							zero = null;
							if (0 == 0)
							{
								throw new NotSupportedException("Dynamic invocation of Zero is not supported");
							}
							return ValueTuple.Create(item, item2, item3, item4, (e)(object)null);
						}
						throw new NotSupportedException("Dynamic invocation of Zero is not supported");
					}
					throw new NotSupportedException("Dynamic invocation of Zero is not supported");
				}
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static (a, b, c, d, e) Zero$W<a, b, c, d, e>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, FSharpFunc<c, FSharpFunc<Zero, c>> zero2, FSharpFunc<d, FSharpFunc<Zero, d>> zero3, FSharpFunc<e, FSharpFunc<Zero, e>> zero4, (a, b, c, d, e) _arg1, Zero _arg2)
		{
			Zero zero5 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero5);
			zero5 = null;
			b item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero5);
			zero5 = null;
			c item3 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<c>((FSharpFunc<?, FSharpFunc<Zero, c>>)(object)zero2, default(c), zero5);
			zero5 = null;
			d item4 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<d>((FSharpFunc<?, FSharpFunc<Zero, d>>)(object)zero3, default(d), zero5);
			zero5 = null;
			return ValueTuple.Create(item, item2, item3, item4, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<e>((FSharpFunc<?, FSharpFunc<Zero, e>>)(object)zero4, default(e), zero5));
		}

		public static (a, b, c, d, e, f) Zero<a, b, c, d, e, f>((a, b, c, d, e, f) _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (false)
				{
					b item2 = (b)(object)null;
					zero = null;
					if (false)
					{
						c item3 = (c)(object)null;
						zero = null;
						if (false)
						{
							d item4 = (d)(object)null;
							zero = null;
							if (false)
							{
								e item5 = (e)(object)null;
								zero = null;
								if (0 == 0)
								{
									throw new NotSupportedException("Dynamic invocation of Zero is not supported");
								}
								return ValueTuple.Create(item, item2, item3, item4, item5, (f)(object)null);
							}
							throw new NotSupportedException("Dynamic invocation of Zero is not supported");
						}
						throw new NotSupportedException("Dynamic invocation of Zero is not supported");
					}
					throw new NotSupportedException("Dynamic invocation of Zero is not supported");
				}
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static (a, b, c, d, e, f) Zero$W<a, b, c, d, e, f>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, FSharpFunc<c, FSharpFunc<Zero, c>> zero2, FSharpFunc<d, FSharpFunc<Zero, d>> zero3, FSharpFunc<e, FSharpFunc<Zero, e>> zero4, FSharpFunc<f, FSharpFunc<Zero, f>> zero5, (a, b, c, d, e, f) _arg1, Zero _arg2)
		{
			Zero zero6 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero6);
			zero6 = null;
			b item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero6);
			zero6 = null;
			c item3 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<c>((FSharpFunc<?, FSharpFunc<Zero, c>>)(object)zero2, default(c), zero6);
			zero6 = null;
			d item4 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<d>((FSharpFunc<?, FSharpFunc<Zero, d>>)(object)zero3, default(d), zero6);
			zero6 = null;
			e item5 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<e>((FSharpFunc<?, FSharpFunc<Zero, e>>)(object)zero4, default(e), zero6);
			zero6 = null;
			return ValueTuple.Create(item, item2, item3, item4, item5, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<f>((FSharpFunc<?, FSharpFunc<Zero, f>>)(object)zero5, default(f), zero6));
		}

		public static (a, b, c, d, e, f, g) Zero<a, b, c, d, e, f, g>((a, b, c, d, e, f, g) _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (false)
				{
					b item2 = (b)(object)null;
					zero = null;
					if (false)
					{
						c item3 = (c)(object)null;
						zero = null;
						if (false)
						{
							d item4 = (d)(object)null;
							zero = null;
							if (false)
							{
								e item5 = (e)(object)null;
								zero = null;
								if (false)
								{
									f item6 = (f)(object)null;
									zero = null;
									if (0 == 0)
									{
										throw new NotSupportedException("Dynamic invocation of Zero is not supported");
									}
									return ValueTuple.Create(item, item2, item3, item4, item5, item6, (g)(object)null);
								}
								throw new NotSupportedException("Dynamic invocation of Zero is not supported");
							}
							throw new NotSupportedException("Dynamic invocation of Zero is not supported");
						}
						throw new NotSupportedException("Dynamic invocation of Zero is not supported");
					}
					throw new NotSupportedException("Dynamic invocation of Zero is not supported");
				}
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static (a, b, c, d, e, f, g) Zero$W<a, b, c, d, e, f, g>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, FSharpFunc<c, FSharpFunc<Zero, c>> zero2, FSharpFunc<d, FSharpFunc<Zero, d>> zero3, FSharpFunc<e, FSharpFunc<Zero, e>> zero4, FSharpFunc<f, FSharpFunc<Zero, f>> zero5, FSharpFunc<g, FSharpFunc<Zero, g>> zero6, (a, b, c, d, e, f, g) _arg1, Zero _arg2)
		{
			Zero zero7 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero7);
			zero7 = null;
			b item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero7);
			zero7 = null;
			c item3 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<c>((FSharpFunc<?, FSharpFunc<Zero, c>>)(object)zero2, default(c), zero7);
			zero7 = null;
			d item4 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<d>((FSharpFunc<?, FSharpFunc<Zero, d>>)(object)zero3, default(d), zero7);
			zero7 = null;
			e item5 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<e>((FSharpFunc<?, FSharpFunc<Zero, e>>)(object)zero4, default(e), zero7);
			zero7 = null;
			f item6 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<f>((FSharpFunc<?, FSharpFunc<Zero, f>>)(object)zero5, default(f), zero7);
			zero7 = null;
			return ValueTuple.Create(item, item2, item3, item4, item5, item6, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<g>((FSharpFunc<?, FSharpFunc<Zero, g>>)(object)zero6, default(g), zero7));
		}

		public static Task<a> Zero<a>(Task<a> _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			a result = (a)(object)null;
			TaskCompletionSource<a> taskCompletionSource = new TaskCompletionSource<a>();
			taskCompletionSource.SetResult(result);
			return taskCompletionSource.Task;
		}

		public static Task<a> Zero$W<a>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, Task<a> _arg1, Zero _arg2)
		{
			Zero zero2 = null;
			a result = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero2);
			TaskCompletionSource<a> taskCompletionSource = new TaskCompletionSource<a>();
			taskCompletionSource.SetResult(result);
			return taskCompletionSource.Task;
		}

		public static ValueTask<a> Zero<a>(ValueTask<a> _arg3, Zero _arg4)
		{
			Zero zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			a result = (a)(object)null;
			return new ValueTask<a>(result);
		}

		public static ValueTask<a> Zero$W<a>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, ValueTask<a> _arg3, Zero _arg4)
		{
			Zero zero2 = null;
			a result = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero2);
			return new ValueTask<a>(result);
		}

		public static FSharpFunc<T, Monoid> Zero<T, Monoid>(FSharpFunc<T, Monoid> _arg5, Zero _arg6)
		{
			return $Numeric.Zero@201<T, Monoid>.@_instance;
		}

		public static FSharpFunc<T, Monoid> Zero$W<T, Monoid>(FSharpFunc<Monoid, FSharpFunc<Zero, Monoid>> zero, FSharpFunc<T, Monoid> _arg5, Zero _arg6)
		{
			return new $Numeric.Zero@201-1<T, Monoid>(zero);
		}

		public static FSharpAsync<a> Zero<a>(FSharpAsync<a> _arg7, Zero _arg8)
		{
			Zero zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			a v = (a)(object)null;
			return AsyncPrimitives.MakeAsync<a>((FSharpFunc<AsyncActivation<a>, AsyncReturn>)new $Numeric.Zero@202-2<a>(v));
		}

		public static FSharpAsync<a> Zero$W<a>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpAsync<a> _arg7, Zero _arg8)
		{
			Zero zero2 = null;
			a v = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero2);
			return AsyncPrimitives.MakeAsync<a>((FSharpFunc<AsyncActivation<a>, AsyncReturn>)new $Numeric.Zero@202-3<a>(zero, v));
		}

		public static FSharpExpr<a> Zero<a>(FSharpExpr<a> _arg9, Zero _arg10)
		{
			Zero zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			a val = (a)(object)null;
			return FSharpExpr.Cast<a>(FSharpExpr.Value<a>(val));
		}

		public static FSharpExpr<a> Zero$W<a>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpExpr<a> _arg9, Zero _arg10)
		{
			Zero zero2 = null;
			a val = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero2);
			return FSharpExpr.Cast<a>(FSharpExpr.Value<a>(val));
		}

		public static Lazy<a> Zero<a>(Lazy<a> _arg11, Zero _arg12)
		{
			Zero zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			a v = (a)(object)null;
			return LazyExtensions.Create<a>((FSharpFunc<Unit, a>)new $Numeric.Zero@206-4<a>(v));
		}

		public static Lazy<a> Zero$W<a>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, Lazy<a> _arg11, Zero _arg12)
		{
			Zero zero2 = null;
			a v = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero2);
			return LazyExtensions.Create<a>((FSharpFunc<Unit, a>)new $Numeric.Zero@206-5<a>(zero, v));
		}

		public static Dictionary<a, b> Zero<a, b>(Dictionary<a, b> _arg13, Zero _arg14)
		{
			return new Dictionary<a, b>();
		}

		public static List<a> Zero<a>(List<a> _arg15, Zero _arg16)
		{
			return new List<a>();
		}

		public static R Zero<R>(R _arg1, Default6 _arg2)
		{
			FromInt64 item = null;
			return FSharpFunc<Tuple<FromInt64, R>, long>.InvokeFast<R>((FSharpFunc<Tuple<FromInt64, R>, FSharpFunc<long, R>>)$Numeric.Zero@211-6<R>.@_instance, new Tuple<FromInt64, R>(item, default(R)), 0L);
		}

		public static R Zero$W<R>(FSharpFunc<R, FSharpFunc<FromInt64, FSharpFunc<long, R>>> fromInt64, R _arg1, Default6 _arg2)
		{
			FromInt64 item = null;
			return FSharpFunc<Tuple<FromInt64, R>, long>.InvokeFast<R>((FSharpFunc<Tuple<FromInt64, R>, FSharpFunc<long, R>>)new $Numeric.Zero@211-7<R>(fromInt64), new Tuple<FromInt64, R>(item, default(R)), 0L);
		}

		public static R Zero<R>(R _arg3, Default5 _arg4)
		{
			throw new NotSupportedException("Dynamic invocation of op_Implicit is not supported");
		}

		public static R Zero$W<R>(FSharpFunc<int, R> op_Implicit, R _arg3, Default5 _arg4)
		{
			return op_Implicit.Invoke(0);
		}

		public static IEnumerable<a> Zero<a>(IEnumerable<a> _arg5, Default4 _arg6)
		{
			return SeqModule.Empty<a>();
		}

		public static IEnumerator<a> Zero<a>(IEnumerator<a> _arg7, Default4 _arg8)
		{
			return new Enumerator.EmptyEnumerator<a>();
		}

		public static IDictionary<a, b> Zero<a, b>(IDictionary<a, b> _arg9, Default4 _arg10)
		{
			return new Dictionary<a, b>();
		}

		public static IReadOnlyDictionary<a, b> Zero<a, b>(IReadOnlyDictionary<a, b> _arg11, Default4 _arg12)
		{
			return new Dictionary<a, b>();
		}

		public static t Zero<t>(t _arg13, Default3 _arg14)
		{
			throw new NotSupportedException("Dynamic invocation of get_Empty is not supported");
		}

		public static t Zero$W<t>(FSharpFunc<Unit, t> get_Empty, t _arg13, Default3 _arg14)
		{
			return get_Empty.Invoke((Unit)null);
		}

		public static t Zero<t>(t _arg15, Default2 _arg16)
		{
			throw new NotSupportedException("Dynamic invocation of FromInt32 is not supported");
		}

		public static t Zero$W<t>(FSharpFunc<int, t> fromInt32, t _arg15, Default2 _arg16)
		{
			return fromInt32.Invoke(0);
		}

		public static FSharpFunc<a, a> Zero<t, a>(t _arg17, Default2 _arg18) where t : class
		{
			return $Numeric.Zero@222-8<a>.@_instance;
		}

		public static t Zero<t>(t _arg19, Default1 _arg20)
		{
			return LanguagePrimitives.GenericZeroDynamic<t>();
		}

		public static t Zero$W<t>(FSharpFunc<Unit, t> get_Zero, t _arg19, Default1 _arg20)
		{
			return get_Zero.Invoke((Unit)null);
		}

		public static FSharpFunc<a, a> Zero<t, a>(t _arg21, Default1 _arg22) where t : class
		{
			return $Numeric.Zero@225-9<a>.@_instance;
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Abs : Default1
	{
		public static t Abs<t, u>(t x, Default2 _arg1)
		{
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Abs is not supported");
			}
			u val = (u)(object)null;
			Explicit item = null;
			return FSharpFunc<Tuple<Explicit, t>, ?>.InvokeFast<t>((FSharpFunc<Tuple<Explicit, t>, FSharpFunc<?, t>>)(object)$Numeric.Abs@231<t, u>.@_instance, new Tuple<Explicit, t>(item, default(t)), val);
		}

		public static t Abs$W<t,

System.Threading.Channels.dll

Decompiled 2 weeks ago
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.ExceptionServices;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Threading;
using System.Threading.Tasks;
using System.Threading.Tasks.Sources;
using FxResources.System.Threading.Channels;
using Internal;
using Microsoft.CodeAnalysis;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyMetadata("Serviceable", "True")]
[assembly: AssemblyMetadata("PreferInbox", "True")]
[assembly: AssemblyDefaultAlias("System.Threading.Channels")]
[assembly: NeutralResourcesLanguage("en-US")]
[assembly: CLSCompliant(true)]
[assembly: AssemblyMetadata("IsTrimmable", "True")]
[assembly: DefaultDllImportSearchPaths(DllImportSearchPath.System32 | DllImportSearchPath.AssemblyDirectory)]
[assembly: AssemblyCompany("Microsoft Corporation")]
[assembly: AssemblyCopyright("© Microsoft Corporation. All rights reserved.")]
[assembly: AssemblyDescription("Provides types for passing data between producers and consumers.\r\n\r\nCommonly Used Types:\r\nSystem.Threading.Channel\r\nSystem.Threading.Channel<T>")]
[assembly: AssemblyFileVersion("8.0.23.53103")]
[assembly: AssemblyInformationalVersion("8.0.0+5535e31a712343a63f5d7d796cd874e563e5ac14")]
[assembly: AssemblyProduct("Microsoft® .NET")]
[assembly: AssemblyTitle("System.Threading.Channels")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/dotnet/runtime")]
[assembly: AssemblyVersion("8.0.0.0")]
[module: RefSafetyRules(11)]
[module: System.Runtime.CompilerServices.NullablePublicOnly(false)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class NullablePublicOnlyAttribute : Attribute
	{
		public readonly bool IncludesInternals;

		public NullablePublicOnlyAttribute(bool P_0)
		{
			IncludesInternals = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace FxResources.System.Threading.Channels
{
	internal static class SR
	{
	}
}
namespace Internal
{
	internal static class PaddingHelpers
	{
		internal const int CACHE_LINE_SIZE = 128;
	}
	[StructLayout(LayoutKind.Explicit, Size = 124)]
	internal struct PaddingFor32
	{
	}
}
namespace System
{
	[StructLayout(LayoutKind.Sequential, Size = 1)]
	internal readonly struct VoidResult
	{
	}
	internal static class Obsoletions
	{
		internal const string SharedUrlFormat = "https://aka.ms/dotnet-warnings/{0}";

		internal const string SystemTextEncodingUTF7Message = "The UTF-7 encoding is insecure and should not be used. Consider using UTF-8 instead.";

		internal const string SystemTextEncodingUTF7DiagId = "SYSLIB0001";

		internal const string PrincipalPermissionAttributeMessage = "PrincipalPermissionAttribute is not honored by the runtime and must not be used.";

		internal const string PrincipalPermissionAttributeDiagId = "SYSLIB0002";

		internal const string CodeAccessSecurityMessage = "Code Access Security is not supported or honored by the runtime.";

		internal const string CodeAccessSecurityDiagId = "SYSLIB0003";

		internal const string ConstrainedExecutionRegionMessage = "The Constrained Execution Region (CER) feature is not supported.";

		internal const string ConstrainedExecutionRegionDiagId = "SYSLIB0004";

		internal const string GlobalAssemblyCacheMessage = "The Global Assembly Cache is not supported.";

		internal const string GlobalAssemblyCacheDiagId = "SYSLIB0005";

		internal const string ThreadAbortMessage = "Thread.Abort is not supported and throws PlatformNotSupportedException.";

		internal const string ThreadResetAbortMessage = "Thread.ResetAbort is not supported and throws PlatformNotSupportedException.";

		internal const string ThreadAbortDiagId = "SYSLIB0006";

		internal const string DefaultCryptoAlgorithmsMessage = "The default implementation of this cryptography algorithm is not supported.";

		internal const string DefaultCryptoAlgorithmsDiagId = "SYSLIB0007";

		internal const string CreatePdbGeneratorMessage = "The CreatePdbGenerator API is not supported and throws PlatformNotSupportedException.";

		internal const string CreatePdbGeneratorDiagId = "SYSLIB0008";

		internal const string AuthenticationManagerMessage = "The AuthenticationManager Authenticate and PreAuthenticate methods are not supported and throw PlatformNotSupportedException.";

		internal const string AuthenticationManagerDiagId = "SYSLIB0009";

		internal const string RemotingApisMessage = "This Remoting API is not supported and throws PlatformNotSupportedException.";

		internal const string RemotingApisDiagId = "SYSLIB0010";

		internal const string BinaryFormatterMessage = "BinaryFormatter serialization is obsolete and should not be used. See https://aka.ms/binaryformatter for more information.";

		internal const string BinaryFormatterDiagId = "SYSLIB0011";

		internal const string CodeBaseMessage = "Assembly.CodeBase and Assembly.EscapedCodeBase are only included for .NET Framework compatibility. Use Assembly.Location instead.";

		internal const string CodeBaseDiagId = "SYSLIB0012";

		internal const string EscapeUriStringMessage = "Uri.EscapeUriString can corrupt the Uri string in some cases. Consider using Uri.EscapeDataString for query string components instead.";

		internal const string EscapeUriStringDiagId = "SYSLIB0013";

		internal const string WebRequestMessage = "WebRequest, HttpWebRequest, ServicePoint, and WebClient are obsolete. Use HttpClient instead.";

		internal const string WebRequestDiagId = "SYSLIB0014";

		internal const string DisablePrivateReflectionAttributeMessage = "DisablePrivateReflectionAttribute has no effect in .NET 6.0+.";

		internal const string DisablePrivateReflectionAttributeDiagId = "SYSLIB0015";

		internal const string GetContextInfoMessage = "Use the Graphics.GetContextInfo overloads that accept arguments for better performance and fewer allocations.";

		internal const string GetContextInfoDiagId = "SYSLIB0016";

		internal const string StrongNameKeyPairMessage = "Strong name signing is not supported and throws PlatformNotSupportedException.";

		internal const string StrongNameKeyPairDiagId = "SYSLIB0017";

		internal const string ReflectionOnlyLoadingMessage = "ReflectionOnly loading is not supported and throws PlatformNotSupportedException.";

		internal const string ReflectionOnlyLoadingDiagId = "SYSLIB0018";

		internal const string RuntimeEnvironmentMessage = "RuntimeEnvironment members SystemConfigurationFile, GetRuntimeInterfaceAsIntPtr, and GetRuntimeInterfaceAsObject are not supported and throw PlatformNotSupportedException.";

		internal const string RuntimeEnvironmentDiagId = "SYSLIB0019";

		internal const string JsonSerializerOptionsIgnoreNullValuesMessage = "JsonSerializerOptions.IgnoreNullValues is obsolete. To ignore null values when serializing, set DefaultIgnoreCondition to JsonIgnoreCondition.WhenWritingNull.";

		internal const string JsonSerializerOptionsIgnoreNullValuesDiagId = "SYSLIB0020";

		internal const string DerivedCryptographicTypesMessage = "Derived cryptographic types are obsolete. Use the Create method on the base type instead.";

		internal const string DerivedCryptographicTypesDiagId = "SYSLIB0021";

		internal const string RijndaelMessage = "The Rijndael and RijndaelManaged types are obsolete. Use Aes instead.";

		internal const string RijndaelDiagId = "SYSLIB0022";

		internal const string RNGCryptoServiceProviderMessage = "RNGCryptoServiceProvider is obsolete. To generate a random number, use one of the RandomNumberGenerator static methods instead.";

		internal const string RNGCryptoServiceProviderDiagId = "SYSLIB0023";

		internal const string AppDomainCreateUnloadMessage = "Creating and unloading AppDomains is not supported and throws an exception.";

		internal const string AppDomainCreateUnloadDiagId = "SYSLIB0024";

		internal const string SuppressIldasmAttributeMessage = "SuppressIldasmAttribute has no effect in .NET 6.0+.";

		internal const string SuppressIldasmAttributeDiagId = "SYSLIB0025";

		internal const string X509CertificateImmutableMessage = "X509Certificate and X509Certificate2 are immutable. Use the appropriate constructor to create a new certificate.";

		internal const string X509CertificateImmutableDiagId = "SYSLIB0026";

		internal const string PublicKeyPropertyMessage = "PublicKey.Key is obsolete. Use the appropriate method to get the public key, such as GetRSAPublicKey.";

		internal const string PublicKeyPropertyDiagId = "SYSLIB0027";

		internal const string X509CertificatePrivateKeyMessage = "X509Certificate2.PrivateKey is obsolete. Use the appropriate method to get the private key, such as GetRSAPrivateKey, or use the CopyWithPrivateKey method to create a new instance with a private key.";

		internal const string X509CertificatePrivateKeyDiagId = "SYSLIB0028";

		internal const string ProduceLegacyHmacValuesMessage = "ProduceLegacyHmacValues is obsolete. Producing legacy HMAC values is not supported.";

		internal const string ProduceLegacyHmacValuesDiagId = "SYSLIB0029";

		internal const string UseManagedSha1Message = "HMACSHA1 always uses the algorithm implementation provided by the platform. Use a constructor without the useManagedSha1 parameter.";

		internal const string UseManagedSha1DiagId = "SYSLIB0030";

		internal const string CryptoConfigEncodeOIDMessage = "EncodeOID is obsolete. Use the ASN.1 functionality provided in System.Formats.Asn1.";

		internal const string CryptoConfigEncodeOIDDiagId = "SYSLIB0031";

		internal const string CorruptedStateRecoveryMessage = "Recovery from corrupted process state exceptions is not supported; HandleProcessCorruptedStateExceptionsAttribute is ignored.";

		internal const string CorruptedStateRecoveryDiagId = "SYSLIB0032";

		internal const string Rfc2898CryptDeriveKeyMessage = "Rfc2898DeriveBytes.CryptDeriveKey is obsolete and is not supported. Use PasswordDeriveBytes.CryptDeriveKey instead.";

		internal const string Rfc2898CryptDeriveKeyDiagId = "SYSLIB0033";

		internal const string CmsSignerCspParamsCtorMessage = "CmsSigner(CspParameters) is obsolete and is not supported. Use an alternative constructor instead.";

		internal const string CmsSignerCspParamsCtorDiagId = "SYSLIB0034";

		internal const string SignerInfoCounterSigMessage = "ComputeCounterSignature without specifying a CmsSigner is obsolete and is not supported. Use the overload that accepts a CmsSigner.";

		internal const string SignerInfoCounterSigDiagId = "SYSLIB0035";

		internal const string RegexCompileToAssemblyMessage = "Regex.CompileToAssembly is obsolete and not supported. Use the GeneratedRegexAttribute with the regular expression source generator instead.";

		internal const string RegexCompileToAssemblyDiagId = "SYSLIB0036";

		internal const string AssemblyNameMembersMessage = "AssemblyName members HashAlgorithm, ProcessorArchitecture, and VersionCompatibility are obsolete and not supported.";

		internal const string AssemblyNameMembersDiagId = "SYSLIB0037";

		internal const string SystemDataSerializationFormatBinaryMessage = "SerializationFormat.Binary is obsolete and should not be used. See https://aka.ms/serializationformat-binary-obsolete for more information.";

		internal const string SystemDataSerializationFormatBinaryDiagId = "SYSLIB0038";

		internal const string TlsVersion10and11Message = "TLS versions 1.0 and 1.1 have known vulnerabilities and are not recommended. Use a newer TLS version instead, or use SslProtocols.None to defer to OS defaults.";

		internal const string TlsVersion10and11DiagId = "SYSLIB0039";

		internal const string EncryptionPolicyMessage = "EncryptionPolicy.NoEncryption and AllowEncryption significantly reduce security and should not be used in production code.";

		internal const string EncryptionPolicyDiagId = "SYSLIB0040";

		internal const string Rfc2898OutdatedCtorMessage = "The default hash algorithm and iteration counts in Rfc2898DeriveBytes constructors are outdated and insecure. Use a constructor that accepts the hash algorithm and the number of iterations.";

		internal const string Rfc2898OutdatedCtorDiagId = "SYSLIB0041";

		internal const string EccXmlExportImportMessage = "ToXmlString and FromXmlString have no implementation for ECC types, and are obsolete. Use a standard import and export format such as ExportSubjectPublicKeyInfo or ImportSubjectPublicKeyInfo for public keys and ExportPkcs8PrivateKey or ImportPkcs8PrivateKey for private keys.";

		internal const string EccXmlExportImportDiagId = "SYSLIB0042";

		internal const string EcDhPublicKeyBlobMessage = "ECDiffieHellmanPublicKey.ToByteArray() and the associated constructor do not have a consistent and interoperable implementation on all platforms. Use ECDiffieHellmanPublicKey.ExportSubjectPublicKeyInfo() instead.";

		internal const string EcDhPublicKeyBlobDiagId = "SYSLIB0043";

		internal const string AssemblyNameCodeBaseMessage = "AssemblyName.CodeBase and AssemblyName.EscapedCodeBase are obsolete. Using them for loading an assembly is not supported.";

		internal const string AssemblyNameCodeBaseDiagId = "SYSLIB0044";

		internal const string CryptoStringFactoryMessage = "Cryptographic factory methods accepting an algorithm name are obsolete. Use the parameterless Create factory method on the algorithm type instead.";

		internal const string CryptoStringFactoryDiagId = "SYSLIB0045";

		internal const string ControlledExecutionRunMessage = "ControlledExecution.Run method may corrupt the process and should not be used in production code.";

		internal const string ControlledExecutionRunDiagId = "SYSLIB0046";

		internal const string XmlSecureResolverMessage = "XmlSecureResolver is obsolete. Use XmlResolver.ThrowingResolver instead when attempting to forbid XML external entity resolution.";

		internal const string XmlSecureResolverDiagId = "SYSLIB0047";

		internal const string RsaEncryptDecryptValueMessage = "RSA.EncryptValue and DecryptValue are not supported and throw NotSupportedException. Use RSA.Encrypt and RSA.Decrypt instead.";

		internal const string RsaEncryptDecryptDiagId = "SYSLIB0048";

		internal const string JsonSerializerOptionsAddContextMessage = "JsonSerializerOptions.AddContext is obsolete. To register a JsonSerializerContext, use either the TypeInfoResolver or TypeInfoResolverChain properties.";

		internal const string JsonSerializerOptionsAddContextDiagId = "SYSLIB0049";

		internal const string LegacyFormatterMessage = "Formatter-based serialization is obsolete and should not be used.";

		internal const string LegacyFormatterDiagId = "SYSLIB0050";

		internal const string LegacyFormatterImplMessage = "This API supports obsolete formatter-based serialization. It should not be called or extended by application code.";

		internal const string LegacyFormatterImplDiagId = "SYSLIB0051";

		internal const string RegexExtensibilityImplMessage = "This API supports obsolete mechanisms for Regex extensibility. It is not supported.";

		internal const string RegexExtensibilityDiagId = "SYSLIB0052";

		internal const string AesGcmTagConstructorMessage = "AesGcm should indicate the required tag size for encryption and decryption. Use a constructor that accepts the tag size.";

		internal const string AesGcmTagConstructorDiagId = "SYSLIB0053";
	}
	internal static class SR
	{
		private static readonly bool s_usingResourceKeys = AppContext.TryGetSwitch("System.Resources.UseSystemResourceKeys", out var isEnabled) && isEnabled;

		private static ResourceManager s_resourceManager;

		internal static ResourceManager ResourceManager => s_resourceManager ?? (s_resourceManager = new ResourceManager(typeof(SR)));

		internal static string ChannelClosedException_DefaultMessage => GetResourceString("ChannelClosedException_DefaultMessage");

		internal static string InvalidOperation_IncompleteAsyncOperation => GetResourceString("InvalidOperation_IncompleteAsyncOperation");

		internal static string InvalidOperation_MultipleContinuations => GetResourceString("InvalidOperation_MultipleContinuations");

		internal static string InvalidOperation_IncorrectToken => GetResourceString("InvalidOperation_IncorrectToken");

		internal static bool UsingResourceKeys()
		{
			return s_usingResourceKeys;
		}

		private static string GetResourceString(string resourceKey)
		{
			if (UsingResourceKeys())
			{
				return resourceKey;
			}
			string result = null;
			try
			{
				result = ResourceManager.GetString(resourceKey);
			}
			catch (MissingManifestResourceException)
			{
			}
			return result;
		}

		private static string GetResourceString(string resourceKey, string defaultString)
		{
			string resourceString = GetResourceString(resourceKey);
			if (!(resourceKey == resourceString) && resourceString != null)
			{
				return resourceString;
			}
			return defaultString;
		}

		internal static string Format(string resourceFormat, object p1)
		{
			if (UsingResourceKeys())
			{
				return string.Join(", ", resourceFormat, p1);
			}
			return string.Format(resourceFormat, p1);
		}

		internal static string Format(string resourceFormat, object p1, object p2)
		{
			if (UsingResourceKeys())
			{
				return string.Join(", ", resourceFormat, p1, p2);
			}
			return string.Format(resourceFormat, p1, p2);
		}

		internal static string Format(string resourceFormat, object p1, object p2, object p3)
		{
			if (UsingResourceKeys())
			{
				return string.Join(", ", resourceFormat, p1, p2, p3);
			}
			return string.Format(resourceFormat, p1, p2, p3);
		}

		internal static string Format(string resourceFormat, params object[] args)
		{
			if (args != null)
			{
				if (UsingResourceKeys())
				{
					return resourceFormat + ", " + string.Join(", ", args);
				}
				return string.Format(resourceFormat, args);
			}
			return resourceFormat;
		}

		internal static string Format(IFormatProvider provider, string resourceFormat, object p1)
		{
			if (UsingResourceKeys())
			{
				return string.Join(", ", resourceFormat, p1);
			}
			return string.Format(provider, resourceFormat, p1);
		}

		internal static string Format(IFormatProvider provider, string resourceFormat, object p1, object p2)
		{
			if (UsingResourceKeys())
			{
				return string.Join(", ", resourceFormat, p1, p2);
			}
			return string.Format(provider, resourceFormat, p1, p2);
		}

		internal static string Format(IFormatProvider provider, string resourceFormat, object p1, object p2, object p3)
		{
			if (UsingResourceKeys())
			{
				return string.Join(", ", resourceFormat, p1, p2, p3);
			}
			return string.Format(provider, resourceFormat, p1, p2, p3);
		}

		internal static string Format(IFormatProvider provider, string resourceFormat, params object[] args)
		{
			if (args != null)
			{
				if (UsingResourceKeys())
				{
					return resourceFormat + ", " + string.Join(", ", args);
				}
				return string.Format(provider, resourceFormat, args);
			}
			return resourceFormat;
		}
	}
}
namespace System.Diagnostics.CodeAnalysis
{
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
	internal sealed class MemberNotNullAttribute : Attribute
	{
		public string[] Members { get; }

		public MemberNotNullAttribute(string member)
		{
			Members = new string[1] { member };
		}

		public MemberNotNullAttribute(params string[] members)
		{
			Members = members;
		}
	}
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
	internal sealed class MemberNotNullWhenAttribute : Attribute
	{
		public bool ReturnValue { get; }

		public string[] Members { get; }

		public MemberNotNullWhenAttribute(bool returnValue, string member)
		{
			ReturnValue = returnValue;
			Members = new string[1] { member };
		}

		public MemberNotNullWhenAttribute(bool returnValue, params string[] members)
		{
			ReturnValue = returnValue;
			Members = members;
		}
	}
}
namespace System.Runtime.InteropServices
{
	[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
	internal sealed class LibraryImportAttribute : Attribute
	{
		public string LibraryName { get; }

		public string EntryPoint { get; set; }

		public StringMarshalling StringMarshalling { get; set; }

		public Type StringMarshallingCustomType { get; set; }

		public bool SetLastError { get; set; }

		public LibraryImportAttribute(string libraryName)
		{
			LibraryName = libraryName;
		}
	}
	internal enum StringMarshalling
	{
		Custom,
		Utf8,
		Utf16
	}
}
namespace System.Collections.Generic
{
	[DebuggerDisplay("Count = {_size}")]
	internal sealed class Deque<T>
	{
		private T[] _array = Array.Empty<T>();

		private int _head;

		private int _tail;

		private int _size;

		public int Count => _size;

		public bool IsEmpty => _size == 0;

		public void EnqueueTail(T item)
		{
			if (_size == _array.Length)
			{
				Grow();
			}
			_array[_tail] = item;
			if (++_tail == _array.Length)
			{
				_tail = 0;
			}
			_size++;
		}

		public T DequeueHead()
		{
			T result = _array[_head];
			_array[_head] = default(T);
			if (++_head == _array.Length)
			{
				_head = 0;
			}
			_size--;
			return result;
		}

		public T PeekHead()
		{
			return _array[_head];
		}

		public T PeekTail()
		{
			int num = _tail - 1;
			if (num == -1)
			{
				num = _array.Length - 1;
			}
			return _array[num];
		}

		public T DequeueTail()
		{
			if (--_tail == -1)
			{
				_tail = _array.Length - 1;
			}
			T result = _array[_tail];
			_array[_tail] = default(T);
			_size--;
			return result;
		}

		public IEnumerator<T> GetEnumerator()
		{
			int pos = _head;
			int count = _size;
			while (count-- > 0)
			{
				yield return _array[pos];
				pos = (pos + 1) % _array.Length;
			}
		}

		private void Grow()
		{
			int num = (int)((long)_array.Length * 2L);
			if (num < _array.Length + 4)
			{
				num = _array.Length + 4;
			}
			T[] array = new T[num];
			if (_head == 0)
			{
				Array.Copy(_array, array, _size);
			}
			else
			{
				Array.Copy(_array, _head, array, 0, _array.Length - _head);
				Array.Copy(_array, 0, array, _array.Length - _head, _tail);
			}
			_array = array;
			_head = 0;
			_tail = _size;
		}
	}
}
namespace System.Collections.Concurrent
{
	internal interface IProducerConsumerQueue<T> : IEnumerable<T>, IEnumerable
	{
		bool IsEmpty { get; }

		int Count { get; }

		void Enqueue(T item);

		bool TryDequeue([MaybeNullWhen(false)] out T result);

		int GetCountSafe(object syncObj);
	}
	[DebuggerDisplay("Count = {Count}")]
	internal sealed class MultiProducerMultiConsumerQueue<T> : ConcurrentQueue<T>, IProducerConsumerQueue<T>, IEnumerable<T>, IEnumerable
	{
		bool IProducerConsumerQueue<T>.IsEmpty => base.IsEmpty;

		int IProducerConsumerQueue<T>.Count => base.Count;

		void IProducerConsumerQueue<T>.Enqueue(T item)
		{
			Enqueue(item);
		}

		bool IProducerConsumerQueue<T>.TryDequeue([MaybeNullWhen(false)] out T result)
		{
			return TryDequeue(out result);
		}

		int IProducerConsumerQueue<T>.GetCountSafe(object syncObj)
		{
			return base.Count;
		}
	}
	[DebuggerDisplay("Count = {Count}")]
	[DebuggerTypeProxy(typeof(SingleProducerSingleConsumerQueue<>.SingleProducerSingleConsumerQueue_DebugView))]
	internal sealed class SingleProducerSingleConsumerQueue<T> : IProducerConsumerQueue<T>, IEnumerable<T>, IEnumerable
	{
		[StructLayout(LayoutKind.Sequential)]
		private sealed class Segment
		{
			internal Segment _next;

			internal readonly T[] _array;

			internal SegmentState _state;

			internal Segment(int size)
			{
				_array = new T[size];
			}
		}

		private struct SegmentState
		{
			internal Internal.PaddingFor32 _pad0;

			internal volatile int _first;

			internal int _lastCopy;

			internal Internal.PaddingFor32 _pad1;

			internal int _firstCopy;

			internal volatile int _last;

			internal Internal.PaddingFor32 _pad2;
		}

		private sealed class SingleProducerSingleConsumerQueue_DebugView
		{
			private readonly SingleProducerSingleConsumerQueue<T> _queue;

			[DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
			public T[] Items => new List<T>(_queue).ToArray();

			public SingleProducerSingleConsumerQueue_DebugView(SingleProducerSingleConsumerQueue<T> queue)
			{
				_queue = queue;
			}
		}

		private const int InitialSegmentSize = 32;

		private const int MaxSegmentSize = 16777216;

		private volatile Segment _head;

		private volatile Segment _tail;

		public bool IsEmpty
		{
			get
			{
				Segment head = _head;
				if (head._state._first != head._state._lastCopy)
				{
					return false;
				}
				if (head._state._first != head._state._last)
				{
					return false;
				}
				return head._next == null;
			}
		}

		public int Count
		{
			get
			{
				int num = 0;
				for (Segment segment = _head; segment != null; segment = segment._next)
				{
					int num2 = segment._array.Length;
					int first;
					int last;
					do
					{
						first = segment._state._first;
						last = segment._state._last;
					}
					while (first != segment._state._first);
					num += (last - first) & (num2 - 1);
				}
				return num;
			}
		}

		public SingleProducerSingleConsumerQueue()
		{
			_head = (_tail = new Segment(32));
		}

		public void Enqueue(T item)
		{
			Segment segment = _tail;
			T[] array = segment._array;
			int last = segment._state._last;
			int num = (last + 1) & (array.Length - 1);
			if (num != segment._state._firstCopy)
			{
				array[last] = item;
				segment._state._last = num;
			}
			else
			{
				EnqueueSlow(item, ref segment);
			}
		}

		private void EnqueueSlow(T item, ref Segment segment)
		{
			if (segment._state._firstCopy != segment._state._first)
			{
				segment._state._firstCopy = segment._state._first;
				Enqueue(item);
				return;
			}
			int size = Math.Min(_tail._array.Length * 2, 16777216);
			Segment segment2 = new Segment(size);
			segment2._array[0] = item;
			segment2._state._last = 1;
			segment2._state._lastCopy = 1;
			try
			{
			}
			finally
			{
				Volatile.Write(ref _tail._next, segment2);
				_tail = segment2;
			}
		}

		public bool TryDequeue([MaybeNullWhen(false)] out T result)
		{
			Segment head = _head;
			T[] array = head._array;
			int first = head._state._first;
			if (first != head._state._lastCopy)
			{
				result = array[first];
				array[first] = default(T);
				head._state._first = (first + 1) & (array.Length - 1);
				return true;
			}
			return TryDequeueSlow(head, array, peek: false, out result);
		}

		public bool TryPeek([MaybeNullWhen(false)] out T result)
		{
			Segment head = _head;
			T[] array = head._array;
			int first = head._state._first;
			if (first != head._state._lastCopy)
			{
				result = array[first];
				return true;
			}
			return TryDequeueSlow(head, array, peek: true, out result);
		}

		private bool TryDequeueSlow(Segment segment, T[] array, bool peek, [MaybeNullWhen(false)] out T result)
		{
			if (segment._state._last != segment._state._lastCopy)
			{
				segment._state._lastCopy = segment._state._last;
				if (!peek)
				{
					return TryDequeue(out result);
				}
				return TryPeek(out result);
			}
			if (segment._next != null && segment._state._first == segment._state._last)
			{
				segment = segment._next;
				array = segment._array;
				_head = segment;
			}
			int first = segment._state._first;
			if (first == segment._state._last)
			{
				result = default(T);
				return false;
			}
			result = array[first];
			if (!peek)
			{
				array[first] = default(T);
				segment._state._first = (first + 1) & (segment._array.Length - 1);
				segment._state._lastCopy = segment._state._last;
			}
			return true;
		}

		public bool TryDequeueIf(Predicate<T> predicate, [MaybeNullWhen(false)] out T result)
		{
			Segment head = _head;
			T[] array = head._array;
			int first = head._state._first;
			if (first != head._state._lastCopy)
			{
				result = array[first];
				if (predicate == null || predicate(result))
				{
					array[first] = default(T);
					head._state._first = (first + 1) & (array.Length - 1);
					return true;
				}
				result = default(T);
				return false;
			}
			return TryDequeueIfSlow(predicate, head, array, out result);
		}

		private bool TryDequeueIfSlow(Predicate<T> predicate, Segment segment, T[] array, [MaybeNullWhen(false)] out T result)
		{
			if (segment._state._last != segment._state._lastCopy)
			{
				segment._state._lastCopy = segment._state._last;
				return TryDequeueIf(predicate, out result);
			}
			if (segment._next != null && segment._state._first == segment._state._last)
			{
				segment = segment._next;
				array = segment._array;
				_head = segment;
			}
			int first = segment._state._first;
			if (first == segment._state._last)
			{
				result = default(T);
				return false;
			}
			result = array[first];
			if (predicate == null || predicate(result))
			{
				array[first] = default(T);
				segment._state._first = (first + 1) & (segment._array.Length - 1);
				segment._state._lastCopy = segment._state._last;
				return true;
			}
			result = default(T);
			return false;
		}

		public void Clear()
		{
			T result;
			while (TryDequeue(out result))
			{
			}
		}

		public IEnumerator<T> GetEnumerator()
		{
			for (Segment segment = _head; segment != null; segment = segment._next)
			{
				for (int pt = segment._state._first; pt != segment._state._last; pt = (pt + 1) & (segment._array.Length - 1))
				{
					yield return segment._array[pt];
				}
			}
		}

		IEnumerator IEnumerable.GetEnumerator()
		{
			return GetEnumerator();
		}

		int IProducerConsumerQueue<T>.GetCountSafe(object syncObj)
		{
			lock (syncObj)
			{
				return Count;
			}
		}
	}
}
namespace System.Threading.Channels
{
	internal abstract class AsyncOperation
	{
		protected static readonly Action<object> s_availableSentinel = AvailableSentinel;

		protected static readonly Action<object> s_completedSentinel = CompletedSentinel;

		private static void AvailableSentinel(object s)
		{
		}

		private static void CompletedSentinel(object s)
		{
		}

		protected static void ThrowIncompleteOperationException()
		{
			throw new InvalidOperationException(System.SR.InvalidOperation_IncompleteAsyncOperation);
		}

		protected static void ThrowMultipleContinuations()
		{
			throw new InvalidOperationException(System.SR.InvalidOperation_MultipleContinuations);
		}

		protected static void ThrowIncorrectCurrentIdException()
		{
			throw new InvalidOperationException(System.SR.InvalidOperation_IncorrectToken);
		}
	}
	internal class AsyncOperation<TResult> : AsyncOperation, IValueTaskSource, IValueTaskSource<TResult>
	{
		private readonly CancellationTokenRegistration _registration;

		private readonly bool _pooled;

		private readonly bool _runContinuationsAsynchronously;

		private volatile int _completionReserved;

		private TResult _result;

		private ExceptionDispatchInfo _error;

		private Action<object> _continuation;

		private object _continuationState;

		private object _schedulingContext;

		private ExecutionContext _executionContext;

		private short _currentId;

		public AsyncOperation<TResult> Next { get; set; }

		public CancellationToken CancellationToken { get; }

		public ValueTask ValueTask => new ValueTask(this, _currentId);

		public ValueTask<TResult> ValueTaskOfT => new ValueTask<TResult>(this, _currentId);

		internal bool IsCompleted => (object)_continuation == AsyncOperation.s_completedSentinel;

		public AsyncOperation(bool runContinuationsAsynchronously, CancellationToken cancellationToken = default(CancellationToken), bool pooled = false)
		{
			_continuation = (pooled ? AsyncOperation.s_availableSentinel : null);
			_pooled = pooled;
			_runContinuationsAsynchronously = runContinuationsAsynchronously;
			if (cancellationToken.CanBeCanceled)
			{
				CancellationToken = cancellationToken;
				_registration = UnsafeRegister(cancellationToken, delegate(object s)
				{
					AsyncOperation<TResult> asyncOperation = (AsyncOperation<TResult>)s;
					asyncOperation.TrySetCanceled(asyncOperation.CancellationToken);
				}, this);
			}
		}

		public ValueTaskSourceStatus GetStatus(short token)
		{
			if (_currentId != token)
			{
				AsyncOperation.ThrowIncorrectCurrentIdException();
			}
			if (IsCompleted)
			{
				if (_error != null)
				{
					if (!(_error.SourceException is OperationCanceledException))
					{
						return ValueTaskSourceStatus.Faulted;
					}
					return ValueTaskSourceStatus.Canceled;
				}
				return ValueTaskSourceStatus.Succeeded;
			}
			return ValueTaskSourceStatus.Pending;
		}

		public TResult GetResult(short token)
		{
			if (_currentId != token)
			{
				AsyncOperation.ThrowIncorrectCurrentIdException();
			}
			if (!IsCompleted)
			{
				AsyncOperation.ThrowIncompleteOperationException();
			}
			ExceptionDispatchInfo error = _error;
			TResult result = _result;
			_currentId++;
			if (_pooled)
			{
				Volatile.Write(ref _continuation, AsyncOperation.s_availableSentinel);
			}
			error?.Throw();
			return result;
		}

		void IValueTaskSource.GetResult(short token)
		{
			if (_currentId != token)
			{
				AsyncOperation.ThrowIncorrectCurrentIdException();
			}
			if (!IsCompleted)
			{
				AsyncOperation.ThrowIncompleteOperationException();
			}
			ExceptionDispatchInfo error = _error;
			_currentId++;
			if (_pooled)
			{
				Volatile.Write(ref _continuation, AsyncOperation.s_availableSentinel);
			}
			error?.Throw();
		}

		public bool TryOwnAndReset()
		{
			if ((object)Interlocked.CompareExchange(ref _continuation, null, AsyncOperation.s_availableSentinel) == AsyncOperation.s_availableSentinel)
			{
				_continuationState = null;
				_result = default(TResult);
				_error = null;
				_schedulingContext = null;
				_executionContext = null;
				return true;
			}
			return false;
		}

		public void OnCompleted(Action<object> continuation, object state, short token, ValueTaskSourceOnCompletedFlags flags)
		{
			if (_currentId != token)
			{
				AsyncOperation.ThrowIncorrectCurrentIdException();
			}
			if (_continuationState != null)
			{
				AsyncOperation.ThrowMultipleContinuations();
			}
			_continuationState = state;
			if ((flags & ValueTaskSourceOnCompletedFlags.FlowExecutionContext) != 0)
			{
				_executionContext = ExecutionContext.Capture();
			}
			SynchronizationContext synchronizationContext = null;
			TaskScheduler taskScheduler = null;
			if ((flags & ValueTaskSourceOnCompletedFlags.UseSchedulingContext) != 0)
			{
				synchronizationContext = SynchronizationContext.Current;
				if (synchronizationContext != null && synchronizationContext.GetType() != typeof(SynchronizationContext))
				{
					_schedulingContext = synchronizationContext;
				}
				else
				{
					synchronizationContext = null;
					taskScheduler = TaskScheduler.Current;
					if (taskScheduler != TaskScheduler.Default)
					{
						_schedulingContext = taskScheduler;
					}
				}
			}
			Action<object> action = Interlocked.CompareExchange(ref _continuation, continuation, null);
			if (action == null)
			{
				return;
			}
			if ((object)action != AsyncOperation.s_completedSentinel)
			{
				AsyncOperation.ThrowMultipleContinuations();
			}
			if (_schedulingContext == null)
			{
				if (_executionContext == null)
				{
					UnsafeQueueUserWorkItem(continuation, state);
				}
				else
				{
					QueueUserWorkItem(continuation, state);
				}
			}
			else if (synchronizationContext != null)
			{
				synchronizationContext.Post(delegate(object s)
				{
					KeyValuePair<Action<object>, object> keyValuePair = (KeyValuePair<Action<object>, object>)s;
					keyValuePair.Key(keyValuePair.Value);
				}, new KeyValuePair<Action<object>, object>(continuation, state));
			}
			else
			{
				Task.Factory.StartNew(continuation, state, CancellationToken.None, TaskCreationOptions.DenyChildAttach, taskScheduler);
			}
		}

		public bool UnregisterCancellation()
		{
			if (CancellationToken.CanBeCanceled)
			{
				_registration.Dispose();
				return _completionReserved == 0;
			}
			return true;
		}

		public bool TrySetResult(TResult item)
		{
			UnregisterCancellation();
			if (TryReserveCompletionIfCancelable())
			{
				_result = item;
				SignalCompletion();
				return true;
			}
			return false;
		}

		public bool TrySetException(Exception exception)
		{
			UnregisterCancellation();
			if (TryReserveCompletionIfCancelable())
			{
				_error = ExceptionDispatchInfo.Capture(exception);
				SignalCompletion();
				return true;
			}
			return false;
		}

		public bool TrySetCanceled(CancellationToken cancellationToken = default(CancellationToken))
		{
			if (TryReserveCompletionIfCancelable())
			{
				_error = ExceptionDispatchInfo.Capture(new OperationCanceledException(cancellationToken));
				SignalCompletion();
				return true;
			}
			return false;
		}

		private bool TryReserveCompletionIfCancelable()
		{
			if (CancellationToken.CanBeCanceled)
			{
				return Interlocked.CompareExchange(ref _completionReserved, 1, 0) == 0;
			}
			return true;
		}

		private void SignalCompletion()
		{
			if (_continuation == null && Interlocked.CompareExchange(ref _continuation, AsyncOperation.s_completedSentinel, null) == null)
			{
				return;
			}
			if (_schedulingContext == null)
			{
				if (_runContinuationsAsynchronously)
				{
					UnsafeQueueSetCompletionAndInvokeContinuation();
					return;
				}
			}
			else if (_schedulingContext is SynchronizationContext synchronizationContext)
			{
				if (_runContinuationsAsynchronously || synchronizationContext != SynchronizationContext.Current)
				{
					synchronizationContext.Post(delegate(object s)
					{
						((AsyncOperation<TResult>)s).SetCompletionAndInvokeContinuation();
					}, this);
					return;
				}
			}
			else
			{
				TaskScheduler taskScheduler = (TaskScheduler)_schedulingContext;
				if (_runContinuationsAsynchronously || taskScheduler != TaskScheduler.Current)
				{
					Task.Factory.StartNew(delegate(object s)
					{
						((AsyncOperation<TResult>)s).SetCompletionAndInvokeContinuation();
					}, this, CancellationToken.None, TaskCreationOptions.DenyChildAttach, taskScheduler);
					return;
				}
			}
			SetCompletionAndInvokeContinuation();
		}

		private void SetCompletionAndInvokeContinuation()
		{
			if (_executionContext == null)
			{
				Action<object> continuation = _continuation;
				_continuation = AsyncOperation.s_completedSentinel;
				continuation(_continuationState);
				return;
			}
			ExecutionContext.Run(_executionContext, delegate(object s)
			{
				AsyncOperation<TResult> asyncOperation = (AsyncOperation<TResult>)s;
				Action<object> continuation2 = asyncOperation._continuation;
				asyncOperation._continuation = AsyncOperation.s_completedSentinel;
				continuation2(asyncOperation._continuationState);
			}, this);
		}

		private void UnsafeQueueSetCompletionAndInvokeContinuation()
		{
			ThreadPool.UnsafeQueueUserWorkItem(delegate(object s)
			{
				((AsyncOperation<TResult>)s).SetCompletionAndInvokeContinuation();
			}, this);
		}

		private static void UnsafeQueueUserWorkItem(Action<object> action, object state)
		{
			QueueUserWorkItem(action, state);
		}

		private static void QueueUserWorkItem(Action<object> action, object state)
		{
			Task.Factory.StartNew(action, state, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
		}

		private static CancellationTokenRegistration UnsafeRegister(CancellationToken cancellationToken, Action<object> action, object state)
		{
			return cancellationToken.Register(action, state);
		}
	}
	internal sealed class VoidAsyncOperationWithData<TData> : AsyncOperation<VoidResult>
	{
		public TData Item { get; set; }

		public VoidAsyncOperationWithData(bool runContinuationsAsynchronously, CancellationToken cancellationToken = default(CancellationToken), bool pooled = false)
			: base(runContinuationsAsynchronously, cancellationToken, pooled)
		{
		}
	}
	[DebuggerDisplay("Items = {ItemsCountForDebugger}, Capacity = {_bufferedCapacity}, Mode = {_mode}, Closed = {ChannelIsClosedForDebugger}")]
	[DebuggerTypeProxy(typeof(DebugEnumeratorDebugView<>))]
	internal sealed class BoundedChannel<T> : Channel<T>, IDebugEnumerable<T>
	{
		[DebuggerDisplay("Items = {ItemsCountForDebugger}")]
		[DebuggerTypeProxy(typeof(DebugEnumeratorDebugView<>))]
		private sealed class BoundedChannelReader : ChannelReader<T>, IDebugEnumerable<T>
		{
			internal readonly BoundedChannel<T> _parent;

			private readonly AsyncOperation<T> _readerSingleton;

			private readonly AsyncOperation<bool> _waiterSingleton;

			public override Task Completion => _parent._completion.Task;

			public override bool CanCount => true;

			public override bool CanPeek => true;

			public override int Count
			{
				get
				{
					BoundedChannel<T> parent = _parent;
					lock (parent.SyncObj)
					{
						return parent._items.Count;
					}
				}
			}

			private int ItemsCountForDebugger => _parent._items.Count;

			internal BoundedChannelReader(BoundedChannel<T> parent)
			{
				_parent = parent;
				_readerSingleton = new AsyncOperation<T>(parent._runContinuationsAsynchronously, default(CancellationToken), pooled: true);
				_waiterSingleton = new AsyncOperation<bool>(parent._runContinuationsAsynchronously, default(CancellationToken), pooled: true);
			}

			public override bool TryRead([MaybeNullWhen(false)] out T item)
			{
				BoundedChannel<T> parent = _parent;
				lock (parent.SyncObj)
				{
					if (!parent._items.IsEmpty)
					{
						item = DequeueItemAndPostProcess();
						return true;
					}
				}
				item = default(T);
				return false;
			}

			public override bool TryPeek([MaybeNullWhen(false)] out T item)
			{
				BoundedChannel<T> parent = _parent;
				lock (parent.SyncObj)
				{
					if (!parent._items.IsEmpty)
					{
						item = parent._items.PeekHead();
						return true;
					}
				}
				item = default(T);
				return false;
			}

			public override ValueTask<T> ReadAsync(CancellationToken cancellationToken)
			{
				if (cancellationToken.IsCancellationRequested)
				{
					return new ValueTask<T>(Task.FromCanceled<T>(cancellationToken));
				}
				BoundedChannel<T> parent = _parent;
				lock (parent.SyncObj)
				{
					if (!parent._items.IsEmpty)
					{
						return new ValueTask<T>(DequeueItemAndPostProcess());
					}
					if (parent._doneWriting != null)
					{
						return ChannelUtilities.GetInvalidCompletionValueTask<T>(parent._doneWriting);
					}
					if (!cancellationToken.CanBeCanceled)
					{
						AsyncOperation<T> readerSingleton = _readerSingleton;
						if (readerSingleton.TryOwnAndReset())
						{
							parent._blockedReaders.EnqueueTail(readerSingleton);
							return readerSingleton.ValueTaskOfT;
						}
					}
					AsyncOperation<T> asyncOperation = new AsyncOperation<T>(parent._runContinuationsAsynchronously | cancellationToken.CanBeCanceled, cancellationToken);
					parent._blockedReaders.EnqueueTail(asyncOperation);
					return asyncOperation.ValueTaskOfT;
				}
			}

			public override ValueTask<bool> WaitToReadAsync(CancellationToken cancellationToken)
			{
				if (cancellationToken.IsCancellationRequested)
				{
					return new ValueTask<bool>(Task.FromCanceled<bool>(cancellationToken));
				}
				BoundedChannel<T> parent = _parent;
				lock (parent.SyncObj)
				{
					if (!parent._items.IsEmpty)
					{
						return new ValueTask<bool>(result: true);
					}
					if (parent._doneWriting != null)
					{
						return (parent._doneWriting != ChannelUtilities.s_doneWritingSentinel) ? new ValueTask<bool>(Task.FromException<bool>(parent._doneWriting)) : default(ValueTask<bool>);
					}
					if (!cancellationToken.CanBeCanceled)
					{
						AsyncOperation<bool> waiterSingleton = _waiterSingleton;
						if (waiterSingleton.TryOwnAndReset())
						{
							ChannelUtilities.QueueWaiter(ref parent._waitingReadersTail, waiterSingleton);
							return waiterSingleton.ValueTaskOfT;
						}
					}
					AsyncOperation<bool> asyncOperation = new AsyncOperation<bool>(parent._runContinuationsAsynchronously | cancellationToken.CanBeCanceled, cancellationToken);
					ChannelUtilities.QueueWaiter(ref _parent._waitingReadersTail, asyncOperation);
					return asyncOperation.ValueTaskOfT;
				}
			}

			private T DequeueItemAndPostProcess()
			{
				BoundedChannel<T> parent = _parent;
				T result = parent._items.DequeueHead();
				if (parent._doneWriting != null)
				{
					if (parent._items.IsEmpty)
					{
						ChannelUtilities.Complete(parent._completion, parent._doneWriting);
					}
				}
				else
				{
					while (!parent._blockedWriters.IsEmpty)
					{
						VoidAsyncOperationWithData<T> voidAsyncOperationWithData = parent._blockedWriters.DequeueHead();
						if (voidAsyncOperationWithData.TrySetResult(default(VoidResult)))
						{
							parent._items.EnqueueTail(voidAsyncOperationWithData.Item);
							return result;
						}
					}
					ChannelUtilities.WakeUpWaiters(ref parent._waitingWritersTail, result: true);
				}
				return result;
			}

			IEnumerator<T> IDebugEnumerable<T>.GetEnumerator()
			{
				return _parent._items.GetEnumerator();
			}
		}

		[DebuggerDisplay("Items = {ItemsCountForDebugger}, Capacity = {CapacityForDebugger}")]
		[DebuggerTypeProxy(typeof(DebugEnumeratorDebugView<>))]
		private sealed class BoundedChannelWriter : ChannelWriter<T>, IDebugEnumerable<T>
		{
			internal readonly BoundedChannel<T> _parent;

			private readonly VoidAsyncOperationWithData<T> _writerSingleton;

			private readonly AsyncOperation<bool> _waiterSingleton;

			private int ItemsCountForDebugger => _parent._items.Count;

			private int CapacityForDebugger => _parent._bufferedCapacity;

			internal BoundedChannelWriter(BoundedChannel<T> parent)
			{
				_parent = parent;
				_writerSingleton = new VoidAsyncOperationWithData<T>(runContinuationsAsynchronously: true, default(CancellationToken), pooled: true);
				_waiterSingleton = new AsyncOperation<bool>(runContinuationsAsynchronously: true, default(CancellationToken), pooled: true);
			}

			public override bool TryComplete(Exception error)
			{
				BoundedChannel<T> parent = _parent;
				bool isEmpty;
				lock (parent.SyncObj)
				{
					if (parent._doneWriting != null)
					{
						return false;
					}
					parent._doneWriting = error ?? ChannelUtilities.s_doneWritingSentinel;
					isEmpty = parent._items.IsEmpty;
				}
				if (isEmpty)
				{
					ChannelUtilities.Complete(parent._completion, error);
				}
				ChannelUtilities.FailOperations<AsyncOperation<T>, T>(parent._blockedReaders, ChannelUtilities.CreateInvalidCompletionException(error));
				ChannelUtilities.FailOperations<VoidAsyncOperationWithData<T>, VoidResult>(parent._blockedWriters, ChannelUtilities.CreateInvalidCompletionException(error));
				ChannelUtilities.WakeUpWaiters(ref parent._waitingReadersTail, result: false, error);
				ChannelUtilities.WakeUpWaiters(ref parent._waitingWritersTail, result: false, error);
				return true;
			}

			public override bool TryWrite(T item)
			{
				AsyncOperation<T> asyncOperation = null;
				AsyncOperation<bool> listTail = null;
				BoundedChannel<T> parent = _parent;
				bool lockTaken = false;
				try
				{
					Monitor.Enter(parent.SyncObj, ref lockTaken);
					if (parent._doneWriting != null)
					{
						return false;
					}
					int count = parent._items.Count;
					if (count != 0)
					{
						if (count < parent._bufferedCapacity)
						{
							parent._items.EnqueueTail(item);
							return true;
						}
						if (parent._mode == BoundedChannelFullMode.Wait)
						{
							return false;
						}
						if (parent._mode == BoundedChannelFullMode.DropWrite)
						{
							Monitor.Exit(parent.SyncObj);
							lockTaken = false;
							parent._itemDropped?.Invoke(item);
							return true;
						}
						T obj = ((parent._mode == BoundedChannelFullMode.DropNewest) ? parent._items.DequeueTail() : parent._items.DequeueHead());
						parent._items.EnqueueTail(item);
						Monitor.Exit(parent.SyncObj);
						lockTaken = false;
						parent._itemDropped?.Invoke(obj);
						return true;
					}
					while (!parent._blockedReaders.IsEmpty)
					{
						AsyncOperation<T> asyncOperation2 = parent._blockedReaders.DequeueHead();
						if (asyncOperation2.UnregisterCancellation())
						{
							asyncOperation = asyncOperation2;
							break;
						}
					}
					if (asyncOperation == null)
					{
						parent._items.EnqueueTail(item);
						listTail = parent._waitingReadersTail;
						if (listTail == null)
						{
							return true;
						}
						parent._waitingReadersTail = null;
					}
				}
				finally
				{
					if (lockTaken)
					{
						Monitor.Exit(parent.SyncObj);
					}
				}
				if (asyncOperation != null)
				{
					bool flag = asyncOperation.TrySetResult(item);
				}
				else
				{
					ChannelUtilities.WakeUpWaiters(ref listTail, result: true);
				}
				return true;
			}

			public override ValueTask<bool> WaitToWriteAsync(CancellationToken cancellationToken)
			{
				if (cancellationToken.IsCancellationRequested)
				{
					return new ValueTask<bool>(Task.FromCanceled<bool>(cancellationToken));
				}
				BoundedChannel<T> parent = _parent;
				lock (parent.SyncObj)
				{
					if (parent._doneWriting != null)
					{
						return (parent._doneWriting != ChannelUtilities.s_doneWritingSentinel) ? new ValueTask<bool>(Task.FromException<bool>(parent._doneWriting)) : default(ValueTask<bool>);
					}
					if (parent._items.Count < parent._bufferedCapacity || parent._mode != 0)
					{
						return new ValueTask<bool>(result: true);
					}
					if (!cancellationToken.CanBeCanceled)
					{
						AsyncOperation<bool> waiterSingleton = _waiterSingleton;
						if (waiterSingleton.TryOwnAndReset())
						{
							ChannelUtilities.QueueWaiter(ref parent._waitingWritersTail, waiterSingleton);
							return waiterSingleton.ValueTaskOfT;
						}
					}
					AsyncOperation<bool> asyncOperation = new AsyncOperation<bool>(runContinuationsAsynchronously: true, cancellationToken);
					ChannelUtilities.QueueWaiter(ref parent._waitingWritersTail, asyncOperation);
					return asyncOperation.ValueTaskOfT;
				}
			}

			public override ValueTask WriteAsync(T item, CancellationToken cancellationToken)
			{
				if (cancellationToken.IsCancellationRequested)
				{
					return new ValueTask(Task.FromCanceled(cancellationToken));
				}
				AsyncOperation<T> asyncOperation = null;
				AsyncOperation<bool> listTail = null;
				BoundedChannel<T> parent = _parent;
				bool lockTaken = false;
				try
				{
					Monitor.Enter(parent.SyncObj, ref lockTaken);
					if (parent._doneWriting != null)
					{
						return new ValueTask(Task.FromException(ChannelUtilities.CreateInvalidCompletionException(parent._doneWriting)));
					}
					int count = parent._items.Count;
					if (count != 0)
					{
						if (count < parent._bufferedCapacity)
						{
							parent._items.EnqueueTail(item);
							return default(ValueTask);
						}
						if (parent._mode == BoundedChannelFullMode.Wait)
						{
							if (!cancellationToken.CanBeCanceled)
							{
								VoidAsyncOperationWithData<T> writerSingleton = _writerSingleton;
								if (writerSingleton.TryOwnAndReset())
								{
									writerSingleton.Item = item;
									parent._blockedWriters.EnqueueTail(writerSingleton);
									return writerSingleton.ValueTask;
								}
							}
							VoidAsyncOperationWithData<T> voidAsyncOperationWithData = new VoidAsyncOperationWithData<T>(runContinuationsAsynchronously: true, cancellationToken);
							voidAsyncOperationWithData.Item = item;
							parent._blockedWriters.EnqueueTail(voidAsyncOperationWithData);
							return voidAsyncOperationWithData.ValueTask;
						}
						if (parent._mode == BoundedChannelFullMode.DropWrite)
						{
							Monitor.Exit(parent.SyncObj);
							lockTaken = false;
							parent._itemDropped?.Invoke(item);
							return default(ValueTask);
						}
						T obj = ((parent._mode == BoundedChannelFullMode.DropNewest) ? parent._items.DequeueTail() : parent._items.DequeueHead());
						parent._items.EnqueueTail(item);
						Monitor.Exit(parent.SyncObj);
						lockTaken = false;
						parent._itemDropped?.Invoke(obj);
						return default(ValueTask);
					}
					while (!parent._blockedReaders.IsEmpty)
					{
						AsyncOperation<T> asyncOperation2 = parent._blockedReaders.DequeueHead();
						if (asyncOperation2.UnregisterCancellation())
						{
							asyncOperation = asyncOperation2;
							break;
						}
					}
					if (asyncOperation == null)
					{
						parent._items.EnqueueTail(item);
						listTail = parent._waitingReadersTail;
						if (listTail == null)
						{
							return default(ValueTask);
						}
						parent._waitingReadersTail = null;
					}
				}
				finally
				{
					if (lockTaken)
					{
						Monitor.Exit(parent.SyncObj);
					}
				}
				if (asyncOperation != null)
				{
					bool flag = asyncOperation.TrySetResult(item);
				}
				else
				{
					ChannelUtilities.WakeUpWaiters(ref listTail, result: true);
				}
				return default(ValueTask);
			}

			IEnumerator<T> IDebugEnumerable<T>.GetEnumerator()
			{
				return _parent._items.GetEnumerator();
			}
		}

		private readonly BoundedChannelFullMode _mode;

		private readonly Action<T> _itemDropped;

		private readonly TaskCompletionSource _completion;

		private readonly int _bufferedCapacity;

		private readonly Deque<T> _items = new Deque<T>();

		private readonly Deque<AsyncOperation<T>> _blockedReaders = new Deque<AsyncOperation<T>>();

		private readonly Deque<VoidAsyncOperationWithData<T>> _blockedWriters = new Deque<VoidAsyncOperationWithData<T>>();

		private AsyncOperation<bool> _waitingReadersTail;

		private AsyncOperation<bool> _waitingWritersTail;

		private readonly bool _runContinuationsAsynchronously;

		private Exception _doneWriting;

		private object SyncObj => _items;

		private int ItemsCountForDebugger => _items.Count;

		private bool ChannelIsClosedForDebugger => _doneWriting != null;

		internal BoundedChannel(int bufferedCapacity, BoundedChannelFullMode mode, bool runContinuationsAsynchronously, Action<T> itemDropped)
		{
			_bufferedCapacity = bufferedCapacity;
			_mode = mode;
			_runContinuationsAsynchronously = runContinuationsAsynchronously;
			_itemDropped = itemDropped;
			_completion = new TaskCompletionSource(runContinuationsAsynchronously ? TaskCreationOptions.RunContinuationsAsynchronously : TaskCreationOptions.None);
			base.Reader = new BoundedChannelReader(this);
			base.Writer = new BoundedChannelWriter(this);
		}

		[Conditional("DEBUG")]
		private void AssertInvariants()
		{
			_ = _items.IsEmpty;
			_ = _items.Count;
			_ = _bufferedCapacity;
			_ = _blockedReaders.IsEmpty;
			_ = _blockedWriters.IsEmpty;
			_ = _completion.Task.IsCompleted;
		}

		IEnumerator<T> IDebugEnumerable<T>.GetEnumerator()
		{
			return _items.GetEnumerator();
		}
	}
	public enum BoundedChannelFullMode
	{
		Wait,
		DropNewest,
		DropOldest,
		DropWrite
	}
	public static class Channel
	{
		public static Channel<T> CreateUnbounded<T>()
		{
			return new UnboundedChannel<T>(runContinuationsAsynchronously: true);
		}

		public static Channel<T> CreateUnbounded<T>(UnboundedChannelOptions options)
		{
			if (options == null)
			{
				throw new ArgumentNullException("options");
			}
			if (options.SingleReader)
			{
				return new SingleConsumerUnboundedChannel<T>(!options.AllowSynchronousContinuations);
			}
			return new UnboundedChannel<T>(!options.AllowSynchronousContinuations);
		}

		public static Channel<T> CreateBounded<T>(int capacity)
		{
			if (capacity < 1)
			{
				throw new ArgumentOutOfRangeException("capacity");
			}
			return new BoundedChannel<T>(capacity, BoundedChannelFullMode.Wait, runContinuationsAsynchronously: true, null);
		}

		public static Channel<T> CreateBounded<T>(BoundedChannelOptions options)
		{
			return CreateBounded<T>(options, null);
		}

		public static Channel<T> CreateBounded<T>(BoundedChannelOptions options, Action<T>? itemDropped)
		{
			if (options == null)
			{
				throw new ArgumentNullException("options");
			}
			return new BoundedChannel<T>(options.Capacity, options.FullMode, !options.AllowSynchronousContinuations, itemDropped);
		}
	}
	[Serializable]
	public class ChannelClosedException : InvalidOperationException
	{
		public ChannelClosedException()
			: base(System.SR.ChannelClosedException_DefaultMessage)
		{
		}

		public ChannelClosedException(string? message)
			: base(message)
		{
		}

		public ChannelClosedException(Exception? innerException)
			: base(System.SR.ChannelClosedException_DefaultMessage, innerException)
		{
		}

		public ChannelClosedException(string? message, Exception? innerException)
			: base(message, innerException)
		{
		}

		protected ChannelClosedException(SerializationInfo info, StreamingContext context)
			: base(info, context)
		{
		}
	}
	public abstract class ChannelOptions
	{
		public bool SingleWriter { get; set; }

		public bool SingleReader { get; set; }

		public bool AllowSynchronousContinuations { get; set; }
	}
	public sealed class BoundedChannelOptions : ChannelOptions
	{
		private int _capacity;

		private BoundedChannelFullMode _mode;

		public int Capacity
		{
			get
			{
				return _capacity;
			}
			set
			{
				if (value < 1)
				{
					throw new ArgumentOutOfRangeException("value");
				}
				_capacity = value;
			}
		}

		public BoundedChannelFullMode FullMode
		{
			get
			{
				return _mode;
			}
			set
			{
				if ((uint)value <= 3u)
				{
					_mode = value;
					return;
				}
				throw new ArgumentOutOfRangeException("value");
			}
		}

		public BoundedChannelOptions(int capacity)
		{
			if (capacity < 1)
			{
				throw new ArgumentOutOfRangeException("capacity");
			}
			_capacity = capacity;
		}
	}
	public sealed class UnboundedChannelOptions : ChannelOptions
	{
	}
	public abstract class ChannelReader<T>
	{
		public virtual Task Completion => ChannelUtilities.s_neverCompletingTask;

		public virtual bool CanCount => false;

		public virtual bool CanPeek => false;

		public virtual int Count
		{
			get
			{
				throw new NotSupportedException();
			}
		}

		public abstract bool TryRead([MaybeNullWhen(false)] out T item);

		public virtual bool TryPeek([MaybeNullWhen(false)] out T item)
		{
			item = default(T);
			return false;
		}

		public abstract ValueTask<bool> WaitToReadAsync(CancellationToken cancellationToken = default(CancellationToken));

		public virtual ValueTask<T> ReadAsync(CancellationToken cancellationToken = default(CancellationToken))
		{
			if (cancellationToken.IsCancellationRequested)
			{
				return new ValueTask<T>(Task.FromCanceled<T>(cancellationToken));
			}
			try
			{
				if (TryRead(out var item))
				{
					return new ValueTask<T>(item);
				}
			}
			catch (Exception ex) when (!(ex is ChannelClosedException) && !(ex is OperationCanceledException))
			{
				return new ValueTask<T>(Task.FromException<T>(ex));
			}
			return ReadAsyncCore(cancellationToken);
			async ValueTask<T> ReadAsyncCore(CancellationToken ct)
			{
				T item2;
				do
				{
					if (!(await WaitToReadAsync(ct).ConfigureAwait(continueOnCapturedContext: false)))
					{
						throw new ChannelClosedException();
					}
				}
				while (!TryRead(out item2));
				return item2;
			}
		}

		public virtual async IAsyncEnumerable<T> ReadAllAsync([EnumeratorCancellation] CancellationToken cancellationToken = default(CancellationToken))
		{
			while (await WaitToReadAsync(cancellationToken).ConfigureAwait(continueOnCapturedContext: false))
			{
				T item;
				while (TryRead(out item))
				{
					yield return item;
				}
			}
		}
	}
	internal static class ChannelUtilities
	{
		internal static readonly Exception s_doneWritingSentinel = new Exception("s_doneWritingSentinel");

		internal static readonly Task<bool> s_trueTask = Task.FromResult(result: true);

		internal static readonly Task<bool> s_falseTask = Task.FromResult(result: false);

		internal static readonly Task s_neverCompletingTask = new TaskCompletionSource<bool>().Task;

		internal static void Complete(TaskCompletionSource tcs, Exception error = null)
		{
			if (error is OperationCanceledException ex)
			{
				tcs.TrySetCanceled(ex.CancellationToken);
			}
			else if (error != null && error != s_doneWritingSentinel)
			{
				if (tcs.TrySetException(error))
				{
					_ = tcs.Task.Exception;
				}
			}
			else
			{
				tcs.TrySetResult();
			}
		}

		internal static ValueTask<T> GetInvalidCompletionValueTask<T>(Exception error)
		{
			Task<T> task = ((error == s_doneWritingSentinel) ? Task.FromException<T>(CreateInvalidCompletionException()) : ((error is OperationCanceledException ex) ? Task.FromCanceled<T>(ex.CancellationToken.IsCancellationRequested ? ex.CancellationToken : new CancellationToken(canceled: true)) : Task.FromException<T>(CreateInvalidCompletionException(error))));
			return new ValueTask<T>(task);
		}

		internal static void QueueWaiter(ref AsyncOperation<bool> tail, AsyncOperation<bool> waiter)
		{
			AsyncOperation<bool> asyncOperation = tail;
			if (asyncOperation == null)
			{
				waiter.Next = waiter;
			}
			else
			{
				waiter.Next = asyncOperation.Next;
				asyncOperation.Next = waiter;
			}
			tail = waiter;
		}

		internal static void WakeUpWaiters(ref AsyncOperation<bool> listTail, bool result, Exception error = null)
		{
			AsyncOperation<bool> asyncOperation = listTail;
			if (asyncOperation != null)
			{
				listTail = null;
				AsyncOperation<bool> next = asyncOperation.Next;
				AsyncOperation<bool> asyncOperation2 = next;
				do
				{
					AsyncOperation<bool> next2 = asyncOperation2.Next;
					asyncOperation2.Next = null;
					bool flag = ((error != null) ? asyncOperation2.TrySetException(error) : asyncOperation2.TrySetResult(result));
					asyncOperation2 = next2;
				}
				while (asyncOperation2 != next);
			}
		}

		internal static void FailOperations<T, TInner>(Deque<T> operations, Exception error) where T : AsyncOperation<TInner>
		{
			while (!operations.IsEmpty)
			{
				operations.DequeueHead().TrySetException(error);
			}
		}

		internal static Exception CreateInvalidCompletionException(Exception inner = null)
		{
			if (!(inner is OperationCanceledException))
			{
				if (inner == null || inner == s_doneWritingSentinel)
				{
					return new ChannelClosedException();
				}
				return new ChannelClosedException(inner);
			}
			return inner;
		}
	}
	public abstract class ChannelWriter<T>
	{
		public virtual bool TryComplete(Exception? error = null)
		{
			return false;
		}

		public abstract bool TryWrite(T item);

		public abstract ValueTask<bool> WaitToWriteAsync(CancellationToken cancellationToken = default(CancellationToken));

		public virtual ValueTask WriteAsync(T item, CancellationToken cancellationToken = default(CancellationToken))
		{
			try
			{
				return cancellationToken.IsCancellationRequested ? new ValueTask(Task.FromCanceled<T>(cancellationToken)) : (TryWrite(item) ? default(ValueTask) : WriteAsyncCore(item, cancellationToken));
			}
			catch (Exception exception)
			{
				return new ValueTask(Task.FromException(exception));
			}
		}

		private async ValueTask WriteAsyncCore(T innerItem, CancellationToken ct)
		{
			while (await WaitToWriteAsync(ct).ConfigureAwait(continueOnCapturedContext: false))
			{
				if (TryWrite(innerItem))
				{
					return;
				}
			}
			throw ChannelUtilities.CreateInvalidCompletionException();
		}

		public void Complete(Exception? error = null)
		{
			if (!TryComplete(error))
			{
				throw ChannelUtilities.CreateInvalidCompletionException();
			}
		}
	}
	public abstract class Channel<T> : Channel<T, T>
	{
	}
	public abstract class Channel<TWrite, TRead>
	{
		public ChannelReader<TRead> Reader { get; protected set; }

		public ChannelWriter<TWrite> Writer { get; protected set; }

		public static implicit operator ChannelReader<TRead>(Channel<TWrite, TRead> channel)
		{
			return channel.Reader;
		}

		public static implicit operator ChannelWriter<TWrite>(Channel<TWrite, TRead> channel)
		{
			return channel.Writer;
		}
	}
	internal interface IDebugEnumerable<T>
	{
		IEnumerator<T> GetEnumerator();
	}
	internal sealed class DebugEnumeratorDebugView<T>
	{
		[DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
		public T[] Items { get; }

		public DebugEnumeratorDebugView(IDebugEnumerable<T> enumerable)
		{
			List<T> list = new List<T>();
			foreach (T item in enumerable)
			{
				list.Add(item);
			}
			Items = list.ToArray();
		}
	}
	[DebuggerDisplay("Items = {ItemsCountForDebugger}, Closed = {ChannelIsClosedForDebugger}")]
	[DebuggerTypeProxy(typeof(DebugEnumeratorDebugView<>))]
	internal sealed class SingleConsumerUnboundedChannel<T> : Channel<T>, IDebugEnumerable<T>
	{
		[DebuggerDisplay("Items = {ItemsCountForDebugger}")]
		[DebuggerTypeProxy(typeof(DebugEnumeratorDebugView<>))]
		private sealed class UnboundedChannelReader : ChannelReader<T>, IDebugEnumerable<T>
		{
			internal readonly SingleConsumerUnboundedChannel<T> _parent;

			private readonly AsyncOperation<T> _readerSingleton;

			private readonly AsyncOperation<bool> _waiterSingleton;

			public override Task Completion => _parent._completion.Task;

			public override bool CanPeek => true;

			private int ItemsCountForDebugger => _parent._items.Count;

			internal UnboundedChannelReader(SingleConsumerUnboundedChannel<T> parent)
			{
				_parent = parent;
				_readerSingleton = new AsyncOperation<T>(parent._runContinuationsAsynchronously, default(CancellationToken), pooled: true);
				_waiterSingleton = new AsyncOperation<bool>(parent._runContinuationsAsynchronously, default(CancellationToken), pooled: true);
			}

			public override ValueTask<T> ReadAsync(CancellationToken cancellationToken)
			{
				if (cancellationToken.IsCancellationRequested)
				{
					return new ValueTask<T>(Task.FromCanceled<T>(cancellationToken));
				}
				if (TryRead(out var item))
				{
					return new ValueTask<T>(item);
				}
				SingleConsumerUnboundedChannel<T> parent = _parent;
				AsyncOperation<T> asyncOperation;
				AsyncOperation<T> asyncOperation2;
				lock (parent.SyncObj)
				{
					if (TryRead(out item))
					{
						return new ValueTask<T>(item);
					}
					if (parent._doneWriting != null)
					{
						return ChannelUtilities.GetInvalidCompletionValueTask<T>(parent._doneWriting);
					}
					asyncOperation = parent._blockedReader;
					if (!cancellationToken.CanBeCanceled && _readerSingleton.TryOwnAndReset())
					{
						asyncOperation2 = _readerSingleton;
						if (asyncOperation2 == asyncOperation)
						{
							asyncOperation = null;
						}
					}
					else
					{
						asyncOperation2 = new AsyncOperation<T>(_parent._runContinuationsAsynchronously, cancellationToken);
					}
					parent._blockedReader = asyncOperation2;
				}
				asyncOperation?.TrySetCanceled();
				return asyncOperation2.ValueTaskOfT;
			}

			public override bool TryRead([MaybeNullWhen(false)] out T item)
			{
				SingleConsumerUnboundedChannel<T> parent = _parent;
				if (parent._items.TryDequeue(out item))
				{
					if (parent._doneWriting != null && parent._items.IsEmpty)
					{
						ChannelUtilities.Complete(parent._completion, parent._doneWriting);
					}
					return true;
				}
				return false;
			}

			public override bool TryPeek([MaybeNullWhen(false)] out T item)
			{
				return _parent._items.TryPeek(out item);
			}

			public override ValueTask<bool> WaitToReadAsync(CancellationToken cancellationToken)
			{
				if (cancellationToken.IsCancellationRequested)
				{
					return new ValueTask<bool>(Task.FromCanceled<bool>(cancellationToken));
				}
				if (!_parent._items.IsEmpty)
				{
					return new ValueTask<bool>(result: true);
				}
				SingleConsumerUnboundedChannel<T> parent = _parent;
				AsyncOperation<bool> asyncOperation = null;
				AsyncOperation<bool> asyncOperation2;
				lock (parent.SyncObj)
				{
					if (!parent._items.IsEmpty)
					{
						return new ValueTask<bool>(result: true);
					}
					if (parent._doneWriting != null)
					{
						return (parent._doneWriting != ChannelUtilities.s_doneWritingSentinel) ? new ValueTask<bool>(Task.FromException<bool>(parent._doneWriting)) : default(ValueTask<bool>);
					}
					asyncOperation = parent._waitingReader;
					if (!cancellationToken.CanBeCanceled && _waiterSingleton.TryOwnAndReset())
					{
						asyncOperation2 = _waiterSingleton;
						if (asyncOperation2 == asyncOperation)
						{
							asyncOperation = null;
						}
					}
					else
					{
						asyncOperation2 = new AsyncOperation<bool>(_parent._runContinuationsAsynchronously, cancellationToken);
					}
					parent._waitingReader = asyncOperation2;
				}
				asyncOperation?.TrySetCanceled();
				return asyncOperation2.ValueTaskOfT;
			}

			IEnumerator<T> IDebugEnumerable<T>.GetEnumerator()
			{
				return _parent._items.GetEnumerator();
			}
		}

		[DebuggerDisplay("Items = {ItemsCountForDebugger}")]
		[DebuggerTypeProxy(typeof(DebugEnumeratorDebugView<>))]
		private sealed class UnboundedChannelWriter : ChannelWriter<T>, IDebugEnumerable<T>
		{
			internal readonly SingleConsumerUnboundedChannel<T> _parent;

			private int ItemsCountForDebugger => _parent._items.Count;

			internal UnboundedChannelWriter(SingleConsumerUnboundedChannel<T> parent)
			{
				_parent = parent;
			}

			public override bool TryComplete(Exception error)
			{
				AsyncOperation<T> asyncOperation = null;
				AsyncOperation<bool> asyncOperation2 = null;
				bool flag = false;
				SingleConsumerUnboundedChannel<T> parent = _parent;
				lock (parent.SyncObj)
				{
					if (parent._doneWriting != null)
					{
						return false;
					}
					parent._doneWriting = error ?? ChannelUtilities.s_doneWritingSentinel;
					if (parent._items.IsEmpty)
					{
						flag = true;
						if (parent._blockedReader != null)
						{
							asyncOperation = parent._blockedReader;
							parent._blockedReader = null;
						}
						if (parent._waitingReader != null)
						{
							asyncOperation2 = parent._waitingReader;
							parent._waitingReader = null;
						}
					}
				}
				if (flag)
				{
					ChannelUtilities.Complete(parent._completion, error);
				}
				if (asyncOperation != null)
				{
					error = ChannelUtilities.CreateInvalidCompletionException(error);
					asyncOperation.TrySetException(error);
				}
				if (asyncOperation2 != null)
				{
					if (error != null)
					{
						asyncOperation2.TrySetException(error);
					}
					else
					{
						asyncOperation2.TrySetResult(item: false);
					}
				}
				return true;
			}

			public override bool TryWrite(T item)
			{
				SingleConsumerUnboundedChannel<T> parent = _parent;
				AsyncOperation<T> asyncOperation;
				do
				{
					asyncOperation = null;
					AsyncOperation<bool> asyncOperation2 = null;
					lock (parent.SyncObj)
					{
						if (parent._doneWriting != null)
						{
							return false;
						}
						asyncOperation = parent._blockedReader;
						if (asyncOperation != null)
						{
							parent._blockedReader = null;
						}
						else
						{
							parent._items.Enqueue(item);
							asyncOperation2 = parent._waitingReader;
							if (asyncOperation2 == null)
							{
								return true;
							}
							parent._waitingReader = null;
						}
					}
					if (asyncOperation2 != null)
					{
						asyncOperation2.TrySetResult(item: true);
						return true;
					}
				}
				while (!asyncOperation.TrySetResult(item));
				return true;
			}

			public override ValueTask<bool> WaitToWriteAsync(CancellationToken cancellationToken)
			{
				Exception doneWriting = _parent._doneWriting;
				if (!cancellationToken.IsCancellationRequested)
				{
					if (doneWriting != null)
					{
						if (doneWriting == ChannelUtilities.s_doneWritingSentinel)
						{
							return default(ValueTask<bool>);
						}
						return new ValueTask<bool>(Task.FromException<bool>(doneWriting));
					}
					return new ValueTask<bool>(result: true);
				}
				return new ValueTask<bool>(Task.FromCanceled<bool>(cancellationToken));
			}

			public override ValueTask WriteAsync(T item, CancellationToken cancellationToken)
			{
				if (!cancellationToken.IsCancellationRequested)
				{
					if (!TryWrite(item))
					{
						return new ValueTask(Task.FromException(ChannelUtilities.CreateInvalidCompletionException(_parent._doneWriting)));
					}
					return default(ValueTask);
				}
				return new ValueTask(Task.FromCanceled(cancellationToken));
			}

			IEnumerator<T> IDebugEnumerable<T>.GetEnumerator()
			{
				return _parent._items.GetEnumerator();
			}
		}

		private readonly TaskCompletionSource _completion;

		private readonly SingleProducerSingleConsumerQueue<T> _items = new SingleProducerSingleConsumerQueue<T>();

		private readonly bool _runContinuationsAsynchronously;

		private volatile Exception _doneWriting;

		private AsyncOperation<T> _blockedReader;

		private AsyncOperation<bool> _waitingReader;

		private object SyncObj => _items;

		private int ItemsCountForDebugger => _items.Count;

		private bool ChannelIsClosedForDebugger => _doneWriting != null;

		internal SingleConsumerUnboundedChannel(bool runContinuationsAsynchronously)
		{
			_runContinuationsAsynchronously = runContinuationsAsynchronously;
			_completion = new TaskCompletionSource(runContinuationsAsynchronously ? TaskCreationOptions.RunContinuationsAsynchronously : TaskCreationOptions.None);
			base.Reader = new UnboundedChannelReader(this);
			base.Writer = new UnboundedChannelWriter(this);
		}

		IEnumerator<T> IDebugEnumerable<T>.GetEnumerator()
		{
			return _items.GetEnumerator();
		}
	}
	internal sealed class TaskCompletionSource : TaskCompletionSource<VoidResult>
	{
		public TaskCompletionSource(TaskCreationOptions creationOptions)
			: base(creationOptions)
		{
		}

		public bool TrySetResult()
		{
			return TrySetResult(default(VoidResult));
		}
	}
	[DebuggerDisplay("Items = {ItemsCountForDebugger}, Closed = {ChannelIsClosedForDebugger}")]
	[DebuggerTypeProxy(typeof(DebugEnumeratorDebugView<>))]
	internal sealed class UnboundedChannel<T> : Channel<T>, IDebugEnumerable<T>
	{
		[DebuggerDisplay("Items = {Count}")]
		[DebuggerTypeProxy(typeof(DebugEnumeratorDebugView<>))]
		private sealed class UnboundedChannelReader : ChannelReader<T>, IDebugEnumerable<T>
		{
			internal readonly UnboundedChannel<T> _parent;

			private readonly AsyncOperation<T> _readerSingleton;

			private readonly AsyncOperation<bool> _waiterSingleton;

			public override Task Completion => _parent._completion.Task;

			public override bool CanCount => true;

			public override bool CanPeek => true;

			public override int Count => _parent._items.Count;

			internal UnboundedChannelReader(UnboundedChannel<T> parent)
			{
				_parent = parent;
				_readerSingleton = new AsyncOperation<T>(parent._runContinuationsAsynchronously, default(CancellationToken), pooled: true);
				_waiterSingleton = new AsyncOperation<bool>(parent._runContinuationsAsynchronously, default(CancellationToken), pooled: true);
			}

			public override ValueTask<T> ReadAsync(CancellationToken cancellationToken)
			{
				if (cancellationToken.IsCancellationRequested)
				{
					return new ValueTask<T>(Task.FromCanceled<T>(cancellationToken));
				}
				UnboundedChannel<T> parent = _parent;
				if (parent._items.TryDequeue(out var result))
				{
					CompleteIfDone(parent);
					return new ValueTask<T>(result);
				}
				lock (parent.SyncObj)
				{
					if (parent._items.TryDequeue(out result))
					{
						CompleteIfDone(parent);
						return new ValueTask<T>(result);
					}
					if (parent._doneWriting != null)
					{
						return ChannelUtilities.GetInvalidCompletionValueTask<T>(parent._doneWriting);
					}
					if (!cancellationToken.CanBeCanceled)
					{
						AsyncOperation<T> readerSingleton = _readerSingleton;
						if (readerSingleton.TryOwnAndReset())
						{
							parent._blockedReaders.EnqueueTail(readerSingleton);
							return readerSingleton.ValueTaskOfT;
						}
					}
					AsyncOperation<T> asyncOperation = new AsyncOperation<T>(parent._runContinuationsAsynchronously, cancellationToken);
					parent._blockedReaders.EnqueueTail(asyncOperation);
					return asyncOperation.ValueTaskOfT;
				}
			}

			public override bool TryRead([MaybeNullWhen(false)] out T item)
			{
				UnboundedChannel<T> parent = _parent;
				if (parent._items.TryDequeue(out item))
				{
					CompleteIfDone(parent);
					return true;
				}
				item = default(T);
				return false;
			}

			public override bool TryPeek([MaybeNullWhen(false)] out T item)
			{
				return _parent._items.TryPeek(out item);
			}

			private static void CompleteIfDone(UnboundedChannel<T> parent)
			{
				if (parent._doneWriting != null && parent._items.IsEmpty)
				{
					ChannelUtilities.Complete(parent._completion, parent._doneWriting);
				}
			}

			public override ValueTask<bool> WaitToReadAsync(CancellationToken cancellationToken)
			{
				if (cancellationToken.IsCancellationRequested)
				{
					return new ValueTask<bool>(Task.FromCanceled<bool>(cancellationToken));
				}
				if (!_parent._items.IsEmpty)
				{
					return new ValueTask<bool>(result: true);
				}
				UnboundedChannel<T> parent = _parent;
				lock (parent.SyncObj)
				{
					if (!parent._items.IsEmpty)
					{
						return new ValueTask<bool>(result: true);
					}
					if (parent._doneWriting != null)
					{
						return (parent._doneWriting != ChannelUtilities.s_doneWritingSentinel) ? new ValueTask<bool>(Task.FromException<bool>(parent._doneWriting)) : default(ValueTask<bool>);
					}
					if (!cancellationToken.CanBeCanceled)
					{
						AsyncOperation<bool> waiterSingleton = _waiterSingleton;
						if (waiterSingleton.TryOwnAndReset())
						{
							ChannelUtilities.QueueWaiter(ref parent._waitingReadersTail, waiterSingleton);
							return waiterSingleton.ValueTaskOfT;
						}
					}
					AsyncOperation<bool> asyncOperation = new AsyncOperation<bool>(parent._runContinuationsAsynchronously, cancellationToken);
					ChannelUtilities.QueueWaiter(ref parent._waitingReadersTail, asyncOperation);
					return asyncOperation.ValueTaskOfT;
				}
			}

			IEnumerator<T> IDebugEnumerable<T>.GetEnumerator()
			{
				return _parent._items.GetEnumerator();
			}
		}

		[DebuggerDisplay("Items = {ItemsCountForDebugger}")]
		[DebuggerTypeProxy(typeof(DebugEnumeratorDebugView<>))]
		private sealed class UnboundedChannelWriter : ChannelWriter<T>, IDebugEnumerable<T>
		{
			internal readonly UnboundedChannel<T> _parent;

			private int ItemsCountForDebugger => _parent._items.Count;

			internal UnboundedChannelWriter(UnboundedChannel<T> parent)
			{
				_parent = parent;
			}

			public override bool TryComplete(Exception error)
			{
				UnboundedChannel<T> parent = _parent;
				bool isEmpty;
				lock (parent.SyncObj)
				{
					if (parent._doneWriting != null)
					{
						return false;
					}
					parent._doneWriting = error ?? ChannelUtilities.s_doneWritingSentinel;
					isEmpty = parent._items.IsEmpty;
				}
				if (isEmpty)
				{
					ChannelUtilities.Complete(parent._completion, error);
				}
				ChannelUtilities.FailOperations<AsyncOperation<T>, T>(parent._blockedReaders, ChannelUtilities.CreateInvalidCompletionException(error));
				ChannelUtilities.WakeUpWaiters(ref parent._waitingReadersTail, result: false, error);
				return true;
			}

			public override bool TryWrite(T item)
			{
				UnboundedChannel<T> parent = _parent;
				AsyncOperation<bool> listTail;
				while (true)
				{
					AsyncOperation<T> asyncOperation = null;
					listTail = null;
					lock (parent.SyncObj)
					{
						if (parent._doneWriting != null)
						{
							return false;
						}
						if (parent._blockedReaders.IsEmpty)
						{
							parent._items.Enqueue(item);
							listTail = parent._waitingReadersTail;
							if (listTail == null)
							{
								return true;
							}
							parent._waitingReadersTail = null;
						}
						else
						{
							asyncOperation = parent._blockedReaders.DequeueHead();
						}
					}
					if (asyncOperation == null)
					{
						break;
					}
					if (asyncOperation.TrySetResult(item))
					{
						return true;
					}
				}
				ChannelUtilities.WakeUpWaiters(ref listTail, result: true);
				return true;
			}

			public override ValueTask<bool> WaitToWriteAsync(CancellationToken cancellationToken)
			{
				Exception doneWriting = _parent._doneWriting;
				if (!cancellationToken.IsCancellationRequested)
				{
					if (doneWriting != null)
					{
						if (doneWriting == ChannelUtilities.s_doneWritingSentinel)
						{
							return default(ValueTask<bool>);
						}
						return new ValueTask<bool>(Task.FromException<bool>(doneWriting));
					}
					return new ValueTask<bool>(result: true);
				}
				return new ValueTask<bool>(Task.FromCanceled<bool>(cancellationToken));
			}

			public override ValueTask WriteAsync(T item, CancellationToken cancellationToken)
			{
				if (!cancellationToken.IsCancellationRequested)
				{
					if (!TryWrite(item))
					{
						return new ValueTask(Task.FromException(ChannelUtilities.CreateInvalidCompletionException(_parent._doneWriting)));
					}
					return default(ValueTask);
				}
				return new ValueTask(Task.FromCanceled(cancellationToken));
			}

			IEnumerator<T> IDebugEnumerable<T>.GetEnumerator()
			{
				return _parent._items.GetEnumerator();
			}
		}

		private readonly TaskCompletionSource _completion;

		private readonly ConcurrentQueue<T> _items = new ConcurrentQueue<T>();

		private readonly Deque<AsyncOperation<T>> _blockedReaders = new Deque<AsyncOperation<T>>();

		private readonly bool _runContinuationsAsynchronously;

		private AsyncOperation<bool> _waitingReadersTail;

		private Exception _doneWriting;

		private object SyncObj => _items;

		private int ItemsCountForDebugger => _items.Count;

		private bool ChannelIsClosedForDebugger => _doneWriting != null;

		internal UnboundedChannel(bool runContinuationsAsynchronously)
		{
			_runContinuationsAsynchronously = runContinuationsAsynchronously;
			_completion = new TaskCompletionSource(runContinuationsAsynchronously ? TaskCreationOptions.RunContinuationsAsynchronously : TaskCreationOptions.None);
			base.Reader = new UnboundedChannelReader(this);
			base.Writer = new UnboundedChannelWriter(this);
		}

		[Conditional("DEBUG")]
		private void AssertInvariants()
		{
			if (!_items.IsEmpty)
			{
				_ = _runContinuationsAsynchronously;
			}
			if (!_blockedReaders.IsEmpty || _waitingReadersTail != null)
			{
				_ = _runContinuationsAsynchronously;
			}
			_ = _completion.Task.IsCompleted;
		}

		IEnumerator<T> IDebugEnumerable<T>.GetEnumerator()
		{
			return _items.GetEnumerator();
		}
	}
}