final class org.xnio.ChannelListeners$TransferListener<I extends org.xnio.channels.StreamSourceChannel, O extends org.xnio.channels.StreamSinkChannel> implements org.xnio.ChannelListener<java.nio.channels.Channel>
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: org.xnio.ChannelListeners$TransferListener
  super_class: java.lang.Object
{
  private final org.xnio.Pooled<java.nio.ByteBuffer> pooledBuffer;
    descriptor: Lorg/xnio/Pooled;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lorg/xnio/Pooled<Ljava/nio/ByteBuffer;>;

  private final I source;
    descriptor: Lorg/xnio/channels/StreamSourceChannel;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: TI;

  private final O sink;
    descriptor: Lorg/xnio/channels/StreamSinkChannel;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: TO;

  private final org.xnio.ChannelListener<? super I> sourceListener;
    descriptor: Lorg/xnio/ChannelListener;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lorg/xnio/ChannelListener<-TI;>;

  private final org.xnio.ChannelListener<? super O> sinkListener;
    descriptor: Lorg/xnio/ChannelListener;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lorg/xnio/ChannelListener<-TO;>;

  private final org.xnio.ChannelExceptionHandler<? super O> writeExceptionHandler;
    descriptor: Lorg/xnio/ChannelExceptionHandler;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lorg/xnio/ChannelExceptionHandler<-TO;>;

  private final org.xnio.ChannelExceptionHandler<? super I> readExceptionHandler;
    descriptor: Lorg/xnio/ChannelExceptionHandler;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lorg/xnio/ChannelExceptionHandler<-TI;>;

  private long count;
    descriptor: J
    flags: (0x0002) ACC_PRIVATE

  private volatile int state;
    descriptor: I
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  void <init>(long, org.xnio.Pooled<java.nio.ByteBuffer>, I, O, org.xnio.ChannelListener<? super I>, org.xnio.ChannelListener<? super O>, org.xnio.ChannelExceptionHandler<? super O>, org.xnio.ChannelExceptionHandler<? super I>, );
    descriptor: (JLorg/xnio/Pooled;Lorg/xnio/channels/StreamSourceChannel;Lorg/xnio/channels/StreamSinkChannel;Lorg/xnio/ChannelListener;Lorg/xnio/ChannelListener;Lorg/xnio/ChannelExceptionHandler;Lorg/xnio/ChannelExceptionHandler;I)V
    flags: (0x0000) 
    Code:
      stack=3, locals=11, args_size=10
        start local 0 // org.xnio.ChannelListeners$TransferListener this
        start local 1 // long count
        start local 3 // org.xnio.Pooled pooledBuffer
        start local 4 // org.xnio.channels.StreamSourceChannel source
        start local 5 // org.xnio.channels.StreamSinkChannel sink
        start local 6 // org.xnio.ChannelListener sourceListener
        start local 7 // org.xnio.ChannelListener sinkListener
        start local 8 // org.xnio.ChannelExceptionHandler writeExceptionHandler
        start local 9 // org.xnio.ChannelExceptionHandler readExceptionHandler
        start local 10 // int state
         0: .line 748
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 749
            aload 0 /* this */
            lload 1 /* count */
            putfield org.xnio.ChannelListeners$TransferListener.count:J
         2: .line 750
            aload 0 /* this */
            aload 3 /* pooledBuffer */
            putfield org.xnio.ChannelListeners$TransferListener.pooledBuffer:Lorg/xnio/Pooled;
         3: .line 751
            aload 0 /* this */
            aload 4 /* source */
            putfield org.xnio.ChannelListeners$TransferListener.source:Lorg/xnio/channels/StreamSourceChannel;
         4: .line 752
            aload 0 /* this */
            aload 5 /* sink */
            putfield org.xnio.ChannelListeners$TransferListener.sink:Lorg/xnio/channels/StreamSinkChannel;
         5: .line 753
            aload 0 /* this */
            aload 6 /* sourceListener */
            putfield org.xnio.ChannelListeners$TransferListener.sourceListener:Lorg/xnio/ChannelListener;
         6: .line 754
            aload 0 /* this */
            aload 7 /* sinkListener */
            putfield org.xnio.ChannelListeners$TransferListener.sinkListener:Lorg/xnio/ChannelListener;
         7: .line 755
            aload 0 /* this */
            aload 8 /* writeExceptionHandler */
            putfield org.xnio.ChannelListeners$TransferListener.writeExceptionHandler:Lorg/xnio/ChannelExceptionHandler;
         8: .line 756
            aload 0 /* this */
            aload 9 /* readExceptionHandler */
            putfield org.xnio.ChannelListeners$TransferListener.readExceptionHandler:Lorg/xnio/ChannelExceptionHandler;
         9: .line 757
            aload 0 /* this */
            iload 10 /* state */
            putfield org.xnio.ChannelListeners$TransferListener.state:I
        10: .line 758
            return
        end local 10 // int state
        end local 9 // org.xnio.ChannelExceptionHandler readExceptionHandler
        end local 8 // org.xnio.ChannelExceptionHandler writeExceptionHandler
        end local 7 // org.xnio.ChannelListener sinkListener
        end local 6 // org.xnio.ChannelListener sourceListener
        end local 5 // org.xnio.channels.StreamSinkChannel sink
        end local 4 // org.xnio.channels.StreamSourceChannel source
        end local 3 // org.xnio.Pooled pooledBuffer
        end local 1 // long count
        end local 0 // org.xnio.ChannelListeners$TransferListener this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   11     0                   this  Lorg/xnio/ChannelListeners$TransferListener<TI;TO;>;
            0   11     1                  count  J
            0   11     3           pooledBuffer  Lorg/xnio/Pooled<Ljava/nio/ByteBuffer;>;
            0   11     4                 source  TI;
            0   11     5                   sink  TO;
            0   11     6         sourceListener  Lorg/xnio/ChannelListener<-TI;>;
            0   11     7           sinkListener  Lorg/xnio/ChannelListener<-TO;>;
            0   11     8  writeExceptionHandler  Lorg/xnio/ChannelExceptionHandler<-TO;>;
            0   11     9   readExceptionHandler  Lorg/xnio/ChannelExceptionHandler<-TI;>;
            0   11    10                  state  I
    Signature: (JLorg/xnio/Pooled<Ljava/nio/ByteBuffer;>;TI;TO;Lorg/xnio/ChannelListener<-TI;>;Lorg/xnio/ChannelListener<-TO;>;Lorg/xnio/ChannelExceptionHandler<-TO;>;Lorg/xnio/ChannelExceptionHandler<-TI;>;I)V
    MethodParameters:
                       Name  Flags
      count                  final
      pooledBuffer           final
      source                 final
      sink                   final
      sourceListener         final
      sinkListener           final
      writeExceptionHandler  final
      readExceptionHandler   final
      state                  final

  public void handleEvent(java.nio.channels.Channel);
    descriptor: (Ljava/nio/channels/Channel;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=10, args_size=2
        start local 0 // org.xnio.ChannelListeners$TransferListener this
        start local 1 // java.nio.channels.Channel channel
         0: .line 761
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.pooledBuffer:Lorg/xnio/Pooled;
            invokeinterface org.xnio.Pooled.getResource:()Ljava/lang/Object;
            checkcast java.nio.ByteBuffer
            astore 2 /* buffer */
        start local 2 // java.nio.ByteBuffer buffer
         1: .line 762
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.state:I
            istore 3 /* state */
        start local 3 // int state
         2: .line 764
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.count:J
            lstore 4 /* count */
        start local 4 // long count
         3: .line 768
            iload 3 /* state */
            tableswitch { // 0 - 1
                    0: 4
                    1: 38
              default: 72
          }
         4: .line 773
      StackMap locals: java.nio.ByteBuffer int long
      StackMap stack:
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.source:Lorg/xnio/channels/StreamSourceChannel;
            lload 4 /* count */
            aload 2 /* buffer */
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.sink:Lorg/xnio/channels/StreamSinkChannel;
            invokeinterface org.xnio.channels.StreamSourceChannel.transferTo:(JLjava/nio/ByteBuffer;Lorg/xnio/channels/StreamSinkChannel;)J
            lstore 6 /* lres */
        start local 6 // long lres
         5: .line 774
            goto 9
        end local 6 // long lres
      StackMap locals:
      StackMap stack: java.io.IOException
         6: astore 9 /* e */
        start local 9 // java.io.IOException e
         7: .line 775
            aload 0 /* this */
            aload 9 /* e */
            invokevirtual org.xnio.ChannelListeners$TransferListener.readFailed:(Ljava/io/IOException;)V
         8: .line 776
            return
        end local 9 // java.io.IOException e
        start local 6 // long lres
         9: .line 778
      StackMap locals: long
      StackMap stack:
            lload 6 /* lres */
            lconst_0
            lcmp
            ifne 12
            aload 2 /* buffer */
            invokevirtual java.nio.ByteBuffer.hasRemaining:()Z
            ifne 12
        10: .line 779
            aload 0 /* this */
            lload 4 /* count */
            putfield org.xnio.ChannelListeners$TransferListener.count:J
        11: .line 780
            return
        12: .line 782
      StackMap locals:
      StackMap stack:
            lload 6 /* lres */
            ldc -1
            lcmp
            ifne 18
        13: .line 784
            lload 4 /* count */
            ldc 9223372036854775807
            lcmp
            ifne 16
        14: .line 786
            aload 0 /* this */
            invokevirtual org.xnio.ChannelListeners$TransferListener.done:()V
        15: .line 787
            return
        16: .line 789
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            new java.io.EOFException
            dup
            invokespecial java.io.EOFException.<init>:()V
            invokevirtual org.xnio.ChannelListeners$TransferListener.readFailed:(Ljava/io/IOException;)V
        17: .line 790
            return
        18: .line 793
      StackMap locals:
      StackMap stack:
            lload 4 /* count */
            ldc 9223372036854775807
            lcmp
            ifeq 34
        19: .line 794
            lload 4 /* count */
            lload 6 /* lres */
            lsub
            lstore 4 /* count */
        20: .line 796
            goto 34
        21: .line 798
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.sink:Lorg/xnio/channels/StreamSinkChannel;
            aload 2 /* buffer */
            invokeinterface org.xnio.channels.StreamSinkChannel.write:(Ljava/nio/ByteBuffer;)I
            istore 8 /* ires */
        start local 8 // int ires
        22: .line 799
            goto 26
        end local 8 // int ires
      StackMap locals:
      StackMap stack: java.io.IOException
        23: astore 9 /* e */
        start local 9 // java.io.IOException e
        24: .line 800
            aload 0 /* this */
            aload 9 /* e */
            invokevirtual org.xnio.ChannelListeners$TransferListener.writeFailed:(Ljava/io/IOException;)V
        25: .line 801
            return
        end local 9 // java.io.IOException e
        start local 8 // int ires
        26: .line 803
      StackMap locals: int
      StackMap stack:
            lload 4 /* count */
            ldc 9223372036854775807
            lcmp
            ifeq 28
        27: .line 804
            lload 4 /* count */
            iload 8 /* ires */
            i2l
            lsub
            lstore 4 /* count */
        28: .line 806
      StackMap locals:
      StackMap stack:
            iload 8 /* ires */
            ifne 34
        29: .line 807
            aload 0 /* this */
            lload 4 /* count */
            putfield org.xnio.ChannelListeners$TransferListener.count:J
        30: .line 808
            aload 0 /* this */
            iconst_1
            putfield org.xnio.ChannelListeners$TransferListener.state:I
        31: .line 809
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.source:Lorg/xnio/channels/StreamSourceChannel;
            invokeinterface org.xnio.channels.StreamSourceChannel.suspendReads:()V
        32: .line 810
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.sink:Lorg/xnio/channels/StreamSinkChannel;
            invokeinterface org.xnio.channels.StreamSinkChannel.resumeWrites:()V
        33: .line 811
            return
        end local 8 // int ires
        34: .line 796
      StackMap locals:
      StackMap stack:
            aload 2 /* buffer */
            invokevirtual java.nio.ByteBuffer.hasRemaining:()Z
            ifne 21
        35: .line 815
            lload 4 /* count */
            lconst_0
            lcmp
            ifne 4
        36: .line 816
            aload 0 /* this */
            invokevirtual org.xnio.ChannelListeners$TransferListener.done:()V
        37: .line 817
            return
        end local 6 // long lres
        38: .line 824
      StackMap locals:
      StackMap stack:
            goto 48
        39: .line 826
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.sink:Lorg/xnio/channels/StreamSinkChannel;
            aload 2 /* buffer */
            invokeinterface org.xnio.channels.StreamSinkChannel.write:(Ljava/nio/ByteBuffer;)I
            istore 8 /* ires */
        start local 8 // int ires
        40: .line 827
            goto 44
        end local 8 // int ires
      StackMap locals:
      StackMap stack: java.io.IOException
        41: astore 9 /* e */
        start local 9 // java.io.IOException e
        42: .line 828
            aload 0 /* this */
            aload 9 /* e */
            invokevirtual org.xnio.ChannelListeners$TransferListener.writeFailed:(Ljava/io/IOException;)V
        43: .line 829
            return
        end local 9 // java.io.IOException e
        start local 8 // int ires
        44: .line 831
      StackMap locals: org.xnio.ChannelListeners$TransferListener java.nio.channels.Channel java.nio.ByteBuffer int long top top int
      StackMap stack:
            lload 4 /* count */
            ldc 9223372036854775807
            lcmp
            ifeq 46
        45: .line 832
            lload 4 /* count */
            iload 8 /* ires */
            i2l
            lsub
            lstore 4 /* count */
        46: .line 834
      StackMap locals:
      StackMap stack:
            iload 8 /* ires */
            ifne 48
        47: .line 835
            return
        end local 8 // int ires
        48: .line 824
      StackMap locals: org.xnio.ChannelListeners$TransferListener java.nio.channels.Channel java.nio.ByteBuffer int long
      StackMap stack:
            aload 2 /* buffer */
            invokevirtual java.nio.ByteBuffer.hasRemaining:()Z
            ifne 39
        49: .line 839
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.source:Lorg/xnio/channels/StreamSourceChannel;
            lload 4 /* count */
            aload 2 /* buffer */
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.sink:Lorg/xnio/channels/StreamSinkChannel;
            invokeinterface org.xnio.channels.StreamSourceChannel.transferTo:(JLjava/nio/ByteBuffer;Lorg/xnio/channels/StreamSinkChannel;)J
            lstore 6 /* lres */
        start local 6 // long lres
        50: .line 840
            goto 54
        end local 6 // long lres
      StackMap locals:
      StackMap stack: java.io.IOException
        51: astore 9 /* e */
        start local 9 // java.io.IOException e
        52: .line 841
            aload 0 /* this */
            aload 9 /* e */
            invokevirtual org.xnio.ChannelListeners$TransferListener.readFailed:(Ljava/io/IOException;)V
        53: .line 842
            return
        end local 9 // java.io.IOException e
        start local 6 // long lres
        54: .line 844
      StackMap locals: long
      StackMap stack:
            lload 6 /* lres */
            lconst_0
            lcmp
            ifne 60
            aload 2 /* buffer */
            invokevirtual java.nio.ByteBuffer.hasRemaining:()Z
            ifne 60
        55: .line 845
            aload 0 /* this */
            lload 4 /* count */
            putfield org.xnio.ChannelListeners$TransferListener.count:J
        56: .line 846
            aload 0 /* this */
            iconst_0
            putfield org.xnio.ChannelListeners$TransferListener.state:I
        57: .line 847
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.sink:Lorg/xnio/channels/StreamSinkChannel;
            invokeinterface org.xnio.channels.StreamSinkChannel.suspendWrites:()V
        58: .line 848
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.source:Lorg/xnio/channels/StreamSourceChannel;
            invokeinterface org.xnio.channels.StreamSourceChannel.resumeReads:()V
        59: .line 849
            return
        60: .line 851
      StackMap locals:
      StackMap stack:
            lload 6 /* lres */
            ldc -1
            lcmp
            ifne 66
        61: .line 853
            lload 4 /* count */
            ldc 9223372036854775807
            lcmp
            ifne 64
        62: .line 855
            aload 0 /* this */
            invokevirtual org.xnio.ChannelListeners$TransferListener.done:()V
        63: .line 856
            return
        64: .line 858
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            new java.io.EOFException
            dup
            invokespecial java.io.EOFException.<init>:()V
            invokevirtual org.xnio.ChannelListeners$TransferListener.readFailed:(Ljava/io/IOException;)V
        65: .line 859
            return
        66: .line 862
      StackMap locals:
      StackMap stack:
            lload 4 /* count */
            ldc 9223372036854775807
            lcmp
            ifeq 68
        67: .line 863
            lload 4 /* count */
            lload 6 /* lres */
            lsub
            lstore 4 /* count */
        68: .line 866
      StackMap locals:
      StackMap stack:
            lload 4 /* count */
            lconst_0
            lcmp
            ifne 71
        69: .line 867
            aload 0 /* this */
            invokevirtual org.xnio.ChannelListeners$TransferListener.done:()V
        70: .line 868
            return
        end local 6 // long lres
        71: .line 823
      StackMap locals:
      StackMap stack:
            goto 48
        72: .line 874
      StackMap locals:
      StackMap stack:
            return
        end local 4 // long count
        end local 3 // int state
        end local 2 // java.nio.ByteBuffer buffer
        end local 1 // java.nio.channels.Channel channel
        end local 0 // org.xnio.ChannelListeners$TransferListener this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   73     0     this  Lorg/xnio/ChannelListeners$TransferListener<TI;TO;>;
            0   73     1  channel  Ljava/nio/channels/Channel;
            1   73     2   buffer  Ljava/nio/ByteBuffer;
            2   73     3    state  I
            3   73     4    count  J
            5    6     6     lres  J
            9   38     6     lres  J
           50   51     6     lres  J
           54   71     6     lres  J
           22   23     8     ires  I
           26   34     8     ires  I
           40   41     8     ires  I
           44   48     8     ires  I
            7    9     9        e  Ljava/io/IOException;
           24   26     9        e  Ljava/io/IOException;
           42   44     9        e  Ljava/io/IOException;
           52   54     9        e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           4     5       6  Class java.io.IOException
          21    22      23  Class java.io.IOException
          39    40      41  Class java.io.IOException
          49    50      51  Class java.io.IOException
    MethodParameters:
         Name  Flags
      channel  final

  private void writeFailed(java.io.IOException);
    descriptor: (Ljava/io/IOException;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // org.xnio.ChannelListeners$TransferListener this
        start local 1 // java.io.IOException e
         0: .line 878
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.source:Lorg/xnio/channels/StreamSourceChannel;
            invokeinterface org.xnio.channels.StreamSourceChannel.suspendReads:()V
         1: .line 879
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.sink:Lorg/xnio/channels/StreamSinkChannel;
            invokeinterface org.xnio.channels.StreamSinkChannel.suspendWrites:()V
         2: .line 880
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.sink:Lorg/xnio/channels/StreamSinkChannel;
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.writeExceptionHandler:Lorg/xnio/ChannelExceptionHandler;
            aload 1 /* e */
            invokestatic org.xnio.ChannelListeners.invokeChannelExceptionHandler:(Ljava/nio/channels/Channel;Lorg/xnio/ChannelExceptionHandler;Ljava/io/IOException;)V
         3: .line 881
            goto 7
      StackMap locals:
      StackMap stack: java.lang.Throwable
         4: astore 2
         5: .line 882
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.pooledBuffer:Lorg/xnio/Pooled;
            invokeinterface org.xnio.Pooled.free:()V
         6: .line 883
            aload 2
            athrow
         7: .line 882
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.pooledBuffer:Lorg/xnio/Pooled;
            invokeinterface org.xnio.Pooled.free:()V
         8: .line 884
            return
        end local 1 // java.io.IOException e
        end local 0 // org.xnio.ChannelListeners$TransferListener this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    9     0  this  Lorg/xnio/ChannelListeners$TransferListener<TI;TO;>;
            0    9     1     e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           0     4       4  any
    MethodParameters:
      Name  Flags
      e     final

  private void readFailed(java.io.IOException);
    descriptor: (Ljava/io/IOException;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // org.xnio.ChannelListeners$TransferListener this
        start local 1 // java.io.IOException e
         0: .line 888
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.source:Lorg/xnio/channels/StreamSourceChannel;
            invokeinterface org.xnio.channels.StreamSourceChannel.suspendReads:()V
         1: .line 889
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.sink:Lorg/xnio/channels/StreamSinkChannel;
            invokeinterface org.xnio.channels.StreamSinkChannel.suspendWrites:()V
         2: .line 890
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.source:Lorg/xnio/channels/StreamSourceChannel;
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.readExceptionHandler:Lorg/xnio/ChannelExceptionHandler;
            aload 1 /* e */
            invokestatic org.xnio.ChannelListeners.invokeChannelExceptionHandler:(Ljava/nio/channels/Channel;Lorg/xnio/ChannelExceptionHandler;Ljava/io/IOException;)V
         3: .line 891
            goto 7
      StackMap locals:
      StackMap stack: java.lang.Throwable
         4: astore 2
         5: .line 892
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.pooledBuffer:Lorg/xnio/Pooled;
            invokeinterface org.xnio.Pooled.free:()V
         6: .line 893
            aload 2
            athrow
         7: .line 892
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.pooledBuffer:Lorg/xnio/Pooled;
            invokeinterface org.xnio.Pooled.free:()V
         8: .line 894
            return
        end local 1 // java.io.IOException e
        end local 0 // org.xnio.ChannelListeners$TransferListener this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    9     0  this  Lorg/xnio/ChannelListeners$TransferListener<TI;TO;>;
            0    9     1     e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           0     4       4  any
    MethodParameters:
      Name  Flags
      e     final

  private void done();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=6, args_size=1
        start local 0 // org.xnio.ChannelListeners$TransferListener this
         0: .line 898
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.sourceListener:Lorg/xnio/ChannelListener;
            astore 1 /* sourceListener */
        start local 1 // org.xnio.ChannelListener sourceListener
         1: .line 899
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.sinkListener:Lorg/xnio/ChannelListener;
            astore 2 /* sinkListener */
        start local 2 // org.xnio.ChannelListener sinkListener
         2: .line 900
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.source:Lorg/xnio/channels/StreamSourceChannel;
            astore 3 /* source */
        start local 3 // org.xnio.channels.StreamSourceChannel source
         3: .line 901
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.sink:Lorg/xnio/channels/StreamSinkChannel;
            astore 4 /* sink */
        start local 4 // org.xnio.channels.StreamSinkChannel sink
         4: .line 903
            aload 3 /* source */
            aload 1 /* sourceListener */
            invokestatic org.xnio.channels.Channels.setReadListener:(Lorg/xnio/channels/SuspendableReadChannel;Lorg/xnio/ChannelListener;)V
         5: .line 904
            aload 1 /* sourceListener */
            ifnonnull 8
         6: .line 905
            aload 3 /* source */
            invokeinterface org.xnio.channels.StreamSourceChannel.suspendReads:()V
         7: .line 906
            goto 9
         8: .line 907
      StackMap locals: org.xnio.ChannelListeners$TransferListener org.xnio.ChannelListener org.xnio.ChannelListener org.xnio.channels.StreamSourceChannel org.xnio.channels.StreamSinkChannel
      StackMap stack:
            aload 3 /* source */
            invokeinterface org.xnio.channels.StreamSourceChannel.wakeupReads:()V
         9: .line 910
      StackMap locals:
      StackMap stack:
            aload 4 /* sink */
            aload 2 /* sinkListener */
            invokestatic org.xnio.channels.Channels.setWriteListener:(Lorg/xnio/channels/SuspendableWriteChannel;Lorg/xnio/ChannelListener;)V
        10: .line 911
            aload 2 /* sinkListener */
            ifnonnull 13
        11: .line 912
            aload 4 /* sink */
            invokeinterface org.xnio.channels.StreamSinkChannel.suspendWrites:()V
        12: .line 913
            goto 18
        13: .line 914
      StackMap locals:
      StackMap stack:
            aload 4 /* sink */
            invokeinterface org.xnio.channels.StreamSinkChannel.wakeupWrites:()V
        end local 4 // org.xnio.channels.StreamSinkChannel sink
        end local 3 // org.xnio.channels.StreamSourceChannel source
        end local 2 // org.xnio.ChannelListener sinkListener
        end local 1 // org.xnio.ChannelListener sourceListener
        14: .line 916
            goto 18
      StackMap locals: org.xnio.ChannelListeners$TransferListener
      StackMap stack: java.lang.Throwable
        15: astore 5
        16: .line 917
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.pooledBuffer:Lorg/xnio/Pooled;
            invokeinterface org.xnio.Pooled.free:()V
        17: .line 918
            aload 5
            athrow
        18: .line 917
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.pooledBuffer:Lorg/xnio/Pooled;
            invokeinterface org.xnio.Pooled.free:()V
        19: .line 919
            return
        end local 0 // org.xnio.ChannelListeners$TransferListener this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   20     0            this  Lorg/xnio/ChannelListeners$TransferListener<TI;TO;>;
            1   14     1  sourceListener  Lorg/xnio/ChannelListener<-TI;>;
            2   14     2    sinkListener  Lorg/xnio/ChannelListener<-TO;>;
            3   14     3          source  TI;
            4   14     4            sink  TO;
      Exception table:
        from    to  target  type
           0    15      15  any

  public java.lang.String toString();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.xnio.ChannelListeners$TransferListener this
         0: .line 922
            new java.lang.StringBuilder
            dup
            ldc "Transfer channel listener ("
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.source:Lorg/xnio/channels/StreamSourceChannel;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc " to "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.sink:Lorg/xnio/channels/StreamSinkChannel;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc ") -> ("
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.sourceListener:Lorg/xnio/ChannelListener;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc " and "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            getfield org.xnio.ChannelListeners$TransferListener.sinkListener:Lorg/xnio/ChannelListener;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc ")"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 0 // org.xnio.ChannelListeners$TransferListener this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/xnio/ChannelListeners$TransferListener<TI;TO;>;
}
Signature: <I::Lorg/xnio/channels/StreamSourceChannel;O::Lorg/xnio/channels/StreamSinkChannel;>Ljava/lang/Object;Lorg/xnio/ChannelListener<Ljava/nio/channels/Channel;>;
SourceFile: "ChannelListeners.java"
NestHost: org.xnio.ChannelListeners
InnerClasses:
  final TransferListener = org.xnio.ChannelListeners$TransferListener of org.xnio.ChannelListeners