297 lines
6.4 KiB
Java
297 lines
6.4 KiB
Java
import net.runelite.mapping.Export;
|
|
import net.runelite.mapping.Implements;
|
|
import net.runelite.mapping.ObfuscatedName;
|
|
import net.runelite.mapping.ObfuscatedSignature;
|
|
|
|
@ObfuscatedName("jx")
|
|
@Implements("Huffman")
|
|
public class Huffman {
|
|
@ObfuscatedName("o")
|
|
@Export("masks")
|
|
int[] masks;
|
|
@ObfuscatedName("q")
|
|
@Export("bits")
|
|
byte[] bits;
|
|
@ObfuscatedName("l")
|
|
@Export("keys")
|
|
int[] keys;
|
|
|
|
public Huffman(byte[] var1) {
|
|
int var2 = var1.length; // L: 9
|
|
this.masks = new int[var2]; // L: 10
|
|
this.bits = var1; // L: 11
|
|
int[] var3 = new int[33]; // L: 12
|
|
this.keys = new int[8]; // L: 13
|
|
int var4 = 0; // L: 14
|
|
|
|
for (int var5 = 0; var5 < var2; ++var5) { // L: 15
|
|
byte var6 = var1[var5]; // L: 16
|
|
if (var6 != 0) { // L: 17
|
|
int var7 = 1 << 32 - var6; // L: 18
|
|
int var8 = var3[var6]; // L: 19
|
|
this.masks[var5] = var8; // L: 20
|
|
int var9;
|
|
int var10;
|
|
int var11;
|
|
int var12;
|
|
if ((var8 & var7) != 0) { // L: 22
|
|
var9 = var3[var6 - 1];
|
|
} else {
|
|
var9 = var8 | var7; // L: 24
|
|
|
|
for (var10 = var6 - 1; var10 >= 1; --var10) { // L: 25
|
|
var11 = var3[var10]; // L: 26
|
|
if (var11 != var8) { // L: 27
|
|
break;
|
|
}
|
|
|
|
var12 = 1 << 32 - var10; // L: 28
|
|
if ((var11 & var12) != 0) { // L: 29
|
|
var3[var10] = var3[var10 - 1]; // L: 30
|
|
break;
|
|
}
|
|
|
|
var3[var10] = var11 | var12; // L: 33
|
|
}
|
|
}
|
|
|
|
var3[var6] = var9; // L: 38
|
|
|
|
for (var10 = var6 + 1; var10 <= 32; ++var10) { // L: 39
|
|
if (var8 == var3[var10]) { // L: 40
|
|
var3[var10] = var9;
|
|
}
|
|
}
|
|
|
|
var10 = 0; // L: 42
|
|
|
|
for (var11 = 0; var11 < var6; ++var11) { // L: 43
|
|
var12 = Integer.MIN_VALUE >>> var11; // L: 44
|
|
if ((var8 & var12) != 0) { // L: 45
|
|
if (this.keys[var10] == 0) { // L: 46
|
|
this.keys[var10] = var4;
|
|
}
|
|
|
|
var10 = this.keys[var10]; // L: 47
|
|
} else {
|
|
++var10; // L: 49
|
|
}
|
|
|
|
if (var10 >= this.keys.length) { // L: 50
|
|
int[] var13 = new int[this.keys.length * 2]; // L: 51
|
|
|
|
for (int var14 = 0; var14 < this.keys.length; ++var14) { // L: 52
|
|
var13[var14] = this.keys[var14];
|
|
}
|
|
|
|
this.keys = var13; // L: 53
|
|
}
|
|
|
|
var12 >>>= 1; // L: 55
|
|
}
|
|
|
|
this.keys[var10] = ~var5; // L: 57
|
|
if (var10 >= var4) { // L: 58
|
|
var4 = var10 + 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
} // L: 60
|
|
|
|
@ObfuscatedName("o")
|
|
@ObfuscatedSignature(
|
|
descriptor = "([BII[BII)I",
|
|
garbageValue = "-1517056524"
|
|
)
|
|
@Export("compress")
|
|
int compress(byte[] var1, int var2, int var3, byte[] var4, int var5) {
|
|
int var6 = 0; // L: 63
|
|
int var7 = var5 << 3; // L: 64
|
|
|
|
for (var3 += var2; var2 < var3; ++var2) { // L: 65 66
|
|
int var8 = var1[var2] & 255; // L: 67
|
|
int var9 = this.masks[var8]; // L: 68
|
|
byte var10 = this.bits[var8]; // L: 69
|
|
if (var10 == 0) { // L: 70
|
|
throw new RuntimeException("" + var8);
|
|
}
|
|
|
|
int var11 = var7 >> 3; // L: 71
|
|
int var12 = var7 & 7; // L: 72
|
|
var6 &= -var12 >> 31; // L: 73
|
|
int var13 = (var12 + var10 - 1 >> 3) + var11; // L: 74
|
|
var12 += 24; // L: 76
|
|
var4[var11] = (byte)(var6 |= var9 >>> var12); // L: 77
|
|
if (var11 < var13) { // L: 78
|
|
++var11; // L: 79
|
|
var12 -= 8; // L: 80
|
|
var4[var11] = (byte)(var6 = var9 >>> var12); // L: 81
|
|
if (var11 < var13) { // L: 82
|
|
++var11; // L: 83
|
|
var12 -= 8; // L: 84
|
|
var4[var11] = (byte)(var6 = var9 >>> var12); // L: 85
|
|
if (var11 < var13) { // L: 86
|
|
++var11; // L: 87
|
|
var12 -= 8; // L: 88
|
|
var4[var11] = (byte)(var6 = var9 >>> var12); // L: 89
|
|
if (var11 < var13) { // L: 90
|
|
++var11; // L: 91
|
|
var12 -= 8; // L: 92
|
|
var4[var11] = (byte)(var6 = var9 << -var12); // L: 93
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
var7 += var10; // L: 95
|
|
}
|
|
|
|
return (var7 + 7 >> 3) - var5; // L: 97
|
|
}
|
|
|
|
@ObfuscatedName("q")
|
|
@ObfuscatedSignature(
|
|
descriptor = "([BI[BIII)I",
|
|
garbageValue = "-1136816719"
|
|
)
|
|
@Export("decompress")
|
|
int decompress(byte[] var1, int var2, byte[] var3, int var4, int var5) {
|
|
if (var5 == 0) { // L: 101
|
|
return 0;
|
|
} else {
|
|
int var6 = 0; // L: 102
|
|
var5 += var4; // L: 103
|
|
int var7 = var2;
|
|
|
|
while (true) {
|
|
byte var8 = var1[var7]; // L: 106
|
|
if (var8 < 0) { // L: 108
|
|
var6 = this.keys[var6];
|
|
} else {
|
|
++var6; // L: 109
|
|
}
|
|
|
|
int var9;
|
|
if ((var9 = this.keys[var6]) < 0) { // L: 110
|
|
var3[var4++] = (byte)(~var9); // L: 111
|
|
if (var4 >= var5) { // L: 112
|
|
break;
|
|
}
|
|
|
|
var6 = 0; // L: 113
|
|
}
|
|
|
|
if ((var8 & 64) != 0) { // L: 115
|
|
var6 = this.keys[var6];
|
|
} else {
|
|
++var6; // L: 116
|
|
}
|
|
|
|
if ((var9 = this.keys[var6]) < 0) { // L: 117
|
|
var3[var4++] = (byte)(~var9); // L: 118
|
|
if (var4 >= var5) { // L: 119
|
|
break;
|
|
}
|
|
|
|
var6 = 0; // L: 120
|
|
}
|
|
|
|
if ((var8 & 32) != 0) { // L: 122
|
|
var6 = this.keys[var6];
|
|
} else {
|
|
++var6; // L: 123
|
|
}
|
|
|
|
if ((var9 = this.keys[var6]) < 0) { // L: 124
|
|
var3[var4++] = (byte)(~var9); // L: 125
|
|
if (var4 >= var5) { // L: 126
|
|
break;
|
|
}
|
|
|
|
var6 = 0; // L: 127
|
|
}
|
|
|
|
if ((var8 & 16) != 0) { // L: 129
|
|
var6 = this.keys[var6];
|
|
} else {
|
|
++var6; // L: 130
|
|
}
|
|
|
|
if ((var9 = this.keys[var6]) < 0) { // L: 131
|
|
var3[var4++] = (byte)(~var9); // L: 132
|
|
if (var4 >= var5) { // L: 133
|
|
break;
|
|
}
|
|
|
|
var6 = 0; // L: 134
|
|
}
|
|
|
|
if ((var8 & 8) != 0) { // L: 136
|
|
var6 = this.keys[var6];
|
|
} else {
|
|
++var6; // L: 137
|
|
}
|
|
|
|
if ((var9 = this.keys[var6]) < 0) { // L: 138
|
|
var3[var4++] = (byte)(~var9); // L: 139
|
|
if (var4 >= var5) { // L: 140
|
|
break;
|
|
}
|
|
|
|
var6 = 0; // L: 141
|
|
}
|
|
|
|
if ((var8 & 4) != 0) { // L: 143
|
|
var6 = this.keys[var6];
|
|
} else {
|
|
++var6; // L: 144
|
|
}
|
|
|
|
if ((var9 = this.keys[var6]) < 0) { // L: 145
|
|
var3[var4++] = (byte)(~var9); // L: 146
|
|
if (var4 >= var5) { // L: 147
|
|
break;
|
|
}
|
|
|
|
var6 = 0; // L: 148
|
|
}
|
|
|
|
if ((var8 & 2) != 0) { // L: 150
|
|
var6 = this.keys[var6];
|
|
} else {
|
|
++var6; // L: 151
|
|
}
|
|
|
|
if ((var9 = this.keys[var6]) < 0) { // L: 152
|
|
var3[var4++] = (byte)(~var9); // L: 153
|
|
if (var4 >= var5) { // L: 154
|
|
break;
|
|
}
|
|
|
|
var6 = 0; // L: 155
|
|
}
|
|
|
|
if ((var8 & 1) != 0) {
|
|
var6 = this.keys[var6]; // L: 157
|
|
} else {
|
|
++var6; // L: 158
|
|
}
|
|
|
|
if ((var9 = this.keys[var6]) < 0) { // L: 159
|
|
var3[var4++] = (byte)(~var9); // L: 160
|
|
if (var4 >= var5) { // L: 161
|
|
break;
|
|
}
|
|
|
|
var6 = 0; // L: 162
|
|
}
|
|
|
|
++var7; // L: 105
|
|
}
|
|
|
|
return var7 + 1 - var2; // L: 165
|
|
}
|
|
}
|
|
}
|