import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; @ObfuscatedName("au") @Implements("VorbisCodebook") public class VorbisCodebook { @ObfuscatedName("c") @Export("dimensions") int dimensions; @ObfuscatedName("v") @Export("entries") int entries; @ObfuscatedName("q") @Export("lengthMap") int[] lengthMap; @ObfuscatedName("f") int[] field357; @ObfuscatedName("j") float[][] field358; @ObfuscatedName("e") @Export("keys") int[] keys; VorbisCodebook() { VorbisSample.readBits(24); // L: 41 this.dimensions = VorbisSample.readBits(16); // L: 42 this.entries = VorbisSample.readBits(24); // L: 43 this.lengthMap = new int[this.entries]; // L: 44 boolean var1 = VorbisSample.readBit() != 0; // L: 45 int var2; int var3; int var5; if (var1) { // L: 46 var2 = 0; // L: 47 for (var3 = VorbisSample.readBits(5) + 1; var2 < this.entries; ++var3) { // L: 48 49 52 int var4 = VorbisSample.readBits(Messages.iLog(this.entries - var2)); // L: 50 for (var5 = 0; var5 < var4; ++var5) { // L: 51 this.lengthMap[var2++] = var3; } } } else { boolean var14 = VorbisSample.readBit() != 0; // L: 56 for (var3 = 0; var3 < this.entries; ++var3) { // L: 57 if (var14 && VorbisSample.readBit() == 0) { // L: 58 this.lengthMap[var3] = 0; } else { this.lengthMap[var3] = VorbisSample.readBits(5) + 1; // L: 59 } } } this.method955(); // L: 62 var2 = VorbisSample.readBits(4); // L: 63 if (var2 > 0) { // L: 64 float var15 = VorbisSample.float32Unpack(VorbisSample.readBits(32)); // L: 65 float var16 = VorbisSample.float32Unpack(VorbisSample.readBits(32)); // L: 66 var5 = VorbisSample.readBits(4) + 1; // L: 67 boolean var6 = VorbisSample.readBit() != 0; // L: 68 int var7; if (var2 == 1) { // L: 70 var7 = mapType1QuantValues(this.entries, this.dimensions); } else { var7 = this.entries * this.dimensions; // L: 71 } this.field357 = new int[var7]; // L: 72 int var8; for (var8 = 0; var8 < var7; ++var8) { // L: 73 this.field357[var8] = VorbisSample.readBits(var5); } this.field358 = new float[this.entries][this.dimensions]; // L: 74 float var9; int var10; int var11; if (var2 == 1) { // L: 75 for (var8 = 0; var8 < this.entries; ++var8) { // L: 76 var9 = 0.0F; // L: 77 var10 = 1; // L: 78 for (var11 = 0; var11 < this.dimensions; ++var11) { // L: 79 int var12 = var8 / var10 % var7; // L: 80 float var13 = (float)this.field357[var12] * var16 + var15 + var9; // L: 81 this.field358[var8][var11] = var13; // L: 82 if (var6) { // L: 83 var9 = var13; } var10 *= var7; // L: 84 } } } else { for (var8 = 0; var8 < this.entries; ++var8) { // L: 89 var9 = 0.0F; // L: 90 var10 = var8 * this.dimensions; // L: 91 for (var11 = 0; var11 < this.dimensions; ++var11) { // L: 92 float var17 = (float)this.field357[var10] * var16 + var15 + var9; // L: 93 this.field358[var8][var11] = var17; // L: 94 if (var6) { // L: 95 var9 = var17; } ++var10; // L: 96 } } } } } // L: 101 @ObfuscatedName("v") void method955() { int[] var1 = new int[this.entries]; // L: 104 int[] var2 = new int[33]; // L: 106 int var3; int var4; int var5; int var6; int var7; int var8; int var10; for (var3 = 0; var3 < this.entries; ++var3) { // L: 107 var4 = this.lengthMap[var3]; // L: 108 if (var4 != 0) { // L: 109 var5 = 1 << 32 - var4; // L: 110 var6 = var2[var4]; // L: 111 var1[var3] = var6; // L: 112 int var12; if ((var6 & var5) != 0) { // L: 114 var7 = var2[var4 - 1]; // L: 115 } else { var7 = var6 | var5; // L: 118 for (var8 = var4 - 1; var8 >= 1; --var8) { // L: 119 var12 = var2[var8]; // L: 120 if (var12 != var6) { // L: 121 break; } var10 = 1 << 32 - var8; // L: 122 if ((var12 & var10) != 0) { // L: 123 var2[var8] = var2[var8 - 1]; // L: 124 break; // L: 125 } var2[var8] = var12 | var10; // L: 128 } } var2[var4] = var7; // L: 134 for (var8 = var4 + 1; var8 <= 32; ++var8) { // L: 135 var12 = var2[var8]; // L: 136 if (var12 == var6) { // L: 137 var2[var8] = var7; } } } } this.keys = new int[8]; // L: 141 int var11 = 0; // L: 142 for (var3 = 0; var3 < this.entries; ++var3) { // L: 143 var4 = this.lengthMap[var3]; // L: 144 if (var4 != 0) { // L: 145 var5 = var1[var3]; // L: 146 var6 = 0; // L: 147 for (var7 = 0; var7 < var4; ++var7) { // L: 148 var8 = Integer.MIN_VALUE >>> var7; // L: 149 if ((var5 & var8) != 0) { // L: 150 if (this.keys[var6] == 0) { // L: 151 this.keys[var6] = var11; } var6 = this.keys[var6]; // L: 152 } else { ++var6; // L: 155 } if (var6 >= this.keys.length) { // L: 157 int[] var9 = new int[this.keys.length * 2]; // L: 158 for (var10 = 0; var10 < this.keys.length; ++var10) { // L: 159 var9[var10] = this.keys[var10]; } this.keys = var9; // L: 160 } var8 >>>= 1; // L: 162 } this.keys[var6] = ~var3; // L: 164 if (var6 >= var11) { // L: 165 var11 = var6 + 1; } } } } // L: 167 @ObfuscatedName("q") int method956() { int var1; for (var1 = 0; this.keys[var1] >= 0; var1 = VorbisSample.readBit() != 0 ? this.keys[var1] : var1 + 1) { // L: 170 171 } return ~this.keys[var1]; // L: 172 } @ObfuscatedName("f") float[] method957() { return this.field358[this.method956()]; // L: 176 } @ObfuscatedName("c") @Export("mapType1QuantValues") static int mapType1QuantValues(int var0, int var1) { int var2 = (int)Math.pow((double)var0, 1.0D / (double)var1) + 1; // L: 16 while (true) { int var4 = var2; // L: 19 int var5 = var1; // L: 20 int var6; for (var6 = 1; var5 > 1; var5 >>= 1) { // L: 22 23 26 if ((var5 & 1) != 0) { // L: 24 var6 *= var4; } var4 *= var4; // L: 25 } int var3; if (var5 == 1) { // L: 28 var3 = var6 * var4; // L: 29 } else { var3 = var6; // L: 32 } if (var3 <= var0) { // L: 34 return var2; // L: 37 } --var2; // L: 35 } } }