namespace PixelSecurity.Modules.SpeedHackProtector
{

	// [TypeInfo RVA: 0x0]
	public class SpeedhackProtector : Object
	{
		private PixelSecurity.Modules.SpeedHackProtector.SpeedhackProtector.ModuleOptions _options; // 0x10
		private const long TICKS_PER_SECOND; // 0x0
		private const int THRESHOLD; // 0x0
		private readonly float _interval; // 0x18
		private readonly byte _maxFalsePositives; // 0x1C
		private readonly int _coolDown; // 0x20
		private byte _currentFalsePositives; // 0x24
		private int _currentCooldownShots; // 0x28
		private long _ticksOnStart; // 0x30
		private long _vulnerableTicksOnStart; // 0x38
		private long _prevTicks; // 0x40
		private long _prevIntervalTicks; // 0x48

		// RVA: 0x32985CC VA: 0x78189835CC
		public PixelSecurity.Modules.SpeedHackProtector.SpeedhackProtector.ModuleOptions get_Options();
		/*
		 *   return *(undefined8 *)(param_1 + 0x10);
		 */
		// RVA: 0x32985D4 VA: 0x78189835D4
		public void .ctor(PixelSecurity.Modules.SpeedHackProtector.SpeedhackProtector.ModuleOptions options);
		/*
		 *   int iVar1;
		 *   byte bVar2;
		 *   undefined *puVar3;
		 *   SpeedhackProtector *methodInfo;
		 *   undefined8 uVar4;
		 *   undefined8 *puVar5;
		 *   void *methodInfo_00;
		 *   void *pvVar6;
		 *   long lVar7;
		 *   ulong uVar8;
		 *   int *piVar9;
		 *   long *plVar10;
		 *
		 *   if ((bRam000000000754ad97 & 1) == 0) {
		 *     func_0x031fdc8c(PTR_DAT_070c64b0);
		 *     bRam000000000754ad97 = 1;
		 *   }
		 *   param_1->interval = 1.0;
		 *   param_1->maxFalsePositives = 3;
		 *   param_1->coolDown = 0x1e;
		 *   System.Object..ctor(param_1);
		 *   if (param_2 == null) {
		 *     param_2 = (void *)func_0x031fdf24(*(undefined8 *)PTR_DAT_070c64b0);
		 *     *(undefined4 *)((long)param_2 + 0x10) = 0x3f800000;
		 *     *(undefined1 *)((long)param_2 + 0x14) = 3;
		 *     *(undefined4 *)((long)param_2 + 0x18) = 0x1e;
		 *     System.Object..ctor(param_2);
		 *   }
		 *   param_1->options = param_2;
		 *   func_0x031fdc38(&param_1->options,param_2);
		 *   pvVar6 = param_1->options;
		 *   if (pvVar6 == null) {
		 *     IL2CPP.ThrowNullReferenceException();
		 *   }
		 *   bVar2 = *(byte *)((long)pvVar6 + 0x14);
		 *   iVar1 = *(int *)((long)pvVar6 + 0x18);
		 *   param_1->interval = *(float *)((long)pvVar6 + 0x10);
		 *   param_1->maxFalsePositives = bVar2;
		 *   param_1->coolDown = iVar1;
		 *   methodInfo = param_1;
		 *   if ((bRam000000000754ad98 & 1) == 0) {
		 *     func_0x031fdc8c(PTR_DAT_070c63a0);
		 *     func_0x031fdc8c(PTR_DAT_070c63a8);
		 *     methodInfo = (SpeedhackProtector *)func_0x031fdc8c(PTR_DAT_070c64b8);
		 *     bRam000000000754ad98 = 1;
		 *   }
		 *   pvVar6 = PixelGuard.get_Instance();
		 *   puVar3 = PTR_DAT_070c64b8;
		 *   if (pvVar6 != null) {
		 *     plVar10 = *(long **)((long)pvVar6 + 0x30);
		 *     uVar4 = func_0x031fdf24(*(undefined8 *)PTR_DAT_070c63a0);
		 *     func_0x04d12f3c(uVar4,param_1,*(undefined8 *)puVar3,0);
		 *     if (plVar10 != null) {
		 *       lVar7 = *plVar10;
		 *       uVar8 = (ulong)*(ushort *)(lVar7 + 0x12e);
		 *       if (uVar8 != 0) {
		 *         piVar9 = (int *)(*(long *)(lVar7 + 0xb0) + 8);
		 *         do {
		 *           if (*(long *)(piVar9 + -2) == *(long *)PTR_DAT_070c63a8) {
		 *             puVar5 = (undefined8 *)(lVar7 + (long)*piVar9 * 0x10 + 0x138);
		 *             goto LAB_03398794;
		 *           }
		 *           uVar8 = uVar8 - 1;
		 *           piVar9 = piVar9 + 4;
		 *         } while (uVar8 != 0);
		 *       }
		 *       puVar5 = (undefined8 *)func_0x03237558(plVar10,*(long *)PTR_DAT_070c63a8,0);
		 * LAB_03398794:
		 *       (*(code *)*puVar5)(plVar10,uVar4,puVar5[1]);
		 *       SpeedhackProtector.ResetStartTicks(param_1);
		 *       param_1->currentFalsePositives = 0;
		 *       param_1->currentCooldownShots = 0;
		 *       return;
		 *     }
		 *   }
		 *   IL2CPP.ThrowNullReferenceException();
		 */
		// RVA: 0x32987C4 VA: 0x78189837C4
		protected override void Finalize();
		/*
		 *   SpeedhackProtector.DisposeProtector(this);
		 *   System.Object.Finalize(this);
		 *   return;
		 */
		// RVA: 0x32986C0 VA: 0x78189836C0
		private void InitProtector();
		/*
		 *   undefined *puVar1;
		 *   SpeedhackProtector *methodInfo_00;
		 *   void *pvVar2;
		 *   undefined8 uVar3;
		 *   undefined8 *puVar4;
		 *   void *methodInfo_01;
		 *   long lVar5;
		 *   ulong uVar6;
		 *   int *piVar7;
		 *   long *plVar8;
		 *
		 *   methodInfo_00 = this;
		 *   if ((bRam000000000754ad98 & 1) == 0) {
		 *     func_0x031fdc8c(PTR_DAT_070c63a0);
		 *     func_0x031fdc8c(PTR_DAT_070c63a8);
		 *     methodInfo_00 = (SpeedhackProtector *)func_0x031fdc8c(PTR_DAT_070c64b8);
		 *     bRam000000000754ad98 = 1;
		 *   }
		 *   pvVar2 = PixelGuard.get_Instance();
		 *   puVar1 = PTR_DAT_070c64b8;
		 *   if (pvVar2 != null) {
		 *     plVar8 = *(long **)((long)pvVar2 + 0x30);
		 *     uVar3 = func_0x031fdf24(*(undefined8 *)PTR_DAT_070c63a0);
		 *     func_0x04d12f3c(uVar3,this,*(undefined8 *)puVar1,0);
		 *     if (plVar8 != null) {
		 *       lVar5 = *plVar8;
		 *       uVar6 = (ulong)*(ushort *)(lVar5 + 0x12e);
		 *       if (uVar6 != 0) {
		 *         piVar7 = (int *)(*(long *)(lVar5 + 0xb0) + 8);
		 *         do {
		 *           if (*(long *)(piVar7 + -2) == *(long *)PTR_DAT_070c63a8) {
		 *             puVar4 = (undefined8 *)(lVar5 + (long)*piVar7 * 0x10 + 0x138);
		 *             goto LAB_03398794;
		 *           }
		 *           uVar6 = uVar6 - 1;
		 *           piVar7 = piVar7 + 4;
		 *         } while (uVar6 != 0);
		 *       }
		 *       puVar4 = (undefined8 *)func_0x03237558(plVar8,*(long *)PTR_DAT_070c63a8,0);
		 * LAB_03398794:
		 *       (*(code *)*puVar4)(plVar8,uVar3,puVar4[1]);
		 *       SpeedhackProtector.ResetStartTicks(this);
		 *       this.currentFalsePositives = 0;
		 *       this.currentCooldownShots = 0;
		 *       return;
		 *     }
		 *   }
		 *   IL2CPP.ThrowNullReferenceException();
		 */
		// RVA: 0x329893C VA: 0x781898393C
		private void ResetStartTicks();
		/*
		 *   undefined *puVar1;
		 *   int iVar2;
		 *   longlong lVar3;
		 *   void *extraout_x1;
		 *   undefined8 uStack_28;
		 *
		 *   puVar1 = typeinfo_ptr_mscorlib_DateTime_6FC2128;
		 *   if ((bRam000000000754ad99 & 1) == 0) {
		 *     func_0x031fdc8c(typeinfo_ptr_mscorlib_DateTime_6FC2128);
		 *     bRam000000000754ad99 = 1;
		 *     methodInfo = extraout_x1;
		 *   }
		 *   uStack_28 = 0;
		 *   if (*(int *)(*(long *)puVar1 + 0xe4) == 0) {
		 *     func_0x031fde08(*(long *)puVar1,methodInfo);
		 *   }
		 *   uStack_28 = System.DateTime.get_UtcNow();
		 *   lVar3 = System.DateTime.get_Ticks(&uStack_28);
		 *   this.ticksOnStart = lVar3;
		 *   iVar2 = Environment.get_TickCount();
		 *   this.prevIntervalTicks = this.ticksOnStart;
		 *   this.vulnerableTicksOnStart = (long)iVar2 * 10000;
		 *   this.prevTicks = this.ticksOnStart;
		 *   return;
		 */
		// RVA: 0x3298848 VA: 0x7818983848
		private void DisposeProtector();
		/*
		 *   undefined *puVar1;
		 *   SpeedhackProtector *methodInfo_00;
		 *   void *pvVar2;
		 *   undefined8 uVar3;
		 *   undefined8 *puVar4;
		 *   long lVar5;
		 *   ulong uVar6;
		 *   int *piVar7;
		 *   long *plVar8;
		 *
		 *   methodInfo_00 = this;
		 *   if ((bRam000000000754ad9a & 1) == 0) {
		 *     func_0x031fdc8c(PTR_DAT_070c63a0);
		 *     func_0x031fdc8c(PTR_DAT_070c63a8);
		 *     methodInfo_00 = (SpeedhackProtector *)func_0x031fdc8c(PTR_DAT_070c64b8);
		 *     bRam000000000754ad9a = 1;
		 *   }
		 *   pvVar2 = PixelGuard.get_Instance();
		 *   puVar1 = PTR_DAT_070c64b8;
		 *   if (pvVar2 != null) {
		 *     plVar8 = *(long **)((long)pvVar2 + 0x30);
		 *     uVar3 = func_0x031fdf24(*(undefined8 *)PTR_DAT_070c63a0);
		 *     func_0x04d12f3c(uVar3,this,*(undefined8 *)puVar1,0);
		 *     if (plVar8 != null) {
		 *       lVar5 = *plVar8;
		 *       uVar6 = (ulong)*(ushort *)(lVar5 + 0x12e);
		 *       if (uVar6 != 0) {
		 *         piVar7 = (int *)(*(long *)(lVar5 + 0xb0) + 8);
		 *         do {
		 *           if (*(long *)(piVar7 + -2) == *(long *)PTR_DAT_070c63a8) {
		 *             puVar4 = (undefined8 *)(lVar5 + (long)(*piVar7 + 1) * 0x10 + 0x138);
		 *             goto LAB_03398920;
		 *           }
		 *           uVar6 = uVar6 - 1;
		 *           piVar7 = piVar7 + 4;
		 *         } while (uVar6 != 0);
		 *       }
		 *       puVar4 = (undefined8 *)func_0x03237558(plVar8,*(long *)PTR_DAT_070c63a8,1);
		 * LAB_03398920:
		 *       (*(code *)*puVar4)(plVar8,uVar3,puVar4[1]);
		 *       return;
		 *     }
		 *   }
		 *   IL2CPP.ThrowNullReferenceException();
		 */
		// RVA: 0x32989D0 VA: 0x78189839D0
		public void PauseSeek(bool isPaused);
		/*
		 *   undefined *puVar1;
		 *   int iVar2;
		 *   longlong lVar3;
		 *   undefined8 uStack_28;
		 *
		 *   puVar1 = typeinfo_ptr_mscorlib_DateTime_6FC2128;
		 *   if (isPaused) {
		 *     return;
		 *   }
		 *   if ((bRam000000000754ad99 & 1) == 0) {
		 *     func_0x031fdc8c(typeinfo_ptr_mscorlib_DateTime_6FC2128);
		 *     bRam000000000754ad99 = 1;
		 *   }
		 *   uStack_28 = 0;
		 *   if (*(int *)(*(long *)puVar1 + 0xe4) == 0) {
		 *     func_0x031fde08();
		 *   }
		 *   uStack_28 = System.DateTime.get_UtcNow();
		 *   lVar3 = System.DateTime.get_Ticks(&uStack_28);
		 *   this.ticksOnStart = lVar3;
		 *   iVar2 = Environment.get_TickCount();
		 *   this.prevIntervalTicks = this.ticksOnStart;
		 *   this.vulnerableTicksOnStart = (long)iVar2 * 10000;
		 *   this.prevTicks = this.ticksOnStart;
		 *   return;
		 */
		// RVA: 0x32989DC VA: 0x78189839DC
		private void OnUpdate(PixelSecurity.Handlers.DeltaTimeHandler handler);
		/*
		 *   byte bVar1;
		 *   undefined *puVar2;
		 *   bool bVar3;
		 *   int iVar4;
		 *   longlong lVar5;
		 *   long lVar6;
		 *   void *extraout_x0;
		 *   PixelGuard *this_00;
		 *   void *pvVar7;
		 *   DeltaTimeHandler *extraout_x1;
		 *   void *extraout_x1_00;
		 *   void *extraout_x1_01;
		 *   void *extraout_x1_02;
		 *   void *extraout_x1_03;
		 *   void *extraout_x1_04;
		 *   void *in_x3;
		 *   float fVar8;
		 *   int iStack_34;
		 *   undefined8 uStack_28;
		 *
		 *   puVar2 = typeinfo_ptr_mscorlib_DateTime_6FC2128;
		 *   if ((bRam000000000754ad9b & 1) == 0) {
		 *     func_0x031fdc8c(typeinfo_ptr_mscorlib_DateTime_6FC2128);
		 *     func_0x031fdc8c(typeinfo_ptr_UnityEngine_CoreModule_Debug_6FC07A8);
		 *     func_0x031fdc8c(PTR_DAT_070c64c0);
		 *     func_0x031fdc8c(PTR_DAT_070c64c8);
		 *     func_0x031fdc8c(PTR_DAT_070c64d0);
		 *     func_0x031fdc8c(PTR_DAT_070c64d8);
		 *     func_0x031fdc8c(PTR_DAT_070c64e0);
		 *     func_0x031fdc8c(PTR_DAT_070c64e8);
		 *     bRam000000000754ad9b = 1;
		 *     handler = extraout_x1;
		 *   }
		 *   uStack_28 = 0;
		 *   iStack_34 = 0;
		 *   if (*(int *)(*(long *)puVar2 + 0xe4) == 0) {
		 *     func_0x031fde08(*(long *)puVar2,handler);
		 *   }
		 *   puVar2 = typeinfo_ptr_UnityEngine_CoreModule_Debug_6FC07A8;
		 *   uStack_28 = System.DateTime.get_UtcNow();
		 *   lVar5 = System.DateTime.get_Ticks(&uStack_28);
		 *   fVar8 = _UNK_0134eb84;
		 *   if ((ulong)(lVar5 - this.prevTicks) < 0x989681) {
		 *     this.prevTicks = lVar5;
		 *     fVar8 = this.interval * fVar8;
		 *     if ((fVar8 == INFINITY) || ((long)fVar8 <= lVar5 - this.prevIntervalTicks)) {
		 *       iVar4 = Environment.get_TickCount();
		 *       bVar1 = this.currentFalsePositives;
		 *       if (ABS((float)((this.ticksOnStart - (this.vulnerableTicksOnStart + lVar5)) +
		 *                      (long)iVar4 * 10000)) <= _UNK_0134efb4) {
		 *         if ((bVar1 != 0) && (0 < this.coolDown)) {
		 *           if (*(int *)(*(long *)puVar2 + 0xe4) == 0) {
		 *             func_0x031fde08();
		 *           }
		 *           bVar3 = UnityEngine.Debug.get_isDebugBuild();
		 *           if (bVar3) {
		 *             iStack_34 = this.coolDown - this.currentCooldownShots;
		 *             pvVar7 = System.Int32.ToString(&iStack_34);
		 *             pvVar7 = System.String.Concat(*(void **)PTR_DAT_070c64c0,pvVar7)
		 *             ;
		 *             if (*(int *)(*(long *)puVar2 + 0xe4) == 0) {
		 *               func_0x031fde08(*(long *)puVar2);
		 *             }
		 *             UnityEngine.Debug.LogWarning(pvVar7);
		 *           }
		 *           iVar4 = this.currentCooldownShots + 1;
		 *           this.currentCooldownShots = iVar4;
		 *           if (this.coolDown <= iVar4) {
		 *             if (*(int *)(*(long *)puVar2 + 0xe4) == 0) {
		 *               func_0x031fde08();
		 *             }
		 *             bVar3 = UnityEngine.Debug.get_isDebugBuild();
		 *             if (bVar3) {
		 *               if (*(int *)(*(long *)puVar2 + 0xe4) == 0) {
		 *                 func_0x031fde08();
		 *               }
		 *               UnityEngine.Debug.LogWarning(*(void **)PTR_DAT_070c64d0);
		 *             }
		 *             this.currentFalsePositives = 0;
		 *           }
		 *         }
		 *       }
		 *       else {
		 *         lVar6 = *(long *)puVar2;
		 *         this.currentFalsePositives = bVar1 + 1;
		 *         if (this.maxFalsePositives < (byte)(bVar1 + 1)) {
		 *           if (*(int *)(lVar6 + 0xe4) == 0) {
		 *             func_0x031fde08();
		 *           }
		 *           bVar3 = UnityEngine.Debug.get_isDebugBuild();
		 *           pvVar7 = (void *)(ulong)bVar3;
		 *           if (bVar3) {
		 *             if (*(int *)(*(long *)puVar2 + 0xe4) == 0) {
		 *               func_0x031fde08();
		 *             }
		 *             UnityEngine.Debug.LogWarning(*(void **)PTR_DAT_070c64e0);
		 *             pvVar7 = extraout_x0;
		 *           }
		 *           this_00 = PixelGuard.get_Instance();
		 *           if (this_00 == null) {
		 *             IL2CPP.ThrowNullReferenceException();
		 *           }
		 *           PixelGuard.CreateSecurityWarning(this_00,*(void **)PTR_DAT_070c64c8,this);
		 *           this.currentFalsePositives = 0;
		 *           pvVar7 = extraout_x1_00;
		 *         }
		 *         else {
		 *           if (*(int *)(lVar6 + 0xe4) == 0) {
		 *             func_0x031fde08();
		 *           }
		 *           bVar3 = UnityEngine.Debug.get_isDebugBuild();
		 *           pvVar7 = extraout_x1_03;
		 *           if (bVar3) {
		 *             iStack_34 = (uint)this.maxFalsePositives - (uint)this.currentFalsePositives;
		 *             pvVar7 = System.Int32.ToString(&iStack_34);
		 *             pvVar7 = System.String.Concat(*(void **)PTR_DAT_070c64e8,pvVar7)
		 *             ;
		 *             if (*(int *)(*(long *)puVar2 + 0xe4) == 0) {
		 *               func_0x031fde08(*(long *)puVar2);
		 *             }
		 *             UnityEngine.Debug.LogWarning(pvVar7);
		 *             pvVar7 = extraout_x1_04;
		 *           }
		 *         }
		 *         this.currentCooldownShots = 0;
		 *         SpeedhackProtector.ResetStartTicks(this);
		 *       }
		 *       this.prevIntervalTicks = lVar5;
		 *     }
		 *   }
		 *   else {
		 *     if (*(int *)(*(long *)puVar2 + 0xe4) == 0) {
		 *       func_0x031fde08();
		 *     }
		 *     bVar3 = UnityEngine.Debug.get_isDebugBuild();
		 *     pvVar7 = extraout_x1_01;
		 *     if (bVar3) {
		 *       if (*(int *)(*(long *)puVar2 + 0xe4) == 0) {
		 *         func_0x031fde08();
		 *       }
		 *       UnityEngine.Debug.LogWarning(*(void **)PTR_DAT_070c64d8);
		 *       pvVar7 = extraout_x1_02;
		 *     }
		 *     SpeedhackProtector.ResetStartTicks(this);
		 *   }
		 *   return;
		 */
	}
}
