abstract class com.mongodb.async.client.AbstractSubscription<TResult> implements com.mongodb.async.client.Subscription
minor version: 0
major version: 59
flags: flags: (0x0420) ACC_SUPER, ACC_ABSTRACT
this_class: com.mongodb.async.client.AbstractSubscription
super_class: java.lang.Object
{
private static final com.mongodb.diagnostics.logging.Logger LOGGER;
descriptor: Lcom/mongodb/diagnostics/logging/Logger;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private final com.mongodb.async.client.Observer<? super TResult> observer;
descriptor: Lcom/mongodb/async/client/Observer;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
Signature: Lcom/mongodb/async/client/Observer<-TTResult;>;
private boolean requestedData;
descriptor: Z
flags: (0x0002) ACC_PRIVATE
private boolean isProcessing;
descriptor: Z
flags: (0x0002) ACC_PRIVATE
private long requested;
descriptor: J
flags: (0x0002) ACC_PRIVATE
private boolean isUnsubscribed;
descriptor: Z
flags: (0x0002) ACC_PRIVATE
private boolean isTerminated;
descriptor: Z
flags: (0x0002) ACC_PRIVATE
private final java.util.concurrent.ConcurrentLinkedQueue<TResult> resultsQueue;
descriptor: Ljava/util/concurrent/ConcurrentLinkedQueue;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
Signature: Ljava/util/concurrent/ConcurrentLinkedQueue<TTResult;>;
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=1, locals=0, args_size=0
0: ldc "client"
invokestatic com.mongodb.diagnostics.logging.Loggers.getLogger:(Ljava/lang/String;)Lcom/mongodb/diagnostics/logging/Logger;
putstatic com.mongodb.async.client.AbstractSubscription.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
return
LocalVariableTable:
Start End Slot Name Signature
void <init>(com.mongodb.async.client.Observer<? super TResult>);
descriptor: (Lcom/mongodb/async/client/Observer;)V
flags: (0x0000)
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 0
lconst_0
putfield com.mongodb.async.client.AbstractSubscription.requested:J
2: aload 0
iconst_0
putfield com.mongodb.async.client.AbstractSubscription.isUnsubscribed:Z
3: aload 0
iconst_0
putfield com.mongodb.async.client.AbstractSubscription.isTerminated:Z
4: aload 0
new java.util.concurrent.ConcurrentLinkedQueue
dup
invokespecial java.util.concurrent.ConcurrentLinkedQueue.<init>:()V
putfield com.mongodb.async.client.AbstractSubscription.resultsQueue:Ljava/util/concurrent/ConcurrentLinkedQueue;
5: aload 0
aload 1
putfield com.mongodb.async.client.AbstractSubscription.observer:Lcom/mongodb/async/client/Observer;
6: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 7 0 this Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
0 7 1 observer Lcom/mongodb/async/client/Observer<-TTResult;>;
Signature: (Lcom/mongodb/async/client/Observer<-TTResult;>;)V
MethodParameters:
Name Flags
observer final
public void unsubscribe();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=3, args_size=1
start local 0 0: iconst_0
istore 1
start local 1 1: aload 0
dup
astore 2
monitorenter
2: aload 0
getfield com.mongodb.async.client.AbstractSubscription.isUnsubscribed:Z
ifne 6
3: iconst_1
istore 1
4: aload 0
iconst_1
putfield com.mongodb.async.client.AbstractSubscription.isUnsubscribed:Z
5: aload 0
iconst_1
putfield com.mongodb.async.client.AbstractSubscription.isTerminated:Z
6: StackMap locals: int com.mongodb.async.client.AbstractSubscription
StackMap stack:
aload 2
monitorexit
7: goto 10
StackMap locals:
StackMap stack: java.lang.Throwable
8: aload 2
monitorexit
9: athrow
10: StackMap locals:
StackMap stack:
iload 1
ifeq 12
11: aload 0
invokevirtual com.mongodb.async.client.AbstractSubscription.postTerminate:()V
12: StackMap locals:
StackMap stack:
return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 13 0 this Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
1 13 1 unsubscribe Z
Exception table:
from to target type
2 7 8 any
8 9 8 any
public synchronized boolean isUnsubscribed();
descriptor: ()Z
flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield com.mongodb.async.client.AbstractSubscription.isUnsubscribed:Z
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
public void request(long);
descriptor: (J)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=5, args_size=2
start local 0 start local 1 0: lload 1
lconst_1
lcmp
ifge 2
1: new java.lang.IllegalArgumentException
dup
new java.lang.StringBuilder
dup
ldc "Number requested must be > 0: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
lload 1
invokevirtual java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
2: StackMap locals:
StackMap stack:
iconst_0
istore 3
start local 3 3: aload 0
dup
astore 4
monitorenter
4: aload 0
getfield com.mongodb.async.client.AbstractSubscription.requested:J
lload 1
ladd
lconst_1
lcmp
ifge 7
5: aload 0
ldc 9223372036854775807
putfield com.mongodb.async.client.AbstractSubscription.requested:J
6: goto 8
7: StackMap locals: int com.mongodb.async.client.AbstractSubscription
StackMap stack:
aload 0
dup
getfield com.mongodb.async.client.AbstractSubscription.requested:J
lload 1
ladd
putfield com.mongodb.async.client.AbstractSubscription.requested:J
8: StackMap locals:
StackMap stack:
aload 0
getfield com.mongodb.async.client.AbstractSubscription.requestedData:Z
ifne 11
9: aload 0
iconst_1
putfield com.mongodb.async.client.AbstractSubscription.requestedData:Z
10: iconst_1
istore 3
11: StackMap locals:
StackMap stack:
aload 4
monitorexit
12: goto 15
StackMap locals:
StackMap stack: java.lang.Throwable
13: aload 4
monitorexit
14: athrow
15: StackMap locals:
StackMap stack:
iload 3
ifeq 18
16: aload 0
invokevirtual com.mongodb.async.client.AbstractSubscription.tryRequestInitialData:()V
17: goto 19
18: StackMap locals:
StackMap stack:
aload 0
invokevirtual com.mongodb.async.client.AbstractSubscription.tryProcessResultsQueue:()V
19: StackMap locals:
StackMap stack:
return
end local 3 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 20 0 this Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
0 20 1 n J
3 20 3 requestData Z
Exception table:
from to target type
4 12 13 any
13 14 13 any
MethodParameters:
Name Flags
n final
abstract void requestInitialData();
descriptor: ()V
flags: (0x0400) ACC_ABSTRACT
void requestMoreData();
descriptor: ()V
flags: (0x0000)
Code:
stack=0, locals=1, args_size=1
start local 0 0: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
void postTerminate();
descriptor: ()V
flags: (0x0000)
Code:
stack=0, locals=1, args_size=1
start local 0 0: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
abstract boolean checkCompleted();
descriptor: ()Z
flags: (0x0400) ACC_ABSTRACT
synchronized boolean isTerminated();
descriptor: ()Z
flags: (0x0020) ACC_SYNCHRONIZED
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield com.mongodb.async.client.AbstractSubscription.isTerminated:Z
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
synchronized long getRequested();
descriptor: ()J
flags: (0x0020) ACC_SYNCHRONIZED
Code:
stack=2, locals=1, args_size=1
start local 0 0: aload 0
getfield com.mongodb.async.client.AbstractSubscription.requested:J
lreturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
void addToQueue();
descriptor: (Ljava/lang/Object;)V
flags: (0x0000)
Code:
stack=2, locals=2, args_size=2
start local 0 start local 1 0: aload 1
ifnull 2
1: aload 0
getfield com.mongodb.async.client.AbstractSubscription.resultsQueue:Ljava/util/concurrent/ConcurrentLinkedQueue;
aload 1
invokevirtual java.util.concurrent.ConcurrentLinkedQueue.add:(Ljava/lang/Object;)Z
pop
2: StackMap locals:
StackMap stack:
return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
0 3 1 result TTResult;
Signature: (TTResult;)V
RuntimeVisibleParameterAnnotations:
0:
com.mongodb.lang.Nullable()
MethodParameters:
Name Flags
result final
void addToQueue(java.util.List<TResult>);
descriptor: (Ljava/util/List;)V
flags: (0x0000)
Code:
stack=2, locals=4, args_size=2
start local 0 start local 1 0: aload 1
ifnull 5
1: aload 1
invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
astore 3
goto 4
StackMap locals: com.mongodb.async.client.AbstractSubscription java.util.List top java.util.Iterator
StackMap stack:
2: aload 3
invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
checkcast java.lang.Object
astore 2
start local 2 3: aload 0
aload 2
invokevirtual com.mongodb.async.client.AbstractSubscription.addToQueue:(Ljava/lang/Object;)V
end local 2 4: StackMap locals:
StackMap stack:
aload 3
invokeinterface java.util.Iterator.hasNext:()Z
ifne 2
5: StackMap locals: com.mongodb.async.client.AbstractSubscription java.util.List
StackMap stack:
return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 6 0 this Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
0 6 1 results Ljava/util/List<TTResult;>;
3 4 2 cur TTResult;
Signature: (Ljava/util/List<TTResult;>;)V
RuntimeVisibleParameterAnnotations:
0:
com.mongodb.lang.Nullable()
MethodParameters:
Name Flags
results final
void onError(java.lang.Throwable);
descriptor: (Ljava/lang/Throwable;)V
flags: (0x0000)
Code:
stack=3, locals=3, args_size=2
start local 0 start local 1 0: aload 0
invokevirtual com.mongodb.async.client.AbstractSubscription.terminalAction:()Z
ifeq 7
1: aload 0
invokevirtual com.mongodb.async.client.AbstractSubscription.postTerminate:()V
2: aload 0
getfield com.mongodb.async.client.AbstractSubscription.observer:Lcom/mongodb/async/client/Observer;
aload 1
invokeinterface com.mongodb.async.client.Observer.onError:(Ljava/lang/Throwable;)V
3: goto 8
StackMap locals:
StackMap stack: java.lang.Throwable
4: astore 2
start local 2 5: getstatic com.mongodb.async.client.AbstractSubscription.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
ldc "Calling onError threw an exception"
aload 2
invokeinterface com.mongodb.diagnostics.logging.Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
6: aload 2
invokestatic com.mongodb.MongoException.fromThrowableNonNull:(Ljava/lang/Throwable;)Lcom/mongodb/MongoException;
athrow
end local 2 7: StackMap locals:
StackMap stack:
aload 1
invokestatic com.mongodb.MongoException.fromThrowableNonNull:(Ljava/lang/Throwable;)Lcom/mongodb/MongoException;
athrow
8: StackMap locals:
StackMap stack:
return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 9 0 this Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
0 9 1 t Ljava/lang/Throwable;
5 7 2 t1 Ljava/lang/Throwable;
Exception table:
from to target type
2 3 4 Class java.lang.Throwable
MethodParameters:
Name Flags
t final
private void onNext();
descriptor: (Ljava/lang/Object;)V
flags: (0x0002) ACC_PRIVATE
Code:
stack=3, locals=3, args_size=2
start local 0 start local 1 0: aload 0
invokevirtual com.mongodb.async.client.AbstractSubscription.isTerminated:()Z
ifne 6
1: aload 0
getfield com.mongodb.async.client.AbstractSubscription.observer:Lcom/mongodb/async/client/Observer;
aload 1
invokeinterface com.mongodb.async.client.Observer.onNext:(Ljava/lang/Object;)V
2: goto 6
StackMap locals:
StackMap stack: java.lang.Throwable
3: astore 2
start local 2 4: getstatic com.mongodb.async.client.AbstractSubscription.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
ldc "Calling onNext threw an exception"
aload 2
invokeinterface com.mongodb.diagnostics.logging.Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
5: aload 0
aload 2
invokevirtual com.mongodb.async.client.AbstractSubscription.onError:(Ljava/lang/Throwable;)V
end local 2 6: StackMap locals:
StackMap stack:
return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 7 0 this Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
0 7 1 next TTResult;
4 6 2 t Ljava/lang/Throwable;
Exception table:
from to target type
1 2 3 Class java.lang.Throwable
Signature: (TTResult;)V
MethodParameters:
Name Flags
next final
private void onComplete();
descriptor: ()V
flags: (0x0002) ACC_PRIVATE
Code:
stack=3, locals=2, args_size=1
start local 0 0: aload 0
invokevirtual com.mongodb.async.client.AbstractSubscription.terminalAction:()Z
ifeq 7
1: aload 0
invokevirtual com.mongodb.async.client.AbstractSubscription.postTerminate:()V
2: aload 0
getfield com.mongodb.async.client.AbstractSubscription.observer:Lcom/mongodb/async/client/Observer;
invokeinterface com.mongodb.async.client.Observer.onComplete:()V
3: goto 7
StackMap locals:
StackMap stack: java.lang.Throwable
4: astore 1
start local 1 5: getstatic com.mongodb.async.client.AbstractSubscription.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
ldc "Calling onComplete threw an exception"
aload 1
invokeinterface com.mongodb.diagnostics.logging.Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
6: aload 1
invokestatic com.mongodb.MongoException.fromThrowableNonNull:(Ljava/lang/Throwable;)Lcom/mongodb/MongoException;
athrow
end local 1 7: StackMap locals:
StackMap stack:
return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
5 7 1 t Ljava/lang/Throwable;
Exception table:
from to target type
2 3 4 Class java.lang.Throwable
private void tryRequestInitialData();
descriptor: ()V
flags: (0x0002) ACC_PRIVATE
Code:
stack=2, locals=2, args_size=1
start local 0 0: aload 0
invokevirtual com.mongodb.async.client.AbstractSubscription.requestInitialData:()V
1: goto 4
StackMap locals:
StackMap stack: java.lang.Throwable
2: astore 1
start local 1 3: aload 0
aload 1
invokevirtual com.mongodb.async.client.AbstractSubscription.onError:(Ljava/lang/Throwable;)V
end local 1 4: StackMap locals:
StackMap stack:
return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
3 4 1 t Ljava/lang/Throwable;
Exception table:
from to target type
0 1 2 Class java.lang.Throwable
void tryProcessResultsQueue();
descriptor: ()V
flags: (0x0000)
Code:
stack=2, locals=2, args_size=1
start local 0 0: aload 0
invokevirtual com.mongodb.async.client.AbstractSubscription.processResultsQueue:()V
1: goto 4
StackMap locals:
StackMap stack: java.lang.Throwable
2: astore 1
start local 1 3: aload 0
aload 1
invokevirtual com.mongodb.async.client.AbstractSubscription.onError:(Ljava/lang/Throwable;)V
end local 1 4: StackMap locals:
StackMap stack:
return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
3 4 1 t Ljava/lang/Throwable;
Exception table:
from to target type
0 1 2 Class java.lang.Throwable
private void processResultsQueue();
descriptor: ()V
flags: (0x0002) ACC_PRIVATE
Code:
stack=5, locals=9, args_size=1
start local 0 0: iconst_0
istore 1
start local 1 1: aload 0
dup
astore 2
monitorenter
2: aload 0
getfield com.mongodb.async.client.AbstractSubscription.isProcessing:Z
ifne 5
aload 0
getfield com.mongodb.async.client.AbstractSubscription.isTerminated:Z
ifne 5
3: aload 0
iconst_1
putfield com.mongodb.async.client.AbstractSubscription.isProcessing:Z
4: iconst_1
istore 1
5: StackMap locals: int com.mongodb.async.client.AbstractSubscription
StackMap stack:
aload 2
monitorexit
6: goto 9
StackMap locals:
StackMap stack: java.lang.Throwable
7: aload 2
monitorexit
8: athrow
9: StackMap locals:
StackMap stack:
iload 1
ifeq 47
10: iconst_0
istore 2
start local 2 11: lconst_0
lstore 3
start local 3 12: iconst_0
istore 5
start local 5 13: StackMap locals: int long int
StackMap stack:
aload 0
dup
astore 8
monitorenter
14: aload 0
dup
getfield com.mongodb.async.client.AbstractSubscription.requested:J
lload 3
lsub
putfield com.mongodb.async.client.AbstractSubscription.requested:J
15: aload 0
getfield com.mongodb.async.client.AbstractSubscription.resultsQueue:Ljava/util/concurrent/ConcurrentLinkedQueue;
invokevirtual java.util.concurrent.ConcurrentLinkedQueue.isEmpty:()Z
ifeq 23
16: aload 0
invokevirtual com.mongodb.async.client.AbstractSubscription.checkCompleted:()Z
istore 5
17: aload 0
getfield com.mongodb.async.client.AbstractSubscription.requested:J
lconst_0
lcmp
ifle 18
iconst_1
goto 19
StackMap locals: com.mongodb.async.client.AbstractSubscription int int long int top top com.mongodb.async.client.AbstractSubscription
StackMap stack:
18: iconst_0
StackMap locals:
StackMap stack: int
19: istore 2
20: aload 0
iconst_0
putfield com.mongodb.async.client.AbstractSubscription.isProcessing:Z
21: aload 8
monitorexit
22: goto 42
23: StackMap locals:
StackMap stack:
aload 0
getfield com.mongodb.async.client.AbstractSubscription.requested:J
lconst_0
lcmp
ifne 27
24: aload 0
iconst_0
putfield com.mongodb.async.client.AbstractSubscription.isProcessing:Z
25: aload 8
monitorexit
26: goto 42
27: StackMap locals:
StackMap stack:
aload 0
getfield com.mongodb.async.client.AbstractSubscription.requested:J
lstore 6
start local 6 28: aload 8
monitorexit
29: goto 32
end local 6 StackMap locals:
StackMap stack: java.lang.Throwable
30: aload 8
monitorexit
31: athrow
start local 6 32: StackMap locals: com.mongodb.async.client.AbstractSubscription int int long int long
StackMap stack:
lconst_0
lstore 3
33: goto 40
34: StackMap locals:
StackMap stack:
aload 0
getfield com.mongodb.async.client.AbstractSubscription.resultsQueue:Ljava/util/concurrent/ConcurrentLinkedQueue;
invokevirtual java.util.concurrent.ConcurrentLinkedQueue.poll:()Ljava/lang/Object;
astore 8
start local 8 35: aload 8
ifnonnull 37
36: goto 13
37: StackMap locals: java.lang.Object
StackMap stack:
aload 0
aload 8
invokevirtual com.mongodb.async.client.AbstractSubscription.onNext:(Ljava/lang/Object;)V
38: lload 6
lconst_1
lsub
lstore 6
39: lload 3
lconst_1
ladd
lstore 3
end local 8 40: StackMap locals:
StackMap stack:
lload 6
lconst_0
lcmp
ifgt 34
end local 6 41: goto 13
42: StackMap locals:
StackMap stack:
iload 5
ifeq 45
43: aload 0
invokevirtual com.mongodb.async.client.AbstractSubscription.onComplete:()V
44: goto 47
StackMap locals:
StackMap stack:
45: iload 2
ifeq 47
46: aload 0
invokevirtual com.mongodb.async.client.AbstractSubscription.requestMoreData:()V
end local 5 end local 3 end local 2 47: StackMap locals:
StackMap stack:
return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 48 0 this Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
1 48 1 mustProcess Z
11 47 2 requestMore Z
12 47 3 processedCount J
13 47 5 completed Z
28 30 6 localWanted J
32 41 6 localWanted J
35 40 8 item TTResult;
Exception table:
from to target type
2 6 7 any
7 8 7 any
14 22 30 any
23 26 30 any
27 29 30 any
30 31 30 any
private boolean terminalAction();
descriptor: ()Z
flags: (0x0002) ACC_PRIVATE
Code:
stack=2, locals=3, args_size=1
start local 0 0: iconst_0
istore 1
start local 1 1: aload 0
dup
astore 2
monitorenter
2: aload 0
getfield com.mongodb.async.client.AbstractSubscription.isTerminated:Z
ifne 5
3: aload 0
iconst_1
putfield com.mongodb.async.client.AbstractSubscription.isTerminated:Z
4: iconst_1
istore 1
5: StackMap locals: int com.mongodb.async.client.AbstractSubscription
StackMap stack:
aload 2
monitorexit
6: goto 9
StackMap locals:
StackMap stack: java.lang.Throwable
7: aload 2
monitorexit
8: athrow
9: StackMap locals:
StackMap stack:
iload 1
ireturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 10 0 this Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
1 10 1 isTerminal Z
Exception table:
from to target type
2 6 7 any
7 8 7 any
}
Signature: <TResult:Ljava/lang/Object;>Ljava/lang/Object;Lcom/mongodb/async/client/Subscription;
SourceFile: "AbstractSubscription.java"