CrackMe.apk
Download file
package com.google.common.collect;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableCollection;
import com.google.errorprone.annotations.concurrent.LazyInit;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.Objects;
import java.util.Set;
import java.util.SortedSet;
import javax.annotation.CheckForNull;
@ElementTypesAreNonnullByDefault
public abstract class ImmutableSet<E> extends ImmutableCollection<E> implements Set<E> {
private static final int CUTOFF = 751619276;
private static final double DESIRED_LOAD_FACTOR = 0.7d;
static final int MAX_TABLE_SIZE = 1073741824;
@CheckForNull
@LazyInit
private transient ImmutableList<E> asList;
/* access modifiers changed from: private */
public static boolean shouldTrim(int i, int i2) {
return i < (i2 >> 1) + (i2 >> 2);
}
/* access modifiers changed from: package-private */
public boolean isHashCodeFast() {
return false;
}
public abstract UnmodifiableIterator<E> iterator();
public static <E> ImmutableSet<E> of() {
return RegularImmutableSet.EMPTY;
}
public static <E> ImmutableSet<E> of(E e) {
return new SingletonImmutableSet(e);
}
public static <E> ImmutableSet<E> of(E e, E e2) {
return construct(2, e, e2);
}
public static <E> ImmutableSet<E> of(E e, E e2, E e3) {
return construct(3, e, e2, e3);
}
public static <E> ImmutableSet<E> of(E e, E e2, E e3, E e4) {
return construct(4, e, e2, e3, e4);
}
public static <E> ImmutableSet<E> of(E e, E e2, E e3, E e4, E e5) {
return construct(5, e, e2, e3, e4, e5);
}
@SafeVarargs
public static <E> ImmutableSet<E> of(E e, E e2, E e3, E e4, E e5, E e6, E... eArr) {
Preconditions.checkArgument(eArr.length <= 2147483641, "the total number of elements must fit in an int");
int length = eArr.length + 6;
Object[] objArr = new Object[length];
objArr[0] = e;
objArr[1] = e2;
objArr[2] = e3;
objArr[3] = e4;
objArr[4] = e5;
objArr[5] = e6;
System.arraycopy(eArr, 0, objArr, 6, eArr.length);
return construct(length, objArr);
}
/* access modifiers changed from: private */
public static <E> ImmutableSet<E> construct(int i, Object... objArr) {
if (i == 0) {
return of();
}
if (i != 1) {
int chooseTableSize = chooseTableSize(i);
Object[] objArr2 = new Object[chooseTableSize];
int i2 = chooseTableSize - 1;
int i3 = 0;
int i4 = 0;
for (int i5 = 0; i5 < i; i5++) {
Object checkElementNotNull = ObjectArrays.checkElementNotNull(objArr[i5], i5);
int hashCode = checkElementNotNull.hashCode();
int smear = Hashing.smear(hashCode);
while (true) {
int i6 = smear & i2;
Object obj = objArr2[i6];
if (obj == null) {
objArr[i4] = checkElementNotNull;
objArr2[i6] = checkElementNotNull;
i3 += hashCode;
i4++;
break;
} else if (obj.equals(checkElementNotNull)) {
break;
} else {
smear++;
}
}
}
Arrays.fill(objArr, i4, i, (Object) null);
if (i4 == 1) {
Object obj2 = objArr[0];
Objects.requireNonNull(obj2);
return new SingletonImmutableSet(obj2);
} else if (chooseTableSize(i4) < chooseTableSize / 2) {
return construct(i4, objArr);
} else {
if (shouldTrim(i4, objArr.length)) {
objArr = Arrays.copyOf(objArr, i4);
}
return new RegularImmutableSet(objArr, i3, objArr2, i2, i4);
}
} else {
Object obj3 = objArr[0];
Objects.requireNonNull(obj3);
return of(obj3);
}
}
static int chooseTableSize(int i) {
int max = Math.max(i, 2);
boolean z = true;
if (max < CUTOFF) {
int highestOneBit = Integer.highestOneBit(max - 1) << 1;
while (((double) highestOneBit) * DESIRED_LOAD_FACTOR < ((double) max)) {
highestOneBit <<= 1;
}
return highestOneBit;
}
if (max >= 1073741824) {
z = false;
}
Preconditions.checkArgument(z, "collection too large");
return 1073741824;
}
public static <E> ImmutableSet<E> copyOf(Collection<? extends E> collection) {
if ((collection instanceof ImmutableSet) && !(collection instanceof SortedSet)) {
ImmutableSet<E> immutableSet = (ImmutableSet) collection;
if (!immutableSet.isPartialView()) {
return immutableSet;
}
}
Object[] array = collection.toArray();
return construct(array.length, array);
}
public static <E> ImmutableSet<E> copyOf(Iterable<? extends E> iterable) {
if (iterable instanceof Collection) {
return copyOf((Collection) iterable);
}
return copyOf(iterable.iterator());
}
public static <E> ImmutableSet<E> copyOf(Iterator<? extends E> it) {
if (!it.hasNext()) {
return of();
}
Object next = it.next();
if (!it.hasNext()) {
return of(next);
}
return new Builder().add((Object) next).addAll((Iterator) it).build();
}
public static <E> ImmutableSet<E> copyOf(E[] eArr) {
int length = eArr.length;
if (length == 0) {
return of();
}
if (length != 1) {
return construct(eArr.length, (Object[]) eArr.clone());
}
return of(eArr[0]);
}
ImmutableSet() {
}
public boolean equals(@CheckForNull Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof ImmutableSet) || !isHashCodeFast() || !((ImmutableSet) obj).isHashCodeFast() || hashCode() == obj.hashCode()) {
return Sets.equalsImpl(this, obj);
}
return false;
}
public int hashCode() {
return Sets.hashCodeImpl(this);
}
public ImmutableList<E> asList() {
ImmutableList<E> immutableList = this.asList;
if (immutableList != null) {
return immutableList;
}
ImmutableList<E> createAsList = createAsList();
this.asList = createAsList;
return createAsList;
}
/* access modifiers changed from: package-private */
public ImmutableList<E> createAsList() {
return ImmutableList.asImmutableList(toArray());
}
private static class SerializedForm implements Serializable {
private static final long serialVersionUID = 0;
final Object[] elements;
SerializedForm(Object[] objArr) {
this.elements = objArr;
}
/* access modifiers changed from: package-private */
public Object readResolve() {
return ImmutableSet.copyOf((E[]) this.elements);
}
}
/* access modifiers changed from: package-private */
public Object writeReplace() {
return new SerializedForm(toArray());
}
public static <E> Builder<E> builder() {
return new Builder<>();
}
public static <E> Builder<E> builderWithExpectedSize(int i) {
CollectPreconditions.checkNonnegative(i, "expectedSize");
return new Builder<>(i);
}
public static class Builder<E> extends ImmutableCollection.ArrayBasedBuilder<E> {
private int hashCode;
@CheckForNull
Object[] hashTable;
public Builder() {
super(4);
}
Builder(int i) {
super(i);
this.hashTable = new Object[ImmutableSet.chooseTableSize(i)];
}
public Builder<E> add(E e) {
Preconditions.checkNotNull(e);
if (this.hashTable == null || ImmutableSet.chooseTableSize(this.size) > this.hashTable.length) {
this.hashTable = null;
super.add(e);
return this;
}
addDeduping(e);
return this;
}
public Builder<E> add(E... eArr) {
if (this.hashTable != null) {
for (E add : eArr) {
add((Object) add);
}
} else {
super.add(eArr);
}
return this;
}
private void addDeduping(E e) {
Objects.requireNonNull(this.hashTable);
int length = this.hashTable.length - 1;
int hashCode2 = e.hashCode();
int smear = Hashing.smear(hashCode2);
while (true) {
int i = smear & length;
Object[] objArr = this.hashTable;
Object obj = objArr[i];
if (obj == null) {
objArr[i] = e;
this.hashCode += hashCode2;
super.add(e);
return;
} else if (!obj.equals(e)) {
smear = i + 1;
} else {
return;
}
}
}
public Builder<E> addAll(Iterable<? extends E> iterable) {
Preconditions.checkNotNull(iterable);
if (this.hashTable != null) {
for (Object add : iterable) {
add((Object) add);
}
} else {
super.addAll(iterable);
}
return this;
}
public Builder<E> addAll(Iterator<? extends E> it) {
Preconditions.checkNotNull(it);
while (it.hasNext()) {
add((Object) it.next());
}
return this;
}
/* access modifiers changed from: package-private */
public Builder<E> combine(Builder<E> builder) {
if (this.hashTable != null) {
for (int i = 0; i < builder.size; i++) {
Object obj = builder.contents[i];
Objects.requireNonNull(obj);
add(obj);
}
} else {
addAll(builder.contents, builder.size);
}
return this;
}
/* JADX DEBUG: Multi-variable search result rejected for TypeSearchVarInfo{r0v8, resolved type: com.google.common.collect.ImmutableSet} */
/* JADX DEBUG: Multi-variable search result rejected for TypeSearchVarInfo{r0v18, resolved type: com.google.common.collect.RegularImmutableSet} */
/* JADX DEBUG: Multi-variable search result rejected for TypeSearchVarInfo{r2v9, resolved type: com.google.common.collect.RegularImmutableSet} */
/* JADX WARNING: type inference failed for: r0v6, types: [com.google.common.collect.ImmutableSet<E>] */
/* JADX WARNING: Multi-variable type inference failed */
/* Code decompiled incorrectly, please refer to instructions dump. */
public com.google.common.collect.ImmutableSet<E> build() {
/*
r8 = this;
int r0 = r8.size
if (r0 == 0) goto L_0x005e
r1 = 1
if (r0 == r1) goto L_0x0051
java.lang.Object[] r0 = r8.hashTable
if (r0 == 0) goto L_0x003d
int r0 = r8.size
int r0 = com.google.common.collect.ImmutableSet.chooseTableSize(r0)
java.lang.Object[] r2 = r8.hashTable
int r2 = r2.length
if (r0 != r2) goto L_0x003d
int r0 = r8.size
java.lang.Object[] r2 = r8.contents
int r2 = r2.length
boolean r0 = com.google.common.collect.ImmutableSet.shouldTrim(r0, r2)
if (r0 == 0) goto L_0x002a
java.lang.Object[] r0 = r8.contents
int r2 = r8.size
java.lang.Object[] r0 = java.util.Arrays.copyOf(r0, r2)
goto L_0x002c
L_0x002a:
java.lang.Object[] r0 = r8.contents
L_0x002c:
r3 = r0
com.google.common.collect.RegularImmutableSet r0 = new com.google.common.collect.RegularImmutableSet
int r4 = r8.hashCode
java.lang.Object[] r5 = r8.hashTable
int r2 = r5.length
int r6 = r2 + -1
int r7 = r8.size
r2 = r0
r2.<init>(r3, r4, r5, r6, r7)
goto L_0x004b
L_0x003d:
int r0 = r8.size
java.lang.Object[] r2 = r8.contents
com.google.common.collect.ImmutableSet r0 = com.google.common.collect.ImmutableSet.construct(r0, r2)
int r2 = r0.size()
r8.size = r2
L_0x004b:
r8.forceCopy = r1
r1 = 0
r8.hashTable = r1
return r0
L_0x0051:
java.lang.Object[] r0 = r8.contents
r1 = 0
r0 = r0[r1]
java.util.Objects.requireNonNull(r0)
com.google.common.collect.ImmutableSet r0 = com.google.common.collect.ImmutableSet.of(r0)
return r0
L_0x005e:
com.google.common.collect.ImmutableSet r0 = com.google.common.collect.ImmutableSet.of()
return r0
*/
throw new UnsupportedOperationException("Method not decompiled: com.google.common.collect.ImmutableSet.Builder.build():com.google.common.collect.ImmutableSet");
}
}
}
Download file