class com.google.protobuf.RopeByteString$Balancer
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: com.google.protobuf.RopeByteString$Balancer
  super_class: java.lang.Object
{
  private final java.util.ArrayDeque<com.google.protobuf.ByteString> prefixesStack;
    descriptor: Ljava/util/ArrayDeque;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/ArrayDeque<Lcom/google/protobuf/ByteString;>;

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.google.protobuf.RopeByteString$Balancer this
         0: .line 607
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 611
            aload 0 /* this */
            new java.util.ArrayDeque
            dup
            invokespecial java.util.ArrayDeque.<init>:()V
            putfield com.google.protobuf.RopeByteString$Balancer.prefixesStack:Ljava/util/ArrayDeque;
         2: .line 607
            return
        end local 0 // com.google.protobuf.RopeByteString$Balancer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/google/protobuf/RopeByteString$Balancer;

  private com.google.protobuf.ByteString balance(com.google.protobuf.ByteString, com.google.protobuf.ByteString);
    descriptor: (Lcom/google/protobuf/ByteString;Lcom/google/protobuf/ByteString;)Lcom/google/protobuf/ByteString;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=5, args_size=3
        start local 0 // com.google.protobuf.RopeByteString$Balancer this
        start local 1 // com.google.protobuf.ByteString left
        start local 2 // com.google.protobuf.ByteString right
         0: .line 614
            aload 0 /* this */
            aload 1 /* left */
            invokevirtual com.google.protobuf.RopeByteString$Balancer.doBalance:(Lcom/google/protobuf/ByteString;)V
         1: .line 615
            aload 0 /* this */
            aload 2 /* right */
            invokevirtual com.google.protobuf.RopeByteString$Balancer.doBalance:(Lcom/google/protobuf/ByteString;)V
         2: .line 618
            aload 0 /* this */
            getfield com.google.protobuf.RopeByteString$Balancer.prefixesStack:Ljava/util/ArrayDeque;
            invokevirtual java.util.ArrayDeque.pop:()Ljava/lang/Object;
            checkcast com.google.protobuf.ByteString
            astore 3 /* partialString */
        start local 3 // com.google.protobuf.ByteString partialString
         3: .line 619
            goto 6
         4: .line 620
      StackMap locals: com.google.protobuf.ByteString
      StackMap stack:
            aload 0 /* this */
            getfield com.google.protobuf.RopeByteString$Balancer.prefixesStack:Ljava/util/ArrayDeque;
            invokevirtual java.util.ArrayDeque.pop:()Ljava/lang/Object;
            checkcast com.google.protobuf.ByteString
            astore 4 /* newLeft */
        start local 4 // com.google.protobuf.ByteString newLeft
         5: .line 621
            new com.google.protobuf.RopeByteString
            dup
            aload 4 /* newLeft */
            aload 3 /* partialString */
            invokespecial com.google.protobuf.RopeByteString.<init>:(Lcom/google/protobuf/ByteString;Lcom/google/protobuf/ByteString;)V
            astore 3 /* partialString */
        end local 4 // com.google.protobuf.ByteString newLeft
         6: .line 619
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.google.protobuf.RopeByteString$Balancer.prefixesStack:Ljava/util/ArrayDeque;
            invokevirtual java.util.ArrayDeque.isEmpty:()Z
            ifeq 4
         7: .line 625
            aload 3 /* partialString */
            areturn
        end local 3 // com.google.protobuf.ByteString partialString
        end local 2 // com.google.protobuf.ByteString right
        end local 1 // com.google.protobuf.ByteString left
        end local 0 // com.google.protobuf.RopeByteString$Balancer this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    8     0           this  Lcom/google/protobuf/RopeByteString$Balancer;
            0    8     1           left  Lcom/google/protobuf/ByteString;
            0    8     2          right  Lcom/google/protobuf/ByteString;
            3    8     3  partialString  Lcom/google/protobuf/ByteString;
            5    6     4        newLeft  Lcom/google/protobuf/ByteString;
    MethodParameters:
       Name  Flags
      left   
      right  

  private void doBalance(com.google.protobuf.ByteString);
    descriptor: (Lcom/google/protobuf/ByteString;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=3, args_size=2
        start local 0 // com.google.protobuf.RopeByteString$Balancer this
        start local 1 // com.google.protobuf.ByteString root
         0: .line 633
            aload 1 /* root */
            invokevirtual com.google.protobuf.ByteString.isBalanced:()Z
            ifeq 3
         1: .line 634
            aload 0 /* this */
            aload 1 /* root */
            invokevirtual com.google.protobuf.RopeByteString$Balancer.insert:(Lcom/google/protobuf/ByteString;)V
         2: .line 635
            goto 11
      StackMap locals:
      StackMap stack:
         3: aload 1 /* root */
            instanceof com.google.protobuf.RopeByteString
            ifeq 8
         4: .line 636
            aload 1 /* root */
            checkcast com.google.protobuf.RopeByteString
            astore 2 /* rbs */
        start local 2 // com.google.protobuf.RopeByteString rbs
         5: .line 637
            aload 0 /* this */
            aload 2 /* rbs */
            getfield com.google.protobuf.RopeByteString.left:Lcom/google/protobuf/ByteString;
            invokevirtual com.google.protobuf.RopeByteString$Balancer.doBalance:(Lcom/google/protobuf/ByteString;)V
         6: .line 638
            aload 0 /* this */
            aload 2 /* rbs */
            getfield com.google.protobuf.RopeByteString.right:Lcom/google/protobuf/ByteString;
            invokevirtual com.google.protobuf.RopeByteString$Balancer.doBalance:(Lcom/google/protobuf/ByteString;)V
        end local 2 // com.google.protobuf.RopeByteString rbs
         7: .line 639
            goto 11
         8: .line 640
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
         9: .line 641
            new java.lang.StringBuilder
            dup
            ldc "Has a new type of ByteString been created? Found "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* root */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        10: .line 640
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        11: .line 643
      StackMap locals:
      StackMap stack:
            return
        end local 1 // com.google.protobuf.ByteString root
        end local 0 // com.google.protobuf.RopeByteString$Balancer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   12     0  this  Lcom/google/protobuf/RopeByteString$Balancer;
            0   12     1  root  Lcom/google/protobuf/ByteString;
            5    7     2   rbs  Lcom/google/protobuf/RopeByteString;
    MethodParameters:
      Name  Flags
      root  

  private void insert(com.google.protobuf.ByteString);
    descriptor: (Lcom/google/protobuf/ByteString;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=7, args_size=2
        start local 0 // com.google.protobuf.RopeByteString$Balancer this
        start local 1 // com.google.protobuf.ByteString byteString
         0: .line 658
            aload 0 /* this */
            aload 1 /* byteString */
            invokevirtual com.google.protobuf.ByteString.size:()I
            invokevirtual com.google.protobuf.RopeByteString$Balancer.getDepthBinForLength:(I)I
            istore 2 /* depthBin */
        start local 2 // int depthBin
         1: .line 659
            getstatic com.google.protobuf.RopeByteString.minLengthByDepth:[I
            iload 2 /* depthBin */
            iconst_1
            iadd
            iaload
            istore 3 /* binEnd */
        start local 3 // int binEnd
         2: .line 665
            aload 0 /* this */
            getfield com.google.protobuf.RopeByteString$Balancer.prefixesStack:Ljava/util/ArrayDeque;
            invokevirtual java.util.ArrayDeque.isEmpty:()Z
            ifne 3
            aload 0 /* this */
            getfield com.google.protobuf.RopeByteString$Balancer.prefixesStack:Ljava/util/ArrayDeque;
            invokevirtual java.util.ArrayDeque.peek:()Ljava/lang/Object;
            checkcast com.google.protobuf.ByteString
            invokevirtual com.google.protobuf.ByteString.size:()I
            iload 3 /* binEnd */
            if_icmplt 5
         3: .line 666
      StackMap locals: int int
      StackMap stack:
            aload 0 /* this */
            getfield com.google.protobuf.RopeByteString$Balancer.prefixesStack:Ljava/util/ArrayDeque;
            aload 1 /* byteString */
            invokevirtual java.util.ArrayDeque.push:(Ljava/lang/Object;)V
         4: .line 667
            goto 20
         5: .line 668
      StackMap locals:
      StackMap stack:
            getstatic com.google.protobuf.RopeByteString.minLengthByDepth:[I
            iload 2 /* depthBin */
            iaload
            istore 4 /* binStart */
        start local 4 // int binStart
         6: .line 671
            aload 0 /* this */
            getfield com.google.protobuf.RopeByteString$Balancer.prefixesStack:Ljava/util/ArrayDeque;
            invokevirtual java.util.ArrayDeque.pop:()Ljava/lang/Object;
            checkcast com.google.protobuf.ByteString
            astore 5 /* newTree */
        start local 5 // com.google.protobuf.ByteString newTree
         7: .line 672
            goto 10
         8: .line 673
      StackMap locals: int com.google.protobuf.ByteString
      StackMap stack:
            aload 0 /* this */
            getfield com.google.protobuf.RopeByteString$Balancer.prefixesStack:Ljava/util/ArrayDeque;
            invokevirtual java.util.ArrayDeque.pop:()Ljava/lang/Object;
            checkcast com.google.protobuf.ByteString
            astore 6 /* left */
        start local 6 // com.google.protobuf.ByteString left
         9: .line 674
            new com.google.protobuf.RopeByteString
            dup
            aload 6 /* left */
            aload 5 /* newTree */
            invokespecial com.google.protobuf.RopeByteString.<init>:(Lcom/google/protobuf/ByteString;Lcom/google/protobuf/ByteString;)V
            astore 5 /* newTree */
        end local 6 // com.google.protobuf.ByteString left
        10: .line 672
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.google.protobuf.RopeByteString$Balancer.prefixesStack:Ljava/util/ArrayDeque;
            invokevirtual java.util.ArrayDeque.isEmpty:()Z
            ifne 11
            aload 0 /* this */
            getfield com.google.protobuf.RopeByteString$Balancer.prefixesStack:Ljava/util/ArrayDeque;
            invokevirtual java.util.ArrayDeque.peek:()Ljava/lang/Object;
            checkcast com.google.protobuf.ByteString
            invokevirtual com.google.protobuf.ByteString.size:()I
            iload 4 /* binStart */
            if_icmplt 8
        11: .line 678
      StackMap locals:
      StackMap stack:
            new com.google.protobuf.RopeByteString
            dup
            aload 5 /* newTree */
            aload 1 /* byteString */
            invokespecial com.google.protobuf.RopeByteString.<init>:(Lcom/google/protobuf/ByteString;Lcom/google/protobuf/ByteString;)V
            astore 5 /* newTree */
        12: .line 681
            goto 18
        13: .line 682
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 5 /* newTree */
            invokevirtual com.google.protobuf.ByteString.size:()I
            invokevirtual com.google.protobuf.RopeByteString$Balancer.getDepthBinForLength:(I)I
            istore 2 /* depthBin */
        14: .line 683
            getstatic com.google.protobuf.RopeByteString.minLengthByDepth:[I
            iload 2 /* depthBin */
            iconst_1
            iadd
            iaload
            istore 3 /* binEnd */
        15: .line 684
            aload 0 /* this */
            getfield com.google.protobuf.RopeByteString$Balancer.prefixesStack:Ljava/util/ArrayDeque;
            invokevirtual java.util.ArrayDeque.peek:()Ljava/lang/Object;
            checkcast com.google.protobuf.ByteString
            invokevirtual com.google.protobuf.ByteString.size:()I
            iload 3 /* binEnd */
            if_icmpge 19
        16: .line 685
            aload 0 /* this */
            getfield com.google.protobuf.RopeByteString$Balancer.prefixesStack:Ljava/util/ArrayDeque;
            invokevirtual java.util.ArrayDeque.pop:()Ljava/lang/Object;
            checkcast com.google.protobuf.ByteString
            astore 6 /* left */
        start local 6 // com.google.protobuf.ByteString left
        17: .line 686
            new com.google.protobuf.RopeByteString
            dup
            aload 6 /* left */
            aload 5 /* newTree */
            invokespecial com.google.protobuf.RopeByteString.<init>:(Lcom/google/protobuf/ByteString;Lcom/google/protobuf/ByteString;)V
            astore 5 /* newTree */
        end local 6 // com.google.protobuf.ByteString left
        18: .line 681
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.google.protobuf.RopeByteString$Balancer.prefixesStack:Ljava/util/ArrayDeque;
            invokevirtual java.util.ArrayDeque.isEmpty:()Z
            ifeq 13
        19: .line 691
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.google.protobuf.RopeByteString$Balancer.prefixesStack:Ljava/util/ArrayDeque;
            aload 5 /* newTree */
            invokevirtual java.util.ArrayDeque.push:(Ljava/lang/Object;)V
        end local 5 // com.google.protobuf.ByteString newTree
        end local 4 // int binStart
        20: .line 693
      StackMap locals:
      StackMap stack:
            return
        end local 3 // int binEnd
        end local 2 // int depthBin
        end local 1 // com.google.protobuf.ByteString byteString
        end local 0 // com.google.protobuf.RopeByteString$Balancer this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   21     0        this  Lcom/google/protobuf/RopeByteString$Balancer;
            0   21     1  byteString  Lcom/google/protobuf/ByteString;
            1   21     2    depthBin  I
            2   21     3      binEnd  I
            6   20     4    binStart  I
            7   20     5     newTree  Lcom/google/protobuf/ByteString;
            9   10     6        left  Lcom/google/protobuf/ByteString;
           17   18     6        left  Lcom/google/protobuf/ByteString;
    MethodParameters:
            Name  Flags
      byteString  

  private int getDepthBinForLength(int);
    descriptor: (I)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // com.google.protobuf.RopeByteString$Balancer this
        start local 1 // int length
         0: .line 696
            getstatic com.google.protobuf.RopeByteString.minLengthByDepth:[I
            iload 1 /* length */
            invokestatic java.util.Arrays.binarySearch:([II)I
            istore 2 /* depth */
        start local 2 // int depth
         1: .line 697
            iload 2 /* depth */
            ifge 4
         2: .line 700
            iload 2 /* depth */
            iconst_1
            iadd
            ineg
            istore 3 /* insertionPoint */
        start local 3 // int insertionPoint
         3: .line 701
            iload 3 /* insertionPoint */
            iconst_1
            isub
            istore 2 /* depth */
        end local 3 // int insertionPoint
         4: .line 704
      StackMap locals: int
      StackMap stack:
            iload 2 /* depth */
            ireturn
        end local 2 // int depth
        end local 1 // int length
        end local 0 // com.google.protobuf.RopeByteString$Balancer this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    5     0            this  Lcom/google/protobuf/RopeByteString$Balancer;
            0    5     1          length  I
            1    5     2           depth  I
            3    4     3  insertionPoint  I
    MethodParameters:
        Name  Flags
      length  
}
SourceFile: "RopeByteString.java"
NestHost: com.google.protobuf.RopeByteString
InnerClasses:
  private Balancer = com.google.protobuf.RopeByteString$Balancer of com.google.protobuf.RopeByteString