public abstract class org.bouncycastle.math.raw.Mod
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: org.bouncycastle.math.raw.Mod
  super_class: java.lang.Object
{
  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.bouncycastle.math.raw.Mod this
         0: .line 7
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // org.bouncycastle.math.raw.Mod this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/bouncycastle/math/raw/Mod;

  public static int inverse32(int);
    descriptor: (I)I
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=1
        start local 0 // int d
         0: .line 12
            iload 0 /* d */
            istore 1 /* x */
        start local 1 // int x
         1: .line 13
            iload 1 /* x */
            iconst_2
            iload 0 /* d */
            iload 1 /* x */
            imul
            isub
            imul
            istore 1 /* x */
         2: .line 14
            iload 1 /* x */
            iconst_2
            iload 0 /* d */
            iload 1 /* x */
            imul
            isub
            imul
            istore 1 /* x */
         3: .line 15
            iload 1 /* x */
            iconst_2
            iload 0 /* d */
            iload 1 /* x */
            imul
            isub
            imul
            istore 1 /* x */
         4: .line 16
            iload 1 /* x */
            iconst_2
            iload 0 /* d */
            iload 1 /* x */
            imul
            isub
            imul
            istore 1 /* x */
         5: .line 18
            iload 1 /* x */
            ireturn
        end local 1 // int x
        end local 0 // int d
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0     d  I
            1    6     1     x  I
    MethodParameters:
      Name  Flags
      d     

  public static void invert(int[], int[], int[]);
    descriptor: ([I[I[I)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=11, args_size=3
        start local 0 // int[] p
        start local 1 // int[] x
        start local 2 // int[] z
         0: .line 23
            aload 0 /* p */
            arraylength
            istore 3 /* len */
        start local 3 // int len
         1: .line 24
            iload 3 /* len */
            aload 1 /* x */
            invokestatic org.bouncycastle.math.raw.Nat.isZero:(I[I)Z
            ifeq 3
         2: .line 26
            new java.lang.IllegalArgumentException
            dup
            ldc "'x' cannot be 0"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         3: .line 28
      StackMap locals: int
      StackMap stack:
            iload 3 /* len */
            aload 1 /* x */
            invokestatic org.bouncycastle.math.raw.Nat.isOne:(I[I)Z
            ifeq 6
         4: .line 30
            aload 1 /* x */
            iconst_0
            aload 2 /* z */
            iconst_0
            iload 3 /* len */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         5: .line 31
            return
         6: .line 34
      StackMap locals:
      StackMap stack:
            iload 3 /* len */
            aload 1 /* x */
            invokestatic org.bouncycastle.math.raw.Nat.copy:(I[I)[I
            astore 4 /* u */
        start local 4 // int[] u
         7: .line 35
            iload 3 /* len */
            invokestatic org.bouncycastle.math.raw.Nat.create:(I)[I
            astore 5 /* a */
        start local 5 // int[] a
         8: .line 36
            aload 5 /* a */
            iconst_0
            iconst_1
            iastore
         9: .line 37
            iconst_0
            istore 6 /* ac */
        start local 6 // int ac
        10: .line 39
            aload 4 /* u */
            iconst_0
            iaload
            iconst_1
            iand
            ifne 12
        11: .line 41
            aload 0 /* p */
            aload 4 /* u */
            iload 3 /* len */
            aload 5 /* a */
            iload 6 /* ac */
            invokestatic org.bouncycastle.math.raw.Mod.inversionStep:([I[II[II)I
            istore 6 /* ac */
        12: .line 43
      StackMap locals: int[] int[] int
      StackMap stack:
            iload 3 /* len */
            aload 4 /* u */
            invokestatic org.bouncycastle.math.raw.Nat.isOne:(I[I)Z
            ifeq 15
        13: .line 45
            aload 0 /* p */
            iload 6 /* ac */
            aload 5 /* a */
            aload 2 /* z */
            invokestatic org.bouncycastle.math.raw.Mod.inversionResult:([II[I[I)V
        14: .line 46
            return
        15: .line 49
      StackMap locals:
      StackMap stack:
            iload 3 /* len */
            aload 0 /* p */
            invokestatic org.bouncycastle.math.raw.Nat.copy:(I[I)[I
            astore 7 /* v */
        start local 7 // int[] v
        16: .line 50
            iload 3 /* len */
            invokestatic org.bouncycastle.math.raw.Nat.create:(I)[I
            astore 8 /* b */
        start local 8 // int[] b
        17: .line 51
            iconst_0
            istore 9 /* bc */
        start local 9 // int bc
        18: .line 53
            iload 3 /* len */
            istore 10 /* uvLen */
        start local 10 // int uvLen
        19: .line 57
            goto 21
        20: .line 59
      StackMap locals: int[] int[] int[] int int[] int[] int int[] int[] int int
      StackMap stack:
            iinc 10 /* uvLen */ -1
        21: .line 57
      StackMap locals:
      StackMap stack:
            aload 4 /* u */
            iload 10 /* uvLen */
            iconst_1
            isub
            iaload
            ifne 22
            aload 7 /* v */
            iload 10 /* uvLen */
            iconst_1
            isub
            iaload
            ifeq 20
        22: .line 62
      StackMap locals:
      StackMap stack:
            iload 10 /* uvLen */
            aload 4 /* u */
            aload 7 /* v */
            invokestatic org.bouncycastle.math.raw.Nat.gte:(I[I[I)Z
            ifeq 29
        23: .line 64
            iload 10 /* uvLen */
            aload 7 /* v */
            aload 4 /* u */
            invokestatic org.bouncycastle.math.raw.Nat.subFrom:(I[I[I)I
            pop
        24: .line 66
            iload 6 /* ac */
            iload 3 /* len */
            aload 8 /* b */
            aload 5 /* a */
            invokestatic org.bouncycastle.math.raw.Nat.subFrom:(I[I[I)I
            iload 9 /* bc */
            isub
            iadd
            istore 6 /* ac */
        25: .line 67
            aload 0 /* p */
            aload 4 /* u */
            iload 10 /* uvLen */
            aload 5 /* a */
            iload 6 /* ac */
            invokestatic org.bouncycastle.math.raw.Mod.inversionStep:([I[II[II)I
            istore 6 /* ac */
        26: .line 68
            iload 10 /* uvLen */
            aload 4 /* u */
            invokestatic org.bouncycastle.math.raw.Nat.isOne:(I[I)Z
            ifeq 35
        27: .line 70
            aload 0 /* p */
            iload 6 /* ac */
            aload 5 /* a */
            aload 2 /* z */
            invokestatic org.bouncycastle.math.raw.Mod.inversionResult:([II[I[I)V
        28: .line 71
            return
        29: .line 76
      StackMap locals:
      StackMap stack:
            iload 10 /* uvLen */
            aload 4 /* u */
            aload 7 /* v */
            invokestatic org.bouncycastle.math.raw.Nat.subFrom:(I[I[I)I
            pop
        30: .line 78
            iload 9 /* bc */
            iload 3 /* len */
            aload 5 /* a */
            aload 8 /* b */
            invokestatic org.bouncycastle.math.raw.Nat.subFrom:(I[I[I)I
            iload 6 /* ac */
            isub
            iadd
            istore 9 /* bc */
        31: .line 79
            aload 0 /* p */
            aload 7 /* v */
            iload 10 /* uvLen */
            aload 8 /* b */
            iload 9 /* bc */
            invokestatic org.bouncycastle.math.raw.Mod.inversionStep:([I[II[II)I
            istore 9 /* bc */
        32: .line 80
            iload 10 /* uvLen */
            aload 7 /* v */
            invokestatic org.bouncycastle.math.raw.Nat.isOne:(I[I)Z
            ifeq 35
        33: .line 82
            aload 0 /* p */
            iload 9 /* bc */
            aload 8 /* b */
            aload 2 /* z */
            invokestatic org.bouncycastle.math.raw.Mod.inversionResult:([II[I[I)V
        34: .line 83
            return
        35: .line 55
      StackMap locals:
      StackMap stack:
            goto 21
        end local 10 // int uvLen
        end local 9 // int bc
        end local 8 // int[] b
        end local 7 // int[] v
        end local 6 // int ac
        end local 5 // int[] a
        end local 4 // int[] u
        end local 3 // int len
        end local 2 // int[] z
        end local 1 // int[] x
        end local 0 // int[] p
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   36     0      p  [I
            0   36     1      x  [I
            0   36     2      z  [I
            1   36     3    len  I
            7   36     4      u  [I
            8   36     5      a  [I
           10   36     6     ac  I
           16   36     7      v  [I
           17   36     8      b  [I
           18   36     9     bc  I
           19   36    10  uvLen  I
    MethodParameters:
      Name  Flags
      p     
      x     
      z     

  public static int[] random(int[]);
    descriptor: ([I)[I
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=6, args_size=1
        start local 0 // int[] p
         0: .line 91
            aload 0 /* p */
            arraylength
            istore 1 /* len */
        start local 1 // int len
         1: .line 92
            new java.util.Random
            dup
            invokespecial java.util.Random.<init>:()V
            astore 2 /* rand */
        start local 2 // java.util.Random rand
         2: .line 93
            iload 1 /* len */
            invokestatic org.bouncycastle.math.raw.Nat.create:(I)[I
            astore 3 /* s */
        start local 3 // int[] s
         3: .line 95
            aload 0 /* p */
            iload 1 /* len */
            iconst_1
            isub
            iaload
            istore 4 /* m */
        start local 4 // int m
         4: .line 96
            iload 4 /* m */
            iload 4 /* m */
            iconst_1
            iushr
            ior
            istore 4 /* m */
         5: .line 97
            iload 4 /* m */
            iload 4 /* m */
            iconst_2
            iushr
            ior
            istore 4 /* m */
         6: .line 98
            iload 4 /* m */
            iload 4 /* m */
            iconst_4
            iushr
            ior
            istore 4 /* m */
         7: .line 99
            iload 4 /* m */
            iload 4 /* m */
            bipush 8
            iushr
            ior
            istore 4 /* m */
         8: .line 100
            iload 4 /* m */
            iload 4 /* m */
            bipush 16
            iushr
            ior
            istore 4 /* m */
         9: .line 104
      StackMap locals: int[] int java.util.Random int[] int
      StackMap stack:
            iconst_0
            istore 5 /* i */
        start local 5 // int i
        10: goto 13
        11: .line 106
      StackMap locals: int
      StackMap stack:
            aload 3 /* s */
            iload 5 /* i */
            aload 2 /* rand */
            invokevirtual java.util.Random.nextInt:()I
            iastore
        12: .line 104
            iinc 5 /* i */ 1
      StackMap locals:
      StackMap stack:
        13: iload 5 /* i */
            iload 1 /* len */
            if_icmpne 11
        end local 5 // int i
        14: .line 108
            aload 3 /* s */
            iload 1 /* len */
            iconst_1
            isub
            dup2
            iaload
            iload 4 /* m */
            iand
            iastore
        15: .line 110
            iload 1 /* len */
            aload 3 /* s */
            aload 0 /* p */
            invokestatic org.bouncycastle.math.raw.Nat.gte:(I[I[I)Z
            ifne 9
        16: .line 112
            aload 3 /* s */
            areturn
        end local 4 // int m
        end local 3 // int[] s
        end local 2 // java.util.Random rand
        end local 1 // int len
        end local 0 // int[] p
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   17     0     p  [I
            1   17     1   len  I
            2   17     2  rand  Ljava/util/Random;
            3   17     3     s  [I
            4   17     4     m  I
           10   14     5     i  I
    MethodParameters:
      Name  Flags
      p     

  public static void add(int[], int[], int[], int[]);
    descriptor: ([I[I[I[I)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=6, args_size=4
        start local 0 // int[] p
        start local 1 // int[] x
        start local 2 // int[] y
        start local 3 // int[] z
         0: .line 117
            aload 0 /* p */
            arraylength
            istore 4 /* len */
        start local 4 // int len
         1: .line 118
            iload 4 /* len */
            aload 1 /* x */
            aload 2 /* y */
            aload 3 /* z */
            invokestatic org.bouncycastle.math.raw.Nat.add:(I[I[I[I)I
            istore 5 /* c */
        start local 5 // int c
         2: .line 119
            iload 5 /* c */
            ifeq 4
         3: .line 121
            iload 4 /* len */
            aload 0 /* p */
            aload 3 /* z */
            invokestatic org.bouncycastle.math.raw.Nat.subFrom:(I[I[I)I
            pop
         4: .line 123
      StackMap locals: int int
      StackMap stack:
            return
        end local 5 // int c
        end local 4 // int len
        end local 3 // int[] z
        end local 2 // int[] y
        end local 1 // int[] x
        end local 0 // int[] p
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0     p  [I
            0    5     1     x  [I
            0    5     2     y  [I
            0    5     3     z  [I
            1    5     4   len  I
            2    5     5     c  I
    MethodParameters:
      Name  Flags
      p     
      x     
      y     
      z     

  public static void subtract(int[], int[], int[], int[]);
    descriptor: ([I[I[I[I)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=6, args_size=4
        start local 0 // int[] p
        start local 1 // int[] x
        start local 2 // int[] y
        start local 3 // int[] z
         0: .line 127
            aload 0 /* p */
            arraylength
            istore 4 /* len */
        start local 4 // int len
         1: .line 128
            iload 4 /* len */
            aload 1 /* x */
            aload 2 /* y */
            aload 3 /* z */
            invokestatic org.bouncycastle.math.raw.Nat.sub:(I[I[I[I)I
            istore 5 /* c */
        start local 5 // int c
         2: .line 129
            iload 5 /* c */
            ifeq 4
         3: .line 131
            iload 4 /* len */
            aload 0 /* p */
            aload 3 /* z */
            invokestatic org.bouncycastle.math.raw.Nat.addTo:(I[I[I)I
            pop
         4: .line 133
      StackMap locals: int int
      StackMap stack:
            return
        end local 5 // int c
        end local 4 // int len
        end local 3 // int[] z
        end local 2 // int[] y
        end local 1 // int[] x
        end local 0 // int[] p
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0     p  [I
            0    5     1     x  [I
            0    5     2     y  [I
            0    5     3     z  [I
            1    5     4   len  I
            2    5     5     c  I
    MethodParameters:
      Name  Flags
      p     
      x     
      y     
      z     

  private static void inversionResult(int[], int, int[], int[]);
    descriptor: ([II[I[I)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // int[] p
        start local 1 // int ac
        start local 2 // int[] a
        start local 3 // int[] z
         0: .line 137
            iload 1 /* ac */
            ifge 3
         1: .line 139
            aload 0 /* p */
            arraylength
            aload 2 /* a */
            aload 0 /* p */
            aload 3 /* z */
            invokestatic org.bouncycastle.math.raw.Nat.add:(I[I[I[I)I
            pop
         2: .line 140
            goto 4
         3: .line 143
      StackMap locals:
      StackMap stack:
            aload 2 /* a */
            iconst_0
            aload 3 /* z */
            iconst_0
            aload 0 /* p */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         4: .line 145
      StackMap locals:
      StackMap stack:
            return
        end local 3 // int[] z
        end local 2 // int[] a
        end local 1 // int ac
        end local 0 // int[] p
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0     p  [I
            0    5     1    ac  I
            0    5     2     a  [I
            0    5     3     z  [I
    MethodParameters:
      Name  Flags
      p     
      ac    
      a     
      z     

  private static int inversionStep(int[], int[], int, int[], int);
    descriptor: ([I[II[II)I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=8, args_size=5
        start local 0 // int[] p
        start local 1 // int[] u
        start local 2 // int uLen
        start local 3 // int[] x
        start local 4 // int xc
         0: .line 149
            aload 0 /* p */
            arraylength
            istore 5 /* len */
        start local 5 // int len
         1: .line 150
            iconst_0
            istore 6 /* count */
        start local 6 // int count
         2: .line 151
            goto 5
         3: .line 153
      StackMap locals: int int
      StackMap stack:
            iload 2 /* uLen */
            aload 1 /* u */
            iconst_0
            invokestatic org.bouncycastle.math.raw.Nat.shiftDownWord:(I[II)I
            pop
         4: .line 154
            iinc 6 /* count */ 32
         5: .line 151
      StackMap locals:
      StackMap stack:
            aload 1 /* u */
            iconst_0
            iaload
            ifeq 3
         6: .line 158
            aload 1 /* u */
            iconst_0
            iaload
            invokestatic org.bouncycastle.math.raw.Mod.getTrailingZeroes:(I)I
            istore 7 /* zeroes */
        start local 7 // int zeroes
         7: .line 159
            iload 7 /* zeroes */
            ifle 10
         8: .line 161
            iload 2 /* uLen */
            aload 1 /* u */
            iload 7 /* zeroes */
            iconst_0
            invokestatic org.bouncycastle.math.raw.Nat.shiftDownBits:(I[III)I
            pop
         9: .line 162
            iload 6 /* count */
            iload 7 /* zeroes */
            iadd
            istore 6 /* count */
        end local 7 // int zeroes
        10: .line 166
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 7 /* i */
        start local 7 // int i
        11: goto 19
        12: .line 168
      StackMap locals: int
      StackMap stack:
            aload 3 /* x */
            iconst_0
            iaload
            iconst_1
            iand
            ifeq 17
        13: .line 170
            iload 4 /* xc */
            ifge 16
        14: .line 172
            iload 4 /* xc */
            iload 5 /* len */
            aload 0 /* p */
            aload 3 /* x */
            invokestatic org.bouncycastle.math.raw.Nat.addTo:(I[I[I)I
            iadd
            istore 4 /* xc */
        15: .line 173
            goto 17
        16: .line 176
      StackMap locals:
      StackMap stack:
            iload 4 /* xc */
            iload 5 /* len */
            aload 0 /* p */
            aload 3 /* x */
            invokestatic org.bouncycastle.math.raw.Nat.subFrom:(I[I[I)I
            iadd
            istore 4 /* xc */
        17: .line 181
      StackMap locals:
      StackMap stack:
            iload 5 /* len */
            aload 3 /* x */
            iload 4 /* xc */
            invokestatic org.bouncycastle.math.raw.Nat.shiftDownBit:(I[II)I
            pop
        18: .line 166
            iinc 7 /* i */ 1
      StackMap locals:
      StackMap stack:
        19: iload 7 /* i */
            iload 6 /* count */
            if_icmplt 12
        end local 7 // int i
        20: .line 184
            iload 4 /* xc */
            ireturn
        end local 6 // int count
        end local 5 // int len
        end local 4 // int xc
        end local 3 // int[] x
        end local 2 // int uLen
        end local 1 // int[] u
        end local 0 // int[] p
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   21     0       p  [I
            0   21     1       u  [I
            0   21     2    uLen  I
            0   21     3       x  [I
            0   21     4      xc  I
            1   21     5     len  I
            2   21     6   count  I
            7   10     7  zeroes  I
           11   20     7       i  I
    MethodParameters:
      Name  Flags
      p     
      u     
      uLen  
      x     
      xc    

  private static int getTrailingZeroes(int);
    descriptor: (I)I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // int x
         0: .line 191
            iconst_0
            istore 1 /* count */
        start local 1 // int count
         1: .line 192
            goto 4
         2: .line 194
      StackMap locals: int
      StackMap stack:
            iload 0 /* x */
            iconst_1
            iushr
            istore 0 /* x */
         3: .line 195
            iinc 1 /* count */ 1
         4: .line 192
      StackMap locals:
      StackMap stack:
            iload 0 /* x */
            iconst_1
            iand
            ifeq 2
         5: .line 197
            iload 1 /* count */
            ireturn
        end local 1 // int count
        end local 0 // int x
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    6     0      x  I
            1    6     1  count  I
    MethodParameters:
      Name  Flags
      x     
}
SourceFile: "Mod.java"