protected synchronized void write(int i, int j, byte abyte0[], int k) {
    try {
      int l = getOffset(i, j);
      int i1 = l >> 8;
      int l1 = l & 0xff;
      int i2 = (k + 5) / 4096 + 1;
      if (i2 >= 256) {
        return;
      }
      if (i1 != 0 && l1 == i2) {
        debug("SAVE", i, j, k, "rewrite");
        write(i1, abyte0, k);
      } else {
        for (int j2 = 0; j2 < l1; j2++) {
          sectorFree.set(i1 + j2, Boolean.valueOf(true));
        }

        int k2 = sectorFree.indexOf(Boolean.valueOf(true));
        int l2 = 0;
        if (k2 != -1) {
          int i3 = k2;
          do {
            if (i3 >= sectorFree.size()) {
              break;
            }
            if (l2 != 0) {
              if (((Boolean) sectorFree.get(i3)).booleanValue()) {
                l2++;
              } else {
                l2 = 0;
              }
            } else if (((Boolean) sectorFree.get(i3)).booleanValue()) {
              k2 = i3;
              l2 = 1;
            }
            if (l2 >= i2) {
              break;
            }
            i3++;
          } while (true);
        }
        if (l2 >= i2) {
          debug("SAVE", i, j, k, "reuse");
          int j1 = k2;
          setOffset(i, j, j1 << 8 | i2);
          for (int j3 = 0; j3 < i2; j3++) {
            sectorFree.set(j1 + j3, Boolean.valueOf(false));
          }

          write(j1, abyte0, k);
        } else {
          debug("SAVE", i, j, k, "grow");
          dataFile.seek(dataFile.length());
          int k1 = sectorFree.size();
          for (int k3 = 0; k3 < i2; k3++) {
            dataFile.write(emptySector);
            sectorFree.add(Boolean.valueOf(false));
          }

          sizeDelta += 4096 * i2;
          write(k1, abyte0, k);
          setOffset(i, j, k1 << 8 | i2);
        }
      }
      setChunkTimestamp(i, j, (int) (System.currentTimeMillis() / 1000L));
    } catch (IOException ioexception) {
      ioexception.printStackTrace();
    }
  }