Decompiled source of BurstsOfRain v0.1.0

plugins/.RuntimeAssemblies/System.Runtime.dll

Decompiled 3 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Runtime;
using System.Runtime.CompilerServices;
using System.Runtime.ExceptionServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Text;
using System.Threading;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("System.Runtime")]
[assembly: AssemblyDescription("System.Runtime")]
[assembly: AssemblyDefaultAlias("System.Runtime")]
[assembly: AssemblyCompany("Mono development team")]
[assembly: AssemblyProduct("Mono Common Language Infrastructure")]
[assembly: AssemblyCopyright("(c) Various Mono authors")]
[assembly: AssemblyInformationalVersion("4.0.0.0")]
[assembly: AssemblyFileVersion("4.0.0.0")]
[assembly: AssemblyVersion("4.1.0.0")]
[assembly: TypeForwardedTo(typeof(Action))]
[assembly: TypeForwardedTo(typeof(Action<>))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, >))]
[assembly: TypeForwardedTo(typeof(Action<, , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Activator))]
[assembly: TypeForwardedTo(typeof(ArgumentException))]
[assembly: TypeForwardedTo(typeof(ArgumentNullException))]
[assembly: TypeForwardedTo(typeof(ArgumentOutOfRangeException))]
[assembly: TypeForwardedTo(typeof(ArithmeticException))]
[assembly: TypeForwardedTo(typeof(Array))]
[assembly: TypeForwardedTo(typeof(ArraySegment<>))]
[assembly: TypeForwardedTo(typeof(ArrayTypeMismatchException))]
[assembly: TypeForwardedTo(typeof(AsyncCallback))]
[assembly: TypeForwardedTo(typeof(Attribute))]
[assembly: TypeForwardedTo(typeof(AttributeTargets))]
[assembly: TypeForwardedTo(typeof(AttributeUsageAttribute))]
[assembly: TypeForwardedTo(typeof(BadImageFormatException))]
[assembly: TypeForwardedTo(typeof(bool))]
[assembly: TypeForwardedTo(typeof(Buffer))]
[assembly: TypeForwardedTo(typeof(byte))]
[assembly: TypeForwardedTo(typeof(char))]
[assembly: TypeForwardedTo(typeof(CLSCompliantAttribute))]
[assembly: TypeForwardedTo(typeof(DictionaryEntry))]
[assembly: TypeForwardedTo(typeof(ICollection<>))]
[assembly: TypeForwardedTo(typeof(IComparer<>))]
[assembly: TypeForwardedTo(typeof(IDictionary<, >))]
[assembly: TypeForwardedTo(typeof(IEnumerable<>))]
[assembly: TypeForwardedTo(typeof(IEnumerator<>))]
[assembly: TypeForwardedTo(typeof(IEqualityComparer<>))]
[assembly: TypeForwardedTo(typeof(IList<>))]
[assembly: TypeForwardedTo(typeof(IReadOnlyCollection<>))]
[assembly: TypeForwardedTo(typeof(IReadOnlyDictionary<, >))]
[assembly: TypeForwardedTo(typeof(IReadOnlyList<>))]
[assembly: TypeForwardedTo(typeof(ISet<>))]
[assembly: TypeForwardedTo(typeof(KeyNotFoundException))]
[assembly: TypeForwardedTo(typeof(KeyValuePair<, >))]
[assembly: TypeForwardedTo(typeof(ICollection))]
[assembly: TypeForwardedTo(typeof(IComparer))]
[assembly: TypeForwardedTo(typeof(IDictionary))]
[assembly: TypeForwardedTo(typeof(IDictionaryEnumerator))]
[assembly: TypeForwardedTo(typeof(IEnumerable))]
[assembly: TypeForwardedTo(typeof(IEnumerator))]
[assembly: TypeForwardedTo(typeof(IEqualityComparer))]
[assembly: TypeForwardedTo(typeof(IList))]
[assembly: TypeForwardedTo(typeof(IStructuralComparable))]
[assembly: TypeForwardedTo(typeof(IStructuralEquatable))]
[assembly: TypeForwardedTo(typeof(Collection<>))]
[assembly: TypeForwardedTo(typeof(ReadOnlyCollection<>))]
[assembly: TypeForwardedTo(typeof(Comparison<>))]
[assembly: TypeForwardedTo(typeof(DefaultValueAttribute))]
[assembly: TypeForwardedTo(typeof(EditorBrowsableAttribute))]
[assembly: TypeForwardedTo(typeof(EditorBrowsableState))]
[assembly: TypeForwardedTo(typeof(DateTime))]
[assembly: TypeForwardedTo(typeof(DateTimeKind))]
[assembly: TypeForwardedTo(typeof(DateTimeOffset))]
[assembly: TypeForwardedTo(typeof(DayOfWeek))]
[assembly: TypeForwardedTo(typeof(decimal))]
[assembly: TypeForwardedTo(typeof(Delegate))]
[assembly: TypeForwardedTo(typeof(ConditionalAttribute))]
[assembly: TypeForwardedTo(typeof(DebuggableAttribute))]
[assembly: TypeForwardedTo(typeof(DivideByZeroException))]
[assembly: TypeForwardedTo(typeof(double))]
[assembly: TypeForwardedTo(typeof(Enum))]
[assembly: TypeForwardedTo(typeof(EventArgs))]
[assembly: TypeForwardedTo(typeof(EventHandler))]
[assembly: TypeForwardedTo(typeof(EventHandler<>))]
[assembly: TypeForwardedTo(typeof(Exception))]
[assembly: TypeForwardedTo(typeof(FieldAccessException))]
[assembly: TypeForwardedTo(typeof(FlagsAttribute))]
[assembly: TypeForwardedTo(typeof(FormatException))]
[assembly: TypeForwardedTo(typeof(FormattableString))]
[assembly: TypeForwardedTo(typeof(Func<>))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, >))]
[assembly: TypeForwardedTo(typeof(Func<, , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(GC))]
[assembly: TypeForwardedTo(typeof(GCCollectionMode))]
[assembly: TypeForwardedTo(typeof(DateTimeStyles))]
[assembly: TypeForwardedTo(typeof(NumberStyles))]
[assembly: TypeForwardedTo(typeof(TimeSpanStyles))]
[assembly: TypeForwardedTo(typeof(Guid))]
[assembly: TypeForwardedTo(typeof(IAsyncResult))]
[assembly: TypeForwardedTo(typeof(IComparable))]
[assembly: TypeForwardedTo(typeof(IComparable<>))]
[assembly: TypeForwardedTo(typeof(IConvertible))]
[assembly: TypeForwardedTo(typeof(ICustomFormatter))]
[assembly: TypeForwardedTo(typeof(IDisposable))]
[assembly: TypeForwardedTo(typeof(IEquatable<>))]
[assembly: TypeForwardedTo(typeof(IFormatProvider))]
[assembly: TypeForwardedTo(typeof(IFormattable))]
[assembly: TypeForwardedTo(typeof(IndexOutOfRangeException))]
[assembly: TypeForwardedTo(typeof(InsufficientExecutionStackException))]
[assembly: TypeForwardedTo(typeof(short))]
[assembly: TypeForwardedTo(typeof(int))]
[assembly: TypeForwardedTo(typeof(long))]
[assembly: TypeForwardedTo(typeof(IntPtr))]
[assembly: TypeForwardedTo(typeof(InvalidCastException))]
[assembly: TypeForwardedTo(typeof(InvalidOperationException))]
[assembly: TypeForwardedTo(typeof(InvalidProgramException))]
[assembly: TypeForwardedTo(typeof(InvalidTimeZoneException))]
[assembly: TypeForwardedTo(typeof(DirectoryNotFoundException))]
[assembly: TypeForwardedTo(typeof(FileLoadException))]
[assembly: TypeForwardedTo(typeof(FileNotFoundException))]
[assembly: TypeForwardedTo(typeof(IOException))]
[assembly: TypeForwardedTo(typeof(PathTooLongException))]
[assembly: TypeForwardedTo(typeof(IObservable<>))]
[assembly: TypeForwardedTo(typeof(IObserver<>))]
[assembly: TypeForwardedTo(typeof(IProgress<>))]
[assembly: TypeForwardedTo(typeof(Lazy<>))]
[assembly: TypeForwardedTo(typeof(Lazy<, >))]
[assembly: TypeForwardedTo(typeof(MemberAccessException))]
[assembly: TypeForwardedTo(typeof(MethodAccessException))]
[assembly: TypeForwardedTo(typeof(MissingFieldException))]
[assembly: TypeForwardedTo(typeof(MissingMemberException))]
[assembly: TypeForwardedTo(typeof(MissingMethodException))]
[assembly: TypeForwardedTo(typeof(MTAThreadAttribute))]
[assembly: TypeForwardedTo(typeof(MulticastDelegate))]
[assembly: TypeForwardedTo(typeof(NotImplementedException))]
[assembly: TypeForwardedTo(typeof(NotSupportedException))]
[assembly: TypeForwardedTo(typeof(Nullable))]
[assembly: TypeForwardedTo(typeof(Nullable<>))]
[assembly: TypeForwardedTo(typeof(NullReferenceException))]
[assembly: TypeForwardedTo(typeof(object))]
[assembly: TypeForwardedTo(typeof(ObjectDisposedException))]
[assembly: TypeForwardedTo(typeof(ObsoleteAttribute))]
[assembly: TypeForwardedTo(typeof(OutOfMemoryException))]
[assembly: TypeForwardedTo(typeof(OverflowException))]
[assembly: TypeForwardedTo(typeof(ParamArrayAttribute))]
[assembly: TypeForwardedTo(typeof(PlatformNotSupportedException))]
[assembly: TypeForwardedTo(typeof(Predicate<>))]
[assembly: TypeForwardedTo(typeof(RankException))]
[assembly: TypeForwardedTo(typeof(AssemblyCompanyAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyConfigurationAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyCopyrightAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyCultureAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyDefaultAliasAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyDelaySignAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyDescriptionAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyFileVersionAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyFlagsAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyInformationalVersionAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyKeyFileAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyKeyNameAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyMetadataAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyNameFlags))]
[assembly: TypeForwardedTo(typeof(AssemblyProductAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblySignatureKeyAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyTitleAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyTrademarkAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyVersionAttribute))]
[assembly: TypeForwardedTo(typeof(DefaultMemberAttribute))]
[assembly: TypeForwardedTo(typeof(ProcessorArchitecture))]
[assembly: TypeForwardedTo(typeof(AccessedThroughPropertyAttribute))]
[assembly: TypeForwardedTo(typeof(AsyncStateMachineAttribute))]
[assembly: TypeForwardedTo(typeof(CallerFilePathAttribute))]
[assembly: TypeForwardedTo(typeof(CallerLineNumberAttribute))]
[assembly: TypeForwardedTo(typeof(CallerMemberNameAttribute))]
[assembly: TypeForwardedTo(typeof(CompilationRelaxationsAttribute))]
[assembly: TypeForwardedTo(typeof(CompilerGeneratedAttribute))]
[assembly: TypeForwardedTo(typeof(ConditionalWeakTable<, >))]
[assembly: TypeForwardedTo(typeof(CustomConstantAttribute))]
[assembly: TypeForwardedTo(typeof(DateTimeConstantAttribute))]
[assembly: TypeForwardedTo(typeof(DecimalConstantAttribute))]
[assembly: TypeForwardedTo(typeof(DisablePrivateReflectionAttribute))]
[assembly: TypeForwardedTo(typeof(ExtensionAttribute))]
[assembly: TypeForwardedTo(typeof(FixedBufferAttribute))]
[assembly: TypeForwardedTo(typeof(FormattableStringFactory))]
[assembly: TypeForwardedTo(typeof(IndexerNameAttribute))]
[assembly: TypeForwardedTo(typeof(InternalsVisibleToAttribute))]
[assembly: TypeForwardedTo(typeof(IsConst))]
[assembly: TypeForwardedTo(typeof(IStrongBox))]
[assembly: TypeForwardedTo(typeof(IsVolatile))]
[assembly: TypeForwardedTo(typeof(IteratorStateMachineAttribute))]
[assembly: TypeForwardedTo(typeof(MethodImplAttribute))]
[assembly: TypeForwardedTo(typeof(MethodImplOptions))]
[assembly: TypeForwardedTo(typeof(ReferenceAssemblyAttribute))]
[assembly: TypeForwardedTo(typeof(RuntimeCompatibilityAttribute))]
[assembly: TypeForwardedTo(typeof(RuntimeHelpers))]
[assembly: TypeForwardedTo(typeof(StateMachineAttribute))]
[assembly: TypeForwardedTo(typeof(StrongBox<>))]
[assembly: TypeForwardedTo(typeof(TypeForwardedFromAttribute))]
[assembly: TypeForwardedTo(typeof(TypeForwardedToAttribute))]
[assembly: TypeForwardedTo(typeof(UnsafeValueTypeAttribute))]
[assembly: TypeForwardedTo(typeof(ExceptionDispatchInfo))]
[assembly: TypeForwardedTo(typeof(GCLargeObjectHeapCompactionMode))]
[assembly: TypeForwardedTo(typeof(GCLatencyMode))]
[assembly: TypeForwardedTo(typeof(GCSettings))]
[assembly: TypeForwardedTo(typeof(CharSet))]
[assembly: TypeForwardedTo(typeof(ComVisibleAttribute))]
[assembly: TypeForwardedTo(typeof(FieldOffsetAttribute))]
[assembly: TypeForwardedTo(typeof(GCHandle))]
[assembly: TypeForwardedTo(typeof(GCHandleType))]
[assembly: TypeForwardedTo(typeof(LayoutKind))]
[assembly: TypeForwardedTo(typeof(OutAttribute))]
[assembly: TypeForwardedTo(typeof(StructLayoutAttribute))]
[assembly: TypeForwardedTo(typeof(TargetFrameworkAttribute))]
[assembly: TypeForwardedTo(typeof(RuntimeFieldHandle))]
[assembly: TypeForwardedTo(typeof(RuntimeMethodHandle))]
[assembly: TypeForwardedTo(typeof(RuntimeTypeHandle))]
[assembly: TypeForwardedTo(typeof(sbyte))]
[assembly: TypeForwardedTo(typeof(AllowPartiallyTrustedCallersAttribute))]
[assembly: TypeForwardedTo(typeof(SecurityCriticalAttribute))]
[assembly: TypeForwardedTo(typeof(SecurityException))]
[assembly: TypeForwardedTo(typeof(SecuritySafeCriticalAttribute))]
[assembly: TypeForwardedTo(typeof(SecurityTransparentAttribute))]
[assembly: TypeForwardedTo(typeof(VerificationException))]
[assembly: TypeForwardedTo(typeof(float))]
[assembly: TypeForwardedTo(typeof(STAThreadAttribute))]
[assembly: TypeForwardedTo(typeof(string))]
[assembly: TypeForwardedTo(typeof(StringComparison))]
[assembly: TypeForwardedTo(typeof(StringSplitOptions))]
[assembly: TypeForwardedTo(typeof(StringBuilder))]
[assembly: TypeForwardedTo(typeof(LazyThreadSafetyMode))]
[assembly: TypeForwardedTo(typeof(Timeout))]
[assembly: TypeForwardedTo(typeof(WaitHandle))]
[assembly: TypeForwardedTo(typeof(ThreadStaticAttribute))]
[assembly: TypeForwardedTo(typeof(TimeoutException))]
[assembly: TypeForwardedTo(typeof(TimeSpan))]
[assembly: TypeForwardedTo(typeof(TimeZoneInfo))]
[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<, , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Type))]
[assembly: TypeForwardedTo(typeof(TypeAccessException))]
[assembly: TypeForwardedTo(typeof(TypeCode))]
[assembly: TypeForwardedTo(typeof(TypeInitializationException))]
[assembly: TypeForwardedTo(typeof(TypeLoadException))]
[assembly: TypeForwardedTo(typeof(ushort))]
[assembly: TypeForwardedTo(typeof(uint))]
[assembly: TypeForwardedTo(typeof(ulong))]
[assembly: TypeForwardedTo(typeof(UIntPtr))]
[assembly: TypeForwardedTo(typeof(UnauthorizedAccessException))]
[assembly: TypeForwardedTo(typeof(Uri))]
[assembly: TypeForwardedTo(typeof(UriComponents))]
[assembly: TypeForwardedTo(typeof(UriFormat))]
[assembly: TypeForwardedTo(typeof(UriFormatException))]
[assembly: TypeForwardedTo(typeof(UriHostNameType))]
[assembly: TypeForwardedTo(typeof(UriKind))]
[assembly: TypeForwardedTo(typeof(ValueType))]
[assembly: TypeForwardedTo(typeof(Version))]
[assembly: TypeForwardedTo(typeof(void))]
[assembly: TypeForwardedTo(typeof(WeakReference))]
[assembly: TypeForwardedTo(typeof(WeakReference<>))]

plugins/.RuntimeAssemblies/Unity.Burst.dll

Decompiled 3 weeks ago
#define DEBUG
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Permissions;
using System.Text;
using AOT;
using Microsoft.CodeAnalysis;
using Unity.Burst.LowLevel;
using Unity.Collections.LowLevel.Unsafe;
using Unity.Jobs.LowLevel.Unsafe;
using UnityEngine;
using UnityEngine.Scripting;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: InternalsVisibleTo("Unity.Burst.CodeGen")]
[assembly: InternalsVisibleTo("Unity.Burst.Editor")]
[assembly: InternalsVisibleTo("Unity.Burst.Tests.UnitTests")]
[assembly: InternalsVisibleTo("Unity.Burst.Editor.Tests")]
[assembly: InternalsVisibleTo("Unity.Burst.Benchmarks")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.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 IsUnmanagedAttribute : Attribute
	{
	}
}
namespace Unity.Burst
{
	public enum OptimizeFor
	{
		Default,
		Performance,
		Size,
		FastCompilation,
		Balanced
	}
	public enum FloatMode
	{
		Default,
		Strict,
		Deterministic,
		Fast
	}
	public enum FloatPrecision
	{
		Standard,
		High,
		Medium,
		Low
	}
	[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method)]
	public class BurstCompileAttribute : Attribute
	{
		internal bool? _compileSynchronously;

		internal bool? _debug;

		internal bool? _disableSafetyChecks;

		internal bool? _disableDirectCall;

		public FloatMode FloatMode { get; set; }

		public FloatPrecision FloatPrecision { get; set; }

		public bool CompileSynchronously
		{
			get
			{
				return _compileSynchronously.HasValue && _compileSynchronously.Value;
			}
			set
			{
				_compileSynchronously = value;
			}
		}

		public bool Debug
		{
			get
			{
				return _debug.HasValue && _debug.Value;
			}
			set
			{
				_debug = value;
			}
		}

		public bool DisableSafetyChecks
		{
			get
			{
				return _disableSafetyChecks.HasValue && _disableSafetyChecks.Value;
			}
			set
			{
				_disableSafetyChecks = value;
			}
		}

		public bool DisableDirectCall
		{
			get
			{
				return _disableDirectCall.HasValue && _disableDirectCall.Value;
			}
			set
			{
				_disableDirectCall = value;
			}
		}

		public OptimizeFor OptimizeFor { get; set; }

		internal string[] Options { get; set; }

		public BurstCompileAttribute()
		{
		}

		public BurstCompileAttribute(FloatPrecision floatPrecision, FloatMode floatMode)
		{
			FloatMode = floatMode;
			FloatPrecision = floatPrecision;
		}

		internal BurstCompileAttribute(string[] options)
		{
			Options = options;
		}
	}
	public static class BurstCompiler
	{
		private class CommandBuilder
		{
			private StringBuilder _builder;

			private bool _hasArgs;

			public CommandBuilder()
			{
				_builder = new StringBuilder();
				_hasArgs = false;
			}

			public CommandBuilder Begin(string cmd)
			{
				_builder.Clear();
				_hasArgs = false;
				_builder.Append(cmd);
				return this;
			}

			public CommandBuilder With(string arg)
			{
				if (!_hasArgs)
				{
					_builder.Append(' ');
				}
				_hasArgs = true;
				_builder.Append(arg);
				return this;
			}

			public CommandBuilder With(IntPtr arg)
			{
				if (!_hasArgs)
				{
					_builder.Append(' ');
				}
				_hasArgs = true;
				_builder.AppendFormat("0x{0:X16}", arg.ToInt64());
				return this;
			}

			public CommandBuilder And(char sep = '|')
			{
				_builder.Append(sep);
				return this;
			}

			public string SendToCompiler()
			{
				return SendRawCommandToCompiler(_builder.ToString());
			}
		}

		[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
		internal class StaticTypeReinitAttribute : Attribute
		{
			public readonly Type reinitType;

			public StaticTypeReinitAttribute(Type toReinit)
			{
				reinitType = toReinit;
			}
		}

		[BurstCompile]
		internal static class BurstCompilerHelper
		{
			[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
			private delegate bool IsBurstEnabledDelegate();

			private static readonly IsBurstEnabledDelegate IsBurstEnabledImpl = IsBurstEnabled;

			public static readonly bool IsBurstGenerated = IsCompiledByBurst(IsBurstEnabledImpl);

			[BurstCompile]
			[MonoPInvokeCallback(typeof(IsBurstEnabledDelegate))]
			private static bool IsBurstEnabled()
			{
				bool value = true;
				DiscardedMethod(ref value);
				return value;
			}

			[BurstDiscard]
			private static void DiscardedMethod(ref bool value)
			{
				value = false;
			}

			private unsafe static bool IsCompiledByBurst(Delegate del)
			{
				int num = BurstCompilerService.CompileAsyncDelegateMethod((object)del, string.Empty);
				return BurstCompilerService.GetAsyncCompiledAsyncDelegateMethod(num) != null;
			}
		}

		private class FakeDelegate
		{
			[Preserve]
			public MethodInfo Method { get; }

			public FakeDelegate(MethodInfo method)
			{
				Method = method;
			}
		}

		[ThreadStatic]
		private static CommandBuilder _cmdBuilder;

		internal static bool _IsEnabled;

		public static readonly BurstCompilerOptions Options = new BurstCompilerOptions(isGlobal: true);

		internal static Action OnCompileILPPMethod2;

		private static readonly MethodInfo DummyMethodInfo = typeof(BurstCompiler).GetMethod("DummyMethod", BindingFlags.Static | BindingFlags.NonPublic);

		public static bool IsEnabled => _IsEnabled && BurstCompilerHelper.IsBurstGenerated;

		public static bool IsLoadAdditionalLibrarySupported()
		{
			return IsApiAvailable("LoadBurstLibrary");
		}

		private static CommandBuilder BeginCompilerCommand(string cmd)
		{
			if (_cmdBuilder == null)
			{
				_cmdBuilder = new CommandBuilder();
			}
			return _cmdBuilder.Begin(cmd);
		}

		public static void SetExecutionMode(BurstExecutionEnvironment mode)
		{
			BurstCompilerService.SetCurrentExecutionMode((uint)mode);
		}

		public static BurstExecutionEnvironment GetExecutionMode()
		{
			return (BurstExecutionEnvironment)BurstCompilerService.GetCurrentExecutionMode();
		}

		internal unsafe static T CompileDelegate<T>(T delegateMethod) where T : class
		{
			void* ptr = Compile(delegateMethod, isFunctionPointer: false);
			object delegateForFunctionPointer = Marshal.GetDelegateForFunctionPointer((IntPtr)ptr, delegateMethod.GetType());
			return (T)delegateForFunctionPointer;
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		private static void VerifyDelegateIsNotMulticast<T>(T delegateMethod) where T : class
		{
			Delegate @delegate = delegateMethod as Delegate;
			if (@delegate.GetInvocationList().Length > 1)
			{
				throw new InvalidOperationException($"Burst does not support multicast delegates, please use a regular delegate for `{delegateMethod}'");
			}
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		private static void VerifyDelegateHasCorrectUnmanagedFunctionPointerAttribute<T>(T delegateMethod) where T : class
		{
			UnmanagedFunctionPointerAttribute customAttribute = delegateMethod.GetType().GetCustomAttribute<UnmanagedFunctionPointerAttribute>();
			if (customAttribute == null || customAttribute.CallingConvention != CallingConvention.Cdecl)
			{
				Debug.LogWarning((object)("The delegate type " + delegateMethod.GetType().FullName + " should be decorated with [UnmanagedFunctionPointer(CallingConvention.Cdecl)] to ensure runtime interoperabilty between managed code and Burst-compiled code."));
			}
		}

		[Obsolete("This method will be removed in a future version of Burst")]
		public static IntPtr CompileILPPMethod(RuntimeMethodHandle burstMethodHandle, RuntimeMethodHandle managedMethodHandle, RuntimeTypeHandle delegateTypeHandle)
		{
			throw new NotImplementedException();
		}

		public unsafe static IntPtr CompileILPPMethod2(RuntimeMethodHandle burstMethodHandle)
		{
			if (burstMethodHandle.Value == IntPtr.Zero)
			{
				throw new ArgumentNullException("burstMethodHandle");
			}
			OnCompileILPPMethod2?.Invoke();
			MethodInfo methodInfo = (MethodInfo)MethodBase.GetMethodFromHandle(burstMethodHandle);
			return (IntPtr)Compile(new FakeDelegate(methodInfo), methodInfo, isFunctionPointer: true, isILPostProcessing: true);
		}

		[Obsolete("This method will be removed in a future version of Burst")]
		public unsafe static void* GetILPPMethodFunctionPointer(IntPtr ilppMethod)
		{
			throw new NotImplementedException();
		}

		public unsafe static void* GetILPPMethodFunctionPointer2(IntPtr ilppMethod, RuntimeMethodHandle managedMethodHandle, RuntimeTypeHandle delegateTypeHandle)
		{
			if (ilppMethod == IntPtr.Zero)
			{
				throw new ArgumentNullException("ilppMethod");
			}
			if (managedMethodHandle.Value == IntPtr.Zero)
			{
				throw new ArgumentNullException("managedMethodHandle");
			}
			if (delegateTypeHandle.Value == IntPtr.Zero)
			{
				throw new ArgumentNullException("delegateTypeHandle");
			}
			return ilppMethod.ToPointer();
		}

		[Obsolete("This method will be removed in a future version of Burst")]
		public unsafe static void* CompileUnsafeStaticMethod(RuntimeMethodHandle handle)
		{
			throw new NotImplementedException();
		}

		public unsafe static FunctionPointer<T> CompileFunctionPointer<T>(T delegateMethod) where T : class
		{
			void* value = Compile(delegateMethod, isFunctionPointer: true);
			return new FunctionPointer<T>(new IntPtr(value));
		}

		private unsafe static void* Compile(object delegateObj, bool isFunctionPointer)
		{
			if (!(delegateObj is Delegate))
			{
				throw new ArgumentException("object instance must be a System.Delegate", "delegateObj");
			}
			Delegate @delegate = (Delegate)delegateObj;
			return Compile(@delegate, @delegate.Method, isFunctionPointer, isILPostProcessing: false);
		}

		private unsafe static void* Compile(object delegateObj, MethodInfo methodInfo, bool isFunctionPointer, bool isILPostProcessing)
		{
			if (delegateObj == null)
			{
				throw new ArgumentNullException("delegateObj");
			}
			if (delegateObj.GetType().IsGenericType)
			{
				throw new InvalidOperationException($"The delegate type `{delegateObj.GetType()}` must be a non-generic type");
			}
			if (!methodInfo.IsStatic)
			{
				throw new InvalidOperationException($"The method `{methodInfo}` must be static. Instance methods are not supported");
			}
			if (methodInfo.IsGenericMethod)
			{
				throw new InvalidOperationException($"The method `{methodInfo}` must be a non-generic method");
			}
			Delegate @delegate = null;
			if (!isILPostProcessing)
			{
				@delegate = delegateObj as Delegate;
			}
			Delegate delegate2 = delegateObj as Delegate;
			if (BurstCompilerOptions.HasBurstCompileAttribute(methodInfo))
			{
				void* ptr;
				if (Options.EnableBurstCompilation && BurstCompilerHelper.IsBurstGenerated)
				{
					int num = BurstCompilerService.CompileAsyncDelegateMethod(delegateObj, string.Empty);
					ptr = BurstCompilerService.GetAsyncCompiledAsyncDelegateMethod(num);
				}
				else
				{
					if (isILPostProcessing)
					{
						return null;
					}
					GCHandle.Alloc(@delegate);
					ptr = (void*)Marshal.GetFunctionPointerForDelegate(@delegate);
				}
				if (ptr == null)
				{
					throw new InvalidOperationException($"Burst failed to compile the function pointer `{methodInfo}`");
				}
				return ptr;
			}
			throw new InvalidOperationException($"Burst cannot compile the function pointer `{methodInfo}` because the `[BurstCompile]` attribute is missing");
		}

		internal static void Shutdown()
		{
		}

		internal static void Cancel()
		{
		}

		internal static bool IsCurrentCompilationDone()
		{
			return true;
		}

		internal static void Enable()
		{
		}

		internal static void Disable()
		{
		}

		internal static bool IsHostEditorArm()
		{
			return false;
		}

		internal static void TriggerUnsafeStaticMethodRecompilation()
		{
			Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
			foreach (Assembly element in assemblies)
			{
				IEnumerable<Attribute> enumerable = from x in element.GetCustomAttributes()
					where x.GetType().FullName == "Unity.Burst.BurstCompiler+StaticTypeReinitAttribute"
					select x;
				foreach (Attribute item in enumerable)
				{
					StaticTypeReinitAttribute staticTypeReinitAttribute = item as StaticTypeReinitAttribute;
					Type reinitType = staticTypeReinitAttribute.reinitType;
					MethodInfo method = reinitType.GetMethod("Constructor", BindingFlags.Static | BindingFlags.Public);
					method.Invoke(null, new object[0]);
				}
			}
		}

		internal static void TriggerRecompilation()
		{
		}

		internal static void UnloadAdditionalLibraries()
		{
			SendCommandToCompiler("$unload_burst_natives");
		}

		internal static void InitialiseDebuggerHooks()
		{
			if (IsApiAvailable("BurstManagedDebuggerPluginV1") && string.IsNullOrEmpty(Environment.GetEnvironmentVariable("BURST_DISABLE_DEBUGGER_HOOKS")))
			{
				SendCommandToCompiler(SendCommandToCompiler("$request_debug_command"));
			}
		}

		internal static bool IsApiAvailable(string apiName)
		{
			return SendCommandToCompiler("$is_native_api_available", apiName) == "True";
		}

		internal static int RequestSetProtocolVersion(int version)
		{
			string text = SendCommandToCompiler("$request_set_protocol_version_editor", $"{version}");
			if (string.IsNullOrEmpty(text) || !int.TryParse(text, out var result))
			{
				result = 0;
			}
			SendCommandToCompiler("$set_protocol_version_burst", $"{result}");
			return result;
		}

		internal static void Initialize(string[] assemblyFolders, string[] ignoreAssemblies)
		{
		}

		internal static void NotifyCompilationStarted(string[] assemblyFolders, string[] ignoreAssemblies)
		{
		}

		internal static void NotifyAssemblyCompilationNotRequired(string assemblyName)
		{
		}

		internal static void NotifyAssemblyCompilationFinished(string assemblyName, string[] defines)
		{
		}

		internal static void NotifyCompilationFinished()
		{
		}

		internal static string AotCompilation(string[] assemblyFolders, string[] assemblyRoots, string options)
		{
			return "failed";
		}

		internal static void SetProfilerCallbacks()
		{
		}

		private static string SendRawCommandToCompiler(string command)
		{
			string disassembly = BurstCompilerService.GetDisassembly(DummyMethodInfo, command);
			if (!string.IsNullOrEmpty(disassembly))
			{
				return disassembly.TrimStart('\n');
			}
			return "";
		}

		private static string SendCommandToCompiler(string commandName, string commandArgs = null)
		{
			if (commandName == null)
			{
				throw new ArgumentNullException("commandName");
			}
			if (commandArgs == null)
			{
				return SendRawCommandToCompiler(commandName);
			}
			return BeginCompilerCommand(commandName).With(commandArgs).SendToCompiler();
		}

		private static void DummyMethod()
		{
		}
	}
	internal enum GlobalSafetyChecksSettingKind
	{
		Off,
		On,
		ForceOn
	}
	public sealed class BurstCompilerOptions
	{
		private const string DisableCompilationArg = "--burst-disable-compilation";

		private const string ForceSynchronousCompilationArg = "--burst-force-sync-compilation";

		internal const string DefaultLibraryName = "lib_burst_generated";

		internal const string BurstInitializeName = "burst.initialize";

		internal const string BurstInitializeExternalsName = "burst.initialize.externals";

		internal const string BurstInitializeStaticsName = "burst.initialize.statics";

		internal const string OptionBurstcSwitch = "+burstc";

		internal const string OptionGroup = "group";

		internal const string OptionPlatform = "platform=";

		internal const string OptionBackend = "backend=";

		internal const string OptionGlobalSafetyChecksSetting = "global-safety-checks-setting=";

		internal const string OptionDisableSafetyChecks = "disable-safety-checks";

		internal const string OptionDisableOpt = "disable-opt";

		internal const string OptionFastMath = "fastmath";

		internal const string OptionTarget = "target=";

		internal const string OptionOptLevel = "opt-level=";

		internal const string OptionLogTimings = "log-timings";

		internal const string OptionOptForSize = "opt-for-size";

		internal const string OptionFloatPrecision = "float-precision=";

		internal const string OptionFloatMode = "float-mode=";

		internal const string OptionBranchProtection = "branch-protection=";

		internal const string OptionDisableWarnings = "disable-warnings=";

		internal const string OptionAssemblyDefines = "assembly-defines=";

		internal const string OptionDump = "dump=";

		internal const string OptionFormat = "format=";

		internal const string OptionDebugTrap = "debugtrap";

		internal const string OptionDisableVectors = "disable-vectors";

		internal const string OptionDebug = "debug=";

		internal const string OptionDebugMode = "debugMode";

		internal const string OptionStaticLinkage = "generate-static-linkage-methods";

		internal const string OptionJobMarshalling = "generate-job-marshalling-methods";

		internal const string OptionTempDirectory = "temp-folder=";

		internal const string OptionEnableDirectExternalLinking = "enable-direct-external-linking";

		internal const string OptionLinkerOptions = "linker-options=";

		internal const string OptionEnableAutoLayoutFallbackCheck = "enable-autolayout-fallback-check";

		internal const string OptionGenerateLinkXml = "generate-link-xml=";

		internal const string OptionMetaDataGeneration = "meta-data-generation=";

		internal const string OptionDisableStringInterpolationInExceptionMessages = "disable-string-interpolation-in-exception-messages";

		internal const string OptionPlatformConfiguration = "platform-configuration=";

		internal const string OptionCacheDirectory = "cache-directory=";

		internal const string OptionJitDisableFunctionCaching = "disable-function-caching";

		internal const string OptionJitDisableAssemblyCaching = "disable-assembly-caching";

		internal const string OptionJitEnableAssemblyCachingLogs = "enable-assembly-caching-logs";

		internal const string OptionJitEnableSynchronousCompilation = "enable-synchronous-compilation";

		internal const string OptionJitCompilationPriority = "compilation-priority=";

		internal const string OptionJitIsForFunctionPointer = "is-for-function-pointer";

		internal const string OptionJitManagedFunctionPointer = "managed-function-pointer=";

		internal const string OptionJitManagedDelegateHandle = "managed-delegate-handle=";

		internal const string OptionEnableInterpreter = "enable-interpreter";

		internal const string OptionAotAssemblyFolder = "assembly-folder=";

		internal const string OptionRootAssembly = "root-assembly=";

		internal const string OptionIncludeRootAssemblyReferences = "include-root-assembly-references=";

		internal const string OptionAotMethod = "method=";

		internal const string OptionAotType = "type=";

		internal const string OptionAotAssembly = "assembly=";

		internal const string OptionAotOutputPath = "output=";

		internal const string OptionAotKeepIntermediateFiles = "keep-intermediate-files";

		internal const string OptionAotNoLink = "nolink";

		internal const string OptionAotOnlyStaticMethods = "only-static-methods";

		internal const string OptionMethodPrefix = "method-prefix=";

		internal const string OptionAotNoNativeToolchain = "no-native-toolchain";

		internal const string OptionAotEmitLlvmObjects = "emit-llvm-objects";

		internal const string OptionAotKeyFolder = "key-folder=";

		internal const string OptionAotDecodeFolder = "decode-folder=";

		internal const string OptionVerbose = "verbose";

		internal const string OptionValidateExternalToolChain = "validate-external-tool-chain";

		internal const string OptionCompilerThreads = "threads=";

		internal const string OptionChunkSize = "chunk-size=";

		internal const string OptionPrintLogOnMissingPInvokeCallbackAttribute = "print-monopinvokecallbackmissing-message";

		internal const string OptionOutputMode = "output-mode=";

		internal const string OptionAlwaysCreateOutput = "always-create-output=";

		internal const string OptionAotPdbSearchPaths = "pdb-search-paths=";

		internal const string OptionSafetyChecks = "safety-checks";

		internal const string OptionLibraryOutputMode = "library-output-mode=";

		internal const string OptionCompilationId = "compilation-id=";

		internal const string OptionTargetFramework = "target-framework=";

		internal const string OptionDiscardAssemblies = "discard-assemblies=";

		internal const string OptionSaveExtraContext = "save-extra-context";

		internal const string CompilerCommandShutdown = "$shutdown";

		internal const string CompilerCommandCancel = "$cancel";

		internal const string CompilerCommandEnableCompiler = "$enable_compiler";

		internal const string CompilerCommandDisableCompiler = "$disable_compiler";

		internal const string CompilerCommandSetDefaultOptions = "$set_default_options";

		internal const string CompilerCommandTriggerSetupRecompilation = "$trigger_setup_recompilation";

		internal const string CompilerCommandIsCurrentCompilationDone = "$is_current_compilation_done";

		internal const string CompilerCommandTriggerRecompilation = "$trigger_recompilation";

		internal const string CompilerCommandInitialize = "$initialize";

		internal const string CompilerCommandDomainReload = "$domain_reload";

		internal const string CompilerCommandVersionNotification = "$version";

		internal const string CompilerCommandGetTargetCpuFromHost = "$get_target_cpu_from_host";

		internal const string CompilerCommandSetProfileCallbacks = "$set_profile_callbacks";

		internal const string CompilerCommandUnloadBurstNatives = "$unload_burst_natives";

		internal const string CompilerCommandIsNativeApiAvailable = "$is_native_api_available";

		internal const string CompilerCommandILPPCompilation = "$ilpp_compilation";

		internal const string CompilerCommandIsArmTestEnv = "$is_arm_test_env";

		internal const string CompilerCommandNotifyAssemblyCompilationNotRequired = "$notify_assembly_compilation_not_required";

		internal const string CompilerCommandNotifyAssemblyCompilationFinished = "$notify_assembly_compilation_finished";

		internal const string CompilerCommandNotifyCompilationStarted = "$notify_compilation_started";

		internal const string CompilerCommandNotifyCompilationFinished = "$notify_compilation_finished";

		internal const string CompilerCommandAotCompilation = "$aot_compilation";

		internal const string CompilerCommandRequestInitialiseDebuggerCommmand = "$request_debug_command";

		internal const string CompilerCommandInitialiseDebuggerCommmand = "$load_debugger_interface";

		internal const string CompilerCommandRequestSetProtocolVersionEditor = "$request_set_protocol_version_editor";

		internal const string CompilerCommandSetProtocolVersionBurst = "$set_protocol_version_burst";

		internal static readonly bool ForceDisableBurstCompilation;

		private static readonly bool ForceBurstCompilationSynchronously;

		internal static readonly bool IsSecondaryUnityProcess;

		private bool _enableBurstCompilation;

		private bool _enableBurstCompileSynchronously;

		private bool _enableBurstSafetyChecks;

		private bool _enableBurstTimings;

		private bool _enableBurstDebug;

		private bool _forceEnableBurstSafetyChecks;

		private bool IsGlobal { get; }

		public bool IsEnabled => EnableBurstCompilation && !ForceDisableBurstCompilation;

		public bool EnableBurstCompilation
		{
			get
			{
				return _enableBurstCompilation;
			}
			set
			{
				if (IsGlobal && ForceDisableBurstCompilation)
				{
					value = false;
				}
				bool flag = _enableBurstCompilation != value;
				_enableBurstCompilation = value;
				if (IsGlobal)
				{
					JobsUtility.JobCompilerEnabled = value;
					BurstCompiler._IsEnabled = value;
				}
				if (flag)
				{
					OnOptionsChanged();
				}
			}
		}

		public bool EnableBurstCompileSynchronously
		{
			get
			{
				return _enableBurstCompileSynchronously;
			}
			set
			{
				bool flag = _enableBurstCompileSynchronously != value;
				_enableBurstCompileSynchronously = value;
				if (flag)
				{
					OnOptionsChanged();
				}
			}
		}

		public bool EnableBurstSafetyChecks
		{
			get
			{
				return _enableBurstSafetyChecks;
			}
			set
			{
				bool flag = _enableBurstSafetyChecks != value;
				_enableBurstSafetyChecks = value;
				if (flag)
				{
					OnOptionsChanged();
					MaybeTriggerRecompilation();
				}
			}
		}

		public bool ForceEnableBurstSafetyChecks
		{
			get
			{
				return _forceEnableBurstSafetyChecks;
			}
			set
			{
				bool flag = _forceEnableBurstSafetyChecks != value;
				_forceEnableBurstSafetyChecks = value;
				if (flag)
				{
					OnOptionsChanged();
					MaybeTriggerRecompilation();
				}
			}
		}

		public bool EnableBurstDebug
		{
			get
			{
				return _enableBurstDebug;
			}
			set
			{
				bool flag = _enableBurstDebug != value;
				_enableBurstDebug = value;
				if (flag)
				{
					OnOptionsChanged();
					MaybeTriggerRecompilation();
				}
			}
		}

		[Obsolete("This property is no longer used and will be removed in a future major release")]
		public bool DisableOptimizations
		{
			get
			{
				return false;
			}
			set
			{
			}
		}

		[Obsolete("This property is no longer used and will be removed in a future major release. Use the [BurstCompile(FloatMode = FloatMode.Fast)] on the method directly to enable this feature")]
		public bool EnableFastMath
		{
			get
			{
				return true;
			}
			set
			{
			}
		}

		internal bool EnableBurstTimings
		{
			get
			{
				return _enableBurstTimings;
			}
			set
			{
				bool flag = _enableBurstTimings != value;
				_enableBurstTimings = value;
				if (flag)
				{
					OnOptionsChanged();
				}
			}
		}

		internal bool RequiresSynchronousCompilation => EnableBurstCompileSynchronously || ForceBurstCompilationSynchronously;

		internal Action OptionsChanged { get; set; }

		internal static string SerialiseCompilationOptionsSafe(string[] roots, string[] folders, string options)
		{
			return SafeStringArrayHelper.SerialiseStringArraySafe(new string[3]
			{
				SafeStringArrayHelper.SerialiseStringArraySafe(roots),
				SafeStringArrayHelper.SerialiseStringArraySafe(folders),
				options
			});
		}

		internal static (string[] roots, string[] folders, string options) DeserialiseCompilationOptionsSafe(string from)
		{
			string[] array = SafeStringArrayHelper.DeserialiseStringArraySafe(from);
			return (SafeStringArrayHelper.DeserialiseStringArraySafe(array[0]), SafeStringArrayHelper.DeserialiseStringArraySafe(array[1]), array[2]);
		}

		private BurstCompilerOptions()
			: this(isGlobal: false)
		{
		}

		internal BurstCompilerOptions(bool isGlobal)
		{
			try
			{
				IsGlobal = isGlobal;
				EnableBurstCompilation = true;
				EnableBurstSafetyChecks = true;
			}
			finally
			{
			}
		}

		internal BurstCompilerOptions Clone()
		{
			return new BurstCompilerOptions
			{
				EnableBurstCompilation = EnableBurstCompilation,
				EnableBurstCompileSynchronously = EnableBurstCompileSynchronously,
				EnableBurstSafetyChecks = EnableBurstSafetyChecks,
				EnableBurstTimings = EnableBurstTimings,
				EnableBurstDebug = EnableBurstDebug,
				ForceEnableBurstSafetyChecks = ForceEnableBurstSafetyChecks
			};
		}

		private static bool TryGetAttribute(MemberInfo member, out BurstCompileAttribute attribute)
		{
			attribute = null;
			if (member == null)
			{
				return false;
			}
			attribute = GetBurstCompileAttribute(member);
			if (attribute == null)
			{
				return false;
			}
			return true;
		}

		private static bool TryGetAttribute(Assembly assembly, out BurstCompileAttribute attribute)
		{
			if (assembly == null)
			{
				attribute = null;
				return false;
			}
			attribute = assembly.GetCustomAttribute<BurstCompileAttribute>();
			return attribute != null;
		}

		private static BurstCompileAttribute GetBurstCompileAttribute(MemberInfo memberInfo)
		{
			BurstCompileAttribute customAttribute = memberInfo.GetCustomAttribute<BurstCompileAttribute>();
			if (customAttribute != null)
			{
				return customAttribute;
			}
			foreach (Attribute customAttribute2 in memberInfo.GetCustomAttributes())
			{
				Type type = customAttribute2.GetType();
				if (type.FullName == "Burst.Compiler.IL.Tests.TestCompilerAttribute")
				{
					List<string> list = new List<string>();
					return new BurstCompileAttribute(FloatPrecision.Standard, FloatMode.Default)
					{
						CompileSynchronously = true,
						Options = list.ToArray()
					};
				}
			}
			return null;
		}

		internal static bool HasBurstCompileAttribute(MemberInfo member)
		{
			if (member == null)
			{
				throw new ArgumentNullException("member");
			}
			BurstCompileAttribute attribute;
			return TryGetAttribute(member, out attribute);
		}

		internal static void MergeAttributes(ref BurstCompileAttribute memberAttribute, in BurstCompileAttribute assemblyAttribute)
		{
			if (memberAttribute.FloatMode == FloatMode.Default)
			{
				memberAttribute.FloatMode = assemblyAttribute.FloatMode;
			}
			if (memberAttribute.FloatPrecision == FloatPrecision.Standard)
			{
				memberAttribute.FloatPrecision = assemblyAttribute.FloatPrecision;
			}
			if (memberAttribute.OptimizeFor == OptimizeFor.Default)
			{
				memberAttribute.OptimizeFor = assemblyAttribute.OptimizeFor;
			}
			if (!memberAttribute._compileSynchronously.HasValue && assemblyAttribute._compileSynchronously.HasValue)
			{
				memberAttribute._compileSynchronously = assemblyAttribute._compileSynchronously;
			}
			if (!memberAttribute._debug.HasValue && assemblyAttribute._debug.HasValue)
			{
				memberAttribute._debug = assemblyAttribute._debug;
			}
			if (!memberAttribute._disableDirectCall.HasValue && assemblyAttribute._disableDirectCall.HasValue)
			{
				memberAttribute._disableDirectCall = assemblyAttribute._disableDirectCall;
			}
			if (!memberAttribute._disableSafetyChecks.HasValue && assemblyAttribute._disableSafetyChecks.HasValue)
			{
				memberAttribute._disableSafetyChecks = assemblyAttribute._disableSafetyChecks;
			}
		}

		internal bool TryGetOptions(MemberInfo member, out string flagsOut, bool isForILPostProcessing = false, bool isForCompilerClient = false)
		{
			flagsOut = null;
			if (!TryGetAttribute(member, out var attribute))
			{
				return false;
			}
			if (TryGetAttribute(member.Module.Assembly, out var attribute2))
			{
				MergeAttributes(ref attribute, in attribute2);
			}
			flagsOut = GetOptions(attribute, isForILPostProcessing, isForCompilerClient);
			return true;
		}

		internal string GetOptions(BurstCompileAttribute attr = null, bool isForILPostProcessing = false, bool isForCompilerClient = false)
		{
			StringBuilder stringBuilder = new StringBuilder();
			if (!isForCompilerClient && ((attr != null && attr.CompileSynchronously) || RequiresSynchronousCompilation))
			{
				AddOption(stringBuilder, GetOption("enable-synchronous-compilation"));
			}
			AddOption(stringBuilder, GetOption("debug=", "LineOnly"));
			if (isForILPostProcessing)
			{
				AddOption(stringBuilder, GetOption("compilation-priority=", CompilationPriority.ILPP));
			}
			if (attr != null)
			{
				if (attr.FloatMode != 0)
				{
					AddOption(stringBuilder, GetOption("float-mode=", attr.FloatMode));
				}
				if (attr.FloatPrecision != 0)
				{
					AddOption(stringBuilder, GetOption("float-precision=", attr.FloatPrecision));
				}
				if (attr.DisableSafetyChecks)
				{
					AddOption(stringBuilder, GetOption("disable-safety-checks"));
				}
				if (attr.Options != null)
				{
					string[] options = attr.Options;
					foreach (string text in options)
					{
						if (!string.IsNullOrEmpty(text))
						{
							AddOption(stringBuilder, text);
						}
					}
				}
				switch (attr.OptimizeFor)
				{
				case OptimizeFor.Default:
				case OptimizeFor.Balanced:
					AddOption(stringBuilder, GetOption("opt-level=", 2));
					break;
				case OptimizeFor.Performance:
					AddOption(stringBuilder, GetOption("opt-level=", 3));
					break;
				case OptimizeFor.Size:
					AddOption(stringBuilder, GetOption("opt-for-size"));
					AddOption(stringBuilder, GetOption("opt-level=", 3));
					break;
				case OptimizeFor.FastCompilation:
					AddOption(stringBuilder, GetOption("opt-level=", 1));
					break;
				}
			}
			if (ForceEnableBurstSafetyChecks)
			{
				AddOption(stringBuilder, GetOption("global-safety-checks-setting=", GlobalSafetyChecksSettingKind.ForceOn));
			}
			else if (EnableBurstSafetyChecks)
			{
				AddOption(stringBuilder, GetOption("global-safety-checks-setting=", GlobalSafetyChecksSettingKind.On));
			}
			else
			{
				AddOption(stringBuilder, GetOption("global-safety-checks-setting=", GlobalSafetyChecksSettingKind.Off));
			}
			if (EnableBurstTimings)
			{
				AddOption(stringBuilder, GetOption("log-timings"));
			}
			if (EnableBurstDebug || (attr != null && attr.Debug))
			{
				AddOption(stringBuilder, GetOption("debugMode"));
			}
			AddOption(stringBuilder, GetOption("temp-folder=", Path.Combine(Environment.CurrentDirectory, "Temp", "Burst")));
			return stringBuilder.ToString();
		}

		private static void AddOption(StringBuilder builder, string option)
		{
			if (builder.Length != 0)
			{
				builder.Append('\n');
			}
			builder.Append(option);
		}

		internal static string GetOption(string optionName, object value = null)
		{
			if (optionName == null)
			{
				throw new ArgumentNullException("optionName");
			}
			return "--" + optionName + (value ?? string.Empty);
		}

		private void OnOptionsChanged()
		{
			OptionsChanged?.Invoke();
		}

		private void MaybeTriggerRecompilation()
		{
		}

		static BurstCompilerOptions()
		{
			string[] commandLineArgs = Environment.GetCommandLineArgs();
			foreach (string text in commandLineArgs)
			{
				string text2 = text;
				string text3 = text2;
				if (!(text3 == "--burst-disable-compilation"))
				{
					if (text3 == "--burst-force-sync-compilation")
					{
						ForceBurstCompilationSynchronously = true;
					}
				}
				else
				{
					ForceDisableBurstCompilation = true;
				}
			}
			if (CheckIsSecondaryUnityProcess())
			{
				ForceDisableBurstCompilation = true;
				IsSecondaryUnityProcess = true;
			}
			string environmentVariable = Environment.GetEnvironmentVariable("UNITY_BURST_DISABLE_COMPILATION");
			if (!string.IsNullOrEmpty(environmentVariable) && environmentVariable != "0")
			{
				ForceDisableBurstCompilation = true;
			}
		}

		private static bool CheckIsSecondaryUnityProcess()
		{
			return false;
		}
	}
	internal enum BurstTargetCpu
	{
		Auto,
		X86_SSE2,
		X86_SSE4,
		X64_SSE2,
		X64_SSE4,
		AVX,
		AVX2,
		WASM32,
		ARMV7A_NEON32,
		ARMV8A_AARCH64,
		THUMB2_NEON32,
		ARMV8A_AARCH64_HALFFP,
		ARMV9A
	}
	[Flags]
	internal enum NativeDumpFlags
	{
		None = 0,
		IL = 1,
		Unused = 2,
		IR = 4,
		IROptimized = 8,
		Asm = 0x10,
		Function = 0x20,
		Analysis = 0x40,
		IRPassAnalysis = 0x80,
		ILPre = 0x100,
		IRPerEntryPoint = 0x200,
		All = 0x3FD
	}
	internal enum CompilationPriority
	{
		EagerCompilationSynchronous,
		Asynchronous,
		ILPP,
		EagerCompilationAsynchronous
	}
	public enum BurstExecutionEnvironment
	{
		Default = 0,
		NonDeterministic = 0,
		Deterministic = 1
	}
	public static class BurstRuntime
	{
		[StructLayout(LayoutKind.Sequential, Size = 1)]
		private struct HashCode32<T>
		{
			public static readonly int Value = HashStringWithFNV1A32(typeof(T).AssemblyQualifiedName);
		}

		[StructLayout(LayoutKind.Sequential, Size = 1)]
		private struct HashCode64<T>
		{
			public static readonly long Value = HashStringWithFNV1A64(typeof(T).AssemblyQualifiedName);
		}

		internal class PreserveAttribute : Attribute
		{
		}

		public static int GetHashCode32<T>()
		{
			return HashCode32<T>.Value;
		}

		public static int GetHashCode32(Type type)
		{
			return HashStringWithFNV1A32(type.AssemblyQualifiedName);
		}

		public static long GetHashCode64<T>()
		{
			return HashCode64<T>.Value;
		}

		public static long GetHashCode64(Type type)
		{
			return HashStringWithFNV1A64(type.AssemblyQualifiedName);
		}

		internal static int HashStringWithFNV1A32(string text)
		{
			uint num = 2166136261u;
			foreach (char c in text)
			{
				num = 16777619 * (num ^ (byte)(c & 0xFF));
				num = 16777619 * (num ^ (byte)((int)c >> 8));
			}
			return (int)num;
		}

		internal static long HashStringWithFNV1A64(string text)
		{
			ulong num = 14695981039346656037uL;
			foreach (char c in text)
			{
				num = 1099511628211L * (num ^ (byte)(c & 0xFF));
				num = 1099511628211L * (num ^ (byte)((int)c >> 8));
			}
			return (long)num;
		}

		public static bool LoadAdditionalLibrary(string pathToLibBurstGenerated)
		{
			if (BurstCompiler.IsLoadAdditionalLibrarySupported())
			{
				return LoadAdditionalLibraryInternal(pathToLibBurstGenerated);
			}
			return false;
		}

		internal static bool LoadAdditionalLibraryInternal(string pathToLibBurstGenerated)
		{
			return (bool)typeof(BurstCompilerService).GetMethod("LoadBurstLibrary").Invoke(null, new object[1] { pathToLibBurstGenerated });
		}

		internal static void Initialize()
		{
		}

		[Preserve]
		internal static void PreventRequiredAttributeStrip()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			new BurstDiscardAttribute();
			new ConditionalAttribute("HEJSA");
			new JobProducerTypeAttribute(typeof(BurstRuntime));
		}

		[Preserve]
		internal unsafe static void Log(byte* message, int logType, byte* fileName, int lineNumber)
		{
			BurstCompilerService.Log((void*)null, (BurstLogType)logType, message, (byte*)null, lineNumber);
		}

		public unsafe static byte* GetUTF8LiteralPointer(string str, out int byteCount)
		{
			throw new NotImplementedException("This function only works from Burst");
		}
	}
	internal static class BurstString
	{
		internal class PreserveAttribute : Attribute
		{
		}

		private enum NumberBufferKind
		{
			Integer,
			Float
		}

		private struct NumberBuffer
		{
			private unsafe readonly byte* _buffer;

			public NumberBufferKind Kind;

			public int DigitsCount;

			public int Scale;

			public readonly bool IsNegative;

			public unsafe NumberBuffer(NumberBufferKind kind, byte* buffer, int digitsCount, int scale, bool isNegative)
			{
				Kind = kind;
				_buffer = buffer;
				DigitsCount = digitsCount;
				Scale = scale;
				IsNegative = isNegative;
			}

			public unsafe byte* GetDigitsPointer()
			{
				return _buffer;
			}
		}

		public enum NumberFormatKind : byte
		{
			General,
			Decimal,
			DecimalForceSigned,
			Hexadecimal
		}

		public struct FormatOptions
		{
			public NumberFormatKind Kind;

			public sbyte AlignAndSize;

			public byte Specifier;

			public bool Lowercase;

			public bool Uppercase => !Lowercase;

			public FormatOptions(NumberFormatKind kind, sbyte alignAndSize, byte specifier, bool lowercase)
			{
				this = default(FormatOptions);
				Kind = kind;
				AlignAndSize = alignAndSize;
				Specifier = specifier;
				Lowercase = lowercase;
			}

			public unsafe int EncodeToRaw()
			{
				Debug.Assert(sizeof(FormatOptions) == 4);
				FormatOptions formatOptions = this;
				return *(int*)(&formatOptions);
			}

			public int GetBase()
			{
				NumberFormatKind kind = Kind;
				NumberFormatKind numberFormatKind = kind;
				if (numberFormatKind == NumberFormatKind.Hexadecimal)
				{
					return 16;
				}
				return 10;
			}

			public override string ToString()
			{
				return string.Format("{0}: {1}, {2}: {3}, {4}: {5}, {6}: {7}", "Kind", Kind, "AlignAndSize", AlignAndSize, "Specifier", Specifier, "Uppercase", Uppercase);
			}
		}

		public struct tBigInt
		{
			private const int c_BigInt_MaxBlocks = 35;

			public int m_length;

			public unsafe fixed uint m_blocks[35];

			public int GetLength()
			{
				return m_length;
			}

			public unsafe uint GetBlock(int idx)
			{
				return m_blocks[idx];
			}

			public void SetZero()
			{
				m_length = 0;
			}

			public bool IsZero()
			{
				return m_length == 0;
			}

			public unsafe void SetU64(ulong val)
			{
				if (val > uint.MaxValue)
				{
					m_blocks[0] = (uint)(val & 0xFFFFFFFFu);
					m_blocks[1] = (uint)((val >> 32) & 0xFFFFFFFFu);
					m_length = 2;
				}
				else if (val != 0)
				{
					m_blocks[0] = (uint)(val & 0xFFFFFFFFu);
					m_length = 1;
				}
				else
				{
					m_length = 0;
				}
			}

			public unsafe void SetU32(uint val)
			{
				if (val != 0)
				{
					m_blocks[0] = val;
					m_length = ((val != 0) ? 1 : 0);
				}
				else
				{
					m_length = 0;
				}
			}

			public unsafe uint GetU32()
			{
				return (m_length != 0) ? m_blocks[0] : 0u;
			}
		}

		public enum CutoffMode
		{
			Unique,
			TotalLength,
			FractionLength
		}

		public enum PrintFloatFormat
		{
			Positional,
			Scientific
		}

		[StructLayout(LayoutKind.Explicit)]
		public struct tFloatUnion32
		{
			[FieldOffset(0)]
			public float m_floatingPoint;

			[FieldOffset(0)]
			public uint m_integer;

			public bool IsNegative()
			{
				return m_integer >> 31 != 0;
			}

			public uint GetExponent()
			{
				return (m_integer >> 23) & 0xFFu;
			}

			public uint GetMantissa()
			{
				return m_integer & 0x7FFFFFu;
			}
		}

		[StructLayout(LayoutKind.Explicit)]
		public struct tFloatUnion64
		{
			[FieldOffset(0)]
			public double m_floatingPoint;

			[FieldOffset(0)]
			public ulong m_integer;

			public bool IsNegative()
			{
				return m_integer >> 63 != 0;
			}

			public uint GetExponent()
			{
				return (uint)((m_integer >> 52) & 0x7FF);
			}

			public ulong GetMantissa()
			{
				return m_integer & 0xFFFFFFFFFFFFFuL;
			}
		}

		private static readonly char[] SplitByColon = new char[1] { ':' };

		private static readonly byte[] logTable = new byte[256]
		{
			0, 0, 1, 1, 2, 2, 2, 2, 3, 3,
			3, 3, 3, 3, 3, 3, 4, 4, 4, 4,
			4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
			4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
			5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
			5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
			5, 5, 5, 5, 6, 6, 6, 6, 6, 6,
			6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
			6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
			6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
			6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
			6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
			6, 6, 6, 6, 6, 6, 6, 6, 7, 7,
			7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
			7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
			7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
			7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
			7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
			7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
			7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
			7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
			7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
			7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
			7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
			7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
			7, 7, 7, 7, 7, 7
		};

		private static readonly uint[] g_PowerOf10_U32 = new uint[8] { 1u, 10u, 100u, 1000u, 10000u, 100000u, 1000000u, 10000000u };

		private static readonly byte[] InfinityString = new byte[8] { 73, 110, 102, 105, 110, 105, 116, 121 };

		private static readonly byte[] NanString = new byte[3] { 78, 97, 78 };

		private const int SinglePrecision = 9;

		private const int DoublePrecision = 17;

		internal const int SingleNumberBufferLength = 10;

		internal const int DoubleNumberBufferLength = 18;

		private const int SinglePrecisionCustomFormat = 7;

		private const int DoublePrecisionCustomFormat = 15;

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		[Preserve]
		public unsafe static void CopyFixedString(byte* dest, int destLength, byte* src, int srcLength)
		{
			int num = ((srcLength > destLength) ? destLength : srcLength);
			*(ushort*)(dest - 2) = (ushort)num;
			dest[num] = 0;
			UnsafeUtility.MemCpy((void*)dest, (void*)src, (long)num);
		}

		[Preserve]
		public unsafe static void Format(byte* dest, ref int destIndex, int destLength, byte* src, int srcLength, int formatOptionsRaw)
		{
			FormatOptions formatOptions = *(FormatOptions*)(&formatOptionsRaw);
			if (!AlignLeft(dest, ref destIndex, destLength, formatOptions.AlignAndSize, srcLength))
			{
				int num = destLength - destIndex;
				int num2 = ((srcLength > num) ? num : srcLength);
				if (num2 > 0)
				{
					UnsafeUtility.MemCpy((void*)(dest + destIndex), (void*)src, (long)num2);
					destIndex += num2;
					AlignRight(dest, ref destIndex, destLength, formatOptions.AlignAndSize, srcLength);
				}
			}
		}

		[Preserve]
		public unsafe static void Format(byte* dest, ref int destIndex, int destLength, float value, int formatOptionsRaw)
		{
			FormatOptions formatOptions = *(FormatOptions*)(&formatOptionsRaw);
			ConvertFloatToString(dest, ref destIndex, destLength, value, formatOptions);
		}

		[Preserve]
		public unsafe static void Format(byte* dest, ref int destIndex, int destLength, double value, int formatOptionsRaw)
		{
			FormatOptions formatOptions = *(FormatOptions*)(&formatOptionsRaw);
			ConvertDoubleToString(dest, ref destIndex, destLength, value, formatOptions);
		}

		[MethodImpl(MethodImplOptions.NoInlining)]
		[Preserve]
		public unsafe static void Format(byte* dest, ref int destIndex, int destLength, bool value, int formatOptionsRaw)
		{
			int length = (value ? 4 : 5);
			FormatOptions formatOptions = *(FormatOptions*)(&formatOptionsRaw);
			if (AlignLeft(dest, ref destIndex, destLength, formatOptions.AlignAndSize, length))
			{
				return;
			}
			if (value)
			{
				if (destIndex >= destLength)
				{
					return;
				}
				dest[destIndex++] = 84;
				if (destIndex >= destLength)
				{
					return;
				}
				dest[destIndex++] = 114;
				if (destIndex >= destLength)
				{
					return;
				}
				dest[destIndex++] = 117;
				if (destIndex >= destLength)
				{
					return;
				}
				dest[destIndex++] = 101;
			}
			else
			{
				if (destIndex >= destLength)
				{
					return;
				}
				dest[destIndex++] = 70;
				if (destIndex >= destLength)
				{
					return;
				}
				dest[destIndex++] = 97;
				if (destIndex >= destLength)
				{
					return;
				}
				dest[destIndex++] = 108;
				if (destIndex >= destLength)
				{
					return;
				}
				dest[destIndex++] = 115;
				if (destIndex >= destLength)
				{
					return;
				}
				dest[destIndex++] = 101;
			}
			AlignRight(dest, ref destIndex, destLength, formatOptions.AlignAndSize, length);
		}

		[MethodImpl(MethodImplOptions.NoInlining)]
		[Preserve]
		public unsafe static void Format(byte* dest, ref int destIndex, int destLength, char value, int formatOptionsRaw)
		{
			int num = ((value <= '\u007f') ? 1 : ((value <= '߿') ? 2 : 3));
			FormatOptions formatOptions = *(FormatOptions*)(&formatOptionsRaw);
			if (AlignLeft(dest, ref destIndex, destLength, formatOptions.AlignAndSize, 1))
			{
				return;
			}
			switch (num)
			{
			case 1:
				if (destIndex >= destLength)
				{
					return;
				}
				dest[destIndex++] = (byte)value;
				break;
			case 2:
				if (destIndex >= destLength)
				{
					return;
				}
				dest[destIndex++] = (byte)((uint)((int)value >> 6) | 0xC0u);
				if (destIndex >= destLength)
				{
					return;
				}
				dest[destIndex++] = (byte)((value & 0x3Fu) | 0x80u);
				break;
			case 3:
				if (value >= '\ud800' && value <= '\udfff')
				{
					if (destIndex >= destLength)
					{
						return;
					}
					dest[destIndex++] = 239;
					if (destIndex >= destLength)
					{
						return;
					}
					dest[destIndex++] = 191;
					if (destIndex >= destLength)
					{
						return;
					}
					dest[destIndex++] = 189;
				}
				else
				{
					if (destIndex >= destLength)
					{
						return;
					}
					dest[destIndex++] = (byte)((uint)((int)value >> 12) | 0xE0u);
					if (destIndex >= destLength)
					{
						return;
					}
					dest[destIndex++] = (byte)(((uint)((int)value >> 6) & 0x3Fu) | 0x80u);
					if (destIndex >= destLength)
					{
						return;
					}
					dest[destIndex++] = (byte)((value & 0x3Fu) | 0x80u);
				}
				break;
			}
			AlignRight(dest, ref destIndex, destLength, formatOptions.AlignAndSize, 1);
		}

		[Preserve]
		public unsafe static void Format(byte* dest, ref int destIndex, int destLength, byte value, int formatOptionsRaw)
		{
			Format(dest, ref destIndex, destLength, (ulong)value, formatOptionsRaw);
		}

		[Preserve]
		public unsafe static void Format(byte* dest, ref int destIndex, int destLength, ushort value, int formatOptionsRaw)
		{
			Format(dest, ref destIndex, destLength, (ulong)value, formatOptionsRaw);
		}

		[Preserve]
		public unsafe static void Format(byte* dest, ref int destIndex, int destLength, uint value, int formatOptionsRaw)
		{
			FormatOptions options = *(FormatOptions*)(&formatOptionsRaw);
			ConvertUnsignedIntegerToString(dest, ref destIndex, destLength, value, options);
		}

		[Preserve]
		public unsafe static void Format(byte* dest, ref int destIndex, int destLength, ulong value, int formatOptionsRaw)
		{
			FormatOptions options = *(FormatOptions*)(&formatOptionsRaw);
			ConvertUnsignedIntegerToString(dest, ref destIndex, destLength, value, options);
		}

		[Preserve]
		public unsafe static void Format(byte* dest, ref int destIndex, int destLength, sbyte value, int formatOptionsRaw)
		{
			FormatOptions options = *(FormatOptions*)(&formatOptionsRaw);
			if (options.Kind == NumberFormatKind.Hexadecimal)
			{
				ConvertUnsignedIntegerToString(dest, ref destIndex, destLength, (byte)value, options);
			}
			else
			{
				ConvertIntegerToString(dest, ref destIndex, destLength, value, options);
			}
		}

		[Preserve]
		public unsafe static void Format(byte* dest, ref int destIndex, int destLength, short value, int formatOptionsRaw)
		{
			FormatOptions options = *(FormatOptions*)(&formatOptionsRaw);
			if (options.Kind == NumberFormatKind.Hexadecimal)
			{
				ConvertUnsignedIntegerToString(dest, ref destIndex, destLength, (ushort)value, options);
			}
			else
			{
				ConvertIntegerToString(dest, ref destIndex, destLength, value, options);
			}
		}

		[MethodImpl(MethodImplOptions.NoInlining)]
		[Preserve]
		public unsafe static void Format(byte* dest, ref int destIndex, int destLength, int value, int formatOptionsRaw)
		{
			FormatOptions options = *(FormatOptions*)(&formatOptionsRaw);
			if (options.Kind == NumberFormatKind.Hexadecimal)
			{
				ConvertUnsignedIntegerToString(dest, ref destIndex, destLength, (uint)value, options);
			}
			else
			{
				ConvertIntegerToString(dest, ref destIndex, destLength, value, options);
			}
		}

		[Preserve]
		public unsafe static void Format(byte* dest, ref int destIndex, int destLength, long value, int formatOptionsRaw)
		{
			FormatOptions options = *(FormatOptions*)(&formatOptionsRaw);
			if (options.Kind == NumberFormatKind.Hexadecimal)
			{
				ConvertUnsignedIntegerToString(dest, ref destIndex, destLength, (ulong)value, options);
			}
			else
			{
				ConvertIntegerToString(dest, ref destIndex, destLength, value, options);
			}
		}

		[MethodImpl(MethodImplOptions.NoInlining)]
		private unsafe static void ConvertUnsignedIntegerToString(byte* dest, ref int destIndex, int destLength, ulong value, FormatOptions options)
		{
			uint @base = (uint)options.GetBase();
			if (@base >= 2 && @base <= 36)
			{
				int num = 0;
				ulong num2 = value;
				do
				{
					num2 /= @base;
					num++;
				}
				while (num2 != 0);
				int num3 = num - 1;
				byte* ptr = stackalloc byte[(int)(uint)(num + 1)];
				num2 = value;
				do
				{
					ptr[num3--] = ValueToIntegerChar((int)(num2 % @base), options.Uppercase);
					num2 /= @base;
				}
				while (num2 != 0);
				ptr[num] = 0;
				NumberBuffer number = new NumberBuffer(NumberBufferKind.Integer, ptr, num, num, isNegative: false);
				FormatNumber(dest, ref destIndex, destLength, ref number, options.Specifier, options);
			}
		}

		private static int GetLengthIntegerToString(long value, int basis, int zeroPadding)
		{
			int num = 0;
			long num2 = value;
			do
			{
				num2 /= basis;
				num++;
			}
			while (num2 != 0);
			if (num < zeroPadding)
			{
				num = zeroPadding;
			}
			if (value < 0)
			{
				num++;
			}
			return num;
		}

		[MethodImpl(MethodImplOptions.NoInlining)]
		private unsafe static void ConvertIntegerToString(byte* dest, ref int destIndex, int destLength, long value, FormatOptions options)
		{
			int @base = options.GetBase();
			if (@base >= 2 && @base <= 36)
			{
				int num = 0;
				long num2 = value;
				do
				{
					num2 /= @base;
					num++;
				}
				while (num2 != 0);
				byte* ptr = stackalloc byte[(int)(uint)(num + 1)];
				num2 = value;
				int num3 = num - 1;
				do
				{
					ptr[num3--] = ValueToIntegerChar((int)(num2 % @base), options.Uppercase);
					num2 /= @base;
				}
				while (num2 != 0);
				ptr[num] = 0;
				NumberBuffer number = new NumberBuffer(NumberBufferKind.Integer, ptr, num, num, value < 0);
				FormatNumber(dest, ref destIndex, destLength, ref number, options.Specifier, options);
			}
		}

		private unsafe static void FormatNumber(byte* dest, ref int destIndex, int destLength, ref NumberBuffer number, int nMaxDigits, FormatOptions options)
		{
			bool isCorrectlyRounded = number.Kind == NumberBufferKind.Float;
			if (number.Kind == NumberBufferKind.Integer && options.Kind == NumberFormatKind.General && options.Specifier == 0)
			{
				options.Kind = NumberFormatKind.Decimal;
			}
			NumberFormatKind kind = options.Kind;
			NumberFormatKind numberFormatKind = kind;
			if (numberFormatKind != 0 && numberFormatKind - 1 <= NumberFormatKind.DecimalForceSigned)
			{
				int num = number.DigitsCount;
				int specifier = options.Specifier;
				int zeroPadding = 0;
				if (num < specifier)
				{
					zeroPadding = specifier - num;
					num = specifier;
				}
				bool flag = options.Kind == NumberFormatKind.DecimalForceSigned;
				num += ((number.IsNegative || flag) ? 1 : 0);
				if (!AlignLeft(dest, ref destIndex, destLength, options.AlignAndSize, num))
				{
					FormatDecimalOrHexadecimal(dest, ref destIndex, destLength, ref number, zeroPadding, flag);
					AlignRight(dest, ref destIndex, destLength, options.AlignAndSize, num);
				}
			}
			else
			{
				if (nMaxDigits < 1)
				{
					nMaxDigits = number.DigitsCount;
				}
				RoundNumber(ref number, nMaxDigits, isCorrectlyRounded);
				int num = GetLengthForFormatGeneral(ref number, nMaxDigits);
				if (!AlignLeft(dest, ref destIndex, destLength, options.AlignAndSize, num))
				{
					FormatGeneral(dest, ref destIndex, destLength, ref number, nMaxDigits, (byte)(options.Uppercase ? 69 : 101));
					AlignRight(dest, ref destIndex, destLength, options.AlignAndSize, num);
				}
			}
		}

		private unsafe static void FormatDecimalOrHexadecimal(byte* dest, ref int destIndex, int destLength, ref NumberBuffer number, int zeroPadding, bool outputPositiveSign)
		{
			if (number.IsNegative)
			{
				if (destIndex >= destLength)
				{
					return;
				}
				dest[destIndex++] = 45;
			}
			else if (outputPositiveSign)
			{
				if (destIndex >= destLength)
				{
					return;
				}
				dest[destIndex++] = 43;
			}
			for (int i = 0; i < zeroPadding; i++)
			{
				if (destIndex >= destLength)
				{
					return;
				}
				dest[destIndex++] = 48;
			}
			int digitsCount = number.DigitsCount;
			byte* digitsPointer = number.GetDigitsPointer();
			for (int j = 0; j < digitsCount; j++)
			{
				if (destIndex >= destLength)
				{
					break;
				}
				dest[destIndex++] = digitsPointer[j];
			}
		}

		private static byte ValueToIntegerChar(int value, bool uppercase)
		{
			value = ((value < 0) ? (-value) : value);
			if (value <= 9)
			{
				return (byte)(48 + value);
			}
			if (value < 36)
			{
				return (byte)((uppercase ? 65 : 97) + (value - 10));
			}
			return 63;
		}

		private static void OptsSplit(string fullFormat, out string padding, out string format)
		{
			string[] array = fullFormat.Split(SplitByColon, StringSplitOptions.RemoveEmptyEntries);
			format = array[0];
			padding = null;
			if (array.Length == 2)
			{
				padding = format;
				format = array[1];
				return;
			}
			if (array.Length == 1)
			{
				if (format[0] == ',')
				{
					padding = format;
					format = null;
				}
				return;
			}
			throw new ArgumentException($"Format `{format}` not supported. Invalid number {array.Length} of :. Expecting no more than one.");
		}

		public static FormatOptions ParseFormatToFormatOptions(string fullFormat)
		{
			if (string.IsNullOrWhiteSpace(fullFormat))
			{
				return default(FormatOptions);
			}
			OptsSplit(fullFormat, out var padding, out var format);
			format = format?.Trim();
			padding = padding?.Trim();
			int result = 0;
			NumberFormatKind kind = NumberFormatKind.General;
			bool lowercase = false;
			int num = 0;
			if (!string.IsNullOrEmpty(format))
			{
				switch (format[0])
				{
				case 'G':
					kind = NumberFormatKind.General;
					break;
				case 'g':
					kind = NumberFormatKind.General;
					lowercase = true;
					break;
				case 'D':
					kind = NumberFormatKind.Decimal;
					break;
				case 'd':
					kind = NumberFormatKind.Decimal;
					lowercase = true;
					break;
				case 'X':
					kind = NumberFormatKind.Hexadecimal;
					break;
				case 'x':
					kind = NumberFormatKind.Hexadecimal;
					lowercase = true;
					break;
				default:
					throw new ArgumentException("Format `" + format + "` not supported. Only G, g, D, d, X, x are supported.");
				}
				if (format.Length > 1)
				{
					string text = format.Substring(1);
					if (!uint.TryParse(text, out var result2))
					{
						throw new ArgumentException("Expecting an unsigned integer for specifier `" + format + "` instead of " + text + ".");
					}
					num = (int)result2;
				}
			}
			if (!string.IsNullOrEmpty(padding))
			{
				if (padding[0] != ',')
				{
					throw new ArgumentException("Invalid padding `" + padding + "`, expecting to start with a leading `,` comma.");
				}
				string text2 = padding.Substring(1);
				if (!int.TryParse(text2, out result))
				{
					throw new ArgumentException("Expecting an integer for align/size padding `" + text2 + "`.");
				}
			}
			return new FormatOptions(kind, (sbyte)result, (byte)num, lowercase);
		}

		private unsafe static bool AlignRight(byte* dest, ref int destIndex, int destLength, int align, int length)
		{
			if (align < 0)
			{
				align = -align;
				return AlignLeft(dest, ref destIndex, destLength, align, length);
			}
			return false;
		}

		private unsafe static bool AlignLeft(byte* dest, ref int destIndex, int destLength, int align, int length)
		{
			if (align > 0)
			{
				while (length < align)
				{
					if (destIndex >= destLength)
					{
						return true;
					}
					dest[destIndex++] = 32;
					length++;
				}
			}
			return false;
		}

		private unsafe static int GetLengthForFormatGeneral(ref NumberBuffer number, int nMaxDigits)
		{
			int num = 0;
			int scale = number.Scale;
			int i = scale;
			bool flag = false;
			if (i > nMaxDigits || i < -3)
			{
				i = 1;
				flag = true;
			}
			byte* ptr = number.GetDigitsPointer();
			if (number.IsNegative)
			{
				num++;
			}
			if (i > 0)
			{
				do
				{
					if (*ptr != 0)
					{
						ptr++;
					}
					num++;
				}
				while (--i > 0);
			}
			else
			{
				num++;
			}
			if (*ptr != 0 || i < 0)
			{
				num++;
				for (; i < 0; i++)
				{
					num++;
				}
				for (; *ptr != 0; ptr++)
				{
					num++;
				}
			}
			if (flag)
			{
				num++;
				int num2 = number.Scale - 1;
				if (num2 >= 0)
				{
					num++;
				}
				num += GetLengthIntegerToString(num2, 10, 2);
			}
			return num;
		}

		[MethodImpl(MethodImplOptions.NoInlining)]
		private unsafe static void FormatGeneral(byte* dest, ref int destIndex, int destLength, ref NumberBuffer number, int nMaxDigits, byte expChar)
		{
			int scale = number.Scale;
			int i = scale;
			bool flag = false;
			if (i > nMaxDigits || i < -3)
			{
				i = 1;
				flag = true;
			}
			byte* digitsPointer = number.GetDigitsPointer();
			if (number.IsNegative)
			{
				if (destIndex >= destLength)
				{
					return;
				}
				dest[destIndex++] = 45;
			}
			if (i > 0)
			{
				do
				{
					if (destIndex >= destLength)
					{
						return;
					}
					dest[destIndex++] = (byte)((*digitsPointer != 0) ? (*(digitsPointer++)) : 48);
				}
				while (--i > 0);
			}
			else
			{
				if (destIndex >= destLength)
				{
					return;
				}
				dest[destIndex++] = 48;
			}
			if (*digitsPointer != 0 || i < 0)
			{
				if (destIndex >= destLength)
				{
					return;
				}
				dest[destIndex++] = 46;
				for (; i < 0; i++)
				{
					if (destIndex >= destLength)
					{
						return;
					}
					dest[destIndex++] = 48;
				}
				while (*digitsPointer != 0)
				{
					if (destIndex >= destLength)
					{
						return;
					}
					dest[destIndex++] = *(digitsPointer++);
				}
			}
			if (flag && destIndex < destLength)
			{
				dest[destIndex++] = expChar;
				int num = number.Scale - 1;
				FormatOptions options = new FormatOptions(NumberFormatKind.DecimalForceSigned, 0, 2, lowercase: false);
				ConvertIntegerToString(dest, ref destIndex, destLength, num, options);
			}
		}

		private unsafe static void RoundNumber(ref NumberBuffer number, int pos, bool isCorrectlyRounded)
		{
			byte* digitsPointer = number.GetDigitsPointer();
			int i;
			for (i = 0; i < pos && digitsPointer[i] != 0; i++)
			{
			}
			if (i == pos && ShouldRoundUp(digitsPointer, i, isCorrectlyRounded))
			{
				while (i > 0 && digitsPointer[i - 1] == 57)
				{
					i--;
				}
				if (i > 0)
				{
					byte* num = digitsPointer + (i - 1);
					(*num)++;
				}
				else
				{
					number.Scale++;
					*digitsPointer = 49;
					i = 1;
				}
			}
			else
			{
				while (i > 0 && digitsPointer[i - 1] == 48)
				{
					i--;
				}
			}
			if (i == 0)
			{
				number.Scale = 0;
			}
			digitsPointer[i] = 0;
			number.DigitsCount = i;
		}

		private unsafe static bool ShouldRoundUp(byte* dig, int i, bool isCorrectlyRounded)
		{
			byte b = dig[i];
			if (b == 0 || isCorrectlyRounded)
			{
				return false;
			}
			return b >= 53;
		}

		private static uint LogBase2(uint val)
		{
			uint num = val >> 24;
			if (num != 0)
			{
				return (uint)(24 + logTable[num]);
			}
			num = val >> 16;
			if (num != 0)
			{
				return (uint)(16 + logTable[num]);
			}
			num = val >> 8;
			if (num != 0)
			{
				return (uint)(8 + logTable[num]);
			}
			return logTable[val];
		}

		private unsafe static int BigInt_Compare(in tBigInt lhs, in tBigInt rhs)
		{
			int num = lhs.m_length - rhs.m_length;
			if (num != 0)
			{
				return num;
			}
			for (int num2 = lhs.m_length - 1; num2 >= 0; num2--)
			{
				if (lhs.m_blocks[num2] != rhs.m_blocks[num2])
				{
					if (lhs.m_blocks[num2] > rhs.m_blocks[num2])
					{
						return 1;
					}
					return -1;
				}
			}
			return 0;
		}

		private static void BigInt_Add(out tBigInt pResult, in tBigInt lhs, in tBigInt rhs)
		{
			if (lhs.m_length < rhs.m_length)
			{
				BigInt_Add_internal(out pResult, in rhs, in lhs);
			}
			else
			{
				BigInt_Add_internal(out pResult, in lhs, in rhs);
			}
		}

		private unsafe static void BigInt_Add_internal(out tBigInt pResult, in tBigInt pLarge, in tBigInt pSmall)
		{
			int length = pLarge.m_length;
			int length2 = pSmall.m_length;
			pResult.m_length = length;
			ulong num = 0uL;
			fixed (uint* ptr = pLarge.m_blocks)
			{
				fixed (uint* ptr3 = pSmall.m_blocks)
				{
					fixed (uint* ptr5 = pResult.m_blocks)
					{
						uint* ptr2 = ptr;
						uint* ptr4 = ptr3;
						uint* ptr6 = ptr5;
						uint* ptr7 = ptr2 + length;
						uint* ptr8 = ptr4 + length2;
						while (ptr4 != ptr8)
						{
							ulong num2 = num + *ptr2 + *ptr4;
							num = num2 >> 32;
							*ptr6 = (uint)(num2 & 0xFFFFFFFFu);
							ptr2++;
							ptr4++;
							ptr6++;
						}
						while (ptr2 != ptr7)
						{
							ulong num3 = num + *ptr2;
							num = num3 >> 32;
							*ptr6 = (uint)(num3 & 0xFFFFFFFFu);
							ptr2++;
							ptr6++;
						}
						if (num != 0)
						{
							*ptr6 = 1u;
							pResult.m_length = length + 1;
						}
						else
						{
							pResult.m_length = length;
						}
					}
				}
			}
		}

		private static void BigInt_Multiply(out tBigInt pResult, in tBigInt lhs, in tBigInt rhs)
		{
			if (lhs.m_length < rhs.m_length)
			{
				BigInt_Multiply_internal(out pResult, in rhs, in lhs);
			}
			else
			{
				BigInt_Multiply_internal(out pResult, in lhs, in rhs);
			}
		}

		private unsafe static void BigInt_Multiply_internal(out tBigInt pResult, in tBigInt pLarge, in tBigInt pSmall)
		{
			int num = pLarge.m_length + pSmall.m_length;
			for (int i = 0; i < num; i++)
			{
				pResult.m_blocks[i] = 0u;
			}
			fixed (uint* ptr = pLarge.m_blocks)
			{
				uint* ptr2 = ptr;
				uint* ptr3 = ptr2 + pLarge.m_length;
				fixed (uint* ptr7 = pResult.m_blocks)
				{
					fixed (uint* ptr4 = pSmall.m_blocks)
					{
						uint* ptr5 = ptr4;
						uint* ptr6 = ptr5 + pSmall.m_length;
						uint* ptr8 = ptr7;
						while (ptr5 != ptr6)
						{
							uint num2 = *ptr5;
							if (num2 != 0)
							{
								uint* ptr9 = ptr2;
								uint* ptr10 = ptr8;
								ulong num3 = 0uL;
								do
								{
									ulong num4 = (ulong)(*ptr10 + (long)(*ptr9) * (long)num2) + num3;
									num3 = num4 >> 32;
									*ptr10 = (uint)(num4 & 0xFFFFFFFFu);
									ptr9++;
									ptr10++;
								}
								while (ptr9 != ptr3);
								*ptr10 = (uint)(num3 & 0xFFFFFFFFu);
							}
							ptr5++;
							ptr8++;
						}
						if (num > 0 && pResult.m_blocks[num - 1] == 0)
						{
							pResult.m_length = num - 1;
						}
						else
						{
							pResult.m_length = num;
						}
					}
				}
			}
		}

		private unsafe static void BigInt_Multiply(out tBigInt pResult, in tBigInt lhs, uint rhs)
		{
			uint num = 0u;
			fixed (uint* ptr = pResult.m_blocks)
			{
				fixed (uint* ptr3 = lhs.m_blocks)
				{
					uint* ptr2 = ptr;
					uint* ptr4 = ptr3;
					uint* ptr5 = ptr4 + lhs.m_length;
					while (ptr4 != ptr5)
					{
						ulong num2 = (ulong)((long)(*ptr4) * (long)rhs + num);
						*ptr2 = (uint)(num2 & 0xFFFFFFFFu);
						num = (uint)(num2 >> 32);
						ptr4++;
						ptr2++;
					}
					if (num != 0)
					{
						*ptr2 = num;
						pResult.m_length = lhs.m_length + 1;
					}
					else
					{
						pResult.m_length = lhs.m_length;
					}
				}
			}
		}

		private unsafe static void BigInt_Multiply2(out tBigInt pResult, in tBigInt input)
		{
			uint num = 0u;
			fixed (uint* ptr = pResult.m_blocks)
			{
				fixed (uint* ptr3 = input.m_blocks)
				{
					uint* ptr2 = ptr;
					uint* ptr4 = ptr3;
					uint* ptr5 = ptr4 + input.m_length;
					while (ptr4 != ptr5)
					{
						uint num2 = *ptr4;
						*ptr2 = (num2 << 1) | num;
						num = num2 >> 31;
						ptr4++;
						ptr2++;
					}
					if (num != 0)
					{
						*ptr2 = num;
						pResult.m_length = input.m_length + 1;
					}
					else
					{
						pResult.m_length = input.m_length;
					}
				}
			}
		}

		private unsafe static void BigInt_Multiply2(ref tBigInt pResult)
		{
			uint num = 0u;
			fixed (uint* ptr = pResult.m_blocks)
			{
				uint* ptr2 = ptr;
				for (uint* ptr3 = ptr2 + pResult.m_length; ptr2 != ptr3; ptr2++)
				{
					uint num2 = *ptr2;
					*ptr2 = (num2 << 1) | num;
					num = num2 >> 31;
				}
				if (num != 0)
				{
					*ptr2 = num;
					pResult.m_length++;
				}
			}
		}

		private unsafe static void BigInt_Multiply10(ref tBigInt pResult)
		{
			ulong num = 0uL;
			fixed (uint* ptr = pResult.m_blocks)
			{
				uint* ptr2 = ptr;
				for (uint* ptr3 = ptr2 + pResult.m_length; ptr2 != ptr3; ptr2++)
				{
					ulong num2 = (ulong)((long)(*ptr2) * 10L) + num;
					*ptr2 = (uint)(num2 & 0xFFFFFFFFu);
					num = num2 >> 32;
				}
				if (num != 0)
				{
					*ptr2 = (uint)num;
					pResult.m_length++;
				}
			}
		}

		private unsafe static tBigInt g_PowerOf10_Big(int i)
		{
			tBigInt result = default(tBigInt);
			switch (i)
			{
			case 0:
				result.m_length = 1;
				result.m_blocks[0] = 100000000u;
				break;
			case 1:
				result.m_length = 2;
				result.m_blocks[0] = 1874919424u;
				result.m_blocks[1] = 2328306u;
				break;
			case 2:
				result.m_length = 4;
				result.m_blocks[0] = 0u;
				result.m_blocks[1] = 2242703233u;
				result.m_blocks[2] = 762134875u;
				result.m_blocks[3] = 1262u;
				break;
			case 3:
				result.m_length = 7;
				result.m_blocks[0] = 0u;
				result.m_blocks[1] = 0u;
				result.m_blocks[2] = 3211403009u;
				result.m_blocks[3] = 1849224548u;
				result.m_blocks[4] = 3668416493u;
				result.m_blocks[5] = 3913284084u;
				result.m_blocks[6] = 1593091u;
				break;
			case 4:
				result.m_length = 14;
				result.m_blocks[0] = 0u;
				result.m_blocks[1] = 0u;
				result.m_blocks[2] = 0u;
				result.m_blocks[3] = 0u;
				result.m_blocks[4] = 781532673u;
				result.m_blocks[5] = 64985353u;
				result.m_blocks[6] = 253049085u;
				result.m_blocks[7] = 594863151u;
				result.m_blocks[8] = 3553621484u;
				result.m_blocks[9] = 3288652808u;
				result.m_blocks[10] = 3167596762u;
				result.m_blocks[11] = 2788392729u;
				result.m_blocks[12] = 3911132675u;
				result.m_blocks[13] = 590u;
				break;
			default:
				result.m_length = 27;
				result.m_blocks[0] = 0u;
				result.m_blocks[1] = 0u;
				result.m_blocks[2] = 0u;
				result.m_blocks[3] = 0u;
				result.m_blocks[4] = 0u;
				result.m_blocks[5] = 0u;
				result.m_blocks[6] = 0u;
				result.m_blocks[7] = 0u;
				result.m_blocks[8] = 2553183233u;
				result.m_blocks[9] = 3201533787u;
				result.m_blocks[10] = 3638140786u;
				result.m_blocks[11] = 303378311u;
				result.m_blocks[12] = 1809731782u;
				result.m_blocks[13] = 3477761648u;
				result.m_blocks[14] = 3583367183u;
				result.m_blocks[15] = 649228654u;
				result.m_blocks[16] = 2915460784u;
				result.m_blocks[17] = 487929380u;
				result.m_blocks[18] = 1011012442u;
				result.m_blocks[19] = 1677677582u;
				result.m_blocks[20] = 3428152256u;
				result.m_blocks[21] = 1710878487u;
				result.m_blocks[22] = 1438394610u;
				result.m_blocks[23] = 2161952759u;
				result.m_blocks[24] = 4100910556u;
				result.m_blocks[25] = 1608314830u;
				result.m_blocks[26] = 349175u;
				break;
			}
			return result;
		}

		private static void BigInt_Pow10(out tBigInt pResult, uint exponent)
		{
			tBigInt lhs = default(tBigInt);
			tBigInt pResult2 = default(tBigInt);
			uint num = exponent & 7u;
			lhs.SetU32(g_PowerOf10_U32[num]);
			exponent >>= 3;
			int num2 = 0;
			while (exponent != 0)
			{
				if ((exponent & (true ? 1u : 0u)) != 0)
				{
					tBigInt rhs = g_PowerOf10_Big(num2);
					BigInt_Multiply(out pResult2, in lhs, in rhs);
					lhs = pResult2;
					pResult2 = lhs;
				}
				num2++;
				exponent >>= 1;
			}
			pResult = lhs;
		}

		private static void BigInt_MultiplyPow10(out tBigInt pResult, in tBigInt input, uint exponent)
		{
			tBigInt pResult2 = default(tBigInt);
			tBigInt pResult3 = default(tBigInt);
			uint num = exponent & 7u;
			if (num != 0)
			{
				BigInt_Multiply(out pResult2, in input, g_PowerOf10_U32[num]);
			}
			else
			{
				pResult2 = input;
			}
			exponent >>= 3;
			int num2 = 0;
			while (exponent != 0)
			{
				if ((exponent & (true ? 1u : 0u)) != 0)
				{
					tBigInt rhs = g_PowerOf10_Big(num2);
					BigInt_Multiply(out pResult3, in pResult2, in rhs);
					pResult2 = pResult3;
					pResult3 = pResult2;
				}
				num2++;
				exponent >>= 1;
			}
			pResult = pResult2;
		}

		private unsafe static void BigInt_Pow2(out tBigInt pResult, uint exponent)
		{
			int num = (int)exponent / 32;
			for (uint num2 = 0u; num2 <= num; num2++)
			{
				pResult.m_blocks[num2] = 0u;
			}
			pResult.m_length = num + 1;
			int num3 = (int)exponent % 32;
			ref uint reference = ref pResult.m_blocks[num];
			reference |= (uint)(1 << num3);
		}

		private unsafe static uint BigInt_DivideWithRemainder_MaxQuotient9(ref tBigInt pDividend, in tBigInt divisor)
		{
			int num = divisor.m_length;
			if (pDividend.m_length < divisor.m_length)
			{
				return 0u;
			}
			fixed (uint* ptr = divisor.m_blocks)
			{
				fixed (uint* ptr3 = pDividend.m_blocks)
				{
					uint* ptr2 = ptr;
					uint* ptr4 = ptr3;
					uint* ptr5 = ptr2 + num - 1;
					uint* ptr6 = ptr4 + num - 1;
					uint num2 = *ptr6 / (*ptr5 + 1);
					if (num2 != 0)
					{
						ulong num3 = 0uL;
						ulong num4 = 0uL;
						do
						{
							ulong num5 = (ulong)((long)(*ptr2) * (long)num2) + num4;
							num4 = num5 >> 32;
							ulong num6 = *ptr4 - (num5 & 0xFFFFFFFFu) - num3;
							num3 = (num6 >> 32) & 1;
							*ptr4 = (uint)(num6 & 0xFFFFFFFFu);
							ptr2++;
							ptr4++;
						}
						while (ptr2 <= ptr5);
						while (num > 0 && pDividend.m_blocks[num - 1] == 0)
						{
							num--;
						}
						pDividend.m_length = num;
					}
					if (BigInt_Compare(in pDividend, in divisor) >= 0)
					{
						num2++;
						ptr2 = ptr;
						ptr4 = ptr3;
						ulong num7 = 0uL;
						do
						{
							ulong num8 = (ulong)((long)(*ptr4) - (long)(*ptr2)) - num7;
							num7 = (num8 >> 32) & 1;
							*ptr4 = (uint)(num8 & 0xFFFFFFFFu);
							ptr2++;
							ptr4++;
						}
						while (ptr2 <= ptr5);
						while (num > 0 && pDividend.m_blocks[num - 1] == 0)
						{
							num--;
						}
						pDividend.m_length = num;
					}
					return num2;
				}
			}
		}

		private unsafe static void BigInt_ShiftLeft(ref tBigInt pResult, uint shift)
		{
			int num = (int)shift / 32;
			int num2 = (int)shift % 32;
			int length = pResult.m_length;
			if (num2 == 0)
			{
				fixed (uint* ptr = pResult.m_blocks)
				{
					uint* ptr2 = ptr;
					uint* ptr3 = ptr2 + length - 1;
					uint* ptr4 = ptr3 + num;
					while (ptr3 >= ptr2)
					{
						*ptr4 = *ptr3;
						ptr3--;
						ptr4--;
					}
				}
				for (uint num3 = 0u; num3 < num; num3++)
				{
					pResult.m_blocks[num3] = 0u;
				}
				pResult.m_length += num;
				return;
			}
			int num4 = length - 1;
			int num5 = length + num;
			pResult.m_length = num5 + 1;
			int num6 = 32 - num2;
			uint num7 = 0u;
			uint num8 = pResult.m_blocks[num4];
			uint num9 = num8 >> num6;
			while (num4 > 0)
			{
				pResult.m_blocks[num5] = num7 | num9;
				num7 = num8 << num2;
				num4--;
				num5--;
				num8 = pResult.m_blocks[num4];
				num9 = num8 >> num6;
			}
			pResult.m_blocks[num5] = num7 | num9;
			pResult.m_blocks[num5 - 1] = num8 << num2;
			for (uint num10 = 0u; num10 < num; num10++)
			{
				pResult.m_blocks[num10] = 0u;
			}
			if (pResult.m_blocks[pResult.m_length - 1] == 0)
			{
				pResult.m_length--;
			}
		}

		private unsafe static uint Dragon4(ulong mantissa, int exponent, uint mantissaHighBitIdx, bool hasUnequalMargins, CutoffMode cutoffMode, uint cutoffNumber, byte* pOutBuffer, uint bufferSize, out int pOutExponent)
		{
			byte* ptr = pOutBuffer;
			if (mantissa == 0)
			{
				*ptr = 48;
				pOutExponent = 0;
				return 1u;
			}
			tBigInt pResult = default(tBigInt);
			tBigInt pResult2 = default(tBigInt);
			tBigInt pResult3 = default(tBigInt);
			tBigInt pResult4 = default(tBigInt);
			tBigInt* ptr2;
			if (hasUnequalMargins)
			{
				if (exponent > 0)
				{
					pResult2.SetU64(4 * mantissa);
					BigInt_ShiftLeft(ref pResult2, (uint)exponent);
					pResult.SetU32(4u);
					BigInt_Pow2(out pResult3, (uint)exponent);
					BigInt_Pow2(out pResult4, (uint)(exponent + 1));
				}
				else
				{
					pResult2.SetU64(4 * mantissa);
					BigInt_Pow2(out pResult, (uint)(-exponent + 2));
					pResult3.SetU32(1u);
					pResult4.SetU32(2u);
				}
				ptr2 = &pResult4;
			}
			else
			{
				if (exponent > 0)
				{
					pResult2.SetU64(2 * mantissa);
					BigInt_ShiftLeft(ref pResult2, (uint)exponent);
					pResult.SetU32(2u);
					BigInt_Pow2(out pResult3, (uint)exponent);
				}
				else
				{
					pResult2.SetU64(2 * mantissa);
					BigInt_Pow2(out pResult, (uint)(-exponent + 1));
					pResult3.SetU32(1u);
				}
				ptr2 = &pResult3;
			}
			double a = (double)((int)mantissaHighBitIdx + exponent) * 0.3010299956639812 - 0.69;
			a = Math.Ceiling(a);
			int num = (int)a;
			if (cutoffMode == CutoffMode.FractionLength && num <= (int)(0 - cutoffNumber))
			{
				num = (int)(0 - cutoffNumber + 1);
			}
			if (num > 0)
			{
				BigInt_MultiplyPow10(out var pResult5, in pResult, (uint)num);
				pResult = pResult5;
			}
			else if (num < 0)
			{
				BigInt_Pow10(out var pResult6, (uint)(-num));
				BigInt_Multiply(out var pResult7, in pResult2, in pResult6);
				pResult2 = pResult7;
				BigInt_Multiply(out pResult7, in pResult3, in pResult6);
				pResult3 = pResult7;
				if (ptr2 != &pResult3)
				{
					BigInt_Multiply2(out *ptr2, in pResult3);
				}
			}
			if (BigInt_Compare(in pResult2, in pResult) >= 0)
			{
				num++;
			}
			else
			{
				BigInt_Multiply10(ref pResult2);
				BigInt_Multiply10(ref pResult3);
				if (ptr2 != &pResult3)
				{
					BigInt_Multiply2(out *ptr2, in pResult3);
				}
			}
			int num2 = num - (int)bufferSize;
			switch (cutoffMode)
			{
			case CutoffMode.TotalLength:
			{
				int num4 = num - (int)cutoffNumber;
				if (num4 > num2)
				{
					num2 = num4;
				}
				break;
			}
			case CutoffMode.FractionLength:
			{
				int num3 = (int)(0 - cutoffNumber);
				if (num3 > num2)
				{
					num2 = num3;
				}
				break;
			}
			}
			pOutExponent = num - 1;
			uint block = pResult.GetBlock(pResult.GetLength() - 1);
			if (block < 8 || block > 429496729)
			{
				uint num5 = LogBase2(block);
				uint shift = (59 - num5) % 32;
				BigInt_ShiftLeft(ref pResult, shift);
				BigInt_ShiftLeft(ref pResult2, shift);
				BigInt_ShiftLeft(ref pResult3, shift);
				if (ptr2 != &pResult3)
				{
					BigInt_Multiply2(out *ptr2, in pResult3);
				}
			}
			uint num6;
			bool flag;
			bool flag2;
			if (cutoffMode == CutoffMode.Unique)
			{
				while (true)
				{
					num--;
					num6 = BigInt_DivideWithRemainder_MaxQuotient9(ref pResult2, in pResult);
					BigInt_Add(out var pResult8, in pResult2, in *ptr2);
					flag = BigInt_Compare(in pResult2, in pResult3) < 0;
					flag2 = BigInt_Compare(in pResult8, in pResult) > 0;
					if (flag || flag2 || num == num2)
					{
						break;
					}
					*ptr = (byte)(48 + num6);
					ptr++;
					BigInt_Multiply10(ref pResult2);
					BigInt_Multiply10(ref pResult3);
					if (ptr2 != &pResult3)
					{
						BigInt_Multiply2(out *ptr2, in pResult3);
					}
				}
			}
			else
			{
				flag = false;
				flag2 = false;
				while (true)
				{
					num--;
					num6 = BigInt_DivideWithRemainder_MaxQuotient9(ref pResult2, in pResult);
					if (pResult2.IsZero() || num == num2)
					{
						break;
					}
					*ptr = (byte)(48 + num6);
					ptr++;
					BigInt_Multiply10(ref pResult2);
				}
			}
			bool flag3 = flag;
			if (flag == flag2)
			{
				BigInt_Multiply2(ref pResult2);
				int num7 = BigInt_Compare(in pResult2, in pResult);
				flag3 = num7 < 0;
				if (num7 == 0)
				{
					flag3 = (num6 & 1) == 0;
				}
			}
			if (flag3)
			{
				*ptr = (byte)(48 + num6);
				ptr++;
			}
			else if (num6 == 9)
			{
				while (true)
				{
					if (ptr == pOutBuffer)
					{
						*ptr = 49;
						ptr++;
						pOutExponent++;
						break;
					}
					ptr--;
					if (*ptr != 57)
					{
						byte* intPtr = ptr;
						(*intPtr)++;
						ptr++;
						break;
					}
				}
			}
			else
			{
				*ptr = (byte)(48 + num6 + 1);
				ptr++;
			}
			return (uint)(ptr - pOutBuffer);
		}

		private unsafe static int FormatPositional(byte* pOutBuffer, uint bufferSize, ulong mantissa, int exponent, uint mantissaHighBitIdx, bool hasUnequalMargins, int precision)
		{
			uint num = bufferSize - 1;
			int pOutExponent;
			uint num2 = ((precision >= 0) ? Dragon4(mantissa, exponent, mantissaHighBitIdx, hasUnequalMargins, CutoffMode.FractionLength, (uint)precision, pOutBuffer, num, out pOutExponent) : Dragon4(mantissa, exponent, mantissaHighBitIdx, hasUnequalMargins, CutoffMode.Unique, 0u, pOutBuffer, num, out pOutExponent));
			uint num3 = 0u;
			if (pOutExponent >= 0)
			{
				uint num4 = (uint)(pOutExponent + 1);
				if (num2 < num4)
				{
					if (num4 > num)
					{
						num4 = num;
					}
					for (; num2 < num4; num2++)
					{
						pOutBuffer[num2] = 48;
					}
				}
				else if (num2 > num4)
				{
					num3 = num2 - num4;
					uint num5 = num - num4 - 1;
					if (num3 > num5)
					{
						num3 = num5;
					}
					Unsafe.CopyBlock((void*)(pOutBuffer + num4 + 1), (void*)(pOutBuffer + num4), num3);
					pOutBuffer[num4] = 46;
					num2 = num4 + 1 + num3;
				}
			}
			else
			{
				if (num > 2)
				{
					uint num6 = (uint)(-pOutExponent - 1);
					uint num7 = num - 2;
					if (num6 > num7)
					{
						num6 = num7;
					}
					uint num8 = 2 + num6;
					num3 = num2;
					uint num9 = num - num8;
					if (num3 > num9)
					{
						num3 = num9;
					}
					Unsafe.CopyBlock((void*)(pOutBuffer + num8), (void*)pOutBuffer, num3);
					for (uint num10 = 2u; num10 < num8; num10++)
					{
						pOutBuffer[num10] = 48;
					}
					num3 += num6;
					num2 = num3;
				}
				if (num > 1)
				{
					pOutBuffer[1] = 46;
					num2++;
				}
				if (num != 0)
				{
					*pOutBuffer = 48;
					num2++;
				}
			}
			if (precision > (int)num3 && num2 < num)
			{
				if (num3 == 0)
				{
					pOutBuffer[num2++] = 46;
				}
				uint num11 = (uint)(num2 + (precision - (int)num3));
				if (num11 > num)
				{
					num11 = num;
				}
				for (; num2 < num11; num2++)
				{
					pOutBuffer[num2] = 48;
				}
			}
			return (int)num2;
		}

		private unsafe static int FormatScientific(byte* pOutBuffer, uint bufferSize, ulong mantissa, int exponent, uint mantissaHighBitIdx, bool hasUnequalMargins, int precision)
		{
			int pOutExponent;
			uint num = ((precision >= 0) ? Dragon4(mantissa, exponent, mantissaHighBitIdx, hasUnequalMargins, CutoffMode.TotalLength, (uint)(precision + 1), pOutBuffer, bufferSize, out pOutExponent) : Dragon4(mantissa, exponent, mantissaHighBitIdx, hasUnequalMargins, CutoffMode.Unique, 0u, pOutBuffer, bufferSize, out pOutExponent));
			byte* ptr = pOutBuffer;
			if (bufferSize > 1)
			{
				ptr++;
				bufferSize--;
			}
			uint num2 = num - 1;
			if (num2 != 0 && bufferSize > 1)
			{
				uint num3 = bufferSize - 2;
				if (num2 > num3)
				{
					num2 = num3;
				}
				Unsafe.CopyBlock((void*)(ptr + 1), (void*)ptr, num2);
				*ptr = 46;
				ptr += 1 + num2;
				bufferSize -= 1 + num2;
			}
			if (precision > (int)num2 && bufferSize > 1)
			{
				if (num2 == 0)
				{
					*ptr = 46;
					ptr++;
					bufferSize--;
				}
				uint num4 = (uint)(precision - num2);
				if (num4 > bufferSize - 1)
				{
					num4 = bufferSize - 1;
				}
				for (byte* ptr2 = ptr + num4; ptr < ptr2; ptr++)
				{
					*ptr = 48;
				}
			}
			if (bufferSize > 1)
			{
				byte* ptr3 = stackalloc byte[5];
				*ptr3 = 101;
				if (pOutExponent >= 0)
				{
					ptr3[1] = 43;
				}
				else
				{
					ptr3[1] = 45;
					pOutExponent = -pOutExponent;
				}
				uint num5 = (uint)(pOutExponent / 100);
				uint num6 = (uint)((pOutExponent - num5 * 100) / 10);
				uint num7 = (uint)(pOutExponent - num5 * 100 - num6 * 10);
				ptr3[2] = (byte)(48 + num5);
				ptr3[3] = (byte)(48 + num6);
				ptr3[4] = (byte)(48 + num7);
				uint num8 = bufferSize - 1;
				uint num9 = ((5 < num8) ? 5u : num8);
				Unsafe.CopyBlock((void*)ptr, (void*)ptr3, num9);
				ptr += num9;
				bufferSize -= num9;
			}
			return (int)(ptr - pOutBuffer);
		}

		private unsafe static void FormatInfinityNaN(byte* dest, ref int destIndex, int destLength, ulong mantissa, bool isNegative, FormatOptions formatOptions)
		{
			int length = ((mantissa == 0L) ? (8 + (isNegative ? 1 : 0)) : 3);
			int alignAndSize = formatOptions.AlignAndSize;
			if (AlignLeft(dest, ref destIndex, destLength, alignAndSize, length))
			{
				return;
			}
			if (mantissa == 0)
			{
				if (isNegative)
				{
					if (destIndex >= destLength)
					{
						return;
					}
					dest[destIndex++] = 45;
				}
				for (int i = 0; i < 8; i++)
				{
					if (destIndex >= destLength)
					{
						return;
					}
					dest[destIndex++] = InfinityString[i];
				}
			}
			else
			{
				for (int j = 0; j < 3; j++)
				{
					if (destIndex >= destLength)
					{
						return;
					}
					dest[destIndex++] = NanString[j];
				}
			}
			AlignRight(dest, ref destIndex, destLength, alignAndSize, length);
		}

		[MethodImpl(MethodImplOptions.NoInlining)]
		private unsafe static void ConvertFloatToString(byte* dest, ref int destIndex, int destLength, float value, FormatOptions formatOptions)
		{
			tFloatUnion32 tFloatUnion = default(tFloatUnion32);
			tFloatUnion.m_floatingPoint = value;
			uint exponent = tFloatUnion.GetExponent();
			uint mantissa = tFloatUnion.GetMantissa();
			uint num;
			int exponent2;
			uint mantissaHighBitIdx;
			bool hasUnequalMargins;
			switch (exponent)
			{
			case 255u:
				FormatInfinityNaN(dest, ref destIndex, destLength, mantissa, tFloatUnion.IsNegative(), formatOptions);
				return;
			default:
				num = (uint)(0x800000uL | (ulong)mantissa);
				exponent2 = (int)(exponent - 127 - 23);
				mantissaHighBitIdx = 23u;
				hasUnequalMargins = exponent != 1 && mantissa == 0;
				break;
			case 0u:
				num = mantissa;
				exponent2 = -149;
				mantissaHighBitIdx = LogBase2(num);
				hasUnequalMargins = false;
				break;
			}
			int num2 = ((formatOptions.Specifier == 0) ? (-1) : formatOptions.Specifier);
			int num3 = Math.Max(10, num2 + 1);
			byte* ptr = stackalloc byte[(int)(uint)num3];
			if (num2 < 0)
			{
				num2 = 7;
			}
			int pOutExponent;
			uint num4 = Dragon4(num, exponent2, mantissaHighBitIdx, hasUnequalMargins, CutoffMode.TotalLength, (uint)num2, ptr, (uint)(num3 - 1), out pOutExponent);
			ptr[num4] = 0;
			bool isNegative = tFloatUnion.IsNegative();
			if (tFloatUnion.m_integer == 2147483648u)
			{
				isNegative = false;
			}
			NumberBuffer number = new NumberBuffer(NumberBufferKind.Float, ptr, (int)num4, pOutExponent + 1, isNegative);
			FormatNumber(dest, ref destIndex, destLength, ref number, num2, formatOptions);
		}

		[MethodImpl(MethodImplOptions.NoInlining)]
		private unsafe static void ConvertDoubleToString(byte* dest, ref int destIndex, int destLength, double value, FormatOptions formatOptions)
		{
			tFloatUnion64 tFloatUnion = default(tFloatUnion64);
			tFloatUnion.m_floatingPoint = value;
			uint exponent = tFloatUnion.GetExponent();
			ulong mantissa = tFloatUnion.GetMantissa();
			ulong num;
			int exponent2;
			uint mantissaHighBitIdx;
			bool hasUnequalMargins;
			switch (exponent)
			{
			case 2047u:
				FormatInfinityNaN(dest, ref destIndex, destLength, mantissa, tFloatUnion.IsNegative(), formatOptions);
				return;
			default:
				num = 0x10000000000000uL | mantissa;
				exponent2 = (int)(exponent - 1023 - 52);
				mantissaHighBitIdx = 52u;
				hasUnequalMargins = exponent != 1 && mantissa == 0;
				break;
			case 0u:
				num = mantissa;
				exponent2 = -1074;
				mantissaHighBitIdx = LogBase2((uint)num);
				hasUnequalMargins = false;
				break;
			}
			int num2 = ((formatOptions.Specifier == 0) ? (-1) : formatOptions.Specifier);
			int num3 = Math.Max(18, num2 + 1);
			byte* ptr = stackalloc byte[(int)(uint)num3];
			if (num2 < 0)
			{
				num2 = 15;
			}
			int pOutExponent;
			uint num4 = Dragon4(num, exponent2, mantissaHighBitIdx, hasUnequalMargins, CutoffMode.TotalLength, (uint)num2, ptr, (uint)(num3 - 1), out pOutExponent);
			ptr[num4] = 0;
			bool isNegative = tFloatUnion.IsNegative();
			if (tFloatUnion.m_integer == 9223372036854775808uL)
			{
				isNegative = false;
			}
			NumberBuffer number = new NumberBuffer(NumberBufferKind.Float, ptr, (int)num4, pOutExponent + 1, isNegative);
			FormatNumber(dest, ref destIndex, destLength, ref number, num2, formatOptions);
		}
	}
	internal enum DiagnosticId
	{
		ERR_InternalCompilerErrorInBackend = 100,
		ERR_InternalCompilerErrorInFunction = 101,
		ERR_InternalCompilerErrorInInstruction = 102,
		ERR_OnlyStaticMethodsAllowed = 1000,
		ERR_UnableToAccessManagedMethod = 1001,
		ERR_UnableToFindInterfaceMethod = 1002,
		ERR_UnexpectedEmptyMethodBody = 1003,
		ERR_ManagedArgumentsNotSupported = 1004,
		ERR_CatchConstructionNotSupported = 1006,
		ERR_CatchAndFilterConstructionNotSupported = 1007,
		ERR_LdfldaWithFixedArrayExpected = 1008,
		ERR_PointerExpected = 1009,
		ERR_LoadingFieldFromManagedObjectNotSupported = 1010,
		ERR_LoadingFieldWithManagedTypeNotSupported = 1011,
		ERR_LoadingArgumentWithManagedTypeNotSupported = 1012,
		ERR_CallingBurstDiscardMethodWithReturnValueNotSupported = 1015,
		ERR_CallingManagedMethodNotSupported = 1016,
		ERR_InstructionUnboxNotSupported = 1019,
		ERR_InstructionBoxNotSupported = 1020,
		ERR_InstructionNewobjWithManagedTypeNotSupported = 1021,
		ERR_AccessingManagedArrayNotSupported = 1022,
		ERR_InstructionLdtokenFieldNotSupported = 1023,
		ERR_InstructionLdtokenMethodNotSupported = 1024,
		ERR_InstructionLdtokenTypeNotSupported = 1025,
		ERR_InstructionLdtokenNotSupported = 1026,
		ERR_InstructionLdvirtftnNotSupported = 1027,
		ERR_InstructionNewarrNotSupported = 1028,
		ERR_InstructionRethrowNotSupported = 1029,
		ERR_InstructionCastclassNotSupported = 1030,
		ERR_InstructionLdftnNotSupported = 1032,
		ERR_InstructionLdstrNotSupported = 1033,
		ERR_InstructionStsfldNotSupported = 1034,
		ERR_InstructionEndfilterNotSupported = 1035,
		ERR_InstructionEndfinallyNotSupported = 1036,
		ERR_InstructionLeaveNotSupported = 1037,
		ERR_InstructionNotSupported = 1038,
		ERR_LoadingFromStaticFieldNotSupported = 1039,
		ERR_LoadingFromNonReadonlyStaticFieldNotSupported = 1040,
		ERR_LoadingFromManagedStaticFieldNotSupported = 1041,
		ERR_LoadingFromManagedNonReadonlyStaticFieldNotSupported = 1042,
		ERR_InstructionStfldToManagedObjectNotSupported = 1043,
		ERR_InstructionLdlenNonConstantLengthNotSupported = 1044,
		ERR_StructWithAutoLayoutNotSupported = 1045,
		ERR_StructWithGenericParametersAndExplicitLayoutNotSupported = 1047,
		ERR_StructSizeNotSupported = 1048,
		ERR_StructZeroSizeNotSupported = 1049,
		ERR_MarshalAsOnFieldNotSupported = 1050,
		ERR_TypeNotSupported = 1051,
		ERR_RequiredTypeModifierNotSupported = 1052,
		ERR_ErrorWhileProcessingVariable = 1053,
		ERR_UnableToResolveType = 1054,
		ERR_UnableToResolveMethod = 1055,
		ERR_ConstructorNotSupported = 1056,
		ERR_FunctionPointerMethodMissingBurstCompileAttribute = 1057,
		ERR_FunctionPointerTypeMissingBurstCompileAttribute = 1058,
		ERR_FunctionPointerMethodAndTypeMissingBurstCompileAttribute = 1059,
		INF_FunctionPointerMethodAndTypeMissingMonoPInvokeCallbackAttribute = 10590,
		ERR_MarshalAsOnParameterNotSupported = 1061,
		ERR_MarshalAsOnReturnTypeNotSupported = 1062,
		ERR_TypeNotBlittableForFunctionPointer = 1063,
		ERR_StructByValueNotSupported = 1064,
		ERR_StructsWithNonUnicodeCharsNotSupported = 1066,
		ERR_VectorsByValueNotSupported = 1067,
		ERR_MissingExternBindings = 1068,
		ERR_MarshalAsNativeTypeOnReturnTypeNotSupported = 1069,
		ERR_AssertTypeNotSupported = 1071,
		ERR_StoringToReadOnlyFieldNotAllowed = 1072,
		ERR_StoringToFieldInReadOnlyParameterNotAllowed = 1073,
		ERR_StoringToReadOnlyParameterNotAllowed = 1074,
		ERR_TypeManagerStaticFieldNotCompatible = 1075,
		ERR_UnableToFindTypeIndexForTypeManagerType = 1076,
		ERR_UnableToFindFieldForTypeManager = 1077,
		ERR_CircularStaticConstructorUsage = 1090,
		ERR_ExternalInternalCallsInStaticConstructorsNotSupported = 1091,
		ERR_PlatformNotSupported = 1092,
		ERR_InitModuleVerificationError = 1093,
		ERR_ModuleVerificationError = 1094,
		ERR_UnableToFindTypeRequiredForTypeManager = 1095,
		ERR_UnexpectedIntegerTypesForBinaryOperation = 1096,
		ERR_BinaryOperationNotSupported = 1097,
		ERR_CalliWithThisNotSupported = 1098,
		ERR_CalliNonCCallingConventionNotSupported = 1099,
		ERR_StringLiteralTooBig = 1100,
		ERR_LdftnNonCCallingConventionNotSupported = 1101,
		ERR_UnableToCallMethodOnInterfaceObject = 1102,
		ERR_UnsupportedCpuDependentBranch = 1199,
		ERR_InstructionTargetCpuFeatureNotAllowedInThisBlock = 1200,
		ERR_AssumeRangeTypeMustBeInteger = 1201,
		ERR_AssumeRangeTypeMustBeSameSign = 1202,
		ERR_UnsupportedSpillTransform = 1300,
		ERR_UnsupportedSpillTransformTooManyUsers = 1301,
		ERR_MethodNotSupported = 1302,
		ERR_VectorsLoadFieldIsAddress = 1303,
		ERR_ConstantExpressionRequired = 1304,
		ERR_PointerArgumentsUnexpectedAliasing = 1310,
		ERR_LoopIntrinsicMustBeCalledInsideLoop = 1320,
		ERR_LoopUnexpectedAutoVectorization = 1321,
		WRN_LoopIntrinsicCalledButLoopOptimizedAway = 1322,
		ERR_AssertArgTypesDiffer = 1330,
		ERR_StringInternalCompilerFixedStringTooManyUsers = 1340,
		ERR_StringInvalidFormatMissingClosingBrace = 1341,
		ERR_StringInvalidIntegerForArgumentIndex = 1342,
		ERR_StringInvalidFormatForArgument = 1343,
		ERR_StringArgumentIndexOutOfRange = 1344,
		ERR_StringInvalidArgumentType = 1345,
		ERR_DebugLogNotSupported = 1346,
		ERR_StringInvalidNonLiteralFormat = 1347,
		ERR_StringInvalidStringFormatMethod = 1348,
		ERR_StringInvalidArgument = 1349,
		ERR_StringArrayInvalidArrayCreation = 1350,
		ERR_StringArrayInvalidArraySize = 1351,
		ERR_StringArrayInvalidControlFlow = 1352,
		ERR_StringArrayInvalidArrayIndex = 1353,
		ERR_StringArrayInvalidArrayIndexOutOfRange = 1354,
		ERR_UnmanagedStringMethodMissing = 1355,
		ERR_UnmanagedStringMethodInvalid = 1356,
		ERR_ManagedStaticConstructor = 1360,
		ERR_StaticConstantArrayInStaticConstructor = 1361,
		WRN_ExceptionThrownInNonSafetyCheckGuardedFunction = 1370,
		WRN_ACallToMethodHasBeenDiscarded = 1371,
		ERR_AccessingNestedManagedArrayNotSupported = 1380,
		ERR_LdobjFromANonPointerNonReference = 1381,
		ERR_StringLiteralRequired = 1382,
		ERR_MultiDimensionalArrayUnsupported = 1383,
		ERR_NonBlittableAndNonManagedSequentialStructNotSupported = 1384,
		ERR_VarArgFunctionNotSupported = 1385
	}
	public interface IFunctionPointer
	{
		[Obsolete("This method will be removed in a future version of Burst")]
		IFunctionPointer FromIntPtr(IntPtr ptr);
	}
	public readonly struct FunctionPointer<T> : IFunctionPointer
	{
		[NativeDisableUnsafePtrRestriction]
		private readonly IntPtr _ptr;

		public IntPtr Value => _ptr;

		public T Invoke => Marshal.GetDelegateForFunctionPointer<T>(_ptr);

		public bool IsCreated => _ptr != IntPtr.Zero;

		public FunctionPointer(IntPtr ptr)
		{
			_ptr = ptr;
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		private void CheckIsCreated()
		{
			if (!IsCreated)
			{
				throw new NullReferenceException("Object reference not set to an instance of an object");
			}
		}

		IFunctionPointer IFunctionPointer.FromIntPtr(IntPtr ptr)
		{
			return new FunctionPointer<T>(ptr);
		}
	}
	[AttributeUsage(AttributeTargets.Struct | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue)]
	public class NoAliasAttribute : Attribute
	{
	}
	internal static class SafeStringArrayHelper
	{
		public static string SerialiseStringArraySafe(string[] array)
		{
			StringBuilder stringBuilder = new StringBuilder();
			foreach (string text in array)
			{
				stringBuilder.Append($"{Encoding.UTF8.GetByteCount(text)}]");
				stringBuilder.Append(text);
			}
			return stringBuilder.ToString();
		}

		public static string[] DeserialiseStringArraySafe(string input)
		{
			byte[] bytes = Encoding.UTF8.GetBytes(input);
			List<string> list = new List<string>();
			int num = 0;
			int num2 = bytes.Length;
			while (num < num2)
			{
				int num3 = 0;
				while (true)
				{
					if (num >= num2)
					{
						throw new FormatException("Invalid input `" + input + "`: reached end while reading length");
					}
					byte b = bytes[num];
					if (b == 93)
					{
						break;
					}
					if (b < 48 || b > 57)
					{
						throw new FormatException($"Invalid input `{input}` at {num}: Got non-digit character while reading length");
					}
					num3 = num3 * 10 + (b - 48);
					num++;
				}
				num++;
				list.Add(Encoding.UTF8.GetString(bytes, num, num3));
				num += num3;
			}
			return list.ToArray();
		}
	}
	public readonly struct SharedStatic<T> where T : struct
	{
		private unsafe readonly void* _buffer;

		private const uint DefaultAlignment = 16u;

		public unsafe ref T Data => ref Unsafe.AsRef<T>(_buffer);

		public unsafe void* UnsafeDataPointer => _buffer;

		private unsafe SharedStatic(void* buffer)
		{
			_buffer = buffer;
		}

		public static SharedStatic<T> GetOrCreate<TContext>(uint alignment = 0u)
		{
			return GetOrCreateUnsafe(alignment, BurstRuntime.GetHashCode64<TContext>(), 0L);
		}

		public static SharedStatic<T> GetOrCreate<TContext, TSubContext>(uint alignment = 0u)
		{
			return GetOrCreateUnsafe(alignment, BurstRuntime.GetHashCode64<TContext>(), BurstRuntime.GetHashCode64<TSubContext>());
		}

		public unsafe static SharedStatic<T> GetOrCreateUnsafe(uint alignment, long hashCode, long subHashCode)
		{
			return new SharedStatic<T>(SharedStatic.GetOrCreateSharedStaticInternal(hashCode, subHashCode, (uint)UnsafeUtility.SizeOf<T>(), (alignment == 0) ? 16u : alignment));
		}

		public unsafe static SharedStatic<T> GetOrCreatePartiallyUnsafeWithHashCode<TSubContext>(uint alignment, long hashCode)
		{
			return new SharedStatic<T>(SharedStatic.GetOrCreateSharedStaticInternal(hashCode, BurstRuntime.GetHashCode64<TSubContext>(), (uint)UnsafeUtility.SizeOf<T>(), (alignment == 0) ? 16u : alignment));
		}

		public unsafe static SharedStatic<T> GetOrCreatePartiallyUnsafeWithSubHashCode<TContext>(uint alignment, long subHashCode)
		{
			return new SharedStatic<T>(SharedStatic.GetOrCreateSharedStaticInternal(BurstRuntime.GetHashCode64<TContext>(), subHashCode, (uint)UnsafeUtility.SizeOf<T>(), (alignment == 0) ? 16u : alignment));
		}

		public static SharedStatic<T> GetOrCreate(Type contextType, uint alignment = 0u)
		{
			return GetOrCreateUnsafe(alignment, BurstRuntime.GetHashCode64(contextType), 0L);
		}

		public static SharedStatic<T> GetOrCreate(Type contextType, Type subContextType, uint alignment = 0u)
		{
			return GetOrCreateUnsafe(alignment, BurstRuntime.GetHashCode64(contextType), BurstRuntime.GetHashCode64(subContextType));
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		private static void CheckIf_T_IsUnmanagedOrThrow()
		{
			if (!UnsafeUtility.IsUnmanaged<T>())
			{
				throw new InvalidOperationException($"The type {typeof(T)} used in SharedStatic<{typeof(T)}> must be unmanaged (contain no managed types).");
			}
		}
	}
	internal static class SharedStatic
	{
		internal class PreserveAttribute : Attribute
		{
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		private static void CheckSizeOf(uint sizeOf)
		{
			if (sizeOf == 0)
			{
				throw new ArgumentException("sizeOf must be > 0", "sizeOf");
			}
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		private unsafe static void CheckResult(void* result)
		{
			if (result == null)
			{
				throw new InvalidOperationException("Unable to create a SharedStatic for this key. This is most likely due to the size of the struct inside of the SharedStatic having changed or the same key being reused for differently sized values. To fix this the editor needs to be restarted.");
			}
		}

		[Preserve]
		public unsafe static void* GetOrCreateSharedStaticInternal(long getHashCode64, long getSubHashCode64, uint sizeOf, uint alignment)
		{
			Hash128 val = default(Hash128);
			((Hash128)(ref val))..ctor((ulong)getHashCode64, (ulong)getSubHashCode64);
			return BurstCompilerService.GetOrCreateSharedMemory(ref val, sizeOf, alignment);
		}
	}
}
namespace Unity.Burst.Intrinsics
{
	public static class Arm
	{
		public class Neon
		{
			public static bool IsNeonSupported => false;

			public static bool IsNeonArmv82FeaturesSupported => false;

			public static bool IsNeonCryptoSupported => false;

			public static bool IsNeonDotProdSupported => false;

			public static bool IsNeonRDMASupported => false;

			[DebuggerStepThrough]
			public static v64 vadd_s8(v64 a0, v64 a1)
			{
				throw new NotImplementedException();
			}

			[DebuggerStepThrough]
			public static v128 vaddq_s8(v128 a0, v128 a1)
			{
				throw new NotImplementedException();
			}

			[DebuggerStepThrough]
			public static v64 vadd_s16(v64 a0, v64 a1)
			{
				throw new NotImplementedException();
			}

			[DebuggerStepThrough]
			public static v128 vaddq_s16(v128 a0, v128 a1)
			{
				throw new NotImplementedException();
			}

			[DebuggerStepThrough]
			public static v64 vadd_s32(v64 a0, v64 a1)
			{
				throw new NotImplementedException();
			}

			[DebuggerStepThrough]
			public static v128 vaddq_s32(v128 a0, v128 a1)
			{
				throw new NotImplementedException();
			}

			[DebuggerStepThrough]
			public static v64 vadd_s64(v64 a0, v64 a1)
			{
				throw new NotImplementedException();
			}

			[DebuggerStepThrough]
			public static v128 vaddq_s64(v128 a0, v128 a1)
			{
				throw new NotImplementedException();
			}

			[DebuggerStepThrough]
			public static v64 vadd_u8(v64 a0, v64 a1)
			{
				return vadd_s8(a0, a1);
			}

			[DebuggerStepThrough]
			public static v128 vaddq_u8(v128 a0, v128 a1)
			{
				return vaddq_s8(a0, a1);
			}

			[DebuggerStepThrough]
			public static v64 vadd_u16(v64 a0, v64 a1)
			{
				return vadd_s16(a0, a1);
			}

			[DebuggerStepThrough]
			public static v128 vaddq_u16(v128 a0, v128 a1)
			{
				return vaddq_s16(a0, a1);
			}

			[DebuggerStepThrough]
			public static v64 vadd_u32(v64 a0, v64 a1)
			{
				return vadd_s32(a0, a1);
			}

			[DebuggerStepThrough]
			public static v128 vaddq_u32(v128 a0, v128 a1)
			{
				return vaddq_s32(a0, a1);
			}

			[DebuggerStepThrough]
			public static v64 vadd_u64(v64 a0, v64 a1)
			{
				return vadd_s64(a0, a1);
			}

			[DebuggerStepThrough]
			public static v128 vaddq_u64(v128 a0, v128 a1)
			{
				return vaddq_s64(a0, a1);
			}

			[DebuggerStepThrough]
			public static v64 vadd_f32(v64 a0, v64 a1)
			{
				throw new NotImplementedException();
			}

			[DebuggerStepThrough]
			public static v128 vaddq_f32(v128 a0, v128 a1)
			{
				throw new NotImplementedException();
			}

			[DebuggerStepThrough]
			public static v128 vaddl_s8(v64 a0, v64 a1)
			{
				throw new NotImplementedException();
			}

			[DebuggerStepThrough]
			public static v128 vaddl_s16(v64 a0, v64 a1)
			{
				throw new NotImplementedException();
			}

			[DebuggerStepThrough]
			public static v128 vaddl_s32(v64 a0, v64 a1)
			{
				throw new NotImplementedException();
			}

			[DebuggerStepThrough]
			public static v128 vaddl_u8(v64 a0, v64 a1)
			{
				throw new NotImplementedExceptio

plugins/.RuntimeAssemblies/Unity.Burst.Unsafe.dll

Decompiled 3 weeks ago
using System;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;

[assembly: AssemblyCompany("Microsoft Corporation")]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: InternalsVisibleTo("Unity.Burst")]
[assembly: AssemblyFileVersion("4.0.0.0")]
[assembly: AssemblyInformationalVersion("4.0.0.0")]
[assembly: AssemblyTitle("Unity.Burst.Unsafe")]
[assembly: AssemblyDescription("System.Runtime.CompilerServices.Unsafe")]
[assembly: AssemblyMetadata(".NETFrameworkAssembly", "")]
[assembly: AssemblyMetadata("Serviceable", "True")]
[assembly: AssemblyCopyright("© Microsoft Corporation.  All rights reserved.")]
[assembly: AssemblyProduct("Microsoft® .NET Framework")]
[assembly: CLSCompliant(false)]
[assembly: CompilationRelaxations(8)]
[assembly: AssemblyVersion("4.0.5.0")]
namespace Unity.Burst
{
	internal static class Unsafe : Object
	{
		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static T Read<T>(void* source)
		{
			return System.Runtime.CompilerServices.Unsafe.Read<T>(source);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static T ReadUnaligned<T>(void* source)
		{
			return System.Runtime.CompilerServices.Unsafe.ReadUnaligned<T>(source);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static T ReadUnaligned<T>(ref byte source)
		{
			return System.Runtime.CompilerServices.Unsafe.ReadUnaligned<T>(ref source);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static void Write<T>(void* destination, T value)
		{
			System.Runtime.CompilerServices.Unsafe.Write(destination, value);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static void WriteUnaligned<T>(void* destination, T value)
		{
			System.Runtime.CompilerServices.Unsafe.WriteUnaligned(destination, value);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static void WriteUnaligned<T>(ref byte destination, T value)
		{
			System.Runtime.CompilerServices.Unsafe.WriteUnaligned(ref destination, value);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static void Copy<T>(void* destination, ref T source)
		{
			System.Runtime.CompilerServices.Unsafe.Write(destination, source);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static void Copy<T>(ref T destination, void* source)
		{
			destination = System.Runtime.CompilerServices.Unsafe.Read<T>(source);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static void* AsPointer<T>(ref T value)
		{
			return System.Runtime.CompilerServices.Unsafe.AsPointer(ref value);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static int SizeOf<T>()
		{
			return System.Runtime.CompilerServices.Unsafe.SizeOf<T>();
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static void CopyBlock(void* destination, void* source, uint byteCount)
		{
			// IL cpblk instruction
			System.Runtime.CompilerServices.Unsafe.CopyBlock(destination, source, byteCount);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static void CopyBlock(ref byte destination, ref byte source, uint byteCount)
		{
			// IL cpblk instruction
			System.Runtime.CompilerServices.Unsafe.CopyBlock(ref destination, ref source, byteCount);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static void CopyBlockUnaligned(void* destination, void* source, uint byteCount)
		{
			// IL cpblk instruction
			System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned(destination, source, byteCount);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static void CopyBlockUnaligned(ref byte destination, ref byte source, uint byteCount)
		{
			// IL cpblk instruction
			System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned(ref destination, ref source, byteCount);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static void InitBlock(void* startAddress, byte value, uint byteCount)
		{
			// IL initblk instruction
			System.Runtime.CompilerServices.Unsafe.InitBlock(startAddress, value, byteCount);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static void InitBlock(ref byte startAddress, byte value, uint byteCount)
		{
			// IL initblk instruction
			System.Runtime.CompilerServices.Unsafe.InitBlock(ref startAddress, value, byteCount);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static void InitBlockUnaligned(void* startAddress, byte value, uint byteCount)
		{
			// IL initblk instruction
			System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned(startAddress, value, byteCount);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static void InitBlockUnaligned(ref byte startAddress, byte value, uint byteCount)
		{
			// IL initblk instruction
			System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned(ref startAddress, value, byteCount);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static T As<T>(object o) where T : class
		{
			return (T)o;
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static ref T AsRef<T>(void* source)
		{
			return ref *(T*)source;
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static ref T AsRef<T>(in T source)
		{
			return ref source;
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static ref TTo As<TFrom, TTo>(ref TFrom source)
		{
			return ref System.Runtime.CompilerServices.Unsafe.As<TFrom, TTo>(ref source);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static ref T Unbox<T>(object box) where T : struct, ValueType
		{
			return ref (T)box;
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static ref T Add<T>(ref T source, int elementOffset)
		{
			return ref System.Runtime.CompilerServices.Unsafe.Add(ref source, elementOffset);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static void* Add<T>(void* source, int elementOffset)
		{
			return (byte*)source + (nint)elementOffset * (nint)System.Runtime.CompilerServices.Unsafe.SizeOf<T>();
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static ref T Add<T>(ref T source, System.IntPtr elementOffset)
		{
			return ref System.Runtime.CompilerServices.Unsafe.Add(ref source, elementOffset);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static ref T AddByteOffset<T>(ref T source, System.IntPtr byteOffset)
		{
			return ref System.Runtime.CompilerServices.Unsafe.AddByteOffset(ref source, byteOffset);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static ref T Subtract<T>(ref T source, int elementOffset)
		{
			return ref System.Runtime.CompilerServices.Unsafe.Subtract(ref source, elementOffset);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static void* Subtract<T>(void* source, int elementOffset)
		{
			return (byte*)source - (nint)elementOffset * (nint)System.Runtime.CompilerServices.Unsafe.SizeOf<T>();
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static ref T Subtract<T>(ref T source, System.IntPtr elementOffset)
		{
			return ref System.Runtime.CompilerServices.Unsafe.Subtract(ref source, elementOffset);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static ref T SubtractByteOffset<T>(ref T source, System.IntPtr byteOffset)
		{
			return ref System.Runtime.CompilerServices.Unsafe.SubtractByteOffset(ref source, byteOffset);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static System.IntPtr ByteOffset<T>(ref T origin, ref T target)
		{
			return System.Runtime.CompilerServices.Unsafe.ByteOffset(target: ref target, origin: ref origin);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static bool AreSame<T>(ref T left, ref T right)
		{
			return System.Runtime.CompilerServices.Unsafe.AreSame(ref left, ref right);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static bool IsAddressGreaterThan<T>(ref T left, ref T right)
		{
			return System.Runtime.CompilerServices.Unsafe.IsAddressGreaterThan(ref left, ref right);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static bool IsAddressLessThan<T>(ref T left, ref T right)
		{
			return System.Runtime.CompilerServices.Unsafe.IsAddressLessThan(ref left, ref right);
		}
	}
}
namespace System.Runtime.Versioning
{
	[AttributeUsage(/*Could not decode attribute arguments.*/)]
	internal sealed class NonVersionableAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	internal sealed class IsReadOnlyAttribute : Attribute
	{
	}
}

plugins/.RuntimeAssemblies/Unity.Collections.dll

Decompiled 3 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Permissions;
using System.Threading;
using AOT;
using Microsoft.CodeAnalysis;
using Unity.Burst;
using Unity.Burst.CompilerServices;
using Unity.Burst.Intrinsics;
using Unity.Collections;
using Unity.Collections.LowLevel.Unsafe;
using Unity.Collections.LowLevel.Unsafe.NotBurstCompatible;
using Unity.Collections.NotBurstCompatible;
using Unity.Jobs;
using Unity.Jobs.LowLevel.Unsafe;
using Unity.Mathematics;
using UnityEngine;
using UnityEngine.Assertions;
using UnityEngine.Scripting;
using UnityEngine.Scripting.APIUpdating;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: InternalsVisibleTo("Unity.Burst.Tests")]
[assembly: InternalsVisibleTo("Unity.Collections.BurstCompatibilityTestCodeGen")]
[assembly: InternalsVisibleTo("Unity.Collections.CodeGen")]
[assembly: InternalsVisibleTo("Unity.Collections.Tests")]
[assembly: InternalsVisibleTo("Unity.Entities")]
[assembly: InternalsVisibleTo("Unity.Entities.CodeGen")]
[assembly: InternalsVisibleTo("Unity.Entities.Tests")]
[assembly: InternalsVisibleTo("Unity.Entities.Editor")]
[assembly: InternalsVisibleTo("Unity.Entities.Editor.Tests")]
[assembly: InternalsVisibleTo("Unity.Rendering.Hybrid")]
[assembly: InternalsVisibleTo("Unity.Runtime")]
[assembly: InternalsVisibleTo("Unity.Runtime.Tests")]
[assembly: InternalsVisibleTo("Unity.Runtime.IO.Tests")]
[assembly: InternalsVisibleTo("Unity.Runtime.UnityInstance")]
[assembly: InternalsVisibleTo("Unity.Tiny.Animation")]
[assembly: InternalsVisibleTo("Unity.Tiny.Core.Tests")]
[assembly: InternalsVisibleTo("Unity.Tiny.GameSave")]
[assembly: InternalsVisibleTo("Unity.Tiny.GameSave.Tests")]
[assembly: InternalsVisibleTo("Unity.Tiny.Rendering.Native")]
[assembly: InternalsVisibleTo("Unity.Scenes")]
[assembly: InternalsVisibleTo("Unity.Scenes.Editor")]
[assembly: InternalsVisibleTo("Samples.GridPath.Tests")]
[assembly: InternalsVisibleTo("Unity.Entities.PerformanceTests")]
[assembly: StaticTypeReinit(typeof(AllocatorManager.StackAllocator.Try_00000A45$BurstDirectCall))]
[assembly: StaticTypeReinit(typeof(AllocatorManager.SlabAllocator.Try_00000A53$BurstDirectCall))]
[assembly: StaticTypeReinit(typeof(Unity.Collections.Try_00000756$BurstDirectCall))]
[assembly: StaticTypeReinit(typeof(Unity.Collections.Hash64Long_0000078D$BurstDirectCall))]
[assembly: StaticTypeReinit(typeof(Unity.Collections.Hash128Long_00000794$BurstDirectCall))]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.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 IsUnmanagedAttribute : Attribute
	{
	}
}
namespace Unity.Jobs
{
	public class EarlyInitHelpers
	{
		public delegate void EarlyInitFunction();

		private static List<EarlyInitFunction> s_PendingDelegates;

		public static void FlushEarlyInits()
		{
			while (s_PendingDelegates != null)
			{
				List<EarlyInitFunction> list = s_PendingDelegates;
				s_PendingDelegates = null;
				for (int i = 0; i < list.Count; i++)
				{
					try
					{
						list[i]();
					}
					catch (Exception ex)
					{
						Debug.LogException(ex);
					}
				}
			}
		}

		public static void AddEarlyInitFunction(EarlyInitFunction f)
		{
			if (s_PendingDelegates == null)
			{
				s_PendingDelegates = new List<EarlyInitFunction>();
			}
			s_PendingDelegates.Add(f);
		}

		public static void JobReflectionDataCreationFailed(Exception ex, Type jobType)
		{
			Debug.LogError((object)$"Failed to create job reflection data for type ${jobType}:");
			Debug.LogException(ex);
		}
	}
	[JobProducerType(typeof(IJobBurstSchedulableExtensions.JobBurstSchedulableProducer<>))]
	public interface IJobBurstSchedulable
	{
		void Execute();
	}
	public static class IJobBurstSchedulableExtensions
	{
		[StructLayout(LayoutKind.Sequential, Size = 1)]
		internal struct JobBurstSchedulableProducer<T> where T : struct, IJobBurstSchedulable
		{
			internal delegate void ExecuteJobFunction(ref T data, IntPtr additionalPtr, IntPtr bufferRangePatchData, ref JobRanges ranges, int jobIndex);

			internal static readonly SharedStatic<IntPtr> jobReflectionData = SharedStatic<IntPtr>.GetOrCreate<JobBurstSchedulableProducer<T>>(0u);

			[Preserve]
			internal static void Initialize()
			{
				if (jobReflectionData.Data == IntPtr.Zero)
				{
					jobReflectionData.Data = JobsUtility.CreateJobReflectionData(typeof(T), (object)new ExecuteJobFunction(Execute), (object)null, (object)null);
				}
			}

			public static void Execute(ref T data, IntPtr additionalPtr, IntPtr bufferRangePatchData, ref JobRanges ranges, int jobIndex)
			{
				data.Execute();
			}
		}

		public static void EarlyJobInit<T>() where T : struct, IJobBurstSchedulable
		{
			JobBurstSchedulableProducer<T>.Initialize();
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		private static void CheckReflectionDataCorrect(IntPtr reflectionData)
		{
			if (reflectionData == IntPtr.Zero)
			{
				throw new InvalidOperationException("Reflection data was not set up by an Initialize() call");
			}
		}

		public unsafe static JobHandle Schedule<T>(this T jobData, JobHandle dependsOn = default(JobHandle)) where T : struct, IJobBurstSchedulable
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			IntPtr data = JobBurstSchedulableProducer<T>.jobReflectionData.Data;
			JobScheduleParameters val = default(JobScheduleParameters);
			((JobScheduleParameters)(ref val))..ctor(UnsafeUtility.AddressOf<T>(ref jobData), data, dependsOn, (ScheduleMode)2);
			return JobsUtility.Schedule(ref val);
		}

		public unsafe static void Run<T>(this T jobData) where T : struct, IJobBurstSchedulable
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			IntPtr data = JobBurstSchedulableProducer<T>.jobReflectionData.Data;
			JobScheduleParameters val = default(JobScheduleParameters);
			((JobScheduleParameters)(ref val))..ctor(UnsafeUtility.AddressOf<T>(ref jobData), data, default(JobHandle), (ScheduleMode)0);
			JobsUtility.Schedule(ref val);
		}
	}
	[JobProducerType(typeof(IJobParallelForBatchExtensions.JobParallelForBatchProducer<>))]
	public interface IJobParallelForBatch
	{
		void Execute(int startIndex, int count);
	}
	public static class IJobParallelForBatchExtensions
	{
		[StructLayout(LayoutKind.Sequential, Size = 1)]
		internal struct JobParallelForBatchProducer<T> where T : struct, IJobParallelForBatch
		{
			internal delegate void ExecuteJobFunction(ref T jobData, IntPtr additionalPtr, IntPtr bufferRangePatchData, ref JobRanges ranges, int jobIndex);

			internal static readonly SharedStatic<IntPtr> jobReflectionData = SharedStatic<IntPtr>.GetOrCreate<JobParallelForBatchProducer<T>>(0u);

			[Preserve]
			internal static void Initialize()
			{
				if (jobReflectionData.Data == IntPtr.Zero)
				{
					jobReflectionData.Data = JobsUtility.CreateJobReflectionData(typeof(T), (object)new ExecuteJobFunction(Execute), (object)null, (object)null);
				}
			}

			public static void Execute(ref T jobData, IntPtr additionalPtr, IntPtr bufferRangePatchData, ref JobRanges ranges, int jobIndex)
			{
				int num = default(int);
				int num2 = default(int);
				while (JobsUtility.GetWorkStealingRange(ref ranges, jobIndex, ref num, ref num2))
				{
					jobData.Execute(num, num2 - num);
				}
			}
		}

		public static void EarlyJobInit<T>() where T : struct, IJobParallelForBatch
		{
			JobParallelForBatchProducer<T>.Initialize();
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		private static void CheckReflectionDataCorrect(IntPtr reflectionData)
		{
			if (reflectionData == IntPtr.Zero)
			{
				throw new InvalidOperationException("Reflection data was not set up by an Initialize() call");
			}
		}

		public unsafe static JobHandle ScheduleBatch<T>(this T jobData, int arrayLength, int minIndicesPerJobCount, JobHandle dependsOn = default(JobHandle)) where T : struct, IJobParallelForBatch
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			IntPtr data = JobParallelForBatchProducer<T>.jobReflectionData.Data;
			JobScheduleParameters val = default(JobScheduleParameters);
			((JobScheduleParameters)(ref val))..ctor(UnsafeUtility.AddressOf<T>(ref jobData), data, dependsOn, (ScheduleMode)1);
			return JobsUtility.ScheduleParallelFor(ref val, arrayLength, minIndicesPerJobCount);
		}

		public unsafe static void RunBatch<T>(this T jobData, int arrayLength) where T : struct, IJobParallelForBatch
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			IntPtr data = JobParallelForBatchProducer<T>.jobReflectionData.Data;
			JobScheduleParameters val = default(JobScheduleParameters);
			((JobScheduleParameters)(ref val))..ctor(UnsafeUtility.AddressOf<T>(ref jobData), data, default(JobHandle), (ScheduleMode)0);
			JobsUtility.ScheduleParallelFor(ref val, arrayLength, arrayLength);
		}
	}
	[JobProducerType(typeof(IJobParallelForExtensionsBurstSchedulable.JobParallelForBurstSchedulableProducer<>))]
	public interface IJobParallelForBurstSchedulable
	{
		void Execute(int index);
	}
	public static class IJobParallelForExtensionsBurstSchedulable
	{
		[StructLayout(LayoutKind.Sequential, Size = 1)]
		internal struct JobParallelForBurstSchedulableProducer<T> where T : struct, IJobParallelForBurstSchedulable
		{
			internal delegate void ExecuteJobFunction(ref T data, IntPtr additionalPtr, IntPtr bufferRangePatchData, ref JobRanges ranges, int jobIndex);

			internal static readonly SharedStatic<IntPtr> jobReflectionData = SharedStatic<IntPtr>.GetOrCreate<JobParallelForBurstSchedulableProducer<T>>(0u);

			[Preserve]
			internal static void Initialize()
			{
				if (jobReflectionData.Data == IntPtr.Zero)
				{
					jobReflectionData.Data = JobsUtility.CreateJobReflectionData(typeof(T), (object)new ExecuteJobFunction(Execute), (object)null, (object)null);
				}
			}

			public static void Execute(ref T jobData, IntPtr additionalPtr, IntPtr bufferRangePatchData, ref JobRanges ranges, int jobIndex)
			{
				int num = default(int);
				int num2 = default(int);
				while (JobsUtility.GetWorkStealingRange(ref ranges, jobIndex, ref num, ref num2))
				{
					int num3 = num2;
					for (int i = num; i < num3; i++)
					{
						jobData.Execute(i);
					}
				}
			}
		}

		public static void EarlyJobInit<T>() where T : struct, IJobParallelForBurstSchedulable
		{
			JobParallelForBurstSchedulableProducer<T>.Initialize();
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		private static void CheckReflectionDataCorrect(IntPtr reflectionData)
		{
			if (reflectionData == IntPtr.Zero)
			{
				throw new InvalidOperationException("Reflection data was not set up by a call to Initialize()");
			}
		}

		public unsafe static JobHandle Schedule<T>(this T jobData, int arrayLength, int innerloopBatchCount, JobHandle dependsOn = default(JobHandle)) where T : struct, IJobParallelForBurstSchedulable
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			IntPtr data = JobParallelForBurstSchedulableProducer<T>.jobReflectionData.Data;
			JobScheduleParameters val = default(JobScheduleParameters);
			((JobScheduleParameters)(ref val))..ctor(UnsafeUtility.AddressOf<T>(ref jobData), data, dependsOn, (ScheduleMode)1);
			return JobsUtility.ScheduleParallelFor(ref val, arrayLength, innerloopBatchCount);
		}

		public unsafe static void Run<T>(this T jobData, int arrayLength) where T : struct, IJobParallelForBurstSchedulable
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			IntPtr data = JobParallelForBurstSchedulableProducer<T>.jobReflectionData.Data;
			JobScheduleParameters val = default(JobScheduleParameters);
			((JobScheduleParameters)(ref val))..ctor(UnsafeUtility.AddressOf<T>(ref jobData), data, default(JobHandle), (ScheduleMode)0);
			JobsUtility.ScheduleParallelFor(ref val, arrayLength, arrayLength);
		}
	}
	[JobProducerType(typeof(IJobParallelForDeferExtensions.JobParallelForDeferProducer<>))]
	public interface IJobParallelForDefer
	{
		void Execute(int index);
	}
	public static class IJobParallelForDeferExtensions
	{
		[StructLayout(LayoutKind.Sequential, Size = 1)]
		internal struct JobParallelForDeferProducer<T> where T : struct, IJobParallelForDefer
		{
			public delegate void ExecuteJobFunction(ref T jobData, IntPtr additionalPtr, IntPtr bufferRangePatchData, ref JobRanges ranges, int jobIndex);

			internal static readonly SharedStatic<IntPtr> jobReflectionData = SharedStatic<IntPtr>.GetOrCreate<JobParallelForDeferProducer<T>>(0u);

			[Preserve]
			internal static void Initialize()
			{
				if (jobReflectionData.Data == IntPtr.Zero)
				{
					jobReflectionData.Data = JobsUtility.CreateJobReflectionData(typeof(T), (object)new ExecuteJobFunction(Execute), (object)null, (object)null);
				}
			}

			public static void Execute(ref T jobData, IntPtr additionalPtr, IntPtr bufferRangePatchData, ref JobRanges ranges, int jobIndex)
			{
				int num = default(int);
				int num2 = default(int);
				while (JobsUtility.GetWorkStealingRange(ref ranges, jobIndex, ref num, ref num2))
				{
					for (int i = num; i < num2; i++)
					{
						jobData.Execute(i);
					}
				}
			}
		}

		public static void EarlyJobInit<T>() where T : struct, IJobParallelForDefer
		{
			JobParallelForDeferProducer<T>.Initialize();
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		private static void CheckReflectionDataCorrect(IntPtr reflectionData)
		{
			if (reflectionData == IntPtr.Zero)
			{
				throw new InvalidOperationException("Reflection data was not set up by a call to Initialize()");
			}
		}

		public unsafe static JobHandle Schedule<T, U>(this T jobData, NativeList<U> list, int innerloopBatchCount, JobHandle dependsOn = default(JobHandle)) where T : struct, IJobParallelForDefer where U : unmanaged
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			void* atomicSafetyHandlePtr = null;
			return ScheduleInternal(ref jobData, innerloopBatchCount, NativeListUnsafeUtility.GetInternalListDataPtrUnchecked(ref list), atomicSafetyHandlePtr, dependsOn);
		}

		public unsafe static JobHandle ScheduleByRef<T, U>(this ref T jobData, NativeList<U> list, int innerloopBatchCount, JobHandle dependsOn = default(JobHandle)) where T : struct, IJobParallelForDefer where U : unmanaged
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			void* atomicSafetyHandlePtr = null;
			return ScheduleInternal(ref jobData, innerloopBatchCount, NativeListUnsafeUtility.GetInternalListDataPtrUnchecked(ref list), atomicSafetyHandlePtr, dependsOn);
		}

		public unsafe static JobHandle Schedule<T>(this T jobData, int* forEachCount, int innerloopBatchCount, JobHandle dependsOn = default(JobHandle)) where T : struct, IJobParallelForDefer
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			byte* forEachListPtr = (byte*)forEachCount - sizeof(void*);
			return ScheduleInternal(ref jobData, innerloopBatchCount, forEachListPtr, null, dependsOn);
		}

		public unsafe static JobHandle ScheduleByRef<T>(this ref T jobData, int* forEachCount, int innerloopBatchCount, JobHandle dependsOn = default(JobHandle)) where T : struct, IJobParallelForDefer
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			byte* forEachListPtr = (byte*)forEachCount - sizeof(void*);
			return ScheduleInternal(ref jobData, innerloopBatchCount, forEachListPtr, null, dependsOn);
		}

		private unsafe static JobHandle ScheduleInternal<T>(ref T jobData, int innerloopBatchCount, void* forEachListPtr, void* atomicSafetyHandlePtr, JobHandle dependsOn) where T : struct, IJobParallelForDefer
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			IntPtr data = JobParallelForDeferProducer<T>.jobReflectionData.Data;
			JobScheduleParameters val = default(JobScheduleParameters);
			((JobScheduleParameters)(ref val))..ctor(UnsafeUtility.AddressOf<T>(ref jobData), data, dependsOn, (ScheduleMode)1);
			return JobsUtility.ScheduleParallelForDeferArraySize(ref val, innerloopBatchCount, forEachListPtr, atomicSafetyHandlePtr);
		}
	}
	[JobProducerType(typeof(JobParallelIndexListExtensions.JobParallelForFilterProducer<>))]
	public interface IJobParallelForFilter
	{
		bool Execute(int index);
	}
	public static class JobParallelIndexListExtensions
	{
		[StructLayout(LayoutKind.Sequential, Size = 1)]
		internal struct JobParallelForFilterProducer<T> where T : struct, IJobParallelForFilter
		{
			public struct JobWrapper
			{
				[NativeDisableParallelForRestriction]
				public NativeList<int> outputIndices;

				public int appendCount;

				public T JobData;
			}

			public delegate void ExecuteJobFunction(ref JobWrapper jobWrapper, IntPtr additionalPtr, IntPtr bufferRangePatchData, ref JobRanges ranges, int jobIndex);

			internal static readonly SharedStatic<IntPtr> jobReflectionData = SharedStatic<IntPtr>.GetOrCreate<JobParallelForFilterProducer<T>>(0u);

			[Preserve]
			public static void Initialize()
			{
				if (jobReflectionData.Data == IntPtr.Zero)
				{
					jobReflectionData.Data = JobsUtility.CreateJobReflectionData(typeof(JobWrapper), typeof(T), (object)new ExecuteJobFunction(Execute));
				}
			}

			public static void Execute(ref JobWrapper jobWrapper, IntPtr additionalPtr, IntPtr bufferRangePatchData, ref JobRanges ranges, int jobIndex)
			{
				if (jobWrapper.appendCount == -1)
				{
					ExecuteFilter(ref jobWrapper, bufferRangePatchData);
				}
				else
				{
					ExecuteAppend(ref jobWrapper, bufferRangePatchData);
				}
			}

			public unsafe static void ExecuteAppend(ref JobWrapper jobWrapper, IntPtr bufferRangePatchData)
			{
				int length = jobWrapper.outputIndices.Length;
				jobWrapper.outputIndices.Capacity = math.max(jobWrapper.appendCount + length, jobWrapper.outputIndices.Capacity);
				int* unsafePtr = (int*)jobWrapper.outputIndices.GetUnsafePtr();
				int num = length;
				for (int i = 0; i != jobWrapper.appendCount; i++)
				{
					if (jobWrapper.JobData.Execute(i))
					{
						unsafePtr[num] = i;
						num++;
					}
				}
				jobWrapper.outputIndices.ResizeUninitialized(num);
			}

			public unsafe static void ExecuteFilter(ref JobWrapper jobWrapper, IntPtr bufferRangePatchData)
			{
				int* unsafePtr = (int*)jobWrapper.outputIndices.GetUnsafePtr();
				int length = jobWrapper.outputIndices.Length;
				int num = 0;
				for (int i = 0; i != length; i++)
				{
					int num2 = unsafePtr[i];
					if (jobWrapper.JobData.Execute(num2))
					{
						unsafePtr[num] = num2;
						num++;
					}
				}
				jobWrapper.outputIndices.ResizeUninitialized(num);
			}
		}

		public static void EarlyJobInit<T>() where T : struct, IJobParallelForFilter
		{
			JobParallelForFilterProducer<T>.Initialize();
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		private static void CheckReflectionDataCorrect(IntPtr reflectionData)
		{
			if (reflectionData == IntPtr.Zero)
			{
				throw new InvalidOperationException("Reflection data was not set up by a call to Initialize()");
			}
		}

		public unsafe static JobHandle ScheduleAppend<T>(this T jobData, NativeList<int> indices, int arrayLength, int innerloopBatchCount, JobHandle dependsOn = default(JobHandle)) where T : struct, IJobParallelForFilter
		{
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			JobParallelForFilterProducer<T>.JobWrapper jobWrapper = default(JobParallelForFilterProducer<T>.JobWrapper);
			jobWrapper.JobData = jobData;
			jobWrapper.outputIndices = indices;
			jobWrapper.appendCount = arrayLength;
			JobParallelForFilterProducer<T>.JobWrapper jobWrapper2 = jobWrapper;
			IntPtr data = JobParallelForFilterProducer<T>.jobReflectionData.Data;
			JobScheduleParameters val = default(JobScheduleParameters);
			((JobScheduleParameters)(ref val))..ctor(UnsafeUtility.AddressOf<JobParallelForFilterProducer<T>.JobWrapper>(ref jobWrapper2), data, dependsOn, (ScheduleMode)2);
			return JobsUtility.Schedule(ref val);
		}

		public unsafe static JobHandle ScheduleFilter<T>(this T jobData, NativeList<int> indices, int innerloopBatchCount, JobHandle dependsOn = default(JobHandle)) where T : struct, IJobParallelForFilter
		{
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			JobParallelForFilterProducer<T>.JobWrapper jobWrapper = default(JobParallelForFilterProducer<T>.JobWrapper);
			jobWrapper.JobData = jobData;
			jobWrapper.outputIndices = indices;
			jobWrapper.appendCount = -1;
			JobParallelForFilterProducer<T>.JobWrapper jobWrapper2 = jobWrapper;
			IntPtr data = JobParallelForFilterProducer<T>.jobReflectionData.Data;
			JobScheduleParameters val = default(JobScheduleParameters);
			((JobScheduleParameters)(ref val))..ctor(UnsafeUtility.AddressOf<JobParallelForFilterProducer<T>.JobWrapper>(ref jobWrapper2), data, dependsOn, (ScheduleMode)2);
			return JobsUtility.Schedule(ref val);
		}

		public unsafe static void RunAppend<T>(this T jobData, NativeList<int> indices, int arrayLength) where T : struct, IJobParallelForFilter
		{
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			JobParallelForFilterProducer<T>.JobWrapper jobWrapper = default(JobParallelForFilterProducer<T>.JobWrapper);
			jobWrapper.JobData = jobData;
			jobWrapper.outputIndices = indices;
			jobWrapper.appendCount = arrayLength;
			JobParallelForFilterProducer<T>.JobWrapper jobWrapper2 = jobWrapper;
			IntPtr data = JobParallelForFilterProducer<T>.jobReflectionData.Data;
			JobScheduleParameters val = default(JobScheduleParameters);
			((JobScheduleParameters)(ref val))..ctor(UnsafeUtility.AddressOf<JobParallelForFilterProducer<T>.JobWrapper>(ref jobWrapper2), data, default(JobHandle), (ScheduleMode)0);
			JobsUtility.Schedule(ref val);
		}

		public unsafe static void RunFilter<T>(this T jobData, NativeList<int> indices) where T : struct, IJobParallelForFilter
		{
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			JobParallelForFilterProducer<T>.JobWrapper jobWrapper = default(JobParallelForFilterProducer<T>.JobWrapper);
			jobWrapper.JobData = jobData;
			jobWrapper.outputIndices = indices;
			jobWrapper.appendCount = -1;
			JobParallelForFilterProducer<T>.JobWrapper jobWrapper2 = jobWrapper;
			IntPtr data = JobParallelForFilterProducer<T>.jobReflectionData.Data;
			JobScheduleParameters val = default(JobScheduleParameters);
			((JobScheduleParameters)(ref val))..ctor(UnsafeUtility.AddressOf<JobParallelForFilterProducer<T>.JobWrapper>(ref jobWrapper2), data, default(JobHandle), (ScheduleMode)0);
			JobsUtility.Schedule(ref val);
		}
	}
	[MovedFrom(true, "Unity.Entities", "Unity.Entities", null)]
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	public class RegisterGenericJobTypeAttribute : Attribute
	{
		public Type ConcreteType;

		public RegisterGenericJobTypeAttribute(Type type)
		{
			ConcreteType = type;
		}
	}
	[AttributeUsage(AttributeTargets.Class)]
	internal class DOTSCompilerGeneratedAttribute : Attribute
	{
	}
}
namespace Unity.Collections
{
	public static class AllocatorManager
	{
		[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
		public delegate int TryFunction(IntPtr allocatorState, ref Block block);

		public struct AllocatorHandle : IAllocator, IDisposable
		{
			public ushort Index;

			public ushort Version;

			internal ref TableEntry TableEntry => ref SharedStatics.TableEntry.Ref.Data.ElementAt(Index);

			internal bool IsInstalled => ((SharedStatics.IsInstalled.Ref.Data.ElementAt(Index >> 6) >> (int)Index) & 1) != 0;

			public int Value => Index;

			public TryFunction Function => null;

			public AllocatorHandle Handle
			{
				get
				{
					return this;
				}
				set
				{
					this = value;
				}
			}

			public Allocator ToAllocator
			{
				get
				{
					//IL_0017: Unknown result type (might be due to invalid IL or missing references)
					//IL_001a: Unknown result type (might be due to invalid IL or missing references)
					uint index = Index;
					uint version = Version;
					uint num = (version << 16) | index;
					return (Allocator)num;
				}
			}

			public bool IsCustomAllocator => Index >= 64;

			internal void IncrementVersion()
			{
			}

			internal void Rewind()
			{
			}

			internal void Install(TableEntry tableEntry)
			{
				Rewind();
				TableEntry = tableEntry;
			}

			public static implicit operator AllocatorHandle(Allocator a)
			{
				//IL_000a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0010: Unknown result type (might be due to invalid IL or missing references)
				//IL_0019: Unknown result type (might be due to invalid IL or missing references)
				//IL_001c: Unknown result type (might be due to invalid IL or missing references)
				AllocatorHandle result = default(AllocatorHandle);
				result.Index = (ushort)(a & 0xFFFF);
				result.Version = (ushort)(a >> 16);
				return result;
			}

			public int TryAllocateBlock<T>(out Block block, int items) where T : struct
			{
				block = new Block
				{
					Range = new Range
					{
						Items = items,
						Allocator = this
					},
					BytesPerItem = UnsafeUtility.SizeOf<T>(),
					Alignment = 1 << math.min(3, math.tzcnt(UnsafeUtility.SizeOf<T>()))
				};
				return Try(ref block);
			}

			public Block AllocateBlock<T>(int items) where T : struct
			{
				Block block;
				int num = TryAllocateBlock<T>(out block, items);
				return block;
			}

			[Conditional("ENABLE_UNITY_ALLOCATION_CHECKS")]
			private static void CheckAllocatedSuccessfully(int error)
			{
				if (error != 0)
				{
					throw new ArgumentException($"Error {error}: Failed to Allocate");
				}
			}

			public int Try(ref Block block)
			{
				block.Range.Allocator = this;
				return AllocatorManager.Try(ref block);
			}

			public void Dispose()
			{
				Rewind();
			}
		}

		public struct BlockHandle
		{
			public ushort Value;
		}

		public struct Range : IDisposable
		{
			public IntPtr Pointer;

			public int Items;

			public AllocatorHandle Allocator;

			public void Dispose()
			{
				Block block = default(Block);
				block.Range = this;
				Block block2 = block;
				block2.Dispose();
				this = block2.Range;
			}
		}

		public struct Block : IDisposable
		{
			public Range Range;

			public int BytesPerItem;

			public int AllocatedItems;

			public byte Log2Alignment;

			public byte Padding0;

			public ushort Padding1;

			public uint Padding2;

			public long Bytes => BytesPerItem * Range.Items;

			public long AllocatedBytes => BytesPerItem * AllocatedItems;

			public int Alignment
			{
				get
				{
					return 1 << (int)Log2Alignment;
				}
				set
				{
					Log2Alignment = (byte)(32 - math.lzcnt(math.max(1, value) - 1));
				}
			}

			public void Dispose()
			{
				TryFree();
			}

			public int TryAllocate()
			{
				Range.Pointer = IntPtr.Zero;
				return Try(ref this);
			}

			public int TryFree()
			{
				Range.Items = 0;
				return Try(ref this);
			}

			public void Allocate()
			{
				int num = TryAllocate();
			}

			public void Free()
			{
				int num = TryFree();
			}

			[Conditional("ENABLE_UNITY_ALLOCATION_CHECKS")]
			private void CheckFailedToAllocate(int error)
			{
				if (error != 0)
				{
					throw new ArgumentException($"Error {error}: Failed to Allocate {this}");
				}
			}

			[Conditional("ENABLE_UNITY_ALLOCATION_CHECKS")]
			private void CheckFailedToFree(int error)
			{
				if (error != 0)
				{
					throw new ArgumentException($"Error {error}: Failed to Free {this}");
				}
			}
		}

		public interface IAllocator : IDisposable
		{
			TryFunction Function { get; }

			AllocatorHandle Handle { get; set; }

			Allocator ToAllocator { get; }

			bool IsCustomAllocator { get; }

			int Try(ref Block block);
		}

		[BurstCompile(CompileSynchronously = true)]
		internal struct StackAllocator : IAllocator, IDisposable
		{
			public delegate int Try_00000A45$PostfixBurstDelegate(IntPtr allocatorState, ref Block block);

			internal static class Try_00000A45$BurstDirectCall
			{
				private static IntPtr Pointer;

				private static IntPtr DeferredCompilation;

				[BurstDiscard]
				private unsafe static void GetFunctionPointerDiscard(ref IntPtr P_0)
				{
					if (Pointer == (IntPtr)0)
					{
						Pointer = (nint)BurstCompiler.GetILPPMethodFunctionPointer2(DeferredCompilation, (RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/, typeof(Try_00000A45$PostfixBurstDelegate).TypeHandle);
					}
					P_0 = Pointer;
				}

				private static IntPtr GetFunctionPointer()
				{
					nint result = 0;
					GetFunctionPointerDiscard(ref result);
					return result;
				}

				public static void Constructor()
				{
					DeferredCompilation = BurstCompiler.CompileILPPMethod2((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/);
				}

				public static void Initialize()
				{
				}

				static Try_00000A45$BurstDirectCall()
				{
					Constructor();
				}

				public unsafe static int Invoke(IntPtr allocatorState, ref Block block)
				{
					if (BurstCompiler.IsEnabled)
					{
						IntPtr functionPointer = GetFunctionPointer();
						if (functionPointer != (IntPtr)0)
						{
							return ((delegate* unmanaged[Cdecl]<IntPtr, ref Block, int>)functionPointer)(allocatorState, ref block);
						}
					}
					return Try$BurstManaged(allocatorState, ref block);
				}
			}

			internal AllocatorHandle m_handle;

			internal Block m_storage;

			internal long m_top;

			public AllocatorHandle Handle
			{
				get
				{
					return m_handle;
				}
				set
				{
					m_handle = value;
				}
			}

			public Allocator ToAllocator => m_handle.ToAllocator;

			public bool IsCustomAllocator => m_handle.IsCustomAllocator;

			public TryFunction Function => Try;

			public void Initialize(Block storage)
			{
				m_storage = storage;
				m_top = 0L;
			}

			public unsafe int Try(ref Block block)
			{
				if (block.Range.Pointer == IntPtr.Zero)
				{
					if (m_top + block.Bytes > m_storage.Bytes)
					{
						return -1;
					}
					block.Range.Pointer = (IntPtr)((byte*)(void*)m_storage.Range.Pointer + m_top);
					block.AllocatedItems = block.Range.Items;
					m_top += block.Bytes;
					return 0;
				}
				if (block.Bytes == 0)
				{
					if ((byte*)(void*)block.Range.Pointer - (byte*)(void*)m_storage.Range.Pointer == m_top - block.AllocatedBytes)
					{
						m_top -= block.AllocatedBytes;
						int num = block.AllocatedItems * block.BytesPerItem;
						block.Range.Pointer = IntPtr.Zero;
						block.AllocatedItems = 0;
						return 0;
					}
					return -1;
				}
				return -1;
			}

			[BurstCompile(CompileSynchronously = true)]
			[MonoPInvokeCallback(typeof(TryFunction))]
			public static int Try(IntPtr allocatorState, ref Block block)
			{
				return Try_00000A45$BurstDirectCall.Invoke(allocatorState, ref block);
			}

			public void Dispose()
			{
				m_handle.Rewind();
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			[BurstCompile(CompileSynchronously = true)]
			[MonoPInvokeCallback(typeof(TryFunction))]
			public unsafe static int Try$BurstManaged(IntPtr allocatorState, ref Block block)
			{
				return ((StackAllocator*)(void*)allocatorState)->Try(ref block);
			}
		}

		[BurstCompile(CompileSynchronously = true)]
		internal struct SlabAllocator : IAllocator, IDisposable
		{
			public delegate int Try_00000A53$PostfixBurstDelegate(IntPtr allocatorState, ref Block block);

			internal static class Try_00000A53$BurstDirectCall
			{
				private static IntPtr Pointer;

				private static IntPtr DeferredCompilation;

				[BurstDiscard]
				private unsafe static void GetFunctionPointerDiscard(ref IntPtr P_0)
				{
					if (Pointer == (IntPtr)0)
					{
						Pointer = (nint)BurstCompiler.GetILPPMethodFunctionPointer2(DeferredCompilation, (RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/, typeof(Try_00000A53$PostfixBurstDelegate).TypeHandle);
					}
					P_0 = Pointer;
				}

				private static IntPtr GetFunctionPointer()
				{
					nint result = 0;
					GetFunctionPointerDiscard(ref result);
					return result;
				}

				public static void Constructor()
				{
					DeferredCompilation = BurstCompiler.CompileILPPMethod2((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/);
				}

				public static void Initialize()
				{
				}

				static Try_00000A53$BurstDirectCall()
				{
					Constructor();
				}

				public unsafe static int Invoke(IntPtr allocatorState, ref Block block)
				{
					if (BurstCompiler.IsEnabled)
					{
						IntPtr functionPointer = GetFunctionPointer();
						if (functionPointer != (IntPtr)0)
						{
							return ((delegate* unmanaged[Cdecl]<IntPtr, ref Block, int>)functionPointer)(allocatorState, ref block);
						}
					}
					return Try$BurstManaged(allocatorState, ref block);
				}
			}

			internal AllocatorHandle m_handle;

			internal Block Storage;

			internal int Log2SlabSizeInBytes;

			internal FixedList4096Bytes<int> Occupied;

			internal long budgetInBytes;

			internal long allocatedBytes;

			public AllocatorHandle Handle
			{
				get
				{
					return m_handle;
				}
				set
				{
					m_handle = value;
				}
			}

			public Allocator ToAllocator => m_handle.ToAllocator;

			public bool IsCustomAllocator => m_handle.IsCustomAllocator;

			public long BudgetInBytes => budgetInBytes;

			public long AllocatedBytes => allocatedBytes;

			internal int SlabSizeInBytes
			{
				get
				{
					return 1 << Log2SlabSizeInBytes;
				}
				set
				{
					Log2SlabSizeInBytes = (byte)(32 - math.lzcnt(math.max(1, value) - 1));
				}
			}

			internal int Slabs => (int)(Storage.Bytes >> Log2SlabSizeInBytes);

			public TryFunction Function => Try;

			internal void Initialize(Block storage, int slabSizeInBytes, long budget)
			{
				Assert.IsTrue((slabSizeInBytes & (slabSizeInBytes - 1)) == 0);
				Storage = storage;
				Log2SlabSizeInBytes = 0;
				Occupied = default(FixedList4096Bytes<int>);
				budgetInBytes = budget;
				allocatedBytes = 0L;
				SlabSizeInBytes = slabSizeInBytes;
				Occupied.Length = (Slabs + 31) / 32;
			}

			public int Try(ref Block block)
			{
				if (block.Range.Pointer == IntPtr.Zero)
				{
					if (block.Bytes + allocatedBytes > budgetInBytes)
					{
						return -2;
					}
					if (block.Bytes > SlabSizeInBytes)
					{
						return -1;
					}
					for (int i = 0; i < Occupied.Length; i++)
					{
						int num = Occupied[i];
						if (num == -1)
						{
							continue;
						}
						for (int j = 0; j < 32; j++)
						{
							if ((num & (1 << j)) == 0)
							{
								Occupied[i] |= 1 << j;
								block.Range.Pointer = Storage.Range.Pointer + (int)(SlabSizeInBytes * ((long)i * 32L + j));
								block.AllocatedItems = SlabSizeInBytes / block.BytesPerItem;
								allocatedBytes += block.Bytes;
								return 0;
							}
						}
					}
					return -1;
				}
				if (block.Bytes == 0)
				{
					ulong num2 = (ulong)((long)block.Range.Pointer - (long)Storage.Range.Pointer) >> Log2SlabSizeInBytes;
					int index = (int)(num2 >> 5);
					int num3 = (int)(num2 & 0x1F);
					Occupied[index] &= ~(1 << num3);
					block.Range.Pointer = IntPtr.Zero;
					int num4 = block.AllocatedItems * block.BytesPerItem;
					allocatedBytes -= num4;
					block.AllocatedItems = 0;
					return 0;
				}
				return -1;
			}

			[BurstCompile(CompileSynchronously = true)]
			[MonoPInvokeCallback(typeof(TryFunction))]
			public static int Try(IntPtr allocatorState, ref Block block)
			{
				return Try_00000A53$BurstDirectCall.Invoke(allocatorState, ref block);
			}

			public void Dispose()
			{
				m_handle.Rewind();
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			[BurstCompile(CompileSynchronously = true)]
			[MonoPInvokeCallback(typeof(TryFunction))]
			public unsafe static int Try$BurstManaged(IntPtr allocatorState, ref Block block)
			{
				return ((SlabAllocator*)(void*)allocatorState)->Try(ref block);
			}
		}

		internal struct TableEntry
		{
			internal IntPtr function;

			internal IntPtr state;
		}

		internal struct Array16<T> where T : unmanaged
		{
			internal T f0;

			internal T f1;

			internal T f2;

			internal T f3;

			internal T f4;

			internal T f5;

			internal T f6;

			internal T f7;

			internal T f8;

			internal T f9;

			internal T f10;

			internal T f11;

			internal T f12;

			internal T f13;

			internal T f14;

			internal T f15;
		}

		internal struct Array256<T> where T : unmanaged
		{
			internal Array16<T> f0;

			internal Array16<T> f1;

			internal Array16<T> f2;

			internal Array16<T> f3;

			internal Array16<T> f4;

			internal Array16<T> f5;

			internal Array16<T> f6;

			internal Array16<T> f7;

			internal Array16<T> f8;

			internal Array16<T> f9;

			internal Array16<T> f10;

			internal Array16<T> f11;

			internal Array16<T> f12;

			internal Array16<T> f13;

			internal Array16<T> f14;

			internal Array16<T> f15;
		}

		internal struct Array4096<T> where T : unmanaged
		{
			internal Array256<T> f0;

			internal Array256<T> f1;

			internal Array256<T> f2;

			internal Array256<T> f3;

			internal Array256<T> f4;

			internal Array256<T> f5;

			internal Array256<T> f6;

			internal Array256<T> f7;

			internal Array256<T> f8;

			internal Array256<T> f9;

			internal Array256<T> f10;

			internal Array256<T> f11;

			internal Array256<T> f12;

			internal Array256<T> f13;

			internal Array256<T> f14;

			internal Array256<T> f15;
		}

		internal struct Array32768<T> : IIndexable<T> where T : unmanaged
		{
			internal Array4096<T> f0;

			internal Array4096<T> f1;

			internal Array4096<T> f2;

			internal Array4096<T> f3;

			internal Array4096<T> f4;

			internal Array4096<T> f5;

			internal Array4096<T> f6;

			internal Array4096<T> f7;

			public int Length
			{
				get
				{
					return 32768;
				}
				set
				{
				}
			}

			public unsafe ref T ElementAt(int index)
			{
				fixed (Array4096<T>* ptr = &f0)
				{
					return ref UnsafeUtility.AsRef<T>((void*)((byte*)ptr + (nint)index * (nint)sizeof(T)));
				}
			}
		}

		internal sealed class SharedStatics
		{
			internal sealed class IsInstalled
			{
				internal static readonly SharedStatic<Long1024> Ref = SharedStatic<Long1024>.GetOrCreateUnsafe(0u, -4832911380680317357L, 0L);
			}

			internal sealed class TableEntry
			{
				internal static readonly SharedStatic<Array32768<AllocatorManager.TableEntry>> Ref = SharedStatic<Array32768<AllocatorManager.TableEntry>>.GetOrCreateUnsafe(0u, -1297938794087215229L, 0L);
			}
		}

		internal static class Managed
		{
			internal const int kMaxNumCustomAllocator = 32768;

			internal static TryFunction[] TryFunctionDelegates = new TryFunction[32768];

			[NotBurstCompatible]
			public static void RegisterDelegate(int index, TryFunction function)
			{
				if (index >= 32768)
				{
					throw new ArgumentException("index to be registered in TryFunction delegate table exceeds maximum.");
				}
				TryFunctionDelegates[index] = function;
			}

			[NotBurstCompatible]
			public static void UnregisterDelegate(int index)
			{
				if (index >= 32768)
				{
					throw new ArgumentException("index to be unregistered in TryFunction delegate table exceeds maximum.");
				}
				TryFunctionDelegates[index] = null;
			}
		}

		public static readonly AllocatorHandle Invalid = new AllocatorHandle
		{
			Index = 0
		};

		public static readonly AllocatorHandle None = new AllocatorHandle
		{
			Index = 1
		};

		public static readonly AllocatorHandle Temp = new AllocatorHandle
		{
			Index = 2
		};

		public static readonly AllocatorHandle TempJob = new AllocatorHandle
		{
			Index = 3
		};

		public static readonly AllocatorHandle Persistent = new AllocatorHandle
		{
			Index = 4
		};

		public static readonly AllocatorHandle AudioKernel = new AllocatorHandle
		{
			Index = 5
		};

		public const int kErrorNone = 0;

		public const int kErrorBufferOverflow = -1;

		public const ushort FirstUserIndex = 64;

		internal static Block AllocateBlock<T>(this ref T t, int sizeOf, int alignOf, int items) where T : unmanaged, IAllocator
		{
			Block block = default(Block);
			block.Range.Pointer = IntPtr.Zero;
			block.Range.Items = items;
			block.Range.Allocator = t.Handle;
			block.BytesPerItem = sizeOf;
			block.Alignment = math.max(64, alignOf);
			int num = t.Try(ref block);
			return block;
		}

		internal static Block AllocateBlock<T, U>(this ref T t, U u, int items) where T : unmanaged, IAllocator where U : unmanaged
		{
			return AllocateBlock(ref t, UnsafeUtility.SizeOf<U>(), UnsafeUtility.AlignOf<U>(), items);
		}

		internal unsafe static void* Allocate<T>(this ref T t, int sizeOf, int alignOf, int items) where T : unmanaged, IAllocator
		{
			return (void*)AllocateBlock(ref t, sizeOf, alignOf, items).Range.Pointer;
		}

		internal unsafe static U* Allocate<T, U>(this ref T t, U u, int items) where T : unmanaged, IAllocator where U : unmanaged
		{
			return (U*)Allocate(ref t, UnsafeUtility.SizeOf<U>(), UnsafeUtility.AlignOf<U>(), items);
		}

		internal unsafe static void* AllocateStruct<T, U>(this ref T t, U u, int items) where T : unmanaged, IAllocator where U : struct
		{
			return Allocate(ref t, UnsafeUtility.SizeOf<U>(), UnsafeUtility.AlignOf<U>(), items);
		}

		internal static void FreeBlock<T>(this ref T t, ref Block block) where T : unmanaged, IAllocator
		{
			block.Range.Items = 0;
			int num = t.Try(ref block);
		}

		internal unsafe static void Free<T>(this ref T t, void* pointer, int sizeOf, int alignOf, int items) where T : unmanaged, IAllocator
		{
			if (pointer != null)
			{
				Block block = default(Block);
				block.AllocatedItems = items;
				block.Range.Pointer = (IntPtr)pointer;
				block.BytesPerItem = sizeOf;
				block.Alignment = alignOf;
				FreeBlock(ref t, ref block);
			}
		}

		internal unsafe static void Free<T, U>(this ref T t, U* pointer, int items) where T : unmanaged, IAllocator where U : unmanaged
		{
			Free(ref t, pointer, UnsafeUtility.SizeOf<U>(), UnsafeUtility.AlignOf<U>(), items);
		}

		public unsafe static void* Allocate(AllocatorHandle handle, int itemSizeInBytes, int alignmentInBytes, int items = 1)
		{
			return Allocate(ref handle, itemSizeInBytes, alignmentInBytes, items);
		}

		public unsafe static T* Allocate<T>(AllocatorHandle handle, int items = 1) where T : unmanaged
		{
			return Allocate(ref handle, default(T), items);
		}

		public unsafe static void Free(AllocatorHandle handle, void* pointer, int itemSizeInBytes, int alignmentInBytes, int items = 1)
		{
			Free(ref handle, pointer, itemSizeInBytes, alignmentInBytes, items);
		}

		public unsafe static void Free(AllocatorHandle handle, void* pointer)
		{
			Free(ref handle, (byte*)pointer, 1);
		}

		public unsafe static void Free<T>(AllocatorHandle handle, T* pointer, int items = 1) where T : unmanaged
		{
			Free(ref handle, pointer, items);
		}

		[BurstDiscard]
		private static void CheckDelegate(ref bool useDelegate)
		{
			useDelegate = true;
		}

		private static bool UseDelegate()
		{
			bool useDelegate = false;
			CheckDelegate(ref useDelegate);
			return useDelegate;
		}

		private static int allocate_block(ref Block block)
		{
			TableEntry tableEntry = default(TableEntry);
			tableEntry = block.Range.Allocator.TableEntry;
			FunctionPointer<TryFunction> val = default(FunctionPointer<TryFunction>);
			val..ctor(tableEntry.function);
			return val.Invoke(tableEntry.state, ref block);
		}

		[BurstDiscard]
		private static void forward_mono_allocate_block(ref Block block, ref int error)
		{
			TableEntry tableEntry = default(TableEntry);
			tableEntry = block.Range.Allocator.TableEntry;
			ushort index = block.Range.Allocator.Handle.Index;
			if (index >= 32768)
			{
				throw new ArgumentException("Allocator index into TryFunction delegate table exceeds maximum.");
			}
			error = Managed.TryFunctionDelegates[block.Range.Allocator.Handle.Index](tableEntry.state, ref block);
		}

		internal static Allocator LegacyOf(AllocatorHandle handle)
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			if (handle.Value >= 64)
			{
				return (Allocator)4;
			}
			return (Allocator)handle.Value;
		}

		private unsafe static int TryLegacy(ref Block block)
		{
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Invalid comparison between Unknown and I4
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			if (block.Range.Pointer == IntPtr.Zero)
			{
				block.Range.Pointer = (IntPtr)Memory.Unmanaged.Allocate(block.Bytes, block.Alignment, LegacyOf(block.Range.Allocator));
				block.AllocatedItems = block.Range.Items;
				return (block.Range.Pointer == IntPtr.Zero) ? (-1) : 0;
			}
			if (block.Bytes == 0)
			{
				if ((int)LegacyOf(block.Range.Allocator) != 1)
				{
					Memory.Unmanaged.Free((void*)block.Range.Pointer, LegacyOf(block.Range.Allocator));
				}
				block.Range.Pointer = IntPtr.Zero;
				block.AllocatedItems = 0;
				return 0;
			}
			return -1;
		}

		public static int Try(ref Block block)
		{
			if (block.Range.Allocator.Value < 64)
			{
				return TryLegacy(ref block);
			}
			TableEntry tableEntry = default(TableEntry);
			tableEntry = block.Range.Allocator.TableEntry;
			FunctionPointer<TryFunction> val = default(FunctionPointer<TryFunction>);
			val..ctor(tableEntry.function);
			if (UseDelegate())
			{
				int error = 0;
				forward_mono_allocate_block(ref block, ref error);
				return error;
			}
			return allocate_block(ref block);
		}

		public static void Initialize()
		{
		}

		internal static void Install(AllocatorHandle handle, IntPtr allocatorState, FunctionPointer<TryFunction> functionPointer, TryFunction function)
		{
			if (functionPointer.Value == IntPtr.Zero)
			{
				Unregister(ref handle);
				return;
			}
			int error = ConcurrentMask.TryAllocate(ref SharedStatics.IsInstalled.Ref.Data, handle.Value, 1);
			if (ConcurrentMask.Succeeded(error))
			{
				handle.Install(new TableEntry
				{
					state = allocatorState,
					function = functionPointer.Value
				});
				Managed.RegisterDelegate(handle.Index, function);
			}
		}

		internal static void Install(AllocatorHandle handle, IntPtr allocatorState, TryFunction function)
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			FunctionPointer<TryFunction> functionPointer = ((function == null) ? new FunctionPointer<TryFunction>(IntPtr.Zero) : BurstCompiler.CompileFunctionPointer<TryFunction>(function));
			Install(handle, allocatorState, functionPointer, function);
		}

		internal static AllocatorHandle Register(IntPtr allocatorState, FunctionPointer<TryFunction> functionPointer)
		{
			TableEntry tableEntry = default(TableEntry);
			tableEntry.state = allocatorState;
			tableEntry.function = functionPointer.Value;
			TableEntry tableEntry2 = tableEntry;
			int offset;
			int error = ConcurrentMask.TryAllocate(ref SharedStatics.IsInstalled.Ref.Data, out offset, 1, SharedStatics.IsInstalled.Ref.Data.Length, 1);
			AllocatorHandle result = default(AllocatorHandle);
			if (ConcurrentMask.Succeeded(error))
			{
				result.Index = (ushort)offset;
				result.Install(tableEntry2);
			}
			return result;
		}

		[NotBurstCompatible]
		public unsafe static void Register<T>(this ref T t) where T : unmanaged, IAllocator
		{
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			FunctionPointer<TryFunction> functionPointer = ((t.Function == null) ? new FunctionPointer<TryFunction>(IntPtr.Zero) : BurstCompiler.CompileFunctionPointer<TryFunction>(t.Function));
			t.Handle = Register((IntPtr)UnsafeUtility.AddressOf<T>(ref t), functionPointer);
			Managed.RegisterDelegate(t.Handle.Index, t.Function);
		}

		public static void UnmanagedUnregister<T>(this ref T t) where T : unmanaged, IAllocator
		{
			if (t.Handle.IsInstalled)
			{
				t.Handle.Install(default(TableEntry));
				ConcurrentMask.TryFree(ref SharedStatics.IsInstalled.Ref.Data, t.Handle.Value, 1);
			}
		}

		[NotBurstCompatible]
		public static void Unregister<T>(this ref T t) where T : unmanaged, IAllocator
		{
			if (t.Handle.IsInstalled)
			{
				t.Handle.Install(default(TableEntry));
				ConcurrentMask.TryFree(ref SharedStatics.IsInstalled.Ref.Data, t.Handle.Value, 1);
				Managed.UnregisterDelegate(t.Handle.Index);
			}
		}

		[NotBurstCompatible]
		internal unsafe static ref T CreateAllocator<T>(AllocatorHandle backingAllocator) where T : unmanaged, IAllocator
		{
			T* ptr = (T*)Memory.Unmanaged.Allocate(UnsafeUtility.SizeOf<T>(), 16, backingAllocator);
			*ptr = default(T);
			ref T reference = ref UnsafeUtility.AsRef<T>((void*)ptr);
			Register(ref reference);
			return ref reference;
		}

		[NotBurstCompatible]
		internal unsafe static void DestroyAllocator<T>(this ref T t, AllocatorHandle backingAllocator) where T : unmanaged, IAllocator
		{
			Unregister(ref t);
			void* pointer = UnsafeUtility.AddressOf<T>(ref t);
			Memory.Unmanaged.Free(pointer, backingAllocator);
		}

		public static void Shutdown()
		{
		}

		internal static bool IsCustomAllocator(AllocatorHandle allocator)
		{
			return allocator.Index >= 64;
		}

		[Conditional("ENABLE_UNITY_ALLOCATION_CHECKS")]
		internal static void CheckFailedToAllocate(int error)
		{
			if (error != 0)
			{
				throw new ArgumentException("failed to allocate");
			}
		}

		[Conditional("ENABLE_UNITY_ALLOCATION_CHECKS")]
		internal static void CheckFailedToFree(int error)
		{
			if (error != 0)
			{
				throw new ArgumentException("failed to free");
			}
		}

		[Conditional("ENABLE_UNITY_ALLOCATION_CHECKS")]
		internal static void CheckValid(AllocatorHandle handle)
		{
		}

		public static void Initialize$StackAllocator_Try_00000A45$BurstDirectCall()
		{
			StackAllocator.Try_00000A45$BurstDirectCall.Initialize();
		}

		public static void Initialize$SlabAllocator_Try_00000A53$BurstDirectCall()
		{
			SlabAllocator.Try_00000A53$BurstDirectCall.Initialize();
		}
	}
	[BurstCompatible(GenericTypeArguments = new Type[] { typeof(AllocatorManager.AllocatorHandle) })]
	public struct AllocatorHelper<T> : IDisposable where T : unmanaged, AllocatorManager.IAllocator
	{
		private unsafe readonly T* m_allocator;

		private AllocatorManager.AllocatorHandle m_backingAllocator;

		public unsafe ref T Allocator => ref UnsafeUtility.AsRef<T>((void*)m_allocator);

		[NotBurstCompatible]
		public unsafe AllocatorHelper(AllocatorManager.AllocatorHandle backingAllocator)
		{
			m_allocator = (T*)UnsafeUtility.AddressOf<T>(ref AllocatorManager.CreateAllocator<T>(backingAllocator));
			m_backingAllocator = backingAllocator;
		}

		[NotBurstCompatible]
		public unsafe void Dispose()
		{
			AllocatorManager.DestroyAllocator(ref UnsafeUtility.AsRef<T>((void*)m_allocator), m_backingAllocator);
		}
	}
	internal class CreatePropertyAttribute : Attribute
	{
	}
	[StructLayout(LayoutKind.Sequential, Size = 1)]
	[BurstCompatible]
	internal struct Bitwise
	{
		internal static int AlignDown(int value, int alignPow2)
		{
			return value & ~(alignPow2 - 1);
		}

		internal static int AlignUp(int value, int alignPow2)
		{
			return AlignDown(value + alignPow2 - 1, alignPow2);
		}

		internal static int FromBool(bool value)
		{
			return value ? 1 : 0;
		}

		internal static uint ExtractBits(uint input, int pos, uint mask)
		{
			uint num = input >> pos;
			return num & mask;
		}

		internal static uint ReplaceBits(uint input, int pos, uint mask, uint value)
		{
			uint num = (value & mask) << pos;
			uint num2 = input & ~(mask << pos);
			return num | num2;
		}

		internal static uint SetBits(uint input, int pos, uint mask, bool value)
		{
			return ReplaceBits(input, pos, mask, (uint)(-FromBool(value)));
		}

		internal static ulong ExtractBits(ulong input, int pos, ulong mask)
		{
			ulong num = input >> pos;
			return num & mask;
		}

		internal static ulong ReplaceBits(ulong input, int pos, ulong mask, ulong value)
		{
			ulong num = (value & mask) << pos;
			ulong num2 = input & ~(mask << pos);
			return num | num2;
		}

		internal static ulong SetBits(ulong input, int pos, ulong mask, bool value)
		{
			return ReplaceBits(input, pos, mask, (ulong)(-FromBool(value)));
		}

		internal static int lzcnt(byte value)
		{
			return math.lzcnt((uint)value) - 24;
		}

		internal static int tzcnt(byte value)
		{
			return math.min(8, math.tzcnt((uint)value));
		}

		internal static int lzcnt(ushort value)
		{
			return math.lzcnt((uint)value) - 16;
		}

		internal static int tzcnt(ushort value)
		{
			return math.min(16, math.tzcnt((uint)value));
		}

		private unsafe static int FindUlong(ulong* ptr, int beginBit, int endBit, int numBits)
		{
			int num = numBits + 63 >> 6;
			int num2 = 64;
			int num3 = num * num2;
			int i = beginBit / num2;
			for (int num4 = AlignUp(endBit, num2) / num2; i < num4; i++)
			{
				if (ptr[i] != 0)
				{
					continue;
				}
				int num5 = i * num2;
				int num6 = math.min(num5 + num2, endBit) - num5;
				if (num5 != beginBit)
				{
					ulong num7 = ptr[num5 / num2 - 1];
					int num8 = math.max(num5 - math.lzcnt(num7), beginBit);
					num6 += num5 - num8;
					num5 = num8;
				}
				for (i++; i < num4; i++)
				{
					if (num6 >= numBits)
					{
						return num5;
					}
					ulong num9 = ptr[i];
					int num10 = i * num2;
					num6 += math.min(num10 + math.tzcnt(num9), endBit) - num10;
					if (num9 != 0)
					{
						break;
					}
				}
				if (num6 >= numBits)
				{
					return num5;
				}
			}
			return endBit;
		}

		private unsafe static int FindUint(ulong* ptr, int beginBit, int endBit, int numBits)
		{
			int num = numBits + 31 >> 5;
			int num2 = 32;
			int num3 = num * num2;
			int i = beginBit / num2;
			for (int num4 = AlignUp(endBit, num2) / num2; i < num4; i++)
			{
				if (*(uint*)((byte*)ptr + (nint)i * (nint)4) != 0)
				{
					continue;
				}
				int num5 = i * num2;
				int num6 = math.min(num5 + num2, endBit) - num5;
				if (num5 != beginBit)
				{
					uint num7 = *(uint*)((byte*)ptr + (nint)(num5 / num2 - 1) * (nint)4);
					int num8 = math.max(num5 - math.lzcnt(num7), beginBit);
					num6 += num5 - num8;
					num5 = num8;
				}
				for (i++; i < num4; i++)
				{
					if (num6 >= numBits)
					{
						return num5;
					}
					uint num9 = *(uint*)((byte*)ptr + (nint)i * (nint)4);
					int num10 = i * num2;
					num6 += math.min(num10 + math.tzcnt(num9), endBit) - num10;
					if (num9 != 0)
					{
						break;
					}
				}
				if (num6 >= numBits)
				{
					return num5;
				}
			}
			return endBit;
		}

		private unsafe static int FindUshort(ulong* ptr, int beginBit, int endBit, int numBits)
		{
			int num = numBits + 15 >> 4;
			int num2 = 16;
			int num3 = num * num2;
			int i = beginBit / num2;
			for (int num4 = AlignUp(endBit, num2) / num2; i < num4; i++)
			{
				if (*(ushort*)((byte*)ptr + (nint)i * (nint)2) != 0)
				{
					continue;
				}
				int num5 = i * num2;
				int num6 = math.min(num5 + num2, endBit) - num5;
				if (num5 != beginBit)
				{
					ushort value = *(ushort*)((byte*)ptr + (nint)(num5 / num2 - 1) * (nint)2);
					int num7 = math.max(num5 - lzcnt(value), beginBit);
					num6 += num5 - num7;
					num5 = num7;
				}
				for (i++; i < num4; i++)
				{
					if (num6 >= numBits)
					{
						return num5;
					}
					ushort num8 = *(ushort*)((byte*)ptr + (nint)i * (nint)2);
					int num9 = i * num2;
					num6 += math.min(num9 + tzcnt(num8), endBit) - num9;
					if (num8 != 0)
					{
						break;
					}
				}
				if (num6 >= numBits)
				{
					return num5;
				}
			}
			return endBit;
		}

		private unsafe static int FindByte(ulong* ptr, int beginBit, int endBit, int numBits)
		{
			int num = numBits + 7 >> 3;
			int num2 = 8;
			int num3 = num * num2;
			int i = beginBit / num2;
			for (int num4 = AlignUp(endBit, num2) / num2; i < num4; i++)
			{
				if (((byte*)ptr)[i] != 0)
				{
					continue;
				}
				int num5 = i * num2;
				int num6 = math.min(num5 + num2, endBit) - num5;
				if (num5 != beginBit)
				{
					byte value = ((byte*)ptr)[num5 / num2 - 1];
					int num7 = math.max(num5 - lzcnt(value), beginBit);
					num6 += num5 - num7;
					num5 = num7;
				}
				for (i++; i < num4; i++)
				{
					if (num6 >= numBits)
					{
						return num5;
					}
					byte b = ((byte*)ptr)[i];
					int num8 = i * num2;
					num6 += math.min(num8 + tzcnt(b), endBit) - num8;
					if (b != 0)
					{
						break;
					}
				}
				if (num6 >= numBits)
				{
					return num5;
				}
			}
			return endBit;
		}

		private unsafe static int FindUpto14bits(ulong* ptr, int beginBit, int endBit, int numBits)
		{
			byte b = (byte)((uint)beginBit & 7u);
			byte b2 = (byte)(~(255 << (int)b));
			int num = 0;
			int num2 = beginBit / 8;
			int num3 = AlignUp(endBit, 8) / 8;
			for (int i = num2; i < num3; i++)
			{
				byte b3 = ((byte*)ptr)[i];
				b3 = (byte)(b3 | ((i == num2) ? b2 : 0));
				if (b3 != byte.MaxValue)
				{
					int num4 = i * 8;
					int num5 = math.min(num4 + tzcnt(b3), endBit) - num4;
					if (num + num5 >= numBits)
					{
						return num4 - num;
					}
					num = lzcnt(b3);
					int num6 = num4 + 8;
					int num7 = math.max(num6 - num, beginBit);
					num = math.min(num6, endBit) - num7;
					if (num >= numBits)
					{
						return num7;
					}
				}
			}
			return endBit;
		}

		private unsafe static int FindUpto6bits(ulong* ptr, int beginBit, int endBit, int numBits)
		{
			byte b = (byte)(~(255 << (beginBit & 7)));
			byte b2 = (byte)(~(255 >> ((8 - (endBit & 7)) & 7)));
			int num = 1 << numBits - 1;
			int num2 = beginBit / 8;
			int num3 = AlignUp(endBit, 8) / 8;
			for (int i = num2; i < num3; i++)
			{
				byte b3 = ((byte*)ptr)[i];
				b3 = (byte)(b3 | ((i == num2) ? b : 0));
				b3 = (byte)(b3 | ((i == num3 - 1) ? b2 : 0));
				if (b3 == byte.MaxValue)
				{
					continue;
				}
				int num4 = i * 8;
				int num5 = num4 + 7;
				while (num4 < num5)
				{
					int num6 = tzcnt((byte)(b3 ^ 0xFFu));
					b3 = (byte)(b3 >> num6);
					num4 += num6;
					if ((b3 & num) == 0)
					{
						return num4;
					}
					b3 >>= 1;
					num4++;
				}
			}
			return endBit;
		}

		internal unsafe static int FindWithBeginEnd(ulong* ptr, int beginBit, int endBit, int numBits)
		{
			int num;
			if (numBits >= 127)
			{
				num = FindUlong(ptr, beginBit, endBit, numBits);
				if (num != endBit)
				{
					return num;
				}
			}
			if (numBits >= 63)
			{
				num = FindUint(ptr, beginBit, endBit, numBits);
				if (num != endBit)
				{
					return num;
				}
			}
			if (numBits >= 128)
			{
				return int.MaxValue;
			}
			if (numBits >= 31)
			{
				num = FindUshort(ptr, beginBit, endBit, numBits);
				if (num != endBit)
				{
					return num;
				}
			}
			if (numBits >= 64)
			{
				return int.MaxValue;
			}
			num = FindByte(ptr, beginBit, endBit, numBits);
			if (num != endBit)
			{
				return num;
			}
			if (numBits < 15)
			{
				num = FindUpto14bits(ptr, beginBit, endBit, numBits);
				if (num != endBit)
				{
					return num;
				}
				if (numBits < 7)
				{
					num = FindUpto6bits(ptr, beginBit, endBit, numBits);
					if (num != endBit)
					{
						return num;
					}
				}
			}
			return int.MaxValue;
		}

		internal unsafe static int Find(ulong* ptr, int pos, int count, int numBits)
		{
			return FindWithBeginEnd(ptr, pos, pos + count, numBits);
		}
	}
	[DebuggerTypeProxy(typeof(BitField32DebugView))]
	[BurstCompatible]
	public struct BitField32
	{
		public uint Value;

		public BitField32(uint initialValue = 0u)
		{
			Value = initialValue;
		}

		public void Clear()
		{
			Value = 0u;
		}

		public void SetBits(int pos, bool value)
		{
			Value = Bitwise.SetBits(Value, pos, 1u, value);
		}

		public void SetBits(int pos, bool value, int numBits)
		{
			uint mask = uint.MaxValue >> 32 - numBits;
			Value = Bitwise.SetBits(Value, pos, mask, value);
		}

		public uint GetBits(int pos, int numBits = 1)
		{
			uint mask = uint.MaxValue >> 32 - numBits;
			return Bitwise.ExtractBits(Value, pos, mask);
		}

		public bool IsSet(int pos)
		{
			return GetBits(pos) != 0;
		}

		public bool TestNone(int pos, int numBits = 1)
		{
			return GetBits(pos, numBits) == 0;
		}

		public bool TestAny(int pos, int numBits = 1)
		{
			return GetBits(pos, numBits) != 0;
		}

		public bool TestAll(int pos, int numBits = 1)
		{
			uint num = uint.MaxValue >> 32 - numBits;
			return num == Bitwise.ExtractBits(Value, pos, num);
		}

		public int CountBits()
		{
			return math.countbits(Value);
		}

		public int CountLeadingZeros()
		{
			return math.lzcnt(Value);
		}

		public int CountTrailingZeros()
		{
			return math.tzcnt(Value);
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		private static void CheckArgs(int pos, int numBits)
		{
			if (pos > 31 || numBits == 0 || numBits > 32 || pos + numBits > 32)
			{
				throw new ArgumentException($"BitField32 invalid arguments: pos {pos} (must be 0-31), numBits {numBits} (must be 1-32).");
			}
		}
	}
	internal sealed class BitField32DebugView
	{
		private BitField32 BitField;

		public bool[] Bits
		{
			get
			{
				bool[] array = new bool[32];
				for (int i = 0; i < 32; i++)
				{
					array[i] = BitField.IsSet(i);
				}
				return array;
			}
		}

		public BitField32DebugView(BitField32 bitfield)
		{
			BitField = bitfield;
		}
	}
	[DebuggerTypeProxy(typeof(BitField64DebugView))]
	[BurstCompatible]
	public struct BitField64
	{
		public ulong Value;

		public BitField64(ulong initialValue = 0uL)
		{
			Value = initialValue;
		}

		public void Clear()
		{
			Value = 0uL;
		}

		public void SetBits(int pos, bool value)
		{
			Value = Bitwise.SetBits(Value, pos, 1uL, value);
		}

		public void SetBits(int pos, bool value, int numBits = 1)
		{
			ulong mask = ulong.MaxValue >> 64 - numBits;
			Value = Bitwise.SetBits(Value, pos, mask, value);
		}

		public ulong GetBits(int pos, int numBits = 1)
		{
			ulong mask = ulong.MaxValue >> 64 - numBits;
			return Bitwise.ExtractBits(Value, pos, mask);
		}

		public bool IsSet(int pos)
		{
			return GetBits(pos) != 0;
		}

		public bool TestNone(int pos, int numBits = 1)
		{
			return GetBits(pos, numBits) == 0;
		}

		public bool TestAny(int pos, int numBits = 1)
		{
			return GetBits(pos, numBits) != 0;
		}

		public bool TestAll(int pos, int numBits = 1)
		{
			ulong num = ulong.MaxValue >> 64 - numBits;
			return num == Bitwise.ExtractBits(Value, pos, num);
		}

		public int CountBits()
		{
			return math.countbits(Value);
		}

		public int CountLeadingZeros()
		{
			return math.lzcnt(Value);
		}

		public int CountTrailingZeros()
		{
			return math.tzcnt(Value);
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		private static void CheckArgs(int pos, int numBits)
		{
			if (pos > 63 || numBits == 0 || numBits > 64 || pos + numBits > 64)
			{
				throw new ArgumentException($"BitField32 invalid arguments: pos {pos} (must be 0-63), numBits {numBits} (must be 1-64).");
			}
		}
	}
	internal sealed class BitField64DebugView
	{
		private BitField64 Data;

		public bool[] Bits
		{
			get
			{
				bool[] array = new bool[64];
				for (int i = 0; i < 64; i++)
				{
					array[i] = Data.IsSet(i);
				}
				return array;
			}
		}

		public BitField64DebugView(BitField64 data)
		{
			Data = data;
		}
	}
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)]
	public class BurstCompatibleAttribute : Attribute
	{
		public enum BurstCompatibleCompileTarget
		{
			Player,
			Editor,
			PlayerAndEditor
		}

		public string RequiredUnityDefine = null;

		public BurstCompatibleCompileTarget CompileTarget = BurstCompatibleCompileTarget.Player;

		public Type[] GenericTypeArguments { get; set; }
	}
	[AttributeUsage(AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property)]
	public class NotBurstCompatibleAttribute : Attribute
	{
	}
	public interface INativeDisposable : IDisposable
	{
		JobHandle Dispose(JobHandle inputDeps);
	}
	[BurstCompatible]
	public static class CollectionHelper
	{
		[StructLayout(LayoutKind.Explicit)]
		internal struct LongDoubleUnion
		{
			[FieldOffset(0)]
			internal long longValue;

			[FieldOffset(0)]
			internal double doubleValue;
		}

		public const int CacheLineSize = 64;

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		internal static void CheckAllocator(AllocatorManager.AllocatorHandle allocator)
		{
			if (!ShouldDeallocate(allocator))
			{
				throw new ArgumentException($"Allocator {allocator} must not be None or Invalid");
			}
		}

		public static int Log2Floor(int value)
		{
			return 31 - math.lzcnt((uint)value);
		}

		public static int Log2Ceil(int value)
		{
			return 32 - math.lzcnt((uint)(value - 1));
		}

		public static int Align(int size, int alignmentPowerOfTwo)
		{
			if (alignmentPowerOfTwo == 0)
			{
				return size;
			}
			return (size + alignmentPowerOfTwo - 1) & ~(alignmentPowerOfTwo - 1);
		}

		public static ulong Align(ulong size, ulong alignmentPowerOfTwo)
		{
			if (alignmentPowerOfTwo == 0)
			{
				return size;
			}
			return (size + alignmentPowerOfTwo - 1) & ~(alignmentPowerOfTwo - 1);
		}

		public unsafe static bool IsAligned(void* p, int alignmentPowerOfTwo)
		{
			return ((ulong)p & (ulong)((long)alignmentPowerOfTwo - 1L)) == 0;
		}

		public static bool IsAligned(ulong offset, int alignmentPowerOfTwo)
		{
			return (offset & (ulong)((long)alignmentPowerOfTwo - 1L)) == 0;
		}

		public static bool IsPowerOfTwo(int value)
		{
			return (value & (value - 1)) == 0;
		}

		public unsafe static uint Hash(void* ptr, int bytes)
		{
			ulong num = 5381uL;
			while (bytes > 0)
			{
				ulong num2 = ((byte*)ptr)[--bytes];
				num = (num << 5) + num + num2;
			}
			return (uint)num;
		}

		[NotBurstCompatible]
		internal static void WriteLayout(Type type)
		{
			Console.WriteLine($"   Offset | Bytes  | Name     Layout: {0}", type.Name);
			FieldInfo[] fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo[] array = fields;
			foreach (FieldInfo fieldInfo in array)
			{
				Console.WriteLine("   {0, 6} | {1, 6} | {2}", Marshal.OffsetOf(type, fieldInfo.Name), Marshal.SizeOf(fieldInfo.FieldType), fieldInfo.Name);
			}
		}

		internal static bool ShouldDeallocate(AllocatorManager.AllocatorHandle allocator)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Invalid comparison between Unknown and I4
			return (int)allocator.ToAllocator > 1;
		}

		[return: AssumeRange(0L, 2147483647L)]
		internal static int AssumePositive(int value)
		{
			return value;
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		[BurstDiscard]
		[NotBurstCompatible]
		internal static void CheckIsUnmanaged<T>()
		{
			if (!UnsafeUtility.IsValidNativeContainerElementType<T>())
			{
				throw new ArgumentException($"{typeof(T)} used in native collection is not blittable, not primitive, or contains a type tagged as NativeContainer");
			}
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		internal static void CheckIntPositivePowerOfTwo(int value)
		{
			if (value <= 0 || (value & (value - 1)) != 0)
			{
				throw new ArgumentException($"Alignment requested: {value} is not a non-zero, positive power of two.");
			}
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		internal static void CheckUlongPositivePowerOfTwo(ulong value)
		{
			if (value == 0 || (value & (value - 1)) != 0)
			{
				throw new ArgumentException($"Alignment requested: {value} is not a non-zero, positive power of two.");
			}
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		[Conditional("UNITY_DOTS_DEBUG")]
		internal static void CheckIndexInRange(int index, int length)
		{
			if (index < 0)
			{
				throw new IndexOutOfRangeException($"Index {index} must be positive.");
			}
			if (index >= length)
			{
				throw new IndexOutOfRangeException($"Index {index} is out of range in container of '{length}' Length.");
			}
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		[Conditional("UNITY_DOTS_DEBUG")]
		internal static void CheckCapacityInRange(int capacity, int length)
		{
			if (capacity < 0)
			{
				throw new ArgumentOutOfRangeException($"Capacity {capacity} must be positive.");
			}
			if (capacity < length)
			{
				throw new ArgumentOutOfRangeException($"Capacity {capacity} is out of range in container of '{length}' Length.");
			}
		}

		[BurstCompatible(GenericTypeArguments = new Type[]
		{
			typeof(int),
			typeof(AllocatorManager.AllocatorHandle)
		})]
		public static NativeArray<T> CreateNativeArray<T, U>(int length, ref U allocator, NativeArrayOptions options = 1) where T : struct where U : unmanaged, AllocatorManager.IAllocator
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			NativeArray<T> array = default(NativeArray<T>);
			if (!allocator.IsCustomAllocator)
			{
				array..ctor(length, allocator.ToAllocator, options);
			}
			else
			{
				array = default(NativeArray<T>);
				NativeArrayExtensions.Initialize(ref array, length, ref allocator, options);
			}
			return array;
		}

		[BurstCompatible(GenericTypeArguments = new Type[] { typeof(int) })]
		public static NativeArray<T> CreateNativeArray<T>(int length, AllocatorManager.AllocatorHandle allocator, NativeArrayOptions options = 1) where T : struct
		{
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			NativeArray<T> array = default(NativeArray<T>);
			if (!AllocatorManager.IsCustomAllocator(allocator))
			{
				array..ctor(length, allocator.ToAllocator, options);
			}
			else
			{
				array = default(NativeArray<T>);
				NativeArrayExtensions.Initialize(ref array, length, allocator, options);
			}
			return array;
		}

		[BurstCompatible(GenericTypeArguments = new Type[] { typeof(int) })]
		public static NativeArray<T> CreateNativeArray<T>(NativeArray<T> array, AllocatorManager.AllocatorHandle allocator) where T : struct
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			NativeArray<T> array2 = default(NativeArray<T>);
			if (!AllocatorManager.IsCustomAllocator(allocator))
			{
				array2..ctor(array, allocator.ToAllocator);
			}
			else
			{
				array2 = default(NativeArray<T>);
				NativeArrayExtensions.Initialize(ref array2, array.Length, allocator, (NativeArrayOptions)0);
				array2.CopyFrom(array);
			}
			return array2;
		}

		[NotBurstCompatible]
		public static NativeArray<T> CreateNativeArray<T>(T[] array, AllocatorManager.AllocatorHandle allocator) where T : struct
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			NativeArray<T> array2 = default(NativeArray<T>);
			if (!AllocatorManager.IsCustomAllocator(allocator))
			{
				array2..ctor(array, allocator.ToAllocator);
			}
			else
			{
				array2 = default(NativeArray<T>);
				NativeArrayExtensions.Initialize(ref array2, array.Length, allocator, (NativeArrayOptions)0);
				array2.CopyFrom(array);
			}
			return array2;
		}

		[NotBurstCompatible]
		public static NativeArray<T> CreateNativeArray<T, U>(T[] array, ref U allocator) where T : struct where U : unmanaged, AllocatorManager.IAllocator
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			NativeArray<T> array2 = default(NativeArray<T>);
			if (!allocator.IsCustomAllocator)
			{
				array2..ctor(array, allocator.ToAllocator);
			}
			else
			{
				array2 = default(NativeArray<T>);
				NativeArrayExtensions.Initialize(ref array2, array.Length, ref allocator, (NativeArrayOptions)1);
				array2.CopyFrom(array);
			}
			return array2;
		}

		[BurstCompatible(GenericTypeArguments = new Type[]
		{
			typeof(int),
			typeof(int),
			typeof(AllocatorManager.AllocatorHandle)
		})]
		public static NativeParallelHashMap<TKey, TValue> CreateNativeParallelHashMap<TKey, TValue, U>(int length, ref U allocator) where TKey : struct, IEquatable<TKey> where TValue : struct where U : unmanaged, AllocatorManager.IAllocator
		{
			return default(NativeParallelHashMap<TKey, TValue>);
		}

		[Obsolete("CreateNativeMultiHashMap is renamed to CreateNativeParallelHashMap. (UnityUpgradable) -> CreateNativeParallelHashMap<TKey, TValue, U>(*)", true)]
		[BurstCompatible(GenericTypeArguments = new Type[]
		{
			typeof(int),
			typeof(int),
			typeof(AllocatorManager.AllocatorHandle)
		})]
		public static NativeHashMap<TKey, TValue> CreateNativeMultiHashMap<TKey, TValue, U>(int length, ref U allocator) where TKey : struct, IEquatable<TKey> where TValue : struct where U : unmanaged, AllocatorManager.IAllocator
		{
			return default(NativeHashMap<TKey, TValue>);
		}
	}
	internal struct Long8
	{
		internal long f0;

		internal long f1;

		internal long f2;

		internal long f3;

		internal long f4;

		internal long f5;

		internal long f6;

		internal long f7;
	}
	internal struct Long64
	{
		internal Long8 f0;

		internal Long8 f1;

		internal Long8 f2;

		internal Long8 f3;

		internal Long8 f4;

		internal Long8 f5;

		internal Long8 f6;

		internal Long8 f7;
	}
	internal struct Long512
	{
		internal Long64 f0;

		internal Long64 f1;

		internal Long64 f2;

		internal Long64 f3;

		internal Long64 f4;

		internal Long64 f5;

		internal Long64 f6;

		internal Long64 f7;
	}
	internal struct Long1024 : IIndexable<long>
	{
		internal Long512 f0;

		internal Long512 f1;

		public int Length
		{
			get
			{
				return 1024;
			}
			set
			{
			}
		}

		public unsafe ref long ElementAt(int index)
		{
			fixed (Long512* ptr = &f0)
			{
				return ref UnsafeUtility.AsRef<long>((void*)((byte*)ptr + (nint)index * (nint)8));
			}
		}
	}
	internal class ConcurrentMask
	{
		internal const int ErrorFailedToFree = -1;

		internal const int ErrorFailedToAllocate = -2;

		internal const int EmptyBeforeAllocation = 0;

		internal const int EmptyAfterFree = 0;

		internal static void longestConsecutiveOnes(long value, out int offset, out int count)
		{
			count = 0;
			long num = value;
			while (num != 0)
			{
				value = num;
				num = value & (value >>> 1);
				count++;
			}
			offset = math.tzcnt(value);
		}

		internal static bool foundAtLeastThisManyConsecutiveOnes(long value, int minimum, out int offset, out int count)
		{
			if (minimum == 1)
			{
				offset = math.tzcnt(value);
				count = 1;
				return offset != 64;
			}
			longestConsecutiveOnes(value, out offset, out count);
			return count >= minimum;
		}

		internal static bool foundAtLeastThisManyConsecutiveZeroes(long value, int minimum, out int offset, out int count)
		{
			return foundAtLeastThisManyConsecutiveOnes(~value, minimum, out offset, out count);
		}

		internal static bool Succeeded(int error)
		{
			return error >= 0;
		}

		internal static long MakeMask(int offset, int bits)
		{
			return (long)(ulong.MaxValue >> 64 - bits << offset);
		}

		internal static int TryAllocate(ref long l, int offset, int bits)
		{
			long num = MakeMask(offset, bits);
			long num2 = Interlocked.Read(ref l);
			long num3;
			do
			{
				if ((num2 & num) != 0)
				{
					return -2;
				}
				long value = num2 | num;
				num3 = num2;
				num2 = Interlocked.CompareExchange(ref l, value, num3);
			}
			while (num2 != num3);
			return math.countbits(num2);
		}

		internal static int TryFree(ref long l, int offset, int bits)
		{
			long num = MakeMask(offset, bits);
			long num2 = Interlocked.Read(ref l);
			long num3;
			long num4;
			do
			{
				if ((num2 & num) != num)
				{
					return -1;
				}
				num3 = num2 & ~num;
				num4 = num2;
				num2 = Interlocked.CompareExchange(ref l, num3, num4);
			}
			while (num2 != num4);
			return math.countbits(num3);
		}

		internal static int TryAllocate(ref long l, out int offset, int bits)
		{
			long num = Interlocked.Read(ref l);
			long num3;
			do
			{
				if (!foundAtLeastThisManyConsecutiveZeroes(num, bits, out offset, out var _))
				{
					return -2;
				}
				long num2 = MakeMask(offset, bits);
				long value = num | num2;
				num3 = num;
				num = Interlocked.CompareExchange(ref l, value, num3);
			}
			while (num != num3);
			return math.countbits(num);
		}

		internal static int TryAllocate<T>(ref T t, int offset, int bits) where T : IIndexable<long>
		{
			int index = offset >> 6;
			int offset2 = offset & 0x3F;
			return TryAllocate(ref t.ElementAt(index), offset2, bits);
		}

		internal static int TryFree<T>(ref T t, int offset, int bits) where T : IIndexable<long>
		{
			int index = offset >> 6;
			int offset2 = offset & 0x3F;
			return TryFree(ref t.ElementAt(index), offset2, bits);
		}

		internal static int TryAllocate<T>(ref T t, out int offset, int begin, int end, int bits) where T : IIndexable<long>
		{
			for (int i = begin; i < end; i++)
			{
				int offset2;
				int num = TryAllocate(ref t.ElementAt(i), out offset2, bits);
				if (Succeeded(num))
				{
					offset = i * 64 + offset2;
					return num;
				}
			}
			offset = -1;
			return -2;
		}

		internal static int TryAllocate<T>(ref T t, out int offset, int bits) where T : IIndexable<long>
		{
			return TryAllocate(ref t, out offset, 0, t.Length, bits);
		}
	}
	internal struct Pair<Key, Value>
	{
		public Key key;

		public Value value;

		public Pair(Key k, Value v)
		{
			key = k;
			value = v;
		}

		public override string ToString()
		{
			return $"{key} = {value}";
		}
	}
	internal struct ListPair<Key, Value> where Value : IList
	{
		public Key key;

		public Value value;

		public ListPair(Key k, Value v)
		{
			key = k;
			value = v;
		}

		public override string ToString()
		{
			string text = $"{key} = [";
			for (int i = 0; i < value.Count; i++)
			{
				text += value[i];
				if (i < value.Count - 1)
				{
					text += ", ";
				}
			}
			return text + "]";
		}
	}
	[Obsolete("NativeMultiHashMapIterator is renamed to NativeParallelMultiHashMapIterator. (UnityUpgradable) -> NativeParallelMultiHashMapIterator<TKey>", false)]
	public struct NativeMultiHashMapIterator<TKey> where TKey : struct
	{
		internal TKey key;

		internal int NextEntryIndex;

		internal int EntryIndex;

		public int GetEntryIndex()
		{
			return EntryIndex;
		}
	}
	[Obsolete("NativeHashMap is renamed to NativeParallelHashMap. (UnityUpgradable) -> NativeParallelHashMap<TKey, TValue>", false)]
	[NativeContainer]
	public struct NativeHashMap<TKey, TValue> : INativeDisposable, IDisposable, IEnumerable<KeyValue<TKey, TValue>>, IEnumerable where TKey : struct, IEquatable<TKey> where TValue : struct
	{
		[NativeContainer]
		[NativeContainerIsAtomicWriteOnly]
		[DebuggerDisplay("Capacity = {m_Writer.Capacity}")]
		public struct ParallelWriter
		{
			internal UnsafeParallelHashMap<TKey, TValue>.ParallelWriter m_Writer;

			public int m_ThreadIndex => m_Writer.m_ThreadIndex;

			public int Capacity => m_Writer.Capacity;

			public bool TryAdd(TKey key, TValue item)
			{
				return m_Writer.TryAdd(key, item);
			}
		}

		[NativeContainer]
		[NativeContainerIsReadOnly]
		public struct Enumerator : IEnumerator<KeyValue<TKey, TValue>>, IEnumerator, IDisposable
		{
			internal UnsafeParallelHashMapDataEnumerator m_Enumerator;

			public KeyValue<TKey, TValue> Current => m_Enumerator.GetCurrent<TKey, TValue>();

			object IEnumerator.Current => Current;

			public void Dispose()
			{
			}

			public bool MoveNext()
			{
				return m_Enumerator.MoveNext();
			}

			public void Reset()
			{
				m_Enumerator.Reset();
			}
		}

		internal UnsafeParallelHashMap<TKey, TValue> m_HashMapData;

		public bool IsEmpty
		{
			get
			{
				if (!IsCreated)
				{
					return true;
				}
				return m_HashMapData.IsEmpty;
			}
		}

		public int Capacity
		{
			get
			{
				return m_HashMapData.Capacity;
			}
			set
			{
				m_HashMapData.Capacity = value;
			}
		}

		public TValue this[TKey key]
		{
			get
			{
				if (m_HashMapData.TryGetValue(key, out var item))
				{
					return item;
				}
				return default(TValue);
			}
			set
			{
				m_HashMapData[key] = value;
			}
		}

		public bool IsCreated => m_HashMapData.IsCreated;

		public NativeHashMap(int capacity, AllocatorManager.AllocatorHandle allocator)
			: this(capacity, allocator, 2)
		{
		}

		private NativeHashMap(int capacity, AllocatorManager.AllocatorHandle allocator, int disposeSentinelStackDepth)
		{
			m_HashMapData = new UnsafeParallelHashMap<TKey, TValue>(capacity, allocator);
		}

		public int Count()
		{
			return m_HashMapData.Count();
		}

		public void Clear()
		{
			m_HashMapData.Clear();
		}

		public bool TryAdd(TKey key, TValue item)
		{
			return m_HashMapData.TryAdd(key, item);
		}

		public void Add(TKey key, TValue item)
		{
			if (TryAdd(key, item))
			{
			}
		}

		public bool Remove(TKey key)
		{
			return m_HashMapData.Remove(key);
		}

		public bool TryGetValue(TKey key, out TValue item)
		{
			return m_HashMapData.TryGetValue(key, out item);
		}

		public bool ContainsKey(TKey key)
		{
			return m_HashMapData.ContainsKey(key);
		}

		public void Dispose()
		{
			m_HashMapData.Dispose();
		}

		[NotBurstCompatible]
		public unsafe JobHandle Dispose(JobHandle inputDeps)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			UnsafeParallelHashMapDataDisposeJob unsafeParallelHashMapDataDisposeJob = default(UnsafeParallelHashMapDataDisposeJob);
			unsafeParallelHashMapDataDisposeJob.Data = new UnsafeParallelHashMapDataDispose
			{
				m_Buffer = m_HashMapData.m_Buffer,
				m_AllocatorLabel = m_HashMapData.m_AllocatorLabel
			};
			JobHandle result = IJobExtensions.Schedule<UnsafeParallelHashMapDataDisposeJob>(unsafeParallelHashMapDataDisposeJob, inputDeps);
			m_HashMapData.m_Buffer = null;
			return result;
		}

		public NativeArray<TKey> GetKeyArray(AllocatorManager.AllocatorHandle allocator)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			return m_HashMapData.GetKeyArray(allocator);
		}

		public NativeArray<TValue> GetValueArray(AllocatorManager.AllocatorHandle allocator)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			return m_HashMapData.GetValueArray(allocator);
		}

		public NativeKeyValueArrays<TKey, TValue> GetKeyValueArrays(AllocatorManager.AllocatorHandle allocator)
		{
			return m_HashMapData.GetKeyValueArrays(allocator);
		}

		public ParallelWriter AsParallelWriter()
		{
			ParallelWriter result = default(ParallelWriter);
			result.m_Writer = m_HashMapData.AsParallelWriter();
			return result;
		}

		public unsafe Enumerator GetEnumerator()
		{
			Enumerator result = default(Enumerator);
			result.m_Enumerator = new UnsafeParallelHashMapDataEnumerator(m_HashMapData.m_Buffer);
			return result;
		}

		IEnumerator<KeyValue<TKey, TValue>> IEnumerable<KeyValue<TKey, TValue>>.GetEnumerator()
		{
			throw new NotImplementedException();
		}

		IEnumerator IEnumerable.GetEnumerator()
		{
			throw new NotImplementedException();
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		private void CheckRead()
		{
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		private void CheckWrite()
		{
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		private void ThrowKeyNotPresent(TKey key)
		{
			throw new ArgumentException($"Key: {key} is not present in the NativeParallelHashMap.");
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		private void ThrowKeyAlreadyAdded(TKey key)
		{
			throw new ArgumentException("An item with the same key has already been added", "key");
		}
	}
	[Obsolete("NativeMultiHashMap is renamed to NativeParallelMultiHashMap. (UnityUpgradable) -> NativeParallelMultiHashMap<TKey, TValue>", false)]
	[NativeContainer]
	public struct NativeMultiHashMap<TKey, TValue> : INativeDisposable, IDisposable, IEnumerable<KeyValue<TKey, TValue>>, IEnumerable where TKey : struct, IEquatable<TKey> where TValue : struct
	{
		[NativeContainer]
		[NativeContainerIsAtomicWriteOnly]
		public struct ParallelWriter
		{
			internal UnsafeParallelMultiHashMap<TKey, TValue>.ParallelWriter m_Writer;

			public int m_ThreadIndex => m_Writer.m_ThreadIndex;

			public int Capacity => m_Writer.Capacity;

			public void Add(TKey key, TValue item)
			{
				m_Writer.Add(key, item);
			}
		}

		public struct Enumerator : IEnumerator<TValue>, IEnumerator, IDisposable
		{
			internal NativeMultiHashMap<TKey, TValue> hashmap;

			internal TKey key;

			internal bool isFirst;

			private TValue value;

			private NativeParallelMultiHashMapIterator<TKey> iterator;

			public TValue Current => value;

			object IEnumerator.Current => Current;

			public void Dispose()
			{
			}

			public bool MoveNext()
			{
				if (isFirst)
				{
					isFirst = false;
					return hashmap.TryGetFirstValue(key, out value, out iterator);
				}
				return hashmap.TryGetNextValue(out value, ref iterator);
			}

			public void Reset()
			{
				isFirst = true;
			}

			public Enumerator GetEnumerator()
			{
				return this;
			}
		}

		[NativeContainer]
		[NativeContainerIsReadOnly]
		public struct KeyValueEnumerator : IEnumerator<KeyValue<TKey, TValue>>, IEnumerator, IDisposable
		{
			internal UnsafeParallelHashMapDataEnumerator m_Enumerator;

			public KeyValue<TKey, TValue> Current => m_Enumerator.GetCurrent<TKey, TValue>();

			object IEnumerator.Current => Current;

			public void Dispose()
			{
			}

			public bool MoveNext()
			{
				return m_Enumerator.MoveNext();
			}

			public void Reset()
			{
				m_Enumerator.Reset();
			}
		}

		internal UnsafeParallelMultiHashMap<TKey, TValue> m_MultiHashMapData;

		public bool IsEmpty => m_MultiHashMapData.IsEmpty;

		public int Capacity
		{
			get
			{
				return m_MultiHashMapData.Capacity;
			}
			set
			{
				m_MultiHashMapData.Capacity = value;
			}
		}

		public bool IsCreated => m_MultiHashMapData.IsCreated;

		public NativeMultiHashMap(int capacity, AllocatorManager.AllocatorHandle allocator)
			: this(capacity, allocator, 2)
		{
		}

		internal void Initialize<U>(int capacity, ref U allocator, int disposeSentinelStackDepth) where U : unmanaged, AllocatorManager.IAllocator
		{
			m_MultiHashMapData = new UnsafeParallelMultiHashMap<TKey, TValue>(capacity, allocator.Handle);
		}

		private NativeMultiHashMap(int capacity, AllocatorManager.AllocatorHandle allocator, int disposeSentinelStackDepth)
		{
			this = default(NativeMultiHashMap<TKey, TValue>);
			Initialize(capacity, ref allocator, disposeSentinelStackDepth);
		}

		public int Count()
		{
			return m_MultiHashMapData.Count();
		}

		public void Clear()
		{
			m_MultiHashMapData.Clear();
		}

		public void Add(TKey key, TValue item)
		{
			m_MultiHashMapData.Add(key, item);
		}

		public int Remove(TKey key)
		{
			return m_MultiHashMapData.Remove(key);
		}

		public void Remove(NativeParallelMultiHashMapIterator<TKey> it)
		{
			m_MultiHashMapData.Remove(it);
		}

		public bool TryGetFirstValue(TKey key, out TValue item, out NativeParallelMultiHashMapIterator<TKey> it)
		{
			return m_MultiHashMapData.TryGetFirstValue(key, out item, out it);
		}

		public bool TryGetNextValue(out TValue item, ref NativeParallelMultiHashMapIterator<TKey> it)
		{
			return m_MultiHashMapData.TryGetNextValue(out item, ref it);
		}

		public bool ContainsKey(TKey key)
		{
			TValue item;
			NativeParallelMultiHashMapIterator<TKey> it;
			return TryGetFirstValue(key, out item, out it);
		}

		public int CountValuesForKey(TKey key)
		{
			if (!TryGetFirstValue(key, out var item, out var it))
			{
				return 0;
			}
			int num = 1;
			while (TryGetNextValue(out item, ref it))
			{
				num++;
			}
			return num;
		}

		public bool SetValue(TValue item, NativeParallelMultiHashMapIterator<TKey> it)
		{
			return m_MultiHashMapData.SetValue(item, it);
		}

		public void Dispose()
		{
			m_MultiHashMapData.Dispose();
		}

		[NotBurstCompatible]
		public unsafe JobHandle Dispose(JobHandle inputDeps)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			UnsafeParallelHashMapDataDisposeJob unsafeParallelHashMapDataDisposeJob = default(UnsafeParallelHashMapDataDisposeJob);
			unsafeParallelHashMapDataDisposeJob.Data = new UnsafeParallelHashMapDataDispose
			{
				m_Buffer = m_MultiHashMapData.m_Buffer,
				m_AllocatorLabel = m_MultiHashMapData.m_AllocatorLabel
			};
			JobHandle result = IJobExtensions.Schedule<UnsafeParallelHashMapDataDisposeJob>(unsafeParallelHashMapDataDisposeJob, inputDeps);
			m_MultiHashMapData.m_Buffer = null;
			return result;
		}

		public NativeArray<TKey> GetKeyArray(AllocatorManager.AllocatorHandle allocator)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			return m_MultiHashMapData.GetKeyArray(allocator);
		}

		public NativeArray<TValue> GetValueArray(AllocatorManager.AllocatorHandle allocator)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			return m_MultiHashMapData.GetValueArray(allocator);
		}

		public NativeKeyValueArrays<TKey, TValue> GetKeyValueArrays(AllocatorManager.AllocatorHandle allocator)
		{
			return m_MultiHashMapData.GetKeyValueArrays(allocator);
		}

		public ParallelWriter AsParallelWriter()
		{
			ParallelWriter result = default(ParallelWriter);
			result.m_Writer = m_MultiHashMapData.AsParallelWriter();
			return result;
		}

		public Enumerator GetValuesForKey(TKey key)
		{
			Enumerator result = default(Enumerator);
			result.hashmap = this;
			result.key = key;
			result.isFirst = true;
			return result;
		}

		public unsafe KeyValueEnumerator GetEnumerator()
		{
			KeyValueEnumerator result = default(KeyValueEnumerator);
			result.m_Enumerator = new UnsafeParallelHashMapDataEnumerator(m_MultiHashMapData.m_Buffer);
			return result;
		}

		IEnumerator<KeyValue<TKey, TValue>> IEnumerable<KeyValue<TKey, TValue>>.GetEnumerator()
		{
			throw new NotImplementedException();
		}

		IEnumerator IEnumerable.GetEnumerator()
		{
			throw new NotImplementedException();
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		private void CheckRead()
		{
		}

		[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
		private void CheckWrite()
		{
		}
	}
	[Obsolete("NativeHashSet is renamed to NativeParallelHashSet. (UnityUpgradable) -> NativeParallelHashSet<T>", false)]
	public struct NativeHashSet<T> : INativeDisposable, IDisposable, IEnumerable<T>, IEnumerable where T : unmanaged, IEquatable<T>
	{
		[NativeContainerIsAtomicWriteOnly]
		public struct ParallelWriter
		{
			internal NativeParallelHashMap<T, bool>.ParallelWriter m_Data;

			public int Capacity => m_Data.Capacity;

			public bool Add(T item)
			{
				return m_Data.TryAdd(item, item: false);
			}
		}

		[NativeContainer]
		[NativeContainerIsReadOnly]
		public struct Enumerator : IEnumerator<T>, IEnumerator, IDisposable
		{
			internal UnsafeParallelHashMapDataEnumerator m_Enumerator;

			public T Current => m_Enumerator.GetCurrentKey<T>();

			object IEnumerator.Current => Current;

			public void Dispose()
			{
			}

			public bool MoveNext()
			{
				return m_Enumerator.MoveNext();
			}

			public void Reset()
			{
				m_Enumerator.Reset();
			}
		}

		internal NativeParallelHashMap<T, bool> m_Data;

		public bool IsEmpty => m_Data.IsEmpty;

		public int Capacity
		{
			get
			{
				return m_Data.Capacity;
			}
			set
			{
				m_Data.Capacity = value;
			}
		}

		public bool IsCreated => m_Data.IsCreated;

		public NativeHashSet(int capacity, AllocatorManager.AllocatorHandle allocator)
		{
			m_Data = new NativeParallelHashMap<T, bool>(capacity, allocator);
		}

		public int Count()
		{
			return m_Data.Count();
		}

		public void Dispose()
		{
			m_Data.Dispose();
		}

		[NotBurstCompatible]
		public JobHandle Dispose(JobHandle inputDeps)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			return m_Data.Dispose(inputDeps);
		}

		public void Clear()
		{
			m_Data.Clear();
		}

		public bool Add(T item)
		{
			return m_Data.TryAdd(item, item: false);
		}

		public bool Remove(T item)
		{
			return m_Data.Remove(item);
		}

		public bool Contains(T item)
		{
			return m_Data.ContainsKey(item);
		}

		public NativeArray<T> ToNativeArray(AllocatorManager.AllocatorHandle allocator)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			return m_Data.GetKeyArray(allocator);
		}

		public ParallelWriter AsParallelWriter()
		{
			ParallelWriter result = default(ParallelWriter);
			result.m_Data = m_Data.AsParallelWriter();
			return result;
		}

		public unsafe Enumerator GetEnumerator()
		{
			Enumerator result = default(Enumerator);
			result.m_Enumerator = new UnsafeParallelHashMapDataEnumerator(m_Data.m_HashMapData.m_Buffer);
			return result;
		}

		IEnumerator<T> IEnumerable<T>.GetEnumerator()
		{
			throw new NotImplementedException();
		}

		IEnumerator IEnumerable.GetEnumerator()
		{
			throw new NotImplementedException();
		}
	}
	[Serializable]
	[BurstCompatible(GenericTypeArguments = new Type[]
	{
		typeof(int),
		typeof(FixedBytes30)
	})]
	internal struct FixedList<T, U> : INativeList<T>, IIndexable<T> where T : unmanaged where U : unmanaged
	{
		[SerializeField]
		internal ushort length;

		[SerializeField]
		internal U buffer;

		[CreateProperty]
		public int Length
		{
			get
			{
				return length;
			}
			set
			{
				length = (ushort)value;
			}
		}

		[CreateProperty]
		private IEnumerable<T> Elements => ToArray();

		public bool IsEmpty => Length == 0;

		internal int LengthInBytes => Length * UnsafeUtility.SizeOf<T>();

		internal unsafe byte* Buffer
		{
			get
			{
				fixed (U* ptr = &buffer)
				{
					return (byte*)ptr + FixedList.PaddingBytes<T>();
				}
			}
		}

		pu

plugins/.RuntimeAssemblies/Unity.Collections.LowLevel.ILSupport.dll

Decompiled 3 weeks ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using Microsoft.CodeAnalysis;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: InternalsVisibleTo("Unity.Collections")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.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
	{
	}
}
namespace Unity.Collections.LowLevel.Unsafe
{
	internal static class ILSupport
	{
		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public unsafe static void* AddressOf<T>(in T thing) where T : struct
		{
			return System.Runtime.CompilerServices.Unsafe.AsPointer(ref thing);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static ref T AsRef<T>(in T thing) where T : struct
		{
			return ref thing;
		}
	}
}

plugins/.RuntimeAssemblies/Unity.Mathematics.dll

Decompiled 3 weeks ago
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Permissions;
using Unity.IL2CPP.CompilerServices;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("Unity.Mathematics")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Unity.Mathematics")]
[assembly: AssemblyCopyright("Copyright ©  2017")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("19810344-7387-4155-935F-BDD5CC61F0BF")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: InternalsVisibleTo("Unity.Mathematics.Tests")]
[assembly: InternalsVisibleTo("Unity.Mathematics.PerformanceTests")]
[assembly: InternalsVisibleTo("btests")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace Unity.IL2CPP.CompilerServices
{
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, Inherited = false, AllowMultiple = false)]
	internal class Il2CppEagerStaticClassConstructionAttribute : Attribute
	{
	}
}
namespace Unity.Mathematics
{
	[Serializable]
	[DebuggerTypeProxy(typeof(DebuggerProxy))]
	[Il2CppEagerStaticClassConstruction]
	public struct bool2 : IEquatable<bool2>
	{
		internal sealed class DebuggerProxy
		{
			public bool x;

			public bool y;

			public DebuggerProxy(bool2 v)
			{
				x = v.x;
				y = v.y;
			}
		}

		[MarshalAs(UnmanagedType.U1)]
		public bool x;

		[MarshalAs(UnmanagedType.U1)]
		public bool y;

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool4 xxxx
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool4(x, x, x, x);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool4 xxxy
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool4(x, x, x, y);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool4 xxyx
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool4(x, x, y, x);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool4 xxyy
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool4(x, x, y, y);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool4 xyxx
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool4(x, y, x, x);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool4 xyxy
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool4(x, y, x, y);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool4 xyyx
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool4(x, y, y, x);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool4 xyyy
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool4(x, y, y, y);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool4 yxxx
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool4(y, x, x, x);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool4 yxxy
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool4(y, x, x, y);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool4 yxyx
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool4(y, x, y, x);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool4 yxyy
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool4(y, x, y, y);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool4 yyxx
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool4(y, y, x, x);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool4 yyxy
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool4(y, y, x, y);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool4 yyyx
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool4(y, y, y, x);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool4 yyyy
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool4(y, y, y, y);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool3 xxx
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool3(x, x, x);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool3 xxy
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool3(x, x, y);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool3 xyx
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool3(x, y, x);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool3 xyy
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool3(x, y, y);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool3 yxx
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool3(y, x, x);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool3 yxy
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool3(y, x, y);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool3 yyx
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool3(y, y, x);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool3 yyy
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool3(y, y, y);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool2 xx
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool2(x, x);
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool2 xy
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool2(x, y);
			}
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			set
			{
				x = value.x;
				y = value.y;
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool2 yx
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool2(y, x);
			}
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			set
			{
				y = value.x;
				x = value.y;
			}
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public bool2 yy
		{
			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			get
			{
				return new bool2(y, y);
			}
		}

		public unsafe bool this[int index]
		{
			get
			{
				fixed (bool2* ptr = &this)
				{
					return ((byte*)ptr)[index] != 0;
				}
			}
			set
			{
				fixed (bool* ptr = &x)
				{
					ptr[index] = value;
				}
			}
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public bool2(bool x, bool y)
		{
			this.x = x;
			this.y = y;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public bool2(bool2 xy)
		{
			x = xy.x;
			y = xy.y;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public bool2(bool v)
		{
			x = v;
			y = v;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static implicit operator bool2(bool v)
		{
			return new bool2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 operator ==(bool2 lhs, bool2 rhs)
		{
			return new bool2(lhs.x == rhs.x, lhs.y == rhs.y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 operator ==(bool2 lhs, bool rhs)
		{
			return new bool2(lhs.x == rhs, lhs.y == rhs);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 operator ==(bool lhs, bool2 rhs)
		{
			return new bool2(lhs == rhs.x, lhs == rhs.y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 operator !=(bool2 lhs, bool2 rhs)
		{
			return new bool2(lhs.x != rhs.x, lhs.y != rhs.y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 operator !=(bool2 lhs, bool rhs)
		{
			return new bool2(lhs.x != rhs, lhs.y != rhs);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 operator !=(bool lhs, bool2 rhs)
		{
			return new bool2(lhs != rhs.x, lhs != rhs.y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 operator !(bool2 val)
		{
			return new bool2(!val.x, !val.y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 operator &(bool2 lhs, bool2 rhs)
		{
			return new bool2(lhs.x & rhs.x, lhs.y & rhs.y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 operator &(bool2 lhs, bool rhs)
		{
			return new bool2(lhs.x && rhs, lhs.y && rhs);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 operator &(bool lhs, bool2 rhs)
		{
			return new bool2(lhs & rhs.x, lhs & rhs.y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 operator |(bool2 lhs, bool2 rhs)
		{
			return new bool2(lhs.x | rhs.x, lhs.y | rhs.y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 operator |(bool2 lhs, bool rhs)
		{
			return new bool2(lhs.x || rhs, lhs.y || rhs);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 operator |(bool lhs, bool2 rhs)
		{
			return new bool2(lhs | rhs.x, lhs | rhs.y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 operator ^(bool2 lhs, bool2 rhs)
		{
			return new bool2(lhs.x ^ rhs.x, lhs.y ^ rhs.y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 operator ^(bool2 lhs, bool rhs)
		{
			return new bool2(lhs.x ^ rhs, lhs.y ^ rhs);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 operator ^(bool lhs, bool2 rhs)
		{
			return new bool2(lhs ^ rhs.x, lhs ^ rhs.y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public bool Equals(bool2 rhs)
		{
			return x == rhs.x && y == rhs.y;
		}

		public override bool Equals(object o)
		{
			return o is bool2 rhs && Equals(rhs);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public override int GetHashCode()
		{
			return (int)math.hash(this);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public override string ToString()
		{
			return $"bool2({x}, {y})";
		}
	}
	[Il2CppEagerStaticClassConstruction]
	public static class math
	{
		public enum RotationOrder : byte
		{
			XYZ = 0,
			XZY = 1,
			YXZ = 2,
			YZX = 3,
			ZXY = 4,
			ZYX = 5,
			Default = 4
		}

		public enum ShuffleComponent : byte
		{
			LeftX,
			LeftY,
			LeftZ,
			LeftW,
			RightX,
			RightY,
			RightZ,
			RightW
		}

		[StructLayout(LayoutKind.Explicit)]
		internal struct IntFloatUnion
		{
			[FieldOffset(0)]
			public int intValue;

			[FieldOffset(0)]
			public float floatValue;
		}

		[StructLayout(LayoutKind.Explicit)]
		internal struct LongDoubleUnion
		{
			[FieldOffset(0)]
			public long longValue;

			[FieldOffset(0)]
			public double doubleValue;
		}

		public const double E_DBL = Math.E;

		public const double LOG2E_DBL = 1.4426950408889634;

		public const double LOG10E_DBL = 0.4342944819032518;

		public const double LN2_DBL = 0.6931471805599453;

		public const double LN10_DBL = 2.302585092994046;

		public const double PI_DBL = Math.PI;

		public const double SQRT2_DBL = 1.4142135623730951;

		public const double EPSILON_DBL = 2.220446049250313E-16;

		public const double INFINITY_DBL = double.PositiveInfinity;

		public const double NAN_DBL = double.NaN;

		public const float FLT_MIN_NORMAL = 1.1754944E-38f;

		public const double DBL_MIN_NORMAL = 2.2250738585072014E-308;

		public const float E = MathF.E;

		public const float LOG2E = 1.442695f;

		public const float LOG10E = 0.4342945f;

		public const float LN2 = 0.6931472f;

		public const float LN10 = 2.3025851f;

		public const float PI = MathF.PI;

		public const float SQRT2 = 1.4142135f;

		public const float EPSILON = 1.1920929E-07f;

		public const float INFINITY = float.PositiveInfinity;

		public const float NAN = float.NaN;

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 bool2(bool x, bool y)
		{
			return new bool2(x, y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 bool2(bool2 xy)
		{
			return new bool2(xy);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 bool2(bool v)
		{
			return new bool2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(bool2 v)
		{
			return csum(select(uint2(2426570171u, 1561977301u), uint2(4205774813u, 1650214333u), v));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint2 hashwide(bool2 v)
		{
			return select(uint2(3388112843u, 1831150513u), uint2(1848374953u, 3430200247u), v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool shuffle(bool2 left, bool2 right, ShuffleComponent x)
		{
			return select_shuffle_component(left, right, x);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 shuffle(bool2 left, bool2 right, ShuffleComponent x, ShuffleComponent y)
		{
			return bool2(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool3 shuffle(bool2 left, bool2 right, ShuffleComponent x, ShuffleComponent y, ShuffleComponent z)
		{
			return bool3(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y), select_shuffle_component(left, right, z));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4 shuffle(bool2 left, bool2 right, ShuffleComponent x, ShuffleComponent y, ShuffleComponent z, ShuffleComponent w)
		{
			return bool4(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y), select_shuffle_component(left, right, z), select_shuffle_component(left, right, w));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		internal static bool select_shuffle_component(bool2 a, bool2 b, ShuffleComponent component)
		{
			return component switch
			{
				ShuffleComponent.LeftX => a.x, 
				ShuffleComponent.LeftY => a.y, 
				ShuffleComponent.RightX => b.x, 
				ShuffleComponent.RightY => b.y, 
				_ => throw new ArgumentException("Invalid shuffle component: " + component), 
			};
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2x2 bool2x2(bool2 c0, bool2 c1)
		{
			return new bool2x2(c0, c1);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2x2 bool2x2(bool m00, bool m01, bool m10, bool m11)
		{
			return new bool2x2(m00, m01, m10, m11);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2x2 bool2x2(bool v)
		{
			return new bool2x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2x2 transpose(bool2x2 v)
		{
			return bool2x2(v.c0.x, v.c0.y, v.c1.x, v.c1.y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(bool2x2 v)
		{
			return csum(select(uint2(2062756937u, 2920485769u), uint2(1562056283u, 2265541847u), v.c0) + select(uint2(1283419601u, 1210229737u), uint2(2864955997u, 3525118277u), v.c1));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint2 hashwide(bool2x2 v)
		{
			return select(uint2(2298260269u, 1632478733u), uint2(1537393931u, 2353355467u), v.c0) + select(uint2(3441847433u, 4052036147u), uint2(2011389559u, 2252224297u), v.c1);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2x3 bool2x3(bool2 c0, bool2 c1, bool2 c2)
		{
			return new bool2x3(c0, c1, c2);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2x3 bool2x3(bool m00, bool m01, bool m02, bool m10, bool m11, bool m12)
		{
			return new bool2x3(m00, m01, m02, m10, m11, m12);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2x3 bool2x3(bool v)
		{
			return new bool2x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool3x2 transpose(bool2x3 v)
		{
			return bool3x2(v.c0.x, v.c0.y, v.c1.x, v.c1.y, v.c2.x, v.c2.y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(bool2x3 v)
		{
			return csum(select(uint2(2078515003u, 4206465343u), uint2(3025146473u, 3763046909u), v.c0) + select(uint2(3678265601u, 2070747979u), uint2(1480171127u, 1588341193u), v.c1) + select(uint2(4234155257u, 1811310911u), uint2(2635799963u, 4165137857u), v.c2));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint2 hashwide(bool2x3 v)
		{
			return select(uint2(2759770933u, 2759319383u), uint2(3299952959u, 3121178323u), v.c0) + select(uint2(2948522579u, 1531026433u), uint2(1365086453u, 3969870067u), v.c1) + select(uint2(4192899797u, 3271228601u), uint2(1634639009u, 3318036811u), v.c2);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2x4 bool2x4(bool2 c0, bool2 c1, bool2 c2, bool2 c3)
		{
			return new bool2x4(c0, c1, c2, c3);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2x4 bool2x4(bool m00, bool m01, bool m02, bool m03, bool m10, bool m11, bool m12, bool m13)
		{
			return new bool2x4(m00, m01, m02, m03, m10, m11, m12, m13);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2x4 bool2x4(bool v)
		{
			return new bool2x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4x2 transpose(bool2x4 v)
		{
			return bool4x2(v.c0.x, v.c0.y, v.c1.x, v.c1.y, v.c2.x, v.c2.y, v.c3.x, v.c3.y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(bool2x4 v)
		{
			return csum(select(uint2(1168253063u, 4228926523u), uint2(1610574617u, 1584185147u), v.c0) + select(uint2(3041325733u, 3150930919u), uint2(3309258581u, 1770373673u), v.c1) + select(uint2(3778261171u, 3286279097u), uint2(4264629071u, 1898591447u), v.c2) + select(uint2(2641864091u, 1229113913u), uint2(3020867117u, 1449055807u), v.c3));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint2 hashwide(bool2x4 v)
		{
			return select(uint2(2479033387u, 3702457169u), uint2(1845824257u, 1963973621u), v.c0) + select(uint2(2134758553u, 1391111867u), uint2(1167706003u, 2209736489u), v.c1) + select(uint2(3261535807u, 1740411209u), uint2(2910609089u, 2183822701u), v.c2) + select(uint2(3029516053u, 3547472099u), uint2(2057487037u, 3781937309u), v.c3);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool3 bool3(bool x, bool y, bool z)
		{
			return new bool3(x, y, z);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool3 bool3(bool x, bool2 yz)
		{
			return new bool3(x, yz);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool3 bool3(bool2 xy, bool z)
		{
			return new bool3(xy, z);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool3 bool3(bool3 xyz)
		{
			return new bool3(xyz);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool3 bool3(bool v)
		{
			return new bool3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(bool3 v)
		{
			return csum(select(uint3(2716413241u, 1166264321u, 2503385333u), uint3(2944493077u, 2599999021u, 3814721321u), v));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint3 hashwide(bool3 v)
		{
			return select(uint3(1595355149u, 1728931849u, 2062756937u), uint3(2920485769u, 1562056283u, 2265541847u), v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool shuffle(bool3 left, bool3 right, ShuffleComponent x)
		{
			return select_shuffle_component(left, right, x);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 shuffle(bool3 left, bool3 right, ShuffleComponent x, ShuffleComponent y)
		{
			return bool2(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool3 shuffle(bool3 left, bool3 right, ShuffleComponent x, ShuffleComponent y, ShuffleComponent z)
		{
			return bool3(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y), select_shuffle_component(left, right, z));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4 shuffle(bool3 left, bool3 right, ShuffleComponent x, ShuffleComponent y, ShuffleComponent z, ShuffleComponent w)
		{
			return bool4(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y), select_shuffle_component(left, right, z), select_shuffle_component(left, right, w));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		internal static bool select_shuffle_component(bool3 a, bool3 b, ShuffleComponent component)
		{
			return component switch
			{
				ShuffleComponent.LeftX => a.x, 
				ShuffleComponent.LeftY => a.y, 
				ShuffleComponent.LeftZ => a.z, 
				ShuffleComponent.RightX => b.x, 
				ShuffleComponent.RightY => b.y, 
				ShuffleComponent.RightZ => b.z, 
				_ => throw new ArgumentException("Invalid shuffle component: " + component), 
			};
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool3x2 bool3x2(bool3 c0, bool3 c1)
		{
			return new bool3x2(c0, c1);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool3x2 bool3x2(bool m00, bool m01, bool m10, bool m11, bool m20, bool m21)
		{
			return new bool3x2(m00, m01, m10, m11, m20, m21);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool3x2 bool3x2(bool v)
		{
			return new bool3x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2x3 transpose(bool3x2 v)
		{
			return bool2x3(v.c0.x, v.c0.y, v.c0.z, v.c1.x, v.c1.y, v.c1.z);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(bool3x2 v)
		{
			return csum(select(uint3(2627668003u, 1520214331u, 2949502447u), uint3(2827819133u, 3480140317u, 2642994593u), v.c0) + select(uint3(3940484981u, 1954192763u, 1091696537u), uint3(3052428017u, 4253034763u, 2338696631u), v.c1));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint3 hashwide(bool3x2 v)
		{
			return select(uint3(3757372771u, 1885959949u, 3508684087u), uint3(3919501043u, 1209161033u, 4007793211u), v.c0) + select(uint3(3819806693u, 3458005183u, 2078515003u), uint3(4206465343u, 3025146473u, 3763046909u), v.c1);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool3x3 bool3x3(bool3 c0, bool3 c1, bool3 c2)
		{
			return new bool3x3(c0, c1, c2);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool3x3 bool3x3(bool m00, bool m01, bool m02, bool m10, bool m11, bool m12, bool m20, bool m21, bool m22)
		{
			return new bool3x3(m00, m01, m02, m10, m11, m12, m20, m21, m22);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool3x3 bool3x3(bool v)
		{
			return new bool3x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool3x3 transpose(bool3x3 v)
		{
			return bool3x3(v.c0.x, v.c0.y, v.c0.z, v.c1.x, v.c1.y, v.c1.z, v.c2.x, v.c2.y, v.c2.z);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(bool3x3 v)
		{
			return csum(select(uint3(3881277847u, 4017968839u, 1727237899u), uint3(1648514723u, 1385344481u, 3538260197u), v.c0) + select(uint3(4066109527u, 2613148903u, 3367528529u), uint3(1678332449u, 2918459647u, 2744611081u), v.c1) + select(uint3(1952372791u, 2631698677u, 4200781601u), uint3(2119021007u, 1760485621u, 3157985881u), v.c2));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint3 hashwide(bool3x3 v)
		{
			return select(uint3(2171534173u, 2723054263u, 1168253063u), uint3(4228926523u, 1610574617u, 1584185147u), v.c0) + select(uint3(3041325733u, 3150930919u, 3309258581u), uint3(1770373673u, 3778261171u, 3286279097u), v.c1) + select(uint3(4264629071u, 1898591447u, 2641864091u), uint3(1229113913u, 3020867117u, 1449055807u), v.c2);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool3x4 bool3x4(bool3 c0, bool3 c1, bool3 c2, bool3 c3)
		{
			return new bool3x4(c0, c1, c2, c3);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool3x4 bool3x4(bool m00, bool m01, bool m02, bool m03, bool m10, bool m11, bool m12, bool m13, bool m20, bool m21, bool m22, bool m23)
		{
			return new bool3x4(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool3x4 bool3x4(bool v)
		{
			return new bool3x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4x3 transpose(bool3x4 v)
		{
			return bool4x3(v.c0.x, v.c0.y, v.c0.z, v.c1.x, v.c1.y, v.c1.z, v.c2.x, v.c2.y, v.c2.z, v.c3.x, v.c3.y, v.c3.z);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(bool3x4 v)
		{
			return csum(select(uint3(2209710647u, 2201894441u, 2849577407u), uint3(3287031191u, 3098675399u, 1564399943u), v.c0) + select(uint3(1148435377u, 3416333663u, 1750611407u), uint3(3285396193u, 3110507567u, 4271396531u), v.c1) + select(uint3(4198118021u, 2908068253u, 3705492289u), uint3(2497566569u, 2716413241u, 1166264321u), v.c2) + select(uint3(2503385333u, 2944493077u, 2599999021u), uint3(3814721321u, 1595355149u, 1728931849u), v.c3));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint3 hashwide(bool3x4 v)
		{
			return select(uint3(2062756937u, 2920485769u, 1562056283u), uint3(2265541847u, 1283419601u, 1210229737u), v.c0) + select(uint3(2864955997u, 3525118277u, 2298260269u), uint3(1632478733u, 1537393931u, 2353355467u), v.c1) + select(uint3(3441847433u, 4052036147u, 2011389559u), uint3(2252224297u, 3784421429u, 1750626223u), v.c2) + select(uint3(3571447507u, 3412283213u, 2601761069u), uint3(1254033427u, 2248573027u, 3612677113u), v.c3);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4 bool4(bool x, bool y, bool z, bool w)
		{
			return new bool4(x, y, z, w);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4 bool4(bool x, bool y, bool2 zw)
		{
			return new bool4(x, y, zw);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4 bool4(bool x, bool2 yz, bool w)
		{
			return new bool4(x, yz, w);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4 bool4(bool x, bool3 yzw)
		{
			return new bool4(x, yzw);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4 bool4(bool2 xy, bool z, bool w)
		{
			return new bool4(xy, z, w);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4 bool4(bool2 xy, bool2 zw)
		{
			return new bool4(xy, zw);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4 bool4(bool3 xyz, bool w)
		{
			return new bool4(xyz, w);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4 bool4(bool4 xyzw)
		{
			return new bool4(xyzw);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4 bool4(bool v)
		{
			return new bool4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(bool4 v)
		{
			return csum(select(uint4(1610574617u, 1584185147u, 3041325733u, 3150930919u), uint4(3309258581u, 1770373673u, 3778261171u, 3286279097u), v));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint4 hashwide(bool4 v)
		{
			return select(uint4(4264629071u, 1898591447u, 2641864091u, 1229113913u), uint4(3020867117u, 1449055807u, 2479033387u, 3702457169u), v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool shuffle(bool4 left, bool4 right, ShuffleComponent x)
		{
			return select_shuffle_component(left, right, x);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2 shuffle(bool4 left, bool4 right, ShuffleComponent x, ShuffleComponent y)
		{
			return bool2(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool3 shuffle(bool4 left, bool4 right, ShuffleComponent x, ShuffleComponent y, ShuffleComponent z)
		{
			return bool3(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y), select_shuffle_component(left, right, z));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4 shuffle(bool4 left, bool4 right, ShuffleComponent x, ShuffleComponent y, ShuffleComponent z, ShuffleComponent w)
		{
			return bool4(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y), select_shuffle_component(left, right, z), select_shuffle_component(left, right, w));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		internal static bool select_shuffle_component(bool4 a, bool4 b, ShuffleComponent component)
		{
			return component switch
			{
				ShuffleComponent.LeftX => a.x, 
				ShuffleComponent.LeftY => a.y, 
				ShuffleComponent.LeftZ => a.z, 
				ShuffleComponent.LeftW => a.w, 
				ShuffleComponent.RightX => b.x, 
				ShuffleComponent.RightY => b.y, 
				ShuffleComponent.RightZ => b.z, 
				ShuffleComponent.RightW => b.w, 
				_ => throw new ArgumentException("Invalid shuffle component: " + component), 
			};
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4x2 bool4x2(bool4 c0, bool4 c1)
		{
			return new bool4x2(c0, c1);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4x2 bool4x2(bool m00, bool m01, bool m10, bool m11, bool m20, bool m21, bool m30, bool m31)
		{
			return new bool4x2(m00, m01, m10, m11, m20, m21, m30, m31);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4x2 bool4x2(bool v)
		{
			return new bool4x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool2x4 transpose(bool4x2 v)
		{
			return bool2x4(v.c0.x, v.c0.y, v.c0.z, v.c0.w, v.c1.x, v.c1.y, v.c1.z, v.c1.w);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(bool4x2 v)
		{
			return csum(select(uint4(3516359879u, 3050356579u, 4178586719u, 2558655391u), uint4(1453413133u, 2152428077u, 1938706661u, 1338588197u), v.c0) + select(uint4(3439609253u, 3535343003u, 3546061613u, 2702024231u), uint4(1452124841u, 1966089551u, 2668168249u, 1587512777u), v.c1));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint4 hashwide(bool4x2 v)
		{
			return select(uint4(2353831999u, 3101256173u, 2891822459u, 2837054189u), uint4(3016004371u, 4097481403u, 2229788699u, 2382715877u), v.c0) + select(uint4(1851936439u, 1938025801u, 3712598587u, 3956330501u), uint4(2437373431u, 1441286183u, 2426570171u, 1561977301u), v.c1);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4x3 bool4x3(bool4 c0, bool4 c1, bool4 c2)
		{
			return new bool4x3(c0, c1, c2);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4x3 bool4x3(bool m00, bool m01, bool m02, bool m10, bool m11, bool m12, bool m20, bool m21, bool m22, bool m30, bool m31, bool m32)
		{
			return new bool4x3(m00, m01, m02, m10, m11, m12, m20, m21, m22, m30, m31, m32);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4x3 bool4x3(bool v)
		{
			return new bool4x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool3x4 transpose(bool4x3 v)
		{
			return bool3x4(v.c0.x, v.c0.y, v.c0.z, v.c0.w, v.c1.x, v.c1.y, v.c1.z, v.c1.w, v.c2.x, v.c2.y, v.c2.z, v.c2.w);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(bool4x3 v)
		{
			return csum(select(uint4(3940484981u, 1954192763u, 1091696537u, 3052428017u), uint4(4253034763u, 2338696631u, 3757372771u, 1885959949u), v.c0) + select(uint4(3508684087u, 3919501043u, 1209161033u, 4007793211u), uint4(3819806693u, 3458005183u, 2078515003u, 4206465343u), v.c1) + select(uint4(3025146473u, 3763046909u, 3678265601u, 2070747979u), uint4(1480171127u, 1588341193u, 4234155257u, 1811310911u), v.c2));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint4 hashwide(bool4x3 v)
		{
			return select(uint4(2635799963u, 4165137857u, 2759770933u, 2759319383u), uint4(3299952959u, 3121178323u, 2948522579u, 1531026433u), v.c0) + select(uint4(1365086453u, 3969870067u, 4192899797u, 3271228601u), uint4(1634639009u, 3318036811u, 3404170631u, 2048213449u), v.c1) + select(uint4(4164671783u, 1780759499u, 1352369353u, 2446407751u), uint4(1391928079u, 3475533443u, 3777095341u, 3385463369u), v.c2);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4x4 bool4x4(bool4 c0, bool4 c1, bool4 c2, bool4 c3)
		{
			return new bool4x4(c0, c1, c2, c3);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4x4 bool4x4(bool m00, bool m01, bool m02, bool m03, bool m10, bool m11, bool m12, bool m13, bool m20, bool m21, bool m22, bool m23, bool m30, bool m31, bool m32, bool m33)
		{
			return new bool4x4(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4x4 bool4x4(bool v)
		{
			return new bool4x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static bool4x4 transpose(bool4x4 v)
		{
			return bool4x4(v.c0.x, v.c0.y, v.c0.z, v.c0.w, v.c1.x, v.c1.y, v.c1.z, v.c1.w, v.c2.x, v.c2.y, v.c2.z, v.c2.w, v.c3.x, v.c3.y, v.c3.z, v.c3.w);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(bool4x4 v)
		{
			return csum(select(uint4(3516359879u, 3050356579u, 4178586719u, 2558655391u), uint4(1453413133u, 2152428077u, 1938706661u, 1338588197u), v.c0) + select(uint4(3439609253u, 3535343003u, 3546061613u, 2702024231u), uint4(1452124841u, 1966089551u, 2668168249u, 1587512777u), v.c1) + select(uint4(2353831999u, 3101256173u, 2891822459u, 2837054189u), uint4(3016004371u, 4097481403u, 2229788699u, 2382715877u), v.c2) + select(uint4(1851936439u, 1938025801u, 3712598587u, 3956330501u), uint4(2437373431u, 1441286183u, 2426570171u, 1561977301u), v.c3));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint4 hashwide(bool4x4 v)
		{
			return select(uint4(4205774813u, 1650214333u, 3388112843u, 1831150513u), uint4(1848374953u, 3430200247u, 2209710647u, 2201894441u), v.c0) + select(uint4(2849577407u, 3287031191u, 3098675399u, 1564399943u), uint4(1148435377u, 3416333663u, 1750611407u, 3285396193u), v.c1) + select(uint4(3110507567u, 4271396531u, 4198118021u, 2908068253u), uint4(3705492289u, 2497566569u, 2716413241u, 1166264321u), v.c2) + select(uint4(2503385333u, 2944493077u, 2599999021u, 3814721321u), uint4(1595355149u, 1728931849u, 2062756937u, 2920485769u), v.c3);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2 double2(double x, double y)
		{
			return new double2(x, y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2 double2(double2 xy)
		{
			return new double2(xy);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2 double2(double v)
		{
			return new double2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2 double2(bool v)
		{
			return new double2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2 double2(bool2 v)
		{
			return new double2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2 double2(int v)
		{
			return new double2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2 double2(int2 v)
		{
			return new double2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2 double2(uint v)
		{
			return new double2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2 double2(uint2 v)
		{
			return new double2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2 double2(half v)
		{
			return new double2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2 double2(half2 v)
		{
			return new double2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2 double2(float v)
		{
			return new double2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2 double2(float2 v)
		{
			return new double2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(double2 v)
		{
			return csum(fold_to_uint(v) * uint2(2503385333u, 2944493077u)) + 2599999021u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint2 hashwide(double2 v)
		{
			return fold_to_uint(v) * uint2(3814721321u, 1595355149u) + 1728931849u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double shuffle(double2 left, double2 right, ShuffleComponent x)
		{
			return select_shuffle_component(left, right, x);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2 shuffle(double2 left, double2 right, ShuffleComponent x, ShuffleComponent y)
		{
			return double2(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3 shuffle(double2 left, double2 right, ShuffleComponent x, ShuffleComponent y, ShuffleComponent z)
		{
			return double3(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y), select_shuffle_component(left, right, z));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 shuffle(double2 left, double2 right, ShuffleComponent x, ShuffleComponent y, ShuffleComponent z, ShuffleComponent w)
		{
			return double4(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y), select_shuffle_component(left, right, z), select_shuffle_component(left, right, w));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		internal static double select_shuffle_component(double2 a, double2 b, ShuffleComponent component)
		{
			return component switch
			{
				ShuffleComponent.LeftX => a.x, 
				ShuffleComponent.LeftY => a.y, 
				ShuffleComponent.RightX => b.x, 
				ShuffleComponent.RightY => b.y, 
				_ => throw new ArgumentException("Invalid shuffle component: " + component), 
			};
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x2 double2x2(double2 c0, double2 c1)
		{
			return new double2x2(c0, c1);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x2 double2x2(double m00, double m01, double m10, double m11)
		{
			return new double2x2(m00, m01, m10, m11);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x2 double2x2(double v)
		{
			return new double2x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x2 double2x2(bool v)
		{
			return new double2x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x2 double2x2(bool2x2 v)
		{
			return new double2x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x2 double2x2(int v)
		{
			return new double2x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x2 double2x2(int2x2 v)
		{
			return new double2x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x2 double2x2(uint v)
		{
			return new double2x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x2 double2x2(uint2x2 v)
		{
			return new double2x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x2 double2x2(float v)
		{
			return new double2x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x2 double2x2(float2x2 v)
		{
			return new double2x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x2 transpose(double2x2 v)
		{
			return double2x2(v.c0.x, v.c0.y, v.c1.x, v.c1.y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x2 inverse(double2x2 m)
		{
			double x = m.c0.x;
			double x2 = m.c1.x;
			double y = m.c0.y;
			double y2 = m.c1.y;
			double num = x * y2 - x2 * y;
			return double2x2(y2, 0.0 - x2, 0.0 - y, x) * (1.0 / num);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double determinant(double2x2 m)
		{
			double x = m.c0.x;
			double x2 = m.c1.x;
			double y = m.c0.y;
			double y2 = m.c1.y;
			return x * y2 - x2 * y;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(double2x2 v)
		{
			return csum(fold_to_uint(v.c0) * uint2(4253034763u, 2338696631u) + fold_to_uint(v.c1) * uint2(3757372771u, 1885959949u)) + 3508684087u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint2 hashwide(double2x2 v)
		{
			return fold_to_uint(v.c0) * uint2(3919501043u, 1209161033u) + fold_to_uint(v.c1) * uint2(4007793211u, 3819806693u) + 3458005183u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x3 double2x3(double2 c0, double2 c1, double2 c2)
		{
			return new double2x3(c0, c1, c2);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x3 double2x3(double m00, double m01, double m02, double m10, double m11, double m12)
		{
			return new double2x3(m00, m01, m02, m10, m11, m12);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x3 double2x3(double v)
		{
			return new double2x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x3 double2x3(bool v)
		{
			return new double2x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x3 double2x3(bool2x3 v)
		{
			return new double2x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x3 double2x3(int v)
		{
			return new double2x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x3 double2x3(int2x3 v)
		{
			return new double2x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x3 double2x3(uint v)
		{
			return new double2x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x3 double2x3(uint2x3 v)
		{
			return new double2x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x3 double2x3(float v)
		{
			return new double2x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x3 double2x3(float2x3 v)
		{
			return new double2x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x2 transpose(double2x3 v)
		{
			return double3x2(v.c0.x, v.c0.y, v.c1.x, v.c1.y, v.c2.x, v.c2.y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(double2x3 v)
		{
			return csum(fold_to_uint(v.c0) * uint2(4066109527u, 2613148903u) + fold_to_uint(v.c1) * uint2(3367528529u, 1678332449u) + fold_to_uint(v.c2) * uint2(2918459647u, 2744611081u)) + 1952372791;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint2 hashwide(double2x3 v)
		{
			return fold_to_uint(v.c0) * uint2(2631698677u, 4200781601u) + fold_to_uint(v.c1) * uint2(2119021007u, 1760485621u) + fold_to_uint(v.c2) * uint2(3157985881u, 2171534173u) + 2723054263u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x4 double2x4(double2 c0, double2 c1, double2 c2, double2 c3)
		{
			return new double2x4(c0, c1, c2, c3);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x4 double2x4(double m00, double m01, double m02, double m03, double m10, double m11, double m12, double m13)
		{
			return new double2x4(m00, m01, m02, m03, m10, m11, m12, m13);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x4 double2x4(double v)
		{
			return new double2x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x4 double2x4(bool v)
		{
			return new double2x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x4 double2x4(bool2x4 v)
		{
			return new double2x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x4 double2x4(int v)
		{
			return new double2x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x4 double2x4(int2x4 v)
		{
			return new double2x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x4 double2x4(uint v)
		{
			return new double2x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x4 double2x4(uint2x4 v)
		{
			return new double2x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x4 double2x4(float v)
		{
			return new double2x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x4 double2x4(float2x4 v)
		{
			return new double2x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x2 transpose(double2x4 v)
		{
			return double4x2(v.c0.x, v.c0.y, v.c1.x, v.c1.y, v.c2.x, v.c2.y, v.c3.x, v.c3.y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(double2x4 v)
		{
			return csum(fold_to_uint(v.c0) * uint2(2437373431u, 1441286183u) + fold_to_uint(v.c1) * uint2(2426570171u, 1561977301u) + fold_to_uint(v.c2) * uint2(4205774813u, 1650214333u) + fold_to_uint(v.c3) * uint2(3388112843u, 1831150513u)) + 1848374953;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint2 hashwide(double2x4 v)
		{
			return fold_to_uint(v.c0) * uint2(3430200247u, 2209710647u) + fold_to_uint(v.c1) * uint2(2201894441u, 2849577407u) + fold_to_uint(v.c2) * uint2(3287031191u, 3098675399u) + fold_to_uint(v.c3) * uint2(1564399943u, 1148435377u) + 3416333663u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3 double3(double x, double y, double z)
		{
			return new double3(x, y, z);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3 double3(double x, double2 yz)
		{
			return new double3(x, yz);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3 double3(double2 xy, double z)
		{
			return new double3(xy, z);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3 double3(double3 xyz)
		{
			return new double3(xyz);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3 double3(double v)
		{
			return new double3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3 double3(bool v)
		{
			return new double3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3 double3(bool3 v)
		{
			return new double3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3 double3(int v)
		{
			return new double3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3 double3(int3 v)
		{
			return new double3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3 double3(uint v)
		{
			return new double3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3 double3(uint3 v)
		{
			return new double3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3 double3(half v)
		{
			return new double3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3 double3(half3 v)
		{
			return new double3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3 double3(float v)
		{
			return new double3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3 double3(float3 v)
		{
			return new double3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(double3 v)
		{
			return csum(fold_to_uint(v) * uint3(2937008387u, 3835713223u, 2216526373u)) + 3375971453u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint3 hashwide(double3 v)
		{
			return fold_to_uint(v) * uint3(3559829411u, 3652178029u, 2544260129u) + 2013864031u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double shuffle(double3 left, double3 right, ShuffleComponent x)
		{
			return select_shuffle_component(left, right, x);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2 shuffle(double3 left, double3 right, ShuffleComponent x, ShuffleComponent y)
		{
			return double2(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3 shuffle(double3 left, double3 right, ShuffleComponent x, ShuffleComponent y, ShuffleComponent z)
		{
			return double3(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y), select_shuffle_component(left, right, z));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 shuffle(double3 left, double3 right, ShuffleComponent x, ShuffleComponent y, ShuffleComponent z, ShuffleComponent w)
		{
			return double4(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y), select_shuffle_component(left, right, z), select_shuffle_component(left, right, w));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		internal static double select_shuffle_component(double3 a, double3 b, ShuffleComponent component)
		{
			return component switch
			{
				ShuffleComponent.LeftX => a.x, 
				ShuffleComponent.LeftY => a.y, 
				ShuffleComponent.LeftZ => a.z, 
				ShuffleComponent.RightX => b.x, 
				ShuffleComponent.RightY => b.y, 
				ShuffleComponent.RightZ => b.z, 
				_ => throw new ArgumentException("Invalid shuffle component: " + component), 
			};
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x2 double3x2(double3 c0, double3 c1)
		{
			return new double3x2(c0, c1);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x2 double3x2(double m00, double m01, double m10, double m11, double m20, double m21)
		{
			return new double3x2(m00, m01, m10, m11, m20, m21);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x2 double3x2(double v)
		{
			return new double3x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x2 double3x2(bool v)
		{
			return new double3x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x2 double3x2(bool3x2 v)
		{
			return new double3x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x2 double3x2(int v)
		{
			return new double3x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x2 double3x2(int3x2 v)
		{
			return new double3x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x2 double3x2(uint v)
		{
			return new double3x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x2 double3x2(uint3x2 v)
		{
			return new double3x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x2 double3x2(float v)
		{
			return new double3x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x2 double3x2(float3x2 v)
		{
			return new double3x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x3 transpose(double3x2 v)
		{
			return double2x3(v.c0.x, v.c0.y, v.c0.z, v.c1.x, v.c1.y, v.c1.z);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(double3x2 v)
		{
			return csum(fold_to_uint(v.c0) * uint3(3996716183u, 2626301701u, 1306289417u) + fold_to_uint(v.c1) * uint3(2096137163u, 1548578029u, 4178800919u)) + 3898072289u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint3 hashwide(double3x2 v)
		{
			return fold_to_uint(v.c0) * uint3(4129428421u, 2631575897u, 2854656703u) + fold_to_uint(v.c1) * uint3(3578504047u, 4245178297u, 2173281923u) + 2973357649u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x3 double3x3(double3 c0, double3 c1, double3 c2)
		{
			return new double3x3(c0, c1, c2);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x3 double3x3(double m00, double m01, double m02, double m10, double m11, double m12, double m20, double m21, double m22)
		{
			return new double3x3(m00, m01, m02, m10, m11, m12, m20, m21, m22);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x3 double3x3(double v)
		{
			return new double3x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x3 double3x3(bool v)
		{
			return new double3x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x3 double3x3(bool3x3 v)
		{
			return new double3x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x3 double3x3(int v)
		{
			return new double3x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x3 double3x3(int3x3 v)
		{
			return new double3x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x3 double3x3(uint v)
		{
			return new double3x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x3 double3x3(uint3x3 v)
		{
			return new double3x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x3 double3x3(float v)
		{
			return new double3x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x3 double3x3(float3x3 v)
		{
			return new double3x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x3 transpose(double3x3 v)
		{
			return double3x3(v.c0.x, v.c0.y, v.c0.z, v.c1.x, v.c1.y, v.c1.z, v.c2.x, v.c2.y, v.c2.z);
		}

		public static double3x3 inverse(double3x3 m)
		{
			double3 c = m.c0;
			double3 c2 = m.c1;
			double3 c3 = m.c2;
			double3 double5 = double3(c2.x, c3.x, c.x);
			double3 double6 = double3(c2.y, c3.y, c.y);
			double3 double7 = double3(c2.z, c3.z, c.z);
			double3 double8 = double6 * double7.yzx - double6.yzx * double7;
			double3 c4 = double5.yzx * double7 - double5 * double7.yzx;
			double3 c5 = double5 * double6.yzx - double5.yzx * double6;
			double num = 1.0 / csum(double5.zxy * double8);
			return double3x3(double8, c4, c5) * num;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double determinant(double3x3 m)
		{
			double3 c = m.c0;
			double3 c2 = m.c1;
			double3 c3 = m.c2;
			double num = c2.y * c3.z - c2.z * c3.y;
			double num2 = c.y * c3.z - c.z * c3.y;
			double num3 = c.y * c2.z - c.z * c2.y;
			return c.x * num - c2.x * num2 + c3.x * num3;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(double3x3 v)
		{
			return csum(fold_to_uint(v.c0) * uint3(2891822459u, 2837054189u, 3016004371u) + fold_to_uint(v.c1) * uint3(4097481403u, 2229788699u, 2382715877u) + fold_to_uint(v.c2) * uint3(1851936439u, 1938025801u, 3712598587u)) + 3956330501u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint3 hashwide(double3x3 v)
		{
			return fold_to_uint(v.c0) * uint3(2437373431u, 1441286183u, 2426570171u) + fold_to_uint(v.c1) * uint3(1561977301u, 4205774813u, 1650214333u) + fold_to_uint(v.c2) * uint3(3388112843u, 1831150513u, 1848374953u) + 3430200247u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x4 double3x4(double3 c0, double3 c1, double3 c2, double3 c3)
		{
			return new double3x4(c0, c1, c2, c3);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x4 double3x4(double m00, double m01, double m02, double m03, double m10, double m11, double m12, double m13, double m20, double m21, double m22, double m23)
		{
			return new double3x4(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x4 double3x4(double v)
		{
			return new double3x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x4 double3x4(bool v)
		{
			return new double3x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x4 double3x4(bool3x4 v)
		{
			return new double3x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x4 double3x4(int v)
		{
			return new double3x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x4 double3x4(int3x4 v)
		{
			return new double3x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x4 double3x4(uint v)
		{
			return new double3x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x4 double3x4(uint3x4 v)
		{
			return new double3x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x4 double3x4(float v)
		{
			return new double3x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x4 double3x4(float3x4 v)
		{
			return new double3x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x3 transpose(double3x4 v)
		{
			return double4x3(v.c0.x, v.c0.y, v.c0.z, v.c1.x, v.c1.y, v.c1.z, v.c2.x, v.c2.y, v.c2.z, v.c3.x, v.c3.y, v.c3.z);
		}

		public static double3x4 fastinverse(double3x4 m)
		{
			double3 c = m.c0;
			double3 c2 = m.c1;
			double3 c3 = m.c2;
			double3 c4 = m.c3;
			double3 double5 = double3(c.x, c2.x, c3.x);
			double3 double6 = double3(c.y, c2.y, c3.y);
			double3 double7 = double3(c.z, c2.z, c3.z);
			c4 = -(double5 * c4.x + double6 * c4.y + double7 * c4.z);
			return double3x4(double5, double6, double7, c4);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(double3x4 v)
		{
			return csum(fold_to_uint(v.c0) * uint3(3996716183u, 2626301701u, 1306289417u) + fold_to_uint(v.c1) * uint3(2096137163u, 1548578029u, 4178800919u) + fold_to_uint(v.c2) * uint3(3898072289u, 4129428421u, 2631575897u) + fold_to_uint(v.c3) * uint3(2854656703u, 3578504047u, 4245178297u)) + 2173281923u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint3 hashwide(double3x4 v)
		{
			return fold_to_uint(v.c0) * uint3(2973357649u, 3881277847u, 4017968839u) + fold_to_uint(v.c1) * uint3(1727237899u, 1648514723u, 1385344481u) + fold_to_uint(v.c2) * uint3(3538260197u, 4066109527u, 2613148903u) + fold_to_uint(v.c3) * uint3(3367528529u, 1678332449u, 2918459647u) + 2744611081u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 double4(double x, double y, double z, double w)
		{
			return new double4(x, y, z, w);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 double4(double x, double y, double2 zw)
		{
			return new double4(x, y, zw);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 double4(double x, double2 yz, double w)
		{
			return new double4(x, yz, w);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 double4(double x, double3 yzw)
		{
			return new double4(x, yzw);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 double4(double2 xy, double z, double w)
		{
			return new double4(xy, z, w);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 double4(double2 xy, double2 zw)
		{
			return new double4(xy, zw);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 double4(double3 xyz, double w)
		{
			return new double4(xyz, w);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 double4(double4 xyzw)
		{
			return new double4(xyzw);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 double4(double v)
		{
			return new double4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 double4(bool v)
		{
			return new double4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 double4(bool4 v)
		{
			return new double4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 double4(int v)
		{
			return new double4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 double4(int4 v)
		{
			return new double4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 double4(uint v)
		{
			return new double4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 double4(uint4 v)
		{
			return new double4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 double4(half v)
		{
			return new double4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 double4(half4 v)
		{
			return new double4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 double4(float v)
		{
			return new double4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 double4(float4 v)
		{
			return new double4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(double4 v)
		{
			return csum(fold_to_uint(v) * uint4(2669441947u, 1260114311u, 2650080659u, 4052675461u)) + 2652487619u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint4 hashwide(double4 v)
		{
			return fold_to_uint(v) * uint4(2174136431u, 3528391193u, 2105559227u, 1899745391u) + 1966790317u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double shuffle(double4 left, double4 right, ShuffleComponent x)
		{
			return select_shuffle_component(left, right, x);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2 shuffle(double4 left, double4 right, ShuffleComponent x, ShuffleComponent y)
		{
			return double2(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3 shuffle(double4 left, double4 right, ShuffleComponent x, ShuffleComponent y, ShuffleComponent z)
		{
			return double3(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y), select_shuffle_component(left, right, z));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4 shuffle(double4 left, double4 right, ShuffleComponent x, ShuffleComponent y, ShuffleComponent z, ShuffleComponent w)
		{
			return double4(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y), select_shuffle_component(left, right, z), select_shuffle_component(left, right, w));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		internal static double select_shuffle_component(double4 a, double4 b, ShuffleComponent component)
		{
			return component switch
			{
				ShuffleComponent.LeftX => a.x, 
				ShuffleComponent.LeftY => a.y, 
				ShuffleComponent.LeftZ => a.z, 
				ShuffleComponent.LeftW => a.w, 
				ShuffleComponent.RightX => b.x, 
				ShuffleComponent.RightY => b.y, 
				ShuffleComponent.RightZ => b.z, 
				ShuffleComponent.RightW => b.w, 
				_ => throw new ArgumentException("Invalid shuffle component: " + component), 
			};
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x2 double4x2(double4 c0, double4 c1)
		{
			return new double4x2(c0, c1);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x2 double4x2(double m00, double m01, double m10, double m11, double m20, double m21, double m30, double m31)
		{
			return new double4x2(m00, m01, m10, m11, m20, m21, m30, m31);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x2 double4x2(double v)
		{
			return new double4x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x2 double4x2(bool v)
		{
			return new double4x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x2 double4x2(bool4x2 v)
		{
			return new double4x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x2 double4x2(int v)
		{
			return new double4x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x2 double4x2(int4x2 v)
		{
			return new double4x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x2 double4x2(uint v)
		{
			return new double4x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x2 double4x2(uint4x2 v)
		{
			return new double4x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x2 double4x2(float v)
		{
			return new double4x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x2 double4x2(float4x2 v)
		{
			return new double4x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double2x4 transpose(double4x2 v)
		{
			return double2x4(v.c0.x, v.c0.y, v.c0.z, v.c0.w, v.c1.x, v.c1.y, v.c1.z, v.c1.w);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(double4x2 v)
		{
			return csum(fold_to_uint(v.c0) * uint4(1521739981u, 1735296007u, 3010324327u, 1875523709u) + fold_to_uint(v.c1) * uint4(2937008387u, 3835713223u, 2216526373u, 3375971453u)) + 3559829411u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint4 hashwide(double4x2 v)
		{
			return fold_to_uint(v.c0) * uint4(3652178029u, 2544260129u, 2013864031u, 2627668003u) + fold_to_uint(v.c1) * uint4(1520214331u, 2949502447u, 2827819133u, 3480140317u) + 2642994593u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x3 double4x3(double4 c0, double4 c1, double4 c2)
		{
			return new double4x3(c0, c1, c2);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x3 double4x3(double m00, double m01, double m02, double m10, double m11, double m12, double m20, double m21, double m22, double m30, double m31, double m32)
		{
			return new double4x3(m00, m01, m02, m10, m11, m12, m20, m21, m22, m30, m31, m32);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x3 double4x3(double v)
		{
			return new double4x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x3 double4x3(bool v)
		{
			return new double4x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x3 double4x3(bool4x3 v)
		{
			return new double4x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x3 double4x3(int v)
		{
			return new double4x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x3 double4x3(int4x3 v)
		{
			return new double4x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x3 double4x3(uint v)
		{
			return new double4x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x3 double4x3(uint4x3 v)
		{
			return new double4x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x3 double4x3(float v)
		{
			return new double4x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x3 double4x3(float4x3 v)
		{
			return new double4x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3x4 transpose(double4x3 v)
		{
			return double3x4(v.c0.x, v.c0.y, v.c0.z, v.c0.w, v.c1.x, v.c1.y, v.c1.z, v.c1.w, v.c2.x, v.c2.y, v.c2.z, v.c2.w);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(double4x3 v)
		{
			return csum(fold_to_uint(v.c0) * uint4(2057338067u, 2942577577u, 2834440507u, 2671762487u) + fold_to_uint(v.c1) * uint4(2892026051u, 2455987759u, 3868600063u, 3170963179u) + fold_to_uint(v.c2) * uint4(2632835537u, 1136528209u, 2944626401u, 2972762423u)) + 1417889653;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint4 hashwide(double4x3 v)
		{
			return fold_to_uint(v.c0) * uint4(2080514593u, 2731544287u, 2828498809u, 2669441947u) + fold_to_uint(v.c1) * uint4(1260114311u, 2650080659u, 4052675461u, 2652487619u) + fold_to_uint(v.c2) * uint4(2174136431u, 3528391193u, 2105559227u, 1899745391u) + 1966790317u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x4 double4x4(double4 c0, double4 c1, double4 c2, double4 c3)
		{
			return new double4x4(c0, c1, c2, c3);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x4 double4x4(double m00, double m01, double m02, double m03, double m10, double m11, double m12, double m13, double m20, double m21, double m22, double m23, double m30, double m31, double m32, double m33)
		{
			return new double4x4(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x4 double4x4(double v)
		{
			return new double4x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x4 double4x4(bool v)
		{
			return new double4x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x4 double4x4(bool4x4 v)
		{
			return new double4x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x4 double4x4(int v)
		{
			return new double4x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x4 double4x4(int4x4 v)
		{
			return new double4x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x4 double4x4(uint v)
		{
			return new double4x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x4 double4x4(uint4x4 v)
		{
			return new double4x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x4 double4x4(float v)
		{
			return new double4x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x4 double4x4(float4x4 v)
		{
			return new double4x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3 rotate(double4x4 a, double3 b)
		{
			return (a.c0 * b.x + a.c1 * b.y + a.c2 * b.z).xyz;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double3 transform(double4x4 a, double3 b)
		{
			return (a.c0 * b.x + a.c1 * b.y + a.c2 * b.z + a.c3).xyz;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static double4x4 transpose(double4x4 v)
		{
			return double4x4(v.c0.x, v.c0.y, v.c0.z, v.c0.w, v.c1.x, v.c1.y, v.c1.z, v.c1.w, v.c2.x, v.c2.y, v.c2.z, v.c2.w, v.c3.x, v.c3.y, v.c3.z, v.c3.w);
		}

		public static double4x4 inverse(double4x4 m)
		{
			double4 c = m.c0;
			double4 c2 = m.c1;
			double4 c3 = m.c2;
			double4 c4 = m.c3;
			double4 double5 = movelh(c2, c);
			double4 double6 = movelh(c3, c4);
			double4 double7 = movehl(c, c2);
			double4 double8 = movehl(c4, c3);
			double4 double9 = shuffle(c2, c, ShuffleComponent.LeftY, ShuffleComponent.LeftZ, ShuffleComponent.RightY, ShuffleComponent.RightZ);
			double4 double10 = shuffle(c3, c4, ShuffleComponent.LeftY, ShuffleComponent.LeftZ, ShuffleComponent.RightY, ShuffleComponent.RightZ);
			double4 double11 = shuffle(c2, c, ShuffleComponent.LeftW, ShuffleComponent.LeftX, ShuffleComponent.RightW, ShuffleComponent.RightX);
			double4 double12 = shuffle(c3, c4, ShuffleComponent.LeftW, ShuffleComponent.LeftX, ShuffleComponent.RightW, ShuffleComponent.RightX);
			double4 double13 = shuffle(double6, double5, ShuffleComponent.LeftZ, ShuffleComponent.LeftX, ShuffleComponent.RightX, ShuffleComponent.RightZ);
			double4 double14 = shuffle(double6, double5, ShuffleComponent.LeftW, ShuffleComponent.LeftY, ShuffleComponent.RightY, ShuffleComponent.RightW);
			double4 double15 = shuffle(double8, double7, ShuffleComponent.LeftZ, ShuffleComponent.LeftX, ShuffleComponent.RightX, ShuffleComponent.RightZ);
			double4 double16 = shuffle(double8, double7, ShuffleComponent.LeftW, ShuffleComponent.LeftY, ShuffleComponent.RightY, ShuffleComponent.RightW);
			double4 double17 = shuffle(double5, double6, ShuffleComponent.LeftZ, ShuffleComponent.LeftX, ShuffleComponent.RightX, ShuffleComponent.RightZ);
			double4 double18 = double9 * double8 - double10 * double7;
			double4 double19 = double5 * double8 - double6 * double7;
			double4 double20 = double12 * double5 - double11 * double6;
			double4 double21 = shuffle(double18, double18, ShuffleComponent.LeftX, ShuffleComponent.LeftZ, ShuffleComponent.RightZ, ShuffleComponent.RightX);
			double4 double22 = shuffle(double18, double18, ShuffleComponent.LeftY, ShuffleComponent.LeftW, ShuffleComponent.RightW, ShuffleComponent.RightY);
			double4 double23 = shuffle(double19, double19, ShuffleComponent.LeftX, ShuffleComponent.LeftZ, ShuffleComponent.RightZ, ShuffleComponent.RightX);
			double4 double24 = shuffle(double19, double19, ShuffleComponent.LeftY, ShuffleComponent.LeftW, ShuffleComponent.RightW, ShuffleComponent.RightY);
			double4 double25 = double16 * double21 - double15 * double24 + double14 * double22;
			double4 double26 = double17 * double25;
			double26 += shuffle(double26, double26, ShuffleComponent.LeftY, ShuffleComponent.LeftX, ShuffleComponent.RightW, ShuffleComponent.RightZ);
			double26 -= shuffle(double26, double26, ShuffleComponent.LeftZ, ShuffleComponent.LeftZ, ShuffleComponent.RightX, ShuffleComponent.RightX);
			double4 double27 = double4(1.0) / double26;
			double4x4 result = default(double4x4);
			result.c0 = double25 * double27;
			double4 double28 = shuffle(double20, double20, ShuffleComponent.LeftX, ShuffleComponent.LeftZ, ShuffleComponent.RightZ, ShuffleComponent.RightX);
			double4 double29 = shuffle(double20, double20, ShuffleComponent.LeftY, ShuffleComponent.LeftW, ShuffleComponent.RightW, ShuffleComponent.RightY);
			double4 double30 = double15 * double28 - double13 * double22 - double16 * double23;
			result.c1 = double30 * double27;
			double4 double31 = double13 * double24 - double14 * double28 - double16 * double29;
			result.c2 = double31 * double27;
			double4 double32 = double14 * double23 - double13 * double21 + double15 * double29;
			result.c3 = double32 * double27;
			return result;
		}

		public static double4x4 fastinverse(double4x4 m)
		{
			double4 c = m.c0;
			double4 c2 = m.c1;
			double4 c3 = m.c2;
			double4 c4 = m.c3;
			double4 b = double4(0);
			double4 a = unpacklo(c, c3);
			double4 b2 = unpacklo(c2, b);
			double4 a2 = unpackhi(c, c3);
			double4 b3 = unpackhi(c2, b);
			double4 double5 = unpacklo(a, b2);
			double4 double6 = unpackhi(a, b2);
			double4 double7 = unpacklo(a2, b3);
			c4 = -(double5 * c4.x + double6 * c4.y + double7 * c4.z);
			c4.w = 1.0;
			return double4x4(double5, double6, double7, c4);
		}

		public static double determinant(double4x4 m)
		{
			double4 c = m.c0;
			double4 c2 = m.c1;
			double4 c3 = m.c2;
			double4 c4 = m.c3;
			double num = c2.y * (c3.z * c4.w - c3.w * c4.z) - c3.y * (c2.z * c4.w - c2.w * c4.z) + c4.y * (c2.z * c3.w - c2.w * c3.z);
			double num2 = c.y * (c3.z * c4.w - c3.w * c4.z) - c3.y * (c.z * c4.w - c.w * c4.z) + c4.y * (c.z * c3.w - c.w * c3.z);
			double num3 = c.y * (c2.z * c4.w - c2.w * c4.z) - c2.y * (c.z * c4.w - c.w * c4.z) + c4.y * (c.z * c2.w - c.w * c2.z);
			double num4 = c.y * (c2.z * c3.w - c2.w * c3.z) - c2.y * (c.z * c3.w - c.w * c3.z) + c3.y * (c.z * c2.w - c.w * c2.z);
			return c.x * num - c2.x * num2 + c3.x * num3 - c4.x * num4;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(double4x4 v)
		{
			return csum(fold_to_uint(v.c0) * uint4(1306289417u, 2096137163u, 1548578029u, 4178800919u) + fold_to_uint(v.c1) * uint4(3898072289u, 4129428421u, 2631575897u, 2854656703u) + fold_to_uint(v.c2) * uint4(3578504047u, 4245178297u, 2173281923u, 2973357649u) + fold_to_uint(v.c3) * uint4(3881277847u, 4017968839u, 1727237899u, 1648514723u)) + 1385344481;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint4 hashwide(double4x4 v)
		{
			return fold_to_uint(v.c0) * uint4(3538260197u, 4066109527u, 2613148903u, 3367528529u) + fold_to_uint(v.c1) * uint4(1678332449u, 2918459647u, 2744611081u, 1952372791u) + fold_to_uint(v.c2) * uint4(2631698677u, 4200781601u, 2119021007u, 1760485621u) + fold_to_uint(v.c3) * uint4(3157985881u, 2171534173u, 2723054263u, 1168253063u) + 4228926523u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2 float2(float x, float y)
		{
			return new float2(x, y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2 float2(float2 xy)
		{
			return new float2(xy);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2 float2(float v)
		{
			return new float2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2 float2(bool v)
		{
			return new float2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2 float2(bool2 v)
		{
			return new float2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2 float2(int v)
		{
			return new float2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2 float2(int2 v)
		{
			return new float2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2 float2(uint v)
		{
			return new float2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2 float2(uint2 v)
		{
			return new float2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2 float2(half v)
		{
			return new float2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2 float2(half2 v)
		{
			return new float2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2 float2(double v)
		{
			return new float2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2 float2(double2 v)
		{
			return new float2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(float2 v)
		{
			return csum(asuint(v) * uint2(4198118021u, 2908068253u)) + 3705492289u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint2 hashwide(float2 v)
		{
			return asuint(v) * uint2(2497566569u, 2716413241u) + 1166264321u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float shuffle(float2 left, float2 right, ShuffleComponent x)
		{
			return select_shuffle_component(left, right, x);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2 shuffle(float2 left, float2 right, ShuffleComponent x, ShuffleComponent y)
		{
			return float2(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3 shuffle(float2 left, float2 right, ShuffleComponent x, ShuffleComponent y, ShuffleComponent z)
		{
			return float3(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y), select_shuffle_component(left, right, z));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float4 shuffle(float2 left, float2 right, ShuffleComponent x, ShuffleComponent y, ShuffleComponent z, ShuffleComponent w)
		{
			return float4(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y), select_shuffle_component(left, right, z), select_shuffle_component(left, right, w));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		internal static float select_shuffle_component(float2 a, float2 b, ShuffleComponent component)
		{
			return component switch
			{
				ShuffleComponent.LeftX => a.x, 
				ShuffleComponent.LeftY => a.y, 
				ShuffleComponent.RightX => b.x, 
				ShuffleComponent.RightY => b.y, 
				_ => throw new ArgumentException("Invalid shuffle component: " + component), 
			};
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x2 float2x2(float2 c0, float2 c1)
		{
			return new float2x2(c0, c1);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x2 float2x2(float m00, float m01, float m10, float m11)
		{
			return new float2x2(m00, m01, m10, m11);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x2 float2x2(float v)
		{
			return new float2x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x2 float2x2(bool v)
		{
			return new float2x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x2 float2x2(bool2x2 v)
		{
			return new float2x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x2 float2x2(int v)
		{
			return new float2x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x2 float2x2(int2x2 v)
		{
			return new float2x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x2 float2x2(uint v)
		{
			return new float2x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x2 float2x2(uint2x2 v)
		{
			return new float2x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x2 float2x2(double v)
		{
			return new float2x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x2 float2x2(double2x2 v)
		{
			return new float2x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x2 transpose(float2x2 v)
		{
			return float2x2(v.c0.x, v.c0.y, v.c1.x, v.c1.y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x2 inverse(float2x2 m)
		{
			float x = m.c0.x;
			float x2 = m.c1.x;
			float y = m.c0.y;
			float y2 = m.c1.y;
			float num = x * y2 - x2 * y;
			return float2x2(y2, 0f - x2, 0f - y, x) * (1f / num);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float determinant(float2x2 m)
		{
			float x = m.c0.x;
			float x2 = m.c1.x;
			float y = m.c0.y;
			float y2 = m.c1.y;
			return x * y2 - x2 * y;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(float2x2 v)
		{
			return csum(asuint(v.c0) * uint2(2627668003u, 1520214331u) + asuint(v.c1) * uint2(2949502447u, 2827819133u)) + 3480140317u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint2 hashwide(float2x2 v)
		{
			return asuint(v.c0) * uint2(2642994593u, 3940484981u) + asuint(v.c1) * uint2(1954192763u, 1091696537u) + 3052428017u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x3 float2x3(float2 c0, float2 c1, float2 c2)
		{
			return new float2x3(c0, c1, c2);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x3 float2x3(float m00, float m01, float m02, float m10, float m11, float m12)
		{
			return new float2x3(m00, m01, m02, m10, m11, m12);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x3 float2x3(float v)
		{
			return new float2x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x3 float2x3(bool v)
		{
			return new float2x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x3 float2x3(bool2x3 v)
		{
			return new float2x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x3 float2x3(int v)
		{
			return new float2x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x3 float2x3(int2x3 v)
		{
			return new float2x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x3 float2x3(uint v)
		{
			return new float2x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x3 float2x3(uint2x3 v)
		{
			return new float2x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x3 float2x3(double v)
		{
			return new float2x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x3 float2x3(double2x3 v)
		{
			return new float2x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x2 transpose(float2x3 v)
		{
			return float3x2(v.c0.x, v.c0.y, v.c1.x, v.c1.y, v.c2.x, v.c2.y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(float2x3 v)
		{
			return csum(asuint(v.c0) * uint2(3898072289u, 4129428421u) + asuint(v.c1) * uint2(2631575897u, 2854656703u) + asuint(v.c2) * uint2(3578504047u, 4245178297u)) + 2173281923u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint2 hashwide(float2x3 v)
		{
			return asuint(v.c0) * uint2(2973357649u, 3881277847u) + asuint(v.c1) * uint2(4017968839u, 1727237899u) + asuint(v.c2) * uint2(1648514723u, 1385344481u) + 3538260197u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x4 float2x4(float2 c0, float2 c1, float2 c2, float2 c3)
		{
			return new float2x4(c0, c1, c2, c3);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x4 float2x4(float m00, float m01, float m02, float m03, float m10, float m11, float m12, float m13)
		{
			return new float2x4(m00, m01, m02, m03, m10, m11, m12, m13);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x4 float2x4(float v)
		{
			return new float2x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x4 float2x4(bool v)
		{
			return new float2x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x4 float2x4(bool2x4 v)
		{
			return new float2x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x4 float2x4(int v)
		{
			return new float2x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x4 float2x4(int2x4 v)
		{
			return new float2x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x4 float2x4(uint v)
		{
			return new float2x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x4 float2x4(uint2x4 v)
		{
			return new float2x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x4 float2x4(double v)
		{
			return new float2x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x4 float2x4(double2x4 v)
		{
			return new float2x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float4x2 transpose(float2x4 v)
		{
			return float4x2(v.c0.x, v.c0.y, v.c1.x, v.c1.y, v.c2.x, v.c2.y, v.c3.x, v.c3.y);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(float2x4 v)
		{
			return csum(asuint(v.c0) * uint2(3546061613u, 2702024231u) + asuint(v.c1) * uint2(1452124841u, 1966089551u) + asuint(v.c2) * uint2(2668168249u, 1587512777u) + asuint(v.c3) * uint2(2353831999u, 3101256173u)) + 2891822459u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint2 hashwide(float2x4 v)
		{
			return asuint(v.c0) * uint2(2837054189u, 3016004371u) + asuint(v.c1) * uint2(4097481403u, 2229788699u) + asuint(v.c2) * uint2(2382715877u, 1851936439u) + asuint(v.c3) * uint2(1938025801u, 3712598587u) + 3956330501u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3 float3(float x, float y, float z)
		{
			return new float3(x, y, z);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3 float3(float x, float2 yz)
		{
			return new float3(x, yz);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3 float3(float2 xy, float z)
		{
			return new float3(xy, z);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3 float3(float3 xyz)
		{
			return new float3(xyz);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3 float3(float v)
		{
			return new float3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3 float3(bool v)
		{
			return new float3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3 float3(bool3 v)
		{
			return new float3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3 float3(int v)
		{
			return new float3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3 float3(int3 v)
		{
			return new float3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3 float3(uint v)
		{
			return new float3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3 float3(uint3 v)
		{
			return new float3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3 float3(half v)
		{
			return new float3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3 float3(half3 v)
		{
			return new float3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3 float3(double v)
		{
			return new float3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3 float3(double3 v)
		{
			return new float3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(float3 v)
		{
			return csum(asuint(v) * uint3(2601761069u, 1254033427u, 2248573027u)) + 3612677113u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint3 hashwide(float3 v)
		{
			return asuint(v) * uint3(1521739981u, 1735296007u, 3010324327u) + 1875523709u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float shuffle(float3 left, float3 right, ShuffleComponent x)
		{
			return select_shuffle_component(left, right, x);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2 shuffle(float3 left, float3 right, ShuffleComponent x, ShuffleComponent y)
		{
			return float2(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3 shuffle(float3 left, float3 right, ShuffleComponent x, ShuffleComponent y, ShuffleComponent z)
		{
			return float3(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y), select_shuffle_component(left, right, z));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float4 shuffle(float3 left, float3 right, ShuffleComponent x, ShuffleComponent y, ShuffleComponent z, ShuffleComponent w)
		{
			return float4(select_shuffle_component(left, right, x), select_shuffle_component(left, right, y), select_shuffle_component(left, right, z), select_shuffle_component(left, right, w));
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		internal static float select_shuffle_component(float3 a, float3 b, ShuffleComponent component)
		{
			return component switch
			{
				ShuffleComponent.LeftX => a.x, 
				ShuffleComponent.LeftY => a.y, 
				ShuffleComponent.LeftZ => a.z, 
				ShuffleComponent.RightX => b.x, 
				ShuffleComponent.RightY => b.y, 
				ShuffleComponent.RightZ => b.z, 
				_ => throw new ArgumentException("Invalid shuffle component: " + component), 
			};
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x2 float3x2(float3 c0, float3 c1)
		{
			return new float3x2(c0, c1);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x2 float3x2(float m00, float m01, float m10, float m11, float m20, float m21)
		{
			return new float3x2(m00, m01, m10, m11, m20, m21);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x2 float3x2(float v)
		{
			return new float3x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x2 float3x2(bool v)
		{
			return new float3x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x2 float3x2(bool3x2 v)
		{
			return new float3x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x2 float3x2(int v)
		{
			return new float3x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x2 float3x2(int3x2 v)
		{
			return new float3x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x2 float3x2(uint v)
		{
			return new float3x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x2 float3x2(uint3x2 v)
		{
			return new float3x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x2 float3x2(double v)
		{
			return new float3x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x2 float3x2(double3x2 v)
		{
			return new float3x2(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float2x3 transpose(float3x2 v)
		{
			return float2x3(v.c0.x, v.c0.y, v.c0.z, v.c1.x, v.c1.y, v.c1.z);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(float3x2 v)
		{
			return csum(asuint(v.c0) * uint3(3777095341u, 3385463369u, 1773538433u) + asuint(v.c1) * uint3(3773525029u, 4131962539u, 1809525511u)) + 4016293529u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint3 hashwide(float3x2 v)
		{
			return asuint(v.c0) * uint3(2416021567u, 2828384717u, 2636362241u) + asuint(v.c1) * uint3(1258410977u, 1952565773u, 2037535609u) + 3592785499u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x3 float3x3(float3 c0, float3 c1, float3 c2)
		{
			return new float3x3(c0, c1, c2);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x3 float3x3(float m00, float m01, float m02, float m10, float m11, float m12, float m20, float m21, float m22)
		{
			return new float3x3(m00, m01, m02, m10, m11, m12, m20, m21, m22);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x3 float3x3(float v)
		{
			return new float3x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x3 float3x3(bool v)
		{
			return new float3x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x3 float3x3(bool3x3 v)
		{
			return new float3x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x3 float3x3(int v)
		{
			return new float3x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x3 float3x3(int3x3 v)
		{
			return new float3x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x3 float3x3(uint v)
		{
			return new float3x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x3 float3x3(uint3x3 v)
		{
			return new float3x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x3 float3x3(double v)
		{
			return new float3x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x3 float3x3(double3x3 v)
		{
			return new float3x3(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x3 transpose(float3x3 v)
		{
			return float3x3(v.c0.x, v.c0.y, v.c0.z, v.c1.x, v.c1.y, v.c1.z, v.c2.x, v.c2.y, v.c2.z);
		}

		public static float3x3 inverse(float3x3 m)
		{
			float3 c = m.c0;
			float3 c2 = m.c1;
			float3 c3 = m.c2;
			float3 float5 = float3(c2.x, c3.x, c.x);
			float3 float6 = float3(c2.y, c3.y, c.y);
			float3 float7 = float3(c2.z, c3.z, c.z);
			float3 float8 = float6 * float7.yzx - float6.yzx * float7;
			float3 c4 = float5.yzx * float7 - float5 * float7.yzx;
			float3 c5 = float5 * float6.yzx - float5.yzx * float6;
			float num = 1f / csum(float5.zxy * float8);
			return float3x3(float8, c4, c5) * num;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float determinant(float3x3 m)
		{
			float3 c = m.c0;
			float3 c2 = m.c1;
			float3 c3 = m.c2;
			float num = c2.y * c3.z - c2.z * c3.y;
			float num2 = c.y * c3.z - c.z * c3.y;
			float num3 = c.y * c2.z - c.z * c2.y;
			return c.x * num - c2.x * num2 + c3.x * num3;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(float3x3 v)
		{
			return csum(asuint(v.c0) * uint3(1899745391u, 1966790317u, 3516359879u) + asuint(v.c1) * uint3(3050356579u, 4178586719u, 2558655391u) + asuint(v.c2) * uint3(1453413133u, 2152428077u, 1938706661u)) + 1338588197;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint3 hashwide(float3x3 v)
		{
			return asuint(v.c0) * uint3(3439609253u, 3535343003u, 3546061613u) + asuint(v.c1) * uint3(2702024231u, 1452124841u, 1966089551u) + asuint(v.c2) * uint3(2668168249u, 1587512777u, 2353831999u) + 3101256173u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x4 float3x4(float3 c0, float3 c1, float3 c2, float3 c3)
		{
			return new float3x4(c0, c1, c2, c3);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x4 float3x4(float m00, float m01, float m02, float m03, float m10, float m11, float m12, float m13, float m20, float m21, float m22, float m23)
		{
			return new float3x4(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x4 float3x4(float v)
		{
			return new float3x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x4 float3x4(bool v)
		{
			return new float3x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x4 float3x4(bool3x4 v)
		{
			return new float3x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x4 float3x4(int v)
		{
			return new float3x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x4 float3x4(int3x4 v)
		{
			return new float3x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x4 float3x4(uint v)
		{
			return new float3x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x4 float3x4(uint3x4 v)
		{
			return new float3x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x4 float3x4(double v)
		{
			return new float3x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float3x4 float3x4(double3x4 v)
		{
			return new float3x4(v);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float4x3 transpose(float3x4 v)
		{
			return float4x3(v.c0.x, v.c0.y, v.c0.z, v.c1.x, v.c1.y, v.c1.z, v.c2.x, v.c2.y, v.c2.z, v.c3.x, v.c3.y, v.c3.z);
		}

		public static float3x4 fastinverse(float3x4 m)
		{
			float3 c = m.c0;
			float3 c2 = m.c1;
			float3 c3 = m.c2;
			float3 c4 = m.c3;
			float3 float5 = float3(c.x, c2.x, c3.x);
			float3 float6 = float3(c.y, c2.y, c3.y);
			float3 float7 = float3(c.z, c2.z, c3.z);
			c4 = -(float5 * c4.x + float6 * c4.y + float7 * c4.z);
			return float3x4(float5, float6, float7, c4);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint hash(float3x4 v)
		{
			return csum(asuint(v.c0) * uint3(4192899797u, 3271228601u, 1634639009u) + asuint(v.c1) * uint3(3318036811u, 3404170631u, 2048213449u) + asuint(v.c2) * uint3(4164671783u, 1780759499u, 1352369353u) + asuint(v.c3) * uint3(2446407751u, 1391928079u, 3475533443u)) + 3777095341u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static uint3 hashwide(float3x4 v)
		{
			return asuint(v.c0) * uint3(3385463369u, 1773538433u, 3773525029u) + asuint(v.c1) * uint3(4131962539u, 1809525511u, 4016293529u) + asuint(v.c2) * uint3(2416021567u, 2828384717u, 2636362241u) + asuint(v.c3) * uint3(1258410977u, 1952565773u, 2037535609u) + 3592785499u;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float4 float4(float x, float y, float z, float w)
		{
			return new float4(x, y, z, w);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float4 float4(float x, float y, float2 zw)
		{
			return new float4(x, y, zw);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float4 float4(float x, float2 yz, float w)
		{
			return new float4(x, yz, w);
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public static float4 float4(float x, float3 yzw)
		{
			return new float4(x, yzw);
		}

		[MethodImpl(MethodImplOptions.AggressiveI

plugins/BurstsOfRain.dll

Decompiled 3 weeks ago
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using Unity.Burst;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("BurstsOfRain")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+255eb80a9a2a67959fa0095812bfbafc2d2cc61f")]
[assembly: AssemblyProduct("BurstsOfRain")]
[assembly: AssemblyTitle("BurstsOfRain")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace BurstsOfRain;

[BepInPlugin("com.RiskofThunder.BurstsOfRain", "Bursts of Rain", "0.0.1")]
public class BurstsOfRainMain : BaseUnityPlugin
{
	public const string GUID = "com.RiskofThunder.BurstsOfRain";

	public const string NAME = "Bursts of Rain";

	public const string VERSION = "0.0.1";

	private static ManualLogSource logger;

	private void Awake()
	{
		logger = ((BaseUnityPlugin)this).Logger;
	}

	public static void AddBurstAssembly(PluginInfo info, string assemblyName)
	{
		string? directoryName = Path.GetDirectoryName(info.Location);
		if (!assemblyName.EndsWith(".dll"))
		{
			assemblyName += ".dll";
		}
		string text = Path.Combine(directoryName, assemblyName);
		if (!File.Exists(text))
		{
			logger.LogWarning((object)("Cannot to load " + info.Metadata.Name + "'s bursted assembly with name " + assemblyName + ". The requested file does not exist."));
		}
		else if (!BurstRuntime.LoadAdditionalLibrary(text))
		{
			logger.LogError((object)("Failed to load " + info.Metadata.Name + "'s bursted assembly with name " + assemblyName + ". Check the log fore more information."));
		}
		else
		{
			logger.LogInfo((object)("Succesfully loaded " + info.Metadata.Name + "'s bursted assembly of name " + assemblyName));
		}
	}
}