using System;
using System.Runtime.CompilerServices;
using Cpp2IlInjected;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Serialization;

namespace RootMotion.FinalIK
{
	// Token: 0x02000491 RID: 1169
	[Token(Token = "0x2000491")]
	[Serializable]
	public class IKSolverVR : IKSolver
	{
		// Token: 0x060029A8 RID: 10664 RVA: 0x0005DAFC File Offset: 0x0005BCFC
		[Token(Token = "0x60029A8")]
		[Address(RVA = "0x1526DD0", Offset = "0x1525DD0", VA = "0x181526DD0")]
		public void SetToReferences(VRIK.References references)
		{
			if (references.isFilled)
			{
				Transform[] transforms = references.GetTransforms();
				this.solverTransforms = transforms;
				Transform transform = this.solverTransforms[3];
				int num = 0;
				bool flag = transform != num;
				Transform[] array = this.solverTransforms;
				this.hasChest = flag;
				Transform transform2 = array[4];
				int num2 = 0;
				bool flag2 = transform2 != num2;
				Transform[] array2 = this.solverTransforms;
				this.hasNeck = flag2;
				Transform transform3 = array2[6];
				int num3 = 0;
				if (!(transform3 != num3))
				{
				}
				Transform transform4 = this.solverTransforms[10];
				int num4 = 0;
				bool flag3 = transform4 != num4;
				this.hasShoulders = flag3;
				Transform transform5 = this.solverTransforms[17];
				int num5 = 0;
				if (!(transform5 != num5))
				{
				}
				Transform transform6 = this.solverTransforms[21];
				int num6 = 0;
				bool flag4 = transform6 != num6;
				this.hasToes = flag4;
				Vector3[] array3 = new Vector3[this.solverTransforms.Length];
				this.readPositions = array3;
				Quaternion[] array4 = new Quaternion[this.solverTransforms.Length];
				this.readRotations = array4;
				this.DefaultAnimationCurves();
				this.GuessHandOrientations(references, true);
				return;
			}
			Debug.LogError("Invalid references, one or more Transforms are missing.");
			throw new NullReferenceException();
		}

		// Token: 0x060029A9 RID: 10665 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029A9")]
		[Address(RVA = "0x1525820", Offset = "0x1524820", VA = "0x181525820")]
		public void GuessHandOrientations(VRIK.References references, bool onlyIfZero)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029AA RID: 10666 RVA: 0x0005DC44 File Offset: 0x0005BE44
		[Token(Token = "0x60029AA")]
		[Address(RVA = "0x1524700", Offset = "0x1523700", VA = "0x181524700")]
		public void DefaultAnimationCurves()
		{
			IKSolverVR.Locomotion locomotion;
			do
			{
				locomotion = this.locomotion;
				if (locomotion.stepHeight == (ulong)0L)
				{
					AnimationCurve animationCurve = new AnimationCurve();
					locomotion.stepHeight = animationCurve;
					IKSolverVR.Locomotion locomotion2 = this.locomotion;
				}
			}
			while (locomotion.heelHeight != (ulong)0L);
			AnimationCurve animationCurve2 = new AnimationCurve();
			locomotion.heelHeight = animationCurve2;
			if (this.locomotion.stepHeight.keys.Length == 0)
			{
				AnimationCurve stepHeight = this.locomotion.stepHeight;
				Keyframe[] sineKeyframes = IKSolverVR.GetSineKeyframes(0.03f);
				stepHeight.keys = sineKeyframes;
			}
			if (this.locomotion.heelHeight.keys.Length == 0)
			{
				AnimationCurve heelHeight = this.locomotion.heelHeight;
				Keyframe[] sineKeyframes2 = IKSolverVR.GetSineKeyframes(0.03f);
				heelHeight.keys = sineKeyframes2;
			}
		}

		// Token: 0x060029AB RID: 10667 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029AB")]
		[Address(RVA = "0x1524120", Offset = "0x1523120", VA = "0x181524120")]
		public void AddPositionOffset(IKSolverVR.PositionOffset positionOffset, Vector3 value)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029AC RID: 10668 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029AC")]
		[Address(RVA = "0x15244C0", Offset = "0x15234C0", VA = "0x1815244C0")]
		public void AddRotationOffset(IKSolverVR.RotationOffset rotationOffset, Vector3 value)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029AD RID: 10669 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029AD")]
		[Address(RVA = "0x1524600", Offset = "0x1523600", VA = "0x181524600")]
		public void AddRotationOffset(IKSolverVR.RotationOffset rotationOffset, Quaternion value)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029AE RID: 10670 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029AE")]
		[Address(RVA = "0x1523F90", Offset = "0x1522F90", VA = "0x181523F90")]
		public void AddPlatformMotion(Vector3 deltaPosition, Quaternion deltaRotation, Vector3 platformPivot)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029AF RID: 10671 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029AF")]
		[Address(RVA = "0x1526C90", Offset = "0x1525C90", VA = "0x181526C90")]
		public void Reset()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029B0 RID: 10672 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029B0")]
		[Address(RVA = "0x15289F0", Offset = "0x15279F0", VA = "0x1815289F0", Slot = "9")]
		public override void StoreDefaultLocalState()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029B1 RID: 10673 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029B1")]
		[Address(RVA = "0x15248A0", Offset = "0x15238A0", VA = "0x1815248A0", Slot = "8")]
		public override void FixTransforms()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029B2 RID: 10674 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029B2")]
		[Address(RVA = "0x1525540", Offset = "0x1524540", VA = "0x181525540", Slot = "6")]
		public override IKSolver.Point[] GetPoints()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029B3 RID: 10675 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029B3")]
		[Address(RVA = "0x15254E0", Offset = "0x15244E0", VA = "0x1815254E0", Slot = "7")]
		public override IKSolver.Point GetPoint(Transform transform)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029B4 RID: 10676 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029B4")]
		[Address(RVA = "0x1526230", Offset = "0x1525230", VA = "0x181526230", Slot = "4")]
		public override bool IsValid(ref string message)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029B5 RID: 10677 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029B5")]
		[Address(RVA = "0x1524A50", Offset = "0x1523A50", VA = "0x181524A50")]
		private Vector3 GetNormal(Transform[] transforms)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029B6 RID: 10678 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029B6")]
		[Address(RVA = "0x1526050", Offset = "0x1525050", VA = "0x181526050")]
		private Vector3 GuessWristToPalmAxis(Transform hand, Transform forearm)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029B7 RID: 10679 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029B7")]
		[Address(RVA = "0x1525B40", Offset = "0x1524B40", VA = "0x181525B40")]
		private Vector3 GuessPalmToThumbAxis(Transform hand, Transform forearm)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029B8 RID: 10680 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029B8")]
		[Address(RVA = "0x15256B0", Offset = "0x15246B0", VA = "0x1815256B0")]
		private static Keyframe[] GetSineKeyframes(float mag)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029B9 RID: 10681 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029B9")]
		[Address(RVA = "0x1528B90", Offset = "0x1527B90", VA = "0x181528B90")]
		private void UpdateSolverTransforms()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029BA RID: 10682 RVA: 0x0005DD0C File Offset: 0x0005BF0C
		[Token(Token = "0x60029BA")]
		[Address(RVA = "0x15264D0", Offset = "0x15254D0", VA = "0x1815264D0", Slot = "10")]
		protected override void OnInitiate()
		{
			this.UpdateSolverTransforms();
			bool flag = this.hasToes;
			bool flag2 = this.hasChest;
			Quaternion[] array = this.readRotations;
			Vector3[] array2 = this.readPositions;
			bool flag3 = this.hasShoulders;
			bool flag4 = this.hasNeck;
			this.Read(array2, array, flag2, flag4, flag3, flag);
		}

		// Token: 0x060029BB RID: 10683 RVA: 0x0005DD5C File Offset: 0x0005BF5C
		[Token(Token = "0x60029BB")]
		[Address(RVA = "0x1526520", Offset = "0x1525520", VA = "0x181526520", Slot = "11")]
		protected override void OnUpdate()
		{
			float ikpositionWeight = this.IKPositionWeight;
			int num = 0;
			if (ikpositionWeight > (float)num)
			{
				this.UpdateSolverTransforms();
				bool flag = this.hasToes;
				bool flag2 = this.hasChest;
				Quaternion[] array = this.readRotations;
				Vector3[] array2 = this.readPositions;
				bool flag3 = this.hasShoulders;
				bool flag4 = this.hasNeck;
				this.Read(array2, array, flag2, flag4, flag3, flag);
				this.Solve();
				this.Write();
				this.WriteTransforms();
				return;
			}
		}

		// Token: 0x060029BC RID: 10684 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029BC")]
		[Address(RVA = "0x1528D50", Offset = "0x1527D50", VA = "0x181528D50")]
		private void WriteTransforms()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029BD RID: 10685 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029BD")]
		[Address(RVA = "0x15265A0", Offset = "0x15255A0", VA = "0x1815265A0")]
		private void Read(Vector3[] positions, Quaternion[] rotations, bool hasChest, bool hasNeck, bool hasShoulders, bool hasToes)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029BE RID: 10686 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029BE")]
		[Address(RVA = "0x1527110", Offset = "0x1526110", VA = "0x181527110")]
		private void Solve()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029BF RID: 10687 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029BF")]
		[Address(RVA = "0x15255A0", Offset = "0x15245A0", VA = "0x1815255A0")]
		private Vector3 GetPosition(int index)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029C0 RID: 10688 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029C0")]
		[Address(RVA = "0x1525660", Offset = "0x1524660", VA = "0x181525660")]
		private Quaternion GetRotation(int index)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x1700027D RID: 637
		// (get) Token: 0x060029C1 RID: 10689 RVA: 0x0005DDD0 File Offset: 0x0005BFD0
		// (set) Token: 0x060029C2 RID: 10690 RVA: 0x0005DDE4 File Offset: 0x0005BFE4
		[Token(Token = "0x1700027D")]
		[HideInInspector]
		public IKSolverVR.VirtualBone rootBone
		{
			[Token(Token = "0x60029C1")]
			[Address(RVA = "0x6FDC90", Offset = "0x6FCC90", VA = "0x1806FDC90")]
			[CompilerGenerated]
			get
			{
				return this.<rootBone>k__BackingField;
			}
			[Token(Token = "0x60029C2")]
			[Address(RVA = "0x6FDD60", Offset = "0x6FCD60", VA = "0x1806FDD60")]
			[CompilerGenerated]
			private set
			{
				/*
An exception occurred when decompiling this method (060029C2)

ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Void RootMotion.FinalIK.IKSolverVR::set_rootBone(RootMotion.FinalIK.IKSolverVR/VirtualBone)

 ---> System.Exception: Basic block has to end with unconditional control flow. 
{; 	Block_0:; 	stfld:VirtualBone(IKSolverVR::<rootBone>k__BackingField, ldloc:IKSolverVR(this), ldloc:VirtualBone(value)); }; 
   at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1810
   at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.Optimize(DecompilerContext context, ILBlock method, AutoPropertyProvider autoPropertyProvider, StateMachineKind& stateMachineKind, MethodDef& inlinedMethod, AsyncMethodDebugInfo& asyncInfo, ILAstOptimizationStep abortBeforeStep) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 344
   at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(IEnumerable`1 parameters, MethodDebugInfoBuilder& builder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 123
   at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 88
   --- End of inner exception stack trace ---
   at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 92
   at ICSharpCode.Decompiler.Ast.AstBuilder.AddMethodBody(EntityDeclaration methodNode, EntityDeclaration& updatedNode, MethodDef method, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, MethodKind methodKind) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstBuilder.cs:line 1618
*/;
			}
		}

		// Token: 0x060029C3 RID: 10691 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029C3")]
		[Address(RVA = "0x1529010", Offset = "0x1528010", VA = "0x181529010")]
		private void Write()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029C4 RID: 10692 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60029C4")]
		[Address(RVA = "0x1524D50", Offset = "0x1523D50", VA = "0x181524D50")]
		private Vector3 GetPelvisOffset()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060029C5 RID: 10693 RVA: 0x0005DDF8 File Offset: 0x0005BFF8
		[Token(Token = "0x60029C5")]
		[Address(RVA = "0x15291C0", Offset = "0x15281C0", VA = "0x1815291C0")]
		public IKSolverVR()
		{
			Transform[] array = new Transform[0];
			this.solverTransforms = array;
			Vector3[] array2 = new Vector3[0];
			this.readPositions = array2;
			Quaternion[] array3 = new Quaternion[0];
			this.readRotations = array3;
			Vector3[] array4 = new Vector3[2];
			this.solvedPositions = array4;
			Quaternion[] array5 = new Quaternion[22];
			this.solvedRotations = array5;
			Quaternion[] array6 = new Quaternion[21];
			this.defaultLocalRotations = array6;
			this.plantFeet = true;
			IKSolverVR.Spine spine = new IKSolverVR.Spine();
			this.spine = spine;
			IKSolverVR.Arm arm = new IKSolverVR.Arm();
			this.leftArm = arm;
			IKSolverVR.Arm arm2 = new IKSolverVR.Arm();
			this.rightArm = arm2;
			IKSolverVR.Leg leg = new IKSolverVR.Leg();
			this.leftLeg = leg;
			IKSolverVR.Leg leg2 = new IKSolverVR.Leg();
			this.rightLeg = leg2;
			IKSolverVR.Locomotion locomotion = new IKSolverVR.Locomotion();
			this.locomotion = locomotion;
			IKSolverVR.Leg[] array7 = new IKSolverVR.Leg[2];
			this.legs = array7;
			IKSolverVR.Arm[] array8 = new IKSolverVR.Arm[2];
			this.arms = array8;
			base..ctor();
		}

		// Token: 0x0400330A RID: 13066
		[FieldOffset(Offset = "0x58")]
		[Token(Token = "0x400330A")]
		private Transform[] solverTransforms;

		// Token: 0x0400330B RID: 13067
		[FieldOffset(Offset = "0x60")]
		[Token(Token = "0x400330B")]
		private bool hasChest;

		// Token: 0x0400330C RID: 13068
		[FieldOffset(Offset = "0x61")]
		[Token(Token = "0x400330C")]
		private bool hasNeck;

		// Token: 0x0400330D RID: 13069
		[FieldOffset(Offset = "0x62")]
		[Token(Token = "0x400330D")]
		private bool hasShoulders;

		// Token: 0x0400330E RID: 13070
		[FieldOffset(Offset = "0x63")]
		[Token(Token = "0x400330E")]
		private bool hasToes;

		// Token: 0x0400330F RID: 13071
		[FieldOffset(Offset = "0x68")]
		[Token(Token = "0x400330F")]
		private Vector3[] readPositions;

		// Token: 0x04003310 RID: 13072
		[FieldOffset(Offset = "0x70")]
		[Token(Token = "0x4003310")]
		private Quaternion[] readRotations;

		// Token: 0x04003311 RID: 13073
		[FieldOffset(Offset = "0x78")]
		[Token(Token = "0x4003311")]
		private Vector3[] solvedPositions;

		// Token: 0x04003312 RID: 13074
		[FieldOffset(Offset = "0x80")]
		[Token(Token = "0x4003312")]
		private Quaternion[] solvedRotations;

		// Token: 0x04003313 RID: 13075
		[FieldOffset(Offset = "0x88")]
		[Token(Token = "0x4003313")]
		private Vector3 defaultPelvisLocalPosition;

		// Token: 0x04003314 RID: 13076
		[FieldOffset(Offset = "0x98")]
		[Token(Token = "0x4003314")]
		private Quaternion[] defaultLocalRotations;

		// Token: 0x04003315 RID: 13077
		[FieldOffset(Offset = "0xA0")]
		[Token(Token = "0x4003315")]
		private Vector3 rootV;

		// Token: 0x04003316 RID: 13078
		[FieldOffset(Offset = "0xAC")]
		[Token(Token = "0x4003316")]
		private Vector3 rootVelocity;

		// Token: 0x04003317 RID: 13079
		[FieldOffset(Offset = "0xB8")]
		[Token(Token = "0x4003317")]
		private Vector3 bodyOffset;

		// Token: 0x04003318 RID: 13080
		[FieldOffset(Offset = "0xC4")]
		[Token(Token = "0x4003318")]
		private int supportLegIndex;

		// Token: 0x04003319 RID: 13081
		[FieldOffset(Offset = "0xC8")]
		[Token(Token = "0x4003319")]
		[Tooltip("If true, will keep the toes planted even if head target is out of reach.")]
		public bool plantFeet;

		// Token: 0x0400331B RID: 13083
		[FieldOffset(Offset = "0xD8")]
		[Token(Token = "0x400331B")]
		[Tooltip("The spine solver.")]
		public IKSolverVR.Spine spine;

		// Token: 0x0400331C RID: 13084
		[FieldOffset(Offset = "0xE0")]
		[Token(Token = "0x400331C")]
		[Tooltip("The left arm solver.")]
		public IKSolverVR.Arm leftArm;

		// Token: 0x0400331D RID: 13085
		[FieldOffset(Offset = "0xE8")]
		[Token(Token = "0x400331D")]
		[Tooltip("The right arm solver.")]
		public IKSolverVR.Arm rightArm;

		// Token: 0x0400331E RID: 13086
		[FieldOffset(Offset = "0xF0")]
		[Token(Token = "0x400331E")]
		[Tooltip("The left leg solver.")]
		public IKSolverVR.Leg leftLeg;

		// Token: 0x0400331F RID: 13087
		[FieldOffset(Offset = "0xF8")]
		[Token(Token = "0x400331F")]
		[Tooltip("The right leg solver.")]
		public IKSolverVR.Leg rightLeg;

		// Token: 0x04003320 RID: 13088
		[FieldOffset(Offset = "0x100")]
		[Token(Token = "0x4003320")]
		[Tooltip("The procedural locomotion solver.")]
		public IKSolverVR.Locomotion locomotion;

		// Token: 0x04003321 RID: 13089
		[FieldOffset(Offset = "0x108")]
		[Token(Token = "0x4003321")]
		private IKSolverVR.Leg[] legs;

		// Token: 0x04003322 RID: 13090
		[FieldOffset(Offset = "0x110")]
		[Token(Token = "0x4003322")]
		private IKSolverVR.Arm[] arms;

		// Token: 0x04003323 RID: 13091
		[FieldOffset(Offset = "0x118")]
		[Token(Token = "0x4003323")]
		private Vector3 headPosition;

		// Token: 0x04003324 RID: 13092
		[FieldOffset(Offset = "0x124")]
		[Token(Token = "0x4003324")]
		private Vector3 headDeltaPosition;

		// Token: 0x04003325 RID: 13093
		[FieldOffset(Offset = "0x130")]
		[Token(Token = "0x4003325")]
		private Vector3 raycastOriginPelvis;

		// Token: 0x04003326 RID: 13094
		[FieldOffset(Offset = "0x13C")]
		[Token(Token = "0x4003326")]
		private Vector3 lastOffset;

		// Token: 0x04003327 RID: 13095
		[FieldOffset(Offset = "0x148")]
		[Token(Token = "0x4003327")]
		private Vector3 debugPos1;

		// Token: 0x04003328 RID: 13096
		[FieldOffset(Offset = "0x154")]
		[Token(Token = "0x4003328")]
		private Vector3 debugPos2;

		// Token: 0x04003329 RID: 13097
		[FieldOffset(Offset = "0x160")]
		[Token(Token = "0x4003329")]
		private Vector3 debugPos3;

		// Token: 0x0400332A RID: 13098
		[FieldOffset(Offset = "0x16C")]
		[Token(Token = "0x400332A")]
		private Vector3 debugPos4;

		// Token: 0x02000492 RID: 1170
		[Token(Token = "0x2000492")]
		[Serializable]
		public class Arm : IKSolverVR.BodyPart
		{
			// Token: 0x1700027E RID: 638
			// (get) Token: 0x060029C6 RID: 10694 RVA: 0x000020D3 File Offset: 0x000002D3
			// (set) Token: 0x060029C7 RID: 10695 RVA: 0x0005DEE8 File Offset: 0x0005C0E8
			[Token(Token = "0x1700027E")]
			public Vector3 position
			{
				[Token(Token = "0x60029C6")]
				[Address(RVA = "0x169EF90", Offset = "0x169DF90", VA = "0x18169EF90")]
				[CompilerGenerated]
				get
				{
					throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
				}
				[Token(Token = "0x60029C7")]
				[Address(RVA = "0x169F000", Offset = "0x169E000", VA = "0x18169F000")]
				[CompilerGenerated]
				private set
				{
					float z = value.z;
					this.<position>k__BackingField.z = z;
				}
			}

			// Token: 0x1700027F RID: 639
			// (get) Token: 0x060029C8 RID: 10696 RVA: 0x000020D3 File Offset: 0x000002D3
			// (set) Token: 0x060029C9 RID: 10697 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x1700027F")]
			public Quaternion rotation
			{
				[Token(Token = "0x60029C8")]
				[Address(RVA = "0x169EFB0", Offset = "0x169DFB0", VA = "0x18169EFB0")]
				[CompilerGenerated]
				get
				{
					throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
				}
				[Token(Token = "0x60029C9")]
				[Address(RVA = "0x169F020", Offset = "0x169E020", VA = "0x18169F020")]
				[CompilerGenerated]
				private set
				{
					throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
				}
			}

			// Token: 0x17000280 RID: 640
			// (get) Token: 0x060029CA RID: 10698 RVA: 0x0005DF08 File Offset: 0x0005C108
			[Token(Token = "0x17000280")]
			private IKSolverVR.VirtualBone shoulder
			{
				[Token(Token = "0x60029CA")]
				[Address(RVA = "0x159E600", Offset = "0x159D600", VA = "0x18159E600")]
				get
				{
					return this.bones[0];
				}
			}

			// Token: 0x17000281 RID: 641
			// (get) Token: 0x060029CB RID: 10699 RVA: 0x0005DF28 File Offset: 0x0005C128
			[Token(Token = "0x17000281")]
			private IKSolverVR.VirtualBone upperArm
			{
				[Token(Token = "0x60029CB")]
				[Address(RVA = "0x169EFC0", Offset = "0x169DFC0", VA = "0x18169EFC0")]
				get
				{
					return this.bones[1];
				}
			}

			// Token: 0x17000282 RID: 642
			// (get) Token: 0x060029CC RID: 10700 RVA: 0x0005DF48 File Offset: 0x0005C148
			[Token(Token = "0x17000282")]
			private IKSolverVR.VirtualBone forearm
			{
				[Token(Token = "0x60029CC")]
				[Address(RVA = "0x169EF10", Offset = "0x169DF10", VA = "0x18169EF10")]
				get
				{
					return this.bones[2];
				}
			}

			// Token: 0x17000283 RID: 643
			// (get) Token: 0x060029CD RID: 10701 RVA: 0x0005DF68 File Offset: 0x0005C168
			[Token(Token = "0x17000283")]
			private IKSolverVR.VirtualBone hand
			{
				[Token(Token = "0x60029CD")]
				[Address(RVA = "0x169EF50", Offset = "0x169DF50", VA = "0x18169EF50")]
				get
				{
					return this.bones[3];
				}
			}

			// Token: 0x060029CE RID: 10702 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029CE")]
			[Address(RVA = "0x169C0F0", Offset = "0x169B0F0", VA = "0x18169C0F0", Slot = "4")]
			protected override void OnRead(Vector3[] positions, Quaternion[] rotations, bool hasChest, bool hasNeck, bool hasShoulders, bool hasToes, int rootIndex, int index)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x060029CF RID: 10703 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029CF")]
			[Address(RVA = "0x169CBC0", Offset = "0x169BBC0", VA = "0x18169CBC0", Slot = "5")]
			public override void PreSolve()
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x060029D0 RID: 10704 RVA: 0x0005DF88 File Offset: 0x0005C188
			[Token(Token = "0x60029D0")]
			[Address(RVA = "0x169B8A0", Offset = "0x169A8A0", VA = "0x18169B8A0", Slot = "7")]
			public override void ApplyOffsets()
			{
				float z = this.handPositionOffset.z;
				float z2 = this.<position>k__BackingField.z;
				float z3 = this.handPositionOffset.z;
				float z4 = this.<position>k__BackingField.z;
				float z5 = this.handPositionOffset.z;
				this.<position>k__BackingField.z = z4;
			}

			// Token: 0x060029D1 RID: 10705 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029D1")]
			[Address(RVA = "0x169CEC0", Offset = "0x169BEC0", VA = "0x18169CEC0")]
			public void Solve(bool isLeft)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x060029D2 RID: 10706 RVA: 0x0005DFE0 File Offset: 0x0005C1E0
			[Token(Token = "0x60029D2")]
			[Address(RVA = "0x169CE90", Offset = "0x169BE90", VA = "0x18169CE90", Slot = "8")]
			public override void ResetOffsets()
			{
				float z = Vector3.zero.z;
				this.handPositionOffset.z = z;
			}

			// Token: 0x060029D3 RID: 10707 RVA: 0x0005E004 File Offset: 0x0005C204
			[Token(Token = "0x60029D3")]
			[Address(RVA = "0x169EC20", Offset = "0x169DC20", VA = "0x18169EC20", Slot = "6")]
			public override void Write(ref Vector3[] solvedPositions, ref Quaternion[] solvedRotations)
			{
				if (this.hasShoulder)
				{
					IKSolverVR.VirtualBone[] array = this.bones;
					int index = this.index;
					IKSolverVR.VirtualBone virtualBone = array[0];
					array += array;
				}
				IKSolverVR.VirtualBone virtualBone2 = this.bones[1];
				int num = this.index;
				num++;
				num += 2;
				num += num;
				IKSolverVR.VirtualBone virtualBone3 = this.bones[2];
				int num2 = this.index;
				num2 += 2;
				num2 += 2;
				num2 += num2;
				IKSolverVR.VirtualBone[] array2 = this.bones;
				IKSolverVR.VirtualBone virtualBone4 = array2[3];
				array2 += array2;
			}

			// Token: 0x060029D4 RID: 10708 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029D4")]
			[Address(RVA = "0x169B930", Offset = "0x169A930", VA = "0x18169B930")]
			private float DamperValue(float value, float min, float max, float weight = 1f)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x060029D5 RID: 10709 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029D5")]
			[Address(RVA = "0x169B9C0", Offset = "0x169A9C0", VA = "0x18169B9C0")]
			private Vector3 GetBendNormal(Vector3 dir)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x060029D6 RID: 10710 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029D6")]
			[Address(RVA = "0x169EAE0", Offset = "0x169DAE0", VA = "0x18169EAE0")]
			private void Visualize(IKSolverVR.VirtualBone bone1, IKSolverVR.VirtualBone bone2, IKSolverVR.VirtualBone bone3, Color color)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x060029D7 RID: 10711 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029D7")]
			[Address(RVA = "0x169EDF0", Offset = "0x169DDF0", VA = "0x18169EDF0")]
			public Arm()
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x0400332B RID: 13099
			[FieldOffset(Offset = "0x48")]
			[Token(Token = "0x400332B")]
			[Tooltip("The hand target")]
			public Transform target;

			// Token: 0x0400332C RID: 13100
			[FieldOffset(Offset = "0x50")]
			[Token(Token = "0x400332C")]
			[Tooltip("The elbow will be bent towards this Transform if 'Bend Goal Weight' > 0.")]
			public Transform bendGoal;

			// Token: 0x0400332D RID: 13101
			[FieldOffset(Offset = "0x58")]
			[Token(Token = "0x400332D")]
			[Tooltip("Positional weight of the hand target.")]
			[Range(0f, 1f)]
			public float positionWeight;

			// Token: 0x0400332E RID: 13102
			[FieldOffset(Offset = "0x5C")]
			[Token(Token = "0x400332E")]
			[Tooltip("Rotational weight of the hand target")]
			[Range(0f, 1f)]
			public float rotationWeight;

			// Token: 0x0400332F RID: 13103
			[FieldOffset(Offset = "0x60")]
			[Token(Token = "0x400332F")]
			[Tooltip("Different techniques for shoulder bone rotation.")]
			public IKSolverVR.Arm.ShoulderRotationMode shoulderRotationMode;

			// Token: 0x04003330 RID: 13104
			[FieldOffset(Offset = "0x64")]
			[Token(Token = "0x4003330")]
			[Tooltip("The weight of shoulder rotation")]
			[Range(0f, 1f)]
			public float shoulderRotationWeight;

			// Token: 0x04003331 RID: 13105
			[FieldOffset(Offset = "0x68")]
			[Token(Token = "0x4003331")]
			[Tooltip("If greater than 0, will bend the elbow towards the 'Bend Goal' Transform.")]
			[Range(0f, 1f)]
			public float bendGoalWeight;

			// Token: 0x04003332 RID: 13106
			[FieldOffset(Offset = "0x6C")]
			[Token(Token = "0x4003332")]
			[Tooltip("Angular offset of the elbow bending direction.")]
			[Range(-180f, 180f)]
			public float swivelOffset;

			// Token: 0x04003333 RID: 13107
			[FieldOffset(Offset = "0x70")]
			[Token(Token = "0x4003333")]
			[Tooltip("Local axis of the hand bone that points from the wrist towards the palm. Used for defining hand bone orientation.")]
			public Vector3 wristToPalmAxis;

			// Token: 0x04003334 RID: 13108
			[FieldOffset(Offset = "0x7C")]
			[Token(Token = "0x4003334")]
			[Tooltip("Local axis of the hand bone that points from the palm towards the thumb. Used for defining hand bone orientation.")]
			public Vector3 palmToThumbAxis;

			// Token: 0x04003335 RID: 13109
			[FieldOffset(Offset = "0x88")]
			[Token(Token = "0x4003335")]
			[HideInInspector]
			[NonSerialized]
			public Vector3 IKPosition;

			// Token: 0x04003336 RID: 13110
			[FieldOffset(Offset = "0x94")]
			[Token(Token = "0x4003336")]
			[HideInInspector]
			[NonSerialized]
			public Quaternion IKRotation;

			// Token: 0x04003337 RID: 13111
			[FieldOffset(Offset = "0xA4")]
			[Token(Token = "0x4003337")]
			[HideInInspector]
			[NonSerialized]
			public Vector3 bendDirection;

			// Token: 0x04003338 RID: 13112
			[FieldOffset(Offset = "0xB0")]
			[Token(Token = "0x4003338")]
			[HideInInspector]
			[NonSerialized]
			public Vector3 handPositionOffset;

			// Token: 0x0400333B RID: 13115
			[FieldOffset(Offset = "0xD8")]
			[Token(Token = "0x400333B")]
			private bool hasShoulder;

			// Token: 0x0400333C RID: 13116
			[FieldOffset(Offset = "0xDC")]
			[Token(Token = "0x400333C")]
			private Vector3 chestForwardAxis;

			// Token: 0x0400333D RID: 13117
			[FieldOffset(Offset = "0xE8")]
			[Token(Token = "0x400333D")]
			private Vector3 chestUpAxis;

			// Token: 0x0400333E RID: 13118
			[FieldOffset(Offset = "0xF4")]
			[Token(Token = "0x400333E")]
			private Quaternion chestRotation;

			// Token: 0x0400333F RID: 13119
			[FieldOffset(Offset = "0x104")]
			[Token(Token = "0x400333F")]
			private Vector3 chestForward;

			// Token: 0x04003340 RID: 13120
			[FieldOffset(Offset = "0x110")]
			[Token(Token = "0x4003340")]
			private Vector3 chestUp;

			// Token: 0x04003341 RID: 13121
			[FieldOffset(Offset = "0x11C")]
			[Token(Token = "0x4003341")]
			private Quaternion forearmRelToUpperArm;

			// Token: 0x04003342 RID: 13122
			[Token(Token = "0x4003342")]
			private const float yawOffsetAngle = 45f;

			// Token: 0x04003343 RID: 13123
			[Token(Token = "0x4003343")]
			private const float pitchOffsetAngle = -30f;

			// Token: 0x02000493 RID: 1171
			[Token(Token = "0x2000493")]
			[Serializable]
			public enum ShoulderRotationMode
			{
				// Token: 0x04003345 RID: 13125
				[Token(Token = "0x4003345")]
				YawPitch,
				// Token: 0x04003346 RID: 13126
				[Token(Token = "0x4003346")]
				FromTo
			}
		}

		// Token: 0x02000494 RID: 1172
		[Token(Token = "0x2000494")]
		[Serializable]
		public abstract class BodyPart
		{
			// Token: 0x060029D8 RID: 10712
			[Token(Token = "0x60029D8")]
			[Address(Slot = "4")]
			protected abstract void OnRead(Vector3[] positions, Quaternion[] rotations, bool hasChest, bool hasNeck, bool hasShoulders, bool hasToes, int rootIndex, int index);

			// Token: 0x060029D9 RID: 10713
			[Token(Token = "0x60029D9")]
			[Address(Slot = "5")]
			public abstract void PreSolve();

			// Token: 0x060029DA RID: 10714
			[Token(Token = "0x60029DA")]
			[Address(Slot = "6")]
			public abstract void Write(ref Vector3[] solvedPositions, ref Quaternion[] solvedRotations);

			// Token: 0x060029DB RID: 10715
			[Token(Token = "0x60029DB")]
			[Address(Slot = "7")]
			public abstract void ApplyOffsets();

			// Token: 0x060029DC RID: 10716
			[Token(Token = "0x60029DC")]
			[Address(Slot = "8")]
			public abstract void ResetOffsets();

			// Token: 0x17000284 RID: 644
			// (get) Token: 0x060029DD RID: 10717 RVA: 0x0005E0A4 File Offset: 0x0005C2A4
			// (set) Token: 0x060029DE RID: 10718 RVA: 0x0005E0B8 File Offset: 0x0005C2B8
			[Token(Token = "0x17000284")]
			public float sqrMag
			{
				[Token(Token = "0x60029DD")]
				[Address(RVA = "0x491570", Offset = "0x490570", VA = "0x180491570")]
				get;
				[Token(Token = "0x60029DE")]
				[Address(RVA = "0x6D5060", Offset = "0x6D4060", VA = "0x1806D5060")]
				private set;
			}

			// Token: 0x17000285 RID: 645
			// (get) Token: 0x060029DF RID: 10719 RVA: 0x0005E0CC File Offset: 0x0005C2CC
			// (set) Token: 0x060029E0 RID: 10720 RVA: 0x0005E0E0 File Offset: 0x0005C2E0
			[Token(Token = "0x17000285")]
			public float mag
			{
				[Token(Token = "0x60029DF")]
				[Address(RVA = "0x56CCE0", Offset = "0x56BCE0", VA = "0x18056CCE0")]
				get;
				[Token(Token = "0x60029E0")]
				[Address(RVA = "0x75AF50", Offset = "0x759F50", VA = "0x18075AF50")]
				private set;
			}

			// Token: 0x060029E1 RID: 10721 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029E1")]
			[Address(RVA = "0x169F260", Offset = "0x169E260", VA = "0x18169F260")]
			public void Read(Vector3[] positions, Quaternion[] rotations, bool hasChest, bool hasNeck, bool hasShoulders, bool hasToes, int rootIndex, int index)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x060029E2 RID: 10722 RVA: 0x0005E0F4 File Offset: 0x0005C2F4
			[Token(Token = "0x60029E2")]
			[Address(RVA = "0x169F090", Offset = "0x169E090", VA = "0x18169F090")]
			public void MovePosition(Vector3 position)
			{
				IKSolverVR.VirtualBone[] array = this.bones;
				IKSolverVR.VirtualBone virtualBone = array[0];
				float z = position.z;
				float z2 = virtualBone.solverPosition.z;
				int num = 0;
				int length = array.Length;
				if (num < length)
				{
					IKSolverVR.VirtualBone virtualBone2 = array[num];
					float z3 = virtualBone2.solverPosition.z;
					num++;
					virtualBone2.solverPosition.z = z3;
				}
			}

			// Token: 0x060029E3 RID: 10723 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029E3")]
			[Address(RVA = "0x169F190", Offset = "0x169E190", VA = "0x18169F190")]
			public void MoveRotation(Quaternion rotation)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x060029E4 RID: 10724 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029E4")]
			[Address(RVA = "0x169F650", Offset = "0x169E650", VA = "0x18169F650")]
			public void Translate(Vector3 position, Quaternion rotation)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x060029E5 RID: 10725 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029E5")]
			[Address(RVA = "0x169F490", Offset = "0x169E490", VA = "0x18169F490")]
			public void TranslateRoot(Vector3 newRootPos, Quaternion newRootRot)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x060029E6 RID: 10726 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029E6")]
			[Address(RVA = "0x169F360", Offset = "0x169E360", VA = "0x18169F360")]
			public void RotateTo(IKSolverVR.VirtualBone bone, Quaternion rotation, float weight = 1f)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x060029E7 RID: 10727 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029E7")]
			[Address(RVA = "0x169F8E0", Offset = "0x169E8E0", VA = "0x18169F8E0")]
			public void Visualize(Color color)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x060029E8 RID: 10728 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029E8")]
			[Address(RVA = "0x169F750", Offset = "0x169E750", VA = "0x18169F750")]
			public void Visualize()
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x060029E9 RID: 10729 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029E9")]
			[Address(RVA = "0x169FA50", Offset = "0x169EA50", VA = "0x18169FA50")]
			protected BodyPart()
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x04003349 RID: 13129
			[FieldOffset(Offset = "0x18")]
			[Token(Token = "0x4003349")]
			[HideInInspector]
			public IKSolverVR.VirtualBone[] bones;

			// Token: 0x0400334A RID: 13130
			[FieldOffset(Offset = "0x20")]
			[Token(Token = "0x400334A")]
			protected bool initiated;

			// Token: 0x0400334B RID: 13131
			[FieldOffset(Offset = "0x24")]
			[Token(Token = "0x400334B")]
			protected Vector3 rootPosition;

			// Token: 0x0400334C RID: 13132
			[FieldOffset(Offset = "0x30")]
			[Token(Token = "0x400334C")]
			protected Quaternion rootRotation;

			// Token: 0x0400334D RID: 13133
			[FieldOffset(Offset = "0x40")]
			[Token(Token = "0x400334D")]
			protected int index;
		}

		// Token: 0x02000495 RID: 1173
		[Token(Token = "0x2000495")]
		[Serializable]
		public class Footstep
		{
			// Token: 0x17000286 RID: 646
			// (get) Token: 0x060029EA RID: 10730 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x17000286")]
			public bool isStepping
			{
				[Token(Token = "0x60029EA")]
				[Address(RVA = "0x16A3390", Offset = "0x16A2390", VA = "0x1816A3390")]
				get
				{
					throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
				}
			}

			// Token: 0x17000287 RID: 647
			// (get) Token: 0x060029EB RID: 10731 RVA: 0x0005E168 File Offset: 0x0005C368
			// (set) Token: 0x060029EC RID: 10732 RVA: 0x0005E17C File Offset: 0x0005C37C
			[Token(Token = "0x17000287")]
			public float stepProgress
			{
				[Token(Token = "0x60029EB")]
				[Address(RVA = "0x4C3B40", Offset = "0x4C2B40", VA = "0x1804C3B40")]
				get;
				[Token(Token = "0x60029EC")]
				[Address(RVA = "0x4D14A0", Offset = "0x4D04A0", VA = "0x1804D14A0")]
				private set;
			}

			// Token: 0x060029ED RID: 10733 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029ED")]
			[Address(RVA = "0x16A3240", Offset = "0x16A2240", VA = "0x1816A3240")]
			public Footstep(Quaternion rootRotation, Vector3 footPosition, Quaternion footRotation, Vector3 characterSpaceOffset)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x060029EE RID: 10734 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029EE")]
			[Address(RVA = "0x16A2C60", Offset = "0x16A1C60", VA = "0x1816A2C60")]
			public void Reset(Quaternion rootRotation, Vector3 footPosition, Quaternion footRotation)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x060029EF RID: 10735 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029EF")]
			[Address(RVA = "0x16A2D00", Offset = "0x16A1D00", VA = "0x1816A2D00")]
			public void StepTo(Vector3 p, Quaternion rootRotation)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x060029F0 RID: 10736 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029F0")]
			[Address(RVA = "0x16A2EF0", Offset = "0x16A1EF0", VA = "0x1816A2EF0")]
			public void UpdateStepping(Vector3 p, Quaternion rootRotation, float speed)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x060029F1 RID: 10737 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029F1")]
			[Address(RVA = "0x16A2D80", Offset = "0x16A1D80", VA = "0x1816A2D80")]
			public void UpdateStanding(Quaternion rootRotation, float minAngle, float speed)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x060029F2 RID: 10738 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60029F2")]
			[Address(RVA = "0x16A3090", Offset = "0x16A2090", VA = "0x1816A3090")]
			public void Update(InterpolationMode interpolation, UnityEvent onStep)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x0400334E RID: 13134
			[FieldOffset(Offset = "0x10")]
			[Token(Token = "0x400334E")]
			public float stepSpeed;

			// Token: 0x0400334F RID: 13135
			[FieldOffset(Offset = "0x14")]
			[Token(Token = "0x400334F")]
			public Vector3 characterSpaceOffset;

			// Token: 0x04003350 RID: 13136
			[FieldOffset(Offset = "0x20")]
			[Token(Token = "0x4003350")]
			public Vector3 position;

			// Token: 0x04003351 RID: 13137
			[FieldOffset(Offset = "0x2C")]
			[Token(Token = "0x4003351")]
			public Quaternion rotation;

			// Token: 0x04003352 RID: 13138
			[FieldOffset(Offset = "0x3C")]
			[Token(Token = "0x4003352")]
			public Quaternion stepToRootRot;

			// Token: 0x04003353 RID: 13139
			[FieldOffset(Offset = "0x4C")]
			[Token(Token = "0x4003353")]
			public bool isSupportLeg;

			// Token: 0x04003355 RID: 13141
			[FieldOffset(Offset = "0x54")]
			[Token(Token = "0x4003355")]
			public Vector3 stepFrom;

			// Token: 0x04003356 RID: 13142
			[FieldOffset(Offset = "0x60")]
			[Token(Token = "0x4003356")]
			public Vector3 stepTo;

			// Token: 0x04003357 RID: 13143
			[FieldOffset(Offset = "0x6C")]
			[Token(Token = "0x4003357")]
			public Quaternion stepFromRot;

			// Token: 0x04003358 RID: 13144
			[FieldOffset(Offset = "0x7C")]
			[Token(Token = "0x4003358")]
			public Quaternion stepToRot;

			// Token: 0x04003359 RID: 13145
			[FieldOffset(Offset = "0x8C")]
			[Token(Token = "0x4003359")]
			private Quaternion footRelativeToRoot;

			// Token: 0x0400335A RID: 13146
			[FieldOffset(Offset = "0x9C")]
			[Token(Token = "0x400335A")]
			private float supportLegW;

			// Token: 0x0400335B RID: 13147
			[FieldOffset(Offset = "0xA0")]
			[Token(Token = "0x400335B")]
			private float supportLegWV;
		}

		// Token: 0x02000496 RID: 1174
		[Token(Token = "0x2000496")]
		[Serializable]
		public class Leg : IKSolverVR.BodyPart
		{
			// Token: 0x17000288 RID: 648
			// (get) Token: 0x060029F3 RID: 10739 RVA: 0x000020D3 File Offset: 0x000002D3
			// (set) Token: 0x060029F4 RID: 10740 RVA: 0x0005E190 File Offset: 0x0005C390
			[Token(Token = "0x17000288")]
			public Vector3 position
			{
				[Token(Token = "0x60029F3")]
				[Address(RVA = "0x16A8820", Offset = "0x16A7820", VA = "0x1816A8820")]
				[CompilerGenerated]
				get
				{
					throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
				}
				[Token(Token = "0x60029F4")]
				[Address(RVA = "0x16A8A20", Offset = "0x16A7A20", VA = "0x1816A8A20")]
				[CompilerGenerated]
				private set
				{
					float z = value.z;
					this.<position>k__BackingField.z = z;
				}
			}

			// Token: 0x17000289 RID: 649
			// (get) Token: 0x060029F5 RID: 10741 RVA: 0x000020D3 File Offset: 0x000002D3
			// (set) Token: 0x060029F6 RID: 10742 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x17000289")]
			public Quaternion rotation
			{
				[Token(Token = "0x60029F5")]
				[Address(RVA = "0x16A8990", Offset = "0x16A7990", VA = "0x1816A8990")]
				[CompilerGenerated]
				get
				{
					throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
				}
				[Token(Token = "0x60029F6")]
				[Address(RVA = "0x16A8A40", Offset = "0x16A7A40", VA = "0x1816A8A40")]
				[CompilerGenerated]
				private set
				{
					throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
				}
			}

			// Token: 0x1700028A RID: 650
			// (get) Token: 0x060029F7 RID: 10743 RVA: 0x0005E1B0 File Offset: 0x0005C3B0
			// (set) Token: 0x060029F8 RID: 10744 RVA: 0x0005E1C4 File Offset: 0x0005C3C4
			[Token(Token = "0x1700028A")]
			public bool hasToes
			{
				[Token(Token = "0x60029F7")]
				[Address(RVA = "0x1096370", Offset = "0x1095370", VA = "0x181096370")]
				get;
				[Token(Token = "0x60029F8")]
				[Address(RVA = "0x16A8A10", Offset = "0x16A7A10", VA = "0x1816A8A10")]
				private set;
			}

			// Token: 0x1700028B RID: 651
			// (get) Token: 0x060029F9 RID: 10745 RVA: 0x0005E1D8 File Offset: 0x0005C3D8
			[Token(Token = "0x1700028B")]
			public IKSolverVR.VirtualBone thigh
			{
				[Token(Token = "0x60029F9")]
				[Address(RVA = "0x159E600", Offset = "0x159D600", VA = "0x18159E600")]
				get
				{
					return this.bones[0];
				}
			}

			// Token: 0x1700028C RID: 652
			// (get) Token: 0x060029FA RID: 10746 RVA: 0x0005E1F8 File Offset: 0x0005C3F8
			[Token(Token = "0x1700028C")]
			private IKSolverVR.VirtualBone calf
			{
				[Token(Token = "0x60029FA")]
				[Address(RVA = "0x169EFC0", Offset = "0x169DFC0", VA = "0x18169EFC0")]
				get
				{
					return this.bones[1];
				}
			}

			// Token: 0x1700028D RID: 653
			// (get) Token: 0x060029FB RID: 10747 RVA: 0x0005E218 File Offset: 0x0005C418
			[Token(Token = "0x1700028D")]
			private IKSolverVR.VirtualBone foot
			{
				[Token(Token = "0x60029FB")]
				[Address(RVA = "0x169EF10", Offset = "0x169DF10", VA = "0x18169EF10")]
				get
				{
					return this.bones[2];
				}
			}

			// Token: 0x1700028E RID: 654
			// (get) Token: 0x060029FC RID: 10748 RVA: 0x0005E238 File Offset: 0x0005C438
			[Token(Token = "0x1700028E")]
			private IKSolverVR.VirtualBone toes
			{
				[Token(Token = "0x60029FC")]
				[Address(RVA = "0x169EF50", Offset = "0x169DF50", VA = "0x18169EF50")]
				get
				{
					return this.bones[3];
				}
			}

			// Token: 0x1700028F RID: 655
			// (get) Token: 0x060029FD RID: 10749 RVA: 0x0005E258 File Offset: 0x0005C458
			[Token(Token = "0x1700028F")]
			public IKSolverVR.VirtualBone lastBone
			{
				[Token(Token = "0x60029FD")]
				[Address(RVA = "0x16A87E0", Offset = "0x16A77E0", VA = "0x1816A87E0")]
				get
				{
					IKSolverVR.VirtualBone[] bones = this.bones;
					int num = bones.Length - 1;
					return bones[num];
				}
			}

			// Token: 0x17000290 RID: 656
			// (get) Token: 0x060029FE RID: 10750 RVA: 0x000020D3 File Offset: 0x000002D3
			// (set) Token: 0x060029FF RID: 10751 RVA: 0x0005E284 File Offset: 0x0005C484
			[Token(Token = "0x17000290")]
			public Vector3 thighRelativeToPelvis
			{
				[Token(Token = "0x60029FE")]
				[Address(RVA = "0x16A89E0", Offset = "0x16A79E0", VA = "0x1816A89E0")]
				[CompilerGenerated]
				get
				{
					throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
				}
				[Token(Token = "0x60029FF")]
				[Address(RVA = "0x16A8A50", Offset = "0x16A7A50", VA = "0x1816A8A50")]
				[CompilerGenerated]
				private set
				{
					float z = value.z;
					this.<thighRelativeToPelvis>k__BackingField.z = z;
				}
			}

			// Token: 0x06002A00 RID: 10752 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A00")]
			[Address(RVA = "0x16A5B60", Offset = "0x16A4B60", VA = "0x1816A5B60", Slot = "4")]
			protected override void OnRead(Vector3[] positions, Quaternion[] rotations, bool hasChest, bool hasNeck, bool hasShoulders, bool hasToes, int rootIndex, int index)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A01 RID: 10753 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A01")]
			[Address(RVA = "0x16A64B0", Offset = "0x16A54B0", VA = "0x1816A64B0", Slot = "5")]
			public override void PreSolve()
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A02 RID: 10754 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A02")]
			[Address(RVA = "0x16A4370", Offset = "0x16A3370", VA = "0x1816A4370", Slot = "7")]
			public override void ApplyOffsets()
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A03 RID: 10755 RVA: 0x0005E2A4 File Offset: 0x0005C4A4
			[Token(Token = "0x6002A03")]
			[Address(RVA = "0x16A4CA0", Offset = "0x16A3CA0", VA = "0x1816A4CA0")]
			private void ApplyPositionOffset(Vector3 offset, float weight)
			{
				if (0 < (int)weight)
				{
					float z = this.footPosition.z;
					this.footPosition.z = z;
					float z2 = this.<position>k__BackingField.z;
					this.<position>k__BackingField.z = z2;
				}
			}

			// Token: 0x06002A04 RID: 10756 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A04")]
			[Address(RVA = "0x16A4D90", Offset = "0x16A3D90", VA = "0x1816A4D90")]
			private void ApplyRotationOffset(Quaternion offset, float weight)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A05 RID: 10757 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A05")]
			[Address(RVA = "0x16A7FC0", Offset = "0x16A6FC0", VA = "0x1816A7FC0")]
			public void Solve()
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A06 RID: 10758 RVA: 0x0005E2E8 File Offset: 0x0005C4E8
			[Token(Token = "0x6002A06")]
			[Address(RVA = "0x16A8500", Offset = "0x16A7500", VA = "0x1816A8500", Slot = "6")]
			public override void Write(ref Vector3[] solvedPositions, ref Quaternion[] solvedRotations)
			{
				IKSolverVR.VirtualBone[] array = this.bones;
				int index = this.index;
				IKSolverVR.VirtualBone virtualBone = array[0];
				array += array;
				IKSolverVR.VirtualBone virtualBone2 = this.bones[1];
				int num = this.index;
				num++;
				num += 2;
				num += num;
				IKSolverVR.VirtualBone virtualBone3 = this.bones[2];
				int num2 = this.index;
				num2 += 2;
				num2 += 2;
				num2 += num2;
				if (this.<hasToes>k__BackingField)
				{
					IKSolverVR.VirtualBone[] array2 = this.bones;
					IKSolverVR.VirtualBone virtualBone4 = array2[3];
					array2 += array2;
				}
			}

			// Token: 0x06002A07 RID: 10759 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A07")]
			[Address(RVA = "0x16A7940", Offset = "0x16A6940", VA = "0x1816A7940", Slot = "8")]
			public override void ResetOffsets()
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A08 RID: 10760 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A08")]
			[Address(RVA = "0x16A86D0", Offset = "0x16A76D0", VA = "0x1816A86D0")]
			public Leg()
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x0400335C RID: 13148
			[FieldOffset(Offset = "0x48")]
			[Token(Token = "0x400335C")]
			[Tooltip("The toe/foot target.")]
			public Transform target;

			// Token: 0x0400335D RID: 13149
			[FieldOffset(Offset = "0x50")]
			[Token(Token = "0x400335D")]
			[Tooltip("The knee will be bent towards this Transform if 'Bend Goal Weight' > 0.")]
			public Transform bendGoal;

			// Token: 0x0400335E RID: 13150
			[FieldOffset(Offset = "0x58")]
			[Token(Token = "0x400335E")]
			[Range(0f, 1f)]
			[Tooltip("Positional weight of the toe/foot target.")]
			public float positionWeight;

			// Token: 0x0400335F RID: 13151
			[FieldOffset(Offset = "0x5C")]
			[Token(Token = "0x400335F")]
			[Range(0f, 1f)]
			[Tooltip("Rotational weight of the toe/foot target.")]
			public float rotationWeight;

			// Token: 0x04003360 RID: 13152
			[FieldOffset(Offset = "0x60")]
			[Token(Token = "0x4003360")]
			[Tooltip("If greater than 0, will bend the knee towards the 'Bend Goal' Transform.")]
			[Range(0f, 1f)]
			public float bendGoalWeight;

			// Token: 0x04003361 RID: 13153
			[FieldOffset(Offset = "0x64")]
			[Token(Token = "0x4003361")]
			[Range(-180f, 180f)]
			[Tooltip("Angular offset of the knee bending direction.")]
			public float swivelOffset;

			// Token: 0x04003362 RID: 13154
			[FieldOffset(Offset = "0x68")]
			[Token(Token = "0x4003362")]
			[HideInInspector]
			[NonSerialized]
			public Vector3 IKPosition;

			// Token: 0x04003363 RID: 13155
			[FieldOffset(Offset = "0x74")]
			[Token(Token = "0x4003363")]
			[HideInInspector]
			[NonSerialized]
			public Quaternion IKRotation;

			// Token: 0x04003364 RID: 13156
			[FieldOffset(Offset = "0x84")]
			[Token(Token = "0x4003364")]
			[HideInInspector]
			[NonSerialized]
			public Vector3 footPositionOffset;

			// Token: 0x04003365 RID: 13157
			[FieldOffset(Offset = "0x90")]
			[Token(Token = "0x4003365")]
			[HideInInspector]
			[NonSerialized]
			public Vector3 heelPositionOffset;

			// Token: 0x04003366 RID: 13158
			[FieldOffset(Offset = "0x9C")]
			[Token(Token = "0x4003366")]
			[HideInInspector]
			[NonSerialized]
			public Quaternion footRotationOffset;

			// Token: 0x04003367 RID: 13159
			[FieldOffset(Offset = "0xAC")]
			[Token(Token = "0x4003367")]
			[HideInInspector]
			[NonSerialized]
			public float currentMag;

			// Token: 0x0400336C RID: 13164
			[FieldOffset(Offset = "0xDC")]
			[Token(Token = "0x400336C")]
			private Vector3 footPosition;

			// Token: 0x0400336D RID: 13165
			[FieldOffset(Offset = "0xE8")]
			[Token(Token = "0x400336D")]
			private Quaternion footRotation;

			// Token: 0x0400336E RID: 13166
			[FieldOffset(Offset = "0xF8")]
			[Token(Token = "0x400336E")]
			private Vector3 bendNormal;

			// Token: 0x0400336F RID: 13167
			[FieldOffset(Offset = "0x104")]
			[Token(Token = "0x400336F")]
			private Quaternion calfRelToThigh;
		}

		// Token: 0x02000497 RID: 1175
		[Token(Token = "0x2000497")]
		[Serializable]
		public class Locomotion
		{
			// Token: 0x17000291 RID: 657
			// (get) Token: 0x06002A09 RID: 10761 RVA: 0x000020D3 File Offset: 0x000002D3
			// (set) Token: 0x06002A0A RID: 10762 RVA: 0x0005E388 File Offset: 0x0005C588
			[Token(Token = "0x17000291")]
			public Vector3 centerOfMass
			{
				[Token(Token = "0x6002A09")]
				[Address(RVA = "0x16ABFE0", Offset = "0x16AAFE0", VA = "0x1816ABFE0")]
				[CompilerGenerated]
				get
				{
					throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
				}
				[Token(Token = "0x6002A0A")]
				[Address(RVA = "0x16AC160", Offset = "0x16AB160", VA = "0x1816AC160")]
				[CompilerGenerated]
				private set
				{
					float z = value.z;
					this.<centerOfMass>k__BackingField.z = z;
				}
			}

			// Token: 0x06002A0B RID: 10763 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A0B")]
			[Address(RVA = "0x16A9460", Offset = "0x16A8460", VA = "0x1816A9460")]
			public void Initiate(Vector3[] positions, Quaternion[] rotations, bool hasToes)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A0C RID: 10764 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A0C")]
			[Address(RVA = "0x16A99F0", Offset = "0x16A89F0", VA = "0x1816A99F0")]
			public void Reset(Vector3[] positions, Quaternion[] rotations)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A0D RID: 10765 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A0D")]
			[Address(RVA = "0x16A8C30", Offset = "0x16A7C30", VA = "0x1816A8C30")]
			public void AddDeltaRotation(Quaternion delta, Vector3 pivot)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A0E RID: 10766 RVA: 0x0005E3A8 File Offset: 0x0005C5A8
			[Token(Token = "0x6002A0E")]
			[Address(RVA = "0x16A8A70", Offset = "0x16A7A70", VA = "0x1816A8A70")]
			public void AddDeltaPosition(Vector3 delta)
			{
				float z = delta.z;
				IKSolverVR.Footstep[] array = this.footsteps;
				int num = 0;
				this.lastComPosition.z = z;
				int length = array.Length;
				if (num < length)
				{
					IKSolverVR.Footstep footstep = array[num];
					float z2 = delta.z;
					footstep.position.z = z2;
					float z3 = delta.z;
					footstep.stepFrom.z = z3;
					float z4 = delta.z;
					num++;
					footstep.stepTo.z = z4;
				}
			}

			// Token: 0x06002A0F RID: 10767 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A0F")]
			[Address(RVA = "0x16A9E10", Offset = "0x16A8E10", VA = "0x1816A9E10")]
			public void Solve(IKSolverVR.VirtualBone rootBone, IKSolverVR.Spine spine, IKSolverVR.Leg leftLeg, IKSolverVR.Leg rightLeg, IKSolverVR.Arm leftArm, IKSolverVR.Arm rightArm, int supportLegIndex, out Vector3 leftFootPosition, out Vector3 rightFootPosition, out Quaternion leftFootRotation, out Quaternion rightFootRotation, out float leftFootOffset, out float rightFootOffset, out float leftHeelOffset, out float rightHeelOffset)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x17000292 RID: 658
			// (get) Token: 0x06002A10 RID: 10768 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x17000292")]
			public Vector3 leftFootstepPosition
			{
				[Token(Token = "0x6002A10")]
				[Address(RVA = "0x16AC000", Offset = "0x16AB000", VA = "0x1816AC000")]
				get
				{
					throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
				}
			}

			// Token: 0x17000293 RID: 659
			// (get) Token: 0x06002A11 RID: 10769 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x17000293")]
			public Vector3 rightFootstepPosition
			{
				[Token(Token = "0x6002A11")]
				[Address(RVA = "0x16AC0B0", Offset = "0x16AB0B0", VA = "0x1816AC0B0")]
				get
				{
					throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
				}
			}

			// Token: 0x17000294 RID: 660
			// (get) Token: 0x06002A12 RID: 10770 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x17000294")]
			public Quaternion leftFootstepRotation
			{
				[Token(Token = "0x6002A12")]
				[Address(RVA = "0x16AC060", Offset = "0x16AB060", VA = "0x1816AC060")]
				get
				{
					throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
				}
			}

			// Token: 0x17000295 RID: 661
			// (get) Token: 0x06002A13 RID: 10771 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x17000295")]
			public Quaternion rightFootstepRotation
			{
				[Token(Token = "0x6002A13")]
				[Address(RVA = "0x16AC110", Offset = "0x16AB110", VA = "0x1816AC110")]
				get
				{
					throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
				}
			}

			// Token: 0x06002A14 RID: 10772 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A14")]
			[Address(RVA = "0x16ABCD0", Offset = "0x16AACD0", VA = "0x1816ABCD0")]
			private bool StepBlocked(Vector3 fromPosition, Vector3 toPosition, Vector3 rootPosition)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A15 RID: 10773 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A15")]
			[Address(RVA = "0x16A91F0", Offset = "0x16A81F0", VA = "0x1816A91F0")]
			private bool CanStep()
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A16 RID: 10774 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A16")]
			[Address(RVA = "0x16A9270", Offset = "0x16A8270", VA = "0x1816A9270")]
			private static bool GetLineSphereCollision(Vector3 lineStart, Vector3 lineEnd, Vector3 sphereCenter, float sphereRadius)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A17 RID: 10775 RVA: 0x0005E434 File Offset: 0x0005C634
			[Token(Token = "0x6002A17")]
			[Address(RVA = "0x16ABEB0", Offset = "0x16AAEB0", VA = "0x1816ABEB0")]
			public Locomotion()
			{
				UnityEvent unityEvent = new UnityEvent();
				this.onLeftFootstep = unityEvent;
				UnityEvent unityEvent2 = new UnityEvent();
				this.onRightFootstep = unityEvent2;
				IKSolverVR.Footstep[] array = new IKSolverVR.Footstep[0];
				this.footsteps = array;
				base..ctor();
			}

			// Token: 0x04003370 RID: 13168
			[FieldOffset(Offset = "0x10")]
			[Token(Token = "0x4003370")]
			[Range(0f, 1f)]
			[Tooltip("Used for blending in/out of procedural locomotion.")]
			public float weight = 1f;

			// Token: 0x04003371 RID: 13169
			[FieldOffset(Offset = "0x14")]
			[Token(Token = "0x4003371")]
			[Tooltip("Tries to maintain this distance between the legs.")]
			public float footDistance = 0.3f;

			// Token: 0x04003372 RID: 13170
			[FieldOffset(Offset = "0x18")]
			[Token(Token = "0x4003372")]
			[Tooltip("Makes a step only if step target position is at least this far from the current footstep or the foot does not reach the current footstep anymore or footstep angle is past the 'Angle Threshold'.")]
			public float stepThreshold = 0.4f;

			// Token: 0x04003373 RID: 13171
			[FieldOffset(Offset = "0x1C")]
			[Token(Token = "0x4003373")]
			[Tooltip("Makes a step only if step target position is at least 'Step Threshold' far from the current footstep or the foot does not reach the current footstep anymore or footstep angle is past this value.")]
			public float angleThreshold = 60f;

			// Token: 0x04003374 RID: 13172
			[FieldOffset(Offset = "0x20")]
			[Token(Token = "0x4003374")]
			[Tooltip("Multiplies angle of the center of mass - center of pressure vector. Larger value makes the character step sooner if losing balance.")]
			public float comAngleMlp = 1f;

			// Token: 0x04003375 RID: 13173
			[FieldOffset(Offset = "0x24")]
			[Token(Token = "0x4003375")]
			[Tooltip("Maximum magnitude of head/hand target velocity used in prediction.")]
			public float maxVelocity = 0.4f;

			// Token: 0x04003376 RID: 13174
			[FieldOffset(Offset = "0x28")]
			[Token(Token = "0x4003376")]
			[Tooltip("The amount of head/hand target velocity prediction.")]
			public float velocityFactor = 0.4f;

			// Token: 0x04003377 RID: 13175
			[FieldOffset(Offset = "0x2C")]
			[Token(Token = "0x4003377")]
			[Tooltip("How much can a leg be extended before it is forced to step to another position? 1 means fully stretched.")]
			[Range(0.9f, 1f)]
			public float maxLegStretch = 1f;

			// Token: 0x04003378 RID: 13176
			[FieldOffset(Offset = "0x30")]
			[Token(Token = "0x4003378")]
			[Tooltip("The speed of lerping the root of the character towards the horizontal mid-point of the footsteps.")]
			public float rootSpeed = 20f;

			// Token: 0x04003379 RID: 13177
			[FieldOffset(Offset = "0x34")]
			[Token(Token = "0x4003379")]
			[Tooltip("The speed of steps.")]
			public float stepSpeed = 3f;

			// Token: 0x0400337A RID: 13178
			[FieldOffset(Offset = "0x38")]
			[Token(Token = "0x400337A")]
			[Tooltip("The height of the foot by normalized step progress (0 - 1).")]
			public AnimationCurve stepHeight;

			// Token: 0x0400337B RID: 13179
			[FieldOffset(Offset = "0x40")]
			[Token(Token = "0x400337B")]
			[Tooltip("The height offset of the heel by normalized step progress (0 - 1).")]
			public AnimationCurve heelHeight;

			// Token: 0x0400337C RID: 13180
			[FieldOffset(Offset = "0x48")]
			[Token(Token = "0x400337C")]
			[Range(0f, 180f)]
			[Tooltip("Rotates the foot while the leg is not stepping to relax the twist rotation of the leg if ideal rotation is past this angle.")]
			public float relaxLegTwistMinAngle = 20f;

			// Token: 0x0400337D RID: 13181
			[FieldOffset(Offset = "0x4C")]
			[Token(Token = "0x400337D")]
			[Tooltip("The speed of rotating the foot while the leg is not stepping to relax the twist rotation of the leg.")]
			public float relaxLegTwistSpeed = 400f;

			// Token: 0x0400337E RID: 13182
			[FieldOffset(Offset = "0x50")]
			[Token(Token = "0x400337E")]
			[Tooltip("Interpolation mode of the step.")]
			public InterpolationMode stepInterpolation = (InterpolationMode)((ulong)3L);

			// Token: 0x0400337F RID: 13183
			[FieldOffset(Offset = "0x54")]
			[Token(Token = "0x400337F")]
			[Tooltip("Offset for the approximated center of mass.")]
			public Vector3 offset;

			// Token: 0x04003380 RID: 13184
			[FieldOffset(Offset = "0x60")]
			[Token(Token = "0x4003380")]
			[HideInInspector]
			public bool blockingEnabled;

			// Token: 0x04003381 RID: 13185
			[FieldOffset(Offset = "0x64")]
			[Token(Token = "0x4003381")]
			[HideInInspector]
			public LayerMask blockingLayers;

			// Token: 0x04003382 RID: 13186
			[FieldOffset(Offset = "0x68")]
			[Token(Token = "0x4003382")]
			[HideInInspector]
			public float raycastRadius = 0.2f;

			// Token: 0x04003383 RID: 13187
			[FieldOffset(Offset = "0x6C")]
			[Token(Token = "0x4003383")]
			[HideInInspector]
			public float raycastHeight = 0.2f;

			// Token: 0x04003384 RID: 13188
			[FieldOffset(Offset = "0x70")]
			[Token(Token = "0x4003384")]
			[Tooltip("Called when the left foot has finished a step.")]
			public UnityEvent onLeftFootstep;

			// Token: 0x04003385 RID: 13189
			[FieldOffset(Offset = "0x78")]
			[Token(Token = "0x4003385")]
			[Tooltip("Called when the right foot has finished a step")]
			public UnityEvent onRightFootstep;

			// Token: 0x04003387 RID: 13191
			[FieldOffset(Offset = "0x90")]
			[Token(Token = "0x4003387")]
			private IKSolverVR.Footstep[] footsteps;

			// Token: 0x04003388 RID: 13192
			[FieldOffset(Offset = "0x98")]
			[Token(Token = "0x4003388")]
			private Vector3 lastComPosition;

			// Token: 0x04003389 RID: 13193
			[FieldOffset(Offset = "0xA4")]
			[Token(Token = "0x4003389")]
			private Vector3 comVelocity;

			// Token: 0x0400338A RID: 13194
			[FieldOffset(Offset = "0xB0")]
			[Token(Token = "0x400338A")]
			private int leftFootIndex;

			// Token: 0x0400338B RID: 13195
			[FieldOffset(Offset = "0xB4")]
			[Token(Token = "0x400338B")]
			private int rightFootIndex;
		}

		// Token: 0x02000498 RID: 1176
		[Token(Token = "0x2000498")]
		[Serializable]
		public class Spine : IKSolverVR.BodyPart
		{
			// Token: 0x17000296 RID: 662
			// (get) Token: 0x06002A18 RID: 10776 RVA: 0x0005E514 File Offset: 0x0005C714
			[Token(Token = "0x17000296")]
			public IKSolverVR.VirtualBone pelvis
			{
				[Token(Token = "0x6002A18")]
				[Address(RVA = "0x16B20B0", Offset = "0x16B10B0", VA = "0x1816B20B0")]
				get
				{
					IKSolverVR.VirtualBone[] bones = this.bones;
					int num = this.pelvisIndex;
					return bones[num];
				}
			}

			// Token: 0x17000297 RID: 663
			// (get) Token: 0x06002A19 RID: 10777 RVA: 0x0005E53C File Offset: 0x0005C73C
			[Token(Token = "0x17000297")]
			public IKSolverVR.VirtualBone firstSpineBone
			{
				[Token(Token = "0x6002A19")]
				[Address(RVA = "0x16B1FF0", Offset = "0x16B0FF0", VA = "0x1816B1FF0")]
				get
				{
					IKSolverVR.VirtualBone[] bones = this.bones;
					int num = this.spineIndex;
					return bones[num];
				}
			}

			// Token: 0x17000298 RID: 664
			// (get) Token: 0x06002A1A RID: 10778 RVA: 0x0005E564 File Offset: 0x0005C764
			[Token(Token = "0x17000298")]
			public IKSolverVR.VirtualBone chest
			{
				[Token(Token = "0x6002A1A")]
				[Address(RVA = "0x16B1F80", Offset = "0x16B0F80", VA = "0x1816B1F80")]
				get
				{
					IKSolverVR.VirtualBone[] bones = this.bones;
					if (!this.hasChest)
					{
						int num = this.spineIndex;
					}
					int num2 = this.chestIndex;
					return bones[num2];
				}
			}

			// Token: 0x17000299 RID: 665
			// (get) Token: 0x06002A1B RID: 10779 RVA: 0x0005E59C File Offset: 0x0005C79C
			[Token(Token = "0x17000299")]
			private IKSolverVR.VirtualBone neck
			{
				[Token(Token = "0x6002A1B")]
				[Address(RVA = "0x16B2070", Offset = "0x16B1070", VA = "0x1816B2070")]
				get
				{
					IKSolverVR.VirtualBone[] bones = this.bones;
					int num = this.neckIndex;
					return bones[num];
				}
			}

			// Token: 0x1700029A RID: 666
			// (get) Token: 0x06002A1C RID: 10780 RVA: 0x0005E5C4 File Offset: 0x0005C7C4
			[Token(Token = "0x1700029A")]
			public IKSolverVR.VirtualBone head
			{
				[Token(Token = "0x6002A1C")]
				[Address(RVA = "0x16B2030", Offset = "0x16B1030", VA = "0x1816B2030")]
				get
				{
					IKSolverVR.VirtualBone[] bones = this.bones;
					int num = this.headIndex;
					return bones[num];
				}
			}

			// Token: 0x1700029B RID: 667
			// (get) Token: 0x06002A1D RID: 10781 RVA: 0x000020D3 File Offset: 0x000002D3
			// (set) Token: 0x06002A1E RID: 10782 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x1700029B")]
			public Quaternion anchorRotation
			{
				[Token(Token = "0x6002A1D")]
				[Address(RVA = "0x16B1F70", Offset = "0x16B0F70", VA = "0x1816B1F70")]
				[CompilerGenerated]
				get
				{
					throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
				}
				[Token(Token = "0x6002A1E")]
				[Address(RVA = "0x16B20F0", Offset = "0x16B10F0", VA = "0x1816B20F0")]
				[CompilerGenerated]
				private set
				{
					throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
				}
			}

			// Token: 0x06002A1F RID: 10783 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A1F")]
			[Address(RVA = "0x16AF3E0", Offset = "0x16AE3E0", VA = "0x1816AF3E0", Slot = "4")]
			protected override void OnRead(Vector3[] positions, Quaternion[] rotations, bool hasChest, bool hasNeck, bool hasShoulders, bool hasToes, int rootIndex, int index)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A20 RID: 10784 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A20")]
			[Address(RVA = "0x16B0190", Offset = "0x16AF190", VA = "0x1816B0190", Slot = "5")]
			public override void PreSolve()
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A21 RID: 10785 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A21")]
			[Address(RVA = "0x16AE0B0", Offset = "0x16AD0B0", VA = "0x1816AE0B0", Slot = "7")]
			public override void ApplyOffsets()
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A22 RID: 10786 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A22")]
			[Address(RVA = "0x16AEC40", Offset = "0x16ADC40", VA = "0x1816AEC40")]
			private void CalculateChestTargetRotation(IKSolverVR.VirtualBone rootBone, IKSolverVR.Arm[] arms)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A23 RID: 10787 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A23")]
			[Address(RVA = "0x16B0950", Offset = "0x16AF950", VA = "0x1816B0950")]
			public void Solve(IKSolverVR.VirtualBone rootBone, IKSolverVR.Leg[] legs, IKSolverVR.Arm[] arms)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A24 RID: 10788 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A24")]
			[Address(RVA = "0x16B04F0", Offset = "0x16AF4F0", VA = "0x1816B04F0")]
			private void SolvePelvis()
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A25 RID: 10789 RVA: 0x0005E5EC File Offset: 0x0005C7EC
			[Token(Token = "0x6002A25")]
			[Address(RVA = "0x16B1AC0", Offset = "0x16B0AC0", VA = "0x1816B1AC0", Slot = "6")]
			public override void Write(ref Vector3[] solvedPositions, ref Quaternion[] solvedRotations)
			{
				int index = this.index;
				IKSolverVR.VirtualBone virtualBone = this.bones[0];
				IKSolverVR.VirtualBone[] array = this.bones;
				int index2 = this.index;
				IKSolverVR.VirtualBone virtualBone2 = array[0];
				array += array;
				IKSolverVR.VirtualBone virtualBone3 = this.bones[1];
				int num = this.index;
				num++;
				num += 2;
				num += num;
				if (this.hasChest)
				{
					IKSolverVR.VirtualBone[] bones = this.bones;
					int num2 = this.chestIndex;
					IKSolverVR.VirtualBone virtualBone4 = bones[num2];
					int num3 = this.index;
					num3 += 2;
					num3 += 2;
					num3 += num3;
				}
				if (this.hasNeck)
				{
					IKSolverVR.VirtualBone[] bones2 = this.bones;
					int num4 = this.neckIndex;
					IKSolverVR.VirtualBone virtualBone5 = bones2[num4];
					int num5 = this.index;
					num5 += 3;
					num5 += 2;
					num5 += num5;
				}
				IKSolverVR.VirtualBone[] bones3 = this.bones;
				int num6 = this.headIndex;
				IKSolverVR.VirtualBone virtualBone6 = bones3[num6];
				num6 += 2;
				num6 += num6;
			}

			// Token: 0x06002A26 RID: 10790 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A26")]
			[Address(RVA = "0x16B0440", Offset = "0x16AF440", VA = "0x1816B0440", Slot = "8")]
			public override void ResetOffsets()
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A27 RID: 10791 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A27")]
			[Address(RVA = "0x16ADC10", Offset = "0x16ACC10", VA = "0x1816ADC10")]
			private void AdjustChestByHands(ref Quaternion chestTargetRotation, IKSolverVR.Arm[] arms)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A28 RID: 10792 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A28")]
			[Address(RVA = "0x16AEE20", Offset = "0x16ADE20", VA = "0x1816AEE20")]
			public void InverseTranslateToHead(IKSolverVR.Leg[] legs, bool limited, bool useCurrentLegMag, Vector3 offset, float w)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A29 RID: 10793 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A29")]
			[Address(RVA = "0x16B1460", Offset = "0x16B0460", VA = "0x1816B1460")]
			private void TranslatePelvis(IKSolverVR.Leg[] legs, Vector3 deltaPosition, Quaternion deltaRotation)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A2A RID: 10794 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A2A")]
			[Address(RVA = "0x16AF060", Offset = "0x16AE060", VA = "0x1816AF060")]
			private Vector3 LimitPelvisPosition(IKSolverVR.Leg[] legs, Vector3 pelvisPosition, bool useCurrentLegMag, int it = 2)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A2B RID: 10795 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A2B")]
			[Address(RVA = "0x16AE700", Offset = "0x16AD700", VA = "0x1816AE700")]
			private void Bend(IKSolverVR.VirtualBone[] bones, int firstIndex, int lastIndex, Quaternion targetRotation, float clampWeight, bool uniformWeight, float w)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A2C RID: 10796 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A2C")]
			[Address(RVA = "0x16AE990", Offset = "0x16AD990", VA = "0x1816AE990")]
			private void Bend(IKSolverVR.VirtualBone[] bones, int firstIndex, int lastIndex, Quaternion targetRotation, Quaternion rotationOffset, float clampWeight, bool uniformWeight, float w)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A2D RID: 10797 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A2D")]
			[Address(RVA = "0x16B1D90", Offset = "0x16B0D90", VA = "0x1816B1D90")]
			public Spine()
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x0400338C RID: 13196
			[FieldOffset(Offset = "0x48")]
			[Token(Token = "0x400338C")]
			[Tooltip("The head target.")]
			public Transform headTarget;

			// Token: 0x0400338D RID: 13197
			[FieldOffset(Offset = "0x50")]
			[Token(Token = "0x400338D")]
			[Tooltip("The pelvis target, useful with seated rigs.")]
			public Transform pelvisTarget;

			// Token: 0x0400338E RID: 13198
			[FieldOffset(Offset = "0x58")]
			[Token(Token = "0x400338E")]
			[Range(0f, 1f)]
			[Tooltip("Positional weight of the head target.")]
			public float positionWeight;

			// Token: 0x0400338F RID: 13199
			[FieldOffset(Offset = "0x5C")]
			[Token(Token = "0x400338F")]
			[Tooltip("Rotational weight of the head target.")]
			[Range(0f, 1f)]
			public float rotationWeight;

			// Token: 0x04003390 RID: 13200
			[FieldOffset(Offset = "0x60")]
			[Token(Token = "0x4003390")]
			[Tooltip("Positional weight of the pelvis target.")]
			[Range(0f, 1f)]
			public float pelvisPositionWeight;

			// Token: 0x04003391 RID: 13201
			[FieldOffset(Offset = "0x64")]
			[Token(Token = "0x4003391")]
			[Range(0f, 1f)]
			[Tooltip("Rotational weight of the pelvis target.")]
			public float pelvisRotationWeight;

			// Token: 0x04003392 RID: 13202
			[FieldOffset(Offset = "0x68")]
			[Token(Token = "0x4003392")]
			[Tooltip("If 'Chest Goal Weight' is greater than 0, the chest will be turned towards this Transform.")]
			public Transform chestGoal;

			// Token: 0x04003393 RID: 13203
			[FieldOffset(Offset = "0x70")]
			[Token(Token = "0x4003393")]
			[Tooltip("Rotational weight of the chest target.")]
			[Range(0f, 1f)]
			public float chestGoalWeight;

			// Token: 0x04003394 RID: 13204
			[FieldOffset(Offset = "0x74")]
			[Token(Token = "0x4003394")]
			[Tooltip("Minimum height of the head from the root of the character.")]
			public float minHeadHeight;

			// Token: 0x04003395 RID: 13205
			[FieldOffset(Offset = "0x78")]
			[Token(Token = "0x4003395")]
			[Tooltip("Determines how much the body will follow the position of the head.")]
			[Range(0f, 1f)]
			public float bodyPosStiffness;

			// Token: 0x04003396 RID: 13206
			[FieldOffset(Offset = "0x7C")]
			[Token(Token = "0x4003396")]
			[Range(0f, 1f)]
			[Tooltip("Determines how much the body will follow the rotation of the head.")]
			public float bodyRotStiffness;

			// Token: 0x04003397 RID: 13207
			[FieldOffset(Offset = "0x80")]
			[Token(Token = "0x4003397")]
			[Range(0f, 1f)]
			[FormerlySerializedAs("chestRotationWeight")]
			[Tooltip("Determines how much the chest will rotate to the rotation of the head.")]
			public float neckStiffness;

			// Token: 0x04003398 RID: 13208
			[FieldOffset(Offset = "0x84")]
			[Token(Token = "0x4003398")]
			[Range(0f, 1f)]
			[Tooltip("Clamps chest rotation.")]
			public float chestClampWeight;

			// Token: 0x04003399 RID: 13209
			[FieldOffset(Offset = "0x88")]
			[Token(Token = "0x4003399")]
			[Tooltip("Clamps head rotation.")]
			[Range(0f, 1f)]
			public float headClampWeight;

			// Token: 0x0400339A RID: 13210
			[FieldOffset(Offset = "0x8C")]
			[Token(Token = "0x400339A")]
			[Range(0f, 1f)]
			[Tooltip("How much will the pelvis maintain it's animated position?")]
			public float maintainPelvisPosition;

			// Token: 0x0400339B RID: 13211
			[FieldOffset(Offset = "0x90")]
			[Token(Token = "0x400339B")]
			[Tooltip("Will automatically rotate the root of the character if the head target has turned past this angle.")]
			[Range(0f, 180f)]
			public float maxRootAngle;

			// Token: 0x0400339C RID: 13212
			[FieldOffset(Offset = "0x94")]
			[Token(Token = "0x400339C")]
			[HideInInspector]
			[NonSerialized]
			public Vector3 IKPositionHead;

			// Token: 0x0400339D RID: 13213
			[FieldOffset(Offset = "0xA0")]
			[Token(Token = "0x400339D")]
			[HideInInspector]
			[NonSerialized]
			public Quaternion IKRotationHead;

			// Token: 0x0400339E RID: 13214
			[FieldOffset(Offset = "0xB0")]
			[Token(Token = "0x400339E")]
			[HideInInspector]
			[NonSerialized]
			public Vector3 IKPositionPelvis;

			// Token: 0x0400339F RID: 13215
			[FieldOffset(Offset = "0xBC")]
			[Token(Token = "0x400339F")]
			[HideInInspector]
			[NonSerialized]
			public Quaternion IKRotationPelvis;

			// Token: 0x040033A0 RID: 13216
			[FieldOffset(Offset = "0xCC")]
			[Token(Token = "0x40033A0")]
			[HideInInspector]
			[NonSerialized]
			public Vector3 goalPositionChest;

			// Token: 0x040033A1 RID: 13217
			[FieldOffset(Offset = "0xD8")]
			[Token(Token = "0x40033A1")]
			[HideInInspector]
			[NonSerialized]
			public Vector3 pelvisPositionOffset;

			// Token: 0x040033A2 RID: 13218
			[FieldOffset(Offset = "0xE4")]
			[Token(Token = "0x40033A2")]
			[HideInInspector]
			[NonSerialized]
			public Vector3 chestPositionOffset;

			// Token: 0x040033A3 RID: 13219
			[FieldOffset(Offset = "0xF0")]
			[Token(Token = "0x40033A3")]
			[HideInInspector]
			[NonSerialized]
			public Vector3 headPositionOffset;

			// Token: 0x040033A4 RID: 13220
			[FieldOffset(Offset = "0xFC")]
			[Token(Token = "0x40033A4")]
			[HideInInspector]
			[NonSerialized]
			public Quaternion pelvisRotationOffset;

			// Token: 0x040033A5 RID: 13221
			[FieldOffset(Offset = "0x10C")]
			[Token(Token = "0x40033A5")]
			[HideInInspector]
			[NonSerialized]
			public Quaternion chestRotationOffset;

			// Token: 0x040033A6 RID: 13222
			[FieldOffset(Offset = "0x11C")]
			[Token(Token = "0x40033A6")]
			[HideInInspector]
			[NonSerialized]
			public Quaternion headRotationOffset;

			// Token: 0x040033A7 RID: 13223
			[FieldOffset(Offset = "0x12C")]
			[Token(Token = "0x40033A7")]
			[HideInInspector]
			[NonSerialized]
			public Vector3 faceDirection;

			// Token: 0x040033A8 RID: 13224
			[FieldOffset(Offset = "0x138")]
			[Token(Token = "0x40033A8")]
			[HideInInspector]
			[NonSerialized]
			public Vector3 locomotionHeadPositionOffset;

			// Token: 0x040033A9 RID: 13225
			[FieldOffset(Offset = "0x144")]
			[Token(Token = "0x40033A9")]
			[HideInInspector]
			[NonSerialized]
			public Vector3 headPosition;

			// Token: 0x040033AB RID: 13227
			[FieldOffset(Offset = "0x160")]
			[Token(Token = "0x40033AB")]
			private Quaternion headRotation;

			// Token: 0x040033AC RID: 13228
			[FieldOffset(Offset = "0x170")]
			[Token(Token = "0x40033AC")]
			private Quaternion anchorRelativeToHead;

			// Token: 0x040033AD RID: 13229
			[FieldOffset(Offset = "0x180")]
			[Token(Token = "0x40033AD")]
			private Quaternion pelvisRelativeRotation;

			// Token: 0x040033AE RID: 13230
			[FieldOffset(Offset = "0x190")]
			[Token(Token = "0x40033AE")]
			private Quaternion chestRelativeRotation;

			// Token: 0x040033AF RID: 13231
			[FieldOffset(Offset = "0x1A0")]
			[Token(Token = "0x40033AF")]
			private Vector3 headDeltaPosition;

			// Token: 0x040033B0 RID: 13232
			[FieldOffset(Offset = "0x1AC")]
			[Token(Token = "0x40033B0")]
			private Quaternion pelvisDeltaRotation;

			// Token: 0x040033B1 RID: 13233
			[FieldOffset(Offset = "0x1BC")]
			[Token(Token = "0x40033B1")]
			private Quaternion chestTargetRotation;

			// Token: 0x040033B2 RID: 13234
			[FieldOffset(Offset = "0x1CC")]
			[Token(Token = "0x40033B2")]
			private int pelvisIndex;

			// Token: 0x040033B3 RID: 13235
			[FieldOffset(Offset = "0x1D0")]
			[Token(Token = "0x40033B3")]
			private int spineIndex;

			// Token: 0x040033B4 RID: 13236
			[FieldOffset(Offset = "0x1D4")]
			[Token(Token = "0x40033B4")]
			private int chestIndex;

			// Token: 0x040033B5 RID: 13237
			[FieldOffset(Offset = "0x1D8")]
			[Token(Token = "0x40033B5")]
			private int neckIndex;

			// Token: 0x040033B6 RID: 13238
			[FieldOffset(Offset = "0x1DC")]
			[Token(Token = "0x40033B6")]
			private int headIndex;

			// Token: 0x040033B7 RID: 13239
			[FieldOffset(Offset = "0x1E0")]
			[Token(Token = "0x40033B7")]
			private float length;

			// Token: 0x040033B8 RID: 13240
			[FieldOffset(Offset = "0x1E4")]
			[Token(Token = "0x40033B8")]
			private bool hasChest;

			// Token: 0x040033B9 RID: 13241
			[FieldOffset(Offset = "0x1E5")]
			[Token(Token = "0x40033B9")]
			private bool hasNeck;

			// Token: 0x040033BA RID: 13242
			[FieldOffset(Offset = "0x1E8")]
			[Token(Token = "0x40033BA")]
			private float headHeight;

			// Token: 0x040033BB RID: 13243
			[FieldOffset(Offset = "0x1EC")]
			[Token(Token = "0x40033BB")]
			private float sizeMlp;

			// Token: 0x040033BC RID: 13244
			[FieldOffset(Offset = "0x1F0")]
			[Token(Token = "0x40033BC")]
			private Vector3 chestForward;
		}

		// Token: 0x02000499 RID: 1177
		[Token(Token = "0x2000499")]
		[Serializable]
		public enum PositionOffset
		{
			// Token: 0x040033BE RID: 13246
			[Token(Token = "0x40033BE")]
			Pelvis,
			// Token: 0x040033BF RID: 13247
			[Token(Token = "0x40033BF")]
			Chest,
			// Token: 0x040033C0 RID: 13248
			[Token(Token = "0x40033C0")]
			Head,
			// Token: 0x040033C1 RID: 13249
			[Token(Token = "0x40033C1")]
			LeftHand,
			// Token: 0x040033C2 RID: 13250
			[Token(Token = "0x40033C2")]
			RightHand,
			// Token: 0x040033C3 RID: 13251
			[Token(Token = "0x40033C3")]
			LeftFoot,
			// Token: 0x040033C4 RID: 13252
			[Token(Token = "0x40033C4")]
			RightFoot,
			// Token: 0x040033C5 RID: 13253
			[Token(Token = "0x40033C5")]
			LeftHeel,
			// Token: 0x040033C6 RID: 13254
			[Token(Token = "0x40033C6")]
			RightHeel
		}

		// Token: 0x0200049A RID: 1178
		[Token(Token = "0x200049A")]
		[Serializable]
		public enum RotationOffset
		{
			// Token: 0x040033C8 RID: 13256
			[Token(Token = "0x40033C8")]
			Pelvis,
			// Token: 0x040033C9 RID: 13257
			[Token(Token = "0x40033C9")]
			Chest,
			// Token: 0x040033CA RID: 13258
			[Token(Token = "0x40033CA")]
			Head
		}

		// Token: 0x0200049B RID: 1179
		[Token(Token = "0x200049B")]
		[Serializable]
		public class VirtualBone
		{
			// Token: 0x06002A2E RID: 10798 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A2E")]
			[Address(RVA = "0x16B5250", Offset = "0x16B4250", VA = "0x1816B5250")]
			public VirtualBone(Vector3 position, Quaternion rotation)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A2F RID: 10799 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A2F")]
			[Address(RVA = "0x16B35F0", Offset = "0x16B25F0", VA = "0x1816B35F0")]
			public void Read(Vector3 position, Quaternion rotation)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A30 RID: 10800 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A30")]
			[Address(RVA = "0x16B5000", Offset = "0x16B4000", VA = "0x1816B5000")]
			public static void SwingRotation(IKSolverVR.VirtualBone[] bones, int index, Vector3 swingTarget, float weight = 1f)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A31 RID: 10801 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A31")]
			[Address(RVA = "0x16B3260", Offset = "0x16B2260", VA = "0x1816B3260")]
			public static float PreSolve(ref IKSolverVR.VirtualBone[] bones)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A32 RID: 10802 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A32")]
			[Address(RVA = "0x16B3620", Offset = "0x16B2620", VA = "0x1816B3620")]
			public static void RotateAroundPoint(IKSolverVR.VirtualBone[] bones, int index, Vector3 point, Quaternion rotation)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A33 RID: 10803 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A33")]
			[Address(RVA = "0x16B3830", Offset = "0x16B2830", VA = "0x1816B3830")]
			public static void RotateBy(IKSolverVR.VirtualBone[] bones, int index, Quaternion rotation)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A34 RID: 10804 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A34")]
			[Address(RVA = "0x16B3A50", Offset = "0x16B2A50", VA = "0x1816B3A50")]
			public static void RotateBy(IKSolverVR.VirtualBone[] bones, Quaternion rotation)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A35 RID: 10805 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A35")]
			[Address(RVA = "0x16B3C70", Offset = "0x16B2C70", VA = "0x1816B3C70")]
			public static void RotateTo(IKSolverVR.VirtualBone[] bones, int index, Quaternion rotation)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A36 RID: 10806 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A36")]
			[Address(RVA = "0x16B4640", Offset = "0x16B3640", VA = "0x1816B4640")]
			public static void SolveTrigonometric(IKSolverVR.VirtualBone[] bones, int first, int second, int third, Vector3 targetPosition, Vector3 bendNormal, float weight)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A37 RID: 10807 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A37")]
			[Address(RVA = "0x16B3090", Offset = "0x16B2090", VA = "0x1816B3090")]
			private static Vector3 GetDirectionToBendPoint(Vector3 direction, float directionMag, Vector3 bendDirection, float sqrMag1, float sqrMag2)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A38 RID: 10808 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A38")]
			[Address(RVA = "0x16B4120", Offset = "0x16B3120", VA = "0x1816B4120")]
			public static void SolveFABRIK(IKSolverVR.VirtualBone[] bones, Vector3 startPosition, Vector3 targetPosition, float weight, float minNormalizedTargetDistance, int iterations, float length)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x06002A39 RID: 10809 RVA: 0x0005E700 File Offset: 0x0005C900
			[Token(Token = "0x6002A39")]
			[Address(RVA = "0x16B4000", Offset = "0x16B3000", VA = "0x1816B4000")]
			private static Vector3 SolveFABRIKJoint(Vector3 pos1, Vector3 pos2, float length)
			{
				Vector3 normalized = pos1.normalized;
				pos1.z = normalized;
				return pos1;
			}

			// Token: 0x06002A3A RID: 10810 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x6002A3A")]
			[Address(RVA = "0x16B3D50", Offset = "0x16B2D50", VA = "0x1816B3D50")]
			public static void SolveCCD(IKSolverVR.VirtualBone[] bones, Vector3 targetPosition, float weight, int iterations)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x040033CB RID: 13259
			[FieldOffset(Offset = "0x10")]
			[Token(Token = "0x40033CB")]
			public Vector3 readPosition;

			// Token: 0x040033CC RID: 13260
			[FieldOffset(Offset = "0x1C")]
			[Token(Token = "0x40033CC")]
			public Quaternion readRotation;

			// Token: 0x040033CD RID: 13261
			[FieldOffset(Offset = "0x2C")]
			[Token(Token = "0x40033CD")]
			public Vector3 solverPosition;

			// Token: 0x040033CE RID: 13262
			[FieldOffset(Offset = "0x38")]
			[Token(Token = "0x40033CE")]
			public Quaternion solverRotation;

			// Token: 0x040033CF RID: 13263
			[FieldOffset(Offset = "0x48")]
			[Token(Token = "0x40033CF")]
			public float length;

			// Token: 0x040033D0 RID: 13264
			[FieldOffset(Offset = "0x4C")]
			[Token(Token = "0x40033D0")]
			public float sqrMag;

			// Token: 0x040033D1 RID: 13265
			[FieldOffset(Offset = "0x50")]
			[Token(Token = "0x40033D1")]
			public Vector3 axis;
		}
	}
}
