import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("kq") @Implements("AbstractArchive") public abstract class AbstractArchive { @ObfuscatedName("z") @ObfuscatedSignature( descriptor = "Lpw;" ) @Export("gzipDecompressor") static GZipDecompressor gzipDecompressor; @ObfuscatedName("av") @ObfuscatedGetter( intValue = 2083936703 ) static int field3910; @ObfuscatedName("q") @ObfuscatedGetter( intValue = 1473523841 ) @Export("groupCount") int groupCount; @ObfuscatedName("x") @Export("groupIds") int[] groupIds; @ObfuscatedName("p") @Export("groupNameHashes") int[] groupNameHashes; @ObfuscatedName("n") @ObfuscatedSignature( descriptor = "Lpf;" ) @Export("groupNameHashTable") IntHashTable groupNameHashTable; @ObfuscatedName("m") @Export("groupCrcs") int[] groupCrcs; @ObfuscatedName("d") @Export("groupVersions") int[] groupVersions; @ObfuscatedName("j") @Export("fileCounts") int[] fileCounts; @ObfuscatedName("f") @Export("fileIds") int[][] fileIds; @ObfuscatedName("g") @Export("fileNameHashes") int[][] fileNameHashes; @ObfuscatedName("t") @ObfuscatedSignature( descriptor = "[Lpf;" ) @Export("fileNameHashTables") IntHashTable[] fileNameHashTables; @ObfuscatedName("k") @Export("groups") Object[] groups; @ObfuscatedName("b") @Export("files") Object[][] files; @ObfuscatedName("ap") @ObfuscatedGetter( intValue = 1896012851 ) @Export("hash") public int hash; @ObfuscatedName("af") @Export("releaseGroups") boolean releaseGroups; @ObfuscatedName("ak") @Export("shallowFiles") boolean shallowFiles; static { gzipDecompressor = new GZipDecompressor(); // L: 23 field3910 = 0; // L: 27 } AbstractArchive(boolean var1, boolean var2) { this.releaseGroups = var1; // L: 32 this.shallowFiles = var2; // L: 33 } // L: 34 @ObfuscatedName("s") @ObfuscatedSignature( descriptor = "(II)V", garbageValue = "-1851114887" ) @Export("loadRegionFromGroup") void loadRegionFromGroup(int var1) { } // L: 123 @ObfuscatedName("e") @ObfuscatedSignature( descriptor = "(IB)V", garbageValue = "-45" ) @Export("loadGroup") void loadGroup(int var1) { } // L: 209 @ObfuscatedName("v") @ObfuscatedSignature( descriptor = "(IB)I", garbageValue = "-105" ) @Export("groupLoadPercent") int groupLoadPercent(int var1) { return this.groups[var1] != null ? 100 : 0; // L: 179 180 } @ObfuscatedName("ai") @ObfuscatedSignature( descriptor = "([BB)V", garbageValue = "0" ) @Export("decodeIndex") void decodeIndex(byte[] var1) { int var3 = var1.length; // L: 38 int var2 = ClientPreferences.method2230(var1, 0, var3); // L: 40 this.hash = var2; // L: 42 Buffer var4 = new Buffer(ArchiveLoader.decompressBytes(var1)); // L: 43 int var5 = var4.readUnsignedByte(); // L: 44 if (var5 >= 5 && var5 <= 7) { // L: 45 if (var5 >= 6) { // L: 46 var4.readInt(); // L: 47 } int var6 = var4.readUnsignedByte(); // L: 50 if (var5 >= 7) { // L: 51 this.groupCount = var4.method7384(); } else { this.groupCount = var4.readUnsignedShort(); // L: 52 } int var7 = 0; // L: 53 int var8 = -1; // L: 54 this.groupIds = new int[this.groupCount]; // L: 55 int var9; if (var5 >= 7) { // L: 56 for (var9 = 0; var9 < this.groupCount; ++var9) { // L: 57 this.groupIds[var9] = var7 += var4.method7384(); // L: 58 if (this.groupIds[var9] > var8) { // L: 59 var8 = this.groupIds[var9]; } } } else { for (var9 = 0; var9 < this.groupCount; ++var9) { // L: 63 this.groupIds[var9] = var7 += var4.readUnsignedShort(); // L: 64 if (this.groupIds[var9] > var8) { // L: 65 var8 = this.groupIds[var9]; } } } this.groupCrcs = new int[var8 + 1]; // L: 68 this.groupVersions = new int[var8 + 1]; // L: 69 this.fileCounts = new int[var8 + 1]; // L: 70 this.fileIds = new int[var8 + 1][]; // L: 71 this.groups = new Object[var8 + 1]; // L: 72 this.files = new Object[var8 + 1][]; // L: 73 if (var6 != 0) { // L: 74 this.groupNameHashes = new int[var8 + 1]; // L: 75 for (var9 = 0; var9 < this.groupCount; ++var9) { // L: 76 this.groupNameHashes[this.groupIds[var9]] = var4.readInt(); } this.groupNameHashTable = new IntHashTable(this.groupNameHashes); // L: 77 } for (var9 = 0; var9 < this.groupCount; ++var9) { // L: 79 this.groupCrcs[this.groupIds[var9]] = var4.readInt(); } for (var9 = 0; var9 < this.groupCount; ++var9) { // L: 80 this.groupVersions[this.groupIds[var9]] = var4.readInt(); } for (var9 = 0; var9 < this.groupCount; ++var9) { // L: 81 this.fileCounts[this.groupIds[var9]] = var4.readUnsignedShort(); } int var10; int var11; int var12; int var13; int var14; if (var5 >= 7) { // L: 82 for (var9 = 0; var9 < this.groupCount; ++var9) { // L: 83 var10 = this.groupIds[var9]; // L: 84 var11 = this.fileCounts[var10]; // L: 85 var7 = 0; // L: 86 var12 = -1; // L: 87 this.fileIds[var10] = new int[var11]; // L: 88 for (var13 = 0; var13 < var11; ++var13) { // L: 89 var14 = this.fileIds[var10][var13] = var7 += var4.method7384(); // L: 90 if (var14 > var12) { // L: 91 var12 = var14; } } this.files[var10] = new Object[var12 + 1]; // L: 93 } } else { for (var9 = 0; var9 < this.groupCount; ++var9) { // L: 97 var10 = this.groupIds[var9]; // L: 98 var11 = this.fileCounts[var10]; // L: 99 var7 = 0; // L: 100 var12 = -1; // L: 101 this.fileIds[var10] = new int[var11]; // L: 102 for (var13 = 0; var13 < var11; ++var13) { // L: 103 var14 = this.fileIds[var10][var13] = var7 += var4.readUnsignedShort(); // L: 104 if (var14 > var12) { // L: 105 var12 = var14; } } this.files[var10] = new Object[var12 + 1]; // L: 107 } } if (var6 != 0) { // L: 110 this.fileNameHashes = new int[var8 + 1][]; // L: 111 this.fileNameHashTables = new IntHashTable[var8 + 1]; // L: 112 for (var9 = 0; var9 < this.groupCount; ++var9) { // L: 113 var10 = this.groupIds[var9]; // L: 114 var11 = this.fileCounts[var10]; // L: 115 this.fileNameHashes[var10] = new int[this.files[var10].length]; // L: 116 for (var12 = 0; var12 < var11; ++var12) { // L: 117 this.fileNameHashes[var10][this.fileIds[var10][var12]] = var4.readInt(); } this.fileNameHashTables[var10] = new IntHashTable(this.fileNameHashes[var10]); // L: 118 } } } else { throw new RuntimeException(""); } } // L: 121 @ObfuscatedName("am") @ObfuscatedSignature( descriptor = "(IIB)[B", garbageValue = "103" ) @Export("takeFile") public byte[] takeFile(int var1, int var2) { return this.takeFileEncrypted(var1, var2, (int[])null); // L: 126 } @ObfuscatedName("bt") @ObfuscatedSignature( descriptor = "(II[II)[B", garbageValue = "-139844284" ) @Export("takeFileEncrypted") public byte[] takeFileEncrypted(int var1, int var2, int[] var3) { if (var1 >= 0 && var1 < this.files.length && this.files[var1] != null && var2 >= 0 && var2 < this.files[var1].length) { // L: 130 if (this.files[var1][var2] == null) { // L: 131 boolean var4 = this.buildFiles(var1, var3); // L: 132 if (!var4) { // L: 133 this.loadGroup(var1); // L: 134 var4 = this.buildFiles(var1, var3); // L: 135 if (!var4) { // L: 136 return null; } } } byte[] var5 = Tiles.method2039(this.files[var1][var2], false); // L: 139 if (this.shallowFiles) { this.files[var1][var2] = null; // L: 140 } return var5; // L: 141 } else { return null; } } @ObfuscatedName("bn") @ObfuscatedSignature( descriptor = "(III)Z", garbageValue = "-1944778357" ) @Export("tryLoadFile") public boolean tryLoadFile(int var1, int var2) { if (var1 >= 0 && var1 < this.files.length && this.files[var1] != null && var2 >= 0 && var2 < this.files[var1].length) { // L: 145 if (this.files[var1][var2] != null) { return true; // L: 146 } else if (this.groups[var1] != null) { // L: 147 return true; } else { this.loadGroup(var1); // L: 148 return this.groups[var1] != null; // L: 149 } } else { return false; // L: 150 } } @ObfuscatedName("bz") @ObfuscatedSignature( descriptor = "(II)Z", garbageValue = "588369495" ) public boolean method5581(int var1) { if (this.files.length == 1) { // L: 154 return this.tryLoadFile(0, var1); } else if (this.files[var1].length == 1) { return this.tryLoadFile(var1, 0); // L: 155 } else { throw new RuntimeException(); // L: 156 } } @ObfuscatedName("bx") @ObfuscatedSignature( descriptor = "(II)Z", garbageValue = "1948047454" ) @Export("tryLoadGroup") public boolean tryLoadGroup(int var1) { if (this.groups[var1] != null) { // L: 160 return true; } else { this.loadGroup(var1); // L: 161 return this.groups[var1] != null; // L: 162 } } @ObfuscatedName("bd") @ObfuscatedSignature( descriptor = "(I)Z", garbageValue = "710425889" ) @Export("isFullyLoaded") public boolean isFullyLoaded() { boolean var1 = true; // L: 167 for (int var2 = 0; var2 < this.groupIds.length; ++var2) { // L: 168 int var3 = this.groupIds[var2]; // L: 169 if (this.groups[var3] == null) { // L: 170 this.loadGroup(var3); // L: 171 if (this.groups[var3] == null) { // L: 172 var1 = false; } } } return var1; // L: 175 } @ObfuscatedName("bg") @ObfuscatedSignature( descriptor = "(IB)[B", garbageValue = "32" ) @Export("takeFileFlat") public byte[] takeFileFlat(int var1) { if (this.files.length == 1) { // L: 184 return this.takeFile(0, var1); } else if (this.files[var1].length == 1) { return this.takeFile(var1, 0); // L: 185 } else { throw new RuntimeException(); // L: 186 } } @ObfuscatedName("bm") @ObfuscatedSignature( descriptor = "(III)[B", garbageValue = "463261164" ) @Export("getFile") public byte[] getFile(int var1, int var2) { if (var1 >= 0 && var1 < this.files.length && this.files[var1] != null && var2 >= 0 && var2 < this.files[var1].length) { // L: 190 if (this.files[var1][var2] == null) { // L: 191 boolean var3 = this.buildFiles(var1, (int[])null); // L: 192 if (!var3) { // L: 193 this.loadGroup(var1); // L: 194 var3 = this.buildFiles(var1, (int[])null); // L: 195 if (!var3) { // L: 196 return null; } } } byte[] var4 = Tiles.method2039(this.files[var1][var2], false); // L: 199 return var4; // L: 200 } else { return null; } } @ObfuscatedName("bi") @ObfuscatedSignature( descriptor = "(IB)[B", garbageValue = "1" ) @Export("getFileFlat") public byte[] getFileFlat(int var1) { if (this.files.length == 1) { // L: 204 return this.getFile(0, var1); } else if (this.files[var1].length == 1) { return this.getFile(var1, 0); // L: 205 } else { throw new RuntimeException(); // L: 206 } } @ObfuscatedName("bw") @ObfuscatedSignature( descriptor = "(II)[I", garbageValue = "-507852577" ) @Export("getGroupFileIds") public int[] getGroupFileIds(int var1) { return var1 >= 0 && var1 < this.fileIds.length ? this.fileIds[var1] : null; // L: 212 213 215 } @ObfuscatedName("bu") @ObfuscatedSignature( descriptor = "(IB)I", garbageValue = "-65" ) @Export("getGroupFileCount") public int getGroupFileCount(int var1) { return this.files[var1].length; // L: 219 } @ObfuscatedName("bs") @ObfuscatedSignature( descriptor = "(S)I", garbageValue = "-32102" ) @Export("getGroupCount") public int getGroupCount() { return this.files.length; // L: 223 } @ObfuscatedName("bb") @ObfuscatedSignature( descriptor = "(B)V", garbageValue = "38" ) @Export("clearGroups") public void clearGroups() { for (int var1 = 0; var1 < this.groups.length; ++var1) { // L: 227 this.groups[var1] = null; } } // L: 228 @ObfuscatedName("br") @ObfuscatedSignature( descriptor = "(IB)V", garbageValue = "-51" ) @Export("clearFilesGroup") public void clearFilesGroup(int var1) { for (int var2 = 0; var2 < this.files[var1].length; ++var2) { // L: 231 this.files[var1][var2] = null; } } // L: 232 @ObfuscatedName("bh") @ObfuscatedSignature( descriptor = "(B)V", garbageValue = "-43" ) @Export("clearFiles") public void clearFiles() { for (int var1 = 0; var1 < this.files.length; ++var1) { // L: 235 if (this.files[var1] != null) { // L: 236 for (int var2 = 0; var2 < this.files[var1].length; ++var2) { // L: 237 this.files[var1][var2] = null; } } } } // L: 240 @ObfuscatedName("bf") @ObfuscatedSignature( descriptor = "(I[II)Z", garbageValue = "-697794634" ) @Export("buildFiles") boolean buildFiles(int var1, int[] var2) { if (this.groups[var1] == null) { // L: 243 return false; } else { int var3 = this.fileCounts[var1]; // L: 244 int[] var4 = this.fileIds[var1]; // L: 245 Object[] var5 = this.files[var1]; // L: 246 boolean var6 = true; // L: 247 for (int var7 = 0; var7 < var3; ++var7) { // L: 248 if (var5[var4[var7]] == null) { // L: 249 var6 = false; // L: 250 break; } } if (var6) { // L: 254 return true; } else { byte[] var21; if (var2 != null && (var2[0] != 0 || var2[1] != 0 || var2[2] != 0 || var2[3] != 0)) { // L: 256 var21 = Tiles.method2039(this.groups[var1], true); // L: 257 Buffer var8 = new Buffer(var21); // L: 258 var8.xteaDecrypt(var2, 5, var8.array.length); // L: 259 } else { var21 = Tiles.method2039(this.groups[var1], false); // L: 261 } byte[] var25 = ArchiveLoader.decompressBytes(var21); // L: 264 if (this.releaseGroups) { // L: 282 this.groups[var1] = null; } int var10; if (var3 > 1) { // L: 283 int var22 = var25.length; // L: 284 --var22; // L: 285 var10 = var25[var22] & 255; var22 -= var10 * var3 * 4; // L: 286 Buffer var11 = new Buffer(var25); // L: 287 int[] var12 = new int[var3]; // L: 288 var11.offset = var22; // L: 289 int var14; int var15; for (int var13 = 0; var13 < var10; ++var13) { // L: 290 var14 = 0; // L: 291 for (var15 = 0; var15 < var3; ++var15) { // L: 292 var14 += var11.readInt(); // L: 293 var12[var15] += var14; // L: 294 } } byte[][] var23 = new byte[var3][]; // L: 297 for (var14 = 0; var14 < var3; ++var14) { // L: 298 var23[var14] = new byte[var12[var14]]; // L: 299 var12[var14] = 0; // L: 300 } var11.offset = var22; // L: 302 var14 = 0; // L: 303 int var17; for (var15 = 0; var15 < var10; ++var15) { // L: 304 int var24 = 0; // L: 305 for (var17 = 0; var17 < var3; ++var17) { // L: 306 var24 += var11.readInt(); // L: 307 System.arraycopy(var25, var14, var23[var17], var12[var17], var24); // L: 308 var12[var17] += var24; // L: 309 var14 += var24; // L: 310 } } for (var15 = 0; var15 < var3; ++var15) { // L: 313 if (!this.shallowFiles) { // L: 314 var17 = var4[var15]; // L: 316 byte[] var19 = var23[var15]; // L: 318 Object var18; if (var19 == null) { // L: 320 var18 = null; // L: 321 } else if (var19.length > 136) { // L: 324 DirectByteArrayCopier var20 = new DirectByteArrayCopier(); // L: 326 var20.set(var19); // L: 327 var18 = var20; // L: 328 } else { var18 = var19; // L: 333 } var5[var17] = var18; // L: 335 } else { var5[var4[var15]] = var23[var15]; // L: 337 } } } else if (!this.shallowFiles) { // L: 341 var10 = var4[0]; // L: 343 Object var26; if (var25 == null) { // L: 346 var26 = null; // L: 347 } else if (var25.length > 136) { // L: 350 DirectByteArrayCopier var27 = new DirectByteArrayCopier(); // L: 352 var27.set(var25); // L: 353 var26 = var27; // L: 354 } else { var26 = var25; // L: 359 } var5[var10] = var26; // L: 361 } else { var5[var4[0]] = var25; // L: 363 } return true; // L: 365 } } } @ObfuscatedName("bq") @ObfuscatedSignature( descriptor = "(Ljava/lang/String;I)I", garbageValue = "-1412938428" ) @Export("getGroupId") public int getGroupId(String var1) { var1 = var1.toLowerCase(); // L: 369 return this.groupNameHashTable.get(Skills.hashString(var1)); // L: 370 } @ObfuscatedName("ba") @ObfuscatedSignature( descriptor = "(ILjava/lang/String;B)I", garbageValue = "119" ) @Export("getFileId") public int getFileId(int var1, String var2) { var2 = var2.toLowerCase(); // L: 374 return this.fileNameHashTables[var1].get(Skills.hashString(var2)); // L: 375 } @ObfuscatedName("bv") @ObfuscatedSignature( descriptor = "(Ljava/lang/String;Ljava/lang/String;B)Z", garbageValue = "100" ) @Export("isValidFileName") public boolean isValidFileName(String var1, String var2) { var1 = var1.toLowerCase(); // L: 379 var2 = var2.toLowerCase(); // L: 380 int var3 = this.groupNameHashTable.get(Skills.hashString(var1)); // L: 381 if (var3 < 0) { // L: 382 return false; } else { int var4 = this.fileNameHashTables[var3].get(Skills.hashString(var2)); // L: 383 return var4 >= 0; // L: 384 } } @ObfuscatedName("bl") @ObfuscatedSignature( descriptor = "(Ljava/lang/String;Ljava/lang/String;B)[B", garbageValue = "8" ) @Export("takeFileByNames") public byte[] takeFileByNames(String var1, String var2) { var1 = var1.toLowerCase(); // L: 389 var2 = var2.toLowerCase(); // L: 390 int var3 = this.groupNameHashTable.get(Skills.hashString(var1)); // L: 391 int var4 = this.fileNameHashTables[var3].get(Skills.hashString(var2)); // L: 392 return this.takeFile(var3, var4); // L: 393 } @ObfuscatedName("bc") @ObfuscatedSignature( descriptor = "(Ljava/lang/String;Ljava/lang/String;B)Z", garbageValue = "14" ) @Export("tryLoadFileByNames") public boolean tryLoadFileByNames(String var1, String var2) { var1 = var1.toLowerCase(); // L: 397 var2 = var2.toLowerCase(); // L: 398 int var3 = this.groupNameHashTable.get(Skills.hashString(var1)); // L: 399 int var4 = this.fileNameHashTables[var3].get(Skills.hashString(var2)); // L: 400 return this.tryLoadFile(var3, var4); // L: 401 } @ObfuscatedName("bj") @ObfuscatedSignature( descriptor = "(Ljava/lang/String;I)Z", garbageValue = "-1739581199" ) @Export("tryLoadGroupByName") public boolean tryLoadGroupByName(String var1) { var1 = var1.toLowerCase(); // L: 405 int var2 = this.groupNameHashTable.get(Skills.hashString(var1)); // L: 406 return this.tryLoadGroup(var2); // L: 407 } @ObfuscatedName("bo") @ObfuscatedSignature( descriptor = "(Ljava/lang/String;I)V", garbageValue = "-1310485097" ) @Export("loadRegionFromName") public void loadRegionFromName(String var1) { var1 = var1.toLowerCase(); // L: 411 int var2 = this.groupNameHashTable.get(Skills.hashString(var1)); // L: 412 if (var2 >= 0) { // L: 413 this.loadRegionFromGroup(var2); // L: 414 } } // L: 415 @ObfuscatedName("by") @ObfuscatedSignature( descriptor = "(Ljava/lang/String;B)I", garbageValue = "5" ) @Export("groupLoadPercentByName") public int groupLoadPercentByName(String var1) { var1 = var1.toLowerCase(); // L: 418 int var2 = this.groupNameHashTable.get(Skills.hashString(var1)); // L: 419 return this.groupLoadPercent(var2); // L: 420 } }