// Decompiled with JetBrains decompiler
// Type: .
// Assembly: !, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
// MVID: 557A2E9F-07C1-4548-9113-1357BAD65653
// Assembly location: C:\Users\Administrateur\Downloads\Virusshare-00000-msil\Trojan.MSIL.Crypt.hnss-93ea8c725747bfd67919febc6ed26643a8654b90a112977a3d914bf034f69ed8.exe

using \u0001\u0005;
using System;

namespace \u0001\u0005
{
  internal struct \u0007\u0007
  {
    private \u0007\u0001[] \u000E;
    private int \u0007\u0009;

    public \u0007\u0007(int numBitLevels)
    {
      this.\u0007\u0009 = numBitLevels;
      this.\u000E = new \u0007\u0001[1 << numBitLevels];
    }

    public void \u0001\u001B()
    {
      for (uint index = 1; (long) index < (long) (1 << this.\u0007\u0009); ++index)
        this.\u000E[(IntPtr) index].\u0001\u001B();
    }

    public uint \u0007\u000C(\u0006\u0005 rangeDecoder)
    {
      uint index1 = 1;
      for (int index2 = this.\u0007\u0009; index2 > 0; --index2)
        index1 = (index1 << 1) + this.\u000E[(IntPtr) index1].\u0007\u000C(rangeDecoder);
      return index1 - (uint) (1 << this.\u0007\u0009);
    }

    public uint \u0007\u000A(\u0006\u0005 rangeDecoder)
    {
      uint index1 = 1;
      uint num1 = 0;
      for (int index2 = 0; index2 < this.\u0007\u0009; ++index2)
      {
        uint num2 = this.\u000E[(IntPtr) index1].\u0007\u000C(rangeDecoder);
        index1 = (index1 << 1) + num2;
        num1 |= num2 << index2;
      }
      return num1;
    }

    public static uint \u0007\u000A(
      \u0007\u0001[] _param0,
      uint startIndex,
      \u0006\u0005 rangeDecoder,
      int _param3)
    {
      uint num1 = 1;
      uint num2 = 0;
      for (int index = 0; index < _param3; ++index)
      {
        uint num3 = _param0[(IntPtr) (startIndex + num1)].\u0007\u000C(rangeDecoder);
        num1 = (num1 << 1) + num3;
        num2 |= num3 << index;
      }
      return num2;
    }
  }
}
